@sjcrh/proteinpaint-client 2.42.0 → 2.42.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/{2dmaf-4c8115cb.js → 2dmaf-7f12f347.js} +1 -1
  2. package/dist/{DEanalysis-ae8b793e.js → DEanalysis-4e97eae7.js} +1 -1
  3. package/dist/{Disco-4ead6c6f.js → Disco-2910f321.js} +1 -1
  4. package/dist/{Disco.UI-a765390e.js → Disco.UI-266c3c98.js} +1 -1
  5. package/dist/{DragControls-03718ca8.js → DragControls-934cfddb.js} +1 -1
  6. package/dist/{OrbitControls-0a1bcd3b.js → OrbitControls-379215f5.js} +1 -1
  7. package/dist/{app-db79376c.js → app-53b444fe.js} +1 -1
  8. package/dist/{app-64537b0c.js → app-9ef9a482.js} +1 -1
  9. package/dist/{app-f70d9a0b.js → app-f73edb78.js} +1 -1
  10. package/dist/app.js +1 -1
  11. package/dist/{barchart-a4a6b4b4.js → barchart-5755e4b5.js} +1 -1
  12. package/dist/{barchart.events-3fd64094.js → barchart.events-cb8547bb.js} +1 -1
  13. package/dist/{bars.renderer-7c9358aa.js → bars.renderer-ffddf5f5.js} +1 -1
  14. package/dist/{block-ec15b4b6.js → block-06e306e9.js} +1 -1
  15. package/dist/{block.ds.gmcustomdata-4944ece7.js → block.ds.gmcustomdata-a0f1fd3e.js} +1 -1
  16. package/dist/block.lazyload-e9a6e4fc.js +1 -0
  17. package/dist/{block.legend-ebe13fbd.js → block.legend-ae9c9047.js} +1 -1
  18. package/dist/{block.mds-52af63e1.js → block.mds-125e263c.js} +1 -1
  19. package/dist/{block.mds.cnv-a40ea2e4.js → block.mds.cnv-80691b84.js} +1 -1
  20. package/dist/{block.mds.expressionrank-7357fa79.js → block.mds.expressionrank-8a4c69bb.js} +1 -1
  21. package/dist/{block.mds.expressionstat-4c3dcb37.js → block.mds.expressionstat-7ac00a72.js} +1 -1
  22. package/dist/{block.mds.geneboxplot-ba99239a.js → block.mds.geneboxplot-ec043226.js} +1 -1
  23. package/dist/{block.mds.junction-6b881504.js → block.mds.junction-5d744e19.js} +1 -1
  24. package/dist/{block.mds.svcnv-5bd2e65b.js → block.mds.svcnv-8aec47ec.js} +1 -1
  25. package/dist/{block.mds.svcnv.share-ebe307d2.js → block.mds.svcnv.share-eb86d7b0.js} +1 -1
  26. package/dist/{block.mds2-a039e999.js → block.mds2-08b79c5e.js} +1 -1
  27. package/dist/{block.svg-742bcd6f.js → block.svg-ca8e74f1.js} +1 -1
  28. package/dist/{block.tk.aicheck-c16f7c33.js → block.tk.aicheck-8c8c74ca.js} +1 -1
  29. package/dist/{block.tk.ase-5bd73577.js → block.tk.ase-27f2e649.js} +1 -1
  30. package/dist/{block.tk.bam-f39283bf.js → block.tk.bam-5d0cc18f.js} +1 -1
  31. package/dist/{block.tk.bam.gdc-66964f1c.js → block.tk.bam.gdc-318db418.js} +1 -1
  32. package/dist/{block.tk.bedgraphdot-d05f27a0.js → block.tk.bedgraphdot-1b5d99db.js} +1 -1
  33. package/dist/{block.tk.bigwig.ui-964986f8.js → block.tk.bigwig.ui-bc0afbf9.js} +1 -1
  34. package/dist/{block.tk.hicstraw-972dd3d4.js → block.tk.hicstraw-64610b08.js} +1 -1
  35. package/dist/{block.tk.junction-4e33561e.js → block.tk.junction-0febb7c5.js} +1 -1
  36. package/dist/{block.tk.junction.textmatrixui-e9fe9446.js → block.tk.junction.textmatrixui-11649433.js} +1 -1
  37. package/dist/{block.tk.ld-880fe55f.js → block.tk.ld-2449943d.js} +1 -1
  38. package/dist/{block.tk.menu-16e5a387.js → block.tk.menu-f4e2c9a6.js} +1 -1
  39. package/dist/{block.tk.pgv-daf6e812.js → block.tk.pgv-ac78e412.js} +1 -1
  40. package/dist/{boxplot-28751534.js → boxplot-cf99d543.js} +1 -1
  41. package/dist/{brush-bc06febc.js → brush-33697636.js} +1 -1
  42. package/dist/{categorical-c86731fd.js → categorical-024a02d0.js} +1 -1
  43. package/dist/{condition-59895ac1.js → condition-4c5195a9.js} +1 -1
  44. package/dist/{controls-cd2ff09c.js → controls-93c1b3a5.js} +1 -1
  45. package/dist/{controls.btns-86a413d5.js → controls.btns-af5280bd.js} +1 -1
  46. package/dist/{controls.config-ae99bcd1.js → controls.config-d936ea41.js} +1 -1
  47. package/dist/{controls.divide-8f26abff.js → controls.divide-e988fa36.js} +1 -1
  48. package/dist/{controls.overlay-a72d72e4.js → controls.overlay-9bfc642f.js} +1 -1
  49. package/dist/{controls.term1-3c9e55b8.js → controls.term1-62150931.js} +1 -1
  50. package/dist/{cuminc-e7326248.js → cuminc-9c7ff331.js} +1 -1
  51. package/dist/{dataDownload-f3cdbc7c.js → dataDownload-1f61a3fd.js} +1 -1
  52. package/dist/{databrowser.ui-52855244.js → databrowser.ui-0803623f.js} +1 -1
  53. package/dist/{density-33ec5f83.js → density-4ca7f14f.js} +1 -1
  54. package/dist/{dictionary-578c63d9.js → dictionary-943a4cd2.js} +1 -1
  55. package/dist/{drag-e2fbde14.js → drag-19604a2e.js} +1 -1
  56. package/dist/{e2pca-fa8ce887.js → e2pca-e18c801f.js} +1 -1
  57. package/dist/{ep-b51b82d5.js → ep-708f0514.js} +1 -1
  58. package/dist/{filter-5a5a1166.js → filter-6b0bd66e.js} +1 -1
  59. package/dist/{fusion.parse-d20a9d3d.js → fusion.parse-206fa8af.js} +1 -1
  60. package/dist/{gdc.maf-ced4bc13.js → gdc.maf-84509ef3.js} +1 -1
  61. package/dist/{gdc.singleCell-1fc3a5b9.js → gdc.singleCell-350d7e63.js} +1 -1
  62. package/dist/{geneExpression-0d0e9692.js → geneExpression-ef1eda3f.js} +1 -1
  63. package/dist/{geneSearch4GDCmds3-b3a65ff2.js → geneSearch4GDCmds3-e9196a30.js} +1 -1
  64. package/dist/{geneVariant-1100ab96.js → geneVariant-4b5d3728.js} +1 -1
  65. package/dist/genefusion.ui-31ff953e.js +1 -0
  66. package/dist/{geneset-b37a8d83.js → geneset-48feba0c.js} +1 -1
  67. package/dist/{genesetEdit-15cec871.js → genesetEdit-34f2ee5d.js} +1 -1
  68. package/dist/{genomeBrowser-10004899.js → genomeBrowser-f175f471.js} +1 -1
  69. package/dist/{genomeBrowser.controls-2d794ff1.js → genomeBrowser.controls-674775c6.js} +1 -1
  70. package/dist/{groupsetting-eaf40465.js → groupsetting-a58e1f5a.js} +1 -1
  71. package/dist/{hic.straw-1ca9ddd0.js → hic.straw-3143889c.js} +1 -1
  72. package/dist/{hierCluster-6e93c3b2.js → hierCluster-130e5722.js} +1 -1
  73. package/dist/{hierCluster.config-9b8fa78e.js → hierCluster.config-d4fdfeac.js} +1 -1
  74. package/dist/{hierCluster.interactivity-e379aa01.js → hierCluster.interactivity-4b1534bc.js} +1 -1
  75. package/dist/{hierCluster.renderers-7b35f0cc.js → hierCluster.renderers-cd618c97.js} +1 -1
  76. package/dist/{html.legend-48cf5c03.js → html.legend-f44f18ab.js} +1 -1
  77. package/dist/{lasso-afa6b87e.js → lasso-22efae36.js} +1 -1
  78. package/dist/launch.adhoc-7639eb4a.js +1 -0
  79. package/dist/{launchGdcHierCluster-ab790040.js → launchGdcHierCluster-001bc76e.js} +1 -1
  80. package/dist/{launchGdcMatrix-48c56699.js → launchGdcMatrix-6c906351.js} +1 -1
  81. package/dist/{legacyDataset-21fdc0fe.js → legacyDataset-661691af.js} +1 -1
  82. package/dist/{log-9e964794.js → log-848ca156.js} +1 -1
  83. package/dist/{maftimeline-fc71d7a0.js → maftimeline-8b2d8513.js} +1 -1
  84. package/dist/{matrix-d644b099.js → matrix-af727a11.js} +1 -1
  85. package/dist/{matrix.cells-5db8ba9e.js → matrix.cells-7ea665f3.js} +1 -1
  86. package/dist/{matrix.cluster-88a2266e.js → matrix.cluster-33321b79.js} +1 -1
  87. package/dist/{matrix.config-85132ec9.js → matrix.config-d8efc6dc.js} +1 -1
  88. package/dist/{matrix.controls-4933c41c.js → matrix.controls-b2dc0e5b.js} +1 -1
  89. package/dist/{matrix.data-b798eb7d.js → matrix.data-7feb7104.js} +1 -1
  90. package/dist/{matrix.dom-6971ecb1.js → matrix.dom-7394bd2c.js} +1 -1
  91. package/dist/{matrix.interactivity-380a57f9.js → matrix.interactivity-ff7ed88a.js} +1 -1
  92. package/dist/{matrix.layout-3165a88a.js → matrix.layout-168399d4.js} +1 -1
  93. package/dist/{matrix.legend-f0ab9a34.js → matrix.legend-10a21caa.js} +1 -1
  94. package/dist/{matrix.renderers-48826412.js → matrix.renderers-3a992e66.js} +1 -1
  95. package/dist/{matrix.serieses-610f9bc4.js → matrix.serieses-43f86542.js} +1 -1
  96. package/dist/{mavb-54aeff14.js → mavb-dc006bd3.js} +1 -1
  97. package/dist/{mds.fimo-fa2b1d1a.js → mds.fimo-fcc96802.js} +1 -1
  98. package/dist/{mds.samplescatterplot-669b4e1d.js → mds.samplescatterplot-c8732bae.js} +1 -1
  99. package/dist/{mds.survivalplot-055a1274.js → mds.survivalplot-4e72eb4b.js} +1 -1
  100. package/dist/{mdsjsonform-8d72a884.js → mdsjsonform-cd7cbed1.js} +1 -1
  101. package/dist/{nodrag-094c4b10.js → nodrag-39389c59.js} +1 -1
  102. package/dist/{numeric-939729b0.js → numeric-28b1370d.js} +1 -1
  103. package/dist/{numeric.binary-d1ada20b.js → numeric.binary-de25c5cb.js} +1 -1
  104. package/dist/{numeric.continuous-cf4fb4c0.js → numeric.continuous-78ae5f51.js} +1 -1
  105. package/dist/{numeric.discrete-ea17f823.js → numeric.discrete-7976336c.js} +1 -1
  106. package/dist/{numeric.spline-2d40b041.js → numeric.spline-1adcbe86.js} +1 -1
  107. package/dist/{numeric.toggle-7e1ae903.js → numeric.toggle-ba85b972.js} +1 -1
  108. package/dist/{plot.2dvaf-12d6ace7.js → plot.2dvaf-d8eda179.js} +1 -1
  109. package/dist/plot.app-cf29de59.js +1 -0
  110. package/dist/{plot.barplot-ab82cad5.js → plot.barplot-469de952.js} +1 -1
  111. package/dist/{plot.boxplot-d4984beb.js → plot.boxplot-29ed0bcd.js} +1 -1
  112. package/dist/{plot.disco-7efd2855.js → plot.disco-15695284.js} +1 -1
  113. package/dist/{plot.ssgq-e41ca8ac.js → plot.ssgq-ab818820.js} +1 -1
  114. package/dist/{plot.vaf2cov-0cf0bfb0.js → plot.vaf2cov-646c89ff.js} +1 -1
  115. package/dist/{polar-86a9ecb8.js → polar-57ab248e.js} +1 -1
  116. package/dist/{profileBarchart-a41a1fd8.js → profileBarchart-5eda57dd.js} +1 -1
  117. package/dist/{profileHome-1ada0bb1.js → profileHome-98d3bd09.js} +1 -1
  118. package/dist/{profilePlot-69af5e30.js → profilePlot-c1bc4e3f.js} +1 -1
  119. package/dist/{profilePolar-7446e230.js → profilePolar-d6a3ef51.js} +1 -1
  120. package/dist/{profileRadar-d23d8ebe.js → profileRadar-61cd7e72.js} +1 -1
  121. package/dist/{profileRadarFacility-9f9a324e.js → profileRadarFacility-fd292b0d.js} +1 -1
  122. package/dist/{recover-791d56f8.js → recover-97602f64.js} +1 -1
  123. package/dist/{regression.inputs-ba7b7342.js → regression.inputs-87698b93.js} +1 -1
  124. package/dist/{regression.inputs.values.table-3f6f7f0f.js → regression.inputs.values.table-be00c818.js} +1 -1
  125. package/dist/{regression.results-9bd02fe0.js → regression.results-d67d5723.js} +1 -1
  126. package/dist/{renderPvalueTable-f34371aa.js → renderPvalueTable-8ee523f4.js} +1 -1
  127. package/dist/{sampleScatter-ef4e3347.js → sampleScatter-dc8bd1d4.js} +1 -1
  128. package/dist/sampleScatter.interactivity-6b31c51d.js +1 -0
  129. package/dist/{sampleScatter.rendererThree-b0ddac07.js → sampleScatter.rendererThree-df642763.js} +2 -2
  130. package/dist/{sampleView-836462bb.js → sampleView-0d819313.js} +1 -1
  131. package/dist/{samplelst-6512a752.js → samplelst-e4224495.js} +1 -1
  132. package/dist/{samplematrix-8583e240.js → samplematrix-d77014f0.js} +1 -1
  133. package/dist/{scatter-a24646d2.js → scatter-df455b44.js} +1 -1
  134. package/dist/{selectGenomeWithTklst-c0822ac4.js → selectGenomeWithTklst-f927c08a.js} +1 -1
  135. package/dist/singleCellPlot-f4f9f8ce.js +1 -0
  136. package/dist/{singlecell-fc57d3bd.js → singlecell-d21858f6.js} +1 -1
  137. package/dist/{snplocus-502738fa.js → snplocus-cdb05467.js} +1 -1
  138. package/dist/{snplst-1b5cd5d8.js → snplst-8027603b.js} +1 -1
  139. package/dist/{spliceevent.a53ss.diagram-d6a9ec18.js → spliceevent.a53ss.diagram-305210e8.js} +1 -1
  140. package/dist/{spliceevent.exonskip.diagram-122b34c8.js → spliceevent.exonskip.diagram-b818e745.js} +1 -1
  141. package/dist/spliceevent.exonskip.getdefault-b539bbf8.js +1 -0
  142. package/dist/{spliceevent.noeventdiagram-24239df6.js → spliceevent.noeventdiagram-b8520d70.js} +1 -1
  143. package/dist/{spliceevent.phrase-3f069dbd.js → spliceevent.phrase-9e487144.js} +1 -1
  144. package/dist/{stattable-f81097a3.js → stattable-706eb093.js} +1 -1
  145. package/dist/{style.gdc-58cdad5e.js → style.gdc-0f9b5225.js} +1 -1
  146. package/dist/{summary-af438607.js → summary-e42dbeea.js} +1 -1
  147. package/dist/{sunburst-562d787b.js → sunburst-23a46601.js} +1 -1
  148. package/dist/survival-e1f95639.js +1 -0
  149. package/dist/{survival-d8c8c5b5.js → survival-fa638d4f.js} +1 -1
  150. package/dist/{svg.download-89c31ee5.js → svg.download-60935a3f.js} +1 -1
  151. package/dist/{svg.legend-5ce6961b.js → svg.legend-404a03f8.js} +1 -1
  152. package/dist/{svgraph-c326dadb.js → svgraph-22fb937c.js} +1 -1
  153. package/dist/{svmr-7de419fb.js → svmr-33a9543a.js} +1 -1
  154. package/dist/{table-141e31d7.js → table-6354b788.js} +1 -1
  155. package/dist/{table-2310e41b.js → table-dba817a9.js} +1 -1
  156. package/dist/{termInfo-3ae67507.js → termInfo-fdb502e7.js} +1 -1
  157. package/dist/{termsetting-8476b5ab.js → termsetting-720557a3.js} +1 -1
  158. package/dist/{tk-fc2e6168.js → tk-fcd7514e.js} +1 -1
  159. package/dist/{tp.ui-a59142ec.js → tp.ui-ece56c46.js} +1 -1
  160. package/dist/{tvs.density-a177d69f.js → tvs.density-411c1792.js} +1 -1
  161. package/dist/{tvs.geneVariant-68b9ca25.js → tvs.geneVariant-a6e91f37.js} +1 -1
  162. package/dist/{tvs.numeric-5c6f5524.js → tvs.numeric-358c99a0.js} +1 -1
  163. package/dist/{tvs.samplelst-3ddd4435.js → tvs.samplelst-946d4a6c.js} +1 -1
  164. package/dist/{uiUtils-60f490b2.js → uiUtils-be9b8f1b.js} +1 -1
  165. package/dist/{variantBrowser-882cd310.js → variantBrowser-91d4eb10.js} +1 -1
  166. package/dist/{vcf-ee473671.js → vcf-d8c0a17a.js} +1 -1
  167. package/dist/{violin-f96e92c7.js → violin-84138ebc.js} +1 -1
  168. package/dist/{violin.interactivity-5a9e20f2.js → violin.interactivity-31eff8d9.js} +1 -1
  169. package/dist/{violin.renderer-687d2341.js → violin.renderer-3d0d8f17.js} +1 -1
  170. package/dist/{violinRenderer-e37d4065.js → violinRenderer-ee11b031.js} +1 -1
  171. package/dist/{viridis-98237589.js → viridis-98f22f29.js} +1 -1
  172. package/dist/{y-8e1e7dad.js → y-836a433e.js} +1 -1
  173. package/dist/{zoom-eade983c.js → zoom-f044afad.js} +1 -1
  174. package/package.json +1 -1
  175. package/dist/block.lazyload-b81d268c.js +0 -1
  176. package/dist/genefusion.ui-b1264dc8.js +0 -1
  177. package/dist/launch.adhoc-50d81ba2.js +0 -1
  178. package/dist/plot.app-72083fe7.js +0 -1
  179. package/dist/sampleScatter.interactivity-22035655.js +0 -1
  180. package/dist/singleCellPlot-7caa7fdd.js +0 -1
  181. package/dist/spliceevent.exonskip.getdefault-f1bf3d40.js +0 -1
  182. package/dist/survival-e500bc6e.js +0 -1
@@ -1 +1 @@
1
- import path__default from"path";var xhtml="http://www.w3.org/1999/xhtml";var namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function namespace(e){var t=e+="",n=t.indexOf(":");if(n>=0&&(t=e.slice(0,n))!=="xmlns")e=e.slice(n+1);return namespaces.hasOwnProperty(t)?{space:namespaces[t],local:e}:e}function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===xhtml&&t.documentElement.namespaceURI===xhtml?t.createElement(e):t.createElementNS(n,e)}}function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function creator(e){var t=namespace(e);return(t.local?creatorFixed:creatorInherit)(t)}function none(){}function selector(e){return e==null?none:function(){return this.querySelector(e)}}function selection_select(e){if(typeof e!=="function")e=selector(e);for(var t=this._groups,n=t.length,o=new Array(n),s=0;s<n;++s){for(var r=t[s],i=r.length,a=o[s]=new Array(i),l,c,d=0;d<i;++d){if((l=r[d])&&(c=e.call(l,l.__data__,d,r))){if("__data__"in l)c.__data__=l.__data__;a[d]=c}}}return new Selection$1(o,this._parents)}function array(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function empty(){return[]}function selectorAll(e){return e==null?empty:function(){return this.querySelectorAll(e)}}function arrayAll(e){return function(){return array(e.apply(this,arguments))}}function selection_selectAll(e){if(typeof e==="function")e=arrayAll(e);else e=selectorAll(e);for(var t=this._groups,n=t.length,o=[],s=[],r=0;r<n;++r){for(var i=t[r],a=i.length,l,c=0;c<a;++c){if(l=i[c]){o.push(e.call(l,l.__data__,c,i));s.push(l)}}}return new Selection$1(o,s)}function matcher(e){return function(){return this.matches(e)}}function childMatcher(e){return function(t){return t.matches(e)}}var find=Array.prototype.find;function childFind(e){return function(){return find.call(this.children,e)}}function childFirst(){return this.firstElementChild}function selection_selectChild(e){return this.select(e==null?childFirst:childFind(typeof e==="function"?e:childMatcher(e)))}var filter=Array.prototype.filter;function children(){return Array.from(this.children)}function childrenFilter(e){return function(){return filter.call(this.children,e)}}function selection_selectChildren(e){return this.selectAll(e==null?children:childrenFilter(typeof e==="function"?e:childMatcher(e)))}function selection_filter(e){if(typeof e!=="function")e=matcher(e);for(var t=this._groups,n=t.length,o=new Array(n),s=0;s<n;++s){for(var r=t[s],i=r.length,a=o[s]=[],l,c=0;c<i;++c){if((l=r[c])&&e.call(l,l.__data__,c,r)){a.push(l)}}}return new Selection$1(o,this._parents)}function sparse(e){return new Array(e.length)}function selection_enter(){return new Selection$1(this._enter||this._groups.map(sparse),this._parents)}function EnterNode(e,t){this.ownerDocument=e.ownerDocument;this.namespaceURI=e.namespaceURI;this._next=null;this._parent=e;this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function constant$1(e){return function(){return e}}function bindIndex(e,t,n,o,s,r){var i=0,a,l=t.length,c=r.length;for(;i<c;++i){if(a=t[i]){a.__data__=r[i];o[i]=a}else{n[i]=new EnterNode(e,r[i])}}for(;i<l;++i){if(a=t[i]){s[i]=a}}}function bindKey(e,t,n,o,s,r,i){var a,l,c=new Map,d=t.length,p=r.length,f=new Array(d),u;for(a=0;a<d;++a){if(l=t[a]){f[a]=u=i.call(l,l.__data__,a,t)+"";if(c.has(u)){s[a]=l}else{c.set(u,l)}}}for(a=0;a<p;++a){u=i.call(e,r[a],a,r)+"";if(l=c.get(u)){o[a]=l;l.__data__=r[a];c.delete(u)}else{n[a]=new EnterNode(e,r[a])}}for(a=0;a<d;++a){if((l=t[a])&&c.get(f[a])===l){s[a]=l}}}function datum(e){return e.__data__}function selection_data(e,t){if(!arguments.length)return Array.from(this,datum);var n=t?bindKey:bindIndex,o=this._parents,s=this._groups;if(typeof e!=="function")e=constant$1(e);for(var r=s.length,i=new Array(r),a=new Array(r),l=new Array(r),c=0;c<r;++c){var d=o[c],p=s[c],f=p.length,u=arraylike(e.call(d,d&&d.__data__,c,o)),h=u.length,m=a[c]=new Array(h),g=i[c]=new Array(h),b=l[c]=new Array(f);n(d,p,m,g,b,u,t);for(var y=0,v=0,w,x;y<h;++y){if(w=m[y]){if(y>=v)v=y+1;while(!(x=g[v])&&++v<h);w._next=x||null}}}i=new Selection$1(i,o);i._enter=a;i._exit=l;return i}function arraylike(e){return typeof e==="object"&&"length"in e?e:Array.from(e)}function selection_exit(){return new Selection$1(this._exit||this._groups.map(sparse),this._parents)}function selection_join(e,t,n){var o=this.enter(),s=this,r=this.exit();if(typeof e==="function"){o=e(o);if(o)o=o.selection()}else{o=o.append(e+"")}if(t!=null){s=t(s);if(s)s=s.selection()}if(n==null)r.remove();else n(r);return o&&s?o.merge(s).order():s}function selection_merge(e){var t=e.selection?e.selection():e;for(var n=this._groups,o=t._groups,s=n.length,r=o.length,i=Math.min(s,r),a=new Array(s),l=0;l<i;++l){for(var c=n[l],d=o[l],p=c.length,f=a[l]=new Array(p),u,h=0;h<p;++h){if(u=c[h]||d[h]){f[h]=u}}}for(;l<s;++l){a[l]=n[l]}return new Selection$1(a,this._parents)}function selection_order(){for(var e=this._groups,t=-1,n=e.length;++t<n;){for(var o=e[t],s=o.length-1,r=o[s],i;--s>=0;){if(i=o[s]){if(r&&i.compareDocumentPosition(r)^4)r.parentNode.insertBefore(i,r);r=i}}}return this}function selection_sort(e){if(!e)e=ascending$1;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,o=n.length,s=new Array(o),r=0;r<o;++r){for(var i=n[r],a=i.length,l=s[r]=new Array(a),c,d=0;d<a;++d){if(c=i[d]){l[d]=c}}l.sort(t)}return new Selection$1(s,this._parents).order()}function ascending$1(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function selection_call(){var e=arguments[0];arguments[0]=this;e.apply(null,arguments);return this}function selection_nodes(){return Array.from(this)}function selection_node(){for(var e=this._groups,t=0,n=e.length;t<n;++t){for(var o=e[t],s=0,r=o.length;s<r;++s){var i=o[s];if(i)return i}}return null}function selection_size(){let e=0;for(const t of this)++e;return e}function selection_empty(){return!this.node()}function selection_each(e){for(var t=this._groups,n=0,o=t.length;n<o;++n){for(var s=t[n],r=0,i=s.length,a;r<i;++r){if(a=s[r])e.call(a,a.__data__,r,s)}}return this}function attrRemove$1(e){return function(){this.removeAttribute(e)}}function attrRemoveNS$1(e){return function(){this.removeAttributeNS(e.space,e.local)}}function attrConstant$1(e,t){return function(){this.setAttribute(e,t)}}function attrConstantNS$1(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function attrFunction$1(e,t){return function(){var n=t.apply(this,arguments);if(n==null)this.removeAttribute(e);else this.setAttribute(e,n)}}function attrFunctionNS$1(e,t){return function(){var n=t.apply(this,arguments);if(n==null)this.removeAttributeNS(e.space,e.local);else this.setAttributeNS(e.space,e.local,n)}}function selection_attr(e,t){var n=namespace(e);if(arguments.length<2){var o=this.node();return n.local?o.getAttributeNS(n.space,n.local):o.getAttribute(n)}return this.each((t==null?n.local?attrRemoveNS$1:attrRemove$1:typeof t==="function"?n.local?attrFunctionNS$1:attrFunction$1:n.local?attrConstantNS$1:attrConstant$1)(n,t))}function defaultView(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function styleRemove$1(e){return function(){this.style.removeProperty(e)}}function styleConstant$1(e,t,n){return function(){this.style.setProperty(e,t,n)}}function styleFunction$1(e,t,n){return function(){var o=t.apply(this,arguments);if(o==null)this.style.removeProperty(e);else this.style.setProperty(e,o,n)}}function selection_style(e,t,n){return arguments.length>1?this.each((t==null?styleRemove$1:typeof t==="function"?styleFunction$1:styleConstant$1)(e,t,n==null?"":n)):styleValue(this.node(),e)}function styleValue(e,t){return e.style.getPropertyValue(t)||defaultView(e).getComputedStyle(e,null).getPropertyValue(t)}function propertyRemove(e){return function(){delete this[e]}}function propertyConstant(e,t){return function(){this[e]=t}}function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);if(n==null)delete this[e];else this[e]=n}}function selection_property(e,t){return arguments.length>1?this.each((t==null?propertyRemove:typeof t==="function"?propertyFunction:propertyConstant)(e,t)):this.node()[e]}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e;this._names=classArray(e.getAttribute("class")||"")}ClassList.prototype={add:function(e){var t=this._names.indexOf(e);if(t<0){this._names.push(e);this._node.setAttribute("class",this._names.join(" "))}},remove:function(e){var t=this._names.indexOf(e);if(t>=0){this._names.splice(t,1);this._node.setAttribute("class",this._names.join(" "))}},contains:function(e){return this._names.indexOf(e)>=0}};function classedAdd(e,t){var n=classList(e),o=-1,s=t.length;while(++o<s)n.add(t[o])}function classedRemove(e,t){var n=classList(e),o=-1,s=t.length;while(++o<s)n.remove(t[o])}function classedTrue(e){return function(){classedAdd(this,e)}}function classedFalse(e){return function(){classedRemove(this,e)}}function classedFunction(e,t){return function(){(t.apply(this,arguments)?classedAdd:classedRemove)(this,e)}}function selection_classed(e,t){var n=classArray(e+"");if(arguments.length<2){var o=classList(this.node()),s=-1,r=n.length;while(++s<r)if(!o.contains(n[s]))return false;return true}return this.each((typeof t==="function"?classedFunction:t?classedTrue:classedFalse)(n,t))}function textRemove(){this.textContent=""}function textConstant$1(e){return function(){this.textContent=e}}function textFunction$1(e){return function(){var t=e.apply(this,arguments);this.textContent=t==null?"":t}}function selection_text(e){return arguments.length?this.each(e==null?textRemove:(typeof e==="function"?textFunction$1:textConstant$1)(e)):this.node().textContent}function htmlRemove(){this.innerHTML=""}function htmlConstant(e){return function(){this.innerHTML=e}}function htmlFunction(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t==null?"":t}}function selection_html(e){return arguments.length?this.each(e==null?htmlRemove:(typeof e==="function"?htmlFunction:htmlConstant)(e)):this.node().innerHTML}function raise(){if(this.nextSibling)this.parentNode.appendChild(this)}function selection_raise(){return this.each(raise)}function lower(){if(this.previousSibling)this.parentNode.insertBefore(this,this.parentNode.firstChild)}function selection_lower(){return this.each(lower)}function selection_append(e){var t=typeof e==="function"?e:creator(e);return this.select((function(){return this.appendChild(t.apply(this,arguments))}))}function constantNull(){return null}function selection_insert(e,t){var n=typeof e==="function"?e:creator(e),o=t==null?constantNull:typeof t==="function"?t:selector(t);return this.select((function(){return this.insertBefore(n.apply(this,arguments),o.apply(this,arguments)||null)}))}function remove(){var e=this.parentNode;if(e)e.removeChild(this)}function selection_remove(){return this.each(remove)}function selection_cloneShallow(){var e=this.cloneNode(false),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function selection_cloneDeep(){var e=this.cloneNode(true),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function selection_clone(e){return this.select(e?selection_cloneDeep:selection_cloneShallow)}function selection_datum(e){return arguments.length?this.property("__data__",e):this.node().__data__}function contextListener(e){return function(t){e.call(this,t,this.__data__)}}function parseTypenames$1(e){return e.trim().split(/^|\s+/).map((function(e){var t="",n=e.indexOf(".");if(n>=0)t=e.slice(n+1),e=e.slice(0,n);return{type:e,name:t}}))}function onRemove(e){return function(){var t=this.__on;if(!t)return;for(var n=0,o=-1,s=t.length,r;n<s;++n){if(r=t[n],(!e.type||r.type===e.type)&&r.name===e.name){this.removeEventListener(r.type,r.listener,r.options)}else{t[++o]=r}}if(++o)t.length=o;else delete this.__on}}function onAdd(e,t,n){return function(){var o=this.__on,s,r=contextListener(t);if(o)for(var i=0,a=o.length;i<a;++i){if((s=o[i]).type===e.type&&s.name===e.name){this.removeEventListener(s.type,s.listener,s.options);this.addEventListener(s.type,s.listener=r,s.options=n);s.value=t;return}}this.addEventListener(e.type,r,n);s={type:e.type,name:e.name,value:t,listener:r,options:n};if(!o)this.__on=[s];else o.push(s)}}function selection_on(e,t,n){var o=parseTypenames$1(e+""),s,r=o.length,i;if(arguments.length<2){var a=this.node().__on;if(a)for(var l=0,c=a.length,d;l<c;++l){for(s=0,d=a[l];s<r;++s){if((i=o[s]).type===d.type&&i.name===d.name){return d.value}}}return}a=t?onAdd:onRemove;for(s=0;s<r;++s)this.each(a(o[s],t,n));return this}function dispatchEvent(e,t,n){var o=defaultView(e),s=o.CustomEvent;if(typeof s==="function"){s=new s(t,n)}else{s=o.document.createEvent("Event");if(n)s.initEvent(t,n.bubbles,n.cancelable),s.detail=n.detail;else s.initEvent(t,false,false)}e.dispatchEvent(s)}function dispatchConstant(e,t){return function(){return dispatchEvent(this,e,t)}}function dispatchFunction(e,t){return function(){return dispatchEvent(this,e,t.apply(this,arguments))}}function selection_dispatch(e,t){return this.each((typeof t==="function"?dispatchFunction:dispatchConstant)(e,t))}function*selection_iterator(){for(var e=this._groups,t=0,n=e.length;t<n;++t){for(var o=e[t],s=0,r=o.length,i;s<r;++s){if(i=o[s])yield i}}}var root=[null];function Selection$1(e,t){this._groups=e;this._parents=t}function selection(){return new Selection$1([[document.documentElement]],root)}function selection_selection(){return this}Selection$1.prototype=selection.prototype={constructor:Selection$1,select:selection_select,selectAll:selection_selectAll,selectChild:selection_selectChild,selectChildren:selection_selectChildren,filter:selection_filter,data:selection_data,enter:selection_enter,exit:selection_exit,join:selection_join,merge:selection_merge,selection:selection_selection,order:selection_order,sort:selection_sort,call:selection_call,nodes:selection_nodes,node:selection_node,size:selection_size,empty:selection_empty,each:selection_each,attr:selection_attr,style:selection_style,property:selection_property,classed:selection_classed,text:selection_text,html:selection_html,raise:selection_raise,lower:selection_lower,append:selection_append,insert:selection_insert,remove:selection_remove,clone:selection_clone,datum:selection_datum,on:selection_on,dispatch:selection_dispatch,[Symbol.iterator]:selection_iterator};function d3select(e){return typeof e==="string"?new Selection$1([[document.querySelector(e)]],[document.documentElement]):new Selection$1([[e]],root)}function d3selectAll(e){return typeof e==="string"?new Selection$1([document.querySelectorAll(e)],[document.documentElement]):new Selection$1([array(e)],root)}function ascending(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function descending(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function bisector(e){let t,n,o;if(e.length!==2){t=ascending;n=(t,n)=>ascending(e(t),n);o=(t,n)=>e(t)-n}else{t=e===ascending||e===descending?e:zero$1;n=e;o=e}function s(e,o,s=0,r=e.length){if(s<r){if(t(o,o)!==0)return r;do{const t=s+r>>>1;if(n(e[t],o)<0)s=t+1;else r=t}while(s<r)}return s}function r(e,o,s=0,r=e.length){if(s<r){if(t(o,o)!==0)return r;do{const t=s+r>>>1;if(n(e[t],o)<=0)s=t+1;else r=t}while(s<r)}return s}function i(e,t,n=0,r=e.length){const i=s(e,t,n,r-1);return i>n&&o(e[i-1],t)>-o(e[i],t)?i-1:i}return{left:s,center:i,right:r}}function zero$1(){return 0}function number$1(e){return e===null?NaN:+e}const ascendingBisect=bisector(ascending);const bisectRight=ascendingBisect.right;bisector(number$1).center;var bisect=bisectRight;class InternMap extends Map{constructor(e,t=keyof){super();Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}});if(e!=null)for(const[t,n]of e)this.set(t,n)}get(e){return super.get(intern_get(this,e))}has(e){return super.has(intern_get(this,e))}set(e,t){return super.set(intern_set(this,e),t)}delete(e){return super.delete(intern_delete(this,e))}}function intern_get({_intern:e,_key:t},n){const o=t(n);return e.has(o)?e.get(o):n}function intern_set({_intern:e,_key:t},n){const o=t(n);if(e.has(o))return e.get(o);e.set(o,n);return n}function intern_delete({_intern:e,_key:t},n){const o=t(n);if(e.has(o)){n=e.get(o);e.delete(o)}return n}function keyof(e){return e!==null&&typeof e==="object"?e.valueOf():e}var e10=Math.sqrt(50),e5=Math.sqrt(10),e2=Math.sqrt(2);function ticks(e,t,n){var o,s=-1,r,i,a;t=+t,e=+e,n=+n;if(e===t&&n>0)return[e];if(o=t<e)r=e,e=t,t=r;if((a=tickIncrement(e,t,n))===0||!isFinite(a))return[];if(a>0){let n=Math.round(e/a),o=Math.round(t/a);if(n*a<e)++n;if(o*a>t)--o;i=new Array(r=o-n+1);while(++s<r)i[s]=(n+s)*a}else{a=-a;let n=Math.round(e*a),o=Math.round(t*a);if(n/a<e)++n;if(o/a>t)--o;i=new Array(r=o-n+1);while(++s<r)i[s]=(n+s)/a}if(o)i.reverse();return i}function tickIncrement(e,t,n){var o=(t-e)/Math.max(0,n),s=Math.floor(Math.log(o)/Math.LN10),r=o/Math.pow(10,s);return s>=0?(r>=e10?10:r>=e5?5:r>=e2?2:1)*Math.pow(10,s):-Math.pow(10,-s)/(r>=e10?10:r>=e5?5:r>=e2?2:1)}function tickStep(e,t,n){var o=Math.abs(t-e)/Math.max(0,n),s=Math.pow(10,Math.floor(Math.log(o)/Math.LN10)),r=o/s;if(r>=e10)s*=10;else if(r>=e5)s*=5;else if(r>=e2)s*=2;return t<e?-s:s}function initRange(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function initInterpolator(e,t){switch(arguments.length){case 0:break;case 1:{if(typeof e==="function")this.interpolator(e);else this.range(e);break}default:{this.domain(e);if(typeof t==="function")this.interpolator(t);else this.range(t);break}}return this}const implicit=Symbol("implicit");function ordinal(){var e=new InternMap,t=[],n=[],o=implicit;function s(s){let r=e.get(s);if(r===undefined){if(o!==implicit)return o;e.set(s,r=t.push(s)-1)}return n[r%n.length]}s.domain=function(n){if(!arguments.length)return t.slice();t=[],e=new InternMap;for(const o of n){if(e.has(o))continue;e.set(o,t.push(o)-1)}return s};s.range=function(e){return arguments.length?(n=Array.from(e),s):n.slice()};s.unknown=function(e){return arguments.length?(o=e,s):o};s.copy=function(){return ordinal(t,n).unknown(o)};initRange.apply(s,arguments);return s}function define(e,t,n){e.prototype=t.prototype=n;n.constructor=e}function extend(e,t){var n=Object.create(e.prototype);for(var o in t)n[o]=t[o];return n}function Color(){}var darker=.7;var brighter=1/darker;var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex=/^#([0-9a-f]{3,8})$/,reRgbInteger=new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),reRgbPercent=new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),reRgbaInteger=new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),reRgbaPercent=new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),reHslPercent=new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),reHslaPercent=new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);var named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};define(Color,color,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHex8:color_formatHex8,formatHsl:color_formatHsl,formatRgb:color_formatRgb,toString:color_formatRgb});function color_formatHex(){return this.rgb().formatHex()}function color_formatHex8(){return this.rgb().formatHex8()}function color_formatHsl(){return hslConvert(this).formatHsl()}function color_formatRgb(){return this.rgb().formatRgb()}function color(e){var t,n;e=(e+"").trim().toLowerCase();return(t=reHex.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?rgbn(t):n===3?new Rgb(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?rgba(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?rgba(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=reRgbInteger.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=reRgbPercent.exec(e))?new Rgb(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=reRgbaInteger.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=reRgbaPercent.exec(e))?rgba(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=reHslPercent.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=reHslaPercent.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):named.hasOwnProperty(e)?rgbn(named[e]):e==="transparent"?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,e&255,1)}function rgba(e,t,n,o){if(o<=0)e=t=n=NaN;return new Rgb(e,t,n,o)}function rgbConvert(e){if(!(e instanceof Color))e=color(e);if(!e)return new Rgb;e=e.rgb();return new Rgb(e.r,e.g,e.b,e.opacity)}function rgb(e,t,n,o){return arguments.length===1?rgbConvert(e):new Rgb(e,t,n,o==null?1:o)}function Rgb(e,t,n,o){this.r=+e;this.g=+t;this.b=+n;this.opacity=+o}define(Rgb,rgb,extend(Color,{brighter(e){e=e==null?brighter:Math.pow(brighter,e);return new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){e=e==null?darker:Math.pow(darker,e);return new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Rgb(clampi(this.r),clampi(this.g),clampi(this.b),clampa(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&(-.5<=this.g&&this.g<255.5)&&(-.5<=this.b&&this.b<255.5)&&(0<=this.opacity&&this.opacity<=1)},hex:rgb_formatHex,formatHex:rgb_formatHex,formatHex8:rgb_formatHex8,formatRgb:rgb_formatRgb,toString:rgb_formatRgb}));function rgb_formatHex(){return`#${hex(this.r)}${hex(this.g)}${hex(this.b)}`}function rgb_formatHex8(){return`#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity)?1:this.opacity)*255)}`}function rgb_formatRgb(){const e=clampa(this.opacity);return`${e===1?"rgb(":"rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${e===1?")":`, ${e})`}`}function clampa(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function clampi(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function hex(e){e=clampi(e);return(e<16?"0":"")+e.toString(16)}function hsla(e,t,n,o){if(o<=0)e=t=n=NaN;else if(n<=0||n>=1)e=t=NaN;else if(t<=0)e=NaN;return new Hsl(e,t,n,o)}function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(!(e instanceof Color))e=color(e);if(!e)return new Hsl;if(e instanceof Hsl)return e;e=e.rgb();var t=e.r/255,n=e.g/255,o=e.b/255,s=Math.min(t,n,o),r=Math.max(t,n,o),i=NaN,a=r-s,l=(r+s)/2;if(a){if(t===r)i=(n-o)/a+(n<o)*6;else if(n===r)i=(o-t)/a+2;else i=(t-n)/a+4;a/=l<.5?r+s:2-r-s;i*=60}else{a=l>0&&l<1?0:i}return new Hsl(i,a,l,e.opacity)}function hsl(e,t,n,o){return arguments.length===1?hslConvert(e):new Hsl(e,t,n,o==null?1:o)}function Hsl(e,t,n,o){this.h=+e;this.s=+t;this.l=+n;this.opacity=+o}define(Hsl,hsl,extend(Color,{brighter(e){e=e==null?brighter:Math.pow(brighter,e);return new Hsl(this.h,this.s,this.l*e,this.opacity)},darker(e){e=e==null?darker:Math.pow(darker,e);return new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,o=n+(n<.5?n:1-n)*t,s=2*n-o;return new Rgb(hsl2rgb(e>=240?e-240:e+120,s,o),hsl2rgb(e,s,o),hsl2rgb(e<120?e+240:e-120,s,o),this.opacity)},clamp(){return new Hsl(clamph(this.h),clampt(this.s),clampt(this.l),clampa(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&(0<=this.l&&this.l<=1)&&(0<=this.opacity&&this.opacity<=1)},formatHsl(){const e=clampa(this.opacity);return`${e===1?"hsl(":"hsla("}${clamph(this.h)}, ${clampt(this.s)*100}%, ${clampt(this.l)*100}%${e===1?")":`, ${e})`}`}}));function clamph(e){e=(e||0)%360;return e<0?e+360:e}function clampt(e){return Math.max(0,Math.min(1,e||0))}function hsl2rgb(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}function basis(e,t,n,o,s){var r=e*e,i=r*e;return((1-3*e+3*r-i)*t+(4-6*r+3*i)*n+(1+3*e+3*r-3*i)*o+i*s)/6}function basis$1(e){var t=e.length-1;return function(n){var o=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),s=e[o],r=e[o+1],i=o>0?e[o-1]:2*s-r,a=o<t-1?e[o+2]:2*r-s;return basis((n-o/t)*t,i,s,r,a)}}var constant=e=>()=>e;function linear$1(e,t){return function(n){return e+n*t}}function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(o){return Math.pow(e+o*t,n)}}function gamma(e){return(e=+e)===1?nogamma:function(t,n){return n-t?exponential(t,n,e):constant(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear$1(e,n):constant(isNaN(e)?t:e)}var interpolateRgb=function e(t){var n=gamma(t);function o(e,t){var o=n((e=rgb(e)).r,(t=rgb(t)).r),s=n(e.g,t.g),r=n(e.b,t.b),i=nogamma(e.opacity,t.opacity);return function(t){e.r=o(t);e.g=s(t);e.b=r(t);e.opacity=i(t);return e+""}}o.gamma=e;return o}(1);function rgbSpline(e){return function(t){var n=t.length,o=new Array(n),s=new Array(n),r=new Array(n),i,a;for(i=0;i<n;++i){a=rgb(t[i]);o[i]=a.r||0;s[i]=a.g||0;r[i]=a.b||0}o=e(o);s=e(s);r=e(r);a.opacity=1;return function(e){a.r=o(e);a.g=s(e);a.b=r(e);return a+""}}}var rgbBasis=rgbSpline(basis$1);function numberArray(e,t){if(!t)t=[];var n=e?Math.min(t.length,e.length):0,o=t.slice(),s;return function(r){for(s=0;s<n;++s)o[s]=e[s]*(1-r)+t[s]*r;return o}}function isNumberArray(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function genericArray(e,t){var n=t?t.length:0,o=e?Math.min(n,e.length):0,s=new Array(o),r=new Array(n),i;for(i=0;i<o;++i)s[i]=interpolate$1(e[i],t[i]);for(;i<n;++i)r[i]=t[i];return function(e){for(i=0;i<o;++i)r[i]=s[i](e);return r}}function date(e,t){var n=new Date;return e=+e,t=+t,function(o){return n.setTime(e*(1-o)+t*o),n}}function interpolateNumber(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function object(e,t){var n={},o={},s;if(e===null||typeof e!=="object")e={};if(t===null||typeof t!=="object")t={};for(s in t){if(s in e){n[s]=interpolate$1(e[s],t[s])}else{o[s]=t[s]}}return function(e){for(s in n)o[s]=n[s](e);return o}}var reA=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,reB=new RegExp(reA.source,"g");function zero(e){return function(){return e}}function one(e){return function(t){return e(t)+""}}function interpolateString(e,t){var n=reA.lastIndex=reB.lastIndex=0,o,s,r,i=-1,a=[],l=[];e=e+"",t=t+"";while((o=reA.exec(e))&&(s=reB.exec(t))){if((r=s.index)>n){r=t.slice(n,r);if(a[i])a[i]+=r;else a[++i]=r}if((o=o[0])===(s=s[0])){if(a[i])a[i]+=s;else a[++i]=s}else{a[++i]=null;l.push({i:i,x:interpolateNumber(o,s)})}n=reB.lastIndex}if(n<t.length){r=t.slice(n);if(a[i])a[i]+=r;else a[++i]=r}return a.length<2?l[0]?one(l[0].x):zero(t):(t=l.length,function(e){for(var n=0,o;n<t;++n)a[(o=l[n]).i]=o.x(e);return a.join("")})}function interpolate$1(e,t){var n=typeof t,o;return t==null||n==="boolean"?constant(t):(n==="number"?interpolateNumber:n==="string"?(o=color(t))?(t=o,interpolateRgb):interpolateString:t instanceof color?interpolateRgb:t instanceof Date?date:isNumberArray(t)?numberArray:Array.isArray(t)?genericArray:typeof t.valueOf!=="function"&&typeof t.toString!=="function"||isNaN(t)?object:interpolateNumber)(e,t)}function interpolateRound(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}var degrees=180/Math.PI;var identity$2={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function decompose(e,t,n,o,s,r){var i,a,l;if(i=Math.sqrt(e*e+t*t))e/=i,t/=i;if(l=e*n+t*o)n-=e*l,o-=t*l;if(a=Math.sqrt(n*n+o*o))n/=a,o/=a,l/=a;if(e*o<t*n)e=-e,t=-t,l=-l,i=-i;return{translateX:s,translateY:r,rotate:Math.atan2(t,e)*degrees,skewX:Math.atan(l)*degrees,scaleX:i,scaleY:a}}var svgNode;function parseCss(e){const t=new(typeof DOMMatrix==="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?identity$2:decompose(t.a,t.b,t.c,t.d,t.e,t.f)}function parseSvg(e){if(e==null)return identity$2;if(!svgNode)svgNode=document.createElementNS("http://www.w3.org/2000/svg","g");svgNode.setAttribute("transform",e);if(!(e=svgNode.transform.baseVal.consolidate()))return identity$2;e=e.matrix;return decompose(e.a,e.b,e.c,e.d,e.e,e.f)}function interpolateTransform(e,t,n,o){function s(e){return e.length?e.pop()+" ":""}function r(e,o,s,r,i,a){if(e!==s||o!==r){var l=i.push("translate(",null,t,null,n);a.push({i:l-4,x:interpolateNumber(e,s)},{i:l-2,x:interpolateNumber(o,r)})}else if(s||r){i.push("translate("+s+t+r+n)}}function i(e,t,n,r){if(e!==t){if(e-t>180)t+=360;else if(t-e>180)e+=360;r.push({i:n.push(s(n)+"rotate(",null,o)-2,x:interpolateNumber(e,t)})}else if(t){n.push(s(n)+"rotate("+t+o)}}function a(e,t,n,r){if(e!==t){r.push({i:n.push(s(n)+"skewX(",null,o)-2,x:interpolateNumber(e,t)})}else if(t){n.push(s(n)+"skewX("+t+o)}}function l(e,t,n,o,r,i){if(e!==n||t!==o){var a=r.push(s(r)+"scale(",null,",",null,")");i.push({i:a-4,x:interpolateNumber(e,n)},{i:a-2,x:interpolateNumber(t,o)})}else if(n!==1||o!==1){r.push(s(r)+"scale("+n+","+o+")")}}return function(t,n){var o=[],s=[];t=e(t),n=e(n);r(t.translateX,t.translateY,n.translateX,n.translateY,o,s);i(t.rotate,n.rotate,o,s);a(t.skewX,n.skewX,o,s);l(t.scaleX,t.scaleY,n.scaleX,n.scaleY,o,s);t=n=null;return function(e){var t=-1,n=s.length,r;while(++t<n)o[(r=s[t]).i]=r.x(e);return o.join("")}}}var interpolateTransformCss=interpolateTransform(parseCss,"px, ","px)","deg)");var interpolateTransformSvg=interpolateTransform(parseSvg,", ",")",")");function constants(e){return function(){return e}}function number(e){return+e}var unit=[0,1];function identity$1(e){return e}function normalize$1(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:constants(isNaN(t)?NaN:.5)}function clamper(e,t){var n;if(e>t)n=e,e=t,t=n;return function(n){return Math.max(e,Math.min(t,n))}}function bimap(e,t,n){var o=e[0],s=e[1],r=t[0],i=t[1];if(s<o)o=normalize$1(s,o),r=n(i,r);else o=normalize$1(o,s),r=n(r,i);return function(e){return r(o(e))}}function polymap(e,t,n){var o=Math.min(e.length,t.length)-1,s=new Array(o),r=new Array(o),i=-1;if(e[o]<e[0]){e=e.slice().reverse();t=t.slice().reverse()}while(++i<o){s[i]=normalize$1(e[i],e[i+1]);r[i]=n(t[i],t[i+1])}return function(t){var n=bisect(e,t,1,o)-1;return r[n](s[n](t))}}function copy(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function transformer(){var e=unit,t=unit,n=interpolate$1,o,s,r,i=identity$1,a,l,c;function d(){var n=Math.min(e.length,t.length);if(i!==identity$1)i=clamper(e[0],e[n-1]);a=n>2?polymap:bimap;l=c=null;return p}function p(s){return s==null||isNaN(s=+s)?r:(l||(l=a(e.map(o),t,n)))(o(i(s)))}p.invert=function(n){return i(s((c||(c=a(t,e.map(o),interpolateNumber)))(n)))};p.domain=function(t){return arguments.length?(e=Array.from(t,number),d()):e.slice()};p.range=function(e){return arguments.length?(t=Array.from(e),d()):t.slice()};p.rangeRound=function(e){return t=Array.from(e),n=interpolateRound,d()};p.clamp=function(e){return arguments.length?(i=e?true:identity$1,d()):i!==identity$1};p.interpolate=function(e){return arguments.length?(n=e,d()):n};p.unknown=function(e){return arguments.length?(r=e,p):r};return function(e,t){o=e,s=t;return d()}}function continuous(){return transformer()(identity$1,identity$1)}function formatDecimal(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function formatDecimalParts(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,o=e.slice(0,n);return[o.length>1?o[0]+o.slice(2):o,+e.slice(n+1)]}function exponent(e){return e=formatDecimalParts(Math.abs(e)),e?e[1]:NaN}function formatGroup(e,t){return function(n,o){var s=n.length,r=[],i=0,a=e[0],l=0;while(s>0&&a>0){if(l+a+1>o)a=Math.max(1,o-l);r.push(n.substring(s-=a,s+a));if((l+=a+1)>o)break;a=e[i=(i+1)%e.length]}return r.reverse().join(t)}}function formatNumerals(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}var re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){if(!(t=re.exec(e)))throw new Error("invalid format: "+e);var t;return new FormatSpecifier({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}formatSpecifier.prototype=FormatSpecifier.prototype;function FormatSpecifier(e){this.fill=e.fill===undefined?" ":e.fill+"";this.align=e.align===undefined?">":e.align+"";this.sign=e.sign===undefined?"-":e.sign+"";this.symbol=e.symbol===undefined?"":e.symbol+"";this.zero=!!e.zero;this.width=e.width===undefined?undefined:+e.width;this.comma=!!e.comma;this.precision=e.precision===undefined?undefined:+e.precision;this.trim=!!e.trim;this.type=e.type===undefined?"":e.type+""}FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===undefined?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===undefined?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function formatTrim(e){e:for(var t=e.length,n=1,o=-1,s;n<t;++n){switch(e[n]){case".":o=s=n;break;case"0":if(o===0)o=n;s=n;break;default:if(!+e[n])break e;if(o>0)o=0;break}}return o>0?e.slice(0,o)+e.slice(s+1):e}var prefixExponent;function formatPrefixAuto(e,t){var n=formatDecimalParts(e,t);if(!n)return e+"";var o=n[0],s=n[1],r=s-(prefixExponent=Math.max(-8,Math.min(8,Math.floor(s/3)))*3)+1,i=o.length;return r===i?o:r>i?o+new Array(r-i+1).join("0"):r>0?o.slice(0,r)+"."+o.slice(r):"0."+new Array(1-r).join("0")+formatDecimalParts(e,Math.max(0,t+r-1))[0]}function formatRounded(e,t){var n=formatDecimalParts(e,t);if(!n)return e+"";var o=n[0],s=n[1];return s<0?"0."+new Array(-s).join("0")+o:o.length>s+1?o.slice(0,s+1)+"."+o.slice(s+1):o+new Array(s-o.length+2).join("0")}var formatTypes={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:formatDecimal,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>formatRounded(e*100,t),r:formatRounded,s:formatPrefixAuto,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function identity(e){return e}var map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function formatLocale(e){var t=e.grouping===undefined||e.thousands===undefined?identity:formatGroup(map.call(e.grouping,Number),e.thousands+""),n=e.currency===undefined?"":e.currency[0]+"",o=e.currency===undefined?"":e.currency[1]+"",s=e.decimal===undefined?".":e.decimal+"",r=e.numerals===undefined?identity:formatNumerals(map.call(e.numerals,String)),i=e.percent===undefined?"%":e.percent+"",a=e.minus===undefined?"−":e.minus+"",l=e.nan===undefined?"NaN":e.nan+"";function c(e){e=formatSpecifier(e);var c=e.fill,d=e.align,p=e.sign,f=e.symbol,u=e.zero,h=e.width,m=e.comma,g=e.precision,b=e.trim,y=e.type;if(y==="n")m=true,y="g";else if(!formatTypes[y])g===undefined&&(g=12),b=true,y="g";if(u||c==="0"&&d==="=")u=true,c="0",d="=";var v=f==="$"?n:f==="#"&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",w=f==="$"?o:/[%p]/.test(y)?i:"";var x=formatTypes[y],_=/[defgprs%]/.test(y);g=g===undefined?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g));function k(e){var n=v,o=w,i,f,k;if(y==="c"){o=x(e)+o;e=""}else{e=+e;var j=e<0||1/e<0;e=isNaN(e)?l:x(Math.abs(e),g);if(b)e=formatTrim(e);if(j&&+e===0&&p!=="+")j=false;n=(j?p==="("?p:a:p==="-"||p==="("?"":p)+n;o=(y==="s"?prefixes[8+prefixExponent/3]:"")+o+(j&&p==="("?")":"");if(_){i=-1,f=e.length;while(++i<f){if(k=e.charCodeAt(i),48>k||k>57){o=(k===46?s+e.slice(i+1):e.slice(i))+o;e=e.slice(0,i);break}}}}if(m&&!u)e=t(e,Infinity);var N=n.length+e.length+o.length,S=N<h?new Array(h-N+1).join(c):"";if(m&&u)e=t(S+e,S.length?h-o.length:Infinity),S="";switch(d){case"<":e=n+e+o+S;break;case"=":e=n+S+e+o;break;case"^":e=S.slice(0,N=S.length>>1)+n+e+o+S.slice(N);break;default:e=S+n+e+o;break}return r(e)}k.toString=function(){return e+""};return k}function d(e,t){var n=c((e=formatSpecifier(e),e.type="f",e)),o=Math.max(-8,Math.min(8,Math.floor(exponent(t)/3)))*3,s=Math.pow(10,-o),r=prefixes[8+o/3];return function(e){return n(s*e)+r}}return{format:c,formatPrefix:d}}var locale;var format;var formatPrefix;defaultLocale({thousands:",",grouping:[3],currency:["$",""]});function defaultLocale(e){locale=formatLocale(e);format=locale.format;formatPrefix=locale.formatPrefix;return locale}function precisionFixed(e){return Math.max(0,-exponent(Math.abs(e)))}function precisionPrefix(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(exponent(t)/3)))*3-exponent(Math.abs(e)))}function precisionRound(e,t){e=Math.abs(e),t=Math.abs(t)-e;return Math.max(0,exponent(t)-exponent(e))+1}function tickFormat(e,t,n,o){var s=tickStep(e,t,n),r;o=formatSpecifier(o==null?",f":o);switch(o.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));if(o.precision==null&&!isNaN(r=precisionPrefix(s,i)))o.precision=r;return formatPrefix(o,i)}case"":case"e":case"g":case"p":case"r":{if(o.precision==null&&!isNaN(r=precisionRound(s,Math.max(Math.abs(e),Math.abs(t)))))o.precision=r-(o.type==="e");break}case"f":case"%":{if(o.precision==null&&!isNaN(r=precisionFixed(s)))o.precision=r-(o.type==="%")*2;break}}return format(o)}function linearish(e){var t=e.domain;e.ticks=function(e){var n=t();return ticks(n[0],n[n.length-1],e==null?10:e)};e.tickFormat=function(e,n){var o=t();return tickFormat(o[0],o[o.length-1],e==null?10:e,n)};e.nice=function(n){if(n==null)n=10;var o=t();var s=0;var r=o.length-1;var i=o[s];var a=o[r];var l;var c;var d=10;if(a<i){c=i,i=a,a=c;c=s,s=r,r=c}while(d-- >0){c=tickIncrement(i,a,n);if(c===l){o[s]=i;o[r]=a;return t(o)}else if(c>0){i=Math.floor(i/c)*c;a=Math.ceil(a/c)*c}else if(c<0){i=Math.ceil(i*c)/c;a=Math.floor(a*c)/c}else{break}l=c}return e};return e}function linear(){var e=continuous();e.copy=function(){return copy(e,linear())};initRange.apply(e,arguments);return linearish(e)}var noop={value:()=>{}};function dispatch(){for(var e=0,t=arguments.length,n={},o;e<t;++e){if(!(o=arguments[e]+"")||o in n||/[\s.]/.test(o))throw new Error("illegal type: "+o);n[o]=[]}return new Dispatch(n)}function Dispatch(e){this._=e}function parseTypenames(e,t){return e.trim().split(/^|\s+/).map((function(e){var n="",o=e.indexOf(".");if(o>=0)n=e.slice(o+1),e=e.slice(0,o);if(e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}}))}Dispatch.prototype=dispatch.prototype={constructor:Dispatch,on:function(e,t){var n=this._,o=parseTypenames(e+"",n),s,r=-1,i=o.length;if(arguments.length<2){while(++r<i)if((s=(e=o[r]).type)&&(s=get$1(n[s],e.name)))return s;return}if(t!=null&&typeof t!=="function")throw new Error("invalid callback: "+t);while(++r<i){if(s=(e=o[r]).type)n[s]=set$1(n[s],e.name,t);else if(t==null)for(s in n)n[s]=set$1(n[s],e.name,null)}return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Dispatch(e)},call:function(e,t){if((s=arguments.length-2)>0)for(var n=new Array(s),o=0,s,r;o<s;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(r=this._[e],o=0,s=r.length;o<s;++o)r[o].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var o=this._[e],s=0,r=o.length;s<r;++s)o[s].value.apply(t,n)}};function get$1(e,t){for(var n=0,o=e.length,s;n<o;++n){if((s=e[n]).name===t){return s.value}}}function set$1(e,t,n){for(var o=0,s=e.length;o<s;++o){if(e[o].name===t){e[o]=noop,e=e.slice(0,o).concat(e.slice(o+1));break}}if(n!=null)e.push({name:t,value:n});return e}var frame=0,timeout$1=0,interval=0,pokeDelay=1e3,taskHead,taskTail,clockLast=0,clockNow=0,clockSkew=0,clock=typeof performance==="object"&&performance.now?performance:Date,setFrame=typeof window==="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function now(){return clockNow||(setFrame(clearNow),clockNow=clock.now()+clockSkew)}function clearNow(){clockNow=0}function Timer(){this._call=this._time=this._next=null}Timer.prototype=timer.prototype={constructor:Timer,restart:function(e,t,n){if(typeof e!=="function")throw new TypeError("callback is not a function");n=(n==null?now():+n)+(t==null?0:+t);if(!this._next&&taskTail!==this){if(taskTail)taskTail._next=this;else taskHead=this;taskTail=this}this._call=e;this._time=n;sleep()},stop:function(){if(this._call){this._call=null;this._time=Infinity;sleep()}}};function timer(e,t,n){var o=new Timer;o.restart(e,t,n);return o}function timerFlush(){now();++frame;var e=taskHead,t;while(e){if((t=clockNow-e._time)>=0)e._call.call(undefined,t);e=e._next}--frame}function wake(){clockNow=(clockLast=clock.now())+clockSkew;frame=timeout$1=0;try{timerFlush()}finally{frame=0;nap();clockNow=0}}function poke(){var e=clock.now(),t=e-clockLast;if(t>pokeDelay)clockSkew-=t,clockLast=e}function nap(){var e,t=taskHead,n,o=Infinity;while(t){if(t._call){if(o>t._time)o=t._time;e=t,t=t._next}else{n=t._next,t._next=null;t=e?e._next=n:taskHead=n}}taskTail=e;sleep(o)}function sleep(e){if(frame)return;if(timeout$1)timeout$1=clearTimeout(timeout$1);var t=e-clockNow;if(t>24){if(e<Infinity)timeout$1=setTimeout(wake,e-clock.now()-clockSkew);if(interval)interval=clearInterval(interval)}else{if(!interval)clockLast=clock.now(),interval=setInterval(poke,pokeDelay);frame=1,setFrame(wake)}}function timeout(e,t,n){var o=new Timer;t=t==null?0:+t;o.restart((n=>{o.stop();e(n+t)}),t,n);return o}var emptyOn=dispatch("start","end","cancel","interrupt");var emptyTween=[];var CREATED=0;var SCHEDULED=1;var STARTING=2;var STARTED=3;var RUNNING=4;var ENDING=5;var ENDED=6;function schedule(e,t,n,o,s,r){var i=e.__transition;if(!i)e.__transition={};else if(n in i)return;create(e,n,{name:t,index:o,group:s,on:emptyOn,tween:emptyTween,time:r.time,delay:r.delay,duration:r.duration,ease:r.ease,timer:null,state:CREATED})}function init(e,t){var n=get(e,t);if(n.state>CREATED)throw new Error("too late; already scheduled");return n}function set(e,t){var n=get(e,t);if(n.state>STARTED)throw new Error("too late; already running");return n}function get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function create(e,t,n){var o=e.__transition,s;o[t]=n;n.timer=timer(r,0,n.time);function r(e){n.state=SCHEDULED;n.timer.restart(i,n.delay,n.time);if(n.delay<=e)i(e-n.delay)}function i(r){var c,d,p,f;if(n.state!==SCHEDULED)return l();for(c in o){f=o[c];if(f.name!==n.name)continue;if(f.state===STARTED)return timeout(i);if(f.state===RUNNING){f.state=ENDED;f.timer.stop();f.on.call("interrupt",e,e.__data__,f.index,f.group);delete o[c]}else if(+c<t){f.state=ENDED;f.timer.stop();f.on.call("cancel",e,e.__data__,f.index,f.group);delete o[c]}}timeout((function(){if(n.state===STARTED){n.state=RUNNING;n.timer.restart(a,n.delay,n.time);a(r)}}));n.state=STARTING;n.on.call("start",e,e.__data__,n.index,n.group);if(n.state!==STARTING)return;n.state=STARTED;s=new Array(p=n.tween.length);for(c=0,d=-1;c<p;++c){if(f=n.tween[c].value.call(e,e.__data__,n.index,n.group)){s[++d]=f}}s.length=d+1}function a(t){var o=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(l),n.state=ENDING,1),r=-1,i=s.length;while(++r<i){s[r].call(e,o)}if(n.state===ENDING){n.on.call("end",e,e.__data__,n.index,n.group);l()}}function l(){n.state=ENDED;n.timer.stop();delete o[t];for(var s in o)return;delete e.__transition}}function interrupt(e,t){var n=e.__transition,o,s,r=true,i;if(!n)return;t=t==null?null:t+"";for(i in n){if((o=n[i]).name!==t){r=false;continue}s=o.state>STARTING&&o.state<ENDING;o.state=ENDED;o.timer.stop();o.on.call(s?"interrupt":"cancel",e,e.__data__,o.index,o.group);delete n[i]}if(r)delete e.__transition}function selection_interrupt(e){return this.each((function(){interrupt(this,e)}))}function tweenRemove(e,t){var n,o;return function(){var s=set(this,e),r=s.tween;if(r!==n){o=n=r;for(var i=0,a=o.length;i<a;++i){if(o[i].name===t){o=o.slice();o.splice(i,1);break}}}s.tween=o}}function tweenFunction(e,t,n){var o,s;if(typeof n!=="function")throw new Error;return function(){var r=set(this,e),i=r.tween;if(i!==o){s=(o=i).slice();for(var a={name:t,value:n},l=0,c=s.length;l<c;++l){if(s[l].name===t){s[l]=a;break}}if(l===c)s.push(a)}r.tween=s}}function transition_tween(e,t){var n=this._id;e+="";if(arguments.length<2){var o=get(this.node(),n).tween;for(var s=0,r=o.length,i;s<r;++s){if((i=o[s]).name===e){return i.value}}return null}return this.each((t==null?tweenRemove:tweenFunction)(n,e,t))}function tweenValue(e,t,n){var o=e._id;e.each((function(){var e=set(this,o);(e.value||(e.value={}))[t]=n.apply(this,arguments)}));return function(e){return get(e,o).value[t]}}function interpolate(e,t){var n;return(typeof t==="number"?interpolateNumber:t instanceof color?interpolateRgb:(n=color(t))?(t=n,interpolateRgb):interpolateString)(e,t)}function attrRemove(e){return function(){this.removeAttribute(e)}}function attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}function attrConstant(e,t,n){var o,s=n+"",r;return function(){var i=this.getAttribute(e);return i===s?null:i===o?r:r=t(o=i,n)}}function attrConstantNS(e,t,n){var o,s=n+"",r;return function(){var i=this.getAttributeNS(e.space,e.local);return i===s?null:i===o?r:r=t(o=i,n)}}function attrFunction(e,t,n){var o,s,r;return function(){var i,a=n(this),l;if(a==null)return void this.removeAttribute(e);i=this.getAttribute(e);l=a+"";return i===l?null:i===o&&l===s?r:(s=l,r=t(o=i,a))}}function attrFunctionNS(e,t,n){var o,s,r;return function(){var i,a=n(this),l;if(a==null)return void this.removeAttributeNS(e.space,e.local);i=this.getAttributeNS(e.space,e.local);l=a+"";return i===l?null:i===o&&l===s?r:(s=l,r=t(o=i,a))}}function transition_attr(e,t){var n=namespace(e),o=n==="transform"?interpolateTransformSvg:interpolate;return this.attrTween(e,typeof t==="function"?(n.local?attrFunctionNS:attrFunction)(n,o,tweenValue(this,"attr."+e,t)):t==null?(n.local?attrRemoveNS:attrRemove)(n):(n.local?attrConstantNS:attrConstant)(n,o,t))}function attrInterpolate(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function attrInterpolateNS(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function attrTweenNS(e,t){var n,o;function s(){var s=t.apply(this,arguments);if(s!==o)n=(o=s)&&attrInterpolateNS(e,s);return n}s._value=t;return s}function attrTween(e,t){var n,o;function s(){var s=t.apply(this,arguments);if(s!==o)n=(o=s)&&attrInterpolate(e,s);return n}s._value=t;return s}function transition_attrTween(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=="function")throw new Error;var o=namespace(e);return this.tween(n,(o.local?attrTweenNS:attrTween)(o,t))}function delayFunction(e,t){return function(){init(this,e).delay=+t.apply(this,arguments)}}function delayConstant(e,t){return t=+t,function(){init(this,e).delay=t}}function transition_delay(e){var t=this._id;return arguments.length?this.each((typeof e==="function"?delayFunction:delayConstant)(t,e)):get(this.node(),t).delay}function durationFunction(e,t){return function(){set(this,e).duration=+t.apply(this,arguments)}}function durationConstant(e,t){return t=+t,function(){set(this,e).duration=t}}function transition_duration(e){var t=this._id;return arguments.length?this.each((typeof e==="function"?durationFunction:durationConstant)(t,e)):get(this.node(),t).duration}function easeConstant(e,t){if(typeof t!=="function")throw new Error;return function(){set(this,e).ease=t}}function transition_ease(e){var t=this._id;return arguments.length?this.each(easeConstant(t,e)):get(this.node(),t).ease}function easeVarying(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=="function")throw new Error;set(this,e).ease=n}}function transition_easeVarying(e){if(typeof e!=="function")throw new Error;return this.each(easeVarying(this._id,e))}function transition_filter(e){if(typeof e!=="function")e=matcher(e);for(var t=this._groups,n=t.length,o=new Array(n),s=0;s<n;++s){for(var r=t[s],i=r.length,a=o[s]=[],l,c=0;c<i;++c){if((l=r[c])&&e.call(l,l.__data__,c,r)){a.push(l)}}}return new Transition(o,this._parents,this._name,this._id)}function transition_merge(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,o=t.length,s=n.length,r=Math.min(o,s),i=new Array(o),a=0;a<r;++a){for(var l=t[a],c=n[a],d=l.length,p=i[a]=new Array(d),f,u=0;u<d;++u){if(f=l[u]||c[u]){p[u]=f}}}for(;a<o;++a){i[a]=t[a]}return new Transition(i,this._parents,this._name,this._id)}function start(e){return(e+"").trim().split(/^|\s+/).every((function(e){var t=e.indexOf(".");if(t>=0)e=e.slice(0,t);return!e||e==="start"}))}function onFunction(e,t,n){var o,s,r=start(t)?init:set;return function(){var i=r(this,e),a=i.on;if(a!==o)(s=(o=a).copy()).on(t,n);i.on=s}}function transition_on(e,t){var n=this._id;return arguments.length<2?get(this.node(),n).on.on(e):this.each(onFunction(n,e,t))}function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;if(t)t.removeChild(this)}}function transition_remove(){return this.on("end.remove",removeFunction(this._id))}function transition_select(e){var t=this._name,n=this._id;if(typeof e!=="function")e=selector(e);for(var o=this._groups,s=o.length,r=new Array(s),i=0;i<s;++i){for(var a=o[i],l=a.length,c=r[i]=new Array(l),d,p,f=0;f<l;++f){if((d=a[f])&&(p=e.call(d,d.__data__,f,a))){if("__data__"in d)p.__data__=d.__data__;c[f]=p;schedule(c[f],t,n,f,c,get(d,n))}}}return new Transition(r,this._parents,t,n)}function transition_selectAll(e){var t=this._name,n=this._id;if(typeof e!=="function")e=selectorAll(e);for(var o=this._groups,s=o.length,r=[],i=[],a=0;a<s;++a){for(var l=o[a],c=l.length,d,p=0;p<c;++p){if(d=l[p]){for(var f=e.call(d,d.__data__,p,l),u,h=get(d,n),m=0,g=f.length;m<g;++m){if(u=f[m]){schedule(u,t,n,m,f,h)}}r.push(f);i.push(d)}}}return new Transition(r,i,t,n)}var Selection=selection.prototype.constructor;function transition_selection(){return new Selection(this._groups,this._parents)}function styleNull(e,t){var n,o,s;return function(){var r=styleValue(this,e),i=(this.style.removeProperty(e),styleValue(this,e));return r===i?null:r===n&&i===o?s:s=t(n=r,o=i)}}function styleRemove(e){return function(){this.style.removeProperty(e)}}function styleConstant(e,t,n){var o,s=n+"",r;return function(){var i=styleValue(this,e);return i===s?null:i===o?r:r=t(o=i,n)}}function styleFunction(e,t,n){var o,s,r;return function(){var i=styleValue(this,e),a=n(this),l=a+"";if(a==null)l=a=(this.style.removeProperty(e),styleValue(this,e));return i===l?null:i===o&&l===s?r:(s=l,r=t(o=i,a))}}function styleMaybeRemove(e,t){var n,o,s,r="style."+t,i="end."+r,a;return function(){var l=set(this,e),c=l.on,d=l.value[r]==null?a||(a=styleRemove(t)):undefined;if(c!==n||s!==d)(o=(n=c).copy()).on(i,s=d);l.on=o}}function transition_style(e,t,n){var o=(e+="")==="transform"?interpolateTransformCss:interpolate;return t==null?this.styleTween(e,styleNull(e,o)).on("end.style."+e,styleRemove(e)):typeof t==="function"?this.styleTween(e,styleFunction(e,o,tweenValue(this,"style."+e,t))).each(styleMaybeRemove(this._id,e)):this.styleTween(e,styleConstant(e,o,t),n).on("end.style."+e,null)}function styleInterpolate(e,t,n){return function(o){this.style.setProperty(e,t.call(this,o),n)}}function styleTween(e,t,n){var o,s;function r(){var r=t.apply(this,arguments);if(r!==s)o=(s=r)&&styleInterpolate(e,r,n);return o}r._value=t;return r}function transition_styleTween(e,t,n){var o="style."+(e+="");if(arguments.length<2)return(o=this.tween(o))&&o._value;if(t==null)return this.tween(o,null);if(typeof t!=="function")throw new Error;return this.tween(o,styleTween(e,t,n==null?"":n))}function textConstant(e){return function(){this.textContent=e}}function textFunction(e){return function(){var t=e(this);this.textContent=t==null?"":t}}function transition_text(e){return this.tween("text",typeof e==="function"?textFunction(tweenValue(this,"text",e)):textConstant(e==null?"":e+""))}function textInterpolate(e){return function(t){this.textContent=e.call(this,t)}}function textTween(e){var t,n;function o(){var o=e.apply(this,arguments);if(o!==n)t=(n=o)&&textInterpolate(o);return t}o._value=e;return o}function transition_textTween(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=="function")throw new Error;return this.tween(t,textTween(e))}function transition_transition(){var e=this._name,t=this._id,n=newId();for(var o=this._groups,s=o.length,r=0;r<s;++r){for(var i=o[r],a=i.length,l,c=0;c<a;++c){if(l=i[c]){var d=get(l,t);schedule(l,e,n,c,i,{time:d.time+d.delay+d.duration,delay:0,duration:d.duration,ease:d.ease})}}}return new Transition(o,this._parents,e,n)}function transition_end(){var e,t,n=this,o=n._id,s=n.size();return new Promise((function(r,i){var a={value:i},l={value:function(){if(--s===0)r()}};n.each((function(){var n=set(this,o),s=n.on;if(s!==e){t=(e=s).copy();t._.cancel.push(a);t._.interrupt.push(a);t._.end.push(l)}n.on=t}));if(s===0)r()}))}var id=0;function Transition(e,t,n,o){this._groups=e;this._parents=t;this._name=n;this._id=o}function newId(){return++id}var selection_prototype=selection.prototype;Transition.prototype={constructor:Transition,select:transition_select,selectAll:transition_selectAll,selectChild:selection_prototype.selectChild,selectChildren:selection_prototype.selectChildren,filter:transition_filter,merge:transition_merge,selection:transition_selection,transition:transition_transition,call:selection_prototype.call,nodes:selection_prototype.nodes,node:selection_prototype.node,size:selection_prototype.size,empty:selection_prototype.empty,each:selection_prototype.each,on:transition_on,attr:transition_attr,attrTween:transition_attrTween,style:transition_style,styleTween:transition_styleTween,text:transition_text,textTween:transition_textTween,remove:transition_remove,tween:transition_tween,delay:transition_delay,duration:transition_duration,ease:transition_ease,easeVarying:transition_easeVarying,end:transition_end,[Symbol.iterator]:selection_prototype[Symbol.iterator]};function cubicInOut(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var defaultTiming={time:null,delay:0,duration:250,ease:cubicInOut};function inherit$2(e,t){var n;while(!(n=e.__transition)||!(n=n[t])){if(!(e=e.parentNode)){throw new Error(`transition ${t} not found`)}}return n}function selection_transition(e){var t,n;if(e instanceof Transition){t=e._id,e=e._name}else{t=newId(),(n=defaultTiming).time=now(),e=e==null?null:e+""}for(var o=this._groups,s=o.length,r=0;r<s;++r){for(var i=o[r],a=i.length,l,c=0;c<a;++c){if(l=i[c]){schedule(l,e,t,c,i,n||inherit$2(l,t))}}}return new Transition(o,this._parents,e,t)}selection.prototype.interrupt=selection_interrupt;selection.prototype.transition=selection_transition;const d3scale=require("d3-scale");const d3=require("d3");const defaultcolor=rgb("#8AB1D4").darker();const default_text_color=rgb("#aaa").darker().darker();const exoncolor="#4F8053";const IN_frame=true;const OUT_frame=false;const dtsnvindel=1;const dtfusionrna=2;const dtgeneexpression=3;const dtcnv=4;const dtsv=5;const dtitd=6;const dtdel=7;const dtnloss=8;const dtcloss=9;const dtloh=10;const plotColor="#ce768e";const dt2label={[dtsnvindel]:"SNV/indel",[dtfusionrna]:"Fusion RNA",[dtcnv]:"CNV",[dtsv]:"SV",[dtitd]:"ITD",[dtdel]:"Deletion",[dtnloss]:"N-loss",[dtcloss]:"C-loss",[dtloh]:"LOH",[dtgeneexpression]:"Gene Expression"};const mclass={M:{label:"MISSENSE",color:"#3987CC",dt:dtsnvindel,desc:"A substitution variant in the coding region resulting in altered protein coding.",key:"M"},E:{label:"EXON",color:"#bcbd22",dt:dtsnvindel,desc:"A variant in the exon of a non-coding RNA.",key:"E"},F:{label:"FRAMESHIFT",color:"#db3d3d",dt:dtsnvindel,desc:"An insertion or deletion variant that alters the protein coding frame.",key:"F"},N:{label:"NONSENSE",color:"#ff7f0e",dt:dtsnvindel,desc:"A variant altering protein coding to produce a premature stopgain or stoploss.",key:"N"},S:{label:"SILENT",color:"#2ca02c",dt:dtsnvindel,desc:"A substitution variant in the coding region that does not alter protein coding.",key:"S"},D:{label:"PROTEINDEL",color:"#7f7f7f",dt:dtsnvindel,desc:"A deletion resulting in a loss of one or more codons from the product, but not altering the protein coding frame.",key:"D"},I:{label:"PROTEININS",color:"#8c564b",dt:dtsnvindel,desc:"An insertion introducing one or more codons into the product, but not altering the protein coding frame.",key:"I"},P:{label:"SPLICE_REGION",color:"#9467bd",dt:dtsnvindel,desc:"A variant in an intron within 10 nt of an exon boundary.",key:"P"},L:{label:"SPLICE",color:"#6633FF",dt:dtsnvindel,desc:"A variant near an exon edge that may affect splicing functionality.",key:"L"},Intron:{label:"INTRON",color:"#656565",dt:dtsnvindel,desc:"An intronic variant.",key:"Intron"},Blank:{label:"Not tested",color:"#fff",dt:dtsnvindel,desc:"This gene is not tested.",key:"Blank"},WT:{label:"Wildtype",color:"#D3D3D3",dt:dtsnvindel,desc:"Wildtype",key:"WT"}};const mclassitd="ITD";mclass[mclassitd]={label:"ITD",color:"#ff70ff",dt:dtitd,desc:"In-frame internal tandem duplication.",key:mclassitd};const mclassdel="DEL";mclass[mclassdel]={label:"DELETION, intragenic",color:"#858585",dt:dtdel,desc:"Intragenic deletion.",key:mclassdel};const mclassnloss="NLOSS";mclass[mclassnloss]={label:"N-terminus loss",color:"#545454",dt:dtnloss,desc:"N-terminus loss due to translocation",key:mclassnloss};const mclasscloss="CLOSS";mclass[mclasscloss]={label:"C-terminus loss",color:"#545454",dt:dtcloss,desc:"C-terminus loss due to translocation",key:mclasscloss};const mclassutr3="Utr3";mclass[mclassutr3]={label:"UTR_3",color:"#998199",dt:dtsnvindel,desc:"A variant in the 3' untranslated region.",key:mclassutr3};const mclassutr5="Utr5";mclass[mclassutr5]={label:"UTR_5",color:"#819981",dt:dtsnvindel,desc:"A variant in the 5' untranslated region.",key:mclassutr5};const mclassnonstandard="X";mclass[mclassnonstandard]={label:"NONSTANDARD",color:"black",dt:dtsnvindel,desc:"A mutation class that either does not match our notation, or is unspecified.",key:mclassnonstandard};const mclassnoncoding="noncoding";mclass[mclassnoncoding]={label:"NONCODING",color:"black",dt:dtsnvindel,desc:"Noncoding mutation.",key:mclassnoncoding};function mclasstester(e){switch(e.toLowerCase()){case"missense_mutation":return"M";case"nonsense_mutation":return"N";case"splice_site":return"L";case"rna":return mclassnoncoding;case"frame_shift_del":return"F";case"frame_shift_ins":return"F";case"in_frame_del":return"D";case"in_frame_ins":return"I";case"translation_start_site":return mclassnonstandard;case"nonstop_mutation":return"N";case"3'utr":return mclassutr3;case"3'flank":return mclassnoncoding;case"5'utr":return mclassutr5;case"5'flank":return mclassnoncoding;case"blank":return"Blank";default:return null}}const mclassfusionrna="Fuserna";mclass[mclassfusionrna]={label:"Fusion transcript",color:"#545454",dt:dtfusionrna,desc:"Marks the break points leading to fusion transcripts.<br>"+"<span style=\"font-size:150%\">&#9680;</span> - 3' end of the break point is fused to the 5' end of another break point in a different gene.<br>"+"<span style=\"font-size:150%\">&#9681;</span> - 5' end of the break point is fused to the 3' end of another break point in a different gene.",key:mclassfusionrna};const mclasssv="SV";mclass[mclasssv]={label:"Structural variation",color:"#858585",dt:dtsv,desc:"Structural variation detected in genomic DNA.",key:mclasssv};const mclasscnvgain="CNV_amp";mclass[mclasscnvgain]={label:"Copy number gain",color:"#e9a3c9",dt:dtcnv,desc:"Copy number gain",key:mclasscnvgain};const mclasscnvloss="CNV_loss";mclass[mclasscnvloss]={label:"Copy number loss",color:"#a1d76a",dt:dtcnv,desc:"Copy number loss",key:mclasscnvloss};const mclasscnvloh="CNV_loh";mclass[mclasscnvloh]={label:"LOH",color:"#12EDFC",dt:dtcnv,desc:"Loss of heterozygosity",key:mclasscnvloh};const mclasssnv="snv";mclass[mclasssnv]={label:"SNV",color:"#92a2d4",dt:dtsnvindel,desc:"Single nucleotide variation",key:mclasssnv};const mclassmnv="mnv";mclass[mclassmnv]={label:"MNV",color:"#92a2d4",dt:dtsnvindel,desc:"Multiple nucleotide variation",key:mclassmnv};const mclassinsertion="insertion";mclass[mclassinsertion]={label:"Sequence insertion",color:"#bd8e91",dt:dtsnvindel,desc:"Sequence insertion",key:mclassinsertion};const mclassdeletion="deletion";mclass[mclassdeletion]={label:"Sequence deletion",color:"#b5a174",dt:dtsnvindel,desc:"Sequence deletion",key:mclassdeletion};const dt2color={[dtsnvindel]:mclass.M.color};function applyOverrides(e={}){if(e.mclass){for(const t in e.mclass){if(!mclass[t])mclass[t]={};for(const n in e.mclass[t]){mclass[t][n]=e.mclass[t][n]}}}}const vepinfo=function(e){const t=e.toLowerCase().split(",");let n=1;if(t.indexOf("transcript_ablation")!=-1){return[dtdel,mclassdel,n]}n++;if(t.indexOf("splice_acceptor_variant")!=-1)return[dtsnvindel,"L",n];n++;if(t.indexOf("splice_donor_variant")!=-1)return[dtsnvindel,"L",n];n++;if(t.indexOf("stop_gained")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("frameshift_variant")!=-1)return[dtsnvindel,"F",n];n++;if(t.indexOf("stop_lost")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("start_lost")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("transcript_amplification")!=-1){return[dtsnvindel,mclassnonstandard,n]}n++;if(t.indexOf("inframe_insertion")!=-1||t.indexOf("conservative_inframe_insertion")!=-1||t.indexOf("disruptive_inframe_insertion")!=-1)return[dtsnvindel,"I",n];n++;if(t.indexOf("inframe_deletion")!=-1||t.indexOf("conservative_inframe_deletion")!=-1||t.indexOf("disruptive_inframe_deletion")!=-1)return[dtsnvindel,"D",n];n++;if(t.indexOf("missense_variant")!=-1)return[dtsnvindel,"M",n];n++;if(t.indexOf("protein_altering_variant")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("splice_region_variant")!=-1)return[dtsnvindel,"P",n];n++;if(t.indexOf("incomplete_terminal_codon_variant")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("stop_retained_variant")!=-1)return[dtsnvindel,"S",n];n++;if(t.indexOf("synonymous_variant")!=-1)return[dtsnvindel,"S",n];n++;if(t.indexOf("coding_sequence_variant")!=-1)return[dtsnvindel,mclassnonstandard,n];n++;if(t.indexOf("mature_mirna_variant")!=-1)return[dtsnvindel,"E",n];n++;if(t.indexOf("5_prime_utr_variant")!=-1)return[dtsnvindel,mclassutr5,n];n++;if(t.indexOf("3_prime_utr_variant")!=-1)return[dtsnvindel,mclassutr3,n];n++;if(t.indexOf("non_coding_transcript_exon_variant")!=-1)return[dtsnvindel,"E",n];n++;if(t.indexOf("intron_variant")!=-1)return[dtsnvindel,"Intron",n];n++;if(t.indexOf("nmd_transcript_variant")!=-1)return[dtsnvindel,"S",n];n++;if(t.indexOf("non_coding_transcript_variant")!=-1)return[dtsnvindel,"E",n];n++;if(t.indexOf("upstream_gene_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("downstream_gene_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("tfbs_ablation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("tfbs_amplification")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("tf_binding_site_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("regulatory_region_ablation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("regulatory_region_amplification")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("feature_elongation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("regulatory_region_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("feature_truncation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("intergenic_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;return[dtsnvindel,mclassnonstandard,n]};const germlinelegend='<circle cx="7" cy="12" r="7" fill="#b1b1b1"></circle><path d="M6.735557395310443e-16,-11A11,11 0 0,1 11,0L9,0A9,9 0 0,0 5.51091059616309e-16,-9Z" transform="translate(7,12)" fill="#858585" stroke="none"></path>';const morigin={};const moriginsomatic="S";morigin[moriginsomatic]={label:"Somatic",desc:"A variant found only in a tumor sample. The proportion is indicated by lack of any arc.",legend:'<circle cx="7" cy="12" r="7" fill="#b1b1b1"></circle>'};const morigingermline="G";morigin[morigingermline]={label:"Germline",desc:"A constitutional variant found in a normal sample. The proportion is indicated by the span of the solid arc within the whole circle.",legend:germlinelegend};morigin.germline=morigin[morigingermline];morigin.somatic=morigin[moriginsomatic];const moriginrelapse="R";morigin[moriginrelapse]={label:"Relapse",desc:"A somatic variant found only in a relapse sample. The proportion is indicated by the span of the hollow arc within the whole circle.",legend:'<circle cx="7" cy="12" r="7" fill="#b1b1b1"></circle><path d="M6.735557395310443e-16,-11A11,11 0 0,1 11,0L9,0A9,9 0 0,0 5.51091059616309e-16,-9Z" transform="translate(7,12)" fill="none" stroke="#858585"></path>'};const morigingermlinepathogenic="GP";morigin[morigingermlinepathogenic]={label:"Germline pathogenic",desc:"A constitutional variant with pathogenic allele.",legend:germlinelegend};const morigingermlinenonpathogenic="GNP";morigin[morigingermlinenonpathogenic]={label:"Germline non-pathogenic",desc:"A constitutional variant with non-pathogenic allele.",legend:germlinelegend,hidden:true};const tkt$1={usegm:"usegm",ds:"dataset",bigwig:"bigwig",bigwigstranded:"bigwigstranded",junction:"junction",mdsjunction:"mdsjunction",mdscnv:"mdscnv",mdssvcnv:"mdssvcnv",mdsexpressionrank:"mdsexpressionrank",mdsvcf:"mdsvcf",bedj:"bedj",pgv:"profilegenevalue",bampile:"bampile",hicstraw:"hicstraw",expressionrank:"expressionrank",aicheck:"aicheck",ase:"ase",mds2:"mds2",mds3:"mds3",bedgraphdot:"bedgraphdot",bam:"bam",ld:"ld"};function validtkt(e){for(const t in tkt$1){if(e==tkt$1[t]){return true}}return false}const mdsvcftype={vcf:"vcf"};const custommdstktype={vcf:"vcf",svcnvitd:"svcnvitd",geneexpression:"geneexpression"};const codon={GCT:"A",GCC:"A",GCA:"A",GCG:"A",CGT:"R",CGC:"R",CGA:"R",CGG:"R",AGA:"R",AGG:"R",AAT:"N",AAC:"N",GAT:"D",GAC:"D",TGT:"C",TGC:"C",CAA:"Q",CAG:"Q",GAA:"E",GAG:"E",GGT:"G",GGC:"G",GGA:"G",GGG:"G",CAT:"H",CAC:"H",ATT:"I",ATC:"I",ATA:"I",TTA:"L",TTG:"L",CTT:"L",CTC:"L",CTA:"L",CTG:"L",AAA:"K",AAG:"K",ATG:"M",TTT:"F",TTC:"F",CCT:"P",CCC:"P",CCA:"P",CCG:"P",TCT:"S",TCC:"S",TCA:"S",TCG:"S",AGT:"S",AGC:"S",ACT:"T",ACC:"T",ACA:"T",ACG:"T",TGG:"W",TAT:"Y",TAC:"Y",GTT:"V",GTC:"V",GTA:"V",GTG:"V"};const codon_stop="*";function nt2aa(e){if(!e.genomicseq)return undefined;const t=[];if(e.coding){for(const[n,o]of e.coding.entries()){const n=e.genomicseq.substr(o[0]-e.start,o[1]-o[0]);if(e.strand=="-"){t.push(reversecompliment(n))}else{t.push(n)}}}const n=t.join("");const o=[];const s=e.startCodonFrame?3-e.startCodonFrame:0;for(let e=s;e<n.length;e+=3){const t=codon[n.substr(e,3)];o.push(t||codon_stop)}e.cdseq=n;return o.join("")}function bplen(e,t){if(e>=1e9)return(e/1e9).toFixed(1)+" Gb";if(e>=1e7)return Math.ceil(e/1e6)+" Mb";if(e>=1e6)return(e/1e6).toFixed(1)+" Mb";if(e>=1e4)return Math.ceil(e/1e3)+" Kb";if(e>=1e3)return(e/1e3).toFixed(1)+" Kb";return e+(t?"bytes":" bp")}const basecolor={A:"#ca0020",T:"#f4a582",C:"#92c5de",G:"#0571b0"};function basecompliment(e){switch(e){case"A":return"T";case"T":return"A";case"C":return"G";case"G":return"C";case"a":return"t";case"t":return"a";case"c":return"g";case"g":return"c";default:return e}}function reversecompliment(e){const t=[];for(let n=e.length-1;n>=0;n--){t.push(basecompliment(e[n]))}return t.join("")}function spliceeventchangegmexon(e,t){const n={chr:e.chr,start:e.start,stop:e.stop,strand:e.strand,coding:[]};if(t.isskipexon||t.isaltexon){for(let o=0;o<e.exon.length;o++){const s=Math.max(e.codingstart,e.exon[o][0]);const r=Math.min(e.codingstop,e.exon[o][1]);if(s>r){continue}if(t.skippedexon.indexOf(o)==-1){n.coding.push([s,r])}}}else if(t.a5ss||t.a3ss){const o=e.exon.map((e=>[e[0],e[1]]));const s=e.strand=="+";if(t.a5ss){if(s){o[t.exon5idx][1]=t.junctionB.start}else{o[t.exon5idx+1][0]=t.junctionB.stop}}else{if(s){o[t.exon5idx+1][0]=t.junctionB.stop}else{o[t.exon5idx][1]=t.junctionB.start}}for(const t of o){const o=Math.max(e.codingstart,t[0]);const s=Math.min(e.codingstop,t[1]);if(o>s){continue}n.coding.push([o,s])}}return n}function fasta2gmframecheck(e,t){const n=t.split("\n");n.shift();e.genomicseq=n.join("").toUpperCase();const o=nt2aa(e);let s=OUT_frame;const r=o.indexOf(codon_stop);if(r==o.length-1){s=IN_frame}return s}function validate_vcfinfofilter(e){if(!e.lst)return".lst missing";if(!Array.isArray(e.lst))return"input is not an array";for(const t of e.lst){if(!t.name)return"name missing from a set of .vcfinfofilter.lst";if(t.autocategory||t.categories){if(!t.autocategory){for(const e in t.categories){const n=t.categories[e];if(!t.autocolor&&!n.color)return".color missing for class "+e+" from .categories of set "+t.name;if(!n.label){n.label=e}}}if(t.categoryhidden){for(const e in t.categoryhidden){if(!t.categories[e])return"unknown hidden-by-default category "+e+" from set "+t.name}}else{t.categoryhidden={}}}else if(t.numericfilter){const e=[];for(const n of t.numericfilter){if(typeof n=="number"){e.push({side:"<",value:n})}else{e.push({side:n.side||"<",value:n.value})}}t.numericfilter=e}if(t.altalleleinfo){if(!t.altalleleinfo.key){return".key missing from .altalleleinfo from set "+t.name}}else if(t.locusinfo){if(!t.locusinfo.key){return".key missing from .locusinfo from set "+t.name}}else{return"neither .altalleleinfo or .locusinfo is available from set "+t.name}}}function contigNameNoChr(e,t){for(const n in e.majorchr){if(t.indexOf(n.replace("chr",""))!=-1){return true}}if(e.minorchr){for(const n in e.minorchr){if(t.indexOf(n.replace("chr",""))!=-1){return true}}}return false}function contigNameNoChr2(e,t){let n=0,o=0;for(const s in e.majorchr){if(t.includes(s)){o++}else if(t.includes(s.replace("chr",""))){n++}}if(e.minorchr){for(const s in e.minorchr){if(t.includes(s)){o++}else if(t.includes(s.replace("chr",""))){n++}}}return[n,o]}function getMax_byiqr(e,t){if(e.length==0)return t;e.sort(((e,t)=>e-t));const n=e[e.length-1];if(e.length<=5)return n;const o=e[Math.floor(e.length/4)];const s=e[Math.floor(e.length*3/4)];return Math.min(s+(s-o)*1.5,n)}function alleleInGenotypeStr(e,t){if(!e)return false;if(e.indexOf("/")!=-1){return e.split("/").indexOf(t)!=-1}return e.split("|").indexOf(t)!=-1}const gmmode$1={genomic:"genomic",splicingrna:"splicing RNA",exononly:"exon only",protein:"protein",gmsum:"aggregated exons"};function vcfcopymclass(e,t){if(e.csq){let n;if(t.usegm){n=e.csq.find((e=>e._isoform==t.usegm.isoform))}if(!n){n=e.csq.find((e=>e.CANONICAL));if(!n){n=e.csq[0];for(const t of e.csq){if(t._csqrank<n._csqrank){n=t}}}}if(n){e.gene=n._gene;e.isoform=n._isoform;e.class=n._class;e.dt=n._dt;e.mname=n._mname;if(e.class==mclassnoncoding){delete e.class}}}else if(e.ann){let n=null;if(t.usegm){for(const o of e.ann){if(o._isoform!=t.usegm.isoform)continue;if(n){if(o._csqrank<n._csqrank){n=o}}else{n=o}}if(!n&&t.gmmode==gmmode$1.genomic){n=e.ann[0]}}else{n=e.ann[0];for(const t of e.ann){if(t._csqrank<n._csqrank){n=t}}}if(n){e.gene=n._gene;e.isoform=n._isoform;e.class=n._class;e.dt=n._dt;e.mname=n._mname;if(e.class==mclassnoncoding){delete e.class}}}if(e.class==undefined){if(mclass[e.type]){e.class=e.type;e.dt=mclass[e.type].dt;e.mname=e.id&&e.id!="."?e.id:e.ref+">"+e.alt;if(e.mname.length>15){e.mname=e.type}}else{e.class=mclassnonstandard;e.dt=dtsnvindel;e.mname=e.type}}delete e.type}const not_annotated="Unannotated";function kernelDensityEstimator(e,t){return function(n){return t.map((t=>[t,n.map((n=>e(t-n))).reduce(((e,t)=>e+t),0)/n.length]))}}function kernelEpanechnikov(e){return function(t){return Math.abs(t/=e)<=1?.75*(1-t*t)/e:0}}const schemeCategory20=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];const schemeCategory2=["#e75480","blue"];function getColorScheme(e){if(e>12)return schemeCategory20;else if(e>8)return d3.schemePaired;else if(e>2)return d3.schemeDark2;else return schemeCategory2}function getColors(e){return d3scale.scaleOrdinal(getColorScheme(e))}const truncatingMutations=["F","N","D","I","L"];const proteinChangingMutations=["F","N","D","I","L","M","P"];var common=Object.freeze({__proto__:null,defaultcolor:defaultcolor,default_text_color:default_text_color,exoncolor:exoncolor,IN_frame:IN_frame,OUT_frame:OUT_frame,dtsnvindel:dtsnvindel,dtfusionrna:dtfusionrna,dtgeneexpression:dtgeneexpression,dtcnv:dtcnv,dtsv:dtsv,dtitd:dtitd,dtdel:dtdel,dtnloss:dtnloss,dtcloss:dtcloss,dtloh:dtloh,plotColor:plotColor,dt2label:dt2label,mclass:mclass,mclassitd:mclassitd,mclassdel:mclassdel,mclassnloss:mclassnloss,mclasscloss:mclasscloss,mclassutr3:mclassutr3,mclassutr5:mclassutr5,mclassnonstandard:mclassnonstandard,mclassnoncoding:mclassnoncoding,mclasstester:mclasstester,mclassfusionrna:mclassfusionrna,mclasssv:mclasssv,mclasscnvgain:mclasscnvgain,mclasscnvloss:mclasscnvloss,mclasscnvloh:mclasscnvloh,mclasssnv:mclasssnv,mclassmnv:mclassmnv,mclassinsertion:mclassinsertion,mclassdeletion:mclassdeletion,dt2color:dt2color,applyOverrides:applyOverrides,vepinfo:vepinfo,germlinelegend:germlinelegend,morigin:morigin,moriginsomatic:moriginsomatic,morigingermline:morigingermline,moriginrelapse:moriginrelapse,morigingermlinepathogenic:morigingermlinepathogenic,morigingermlinenonpathogenic:morigingermlinenonpathogenic,tkt:tkt$1,validtkt:validtkt,mdsvcftype:mdsvcftype,custommdstktype:custommdstktype,codon:codon,codon_stop:codon_stop,nt2aa:nt2aa,bplen:bplen,basecolor:basecolor,basecompliment:basecompliment,reversecompliment:reversecompliment,spliceeventchangegmexon:spliceeventchangegmexon,fasta2gmframecheck:fasta2gmframecheck,validate_vcfinfofilter:validate_vcfinfofilter,contigNameNoChr:contigNameNoChr,contigNameNoChr2:contigNameNoChr2,getMax_byiqr:getMax_byiqr,alleleInGenotypeStr:alleleInGenotypeStr,gmmode:gmmode$1,vcfcopymclass:vcfcopymclass,not_annotated:not_annotated,kernelDensityEstimator:kernelDensityEstimator,kernelEpanechnikov:kernelEpanechnikov,schemeCategory20:schemeCategory20,schemeCategory2:schemeCategory2,getColorScheme:getColorScheme,getColors:getColors,truncatingMutations:truncatingMutations,proteinChangingMutations:proteinChangingMutations});let base_zindex$1=100;function get_base_zindex(){return base_zindex$1}function set_base_zindex(e){base_zindex$1=e}function getInitFxn(e){return t=>{const n=new e(t);if(!n.api&&n.type){if(n.type=="app")prepApp(n,t);else if(n.type=="store")prepStore(n,t);else prepComponent(n,t)}const o=n.api||n;if(n.debug||n.opts&&n.opts.debug)o.Inner=n;if(typeof n.preApiFreeze=="function")n.preApiFreeze(o);Object.freeze(o);if(n.init){return n.init().then((()=>{if(n.bus)n.bus.emit("postInit");return o})).catch((e=>{if(n.printError)n.printError(e);if(n.bus)n.bus.emit("postInit",null,0,e);else throw e}))}else{if(n.bus)n.bus.emit("postInit");return o}}}function getAppInit(e){return getInitPrepFxn(e,prepApp)}function getStoreInit(e){return getInitPrepFxn(e,prepStore)}function getCompInit(e){return getInitPrepFxn(e,prepComponent)}function getInitPrepFxn(e,t){if(typeof t!="function")throw"prepFxn must be a function";return async n=>{let o;try{o=new e(n);t(o,n);const s=o.api||o;if(o.debug||o.opts&&o.opts.debug)s.Inner=o;if(o.preApiFreeze)await o.preApiFreeze(s);Object.freeze(s);if(o.init){if(o.app&&o.app!=o)await o.init(o.app.getState());else await o.init();if(o.type!="app"&&o.type!="store"&&o.state&&!o.hasStatePreMain){delete o.state;console.warn(`${o.type}: rx deleted this.state after init()`+`to avoid confusing behavior, such as the component not rendering initially `+`because this.state would not have changed between init() and the first time `+`main() is called. To skip this warning and retain this.state after init(), `+`set this.hasStatePreMain = true in the ${o.type} constructor.`)}}if(o.bus)o.bus.emit("postInit");return s}catch(e){console.log("error:",e);if(o&&o.bus)o.bus.emit("postInit",null,0,e);if(!o||!o.printError)throw e}}}function getOpts(e,t){const n=Object.assign({},t.opts||{},e);if(!t.app)return n;if(t.type in t.app.opts){const e=t.app.opts[t.type];if(t.validateOpts)t.validateOpts(e);copyMerge(n,e)}if("debug"in t.app)n.debug=t.app.debug;else if(t.app.opts&&"debug"in t.app.opts)n.debug=t.app.opts.debug;return n}async function multiInit(e){const t={};try{await Promise.all(Object.values(e));for(const n in e){t[n]=await e[n]}return t}catch(e){throw e}}function prepStore(e,t){if(e.validateOpts)e.validateOpts(t);e.app=t.app;e.opts=getOpts(t,e);e.api=getStoreApi(e);e.copyMerge=copyMerge;e.deepFreeze=deepFreeze$2;if(!e.fromJson)e.fromJson=fromJson;if(!e.toJson)e.toJson=toJson;e.state=copyMerge(e.toJson(e.defaultState),t.state);if(e.validateState)e.validateState()}let sequenceId=0;function getStoreApi(e){e.history=[];e.currIndex=-1;let t=0;const n={async write(o){o.sequenceId=sequenceId++;const s=e.constructor.prototype.actions;if(!s){throw`no store actions specified`}if(!s.hasOwnProperty(o.type)){throw`Action=${o.type} must be declared in an "actions" property of a class.`}if(typeof s[o.type]!=="function"){throw`invalid action type=${o.type}`}await s[o.type].call(e,o);e.state._scope_=o._scope_;if(!e.opts.debounceInterval)return n.copyState();t+=1;let r=-1;return new Promise(((o,s)=>{const i=setInterval((()=>{t+=r;r=0;if(t>0)return;clearInterval(i);o(n.copyState())}),e.opts.debounceInterval)}))},async copyState(){const t=e.fromJson(e.toJson(e.state));e.deepFreeze(t);return t}};return n}function prepApp(e,t){try{if(e.validateOpts)e.validateOpts(t);if("id"in t)e.id=t[e.type].id;e.opts=t;e.api=getAppApi(e)}catch(t){console.error(t);if(e.printError)e.printError(t);else alert(t)}}function getAppApi(e){const t={};const n=[];let o;const s={type:e.type,opts:e.opts,async dispatch(t){e.bus.emit("preDispatch");try{if(n.length){for(const e of n.slice()){const o=await e(t);if(o){if(o.cancel)return;if(o.error)throw o.error;if(o.deactivate){n.splice(n.indexOf(e),1)}}}}if(t)e.state=await e.store.write(t);o=t?.sequenceId;if(e.main)await e.main();const s={action:t,appState:e.state};await notifyComponents(e.components,s)}catch(n){if(e.bus&&o==t?.sequenceId)e.bus.emit("error");if(e.printError)e.printError(n);else console.log(n)}if(e.bus&&o==t?.sequenceId)e.bus.emit("postRender")},async save(n){e.state=await e.store.write(n);if(t.recover){for(const n in t.recover){const o=t.recover[n];o.replaceLastState(e.state)}}},getState(){return e.state},middle(e){if(typeof e!=="function")throw`a middleware must be a function`;if(n.includes(e))throw`the function is already in the middlewares array`;n.push(e);return s},on(t,n){if(!e.eventTypes)throw`no eventTypes[] for ${e.type} component`;e.bus.on(t,n);return s},getComponents(t=""){return getComponents(e.components,t)},register(e){if(!t[e.type])t[e.type]={};t[e.type][e.id]=e},deregister(e){if(t[e.type]?.[e.id])delete t[e.type][e.id]},destroy(){for(const t in e.components){const n=e.components[t];if(typeof n.destroy=="function"){n.destroy()}else if(n.holder){n.holder.selectAll("*").remove()}delete e.components[t]}if(typeof e.destroy=="function")e.destroy();if(e.dom){if(e.dom.holder)e.dom.holder.selectAll("*").remove();for(const t in e.dom){delete e.dom[t]}}if(e.bus)e.bus.destroy();delete e.store;if(e.api)delete e.api;e.wasDestroyed=true}};if(e.opts.debugName)window[e.opts.debugName]=s;if(!e.bus){if(!e.eventTypes)e.eventTypes=["preDispatch","postInit","postRender","firstRender","error"];if(e.customEvents)e.eventTypes.push(...e.customEvents);const t=e.opts.app&&e.opts.app.callbacks||e.opts.callbacks||{};e.bus=new Bus(s,e.eventTypes,t)}return s}function prepComponent(e,t){if(!t.app)throw`missing self.opts.app in prepComponent(${e.type})`;e.app=t.app;e.opts=getOpts(t,e);if(e.validateOpts)e.validateOpts(t);if("id"in t)e.id=e.opts.id;e.api=getComponentApi(e)}function getComponentApi(e){if(!("type"in e)){throw`The component's type must be set before calling this.getComponentApi(this).`}let t;const n={type:e.type,id:e.id,async update(o){if(o.action&&e.reactsTo&&!e.reactsTo(o.action))return;const s=e.getState?e.getState(o.appState):o.appState;if(!s)return;if(!o.action||!deepEqual(s,e.state)){if(o.action)t=o.action.sequenceId;if(e.mainArg=="state"){await e.main(s)}else{e.state=s;if(e.main){try{await e.main()}catch(t){if(e.bus)e.bus.emit("error");throw t}}}}await notifyComponents(e.components,o);if(e.bus&&(!o.action||o.action.sequenceId===t))e.bus.emit("postRender");return n},on(t,o){if(!e.eventTypes)throw`no eventTypes[] for ${e.type} component`;e.bus.on(t,o);return n},getComponents(t=""){return getComponents(e.components,t)},async detectStale(e,n={}){try{const o=t;const s=[];let r,i;if(n.abortCtrl){s.push(new Promise(((e,s)=>{i=e;r=setInterval((()=>{if(o!==t){clearInterval(r);try{n.abortCtrl.abort();throw`stale sequenceId`}catch(e){s(e)}}}),n.wait||100)})))}s.push(e());const a=await Promise.race(s);if(r)clearInterval(r);if(i)i();if(t!==o){console.warn("aborted state update, the returned data corresponds to a stale action.sequenceId");if(n.abortCtrl)n.abortCtrl.abort();return[a,true]}return[a]}catch(e){if(typeof e=="string"&&e.includes("sequenceId"))console.warn(e);throw e}},destroy(){e.app.deregister(e.api);for(const t in e.components){const n=e.components[t];if(typeof n.destroy=="function"){n.destroy()}else if(n.holder){n.holder.selectAll("*").remove()}delete e.components[t]}if(typeof e.destroy=="function")e.destroy();if(e.dom){if(e.dom.holder)e.dom.holder.selectAll("*").remove();for(const t in e.dom){if(typeof e.dom[t]?.remove=="function")e.dom[t].remove();delete e.dom[t]}}if(e.bus)e.bus.destroy();if(e.api)delete e.api}};if(!e.bus){if(!e.eventTypes)e.eventTypes=["postInit","postRender","postPrintError","firstRender","error"];if(e.customEvents)e.eventTypes.push(...e.customEvents);e.bus=new Bus(n,e.eventTypes,e.opts&&e.opts.callbacks||{})}return n}class Bus{constructor(e,t,n){this.name=e.type+(e.id===undefined||e.id===null?"":"#"+e.id);this.eventTypes=t;this.events={};this.defaultArg=e;if(n){for(const e in n){this.on(e,n[e])}}}on(e,t,n={}){const[o,s]=e.split(".");if(!this.eventTypes.includes(o)){throw`Unknown bus event '${o}' for component ${this.name}`}else if(!t){delete this.events[e]}else if(typeof t=="function"){if(e in this.events&&!e.includes(".")){console.log(`Warning: replacing ${this.name} ${e} callback - use event.name?`)}this.events[e]=n.wait?e=>setTimeout((()=>t(e)),n.wait):t}else{throw`invalid callback for ${this.name} eventType=${e}`}return this}emit(e,t=null,n=0,o=null){setTimeout((()=>{for(const n in this.events){if(e=="postRender"&&n.startsWith("firstRender")){this.events[n](t||this.defaultArg,o);delete this.events[n]}if(n==e||n.startsWith(e+".")){this.events[n](t||this.defaultArg,o);if(e=="postInit")delete this.events[n]}}}),n);return this}destroy(){for(const e in this.events){delete this.events[e]}}}async function notifyComponents(e,t){if(!e)return;const n=[];for(const o in e){const s=e[o];if(Array.isArray(s)){for(const e of s)n.push(e.update(t))}else if(s.hasOwnProperty("update")){n.push(s.update(t))}else if(s&&typeof s=="object"&&!s.main){for(const e in s){if(s.hasOwnProperty(e)&&typeof s[e].update=="function"){n.push(s[e].update(t))}}}}return Promise.all(n)}function getComponents(e,t){if(!t)return Object.assign({},e);const n=t.split(".");let o=e;while(n.length){let e=n.shift();if(Array.isArray(o))e=Number(e);if(!n.length)o=o[e];else if(o[e]&&o[e].components)o=o[e].components;else if(o[e]&&o[e].getComponents)o=o[e].getComponents();else o=o[e];if(!o)break}return o}function copyMerge(e,...t){const n=typeof e=="string"?fromJson(e):e;for(const o of t){if(o){const t=typeof e=="string"?fromJson(toJson(o)):o;for(const e in t){if(!n[e]||Array.isArray(n[e])||typeof n[e]!=="object"||t===null||t===undefined||t.isAtomic||n?.isAtomic||n[e]?.isAtomic)n[e]=t[e];else copyMerge(n[e],t[e])}}}return n}function fromJson(e){return JSON.parse(e)}function toJson(e=null){return JSON.stringify(e?e:this.state)}function deepFreeze$2(e){Object.freeze(e);for(const t in e){if(typeof e=="object")deepFreeze$2(e[t])}}function deepEqual(e,t){if(e===t){return true}else if(typeof e=="object"&&e!=null&&typeof t=="object"&&t!=null){if(Object.keys(e).length!=Object.keys(t).length){return false}for(var n in e){if(t.hasOwnProperty(n)){if(!deepEqual(e[n],t[n]))return false}else{return false}}return true}else return false}const reserved=["false","true","null","undefined"];const delimiters=['"',"{","["];function encode(e){const t=[];for(const[n,o]of Object.entries(e)){if(typeof o=="string"&&!isNumeric$1(o)&&!reserved.includes(o)&&!delimiters.includes(o[0])){t.push(`${n}=${encodeURIComponent(o)}`)}else if(o!==undefined){t.push(`${n}=${encodeURIComponent(JSON.stringify(o))}`)}}return t.join("&")}function isNumeric$1(e){return!isNaN(parseFloat(e))&&isFinite(e)&&e!==""}const jwtByDsRouteStr=localStorage.getItem("jwtByDsRoute")||`{}`;const jwtByDsRoute=JSON.parse(jwtByDsRouteStr);function dofetch(e,t,n=null){if(n&&typeof n=="object"){if(n.serverData&&typeof n.serverData=="object"){if(!dofetch.serverData){dofetch.serverData=n.serverData}else if(!n.serverData){n.serverData=dofetch.serverData}}return dofetch2(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)},n)}else{if(e[0]=="/"){e=e.slice(1)}const n=sessionStorage.getItem("jwt");if(n){t.jwt=n}let o=e;const s=sessionStorage.getItem("hostURL")||window.testHost||"";if(s){if(s.endsWith("/")){o=s+e}else{o=s+"/"+e}}return fetch(new Request(o,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)})).then((e=>e.json()))}}const cachedServerDataKeys=[];const maxNumOfServerDataKeys=360;function dofetch2(e,t={},n={}){if(e[0]=="/"){e=e.slice(1)}let o=e;const s=sessionStorage.getItem("hostURL")||window.testHost||"";if(s){if(s.endsWith("/")){o=s+e}else{o=s+"/"+e}}const r=t.body||{};o=mayAdjustRequest(o,t);if(!t.headers){t.headers={}}if(!t.headers["content-type"]&&t.body){t.headers["content-type"]="application/json"}const i=sessionStorage.getItem("jwt");if(i){t.headers.authorization="Bearer "+i}return mayShowAuthUi(t,o).then((async()=>{if(!i)mayAddJwtToRequest(t,r,o);const e=o+" | "+t.method+" | "+t.body;if(n.serverData){let s;if(n.serverData[e]){s=n.serverData[e].clone?await processResponse(n.serverData[e].clone()):structuredClone(n.serverData[e])}if(!s||typeof s!="object"||s instanceof Promise){delete n.serverData[e];s=undefined}if(!s){try{const r=await fetch(o,t);s=await processResponse(r.clone());if(typeof s=="object"&&!(s instanceof Promise)){if(n.cacheAs=="decoded"){deepFreeze$2(s);n.serverData[e]=s;s=structuredClone(s)}else{n.serverData[e]=r}}}catch(t){delete n.serverData[e];throw t}}const r=cachedServerDataKeys.indexOf(e);if(r!==-1)cachedServerDataKeys.splice(r,1);cachedServerDataKeys.unshift(e);if(cachedServerDataKeys.length>maxNumOfServerDataKeys){const e=cachedServerDataKeys.pop();delete n.serverData[e]}return s}else{return fetch(o,t).then(processResponse)}}))}function processResponse(e){const t=e.headers.get("content-type");if(!t)throw`missing response.header['content-type']`;if(t.includes("/json")){return e.json()}if(t.includes("/text")){return e.text()}return e.blob()}const defaultServerDataCache={};function dofetch3(e,t={},n={}){n.serverData=defaultServerDataCache;return dofetch2(e,t,n)}const urlMaxLength=2e3;function mayAdjustRequest(e,t){const n=window.location.hostname;const o=t.method&&t.method.toUpperCase()||"GET";if(o=="POST"){if(typeof t.body=="string")t.body=JSON.parse(t.body);if(!t.body.embedder)t.body.embedder=n;t.body=JSON.stringify(t.body);return e}if(o!="GET"&&o!="DELETE"){throw`unsupported init.method='${o}': must be undefined or GET or POST or DELETE`}if(t.body){if(!t.body.embedder)t.body.embedder=n;const o=encode(t.body);if(!e.includes("?"))e+="?";e+=o}if(!e.includes("embedder=")){const t=e.includes("?")?"&":"?";e+=`${t}embedder=${n}`}if(e.length<urlMaxLength){if(t.body)delete t.body;return e}t.method="POST";const[s,r]=e.split("?");if(t.body){t.body=JSON.stringify(t.body)}else{const e={};if(r)r.split("&").forEach((t=>{const[n,o]=t.split("=");const s=decodeURIComponent(o);try{e[n]=JSON.parse(s)}catch{e[n]=s}}));if(!e.embedder)e.embedder=n;t.body=JSON.stringify(e)}return s}const dsAuthOk=new Set;let dsAuth,authUi,authUiHolder;function setAuth(e){dsAuth=e.dsAuth;authUi=e.ui||defaultAuthUi;authUiHolder=e.holder||d3select("body");for(const e of dsAuth){if(e.insession)dsAuthOk.add(e)}}function isInSession(e,t){return e&&[...dsAuthOk].find((n=>n.dslabel==e&&n.route==t))}async function mayShowAuthUi(e,t){const n={status:"ok"};if(!dsAuth)return n;for(const o of dsAuth){const s=JSON.parse(e.body||`{}`);const r=(t.split("?")[1]||"").split("&").reduce(((e,t)=>{const[n,o]=t.split("=");e[n]=o;return e}),{});const i=Object.assign({},s,r);const a=t.split("?")[0].split("//")[1].split("/").slice(1).join("/");if(i.dslabel==o.dslabel&&(o.route=="/**"||a==o.route)){if(dsAuthOk.has(o))return n;else if(o.route!="/**")return n;else if(o.type=="basic")return await authUi(o.dslabel,o);else if(o.type=="jwt");else if(o.type=="forbidden"){alert("Forbidden access")}else throw`unsupported dsAuth type='${o.type}'`}}return n}async function defaultAuthUi(e,t){const n=authUiHolder.append("div").style("position","fixed").style("top",0).style("left",0).style("height","100%").style("width","100%").style("margin",0).style("padding","20px").style("background-color","rgb(150,150,150)");const o=n.append("div").style("opacity",1);o.append("div").html(`Restricted dataset '${e}'`);o.append("span").html("Please enter password ");const s=o.append("input").attr("type","password");s.node().focus();const r=o.append("button").html("Submit");return new Promise(((o,i)=>{function a(){fetch("/dslogin",{method:"POST",headers:{authorization:`Basic ${btoa(s.property("value"))}`},body:JSON.stringify({dslabel:e,route:t.route,embedder:window.location.hostname})}).then((e=>e.json())).then((s=>{if(s.error)throw s.error;n.remove();dsAuthOk.add(t);if(s.jwt){if(!jwtByDsRoute[e])jwtByDsRoute[e]={};jwtByDsRoute[e][s.route]=s.jwt;localStorage.setItem("jwtByDsRoute",JSON.stringify(jwtByDsRoute))}o(e)})).catch((e=>{alert("login error: "+e)}))}r.on("click",a);s.on("change",a)}))}function mayAddJwtToRequest(e,t,n){if(e.headers.authorization)return;let o=t?.dslabel;if(!o){const e=n.split("?")[1]?.split("&").find((e=>e.includes("dslabel")));if(!e)return;let t=decodeURIComponent(e.split("=")[1]);if(t.startsWith("{")&&t.endsWith("}")){t=JSON.parse(t);o=t.dslabel||t.mass?.vocab.dslabel||t.tracks?.find((e=>e.dslabel))?.dslabel}else{o=t}}if(!o||!jwtByDsRoute[o])return;const s=n.split("//");const r=(s[1]||s[0]).split("/")[1].split("?")[0];const i=jwtByDsRoute[o][r]||jwtByDsRoute[o]["/**"];if(i)e.headers.authorization="Bearer "+btoa(i)}class Menu{constructor(e={}){this.typename=Math.random().toString();const t=d3select(document.body);this.d=t.append("div").attr("class","sja_menu_div").style("display","none").style("position","absolute").style("background-color","white").style("font-family","Arial").on("mousedown.menu"+this.typename,(e=>{const t=d3select(e.target);if(t.on("mousedown")||t.on("click")||["INPUT","SELECT","TEXTAREA"].includes(e.target.tagName.toUpperCase())){e.stopPropagation()}})).on("keyup",(e=>{if(e.key=="Escape")this.hide()}));this.dnode=this.d.node();if(Object.values(this.d._groups[0]).length)this.dnode.parent_menu=e.parent_menu;t.on("mousedown.menu"+this.typename,(e=>{if(this.dnode.contains(e.target))return;if(e.target.parent_menu===this.dnode)return;const t=e.target.closest(".sja_menu_div");if(t&&t.parent_menu===this.dnode)return;this.hide()}));const n=get_base_zindex();if(n){this.d.style("z-index",n+1)}this.d.style("padding","padding"in e?e.padding:"10px");if(e.border){this.d.style("border",e.border)}else{this.d.style("box-shadow","0px 2px 4px 1px #999")}this.offsetX=Number.isInteger(e.offsetX)?e.offsetX:20;this.offsetY=Number.isInteger(e.offsetY)?e.offsetY:20;this.hideXmute=Number.isInteger(e.hideXmute)?e.hideXmute:0;this.hideYmute=Number.isInteger(e.hideYmute)?e.hideYmute:0;this.prevX=-1;this.prevY=-1;this.clearSelector=e.clearSelector}clear(){if(this.clearSelector)this.d.select(this.clearSelector).selectAll("*").remove();else this.d.selectAll("*").remove();return this}show(e,t,n=true,o=true,s=true){let r=e;let i=t;this.prevX=e;this.prevY=t;document.body.appendChild(this.dnode);this.d.style("display","block");if(s){r=r+window.scrollX;i=i+window.scrollY}if(n){r=r+this.offsetX;i=i+this.offsetY}const a=window.innerWidth;const l=window.innerHeight;const c=a/2;const d=l/2;const p=this.dnode.getBoundingClientRect();if(a-r<c&&r+p.width>a)this.d.style("left",null).style("right",a-r+"px");else this.d.style("left",r+"px").style("right",null);if(!o&&l-i<d&&i-window.scrollY-p.height>0)this.d.style("top",null).style("bottom",l-i+"px");else this.d.style("top",i+"px").style("bottom",null);this.d.transition().style("opacity",1);return this}showunder(e){const t=e.getBoundingClientRect();const n=t.left+window.scrollX;const o=t.top+t.height+window.scrollY+5;return this.show(n,o,false,true,false)}showunderoffset(e){const t=e.getBoundingClientRect();const n=t.top+t.height+window.scrollY+5;return this.show(t.left,n,true,true,false)}hide(e){if(e){if(Math.abs(this.prevX-e.clientX)<this.hideXmute&&Math.abs(this.prevY-e.clientY)<this.hideYmute)return}if(!this.fadeTimeout)this.d.style("display","none").style("opacity",0);if(this.onHide)this.onHide();return this}fadeout(){this.d.transition().style("opacity",0).on("end",(()=>this.d.style("display","none")));return this}confirm({html:e,timeout:t}){this.d.selectAll("*").remove();this.d.append("div").style("padding","5px").html(e);if(t)this.fadeTimeout=setTimeout((()=>{this.fadeout();delete this.fadeTimeout}),3e3)}toggle(){if(!this.hidden){this.hide();this.hidden=true}else{this.d.style("opacity",1).style("display","block");this.hidden=false}return this}getCustomApi(e={}){const t=Object.create(this);Object.assign(t,e);return t}destroy(){this.d.remove()}}function first_genetrack_tolist(e,t){if(!e.tracks)return;for(const n of e.tracks){if(n.__isgene){t.push(n);return}}}function table2col(e){const t=e.holder.append("div").style("max-width","80vw");const n=t.append("table").style("margin","5px 8px").attr("class","sja_simpletable");return{scrollDiv:t,table:n,addRow:()=>{if(n.node().offsetHeight>500){t.style("height","450px").style("resize","both").style("overflow-y","scroll").attr("class","sjpp_show_scrollbar")}const e=n.append("tr");const o=e.append("td").style("padding","3px").style("color","#555");const s=e.append("td");return[o,s]}}}function make_table_2col(e,t,n){const o="#9e9e9e";const s=e.append("table").style("margin","5px 8px").style("font-size","inherit").attr("class","sja_simpletable");for(const e of t){const t=s.append("tr");if(e.kvlst){t.append("td").attr("rowspan",e.kvlst.length).style("padding","3px").style("color",o).html(e.k);t.append("td").style("padding","3px").style("color",o).html(e.kvlst[0].k);t.append("td").style("padding","3px").html(e.kvlst[0].v);for(let t=1;t<e.kvlst.length;t++){const n=s.append("tr");n.append("td").style("padding","3px").style("color",o).html(e.kvlst[t].k);n.append("td").style("padding","3px").html(e.kvlst[t].v)}}else{t.append("td").attr("colspan",2).style("padding","3px").style("color",o).html(e.k);const s=t.append("td").style("padding","3px");if(n&&e.v.length>n){s.html(e.v.substr(0,n-3)+" ...&raquo;").attr("class","sja_clbtext").on("click",(()=>{s.html(e.v).classed("sja_clbtext",false).on("click",null)}))}else{s.html(e.v)}}}return s}function fillbar(e,t,n){if(!n)n={};const o=n.width||40;const s=n.height||12;let r;if(e){e.attr("title",(t.f*100).toFixed(0)+"%"+(t.v1!=undefined?" ("+t.v1+"/"+t.v2+")":""));r=e.append("svg").attr("width",o).attr("height",s)}else{r=d3select(document.body).append("svg")}let i=0;r.append("rect").attr("y",i).attr("width",o).attr("height",s).attr("fill",n.fillbg||"#CBE2F5");r.append("rect").attr("y",i).attr("width",o*t.f).attr("height",s).attr("fill",n.fill||"#69A1D1");if(n.readcountcredible&&t.v2<n.readcountcredible){const e="#545454";const t=.3;r.append("rect").attr("y",i).attr("width",o).attr("height",s).attr("fill",e).attr("fill-opacity",t)}if(e)return r;r.remove();return"<svg width="+o+" height="+s+">"+r.node().innerHTML+"</svg>"}const font="Arial";const unspecified="Unspecified";const colorinframe="green";const coloroutframe="#858585";const colorbgleft="#FCE3B8";const colorbgright="#D2E2FC";const colorantisense="red";const colorctx="#DE3336";const textlensf=.6;let base_zindex=null;const tkt=tkt$1;const gmmode=gmmode$1;const domaincolorlst=["#8dd3c7","#bebada","#fb8072","#80b1d3","#E8E89E","#a6d854","#fdb462","#ffd92f","#e5c494","#b3b3b3"];function appear$1(e,t){e.style("opacity",0).style("display",t||"block").transition().style("opacity",1)}function disappear$1(e,t){e.style("opacity",1).transition().style("opacity",0).call((()=>{if(t){e.remove()}else{e.style("display","none").style("opacity",1)}}))}const tip=new Menu({padding:""});tip.d.style("z-index",1e3);function sayerror$1(e,t){const n=e.append("div").attr("class","sja_errorbar");n.append("div").text(t);n.append("div").html("&#10005;").on("click",(()=>{disappear$1(n,true)}))}function axisstyle(e){if(!e||!e.axis)return;if(!e.color){e.color="#545454"}e.axis.selectAll("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");e.axis.selectAll("path").attr("fill","none").attr("stroke",e.showline?e.color:"none").attr("stroke-width",e.showline?1:0).attr("shape-rendering","crispEdges");e.axis.selectAll("text").style("cursor","default").attr("font-family",font).attr("font-size",e.fontsize?e.fontsize+"px":"12px").attr("fill",e.color)}function newpane(e){if(e.setzindex){base_zindex=e.setzindex;set_base_zindex(e.setzindex);return}const t=300;const n={};const o=d3select(document.body);n.pane=o.append("div").attr("class","sja_pane").style("left",e.x+window.pageXOffset+"px").style("top",e.y+window.pageYOffset+"px").style("opacity",0);if(e.$id){n.pane.attr("id",e.$id)}if(base_zindex){n.pane.style("z-index",base_zindex)}n.pane.transition().duration(t).style("opacity",1);const s=n.pane.append("div").on("mousedown",(e=>{e.preventDefault();e.stopPropagation();const t=Number.parseInt(n.pane.style("left")),s=Number.parseInt(n.pane.style("top"));const r=e.clientX,i=e.clientY;o.on("mousemove",(e=>{n.pane.style("left",t+e.clientX-r+"px").style("top",s+e.clientY-i+"px")}));o.on("mouseup",(function(){o.on("mouseup",null).on("mousemove",null)}));document.body.appendChild(n.pane.node())}));const r=s.append("div").attr("class","sja_menuoption").style("display","inline-block").style("padding","4px 10px").style("margin","0px").style("border-right","solid 1px white").style("cursor","default").style("font-size","1.5em").on("mousedown",(e=>{document.body.dispatchEvent(new Event("mousedown"));e.stopPropagation()}));if(e.toshrink){n.mini=false;r.html("&#9473;").on("click",(()=>{r.html(n.mini?"&#9473;":"&#9725;");if(n.mini){appear$1(n.body)}else{disappear$1(n.body)}n.mini=!n.mini}))}else{r.html("&times;");if(e.close){r.on("click",e.close)}else if(e.closekeep){r.on("click",(()=>{n.pane.transition().duration(t).style("opacity",0).call((()=>n.pane.style("display","none")))}))}else{r.on("click",(()=>{n.pane.transition().duration(t).style("opacity",0).call((()=>n.pane.remove()))}))}}n.header=s.append("div").style("display","inline-block").style("font-family",font).style("padding",e.headpad||"5px 10px");n.body=n.pane.append("div").style("font-family",font);return n}function getdomaintypes(e){if(!e.pdomains)return[];const t=new Map;for(const n of e.pdomains){const e=n.name+n.description;if(t.has(e)){t.get(e).start=Math.min(t.get(e).start,n.start)}else{t.set(e,{name:n.name,description:n.description,color:n.color,start:n.start,iscustom:n.iscustom,url:n.url,pmid:n.pmid,CDD:n.CDD,Pfam:n.Pfam,SMART:n.SMART,COG:n.COG,PRK:n.PRK,Curated_at_NCBI:n.Curated_at_NCBI})}}const n=[];for(const[e,o]of t){o.key=e;o.fill=o.color;o.stroke=rgb(o.color).darker(1).toString();delete o.color;n.push(o)}n.sort(((e,t)=>e.start-t.start));return n}function sketchSplicerna(e,t,n,o){let s=10;if(s*(t.exon.length-1)>n*.3){s=Math.max(2,n*.3/(t.exon.length-1))}let r=0;for(const e of t.exon){r+=e[1]-e[0]}const i=s*(t.exon.length-1);const a=(n-(i>n*.4?0:i))/r;n=a*r+i;const l=e.append("canvas").node();l.width=n;const c=20;const d=4;l.height=c;const p=l.getContext("2d");p.strokeStyle=o;p.beginPath();p.moveTo(0,Math.floor(c/2)-.5);p.lineTo(n,Math.floor(c/2)-.5);p.stroke();const f=t.strand=="-";let u=0;for(const e of t.exon){let n=null,r=null,i=null;if(f){const o=e[1],s=e[0],a=t.codingstop,l=t.codingstart;if(s>=a){n=e}else if(s>=l){if(o>=a){n=[a,o];r=[s,a]}else{r=e}}else{if(o>=a){n=[a,o];i=[s,l];r=[l,a]}else if(o>=l){i=[s,l];r=[l,o]}else{i=e}}}else{if(e[1]<=t.codingstart){n=e}else if(e[1]<=t.codingstop){if(e[0]<=t.codingstart){n=[e[0],t.codingstart];r=[t.codingstart,e[1]]}else{r=e}}else{if(e[0]<=t.codingstart){n=[e[0],t.codingstart];i=[t.codingstop,e[1]];r=[t.codingstart,t.codingstop]}else if(e[0]<t.codingstop){i=[t.codingstop,e[1]];r=[e[0],t.codingstop]}else{i=e}}}if(n){p.fillStyle="#aaa";const e=Math.max(1,(n[1]-n[0])*a);p.fillRect(u,d,e,c-d*2);u+=e}if(r){p.fillStyle=o;const e=Math.max(1,(r[1]-r[0])*a);p.fillRect(u,0,e,c);u+=e}if(i){p.fillStyle="#aaa";const e=Math.max(1,(i[1]-i[0])*a);p.fillRect(u,d,e,c-d*2);u+=e}u+=s}}function sketchGmsum(e,t,n,o,s,r,i,a){const l=e.append("canvas").node();l.width=r;l.height=i;const c=Math.ceil(i/5);const d=l.getContext("2d");let p;let f=0;for(const e of t){if(e.chr!=n.chr){f+=e.width+s;continue}if(n.start>=e.start&&n.start<=e.stop){p=f+(e.reverse?e.stop-n.start:n.start-e.start)*o;break}f+=e.width+s}let u;f=0;for(const e of t){if(e.chr!=n.chr){f+=e.width+s;continue}if(n.stop>=e.start&&n.stop<=e.stop){u=f+(e.reverse?e.stop-n.stop:n.stop-e.start)*o;break}f+=e.width+s}d.strokeStyle=a;d.beginPath();d.moveTo(p,Math.floor(i/2)+.5);d.lineTo(u,Math.floor(i/2)+.5);d.stroke();const h=[];if(n.utr5)h.push(...n.utr5);if(n.utr3)h.push(...n.utr3);if(!n.cdslen)h.push(...n.exon);for(const e of h){let r=0;for(const a of t){if(a.chr!=n.chr){r+=a.width+s;continue}const t=Math.max(e[0],a.start);const l=Math.min(e[1],a.stop);if(t>=l){r+=a.width+s;continue}d.fillStyle="#aaa";d.fillRect(r+(a.reverse?(a.stop-l)*o:(t-a.start)*o),c,Math.max(1,(l-t)*o),i-c*2);r+=a.width+s}}if(n.coding){for(const e of n.coding){let r=0;for(const l of t){if(l.chr!=n.chr){r+=l.width+s;continue}const t=Math.max(e[0],l.start);const c=Math.min(e[1],l.stop);if(t>=c){r+=l.width+s;continue}d.fillStyle=a;d.fillRect(r+(l.reverse?(l.stop-c)*o:(t-l.start)*o),0,Math.max(1,(c-t)*o),i);r+=l.width+s}}}}function sketchRna(e,t,n,o){const s=e.append("canvas").node();s.width=n;const r=20;const i=4;s.height=r;const a=s.getContext("2d");if(!t.cdslen){a.fillStyle="#aaa";a.fillRect(0,i,n,r-i*2);return}const l=n/t.rnalen;let c=0;if(t.utr5){let e=0;for(const n of t.utr5)e+=n[1]-n[0];a.fillStyle="#aaa";a.fillRect(0,i,l*e,r-i*2);c=l*e}if(t.pdomains&&t.pdomains.length){a.fillStyle="white";a.fillRect(c,0,t.cdslen*l,r);t.pdomains.sort(((e,t)=>t.stop-t.start-e.stop+e.start));for(const e of t.pdomains){a.fillStyle=e.color;a.fillRect(c+e.start*3*l,0,(e.stop-e.start+1)*3*l,r)}a.strokeStyle="black";a.strokeRect(c,0,t.cdslen*l,r)}else{a.fillStyle=o;a.fillRect(c,0,t.cdslen*l,r)}c+=t.cdslen*l;if(t.utr3){let e=0;for(const n of t.utr3)e+=n[1]-n[0];a.fillStyle="#aaa";a.fillRect(c,i,l*e,r-i*2)}}function sketchProtein2(e,t,n){const o=e.append("canvas").node();o.width=n;const s=20;o.height=s;const r=o.getContext("2d");const i=n/(t.cdslen/3);t.pdomains.sort(((e,t)=>t.stop-t.start-e.stop+e.start));r.fillStyle="white";r.fillRect(0,0,n,s);for(const e of t.pdomains){r.fillStyle=e.color;r.fillRect(e.start*i,0,(e.stop-e.start+1)*i,s)}r.strokeStyle="black";r.strokeRect(0,0,n,s)}function sketchGene(e,t,n,o,s,r,i,a,l){const c=e.append("canvas").node();c.width=n;c.height=o;const d=c.getContext("2d");const p=linear().range([1,n]);if(l){p.domain([r,s])}else{p.domain([s,r])}d.strokeStyle=i;d.fillStyle=i;u(d,t.start,t.stop,s,r,o/2,1);const f=Math.ceil(o/5);if(t.utr3){for(const e of t.utr3){u(d,e[0],e[1],s,r,f+1,o-f*2-1)}}if(t.utr5){for(const e of t.utr5){u(d,e[0],e[1],s,r,f+1,o-f*2-1)}}if(t.coding){for(const e of t.coding){u(d,e[0],e[1],s,r,1,o)}}if(t.codingstart==t.codingstop){for(const e of t.exon){u(d,e[0],e[1],s,r,f+1,o-f*2-1)}}if(!a&&t.strand){const e=3;if(t.coding){for(const n of t.coding){h(d,t.strand,n[0],n[1],s,r,1+e,o-e*2-1,"white")}}if(t.intron){for(const n of t.intron){h(d,t.strand,n[0],n[1],s,r,1+e,o-e*2-1,i?i:"black")}}}function u(e,t,n,o,s,r,i){const a=Math.max(t,o);const c=Math.min(n,s);if(a>=c)return;e.fillRect(Math.floor(p(l?c:a)),r,Math.max(1,Math.abs(p(c)-p(a))),i)}function h(e,t,n,o,s,r,i,a,l){const c=Math.max(n,s);const d=Math.min(o,r);if(c>=d)return;const f=2,u=a/2,h=p(d)-p(c);if(h<=f*2+a/2)return;e.strokeStyle=l;const m=Math.floor((h-f*2)/(a/2+u));let g=Math.floor(p(c)+(h-m*(a/2+u))/2)+.5;e.beginPath();for(let n=0;n<m;n++){if(t=="+"){e.moveTo(g,i);e.lineTo(g+a/2,i+a/2);e.lineTo(g,i+a)}else{e.moveTo(g+a/2,i);e.lineTo(g,i+a/2);e.lineTo(g+a/2,i+a)}g+=a/2+u}e.stroke()}}function sketchProtein(e,t,n){let o=-1;if(t.cdslen){o=t.cdslen/3}return e.append("span").html("&nbsp;"+(o>0?Math.ceil(o)+" AA"+(Number.isInteger(o)?"":" (incomplete CDS)"):"noncoding"))}function newpane3(e,t,n){const o=newpane({x:e,y:t});const s=o.body.append("div").style("margin","40px 20px 20px 20px");const r=s.append("p");r.append("span").html("Genome&nbsp;");const i=r.append("select");for(const e in n){i.append("option").text(e)}const a=s.append("div").style("margin","20px 0px");const l=o.body.append("div").style("margin","10px 20px");const c=o.body.append("div").style("margin","20px");return[o,s,i.node(),a,l,c]}function to_svg(e,t,n={}){if(n.apply_dom_styles){n.svgClone=e.cloneNode(true);const t=d3select(n.svgClone);for(const e of n.svgClone.querySelectorAll(".sjpp-exclude-svg-download")){e.remove()}const o=window.getComputedStyle(e);for(const e of o){t.style(e,o.getPropertyValue(e))}}const o=document.createElement("a");document.body.appendChild(o);o.addEventListener("click",(function(){const s=new XMLSerializer;const r=new Blob([s.serializeToString(n.svgClone?n.svgClone:e)],{type:"image/svg+xml"});o.download=t+".svg";o.href=URL.createObjectURL(r);document.body.removeChild(o)}),false);o.click()}function filetypeselect(e){const t=e.append("select");t.append("option").text("SNV and indel");t.append("option").text("SV (tabular format)");t.append("option").text("Fusion gene (tabular format)");t.append("option").text("ITD");t.append("option").text("Deletion, intragenic");t.append("option").text("Truncation");t.append("option").text("CNV, gene-level");return t}function export_data(e,t,n=1,o=1,s=10,r=100,i=null){let a;if(!i){const t=newpane({x:(window.innerWidth/2-200)*n,y:(window.innerHeight/2-150)*o});t.header.text(e);a=t.body}else{i.append("p").text(e);a=i.append("div")}for(const e of t){const t=a.append("div").style("margin-top","10px");if(e.label){t.append("div").text(e.label).style("margin","5px")}a.append("textarea").text(e.text).attr("readonly",1).attr("rows",s).attr("cols",r)}a.append("p").style("font-size",".7em").text("Click on the text box above and press Ctrl-A to select all text for copy-pasting.")}function flyindi(e,t){const n=e.node().getBoundingClientRect();const o=t.node().getBoundingClientRect();const s=d3select(document.body).append("div").style("position","absolute").style("border","solid 1px black").style("left",n.left+window.pageXOffset+"px").style("top",n.top+window.pageYOffset+"px").style("width",n.width+"px").style("height",n.height+"px");if(base_zindex){s.style("z-index",base_zindex+3)}s.transition().duration(500).style("left",o.left+window.pageXOffset+"px").style("top",o.top+window.pageYOffset+"px").style("width",o.width+"px").style("height",o.height+"px").on("end",(()=>s.remove()))}function labelbox(e){const t=16;if(!e.color){e.color="#ccc"}const n=e.holder.append("div").style("position","relative").style("padding-top",t/2+"px");if(e.margin){n.style("margin",e.margin)}const o=n.append("div").style("border","solid 1px "+e.color).style("padding",t+"px").style("padding-bottom",t/2+"px");n.append("div").text(e.label).style("position","absolute").style("left","15px").style("top","0px").style("background-color","white").style("color",e.color).style("font-family",font).style("font-size",t+"px").style("padding","0px 10px");return o}function category2legend(e,t){t.selectAll("*").remove();for(const n in e){const o=e[n];const s=t.append("div").style("display","inline-block").style("white-space","nowrap").style("padding","5px 20px 5px 0px");s.append("div").style("display","inline-block").style("background-color",o.color).style("margin-right","5px").style("padding","0px 4px").html("&nbsp;");s.append("div").style("display","inline-block").style("color",o.color).text(o.label)}}function bulk_badline(e,t){if(window.location.hostname=="viz.stjude.cloud"||window.location.hostname=="pecan.stjude.cloud")return;if(window.sessionStorage.getItem("suppressErrors")?.includes(`"bulk-bad-lines"`))return;const n=newpane({x:400,y:60});n.body.style("margin","20px 10px 10px 10px");n.header.text(t.length+" line"+(t.length>1?"s":"")+" rejected, click to check");if(t.length<=50){for(const[o,s,r]of t){n.body.append("div").classed("sja_clbtext",true).style("margin","3px").text("Line "+o+": "+s).on("click",(()=>{const t=newpane({x:500,y:60});t.header.text("Line "+o);t.body.style("margin","10px");const n=t.body.append("table").style("border-spacing","1px").style("border-collapse","separate");let s=true;for(let t=0;t<e.length;t++){const o=n.append("tr");if(s){o.style("background-color","#ededed")}s=!s;o.append("td").text(e[t]);o.append("td").text(r[t]==undefined?"":r[t])}}))}return}const o=new Map;for(const[e,n,s]of t){if(!o.has(n)){o.set(n,[])}o.get(n).push({number:e,line:s})}const s=[...o];s.sort(((e,t)=>t[1].length-e[1].length));for(const[t,o]of s){const s=o[0];n.body.append("div").classed("sja_menuoption",true).style("margin","5px").text("Line "+s.number+": "+t+(o.length>1?" (total "+o.length+" lines)":"")).on("click",(()=>{const t=newpane({x:500,y:60});t.header.text("Line "+s.number);const n=t.body.style("margin","10px").append("table");let o=true;for(let t=0;t<e.length;t++){const r=n.append("tr");if(o){r.style("background-color","#ededed")}o=!o;r.append("td").text(e[t]);r.append("td").text(s.line[t]==undefined?"":s.line[t])}}))}}function ensureisblock(e){if(!e)return"No Block{} object given";if(typeof e!="object")return"Block is not an object";if(!e.error)return"method block.error() missing";if(!e.genome)return"block.genome missing";return null}function mclasscolorchangeui(e){e.d.append("p").html('<span style="color:#858585;font-size:.7em">EXAMPLE</span> M ; red');const t=e.d.append("textarea").attr("cols",25).attr("rows",5).attr("placeholder","One class per line, join color and class code by semicolon.");const n=e.d.append("div");n.append("button").text("Submit").on("click",(()=>{const e=t.property("value").trim();if(!e)return;o.text("");const n=[];for(const t of e.split("\n")){const e=t.split(";");if(e.length!=2)return o.text("no separator in line: "+t);const s=e[0].trim();const r=e[1].trim();if(!s||!r)return o.text("wrong line: "+t);if(!mclass[s])return o.text("wrong class: "+s);n.push([s,r])}if(n.length){for(const[e,t]of n){mclass[e].color=t}mclasscolor2table(s);o.text("New color set!")}}));n.append("button").text("Clear").on("click",(()=>{t.property("value","");o.text("")}));const o=n.append("span").style("margin-left","10px");const s=e.d.append("div").style("margin-top","5px");mclasscolor2table(s);e.d.append("p").style("font-size",".8em").html("<a href=https://en.wikipedia.org/wiki/Web_colors target=_blank>Use color names</a>, or #ff0000 or rgb(255,0,0)")}function mclasscolor2table(e,t){e.style("border-spacing","3px").selectAll("*").remove();const n=e.append("tr").style("color","#858585").style("font-size",".7em");n.append("td").text("CLASS");n.append("td").attr("colspan",2).text("LABEL, COLOR");for(const n in mclass){const o=mclass[n];if(t&&o.dt!=dtsnvindel)continue;const s=e.append("tr");s.append("td").text(n);{const e=s.append("td").append("span").attr("class","sja_mcdot").style("background-color",o.color).html("&nbsp;&nbsp;");if(n=="Blank")e.style("border","solid 1px #eee")}s.append("td").text(o.label).style("color",n=="Blank"?"#ddd":o.color)}}const bwSetting={height:1,pcolor:2,ncolor:3,pcolor2:4,ncolor2:5,autoscale:6,fixedscale:7,percentilescale:8,nodotplot:9,usedotplot:10,usedividefactor:11,nodividefactor:12};function tkexists(e,t){for(const n of t){if(n.type!=e.type)continue;switch(e.type){case tkt.bigwig:case tkt.bedj:case tkt.junction:case tkt.mdsjunction:case tkt.mdscnv:case tkt.bampile:case tkt.hicstraw:case tkt.expressionrank:if(e.file&&e.file==n.file||e.url&&e.url==n.url){return n}break;case tkt.bigwigstranded:if(e.strand1&&n.strand1&&e.strand1.file==n.strand1.file&&e.strand1.url==n.strand1.url){if(e.strand2&&n.strand2&&e.strand2.file==n.strand2.file&&e.strand2.url==n.strand2.url){return n}}break}}return null}function ranksays(e){if(e>=100)return"HIGHEST";if(e>=90)return"HIGH "+e+"%";if(e>=70)return"high "+e+"%";if(e>=30)return e+"%";if(e>=10)return"low "+e+"%";if(e>0)return"LOW "+e+"%";return"LOWEST"}function rgb2hex(e){if(e[0]=="#")return e;const t=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&t.length===4?"#"+("0"+parseInt(t[1],10).toString(16)).slice(-2)+("0"+parseInt(t[2],10).toString(16)).slice(-2)+("0"+parseInt(t[3],10).toString(16)).slice(-2):""}function keyupEnter(e){return e.code=="Enter"||e.code=="NumpadEnter"}function may_findmatchingsnp(e,t,n,o){if(!n||!n.hasSNP)return;const s={byCoord:true,genome:n.name,chr:e,ranges:[],alleleLst:o};for(const e of t){if(Number.isFinite(e)){s.ranges.push({start:e,stop:e+1})}else if(e.start&&e.stop){s.ranges.push(e)}}return dofetch("snp",s).then((e=>{if(e.error)throw e.error;return e.results}))}function snp_printhtml(e,t){t.append("a").text(e.name).attr("href","https://www.ncbi.nlm.nih.gov/snp/"+e.name).attr("target","_blank");t.append("div").attr("class","sja_tinylogo_body").text(e.observed);t.append("div").attr("class","sja_tinylogo_head").text("ALLELE")}function clinvar_printhtml(e,t){t.append("div").style("display","inline-block").style("background",e.bg).style("padding","3px").append("a").attr("href","https://www.ncbi.nlm.nih.gov/clinvar/variation/"+e.id).attr("target","_blank").style("color",e.textcolor).text(e.value).style("font-size",".9em").style("text-decoration","none")}function gmlst2loci(e){const t=[];for(const n of e){let e=true;for(const o of t){if(n.chr==o.chr&&Math.max(n.start,o.start)<Math.min(n.stop,o.stop)){o.start=Math.min(o.start,n.start);o.stop=Math.max(o.stop,n.stop);e=false}}if(e){t.push({name:n.isoform,chr:n.chr,start:n.start,stop:n.stop})}}return t}function tab2box(e,t,n,o){const s=e.append("table").style("border-spacing","0px").style("border-collapse","separate").append("tr");const r=s.append("td").style("vertical-align","top").style("padding","10px 0px 10px 10px");const i=s.append("td").style("vertical-align","top").style("border-left","solid 1px #aaa").style("padding","10px");const a=t.findIndex((e=>e.active))==-1?false:true;if(o){r.append("div").style("padding","5px 10px").style("margin","5px 5px 10px 5px").style("font-weight","550").text(o)}for(let e=0;e<t.length;e++){const o=t[e];o.tab=r.append("div").style("padding","5px 10px").style("margin","0px").style("border-top","solid 1px #ddd").style("border-radius","0px").classed("sja_menuoption",!a&&e!=0).html(o.label);o.box=i.append("div").style("padding","3px").style("display",!a&&e==0||o.active?"block":"none");if(n&&o.callback||!a&&e==0&&o.callback||o.active){o.callback(o.box);delete o.callback}if(a)o.tab.classed("sja_menuoption",!o.active);o.tab.on("click",(()=>{if(o.box.style("display")!="none"){o.tab.classed("sja_menuoption",true);o.box.style("display","none")}else{o.tab.classed("sja_menuoption",false);appear$1(o.box);for(let n=0;n<t.length;n++){if(e!=n){t[n].tab.classed("sja_menuoption",true);t[n].box.style("display","none")}}}if(o.callback){o.callback(o.box);delete o.callback}}))}}function tab_wait(e){return e.append("div").style("margin","30px").text("Loading...")}var client=Object.freeze({__proto__:null,dofetch:dofetch,dofetch2:dofetch2,dofetch3:dofetch3,Menu:Menu,first_genetrack_tolist:first_genetrack_tolist,make_table_2col:make_table_2col,fillbar:fillbar,font:font,unspecified:unspecified,colorinframe:colorinframe,coloroutframe:coloroutframe,colorbgleft:colorbgleft,colorbgright:colorbgright,colorantisense:colorantisense,colorctx:colorctx,textlensf:textlensf,get base_zindex(){return base_zindex},tkt:tkt,gmmode:gmmode,domaincolorlst:domaincolorlst,appear:appear$1,disappear:disappear$1,tip:tip,sayerror:sayerror$1,axisstyle:axisstyle,newpane:newpane,getdomaintypes:getdomaintypes,sketchSplicerna:sketchSplicerna,sketchGmsum:sketchGmsum,sketchRna:sketchRna,sketchProtein2:sketchProtein2,sketchGene:sketchGene,sketchProtein:sketchProtein,newpane3:newpane3,to_svg:to_svg,filetypeselect:filetypeselect,export_data:export_data,flyindi:flyindi,labelbox:labelbox,category2legend:category2legend,bulk_badline:bulk_badline,ensureisblock:ensureisblock,mclasscolorchangeui:mclasscolorchangeui,mclasscolor2table:mclasscolor2table,bwSetting:bwSetting,tkexists:tkexists,ranksays:ranksays,rgb2hex:rgb2hex,keyupEnter:keyupEnter,may_findmatchingsnp:may_findmatchingsnp,snp_printhtml:snp_printhtml,clinvar_printhtml:clinvar_printhtml,gmlst2loci:gmlst2loci,tab2box:tab2box,tab_wait:tab_wait});function debounce(e,t,n){var o,s,r,i,a;if(null==t)t=100;function l(){var c=Date.now()-i;if(c<t&&c>=0){o=setTimeout(l,t-c)}else{o=null;if(!n){a=e.apply(r,s);r=s=null}}}var c=function(){r=this;s=arguments;i=Date.now();var c=n&&!o;if(!o)o=setTimeout(l,t);if(c){a=e.apply(r,s);r=s=null}return a};c.clear=function(){if(o){clearTimeout(o);o=null}};c.flush=function(){if(o){a=e.apply(r,s);r=s=null;clearTimeout(o);o=null}};return c}debounce.debounce=debounce;var debounce_1=debounce;function gene_searchbox(e){const t=e.div.append("input").attr("placeholder","Search gene").style("width",e.width||"100px");const n=e.resultdiv||(e.tip?e.tip.d:tip.d);function o(){if(e.resultdiv){e.resultdiv.selectAll("*").remove()}else if(e.tip){e.tip.hide()}else{tip.hide()}}t.on("keyup",(t=>{const s=t.target.value;if(s.length<=1){o();return}if(keyupEnter(t)){const t=n.select(".sja_menuoption");if(t.size()>0){e.callback(t.text());o()}return}r()}));t.node().focus();function s(){dofetch("genelookup",{genome:e.genome,input:t.property("value")}).then((s=>{if(s.error)throw s.error;if(!s.hits)throw".hits[] missing";if(e.resultdiv){e.resultdiv.selectAll("*").remove()}else if(e.tip){e.tip.clear().showunder(t.node())}else{tip.clear().showunder(t.node())}for(const t of s.hits){n.append("div").attr("class","sja_menuoption").text(t).on("click",(()=>{e.callback(t);o()}))}})).catch((e=>{n.append("div").text(e.message||e);if(e.stack)console.log(e.stack)}))}const r=debounce_1.debounce(s,300)}function findgenemodel_bysymbol(e,t){return dofetch3("genelookup",{body:{deep:1,input:t,genome:e}}).then((e=>{if(e.error)throw e.error;if(!e.gmlst||e.gmlst.length==0)return null;return e.gmlst})).catch((e=>{throw e}))}function styleInject(e,t){if(t===void 0)t={};var n=t.insertAt;if(!e||typeof document==="undefined"){return}var o=document.head||document.getElementsByTagName("head")[0];var s=document.createElement("style");s.type="text/css";if(n==="top"){if(o.firstChild){o.insertBefore(s,o.firstChild)}else{o.appendChild(s)}}else{o.appendChild(s)}if(s.styleSheet){s.styleSheet.cssText=e}else{s.appendChild(document.createTextNode(e))}}var css_248z='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type="button"],\n[type="reset"],\n[type="submit"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type="button"]::-moz-focus-inner,\n[type="reset"]::-moz-focus-inner,\n[type="submit"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type="button"]:-moz-focusring,\n[type="reset"]:-moz-focusring,\n[type="submit"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type="checkbox"],\n[type="radio"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type="number"]::-webkit-inner-spin-button,\n[type="number"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type="search"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type="search"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n\npre code.hljs{display:block;overflow-x:auto;padding:1em}\n\ncode.hljs{padding:3px 5px}\n\n/*!\n Theme: GitHub\n Description: Light theme as seen on github.com\n Author: github.com\n Maintainer: @Hirse\n Updated: 2021-05-15\n\n Outdated base version: https://github.com/primer/github-syntax-light\n Current colors taken from GitHub\'s CSS\n*/\n\n.hljs{color:#24292e;background:#fff}\n\n.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}\n\n.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}\n\n.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}\n\n.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}\n\n.hljs-built_in,.hljs-symbol{color:#e36209}\n\n.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}\n\n.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}\n\n.hljs-subst{color:#24292e}\n\n.hljs-section{color:#005cc5;font-weight:700}\n\n.hljs-bullet{color:#735c0f}\n\n.hljs-emphasis{color:#24292e;font-style:italic}\n\n.hljs-strong{color:#24292e;font-weight:700}\n\n.hljs-addition{color:#22863a;background-color:#f0fff4}\n\n.hljs-deletion{color:#b31d28;background-color:#ffeef0}\n\n/*\nhtml {\n height:100%;\n}\nbody {\n min-height:100%;\n}\ntable {\n font-size:1em;\n border-spacing:1px;\n border-collapse:separate;\n}\n*/\n\n/***************************************\nCSS properties that are not covered \nby normalize.css are covered here\n****************************************/\n\nh2 {\n margin-block-start: 0.83em;\n margin-block-end: 0.83em;\n}\n\n/***************************************\n tag-based styles\n\n prevent embedder styles from overriding\n the styles within pp-controlled divs\n****************************************/\n\n/* use default browser styles within pp-controlled divs */\n\n/* using the !important flag:\n- this flag is used to override conflicting styles\n- this flag will override both embedder styling and inline styling\n- it is not necessary to use this flag to prevent embedder styles from overriding pp styles, because specifying styles within pp-specific classes will usually prevent this issue\n- the only time when it is necessary to use this flag is when (1) the conflicting styling also has an !important flag or (2) the conflicting styling is also specified in this same file\n*/\n\n.sja_root_holder {\n /*background-color: #fff;*/\n}\n\n.sja_root_holder,\n.sja_menu_div,\n.sja_pane {\n all: initial;\n /* block inheritance for all properties */\n}\n\n.sja_root_holder table,\n.sja_menu_div table,\n.sja_pane table {\n border-collapse: separate;\n border-spacing: 2px;\n}\n\n.sja_root_holder svg {\n display: inline-block;\n}\n\n/*\n override the thicker button border\n that results when a button\'s \n border-radius: 0 which seems to override\n all associated styles of \n -webkit-appearance: button;\n*/\n\n.sja_root_holder button,\n.sja_menu_div button,\n.sja_pane button {\n padding: 2px 3px;\n border-width: 1px;\n border-style: solid;\n border-radius: 3px;\n box-shadow: inset 0 0 0 99999px rgba(255, 255, 255, 0.3);\n font-family: Arial;\n color: black;\n background-color: buttonface;\n border-color: buttonborder;\n}\n\n.sja_root_holder button:disabled,\n.sja_menu_div button:disabled,\n.sja_pane button:disabled {\n background-color: rgba(239, 239, 239, 0.3);\n color: rgba(16, 16, 16, 0.3);\n border-color: rgba(118, 118, 118, 0.3);\n}\n\n.sja_root_holder button:hover,\n.sja_menu_div button:hover,\n.sja_pane button:hover {\n box-shadow: none;\n}\n\n.sja_root_holder label,\n.sja_menu_div label,\n.sja_pane label {\n margin-bottom: 0;\n}\n\n.sja_root_holder a,\n.sja_menu_div a,\n.sja_pane a,\n.linkText {\n color: rgb(0, 0, 238);\n cursor: pointer;\n text-decoration: underline;\n}\n\n.sja_root_holder input,\n.sja_menu_div input,\n.sja_pane input {\n padding: 1px 3px;\n margin: 2px 5px;\n border: 1px solid #ccc;\n}\n\n.sja_root_holder select,\n.sja_menu_div select,\n.sja_pane select {\n padding: 1px 3px;\n padding-right: 30px; /* padding between text and arrow */\n background-size: auto;\n background-position: right;\n}\n\n.sja_root_holder textarea,\n.sja_menu_div textarea,\n.sja_pane textarea {\n padding: 2px;\n}\n\n.sja_root_holder input[type="search"].tree_search {\n -webkit-appearance: searchfield;\n}\n\n.sja_root_holder ul {\n display: block;\n list-style-type: disc;\n margin-block-start: 1em;\n margin-block-end: 1em;\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: 40px;\n}\n\n.sja_root_holder ul ul {\n list-style-type: circle;\n}\n\n.sja_root_holder li {\n display: list-item;\n text-align: -webkit-match-parent;\n}\n\n/*************************\n class-specific styles\n*************************/\n\n.sja_errorbar {\n position: relative;\n padding: 5px 50px 5px 10px;\n background-color: rgba(200, 0, 0, .1);\n color: rgba(190, 0, 0, .5);\n border: solid 1px rgba(200, 0, 0, .2);\n /*border-width: 1px 0px;*/\n}\n\n.sja_errorbar>:nth-child(2) {\n position: absolute;\n padding: 5px 10px;\n cursor: default;\n top: 0px;\n right: 10px;\n}\n\n.sja_inset_a {\n background-color: #ebedeb;\n box-shadow: inset 0px 0px 14px 0px #858585;\n padding: 5px 10px;\n}\n\n.sja_menu,\n.sja_menu_persist,\n.sja_tooltip {\n position: absolute;\n background-color: white;\n font-family: Arial;\n z-index: 1000;\n}\n\n/* /client/src/app.js start */\n\n.sja_menuoption {\n color: black;\n padding: 5px 10px;\n cursor: default;\n background-color: #f2f2f2;\n margin: 1px;\n border-radius: 5px;\n}\n\n.sja_menuoption_not_interactive {\n padding: 5px 10px;\n cursor: default;\n margin: 1px;\n}\n\n.sja_sharp_border {\n border-radius: 0px;\n}\n\n.sja_menuoption:hover {\n background-color: #e6e6e6\n}\n\n.sja_menuoption:active {\n color: #cc0000;\n background-color: #FCE2E1;\n}\n\n/* /client/src/app.js end */\n\n.sja_filter_tag_btn {\n display: inline-block;\n color: black;\n padding: 5px 8px;\n background-color: #cfe2f3;\n cursor: default;\n}\n\n/* .sja_filter_tag_btn:hover { opacity: 0.8; cursor:default} */\n\n.sja_filter_tag_btn:active {\n color: #cc0000;\n opacity: 0.6;\n}\n\n.ts_pill:hover,\n.tvs_pill:hover {\n opacity: 0.8;\n cursor: default\n}\n\n.sjpp_apply_btn {\n background-color: #d0e0e3;\n border-radius: 13px !important; \n padding: 7px 15px !important;\n border: 0px !important;\n}\n\n.sjpp_delete_btn,\n.remove_btn {\n background-color: #f4cccc;\n}\n\n.ts_summary_btn {\n background-color: #d9d2e9;\n}\n\n/* mostly for table tr */\n\n.sja_clb {\n padding: 5px 10px;\n cursor: default;\n}\n\n.sja_clb:hover {\n background: #ffff99;\n}\n\n.sja_clb:active {\n background: #ffcc99;\n}\n\n.sja_clb_selected {\n padding: 5px 10px;\n cursor: default;\n background: #FAF0C8;\n border-bottom: solid 2px #E3CA64;\n}\n\n.sja_clb_selected:hover {\n background: #FCE68B\n}\n\n.sja_clb_selected:active {\n background: #ffcc99\n}\n\n/* table tr, gray highlight */\n\n.sja_clb_gray {\n padding: 5px 10px;\n cursor: default;\n}\n\n.sja_clb_gray:hover {\n background-color: #f1f1f1;\n}\n\n.sja_clb_gray:active {\n background-color: #ffffcc;\n}\n\n.sja_hideable_legend {\n cursor: default;\n}\n\n.sja_hideable_legend:hover {\n background: #ffff99;\n}\n\n.sja_legend_more_btn {\n padding: 3px;\n text-align: center;\n font-size: 0.7em;\n opacity: 0.5;\n cursor: default;\n}\n\n.sja_legend_more_btn:hover {\n text-decoration: underline;\n}\n\n/* text only */\n\n.sja_clbtext2 {\n cursor: default;\n text-decoration: none;\n}\n\n.sja_clbtext2:hover {\n text-decoration: underline;\n}\n\n.sja_clbtext2:active {\n fill: #CC0000;\n color: #CC0000;\n}\n\n.sja_clbtext {\n cursor: default;\n color: black;\n fill: black;\n border-bottom: solid 1px transparent;\n}\n\n.sja_clbtext:hover {\n color: #631318;\n fill: #631318;\n border-color: black;\n}\n\n.sja_clbtext:active {\n color: #CC0000;\n border-color: #cc0000;\n fill: #cc0000;\n}\n\n.sja_clbtextbold {\n cursor: default;\n color: black;\n fill: black;\n font-weight: normal;\n}\n\n.sja_clbtextbold:hover {\n color: #631318;\n fill: #631318;\n font-weight: bold;\n}\n\n.sja_clbtextbold:active {\n color: #CC0000;\n fill: #cc0000;\n font-weight: bold;\n}\n\n.sja_opaque6 {\n opacity: .6;\n cursor: default;\n}\n\n.sja_opaque6:hover {\n opacity: .9;\n}\n\n.sja_opaque8 {\n opacity: .8;\n cursor: default;\n}\n\n.sja_opaque8:hover {\n opacity: 1;\n}\n\n.sja_simpletable tr td {\n border-bottom: solid 1px #ededed;\n}\n\n.sja_mcdot {\n cursor: default;\n border-radius: 8px;\n padding: 1px 2px;\n margin-right: 1px;\n color: white;\n font-size: .8em;\n}\n\n.sja_variantpagesnv {\n cursor: default;\n display: inline-block;\n border-radius: 3px;\n padding: 3px 10px;\n margin-right: 2px;\n color: white;\n background-color: #0099FF;\n opacity: .6;\n}\n\n.sja_variantpagesnv:hover {\n opacity: 1;\n}\n\n.sja_variantpagesnv:active {\n background-color: #3366FF;\n}\n\n.sja_selectsample {\n cursor: default;\n display: inline-block;\n border-radius: 2px;\n border: solid 1px #545454;\n padding: 3px 10px;\n margin-right: 2px;\n color: #545454;\n background-color: white;\n font-size: .8em;\n}\n\n.sja_selectsample:hover {\n background-color: #f1f1f1;\n}\n\n.sja_selectsample:active {\n background-color: #F2E1E3;\n}\n\n.sja_pane {\n position: absolute;\n /*border:solid 1px #ccc;\n */\n box-shadow: 0px 2px 4px 1px #999;\n background-color: white;\n}\n\n.sja_pane>:first-child {\n padding-right: 10px;\n cursor: move;\n background-color: #f0f0f0;\n}\n\n.sja_pane>:nth-child(2) {\n padding: 0px 10px 10px 10px;\n font-family: Arial;\n}\n\n.sja_cursor_hmove {\n cursor: ew-resize;\n}\n\n.sja_svgtext {\n cursor: default;\n fill-opacity: .8\n}\n\n.sja_svgtext2 {\n cursor: default;\n fill: black;\n}\n\n.sja_svgtext2:hover {\n fill: #B30000\n}\n\n.sja_clb5 {\n /* tree button */\n cursor: default;\n display: inline-block;\n border: solid 1px #006600;\n color: #006600;\n background-color: white;\n margin-left: 6px;\n padding: 0px 4px;\n font-size: 80%;\n}\n\n.sja_clb5:hover {\n background-color: #006600;\n color: white;\n}\n\n.sja_clb5:active {\n background-color: #009900;\n}\n\n.sja_clb2 {\n color: black;\n font-family: Courier;\n display: inline-block;\n padding: 1px 5px;\n cursor: default;\n}\n\n.sja_clb2:hover {\n background-color: #ffff99;\n}\n\n.sja_clb2:active {\n background-color: #ccff99;\n}\n\n.sja_clbb {\n /* highlight border */\n border: solid 1px transparent;\n cursor: default;\n}\n\n.sja_clbb:hover {\n border-color: #ccc;\n}\n\n.sja_clbbox {\n cursor: default;\n padding: 2px 5px;\n color: white;\n font-size: .7em;\n font-weight: normal;\n}\n\n.sja_clbbox:hover {\n font-weight: bold;\n}\n\n.sja_tr {\n cursor: default;\n background-color: #f1f1f1;\n}\n\n.sja_tr:hover {\n background-color: white;\n}\n\n.sja_tr:active {\n background-color: #ffffcc;\n}\n\n.sja_tr2 {\n cursor: default;\n}\n\n.sja_tr2:hover {\n background-color: #ffffcc;\n}\n\n.sja_tr2:active {\n background-color: #ffff00;\n}\n\n.sja_aa_disclabel {\n cursor: default;\n}\n\n.sja_aa_discnum {\n cursor: default;\n text-rendering: geometricPrecision;\n}\n\n.sja_aa_skkick:hover {\n stroke: #858585;\n}\n\n.sja_aa_disckick:hover {\n stroke-opacity: 1;\n}\n\n.sja_menuoption_y {\n display: inline-block;\n color: black;\n padding: 2px 4px;\n cursor: default;\n background-color: #E6E5C5;\n margin: 2px;\n}\n\n.sja_menuoption_y:hover {\n background-color: #DEDCA9\n}\n\n.sja_menuoption_y:active {\n background-color: #FFFF99\n}\n\n.sja_menuoption_r {\n display: inline-block;\n color: black;\n padding: 2px 4px;\n cursor: default;\n background-color: #EDDDDE;\n margin: 2px;\n}\n\n.sja_menuoption_r:hover {\n background-color: #E8CFD1\n}\n\n.sja_menuoption_r:active {\n background-color: #FCD9DD\n}\n\n.sja_error2 {\n display: inline-block;\n padding: 5px 50px 5px 10px;\n margin: 10px 20px;\n background-color: rgba(200, 0, 0, .5);\n color: white;\n border-radius: 6px;\n}\n\n.sja_paint {\n position: relative;\n}\n\n.sja_paint>:first-child {}\n\n.sja_paint>:nth-child(2) {\n position: absolute;\n padding: 3px 6px;\n cursor: default;\n top: 10px;\n right: 30px;\n font-size: 80%;\n}\n\n.sja_tree_ul {\n list-style-type: none;\n padding-left: 25px;\n line-height: 1.4;\n}\n\n.sja_input {\n display: inline-block;\n padding: 2px 6px;\n}\n\n.sja_bulkcell {\n display: inline-block;\n width: 3px;\n height: 9px;\n margin: 1px 1px 0px 0px;\n}\n\n.sja_tag {\n display: inline-block;\n margin-left: 10px;\n padding: 1px 3px;\n background-color: #858585;\n color: white;\n font-size: 80%;\n}\n\n.sja_bgbox {\n cursor: default;\n fill: yellow;\n fill-opacity: 0;\n}\n\n.sja_bgbox:hover {\n fill-opacity: .2;\n}\n\n.sja_diseasehm_search_item {\n display: inline-block;\n margin: 3px;\n padding: 2px;\n}\n\n.sja_pulse {\n animation: pulse .5s alternate infinite;\n}\n\n@keyframes pulse {\n from {\n opacity: .2;\n }\n to {\n opacity: 1;\n }\n}\n\n.sja_hm-edittool-table td {\n padding: 0 2px;\n cursor: pointer;\n text-align: center;\n font-size: 14px;\n}\n\n.sja_hm-edittool-table td:hover {\n opacity: 1;\n font-weight: 600;\n}\n\n.sja_tinylogo_head {\n display: inline-block;\n background-color: #858585;\n color: white;\n font-size: .6em;\n padding: 1px 3px;\n}\n\n.sja_tinylogo_body {\n display: inline-block;\n margin-left: 10px;\n background-color: #ededed;\n font-size: .9em;\n color: black;\n padding: 1px 5px;\n}\n\n.sja_handle_green {\n display: inline-block;\n font-size: .9em;\n padding: 3px 6px;\n background-color: #f0f7f1;\n color: #146E17;\n cursor: default;\n}\n\n.sja_handle_green:hover {\n background-color: #D5F0D8;\n}\n\n.sja_handle_green:active {\n background-color: #BAD1BC;\n color: black;\n}\n\n.sja_handle_red {\n display: inline-block;\n font-size: .9em;\n padding: 3px 6px;\n background-color: #F5EBEC;\n color: #991F1F;\n cursor: default;\n}\n\n.sja_handle_red:hover {\n background-color: #F2D8DB;\n}\n\n.sja_handle_red:active {\n background-color: #E3B1B7;\n color: black;\n}\n\n.sja_btn {\n -webkit-appearance: button;\n -moz-appearance: button;\n appearance: button;\n text-decoration: none;\n color: initial;\n}\n\n.sja_button {\n display: inline-block;\n background: white;\n padding: 3px 5px;\n border: solid 1px black;\n opacity: .8;\n cursor: default;\n}\n\n.sja_button:hover {\n opacity: 1;\n}\n\n.sja_button_open {\n display: inline-block;\n background: #ddd;\n padding: 3px 5px;\n border: solid 1px black;\n opacity: .8;\n cursor: default;\n}\n\n.sja_button_open:hover {\n opacity: 1;\n}\n\n.sja_button_fold {\n display: inline-block;\n background: #aaa;\n color: white;\n padding: 3px 5px;\n border: solid 1px black;\n opacity: .8;\n cursor: default;\n}\n\n.sja_button_fold:hover {\n opacity: 1;\n}\n\n.sja-termdb-config-row-label {\n padding: 5px;\n text-align: left;\n vertical-align: middle;\n}\n\n.sjpp-controls-table {\n margin-bottom: 10px;\n}\n\n.sjpp-controls-table tr:hover {\n /*font-weight: 600;*/\n text-shadow:0px 0px 0.5px black;\n background-color: rgba(240, 236, 123, 0.5);\n}\n\n.sja_edit_btn {\n display: inline-block;\n color: black;\n background-color: #f2f2f2;\n border-radius: 5px;\n border: solid 1px #aaa;\n padding: 5px 10px;\n cursor: default;\n margin: 1px;\n font-size: 0.8em;\n margin-left: 20px;\n}\n\n.sja_edit_btn:hover {\n background-color: #e6e6e6\n}\n\n.sja_edit_btn:active {\n color: #cc0000;\n background-color: #FCE2E1;\n}\n\n/* App Drawer style */\n\n.sjpp-appdrawer-cols {\n font-family: Verdana, Geneva, Tahoma, sans-serif;\n font-weight: 500;\n font-size: 17px;\n text-align: left;\n color: #324870;\n margin: 10px 10px 0px 10px;\n}\n\n.sjpp-track, .sjpp-track li {\n display: grid !important;\n grid-template-columns: 2fr 4fr 40px;\n grid-template-areas: \'image header\' \'image blurb\';\n gap: 5px;\n}\n\n.sjpp-app-drawer-card,\n.sjpp-track {\n background-color: white;\n max-width: 400px;\n /* min-width: 320px; */\n border-radius: 5px;\n padding: 0px;\n align-items: center;\n justify-items: left;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n -webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n}\n\n.sjpp-app-drawer-card::after,\n.sjpp-track::after {\n content: "";\n border-radius: 8px;\n position: absolute;\n z-index: -1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);\n opacity: 0;\n -webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n}\n\n.sjpp-app-drawer-card:hover,\n.sjpp-track:hover {\n -webkit-transform: scale(1, 1);\n transform: scale(1, 1);\n}\n\n.sjpp-app-drawer-card:hover::after,\n.sjpp-track:hover::after {\n opacity: 1;\n}\n\n.sjpp-track-image {\n grid-area: image;\n width: 75px;\n height: 75px;\n align-self: start;\n justify-self: start;\n}\n\n.sjpp-track-image img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 5px 0px 0px 5px;\n}\n\n.sjpp-app-drawer-card-ribbon{\n grid-area: image;\n overflow: hidden;\n width: 100%;\n height: 100%;\n}\n\n.sjpp-app-drawer-card-ribbon::before,\n.sjpp-app-drawer-card-ribbon::after {\n position: relative;\n z-index: -1;\n content: \'\';\n display: block;\n border-top-color: transparent;\n border-left-color: transparent;\n}\n\n.sjpp-app-drawer-card-ribbon span {\n position: relative;\n display: block;\n width: 100%;\n padding: 1px 0;\n border-color: transparent transparent transparent darkgray;\n box-shadow: 0 2px 7.5px rgba(0, 0, 0, 0.3);\n opacity: 1;\n font-family: \'Lucida Sans\', \'Lucida Sans Regular\', \'Lucida Grande\', \'Lucida Sans Unicode\', Geneva, Verdana, sans-serif;\n transform: rotate(-45deg);\n}\n\n.sjpp-app-drawer-card-ribbon::before {\n top: 0;\n right: 0;\n}\n\n.sjpp-app-drawer-card-ribbon::after {\n bottom: 0;\n left: 0;\n}\n\n.sjpp-track-h {\n grid-area: header;\n font-family: \'Lucida Sans\', \'Lucida Sans Regular\', \'Lucida Grande\', \'Lucida Sans Unicode\', Geneva, Verdana, sans-serif;\n margin-left: 5px;\n padding: 0px;\n}\n\n.sjpp-track-blurb {\n grid-area: blurb;\n font-size: 13px;\n font-weight: 300;\n margin-left: 5px;\n justify-content: center;\n font-style: oblique;\n color: #403f3f;\n}\n\n/* client/src/block.js start */\n\n.sjpp-active-tiny-button {\n\tdisplay: inline-block;\n\tbackground-color: #1C5E86;\n\tfont-size: .8em;\n\tcolor: white;\n\tpadding: 1px 5px;\n\tmargin-right: 5px;\n\tborder-radius: 4px;\n}\n\n.sjpp-plus-button\n{\n display: inline-block;\n margin: 1px;\n border: solid 1px #545454;\n font-size: .9em;\n cursor: default;\n padding: 2px 5px;\n}\n\n.sjpp-dshandleholder\n{\n display: inline-block;\n margin: 1px;\n border: solid 1px #545454;\n font-size: .9em;\n cursor: default;\n}\n\n.sjpp-dslabel\n{\n display: inline-block;\n color: black;\n padding: 2px 4px;\n\n}\n\n/* client/src/block.js end */\n\n/* client/src/app.js start */\n\n.sjpp-input-div-gene-pos\n{\n display: inline-block;\n padding-right: 5px;\n}\n\n.sjpp-input-gene-pos\n{\n border: solid 1px #545454;\n padding: 6px 10px;\n border-radius: 5px;\n}\n\n.sjpp-genome-select-div\n{\n display: inline-block;\n padding-left: 5px;\n}\n\n.sjpp-genome-select\n{\n border-radius: 5px;\n margin: 1px 20px 1px 10px;\n}\n\n.sjpp-output-sandbox-title\n{\n border-radius:4px; \n color:white; \n background-color: #969696; \n padding: 1px 5px; \n display:inline-block; \n font-size:0.8em; \n margin-left:4px;\n}\n\n/* client/src/app.js end */\n\n/* client/dom/sandbox.ts start */\n\n.sjpp-output-sandbox-header\n{\n display: inline-block;\n margin: 5px 10px;\n padding-right: 8px;\n margin-bottom: 0px;\n /* box-shadow:2px 0px 2px #f2f2f2; */\n border-radius: 5px 5px 0 0;\n /* background-color: #f2f2f2; */\n z-index: 99;\n}\n\n.sjpp-output-sandbox-content\n{\n margin: 5px 10px;\n margin-top: 0px;\n padding-right: 8px;\n display: inline-block;\n /* box-shadow: 2px 2px 10px #f2f2f2; */\n border: solid 1px #ccc;\n border-top: solid 1px white;\n border-radius: 0 0 5px 5px;\n}\n\n.sjpp-output-sandbox-collapse-btn,\n.sjpp-output-sandbox-expand-btn,\n.sjpp-output-sandbox-close-bt\n{\n /* display: inline-block; */\n /* margin: 0px; */\n /* border-right: solid 2px white; */\n font-size: 16px;\n cursor: default;\n}\n\n.sjpp-output-sandbox-close-bt {\n border-radius: 5px 0 0 0;\n}\n\n/* \nSeparated padding for sandbox buttons to fix close button\'s\nright, white border not extending to total height of\nsandbox header\n*/\n\n.sjpp-output-sandbox-collapse-btn,\n.sjpp-output-sandbox-expand-btn {\n padding: 4px 10px;\n}\n\n.sjpp-output-sandbox-close-bt {\n padding: 8px 10px;\n}\n\n/* client/dom/sandbox.ts end */\n\n.sjpp_row_wrapper:hover {\n background: #fcfcca !important; \n}\n\n/*.sjpp_row_wrapper:nth-child(odd) {background: rgb(237, 237, 237)}*/\n\n.sjpp_table_header {\n font-family: \'Arial\';\n font-size: 1em;\n text-align: left;\n position: sticky;\n top: 0;\n opacity: 0.7;\n font-weight: normal;\n}\n\n.sjpp_table_item {\n padding: 3px 5px;\n font-size: 1em;\n text-align: left;\n}\n\n.sjpp_show_scrollbar{\n overflow-y: scroll;\n overflow-x: scroll;\n\n}\n\n.sjpp_show_scrollbar::-webkit-scrollbar{\n background-color: white;\n border-radius: 10px;\n width: 18px;\n}\n\n/* This will handle the thumb (scrolling part) */\n\n.sjpp_show_scrollbar::-webkit-scrollbar-thumb{\n background-color: grey;\n border-radius: 10px;\n border: 5px solid white;\n\n}\n\n.sjpp_show_scrollbar::-webkit-scrollbar-thumb:vertical{\n height: 18px!important;\n width: 18px;\n}\n\n.sjpp-matrix-series-group-label-g text,\n.sjpp-matrix-series-label-g text,\n.sjpp-matrix-term-group-label-g text,\n.sjpp-matrix-term-label-g text,\n.sjpp-matrix-label text {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -user-select: none;\n}\n\n.sjpp-nav\n{\n position: sticky;\n background-color: white;\n width: 100%;\n z-index: 10;\n top: 0px;\n left: 0px;\n padding: 30px 0;\n}\n\n.add_term_btn {\n border-radius: 6px;\n}\n\n#sjpp-loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color:rgba(255, 255, 255, 0.8);\n}\n\n.sjpp-spinner {\n position: absolute;\n left: 50%;\n top: 30%;\n height: 60px;\n width: 60px;\n margin: 0px auto;\n -webkit-animation: rotation .6s infinite linear;\n -moz-animation: rotation .6s infinite linear;\n -o-animation: rotation .6s infinite linear;\n animation: rotation .6s infinite linear;\n border-left: 6px solid rgba(0, 174, 239, .15);\n border-right: 6px solid rgba(0, 174, 239, .15);\n border-bottom: 6px solid rgba(0, 174, 239, .15);\n border-top: 6px solid rgba(0, 174, 239, .8);\n border-radius: 100%;\n}\n\n@-webkit-keyframes rotation {\n from {-webkit-transform: rotate(0deg);}\n to {-webkit-transform: rotate(359deg);}\n }\n\n@-moz-keyframes rotation {\n from {-moz-transform: rotate(0deg);}\n to {-moz-transform: rotate(359deg);}\n }\n\n@-o-keyframes rotation {\n from {-o-transform: rotate(0deg);}\n to {-o-transform: rotate(359deg);}\n }\n\n@keyframes rotation {\n from {transform: rotate(0deg);}\n to {transform: rotate(359deg);}\n }\n';styleInject(css_248z);function init_bulk_flag(e){if(!e){return null}const t={};for(const e in mclass){t[mclass[e].label.toUpperCase()]=e}return{genome:e,mclasslabel2key:t,data:{},sample2disease:{},patient2st:{},good:0,geneToUpper:true,snv:{loaded:false,header:null,badlines:[],missense:0,silent:0},svjson:{loaded:false,header:null,badlines:[]},fusion:{loaded:false,header:null,badlines:[],original:[]},sv:{loaded:false,header:null,badlines:[],original:[]},cnv:{loaded:false,header:null,badlines:[]},itd:{loaded:false,header:null,badlines:[]},del:{loaded:false,header:null,badlines:[]},truncation:{loaded:false,header:null,badlines:[]}}}function parsesample(e,t,n,o,s){let r=moriginsomatic;if(e.sampletype){const t=e.sampletype.toLowerCase();switch(t){case"relapse":r=moriginrelapse;break;case"germline":r=morigingermline;break}if(e.sample){if(e.patient);else{e.patient=e.sample+" "+e.sampletype}}else{if(e.patient){e.sample=e.patient+" "+e.sampletype}}}else{if(e.patient){if(e.sample){e.sampletype=e.sample}else{e.sample=e.sampletype=e.patient}}else{if(e.sample){e.sampletype=e.sample}}}if(e.origin){const t=e.origin.toLowerCase();switch(t){case"r":case"relapse":r=moriginrelapse;e.isrim2=true;break;case"g":case"germline":r=morigingermline;e.isrim1=true;break;case"gp":case"germline pathogenic":r=morigingermlinepathogenic;e.isrim1=true;break;case"gnp":case"germline nonpathogenic":case"germline non-pathogenic":r=morigingermlinenonpathogenic;e.isrim1=true;break;case"s":case"somatic":case"diagnosis":r=moriginsomatic;break}}e.origin=r;if(!e.sample&&!e.patient){return}const i="no patient/individual name";if(e.patient){if(!t.patient2st[e.patient]){t.patient2st[e.patient]={}}t.patient2st[e.patient][e.sampletype]=e.sample}else{if(!t.patient2st[i]){t.patient2st[i]={}}t.patient2st[i][e.sampletype]=e.sample}if(e.sample){if(e.disease){if(e.sample in t.sample2disease){if(e.disease!=t.sample2disease[e.sample]){t.snv.badlines.push([n,'conflict of disease types for sample "'+e.sample+'": '+e.disease+", "+t.sample2disease[e.sample],o]);return true}}else{t.sample2disease[e.sample]=e.disease}}}return false}function parseheader$6(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid file header for snv/indel";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("annovar_gene","annovar_sj_gene","gene","genename","gene_symbol","hugo_symbol");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_aachange","amino_acid_change","annovar_sj_aachange","aachange","protein_change","variant");if(s==-1)return"amino_acid_change missing from header";n[s]="mname";s=o("annovar_class","class","mclass","variant_class","variant_classification","annovar_sj_class");if(s==-1)return"variant_class missing from header";n[s]="class";s=o("chromosome","chr");if(s==-1)return"chromosome missing from header";n[s]="chr";s=o("wu_hg19_pos","start","start_position","chr_position","position");if(s==-1)return"start missing from header";n[s]="pos";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("quantitative_measurements");if(s!=-1)n[s]="qmset";s=o("mutant_reads_in_case","mutant_in_tumor","tumor_readcount_alt");if(s!=-1)n[s]="maf_tumor_v1";s=o("total_reads_in_case","total_in_tumor","tumor_readcount_total");if(s!=-1)n[s]="maf_tumor_v2";s=o("mutant_reads_in_control","mutant_in_normal","normal_readcount_alt");if(s!=-1)n[s]="maf_normal_v1";s=o("total_reads_in_control","total_in_normal","normal_readcount_total");if(s!=-1)n[s]="maf_normal_v2";s=o("cdna_change");if(s!=-1)n[s]="cdna_change";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";s=o("origin");if(s!=-1)n[s]="origin";s=o("cancer","disease","diagnosis");if(s!=-1)n[s]="disease";t.snv.header=n;t.snv.loaded=true;return false}function parseline$6(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.snv.header.length;e++){if(o[e]==undefined)break;s[n.snv.header[e]]=o[e]}if(!s.gene){n.snv.badlines.push([e,"missing gene",o]);return}if(s.gene.toUpperCase()=="UNKNOWN"){n.snv.badlines.push([e,"gene name is UNKNOWN",o]);return}if(!s.isoform){n.snv.badlines.push([e,"missing isoform",o]);return}if(!s.mname){s.mname=s.cdna_change;if(!s.mname){n.snv.badlines.push([e,"missing amino acid change",o]);return}}else{if(s.mname.indexOf("p.")==0){s.mname=s.mname.replace(/^p\./,"")}}if(!s.class){n.snv.badlines.push([e,"missing mutation class",o]);return}let r=n.mclasslabel2key[s.class.toUpperCase()];if(r){s.class=r}else{r=mclasstester(s.class);if(r){s.class=r}else{n.snv.badlines.push([e,"wrong mutation class: "+s.class,o]);return}}if(parsesample(s,n,e,o,n.snv.badlines)){return}if(!s.chr){n.snv.badlines.push([e,"missing chromosome",o]);return}if(s.chr.toLowerCase().indexOf("chr")!=0){s.chr="chr"+s.chr}if(!s.pos){n.snv.badlines.push([e,"missing chromosome position",o]);return}const i=Number.parseInt(s.pos);if(Number.isNaN(i)){n.snv.badlines.push([e,"invalid chromosome position",o]);return}s.pos=i-1;if(s.maf_tumor_v2!=undefined&&s.maf_tumor_v1!=undefined){if(s.maf_tumor_v2=="");else{let t=Number.parseInt(s.maf_tumor_v1),r=Number.parseInt(s.maf_tumor_v2);if(Number.isNaN(t)||Number.isNaN(r)){n.snv.badlines.push([e,"invalid maf_tumor mutant and/or total read count",o]);return}s.maf_tumor={f:t/r,v1:t,v2:r}}delete s.maf_tumor_v1;delete s.maf_tumor_v2}if(s.maf_normal_v1!=undefined&&s.maf_normal_v2!=undefined){if(s.maf_normal_v2=="");else{let t=Number.parseInt(s.maf_normal_v1),r=Number.parseInt(s.maf_normal_v2);if(Number.isNaN(t)||Number.isNaN(r)){n.snv.badlines.push([e,"invalid maf_normal mutant and/or total read count",o]);return}s.maf_normal={f:t/r,v1:t,v2:r}}delete s.maf_normal_v1;delete s.maf_normal_v2}n.good++;if(s.class=="M"){n.snv.missense++}else if(s.class=="S"){n.snv.silent++}const a=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!n.data[a]){n.data[a]=[]}s.dt=dtsnvindel;n.data[a].push(s)}function parseheader$5(e,t,n){const o=e.toLowerCase().split("\t");if(o.length<=1)return"invalid file header for fusions";const s=(...e)=>{for(const t of e){const e=o.indexOf(t);if(e!=-1)return e}return-1};let r=s("gene_a","gene1","genea");if(r==-1)return"gene_a missing from header";o[r]="gene1";r=s("gene_b","gene2","geneb");if(r==-1)return"gene_b missing from header";o[r]="gene2";r=s("chr_a","chr1","chra");if(r==-1)return"chr_a missing from header";o[r]="chr1";r=s("chr_b","chr2","chrb");if(r==-1)return"chr_b missing from header";o[r]="chr2";r=s("pos_a","position_a","position1","posa");if(r==-1)return"pos_a missing from header";o[r]="position1";r=s("pos_b","position_b","position2","posb");if(r==-1)return"pos_b missing from header";o[r]="position2";r=s("isoform_a","refseq_a","refseq1","isoform1","sv_refseqa");if(r==-1)return"isoform_a missing from header";o[r]="isoform1";r=s("isoform_b","refseq_b","refseq2","isoform2","sv_refseqb");if(r==-1)return"isoform_b missing from header";o[r]="isoform2";r=s("strand_a","orta");if(r==-1)return"strand_a missing from header";o[r]="strand1";r=s("strand_b","ortb");if(r==-1)return"strand_b missing from header";o[r]="strand2";r=s("sample","sample_name","tumor_sample_barcode");if(r!=-1)o[r]="sample";r=s("patient","donor","target_case_id");if(r!=-1)o[r]="patient";r=s("sampletype","sample type","sample_type");if(r!=-1)o[r]="sampletype";r=s("disease");if(r!=-1)o[r]="disease";r=s("origin");if(r!=-1)o[r]="origin";if(n){t.sv.loaded=true;t.sv.header=o}else{t.fusion.loaded=true;t.fusion.header=o}return false}function parseline$5(e,t,n,o){if(t==""||t[0]=="#")return;const s=t.split("\t");const r={};const i=o?n.sv.header:n.fusion.header;const a=o?n.sv.badlines:n.fusion.badlines;for(let e=0;e<i.length;e++){r[i[e]]=s[e]}if(!r.chr1){a.push([e,"missing chr1",s]);return}if(r.chr1.toLowerCase().indexOf("chr")!=0){r.chr1="chr"+r.chr1}if(!r.chr2){a.push([e,"missing chr2",s]);return}if(r.chr2.toLowerCase().indexOf("chr")!=0){r.chr2="chr"+r.chr2}let l=r.position1;if(!l){a.push([e,"missing position1",s]);return}let c=Number.parseInt(l);if(Number.isNaN(c)||c<=0){a.push([e,"invalid value for position1",s]);return}r.position1=c;l=r.position2;if(!l){a.push([e,"missing position2",s]);return}c=Number.parseInt(l);if(Number.isNaN(c)||c<=0){a.push([e,"invalid value for position2",s]);return}r.position2=c;if(parsesample(r,n,e,s)){return}if(r.isoform1&&r.isoform1.indexOf(",")!=-1){const e=r.isoform1.split(",");r.isoform1=undefined;for(const t of e){if(t!="")r.isoform1=t}}if(r.isoform2&&r.isoform2.indexOf(",")!=-1){const e=r.isoform2.split(",");r.isoform2=undefined;for(const t of e){if(t!="")r.isoform2=t}}if(!r.gene1){r.isoform1=undefined}if(!r.gene2){r.isoform2=undefined}if(r.gene1){n.good++;const e={dt:o?dtsv:dtfusionrna,class:o?mclasssv:mclassfusionrna,isoform:r.isoform1,mname:r.gene2||r.chr2,sample:r.sample,patient:r.patient,sampletype:r.sampletype,origin:r.origin,disease:r.disease,pairlst:[{a:{name:r.gene1,isoform:r.isoform1,strand:r.strand1,chr:r.chr1,position:r.position1},b:{name:r.gene2,isoform:r.isoform2,strand:r.strand2,chr:r.chr2,position:r.position2}}]};const t=n.geneToUpper?r.gene1.toUpperCase():r.gene1;if(!n.data[t]){n.data[t]=[]}n.data[t].push(e)}if(r.gene2&&r.gene2!=r.gene1){n.good++;const e={dt:o?dtsv:dtfusionrna,class:o?mclasssv:mclassfusionrna,isoform:r.isoform2,mname:r.gene1||r.chr1,sample:r.sample,patient:r.patient,sampletype:r.sampletype,origin:r.origin,disease:r.disease,pairlst:[{a:{name:r.gene1,isoform:r.isoform1,strand:r.strand1,chr:r.chr1,position:r.position1},b:{name:r.gene2,isoform:r.isoform2,strand:r.strand2,chr:r.chr2,position:r.position2}}]};const t=n.geneToUpper?r.gene2.toUpperCase():r.gene2;if(!n.data[t]){n.data[t]=[]}n.data[t].push(e)}}function duplicate$1(e){const t={};for(const n in e){if(n=="pairlst")continue;const o=e[n];const s=typeof o;if(s=="object"){continue}t[n]=o}if(e.pairlst){t.pairlst=[];for(const n of e.pairlst){const e={};for(const t in n){if(t=="a"||t=="b"||t=="interstitial"){continue}e[t]=n[t]}if(n.a){e.a={};for(const t in n.a){const o=n.a[t];if(typeof o=="object"){continue}e.a[t]=o}}if(n.b){e.b={};for(const t in n.b){const o=n.b[t];if(typeof o=="object"){continue}e.b[t]=o}}if(n.interstitial){e.interstitial={};for(const t in n.interstitial){const o=n.interstitial[t];if(typeof o=="object"){continue}e.interstitial[t]=o}}t.pairlst.push(e)}}return t}function parseheader$4(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid file header for svjson";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("sample");if(s!=-1)n[s]="sample";s=o("sampletype");if(s!=-1)n[s]="sampletype";s=o("patient");if(s!=-1)n[s]="patient";s=o("json","jsontext");if(s==-1)return["json missing from header"];n[s]="jsontext";return[null,n]}function parseline$4(e,t,n,o){if(t==""||t[0]=="#")return;const s=t.split("\t");const r={};const i=n.svjson.badlines;for(let e=0;e<o.length;e++){r[o[e]]=s[e]}if(!r.jsontext){i.push([e,"missing jsontext",s]);return}if(parsesample(r,n,e,s)){return}let a;try{a=JSON.parse(r.jsontext)}catch(t){i.push([e,"invalid JSON text",s]);return}if(Array.isArray(a)){for(const e of a){if(e.a&&e.a.name&&e.a.isoform){n.good++;const t={dt:dtfusionrna,class:mclassfusionrna,isoform:e.a.isoform,mname:e.b.name};for(const e in r){if(e!="jsontext")t[e]=r[e]}t.pairlst=duplicate(a);const o=e.a.name.toUpperCase();if(!n.data[o]){n.data[o]=[]}n.data[o].push(t)}if(e.b&&e.b.name&&e.b.isoform){n.good++;const t={dt:dtfusionrna,class:mclassfusionrna,isoform:e.b.isoform,mname:e.a.name};for(const e in r){if(e!="jsontext")t[e]=r[e]}t.pairlst=duplicate(a);const o=e.b.name.toUpperCase();if(!n.data[o]){n.data[o]=[]}n.data[o].push(t)}}}else{a.dt=a.typecode;delete a.typecode;switch(a.dt){case dtitd:a.class=mclassitd;a.mname="ITD";break;case dtnloss:a.class=mclassnloss;a.mname="N-loss";break;case dtcloss:a.class=mclasscloss;a.mname="C-loss";break;case dtdel:a.class=mclassdel;a.mname="Del";break;case dtsv:a.class=mclasssv;a.mname="SV";break;default:i.push([e,"unknown datatype",s]);return}if(!a.gene){i.push([e,"json.gene missing",s]);return}n.good++;for(const e in r){if(e!="jsontext"){a[e]=r[e]}}const t=n.geneToUpper?a.gene.toUpperCase():a.gene.toUpperCase();if(!n.data[t]){n.data[t]=[]}n.data[t].push(a)}}function duplicate(e){const t=[];for(const n of e){const e={a:{},b:{}};for(const t in n){if(t!="a"&&t!="b")e[t]=n[t]}for(const t in n.a){e.a[t]=n.a[t]}for(const t in n.b){e.b[t]=n.b[t]}t.push(e)}return t}function parseheader$3(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid file header for CNV";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("cnv");if(s==-1)return"CNV missing from header";n[s]="cnv";s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.cnv.header=n;t.cnv.loaded=true;return false}function parseline$3(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.cnv.header.length;e++){s[n.cnv.header[e]]=o[e]}if(!s.gene){n.cnv.badlines.push([e,"missing gene",o]);return}if(!s.cnv){n.cnv.badlines.push([e,"missing cnv value",o]);return}const r=s.cnv.toLowerCase();switch(r){case"amplification":case"gain":s.class=mclasscnvgain;break;case"deletion":case"loss":s.class=mclasscnvloss;break;case"loh":s.class=mclasscnvloh;break;default:n.cnv.badlines.push([e,"invalid cnv value: "+s.cnv,o]);s.class=null}if(!s.class){return}if(parsesample(s,n,e,o,n.cnv.badlines)){return}s.dt=dtcnv;n.good++;const i=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(i in n.data)){n.data[i]=[]}n.data[i].push(s)}function parseheader$2(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid header line for ITD";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";s=o("rnaposition");if(s!=-1){n[s]="rnaposition";s=o("rnaduplength");if(s==-1)return"rnaduplength is required when rnaposition is present";n[s]="rnaduplength"}s=o("chromosome","chr");if(s!=-1){n[s]="chr";s=o("chr_start");if(s==-1)return"chr_start is required when chr is present";n[s]="chrpos1";s=o("chr_stop");if(s==-1)return"chr_stop is required when chr is present";n[s]="chrpos2"}s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.itd.header=n;t.itd.loaded=true;return false}function parseline$2(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.itd.header.length;e++){if(o[e]==undefined)break;s[n.itd.header[e]]=o[e]}if(!s.gene){n.itd.badlines.push([e,"missing gene",o]);return}if(s.rnaposition){let t=Number.parseInt(s.rnaposition);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid rnaPosition value",o]);return}s.rnaposition=t;if(!s.rnaduplength){n.itd.badlines.push([e,"missing rnaDuplength value",o]);return}t=Number.parseInt(s.rnaduplength);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid rnaDuplength value",o]);return}s.rnaduplength=t}if(s.chr){let t=Number.parseInt(s.chrpos1);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid chr_start value",o]);return}s.chrpos1=t;t=Number.parseInt(s.chrpos2);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid chr_stop value",o]);return}s.chrpos2=t}if(parsesample(s,n,e,o,n.itd.badlines)){return}s.dt=dtitd;s.class=mclassitd;s.mname="ITD";n.good++;var r=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(r in n.data)){n.data[r]=[]}n.data[r].push(s)}function parseheader$1(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid header line for intragenic deletion";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";s=o("rnaposition");if(s!=-1){n[s]="rnaposition";s=o("rnadellength");if(s==-1)return"rnadellength is required when rnaPosition is used";n[s]="rnadellength"}s=o("chromosome","chr");if(s!=-1){n[s]="chr";s=o("chr_start");if(s==-1)return"chr_start is required when chr is used";n[s]="chrpos1";s=o("chr_stop");if(s==-1)return"chr_stop is required when chr is used";n[s]="chrpos2"}s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.del.header=n;t.del.loaded=true;return false}function parseline$1(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.del.header.length;e++){if(o[e]==undefined)break;s[n.del.header[e]]=o[e]}if(!s.gene){n.del.badlines.push([e,"missing gene",o]);return}if(s.rnaposition){let t=Number.parseInt(s.rnaposition);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid rnaPosition value",o]);return}s.rnaposition=t;if(!s.rnadellength){n.del.badlines.push([e,"missing rnaDellength value",o]);return}t=Number.parseInt(s.rnadellength);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid rnaDellength value",o]);return}s.rnadellength=t}if(s.chr){let t=Number.parseInt(s.chrpos1);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid chr_start value",o]);return}s.chrpos1=t;t=Number.parseInt(s.chrpos2);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid chr_stop value",o]);return}s.chrpos2=t}if(parsesample(s,n,e,o,n.del.badlines)){return}s.dt=dtdel;s.class=mclassdel;s.mname="DEL";n.good++;var r=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(r in n.data)){n.data[r]=[]}n.data[r].push(s)}function parseheader(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid header line for truncation";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";let r=false;s=o("rnaposition");if(s!=-1){n[s]="rnaposition";r=true}s=o("losstype");if(s==-1)return"lossType missing from header";n[s]="losstype";let i=false;s=o("chromosome","chr");if(s!=-1){n[s]="chr";s=o("start","start_position","wu_hg19_pos","chr_position","position");if(s==-1){return"genomic position missing from header"}n[s]="pos";i=true}if(!r&&!i){return"neither rnaposition nor genomic position is given"}s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.truncation.header=n;t.truncation.loaded=true;return false}function parseline(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.truncation.header.length;e++){s[n.truncation.header[e]]=o[e]}if(!s.gene){n.truncation.badlines.push([e,"missing gene",o]);return}if(s.rnaposition){const t=Number.parseInt(s.rnaposition);if(Number.isNaN(t)||t<0){n.truncation.badlines.push([e,"invalid rnaPosition value",o]);return}s.rnaposition=t}if(s.pos){const t=Number.parseInt(s.pos);if(Number.isNaN(t)||t<0){n.truncation.badlines.push([e,"invalid genomic position",o]);return}s.pos=t}if(!s.losstype){n.truncation.badlines.push([e,"missing lossType value",o]);return}if(s.losstype!="n"&&s.losstype!="c"){n.truncation.badlines.push([e,'lossType value not "n" or "c"',o]);return}if(parsesample(s,n,e,o,n.truncation.badlines)){return}if(s.losstype=="n"){s.dt=dtnloss;s.class=mclassnloss;s.mname="N-loss"}else{s.dt=dtcloss;s.class=mclasscloss;s.mname="C-loss"}n.good++;const r=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(r in n.data)){n.data[r]=[]}n.data[r].push(s)}const schemaNames=["heatmapJSON","piebarJSON","survivalJSON","discoJSON","riverJSON"];const typeIndex={snvindel:0,si:0,sv:1,fusion:2,itd:3,deletion:4,truncation:5,cnv:6};let urlProjectLoaded=false;class ProjectHandler{constructor(e){this.bt=e;this.err=this.errHandler();if(!urlProjectLoaded){const e=getParams();if(e.project){this.getData(e.project);urlProjectLoaded=true}}if(e.filediv){this.projectByInput(e.filediv)}}processData(e){const t=e.files.pop();const n=e.expectedFileNames.indexOf(t.name);if(n==-1){if(e.files.length)setTimeout((()=>{this.processData(e)}),1);return}e.expectedFileNames.splice(n,1);this.cohort={name:"project",genome:this.bt.genomes[this.bt.gselect.options[this.bt.gselect.selectedIndex].innerHTML]};if(!this.flag){this.flag=this.bt.init_bulk_flag(this.cohort.genome)}const o=this.bt.content2flag(t.content,t.type,this.flag);if(o){this.err(o);this.processData(e)}else if(!e.files.length){if(e.expectedFileNames.length){this.err('These referenced files were not found: "'+e.expectedFileNames.join('", "')+'".')}this.bt.flag2tp(this.flag,{name:"project"},Object.assign(this.cohort,e.schema),this.ds);return}else{if(!this.ds){for(const e in this.cohort.dsset){this.ds=this.cohort.dsset[e];break}}const n=this.bt.bulkin({flag:this.flag,cohort:this.cohort,flag2thisds:this.ds,filename:"project"},(()=>{this.processData(e)}));if(n){this.err("Error with "+t.name+": "+n);return}if(this.flag.good===0){this.err(t.name+": no data loaded");return}}}getData(e){const[t,n]=e.split("/");const o=n&&n.trim()?n.trim():"ref.txt";this.gettext("/data/projects/"+t+"/"+o,(e=>{const n={};const o={};const s={schema:{},files:[],expectedFileNames:[]};let r=0;e.trim().split("\n").forEach((e=>{const[t,s]=e.trim().split("\t");if(schemaNames.includes(t)){o[s]=t;r+=1}else if(!typeIndex[t]&&typeIndex[t]!==0){this.err("Unrecognized type "+t+" for file "+s+" in reference.txt.")}else{n[s]=typeIndex[t];r+=1}}));s.expectedFileNames=Object.keys(n);const i=this.getTracker(r,(()=>this.processData(s)));Object.keys(o).forEach((e=>{this.getjson("/data/projects/"+t+"/"+e,(t=>{s.schema[o[e]]=t;i()}))}));Object.keys(n).forEach((e=>{this.gettext("/data/projects/"+t+"/"+e,(t=>{s.files.push({name:e,type:n[e],content:t});i()}))}))}))}gettext(e,t){fetch(e).then((t=>{if(t.ok)return t.text();else this.err("File request error: "+e)})).then(t).catch((t=>this.err("File request error: "+e+" "+t)))}getjson(e,t){fetch(e).then((t=>{if(t.ok)return t.json();else this.err("Network error for "+e)})).then(t).catch((t=>this.err("file request error: "+e+" "+t)))}getTracker(e,t){let n=0;return function o(){n+=1;if(n==e){t()}}}projectByInput(e){this.tp=null;const t=e.append("div");t.append("span").html("Project: reference &nbsp;");this.refNameInput=t.append("input").attr("type","text").property("value","ref.txt").style("margin-right","20px").style("padding-left","7px");t.append("label").attr("for","sja-pp-bulk-ui-project-btn").attr("class","sja_btn").style("padding","3px 5px").html("Choose folder");t.append("input").attr("type","file").attr("id","sja-pp-bulk-ui-project-btn").property("multiple",true).property("webkitdirectory",true).property("directory",true).on("change",(e=>this.readFiles(e)));t.append("div").style("margin","10px 10px 10px 0").html(`<a href="https://docs.google.com/document/d/1wlfGzyhxFYtWu9Fyf3FK7pgvS3rVb9_vrfYUBUOUrw4/edit?usp=sharing" target="new">Project user guide</a> | \n\t\t\t<a href='https://proteinpaint.stjude.org/ppdemo/projects/target-tall-project/ref.txt' target=_blank>Example project reference file</a>`);t.append("div").style("margin","20px").style("width","100%").html("-- OR --")}readFiles(e){const t=this;const n=t.refNameInput.property("value");const o=Array.from(e.target.files);const s=o.filter((e=>e.name==n))[0];if(!s){t.err("Missing reference file='"+n+"'.");return}const r={};const i={};const a={schema:{},files:[],expectedFileNames:[]};const l=new FileReader;let c="";let d=0;l.onload=e=>{e.target.result.trim().split("\n").forEach((e=>{const[n,o]=e.trim().split("\t");if(schemaNames.includes(n)){i[o]=n}else if(!typeIndex[n]&&typeIndex[n]!==0){t.err("Unrecognized type "+n+" for file "+o+" in reference.txt.")}else{r[o]=typeIndex[n]}}));a.expectedFileNames=Object.keys(r);const n=o.filter((e=>e.name in i));let s=0;if(!n.length){o.forEach(l)}else{n.forEach((e=>{const r=new FileReader;r.onload=r=>{const c=JSON.parse(r.target.result);s+=1;if(!c){t.err('Unable to parse schema file="'+e.name+'".')}else{a.schema[i[e.name]]=c}if(s==n.length){o.forEach(l)}};r.onerror=()=>{t.err("Error reading schema.txt.")};r.readAsText(e,"utf8")}))}function l(e){if(!a.expectedFileNames.includes(e.name)){d+=1;return}if(!e){t.err("Error reading file.");d+=1;return}if(e.size==0){t.err("Wrong file: "+e.name);d+=1;return}if(!r[e.name]&&r[e.name]!==0&&e.name!=c){t.err("Missing or invalid type assigned to file "+e.name+".");d+=1;return}const n=new FileReader;n.onload=n=>{d+=1;a.files.push({name:e.name,type:r[e.name],content:n.target.result});if(d==o.length){t.processData(a)}};n.onerror=()=>{d+=1;t.err("Error reading file "+e.name);if(d==o.length){t.processData(a)}};n.readAsText(e,"utf8")}};l.onerror=()=>{t.err("Error reading reference.txt.")};l.readAsText(s,"utf8")}errHandler(){const e=d3select("body").append("div");return function(t){if(!t)return;sayerror$1(e,t)}}}function getParams(){const e={};window.location.search.substr(1).split("&").forEach((t=>{const[n,o]=t.split("=");e[n]=o}));return e}const hardcode_root="root";const hierarchy_spacer="...";function stratinput(e,t){const n=Object.create(null);const o=Object.create(null);const s=Object.create(null);for(const r of e){for(const[e,i]of t.entries()){const a=getkey(r,e,t);const l=getkey(r,e-1,t);if(!r[i.k]){if(e>0){s[l]+=1}break}n[a]=l;if(!(a in s)){s[a]=0}if(!(a in o)){const n={lst:[]};if(i.full){n.full=r[i.full]}n.id0=t[0].k;n.v0=r[t[0].k];if(e==1){n.id1=t[1].k;n.v1=r[t[1].k]}if(e==2){n.id2=t[2].k;n.v1=r[t[2].k]}o[a]=n}o[a].lst.push(r);if(e==t.length-1){s[a]+=1}}}const r=[{id:hardcode_root,name:hardcode_root}];for(const e in n){const t=n[e];const i=o[e];const a=e.split(hierarchy_spacer);r.push({id:e,parentId:t,lst:i.lst,value:s[e],name:a[a.length-1],full:i.full,id0:i.id0,v0:i.v0,id1:i.id1,v1:i.v1,id2:i.id2,v2:i.v2})}return r}function getkey(e,t,n){const o=[hardcode_root];for(let s=0;s<t;s++){o.push(e[n[s].k])}if(t>=0){o.push(e[n[t].k])}return o.join(hierarchy_spacer)}function count(e){var t=0,n=e.children,o=n&&n.length;if(!o)t=1;else while(--o>=0)t+=n[o].value;e.value=t}function node_count(){return this.eachAfter(count)}function node_each(e,t){let n=-1;for(const o of this){e.call(t,o,++n,this)}return this}function node_eachBefore(e,t){var n=this,o=[n],s,r,i=-1;while(n=o.pop()){e.call(t,n,++i,this);if(s=n.children){for(r=s.length-1;r>=0;--r){o.push(s[r])}}}return this}function node_eachAfter(e,t){var n=this,o=[n],s=[],r,i,a,l=-1;while(n=o.pop()){s.push(n);if(r=n.children){for(i=0,a=r.length;i<a;++i){o.push(r[i])}}}while(n=s.pop()){e.call(t,n,++l,this)}return this}function node_find(e,t){let n=-1;for(const o of this){if(e.call(t,o,++n,this)){return o}}}function node_sum(e){return this.eachAfter((function(t){var n=+e(t.data)||0,o=t.children,s=o&&o.length;while(--s>=0)n+=o[s].value;t.value=n}))}function node_sort(e){return this.eachBefore((function(t){if(t.children){t.children.sort(e)}}))}function node_path(e){var t=this,n=leastCommonAncestor(t,e),o=[t];while(t!==n){t=t.parent;o.push(t)}var s=o.length;while(e!==n){o.splice(s,0,e);e=e.parent}return o}function leastCommonAncestor(e,t){if(e===t)return e;var n=e.ancestors(),o=t.ancestors(),s=null;e=n.pop();t=o.pop();while(e===t){s=e;e=n.pop();t=o.pop()}return s}function node_ancestors(){var e=this,t=[e];while(e=e.parent){t.push(e)}return t}function node_descendants(){return Array.from(this)}function node_leaves(){var e=[];this.eachBefore((function(t){if(!t.children){e.push(t)}}));return e}function node_links(){var e=this,t=[];e.each((function(n){if(n!==e){t.push({source:n.parent,target:n})}}));return t}function*node_iterator(){var e=this,t,n=[e],o,s,r;do{t=n.reverse(),n=[];while(e=t.pop()){yield e;if(o=e.children){for(s=0,r=o.length;s<r;++s){n.push(o[s])}}}}while(n.length)}function hierarchy(e,t){if(e instanceof Map){e=[undefined,e];if(t===undefined)t=mapChildren}else if(t===undefined){t=objectChildren}var n=new Node(e),o,s=[n],r,i,a,l;while(o=s.pop()){if((i=t(o.data))&&(l=(i=Array.from(i)).length)){o.children=i;for(a=l-1;a>=0;--a){s.push(r=i[a]=new Node(i[a]));r.parent=o;r.depth=o.depth+1}}}return n.eachBefore(computeHeight)}function node_copy(){return hierarchy(this).eachBefore(copyData)}function objectChildren(e){return e.children}function mapChildren(e){return Array.isArray(e)?e[1]:null}function copyData(e){if(e.data.value!==undefined)e.value=e.data.value;e.data=e.data.data}function computeHeight(e){var t=0;do{e.height=t}while((e=e.parent)&&e.height<++t)}function Node(e){this.data=e;this.depth=this.height=0;this.parent=null}Node.prototype=hierarchy.prototype={constructor:Node,count:node_count,each:node_each,eachAfter:node_eachAfter,eachBefore:node_eachBefore,find:node_find,sum:node_sum,sort:node_sort,path:node_path,ancestors:node_ancestors,descendants:node_descendants,leaves:node_leaves,links:node_links,copy:node_copy,[Symbol.iterator]:node_iterator};function optional(e){return e==null?null:required(e)}function required(e){if(typeof e!=="function")throw new Error;return e}var preroot={depth:-1},ambiguous={},imputed={};function defaultId(e){return e.id}function defaultParentId(e){return e.parentId}function stratify(){var e=defaultId,t=defaultParentId,n;function o(o){var s=Array.from(o),r=e,i=t,a,l,c,d,p,f,u,h,m=new Map;if(n!=null){const e=s.map(((e,t)=>normalize(n(e,t,o))));const t=e.map(parentof);const a=new Set(e).add("");for(const n of t){if(!a.has(n)){a.add(n);e.push(n);t.push(parentof(n));s.push(imputed)}}r=(t,n)=>e[n];i=(e,n)=>t[n]}for(c=0,a=s.length;c<a;++c){l=s[c],f=s[c]=new Node(l);if((u=r(l,c,o))!=null&&(u+="")){h=f.id=u;m.set(h,m.has(h)?ambiguous:f)}if((u=i(l,c,o))!=null&&(u+="")){f.parent=u}}for(c=0;c<a;++c){f=s[c];if(u=f.parent){p=m.get(u);if(!p)throw new Error("missing: "+u);if(p===ambiguous)throw new Error("ambiguous: "+u);if(p.children)p.children.push(f);else p.children=[f];f.parent=p}else{if(d)throw new Error("multiple roots");d=f}}if(!d)throw new Error("no root");if(n!=null){while(d.data===imputed&&d.children.length===1){d=d.children[0],--a}for(let e=s.length-1;e>=0;--e){f=s[e];if(f.data!==imputed)break;f.data=null}}d.parent=preroot;d.eachBefore((function(e){e.depth=e.parent.depth+1;--a})).eachBefore(computeHeight);d.parent=null;if(a>0)throw new Error("cycle");return d}o.id=function(t){return arguments.length?(e=optional(t),o):e};o.parentId=function(e){return arguments.length?(t=optional(e),o):t};o.path=function(e){return arguments.length?(n=optional(e),o):n};return o}function normalize(e){e=`${e}`;let t=e.length;if(slash(e,t-1)&&!slash(e,t-2))e=e.slice(0,-1);return e[0]==="/"?e:`/${e}`}function parentof(e){let t=e.length;if(t<2)return"";while(--t>1)if(slash(e,t))break;return e.slice(0,t)}function slash(e,t){if(e[t]==="/"){let n=0;while(t>0&&e[--t]==="\\")++n;if((n&1)===0)return true}return false}function vcf2dstk(e){const t={id2vcf:{},label:e.name||"Unnamed VCF file"};let n;if(e.file){const o=Math.random().toString();n={file:e.file,indexURL:e.indexURL,vcfid:o};t.id2vcf[o]=n}else if(e.url){const o=Math.random().toString();n={url:e.url,indexURL:e.indexURL,vcfid:o};t.id2vcf[o]=n}else{return["no .file or .url"]}n.headernotloaded=true;if(e.samplenamemap){n.samplenamemap=e.samplenamemap}if(e.variant2img){if(!e.variant2img.path)return[".path missing from .variant2img{}"]}const o={type:tkt.ds,isvcf:true,name:t.label,ds:t,populationfrequencyfilter:e.populationfrequencyfilter,vcfinfofilter:e.vcfinfofilter,itemlabelname:e.itemlabelname,viewrangeupperlimit:e.viewrangeupperlimit,variant2img:e.variant2img,axisheight:e.axisheight};if(e.url4variant){const t=check_url4variant(e.url4variant);if(t)return[".url4variant error: "+t];o.url4variant=e.url4variant}if(e.button4variant){const t=check_button4variant(e.button4variant);if(t)return[".button4variant error: "+t];o.button4variant=e.button4variant}if(e.sampleannotation){const t=e.sampleannotation;if(!t.annotation)return[".annotation{} missing from .sampleannotation"];if(t.levels){if(!Array.isArray(t.levels))return[".sampleannotation.levels should be array"];const e=[];for(const n in t.annotation){const o={sample_name:n};for(const e in t.annotation[n]){o[e]=t.annotation[n][e]}e.push(o)}const n=stratinput(e,t.levels);t.root=stratify()(n);t.root.sum((e=>e.value))}if(t.variantsunburst){if(!t.levels)return[".levels missing when .variantsunburst is on from .sampleannotation"]}o.ds.cohort=t}if(e.vcfcohorttrack){if(!e.vcfcohorttrack.file&&!e.vcfcohorttrack.url)return["no .file or .url provided from .vcfcohorttrack"];o.ds.vcfcohorttrack=e.vcfcohorttrack}if(e.germline2dvafplot){if(!e.germline2dvafplot.individualkey)return[".individualkey missing from germline2dvafplot"];if(!e.germline2dvafplot.sampletypekey)return[".sampletypekey missing from germline2dvafplot"];if(!e.germline2dvafplot.xsampletype)return[".xsampletype missing from germline2dvafplot"];if(!e.germline2dvafplot.yleftsampletype)return[".yleftsampletype missing from germline2dvafplot"];if(e.germline2dvafplot.yrightsampletype){if(e.germline2dvafplot.yrightsampletype==e.germline2dvafplot.yleftsampletype)return[".yrightsampletype should not be same as yleftsampletype"]}o.ds.germline2dvafplot=e.germline2dvafplot}if(e.vaf2coverageplot){if(e.vaf2coverageplot.categorykey){if(!e.vaf2coverageplot.categories)return[".categories missing when .categorykey is in use for .vaf2coverageplot"]}o.ds.vaf2coverageplot=e.vaf2coverageplot}if(e.genotype2boxplot){if(e.genotype2boxplot.boxplotvaluekey);else if(e.genotype2boxplot.sampleannotationkey){if(!o.ds.cohort)return["sampleannotation missing when using genotype2boxplot.sampleannotationkey"];if(!o.ds.cohort.annotation)return["sampleannotation.annotation missing when using genotype2boxplot.sampleannotationkey"];let t=false;for(const n in o.ds.cohort.annotation){if(e.genotype2boxplot.sampleannotationkey in o.ds.cohort.annotation[n]){t=true;break}}if(!t)return[e.genotype2boxplot.sampleannotationkey+" not found in any sample annotation"]}else{return["incomplete instruction for genotype2boxplot"]}o.ds.genotype2boxplot=e.genotype2boxplot}if(e.discardsymbolicallele){o.ds.discardsymbolicallele=true}if(e.samplebynumericvalue){if(!e.samplebynumericvalue.attrkey)return["attrkey missing from samplebynumericvalue"];if(!o.ds.cohort)return["sampleannotation missing when using samplebynumericvalue"];if(!o.ds.cohort.annotation)return["sampleannotation.annotation missing when using samplebynumericvalue"];let t=false;for(const n in o.ds.cohort.annotation){if(Number.isFinite(o.ds.cohort.annotation[n][e.samplebynumericvalue.attrkey])){t=true;break}}if(!t)return["samplebynumericvalue.attrkey not found in any sample annotation"];o.ds.samplebynumericvalue=e.samplebynumericvalue}{const t=e.genotypebynumericvalue;if(t){if(!t.refref)return[o.name+": refref missing from genotypebynumericvalue"];if(!t.refalt)return[o.name+": refalt missing from genotypebynumericvalue"];if(!t.altalt)return[o.name+": altalt missing from genotypebynumericvalue"];if(!t.refref.infokey)return[o.name+": refref.infokey missing from genotypebynumericvalue"];if(!t.refalt.infokey)return[o.name+": refalt.infokey missing from genotypebynumericvalue"];if(!t.altalt.infokey)return[o.name+": altalt.infokey missing from genotypebynumericvalue"];if(t.refref.genotypeCountInfokey||t.refalt.genotypeCountInfokey||t.altalt.genotypeCountInfokey){if(!t.refref.genotypeCountInfokey)return[o.name+": genotypeCountInfokey missing from genotypebynumericvalue.refref{}"];if(!t.refalt.genotypeCountInfokey)return[o.name+": genotypeCountInfokey missing from genotypebynumericvalue.refalt{}"];if(!t.altalt.genotypeCountInfokey)return[o.name+": genotypeCountInfokey missing from genotypebynumericvalue.altalt{}"]}o.ds.genotypebynumericvalue=t}}if(e.pointdown){o.aboveprotein=false}if(e.dstk_novcferror){o.dstk_novcferror=true}return[null,o]}function check_url4variant(e){if(!Array.isArray(e))return"value is not an array";for(const t of e){if(!t.makeurl){return".makeurl missing"}if(typeof t.makeurl!="function"){return".makeurl must be a function"}}return false}function check_button4variant(e){if(!Array.isArray(e))return"value is not an array";for(const t of e){if(!t.makebutton){return".makebutton missing"}if(typeof t.makebutton!="function"){return".makebutton must be a function"}}return false}function invalidcoord(e,t,n,o){if(!e)return"no genome";if(!t)return"no chr name";const s=e.chrlookup[t.toUpperCase()];if(!s)return"Invalid chromosome name: "+s;if(!Number.isInteger(n))return"Non-numerical position: "+n;if(n<0||n>=s.len)return"Position out of range: "+n;if(!Number.isInteger(o))return"Non-numerical position: "+o;if(o<0||o>s.len)return"Position out of range: "+o;if(n>o)return"Start position is greater than stop";return false}function string2pos(e,t,n){e=e.replace(/,/g,"");const o=t.chrlookup[e.toUpperCase()];if(o){return{chr:o.name,chrlen:o.len,start:Math.max(0,Math.ceil(o.len/2)-1e4),stop:Math.min(o.len,Math.ceil(o.len/2)+1e4)}}{const n=e.split(".");if(n.length>=2){const e=t.chrlookup[n[0].toUpperCase()];const o=Number.parseInt(n[1]);const s=invalidcoord(t,n[0],o,o+1);if(!s){const t=400;return{chr:e.name,chrlen:e.len,start:Math.max(0,o-Math.ceil(t/2)),stop:Math.min(e.len,o+Math.ceil(t/2)),actualposition:{position:o,len:1}}}}}const s=e.split(/[-:\s]+/);if(s.length==2){const e=Number.parseInt(s[1]);const n=invalidcoord(t,s[0],e,e+1);if(n){return null}const o=t.chrlookup[s[0].toUpperCase()];const r=400;return{chr:o.name,chrlen:o.len,start:Math.max(0,e-Math.ceil(r/2)),stop:Math.min(o.len,e+Math.ceil(r/2)),actualposition:{position:e,len:1}}}if(s.length==3){let e=Number.parseInt(s[1]),o=Number.parseInt(s[2]);const r=invalidcoord(t,s[0],e,o);if(r){return null}const i={position:e,len:o-e};const a=t.chrlookup[s[0].toUpperCase()];if(!n){const t=400;if(o-e<t){let n=Math.ceil((e+o)/2);if(n+t/2>=a.len){n=a.len-Math.ceil(t/2)}e=Math.max(0,n-Math.ceil(t/2));o=e+t}}return{chr:a.name,chrlen:a.len,start:e,stop:o,actualposition:i}}return null}function genomic2gm(e,t,n=0){const o=t.strand=="-";const s={};if(e<t.start){if(o){s.atdownstream={off:t.start-e};s.rnapos=t.rnalen;if(t.cdslen){s.aapos=t.cdslen/3}}else{s.atupstream={off:t.start-e};s.rnapos=0;if(t.cdslen){s.aapos=0}}return s}if(e>=t.stop){if(o){s.atupstream={off:e-t.stop+1};s.rnapos=0;if(t.cdslen){s.aapos=0}}else{s.atdownstream={off:e-t.stop+1};s.rnapos=t.rnalen;if(t.cdslen){s.aapos=t.cdslen/3}}return s}if(e>=t.start&&e<t.stop){for(let r=0;r<t.exon.length;r++){const i=t.exon[r];if(o){if(i[1]+n<=e){s.atexon=r+1;s.atintron=r;break}if(i[0]-n<=e){s.atexon=r+1;break}}else{if(i[0]-n>e){s.atexon=r+1;s.atintron=r;break}if(i[1]+n>e){s.atexon=r+1;break}}}}let r=0;for(const n of t.exon){if(o){if(e>=n[1]){r+=.5;break}if(e<n[0]){r+=n[1]-n[0];continue}r+=n[1]-e;break}else{if(e<n[0]){r+=.5;break}if(e>=n[1]){r+=n[1]-n[0];continue}r+=e-n[0]+1;break}}s.rnapos=r;if(t.coding){let n=0;if(t.utr5){n=t.utr5.reduce(((e,t)=>e+t[1]-t[0]),0)}let i=0;if(t.utr3){i=t.utr3.reduce(((e,t)=>e+t[1]-t[0]),0)}if(r<=n){s.aapos=0}else if(r>n+t.cdslen){s.aapos=t.cdslen/3}else{s.aapos=Math.ceil((r-n)/3)}if(e<t.codingstart){let r=0;if(o){if(t.utr3){for(const n of t.utr3){r+=Math.max(n[1],e)-Math.max(n[0],e)}s.atutr3={total:i,off:r}}}else{if(t.utr5){for(const n of t.utr5){r+=Math.min(n[1],e)-Math.min(n[0],e)}s.atutr5={total:n,off:r}}}}else if(e>t.codingstop){let r=0;if(o){if(t.utr5){for(const n of t.utr5){r+=Math.max(n[1],e)-Math.max(n[0],e)}s.atutr5={total:n,off:r}}}else{if(t.utr3){for(const n of t.utr3){r+=Math.min(n[1],e)-Math.min(n[0],e)}s.atutr3={total:i,off:r}}}}}return s}function aa2gmcoord(e,t){if(!Number.isInteger(e))return null;if(!t.coding)return null;let n=0;for(const o of t.coding){if(n+o[1]-o[0]>=(e-1)*3){if(t.strand=="+"){return o[0]+(e-1)*3-n}return o[1]-1-((e-1)*3-n)}n+=o[1]-o[0]}if(t.strand=="+")return t.codingstop;return t.codingstart}function rna2gmcoord(e,t){if(!Number.isFinite(e))return null;if(!t.exon)return null;let n=0;for(const o of t.exon){if(n+o[1]-o[0]>=e){if(t.strand=="+"){return o[0]+e-n}return o[1]-1-e+n}n+=o[1]-o[0]}if(t.strand=="+")return t.stop;return t.start}function colors(e){var t=e.length/6|0,n=new Array(t),o=0;while(o<t)n[o]="#"+e.slice(o*6,++o*6);return n}var schemeCategory10=colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");let prom;function getsjcharts(){if(window.sjcharts){return Promise.resolve(window.sjcharts)}else if(prom){return prom}else{prom=new Promise(((e,t)=>{const n=window.location.hostname.split(".")[0];const o=["pp-test","pecan-test","ppr"].includes(n)?`${n}.stjude.org`:"proteinpaint.stjude.org";const s=`https://${o}/sjcharts/bin/sjcharts.js`;const r=document.createElement("script");r.setAttribute("type","text/javascript");r.setAttribute("src",s);document.getElementsByTagName("head")[0].appendChild(r);r.onload=()=>{e(window.sjcharts)};r.onerror=()=>{const e="Unable to load SJCharts from "+s;alert(e);t(e)}}));return prom}}function tpinit(e){if(!e.p2st){e.p2st={}}if(!e.assays){e.assays=[]}if(!Array.isArray(e.assays)){return".assays should be an array"}e.assaylst=[];let t=0;for(const n of e.assays){const o=e[n];if(!o){return'Assay "'+n+'" not found in cohort'}const s=o.config;if(!s){return'.config object missing for assay "'+n+'"'}delete o.config;if(!s.type){return'.config.type missing for assay "'+n+'"'}if(s.type.toLowerCase()=="vcf"){s.type=tkt.ds;s.isvcf=true}else{if(!validtkt(s.type)){return'unknown .config.type "'+s.type+'" for assay "'+n+'"'}}s.id=(++t).toString();if(!s.name){s.name=n}if(s.type==tkt.junction){if(s.readcountcutoff){if(!Number.isInteger(s.readcountcutoff)||s.readcountcutoff<0){return'invalid .config.readcountcutoff for assay "'+n+'"'}}}e.assaylst.push(s);for(const t in o){if(!e.p2st[t]){e.p2st[t]={}}for(const r in o[t]){if(!e.p2st[t][r]){e.p2st[t][r]={tktemplate:[]}}if(s.type==tkt.vafs1){for(const i in o[t][r]){const a=o[t][r][i];if(!a.file&&!a.url){return"no file or URL for "+i+" vafs1 of "+t+", "+r}a.type=tkt.vafs1;a.patient=t;a.sampletype=r;a.assayname=n;a.id=s.id;a.tkid=Math.random().toString();if(!a.name){a.name=i+" vaf"}e.p2st[t][r].tktemplate.push(a)}continue}let i=[];if(Array.isArray(o[t][r])){i=o[t][r]}else{i.push(o[t][r])}for(const o of i){let i=o;if(!i.file&&!i.url){return"track has no file or url (sample: "+t+", assay: "+n+")"}if(i.name);else if(i.partname){i.name=t+(r==t?"":" "+r)+" "+n+" "+i.partname}else{i.name=t+(r==t?"":" "+r)+" "+n}if(s.isvcf){const[e,t]=vcf2dstk({name:i.name,file:i.file,url:i.url});if(e){return"VCF track error: "+e}i=t}else{if(i.type){if(!validtkt(i.type)){return'invalid track type "'+i.type+'" (sample: '+t+", assay: "+n+")"}}else{i.type=s.type}}i.patient=t;i.sampletype=r;i.assayname=n;i.id=s.id;i.tkid=Math.random().toString();e.p2st[t][r].tktemplate.push(i);switch(s.type){case tkt.bigwig:const e=tidy_qtk(i,s);if(e){return"Assay "+n+": "+s.type+" track error: "+e}break;case tkt.junction:i.categories=s.categories;i.readcountcutoff=s.readcountcutoff;break}}}}}delete e.assays;{const t=cohort2genometkset(e);if(t){return"Error: "+t}}if(e.patientannotation){const t=parse_patientannotation(e);if(t)return t}if(e.browserview){const t=parse_browserview(e);if(t)return t}if(e.e2pca){if(!e.e2pca.list)return".list missing from e2pca";if(!Array.isArray(e.e2pca.list))return"e2pca.list should be an array";if(e.e2pca.list.length==0)return"e2pca.list[] length 0";if(!e.e2pca.label){e.e2pca.label="Expression - PCA"}for(const t of e.e2pca.list){if(!t.vectorfile)return"vectorfile missing from e2pca";if(!t.dbfile)return"dbfile missing from e2pca"}}return}function loadstudycohort(e,t,n,o,s,r,i){const a=n.append("div").style("color","#858585");a.text("Loading "+t+" ...");return fetch(o+"/study",{method:"POST",body:JSON.stringify({file:t,jwt:s})}).then((e=>e.json())).then((l=>{if(!l){a.text("Server error!");return}if(l.error){a.text("Error loading study: "+l.error);return}const c=l.cohort;if(!c){a.text(".cohort missing");return}if(!c.genome){a.text("No genome specified in the cohort JSON content");return}const d=e[c.genome];if(!d){a.text("Invalid genome from cohort: "+c.genome);return}c.genome=d;c.jwt=s;if(!l.flagset){a.text(".flagset missing");return}a.text("");c.dsset={};for(const e in l.flagset){const n=l.flagset[e];n.genome=d;bulkin({flag:n,filename:t,cohort:c,err:e=>sayerror$1(a,e)})}const p=tpinit(c);if(p){sayerror$1(a,p)}if(!r){return import("./tp.ui-a59142ec.js").then((function(e){return e.t})).then((async e=>{getsjcharts().catch(console.error);e.default(c,n,o,i);return i}))}}))}function tidy_qtk(e,t){if(!t){t={}}if(!e.file&&!e.url){return"no file or url"}if(!e.pcolor){e.pcolor=t.pcolor||"#0066CC"}if(!e.pcolor2){e.pcolor2=t.pcolor2||"#CC0000"}if(!e.ncolor){e.ncolor=t.ncolor||"#FF850A"}if(!e.ncolor2){e.ncolor2=t.ncolor2||"#0A85FF"}if(!e.height){e.height=t.height||50}const n={};if(t.scale){for(const e in t.scale){n[e]=t.scale[e]}}if(e.scale){for(const t in e.scale){n[t]=e.scale[t]}}n.auto=true;if(Number.isFinite(n.min)&&Number.isFinite(n.max)){delete n.auto}else if(Number.isFinite(n.percentile)){delete n.auto}e.scale=n}function cohort2genometkset(e){const t=[];for(const n in e.p2st){for(const o in e.p2st[n]){const s=e.p2st[n][o].tktemplate;if(!s)continue;for(const e of s){t.push(e)}}}if(e.browserview&&e.browserview.assays){for(const n in e.browserview.assays){const o=e.browserview.assays[n];if(o.combined&&o.combinetk){t.push(o.combinetk)}}}if(!e.genome.tkset){e.genome.tkset=[]}const n={name:e.name,tklst:t};if(e.trackfacets){if(!Array.isArray(e.trackfacets)){return".trackfacets is not an array"}const t=[];for(const n of e.trackfacets){if(!n.samples){return"trackfacets: .samples missing from facet "+n.name}if(!Array.isArray(n.samples)){return"trackfacets: .samples is not array from facet "+n.name}if(!n.assays){return"trackfacets: .assays missing from a facet "+n.name}if(!Array.isArray(n.assays)){return"trackfacets: .assays is not array from a facet "+n.name}t.push(n)}if(t.length){n.facetlst=t}}e.genome.tkset.push(n);return null}function parse_browserview(e){if(e.browserview.position){let t;if(typeof e.browserview.position=="string"){t=string2pos(e.browserview.position,e.genome);if(!t){return".browserview.position invalid value"}}else{t=e.browserview.position}const n=invalidcoord(e.genome,t.chr,t.start,t.stop);if(n){return".browserview.position error: "+n}e.browserview.position=t}else{e.browserview.position={chr:e.genome.defaultcoord.chr,start:e.genome.defaultcoord.start,stop:e.genome.defaultcoord.stop}}if(e.browserview.assays){for(const t in e.browserview.assays){if(typeof e.browserview.assays[t]!="object"){e.browserview.assays[t]={}}const n=e.browserview.assays[t];for(const o of e.assaylst){if(o.name==t){n.assayobj=o;break}}if(!n.assayobj){console.log("missing assayobj for assayview of "+t);continue}if(n.sum_view){delete n.sum_view;n.combined=true}if(n.combined){const o={};for(const e in n.assayobj){o[e]=n.assayobj[e]}for(const e in n){if(e=="assayobj")continue;o[e]=n[e]}if(!o.name){o.name=t}o.tracks=[];for(const t in e.p2st){for(const s in e.p2st[t]){for(const r of e.p2st[t][s].tktemplate){if(r.id==n.assayobj.id){r.patient=t;r.sampletype=s;o.tracks.push(r)}}}}if(o.isvcf){o.ds={id2vcf:{},label:o.name};for(const e of o.tracks){for(const t in e.ds.id2vcf){e.__vcfobj=e.ds.id2vcf[t]}o.ds.id2vcf[e.__vcfobj.vcfid]=e.__vcfobj}}n.combinetk=o}}}if(e.browserview.defaultassaytracks){if(!Array.isArray(e.browserview.defaultassaytracks))return".browserview.defaultassaytracks must be array";for(let t=0;t<e.browserview.defaultassaytracks.length;t++){const n=e.browserview.defaultassaytracks[t];if(!n.assay)return".assay missing from .defaultassaytracks #"+(t+1);if(!e[n.assay])return"unknown assay name from .defaultassaytracks #"+(t+1)+": "+n.assay;if(!n.level1)return".level1 missing from .defaultassaytracks #"+(t+1);if(!e[n.assay][n.level1])return"level1 not exist in assay from .defaultassaytracks #"+(t+1)+": "+n.level1;if(n.level2){if(!e[n.assay][n.level1][n.level2])return"level2 not exist in assay from .defaultassaytracks #"+(t+1)+": "+n.level2}}}return null}function parse_patientannotation(e){if(!e.patientannotation.annotation){return".patientannotation.annotation missing"}if(!e.patientannotation.metadata){return".patientannotation.metadata missing"}if(!Array.isArray(e.patientannotation.metadata)){return".patientannotation.metadata should be an array"}const t={};for(const n of e.patientannotation.metadata){if(n.key==undefined){return"patientannotation: key missing for a metadata term"}if(!n.values){return"patientannotation: values missing for metadata term "+n.key}if(!Array.isArray(n.values)){return"patientannotation: .values not an array for metadata term "+n.key}if(!n.label){n.label=n.key}t[n.key]={label:n.label,values:{}};const e=ordinal(schemeCategory10);for(const o of n.values){if(o.key==undefined){return"key missing for an attribute of term "+n.key}if(!o.label){o.label=o.key}if(!o.color){o.color=e(o.key)}t[n.key].values[o.key]=o}}e.patientannotation.mdh=t;return null}const disabled={color:"#ccc"};const icons={x:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(255,100,100)").style("opacity",.9).style("font-weight",700).style("font-size","18px").style("transform","rotate(-45deg)").style("cursor","pointer").html("&oplus;").on("click",t.handler),plus:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","18px").html("&oplus;").on("click",t.handler),combine:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","12px").style("color","rgb(100,100,255)").style("cursor","pointer").html("[]+[]").on("click",t.handler),divide:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","12px").style("color","rgb(100,100,255)").style("cursor","pointer").html("[&divide;]").on("click",t.handler),expand:(e,t)=>{const n="color"in t?t.color:"rgb(100,100,255)";return e.attr("title",t.title).style("height","auto").style("color",n).style("opacity",.9).style("font-size","fontSize"in t?t.fontSize:"16px").style("padding","padding"in t?t.padding:"0 2px").style("display","display"in t?t.display:"inline-block").style("cursor","pointer").html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="${n}" class="bi bi-square" viewBox="0 0 16 16" >\n\t\t\t\t\t <path stroke='${n}' stroke-width='1' d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/>\n\t\t\t\t\t</svg>`).on("click",t.handler)},collapse:(e,t)=>{const n="color"in t?t.color:"rgb(100,100,255)";return e.attr("title",t.title).style("height","auto").style("color",n).style("opacity",.9).style("font-size","fontSize"in t?t.fontSize:"16px").style("padding","padding"in t?t.padding:"0 2px").style("display","display"in t?t.display:"inline-block").style("cursor","pointer").html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="${n}" class="bi bi-dash-lg" viewBox="0 0 16 16">\n\t\t\t\t\t <path stroke='${n}' stroke-width='1' fill-rule="evenodd" d="M2 8a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11A.5.5 0 0 1 2 8Z"/>\n\t\t\t\t\t</svg>`).on("click",t.handler)},corner:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color",t.disabled?disabled.color:"rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("cursor","pointer").html("&#8689;").on("click",t.handler),left:(e,t)=>{const n=t.disabled?disabled.color:"rgb(100,100,255)";return e.attr("title",t.title).style("padding","0 3px").style("color",t.disabled?disabled.color:"rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M0,6L12,0L12,12Z' style='fill:${n}'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler)},right:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding-top","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,0)'>\n\t\t\t\t\t<path d='M0,0L12,6L0,12Z' style='fill:rgb(100,100,255)'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),up:(e,t)=>{const n=t.disabled?disabled.color:"rgb(100,100,255)";return e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","16px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<path d='M6,0L12,12L0,12Z' style='fill:${n}'></path>\n\t\t\t</svg>`).on("click",t.handler)},down:(e,t)=>{const n=t.disabled?disabled.color:"rgb(100,100,255)";return e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","16px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M0,0L12,0L6,12Z' style='fill:${n}'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler)},updown:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","18px").style("font-weight",800).style("text-decoration","underline").style("cursor","pointer").html("&#8693;").on("click",t.handler),seHookArrow:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","18px").style("font-weight",800).style("cursor","pointer").html("&#10533;").on("click",t.handler),swHookArrow:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","18px").style("font-weight",800).style("cursor","pointer").html("&#10534;").on("click",t.handler),unlock:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).html(`<svg width='12' height='12'>\n\t\t\t<g transform="scale(0.045)" fill="rgb(100,100,255)">\n\t\t\t\t<path d="m299.02 161.26h-185.84v-46.28c0-41.34 33.635-74.979 74.979-74.979 33.758 0 63.51 22.716 72.36 55.24 2.898 10.657 13.888 16.946 24.547 14.05 10.659-2.898 16.949-13.889 14.05-24.548-13.57-49.896-59.2-84.74-110.96-84.74-63.4 0-114.98 51.58-114.98 114.98v46.715c-9.06 1.902-15.888 9.952-15.888 19.571v175.05c0 11.03 8.972 20 20 20h221.73c11.03 0 20-8.972 20-20v-175.05c0-11.03-8.972-20-20-20"/>\n\t\t\t</g>\n\t\t</svg>`).on("click",t.handler),leftBorder:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M1,6L11,1L11,11Z' style='stroke:rgb(100,100,255); stroke-width:1px; fill:#ececec'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),leftCrossedOut:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M1,6L11,1L11,11Z' style='stroke:rgb(100,100,255); stroke-width:1px; fill:#ececec'></path>\n\t\t\t\t\t<text x='3' y='10' style='font-size:12; fill:#f00; font-weight:bold'>X</text>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),filter:(e,t)=>{e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").on("click",t.handler);e.iconPath=e.append("svg").attr("width",16).attr("height",12).append("g").attr("transform","translate(8,1)").append("path").attr("d","M8,0L2,6L2,12L-2,12L-2,6L-8,0Z").style("fill","rgb(100,100,255)");return e},colorScale:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).html(`<svg width='12' height='12'>\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient id='`+t.linearGradientId+`'>\n\t\t\t\t\t\t<stop offset='0' stop-color='red'></stop>\n\t\t\t\t\t\t<stop offset='1' stop-color='blue'></stop>\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<rect x='0' y='1' width='10' height='10' fill='url(#`+t.linearGradientId+`)'></rect>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),bar:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<rect x='0' y='0' width='3' height='11' fill='rgb(100,100,255)'></rect>\n\t\t\t\t\t<rect x='4' y='6' width='3' height='5' fill='rgb(100,100,255)'></rect>\n\t\t\t\t\t<rect x='8' y='3' width='3' height='8' fill='rgb(100,100,255)'></rect>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),rect:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("stroke","rgb(100,100,255)").style("fill","fill"in t?t.fill:"none").style("opacity",.9).html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<rect x="0" y="1" width="10" height="10"></rect>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),text:(e,t)=>{const n=e.append("div").style("display","none");const o=n.append("input");o.attr("type","text").style("width",t.width+"px").style("margin","0 0 1px 2px").style("border","1px solid #aaa").style("border-spacing",0).style("height","21px").style("padding",0).style("background-color","#fff").style("cursor","pointer").on("change",t.handler).on("click.tphm2",(e=>e.stopPropagation()));n.append("button").style("margin",0).style("border-spacing",0).style("padding","2px").html("add").on("click",t.handler);return{wrapper:n,input:o}},html:(e,t)=>{select(e.node().parentNode).append("span").html(t.html);if(t.styles){for(const t in styles){e.style(t,styles[t])}}return e},restart:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-house-fill" viewBox="0 0 16 16">\n\t\t<path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/>\n\t\t<path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},zoomIn:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-zoom-in" viewBox="0 0 16 16">\n\t<path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/>\n\t<path d="M10.344 11.742c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1 6.538 6.538 0 0 1-1.398 1.4z"/>\n\t<path fill-rule="evenodd" d="M6.5 3a.5.5 0 0 1 .5.5V6h2.5a.5.5 0 0 1 0 1H7v2.5a.5.5 0 0 1-1 0V7H3.5a.5.5 0 0 1 0-1H6V3.5a.5.5 0 0 1 .5-.5z"/>\n\t</svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},zoomOut:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-zoom-in" viewBox="0 0 16 16">\n\t\t<path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/>\n\t\t<path d="M10.344 11.742c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1 6.538 6.538 0 0 1-1.398 1.4z"/>\n\t\t<path fill-rule="evenodd" d="M3 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},lasso:(e,t)=>{const n={color:"black",width:18,height:18};const o=!t.enabled?"transparent":"rgb(207, 226, 243)";Object.assign(n,t);const s=`<button style="cursor:pointer;border:none;background-color:${o};"><svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-zoom-in" viewBox="0 0 16 16">\n\t\t<path d="M15.825.12a.5.5 0 0 1 .132.584c-1.53 3.43-4.743 8.17-7.095 10.64a6.067 6.067 0 0 1-2.373 1.534c-.018.227-.06.538-.16.868-.201.659-.667 1.479-1.708 1.74a8.118 8.118 0 0 1-3.078.132 3.659 3.659 0 0 1-.562-.135 1.382 1.382 0 0 1-.466-.247.714.714 0 0 1-.204-.288.622.622 0 0 1 .004-.443c.095-.245.316-.38.461-.452.394-.197.625-.453.867-.826.095-.144.184-.297.287-.472l.117-.198c.151-.255.326-.54.546-.848.528-.739 1.201-.925 1.746-.896.126.007.243.025.348.048.062-.172.142-.38.238-.608.261-.619.658-1.419 1.187-2.069 2.176-2.67 6.18-6.206 9.117-8.104a.5.5 0 0 1 .596.04zM4.705 11.912a1.23 1.23 0 0 0-.419-.1c-.246-.013-.573.05-.879.479-.197.275-.355.532-.5.777l-.105.177c-.106.181-.213.362-.32.528a3.39 3.39 0 0 1-.76.861c.69.112 1.736.111 2.657-.12.559-.139.843-.569.993-1.06a3.122 3.122 0 0 0 .126-.75l-.793-.792zm1.44.026c.12-.04.277-.1.458-.183a5.068 5.068 0 0 0 1.535-1.1c1.9-1.996 4.412-5.57 6.052-8.631-2.59 1.927-5.566 4.66-7.302 6.792-.442.543-.795 1.243-1.042 1.826-.121.288-.214.54-.275.72v.001l.575.575zm-4.973 3.04.007-.005a.031.031 0 0 1-.007.004zm3.582-3.043.002.001h-.002z"/>\n\t\t</svg></button>`;e.html(s).on("click",t.handler)},download:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-download" viewBox="0 0 16 16">\n\t\t<path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/>\n\t\t<path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},help:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-question-circle" viewBox="0 0 16 16">\n\t\t<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>\n\t\t<path d="M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286zm1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},search:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-search" viewBox="0 0 16 16">\n\t\t<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},crosshair:(e,t={})=>{const n={color:"black",width:18,height:18,d:2};const o=n.width;const s=n.height;const r=n.d;Object.assign(n,t);const i=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" style='vertical-align: middle'>\n\t\t\x3c!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --\x3e\n\t\t<path d="M${o/2},${r}L${o/2},${s-r}Z" stroke='${n.color}'/>\n\t\t<path d="M${r},${s/2}L${o-r},${s/2}Z" stroke='${n.color}'/>\n\t\t</svg>`;e.html(i).on("click",t.handler).style("cursor","pointer")},grab:(e,t={})=>{const n={color:"black",width:18,height:18,transform:""};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" viewBox="0 0 448 512">\n\t\t\x3c!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --\x3e\n\t\t<path transform='${n.transform}' d="M144 64c0-8.8 7.2-16 16-16s16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16V264c0 31.3-20 58-48 67.9c-9.6 3.4-16 12.5-16 22.6V488c0 13.3 10.7 24 24 24s24-10.7 24-24V370.2c38-20.1 64-60.1 64-106.2V160c0-35.3-28.7-64-64-64c-2.8 0-5.6 .2-8.3 .5C332.8 77.1 311.9 64 288 64c-2.8 0-5.6 .2-8.3 .5C268.8 45.1 247.9 32 224 32c-2.8 0-5.6 .2-8.3 .5C204.8 13.1 183.9 0 160 0C124.7 0 96 28.7 96 64v64.3c-11.7 7.4-22.5 16.4-32 26.9l17.8 16.1L64 155.2l-9.4 10.5C40 181.8 32 202.8 32 224.6v12.8c0 49.6 24.2 96.1 64.8 124.5l13.8-19.7L96.8 361.9l8.9 6.2c6.9 4.8 14.4 8.6 22.3 11.3V488c0 13.3 10.7 24 24 24s24-10.7 24-24V359.9c0-12.6-9.8-23.1-22.4-23.9c-7.3-.5-14.3-2.9-20.3-7.1l-13.1 18.7 13.1-18.7-8.9-6.2C96.6 303.1 80 271.3 80 237.4V224.6c0-9.9 3.7-19.4 10.3-26.8l9.4-10.5c3.8-4.2 7.9-8.1 12.3-11.6V208c0 8.8 7.2 16 16 16s16-7.2 16-16V142.3 128 64z"/>\n\t\t</svg>`;e.html(o).style("cursor","pointer");if(t.handler)e.on("click",t.handler)},arrowPointer:(e,t={})=>{const n={color:"black",width:18,height:18,transform:""};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" viewBox="0 0 320 512">\n\t\t\x3c!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --\x3e\n\t\t<path transform='${n.transform}' d="M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"/>\n\t\t</svg>`;e.html(o).style("cursor","pointer");if(t.handler)e.on("click",t.handler)}};function renderSandboxFormDiv(e,t){e.classed("sjpp-sandbox-form",true);const n=e.append("div").style("margin","40px 20px 20px 20px").classed("sjpp-sandbox-form-inputDiv",true);const o=n.append("p").classed("sjpp-sandbox-form-gselect",true);o.append("span").html("Genome&nbsp;");const s=o.append("select");for(const e in t){s.append("option").text(e)}const r=n.append("div").style("margin","20px 0px").classed("sjpp-sandbox-form-fileDiv",true);const i=e.append("div").style("margin","10px 20px").classed("sjpp-sandbox-form-sayDiv",true);const a=e.append("div").style("margin","20px").classed("sjpp-sandbox-form-visualDiv",true);return[n,s.node(),r,i,a]}const plotIdToSandboxId={};const sandboxIdStr=Math.random().toString().slice(-6)+"-"+(+new Date).toString().slice(-8);let sandboxIdSuffix=0;function newSandboxDiv(e,t={}){var n,o;const s=t.beforePlotId?"#"+plotIdToSandboxId[t.beforePlotId]:":first-child";const r=e.insert("div",s).attr("class","sjpp-sandbox");let i;if(t.plotId){i=`sjpp-sandbox-${sandboxIdStr}-${sandboxIdSuffix++}`;r.attr("id",i);plotIdToSandboxId[t.plotId]=i}const a=r.append("div").attr("class","sjpp-output-sandbox-header").style("width",((n=t.style)===null||n===void 0?void 0:n.width)||"95vw").style("border","1px solid #ccc").style("display","flex").style("align-items","center").style("justify-content","left");const l="blue";const c="black";const d=a.append("div").classed("sjpp-output-sandbox-close-bt",true).style("cursor","pointer").style("vertical-align","middle").on("mouseenter",(()=>{const e=d.select("path");e.attr("stroke",l)})).on("mouseleave",(()=>{const e=d.select("path");e.attr("stroke",c)})).html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-x-lg" viewBox="0 0 16 16">\n\t\t <path stroke='#000' d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/>\n\t\t</svg>`).on("mousedown",(e=>{document.body.dispatchEvent(new Event("mousedown"));e.stopPropagation()})).on("click",(()=>{a.on("click",null).on("mousedown",null);r.selectAll("*").remove();if(typeof t.close==="function")t.close()}));const p=a.append("div").classed("sjpp-output-sandbox-collapse-btn",true);const f=a.append("div").classed("sjpp-output-sandbox-expand-btn",true).style("display","none");const u=a.append("div").style("display","inline-flex").style("align-items","center").style("justify-content","left").style("padding","5px 10px");const h=r.append("div").attr("class","sjpp-output-sandbox-content").style("width",((o=t.style)===null||o===void 0?void 0:o.width)||"95vw");let m=true;icons["collapse"](p,{fontSize:"1.5em",padding:"4px 10px",color:"black",handler:g});icons["expand"](f,{fontSize:"1.5em",padding:"4px 10px",color:"black",display:"none",handler:g});p.on("mouseenter",(()=>{const e=p.select("path");e.attr("stroke",l)})).on("mouseleave",(()=>{const e=p.select("path");e.attr("stroke",c)}));f.on("mouseenter",(()=>{const e=f.select("path");e.attr("stroke",l)})).on("mouseleave",(()=>{const e=f.select("path");e.attr("stroke",c)}));function g(){m=!m;p.style("display",m==true?"inline-block":"none");f.style("display",m==true?"none":"inline-block");h.style("display",m==true?"block":"none")}return{header_row:a,header:u,body:h,app_div:r,id:i}}function bulkui(e,t,n,o,s,r){let i,a,l,c,d,p;if(s!==undefined)[a,l,c,d,p]=renderSandboxFormDiv(s,n);else{[i,a,l,c,d,p]=newpane3(e,t,n);i.header.text("Load mutation from text files")}a.append("div").style("margin","20px 0px").style("color","#858585").html(`\n\t<p>Choose one file and upload to initiate the display panel.<br>From there you can add additional files.</p>\n\t<div>Supported data types:</div>\n\t<ul>\n\t <li>SNV and indel</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1OJ9aXq2_-a3BfIQdKLYCYzrJRTpu4_9i3gephTY-Z38 target=_blank>Format</a>,\n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.snvindel.txt target=_blank>example file</a></li>\n\t </ul>\n\t <li>SV or fusion transcript</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1klDZ0MHVkQTW2-lCu_AvpRE4_FcbhdB-yI17wNdPaOM target=_blank>Tabular format</a>,\n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.svfusion.txt target=_blank>example file</a>\n\t\t</li>\n\t\t<li>JSON-format, to come</li>\n\t </ul>\n\t <li>CNV, gene-level</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1WHptqOWNf96V0bYEDpj-EsKZGYnbBNc9aQIrhzdEJaU target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.cnv.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t <li>ITD</li>\n\t <ul>\n\t \t<li>Internal tandem duplication, in-frame</li>\n\t <li><a href=https://drive.google.com/open?id=1Bh9awBsraoHbV8iWXv_3oDeXMsjIAHaOKHr973IJyZc target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.itd.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t <li>Intragenic deletion, in-frame</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1tWbf3rg3BmVIZPGGPk023P0aBkDw_ry5XuZLGyGodyg target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.deletion.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t <li>Truncation</li>\n\t <ul>\n\t \t<li>Either N-terminus loss or C-terminus loss</li>\n\t <li><a href=https://drive.google.com/open?id=1P1g-Y8r30pSKfan1BhYZcsUtSk7wRb4plaO1S-JCJr4 target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.truncation.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t</ul>`);const f=()=>{c.selectAll("*").remove();new ProjectHandler({bulkin:bulkin,genomes:n,gselect:l,content2flag:content2flag,flag2tp:h,filediv:c,init_bulk_flag:init_bulk_flag});c.append("span").html("Select data type&nbsp;");const e=filetypeselect(c).style("margin-right","20px");const t=c.append("input").attr("type","file").on("change",(t=>{const o=init_bulk_flag(n[l.options[l.selectedIndex].innerHTML]);o.geneToUpper=u.property("checked");d.text("");const s=t.target.files[0];if(!s){f();return}if(s.size==0){d.text("Wrong file: "+s.name);f();return}const r=new FileReader;r.onload=t=>{const n=content2flag(t.target.result,e.node().selectedIndex,o);if(n){d.text("Error: "+n);f();return}h(o,s)};r.onerror=function(){d.text("Error reading file "+s.name);f();return};d.text("Parsing file "+s.name+" ...");r.readAsText(s,"utf8")}));setTimeout((()=>t.node().focus()),1100)};f();c.append("span").html("<br/>Convert gene name to uppercase &nbsp;");const u=c.append("span").append("input").attr("type","checkbox").property("checked",true);function h(e,t,n=null,r=null){if(typeof e=="string"){d.text(e);f();return}d.text("");f();const l=n?n:Object.assign({genome:e.genome,name:t.name});const c=bulkin({flag:e,filename:t.name,cohort:l,flag2thisds:r});if(c){d.text("Error with "+t.name+": "+c);return}if(e.good==0){d.text("No mutations can be loaded");return}let u;if(i){disappear$1(i.pane);const e=newpane({x:100,y:100,toshrink:true});e.header.html('<span style="opacity:.5">FILE</span> '+t.name);u=e.body}if(s!==undefined){u=p.append("div").html('<span style="opacity:.5">FILE</span> '+t.name)}a.selectAll("*").remove();import("./tp.ui-a59142ec.js").then((function(e){return e.t})).then((e=>{e.default(l,u,o)}));return l}return function e(t,n){const o=content2flag(t.content,n,flag);if(o){d.text("Error: "+o);f();return}h(flag,t)}}function content2flag(e,t,n){if(!n)return"should not happen!";let o;switch(t){case 0:o=parse_snvindel(e,n);if(o)return o;break;case 1:o=parse_sv(e,n,true);if(o)return o;break;case 2:o=parse_sv(e,n,false);if(o)return o;break;case 3:o=parse_itd(e,n);if(o)return o;break;case 4:o=parse_del(e,n);if(o)return o;break;case 5:o=parse_trunc(e,n);if(o)return o;break;case 6:o=parse_cnv(e,n);if(o)return o;break;default:return"unknown option array index from file type <select>: "+t}}function bulkin(p,callback=null){const flag=p.flag;const cohort=p.cohort;if(!cohort.p2st){cohort.p2st={}}if(!cohort.dsset){cohort.dsset={}}if(!cohort.assaylst){cohort.assaylst=[]}if(flag.variantgene){if(cohort.variantgene){return"variantgene already set for this cohort"}cohort.variantgene=flag.variantgene}if(flag.snv.badlines.length>0){bulk_badline(flag.snv.header,flag.snv.badlines)}if(flag.fusion.badlines.length>0){bulk_badline(flag.fusion.header,flag.fusion.badlines)}if(flag.sv.badlines.length>0){bulk_badline(flag.sv.header,flag.sv.badlines)}if(flag.cnv.badlines.length>0){bulk_badline(flag.cnv.header,flag.cnv.badlines)}if(flag.itd.badlines.length>0){bulk_badline(flag.itd.header,flag.itd.badlines)}if(flag.del.badlines.length>0){bulk_badline(flag.del.header,flag.del.badlines)}if(flag.truncation.badlines.length>0){bulk_badline(flag.truncation.header,flag.truncation.badlines)}if(flag.good==0){return false}const tmp={};let hastumormaf=false;if(flag.snv.loaded){for(const e of flag.snv.header){tmp[e]=1}if("maf_tumor_v1"in tmp&&"maf_tumor_v2"in tmp){hastumormaf=true}}if(flag.cnv.loaded){for(const e of flag.cnv.header){tmp[e]=1}}if(flag.fusion.loaded){for(const e of flag.fusion.header){tmp[e]=1}}if(flag.sv.loaded){for(const e of flag.sv.header){tmp[e]=1}}if(flag.itd.loaded){for(const e of flag.itd.header){tmp[e]=1}}if(flag.del.loaded){for(const e of flag.del.header){tmp[e]=1}}if(flag.truncation.loaded){for(const e of flag.truncation.header){tmp[e]=1}}const hassample="sample"in tmp||"patient"in tmp;const hasdisease="disease"in tmp;const hasst="sampletype"in tmp;let dsc;if(p.flag2thisds){dsc=p.flag2thisds;if(hassample&&!dsc.hassample){return'"sample" column found in new data but not in existing data'}if(!hassample&&dsc.hassample){return'"sample" column found in existing data but not in new data'}if(hasdisease&&!dsc.hasdisease){return'"disease" column found in new data but not in existing data'}if(!hasdisease&&dsc.hasdisease){return'"disease" column found in existing data but not in new data'}if(hasst&&!dsc.hasst){return'"sampletype" column found in new data but not in existing data'}if(!hasst&&dsc.hasst){return'"sampletype" column found in existing data but not in new data'}for(const e in flag.data){const t=dsc.bulkdata[e];if(t){dsc.bulkdata[e]=t.concat(flag.data[e])}else{dsc.bulkdata[e]=flag.data[e]}}}else{let dsname=p.filename+(flag.tpsetname?"_"+flag.tpsetname:"");if(dsname in flag.genome.datasets){let e=1;let t=dsname+" "+e;while(t in flag.genome.datasets){e++;t=dsname+" "+e}dsname=t}dsc={label:dsname,bulkdata:flag.data,hassample:hassample,hasdisease:hasdisease,hastumormaf:hastumormaf,hasst:hasst,genome:cohort.genome,import:{},imported:{},importsilent:flag.snv.silent==0?false:flag.snv.missense/flag.snv.silent>=5?false:true};flag.genome.datasets[dsname]=dsc;cohort.dsset[dsname]=dsc;if(cohort.dbexpression){if(cohort.dbexpression.tidy){try{cohort.dbexpression.tidy=eval("("+cohort.dbexpression.tidy+")")}catch(e){err("invalid JavaScript for dbexpression.tidy");delete cohort.dbexpression}}dsc.dbexpression=cohort.dbexpression}if(hasdisease){dsc.stratify=[{label:"disease",attr1:{k:"disease",label:"disease"}}]}}if(hassample){for(const e in flag.data){for(const t of flag.data[e]){let e=t.patient;if(!e){e=t.sample;if(!e){continue}}if(!cohort.p2st[e]){cohort.p2st[e]={}}let n=t.sampletype;if(!n){n=e}if(!cohort.p2st[e][n]){cohort.p2st[e][n]={dsset:{},tktemplate:[]}}if(!cohort.p2st[e][n].dsset[dsc.label]){cohort.p2st[e][n].dsset[dsc.label]=[]}cohort.p2st[e][n].dsset[dsc.label].push(t)}}}if(callback)callback();return false}function bulkembed(e){if(!e.name)e.name="Unnamed dataset";let t=e.holder;if(!t){const e=newpane({x:100,y:100});t=e.body}const n=t.append("div");new Promise(((t,n)=>{const o={dsset:{}};for(const t in e){if(t=="snvindel"||t=="svjson"||t=="cnv"||t=="sv"||t=="mutationset"){continue}o[t]=e[t]}t(o)})).then((t=>{if(!e.snvindel&&!e.svjson&&!e.cnv&&!e.sv)return t;const n=init_bulk_flag(t.genome);if(e.snvindel){const t=parse_snvindel(e.snvindel,n);if(t)throw{message:"error in snvindel data: "+t};delete e.snvindel}if(e.svjson){const t=parse_svjson(e.svjson,n);if(t)throw{message:"error in svjson data: "+t};delete e.svjson}if(e.sv){const t=parse_sv(e.sv,n);if(t)throw{message:"error in svjson data: "+t};delete e.sv}if(e.cnv){const t=parse_cnv(e.cnv,n);if(t)throw{message:"error in cnv data: "+t};delete e.cnv}const o=bulkin({flag:n,filename:e.name,cohort:t});if(o)throw{message:"Error parsing data: "+o};return t})).then((t=>{if(!e.mutationset)return t;if(!Array.isArray(e.mutationset))throw{message:"mutationset is not an array"};const n=[];for(const o of e.mutationset){const s=init_bulk_flag(t.genome);const r=[];if(o.snvindel){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.snvindel+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with snvindel file: "+e.error};const t=parse_snvindel(e.text,s);if(t)throw{message:"error with snvindel file: "+t}}));r.push(n)}if(o.snvindel_url){r.push(dofetch("urltextfile",{url:o.snvindel_url}).then((e=>{if(e.error)throw{message:"cannot get snvindel file from url"};const t=parse_snvindel(e.text,s);if(t)throw{message:"error with snvindel file: "+t}})))}if(o.cnv){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.cnv+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with cnv file: "+e.error};const t=parse_cnv(e.text,s);if(t)throw{message:"error with cnv file: "+t}}));r.push(n)}if(o.cnv_url){r.push(dofetch("urltextfile",{url:o.cnv_url}).then((e=>{if(e.error)throw{message:"cannot get cnv file from url"};const t=parse_cnv(e.text,s);if(t)throw{message:"error with cnv file: "+t}})))}if(o.sv){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.sv+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with sv file: "+e.error};const t=parse_sv(e.text,s,true);if(t)throw{message:"error with sv file: "+t}}));r.push(n)}if(o.sv_url){r.push(dofetch("urltextfile",{url:o.sv_url}).then((e=>{if(e.error)throw{message:"cannot get sv file from url"};const t=parse_sv(e.text,s);if(t)throw{message:"error with sv file: "+t}})))}if(o.fusion){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.fusion+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with fusion file: "+e.error};const t=parse_sv(e.text,s,false);if(t)throw{message:"error with fusion file: "+t}}));r.push(n)}if(o.svjson){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.svjson+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with svjson file: "+e.error};const t=parse_svjson(e.text,s);if(t)throw{message:"error with svjson file: "+t}}));r.push(n)}if(o.deletion){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.deletion+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with deletion file: "+e.error};const t=parse_del(e.text,s);if(t)throw{message:"error with deletion file: "+t}}));r.push(n)}if(o.deletion_url){r.push(dofetch("urltextfile",{url:o.deletion_url}).then((e=>{if(e.error)throw{message:"cannot get deletion file from url"};const t=parse_del(e.text,s);if(t)throw{message:"error with deletion file: "+t}})))}if(o.truncation){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.truncation+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with truncation file: "+e.error};const t=parse_trunc(e.text,s);if(t)throw{message:"error with truncation file: "+t}}));r.push(n)}if(o.truncation_url){r.push(dofetch("urltextfile",{url:o.truncation_url}).then((e=>{if(e.error)throw{message:"cannot get truncation file from url"};const t=parse_trunc(e.text,s);if(t)throw{message:"error with truncation file: "+t}})))}if(o.itd){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.itd+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with itd file: "+e.error};const t=parse_itd(e.text,s);if(t)throw{message:"error with itd file: "+t}}));r.push(n)}if(o.itd_url){r.push(dofetch("urltextfile",{url:o.itd_url}).then((e=>{if(e.error)throw{message:"cannot get itd file from url"};const t=parse_itd(e.text,s);if(t)throw{message:"error with itd file: "+t}})))}const i=Promise.all(r).then((n=>{const r=bulkin({flag:s,filename:e.name,cohort:t});if(r)throw{message:"Error parsing data from "+o.name+": "+r}}));n.push(i)}return Promise.all(n).then((e=>t))})).then((o=>{const s=tpinit(o);if(s)throw{message:"Error parsing study: "+s};n.text("");import("./tp.ui-a59142ec.js").then((function(e){return e.t})).then((n=>{n.default(o,t,e.hostURL)}))})).catch((e=>{n.text(e.message);if(e.stack){console.log(e.stack)}}))}function parse_snvindel(e,t){const n=e.trim().split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$6(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$6(e,n[e],t)}}function parse_svjson(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const[r,i]=parseheader$4(o);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$4(e,n[e],t,i)}}function parse_cnv(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$3(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$3(e,n[e],t)}}function parse_itd(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$2(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$2(e,n[e],t)}}function parse_del(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$1(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$1(e,n[e],t)}}function parse_trunc(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline(e,n[e],t)}}function parse_sv(e,t,n){const o=e.split(/\r?\n/);let s=o[0];let r=0;while(s[0]=="#"){r++;s=o[r]}if(!s)return"no header line";const i=parseheader$5(s,t,n);if(i)return"header error: "+i;for(let e=r+1;e<o.length;e++){if(o[e]=="")continue;if(o[e][0]=="#")continue;parseline$5(e,o[e],t,n)}}function appear(e,t){e.style("opacity",0).style("display",t||"block").transition().style("opacity",1)}function disappear(e,t){e.style("opacity",1).transition().style("opacity",0).call((()=>{if(t){e.remove()}else{e.style("display","none").style("opacity",1)}}))}function sayerror(e,t){let n;if(typeof t=="string"){n=t}else{n=t.message||t.error;if(t.stack)console.log(t.stack)}const o=e.append("div").attr("class","sja_errorbar");o.append("div").text(n);o.append("div").html("&#10005;").on("click",(()=>{disappear(o,true)}))}function throwMsgWithFilePathAndFnName(e){try{throw new Error}catch(t){const n=t.stack.split("\n");const o=n[2].trim();const s=/\s*at\s+(.*)\s+\((.*).proteinpaint.js:(\d+):(\d+)\)/;const r=o.match(s);if(r){const t=r[1];const n=r[2].replace(/^.*\/bin\//,"").replace(/_([^_]+)$/,".$1").replaceAll(/_/g,"/");const o=`${e} [${n} ${t}()]`;throw new Error(o)}else{throw new Error(e)}}}function showErrorsWithCounter(e,t){if(typeof e=="string")return sayerror(t,e);if(e.length===0)return;if(e.length===1)return sayerror(t,e[0]);let n=false;const o=t.append("div").attr("class","sja_errorbar").on("click",(()=>{n=!n;r.style("display",n?"block":"none")}));const s=o.append("div").style("display","inline-block");s.append("div").style("display","inline-block").style("color","white").style("background-color","red").style("border-radius","100px").style("padding","1px 4px").text(e.length);s.append("div").text("errors found.").style("padding","3px").style("display","inline-block");o.append("div").style("display","inline-block").style("float","right").html("&#10005;").on("click",(()=>{disappear(o,true)}));const r=o.append("div").style("display","none").style("margin-left","10px");for(const t of e){r.append("div").text(t)}}async function string2snp(e,t){const n=await dofetch3("snp",{method:"POST",body:JSON.stringify({byName:true,genome:e.name,lst:[t]})});if(n.error)throw n.error;if(!n.results||n.results.length==0)throw t+": not a SNP";for(const t of n.results){const n=e.chrlookup[t.chrom.toUpperCase()];if(n&&n.major){return{chr:t.chrom,start:t.chromStart,stop:t.chromEnd}}}const o=n.results[0];return{chr:o.chrom,start:o.chromStart,stop:o.chromEnd}}async function blockinit(e){if(!e.holder)throw"No holder for block.init";if(!e.genome)throw"no genome";if(e.holder instanceof Element)e.holder=d3select(e.holder);if(!e.tklst)e.tklst=[];if(e.query){await step1_findgm(e);return}if(e.model&&e.allmodels){await step2_getseq(e);return}}async function step1_findgm(e){const t=e.holder.append("p").style("font-size","2em").style("color","#858585").text("Searching for "+e.query+" ...");const n=await dofetch3("genelookup",{body:{deep:1,input:e.query,genome:e.genome.name}});if(!n)throw"querying genes: server error";if(n.error)throw"error querying genes: "+n.error;if(!n.gmlst||n.gmlst.length==0){if(e.genome.hasSNP){try{const n=await string2snp(e.genome,e.query);t.remove();const o={genome:e.genome,holder:e.holder,chr:n.chr,start:Math.max(0,n.start-300),stop:n.start+300,nobox:true,tklst:e.tklst,debugmode:e.debugmode};first_genetrack_tolist(e.genome,o.tklst);const s=await import("./block-ec15b4b6.js").then((function(e){return e.c}));const r=new s.Block(o);r.addhlregion(n.chr,n.start,n.stop-1)}catch(n){t.text("Not a gene or SNP: "+e.query)}}else{t.text("No match to gene: "+e.query)}return}t.remove();e.allmodels=n.gmlst;for(const t of e.allmodels){if(t.isoform.toUpperCase()==(n.found_isoform?n.found_isoform.toUpperCase():e.query.toUpperCase())){e.model=t;await step2_getseq(e);return}}const o=[];for(const t of e.allmodels){if(!t.isoform)throw"isoform missing from one gene model: "+JSON.stringify(t);const n=t.isoform.toUpperCase();if(e.genome.isoformcache.has(n)){let o=true;for(const s of e.genome.isoformcache.get(n)){if(s.chr==t.chr&&s.start==t.start&&s.stop==t.stop&&s.strand==t.strand){o=false;break}}if(o){e.genome.isoformcache.get(n).push(t)}}else{e.genome.isoformcache.set(n,[t])}if(t.isoform.toUpperCase()==e.query.toUpperCase()){o.push(t);break}if(t.isdefault){o.push(t)}}if(o.length==1){e.model=o[0]}else if(o.length>1){for(const t of o){if(t.chr=="chrY"){continue}const n=e.genome.chrlookup[t.chr.toUpperCase()];if(!n){continue}if(!n.major){continue}e.model=t;break}if(!e.model){e.model=o[0]}}if(!e.model){e.model=e.allmodels[0]}await step2_getseq(e)}async function step2_getseq(e){if(e.model.genomicseq){o();step2_getpdomain(e);return}const t={genome:e.genome.name,coord:e.model.chr+":"+(e.model.start+1)+"-"+e.model.stop};const n=await dofetch3("ntseq",{method:"POST",body:JSON.stringify(t)});if(!n)throw"getting sequence: server error";if(n.error)throw"getting sequence: "+n.error;if(!n.seq)throw"no nt seq???";e.model.genomicseq=n.seq.toUpperCase();e.model.aaseq=nt2aa(e.model);o();await step2_getpdomain(e);function o(){if(e.model.aaseq){const t=e.model.aaseq.indexOf(codon_stop);const n=e.model.cdslen-(e.model.startCodonFrame?3-e.model.startCodonFrame:0);if(t!=-1&&t<n/3-1){sayerror(e.holder,"Translating "+e.model.isoform+" ends at "+t+" AA, expecting "+n/3)}}}}async function step2_getpdomain(e){const t=new Map;for(const n of e.allmodels){if(!n.pdomains){n.pdomains=[];n.domain_hidden={};if(!t.has(n.isoform))t.set(n.isoform,[]);t.get(n.isoform).push(n)}}if(t.size==0){await step3(e);return}const n=await dofetch3("pdomain",{method:"POST",body:JSON.stringify({genome:e.genome.name,isoforms:[...t.keys()]})});if(n.error)throw"error getting protein domain: "+n.error;if(n.lst){const e=ordinal().range(domaincolorlst);for(const o of n.lst){for(const e of t.get(o.name)){e.pdomains=o.pdomains}for(const t of o.pdomains){if(!t.color){t.color=e(t.name+t.description)}}}}await step3(e)}async function step3(e){let t=e.gmmode;if(!t){if(e.model.cdslen){t=gmmode.protein}else{t=gmmode.exononly}}if(e.dataset){if(!Array.isArray(e.dataset))throw"dataset is not array";for(const t of e.dataset){if(e.genome.datasets[t]&&!e.genome.datasets[t].legacyDsIsUninitiated)continue;const n=await dofetch3(`getDataset?genome=${e.genome.name}&dsname=${t}`);if(n.error)throw`invalid name from dataset[]: ${n.error}`;if(!n.ds)throw".ds missing";const o=e.genome.datasets[n.ds.label];Object.assign(o,n.ds);const s=await import("./legacyDataset-21fdc0fe.js");s.validate_oldds(o);delete o.legacyDsIsUninitiated}}const n=await import("./block-ec15b4b6.js").then((function(e){return e.c}));e.__blockInstance=new n.Block({genome:e.genome,holder:e.holder,nobox:true,usegm:e.model,gmstackheight:37,allgm:e.allmodels,datasetlst:e.dataset,legacyDsFilter:e.legacyDsFilter,mset:e.mset,hlaachange:e.hlaachange,hlvariants:e.hlvariants,hlregions:e.hlregions,gmmode:t,hidedatasetexpression:e.hidedatasetexpression,hidegenecontrol:e.hidegenecontrol,hidegenelegend:e.hidegenelegend,variantPageCall_snv:e.variantPageCall_snv,datasetqueries:e.datasetqueries,samplecart:e.samplecart,debugmode:e.debugmode,tklst:e.tklst,mclassOverride:e.mclassOverride,hide_dsHandles:e.hide_dsHandles,onloadalltk_always:e.onloadalltk_always})}var block_init=Object.freeze({__proto__:null,default:blockinit});async function init_mdsjson(e,t){let n=[],o=[];if(e&&e.includes(","))n=e.split(",");else if(e)n.push(e);else if(t&&t.includes(","))o=t.split(",");else if(t)o.push(t);const s=[];if(n.length){const e=undefined;for(const t of n){s.push(await tklst_pipeline(t,e))}}else if(o.length){const e=undefined;for(const t of o){s.push(await tklst_pipeline(e,t))}}return s}async function tklst_pipeline(e,t){const n=await mdsjson_parse(e,t);validate_mdsjson(n);const o=get_json_tk(n);return o}async function mdsjson_parse(e,t){if(e!==undefined&&e=="")throw".jsonfile missing";if(t!==undefined&&t=="")throw".jsonurl missing";let n;if(e!==undefined)n=await dofetch("textfile",{file:e});else if(t!==undefined)n=await dofetch("urltextfile",{url:t});if(n.error){throw n.error}return JSON.parse(n.text)}function validate_mdsjson(e){if(!e)throw"file is missing";if(!e.type)throw"dataset type is missing";const t=e.svcnvfile||e.svcnvurl;const n=e.vcffile||e.vcfurl;if(!t&&!n)throw"vcf or cnv file/url is required";if(Object.keys(e).filter((e=>e.includes("expression"))).length){if(!e.expressionfile&&!e.expressionurl)throw"expression file/url is missing"}if(Object.keys(e).filter((e=>e.includes("rnabam"))).length){if(!e.rnabamfile&&!e.rnabamurl)throw"rnabam file/url is missing"}if(e.sampleset){for(const t of e.sampleset){if(e.sampleset.length!=1&&!t.name)throw"sampleset name is missing";if(!t.samples)throw"sampleset samples[] is missing"}}if(e.sample2assaytrack){for(const[t,n]of Object.entries(e.sample2assaytrack)){if(!n.length)throw"assay[] missing for "+t;for(const e of n){if(!e.name)throw"assay name is missing for "+t;if(!e.type)throw"assay type is missing for "+t}}}if(e.groupsamplebyattr){if(!e.groupsamplebyattr.attrlst)return".attrlst[] missing from groupsamplebyattr";if(e.groupsamplebyattr.attrlst.length==0)return"groupsamplebyattr.attrlst[] empty array";for(const t of e.groupsamplebyattr.attrlst){if(!t.k)return"k missing from one of groupsamplebyattr.attrlst[]"}if(e.groupsamplebyattr.sortgroupby){if(!e.groupsamplebyattr.sortgroupby.key)return".key missing from .sortgroupby";if(!e.groupsamplebyattr.sortgroupby.order)return".order[] missing from .sortgroupby";if(!Array.isArray(e.groupsamplebyattr.sortgroupby.order))return".order must be an array"}if(!e.groupsamplebyattr.attrnamespacer)e.groupsamplebyattr.attrnamespacer=", "}if(e.fixedgeneexpression){for(const t of e.fixedgeneexpression){if(!t.gene)throw"gene missing in fixedgeneexpression array"}}if(e.vcf){if(!e.vcf.hiddenclass)throw"hiddenclasses[] missing from .vcf"}}function get_json_tk(e){const t={type:e.type,name:e.name};if(e.isdense=="true"||e.isdense==true||e.isfull===false)t.isdense=true;else if(e.isfull)t.isfull=true;if(e.svcnvfile)t.file=e.svcnvfile;else if(e.svcnvurl)t.url=e.svcnvurl;if(Object.keys(e).filter((e=>e.includes("expression"))).length){t.checkexpressionrank={file:e.expressionfile,url:e.expressionurl}}if(Object.keys(e).filter((e=>e.includes("vcf"))).length){t.checkvcf={file:e.vcffile,url:e.vcfurl}}if(e.vcf){if(e.vcf.hiddenclass){t.vcf=[];t.vcf.hiddenclass=e.vcf.hiddenclass}}if(Object.keys(e).filter((e=>e.includes("rnabam"))).length){t.checkrnabam={file:e.rnabamfile,url:e.rnabamurl}}if(e.sampleset){t.sampleset=e.sampleset}if(e.sample2assaytrack){t.sample2assaytrack=e.sample2assaytrack}if(e.groupsamplebyattr){t.groupsamplebyattr=e.groupsamplebyattr}t.fixedgeneexpression=e.fixedgeneexpression;t.getallsamples=e.getallsamples;t.valueCutoff=e.cnvValueCutoff!==undefined?e.cnvValueCutoff:undefined;t.bplengthUpperLimit=e.cnvLengthUpperLimit!==undefined?e.cnvLengthUpperLimit:undefined;t.segmeanValueCutoff=e.segmeanValueCutoff!==undefined?e.segmeanValueCutoff:undefined;t.lohLengthUpperLimit=e.lohLengthUpperLimit!==undefined?e.lohLengthUpperLimit:undefined;t.multihidelabel_vcf=e.multihidelabel_vcf!==undefined?e.multihidelabel_vcf:undefined;t.multihidelabel_fusion=e.multihidelabel_fusion!==undefined?e.multihidelabel_fusion:undefined;t.multihidelabel_sv=e.multihidelabel_sv!==undefined?e.multihidelabel_sv:undefined;t.legend_vorigin=e.legend_vorigin;return t}async function get_scatterplot_data(e,t){let n={};const o=await mdsjson_parse(e,t);n.mdssamplescatterplot=o;return n}function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}function convertUnits(e,t,n,o,s){if(o>=1){const t=Math.floor(e*o);if(s)return`${t}${n.charAt(0)}`;return`${t} ${t>1?n+"s":""}`}const r=Math.floor(e*o);const i=Math.ceil(e%(1/o));if(i==0){if(s)return`${r}${n.charAt(0)}`;return`${r} ${r>1?n+"s":""}`}if(s)return`${r}${n.charAt(0)}${i}${t.charAt(0)}`;return`${r} ${r>1?n+"s":""} ${i} ${i>1?t+"s":""}`}function urlmap(e="",t=console.warn){const n=e?{search:e}:window.location;const o=new Map;for(const e of n.search.substr(1).split("&")){if(!e)continue;const n=e.split("=");if(n.length==2&&n[0]!=""&&n[1]!=""){let e=decodeURIComponent(n[1]);if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")){try{e=JSON.parse(e)}catch(e){t(e)}}else if(isNumeric(e)){e=Number(e)}o.set(n[0].toLowerCase(),e)}else if(n.length>2){t(`unexpected '=' character in the URL parameter value for '${n[0]}'`)}else{t(`Invalid url parameter: '${e}'`)}}return o}function corsMessage(e,t=""){const n=e.state?.embedder;const o=t=>{if(t.origin!==n.origin)return;if(t.data=="getActiveMassSession"){window.removeEventListener("message",o);s.postMessage({state:e.state},n.origin);if(n.origin!=window.location.origin){setTimeout((()=>{try{window.close()}catch(e){console.log(e);window.open(window.location,"_self").close()}}),500)}}};window.addEventListener("message",o,false);setTimeout((()=>window.removeEventListener("message",o)),8e3);if(n.origin!=window.location.origin){confirm(`Another window will open to recover the saved session. When the next window opens,`+`\n- You may need to allow popups.`+`\n- You may have to refresh it.`+`\n- After the session is recovered, this browser window should automatically close.`);document.body.innerHTML=`\n\t\t\t<div style='margin: 20px; padding: 20px; font-size: 24px'>\n\t\t\t\tPlease close this browser tab. The recovered session should visible in another browser tab.\n\t\t\t</div>\n\t\t`}const s=window.open(n.href,"_blank")}async function parse(e){const t=urlmap();if(t.has("appcard")){const n=await Promise.resolve().then((function(){return adSandbox}));const o=t.get("appcard");const s=await dofetch2("/cards/index.json");e.app.drawer.opts.genomes=e.genomes;e.app.drawer.opts.fromApp=true;e.app.drawer.opts.app={cardsPath:"cards"};const r=s.elements.findIndex((e=>e.sandboxJson==o||e.sandboxHtml==o));if(r<=0){const t=[...s.elements.filter((e=>e.type=="nestedCard"))];let r,i;t.findIndex((e=>{for(const[t,n]of e.children.entries()){if(n.sandboxJson==o||n.sandboxHtml==o){r=e;i=t}}}));n.openSandbox(r.children[i],e.app.drawer.opts)}else{n.openSandbox(s.elements[r],e.app.drawer.opts)}return}if(t.has("gdcbamslice")){const n=await import("./block.tk.bam.gdc-66964f1c.js");n.bamsliceui({genomes:e.genomes,holder:e.holder,debugmode:e.debugmode,stream2download:t.has("stream2download")});return}if(t.has("gdcmaf")){const t=await import("./gdc.maf-ced4bc13.js");t.gdcMAFui({holder:e.holder,debugmode:e.debugmode});return}if(t.has("gdcsinglecell")){const t=await import("./gdc.singleCell-1fc3a5b9.js");t.gdcSinglecellUi({holder:e.holder,debugmode:e.debugmode});return}if(t.has("mdsjsonform")){const t=await import("./mdsjsonform-8d72a884.js");await t.init_mdsjsonform(e);return}if(t.has("termdb")){const n=t.get("termdb");const o=typeof n==="string"?JSON.parse(n):n;const s={holder:e.holder,state:o};const r=await import("./app-64537b0c.js");r.appInit(s);return}if(t.has("massnative")){const n=t.get("massnative");const[o,s]=n.split(",");if(!o||!s)throw'value is not "genome,dslabel"';const r={holder:e.holder,genome:e.genomes[o],state:{genome:o,dslabel:s}};if(!r.genome)throw"invalid genome";const i=await import("./app-db79376c.js");i.appInit(r);return}if(t.has("mass")){const n=t.get("mass");const o=typeof n==="string"?JSON.parse(n):n;const s={holder:e.holder,state:o};if(o.genome){s.genome=e.genomes[o.genome]}else if(o?.vocab?.genome){s.genome=e.genomes[o.vocab.genome]}const r=await import("./app-db79376c.js");r.appInit(s);return}if(t.has("mass-session-file")||t.has("mass-session-url")){let n;if(t.has("mass-session-file")){const o=t.get("mass-session-file");const s=await dofetch3(`/textfile`,{method:"POST",body:JSON.stringify({file:o})});const r=JSON.parse(s.text);n={holder:e.holder,state:r,genome:e.genomes[r.vocab.genome]}}if(t.has("mass-session-url")){const o=t.get("mass-session-url");const s=await dofetch3("/urltextfile",{method:"POST",body:JSON.stringify({url:o})});const r=JSON.parse(s.text);n={holder:e.holder,state:r,genome:e.genomes[r.vocab.genome]}}const o=await import("./app-db79376c.js");o.appInit(n);return}if(t.has("mass-session-id")){const n=t.get("mass-session-id");const o=t.get("src");let s;if(o=="browser"){const e=localStorage.getItem("savedMassSessions");const t=JSON.parse(e);s={state:t[n]}}else{const e={headers:{},body:{id:n}};if(o=="cred"){const n=t.get("dslabel");const o=t.get("route");e.body.dslabel=n;e.body.route=o;e.body.route=o;const s=localStorage.getItem("jwtByDsRoute")||`{}`;this.jwtByDsRoute=JSON.parse(s);const r=this.jwtByDsRoute[n][o];e.headers.authorization=`Bearer ${btoa(r)}`}s=await dofetch3(`/massSession`,e);if(s.error)throw s.error}const r=s.state?.embedder;if(r&&r.origin!=window.location.origin){corsMessage(s);return}const i={holder:e.holder,state:s.state,genome:e.genomes[s.state.vocab.genome],sessionDaysLeft:s.sessionDaysLeft,sessionId:n};const a=await import("./app-db79376c.js");a.appInit(i);return}if(t.has("genome")&&e.selectgenome){const n=t.get("genome");const o=[...e.selectgenome.node().childNodes];const s=o.findIndex((e=>e.value==n));if(s==-1){sayerror(e.holder,`Invalid genome: ${n}. Please provide an available genome from this list: ${o.map((e=>e.value)).join(", ").replace(/,(?=[^,]*$)/,", or")}`);return}e.selectgenome.node().selectedIndex=s;e.selectgenome.node().dispatchEvent(new Event("change"))}if(t.has("hicfile")||t.has("hicurl")){let n,o;if(t.has("hicfile")){n=t.get("hicfile")}else{o=t.get("hicurl")}const s=t.get("genome");if(!s)throw"genome is required for hic";const r=e.genomes[s];if(!r)throw"invalid genome";const i={genome:r,file:n,url:o,name:path__default.basename(n||o),hostURL:e.hostURL,enzyme:t.get("enzyme"),holder:e.holder};const a=await import("./hic.straw-1ca9ddd0.js").then((function(e){return e.a}));await a.init_hicstraw(i);return}if(t.has("singlecell")){if(!t.has("genome"))throw'"genome" is required for "singlecell"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s=await import("./singlecell-fc57d3bd.js");s.init({genome:o,jsonfile:t.get("singlecell")},e.holder);return}if(t.has("mavbfile")){if(!t.has("genome"))throw'"genome" is required for "mavb"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s=await import("./mavb-54aeff14.js");s.mavbparseinput({genome:o,hostURL:e.hostURL,file:t.get("mavbfile")},(()=>{}),e.holder,e.jwt);return}if(t.has("mavburl")){if(!t.has("genome"))throw'"genome" is required for "mavb"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s=await import("./mavb-54aeff14.js");s.mavbparseinput({genome:o,hostURL:e.hostURL,url:t.get("mavburl")},(()=>{}),e.holder,e.jwt);return}if(t.has("scatterplot")){if(!t.has("genome"))throw'"genome" is required for "scatterplot"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;let s;if(t.has("mdsjson")||t.has("mdsjsonurl")){const e=t.get("mdsjsonurl");const n=t.get("mdsjson");s=await get_scatterplot_data(n,e)}if(t.has("tsnejson")){const e=t.get("tsnejson");const n=await dofetch("textfile",{file:e});if(n.error)throw n.error;else if(n.text){s={mdssamplescatterplot:{analysisdata:JSON.parse(n.text)}}}}s.mdssamplescatterplot.genome=o;const r=await import("./mds.samplescatterplot-669b4e1d.js");r.init(s.mdssamplescatterplot,e.holder,false);return}if(t.has("block")){if(!t.has("genome"))throw"missing genome for block";const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s={nobox:1,hostURL:e.hostURL,jwt:e.jwt,holder:e.holder,genome:o,dogtag:n,debugmode:e.debugmode};let r=null;let i=null;if(t.has("position")){const e=t.get("position").split(";");if(e[0]){const t=e[0].split(/[:-]/);const n=t[0];const o=Number.parseInt(t[1]);const s=Number.parseInt(t[2]);if(!n)throw"chr missing";if(Number.isNaN(o)||Number.isNaN(s))throw"Invalid start/stop value in position";r={chr:n,start:o,stop:s}}const n=[];for(let t=1;t<e.length;t++){if(!e[t])continue;const o=e[t].split(/[:-]/);const s=o[0];const r=Number.parseInt(o[1]);const i=Number.parseInt(o[2]);if(!s)throw"subpanel chr missing";if(Number.isNaN(r)||Number.isNaN(i))throw"Invalid start/stop value in subpanel position";n.push({chr:s,start:r,stop:i,width:600,leftborder:"rgba(200,0,0,.1)",leftpad:5})}if(n.length){s.subpanels=n}}if(t.has("regions")){i=[];for(const e of t.get("regions").split(",")){const t=e.split(/[:-]/);t[0];const n=Number.parseInt(t[1]);const o=Number.parseInt(t[2]);if(Number.isNaN(n)||Number.isNaN(o))throw"Invalid start/stop value in regions";i.push({chr:t[0],start:n,stop:o})}}if(!r&&!i){if(o.defaultcoord){r={chr:o.defaultcoord.chr,start:o.defaultcoord.start,stop:o.defaultcoord.stop}}}if(r){s.chr=r.chr;s.start=r.start;s.stop=r.stop}else if(i){s.rglst=i}if(t.has("hlregion")){const e=[];for(const n of t.get("hlregion").split(",")){const t=string2pos(n,o,true);if(t)e.push(t)}if(e.length)s.hlregions=e}s.datasetqueries=may_get_officialmds(t);s.tklst=await get_tklst(t,o);first_genetrack_tolist(e.genomes[n],s.tklst);mayAddBedjfilterbyname(t,s.tklst);const a=await import("./block-ec15b4b6.js").then((function(e){return e.c}));new a.Block(s);return}if(t.has("gene")){const n=t.get("gene");if(n.length==0)throw"zero length query string";const o={hostURL:e.hostURL,query:n,holder:e.holder,variantPageCall_snv:e.variantPageCall_snv,samplecart:e.samplecart,debugmode:e.debugmode};{let n;for(let t in e.genomes){if(e.genomes[t].isdefault){n=t;break}}if(t.has("genome")){n=t.get("genome")}if(!n)throw"No genome, and none set as default";o.genome=e.genomes[n];if(!o.genome)throw"invalid genome: "+n}if(t.has("dataset")){o.dataset=t.get("dataset").split(",")}if(t.has("hlaachange")){o.hlaachange=new Map;for(const e of t.get("hlaachange").split(",")){o.hlaachange.set(e,false)}}if(t.has("hlregion")){const e=[];for(const n of t.get("hlregion").split(",")){const t=string2pos(n,o.genome,true);if(t)e.push(t)}if(e.length)o.hlregions=e}o.tklst=await get_tklst(t,o.genome);mayAddBedjfilterbyname(t,o.tklst);o.datasetqueries=may_get_officialmds(t);await blockinit(o);return}if(t.has("disco")){const n=t.get("genome");const o=e.genomes[n];if(!o)throw"genome missing";const s=t.get("dslabel");if(!s)throw"dslabel missing";const r=t.get("sample");if(!r)throw"sample_id missing";const i=(await import("./filter-5a5a1166.js").then((function(e){return e.q}))).vocabInit({state:{genome:n,dslabel:s}});const a=await i.getTermdbConfig();await(await import("./plot.disco-7efd2855.js")).default(a,s,{sample_id:r},e.holder,o);return}if(t.has("study")){const n=t.get("study");if(n!=""){loadstudycohort(e.genomes,n,e.holder,e.hostURL,undefined,false,e.app||{debugmode:e.debugmode,instanceTracker:e.instanceTracker||{},callbacks:e.callbacks||{}})}}}function may_get_officialmds(e){if(!e.has("mds"))return;const t=e.get("mds").split(",");if(t[0]&&t[1]){const n={dataset:t[0],querykey:t[1]};if(e.has("sample")){n.singlesample={name:e.get("sample")};n.getsampletrackquickfix=true}return[n]}return}async function get_tklst(e,t){const n=[];if(e.has("mds3")){const t=e.get("mds3").split(",");for(const o of t){const t={type:tkt.mds3,dslabel:o};if(e.has("token"))t.token=e.get("token");if(e.has("filterobj"))t.filterObj=e.get("filterobj");n.push(t)}}if(e.has("mds3bcffile")){const[t,o]=e.get("mds3bcffile").split(",");if(t&&o){n.push({type:tkt.mds3,name:t,bcf:{file:o}})}}if(e.has("arcfile")){const t=e.get("arcfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.hicstraw,name:t[e],bedfile:t[e+1],mode_hm:false,mode_arc:true})}}}if(e.has("mdsjsoncache")){const t=await dofetch2("mdsjsonform",{method:"POST",body:JSON.stringify({draw:e.get("mdsjsoncache")})});if(t.error)throw t.error;validate_mdsjson(t.json);const o=get_json_tk(t.json);n.push(o)}if(e.has("mdsjson")||e.has("mdsjsonurl")){const t=e.get("mdsjsonurl");const o=e.get("mdsjson");const s=await init_mdsjson(o,t);n.push(...s)}if(e.has("tkjsonfile")){const o=await dofetch("textfile",{file:e.get("tkjsonfile")});if(o.error)throw o.error;if(!o.text)throw".text missing";const s=JSON.parse(o.text);for(const e of s){if(e.isfacet){if(!t.tkset)t.tkset=[];if(!e.tracks)throw".tracks[] missing from a facet table";if(!Array.isArray(e.tracks))throw".tracks[] not an array from a facet table";e.tklst=e.tracks;delete e.tracks;for(const t of e.tklst){if(!t.assay)throw".assay missing from a facet track";if(!t.sample)throw".sample missing from a facet track";t.tkid=Math.random().toString()}t.tkset.push(e)}else{n.push(e)}}}if(e.has("bamfile")){const t=e.get("bamfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bam,name:t[e],file:t[e+1]})}}}if(e.has("bamurl")){const t=e.get("bamurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bam,name:t[e],url:t[e+1]})}}}if(e.has("bedjfile")){const t=e.get("bedjfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bedj,name:t[e],file:t[e+1]})}}}if(e.has("bedjurl")){const t=e.get("bedjurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bedj,name:t[e],url:t[e+1]})}}}if(e.has("hictkfile")||e.has("hictkurl")){const t=e.has("hictkfile");const o=e.get(t?"hictkfile":"hictkurl").split(",");const s=e.has("hictknorm")?e.get("hictknorm").split(","):null;for(let e=0;e<o.length;e+=3){if(o[e]&&o[e+1]&&o[e+2]){const r={type:tkt.hicstraw,name:o[e],enzyme:o[e+1],normalizationmethod:s?s[e/3]:null};if(t){r.file=o[e+2]}else{r.url=o[e+2]}n.push(r)}}}if(e.has("ldfile")){const t=e.get("ldfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.ld,name:t[e],file:t[e+1]})}}}if(e.has("bigwigfile")){const t=e.get("bigwigfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bigwig,name:t[e],file:t[e+1],scale:{auto:1}})}}}if(e.has("bigwigurl")){const t=e.get("bigwigurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bigwig,name:t[e],url:t[e+1],scale:{auto:1}})}}}if(e.has("junctionfile")){const t=e.get("junctionfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.junction,name:t[e],tracks:[{file:t[e+1]}]})}}}if(e.has("junctionurl")){const t=e.get("junctionurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.junction,name:t[e],tracks:[{url:t[e+1]}]})}}}if(e.has("vcffile")){const t=e.get("vcffile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"vcf",name:t[e],file:t[e+1]})}}}if(e.has("vcfurl")){const t=e.get("vcfurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"vcf",name:t[e],url:t[e+1]})}}}if(e.has("aicheckfile")){const t=e.get("aicheckfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"aicheck",name:t[e],file:t[e+1]})}}}if(e.has("bampilefile")){const t=e.get("bampilefile").split(",");let o=null;if(e.has("bampilelink")){o=e.get("bampilelink").split(",").map(decodeURIComponent)}for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){const s={type:tkt.bampile,name:t[e],file:t[e+1]};if(o&&o[e/2]){s.link=o[e/2]}n.push(s)}}}if(e.has("svcnvfpkmurl")){const t=e.get("svcnvfpkmurl").split(",");const o=t[0];const s={};for(let e=1;e<t.length;e+=2){s[t[e]]=t[e+1]}if(s.svcnv||s.vcf){const e={type:tkt.mdssvcnv,name:o};if(s.svcnv){e.url=s.svcnv}if(s.vcf){e.checkvcf={url:s.vcf,indexURL:s.vcfindex}}if(s.fpkm){e.checkexpressionrank={datatype:"FPKM",url:s.fpkm,indexURL:s.fpkmindex}}n.push(e)}}if(e.has("svcnvfpkmfile")){const t=e.get("svcnvfpkmfile").split(",");const o=t[0];const s={};for(let e=1;e<t.length;e+=2){s[t[e]]=t[e+1]}if(s.svcnv||s.vcf){const e={type:tkt.mdssvcnv,name:o};if(s.svcnv){e.file=s.svcnv}if(s.vcf){e.checkvcf={file:s.vcf}}if(s.fpkm){e.checkexpressionrank={datatype:"FPKM",file:s.fpkm}}n.push(e)}}if(e.has("mdsjunctionfile")){const t=e.get("mdsjunctionfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"mdsjunction",name:t[e],file:t[e+1]})}}}if(e.has("junctionmatrix")){const t=e.get("junctionmatrix").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"mdsjunction",name:t[e],file2:t[e+1]})}}}if(e.has("junctionrnapeg")){const t=e.get("junctionrnapeg").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.junction,name:t[e],tracks:[{rnapegfile:t[e+1]}]})}}}for(const e of n){if(e.type=="mds3"&&e.dslabel)continue;e.iscustom=true}if(e.has("isdense")){n.filter((e=>e.type==tkt.mdssvcnv)).forEach((e=>{e.isdense=true;e.isfull=false}))}if(e.has("sample")){n.filter((e=>e.type==tkt.mdssvcnv)).forEach((t=>{t.singlesample={name:e.get("sample")};t.getsampletrackquickfix=true}))}return n}function mayAddBedjfilterbyname(e,t){if(e.has("bedjfilterbyname")){for(const n of t){if(n.type=="bedj")n.filterByName=e.get("bedjfilterbyname")}}}function makeButton(e){const t=e.div.append("button").attr("type","submit").style("background-color",e.backgroundColor?e.backgroundColor:"#cfe2f3").style("margin",e.margin?e.margin:"20px 20px 0px 20px").style("padding","8px").style("border","none").style("border-radius","3px").style("display","inline-block").text(e.text);return t}function addGeneSearchbox(e){const t=e.tip,n=e.row;let o,s=150;if("placeholder"in e){o=e.placeholder}else if(e.geneOnly){o="Gene";s=100}else{o="Gene, position";if(e.genome.hasSNP){o+=", dbSNP";s+=40}if(e.allowVariant){o+=", variant";s+=40}}const r=n.append("input").attr("type","text").attr("placeholder",o).attr("aria-label","Gene symbol, position, or alias").attr("class","sja_genesearchinput").style("width",s+"px").on("focus",(e=>{e.target.select()})).on("keyup",(async n=>{const o=n.target;const s=o.value.trim();if(s.length<=1)return t.hide();i.mark.html("");i.word.style("font-size","0.7em");if(e.hideHelp){i.word.text("")}else{i.word.text("Press ENTER to search, ESC to cancel")}if(keyupEnter(n)){o.blur();t.hide();if(e.geneOnly){const e=t.d.select(".sja_menuoption");if(e.size()>0&&e.attr("isgene")){const t=e.text();f({geneSymbol:t},s)}else{f(null,"not a gene")}return}if(e.allowVariant){const t=await string2variant(s,e.genome);if(t){f(t,"Valid variant");return}}const n=string2pos(s,e.genome);if(n){f(n,"Valid coordinate");return}o.disabled=true;const r=t.d.select(".sja_menuoption");if(r.size()>0&&r.attr("isgene")){await c(r.text())}else{await c(s)}o.disabled=false;return}if(n.code=="Escape"){t.hide();if(p.chr){f(p,p.fromWhat)}else if(e.defaultCoord){const t=e.defaultCoord;o.value=t.chr+(t.isVariant?"."+t.pos+"."+t.ref+"."+t.alt:":"+t.start+"-"+t.stop)}o.blur();return}if(n.key=="ArrowDown"){t.d.selectAll(".sja_menuoption").attr("tabindex",0).on("keyup",(e=>{if(e.key=="Enter"){e.target.click()}else if(e.key=="ArrowDown"){if(e.target.nextSibling)e.target.nextSibling.focus()}else if(e.key=="ArrowUp"){if(e.target.previousSibling)e.target.previousSibling.focus()}}));t.d.select(".sja_menuoption").node().focus();return}l()}));if(!e.focusOff)r.node().focus();const i={mark:n.append("span").style("margin-left","5px"),word:n.append("span").style("margin-left","5px").style("font-size",".8em").style("opacity",.6)};async function a(){const n=r.property("value").trim();if(!n)return;if(e.allowVariant){const t=await string2variant(n,e.genome);if(t){return}}const o=string2pos(n,e.genome,true);if(o){return}t.showunder(r.node()).clear();try{const o=await dofetch3("genelookup",{body:{genome:e.genome.name,input:n}});if(o.error)throw o.error;if(!o.hits||o.hits.length==0)return t.hide();for(const n of o.hits){t.d.append("div").text(n).attr("class","sja_menuoption").style("border-radius","0px").attr("isgene",1).on("click",(()=>{if(e.geneOnly){f({geneSymbol:n},n);t.hide()}else{c(n)}}))}}catch(e){t.d.append("div").text(e.message||e)}}const l=debounce_1.debounce(a,500);async function c(n){t.hide();try{const o=await dofetch3("genelookup",{body:{genome:e.genome.name,input:n,deep:1}});if(o.error)throw o.error;if(!o.gmlst||o.gmlst.length==0){if(e.genome.hasSNP){if(n.toLowerCase().startsWith("rs")){await d(n)}else{f(null,"Not a gene or SNP")}}else{f(null,"No match to gene name")}return}const s=gmlst2loci(o.gmlst);if(s.length==1){const e=o.gmlst[0].name||n;f(s[0],n,e);return}t.showunder(r.node()).clear();for(const e of s){t.d.append("div").attr("class","sja_menuoption").style("border-radius","0px").text(e.name+" "+e.chr+":"+e.start+"-"+e.stop).on("click",(()=>{t.hide();f(e,n+", "+e.name,e.name)}))}}catch(e){f(null,e.message||e)}}async function d(t){const n=await dofetch3("snp",{body:{byName:true,genome:e.genome.name,lst:[t]}});if(n.error)throw n.error;if(!n.results||n.results.length==0)throw"Not a gene or SNP";const o=n.results[0];f({chr:o.chrom,start:o.chromStart,stop:o.chromEnd},t)}const p={};if(e.defaultCoord){const t=e.defaultCoord;if(t.isVariant){r.property("value",t.chr+"."+t.pos+"."+t.ref+"."+t.alt);p.pos=t.pos;p.ref=t.ref;p.alt=t.alt}else{r.property("value",t.chr+":"+t.start+"-"+t.stop);p.start=t.start;p.stop=t.stop}p.chr=t.chr}async function f(t,n,o){if(t){for(const e in p)delete p[e];if(t.isVariant){p.chr=t.chr;p.pos=t.pos;p.ref=t.ref;p.alt=t.alt}else if(t.chr){r.property("value",t.chr+":"+t.start+"-"+t.stop);p.chr=t.chr;p.start=t.start;p.stop=t.stop}else if(t.geneSymbol){r.property("value",t.geneSymbol);p.geneSymbol=t.geneSymbol}i.mark.style("color","green").html("&check;");if(o){p.geneSymbol=o}}else{i.mark.style("color","red").html("&cross;")}i.word.text(n||"");p.fromWhat=n;if(t&&e.callback){await e.callback()}}if(e.geneSymbol){r.property("value",e.geneSymbol);setTimeout((()=>f({geneSymbol:e.geneSymbol},e.geneSymbol)),10)}return p}async function string2variant(e,t){const n=string2simpleVariant(e,t);if(n){return n}return await string2hgvs(e,t)}function string2simpleVariant(e,t){const n=e.split(".");if(n.length!=4)return;const o=n[0];const s=Number(n[1]);const r=invalidcoord(t,o,s,s);if(r)return;return{isVariant:true,chr:o,pos:s,ref:n[2],alt:n[3]}}async function string2hgvs(e,t){const n=e.split(":g.");if(n.length!=2){return}const o=n[0];if(n[1].includes("delins")){return await hgvs_delins(o,n[1],t)}if(n[1].includes("del")){return await hgvs_del(o,n[1],t)}if(n[1].includes("ins")){return hgvs_ins(o,n[1])}return hgvs_snv(o,n[1])}function hgvs_snv(e,t){const n=t.match(/^(\d+)([ATCG])>([ATCG])$/);if(!n||n.length!=4){return}const o=Number(n[1]);if(!Number.isInteger(o))return;return{isVariant:true,chr:e,pos:o,ref:n[2],alt:n[3]}}function hgvs_ins(e,t){const[n,o]=t.split("ins");if(!o)return;const s=Number(n.split("_")[0]);if(!Number.isInteger(s))return;return{isVariant:true,chr:e,pos:s+1,ref:"-",alt:o}}async function hgvs_del(e,t,n){const[o,s]=t.split("del");if(s){const t=Number(o.split("_")[0]);if(!Number.isInteger(t))return;return{isVariant:true,chr:e,pos:t,ref:s,alt:"-"}}const[r,i]=o.split("_");const a=Number(r);const l=i?Number(i):a+1;if(!Number.isInteger(a)||!Number.isInteger(l))return;const c=await getRefAllele(e,a,l,n);return{isVariant:true,chr:e,pos:pos,ref:c,alt:"-"}}async function hgvs_delins(e,t,n){const o=t.match(/^(\d+)_(\d+)delins([ATCG]+)$/);if(!o||o.length!=4){return}const s=Number(o[1]),r=Number(o[2]),i=o[3];if(!Number.isInteger(s)||!Number.isInteger(r))return;const a=await getRefAllele(e,s,r,n);return{isVariant:true,chr:e,pos:s,ref:a,alt:i}}async function getRefAllele(e,t,n,o){const s={coord:e+":"+t+"-"+n,genome:o.name};const r=await dofetch3("ntseq",{body:s});return r.seq}function __awaiter(e,t,n,o){function s(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,r){function i(e){try{l(o.next(e))}catch(e){r(e)}}function a(e){try{l(o["throw"](e))}catch(e){r(e)}}function l(e){e.done?n(e.value):s(e.value).then(i,a)}l((o=o.apply(e,t||[])).next())}))}class Tabs{constructor(e){this.opts=this.validateOpts(e);this.tabs=e.tabs;this.dom={holder:e.holder};this.defaultTabWidth=90;setRenderers$5(this)}validateOpts(e){if(!e.holder)throw`missing opts.holder for Tabs()`;if(!Array.isArray(e.tabs))throw`invalid opts.tabs array for Tabs()`;if(!e.linePosition)e.linePosition="bottom";if(e.linePosition!="bottom"&&e.linePosition!="top"&&e.linePosition!="right"&&e.linePosition!="left")throw`Invalid .linePosition arg. Must be either bottom, top, right, or left`;if(!e.tabsPosition)e.tabsPosition="horizontal";if(e.tabsPosition!="horizontal"&&e.tabsPosition!="vertical")throw`Invalid .tabsPosition arg. Must be either vertical or horizontal`;return e}main(){return __awaiter(this,void 0,void 0,(function*(){try{yield this.render()}catch(e){if(e.stack)console.log(e.stack);else throw e}}))}}function setRenderers$5(e){e.render=()=>__awaiter(this,void 0,void 0,(function*(){const t=e.tabs.find((e=>e.active));if(!t)e.tabs[0].active=true;const n=e.opts.linePosition=="bottom"||e.opts.linePosition=="top"?"center":e.opts.linePosition;e.dom.tabsHolder=e.dom.holder.append("div").style(`border-${e.opts.linePosition}`,"0.5px solid #1575ad");if(!e.opts.contentHolder&&!e.opts.noContent){e.dom.contentHolder=e.dom.holder.append("div")}else e.dom.contentHolder=e.opts.contentHolder;if(e.opts.tabsPosition=="vertical"){e.dom.tabsHolder.style("display","inline-grid").style("align-items","start").style("gap",e.opts.gap||"");e.dom.contentHolder.style("display","inline-block").style("vertical-align","top").style("position","relative")}else e.dom.tabsHolder.style("display","inline-block");yield e.dom.tabsHolder.selectAll("button").data(e.tabs).enter().append("button").attr("class","sj-toggle-button").classed("sjpp-active",(e=>e.active)).style("padding","0px").style("width",(e=>e.width?`${e.width}px`:"fit-content")).style("min-width",(t=>t.width?null:Math.max(e.defaultTabWidth))).style("border","none").style("background-color","transparent").style("display",e.opts.tabsPosition=="vertical"?"flex":"inline-grid").property("disabled",(e=>e.disabled?e.disabled():false)).each((function(t){return __awaiter(this,void 0,void 0,(function*(){t.wrapper=d3select(this);if(e.opts.linePosition=="right")t.wrapper.style("justify-self","end");if(e.opts.linePosition=="left")t.wrapper.style("justify-self","start");if(e.opts.linePosition=="top"||e.opts.linePosition=="left"){t.line=t.wrapper.append("div").style("display",e.opts.linePosition=="left"?"inline-flex":"flex");t.tab=t.wrapper.append("div").style("display",e.opts.linePosition=="left"?"inline-block":"block")}else{t.tab=t.wrapper.append("div").style("display",e.opts.linePosition=="right"?"inline-block":"block");t.line=t.wrapper.append("div").style("display",e.opts.linePosition=="right"?"inline-flex":"flex")}if(t.disabled&&t.isVisible){t.wrapper.style("cursor",t.disabled()==true&&t.isVisible()==true?"not-allowed":"pointer")}t.tab.style("color",t.active?"#1575ad":"#757373").style("text-align",n).style("padding","5px").html(t.label);t.line.style("background-color","#1575ad").style("visibility",t.active?"visible":"hidden");if(e.opts.linePosition=="top"||e.opts.linePosition=="bottom"){t.line.style("height","8px").style("padding","0px 5px")}else{t.line.style("align-self","stretch").style("padding","5px 0px").html('<span style="width: 8px";>&nbsp</span>')}if(e.dom.contentHolder){t.contentHolder=e.dom.contentHolder.append("div").style("display",t.active?"block":"none");if(e.opts.tabsPosition=="horizontal"&&!e.opts.noTopContentStyle){t.contentHolder.style("padding-top","10px").style("margin-top","10px")}}if(t.active&&t.callback)yield t.callback(event,t);t.wrapper.on("mouseenter",(()=>{t.tab.style("color",t.active?"#757373":"#1575ad")})).on("mouseleave",(()=>{t.tab.style("color",t.active?"#1575ad":"#757373")}))}))})).on("click",((t,n)=>__awaiter(this,void 0,void 0,(function*(){for(const t of e.tabs){t.active=t===n}const o=e.tabs.findIndex((e=>e.active));e.update(o);if(n.callback)yield n.callback(t,n)}))));const o=e.tabs.findIndex((e=>e.active));e.update(o)}));e.update=(t=0,n={})=>{e.tabs.forEach(((e,n)=>{e.active=t===n}));e.dom.tabsHolder.selectAll("button").data(e.tabs).classed("sjpp-active",(e=>e.active)).each((e=>{e.wrapper.classed("sjpp-active",e.active);if(e.isVisible)e.wrapper.style("display",(e=>n&&e.isVisible()?"":"none"));if(e.contentHolder)e.contentHolder.style("display",e.active?"block":"none");e.tab.style("color",e.active?"#1575ad":"#757373");e.line.style("visibility",e.active?"visible":"hidden")}))}}class BreadcrumbTrail{constructor(e){this.opts=e;this.dom={holder:e.holder,trailDiv:e.trailDiv||e.holder.append("div")};setRenderers$4(this)}async main(e={}){try{return await this.render()}catch(e){if(e.stack)console.log(e.stack);else throw e}}}function setRenderers$4(e){e.render=async()=>{e.crumbs=e.opts.crumbs;for(const t of e.crumbs){t.label=t.label||t.name}const t=e.crumbs.find((e=>e.inTrail));if(!t)e.crumbs[0].inTrail=true;await e.dom.trailDiv.style("margin-left","5px").style("font-size",".75em").style("display","inline-block").classed("sjpp-breadcrumb-trail",true).selectAll("span").data(e.crumbs).enter().append("span").classed("sjpp-breadcrumb",true).html((e=>`&nbsp> ${e.label}`)).style("display",(e=>e.inTrail?"inline-block":"none")).each((async function(e){if(!e.inTrail)e.inTrail=false;e.crumb=d3select(this)}));e.update()};e.update=(t=0)=>{e.crumbs.forEach(((e,n)=>{e.inTrail=t===n}));e.dom.trailDiv.selectAll("span").data(e.crumbs).each((async e=>{e.crumb.style("display",e.inTrail?"inline-block":"none")}))}}var deepFreezeEs6={exports:{}};function deepFreeze(e){if(e instanceof Map){e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}}else if(e instanceof Set){e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}}Object.freeze(e);Object.getOwnPropertyNames(e).forEach((function(t){var n=e[t];if(typeof n=="object"&&!Object.isFrozen(n)){deepFreeze(n)}}));return e}deepFreezeEs6.exports=deepFreeze;deepFreezeEs6.exports.default=deepFreeze;var deepFreeze$1=deepFreezeEs6.exports;class Response{constructor(e){if(e.data===undefined)e.data={};this.data=e.data;this.isMatchIgnored=false}ignoreMatch(){this.isMatchIgnored=true}}function escapeHTML(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function inherit$1(e,...t){const n=Object.create(null);for(const t in e){n[t]=e[t]}t.forEach((function(e){for(const t in e){n[t]=e[t]}}));return n}const SPAN_CLOSE="</span>";const emitsWrappingTags=e=>!!e.kind;const expandScopeName=(e,{prefix:t})=>{if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")}return`${t}${e}`};class HTMLRenderer{constructor(e,t){this.buffer="";this.classPrefix=t.classPrefix;e.walk(this)}addText(e){this.buffer+=escapeHTML(e)}openNode(e){if(!emitsWrappingTags(e))return;let t=e.kind;if(e.sublanguage){t=`language-${t}`}else{t=expandScopeName(t,{prefix:this.classPrefix})}this.span(t)}closeNode(e){if(!emitsWrappingTags(e))return;this.buffer+=SPAN_CLOSE}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}class TokenTree{constructor(){this.rootNode={children:[]};this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t);this.stack.push(t)}closeNode(){if(this.stack.length>1){return this.stack.pop()}return undefined}closeAllNodes(){while(this.closeNode());}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){if(typeof t==="string"){e.addText(t)}else if(t.children){e.openNode(t);t.children.forEach((t=>this._walk(e,t)));e.closeNode(t)}return e}static _collapse(e){if(typeof e==="string")return;if(!e.children)return;if(e.children.every((e=>typeof e==="string"))){e.children=[e.children.join("")]}else{e.children.forEach((e=>{TokenTree._collapse(e)}))}}}class TokenTreeEmitter extends TokenTree{constructor(e){super();this.options=e}addKeyword(e,t){if(e===""){return}this.openNode(t);this.addText(e);this.closeNode()}addText(e){if(e===""){return}this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t;n.sublanguage=true;this.add(n)}toHTML(){const e=new HTMLRenderer(this,this.options);return e.value()}finalize(){return true}}function source$1(e){if(!e)return null;if(typeof e==="string")return e;return e.source}function lookahead$1(e){return concat$1("(?=",e,")")}function concat$1(...e){const t=e.map((e=>source$1(e))).join("");return t}function stripOptionsFromArgs(e){const t=e[e.length-1];if(typeof t==="object"&&t.constructor===Object){e.splice(e.length-1,1);return t}else{return{}}}function either(...e){const t=stripOptionsFromArgs(e);const n="("+(t.capture?"":"?:")+e.map((e=>source$1(e))).join("|")+")";return n}function countMatchGroups(e){return new RegExp(e.toString()+"|").exec("").length-1}function startsWith(e,t){const n=e&&e.exec(t);return n&&n.index===0}const BACKREF_RE=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function _rewriteBackreferences(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n;let o=source$1(e);let s="";while(o.length>0){const e=BACKREF_RE.exec(o);if(!e){s+=o;break}s+=o.substring(0,e.index);o=o.substring(e.index+e[0].length);if(e[0][0]==="\\"&&e[1]){s+="\\"+String(Number(e[1])+t)}else{s+=e[0];if(e[0]==="("){n++}}}return s})).map((e=>`(${e})`)).join(t)}const MATCH_NOTHING_RE=/\b\B/;const IDENT_RE$1="[a-zA-Z]\\w*";const UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*";const NUMBER_RE="\\b\\d+(\\.\\d+)?";const C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";const BINARY_NUMBER_RE="\\b(0b[01]+)";const RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";const SHEBANG=(e={})=>{const t=/^#![ ]*\//;if(e.binary){e.begin=concat$1(t,/.*\b/,e.binary,/\b.*/)}return inherit$1({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{if(e.index!==0)t.ignoreMatch()}},e)};const BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0};const APOS_STRING_MODE={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[BACKSLASH_ESCAPE]};const QUOTE_STRING_MODE={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[BACKSLASH_ESCAPE]};const PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/};const COMMENT=function(e,t,n={}){const o=inherit$1({scope:"comment",begin:e,end:t,contains:[]},n);o.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:true,relevance:0});const s=either("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);o.contains.push({begin:concat$1(/[ ]+/,"(",s,/[.]?[:]?([.][ ]|[ ])/,"){3}")});return o};const C_LINE_COMMENT_MODE=COMMENT("//","$");const C_BLOCK_COMMENT_MODE=COMMENT("/\\*","\\*/");const HASH_COMMENT_MODE=COMMENT("#","$");const NUMBER_MODE={scope:"number",begin:NUMBER_RE,relevance:0};const C_NUMBER_MODE={scope:"number",begin:C_NUMBER_RE,relevance:0};const BINARY_NUMBER_MODE={scope:"number",begin:BINARY_NUMBER_RE,relevance:0};const REGEXP_MODE={begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[BACKSLASH_ESCAPE]}]}]};const TITLE_MODE={scope:"title",begin:IDENT_RE$1,relevance:0};const UNDERSCORE_TITLE_MODE={scope:"title",begin:UNDERSCORE_IDENT_RE,relevance:0};const METHOD_GUARD={begin:"\\.\\s*"+UNDERSCORE_IDENT_RE,relevance:0};const END_SAME_AS_BEGIN=function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{if(t.data._beginMatch!==e[1])t.ignoreMatch()}})};var MODES=Object.freeze({__proto__:null,MATCH_NOTHING_RE:MATCH_NOTHING_RE,IDENT_RE:IDENT_RE$1,UNDERSCORE_IDENT_RE:UNDERSCORE_IDENT_RE,NUMBER_RE:NUMBER_RE,C_NUMBER_RE:C_NUMBER_RE,BINARY_NUMBER_RE:BINARY_NUMBER_RE,RE_STARTERS_RE:RE_STARTERS_RE,SHEBANG:SHEBANG,BACKSLASH_ESCAPE:BACKSLASH_ESCAPE,APOS_STRING_MODE:APOS_STRING_MODE,QUOTE_STRING_MODE:QUOTE_STRING_MODE,PHRASAL_WORDS_MODE:PHRASAL_WORDS_MODE,COMMENT:COMMENT,C_LINE_COMMENT_MODE:C_LINE_COMMENT_MODE,C_BLOCK_COMMENT_MODE:C_BLOCK_COMMENT_MODE,HASH_COMMENT_MODE:HASH_COMMENT_MODE,NUMBER_MODE:NUMBER_MODE,C_NUMBER_MODE:C_NUMBER_MODE,BINARY_NUMBER_MODE:BINARY_NUMBER_MODE,REGEXP_MODE:REGEXP_MODE,TITLE_MODE:TITLE_MODE,UNDERSCORE_TITLE_MODE:UNDERSCORE_TITLE_MODE,METHOD_GUARD:METHOD_GUARD,END_SAME_AS_BEGIN:END_SAME_AS_BEGIN});function skipIfHasPrecedingDot(e,t){const n=e.input[e.index-1];if(n==="."){t.ignoreMatch()}}function scopeClassName(e,t){if(e.className!==undefined){e.scope=e.className;delete e.className}}function beginKeywords(e,t){if(!t)return;if(!e.beginKeywords)return;e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)";e.__beforeBegin=skipIfHasPrecedingDot;e.keywords=e.keywords||e.beginKeywords;delete e.beginKeywords;if(e.relevance===undefined)e.relevance=0}function compileIllegal(e,t){if(!Array.isArray(e.illegal))return;e.illegal=either(...e.illegal)}function compileMatch(e,t){if(!e.match)return;if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match;delete e.match}function compileRelevance(e,t){if(e.relevance===undefined)e.relevance=1}const beforeMatchExt=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]}));e.keywords=n.keywords;e.begin=concat$1(n.beforeMatch,lookahead$1(n.begin));e.starts={relevance:0,contains:[Object.assign(n,{endsParent:true})]};e.relevance=0;delete n.beforeMatch};const COMMON_KEYWORDS=["of","and","for","in","not","or","if","then","parent","list","value"];const DEFAULT_KEYWORD_SCOPE="keyword";function compileKeywords(e,t,n=DEFAULT_KEYWORD_SCOPE){const o=Object.create(null);if(typeof e==="string"){s(n,e.split(" "))}else if(Array.isArray(e)){s(n,e)}else{Object.keys(e).forEach((function(n){Object.assign(o,compileKeywords(e[n],t,n))}))}return o;function s(e,n){if(t){n=n.map((e=>e.toLowerCase()))}n.forEach((function(t){const n=t.split("|");o[n[0]]=[e,scoreForKeyword(n[0],n[1])]}))}}function scoreForKeyword(e,t){if(t){return Number(t)}return commonKeyword(e)?0:1}function commonKeyword(e){return COMMON_KEYWORDS.includes(e.toLowerCase())}const seenDeprecations={};const error=e=>{console.error(e)};const warn=(e,...t)=>{console.log(`WARN: ${e}`,...t)};const deprecated=(e,t)=>{if(seenDeprecations[`${e}/${t}`])return;console.log(`Deprecated as of ${e}. ${t}`);seenDeprecations[`${e}/${t}`]=true};const MultiClassError=new Error;function remapScopeNames(e,t,{key:n}){let o=0;const s=e[n];const r={};const i={};for(let e=1;e<=t.length;e++){i[e+o]=s[e];r[e+o]=true;o+=countMatchGroups(t[e-1])}e[n]=i;e[n]._emit=r;e[n]._multi=true}function beginMultiClass(e){if(!Array.isArray(e.begin))return;if(e.skip||e.excludeBegin||e.returnBegin){error("skip, excludeBegin, returnBegin not compatible with beginScope: {}");throw MultiClassError}if(typeof e.beginScope!=="object"||e.beginScope===null){error("beginScope must be object");throw MultiClassError}remapScopeNames(e,e.begin,{key:"beginScope"});e.begin=_rewriteBackreferences(e.begin,{joinWith:""})}function endMultiClass(e){if(!Array.isArray(e.end))return;if(e.skip||e.excludeEnd||e.returnEnd){error("skip, excludeEnd, returnEnd not compatible with endScope: {}");throw MultiClassError}if(typeof e.endScope!=="object"||e.endScope===null){error("endScope must be object");throw MultiClassError}remapScopeNames(e,e.end,{key:"endScope"});e.end=_rewriteBackreferences(e.end,{joinWith:""})}function scopeSugar(e){if(e.scope&&typeof e.scope==="object"&&e.scope!==null){e.beginScope=e.scope;delete e.scope}}function MultiClass(e){scopeSugar(e);if(typeof e.beginScope==="string"){e.beginScope={_wrap:e.beginScope}}if(typeof e.endScope==="string"){e.endScope={_wrap:e.endScope}}beginMultiClass(e);endMultiClass(e)}function compileLanguage(e){function t(t,n){return new RegExp(source$1(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={};this.regexes=[];this.matchAt=1;this.position=0}addRule(e,t){t.position=this.position++;this.matchIndexes[this.matchAt]=t;this.regexes.push([t,e]);this.matchAt+=countMatchGroups(e)+1}compile(){if(this.regexes.length===0){this.exec=()=>null}const e=this.regexes.map((e=>e[1]));this.matcherRe=t(_rewriteBackreferences(e,{joinWith:"|"}),true);this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t){return null}const n=t.findIndex(((e,t)=>t>0&&e!==undefined));const o=this.matchIndexes[n];t.splice(0,n);return Object.assign(t,o)}}class o{constructor(){this.rules=[];this.multiRegexes=[];this.count=0;this.lastIndex=0;this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n)));t.compile();this.multiRegexes[e]=t;return t}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]);if(t.type==="begin")this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition()){if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1;n=t.exec(e)}}if(n){this.regexIndex+=n.position+1;if(this.regexIndex===this.count){this.considerAll()}}return n}}function s(e){const t=new o;e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"})));if(e.terminatorEnd){t.addRule(e.terminatorEnd,{type:"end"})}if(e.illegal){t.addRule(e.illegal,{type:"illegal"})}return t}function r(n,o){const i=n;if(n.isCompiled)return i;[scopeClassName,compileMatch,MultiClass,beforeMatchExt].forEach((e=>e(n,o)));e.compilerExtensions.forEach((e=>e(n,o)));n.__beforeBegin=null;[beginKeywords,compileIllegal,compileRelevance].forEach((e=>e(n,o)));n.isCompiled=true;let a=null;if(typeof n.keywords==="object"&&n.keywords.$pattern){n.keywords=Object.assign({},n.keywords);a=n.keywords.$pattern;delete n.keywords.$pattern}a=a||/\w+/;if(n.keywords){n.keywords=compileKeywords(n.keywords,e.case_insensitive)}i.keywordPatternRe=t(a,true);if(o){if(!n.begin)n.begin=/\B|\b/;i.beginRe=t(n.begin);if(!n.end&&!n.endsWithParent)n.end=/\B|\b/;if(n.end)i.endRe=t(n.end);i.terminatorEnd=source$1(n.end)||"";if(n.endsWithParent&&o.terminatorEnd){i.terminatorEnd+=(n.end?"|":"")+o.terminatorEnd}}if(n.illegal)i.illegalRe=t(n.illegal);if(!n.contains)n.contains=[];n.contains=[].concat(...n.contains.map((function(e){return expandOrCloneMode(e==="self"?n:e)})));n.contains.forEach((function(e){r(e,i)}));if(n.starts){r(n.starts,o)}i.matcher=s(i);return i}if(!e.compilerExtensions)e.compilerExtensions=[];if(e.contains&&e.contains.includes("self")){throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")}e.classNameAliases=inherit$1(e.classNameAliases||{});return r(e)}function dependencyOnParent(e){if(!e)return false;return e.endsWithParent||dependencyOnParent(e.starts)}function expandOrCloneMode(e){if(e.variants&&!e.cachedVariants){e.cachedVariants=e.variants.map((function(t){return inherit$1(e,{variants:null},t)}))}if(e.cachedVariants){return e.cachedVariants}if(dependencyOnParent(e)){return inherit$1(e,{starts:e.starts?inherit$1(e.starts):null})}if(Object.isFrozen(e)){return inherit$1(e)}return e}var version="11.2.0";const escape=escapeHTML;const inherit=inherit$1;const NO_MATCH=Symbol("nomatch");const MAX_KEYWORD_HITS=7;const HLJS=function(e){const t=Object.create(null);const n=Object.create(null);const o=[];let s=true;const r="Could not find the language '{}', did you forget to load/include a language module?";const i={disableAutodetect:true,name:"Plain text",contains:[]};let a={ignoreUnescapedHTML:false,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:TokenTreeEmitter};function l(e){return a.noHighlightRe.test(e)}function c(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=a.languageDetectRe.exec(t);if(n){const t=N(n[1]);if(!t){warn(r.replace("{}",n[1]));warn("Falling back to no-highlight mode for this block.",e)}return t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>l(e)||N(e)))}function d(e,t,n){let o="";let s="";if(typeof t==="object"){o=e;n=t.ignoreIllegals;s=t.language}else{deprecated("10.7.0","highlight(lang, code, ...args) has been deprecated.");deprecated("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277");s=e;o=t}if(n===undefined){n=true}const r={code:o,language:s};R("before:highlight",r);const i=r.result?r.result:p(r.language,r.code,n);i.code=r.code;R("after:highlight",i);return i}function p(e,n,o,i){const l=Object.create(null);function c(e,t){return e.keywords[t]}function d(){if(!A.keywords){R.addText(M);return}let e=0;A.keywordPatternRe.lastIndex=0;let t=A.keywordPatternRe.exec(M);let n="";while(t){n+=M.substring(e,t.index);const o=j.case_insensitive?t[0].toLowerCase():t[0];const s=c(A,o);if(s){const[e,r]=s;R.addText(n);n="";l[o]=(l[o]||0)+1;if(l[o]<=MAX_KEYWORD_HITS)I+=r;if(e.startsWith("_")){n+=t[0]}else{const n=j.classNameAliases[e]||e;R.addKeyword(t[0],n)}}else{n+=t[0]}e=A.keywordPatternRe.lastIndex;t=A.keywordPatternRe.exec(M)}n+=M.substr(e);R.addText(n)}function f(){if(M==="")return;let e=null;if(typeof A.subLanguage==="string"){if(!t[A.subLanguage]){R.addText(M);return}e=p(A.subLanguage,M,true,C[A.subLanguage]);C[A.subLanguage]=e._top}else{e=u(M,A.subLanguage.length?A.subLanguage:null)}if(A.relevance>0){I+=e.relevance}R.addSublanguage(e._emitter,e.language)}function h(){if(A.subLanguage!=null){f()}else{d()}M=""}function m(e,t){let n=1;while(t[n]!==undefined){if(!e._emit[n]){n++;continue}const o=j.classNameAliases[e[n]]||e[n];const s=t[n];if(o){R.addKeyword(s,o)}else{M=s;d();M=""}n++}}function g(e,t){if(e.scope&&typeof e.scope==="string"){R.openNode(j.classNameAliases[e.scope]||e.scope)}if(e.beginScope){if(e.beginScope._wrap){R.addKeyword(M,j.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap);M=""}else if(e.beginScope._multi){m(e.beginScope,t);M=""}}A=Object.create(e,{parent:{value:A}});return A}function b(e,t,n){let o=startsWith(e.endRe,n);if(o){if(e["on:end"]){const n=new Response(e);e["on:end"](t,n);if(n.isMatchIgnored)o=false}if(o){while(e.endsParent&&e.parent){e=e.parent}return e}}if(e.endsWithParent){return b(e.parent,t,n)}}function y(e){if(A.matcher.regexIndex===0){M+=e[0];return 1}else{$=true;return 0}}function v(e){const t=e[0];const n=e.rule;const o=new Response(n);const s=[n.__beforeBegin,n["on:begin"]];for(const n of s){if(!n)continue;n(e,o);if(o.isMatchIgnored)return y(t)}if(n.skip){M+=t}else{if(n.excludeBegin){M+=t}h();if(!n.returnBegin&&!n.excludeBegin){M=t}}g(n,e);return n.returnBegin?0:t.length}function w(e){const t=e[0];const o=n.substr(e.index);const s=b(A,e,o);if(!s){return NO_MATCH}const r=A;if(A.endScope&&A.endScope._wrap){h();R.addKeyword(t,A.endScope._wrap)}else if(A.endScope&&A.endScope._multi){h();m(A.endScope,e)}else if(r.skip){M+=t}else{if(!(r.returnEnd||r.excludeEnd)){M+=t}h();if(r.excludeEnd){M=t}}do{if(A.scope){R.closeNode()}if(!A.skip&&!A.subLanguage){I+=A.relevance}A=A.parent}while(A!==s.parent);if(s.starts){g(s.starts,e)}return r.returnEnd?0:t.length}function x(){const e=[];for(let t=A;t!==j;t=t.parent){if(t.scope){e.unshift(t.scope)}}e.forEach((e=>R.openNode(e)))}let _={};function k(t,r){const i=r&&r[0];M+=t;if(i==null){h();return 0}if(_.type==="begin"&&r.type==="end"&&_.index===r.index&&i===""){M+=n.slice(r.index,r.index+1);if(!s){const t=new Error(`0 width match regex (${e})`);t.languageName=e;t.badRule=_.rule;throw t}return 1}_=r;if(r.type==="begin"){return v(r)}else if(r.type==="illegal"&&!o){const e=new Error('Illegal lexeme "'+i+'" for mode "'+(A.scope||"<unnamed>")+'"');e.mode=A;throw e}else if(r.type==="end"){const e=w(r);if(e!==NO_MATCH){return e}}if(r.type==="illegal"&&i===""){return 1}if(T>1e5&&T>r.index*3){const e=new Error("potential infinite loop, way more iterations than matches");throw e}M+=i;return i.length}const j=N(e);if(!j){error(r.replace("{}",e));throw new Error('Unknown language: "'+e+'"')}const S=compileLanguage(j);let E="";let A=i||S;const C={};const R=new a.__emitter(a);x();let M="";let I=0;let O=0;let T=0;let $=false;try{A.matcher.considerAll();for(;;){T++;if($){$=false}else{A.matcher.considerAll()}A.matcher.lastIndex=O;const e=A.matcher.exec(n);if(!e)break;const t=n.substring(O,e.index);const o=k(t,e);O=e.index+o}k(n.substr(O));R.closeAllNodes();R.finalize();E=R.toHTML();return{language:e,value:E,relevance:I,illegal:false,_emitter:R,_top:A}}catch(t){if(t.message&&t.message.includes("Illegal")){return{language:e,value:escape(n),illegal:true,relevance:0,_illegalBy:{message:t.message,index:O,context:n.slice(O-100,O+100),mode:t.mode,resultSoFar:E},_emitter:R}}else if(s){return{language:e,value:escape(n),illegal:false,relevance:0,errorRaised:t,_emitter:R,_top:A}}else{throw t}}}function f(e){const t={value:escape(e),illegal:false,relevance:0,_top:i,_emitter:new a.__emitter(a)};t._emitter.addText(e);return t}function u(e,n){n=n||a.languages||Object.keys(t);const o=f(e);const s=n.filter(N).filter(E).map((t=>p(t,e,false)));s.unshift(o);const r=s.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(N(e.language).supersetOf===t.language){return 1}else if(N(t.language).supersetOf===e.language){return-1}}return 0}));const[i,l]=r;const c=i;c.secondBest=l;return c}function h(e,t,o){const s=t&&n[t]||o;e.classList.add("hljs");e.classList.add(`language-${s}`)}function m(e){let t=null;const n=c(e);if(l(n))return;R("before:highlightElement",{el:e,language:n});if(!a.ignoreUnescapedHTML&&e.children.length>0){console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk.");console.warn("https://github.com/highlightjs/highlight.js/issues/2886");console.warn(e)}t=e;const o=t.textContent;const s=n?d(o,{language:n,ignoreIllegals:true}):u(o);e.innerHTML=s.value;h(e,n,s.language);e.result={language:s.language,re:s.relevance,relevance:s.relevance};if(s.secondBest){e.secondBest={language:s.secondBest.language,relevance:s.secondBest.relevance}}R("after:highlightElement",{el:e,result:s,text:o})}function g(e){a=inherit(a,e)}const b=()=>{w();deprecated("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function y(){w();deprecated("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let v=false;function w(){if(document.readyState==="loading"){v=true;return}const e=document.querySelectorAll(a.cssSelector);e.forEach(m)}function x(){if(v)w()}if(typeof window!=="undefined"&&window.addEventListener){window.addEventListener("DOMContentLoaded",x,false)}function _(n,o){let r=null;try{r=o(e)}catch(e){error("Language definition for '{}' could not be registered.".replace("{}",n));if(!s){throw e}else{error(e)}r=i}if(!r.name)r.name=n;t[n]=r;r.rawDefinition=o.bind(null,e);if(r.aliases){S(r.aliases,{languageName:n})}}function k(e){delete t[e];for(const t of Object.keys(n)){if(n[t]===e){delete n[t]}}}function j(){return Object.keys(t)}function N(e){e=(e||"").toLowerCase();return t[e]||t[n[e]]}function S(e,{languageName:t}){if(typeof e==="string"){e=[e]}e.forEach((e=>{n[e.toLowerCase()]=t}))}function E(e){const t=N(e);return t&&!t.disableAutodetect}function A(e){if(e["before:highlightBlock"]&&!e["before:highlightElement"]){e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}}if(e["after:highlightBlock"]&&!e["after:highlightElement"]){e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))}}}function C(e){A(e);o.push(e)}function R(e,t){const n=e;o.forEach((function(e){if(e[n]){e[n](t)}}))}function M(e){deprecated("10.7.0","highlightBlock will be removed entirely in v12.0");deprecated("10.7.0","Please use highlightElement now.");return m(e)}Object.assign(e,{highlight:d,highlightAuto:u,highlightAll:w,highlightElement:m,highlightBlock:M,configure:g,initHighlighting:b,initHighlightingOnLoad:y,registerLanguage:_,unregisterLanguage:k,listLanguages:j,getLanguage:N,registerAliases:S,autoDetection:E,inherit:inherit,addPlugin:C});e.debugMode=function(){s=false};e.safeMode=function(){s=true};e.versionString=version;for(const e in MODES){if(typeof MODES[e]==="object"){deepFreeze$1(MODES[e])}}Object.assign(e,MODES);return e};var highlight=HLJS({});var core=highlight;const IDENT_RE="[A-Za-z$_][0-9A-Za-z$_]*";const KEYWORDS=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"];const LITERALS=["true","false","null","undefined","NaN","Infinity"];const TYPES=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"];const ERROR_TYPES=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"];const BUILT_IN_GLOBALS=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"];const BUILT_IN_VARIABLES=["arguments","this","super","console","window","document","localStorage","module","global"];const BUILT_INS=[].concat(BUILT_IN_GLOBALS,TYPES,ERROR_TYPES);function source(e){if(!e)return null;if(typeof e==="string")return e;return e.source}function lookahead(e){return concat("(?=",e,")")}function concat(...e){const t=e.map((e=>source(e))).join("");return t}function javascript(e){const t=(e,{after:t})=>{const n="</"+e[0].slice(1);const o=e.input.indexOf(n,t);return o!==-1};const n=IDENT_RE;const o={begin:"<>",end:"</>"};const s={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const o=e[0].length+e.index;const s=e.input[o];if(s==="<"){n.ignoreMatch();return}if(s===">"){if(!t(e,{after:o})){n.ignoreMatch()}}}};const r={$pattern:IDENT_RE,keyword:KEYWORDS,literal:LITERALS,built_in:BUILT_INS,"variable.language":BUILT_IN_VARIABLES};const i="[0-9](_?[0-9])*";const a=`\\.(${i})`;const l=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;const c={className:"number",variants:[{begin:`(\\b(${l})((${a})|\\.)?|(${a}))`+`[eE][+-]?(${i})\\b`},{begin:`\\b(${l})\\b((${a})\\b|\\.)?|(${a})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0};const d={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]};const p={begin:"html`",end:"",starts:{end:"`",returnEnd:false,contains:[e.BACKSLASH_ESCAPE,d],subLanguage:"xml"}};const f={begin:"css`",end:"",starts:{end:"`",returnEnd:false,contains:[e.BACKSLASH_ESCAPE,d],subLanguage:"css"}};const u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,d]};const h=e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:true,excludeBegin:true,relevance:0},{className:"variable",begin:n+"(?=\\s*(-)|$)",endsParent:true,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]});const m={className:"comment",variants:[h,e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]};const g=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,f,u,c,e.REGEXP_MODE];d.contains=g.concat({begin:/\{/,end:/\}/,keywords:r,contains:["self"].concat(g)});const b=[].concat(m,d.contains);const y=b.concat([{begin:/\(/,end:/\)/,keywords:r,contains:["self"].concat(b)}]);const v={className:"params",begin:/\(/,end:/\)/,excludeBegin:true,excludeEnd:true,keywords:r,contains:y};const w={variants:[{match:[/class/,/\s+/,n],scope:{1:"keyword",3:"title.class"}},{match:[/extends/,/\s+/,concat(n,"(",concat(/\./,n),")*")],scope:{1:"keyword",3:"title.class.inherited"}}]};const x={relevance:0,match:/\b[A-Z][a-z]+([A-Z][a-z]+)*/,className:"title.class",keywords:{_:[...TYPES,...ERROR_TYPES]}};const _={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/};const k={variants:[{match:[/function/,/\s+/,n,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[v],illegal:/%/};const j={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function N(e){return concat("(?!",e.join("|"),")")}const S={match:concat(/\b/,N([...BUILT_IN_GLOBALS,"super"]),n,lookahead(/\(/)),className:"title.function",relevance:0};const E={begin:concat(/\./,lookahead(concat(n,/(?![0-9A-Za-z$_(])/))),end:n,excludeBegin:true,keywords:"prototype",className:"property",relevance:0};const A={match:[/get|set/,/\s+/,n,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},v]};const C="(\\("+"[^()]*(\\("+"[^()]*(\\("+"[^()]*"+"\\)[^()]*)*"+"\\)[^()]*)*"+"\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>";const R={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,lookahead(C)],className:{1:"keyword",3:"title.function"},contains:[v]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:r,exports:{PARAMS_CONTAINS:y},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),_,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,f,u,m,c,x,{className:"attr",begin:n+lookahead(":"),relevance:0},R,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{className:"function",begin:C,returnBegin:true,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:true},{begin:/\(/,end:/\)/,excludeBegin:true,excludeEnd:true,keywords:r,contains:y}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:o.begin,end:o.end},{begin:s.begin,"on:begin":s.isTrulyOpeningTag,end:s.end}],subLanguage:"xml",contains:[{begin:s.begin,end:s.end,skip:true,contains:["self"]}]}]},k,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\("+"[^()]*(\\("+"[^()]*(\\("+"[^()]*"+"\\)[^()]*)*"+"\\)[^()]*)*"+"\\)\\s*\\{",returnBegin:true,label:"func.def",contains:[v,e.inherit(e.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},E,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[v]},S,j,w,A,{match:/\$[(.]/}]}}function json(e){const t={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01};const n={match:/[{}[\],:]/,className:"punctuation",relevance:0};const o={beginKeywords:["true","false","null"].join(" ")};return{name:"JSON",contains:[t,n,e.QUOTE_STRING_MODE,o,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}core.registerLanguage("javascript",javascript);core.registerLanguage("json",json);async function openSandbox(e,t){const n=newSandboxDiv(t.sandboxDiv);n.header_row;n.header.append("span").text(e.name);n.body.style("overflow","hidden").style("background-color","white");if(e.type=="nestedCard")return openNestedCardSandbox(e,n,t);const o=e.sandboxJson?await dofetch3(`${t.app.cardsPath}/${e.sandboxJson}.json`):await dofetch3(`${t.app.cardsPath}/${e.sandboxHtml}.txt`);if(o.error){sayerror$1(n.body.insert("div","div"),o.error);return}if(e.type=="card")return openCardSandbox(e,o,n,t);if(e.type=="dsButton")return openDatasetButtonSandbox(t,o,n)}async function openNestedCardSandbox(e,t,n){t.body.style("justify-content","center").style("background-color","#f2ebdc");const o=t.body.append("ul").style("list-style","none").style("display","grid").style("grid-template-columns","40vw 40vw").style("grid-template-rows","repeat(1, auto)").style("gap","5px");const s=e.children.filter((e=>!e.hidden));t.header.trail=new BreadcrumbTrail({holder:t.header,crumbs:s});s.forEach((e=>{const r=o.append("li");r.attr("class","sjpp-app-drawer-card").style("padding","10px").style("margin","5px").html(`<p style="margin-left: 12px; font-size:14.5px;font-weight:500; display: block;">${e.name}</p>\n\t\t\t<p style="display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;">${e.description}</p>`).on("click",(async r=>{r.stopPropagation();o.selectAll("*").remove();const i=e.sandboxJson?await dofetch3(`${n.app.cardsPath}/${e.sandboxJson}.json`):await dofetch3(`${n.app.cardsPath}/${e.sandboxHtml}.txt`);if(i.error){sayerror$1(t.body.insert("div","div"),i.error);return}if(e.type=="card"){t.header.trail.main();const o=s.findIndex((t=>t==e));t.header.trail.update(o);openCardSandbox(e,i,t,n)}if(e.type=="dsButton")return openDatasetButtonSandbox(n.app.opts,i,t)}));return JSON.stringify(r)}))}async function openCardSandbox(e,t,n,o){if(e.sandboxHtml){const e=await t.text();return n.body.append("div").style("padding","0vw 0vw 2vw 0vw").append("div").style("background-color","white").style("margin","0vw 10vw").style("padding","10px").append("div").style("margin","0vw 5vw").html(e)}n.body.style("background-color","white");const s={intro:t.intro,ppcalls:t.ppcalls.filter((e=>!e.hidden)),buttons:t.buttons,arrowButtons:t.arrowButtons,ribbonMessage:t.ribbonMessage,citation:t.citation_id};addHtmlText(s.intro,n.body);if(e.ribbon)addHtmlText(s.ribbonMessage,n.body,e.ribbon);const r=n.body.append("div");const i=n.body.append("div");addButtons(s.buttons,r);addArrowBtns(s,"main",r,i,o);if(e.disableTopTabs)renderContent(s.ppcalls[0],n.body,e,o);else{const t=n.body.append("div").style("display","flex").style("align-content","end").style("justify-content","center").style("border","none").style("border-bottom","1px solid lightgray").style("width","100%").style("font-size","20px");const r=n.body.append("div");makeParentTabsMenu(s.ppcalls,e,t,r,n,o)}}function renderContent(e,t,n,o){addHtmlText(e.message,t);const s=t.append("div").style("margin-bottom","20px");const r=t.append("div");addButtons(e.buttons,s);makeDataDownload(e.download,s,n.section);showURLLaunch(e.urlparam,s,n.section);addArrowBtns(e,"call",s,r,o);if(!n.disableTopTabs){t.append("hr").style("border","0").style("border-top","1px dashed #e3e3e6").style("width","100%")}const i={holder:t.append("div").style("margin","20px").node(),host:window.location.origin};const a=JSON.parse(JSON.stringify(e.runargs));runproteinpaint(Object.assign(i,a))}function makeTopTabs(e,t,n,o){const s=[];const r=e.findIndex((e=>e.isUi==true));const i=e.findIndex((e=>e.isUi==undefined));const a=r!=-1?true:false;if(a==true){s.push({label:"Add Your Data",active:false,callback:async(t,n)=>{try{const t={holder:n.contentHolder.append("div").style("margin","20px").node(),sandbox_header:n.contentHolder,host:window.location.origin};const o=JSON.parse(JSON.stringify(e[r].runargs));runproteinpaint(Object.assign(t,o));delete n.callback}catch(e){if(e.stack)console.log(e.stack);else throw e}}})}if(e.length==1&&a!=true||e.length==2&&a==true){s.push({label:"Example",active:false,callback:async(n,s)=>{try{renderContent(e[i],s.contentHolder,t,o);delete s.callback}catch(e){if(e.stack)console.log(e.stack);else throw e}}})}if(e.length>1&&a==false||e.length>2&&a==true){s.push({label:"Examples",active:false,callback:async(s,r)=>{try{const s=e.filter((e=>e.isUi!=true));makeLeftsideTabMenu(t,r.contentHolder,s,n,o);delete r.callback}catch(e){if(e.stack)console.log(e.stack);else throw e}}})}return s}function makeParentTabsMenu(e,t,n,o,s,r){const i=makeTopTabs(e,t,s,r);new Tabs({holder:n,contentHolder:o,tabs:i}).main()}async function makeLeftsideTabMenu(e,t,n,o,s){const r=n.map(((t,n)=>i(t,n,e.section)));o.header.trail=await new BreadcrumbTrail({holder:o.header,crumbs:r});function i(e,t,n){return{active:t===0,label:e.label,callback:async(t,i)=>{const a=tab_wait(i.contentHolder);try{if(!i.rendered){appear$1(i.contentHolder);renderContent(e,i.contentHolder,n,s);a.remove()}i.rendered=true;const t=r.findIndex((e=>e==i));o.header.trail.update(t)}catch(e){a.text("Error: "+(e.message||e))}}}}o.header.trail.main();const a=t.append("div").style("display","grid").style("grid-template-columns","minmax(min-content, 10vw) minmax(60vw, 1fr)").classed("sjpp-vertical-tab-menu",true).style("word-break","break-word");const l=a.append("div").classed("sjpp-tabs-div",true).style("border-right","1px solid lightgray");const c=a.append("div").classed("sjpp-content-div",true);new Tabs({holder:l,contentHolder:c,tabs:r,linePosition:"right",tabsPosition:"vertical",gap:"10px"}).main()}function addHtmlText(e,t,n){if(n&&n.expireDate){const s=new Date;const r=new Date(n.expireDate);if(r>s&&e!=undefined&&e){function o(){const e=n.text.toLowerCase();return e[0].toUpperCase()+e.slice(1)}t.append("div").style("margin","20px").html(`<p style="display:inline-block;font-weight:bold">${o()}: &nbsp</p>${e}`)}}else if(e!=undefined&&e){t.append("div").style("margin","20px").html(e)}}function addButtons(e,t){if(e){e.forEach((e=>{const n=makeButton({div:t,text:e.name});n.on("click",(t=>{t.stopPropagation();if(e.download)window.open(`${e.download}`,"_self","download");else window.open(`${e.link}`,`${e.name}`)}))}))}}function makeArrowButtons(e,t){if(e){e.forEach((e=>{const n=`<div style="margin:10px;" class="sjpp-arrow-content">\n\t\t\t\t${e.message?`<div style="margin: 1vw;">${e.message}</div>`:""}\n\t\t\t\t${e.links?e.links.map((e=>{if(!e)return"";if(e.download){return`<a style="cursor:pointer; margin-left:20px;" onclick="event.stopPropagation();" href="${e.download}", target="_self" download>${e.name}</a>`}if(e.link){return`<a style="cursor:pointer; margin-left:20px;" onclick="event.stopPropagation();" href="${e.link}", target="_blank">${e.name}</a>`}})).join(""):""}</div>`;t.push({name:e.name,callback:async e=>{try{e.append("div").html(n)}catch(e){alert("Error: "+e)}}})}))}}async function addArrowBtns(e,t,n,o,s){let r=[];if(t=="call")showCode(e,r);if(e.datapreview)showViewData(r,e.datapreview);if(t=="main"&&e.citation){const t=await dofetch3(`/${s.app.cardsPath}/citations.json`);if(t.error){console.log(`Error: ${t.error}`);return}for(const n of t.publications){if(e.citation==n.id)showCitation(r,n)}}makeArrowButtons(e.arrowButtons,r);const i=r.findIndex((e=>e.active))==-1?false:true;for(let e=0;e<r.length;e++){const t=r[e];t.btn=makeButton({div:n,text:t.name+" ▼"});t.c=o.append("div").style("margin","20px 0px 10px 20px").style("display",i&&e==0||t.active?"block":"none");if(i&&e==0&&t.callback||t.active){t.callback(t.c);delete t.callback}t.btn.on("click",(()=>{if(t.c.style("display")!="none"){t.btn.text(t.name+" ▼").style("color","black").style("background-color","#cfe2f3");t.c.style("display","none")}else{t.btn.text(t.name+" ▲").style("color","whitesmoke").style("background-color","#487ba8");appear$1(t.c);for(let t=0;t<r.length;t++){if(e!=t){r[t].btn.text(r[t].name+" ▼").style("color","black").style("background-color","#cfe2f3");r[t].c.style("display","none")}}}if(t.callback){t.callback(t.c);delete t.callback}}))}}function showURLLaunch(e,t,n){if(e){const o=makeButton({div:t,text:n=="apps"?"Run app from URL":"Run track from URL"});o.on("click",(t=>{const n=getHostURL();t.stopPropagation();window.open(`${n}${e}`,"_blank")}))}}function makeDataDownload(e,t,n){if(e){const o=makeButton({div:t,text:n=="apps"?"Download App File(s)":"Download Track File(s)"});o.on("click",(t=>{t.stopPropagation();window.open(`${e}`,"_self","download")}))}}async function showCode(e,t){if(e.isUi==true)return;const n=core.highlight(`runproteinpaint({\n host: "${window.location.origin}",\n holder: document.getElementById('a'),\n `+JSON.stringify(e.runargs,"",4).replaceAll(/"(.+)"\s*:/g,"$1:").replaceAll(/\\t/g,"\t").replaceAll(/\\n/g,"\r\t").slice(1,-1).trim()+`\r})`,{language:"javascript"}).value;const o=`<pre style="border: 1px solid #d7d7d9; align-items: center; justify-content: center; margin: 0px 10px 5px 30px; overflow:auto; max-height:400px; ${e.jsonpath?`min-height:400px;`:`min-height: auto;`}">\n\t<code style="font-size:14px; display:block;">${n}</code></pre>`;t.push({name:"Code",callback:async t=>{try{if(e.jsonpath){const n=await showJsonCode(e);const s="<p style='margin:20px 5px 20px 25px;'>ProteinPaint JS code</p>";const r=t.append("div").style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(100px, 1fr))").style("gap","5px");r.append("div").style("display","block").html(s+o);r.append("div").style("display","block").html(n)}else{t.append("div").html(o)}}catch(e){alert("Error: "+e)}}})}async function showJsonCode(e){const t=await dofetch("textfile",{file:e.jsonpath});const n=JSON.parse(t.text);const o=e.jsonpath.split("/");const s=o[o.length-1];let r=JSON.stringify(n,"",4).split("\n");let i;if(r.length>120){r=r.slice(0,100);i=true}const a=core.highlight(r.join("\n"),{language:"json"}).value;const l=`<div>\n\t\t\t<p style="margin: 20px 5px 20px 25px; display: inline-block;">JSON code </p>\n\t\t\t<p style="display: inline-block; color: #696969; font-style:oblique;"> (contents of ${s})</p>\n\t\t</div> \n\t\t<pre style="border: 1px solid #d7d7d9; align-items: center; justify-content: center; margin: 0px 10px 5px 10px; max-height:400px; min-height:400px; overflow:auto;">\n\t\t\t<code class="sjpp-json-code" style="font-size:14px; display:block;">${i==true?`${a} ...<br><p style='margin:20px 25px; justify-content:center;'>Showing first 100 lines. To see the entire JSON, download ${s} from the button above.</p>`:`${a}`}\n\t\t\t</code>\n\t\t</pre>`;return l}function showCitation(e,t){e.push({name:"Citation",callback:async e=>{try{e.append("div").style("margin-left","5w").html(`<p style="display: inline-block;">${t.title}. <em>${t.journal}</em>, ${t.year}. </p>\n\t\t\t\t\t\t${t.pmid?`<p style="display: inline-block;">PMID: <a href="${t.pmidURL}" target="_blank">${t.pmid}</a></p>`:`<p>doi: <a href="${t.doi}" target="_blank style="display: inline-block;">${t.doi}</a></p>`}`)}catch(e){alert("Error: "+e)}}})}function makeDataPreviewDiv(e,t,n,o,s){n.append("div").html(`\n\t\t${s?`<p style="display:block;">${s}<p>`:""}\n\t\t<p style="display: inline-block;">Data preview <span style="color: #696969; font-style:oblique;"> \n\t\t${t>10?`(first ${e.length} rows of ${o})</span></p>`:`(content of ${o})</span></p>`} \n\t`);const r=n.append("div").style("display","grid").style("grid-template-columns","1fr").style("max-width","80%").style("margin-left","10px").style("border","1px solid rgb(227, 227, 230)").style("white-space","pre").style("overflow-x","scroll").style("opacity","0.65").style("padding","1vw");e.forEach((e=>{r.append("code").html(e)}))}async function showViewData(e,t,n){e.push({name:"View Data",callback:async e=>{try{for(const n of t){const t=await dofetch3(`/cardsjson?datafile=${n.file}&tabixCoord=${n.tabixQueryCoord}`);if(t.error){console.log(`Error: ${t.error}`);return}const o=t.file;const s=o.length;const r=o.slice(0,10);const i=n.file.split("/");const a=i[i.length-1];makeDataPreviewDiv(r,s,e,a,n.message)}}catch(e){alert("Error: "+e)}}})}async function openDatasetButtonSandbox(e,t,n){const o=e?.fromApp?e.genomes[t.button.availableGenomes[0]]:e.app.opts.genomes[t.button.availableGenomes[0]];const s=e?.fromApp?e.genomes:e.app.opts.genomes;const r={availableGenomes:t.button.availableGenomes,genome:o,intro:t.button.intro,name:t.button.name,runargs:t.button.runargs,searchBar:t.button.searchBar,dsURLparam:t.button.dsURLparam};const i=n.body.append("div").style("padding","1em").style("border-bottom","1px solid #d0e3ff");if(r.intro){i.append("div").style("line-height","1.5em").style("padding","0.5em 0.5em 1em 0.5em").html(r.intro)}if(r.searchBar=="none"){const e={holder:n.body.append("div").style("margin","20px").style("overflow-x","auto").node(),host:window.location.origin};const t=JSON.parse(JSON.stringify(r.runargs));runproteinpaint(Object.assign(e,t));return}d(i,s);const a=i.append("div").style("display","inline-block").style("padding","0.5em");const l=n.body.append("div").style("max-width","90vw");const c=addGeneSearchbox({genome:r.genome,tip:new Menu({padding:""}),row:a,geneOnly:r.searchBar=="gene"?true:false,focusOff:true,callback:async e=>{const t=l.insert("div",":first-child").style("max-width","90vw").style("margin","1vw");t.append("div").style("display","inline-block").style("cursor","default").style("margin","0px").style("font-size","1.5em").html("&times;").on("click",(()=>{t.selectAll("*").remove()}));makeURLbutton(t,c,r);const n={holder:t.append("div").style("margin","20px").node(),host:window.location.origin,genome:r.genome.name};r.runargs.block==true?(n.position=`${c.chr}:${c.start}-${c.stop}`)&&(n.nativetracks="Refgene"):n.gene=c.geneSymbol;const o=JSON.parse(JSON.stringify(r.runargs));runproteinpaint(Object.assign(n,o))}});function d(e,t){e.append("div").style("display","inline-block").style("padding","10px 10px 0px 20px");const n=[];if(r.availableGenomes.length==1){n.push({label:r.availableGenomes[0],disabled:()=>true,isVisible:()=>true})}else{r.availableGenomes.forEach((e=>{n.push({label:e,callback:(n,o)=>{r.genome=t[e]}})}))}new Tabs({holder:e,tabs:n,noContent:true}).main()}}function makeURLbutton(e,t,n){const o=makeButton({div:e,text:"Run Result from URL"});const s=n.runargs.block==true?`position=${t.chr}:${t.start}-${t.stop}`:`gene=${t.geneSymbol}`;o.on("click",(e=>{e.stopPropagation();const t=getHostURL();window.open(`${t}/?genome=${n.genome.name}&${s}&${n.dsURLparam}`,"_blank")}))}function getHostURL(){const e=sessionStorage.getItem("hostURL");if(e.startsWith("http://localhost")||e.startsWith("https://pp")){return e}else return"https://proteinpaint.stjude.org"}var adSandbox=Object.freeze({__proto__:null,openSandbox:openSandbox});class AppDrawerCard{constructor(e){this.type="card";this.opts=this.validateOpts(e);this.holder=e.holder;this.dom=e.dom;this.sandboxDiv=e.sandboxDiv;setRenderers$3(this)}validateOpts(e){if(!e.element.name)throw`Card .name is missing`;if(e.element.type=="card"){if(!e.element.sandboxJson&&!e.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for card=${e.element.name}`}if(e.element.type=="nestedCard"){if(!e.element.children||e.element.children.length==0)throw`Missing .children for nested card = ${e.element.name}`}if(e.element.ribbon){if(!e.element.ribbon.text)throw`Missing ribbon .text for ${e.element.type} = ${e.element.name}`;if((e.element.ribbon.text.toUpperCase()=="NEW"||e.element.ribbon.text.toUpperCase()=="UPDATED")&&!e.element.ribbon.expireDate)throw`${e.element.type} = ${e.element.name} ribbon is ${e.element.ribbon.text.toUpperCase()} but .expireDate is missing. Please provide`;if(e.element.ribbon.expireDate){if(e.element.ribbon.expireDate>=0){throw`Flag for ${e.element.type} = ${e.element.name} is not a valid date`}}}return e}main(){}}const cardInit=getCompInit(AppDrawerCard);function setRenderers$3(e){const t=e.holder.append("li");if(e.opts.element.type=="card"){t.classed("sjpp-track",true).html(`<div class="sjpp-track-h"><span style="font-size:14.5px;font-weight:500;">${e.opts.element.name}</span></div>\n\t\t\t\t${e.opts.element.description?`<span class="sjpp-track-blurb" style="cursor:default">${e.opts.element.description}</span></div>`:" "}\n\t\t\t\t<span class="sjpp-track-image"><img src="${e.opts.element.image}" alt="${e.opts.element.description}"></img></span>\n\t\t\t\t</div>`)}else if(e.opts.element.type=="nestedCard"){t.classed("sjpp-app-drawer-card",true).html(`<p style="margin-left: 12px; font-size:14.5px;font-weight:500; display: block;">${e.opts.element.name}</p>\n\t\t\t<p style="display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;">${e.opts.element.description}</p>`)}e.makeRibbon=function(e){const n=t.append("div").classed("sjpp-app-drawer-card-ribbon",true).style("align-items","center").style("justify-content","center");const o=e.text.toUpperCase();const s=o=="BETA"?"#418cb5":o=="NEW"?"#1ba176":o=="UPDATED"?"orange":e.color?e.color:"red";n.append("span").text(o).style("color","white").style("background-color",rgb(s).darker()).style("height","auto").style("width","100%").style("top","15%").style("left","-30%").style("font-size","11.5px").style("text-transform","uppercase").style("text-align","center")};if(e.opts.element.ribbon){const t=new Date;const n=new Date(e.opts.element.ribbon.expireDate);if(n>t||n=="Invalid Date")e.makeRibbon(e.opts.element.ribbon)}t.on("click",(async t=>{t.stopPropagation();await e.app.dispatch({type:"is_apps_btn_active",value:false});slideDrawer(e);await openSandbox(e.opts.element,e.opts)}))}class AppDrawerButton{constructor(e){this.type="button";this.opts=this.validateOpts(e);this.holder=e.holder;this.dom=e.dom;this.sandboxDiv=e.sandboxDiv;setRenderers$2(this)}validateOpts(e){if(!e.element.name)throw`Button name is missing`;if(!e.element.sandboxJson&&!e.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for button=${e.element.name}`;return e}main(){}}const buttonInit=getInitFxn(AppDrawerButton);function setRenderers$2(e){const t=makeButton({div:e.holder,text:e.opts.element.name,margin:"20px 20px 0px"});t.attr("class","sjpp-appdrawer-dataset-btn").on("click",(async t=>{t.stopPropagation();await e.app.dispatch({type:"is_apps_btn_active",value:false});slideDrawer(e);await openSandbox(e.opts.element,e.opts)}))}class AppDrawerLayoutComp{constructor(e){this.type="layout";this.dom={holder:e.dom.drawerDiv,wrapper:e.dom.wrapper,sandboxDiv:e.dom.sandboxDiv};this.state=e.state;this.hasStatePreMain=true}async validateIndexJson(){const e=await this.getIndexJson();if(!e.elements)throw`Missing elements array`;if(!e.elements.length)throw`No element objects provided`;if(e.columnsLayout){if(e.columnsLayout.length==0)throw`Missing column objects`;const t=e.columnsLayout.map((e=>e.gridarea));if(t.length!=new Set(t).size)throw`Duplicate values for .gridarea found`;const n=[];for(const t of e.columnsLayout){if(!t.gridarea)throw`Missing column .gridarea for column = ${t.name}`;if(!t.sections||t.sections.length==0)throw`Missing section objects for column = ${t.name}`;for(const e of t.sections){if(!e.id)throw`Missing section .id in ${e.name?`section = ${e.name}`:`column = ${t.name} array`}`;n.push(e.id)}if(t.sections.length!=new Set(t.sections).size){throw`Non-unique levels in line ${lineNum}: ${JSON.stringify(levelNames)}`}}if(n.length!=new Set(n).size)throw`Duplicate values for section.id found`;for(const t of e.elements){if(!t.section)throw`.section is missing for ${t.type} = ${t.name}`;if(!n.some((e=>e==t.section)))throw`section = ${t.section} for ${t.type} = ${t.name} is not a column section`}}return e}async getIndexJson(){const e=await dofetch3(this.app.cardsPath+"/index.json");if(e.error){sayerror$1(this.dom.holder.append("div"),e.error);return}return e}async init(){this.index=await this.validateIndexJson();this.elementsRendered=false;setRenderers$1(this);this.elements=this.index.elements.filter((e=>!e.hidden));this.layout=this.index.columnsLayout?this.index.columnsLayout:null;this.components={elements:[]}}async main(){if(this.elementsRendered==true)return;this.elementsRendered=true;for(const e of this.elements){const t=d3select(this.layout?`#${e.section} > .sjpp-element-list`:`.sjpp-element-list`);if(e.type=="card"||e.type=="nestedCard"){this.components.elements.push(await cardInit({app:this.app,holder:t.style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(320px, 1fr))").style("gap","10px").style("list-style","none").style("margin","15px 0px"),element:e,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}else if(e.type=="dsButton"){this.components.elements.push(await buttonInit({app:this.app,holder:t,element:e,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}}}}const layoutInit=getCompInit(AppDrawerLayoutComp);function setRenderers$1(e){if(!e.index.columnsLayout)noDefinedLayout(e);if(e.index.columnsLayout)columnsLayout(e)}function noDefinedLayout(e){const t=e.dom.wrapper.append("div").style("display","flex").style("padding","10px").classed("sjpp-element-list",true);return t}function columnsLayout(e){const t=e.dom.wrapper.append("div").style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(425px, 1fr))").style("gap","10px").style("padding","10px").style("text-align","left");const n=[];for(const t of e.index.columnsLayout)n.push(t.gridarea);t.style("grid-template-areas",`"${n.toString().replace(","," ")}"`);for(const n of e.index.columnsLayout){const e=t.append("div").style("grid-area",n.gridarea).classed(".sjpp-track-cols",true);for(const t of n.sections)o(t,e)}function o(e,t){const n=t.append("div").attr("id",e.id);if(e.name)n.append("h5").classed("sjpp-appdrawer-cols",true).style("color",rgb(defaultcolor).darker()).text(e.name);n.append("div").classed("sjpp-element-list",true).style("padding","10px");return n}}class MainHeadboxBtn{constructor(e){this.type="mainBtn";this.opts=this.validateOpts(e);this.dom=e.dom;this.state=e.state;this.hasStatePreMain=true;setRenderers(this)}validateOpts(e){return e.app.opts}getState(e){return{appBtnActive:e.appBtnActive}}async init(){this.btnRendered=false;this.drawerFullHeight="";try{if(window.location.pathname=="/"&&!window.location.search.length)await this.app.dispatch({type:"is_apps_btn_active",value:true});this.components={layout:[]}}catch(e){throw e}}async main(e){if(this.app.getState(e).appBtnActive==true&&this.btnRendered==false){this.dom.drawerDiv.style("background-color","#f5f5f5");this.components.layout.push(await layoutInit({app:this.app,dom:this.dom,state:this.state}));setTimeout((()=>{this.drawerFullHeight=this.dom.drawerDiv.node().getBoundingClientRect().height+5}),this.state.duration+5);slideDrawer(this);this.btnRendered=true}if(this.state.appBtnActive==false&&this.btnRendered==true)slideDrawer(this)}}const mainBtnInit=getCompInit(MainHeadboxBtn);function setRenderers(e){e.dom.btnWrapper.style("background-color",e.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",e.state.appBtnActive?"#fff":"#000").on("click",(async t=>{t.stopPropagation();await e.app.dispatch({type:"is_apps_btn_active"});slideDrawer(e);if(e.state.appBtnActive){setTimeout((()=>{e.drawerFullHeight=e.dom.drawerDiv.node().getBoundingClientRect().height+5}),e.state.duration+5)}}));e.dom.btn.attr("class","sja_menuoption").style("display","inline-block").style("background-color","transparent").style("color",e.state.appBtnActive?"#fff":"#000").style("padding",e.opts.padw_sm).style("margin","0px 5px").style("cursor","pointer").text("Apps");e.dom.drawerHint.style("position","relative").style("display","inline-block").style("height",e.state.arrowSize.closed+"px").style("width",e.state.appBtnActive?e.state.hintWidth.open:e.state.hintWidth.closed).style("background-color","transparent").style("text-align","center").style("cursor","pointer");e.dom.drawerArrow.style("position","absolute").style("font-size",e.state.arrowSize.closed+"px").style("right",e.state.hintPos.closed.rt+"px").style("bottom",e.state.hintPos.closed.btm+"px").style("background-color","transparent").style("color",e.state.arrowColor.closed).style("opacity",e.state.appBtnActive?0:1).style("cursor","pointer").html("&#9660;");e.dom.drawerArrowOpen.style("position","absolute").style("font-size",e.state.arrowSize.open+"px").style("left",e.state.hintPos.open.left+"px").style("bottom",e.state.hintPos.open.btm+"px").style("transform","rotate(180deg)").style("background-color","transparent").style("color",e.state.arrowColor.open).style("opacity",e.state.appBtnActive?1:0).style("cursor","pointer").style("pointer-events",e.state.appBtnActive?"auto":"none").html("&#9660;");e.drawerFullHeight=e.dom.drawerRow.node().getBoundingClientRect().height+5}async function slideDrawer(e){e.dom.btnWrapper.transition().duration(e.opts.state.duration).style("background-color",e.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",e.state.appBtnActive?"#fff":"#000");e.dom.btn.transition().duration(e.opts.state.duration).style("color",e.state.appBtnActive?"#fff":"#000");e.dom.drawerDiv.style("display","inline-block").transition().duration(e.opts.state.duration).style("top",e.state.appBtnActive?"0px":"-"+e.drawerFullHeight+"px");e.dom.drawerRow.transition().duration(e.opts.state.duration).style("height",e.state.appBtnActive?e.drawerFullHeight+"px":"0px");e.dom.drawerHint.transition().duration(e.opts.state.duration).style("width",e.state.appBtnActive?e.opts.state.hintWidth.open:e.opts.state.hintWidth.closed);e.dom.drawerArrow.transition().duration(e.opts.state.duration).style("opacity",e.state.appBtnActive?0:1);e.dom.drawerArrowOpen.style("pointer-events",e.state.appBtnActive?"auto":"none").transition().duration(e.opts.state.duration).style("opacity",e.state.appBtnActive?1:0)}class AppDrawerStore{constructor(e){this.type="store";this.defaultState={duration:500,hintPos:{open:{btm:-42,left:13},closed:{btm:3,rt:5}},hintWidth:{open:"0px",closed:"18px"},arrowSize:{open:42,closed:20},arrowColor:{open:"rgb(242,242,242)",closed:"rgb(85,85,85)"},appBtnActive:false}}async init(){}}const appDrawerStoreInit=getStoreInit(AppDrawerStore);AppDrawerStore.prototype.actions={is_apps_btn_active(e){this.state.appBtnActive="value"in e?e.value:!this.state.appBtnActive}};class AppDrawerApp{constructor(e){this.type="app";const t=e.drawerRow.append("div").style("position","relative").style("margin","0 20px").style("padding",`0 ${e.padw_sm}`).style("display","inline-block").style("overflow","hidden").style("border-radius","0px 0px 5px 5px").style("width","93vw").classed("sjpp-drawer-div",true);const n=e.headbox.append("div").style("position","relative").style("display","inline-block").style("margin-left","5px").style("margin-right","5px").style("border-radius","5px").classed("sjpp-apps-btn-wrapper",true);this.dom={drawerRow:e.drawerRow,drawerDiv:t,sandboxDiv:e.sandboxDiv,btnWrapper:n,btn:n.append("div"),drawerHint:n.append("div"),drawerArrow:n.append("div"),drawerArrowOpen:n.append("div"),wrapper:t.append("div")}}preApiFreeze(e){e.cardsPath=this.opts.cardsPath}async init(){try{this.store=await appDrawerStoreInit({app:this.api,state:this.opts.state});this.state=await this.store.copyState();this.components={mainBtn:await mainBtnInit({app:this.api,dom:this.dom,state:this.state,indexJson:this.indexJson})};await this.api.dispatch()}catch(e){throw e}}main(){}}const appDrawerInit=getAppInit(AppDrawerApp);class InputSearch{constructor(e){this.holder=e.holder;this.input=e.holder.append("input");this.tip=e.tip||new Menu({border:"",padding:"0px"});this.style=e.style||{};this.size=e.size||20;this.placeholder=e.placeholder||"";this.title=e.title||"";this.searchItems=e.searchItems;this.app=e.app}initUI(){this.holder.style("padding","padding"in this.style?this.style.padding:"5px").style("display","inline-block");this.input.attr("class","sjpp-input-search").style("border","border"in this.style?this.style.border:"5px").attr("size",this.size).attr("placeholder",this.placeholder).attr("title",this.title).on("keyup",(e=>__awaiter(this,void 0,void 0,(function*(){if(keyupEnter(e))yield this.enterSearch();debounce_1.debounce(this.addSearchItems(),400)}))))}addSearchItems(){return __awaiter(this,void 0,void 0,(function*(){if(!this.input.property("value").trim()){this.tip.hide();return}try{this.tip.clear().showunder(this.input.node());const e=this.tip.d.append("div");const t=yield this.searchItems();yield e.append("div").style("display","flex").selectAll().data(t.filter((e=>e.items.length>=1))).enter().append("div").style("display","block").style("border-left","0.5px solid lightgrey").each(this.showResultsList)}catch(e){if(e.stack)console.log(e.stack);else throwMsgWithFilePathAndFnName(e)}}))}showResultsList(e){return __awaiter(this,void 0,void 0,(function*(){e.wrapper=d3select(this);e.wrapper.style("padding","5px");e.titleDiv=e.wrapper.append("span").style("padding","3px 0px 5px").style("opacity",.65).style("font-size","0.8em").text(e.title);yield e.wrapper.append("div").classed("sjpp-result-wrapper",true).selectAll("div").data(e.items).enter().append("div").classed("sja_menuoption",true).classed("sjpp-search-result",true).style("display","block").style("padding-left","10px").style("background-color",e.color||"").text((e=>e.name||e.label||e)).on("click",((t,n)=>{t.stopPropagation();e.callback(n)}))}))}enterSearch(){return __awaiter(this,void 0,void 0,(function*(){if(!this.input.property("value").trim())return;const e=this.tip.d.select(".sjpp-result-wrapper").node();const t=this.tip.d.select(".sjpp-search-result").node();if(t!=null&&t.__data__)e.__data__.callback(t.__data__);else{const e=yield this.searchItems();const t=e.filter((e=>e.default));t[0].callback(this.input.property("value"))}this.input.property("value","");this.tip.hide()}))}updatePlaceholder(e){this.input.attr("placeholder",e)}}async function findAppDrawerElements(e,t,n,o){const s=await dofetch3(e.cardsPath+"/index.json");if(s.error)throwMsgWithFilePathAndFnName(`Problem retrieving cards/index.json`);const r=t.toLowerCase().trim();const i=[...s.elements];let a;if(r.length>2){await getExampleNames(i,e);a=getFilteredElements(i,r)}else{a=getFilteredElements(i,r)}const l={app:e.drawer.opts,sandboxDiv:e.drawer.opts.sandboxDiv,genomes:e.genomes,fromApp:true};n.push({title:"Tracks and Apps",items:a.filter((e=>e.type=="card")),color:"#e1edf7",callback:t=>{e.drawer.dispatch({type:"is_apps_btn_active",value:false});o.hide();openSandbox(t,l)}},{title:"Datasets",items:a.filter((e=>e.type=="dsButton")),color:"#e5f5e4",callback:t=>{e.drawer.dispatch({type:"is_apps_btn_active",value:false});o.hide();openSandbox(t,l)}});return n}async function getExampleNames(e,t){const n=e.map((async e=>{if(e.hidden||e.type!="card"||!e.sandboxJson)return e;const n=await dofetch3(t.cardsPath+`/${e.sandboxJson}.json`);if(n?.ppcalls.length>0){for(const t of n.ppcalls){if(t.isUI)return;if(t?.label)e.searchterms.push(t.label)}}}));await Promise.all(n)}function getFilteredElements(e,t){return e.filter((e=>{if(e.hidden)return false;let n=(e.searchterms||[]).reduce(((e,n)=>{if(e)return true;return n.toLowerCase().includes(t)}),false);return n||e.name.toLowerCase().includes(t)})).sort(((e,t)=>e.name.localeCompare(t.name)))}async function findgenelst(e,t,n){if(e.length==0)return;try{const o=await dofetch3("/genelookup",{body:{input:e,genome:t,jwt:n}});if(o.error)throw o.error;if(!o.hits)throw".hits[] missing";return o.hits}catch(e){}}async function findgene2paint(e,t,n,o){const s=t.genomes[n];if(!s){console.error("unknown genome "+n);return}const r=newSandboxDiv(t.drawer.opts.sandboxDiv);r.header.html('<div style="display:inline-block;">'+e+'</div><div class="sjpp-output-sandbox-title">'+n+"</div>");const i=urlmap();const a=await get_tklst(i,s);const l=string2pos(e,s);if(l){const e={hostURL:t.hostURL,jwt:o,holder:r.body,genome:s,nobox:true,chr:l.chr,start:l.start,stop:l.stop,dogtag:n,tklst:a,debugmode:t.debugmode};first_genetrack_tolist(s,e.tklst);import("./block-ec15b4b6.js").then((function(e){return e.c})).then((t=>new t.Block(e))).catch((e=>{t.error0(e)}));return}const c={hostURL:t.hostURL,jwt:o,query:e,genome:s,holder:r.body,variantPageCall_snv:t.variantPageCall_snv,samplecart:t.samplecart,tklst:a,debugmode:t.debugmode};const d=sessionStorage.getItem("urlp_mds");if(d){const e=d.split(",");if(e.length==2){c.datasetqueries=[{dataset:e[0],querykey:e[1]}]}}await blockinit(c)}const headtip=new Menu({padding:"0px",offsetX:0,offsetY:0});headtip.d.style("z-index",5555);function runproteinpaint$1(e){if(!window.structuredClone)window.structuredClone=e=>JSON.parse(JSON.stringify(e));const t={error0(e){sayerror$1(t.holder0,e)},debugmode:false,callbacks:e.callbacks||{sjcharts:{}},instanceTracker:e.instanceTracker||{sjcharts:{}}};setHostUrl(e,t);if(!t.instanceTracker.sjcharts){t.instanceTracker.sjcharts={}}if(!t.callbacks.sjcharts){t.callbacks.sjcharts={}}if(e.clear){d3selectAll(".sja_pane").remove();return}t.holder=d3select(e.holder?e.holder:document.body).append("div").attr("class","sja_root_holder").attr("data-ppclientversion",`2.42.0`).style("font","1em Arial, sans-serif").style("color","black");t.sandbox_header=e.sandbox_header||undefined;if(e.jwt){sessionStorage.setItem("jwt",e.jwt)}sessionStorage.setItem("suppressErrors",JSON.stringify(e.suppressErrors));if(e.variantPageCall_snv){t.variantPageCall_snv=e.variantPageCall_snv}if(e.samplecart){t.samplecart=e.samplecart}if(e.base_zindex){newpane({setzindex:e.base_zindex})}const n=e.serverData||e.termdb&&e.termdb.serverData;const o=dofetch3("genomes",{},{serverData:n});return o.then((async n=>{if(n.error)throw{message:"Cannot get genomes: "+n.error};if(!n.genomes)throw{message:"no genome data!?"};if(n.base_zindex){newpane({setzindex:n.base_zindex})}if(n.features){sessionStorage.setItem("optionalFeatures",JSON.stringify(n.features))}t.genomes=n.genomes;t.cardsPath=n.cardsPath;if(n.debugmode){t.debugmode=true}setAuth({dsAuth:n.dsAuth,holder:t.holder});if(n.commonOverrides||e.commonOverrides){applyOverrides(Object.assign(n.commonOverrides||{},e.commonOverrides||{}))}if(n.targetPortal&&n.targetPortal=="gdc")await import("./style.gdc-58cdad5e.js");for(const e in t.genomes){const n=initgenome(t.genomes[e]);if(n){throw{message:"Error with "+e+" genome: "+n}}}if(!e.noheader&&!window.location.search.includes("noheader")&&!window.location.search.includes("mass-session-id")&&!window.location.search.includes("mass-session-file")&&!window.location.search.includes("mass-session-url")){makeheader(t,n,e.jwt)}t.holder0=t.holder.append("div").style("margin","20px");const o=await parseEmbedThenUrl(e,t);return o||t})).catch((e=>{t.holder.text(e.message||e);if(e.stack)console.log(e.stack)}))}runproteinpaint$1.getStatus=async function e(t=""){return await fetch("/healthcheck").then((e=>e.json())).then((e=>{const n={clientVersion:document.querySelector(".sja_root_holder")?.dataset.ppclientversion,versionInfo:e.versionInfo};if(t=="log")console.info(n);else if(t=="json")return JSON.stringify(n);else return n})).catch(console.error)};const ppsrc=document&&document.currentScript&&document.currentScript.src||"";function setHostUrl(e,t){if(e.host){t.hostURL=e.host}else if(window.location.hostname=="localhost"){const e=urlmap();if(e.has("hosturl"))t.hostURL=e.get("hosturl");else if(window.testHost){t.hostURL=window.testHost}else{const n=e.get("hostname");const o=e.get("hostport");const s=window.location.protocol+"//";if(n&&o)t.hostURL=s+n+":"+o;else if(n)t.hostURL=s+n;else if(o)t.hostURL=s+window.location.hostname+":"+o}}if(!t.hostURL){if(ppsrc.includes("://")){t.hostURL=ppsrc.split("://")[0]+"://"+ppsrc.split("://")[1].split("/")[0]}else{t.hostURL=""}}sessionStorage.setItem("hostURL",t.hostURL)}async function makeheader(e,t,n){const o=rgb(defaultcolor);const s="13px";const r="5px 10px";const i="7px 10px";document.documentElement.clientWidth;const a=e.holder.append("div").style("white-space","nowrap").style("border-bottom","solid 1px rgba("+o.r+","+o.g+","+o.b+",.3)");const l=a.append("div").style("margin","10px").style("padding","8px").style("padding-bottom","12px").style("display","inline-block").style("border-bottom","");const c=a.append("div").style("display","inline-block").style("padding",i).style("padding-left","25px").style("font-size",".8em").style("color",rgb(defaultcolor).darker());{const e=c.append("div").style("padding-left","15px");e.append("span").text("Code updated: "+(t.codedate||"??")+", server launched: "+(t.launchdate||"??")+".");if(t.hasblat){e.append("a").style("margin-left","10px").text("Running BLAT").on("click",(async e=>{headtip.clear().showunder(e.target);const t=headtip.d.append("div").style("margin","10px");const n=t.append("div").text("Loading...");try{const e=await dofetch2("blat?serverstat=1");if(e.error)throw e.error;if(!e.lst)throw"invalid response";n.remove();for(const n of e.lst){t.append("div").text(n)}}catch(e){n.text(e.message||e);if(e.stack)console.log(e.stack)}}))}}if(t.headermessage){c.append("div").html(t.headermessage)}l.append("div").text("ProteinPaint").style("display","inline-block").style("padding",s).style("color",defaultcolor).style("font-size","1.3em").style("font-weight","bold");const d=new Menu({border:"",padding:"0px"});const p=async()=>{const t=d3select("input").property("value").trim();const o=[{title:"Genes",default:true,items:await findgenelst(t,e.selectgenome.property("value"),n),callback:t=>{e.drawer.dispatch({type:"is_apps_btn_active",value:false});d.hide();findgene2paint(t,e,e.selectgenome.property("value"),n)}}];await findAppDrawerElements(e,t,o,d);o.push({title:"Help",items:m.filter((e=>e.label.toLowerCase().includes(t.toLowerCase()))),color:"#faebd9",callback:e=>{window.open(e.link,e.label)}});return o};const f=new InputSearch({holder:l,tip:d,style:{padding:i,border:`'solid 1px ${defaultcolor}`},size:32,placeholder:"Gene, position, SNP, app, or dataset",title:"Search by gene, SNP, position, app, or dataset",searchItems:p});f.initUI();const u=l.append("div").attr("class","sjpp-genome-select-div").style("padding",i);const h=()=>{const t=e.genomes[e.selectgenome.property("value")];const n=["Gene","position","app"];if(t.hasSNP)n.splice(2,0,"SNP");if(Object.keys(t.datasets).length)n.push("dataset");const o=n.join(", ").replace(/,(?=[^,]*$)/,", or");return o};e.selectgenome=u.append("select").attr("title","Select a genome").attr("class","sjpp-genome-select").style("padding",r).style("border","solid 1px "+defaultcolor).on("change",(()=>{update_genome_browser_btn(e);f.updatePlaceholder(h())}));for(const t in e.genomes){e.selectgenome.append("option").attr("n",t).text(e.genomes[t].species+" "+t).property("value",t)}e.genome_browser_btn=make_genome_browser_btn(e,l,n);e.drawer=await appDrawerInit({holder:e.holder,genomes:e.genomes,drawerRow:e.holder.append("div").style("position","relative").style("overflow-x","visible").style("overflow-y","hidden").classed("sjpp-drawer-row",true),sandboxDiv:e.holder.append("div").style("margin-top","15px").classed("sjpp-drawer-sandbox",true),genome_browser_btn:e.genome_browser_btn,debugmode:e.debugmode,headbox:l,padw_sm:i,cardsPath:e.cardsPath});const m=[{label:"Embed in your website",link:"https://docs.google.com/document/d/1KNx4pVCKd4wgoHI4pjknBRTLrzYp6AL_D-j6MjcQSvQ/edit?usp=sharing"},{label:"Make a Study View",link:"https://drive.google.com/open?id=121SsSYiCb3NCU8jz0bF7UujFSN-1Y20b674dqa30iXE"},{label:"URL parameters",link:"https://docs.google.com/document/d/1e0JVdcf1yQDZst3j77Xeoj_hDN72B6XZ1bo_cAd2rss/edit?usp=sharing"},{label:"All tutorials",link:"https://docs.google.com/document/d/1JWKq3ScW62GISFGuJvAajXchcRenZ3HAvpaxILeGaw0/edit?usp=sharing"},{label:"User community",link:"https://groups.google.com/g/proteinpaint"},{label:"License ProteinPaint",link:"https://www.stjude.org/research/why-st-jude/shared-resources/technology-licensing/technologies/proteinpaint-web-application-for-visualizing-genomic-data-sj-15-0021.html",onlySearch:true},{label:"Our Team",link:"https://proteinpaint.stjude.org/team/",onlySearch:true}];l.append("span").classed("sja_menuoption",true).style("padding",i).text("Help").on("click",(async e=>{const t=e.target.getBoundingClientRect();const n=headtip.clear().show(t.left-0,t.top+t.height+5);await n.d.append("div").style("padding","5px 20px").selectAll("p").data(m.filter((e=>!e.onlySearch))).enter().append("p").html((e=>`<a href=${e.link} target=_blank>${e.label}</a>`))}))}function make_genome_browser_btn(e,t,n){const o="8px";const s=t.append("span");const r=e.selectgenome.node().options[e.selectgenome.property("selectedIndex")].value;const i=s.attr("class","sja_menuoption").attr("id","genome_btn").style("padding",o).datum(r).text(r+" genome browser").on("click",((t,o)=>{const s=e.genomes[o];if(!s){alert("Invalid genome name: "+o);return}const r=newSandboxDiv(e.drawer.opts.sandboxDiv);r.header.text(o+" genome browser");const i={hostURL:e.hostURL,jwt:n,holder:r.body,genome:s,chr:s.defaultcoord.chr,start:s.defaultcoord.start,stop:s.defaultcoord.stop,nobox:true,tklst:[],debugmode:e.debugmode};first_genetrack_tolist(s,i.tklst);import("./block-ec15b4b6.js").then((function(e){return e.c})).then((e=>new e.Block(i)));e.drawer.dispatch({type:"is_apps_btn_active",value:false})}));return i}function update_genome_browser_btn(e){e.genome_browser_btn.text(e.selectgenome.node().value+" genome browser");e.genome_browser_btn.datum(e.selectgenome.node().value)}async function parseEmbedThenUrl(e,t){if(e.genome&&t.selectgenome){for(let n=0;n<t.selectgenome.node().childNodes.length;n++){if(t.selectgenome.node().childNodes[n].value==e.genome){t.selectgenome.property("selectedIndex",n);break}}}if(e.mclassOverride){if(!e.mclassOverride.mclassName)e.mclassOverride.mclassName="Class";for(const t in e.mclassOverride.classes){const n=mclass[t];if(n){Object.assign(n,e.mclassOverride.classes[t])}}}if(e.singlecell){launch_singlecell(e.singlecell,t);return t}if(e.fimo){launch_fimo(e.fimo,t);return t}if(e.mdssurvivalplot){if(e.genome)e.mdssurvivalplot.genome=e.genome;launchmdssurvivalplot(e.mdssurvivalplot,t);return t}if(e.mdssamplescatterplot){if(e.genome)e.mdssamplescatterplot.genome=e.genome;launchmdssamplescatterplot(e.mdssamplescatterplot,t);return t}if(e.samplematrix){e.samplematrix.jwt=e.jwt;launchsamplematrix(e.samplematrix,t);return t}if(e.hic){e.hic.jwt=e.jwt;launchhic(e.hic,t);return t}if(e.block){return launchblock(e,t)}if(e.study){loadstudycohort(t.genomes,e.study,t.holder0,t.hostURL,e.jwt,false,t);return t}if(e.studyview){const n=e.studyview;n.hostURL=e.host;const o=n.genome||e.genome;n.genome=t.genomes[o];n.hostURL=t.hostURL;n.jwt=e.jwt;n.holder=t.holder0;bulkembed(n);return t}if(await may_launchGeneView(e,t)){return t}if(e.fusioneditor){launchfusioneditor(e,t);return t}if(e.genefusion){launch_genefusion(e,t);return t}if(e.mavolcanoplot){launchmavb(e,t);return t}if(e.twodmaf){launch2dmaf(e,t);return t}if(e.junctionbymatrix){launchJunctionbyMatrix(e,t);return}if(e.mdsjsonform){await launchmdsjsonform(e,t);return}if(e.selectGenomeWithTklst){await launchSelectGenomeWithTklst(e,t);return}if(e.disco){return await launchDisco(e,t)}if(e.geneSearch4GDCmds3){return await launchGeneSearch4GDCmds3(e,t)}if(e.launchGdcMatrix){return await launchGdcMatrix(e,t)}if(e.launchGdcHierCluster){return await launchGdcHierCluster(e,t)}if(e.parseurl&&location.search.length){try{await parse({app:t,genomes:t.genomes,hostURL:t.hostURL,variantPageCall_snv:t.variantPageCall_snv,samplecart:t.samplecart,holder:t.holder,selectgenome:t.selectgenome,genome_browser_btn:t.genome_browser_btn,debugmode:t.debugmode})}catch(e){t.error0(e)}}if(e.project){let n=undefined;if(e.project.uionly)n=t.holder0;bulkui(0,0,t.genomes,t.hostURL,n,t.sandbox_header)}if(e.termdb){await launchtermdb(e.termdb,t)}if(e.maftimeline){launchmaftimeline(e,t)}if(e.gdcbamslice){return await launchgdcbamslice(e,t)}if(e.mass){return await launchmass(e,t)}if(e.testInternals&&t.debugmode){await import("./internals-d072001b.js")}if(e.tkui){launch_tkUIs(e,t)}if(e.massSessionId){const n=await dofetch3(`/massSession?id=${e.massSessionId}`);if(n.error)throw n.error;const o={holder:t.holder0,state:n.state,genome:t.genomes[n.state.vocab.genome],massSessionDuration:n.massSessionDuration,getDatasetAccessToken:e.getDatasetAccessToken,addLoginCallback:e.addLoginCallback};const s=await import("./app-db79376c.js");s.appInit(o);return}if(e.massSessionFile||e.massSessionURL){let n;if(e.massSessionFile){const t=e.massSessionFile;const o=await dofetch3(`/textfile`,{method:"POST",body:JSON.stringify({file:t})});if(o.error)throw o.error;n=JSON.parse(o.text)}else{const t=e.massSessionURL;const o=await dofetch3(`/urltextfile`,{method:"POST",body:JSON.stringify({url:t})});if(o.error)throw o.error;n=JSON.parse(o.text)}const o={holder:t.holder0,state:n,genome:t.genomes[n.vocab.genome]};const s=await import("./app-db79376c.js");s.appInit(o);return}if(e.profileHome){const t=await import("./profileHome-1ada0bb1.js");t.init(e);return}}async function may_launchGeneView(e,t){if(e.p){e.gene=e.p;delete e.p}if(e.gene2canonicalisoform){if(!e.genome)throw".genome missing for gene2canonicalisoform";const t=await dofetch2("gene2canonicalisoform?genome="+e.genome+"&gene="+e.gene2canonicalisoform);if(t.error)throw t.error;if(!t.isoform)throw"no canonical isoform for given gene accession";e.gene=t.isoform}if(e.mds3_ssm2canonicalisoform){if(!e.genome)throw".genome missing";if(!e.mds3_ssm2canonicalisoform.ssm_id)throw".ssm_id missing from mds3_ssm2canonicalisoform";if(!e.mds3_ssm2canonicalisoform.dslabel)throw".dslabel missing from mds3_ssm2canonicalisoform";const t=await dofetch2("mds3?"+"genome="+e.genome+"&dslabel="+e.mds3_ssm2canonicalisoform.dslabel+"&ssm2canonicalisoform=1"+"&ssm_id="+e.mds3_ssm2canonicalisoform.ssm_id);if(t.error)throw t.error;if(!t.isoform)throw"no isoform found for given ssm_id";e.gene=t.isoform;if(e.tracks){const t=e.tracks.find((t=>t.dslabel==e.mds3_ssm2canonicalisoform.dslabel));if(t){t.hlssmid=e.mds3_ssm2canonicalisoform.ssm_id}}}if(e.gene){launchgeneview(e,t);return true}return false}async function launchmdssamplescatterplot(e,t){if(!e.genome){t.error0("missing genome for mdssamplescatterplot");return}const n=t.genomes[e.genome];if(!n){t.error0("invalid genome for mdssamplescatterplot");return}e.genome=n;if(e.dataset){e.mds=n.datasets[e.dataset];if(!e.mds){t.error0("invalid dataset for mdssamplescatterplot");return}e.dslabel=e.dataset;delete e.dataset;if(e.mds.mdsIsUninitiated){const t=await dofetch3(`getDataset?genome=${e.genome.name}&dsname=${e.dslabel}`);if(t.error)throw t.error;if(!t.ds)throw"ds missing";Object.assign(e.mds,t.ds);delete e.mds.mdsIsUninitiated}}else if(e.analysisdata);else if(e.analysisdata_file){try{const t=await dofetch("textfile",{file:e.analysisdata_file});if(t.error)throw tmp.error;else if(t.text)e.analysisdata=JSON.parse(t.text)}catch(e){t.error0(e);return}}else{t.error0("neither .dataset or .analysisdata is given");return}import("./mds.samplescatterplot-669b4e1d.js").then((n=>{n.init(e,t.holder0,t.debugmode)}))}function launchmdssurvivalplot(e,t){if(!e.genome){t.error0("missing genome for mdssurvivalplot");return}const n=t.genomes[e.genome];if(!n){t.error0("invalid genome for mdssurvivalplot");return}e.genome=n;if(!e.dataset){t.error0("missing dataset for mdssurvivalplot");return}e.mds=n.datasets[e.dataset];if(!e.mds){t.error0("invalid dataset for mdssurvivalplot");return}delete e.dataset;if(e.plotlist){for(const t of e.plotlist){t.renderplot=1}}import("./mds.survivalplot-055a1274.js").then((n=>{n.init(e,t.holder0,t.debugmode)}))}function launch_fimo(e,t){if(!e.genome){t.error0("missing genome for fimo");return}const n=t.genomes[e.genome];if(!n){t.error0("invalid genome for fimo");return}e.genome=n;e.div=t.holder0;import("./mds.fimo-fa2b1d1a.js").then((t=>{t.init(e)}))}function launchhic(e,t){if(!e.genome){t.error0("missing genome for hic");return}e.genome=t.genomes[e.genome];if(!e.genome){t.error0("invalid genome for hic");return}if(!e.file){t.error0("missing file for hic");return}e.hostURL=t.hostURL;e.holder=t.holder0;import("./hic.straw-1ca9ddd0.js").then((function(e){return e.a})).then((async n=>{await n.init_hicstraw(e,t.debugmode)}))}function launchsamplematrix(e,t){if(!e.genome){t.error0("missing genome for launching samplematrix");return}e.genome=t.genomes[e.genome];if(!e.genome){t.error0("invalid genome for samplematrix");return}e.hostURL=t.hostURL;e.holder=t.holder0;e.debugmode=t.debugmode;import("./samplematrix-8583e240.js").then((t=>{new t.Samplematrix(e)}))}async function launchgeneview(e,t){if(!e.genome){t.error0("Cannot embed: must specify reference genome");return}if(e.tracks){for(const t of e.tracks){if(t.type=="mds3"&&t.dslabel)continue;t.iscustom=true}}if(e.tkjsonfile){if(!e.tracks)e.tracks=[];const t=new Map([["tkjsonfile",e.tkjsonfile]]);const n=await get_tklst(t,genomeobj);for(const t of n){e.tracks.push(t)}}const n={jwt:e.jwt,hostURL:t.hostURL,query:e.gene,genome:t.genomes[e.genome],holder:t.holder0,variantPageCall_snv:t.variantPageCall_snv,samplecart:t.samplecart,debugmode:t.debugmode,datasetqueries:e.datasetqueries,mset:e.mset,tklst:e.tracks,gmmode:e.gmmode,mclassOverride:e.mclassOverride,hide_dsHandles:e.hide_dsHandles,onloadalltk_always:e.onloadalltk_always};if(e.dataset){n.dataset=e.dataset.split(",");n.legacyDsFilter=e.legacyDsFilter;if(e.hidedatasetexpression){n.hidedatasetexpression=true}}if(e.hidegenecontrol){n.hidegenecontrol=true}if(e.hidegenelegend){n.hidegenelegend=true}let o=null;if(e.hlaachange){o=new Map;if(Array.isArray(e.hlaachange)){for(const t of e.hlaachange){if(t.name){o.set(t.name,t)}}}else{for(const t of e.hlaachange.split(",")){o.set(t,false)}}if(o.size){n.hlaachange=o}}if(e.hlvariants){n.hlvariants=e.hlvariants}await blockinit(n)}async function launchblock(e,t){if(!e.genome){t.error0("Cannot embed: must specify reference genome");return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}if(e.study){loadstudycohort(t.genomes,e.study,t.holder0,t.hostURL,e.jwt,true,t)}if(e.studyview);if(e.tracks){for(const n of e.tracks){if(n.type==tkt.mds3&&n.dslabel)continue;if(n.mdsjsonfile||n.mdsjsonurl){try{const t=await init_mdsjson(n.mdsjsonfile,n.mdsjsonurl);e.tracks=e.tracks.filter((e=>e!=n));e.tracks.push(...t)}catch(e){sayerror(t.holder0,e)}}n.iscustom=true}}if(e.tkjsonfile){if(!e.tracks)e.tracks=[];const t=new Map([["tkjsonfile",e.tkjsonfile]]);const o=await get_tklst(t,n);for(const t of o){e.tracks.push(t)}}const o={genome:n,hostURL:t.hostURL,jwt:e.jwt,holder:t.holder0,nativetracks:e.nativetracks,tklst:e.tracks,debugmode:t.debugmode,legendimg:e.legendimg};if(e.width){const n=Number.parseInt(e.width);if(Number.isNaN(n))return t.error0("browser width must be integer");o.width=n}if(e.subpanels){if(!Array.isArray(e.subpanels))return t.error0("subpanels is not array");const n=[];for(const o of e.subpanels){if(!o.chr){t.error0("missing chr in one subpanel");continue}if(!o.start||!o.stop){t.error0("missing start or stop in one subpanel");continue}if(!o.width){o.width=400}if(!o.leftpad){o.leftpad=5}n.push(o)}if(n.length){o.subpanels=n}}if(e.nobox){o.nobox=true}else{o.dogtag=e.dogtag||e.genome}if(e.chr&&Number.isInteger(e.start)){o.chr=e.chr;o.start=e.start;o.stop=Number.isInteger(e.stop)?e.stop:e.start+1}else if(e.position){const t=string2pos(e.position,n);if(t){o.chr=t.chr;o.start=t.start;o.stop=t.stop}}else if(e.positionbygene){try{const t=await findgenemodel_bysymbol(e.genome,e.positionbygene);if(t&&t[0]){const e=t[0];o.chr=e.chr;o.start=e.start;o.stop=e.stop}}catch(e){t.error0(e)}}if(!o.chr){o.chr=n.defaultcoord.chr;o.start=n.defaultcoord.start;o.stop=n.defaultcoord.stop}if(e.datasetqueries){o.datasetqueries=e.datasetqueries}if(e.hlregions){const t=[];for(const o of e.hlregions){const e=string2pos(o,n,true);if(e)t.push(e)}if(t.length)o.hlregions=t}const s=urlmap();if(s){if(s.has("position")){const e=string2pos(s.get("position"),n);if(e){o.chr=e.chr;o.start=e.start;o.stop=e.stop}}if(s.has("hlregion")){const e=[];for(const t of s.get("hlregion").split(",")){const o=string2pos(t,n,true);if(o){e.push(o)}}if(e.length){o.hlregions=e}}if(s.has("bedgraphdotfile")){if(!o.tklst)o.tklst=[];const e=s.get("bedgraphdotfile").split(",");for(let t=0;t<e.length;t+=2){if(e[t]&&e[t+1]){o.tklst.push({type:tkt.bedgraphdot,name:e[t],file:e[t+1]})}}}}return import("./block-ec15b4b6.js").then((function(e){return e.c})).then((e=>{t.block=new e.Block(o);return t}))}function launchfusioneditor(e,t){if(e.fusioneditor.uionly){const[n,o,s,r,i]=renderSandboxFormDiv(t.holder0,t.genomes);import("./svmr-7de419fb.js").then((a=>{a.svmrui([null,n,o,s,r,i],t.genomes,t.hostURL,e.jwt)}));return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}import("./svmr-7de419fb.js").then((o=>{o.svmrparseinput(e.fusioneditor,t.error0,n,t.holder0,t.hostURL,e.jwt)}))}async function launchmdsjsonform(e,t){if(e.mdsjsonform.uionly){const e=await import("./mdsjsonform-8d72a884.js");await e.init_mdsjsonform({holder:t.holder0,genomes:t.genomes})}}async function launchSelectGenomeWithTklst(e,t){const n=await import("./selectGenomeWithTklst-c0822ac4.js");await n.init(e,t.holder0,t.genomes)}async function launchGeneSearch4GDCmds3(e,t){const n=await import("./geneSearch4GDCmds3-b3a65ff2.js");return await n.init(e,t.holder0,t.genomes)}async function launchGdcMatrix(e,t){const n=await import("./launchGdcMatrix-48c56699.js");return await n.init(e,t.holder0,t.genomes)}async function launchGdcHierCluster(e,t){const n=await import("./launchGdcHierCluster-ab790040.js");return await n.init(e,t.holder0,t.genomes)}function launchmavb(e,t){if(e.mavolcanoplot.uionly){import("./mavb-54aeff14.js").then((n=>{n.mavbui(t.genomes,t.hostURL,e.jwt,t.holder0,t.sandbox_header)}));return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}e.mavolcanoplot.hostURL=t.hostURL;e.mavolcanoplot.genome=n;import("./mavb-54aeff14.js").then((n=>{n.mavbparseinput(e.mavolcanoplot,t.error0,t.holder0,e.jwt)}))}function launch2dmaf(e,t){if(e.twodmaf.uionly){import("./2dmaf-4c8115cb.js").then((e=>{e.d2mafui(t.genomes,t.holder0)}));return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}e.twodmaf.hostURL=t.hostURL;e.twodmaf.genome=n;import("./2dmaf-4c8115cb.js").then((n=>{n.d2mafparseinput(e.twodmaf,t.holder0)}))}function launchmaftimeline(e,t){if(e.maftimeline.uionly){import("./maftimeline-fc71d7a0.js").then((e=>{e.default(t.genomes,t.holder0,t.sandbox_header)}))}}function launchJunctionbyMatrix(e,t){if(e.junctionbymatrix.uionly){import("./block.tk.junction.textmatrixui-e9fe9446.js").then((n=>{n.default(t.genomes,t.hostURL,e.jwt,t.holder0)}))}}function launchgdcbamslice(e,t){return import("./block.tk.bam.gdc-66964f1c.js").then((n=>n.bamsliceui({genomes:t.genomes,holder:t.holder0,hideTokenInput:e.gdcbamslice.hideTokenInput,callbacks:e.gdcbamslice.callbacks||{},filter0:e.filter0,stream2download:e.gdcbamslice.stream2download,inputValue:e.gdcbamslice.inputValue})))}async function launch_singlecell(e,t){try{const n=t.genomes[e.genome];if(!n)throw"Invalid genome: "+e.genome;e.genome=n;const o=await import("./singlecell-fc57d3bd.js");await o.init(e,t.holder0)}catch(e){t.error0("Error launching single cell viewer: "+e);if(e.stack)console.log(e.stack)}}async function launch_tkUIs(e,t){if(e.tkui=="bigwig"){const e=await import("./block.tk.bigwig.ui-964986f8.js");e.bigwigUI(t.genomes,t.holder)}if(e.tkui=="databrowser"){const e=await import("./databrowser.ui-52855244.js");e.init_databrowserUI(t.holder,t.debugmode)}if(e.tkui=="genefusion"){const e=await import("./genefusion.ui-b1264dc8.js");e.init_geneFusionUI(t.holder,t.genomes,t.debugmode)}if(e.tkui=="disco"){const e=await import("./Disco.UI-a765390e.js");e.init_discoplotUI(t.holder,t.genomes,t.debugmode)}}async function launchtermdb(e,t){if(!e.holder)e.holder=t.holder0;import("./app-64537b0c.js").then((t=>{t.appInit(e)}))}async function launch_genefusion(e,t){try{const n=t.genomes[e.genome];if(!n)throw"Invalid genome: "+e.genome;const o=await import("./fusion.parse-d20a9d3d.js");const s=await o.parseFusion({line:e.genefusion.text,genome:n,positionType:e.genefusion.positionType});await getGm(s.pairlst[0].a,n);await getGm(s.pairlst[0].b,n);const r=await import("./svgraph-c326dadb.js");r.default({pairlst:s.pairlst,genome:n,holder:t.holder})}catch(e){t.error0(e)}}async function getGm(e,t){const n=await dofetch3("genelookup",{body:{genome:t.name,input:e.isoform,deep:1}});if(n.error)throw n.error;if(!Array.isArray(n.gmlst))throw"gmlst not array";const o=n.gmlst.find((t=>t.isoform==e.isoform));if(!o)throw"no match to isoform";e.chr=o.chr;e.name=o.name;e.gm={isoform:o.isoform}}async function launchmass(e,t){const n=e.mass;if(!n.holder)n.holder=t.holder0;if(n.state){if(n.state.genome){n.genome=t.genomes[n.state.genome]}else if(n.state?.vocab?.genome){n.genome=t.genomes[n.state.vocab.genome]}}n.getDatasetAccessToken=e.getDatasetAccessToken;n.addLoginCallback=e.addLoginCallback;const o=sessionStorage.getItem("hostURL");if(window.opener&&o!=window.location.origin){n.embeddedSessionState=JSON.parse(sessionStorage.getItem("embeddedSessionState")||`{}`);const e=t=>{if(t.origin!=window.location.origin&&t.origin!==o)return;if(t.data.state){window.removeEventListener("message",e);Object.assign(n.embeddedSessionState,t.data.state);sessionStorage.setItem("embeddedSessionState",JSON.stringify(n.embeddedSessionState))}};window.addEventListener("message",e,false);setTimeout((()=>window.removeEventListener("message",e)),1e3);let t;try{if(window.opener.origin){t=window.opener.origin}else{t=o}}catch(e){t=o}try{window.opener.postMessage("getActiveMassSession",t)}catch(e){console.log(e)}}const s=await import("./app-db79376c.js");return await s.appInit(n)}function initgenome(e){e.tkset=[];e.isoformcache=new Map;e.junctionframecache=new Map;e.isoformmatch=(t,n,o)=>{if(!t)return null;const s=t.toUpperCase();if(!e.isoformcache.has(s))return null;const r=e.isoformcache.get(s);if(r.length==1)return r[0];if(!n){console.log("no chr provided for matching with "+s);return r[0]}let i=null;for(const e of r){if(e.chr.toUpperCase()==n.toUpperCase()&&e.start<=o&&e.stop>=o){i=e}}if(i)return i;for(const e of r){if(e.chr.toUpperCase()==n.toUpperCase())return e}return null};e.chrlookup={};for(const t in e.majorchr){e.chrlookup[t.toUpperCase()]={name:t,len:e.majorchr[t],major:true}}if(e.minorchr){for(const t in e.minorchr){e.chrlookup[t.toUpperCase()]={name:t,len:e.minorchr[t]}}}if(!e.tracks){e.tracks=[]}for(const t of e.tracks){t.tkid=Math.random().toString()}for(const t in e.datasets){const n=e.datasets[t];if(n.isMds);else if(n.isMds3){if(!n.label)return"ds.label missing"}}return null}async function launchDisco(e,t){if(!e.genome)throw'"genome" parameter missing';const n=t.genomes[e.genome];if(!n)throw"unknown genome";const o=await import("./launch.adhoc-50d81ba2.js");return await o.launch(e.disco,n,t.holder0)}export{make_table_2col as $,stratinput as A,fillbar as B,tkt as C,validate_vcfinfofilter as D,mclass as E,dtdel as F,dtcloss as G,dtnloss as H,dtitd as I,dtfusionrna as J,dtsv as K,dtsnvindel as L,Menu as M,export_data as N,dt2label as O,invalidcoord as P,disappear as Q,appear as R,rgb as S,dofetch3 as T,defaultcolor as U,vcf2dstk as V,tkexists as W,textlensf as X,string2pos as Y,gmlst2loci as Z,string2snp as _,axisstyle as a,formatSpecifier as a$,d3selectAll as a0,newSandboxDiv as a1,tkt$1 as a2,blockinit as a3,sketchGene as a4,exoncolor as a5,sketchSplicerna as a6,sketchRna as a7,sketchProtein2 as a8,nt2aa as a9,getAppInit as aA,getStoreInit as aB,deepFreeze$2 as aC,deepEqual as aD,getInitFxn as aE,isInSession as aF,throwMsgWithFilePathAndFnName as aG,convertUnits as aH,getColors as aI,isNumeric as aJ,Bus as aK,corsMessage as aL,multiInit as aM,Tabs as aN,copyMerge as aO,__awaiter as aP,plotColor as aQ,to_svg as aR,icons as aS,prepStore as aT,dispatch as aU,interpolate$1 as aV,interrupt as aW,transformer as aX,copy as aY,initRange as aZ,ticks as a_,sketchGmsum as aa,sketchProtein as ab,sayerror as ac,mclasscolorchangeui as ad,debounce_1 as ae,dtcnv as af,may_findmatchingsnp as ag,snp_printhtml as ah,contigNameNoChr as ai,coloroutframe as aj,colorinframe as ak,vcfcopymclass as al,ordinal as am,schemeCategory10 as an,morigin as ao,aa2gmcoord as ap,duplicate$1 as aq,gmmode$1 as ar,alleleInGenotypeStr as as,vepinfo as at,mclassdeletion as au,mclasssnv as av,mclassmnv as aw,mclassinsertion as ax,mclassnonstandard as ay,getCompInit as az,basecolor as b,block_init as b$,tab_wait as b0,getsjcharts as b1,first_genetrack_tolist as b2,contigNameNoChr2 as b3,showErrorsWithCounter as b4,validtkt as b5,mclassitd as b6,getMax_byiqr as b7,dtloh as b8,mclassnloss as b9,mclasssv as bA,mclasscnvloss as bB,mclasscnvgain as bC,mclassutr3 as bD,mclassutr5 as bE,filetypeselect as bF,init_bulk_flag as bG,content2flag as bH,bulkin as bI,bulkui as bJ,mclasscolor2table as bK,mclassdel as bL,interpolateRgb as bM,IN_frame as bN,spliceeventchangegmexon as bO,OUT_frame as bP,flyindi as bQ,client as bR,common as bS,ranksays as bT,hierarchy as bU,dt2color as bV,dtgeneexpression as bW,truncatingMutations as bX,proteinChangingMutations as bY,rgbBasis as bZ,runproteinpaint$1 as b_,mclasscloss as ba,mclassfusionrna as bb,colorbgleft as bc,colorbgright as bd,colorctx as be,bulk_badline as bf,tab2box as bg,addGeneSearchbox as bh,renderSandboxFormDiv as bi,newpane3 as bj,bisector as bk,tickStep as bl,continuous as bm,urlmap as bn,table2col as bo,string2variant as bp,linearish as bq,identity$1 as br,initInterpolator as bs,interpolateRound as bt,gene_searchbox as bu,findgenemodel_bysymbol as bv,colors as bw,domaincolorlst as bx,colorantisense as by,timer as bz,dofetch as c,dofetch2 as d,bwSetting as e,format as f,appear$1 as g,disappear$1 as h,labelbox as i,category2legend as j,keyupEnter as k,linear as l,bplen as m,gmmode as n,sayerror$1 as o,font as p,d3select as q,rgb2hex as r,styleInject as s,genomic2gm as t,getdomaintypes as u,default_text_color as v,newpane as w,rna2gmcoord as x,basecompliment as y,stratify as z};
1
+ import path__default from"path";var xhtml="http://www.w3.org/1999/xhtml";var namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function namespace(e){var t=e+="",n=t.indexOf(":");if(n>=0&&(t=e.slice(0,n))!=="xmlns")e=e.slice(n+1);return namespaces.hasOwnProperty(t)?{space:namespaces[t],local:e}:e}function creatorInherit(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===xhtml&&t.documentElement.namespaceURI===xhtml?t.createElement(e):t.createElementNS(n,e)}}function creatorFixed(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function creator(e){var t=namespace(e);return(t.local?creatorFixed:creatorInherit)(t)}function none(){}function selector(e){return e==null?none:function(){return this.querySelector(e)}}function selection_select(e){if(typeof e!=="function")e=selector(e);for(var t=this._groups,n=t.length,o=new Array(n),s=0;s<n;++s){for(var r=t[s],i=r.length,a=o[s]=new Array(i),l,c,d=0;d<i;++d){if((l=r[d])&&(c=e.call(l,l.__data__,d,r))){if("__data__"in l)c.__data__=l.__data__;a[d]=c}}}return new Selection$1(o,this._parents)}function array(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function empty(){return[]}function selectorAll(e){return e==null?empty:function(){return this.querySelectorAll(e)}}function arrayAll(e){return function(){return array(e.apply(this,arguments))}}function selection_selectAll(e){if(typeof e==="function")e=arrayAll(e);else e=selectorAll(e);for(var t=this._groups,n=t.length,o=[],s=[],r=0;r<n;++r){for(var i=t[r],a=i.length,l,c=0;c<a;++c){if(l=i[c]){o.push(e.call(l,l.__data__,c,i));s.push(l)}}}return new Selection$1(o,s)}function matcher(e){return function(){return this.matches(e)}}function childMatcher(e){return function(t){return t.matches(e)}}var find=Array.prototype.find;function childFind(e){return function(){return find.call(this.children,e)}}function childFirst(){return this.firstElementChild}function selection_selectChild(e){return this.select(e==null?childFirst:childFind(typeof e==="function"?e:childMatcher(e)))}var filter=Array.prototype.filter;function children(){return Array.from(this.children)}function childrenFilter(e){return function(){return filter.call(this.children,e)}}function selection_selectChildren(e){return this.selectAll(e==null?children:childrenFilter(typeof e==="function"?e:childMatcher(e)))}function selection_filter(e){if(typeof e!=="function")e=matcher(e);for(var t=this._groups,n=t.length,o=new Array(n),s=0;s<n;++s){for(var r=t[s],i=r.length,a=o[s]=[],l,c=0;c<i;++c){if((l=r[c])&&e.call(l,l.__data__,c,r)){a.push(l)}}}return new Selection$1(o,this._parents)}function sparse(e){return new Array(e.length)}function selection_enter(){return new Selection$1(this._enter||this._groups.map(sparse),this._parents)}function EnterNode(e,t){this.ownerDocument=e.ownerDocument;this.namespaceURI=e.namespaceURI;this._next=null;this._parent=e;this.__data__=t}EnterNode.prototype={constructor:EnterNode,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function constant$1(e){return function(){return e}}function bindIndex(e,t,n,o,s,r){var i=0,a,l=t.length,c=r.length;for(;i<c;++i){if(a=t[i]){a.__data__=r[i];o[i]=a}else{n[i]=new EnterNode(e,r[i])}}for(;i<l;++i){if(a=t[i]){s[i]=a}}}function bindKey(e,t,n,o,s,r,i){var a,l,c=new Map,d=t.length,p=r.length,f=new Array(d),u;for(a=0;a<d;++a){if(l=t[a]){f[a]=u=i.call(l,l.__data__,a,t)+"";if(c.has(u)){s[a]=l}else{c.set(u,l)}}}for(a=0;a<p;++a){u=i.call(e,r[a],a,r)+"";if(l=c.get(u)){o[a]=l;l.__data__=r[a];c.delete(u)}else{n[a]=new EnterNode(e,r[a])}}for(a=0;a<d;++a){if((l=t[a])&&c.get(f[a])===l){s[a]=l}}}function datum(e){return e.__data__}function selection_data(e,t){if(!arguments.length)return Array.from(this,datum);var n=t?bindKey:bindIndex,o=this._parents,s=this._groups;if(typeof e!=="function")e=constant$1(e);for(var r=s.length,i=new Array(r),a=new Array(r),l=new Array(r),c=0;c<r;++c){var d=o[c],p=s[c],f=p.length,u=arraylike(e.call(d,d&&d.__data__,c,o)),h=u.length,m=a[c]=new Array(h),g=i[c]=new Array(h),b=l[c]=new Array(f);n(d,p,m,g,b,u,t);for(var y=0,v=0,w,x;y<h;++y){if(w=m[y]){if(y>=v)v=y+1;while(!(x=g[v])&&++v<h);w._next=x||null}}}i=new Selection$1(i,o);i._enter=a;i._exit=l;return i}function arraylike(e){return typeof e==="object"&&"length"in e?e:Array.from(e)}function selection_exit(){return new Selection$1(this._exit||this._groups.map(sparse),this._parents)}function selection_join(e,t,n){var o=this.enter(),s=this,r=this.exit();if(typeof e==="function"){o=e(o);if(o)o=o.selection()}else{o=o.append(e+"")}if(t!=null){s=t(s);if(s)s=s.selection()}if(n==null)r.remove();else n(r);return o&&s?o.merge(s).order():s}function selection_merge(e){var t=e.selection?e.selection():e;for(var n=this._groups,o=t._groups,s=n.length,r=o.length,i=Math.min(s,r),a=new Array(s),l=0;l<i;++l){for(var c=n[l],d=o[l],p=c.length,f=a[l]=new Array(p),u,h=0;h<p;++h){if(u=c[h]||d[h]){f[h]=u}}}for(;l<s;++l){a[l]=n[l]}return new Selection$1(a,this._parents)}function selection_order(){for(var e=this._groups,t=-1,n=e.length;++t<n;){for(var o=e[t],s=o.length-1,r=o[s],i;--s>=0;){if(i=o[s]){if(r&&i.compareDocumentPosition(r)^4)r.parentNode.insertBefore(i,r);r=i}}}return this}function selection_sort(e){if(!e)e=ascending$1;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,o=n.length,s=new Array(o),r=0;r<o;++r){for(var i=n[r],a=i.length,l=s[r]=new Array(a),c,d=0;d<a;++d){if(c=i[d]){l[d]=c}}l.sort(t)}return new Selection$1(s,this._parents).order()}function ascending$1(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function selection_call(){var e=arguments[0];arguments[0]=this;e.apply(null,arguments);return this}function selection_nodes(){return Array.from(this)}function selection_node(){for(var e=this._groups,t=0,n=e.length;t<n;++t){for(var o=e[t],s=0,r=o.length;s<r;++s){var i=o[s];if(i)return i}}return null}function selection_size(){let e=0;for(const t of this)++e;return e}function selection_empty(){return!this.node()}function selection_each(e){for(var t=this._groups,n=0,o=t.length;n<o;++n){for(var s=t[n],r=0,i=s.length,a;r<i;++r){if(a=s[r])e.call(a,a.__data__,r,s)}}return this}function attrRemove$1(e){return function(){this.removeAttribute(e)}}function attrRemoveNS$1(e){return function(){this.removeAttributeNS(e.space,e.local)}}function attrConstant$1(e,t){return function(){this.setAttribute(e,t)}}function attrConstantNS$1(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function attrFunction$1(e,t){return function(){var n=t.apply(this,arguments);if(n==null)this.removeAttribute(e);else this.setAttribute(e,n)}}function attrFunctionNS$1(e,t){return function(){var n=t.apply(this,arguments);if(n==null)this.removeAttributeNS(e.space,e.local);else this.setAttributeNS(e.space,e.local,n)}}function selection_attr(e,t){var n=namespace(e);if(arguments.length<2){var o=this.node();return n.local?o.getAttributeNS(n.space,n.local):o.getAttribute(n)}return this.each((t==null?n.local?attrRemoveNS$1:attrRemove$1:typeof t==="function"?n.local?attrFunctionNS$1:attrFunction$1:n.local?attrConstantNS$1:attrConstant$1)(n,t))}function defaultView(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function styleRemove$1(e){return function(){this.style.removeProperty(e)}}function styleConstant$1(e,t,n){return function(){this.style.setProperty(e,t,n)}}function styleFunction$1(e,t,n){return function(){var o=t.apply(this,arguments);if(o==null)this.style.removeProperty(e);else this.style.setProperty(e,o,n)}}function selection_style(e,t,n){return arguments.length>1?this.each((t==null?styleRemove$1:typeof t==="function"?styleFunction$1:styleConstant$1)(e,t,n==null?"":n)):styleValue(this.node(),e)}function styleValue(e,t){return e.style.getPropertyValue(t)||defaultView(e).getComputedStyle(e,null).getPropertyValue(t)}function propertyRemove(e){return function(){delete this[e]}}function propertyConstant(e,t){return function(){this[e]=t}}function propertyFunction(e,t){return function(){var n=t.apply(this,arguments);if(n==null)delete this[e];else this[e]=n}}function selection_property(e,t){return arguments.length>1?this.each((t==null?propertyRemove:typeof t==="function"?propertyFunction:propertyConstant)(e,t)):this.node()[e]}function classArray(e){return e.trim().split(/^|\s+/)}function classList(e){return e.classList||new ClassList(e)}function ClassList(e){this._node=e;this._names=classArray(e.getAttribute("class")||"")}ClassList.prototype={add:function(e){var t=this._names.indexOf(e);if(t<0){this._names.push(e);this._node.setAttribute("class",this._names.join(" "))}},remove:function(e){var t=this._names.indexOf(e);if(t>=0){this._names.splice(t,1);this._node.setAttribute("class",this._names.join(" "))}},contains:function(e){return this._names.indexOf(e)>=0}};function classedAdd(e,t){var n=classList(e),o=-1,s=t.length;while(++o<s)n.add(t[o])}function classedRemove(e,t){var n=classList(e),o=-1,s=t.length;while(++o<s)n.remove(t[o])}function classedTrue(e){return function(){classedAdd(this,e)}}function classedFalse(e){return function(){classedRemove(this,e)}}function classedFunction(e,t){return function(){(t.apply(this,arguments)?classedAdd:classedRemove)(this,e)}}function selection_classed(e,t){var n=classArray(e+"");if(arguments.length<2){var o=classList(this.node()),s=-1,r=n.length;while(++s<r)if(!o.contains(n[s]))return false;return true}return this.each((typeof t==="function"?classedFunction:t?classedTrue:classedFalse)(n,t))}function textRemove(){this.textContent=""}function textConstant$1(e){return function(){this.textContent=e}}function textFunction$1(e){return function(){var t=e.apply(this,arguments);this.textContent=t==null?"":t}}function selection_text(e){return arguments.length?this.each(e==null?textRemove:(typeof e==="function"?textFunction$1:textConstant$1)(e)):this.node().textContent}function htmlRemove(){this.innerHTML=""}function htmlConstant(e){return function(){this.innerHTML=e}}function htmlFunction(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t==null?"":t}}function selection_html(e){return arguments.length?this.each(e==null?htmlRemove:(typeof e==="function"?htmlFunction:htmlConstant)(e)):this.node().innerHTML}function raise(){if(this.nextSibling)this.parentNode.appendChild(this)}function selection_raise(){return this.each(raise)}function lower(){if(this.previousSibling)this.parentNode.insertBefore(this,this.parentNode.firstChild)}function selection_lower(){return this.each(lower)}function selection_append(e){var t=typeof e==="function"?e:creator(e);return this.select((function(){return this.appendChild(t.apply(this,arguments))}))}function constantNull(){return null}function selection_insert(e,t){var n=typeof e==="function"?e:creator(e),o=t==null?constantNull:typeof t==="function"?t:selector(t);return this.select((function(){return this.insertBefore(n.apply(this,arguments),o.apply(this,arguments)||null)}))}function remove(){var e=this.parentNode;if(e)e.removeChild(this)}function selection_remove(){return this.each(remove)}function selection_cloneShallow(){var e=this.cloneNode(false),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function selection_cloneDeep(){var e=this.cloneNode(true),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function selection_clone(e){return this.select(e?selection_cloneDeep:selection_cloneShallow)}function selection_datum(e){return arguments.length?this.property("__data__",e):this.node().__data__}function contextListener(e){return function(t){e.call(this,t,this.__data__)}}function parseTypenames$1(e){return e.trim().split(/^|\s+/).map((function(e){var t="",n=e.indexOf(".");if(n>=0)t=e.slice(n+1),e=e.slice(0,n);return{type:e,name:t}}))}function onRemove(e){return function(){var t=this.__on;if(!t)return;for(var n=0,o=-1,s=t.length,r;n<s;++n){if(r=t[n],(!e.type||r.type===e.type)&&r.name===e.name){this.removeEventListener(r.type,r.listener,r.options)}else{t[++o]=r}}if(++o)t.length=o;else delete this.__on}}function onAdd(e,t,n){return function(){var o=this.__on,s,r=contextListener(t);if(o)for(var i=0,a=o.length;i<a;++i){if((s=o[i]).type===e.type&&s.name===e.name){this.removeEventListener(s.type,s.listener,s.options);this.addEventListener(s.type,s.listener=r,s.options=n);s.value=t;return}}this.addEventListener(e.type,r,n);s={type:e.type,name:e.name,value:t,listener:r,options:n};if(!o)this.__on=[s];else o.push(s)}}function selection_on(e,t,n){var o=parseTypenames$1(e+""),s,r=o.length,i;if(arguments.length<2){var a=this.node().__on;if(a)for(var l=0,c=a.length,d;l<c;++l){for(s=0,d=a[l];s<r;++s){if((i=o[s]).type===d.type&&i.name===d.name){return d.value}}}return}a=t?onAdd:onRemove;for(s=0;s<r;++s)this.each(a(o[s],t,n));return this}function dispatchEvent(e,t,n){var o=defaultView(e),s=o.CustomEvent;if(typeof s==="function"){s=new s(t,n)}else{s=o.document.createEvent("Event");if(n)s.initEvent(t,n.bubbles,n.cancelable),s.detail=n.detail;else s.initEvent(t,false,false)}e.dispatchEvent(s)}function dispatchConstant(e,t){return function(){return dispatchEvent(this,e,t)}}function dispatchFunction(e,t){return function(){return dispatchEvent(this,e,t.apply(this,arguments))}}function selection_dispatch(e,t){return this.each((typeof t==="function"?dispatchFunction:dispatchConstant)(e,t))}function*selection_iterator(){for(var e=this._groups,t=0,n=e.length;t<n;++t){for(var o=e[t],s=0,r=o.length,i;s<r;++s){if(i=o[s])yield i}}}var root=[null];function Selection$1(e,t){this._groups=e;this._parents=t}function selection(){return new Selection$1([[document.documentElement]],root)}function selection_selection(){return this}Selection$1.prototype=selection.prototype={constructor:Selection$1,select:selection_select,selectAll:selection_selectAll,selectChild:selection_selectChild,selectChildren:selection_selectChildren,filter:selection_filter,data:selection_data,enter:selection_enter,exit:selection_exit,join:selection_join,merge:selection_merge,selection:selection_selection,order:selection_order,sort:selection_sort,call:selection_call,nodes:selection_nodes,node:selection_node,size:selection_size,empty:selection_empty,each:selection_each,attr:selection_attr,style:selection_style,property:selection_property,classed:selection_classed,text:selection_text,html:selection_html,raise:selection_raise,lower:selection_lower,append:selection_append,insert:selection_insert,remove:selection_remove,clone:selection_clone,datum:selection_datum,on:selection_on,dispatch:selection_dispatch,[Symbol.iterator]:selection_iterator};function d3select(e){return typeof e==="string"?new Selection$1([[document.querySelector(e)]],[document.documentElement]):new Selection$1([[e]],root)}function d3selectAll(e){return typeof e==="string"?new Selection$1([document.querySelectorAll(e)],[document.documentElement]):new Selection$1([array(e)],root)}function ascending(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function descending(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function bisector(e){let t,n,o;if(e.length!==2){t=ascending;n=(t,n)=>ascending(e(t),n);o=(t,n)=>e(t)-n}else{t=e===ascending||e===descending?e:zero$1;n=e;o=e}function s(e,o,s=0,r=e.length){if(s<r){if(t(o,o)!==0)return r;do{const t=s+r>>>1;if(n(e[t],o)<0)s=t+1;else r=t}while(s<r)}return s}function r(e,o,s=0,r=e.length){if(s<r){if(t(o,o)!==0)return r;do{const t=s+r>>>1;if(n(e[t],o)<=0)s=t+1;else r=t}while(s<r)}return s}function i(e,t,n=0,r=e.length){const i=s(e,t,n,r-1);return i>n&&o(e[i-1],t)>-o(e[i],t)?i-1:i}return{left:s,center:i,right:r}}function zero$1(){return 0}function number$1(e){return e===null?NaN:+e}const ascendingBisect=bisector(ascending);const bisectRight=ascendingBisect.right;bisector(number$1).center;var bisect=bisectRight;class InternMap extends Map{constructor(e,t=keyof){super();Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}});if(e!=null)for(const[t,n]of e)this.set(t,n)}get(e){return super.get(intern_get(this,e))}has(e){return super.has(intern_get(this,e))}set(e,t){return super.set(intern_set(this,e),t)}delete(e){return super.delete(intern_delete(this,e))}}function intern_get({_intern:e,_key:t},n){const o=t(n);return e.has(o)?e.get(o):n}function intern_set({_intern:e,_key:t},n){const o=t(n);if(e.has(o))return e.get(o);e.set(o,n);return n}function intern_delete({_intern:e,_key:t},n){const o=t(n);if(e.has(o)){n=e.get(o);e.delete(o)}return n}function keyof(e){return e!==null&&typeof e==="object"?e.valueOf():e}var e10=Math.sqrt(50),e5=Math.sqrt(10),e2=Math.sqrt(2);function ticks(e,t,n){var o,s=-1,r,i,a;t=+t,e=+e,n=+n;if(e===t&&n>0)return[e];if(o=t<e)r=e,e=t,t=r;if((a=tickIncrement(e,t,n))===0||!isFinite(a))return[];if(a>0){let n=Math.round(e/a),o=Math.round(t/a);if(n*a<e)++n;if(o*a>t)--o;i=new Array(r=o-n+1);while(++s<r)i[s]=(n+s)*a}else{a=-a;let n=Math.round(e*a),o=Math.round(t*a);if(n/a<e)++n;if(o/a>t)--o;i=new Array(r=o-n+1);while(++s<r)i[s]=(n+s)/a}if(o)i.reverse();return i}function tickIncrement(e,t,n){var o=(t-e)/Math.max(0,n),s=Math.floor(Math.log(o)/Math.LN10),r=o/Math.pow(10,s);return s>=0?(r>=e10?10:r>=e5?5:r>=e2?2:1)*Math.pow(10,s):-Math.pow(10,-s)/(r>=e10?10:r>=e5?5:r>=e2?2:1)}function tickStep(e,t,n){var o=Math.abs(t-e)/Math.max(0,n),s=Math.pow(10,Math.floor(Math.log(o)/Math.LN10)),r=o/s;if(r>=e10)s*=10;else if(r>=e5)s*=5;else if(r>=e2)s*=2;return t<e?-s:s}function initRange(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function initInterpolator(e,t){switch(arguments.length){case 0:break;case 1:{if(typeof e==="function")this.interpolator(e);else this.range(e);break}default:{this.domain(e);if(typeof t==="function")this.interpolator(t);else this.range(t);break}}return this}const implicit=Symbol("implicit");function ordinal(){var e=new InternMap,t=[],n=[],o=implicit;function s(s){let r=e.get(s);if(r===undefined){if(o!==implicit)return o;e.set(s,r=t.push(s)-1)}return n[r%n.length]}s.domain=function(n){if(!arguments.length)return t.slice();t=[],e=new InternMap;for(const o of n){if(e.has(o))continue;e.set(o,t.push(o)-1)}return s};s.range=function(e){return arguments.length?(n=Array.from(e),s):n.slice()};s.unknown=function(e){return arguments.length?(o=e,s):o};s.copy=function(){return ordinal(t,n).unknown(o)};initRange.apply(s,arguments);return s}function define(e,t,n){e.prototype=t.prototype=n;n.constructor=e}function extend(e,t){var n=Object.create(e.prototype);for(var o in t)n[o]=t[o];return n}function Color(){}var darker=.7;var brighter=1/darker;var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex=/^#([0-9a-f]{3,8})$/,reRgbInteger=new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),reRgbPercent=new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),reRgbaInteger=new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),reRgbaPercent=new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),reHslPercent=new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),reHslaPercent=new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);var named={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};define(Color,color,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHex8:color_formatHex8,formatHsl:color_formatHsl,formatRgb:color_formatRgb,toString:color_formatRgb});function color_formatHex(){return this.rgb().formatHex()}function color_formatHex8(){return this.rgb().formatHex8()}function color_formatHsl(){return hslConvert(this).formatHsl()}function color_formatRgb(){return this.rgb().formatRgb()}function color(e){var t,n;e=(e+"").trim().toLowerCase();return(t=reHex.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?rgbn(t):n===3?new Rgb(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?rgba(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?rgba(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=reRgbInteger.exec(e))?new Rgb(t[1],t[2],t[3],1):(t=reRgbPercent.exec(e))?new Rgb(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=reRgbaInteger.exec(e))?rgba(t[1],t[2],t[3],t[4]):(t=reRgbaPercent.exec(e))?rgba(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=reHslPercent.exec(e))?hsla(t[1],t[2]/100,t[3]/100,1):(t=reHslaPercent.exec(e))?hsla(t[1],t[2]/100,t[3]/100,t[4]):named.hasOwnProperty(e)?rgbn(named[e]):e==="transparent"?new Rgb(NaN,NaN,NaN,0):null}function rgbn(e){return new Rgb(e>>16&255,e>>8&255,e&255,1)}function rgba(e,t,n,o){if(o<=0)e=t=n=NaN;return new Rgb(e,t,n,o)}function rgbConvert(e){if(!(e instanceof Color))e=color(e);if(!e)return new Rgb;e=e.rgb();return new Rgb(e.r,e.g,e.b,e.opacity)}function rgb(e,t,n,o){return arguments.length===1?rgbConvert(e):new Rgb(e,t,n,o==null?1:o)}function Rgb(e,t,n,o){this.r=+e;this.g=+t;this.b=+n;this.opacity=+o}define(Rgb,rgb,extend(Color,{brighter(e){e=e==null?brighter:Math.pow(brighter,e);return new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){e=e==null?darker:Math.pow(darker,e);return new Rgb(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Rgb(clampi(this.r),clampi(this.g),clampi(this.b),clampa(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&(-.5<=this.g&&this.g<255.5)&&(-.5<=this.b&&this.b<255.5)&&(0<=this.opacity&&this.opacity<=1)},hex:rgb_formatHex,formatHex:rgb_formatHex,formatHex8:rgb_formatHex8,formatRgb:rgb_formatRgb,toString:rgb_formatRgb}));function rgb_formatHex(){return`#${hex(this.r)}${hex(this.g)}${hex(this.b)}`}function rgb_formatHex8(){return`#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity)?1:this.opacity)*255)}`}function rgb_formatRgb(){const e=clampa(this.opacity);return`${e===1?"rgb(":"rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${e===1?")":`, ${e})`}`}function clampa(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function clampi(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function hex(e){e=clampi(e);return(e<16?"0":"")+e.toString(16)}function hsla(e,t,n,o){if(o<=0)e=t=n=NaN;else if(n<=0||n>=1)e=t=NaN;else if(t<=0)e=NaN;return new Hsl(e,t,n,o)}function hslConvert(e){if(e instanceof Hsl)return new Hsl(e.h,e.s,e.l,e.opacity);if(!(e instanceof Color))e=color(e);if(!e)return new Hsl;if(e instanceof Hsl)return e;e=e.rgb();var t=e.r/255,n=e.g/255,o=e.b/255,s=Math.min(t,n,o),r=Math.max(t,n,o),i=NaN,a=r-s,l=(r+s)/2;if(a){if(t===r)i=(n-o)/a+(n<o)*6;else if(n===r)i=(o-t)/a+2;else i=(t-n)/a+4;a/=l<.5?r+s:2-r-s;i*=60}else{a=l>0&&l<1?0:i}return new Hsl(i,a,l,e.opacity)}function hsl(e,t,n,o){return arguments.length===1?hslConvert(e):new Hsl(e,t,n,o==null?1:o)}function Hsl(e,t,n,o){this.h=+e;this.s=+t;this.l=+n;this.opacity=+o}define(Hsl,hsl,extend(Color,{brighter(e){e=e==null?brighter:Math.pow(brighter,e);return new Hsl(this.h,this.s,this.l*e,this.opacity)},darker(e){e=e==null?darker:Math.pow(darker,e);return new Hsl(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,o=n+(n<.5?n:1-n)*t,s=2*n-o;return new Rgb(hsl2rgb(e>=240?e-240:e+120,s,o),hsl2rgb(e,s,o),hsl2rgb(e<120?e+240:e-120,s,o),this.opacity)},clamp(){return new Hsl(clamph(this.h),clampt(this.s),clampt(this.l),clampa(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&(0<=this.l&&this.l<=1)&&(0<=this.opacity&&this.opacity<=1)},formatHsl(){const e=clampa(this.opacity);return`${e===1?"hsl(":"hsla("}${clamph(this.h)}, ${clampt(this.s)*100}%, ${clampt(this.l)*100}%${e===1?")":`, ${e})`}`}}));function clamph(e){e=(e||0)%360;return e<0?e+360:e}function clampt(e){return Math.max(0,Math.min(1,e||0))}function hsl2rgb(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}function basis(e,t,n,o,s){var r=e*e,i=r*e;return((1-3*e+3*r-i)*t+(4-6*r+3*i)*n+(1+3*e+3*r-3*i)*o+i*s)/6}function basis$1(e){var t=e.length-1;return function(n){var o=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),s=e[o],r=e[o+1],i=o>0?e[o-1]:2*s-r,a=o<t-1?e[o+2]:2*r-s;return basis((n-o/t)*t,i,s,r,a)}}var constant=e=>()=>e;function linear$1(e,t){return function(n){return e+n*t}}function exponential(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(o){return Math.pow(e+o*t,n)}}function gamma(e){return(e=+e)===1?nogamma:function(t,n){return n-t?exponential(t,n,e):constant(isNaN(t)?n:t)}}function nogamma(e,t){var n=t-e;return n?linear$1(e,n):constant(isNaN(e)?t:e)}var interpolateRgb=function e(t){var n=gamma(t);function o(e,t){var o=n((e=rgb(e)).r,(t=rgb(t)).r),s=n(e.g,t.g),r=n(e.b,t.b),i=nogamma(e.opacity,t.opacity);return function(t){e.r=o(t);e.g=s(t);e.b=r(t);e.opacity=i(t);return e+""}}o.gamma=e;return o}(1);function rgbSpline(e){return function(t){var n=t.length,o=new Array(n),s=new Array(n),r=new Array(n),i,a;for(i=0;i<n;++i){a=rgb(t[i]);o[i]=a.r||0;s[i]=a.g||0;r[i]=a.b||0}o=e(o);s=e(s);r=e(r);a.opacity=1;return function(e){a.r=o(e);a.g=s(e);a.b=r(e);return a+""}}}var rgbBasis=rgbSpline(basis$1);function numberArray(e,t){if(!t)t=[];var n=e?Math.min(t.length,e.length):0,o=t.slice(),s;return function(r){for(s=0;s<n;++s)o[s]=e[s]*(1-r)+t[s]*r;return o}}function isNumberArray(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function genericArray(e,t){var n=t?t.length:0,o=e?Math.min(n,e.length):0,s=new Array(o),r=new Array(n),i;for(i=0;i<o;++i)s[i]=interpolate$1(e[i],t[i]);for(;i<n;++i)r[i]=t[i];return function(e){for(i=0;i<o;++i)r[i]=s[i](e);return r}}function date(e,t){var n=new Date;return e=+e,t=+t,function(o){return n.setTime(e*(1-o)+t*o),n}}function interpolateNumber(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function object(e,t){var n={},o={},s;if(e===null||typeof e!=="object")e={};if(t===null||typeof t!=="object")t={};for(s in t){if(s in e){n[s]=interpolate$1(e[s],t[s])}else{o[s]=t[s]}}return function(e){for(s in n)o[s]=n[s](e);return o}}var reA=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,reB=new RegExp(reA.source,"g");function zero(e){return function(){return e}}function one(e){return function(t){return e(t)+""}}function interpolateString(e,t){var n=reA.lastIndex=reB.lastIndex=0,o,s,r,i=-1,a=[],l=[];e=e+"",t=t+"";while((o=reA.exec(e))&&(s=reB.exec(t))){if((r=s.index)>n){r=t.slice(n,r);if(a[i])a[i]+=r;else a[++i]=r}if((o=o[0])===(s=s[0])){if(a[i])a[i]+=s;else a[++i]=s}else{a[++i]=null;l.push({i:i,x:interpolateNumber(o,s)})}n=reB.lastIndex}if(n<t.length){r=t.slice(n);if(a[i])a[i]+=r;else a[++i]=r}return a.length<2?l[0]?one(l[0].x):zero(t):(t=l.length,function(e){for(var n=0,o;n<t;++n)a[(o=l[n]).i]=o.x(e);return a.join("")})}function interpolate$1(e,t){var n=typeof t,o;return t==null||n==="boolean"?constant(t):(n==="number"?interpolateNumber:n==="string"?(o=color(t))?(t=o,interpolateRgb):interpolateString:t instanceof color?interpolateRgb:t instanceof Date?date:isNumberArray(t)?numberArray:Array.isArray(t)?genericArray:typeof t.valueOf!=="function"&&typeof t.toString!=="function"||isNaN(t)?object:interpolateNumber)(e,t)}function interpolateRound(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}var degrees=180/Math.PI;var identity$2={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function decompose(e,t,n,o,s,r){var i,a,l;if(i=Math.sqrt(e*e+t*t))e/=i,t/=i;if(l=e*n+t*o)n-=e*l,o-=t*l;if(a=Math.sqrt(n*n+o*o))n/=a,o/=a,l/=a;if(e*o<t*n)e=-e,t=-t,l=-l,i=-i;return{translateX:s,translateY:r,rotate:Math.atan2(t,e)*degrees,skewX:Math.atan(l)*degrees,scaleX:i,scaleY:a}}var svgNode;function parseCss(e){const t=new(typeof DOMMatrix==="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?identity$2:decompose(t.a,t.b,t.c,t.d,t.e,t.f)}function parseSvg(e){if(e==null)return identity$2;if(!svgNode)svgNode=document.createElementNS("http://www.w3.org/2000/svg","g");svgNode.setAttribute("transform",e);if(!(e=svgNode.transform.baseVal.consolidate()))return identity$2;e=e.matrix;return decompose(e.a,e.b,e.c,e.d,e.e,e.f)}function interpolateTransform(e,t,n,o){function s(e){return e.length?e.pop()+" ":""}function r(e,o,s,r,i,a){if(e!==s||o!==r){var l=i.push("translate(",null,t,null,n);a.push({i:l-4,x:interpolateNumber(e,s)},{i:l-2,x:interpolateNumber(o,r)})}else if(s||r){i.push("translate("+s+t+r+n)}}function i(e,t,n,r){if(e!==t){if(e-t>180)t+=360;else if(t-e>180)e+=360;r.push({i:n.push(s(n)+"rotate(",null,o)-2,x:interpolateNumber(e,t)})}else if(t){n.push(s(n)+"rotate("+t+o)}}function a(e,t,n,r){if(e!==t){r.push({i:n.push(s(n)+"skewX(",null,o)-2,x:interpolateNumber(e,t)})}else if(t){n.push(s(n)+"skewX("+t+o)}}function l(e,t,n,o,r,i){if(e!==n||t!==o){var a=r.push(s(r)+"scale(",null,",",null,")");i.push({i:a-4,x:interpolateNumber(e,n)},{i:a-2,x:interpolateNumber(t,o)})}else if(n!==1||o!==1){r.push(s(r)+"scale("+n+","+o+")")}}return function(t,n){var o=[],s=[];t=e(t),n=e(n);r(t.translateX,t.translateY,n.translateX,n.translateY,o,s);i(t.rotate,n.rotate,o,s);a(t.skewX,n.skewX,o,s);l(t.scaleX,t.scaleY,n.scaleX,n.scaleY,o,s);t=n=null;return function(e){var t=-1,n=s.length,r;while(++t<n)o[(r=s[t]).i]=r.x(e);return o.join("")}}}var interpolateTransformCss=interpolateTransform(parseCss,"px, ","px)","deg)");var interpolateTransformSvg=interpolateTransform(parseSvg,", ",")",")");function constants(e){return function(){return e}}function number(e){return+e}var unit=[0,1];function identity$1(e){return e}function normalize$1(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:constants(isNaN(t)?NaN:.5)}function clamper(e,t){var n;if(e>t)n=e,e=t,t=n;return function(n){return Math.max(e,Math.min(t,n))}}function bimap(e,t,n){var o=e[0],s=e[1],r=t[0],i=t[1];if(s<o)o=normalize$1(s,o),r=n(i,r);else o=normalize$1(o,s),r=n(r,i);return function(e){return r(o(e))}}function polymap(e,t,n){var o=Math.min(e.length,t.length)-1,s=new Array(o),r=new Array(o),i=-1;if(e[o]<e[0]){e=e.slice().reverse();t=t.slice().reverse()}while(++i<o){s[i]=normalize$1(e[i],e[i+1]);r[i]=n(t[i],t[i+1])}return function(t){var n=bisect(e,t,1,o)-1;return r[n](s[n](t))}}function copy(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function transformer(){var e=unit,t=unit,n=interpolate$1,o,s,r,i=identity$1,a,l,c;function d(){var n=Math.min(e.length,t.length);if(i!==identity$1)i=clamper(e[0],e[n-1]);a=n>2?polymap:bimap;l=c=null;return p}function p(s){return s==null||isNaN(s=+s)?r:(l||(l=a(e.map(o),t,n)))(o(i(s)))}p.invert=function(n){return i(s((c||(c=a(t,e.map(o),interpolateNumber)))(n)))};p.domain=function(t){return arguments.length?(e=Array.from(t,number),d()):e.slice()};p.range=function(e){return arguments.length?(t=Array.from(e),d()):t.slice()};p.rangeRound=function(e){return t=Array.from(e),n=interpolateRound,d()};p.clamp=function(e){return arguments.length?(i=e?true:identity$1,d()):i!==identity$1};p.interpolate=function(e){return arguments.length?(n=e,d()):n};p.unknown=function(e){return arguments.length?(r=e,p):r};return function(e,t){o=e,s=t;return d()}}function continuous(){return transformer()(identity$1,identity$1)}function formatDecimal(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function formatDecimalParts(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,o=e.slice(0,n);return[o.length>1?o[0]+o.slice(2):o,+e.slice(n+1)]}function exponent(e){return e=formatDecimalParts(Math.abs(e)),e?e[1]:NaN}function formatGroup(e,t){return function(n,o){var s=n.length,r=[],i=0,a=e[0],l=0;while(s>0&&a>0){if(l+a+1>o)a=Math.max(1,o-l);r.push(n.substring(s-=a,s+a));if((l+=a+1)>o)break;a=e[i=(i+1)%e.length]}return r.reverse().join(t)}}function formatNumerals(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}var re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(e){if(!(t=re.exec(e)))throw new Error("invalid format: "+e);var t;return new FormatSpecifier({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}formatSpecifier.prototype=FormatSpecifier.prototype;function FormatSpecifier(e){this.fill=e.fill===undefined?" ":e.fill+"";this.align=e.align===undefined?">":e.align+"";this.sign=e.sign===undefined?"-":e.sign+"";this.symbol=e.symbol===undefined?"":e.symbol+"";this.zero=!!e.zero;this.width=e.width===undefined?undefined:+e.width;this.comma=!!e.comma;this.precision=e.precision===undefined?undefined:+e.precision;this.trim=!!e.trim;this.type=e.type===undefined?"":e.type+""}FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===undefined?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===undefined?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function formatTrim(e){e:for(var t=e.length,n=1,o=-1,s;n<t;++n){switch(e[n]){case".":o=s=n;break;case"0":if(o===0)o=n;s=n;break;default:if(!+e[n])break e;if(o>0)o=0;break}}return o>0?e.slice(0,o)+e.slice(s+1):e}var prefixExponent;function formatPrefixAuto(e,t){var n=formatDecimalParts(e,t);if(!n)return e+"";var o=n[0],s=n[1],r=s-(prefixExponent=Math.max(-8,Math.min(8,Math.floor(s/3)))*3)+1,i=o.length;return r===i?o:r>i?o+new Array(r-i+1).join("0"):r>0?o.slice(0,r)+"."+o.slice(r):"0."+new Array(1-r).join("0")+formatDecimalParts(e,Math.max(0,t+r-1))[0]}function formatRounded(e,t){var n=formatDecimalParts(e,t);if(!n)return e+"";var o=n[0],s=n[1];return s<0?"0."+new Array(-s).join("0")+o:o.length>s+1?o.slice(0,s+1)+"."+o.slice(s+1):o+new Array(s-o.length+2).join("0")}var formatTypes={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:formatDecimal,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>formatRounded(e*100,t),r:formatRounded,s:formatPrefixAuto,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function identity(e){return e}var map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function formatLocale(e){var t=e.grouping===undefined||e.thousands===undefined?identity:formatGroup(map.call(e.grouping,Number),e.thousands+""),n=e.currency===undefined?"":e.currency[0]+"",o=e.currency===undefined?"":e.currency[1]+"",s=e.decimal===undefined?".":e.decimal+"",r=e.numerals===undefined?identity:formatNumerals(map.call(e.numerals,String)),i=e.percent===undefined?"%":e.percent+"",a=e.minus===undefined?"−":e.minus+"",l=e.nan===undefined?"NaN":e.nan+"";function c(e){e=formatSpecifier(e);var c=e.fill,d=e.align,p=e.sign,f=e.symbol,u=e.zero,h=e.width,m=e.comma,g=e.precision,b=e.trim,y=e.type;if(y==="n")m=true,y="g";else if(!formatTypes[y])g===undefined&&(g=12),b=true,y="g";if(u||c==="0"&&d==="=")u=true,c="0",d="=";var v=f==="$"?n:f==="#"&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",w=f==="$"?o:/[%p]/.test(y)?i:"";var x=formatTypes[y],_=/[defgprs%]/.test(y);g=g===undefined?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g));function k(e){var n=v,o=w,i,f,k;if(y==="c"){o=x(e)+o;e=""}else{e=+e;var j=e<0||1/e<0;e=isNaN(e)?l:x(Math.abs(e),g);if(b)e=formatTrim(e);if(j&&+e===0&&p!=="+")j=false;n=(j?p==="("?p:a:p==="-"||p==="("?"":p)+n;o=(y==="s"?prefixes[8+prefixExponent/3]:"")+o+(j&&p==="("?")":"");if(_){i=-1,f=e.length;while(++i<f){if(k=e.charCodeAt(i),48>k||k>57){o=(k===46?s+e.slice(i+1):e.slice(i))+o;e=e.slice(0,i);break}}}}if(m&&!u)e=t(e,Infinity);var N=n.length+e.length+o.length,S=N<h?new Array(h-N+1).join(c):"";if(m&&u)e=t(S+e,S.length?h-o.length:Infinity),S="";switch(d){case"<":e=n+e+o+S;break;case"=":e=n+S+e+o;break;case"^":e=S.slice(0,N=S.length>>1)+n+e+o+S.slice(N);break;default:e=S+n+e+o;break}return r(e)}k.toString=function(){return e+""};return k}function d(e,t){var n=c((e=formatSpecifier(e),e.type="f",e)),o=Math.max(-8,Math.min(8,Math.floor(exponent(t)/3)))*3,s=Math.pow(10,-o),r=prefixes[8+o/3];return function(e){return n(s*e)+r}}return{format:c,formatPrefix:d}}var locale;var format;var formatPrefix;defaultLocale({thousands:",",grouping:[3],currency:["$",""]});function defaultLocale(e){locale=formatLocale(e);format=locale.format;formatPrefix=locale.formatPrefix;return locale}function precisionFixed(e){return Math.max(0,-exponent(Math.abs(e)))}function precisionPrefix(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(exponent(t)/3)))*3-exponent(Math.abs(e)))}function precisionRound(e,t){e=Math.abs(e),t=Math.abs(t)-e;return Math.max(0,exponent(t)-exponent(e))+1}function tickFormat(e,t,n,o){var s=tickStep(e,t,n),r;o=formatSpecifier(o==null?",f":o);switch(o.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));if(o.precision==null&&!isNaN(r=precisionPrefix(s,i)))o.precision=r;return formatPrefix(o,i)}case"":case"e":case"g":case"p":case"r":{if(o.precision==null&&!isNaN(r=precisionRound(s,Math.max(Math.abs(e),Math.abs(t)))))o.precision=r-(o.type==="e");break}case"f":case"%":{if(o.precision==null&&!isNaN(r=precisionFixed(s)))o.precision=r-(o.type==="%")*2;break}}return format(o)}function linearish(e){var t=e.domain;e.ticks=function(e){var n=t();return ticks(n[0],n[n.length-1],e==null?10:e)};e.tickFormat=function(e,n){var o=t();return tickFormat(o[0],o[o.length-1],e==null?10:e,n)};e.nice=function(n){if(n==null)n=10;var o=t();var s=0;var r=o.length-1;var i=o[s];var a=o[r];var l;var c;var d=10;if(a<i){c=i,i=a,a=c;c=s,s=r,r=c}while(d-- >0){c=tickIncrement(i,a,n);if(c===l){o[s]=i;o[r]=a;return t(o)}else if(c>0){i=Math.floor(i/c)*c;a=Math.ceil(a/c)*c}else if(c<0){i=Math.ceil(i*c)/c;a=Math.floor(a*c)/c}else{break}l=c}return e};return e}function linear(){var e=continuous();e.copy=function(){return copy(e,linear())};initRange.apply(e,arguments);return linearish(e)}var noop={value:()=>{}};function dispatch(){for(var e=0,t=arguments.length,n={},o;e<t;++e){if(!(o=arguments[e]+"")||o in n||/[\s.]/.test(o))throw new Error("illegal type: "+o);n[o]=[]}return new Dispatch(n)}function Dispatch(e){this._=e}function parseTypenames(e,t){return e.trim().split(/^|\s+/).map((function(e){var n="",o=e.indexOf(".");if(o>=0)n=e.slice(o+1),e=e.slice(0,o);if(e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}}))}Dispatch.prototype=dispatch.prototype={constructor:Dispatch,on:function(e,t){var n=this._,o=parseTypenames(e+"",n),s,r=-1,i=o.length;if(arguments.length<2){while(++r<i)if((s=(e=o[r]).type)&&(s=get$1(n[s],e.name)))return s;return}if(t!=null&&typeof t!=="function")throw new Error("invalid callback: "+t);while(++r<i){if(s=(e=o[r]).type)n[s]=set$1(n[s],e.name,t);else if(t==null)for(s in n)n[s]=set$1(n[s],e.name,null)}return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Dispatch(e)},call:function(e,t){if((s=arguments.length-2)>0)for(var n=new Array(s),o=0,s,r;o<s;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(r=this._[e],o=0,s=r.length;o<s;++o)r[o].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var o=this._[e],s=0,r=o.length;s<r;++s)o[s].value.apply(t,n)}};function get$1(e,t){for(var n=0,o=e.length,s;n<o;++n){if((s=e[n]).name===t){return s.value}}}function set$1(e,t,n){for(var o=0,s=e.length;o<s;++o){if(e[o].name===t){e[o]=noop,e=e.slice(0,o).concat(e.slice(o+1));break}}if(n!=null)e.push({name:t,value:n});return e}var frame=0,timeout$1=0,interval=0,pokeDelay=1e3,taskHead,taskTail,clockLast=0,clockNow=0,clockSkew=0,clock=typeof performance==="object"&&performance.now?performance:Date,setFrame=typeof window==="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function now(){return clockNow||(setFrame(clearNow),clockNow=clock.now()+clockSkew)}function clearNow(){clockNow=0}function Timer(){this._call=this._time=this._next=null}Timer.prototype=timer.prototype={constructor:Timer,restart:function(e,t,n){if(typeof e!=="function")throw new TypeError("callback is not a function");n=(n==null?now():+n)+(t==null?0:+t);if(!this._next&&taskTail!==this){if(taskTail)taskTail._next=this;else taskHead=this;taskTail=this}this._call=e;this._time=n;sleep()},stop:function(){if(this._call){this._call=null;this._time=Infinity;sleep()}}};function timer(e,t,n){var o=new Timer;o.restart(e,t,n);return o}function timerFlush(){now();++frame;var e=taskHead,t;while(e){if((t=clockNow-e._time)>=0)e._call.call(undefined,t);e=e._next}--frame}function wake(){clockNow=(clockLast=clock.now())+clockSkew;frame=timeout$1=0;try{timerFlush()}finally{frame=0;nap();clockNow=0}}function poke(){var e=clock.now(),t=e-clockLast;if(t>pokeDelay)clockSkew-=t,clockLast=e}function nap(){var e,t=taskHead,n,o=Infinity;while(t){if(t._call){if(o>t._time)o=t._time;e=t,t=t._next}else{n=t._next,t._next=null;t=e?e._next=n:taskHead=n}}taskTail=e;sleep(o)}function sleep(e){if(frame)return;if(timeout$1)timeout$1=clearTimeout(timeout$1);var t=e-clockNow;if(t>24){if(e<Infinity)timeout$1=setTimeout(wake,e-clock.now()-clockSkew);if(interval)interval=clearInterval(interval)}else{if(!interval)clockLast=clock.now(),interval=setInterval(poke,pokeDelay);frame=1,setFrame(wake)}}function timeout(e,t,n){var o=new Timer;t=t==null?0:+t;o.restart((n=>{o.stop();e(n+t)}),t,n);return o}var emptyOn=dispatch("start","end","cancel","interrupt");var emptyTween=[];var CREATED=0;var SCHEDULED=1;var STARTING=2;var STARTED=3;var RUNNING=4;var ENDING=5;var ENDED=6;function schedule(e,t,n,o,s,r){var i=e.__transition;if(!i)e.__transition={};else if(n in i)return;create(e,n,{name:t,index:o,group:s,on:emptyOn,tween:emptyTween,time:r.time,delay:r.delay,duration:r.duration,ease:r.ease,timer:null,state:CREATED})}function init(e,t){var n=get(e,t);if(n.state>CREATED)throw new Error("too late; already scheduled");return n}function set(e,t){var n=get(e,t);if(n.state>STARTED)throw new Error("too late; already running");return n}function get(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}function create(e,t,n){var o=e.__transition,s;o[t]=n;n.timer=timer(r,0,n.time);function r(e){n.state=SCHEDULED;n.timer.restart(i,n.delay,n.time);if(n.delay<=e)i(e-n.delay)}function i(r){var c,d,p,f;if(n.state!==SCHEDULED)return l();for(c in o){f=o[c];if(f.name!==n.name)continue;if(f.state===STARTED)return timeout(i);if(f.state===RUNNING){f.state=ENDED;f.timer.stop();f.on.call("interrupt",e,e.__data__,f.index,f.group);delete o[c]}else if(+c<t){f.state=ENDED;f.timer.stop();f.on.call("cancel",e,e.__data__,f.index,f.group);delete o[c]}}timeout((function(){if(n.state===STARTED){n.state=RUNNING;n.timer.restart(a,n.delay,n.time);a(r)}}));n.state=STARTING;n.on.call("start",e,e.__data__,n.index,n.group);if(n.state!==STARTING)return;n.state=STARTED;s=new Array(p=n.tween.length);for(c=0,d=-1;c<p;++c){if(f=n.tween[c].value.call(e,e.__data__,n.index,n.group)){s[++d]=f}}s.length=d+1}function a(t){var o=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(l),n.state=ENDING,1),r=-1,i=s.length;while(++r<i){s[r].call(e,o)}if(n.state===ENDING){n.on.call("end",e,e.__data__,n.index,n.group);l()}}function l(){n.state=ENDED;n.timer.stop();delete o[t];for(var s in o)return;delete e.__transition}}function interrupt(e,t){var n=e.__transition,o,s,r=true,i;if(!n)return;t=t==null?null:t+"";for(i in n){if((o=n[i]).name!==t){r=false;continue}s=o.state>STARTING&&o.state<ENDING;o.state=ENDED;o.timer.stop();o.on.call(s?"interrupt":"cancel",e,e.__data__,o.index,o.group);delete n[i]}if(r)delete e.__transition}function selection_interrupt(e){return this.each((function(){interrupt(this,e)}))}function tweenRemove(e,t){var n,o;return function(){var s=set(this,e),r=s.tween;if(r!==n){o=n=r;for(var i=0,a=o.length;i<a;++i){if(o[i].name===t){o=o.slice();o.splice(i,1);break}}}s.tween=o}}function tweenFunction(e,t,n){var o,s;if(typeof n!=="function")throw new Error;return function(){var r=set(this,e),i=r.tween;if(i!==o){s=(o=i).slice();for(var a={name:t,value:n},l=0,c=s.length;l<c;++l){if(s[l].name===t){s[l]=a;break}}if(l===c)s.push(a)}r.tween=s}}function transition_tween(e,t){var n=this._id;e+="";if(arguments.length<2){var o=get(this.node(),n).tween;for(var s=0,r=o.length,i;s<r;++s){if((i=o[s]).name===e){return i.value}}return null}return this.each((t==null?tweenRemove:tweenFunction)(n,e,t))}function tweenValue(e,t,n){var o=e._id;e.each((function(){var e=set(this,o);(e.value||(e.value={}))[t]=n.apply(this,arguments)}));return function(e){return get(e,o).value[t]}}function interpolate(e,t){var n;return(typeof t==="number"?interpolateNumber:t instanceof color?interpolateRgb:(n=color(t))?(t=n,interpolateRgb):interpolateString)(e,t)}function attrRemove(e){return function(){this.removeAttribute(e)}}function attrRemoveNS(e){return function(){this.removeAttributeNS(e.space,e.local)}}function attrConstant(e,t,n){var o,s=n+"",r;return function(){var i=this.getAttribute(e);return i===s?null:i===o?r:r=t(o=i,n)}}function attrConstantNS(e,t,n){var o,s=n+"",r;return function(){var i=this.getAttributeNS(e.space,e.local);return i===s?null:i===o?r:r=t(o=i,n)}}function attrFunction(e,t,n){var o,s,r;return function(){var i,a=n(this),l;if(a==null)return void this.removeAttribute(e);i=this.getAttribute(e);l=a+"";return i===l?null:i===o&&l===s?r:(s=l,r=t(o=i,a))}}function attrFunctionNS(e,t,n){var o,s,r;return function(){var i,a=n(this),l;if(a==null)return void this.removeAttributeNS(e.space,e.local);i=this.getAttributeNS(e.space,e.local);l=a+"";return i===l?null:i===o&&l===s?r:(s=l,r=t(o=i,a))}}function transition_attr(e,t){var n=namespace(e),o=n==="transform"?interpolateTransformSvg:interpolate;return this.attrTween(e,typeof t==="function"?(n.local?attrFunctionNS:attrFunction)(n,o,tweenValue(this,"attr."+e,t)):t==null?(n.local?attrRemoveNS:attrRemove)(n):(n.local?attrConstantNS:attrConstant)(n,o,t))}function attrInterpolate(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function attrInterpolateNS(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function attrTweenNS(e,t){var n,o;function s(){var s=t.apply(this,arguments);if(s!==o)n=(o=s)&&attrInterpolateNS(e,s);return n}s._value=t;return s}function attrTween(e,t){var n,o;function s(){var s=t.apply(this,arguments);if(s!==o)n=(o=s)&&attrInterpolate(e,s);return n}s._value=t;return s}function transition_attrTween(e,t){var n="attr."+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=="function")throw new Error;var o=namespace(e);return this.tween(n,(o.local?attrTweenNS:attrTween)(o,t))}function delayFunction(e,t){return function(){init(this,e).delay=+t.apply(this,arguments)}}function delayConstant(e,t){return t=+t,function(){init(this,e).delay=t}}function transition_delay(e){var t=this._id;return arguments.length?this.each((typeof e==="function"?delayFunction:delayConstant)(t,e)):get(this.node(),t).delay}function durationFunction(e,t){return function(){set(this,e).duration=+t.apply(this,arguments)}}function durationConstant(e,t){return t=+t,function(){set(this,e).duration=t}}function transition_duration(e){var t=this._id;return arguments.length?this.each((typeof e==="function"?durationFunction:durationConstant)(t,e)):get(this.node(),t).duration}function easeConstant(e,t){if(typeof t!=="function")throw new Error;return function(){set(this,e).ease=t}}function transition_ease(e){var t=this._id;return arguments.length?this.each(easeConstant(t,e)):get(this.node(),t).ease}function easeVarying(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=="function")throw new Error;set(this,e).ease=n}}function transition_easeVarying(e){if(typeof e!=="function")throw new Error;return this.each(easeVarying(this._id,e))}function transition_filter(e){if(typeof e!=="function")e=matcher(e);for(var t=this._groups,n=t.length,o=new Array(n),s=0;s<n;++s){for(var r=t[s],i=r.length,a=o[s]=[],l,c=0;c<i;++c){if((l=r[c])&&e.call(l,l.__data__,c,r)){a.push(l)}}}return new Transition(o,this._parents,this._name,this._id)}function transition_merge(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,n=e._groups,o=t.length,s=n.length,r=Math.min(o,s),i=new Array(o),a=0;a<r;++a){for(var l=t[a],c=n[a],d=l.length,p=i[a]=new Array(d),f,u=0;u<d;++u){if(f=l[u]||c[u]){p[u]=f}}}for(;a<o;++a){i[a]=t[a]}return new Transition(i,this._parents,this._name,this._id)}function start(e){return(e+"").trim().split(/^|\s+/).every((function(e){var t=e.indexOf(".");if(t>=0)e=e.slice(0,t);return!e||e==="start"}))}function onFunction(e,t,n){var o,s,r=start(t)?init:set;return function(){var i=r(this,e),a=i.on;if(a!==o)(s=(o=a).copy()).on(t,n);i.on=s}}function transition_on(e,t){var n=this._id;return arguments.length<2?get(this.node(),n).on.on(e):this.each(onFunction(n,e,t))}function removeFunction(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;if(t)t.removeChild(this)}}function transition_remove(){return this.on("end.remove",removeFunction(this._id))}function transition_select(e){var t=this._name,n=this._id;if(typeof e!=="function")e=selector(e);for(var o=this._groups,s=o.length,r=new Array(s),i=0;i<s;++i){for(var a=o[i],l=a.length,c=r[i]=new Array(l),d,p,f=0;f<l;++f){if((d=a[f])&&(p=e.call(d,d.__data__,f,a))){if("__data__"in d)p.__data__=d.__data__;c[f]=p;schedule(c[f],t,n,f,c,get(d,n))}}}return new Transition(r,this._parents,t,n)}function transition_selectAll(e){var t=this._name,n=this._id;if(typeof e!=="function")e=selectorAll(e);for(var o=this._groups,s=o.length,r=[],i=[],a=0;a<s;++a){for(var l=o[a],c=l.length,d,p=0;p<c;++p){if(d=l[p]){for(var f=e.call(d,d.__data__,p,l),u,h=get(d,n),m=0,g=f.length;m<g;++m){if(u=f[m]){schedule(u,t,n,m,f,h)}}r.push(f);i.push(d)}}}return new Transition(r,i,t,n)}var Selection=selection.prototype.constructor;function transition_selection(){return new Selection(this._groups,this._parents)}function styleNull(e,t){var n,o,s;return function(){var r=styleValue(this,e),i=(this.style.removeProperty(e),styleValue(this,e));return r===i?null:r===n&&i===o?s:s=t(n=r,o=i)}}function styleRemove(e){return function(){this.style.removeProperty(e)}}function styleConstant(e,t,n){var o,s=n+"",r;return function(){var i=styleValue(this,e);return i===s?null:i===o?r:r=t(o=i,n)}}function styleFunction(e,t,n){var o,s,r;return function(){var i=styleValue(this,e),a=n(this),l=a+"";if(a==null)l=a=(this.style.removeProperty(e),styleValue(this,e));return i===l?null:i===o&&l===s?r:(s=l,r=t(o=i,a))}}function styleMaybeRemove(e,t){var n,o,s,r="style."+t,i="end."+r,a;return function(){var l=set(this,e),c=l.on,d=l.value[r]==null?a||(a=styleRemove(t)):undefined;if(c!==n||s!==d)(o=(n=c).copy()).on(i,s=d);l.on=o}}function transition_style(e,t,n){var o=(e+="")==="transform"?interpolateTransformCss:interpolate;return t==null?this.styleTween(e,styleNull(e,o)).on("end.style."+e,styleRemove(e)):typeof t==="function"?this.styleTween(e,styleFunction(e,o,tweenValue(this,"style."+e,t))).each(styleMaybeRemove(this._id,e)):this.styleTween(e,styleConstant(e,o,t),n).on("end.style."+e,null)}function styleInterpolate(e,t,n){return function(o){this.style.setProperty(e,t.call(this,o),n)}}function styleTween(e,t,n){var o,s;function r(){var r=t.apply(this,arguments);if(r!==s)o=(s=r)&&styleInterpolate(e,r,n);return o}r._value=t;return r}function transition_styleTween(e,t,n){var o="style."+(e+="");if(arguments.length<2)return(o=this.tween(o))&&o._value;if(t==null)return this.tween(o,null);if(typeof t!=="function")throw new Error;return this.tween(o,styleTween(e,t,n==null?"":n))}function textConstant(e){return function(){this.textContent=e}}function textFunction(e){return function(){var t=e(this);this.textContent=t==null?"":t}}function transition_text(e){return this.tween("text",typeof e==="function"?textFunction(tweenValue(this,"text",e)):textConstant(e==null?"":e+""))}function textInterpolate(e){return function(t){this.textContent=e.call(this,t)}}function textTween(e){var t,n;function o(){var o=e.apply(this,arguments);if(o!==n)t=(n=o)&&textInterpolate(o);return t}o._value=e;return o}function transition_textTween(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=="function")throw new Error;return this.tween(t,textTween(e))}function transition_transition(){var e=this._name,t=this._id,n=newId();for(var o=this._groups,s=o.length,r=0;r<s;++r){for(var i=o[r],a=i.length,l,c=0;c<a;++c){if(l=i[c]){var d=get(l,t);schedule(l,e,n,c,i,{time:d.time+d.delay+d.duration,delay:0,duration:d.duration,ease:d.ease})}}}return new Transition(o,this._parents,e,n)}function transition_end(){var e,t,n=this,o=n._id,s=n.size();return new Promise((function(r,i){var a={value:i},l={value:function(){if(--s===0)r()}};n.each((function(){var n=set(this,o),s=n.on;if(s!==e){t=(e=s).copy();t._.cancel.push(a);t._.interrupt.push(a);t._.end.push(l)}n.on=t}));if(s===0)r()}))}var id=0;function Transition(e,t,n,o){this._groups=e;this._parents=t;this._name=n;this._id=o}function newId(){return++id}var selection_prototype=selection.prototype;Transition.prototype={constructor:Transition,select:transition_select,selectAll:transition_selectAll,selectChild:selection_prototype.selectChild,selectChildren:selection_prototype.selectChildren,filter:transition_filter,merge:transition_merge,selection:transition_selection,transition:transition_transition,call:selection_prototype.call,nodes:selection_prototype.nodes,node:selection_prototype.node,size:selection_prototype.size,empty:selection_prototype.empty,each:selection_prototype.each,on:transition_on,attr:transition_attr,attrTween:transition_attrTween,style:transition_style,styleTween:transition_styleTween,text:transition_text,textTween:transition_textTween,remove:transition_remove,tween:transition_tween,delay:transition_delay,duration:transition_duration,ease:transition_ease,easeVarying:transition_easeVarying,end:transition_end,[Symbol.iterator]:selection_prototype[Symbol.iterator]};function cubicInOut(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var defaultTiming={time:null,delay:0,duration:250,ease:cubicInOut};function inherit$2(e,t){var n;while(!(n=e.__transition)||!(n=n[t])){if(!(e=e.parentNode)){throw new Error(`transition ${t} not found`)}}return n}function selection_transition(e){var t,n;if(e instanceof Transition){t=e._id,e=e._name}else{t=newId(),(n=defaultTiming).time=now(),e=e==null?null:e+""}for(var o=this._groups,s=o.length,r=0;r<s;++r){for(var i=o[r],a=i.length,l,c=0;c<a;++c){if(l=i[c]){schedule(l,e,t,c,i,n||inherit$2(l,t))}}}return new Transition(o,this._parents,e,t)}selection.prototype.interrupt=selection_interrupt;selection.prototype.transition=selection_transition;const d3scale=require("d3-scale");const d3=require("d3");const defaultcolor=rgb("#8AB1D4").darker();const default_text_color=rgb("#aaa").darker().darker();const exoncolor="#4F8053";const IN_frame=true;const OUT_frame=false;const dtsnvindel=1;const dtfusionrna=2;const dtgeneexpression=3;const dtcnv=4;const dtsv=5;const dtitd=6;const dtdel=7;const dtnloss=8;const dtcloss=9;const dtloh=10;const plotColor="#ce768e";const dt2label={[dtsnvindel]:"SNV/indel",[dtfusionrna]:"Fusion RNA",[dtcnv]:"CNV",[dtsv]:"SV",[dtitd]:"ITD",[dtdel]:"Deletion",[dtnloss]:"N-loss",[dtcloss]:"C-loss",[dtloh]:"LOH",[dtgeneexpression]:"Gene Expression"};const mclass={M:{label:"MISSENSE",color:"#3987CC",dt:dtsnvindel,desc:"A substitution variant in the coding region resulting in altered protein coding.",key:"M"},E:{label:"EXON",color:"#bcbd22",dt:dtsnvindel,desc:"A variant in the exon of a non-coding RNA.",key:"E"},F:{label:"FRAMESHIFT",color:"#db3d3d",dt:dtsnvindel,desc:"An insertion or deletion variant that alters the protein coding frame.",key:"F"},N:{label:"NONSENSE",color:"#ff7f0e",dt:dtsnvindel,desc:"A variant altering protein coding to produce a premature stopgain or stoploss.",key:"N"},S:{label:"SILENT",color:"#2ca02c",dt:dtsnvindel,desc:"A substitution variant in the coding region that does not alter protein coding.",key:"S"},D:{label:"PROTEINDEL",color:"#7f7f7f",dt:dtsnvindel,desc:"A deletion resulting in a loss of one or more codons from the product, but not altering the protein coding frame.",key:"D"},I:{label:"PROTEININS",color:"#8c564b",dt:dtsnvindel,desc:"An insertion introducing one or more codons into the product, but not altering the protein coding frame.",key:"I"},P:{label:"SPLICE_REGION",color:"#9467bd",dt:dtsnvindel,desc:"A variant in an intron within 10 nt of an exon boundary.",key:"P"},L:{label:"SPLICE",color:"#6633FF",dt:dtsnvindel,desc:"A variant near an exon edge that may affect splicing functionality.",key:"L"},Intron:{label:"INTRON",color:"#656565",dt:dtsnvindel,desc:"An intronic variant.",key:"Intron"},Blank:{label:"Not tested",color:"#fff",dt:dtsnvindel,desc:"This gene is not tested.",key:"Blank"},WT:{label:"Wildtype",color:"#D3D3D3",dt:dtsnvindel,desc:"Wildtype",key:"WT"}};const mclassitd="ITD";mclass[mclassitd]={label:"ITD",color:"#ff70ff",dt:dtitd,desc:"In-frame internal tandem duplication.",key:mclassitd};const mclassdel="DEL";mclass[mclassdel]={label:"DELETION, intragenic",color:"#858585",dt:dtdel,desc:"Intragenic deletion.",key:mclassdel};const mclassnloss="NLOSS";mclass[mclassnloss]={label:"N-terminus loss",color:"#545454",dt:dtnloss,desc:"N-terminus loss due to translocation",key:mclassnloss};const mclasscloss="CLOSS";mclass[mclasscloss]={label:"C-terminus loss",color:"#545454",dt:dtcloss,desc:"C-terminus loss due to translocation",key:mclasscloss};const mclassutr3="Utr3";mclass[mclassutr3]={label:"UTR_3",color:"#998199",dt:dtsnvindel,desc:"A variant in the 3' untranslated region.",key:mclassutr3};const mclassutr5="Utr5";mclass[mclassutr5]={label:"UTR_5",color:"#819981",dt:dtsnvindel,desc:"A variant in the 5' untranslated region.",key:mclassutr5};const mclassnonstandard="X";mclass[mclassnonstandard]={label:"NONSTANDARD",color:"black",dt:dtsnvindel,desc:"A mutation class that either does not match our notation, or is unspecified.",key:mclassnonstandard};const mclassnoncoding="noncoding";mclass[mclassnoncoding]={label:"NONCODING",color:"black",dt:dtsnvindel,desc:"Noncoding mutation.",key:mclassnoncoding};function mclasstester(e){switch(e.toLowerCase()){case"missense_mutation":return"M";case"nonsense_mutation":return"N";case"splice_site":return"L";case"rna":return mclassnoncoding;case"frame_shift_del":return"F";case"frame_shift_ins":return"F";case"in_frame_del":return"D";case"in_frame_ins":return"I";case"translation_start_site":return mclassnonstandard;case"nonstop_mutation":return"N";case"3'utr":return mclassutr3;case"3'flank":return mclassnoncoding;case"5'utr":return mclassutr5;case"5'flank":return mclassnoncoding;case"blank":return"Blank";default:return null}}const mclassfusionrna="Fuserna";mclass[mclassfusionrna]={label:"Fusion transcript",color:"#545454",dt:dtfusionrna,desc:"Marks the break points leading to fusion transcripts.<br>"+"<span style=\"font-size:150%\">&#9680;</span> - 3' end of the break point is fused to the 5' end of another break point in a different gene.<br>"+"<span style=\"font-size:150%\">&#9681;</span> - 5' end of the break point is fused to the 3' end of another break point in a different gene.",key:mclassfusionrna};const mclasssv="SV";mclass[mclasssv]={label:"Structural variation",color:"#858585",dt:dtsv,desc:"Structural variation detected in genomic DNA.",key:mclasssv};const mclasscnvgain="CNV_amp";mclass[mclasscnvgain]={label:"Copy number gain",color:"#e9a3c9",dt:dtcnv,desc:"Copy number gain",key:mclasscnvgain};const mclasscnvloss="CNV_loss";mclass[mclasscnvloss]={label:"Copy number loss",color:"#a1d76a",dt:dtcnv,desc:"Copy number loss",key:mclasscnvloss};const mclasscnvloh="CNV_loh";mclass[mclasscnvloh]={label:"LOH",color:"#12EDFC",dt:dtcnv,desc:"Loss of heterozygosity",key:mclasscnvloh};const mclasssnv="snv";mclass[mclasssnv]={label:"SNV",color:"#92a2d4",dt:dtsnvindel,desc:"Single nucleotide variation",key:mclasssnv};const mclassmnv="mnv";mclass[mclassmnv]={label:"MNV",color:"#92a2d4",dt:dtsnvindel,desc:"Multiple nucleotide variation",key:mclassmnv};const mclassinsertion="insertion";mclass[mclassinsertion]={label:"Sequence insertion",color:"#bd8e91",dt:dtsnvindel,desc:"Sequence insertion",key:mclassinsertion};const mclassdeletion="deletion";mclass[mclassdeletion]={label:"Sequence deletion",color:"#b5a174",dt:dtsnvindel,desc:"Sequence deletion",key:mclassdeletion};const dt2color={[dtsnvindel]:mclass.M.color};function applyOverrides(e={}){if(e.mclass){for(const t in e.mclass){if(!mclass[t])mclass[t]={};for(const n in e.mclass[t]){mclass[t][n]=e.mclass[t][n]}}}}const vepinfo=function(e){const t=e.toLowerCase().split(",");let n=1;if(t.indexOf("transcript_ablation")!=-1){return[dtdel,mclassdel,n]}n++;if(t.indexOf("splice_acceptor_variant")!=-1)return[dtsnvindel,"L",n];n++;if(t.indexOf("splice_donor_variant")!=-1)return[dtsnvindel,"L",n];n++;if(t.indexOf("stop_gained")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("frameshift_variant")!=-1)return[dtsnvindel,"F",n];n++;if(t.indexOf("stop_lost")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("start_lost")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("transcript_amplification")!=-1){return[dtsnvindel,mclassnonstandard,n]}n++;if(t.indexOf("inframe_insertion")!=-1||t.indexOf("conservative_inframe_insertion")!=-1||t.indexOf("disruptive_inframe_insertion")!=-1)return[dtsnvindel,"I",n];n++;if(t.indexOf("inframe_deletion")!=-1||t.indexOf("conservative_inframe_deletion")!=-1||t.indexOf("disruptive_inframe_deletion")!=-1)return[dtsnvindel,"D",n];n++;if(t.indexOf("missense_variant")!=-1)return[dtsnvindel,"M",n];n++;if(t.indexOf("protein_altering_variant")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("splice_region_variant")!=-1)return[dtsnvindel,"P",n];n++;if(t.indexOf("incomplete_terminal_codon_variant")!=-1)return[dtsnvindel,"N",n];n++;if(t.indexOf("stop_retained_variant")!=-1)return[dtsnvindel,"S",n];n++;if(t.indexOf("synonymous_variant")!=-1)return[dtsnvindel,"S",n];n++;if(t.indexOf("coding_sequence_variant")!=-1)return[dtsnvindel,mclassnonstandard,n];n++;if(t.indexOf("mature_mirna_variant")!=-1)return[dtsnvindel,"E",n];n++;if(t.indexOf("5_prime_utr_variant")!=-1)return[dtsnvindel,mclassutr5,n];n++;if(t.indexOf("3_prime_utr_variant")!=-1)return[dtsnvindel,mclassutr3,n];n++;if(t.indexOf("non_coding_transcript_exon_variant")!=-1)return[dtsnvindel,"E",n];n++;if(t.indexOf("intron_variant")!=-1)return[dtsnvindel,"Intron",n];n++;if(t.indexOf("nmd_transcript_variant")!=-1)return[dtsnvindel,"S",n];n++;if(t.indexOf("non_coding_transcript_variant")!=-1)return[dtsnvindel,"E",n];n++;if(t.indexOf("upstream_gene_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("downstream_gene_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("tfbs_ablation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("tfbs_amplification")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("tf_binding_site_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("regulatory_region_ablation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("regulatory_region_amplification")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("feature_elongation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("regulatory_region_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("feature_truncation")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;if(t.indexOf("intergenic_variant")!=-1)return[dtsnvindel,mclassnoncoding,n];n++;return[dtsnvindel,mclassnonstandard,n]};const germlinelegend='<circle cx="7" cy="12" r="7" fill="#b1b1b1"></circle><path d="M6.735557395310443e-16,-11A11,11 0 0,1 11,0L9,0A9,9 0 0,0 5.51091059616309e-16,-9Z" transform="translate(7,12)" fill="#858585" stroke="none"></path>';const morigin={};const moriginsomatic="S";morigin[moriginsomatic]={label:"Somatic",desc:"A variant found only in a tumor sample. The proportion is indicated by lack of any arc.",legend:'<circle cx="7" cy="12" r="7" fill="#b1b1b1"></circle>'};const morigingermline="G";morigin[morigingermline]={label:"Germline",desc:"A constitutional variant found in a normal sample. The proportion is indicated by the span of the solid arc within the whole circle.",legend:germlinelegend};morigin.germline=morigin[morigingermline];morigin.somatic=morigin[moriginsomatic];const moriginrelapse="R";morigin[moriginrelapse]={label:"Relapse",desc:"A somatic variant found only in a relapse sample. The proportion is indicated by the span of the hollow arc within the whole circle.",legend:'<circle cx="7" cy="12" r="7" fill="#b1b1b1"></circle><path d="M6.735557395310443e-16,-11A11,11 0 0,1 11,0L9,0A9,9 0 0,0 5.51091059616309e-16,-9Z" transform="translate(7,12)" fill="none" stroke="#858585"></path>'};const morigingermlinepathogenic="GP";morigin[morigingermlinepathogenic]={label:"Germline pathogenic",desc:"A constitutional variant with pathogenic allele.",legend:germlinelegend};const morigingermlinenonpathogenic="GNP";morigin[morigingermlinenonpathogenic]={label:"Germline non-pathogenic",desc:"A constitutional variant with non-pathogenic allele.",legend:germlinelegend,hidden:true};const tkt$1={usegm:"usegm",ds:"dataset",bigwig:"bigwig",bigwigstranded:"bigwigstranded",junction:"junction",mdsjunction:"mdsjunction",mdscnv:"mdscnv",mdssvcnv:"mdssvcnv",mdsexpressionrank:"mdsexpressionrank",mdsvcf:"mdsvcf",bedj:"bedj",pgv:"profilegenevalue",bampile:"bampile",hicstraw:"hicstraw",expressionrank:"expressionrank",aicheck:"aicheck",ase:"ase",mds2:"mds2",mds3:"mds3",bedgraphdot:"bedgraphdot",bam:"bam",ld:"ld"};function validtkt(e){for(const t in tkt$1){if(e==tkt$1[t]){return true}}return false}const mdsvcftype={vcf:"vcf"};const custommdstktype={vcf:"vcf",svcnvitd:"svcnvitd",geneexpression:"geneexpression"};const codon={GCT:"A",GCC:"A",GCA:"A",GCG:"A",CGT:"R",CGC:"R",CGA:"R",CGG:"R",AGA:"R",AGG:"R",AAT:"N",AAC:"N",GAT:"D",GAC:"D",TGT:"C",TGC:"C",CAA:"Q",CAG:"Q",GAA:"E",GAG:"E",GGT:"G",GGC:"G",GGA:"G",GGG:"G",CAT:"H",CAC:"H",ATT:"I",ATC:"I",ATA:"I",TTA:"L",TTG:"L",CTT:"L",CTC:"L",CTA:"L",CTG:"L",AAA:"K",AAG:"K",ATG:"M",TTT:"F",TTC:"F",CCT:"P",CCC:"P",CCA:"P",CCG:"P",TCT:"S",TCC:"S",TCA:"S",TCG:"S",AGT:"S",AGC:"S",ACT:"T",ACC:"T",ACA:"T",ACG:"T",TGG:"W",TAT:"Y",TAC:"Y",GTT:"V",GTC:"V",GTA:"V",GTG:"V"};const codon_stop="*";function nt2aa(e){if(!e.genomicseq)return undefined;const t=[];if(e.coding){for(const[n,o]of e.coding.entries()){const n=e.genomicseq.substr(o[0]-e.start,o[1]-o[0]);if(e.strand=="-"){t.push(reversecompliment(n))}else{t.push(n)}}}const n=t.join("");const o=[];const s=e.startCodonFrame?3-e.startCodonFrame:0;for(let e=s;e<n.length;e+=3){const t=codon[n.substr(e,3)];o.push(t||codon_stop)}e.cdseq=n;return o.join("")}function bplen(e,t){if(e>=1e9)return(e/1e9).toFixed(1)+" Gb";if(e>=1e7)return Math.ceil(e/1e6)+" Mb";if(e>=1e6)return(e/1e6).toFixed(1)+" Mb";if(e>=1e4)return Math.ceil(e/1e3)+" Kb";if(e>=1e3)return(e/1e3).toFixed(1)+" Kb";return e+(t?"bytes":" bp")}const basecolor={A:"#ca0020",T:"#f4a582",C:"#92c5de",G:"#0571b0"};function basecompliment(e){switch(e){case"A":return"T";case"T":return"A";case"C":return"G";case"G":return"C";case"a":return"t";case"t":return"a";case"c":return"g";case"g":return"c";default:return e}}function reversecompliment(e){const t=[];for(let n=e.length-1;n>=0;n--){t.push(basecompliment(e[n]))}return t.join("")}function spliceeventchangegmexon(e,t){const n={chr:e.chr,start:e.start,stop:e.stop,strand:e.strand,coding:[]};if(t.isskipexon||t.isaltexon){for(let o=0;o<e.exon.length;o++){const s=Math.max(e.codingstart,e.exon[o][0]);const r=Math.min(e.codingstop,e.exon[o][1]);if(s>r){continue}if(t.skippedexon.indexOf(o)==-1){n.coding.push([s,r])}}}else if(t.a5ss||t.a3ss){const o=e.exon.map((e=>[e[0],e[1]]));const s=e.strand=="+";if(t.a5ss){if(s){o[t.exon5idx][1]=t.junctionB.start}else{o[t.exon5idx+1][0]=t.junctionB.stop}}else{if(s){o[t.exon5idx+1][0]=t.junctionB.stop}else{o[t.exon5idx][1]=t.junctionB.start}}for(const t of o){const o=Math.max(e.codingstart,t[0]);const s=Math.min(e.codingstop,t[1]);if(o>s){continue}n.coding.push([o,s])}}return n}function fasta2gmframecheck(e,t){const n=t.split("\n");n.shift();e.genomicseq=n.join("").toUpperCase();const o=nt2aa(e);let s=OUT_frame;const r=o.indexOf(codon_stop);if(r==o.length-1){s=IN_frame}return s}function validate_vcfinfofilter(e){if(!e.lst)return".lst missing";if(!Array.isArray(e.lst))return"input is not an array";for(const t of e.lst){if(!t.name)return"name missing from a set of .vcfinfofilter.lst";if(t.autocategory||t.categories){if(!t.autocategory){for(const e in t.categories){const n=t.categories[e];if(!t.autocolor&&!n.color)return".color missing for class "+e+" from .categories of set "+t.name;if(!n.label){n.label=e}}}if(t.categoryhidden){for(const e in t.categoryhidden){if(!t.categories[e])return"unknown hidden-by-default category "+e+" from set "+t.name}}else{t.categoryhidden={}}}else if(t.numericfilter){const e=[];for(const n of t.numericfilter){if(typeof n=="number"){e.push({side:"<",value:n})}else{e.push({side:n.side||"<",value:n.value})}}t.numericfilter=e}if(t.altalleleinfo){if(!t.altalleleinfo.key){return".key missing from .altalleleinfo from set "+t.name}}else if(t.locusinfo){if(!t.locusinfo.key){return".key missing from .locusinfo from set "+t.name}}else{return"neither .altalleleinfo or .locusinfo is available from set "+t.name}}}function contigNameNoChr(e,t){for(const n in e.majorchr){if(t.indexOf(n.replace("chr",""))!=-1){return true}}if(e.minorchr){for(const n in e.minorchr){if(t.indexOf(n.replace("chr",""))!=-1){return true}}}return false}function contigNameNoChr2(e,t){let n=0,o=0;for(const s in e.majorchr){if(t.includes(s)){o++}else if(t.includes(s.replace("chr",""))){n++}}if(e.minorchr){for(const s in e.minorchr){if(t.includes(s)){o++}else if(t.includes(s.replace("chr",""))){n++}}}return[n,o]}function getMax_byiqr(e,t){if(e.length==0)return t;e.sort(((e,t)=>e-t));const n=e[e.length-1];if(e.length<=5)return n;const o=e[Math.floor(e.length/4)];const s=e[Math.floor(e.length*3/4)];return Math.min(s+(s-o)*1.5,n)}function alleleInGenotypeStr(e,t){if(!e)return false;if(e.indexOf("/")!=-1){return e.split("/").indexOf(t)!=-1}return e.split("|").indexOf(t)!=-1}const gmmode$1={genomic:"genomic",splicingrna:"splicing RNA",exononly:"exon only",protein:"protein",gmsum:"aggregated exons"};function vcfcopymclass(e,t){if(e.csq){let n;if(t.usegm){n=e.csq.find((e=>e._isoform==t.usegm.isoform))}if(!n){n=e.csq.find((e=>e.CANONICAL));if(!n){n=e.csq[0];for(const t of e.csq){if(t._csqrank<n._csqrank){n=t}}}}if(n){e.gene=n._gene;e.isoform=n._isoform;e.class=n._class;e.dt=n._dt;e.mname=n._mname;if(e.class==mclassnoncoding){delete e.class}}}else if(e.ann){let n=null;if(t.usegm){for(const o of e.ann){if(o._isoform!=t.usegm.isoform)continue;if(n){if(o._csqrank<n._csqrank){n=o}}else{n=o}}if(!n&&t.gmmode==gmmode$1.genomic){n=e.ann[0]}}else{n=e.ann[0];for(const t of e.ann){if(t._csqrank<n._csqrank){n=t}}}if(n){e.gene=n._gene;e.isoform=n._isoform;e.class=n._class;e.dt=n._dt;e.mname=n._mname;if(e.class==mclassnoncoding){delete e.class}}}if(e.class==undefined){if(mclass[e.type]){e.class=e.type;e.dt=mclass[e.type].dt;e.mname=e.id&&e.id!="."?e.id:e.ref+">"+e.alt;if(e.mname.length>15){e.mname=e.type}}else{e.class=mclassnonstandard;e.dt=dtsnvindel;e.mname=e.type}}delete e.type}const not_annotated="Unannotated";function kernelDensityEstimator(e,t){return function(n){return t.map((t=>[t,n.map((n=>e(t-n))).reduce(((e,t)=>e+t),0)/n.length]))}}function kernelEpanechnikov(e){return function(t){return Math.abs(t/=e)<=1?.75*(1-t*t)/e:0}}const schemeCategory20=["#1f77b4","#aec7e8","#ff7f0e","#ffbb78","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5","#8c564b","#c49c94","#e377c2","#f7b6d2","#7f7f7f","#c7c7c7","#bcbd22","#dbdb8d","#17becf","#9edae5"];const schemeCategory2=["#e75480","blue"];function getColorScheme(e){if(e>12)return schemeCategory20;else if(e>8)return d3.schemePaired;else if(e>2)return d3.schemeDark2;else return schemeCategory2}function getColors(e){return d3scale.scaleOrdinal(getColorScheme(e))}const truncatingMutations=["F","N","D","I","L"];const proteinChangingMutations=["F","N","D","I","L","M","P"];var common=Object.freeze({__proto__:null,defaultcolor:defaultcolor,default_text_color:default_text_color,exoncolor:exoncolor,IN_frame:IN_frame,OUT_frame:OUT_frame,dtsnvindel:dtsnvindel,dtfusionrna:dtfusionrna,dtgeneexpression:dtgeneexpression,dtcnv:dtcnv,dtsv:dtsv,dtitd:dtitd,dtdel:dtdel,dtnloss:dtnloss,dtcloss:dtcloss,dtloh:dtloh,plotColor:plotColor,dt2label:dt2label,mclass:mclass,mclassitd:mclassitd,mclassdel:mclassdel,mclassnloss:mclassnloss,mclasscloss:mclasscloss,mclassutr3:mclassutr3,mclassutr5:mclassutr5,mclassnonstandard:mclassnonstandard,mclassnoncoding:mclassnoncoding,mclasstester:mclasstester,mclassfusionrna:mclassfusionrna,mclasssv:mclasssv,mclasscnvgain:mclasscnvgain,mclasscnvloss:mclasscnvloss,mclasscnvloh:mclasscnvloh,mclasssnv:mclasssnv,mclassmnv:mclassmnv,mclassinsertion:mclassinsertion,mclassdeletion:mclassdeletion,dt2color:dt2color,applyOverrides:applyOverrides,vepinfo:vepinfo,germlinelegend:germlinelegend,morigin:morigin,moriginsomatic:moriginsomatic,morigingermline:morigingermline,moriginrelapse:moriginrelapse,morigingermlinepathogenic:morigingermlinepathogenic,morigingermlinenonpathogenic:morigingermlinenonpathogenic,tkt:tkt$1,validtkt:validtkt,mdsvcftype:mdsvcftype,custommdstktype:custommdstktype,codon:codon,codon_stop:codon_stop,nt2aa:nt2aa,bplen:bplen,basecolor:basecolor,basecompliment:basecompliment,reversecompliment:reversecompliment,spliceeventchangegmexon:spliceeventchangegmexon,fasta2gmframecheck:fasta2gmframecheck,validate_vcfinfofilter:validate_vcfinfofilter,contigNameNoChr:contigNameNoChr,contigNameNoChr2:contigNameNoChr2,getMax_byiqr:getMax_byiqr,alleleInGenotypeStr:alleleInGenotypeStr,gmmode:gmmode$1,vcfcopymclass:vcfcopymclass,not_annotated:not_annotated,kernelDensityEstimator:kernelDensityEstimator,kernelEpanechnikov:kernelEpanechnikov,schemeCategory20:schemeCategory20,schemeCategory2:schemeCategory2,getColorScheme:getColorScheme,getColors:getColors,truncatingMutations:truncatingMutations,proteinChangingMutations:proteinChangingMutations});let base_zindex$1=100;function get_base_zindex(){return base_zindex$1}function set_base_zindex(e){base_zindex$1=e}function getInitFxn(e){return t=>{const n=new e(t);if(!n.api&&n.type){if(n.type=="app")prepApp(n,t);else if(n.type=="store")prepStore(n,t);else prepComponent(n,t)}const o=n.api||n;if(n.debug||n.opts&&n.opts.debug)o.Inner=n;if(typeof n.preApiFreeze=="function")n.preApiFreeze(o);Object.freeze(o);if(n.init){return n.init().then((()=>{if(n.bus)n.bus.emit("postInit");return o})).catch((e=>{if(n.printError)n.printError(e);if(n.bus)n.bus.emit("postInit",null,0,e);else throw e}))}else{if(n.bus)n.bus.emit("postInit");return o}}}function getAppInit(e){return getInitPrepFxn(e,prepApp)}function getStoreInit(e){return getInitPrepFxn(e,prepStore)}function getCompInit(e){return getInitPrepFxn(e,prepComponent)}function getInitPrepFxn(e,t){if(typeof t!="function")throw"prepFxn must be a function";return async n=>{let o;try{o=new e(n);t(o,n);const s=o.api||o;if(o.debug||o.opts&&o.opts.debug)s.Inner=o;if(o.preApiFreeze)await o.preApiFreeze(s);Object.freeze(s);if(o.init){if(o.app&&o.app!=o)await o.init(o.app.getState());else await o.init();if(o.type!="app"&&o.type!="store"&&o.state&&!o.hasStatePreMain){delete o.state;console.warn(`${o.type}: rx deleted this.state after init()`+`to avoid confusing behavior, such as the component not rendering initially `+`because this.state would not have changed between init() and the first time `+`main() is called. To skip this warning and retain this.state after init(), `+`set this.hasStatePreMain = true in the ${o.type} constructor.`)}}if(o.bus)o.bus.emit("postInit");return s}catch(e){console.log("error:",e);if(o&&o.bus)o.bus.emit("postInit",null,0,e);if(!o||!o.printError)throw e}}}function getOpts(e,t){const n=Object.assign({},t.opts||{},e);if(!t.app)return n;if(t.type in t.app.opts){const e=t.app.opts[t.type];if(t.validateOpts)t.validateOpts(e);copyMerge(n,e)}if("debug"in t.app)n.debug=t.app.debug;else if(t.app.opts&&"debug"in t.app.opts)n.debug=t.app.opts.debug;return n}async function multiInit(e){const t={};try{await Promise.all(Object.values(e));for(const n in e){t[n]=await e[n]}return t}catch(e){throw e}}function prepStore(e,t){if(e.validateOpts)e.validateOpts(t);e.app=t.app;e.opts=getOpts(t,e);e.api=getStoreApi(e);e.copyMerge=copyMerge;e.deepFreeze=deepFreeze$2;if(!e.fromJson)e.fromJson=fromJson;if(!e.toJson)e.toJson=toJson;e.state=copyMerge(e.toJson(e.defaultState),t.state);if(e.validateState)e.validateState()}let sequenceId=0;function getStoreApi(e){e.history=[];e.currIndex=-1;let t=0;const n={async write(o){o.sequenceId=sequenceId++;const s=e.constructor.prototype.actions;if(!s){throw`no store actions specified`}if(!s.hasOwnProperty(o.type)){throw`Action=${o.type} must be declared in an "actions" property of a class.`}if(typeof s[o.type]!=="function"){throw`invalid action type=${o.type}`}await s[o.type].call(e,o);e.state._scope_=o._scope_;if(!e.opts.debounceInterval)return n.copyState();t+=1;let r=-1;return new Promise(((o,s)=>{const i=setInterval((()=>{t+=r;r=0;if(t>0)return;clearInterval(i);o(n.copyState())}),e.opts.debounceInterval)}))},async copyState(){const t=e.fromJson(e.toJson(e.state));e.deepFreeze(t);return t}};return n}function prepApp(e,t){try{if(e.validateOpts)e.validateOpts(t);if("id"in t)e.id=t[e.type].id;e.opts=t;e.api=getAppApi(e)}catch(t){console.error(t);if(e.printError)e.printError(t);else alert(t)}}function getAppApi(e){const t={};const n=[];let o;const s={type:e.type,opts:e.opts,async dispatch(t){e.bus.emit("preDispatch");try{if(n.length){for(const e of n.slice()){const o=await e(t);if(o){if(o.cancel)return;if(o.error)throw o.error;if(o.deactivate){n.splice(n.indexOf(e),1)}}}}if(t)e.state=await e.store.write(t);o=t?.sequenceId;if(e.main)await e.main();const s={action:t,appState:e.state};await notifyComponents(e.components,s)}catch(n){if(e.bus&&o==t?.sequenceId)e.bus.emit("error");if(e.printError)e.printError(n);else console.log(n)}if(e.bus&&o==t?.sequenceId)e.bus.emit("postRender")},async save(n){e.state=await e.store.write(n);if(t.recover){for(const n in t.recover){const o=t.recover[n];o.replaceLastState(e.state)}}},getState(){return e.state},middle(e){if(typeof e!=="function")throw`a middleware must be a function`;if(n.includes(e))throw`the function is already in the middlewares array`;n.push(e);return s},on(t,n){if(!e.eventTypes)throw`no eventTypes[] for ${e.type} component`;e.bus.on(t,n);return s},getComponents(t=""){return getComponents(e.components,t)},register(e){if(!t[e.type])t[e.type]={};t[e.type][e.id]=e},deregister(e){if(t[e.type]?.[e.id])delete t[e.type][e.id]},destroy(){for(const t in e.components){const n=e.components[t];if(typeof n.destroy=="function"){n.destroy()}else if(n.holder){n.holder.selectAll("*").remove()}delete e.components[t]}if(typeof e.destroy=="function")e.destroy();if(e.dom){if(e.dom.holder)e.dom.holder.selectAll("*").remove();for(const t in e.dom){delete e.dom[t]}}if(e.bus)e.bus.destroy();delete e.store;if(e.api)delete e.api;e.wasDestroyed=true}};if(e.opts.debugName)window[e.opts.debugName]=s;if(!e.bus){if(!e.eventTypes)e.eventTypes=["preDispatch","postInit","postRender","firstRender","error"];if(e.customEvents)e.eventTypes.push(...e.customEvents);const t=e.opts.app&&e.opts.app.callbacks||e.opts.callbacks||{};e.bus=new Bus(s,e.eventTypes,t)}return s}function prepComponent(e,t){if(!t.app)throw`missing self.opts.app in prepComponent(${e.type})`;e.app=t.app;e.opts=getOpts(t,e);if(e.validateOpts)e.validateOpts(t);if("id"in t)e.id=e.opts.id;e.api=getComponentApi(e)}function getComponentApi(e){if(!("type"in e)){throw`The component's type must be set before calling this.getComponentApi(this).`}let t;const n={type:e.type,id:e.id,async update(o){if(o.action&&e.reactsTo&&!e.reactsTo(o.action))return;const s=e.getState?e.getState(o.appState):o.appState;if(!s)return;if(!o.action||!deepEqual(s,e.state)){if(o.action)t=o.action.sequenceId;if(e.mainArg=="state"){await e.main(s)}else{e.state=s;if(e.main){try{await e.main()}catch(t){if(e.bus)e.bus.emit("error");throw t}}}}await notifyComponents(e.components,o);if(e.bus&&(!o.action||o.action.sequenceId===t))e.bus.emit("postRender");return n},on(t,o){if(!e.eventTypes)throw`no eventTypes[] for ${e.type} component`;e.bus.on(t,o);return n},getComponents(t=""){return getComponents(e.components,t)},async detectStale(e,n={}){try{const o=t;const s=[];let r,i;if(n.abortCtrl){s.push(new Promise(((e,s)=>{i=e;r=setInterval((()=>{if(o!==t){clearInterval(r);try{n.abortCtrl.abort();throw`stale sequenceId`}catch(e){s(e)}}}),n.wait||100)})))}s.push(e());const a=await Promise.race(s);if(r)clearInterval(r);if(i)i();if(t!==o){console.warn("aborted state update, the returned data corresponds to a stale action.sequenceId");if(n.abortCtrl)n.abortCtrl.abort();return[a,true]}return[a]}catch(e){if(typeof e=="string"&&e.includes("sequenceId"))console.warn(e);throw e}},destroy(){e.app.deregister(e.api);for(const t in e.components){const n=e.components[t];if(typeof n.destroy=="function"){n.destroy()}else if(n.holder){n.holder.selectAll("*").remove()}delete e.components[t]}if(typeof e.destroy=="function")e.destroy();if(e.dom){if(e.dom.holder)e.dom.holder.selectAll("*").remove();for(const t in e.dom){if(typeof e.dom[t]?.remove=="function")e.dom[t].remove();delete e.dom[t]}}if(e.bus)e.bus.destroy();if(e.api)delete e.api}};if(!e.bus){if(!e.eventTypes)e.eventTypes=["postInit","postRender","postPrintError","firstRender","error"];if(e.customEvents)e.eventTypes.push(...e.customEvents);e.bus=new Bus(n,e.eventTypes,e.opts&&e.opts.callbacks||{})}return n}class Bus{constructor(e,t,n){this.name=e.type+(e.id===undefined||e.id===null?"":"#"+e.id);this.eventTypes=t;this.events={};this.defaultArg=e;if(n){for(const e in n){this.on(e,n[e])}}}on(e,t,n={}){const[o,s]=e.split(".");if(!this.eventTypes.includes(o)){throw`Unknown bus event '${o}' for component ${this.name}`}else if(!t){delete this.events[e]}else if(typeof t=="function"){if(e in this.events&&!e.includes(".")){console.log(`Warning: replacing ${this.name} ${e} callback - use event.name?`)}this.events[e]=n.wait?e=>setTimeout((()=>t(e)),n.wait):t}else{throw`invalid callback for ${this.name} eventType=${e}`}return this}emit(e,t=null,n=0,o=null){setTimeout((()=>{for(const n in this.events){if(e=="postRender"&&n.startsWith("firstRender")){this.events[n](t||this.defaultArg,o);delete this.events[n]}if(n==e||n.startsWith(e+".")){this.events[n](t||this.defaultArg,o);if(e=="postInit")delete this.events[n]}}}),n);return this}destroy(){for(const e in this.events){delete this.events[e]}}}async function notifyComponents(e,t){if(!e)return;const n=[];for(const o in e){const s=e[o];if(Array.isArray(s)){for(const e of s)n.push(e.update(t))}else if(s.hasOwnProperty("update")){n.push(s.update(t))}else if(s&&typeof s=="object"&&!s.main){for(const e in s){if(s.hasOwnProperty(e)&&typeof s[e].update=="function"){n.push(s[e].update(t))}}}}return Promise.all(n)}function getComponents(e,t){if(!t)return Object.assign({},e);const n=t.split(".");let o=e;while(n.length){let e=n.shift();if(Array.isArray(o))e=Number(e);if(!n.length)o=o[e];else if(o[e]&&o[e].components)o=o[e].components;else if(o[e]&&o[e].getComponents)o=o[e].getComponents();else o=o[e];if(!o)break}return o}function copyMerge(e,...t){const n=typeof e=="string"?fromJson(e):e;for(const o of t){if(o){const t=typeof e=="string"?fromJson(toJson(o)):o;for(const e in t){if(!n[e]||Array.isArray(n[e])||typeof n[e]!=="object"||t===null||t===undefined||t.isAtomic||n?.isAtomic||n[e]?.isAtomic)n[e]=t[e];else copyMerge(n[e],t[e])}}}return n}function fromJson(e){return JSON.parse(e)}function toJson(e=null){return JSON.stringify(e?e:this.state)}function deepFreeze$2(e){Object.freeze(e);for(const t in e){if(typeof e=="object")deepFreeze$2(e[t])}}function deepEqual(e,t){if(e===t){return true}else if(typeof e=="object"&&e!=null&&typeof t=="object"&&t!=null){if(Object.keys(e).length!=Object.keys(t).length){return false}for(var n in e){if(t.hasOwnProperty(n)){if(!deepEqual(e[n],t[n]))return false}else{return false}}return true}else return false}const reserved=["false","true","null","undefined"];const delimiters=['"',"{","["];function encode(e){const t=[];for(const[n,o]of Object.entries(e)){if(typeof o=="string"&&!isNumeric$1(o)&&!reserved.includes(o)&&!delimiters.includes(o[0])){t.push(`${n}=${encodeURIComponent(o)}`)}else if(o!==undefined){t.push(`${n}=${encodeURIComponent(JSON.stringify(o))}`)}}return t.join("&")}function isNumeric$1(e){return!isNaN(parseFloat(e))&&isFinite(e)&&e!==""}const jwtByDsRouteStr=localStorage.getItem("jwtByDsRoute")||`{}`;const jwtByDsRoute=JSON.parse(jwtByDsRouteStr);function dofetch(e,t,n=null){if(n&&typeof n=="object"){if(n.serverData&&typeof n.serverData=="object"){if(!dofetch.serverData){dofetch.serverData=n.serverData}else if(!n.serverData){n.serverData=dofetch.serverData}}return dofetch2(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)},n)}else{if(e[0]=="/"){e=e.slice(1)}const n=sessionStorage.getItem("jwt");if(n){t.jwt=n}let o=e;const s=sessionStorage.getItem("hostURL")||window.testHost||"";if(s){if(s.endsWith("/")){o=s+e}else{o=s+"/"+e}}return fetch(new Request(o,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(t)})).then((e=>e.json()))}}const cachedServerDataKeys=[];const maxNumOfServerDataKeys=360;function dofetch2(e,t={},n={}){if(e[0]=="/"){e=e.slice(1)}let o=e;const s=sessionStorage.getItem("hostURL")||window.testHost||"";if(s){if(s.endsWith("/")){o=s+e}else{o=s+"/"+e}}const r=t.body||{};o=mayAdjustRequest(o,t);if(!t.headers){t.headers={}}if(!t.headers["content-type"]&&t.body){t.headers["content-type"]="application/json"}const i=sessionStorage.getItem("jwt");if(i){t.headers.authorization="Bearer "+i}return mayShowAuthUi(t,o).then((async()=>{if(!i)mayAddJwtToRequest(t,r,o);const e=o+" | "+t.method+" | "+t.body;if(n.serverData){let s;if(n.serverData[e]){s=n.serverData[e].clone?await processResponse(n.serverData[e].clone()):structuredClone(n.serverData[e])}if(!s||typeof s!="object"||s instanceof Promise){delete n.serverData[e];s=undefined}if(!s){try{const r=await fetch(o,t);s=await processResponse(r.clone());if(typeof s=="object"&&!(s instanceof Promise)){if(n.cacheAs=="decoded"){deepFreeze$2(s);n.serverData[e]=s;s=structuredClone(s)}else{n.serverData[e]=r}}}catch(t){delete n.serverData[e];throw t}}const r=cachedServerDataKeys.indexOf(e);if(r!==-1)cachedServerDataKeys.splice(r,1);cachedServerDataKeys.unshift(e);if(cachedServerDataKeys.length>maxNumOfServerDataKeys){const e=cachedServerDataKeys.pop();delete n.serverData[e]}return s}else{return fetch(o,t).then(processResponse)}}))}function processResponse(e){const t=e.headers.get("content-type");if(!t)throw`missing response.header['content-type']`;if(t.includes("/json")){return e.json()}if(t.includes("/text")){return e.text()}return e.blob()}const defaultServerDataCache={};function dofetch3(e,t={},n={}){n.serverData=defaultServerDataCache;return dofetch2(e,t,n)}const urlMaxLength=2e3;function mayAdjustRequest(e,t){const n=window.location.hostname;const o=t.method&&t.method.toUpperCase()||"GET";if(o=="POST"){if(typeof t.body=="string")t.body=JSON.parse(t.body);if(!t.body.embedder)t.body.embedder=n;t.body=JSON.stringify(t.body);return e}if(o!="GET"&&o!="DELETE"){throw`unsupported init.method='${o}': must be undefined or GET or POST or DELETE`}if(t.body){if(!t.body.embedder)t.body.embedder=n;const o=encode(t.body);if(!e.includes("?"))e+="?";e+=o}if(!e.includes("embedder=")){const t=e.includes("?")?"&":"?";e+=`${t}embedder=${n}`}if(e.length<urlMaxLength){if(t.body)delete t.body;return e}t.method="POST";const[s,r]=e.split("?");if(t.body){t.body=JSON.stringify(t.body)}else{const e={};if(r)r.split("&").forEach((t=>{const[n,o]=t.split("=");const s=decodeURIComponent(o);try{e[n]=JSON.parse(s)}catch{e[n]=s}}));if(!e.embedder)e.embedder=n;t.body=JSON.stringify(e)}return s}const dsAuthOk=new Set;let dsAuth,authUi,authUiHolder;function setAuth(e){dsAuth=e.dsAuth;authUi=e.ui||defaultAuthUi;authUiHolder=e.holder||d3select("body");for(const e of dsAuth){if(e.insession)dsAuthOk.add(e)}}function isInSession(e,t){return e&&[...dsAuthOk].find((n=>n.dslabel==e&&n.route==t))}async function mayShowAuthUi(e,t){const n={status:"ok"};if(!dsAuth)return n;for(const o of dsAuth){const s=JSON.parse(e.body||`{}`);const r=(t.split("?")[1]||"").split("&").reduce(((e,t)=>{const[n,o]=t.split("=");e[n]=o;return e}),{});const i=Object.assign({},s,r);const a=t.split("?")[0].split("//")[1].split("/").slice(1).join("/");if(i.dslabel==o.dslabel&&(o.route=="/**"||a==o.route)){if(dsAuthOk.has(o))return n;else if(o.route!="/**")return n;else if(o.type=="basic")return await authUi(o.dslabel,o);else if(o.type=="jwt");else if(o.type=="forbidden"){alert("Forbidden access")}else throw`unsupported dsAuth type='${o.type}'`}}return n}async function defaultAuthUi(e,t){const n=authUiHolder.append("div").style("position","fixed").style("top",0).style("left",0).style("height","100%").style("width","100%").style("margin",0).style("padding","20px").style("background-color","rgb(150,150,150)");const o=n.append("div").style("opacity",1);o.append("div").html(`Restricted dataset '${e}'`);o.append("span").html("Please enter password ");const s=o.append("input").attr("type","password");s.node().focus();const r=o.append("button").html("Submit");return new Promise(((o,i)=>{function a(){fetch("/dslogin",{method:"POST",headers:{authorization:`Basic ${btoa(s.property("value"))}`},body:JSON.stringify({dslabel:e,route:t.route,embedder:window.location.hostname})}).then((e=>e.json())).then((s=>{if(s.error)throw s.error;n.remove();dsAuthOk.add(t);if(s.jwt){if(!jwtByDsRoute[e])jwtByDsRoute[e]={};jwtByDsRoute[e][s.route]=s.jwt;localStorage.setItem("jwtByDsRoute",JSON.stringify(jwtByDsRoute))}o(e)})).catch((e=>{alert("login error: "+e)}))}r.on("click",a);s.on("change",a)}))}function mayAddJwtToRequest(e,t,n){if(e.headers.authorization)return;let o=t?.dslabel;if(!o){const e=n.split("?")[1]?.split("&").find((e=>e.includes("dslabel")));if(!e)return;let t=decodeURIComponent(e.split("=")[1]);if(t.startsWith("{")&&t.endsWith("}")){t=JSON.parse(t);o=t.dslabel||t.mass?.vocab.dslabel||t.tracks?.find((e=>e.dslabel))?.dslabel}else{o=t}}if(!o||!jwtByDsRoute[o])return;const s=n.split("//");const r=(s[1]||s[0]).split("/")[1].split("?")[0];const i=jwtByDsRoute[o][r]||jwtByDsRoute[o]["/**"];if(i)e.headers.authorization="Bearer "+btoa(i)}class Menu{constructor(e={}){this.typename=Math.random().toString();const t=d3select(document.body);this.d=t.append("div").attr("class","sja_menu_div").style("display","none").style("position","absolute").style("background-color","white").style("font-family","Arial").on("mousedown.menu"+this.typename,(e=>{const t=d3select(e.target);if(t.on("mousedown")||t.on("click")||["INPUT","SELECT","TEXTAREA"].includes(e.target.tagName.toUpperCase())){e.stopPropagation()}})).on("keyup",(e=>{if(e.key=="Escape")this.hide()}));this.dnode=this.d.node();if(Object.values(this.d._groups[0]).length)this.dnode.parent_menu=e.parent_menu;t.on("mousedown.menu"+this.typename,(e=>{if(this.dnode.contains(e.target))return;if(e.target.parent_menu===this.dnode)return;const t=e.target.closest(".sja_menu_div");if(t&&t.parent_menu===this.dnode)return;this.hide()}));const n=get_base_zindex();if(n){this.d.style("z-index",n+1)}this.d.style("padding","padding"in e?e.padding:"10px");if(e.border){this.d.style("border",e.border)}else{this.d.style("box-shadow","0px 2px 4px 1px #999")}this.offsetX=Number.isInteger(e.offsetX)?e.offsetX:20;this.offsetY=Number.isInteger(e.offsetY)?e.offsetY:20;this.hideXmute=Number.isInteger(e.hideXmute)?e.hideXmute:0;this.hideYmute=Number.isInteger(e.hideYmute)?e.hideYmute:0;this.prevX=-1;this.prevY=-1;this.clearSelector=e.clearSelector}clear(){if(this.clearSelector)this.d.select(this.clearSelector).selectAll("*").remove();else this.d.selectAll("*").remove();return this}show(e,t,n=true,o=true,s=true){let r=e;let i=t;this.prevX=e;this.prevY=t;document.body.appendChild(this.dnode);this.d.style("display","block");if(s){r=r+window.scrollX;i=i+window.scrollY}if(n){r=r+this.offsetX;i=i+this.offsetY}const a=window.innerWidth;const l=window.innerHeight;const c=a/2;const d=l/2;const p=this.dnode.getBoundingClientRect();if(a-r<c&&r+p.width>a)this.d.style("left",null).style("right",a-r+"px");else this.d.style("left",r+"px").style("right",null);if(!o&&l-i<d&&i-window.scrollY-p.height>0)this.d.style("top",null).style("bottom",l-i+"px");else this.d.style("top",i+"px").style("bottom",null);this.d.transition().style("opacity",1);return this}showunder(e){const t=e.getBoundingClientRect();const n=t.left+window.scrollX;const o=t.top+t.height+window.scrollY+5;return this.show(n,o,false,true,false)}showunderoffset(e){const t=e.getBoundingClientRect();const n=t.top+t.height+window.scrollY+5;return this.show(t.left,n,true,true,false)}hide(e){if(e){if(Math.abs(this.prevX-e.clientX)<this.hideXmute&&Math.abs(this.prevY-e.clientY)<this.hideYmute)return}if(!this.fadeTimeout)this.d.style("display","none").style("opacity",0);if(this.onHide)this.onHide();return this}fadeout(){this.d.transition().style("opacity",0).on("end",(()=>this.d.style("display","none")));return this}confirm({html:e,timeout:t}){this.d.selectAll("*").remove();this.d.append("div").style("padding","5px").html(e);if(t)this.fadeTimeout=setTimeout((()=>{this.fadeout();delete this.fadeTimeout}),3e3)}toggle(){if(!this.hidden){this.hide();this.hidden=true}else{this.d.style("opacity",1).style("display","block");this.hidden=false}return this}getCustomApi(e={}){const t=Object.create(this);Object.assign(t,e);return t}destroy(){this.d.remove()}}function first_genetrack_tolist(e,t){if(!e.tracks)return;for(const n of e.tracks){if(n.__isgene){t.push(n);return}}}function table2col(e){const t=e.holder.append("div").style("max-width","80vw");const n=t.append("table").style("margin","5px 8px").attr("class","sja_simpletable");return{scrollDiv:t,table:n,addRow:()=>{if(n.node().offsetHeight>500){t.style("height","450px").style("resize","both").style("overflow-y","scroll").attr("class","sjpp_show_scrollbar")}const e=n.append("tr");const o=e.append("td").style("padding","3px").style("color","#555");const s=e.append("td");return[o,s]}}}function make_table_2col(e,t,n){const o="#9e9e9e";const s=e.append("table").style("margin","5px 8px").style("font-size","inherit").attr("class","sja_simpletable");for(const e of t){const t=s.append("tr");if(e.kvlst){t.append("td").attr("rowspan",e.kvlst.length).style("padding","3px").style("color",o).html(e.k);t.append("td").style("padding","3px").style("color",o).html(e.kvlst[0].k);t.append("td").style("padding","3px").html(e.kvlst[0].v);for(let t=1;t<e.kvlst.length;t++){const n=s.append("tr");n.append("td").style("padding","3px").style("color",o).html(e.kvlst[t].k);n.append("td").style("padding","3px").html(e.kvlst[t].v)}}else{t.append("td").attr("colspan",2).style("padding","3px").style("color",o).html(e.k);const s=t.append("td").style("padding","3px");if(n&&e.v.length>n){s.html(e.v.substr(0,n-3)+" ...&raquo;").attr("class","sja_clbtext").on("click",(()=>{s.html(e.v).classed("sja_clbtext",false).on("click",null)}))}else{s.html(e.v)}}}return s}function fillbar(e,t,n){if(!n)n={};const o=n.width||40;const s=n.height||12;let r;if(e){e.attr("title",(t.f*100).toFixed(0)+"%"+(t.v1!=undefined?" ("+t.v1+"/"+t.v2+")":""));r=e.append("svg").attr("width",o).attr("height",s)}else{r=d3select(document.body).append("svg")}let i=0;r.append("rect").attr("y",i).attr("width",o).attr("height",s).attr("fill",n.fillbg||"#CBE2F5");r.append("rect").attr("y",i).attr("width",o*t.f).attr("height",s).attr("fill",n.fill||"#69A1D1");if(n.readcountcredible&&t.v2<n.readcountcredible){const e="#545454";const t=.3;r.append("rect").attr("y",i).attr("width",o).attr("height",s).attr("fill",e).attr("fill-opacity",t)}if(e)return r;r.remove();return"<svg width="+o+" height="+s+">"+r.node().innerHTML+"</svg>"}const font="Arial";const unspecified="Unspecified";const colorinframe="green";const coloroutframe="#858585";const colorbgleft="#FCE3B8";const colorbgright="#D2E2FC";const colorantisense="red";const colorctx="#DE3336";const textlensf=.6;let base_zindex=null;const tkt=tkt$1;const gmmode=gmmode$1;const domaincolorlst=["#8dd3c7","#bebada","#fb8072","#80b1d3","#E8E89E","#a6d854","#fdb462","#ffd92f","#e5c494","#b3b3b3"];function appear$1(e,t){e.style("opacity",0).style("display",t||"block").transition().style("opacity",1)}function disappear$1(e,t){e.style("opacity",1).transition().style("opacity",0).call((()=>{if(t){e.remove()}else{e.style("display","none").style("opacity",1)}}))}const tip=new Menu({padding:""});tip.d.style("z-index",1e3);function sayerror$1(e,t){const n=e.append("div").attr("class","sja_errorbar");n.append("div").text(t);n.append("div").html("&#10005;").on("click",(()=>{disappear$1(n,true)}))}function axisstyle(e){if(!e||!e.axis)return;if(!e.color){e.color="#545454"}e.axis.selectAll("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");e.axis.selectAll("path").attr("fill","none").attr("stroke",e.showline?e.color:"none").attr("stroke-width",e.showline?1:0).attr("shape-rendering","crispEdges");e.axis.selectAll("text").style("cursor","default").attr("font-family",font).attr("font-size",e.fontsize?e.fontsize+"px":"12px").attr("fill",e.color)}function newpane(e){if(e.setzindex){base_zindex=e.setzindex;set_base_zindex(e.setzindex);return}const t=300;const n={};const o=d3select(document.body);n.pane=o.append("div").attr("class","sja_pane").style("left",e.x+window.pageXOffset+"px").style("top",e.y+window.pageYOffset+"px").style("opacity",0);if(e.$id){n.pane.attr("id",e.$id)}if(base_zindex){n.pane.style("z-index",base_zindex)}n.pane.transition().duration(t).style("opacity",1);const s=n.pane.append("div").on("mousedown",(e=>{e.preventDefault();e.stopPropagation();const t=Number.parseInt(n.pane.style("left")),s=Number.parseInt(n.pane.style("top"));const r=e.clientX,i=e.clientY;o.on("mousemove",(e=>{n.pane.style("left",t+e.clientX-r+"px").style("top",s+e.clientY-i+"px")}));o.on("mouseup",(function(){o.on("mouseup",null).on("mousemove",null)}));document.body.appendChild(n.pane.node())}));const r=s.append("div").attr("class","sja_menuoption").style("display","inline-block").style("padding","4px 10px").style("margin","0px").style("border-right","solid 1px white").style("cursor","default").style("font-size","1.5em").on("mousedown",(e=>{document.body.dispatchEvent(new Event("mousedown"));e.stopPropagation()}));if(e.toshrink){n.mini=false;r.html("&#9473;").on("click",(()=>{r.html(n.mini?"&#9473;":"&#9725;");if(n.mini){appear$1(n.body)}else{disappear$1(n.body)}n.mini=!n.mini}))}else{r.html("&times;");if(e.close){r.on("click",e.close)}else if(e.closekeep){r.on("click",(()=>{n.pane.transition().duration(t).style("opacity",0).call((()=>n.pane.style("display","none")))}))}else{r.on("click",(()=>{n.pane.transition().duration(t).style("opacity",0).call((()=>n.pane.remove()))}))}}n.header=s.append("div").style("display","inline-block").style("font-family",font).style("padding",e.headpad||"5px 10px");n.body=n.pane.append("div").style("font-family",font);return n}function getdomaintypes(e){if(!e.pdomains)return[];const t=new Map;for(const n of e.pdomains){const e=n.name+n.description;if(t.has(e)){t.get(e).start=Math.min(t.get(e).start,n.start)}else{t.set(e,{name:n.name,description:n.description,color:n.color,start:n.start,iscustom:n.iscustom,url:n.url,pmid:n.pmid,CDD:n.CDD,Pfam:n.Pfam,SMART:n.SMART,COG:n.COG,PRK:n.PRK,Curated_at_NCBI:n.Curated_at_NCBI})}}const n=[];for(const[e,o]of t){o.key=e;o.fill=o.color;o.stroke=rgb(o.color).darker(1).toString();delete o.color;n.push(o)}n.sort(((e,t)=>e.start-t.start));return n}function sketchSplicerna(e,t,n,o){let s=10;if(s*(t.exon.length-1)>n*.3){s=Math.max(2,n*.3/(t.exon.length-1))}let r=0;for(const e of t.exon){r+=e[1]-e[0]}const i=s*(t.exon.length-1);const a=(n-(i>n*.4?0:i))/r;n=a*r+i;const l=e.append("canvas").node();l.width=n;const c=20;const d=4;l.height=c;const p=l.getContext("2d");p.strokeStyle=o;p.beginPath();p.moveTo(0,Math.floor(c/2)-.5);p.lineTo(n,Math.floor(c/2)-.5);p.stroke();const f=t.strand=="-";let u=0;for(const e of t.exon){let n=null,r=null,i=null;if(f){const o=e[1],s=e[0],a=t.codingstop,l=t.codingstart;if(s>=a){n=e}else if(s>=l){if(o>=a){n=[a,o];r=[s,a]}else{r=e}}else{if(o>=a){n=[a,o];i=[s,l];r=[l,a]}else if(o>=l){i=[s,l];r=[l,o]}else{i=e}}}else{if(e[1]<=t.codingstart){n=e}else if(e[1]<=t.codingstop){if(e[0]<=t.codingstart){n=[e[0],t.codingstart];r=[t.codingstart,e[1]]}else{r=e}}else{if(e[0]<=t.codingstart){n=[e[0],t.codingstart];i=[t.codingstop,e[1]];r=[t.codingstart,t.codingstop]}else if(e[0]<t.codingstop){i=[t.codingstop,e[1]];r=[e[0],t.codingstop]}else{i=e}}}if(n){p.fillStyle="#aaa";const e=Math.max(1,(n[1]-n[0])*a);p.fillRect(u,d,e,c-d*2);u+=e}if(r){p.fillStyle=o;const e=Math.max(1,(r[1]-r[0])*a);p.fillRect(u,0,e,c);u+=e}if(i){p.fillStyle="#aaa";const e=Math.max(1,(i[1]-i[0])*a);p.fillRect(u,d,e,c-d*2);u+=e}u+=s}}function sketchGmsum(e,t,n,o,s,r,i,a){const l=e.append("canvas").node();l.width=r;l.height=i;const c=Math.ceil(i/5);const d=l.getContext("2d");let p;let f=0;for(const e of t){if(e.chr!=n.chr){f+=e.width+s;continue}if(n.start>=e.start&&n.start<=e.stop){p=f+(e.reverse?e.stop-n.start:n.start-e.start)*o;break}f+=e.width+s}let u;f=0;for(const e of t){if(e.chr!=n.chr){f+=e.width+s;continue}if(n.stop>=e.start&&n.stop<=e.stop){u=f+(e.reverse?e.stop-n.stop:n.stop-e.start)*o;break}f+=e.width+s}d.strokeStyle=a;d.beginPath();d.moveTo(p,Math.floor(i/2)+.5);d.lineTo(u,Math.floor(i/2)+.5);d.stroke();const h=[];if(n.utr5)h.push(...n.utr5);if(n.utr3)h.push(...n.utr3);if(!n.cdslen)h.push(...n.exon);for(const e of h){let r=0;for(const a of t){if(a.chr!=n.chr){r+=a.width+s;continue}const t=Math.max(e[0],a.start);const l=Math.min(e[1],a.stop);if(t>=l){r+=a.width+s;continue}d.fillStyle="#aaa";d.fillRect(r+(a.reverse?(a.stop-l)*o:(t-a.start)*o),c,Math.max(1,(l-t)*o),i-c*2);r+=a.width+s}}if(n.coding){for(const e of n.coding){let r=0;for(const l of t){if(l.chr!=n.chr){r+=l.width+s;continue}const t=Math.max(e[0],l.start);const c=Math.min(e[1],l.stop);if(t>=c){r+=l.width+s;continue}d.fillStyle=a;d.fillRect(r+(l.reverse?(l.stop-c)*o:(t-l.start)*o),0,Math.max(1,(c-t)*o),i);r+=l.width+s}}}}function sketchRna(e,t,n,o){const s=e.append("canvas").node();s.width=n;const r=20;const i=4;s.height=r;const a=s.getContext("2d");if(!t.cdslen){a.fillStyle="#aaa";a.fillRect(0,i,n,r-i*2);return}const l=n/t.rnalen;let c=0;if(t.utr5){let e=0;for(const n of t.utr5)e+=n[1]-n[0];a.fillStyle="#aaa";a.fillRect(0,i,l*e,r-i*2);c=l*e}if(t.pdomains&&t.pdomains.length){a.fillStyle="white";a.fillRect(c,0,t.cdslen*l,r);t.pdomains.sort(((e,t)=>t.stop-t.start-e.stop+e.start));for(const e of t.pdomains){a.fillStyle=e.color;a.fillRect(c+e.start*3*l,0,(e.stop-e.start+1)*3*l,r)}a.strokeStyle="black";a.strokeRect(c,0,t.cdslen*l,r)}else{a.fillStyle=o;a.fillRect(c,0,t.cdslen*l,r)}c+=t.cdslen*l;if(t.utr3){let e=0;for(const n of t.utr3)e+=n[1]-n[0];a.fillStyle="#aaa";a.fillRect(c,i,l*e,r-i*2)}}function sketchProtein2(e,t,n){const o=e.append("canvas").node();o.width=n;const s=20;o.height=s;const r=o.getContext("2d");const i=n/(t.cdslen/3);t.pdomains.sort(((e,t)=>t.stop-t.start-e.stop+e.start));r.fillStyle="white";r.fillRect(0,0,n,s);for(const e of t.pdomains){r.fillStyle=e.color;r.fillRect(e.start*i,0,(e.stop-e.start+1)*i,s)}r.strokeStyle="black";r.strokeRect(0,0,n,s)}function sketchGene(e,t,n,o,s,r,i,a,l){const c=e.append("canvas").node();c.width=n;c.height=o;const d=c.getContext("2d");const p=linear().range([1,n]);if(l){p.domain([r,s])}else{p.domain([s,r])}d.strokeStyle=i;d.fillStyle=i;u(d,t.start,t.stop,s,r,o/2,1);const f=Math.ceil(o/5);if(t.utr3){for(const e of t.utr3){u(d,e[0],e[1],s,r,f+1,o-f*2-1)}}if(t.utr5){for(const e of t.utr5){u(d,e[0],e[1],s,r,f+1,o-f*2-1)}}if(t.coding){for(const e of t.coding){u(d,e[0],e[1],s,r,1,o)}}if(t.codingstart==t.codingstop){for(const e of t.exon){u(d,e[0],e[1],s,r,f+1,o-f*2-1)}}if(!a&&t.strand){const e=3;if(t.coding){for(const n of t.coding){h(d,t.strand,n[0],n[1],s,r,1+e,o-e*2-1,"white")}}if(t.intron){for(const n of t.intron){h(d,t.strand,n[0],n[1],s,r,1+e,o-e*2-1,i?i:"black")}}}function u(e,t,n,o,s,r,i){const a=Math.max(t,o);const c=Math.min(n,s);if(a>=c)return;e.fillRect(Math.floor(p(l?c:a)),r,Math.max(1,Math.abs(p(c)-p(a))),i)}function h(e,t,n,o,s,r,i,a,l){const c=Math.max(n,s);const d=Math.min(o,r);if(c>=d)return;const f=2,u=a/2,h=p(d)-p(c);if(h<=f*2+a/2)return;e.strokeStyle=l;const m=Math.floor((h-f*2)/(a/2+u));let g=Math.floor(p(c)+(h-m*(a/2+u))/2)+.5;e.beginPath();for(let n=0;n<m;n++){if(t=="+"){e.moveTo(g,i);e.lineTo(g+a/2,i+a/2);e.lineTo(g,i+a)}else{e.moveTo(g+a/2,i);e.lineTo(g,i+a/2);e.lineTo(g+a/2,i+a)}g+=a/2+u}e.stroke()}}function sketchProtein(e,t,n){let o=-1;if(t.cdslen){o=t.cdslen/3}return e.append("span").html("&nbsp;"+(o>0?Math.ceil(o)+" AA"+(Number.isInteger(o)?"":" (incomplete CDS)"):"noncoding"))}function newpane3(e,t,n){const o=newpane({x:e,y:t});const s=o.body.append("div").style("margin","40px 20px 20px 20px");const r=s.append("p");r.append("span").html("Genome&nbsp;");const i=r.append("select");for(const e in n){i.append("option").text(e)}const a=s.append("div").style("margin","20px 0px");const l=o.body.append("div").style("margin","10px 20px");const c=o.body.append("div").style("margin","20px");return[o,s,i.node(),a,l,c]}function to_svg(e,t,n={}){if(n.apply_dom_styles){n.svgClone=e.cloneNode(true);const t=d3select(n.svgClone);for(const e of n.svgClone.querySelectorAll(".sjpp-exclude-svg-download")){e.remove()}const o=window.getComputedStyle(e);for(const e of o){t.style(e,o.getPropertyValue(e))}}const o=document.createElement("a");document.body.appendChild(o);o.addEventListener("click",(function(){const s=new XMLSerializer;const r=new Blob([s.serializeToString(n.svgClone?n.svgClone:e)],{type:"image/svg+xml"});o.download=t+".svg";o.href=URL.createObjectURL(r);document.body.removeChild(o)}),false);o.click()}function filetypeselect(e){const t=e.append("select");t.append("option").text("SNV and indel");t.append("option").text("SV (tabular format)");t.append("option").text("Fusion gene (tabular format)");t.append("option").text("ITD");t.append("option").text("Deletion, intragenic");t.append("option").text("Truncation");t.append("option").text("CNV, gene-level");return t}function export_data(e,t,n=1,o=1,s=10,r=100,i=null){let a;if(!i){const t=newpane({x:(window.innerWidth/2-200)*n,y:(window.innerHeight/2-150)*o});t.header.text(e);a=t.body}else{i.append("p").text(e);a=i.append("div")}for(const e of t){const t=a.append("div").style("margin-top","10px");if(e.label){t.append("div").text(e.label).style("margin","5px")}a.append("textarea").text(e.text).attr("readonly",1).attr("rows",s).attr("cols",r)}a.append("p").style("font-size",".7em").text("Click on the text box above and press Ctrl-A to select all text for copy-pasting.")}function flyindi(e,t){const n=e.node().getBoundingClientRect();const o=t.node().getBoundingClientRect();const s=d3select(document.body).append("div").style("position","absolute").style("border","solid 1px black").style("left",n.left+window.pageXOffset+"px").style("top",n.top+window.pageYOffset+"px").style("width",n.width+"px").style("height",n.height+"px");if(base_zindex){s.style("z-index",base_zindex+3)}s.transition().duration(500).style("left",o.left+window.pageXOffset+"px").style("top",o.top+window.pageYOffset+"px").style("width",o.width+"px").style("height",o.height+"px").on("end",(()=>s.remove()))}function labelbox(e){const t=16;if(!e.color){e.color="#ccc"}const n=e.holder.append("div").style("position","relative").style("padding-top",t/2+"px");if(e.margin){n.style("margin",e.margin)}const o=n.append("div").style("border","solid 1px "+e.color).style("padding",t+"px").style("padding-bottom",t/2+"px");n.append("div").text(e.label).style("position","absolute").style("left","15px").style("top","0px").style("background-color","white").style("color",e.color).style("font-family",font).style("font-size",t+"px").style("padding","0px 10px");return o}function category2legend(e,t){t.selectAll("*").remove();for(const n in e){const o=e[n];const s=t.append("div").style("display","inline-block").style("white-space","nowrap").style("padding","5px 20px 5px 0px");s.append("div").style("display","inline-block").style("background-color",o.color).style("margin-right","5px").style("padding","0px 4px").html("&nbsp;");s.append("div").style("display","inline-block").style("color",o.color).text(o.label)}}function bulk_badline(e,t){if(window.location.hostname=="viz.stjude.cloud"||window.location.hostname=="pecan.stjude.cloud")return;if(window.sessionStorage.getItem("suppressErrors")?.includes(`"bulk-bad-lines"`))return;const n=newpane({x:400,y:60});n.body.style("margin","20px 10px 10px 10px");n.header.text(t.length+" line"+(t.length>1?"s":"")+" rejected, click to check");if(t.length<=50){for(const[o,s,r]of t){n.body.append("div").classed("sja_clbtext",true).style("margin","3px").text("Line "+o+": "+s).on("click",(()=>{const t=newpane({x:500,y:60});t.header.text("Line "+o);t.body.style("margin","10px");const n=t.body.append("table").style("border-spacing","1px").style("border-collapse","separate");let s=true;for(let t=0;t<e.length;t++){const o=n.append("tr");if(s){o.style("background-color","#ededed")}s=!s;o.append("td").text(e[t]);o.append("td").text(r[t]==undefined?"":r[t])}}))}return}const o=new Map;for(const[e,n,s]of t){if(!o.has(n)){o.set(n,[])}o.get(n).push({number:e,line:s})}const s=[...o];s.sort(((e,t)=>t[1].length-e[1].length));for(const[t,o]of s){const s=o[0];n.body.append("div").classed("sja_menuoption",true).style("margin","5px").text("Line "+s.number+": "+t+(o.length>1?" (total "+o.length+" lines)":"")).on("click",(()=>{const t=newpane({x:500,y:60});t.header.text("Line "+s.number);const n=t.body.style("margin","10px").append("table");let o=true;for(let t=0;t<e.length;t++){const r=n.append("tr");if(o){r.style("background-color","#ededed")}o=!o;r.append("td").text(e[t]);r.append("td").text(s.line[t]==undefined?"":s.line[t])}}))}}function ensureisblock(e){if(!e)return"No Block{} object given";if(typeof e!="object")return"Block is not an object";if(!e.error)return"method block.error() missing";if(!e.genome)return"block.genome missing";return null}function mclasscolorchangeui(e){e.d.append("p").html('<span style="color:#858585;font-size:.7em">EXAMPLE</span> M ; red');const t=e.d.append("textarea").attr("cols",25).attr("rows",5).attr("placeholder","One class per line, join color and class code by semicolon.");const n=e.d.append("div");n.append("button").text("Submit").on("click",(()=>{const e=t.property("value").trim();if(!e)return;o.text("");const n=[];for(const t of e.split("\n")){const e=t.split(";");if(e.length!=2)return o.text("no separator in line: "+t);const s=e[0].trim();const r=e[1].trim();if(!s||!r)return o.text("wrong line: "+t);if(!mclass[s])return o.text("wrong class: "+s);n.push([s,r])}if(n.length){for(const[e,t]of n){mclass[e].color=t}mclasscolor2table(s);o.text("New color set!")}}));n.append("button").text("Clear").on("click",(()=>{t.property("value","");o.text("")}));const o=n.append("span").style("margin-left","10px");const s=e.d.append("div").style("margin-top","5px");mclasscolor2table(s);e.d.append("p").style("font-size",".8em").html("<a href=https://en.wikipedia.org/wiki/Web_colors target=_blank>Use color names</a>, or #ff0000 or rgb(255,0,0)")}function mclasscolor2table(e,t){e.style("border-spacing","3px").selectAll("*").remove();const n=e.append("tr").style("color","#858585").style("font-size",".7em");n.append("td").text("CLASS");n.append("td").attr("colspan",2).text("LABEL, COLOR");for(const n in mclass){const o=mclass[n];if(t&&o.dt!=dtsnvindel)continue;const s=e.append("tr");s.append("td").text(n);{const e=s.append("td").append("span").attr("class","sja_mcdot").style("background-color",o.color).html("&nbsp;&nbsp;");if(n=="Blank")e.style("border","solid 1px #eee")}s.append("td").text(o.label).style("color",n=="Blank"?"#ddd":o.color)}}const bwSetting={height:1,pcolor:2,ncolor:3,pcolor2:4,ncolor2:5,autoscale:6,fixedscale:7,percentilescale:8,nodotplot:9,usedotplot:10,usedividefactor:11,nodividefactor:12};function tkexists(e,t){for(const n of t){if(n.type!=e.type)continue;switch(e.type){case tkt.bigwig:case tkt.bedj:case tkt.junction:case tkt.mdsjunction:case tkt.mdscnv:case tkt.bampile:case tkt.hicstraw:case tkt.expressionrank:if(e.file&&e.file==n.file||e.url&&e.url==n.url){return n}break;case tkt.bigwigstranded:if(e.strand1&&n.strand1&&e.strand1.file==n.strand1.file&&e.strand1.url==n.strand1.url){if(e.strand2&&n.strand2&&e.strand2.file==n.strand2.file&&e.strand2.url==n.strand2.url){return n}}break}}return null}function ranksays(e){if(e>=100)return"HIGHEST";if(e>=90)return"HIGH "+e+"%";if(e>=70)return"high "+e+"%";if(e>=30)return e+"%";if(e>=10)return"low "+e+"%";if(e>0)return"LOW "+e+"%";return"LOWEST"}function rgb2hex(e){if(e[0]=="#")return e;const t=e.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);return t&&t.length===4?"#"+("0"+parseInt(t[1],10).toString(16)).slice(-2)+("0"+parseInt(t[2],10).toString(16)).slice(-2)+("0"+parseInt(t[3],10).toString(16)).slice(-2):""}function keyupEnter(e){return e.code=="Enter"||e.code=="NumpadEnter"}function may_findmatchingsnp(e,t,n,o){if(!n||!n.hasSNP)return;const s={byCoord:true,genome:n.name,chr:e,ranges:[],alleleLst:o};for(const e of t){if(Number.isFinite(e)){s.ranges.push({start:e,stop:e+1})}else if(e.start&&e.stop){s.ranges.push(e)}}return dofetch("snp",s).then((e=>{if(e.error)throw e.error;return e.results}))}function snp_printhtml(e,t){t.append("a").text(e.name).attr("href","https://www.ncbi.nlm.nih.gov/snp/"+e.name).attr("target","_blank");t.append("div").attr("class","sja_tinylogo_body").text(e.observed);t.append("div").attr("class","sja_tinylogo_head").text("ALLELE")}function clinvar_printhtml(e,t){t.append("div").style("display","inline-block").style("background",e.bg).style("padding","3px").append("a").attr("href","https://www.ncbi.nlm.nih.gov/clinvar/variation/"+e.id).attr("target","_blank").style("color",e.textcolor).text(e.value).style("font-size",".9em").style("text-decoration","none")}function gmlst2loci(e){const t=[];for(const n of e){let e=true;for(const o of t){if(n.chr==o.chr&&Math.max(n.start,o.start)<Math.min(n.stop,o.stop)){o.start=Math.min(o.start,n.start);o.stop=Math.max(o.stop,n.stop);e=false}}if(e){t.push({name:n.isoform,chr:n.chr,start:n.start,stop:n.stop})}}return t}function tab2box(e,t,n,o){const s=e.append("table").style("border-spacing","0px").style("border-collapse","separate").append("tr");const r=s.append("td").style("vertical-align","top").style("padding","10px 0px 10px 10px");const i=s.append("td").style("vertical-align","top").style("border-left","solid 1px #aaa").style("padding","10px");const a=t.findIndex((e=>e.active))==-1?false:true;if(o){r.append("div").style("padding","5px 10px").style("margin","5px 5px 10px 5px").style("font-weight","550").text(o)}for(let e=0;e<t.length;e++){const o=t[e];o.tab=r.append("div").style("padding","5px 10px").style("margin","0px").style("border-top","solid 1px #ddd").style("border-radius","0px").classed("sja_menuoption",!a&&e!=0).html(o.label);o.box=i.append("div").style("padding","3px").style("display",!a&&e==0||o.active?"block":"none");if(n&&o.callback||!a&&e==0&&o.callback||o.active){o.callback(o.box);delete o.callback}if(a)o.tab.classed("sja_menuoption",!o.active);o.tab.on("click",(()=>{if(o.box.style("display")!="none"){o.tab.classed("sja_menuoption",true);o.box.style("display","none")}else{o.tab.classed("sja_menuoption",false);appear$1(o.box);for(let n=0;n<t.length;n++){if(e!=n){t[n].tab.classed("sja_menuoption",true);t[n].box.style("display","none")}}}if(o.callback){o.callback(o.box);delete o.callback}}))}}function tab_wait(e){return e.append("div").style("margin","30px").text("Loading...")}var client=Object.freeze({__proto__:null,dofetch:dofetch,dofetch2:dofetch2,dofetch3:dofetch3,Menu:Menu,first_genetrack_tolist:first_genetrack_tolist,make_table_2col:make_table_2col,fillbar:fillbar,font:font,unspecified:unspecified,colorinframe:colorinframe,coloroutframe:coloroutframe,colorbgleft:colorbgleft,colorbgright:colorbgright,colorantisense:colorantisense,colorctx:colorctx,textlensf:textlensf,get base_zindex(){return base_zindex},tkt:tkt,gmmode:gmmode,domaincolorlst:domaincolorlst,appear:appear$1,disappear:disappear$1,tip:tip,sayerror:sayerror$1,axisstyle:axisstyle,newpane:newpane,getdomaintypes:getdomaintypes,sketchSplicerna:sketchSplicerna,sketchGmsum:sketchGmsum,sketchRna:sketchRna,sketchProtein2:sketchProtein2,sketchGene:sketchGene,sketchProtein:sketchProtein,newpane3:newpane3,to_svg:to_svg,filetypeselect:filetypeselect,export_data:export_data,flyindi:flyindi,labelbox:labelbox,category2legend:category2legend,bulk_badline:bulk_badline,ensureisblock:ensureisblock,mclasscolorchangeui:mclasscolorchangeui,mclasscolor2table:mclasscolor2table,bwSetting:bwSetting,tkexists:tkexists,ranksays:ranksays,rgb2hex:rgb2hex,keyupEnter:keyupEnter,may_findmatchingsnp:may_findmatchingsnp,snp_printhtml:snp_printhtml,clinvar_printhtml:clinvar_printhtml,gmlst2loci:gmlst2loci,tab2box:tab2box,tab_wait:tab_wait});function debounce(e,t,n){var o,s,r,i,a;if(null==t)t=100;function l(){var c=Date.now()-i;if(c<t&&c>=0){o=setTimeout(l,t-c)}else{o=null;if(!n){a=e.apply(r,s);r=s=null}}}var c=function(){r=this;s=arguments;i=Date.now();var c=n&&!o;if(!o)o=setTimeout(l,t);if(c){a=e.apply(r,s);r=s=null}return a};c.clear=function(){if(o){clearTimeout(o);o=null}};c.flush=function(){if(o){a=e.apply(r,s);r=s=null;clearTimeout(o);o=null}};return c}debounce.debounce=debounce;var debounce_1=debounce;function gene_searchbox(e){const t=e.div.append("input").attr("placeholder","Search gene").style("width",e.width||"100px");const n=e.resultdiv||(e.tip?e.tip.d:tip.d);function o(){if(e.resultdiv){e.resultdiv.selectAll("*").remove()}else if(e.tip){e.tip.hide()}else{tip.hide()}}t.on("keyup",(t=>{const s=t.target.value;if(s.length<=1){o();return}if(keyupEnter(t)){const t=n.select(".sja_menuoption");if(t.size()>0){e.callback(t.text());o()}return}r()}));t.node().focus();function s(){dofetch("genelookup",{genome:e.genome,input:t.property("value")}).then((s=>{if(s.error)throw s.error;if(!s.hits)throw".hits[] missing";if(e.resultdiv){e.resultdiv.selectAll("*").remove()}else if(e.tip){e.tip.clear().showunder(t.node())}else{tip.clear().showunder(t.node())}for(const t of s.hits){n.append("div").attr("class","sja_menuoption").text(t).on("click",(()=>{e.callback(t);o()}))}})).catch((e=>{n.append("div").text(e.message||e);if(e.stack)console.log(e.stack)}))}const r=debounce_1.debounce(s,300)}function findgenemodel_bysymbol(e,t){return dofetch3("genelookup",{body:{deep:1,input:t,genome:e}}).then((e=>{if(e.error)throw e.error;if(!e.gmlst||e.gmlst.length==0)return null;return e.gmlst})).catch((e=>{throw e}))}function styleInject(e,t){if(t===void 0)t={};var n=t.insertAt;if(!e||typeof document==="undefined"){return}var o=document.head||document.getElementsByTagName("head")[0];var s=document.createElement("style");s.type="text/css";if(n==="top"){if(o.firstChild){o.insertBefore(s,o.firstChild)}else{o.appendChild(s)}}else{o.appendChild(s)}if(s.styleSheet){s.styleSheet.cssText=e}else{s.appendChild(document.createTextNode(e))}}var css_248z='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type="button"],\n[type="reset"],\n[type="submit"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type="button"]::-moz-focus-inner,\n[type="reset"]::-moz-focus-inner,\n[type="submit"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type="button"]:-moz-focusring,\n[type="reset"]:-moz-focusring,\n[type="submit"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type="checkbox"],\n[type="radio"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type="number"]::-webkit-inner-spin-button,\n[type="number"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type="search"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type="search"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n\npre code.hljs{display:block;overflow-x:auto;padding:1em}\n\ncode.hljs{padding:3px 5px}\n\n/*!\n Theme: GitHub\n Description: Light theme as seen on github.com\n Author: github.com\n Maintainer: @Hirse\n Updated: 2021-05-15\n\n Outdated base version: https://github.com/primer/github-syntax-light\n Current colors taken from GitHub\'s CSS\n*/\n\n.hljs{color:#24292e;background:#fff}\n\n.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}\n\n.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}\n\n.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}\n\n.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}\n\n.hljs-built_in,.hljs-symbol{color:#e36209}\n\n.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}\n\n.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}\n\n.hljs-subst{color:#24292e}\n\n.hljs-section{color:#005cc5;font-weight:700}\n\n.hljs-bullet{color:#735c0f}\n\n.hljs-emphasis{color:#24292e;font-style:italic}\n\n.hljs-strong{color:#24292e;font-weight:700}\n\n.hljs-addition{color:#22863a;background-color:#f0fff4}\n\n.hljs-deletion{color:#b31d28;background-color:#ffeef0}\n\n/*\nhtml {\n height:100%;\n}\nbody {\n min-height:100%;\n}\ntable {\n font-size:1em;\n border-spacing:1px;\n border-collapse:separate;\n}\n*/\n\n/***************************************\nCSS properties that are not covered \nby normalize.css are covered here\n****************************************/\n\nh2 {\n margin-block-start: 0.83em;\n margin-block-end: 0.83em;\n}\n\n/***************************************\n tag-based styles\n\n prevent embedder styles from overriding\n the styles within pp-controlled divs\n****************************************/\n\n/* use default browser styles within pp-controlled divs */\n\n/* using the !important flag:\n- this flag is used to override conflicting styles\n- this flag will override both embedder styling and inline styling\n- it is not necessary to use this flag to prevent embedder styles from overriding pp styles, because specifying styles within pp-specific classes will usually prevent this issue\n- the only time when it is necessary to use this flag is when (1) the conflicting styling also has an !important flag or (2) the conflicting styling is also specified in this same file\n*/\n\n.sja_root_holder {\n /*background-color: #fff;*/\n}\n\n.sja_root_holder,\n.sja_menu_div,\n.sja_pane {\n all: initial;\n /* block inheritance for all properties */\n}\n\n.sja_root_holder table,\n.sja_menu_div table,\n.sja_pane table {\n border-collapse: separate;\n border-spacing: 2px;\n}\n\n.sja_root_holder svg {\n display: inline-block;\n}\n\n/*\n override the thicker button border\n that results when a button\'s \n border-radius: 0 which seems to override\n all associated styles of \n -webkit-appearance: button;\n*/\n\n.sja_root_holder button,\n.sja_menu_div button,\n.sja_pane button {\n padding: 2px 3px;\n border-width: 1px;\n border-style: solid;\n border-radius: 3px;\n box-shadow: inset 0 0 0 99999px rgba(255, 255, 255, 0.3);\n font-family: Arial;\n color: black;\n background-color: buttonface;\n border-color: buttonborder;\n}\n\n.sja_root_holder button:disabled,\n.sja_menu_div button:disabled,\n.sja_pane button:disabled {\n background-color: rgba(239, 239, 239, 0.3);\n color: rgba(16, 16, 16, 0.3);\n border-color: rgba(118, 118, 118, 0.3);\n}\n\n.sja_root_holder button:hover,\n.sja_menu_div button:hover,\n.sja_pane button:hover {\n box-shadow: none;\n}\n\n.sja_root_holder label,\n.sja_menu_div label,\n.sja_pane label {\n margin-bottom: 0;\n}\n\n.sja_root_holder a,\n.sja_menu_div a,\n.sja_pane a,\n.linkText {\n color: rgb(0, 0, 238);\n cursor: pointer;\n text-decoration: underline;\n}\n\n.sja_root_holder input,\n.sja_menu_div input,\n.sja_pane input {\n padding: 1px 3px;\n margin: 2px 5px;\n border: 1px solid #ccc;\n}\n\n.sja_root_holder select,\n.sja_menu_div select,\n.sja_pane select {\n padding: 1px 3px;\n padding-right: 30px; /* padding between text and arrow */\n background-size: auto;\n background-position: right;\n}\n\n.sja_root_holder textarea,\n.sja_menu_div textarea,\n.sja_pane textarea {\n padding: 2px;\n}\n\n.sja_root_holder input[type="search"].tree_search {\n -webkit-appearance: searchfield;\n}\n\n.sja_root_holder ul {\n display: block;\n list-style-type: disc;\n margin-block-start: 1em;\n margin-block-end: 1em;\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: 40px;\n}\n\n.sja_root_holder ul ul {\n list-style-type: circle;\n}\n\n.sja_root_holder li {\n display: list-item;\n text-align: -webkit-match-parent;\n}\n\n/*************************\n class-specific styles\n*************************/\n\n.sja_errorbar {\n position: relative;\n padding: 5px 50px 5px 10px;\n background-color: rgba(200, 0, 0, .1);\n color: rgba(190, 0, 0, .5);\n border: solid 1px rgba(200, 0, 0, .2);\n /*border-width: 1px 0px;*/\n}\n\n.sja_errorbar>:nth-child(2) {\n position: absolute;\n padding: 5px 10px;\n cursor: default;\n top: 0px;\n right: 10px;\n}\n\n.sja_inset_a {\n background-color: #ebedeb;\n box-shadow: inset 0px 0px 14px 0px #858585;\n padding: 5px 10px;\n}\n\n.sja_menu,\n.sja_menu_persist,\n.sja_tooltip {\n position: absolute;\n background-color: white;\n font-family: Arial;\n z-index: 1000;\n}\n\n/* /client/src/app.js start */\n\n.sja_menuoption {\n color: black;\n padding: 5px 10px;\n cursor: default;\n background-color: #f2f2f2;\n margin: 1px;\n border-radius: 5px;\n}\n\n.sja_menuoption_not_interactive {\n padding: 5px 10px;\n cursor: default;\n margin: 1px;\n}\n\n.sja_sharp_border {\n border-radius: 0px;\n}\n\n.sja_menuoption:hover {\n background-color: #e6e6e6\n}\n\n.sja_menuoption:active {\n color: #cc0000;\n background-color: #FCE2E1;\n}\n\n/* /client/src/app.js end */\n\n.sja_filter_tag_btn {\n display: inline-block;\n color: black;\n padding: 5px 8px;\n background-color: #cfe2f3;\n cursor: default;\n}\n\n/* .sja_filter_tag_btn:hover { opacity: 0.8; cursor:default} */\n\n.sja_filter_tag_btn:active {\n color: #cc0000;\n opacity: 0.6;\n}\n\n.ts_pill:hover,\n.tvs_pill:hover {\n opacity: 0.8;\n cursor: default\n}\n\n.sjpp_apply_btn {\n background-color: #d0e0e3;\n border-radius: 13px !important; \n padding: 7px 15px !important;\n border: 0px !important;\n}\n\n.sjpp_delete_btn,\n.remove_btn {\n background-color: #f4cccc;\n}\n\n.ts_summary_btn {\n background-color: #d9d2e9;\n}\n\n/* mostly for table tr */\n\n.sja_clb {\n padding: 5px 10px;\n cursor: default;\n}\n\n.sja_clb:hover {\n background: #ffff99;\n}\n\n.sja_clb:active {\n background: #ffcc99;\n}\n\n.sja_clb_selected {\n padding: 5px 10px;\n cursor: default;\n background: #FAF0C8;\n border-bottom: solid 2px #E3CA64;\n}\n\n.sja_clb_selected:hover {\n background: #FCE68B\n}\n\n.sja_clb_selected:active {\n background: #ffcc99\n}\n\n/* table tr, gray highlight */\n\n.sja_clb_gray {\n padding: 5px 10px;\n cursor: default;\n}\n\n.sja_clb_gray:hover {\n background-color: #f1f1f1;\n}\n\n.sja_clb_gray:active {\n background-color: #ffffcc;\n}\n\n.sja_hideable_legend {\n cursor: default;\n}\n\n.sja_hideable_legend:hover {\n background: #ffff99;\n}\n\n.sja_legend_more_btn {\n padding: 3px;\n text-align: center;\n font-size: 0.7em;\n opacity: 0.5;\n cursor: default;\n}\n\n.sja_legend_more_btn:hover {\n text-decoration: underline;\n}\n\n/* text only */\n\n.sja_clbtext2 {\n cursor: default;\n text-decoration: none;\n}\n\n.sja_clbtext2:hover {\n text-decoration: underline;\n}\n\n.sja_clbtext2:active {\n fill: #CC0000;\n color: #CC0000;\n}\n\n.sja_clbtext {\n cursor: default;\n color: black;\n fill: black;\n border-bottom: solid 1px transparent;\n}\n\n.sja_clbtext:hover {\n color: #631318;\n fill: #631318;\n border-color: black;\n}\n\n.sja_clbtext:active {\n color: #CC0000;\n border-color: #cc0000;\n fill: #cc0000;\n}\n\n.sja_clbtextbold {\n cursor: default;\n color: black;\n fill: black;\n font-weight: normal;\n}\n\n.sja_clbtextbold:hover {\n color: #631318;\n fill: #631318;\n font-weight: bold;\n}\n\n.sja_clbtextbold:active {\n color: #CC0000;\n fill: #cc0000;\n font-weight: bold;\n}\n\n.sja_opaque6 {\n opacity: .6;\n cursor: default;\n}\n\n.sja_opaque6:hover {\n opacity: .9;\n}\n\n.sja_opaque8 {\n opacity: .8;\n cursor: default;\n}\n\n.sja_opaque8:hover {\n opacity: 1;\n}\n\n.sja_simpletable tr td {\n border-bottom: solid 1px #ededed;\n}\n\n.sja_mcdot {\n cursor: default;\n border-radius: 8px;\n padding: 1px 2px;\n margin-right: 1px;\n color: white;\n font-size: .8em;\n}\n\n.sja_variantpagesnv {\n cursor: default;\n display: inline-block;\n border-radius: 3px;\n padding: 3px 10px;\n margin-right: 2px;\n color: white;\n background-color: #0099FF;\n opacity: .6;\n}\n\n.sja_variantpagesnv:hover {\n opacity: 1;\n}\n\n.sja_variantpagesnv:active {\n background-color: #3366FF;\n}\n\n.sja_selectsample {\n cursor: default;\n display: inline-block;\n border-radius: 2px;\n border: solid 1px #545454;\n padding: 3px 10px;\n margin-right: 2px;\n color: #545454;\n background-color: white;\n font-size: .8em;\n}\n\n.sja_selectsample:hover {\n background-color: #f1f1f1;\n}\n\n.sja_selectsample:active {\n background-color: #F2E1E3;\n}\n\n.sja_pane {\n position: absolute;\n /*border:solid 1px #ccc;\n */\n box-shadow: 0px 2px 4px 1px #999;\n background-color: white;\n}\n\n.sja_pane>:first-child {\n padding-right: 10px;\n cursor: move;\n background-color: #f0f0f0;\n}\n\n.sja_pane>:nth-child(2) {\n padding: 0px 10px 10px 10px;\n font-family: Arial;\n}\n\n.sja_cursor_hmove {\n cursor: ew-resize;\n}\n\n.sja_svgtext {\n cursor: default;\n fill-opacity: .8\n}\n\n.sja_svgtext2 {\n cursor: default;\n fill: black;\n}\n\n.sja_svgtext2:hover {\n fill: #B30000\n}\n\n.sja_clb5 {\n /* tree button */\n cursor: default;\n display: inline-block;\n border: solid 1px #006600;\n color: #006600;\n background-color: white;\n margin-left: 6px;\n padding: 0px 4px;\n font-size: 80%;\n}\n\n.sja_clb5:hover {\n background-color: #006600;\n color: white;\n}\n\n.sja_clb5:active {\n background-color: #009900;\n}\n\n.sja_clb2 {\n color: black;\n font-family: Courier;\n display: inline-block;\n padding: 1px 5px;\n cursor: default;\n}\n\n.sja_clb2:hover {\n background-color: #ffff99;\n}\n\n.sja_clb2:active {\n background-color: #ccff99;\n}\n\n.sja_clbb {\n /* highlight border */\n border: solid 1px transparent;\n cursor: default;\n}\n\n.sja_clbb:hover {\n border-color: #ccc;\n}\n\n.sja_clbbox {\n cursor: default;\n padding: 2px 5px;\n color: white;\n font-size: .7em;\n font-weight: normal;\n}\n\n.sja_clbbox:hover {\n font-weight: bold;\n}\n\n.sja_tr {\n cursor: default;\n background-color: #f1f1f1;\n}\n\n.sja_tr:hover {\n background-color: white;\n}\n\n.sja_tr:active {\n background-color: #ffffcc;\n}\n\n.sja_tr2 {\n cursor: default;\n}\n\n.sja_tr2:hover {\n background-color: #ffffcc;\n}\n\n.sja_tr2:active {\n background-color: #ffff00;\n}\n\n.sja_aa_disclabel {\n cursor: default;\n}\n\n.sja_aa_discnum {\n cursor: default;\n text-rendering: geometricPrecision;\n}\n\n.sja_aa_skkick:hover {\n stroke: #858585;\n}\n\n.sja_aa_disckick:hover {\n stroke-opacity: 1;\n}\n\n.sja_menuoption_y {\n display: inline-block;\n color: black;\n padding: 2px 4px;\n cursor: default;\n background-color: #E6E5C5;\n margin: 2px;\n}\n\n.sja_menuoption_y:hover {\n background-color: #DEDCA9\n}\n\n.sja_menuoption_y:active {\n background-color: #FFFF99\n}\n\n.sja_menuoption_r {\n display: inline-block;\n color: black;\n padding: 2px 4px;\n cursor: default;\n background-color: #EDDDDE;\n margin: 2px;\n}\n\n.sja_menuoption_r:hover {\n background-color: #E8CFD1\n}\n\n.sja_menuoption_r:active {\n background-color: #FCD9DD\n}\n\n.sja_error2 {\n display: inline-block;\n padding: 5px 50px 5px 10px;\n margin: 10px 20px;\n background-color: rgba(200, 0, 0, .5);\n color: white;\n border-radius: 6px;\n}\n\n.sja_paint {\n position: relative;\n}\n\n.sja_paint>:first-child {}\n\n.sja_paint>:nth-child(2) {\n position: absolute;\n padding: 3px 6px;\n cursor: default;\n top: 10px;\n right: 30px;\n font-size: 80%;\n}\n\n.sja_tree_ul {\n list-style-type: none;\n padding-left: 25px;\n line-height: 1.4;\n}\n\n.sja_input {\n display: inline-block;\n padding: 2px 6px;\n}\n\n.sja_bulkcell {\n display: inline-block;\n width: 3px;\n height: 9px;\n margin: 1px 1px 0px 0px;\n}\n\n.sja_tag {\n display: inline-block;\n margin-left: 10px;\n padding: 1px 3px;\n background-color: #858585;\n color: white;\n font-size: 80%;\n}\n\n.sja_bgbox {\n cursor: default;\n fill: yellow;\n fill-opacity: 0;\n}\n\n.sja_bgbox:hover {\n fill-opacity: .2;\n}\n\n.sja_diseasehm_search_item {\n display: inline-block;\n margin: 3px;\n padding: 2px;\n}\n\n.sja_pulse {\n animation: pulse .5s alternate infinite;\n}\n\n@keyframes pulse {\n from {\n opacity: .2;\n }\n to {\n opacity: 1;\n }\n}\n\n.sja_hm-edittool-table td {\n padding: 0 2px;\n cursor: pointer;\n text-align: center;\n font-size: 14px;\n}\n\n.sja_hm-edittool-table td:hover {\n opacity: 1;\n font-weight: 600;\n}\n\n.sja_tinylogo_head {\n display: inline-block;\n background-color: #858585;\n color: white;\n font-size: .6em;\n padding: 1px 3px;\n}\n\n.sja_tinylogo_body {\n display: inline-block;\n margin-left: 10px;\n background-color: #ededed;\n font-size: .9em;\n color: black;\n padding: 1px 5px;\n}\n\n.sja_handle_green {\n display: inline-block;\n font-size: .9em;\n padding: 3px 6px;\n background-color: #f0f7f1;\n color: #146E17;\n cursor: default;\n}\n\n.sja_handle_green:hover {\n background-color: #D5F0D8;\n}\n\n.sja_handle_green:active {\n background-color: #BAD1BC;\n color: black;\n}\n\n.sja_handle_red {\n display: inline-block;\n font-size: .9em;\n padding: 3px 6px;\n background-color: #F5EBEC;\n color: #991F1F;\n cursor: default;\n}\n\n.sja_handle_red:hover {\n background-color: #F2D8DB;\n}\n\n.sja_handle_red:active {\n background-color: #E3B1B7;\n color: black;\n}\n\n.sja_btn {\n -webkit-appearance: button;\n -moz-appearance: button;\n appearance: button;\n text-decoration: none;\n color: initial;\n}\n\n.sja_button {\n display: inline-block;\n background: white;\n padding: 3px 5px;\n border: solid 1px black;\n opacity: .8;\n cursor: default;\n}\n\n.sja_button:hover {\n opacity: 1;\n}\n\n.sja_button_open {\n display: inline-block;\n background: #ddd;\n padding: 3px 5px;\n border: solid 1px black;\n opacity: .8;\n cursor: default;\n}\n\n.sja_button_open:hover {\n opacity: 1;\n}\n\n.sja_button_fold {\n display: inline-block;\n background: #aaa;\n color: white;\n padding: 3px 5px;\n border: solid 1px black;\n opacity: .8;\n cursor: default;\n}\n\n.sja_button_fold:hover {\n opacity: 1;\n}\n\n.sja-termdb-config-row-label {\n padding: 5px;\n text-align: left;\n vertical-align: middle;\n}\n\n.sjpp-controls-table {\n margin-bottom: 10px;\n}\n\n.sjpp-controls-table tr:hover {\n /*font-weight: 600;*/\n text-shadow:0px 0px 0.5px black;\n background-color: rgba(240, 236, 123, 0.5);\n}\n\n.sja_edit_btn {\n display: inline-block;\n color: black;\n background-color: #f2f2f2;\n border-radius: 5px;\n border: solid 1px #aaa;\n padding: 5px 10px;\n cursor: default;\n margin: 1px;\n font-size: 0.8em;\n margin-left: 20px;\n}\n\n.sja_edit_btn:hover {\n background-color: #e6e6e6\n}\n\n.sja_edit_btn:active {\n color: #cc0000;\n background-color: #FCE2E1;\n}\n\n/* App Drawer style */\n\n.sjpp-appdrawer-cols {\n font-family: Verdana, Geneva, Tahoma, sans-serif;\n font-weight: 500;\n font-size: 17px;\n text-align: left;\n color: #324870;\n margin: 10px 10px 0px 10px;\n}\n\n.sjpp-track, .sjpp-track li {\n display: grid !important;\n grid-template-columns: 2fr 4fr 40px;\n grid-template-areas: \'image header\' \'image blurb\';\n gap: 5px;\n}\n\n.sjpp-app-drawer-card,\n.sjpp-track {\n background-color: white;\n max-width: 400px;\n /* min-width: 320px; */\n border-radius: 5px;\n padding: 0px;\n align-items: center;\n justify-items: left;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n -webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n}\n\n.sjpp-app-drawer-card::after,\n.sjpp-track::after {\n content: "";\n border-radius: 8px;\n position: absolute;\n z-index: -1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);\n opacity: 0;\n -webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);\n}\n\n.sjpp-app-drawer-card:hover,\n.sjpp-track:hover {\n -webkit-transform: scale(1, 1);\n transform: scale(1, 1);\n}\n\n.sjpp-app-drawer-card:hover::after,\n.sjpp-track:hover::after {\n opacity: 1;\n}\n\n.sjpp-track-image {\n grid-area: image;\n width: 75px;\n height: 75px;\n align-self: start;\n justify-self: start;\n}\n\n.sjpp-track-image img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 5px 0px 0px 5px;\n}\n\n.sjpp-app-drawer-card-ribbon{\n grid-area: image;\n overflow: hidden;\n width: 100%;\n height: 100%;\n}\n\n.sjpp-app-drawer-card-ribbon::before,\n.sjpp-app-drawer-card-ribbon::after {\n position: relative;\n z-index: -1;\n content: \'\';\n display: block;\n border-top-color: transparent;\n border-left-color: transparent;\n}\n\n.sjpp-app-drawer-card-ribbon span {\n position: relative;\n display: block;\n width: 100%;\n padding: 1px 0;\n border-color: transparent transparent transparent darkgray;\n box-shadow: 0 2px 7.5px rgba(0, 0, 0, 0.3);\n opacity: 1;\n font-family: \'Lucida Sans\', \'Lucida Sans Regular\', \'Lucida Grande\', \'Lucida Sans Unicode\', Geneva, Verdana, sans-serif;\n transform: rotate(-45deg);\n}\n\n.sjpp-app-drawer-card-ribbon::before {\n top: 0;\n right: 0;\n}\n\n.sjpp-app-drawer-card-ribbon::after {\n bottom: 0;\n left: 0;\n}\n\n.sjpp-track-h {\n grid-area: header;\n font-family: \'Lucida Sans\', \'Lucida Sans Regular\', \'Lucida Grande\', \'Lucida Sans Unicode\', Geneva, Verdana, sans-serif;\n margin-left: 5px;\n padding: 0px;\n}\n\n.sjpp-track-blurb {\n grid-area: blurb;\n font-size: 13px;\n font-weight: 300;\n margin-left: 5px;\n justify-content: center;\n font-style: oblique;\n color: #403f3f;\n}\n\n/* client/src/block.js start */\n\n.sjpp-active-tiny-button {\n\tdisplay: inline-block;\n\tbackground-color: #1C5E86;\n\tfont-size: .8em;\n\tcolor: white;\n\tpadding: 1px 5px;\n\tmargin-right: 5px;\n\tborder-radius: 4px;\n}\n\n.sjpp-plus-button\n{\n display: inline-block;\n margin: 1px;\n border: solid 1px #545454;\n font-size: .9em;\n cursor: default;\n padding: 2px 5px;\n}\n\n.sjpp-dshandleholder\n{\n display: inline-block;\n margin: 1px;\n border: solid 1px #545454;\n font-size: .9em;\n cursor: default;\n}\n\n.sjpp-dslabel\n{\n display: inline-block;\n color: black;\n padding: 2px 4px;\n\n}\n\n/* client/src/block.js end */\n\n/* client/src/app.js start */\n\n.sjpp-input-div-gene-pos\n{\n display: inline-block;\n padding-right: 5px;\n}\n\n.sjpp-input-gene-pos\n{\n border: solid 1px #545454;\n padding: 6px 10px;\n border-radius: 5px;\n}\n\n.sjpp-genome-select-div\n{\n display: inline-block;\n padding-left: 5px;\n}\n\n.sjpp-genome-select\n{\n border-radius: 5px;\n margin: 1px 20px 1px 10px;\n}\n\n.sjpp-output-sandbox-title\n{\n border-radius:4px; \n color:white; \n background-color: #969696; \n padding: 1px 5px; \n display:inline-block; \n font-size:0.8em; \n margin-left:4px;\n}\n\n/* client/src/app.js end */\n\n/* client/dom/sandbox.ts start */\n\n.sjpp-output-sandbox-header\n{\n display: inline-block;\n margin: 5px 10px;\n padding-right: 8px;\n margin-bottom: 0px;\n /* box-shadow:2px 0px 2px #f2f2f2; */\n border-radius: 5px 5px 0 0;\n /* background-color: #f2f2f2; */\n z-index: 99;\n}\n\n.sjpp-output-sandbox-content\n{\n margin: 5px 10px;\n margin-top: 0px;\n padding-right: 8px;\n display: inline-block;\n /* box-shadow: 2px 2px 10px #f2f2f2; */\n border: solid 1px #ccc;\n border-top: solid 1px white;\n border-radius: 0 0 5px 5px;\n}\n\n.sjpp-output-sandbox-collapse-btn,\n.sjpp-output-sandbox-expand-btn,\n.sjpp-output-sandbox-close-bt\n{\n /* display: inline-block; */\n /* margin: 0px; */\n /* border-right: solid 2px white; */\n font-size: 16px;\n cursor: default;\n}\n\n.sjpp-output-sandbox-close-bt {\n border-radius: 5px 0 0 0;\n}\n\n/* \nSeparated padding for sandbox buttons to fix close button\'s\nright, white border not extending to total height of\nsandbox header\n*/\n\n.sjpp-output-sandbox-collapse-btn,\n.sjpp-output-sandbox-expand-btn {\n padding: 4px 10px;\n}\n\n.sjpp-output-sandbox-close-bt {\n padding: 8px 10px;\n}\n\n/* client/dom/sandbox.ts end */\n\n.sjpp_row_wrapper:hover {\n background: #fcfcca !important; \n}\n\n/*.sjpp_row_wrapper:nth-child(odd) {background: rgb(237, 237, 237)}*/\n\n.sjpp_table_header {\n font-family: \'Arial\';\n font-size: 1em;\n text-align: left;\n position: sticky;\n top: 0;\n opacity: 0.7;\n font-weight: normal;\n}\n\n.sjpp_table_item {\n padding: 3px 5px;\n font-size: 1em;\n text-align: left;\n}\n\n.sjpp_show_scrollbar{\n overflow-y: scroll;\n overflow-x: scroll;\n\n}\n\n.sjpp_show_scrollbar::-webkit-scrollbar{\n background-color: white;\n border-radius: 10px;\n width: 18px;\n}\n\n/* This will handle the thumb (scrolling part) */\n\n.sjpp_show_scrollbar::-webkit-scrollbar-thumb{\n background-color: grey;\n border-radius: 10px;\n border: 5px solid white;\n\n}\n\n.sjpp_show_scrollbar::-webkit-scrollbar-thumb:vertical{\n height: 18px!important;\n width: 18px;\n}\n\n.sjpp-matrix-series-group-label-g text,\n.sjpp-matrix-series-label-g text,\n.sjpp-matrix-term-group-label-g text,\n.sjpp-matrix-term-label-g text,\n.sjpp-matrix-label text {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n -user-select: none;\n}\n\n.sjpp-nav\n{\n position: sticky;\n background-color: white;\n width: 100%;\n z-index: 10;\n top: 0px;\n left: 0px;\n padding: 30px 0;\n}\n\n.add_term_btn {\n border-radius: 6px;\n}\n\n#sjpp-loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color:rgba(255, 255, 255, 0.8);\n}\n\n.sjpp-spinner {\n position: absolute;\n left: 50%;\n top: 30%;\n height: 60px;\n width: 60px;\n margin: 0px auto;\n -webkit-animation: rotation .6s infinite linear;\n -moz-animation: rotation .6s infinite linear;\n -o-animation: rotation .6s infinite linear;\n animation: rotation .6s infinite linear;\n border-left: 6px solid rgba(0, 174, 239, .15);\n border-right: 6px solid rgba(0, 174, 239, .15);\n border-bottom: 6px solid rgba(0, 174, 239, .15);\n border-top: 6px solid rgba(0, 174, 239, .8);\n border-radius: 100%;\n}\n\n@-webkit-keyframes rotation {\n from {-webkit-transform: rotate(0deg);}\n to {-webkit-transform: rotate(359deg);}\n }\n\n@-moz-keyframes rotation {\n from {-moz-transform: rotate(0deg);}\n to {-moz-transform: rotate(359deg);}\n }\n\n@-o-keyframes rotation {\n from {-o-transform: rotate(0deg);}\n to {-o-transform: rotate(359deg);}\n }\n\n@keyframes rotation {\n from {transform: rotate(0deg);}\n to {transform: rotate(359deg);}\n }\n';styleInject(css_248z);function init_bulk_flag(e){if(!e){return null}const t={};for(const e in mclass){t[mclass[e].label.toUpperCase()]=e}return{genome:e,mclasslabel2key:t,data:{},sample2disease:{},patient2st:{},good:0,geneToUpper:true,snv:{loaded:false,header:null,badlines:[],missense:0,silent:0},svjson:{loaded:false,header:null,badlines:[]},fusion:{loaded:false,header:null,badlines:[],original:[]},sv:{loaded:false,header:null,badlines:[],original:[]},cnv:{loaded:false,header:null,badlines:[]},itd:{loaded:false,header:null,badlines:[]},del:{loaded:false,header:null,badlines:[]},truncation:{loaded:false,header:null,badlines:[]}}}function parsesample(e,t,n,o,s){let r=moriginsomatic;if(e.sampletype){const t=e.sampletype.toLowerCase();switch(t){case"relapse":r=moriginrelapse;break;case"germline":r=morigingermline;break}if(e.sample){if(e.patient);else{e.patient=e.sample+" "+e.sampletype}}else{if(e.patient){e.sample=e.patient+" "+e.sampletype}}}else{if(e.patient){if(e.sample){e.sampletype=e.sample}else{e.sample=e.sampletype=e.patient}}else{if(e.sample){e.sampletype=e.sample}}}if(e.origin){const t=e.origin.toLowerCase();switch(t){case"r":case"relapse":r=moriginrelapse;e.isrim2=true;break;case"g":case"germline":r=morigingermline;e.isrim1=true;break;case"gp":case"germline pathogenic":r=morigingermlinepathogenic;e.isrim1=true;break;case"gnp":case"germline nonpathogenic":case"germline non-pathogenic":r=morigingermlinenonpathogenic;e.isrim1=true;break;case"s":case"somatic":case"diagnosis":r=moriginsomatic;break}}e.origin=r;if(!e.sample&&!e.patient){return}const i="no patient/individual name";if(e.patient){if(!t.patient2st[e.patient]){t.patient2st[e.patient]={}}t.patient2st[e.patient][e.sampletype]=e.sample}else{if(!t.patient2st[i]){t.patient2st[i]={}}t.patient2st[i][e.sampletype]=e.sample}if(e.sample){if(e.disease){if(e.sample in t.sample2disease){if(e.disease!=t.sample2disease[e.sample]){t.snv.badlines.push([n,'conflict of disease types for sample "'+e.sample+'": '+e.disease+", "+t.sample2disease[e.sample],o]);return true}}else{t.sample2disease[e.sample]=e.disease}}}return false}function parseheader$6(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid file header for snv/indel";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("annovar_gene","annovar_sj_gene","gene","genename","gene_symbol","hugo_symbol");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_aachange","amino_acid_change","annovar_sj_aachange","aachange","protein_change","variant");if(s==-1)return"amino_acid_change missing from header";n[s]="mname";s=o("annovar_class","class","mclass","variant_class","variant_classification","annovar_sj_class");if(s==-1)return"variant_class missing from header";n[s]="class";s=o("chromosome","chr");if(s==-1)return"chromosome missing from header";n[s]="chr";s=o("wu_hg19_pos","start","start_position","chr_position","position");if(s==-1)return"start missing from header";n[s]="pos";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("quantitative_measurements");if(s!=-1)n[s]="qmset";s=o("mutant_reads_in_case","mutant_in_tumor","tumor_readcount_alt");if(s!=-1)n[s]="maf_tumor_v1";s=o("total_reads_in_case","total_in_tumor","tumor_readcount_total");if(s!=-1)n[s]="maf_tumor_v2";s=o("mutant_reads_in_control","mutant_in_normal","normal_readcount_alt");if(s!=-1)n[s]="maf_normal_v1";s=o("total_reads_in_control","total_in_normal","normal_readcount_total");if(s!=-1)n[s]="maf_normal_v2";s=o("cdna_change");if(s!=-1)n[s]="cdna_change";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";s=o("origin");if(s!=-1)n[s]="origin";s=o("cancer","disease","diagnosis");if(s!=-1)n[s]="disease";t.snv.header=n;t.snv.loaded=true;return false}function parseline$6(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.snv.header.length;e++){if(o[e]==undefined)break;s[n.snv.header[e]]=o[e]}if(!s.gene){n.snv.badlines.push([e,"missing gene",o]);return}if(s.gene.toUpperCase()=="UNKNOWN"){n.snv.badlines.push([e,"gene name is UNKNOWN",o]);return}if(!s.isoform){n.snv.badlines.push([e,"missing isoform",o]);return}if(!s.mname){s.mname=s.cdna_change;if(!s.mname){n.snv.badlines.push([e,"missing amino acid change",o]);return}}else{if(s.mname.indexOf("p.")==0){s.mname=s.mname.replace(/^p\./,"")}}if(!s.class){n.snv.badlines.push([e,"missing mutation class",o]);return}let r=n.mclasslabel2key[s.class.toUpperCase()];if(r){s.class=r}else{r=mclasstester(s.class);if(r){s.class=r}else{n.snv.badlines.push([e,"wrong mutation class: "+s.class,o]);return}}if(parsesample(s,n,e,o,n.snv.badlines)){return}if(!s.chr){n.snv.badlines.push([e,"missing chromosome",o]);return}if(s.chr.toLowerCase().indexOf("chr")!=0){s.chr="chr"+s.chr}if(!s.pos){n.snv.badlines.push([e,"missing chromosome position",o]);return}const i=Number.parseInt(s.pos);if(Number.isNaN(i)){n.snv.badlines.push([e,"invalid chromosome position",o]);return}s.pos=i-1;if(s.maf_tumor_v2!=undefined&&s.maf_tumor_v1!=undefined){if(s.maf_tumor_v2=="");else{let t=Number.parseInt(s.maf_tumor_v1),r=Number.parseInt(s.maf_tumor_v2);if(Number.isNaN(t)||Number.isNaN(r)){n.snv.badlines.push([e,"invalid maf_tumor mutant and/or total read count",o]);return}s.maf_tumor={f:t/r,v1:t,v2:r}}delete s.maf_tumor_v1;delete s.maf_tumor_v2}if(s.maf_normal_v1!=undefined&&s.maf_normal_v2!=undefined){if(s.maf_normal_v2=="");else{let t=Number.parseInt(s.maf_normal_v1),r=Number.parseInt(s.maf_normal_v2);if(Number.isNaN(t)||Number.isNaN(r)){n.snv.badlines.push([e,"invalid maf_normal mutant and/or total read count",o]);return}s.maf_normal={f:t/r,v1:t,v2:r}}delete s.maf_normal_v1;delete s.maf_normal_v2}n.good++;if(s.class=="M"){n.snv.missense++}else if(s.class=="S"){n.snv.silent++}const a=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!n.data[a]){n.data[a]=[]}s.dt=dtsnvindel;n.data[a].push(s)}function parseheader$5(e,t,n){const o=e.toLowerCase().split("\t");if(o.length<=1)return"invalid file header for fusions";const s=(...e)=>{for(const t of e){const e=o.indexOf(t);if(e!=-1)return e}return-1};let r=s("gene_a","gene1","genea");if(r==-1)return"gene_a missing from header";o[r]="gene1";r=s("gene_b","gene2","geneb");if(r==-1)return"gene_b missing from header";o[r]="gene2";r=s("chr_a","chr1","chra");if(r==-1)return"chr_a missing from header";o[r]="chr1";r=s("chr_b","chr2","chrb");if(r==-1)return"chr_b missing from header";o[r]="chr2";r=s("pos_a","position_a","position1","posa");if(r==-1)return"pos_a missing from header";o[r]="position1";r=s("pos_b","position_b","position2","posb");if(r==-1)return"pos_b missing from header";o[r]="position2";r=s("isoform_a","refseq_a","refseq1","isoform1","sv_refseqa");if(r==-1)return"isoform_a missing from header";o[r]="isoform1";r=s("isoform_b","refseq_b","refseq2","isoform2","sv_refseqb");if(r==-1)return"isoform_b missing from header";o[r]="isoform2";r=s("strand_a","orta");if(r==-1)return"strand_a missing from header";o[r]="strand1";r=s("strand_b","ortb");if(r==-1)return"strand_b missing from header";o[r]="strand2";r=s("sample","sample_name","tumor_sample_barcode");if(r!=-1)o[r]="sample";r=s("patient","donor","target_case_id");if(r!=-1)o[r]="patient";r=s("sampletype","sample type","sample_type");if(r!=-1)o[r]="sampletype";r=s("disease");if(r!=-1)o[r]="disease";r=s("origin");if(r!=-1)o[r]="origin";if(n){t.sv.loaded=true;t.sv.header=o}else{t.fusion.loaded=true;t.fusion.header=o}return false}function parseline$5(e,t,n,o){if(t==""||t[0]=="#")return;const s=t.split("\t");const r={};const i=o?n.sv.header:n.fusion.header;const a=o?n.sv.badlines:n.fusion.badlines;for(let e=0;e<i.length;e++){r[i[e]]=s[e]}if(!r.chr1){a.push([e,"missing chr1",s]);return}if(r.chr1.toLowerCase().indexOf("chr")!=0){r.chr1="chr"+r.chr1}if(!r.chr2){a.push([e,"missing chr2",s]);return}if(r.chr2.toLowerCase().indexOf("chr")!=0){r.chr2="chr"+r.chr2}let l=r.position1;if(!l){a.push([e,"missing position1",s]);return}let c=Number.parseInt(l);if(Number.isNaN(c)||c<=0){a.push([e,"invalid value for position1",s]);return}r.position1=c;l=r.position2;if(!l){a.push([e,"missing position2",s]);return}c=Number.parseInt(l);if(Number.isNaN(c)||c<=0){a.push([e,"invalid value for position2",s]);return}r.position2=c;if(parsesample(r,n,e,s)){return}if(r.isoform1&&r.isoform1.indexOf(",")!=-1){const e=r.isoform1.split(",");r.isoform1=undefined;for(const t of e){if(t!="")r.isoform1=t}}if(r.isoform2&&r.isoform2.indexOf(",")!=-1){const e=r.isoform2.split(",");r.isoform2=undefined;for(const t of e){if(t!="")r.isoform2=t}}if(!r.gene1){r.isoform1=undefined}if(!r.gene2){r.isoform2=undefined}if(r.gene1){n.good++;const e={dt:o?dtsv:dtfusionrna,class:o?mclasssv:mclassfusionrna,isoform:r.isoform1,mname:r.gene2||r.chr2,sample:r.sample,patient:r.patient,sampletype:r.sampletype,origin:r.origin,disease:r.disease,pairlst:[{a:{name:r.gene1,isoform:r.isoform1,strand:r.strand1,chr:r.chr1,position:r.position1},b:{name:r.gene2,isoform:r.isoform2,strand:r.strand2,chr:r.chr2,position:r.position2}}]};const t=n.geneToUpper?r.gene1.toUpperCase():r.gene1;if(!n.data[t]){n.data[t]=[]}n.data[t].push(e)}if(r.gene2&&r.gene2!=r.gene1){n.good++;const e={dt:o?dtsv:dtfusionrna,class:o?mclasssv:mclassfusionrna,isoform:r.isoform2,mname:r.gene1||r.chr1,sample:r.sample,patient:r.patient,sampletype:r.sampletype,origin:r.origin,disease:r.disease,pairlst:[{a:{name:r.gene1,isoform:r.isoform1,strand:r.strand1,chr:r.chr1,position:r.position1},b:{name:r.gene2,isoform:r.isoform2,strand:r.strand2,chr:r.chr2,position:r.position2}}]};const t=n.geneToUpper?r.gene2.toUpperCase():r.gene2;if(!n.data[t]){n.data[t]=[]}n.data[t].push(e)}}function duplicate$1(e){const t={};for(const n in e){if(n=="pairlst")continue;const o=e[n];const s=typeof o;if(s=="object"){continue}t[n]=o}if(e.pairlst){t.pairlst=[];for(const n of e.pairlst){const e={};for(const t in n){if(t=="a"||t=="b"||t=="interstitial"){continue}e[t]=n[t]}if(n.a){e.a={};for(const t in n.a){const o=n.a[t];if(typeof o=="object"){continue}e.a[t]=o}}if(n.b){e.b={};for(const t in n.b){const o=n.b[t];if(typeof o=="object"){continue}e.b[t]=o}}if(n.interstitial){e.interstitial={};for(const t in n.interstitial){const o=n.interstitial[t];if(typeof o=="object"){continue}e.interstitial[t]=o}}t.pairlst.push(e)}}return t}function parseheader$4(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid file header for svjson";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("sample");if(s!=-1)n[s]="sample";s=o("sampletype");if(s!=-1)n[s]="sampletype";s=o("patient");if(s!=-1)n[s]="patient";s=o("json","jsontext");if(s==-1)return["json missing from header"];n[s]="jsontext";return[null,n]}function parseline$4(e,t,n,o){if(t==""||t[0]=="#")return;const s=t.split("\t");const r={};const i=n.svjson.badlines;for(let e=0;e<o.length;e++){r[o[e]]=s[e]}if(!r.jsontext){i.push([e,"missing jsontext",s]);return}if(parsesample(r,n,e,s)){return}let a;try{a=JSON.parse(r.jsontext)}catch(t){i.push([e,"invalid JSON text",s]);return}if(Array.isArray(a)){for(const e of a){if(e.a&&e.a.name&&e.a.isoform){n.good++;const t={dt:dtfusionrna,class:mclassfusionrna,isoform:e.a.isoform,mname:e.b.name};for(const e in r){if(e!="jsontext")t[e]=r[e]}t.pairlst=duplicate(a);const o=e.a.name.toUpperCase();if(!n.data[o]){n.data[o]=[]}n.data[o].push(t)}if(e.b&&e.b.name&&e.b.isoform){n.good++;const t={dt:dtfusionrna,class:mclassfusionrna,isoform:e.b.isoform,mname:e.a.name};for(const e in r){if(e!="jsontext")t[e]=r[e]}t.pairlst=duplicate(a);const o=e.b.name.toUpperCase();if(!n.data[o]){n.data[o]=[]}n.data[o].push(t)}}}else{a.dt=a.typecode;delete a.typecode;switch(a.dt){case dtitd:a.class=mclassitd;a.mname="ITD";break;case dtnloss:a.class=mclassnloss;a.mname="N-loss";break;case dtcloss:a.class=mclasscloss;a.mname="C-loss";break;case dtdel:a.class=mclassdel;a.mname="Del";break;case dtsv:a.class=mclasssv;a.mname="SV";break;default:i.push([e,"unknown datatype",s]);return}if(!a.gene){i.push([e,"json.gene missing",s]);return}n.good++;for(const e in r){if(e!="jsontext"){a[e]=r[e]}}const t=n.geneToUpper?a.gene.toUpperCase():a.gene.toUpperCase();if(!n.data[t]){n.data[t]=[]}n.data[t].push(a)}}function duplicate(e){const t=[];for(const n of e){const e={a:{},b:{}};for(const t in n){if(t!="a"&&t!="b")e[t]=n[t]}for(const t in n.a){e.a[t]=n.a[t]}for(const t in n.b){e.b[t]=n.b[t]}t.push(e)}return t}function parseheader$3(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid file header for CNV";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("cnv");if(s==-1)return"CNV missing from header";n[s]="cnv";s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.cnv.header=n;t.cnv.loaded=true;return false}function parseline$3(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.cnv.header.length;e++){s[n.cnv.header[e]]=o[e]}if(!s.gene){n.cnv.badlines.push([e,"missing gene",o]);return}if(!s.cnv){n.cnv.badlines.push([e,"missing cnv value",o]);return}const r=s.cnv.toLowerCase();switch(r){case"amplification":case"gain":s.class=mclasscnvgain;break;case"deletion":case"loss":s.class=mclasscnvloss;break;case"loh":s.class=mclasscnvloh;break;default:n.cnv.badlines.push([e,"invalid cnv value: "+s.cnv,o]);s.class=null}if(!s.class){return}if(parsesample(s,n,e,o,n.cnv.badlines)){return}s.dt=dtcnv;n.good++;const i=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(i in n.data)){n.data[i]=[]}n.data[i].push(s)}function parseheader$2(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid header line for ITD";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";s=o("rnaposition");if(s!=-1){n[s]="rnaposition";s=o("rnaduplength");if(s==-1)return"rnaduplength is required when rnaposition is present";n[s]="rnaduplength"}s=o("chromosome","chr");if(s!=-1){n[s]="chr";s=o("chr_start");if(s==-1)return"chr_start is required when chr is present";n[s]="chrpos1";s=o("chr_stop");if(s==-1)return"chr_stop is required when chr is present";n[s]="chrpos2"}s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.itd.header=n;t.itd.loaded=true;return false}function parseline$2(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.itd.header.length;e++){if(o[e]==undefined)break;s[n.itd.header[e]]=o[e]}if(!s.gene){n.itd.badlines.push([e,"missing gene",o]);return}if(s.rnaposition){let t=Number.parseInt(s.rnaposition);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid rnaPosition value",o]);return}s.rnaposition=t;if(!s.rnaduplength){n.itd.badlines.push([e,"missing rnaDuplength value",o]);return}t=Number.parseInt(s.rnaduplength);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid rnaDuplength value",o]);return}s.rnaduplength=t}if(s.chr){let t=Number.parseInt(s.chrpos1);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid chr_start value",o]);return}s.chrpos1=t;t=Number.parseInt(s.chrpos2);if(Number.isNaN(t)||t<0){n.itd.badlines.push([e,"invalid chr_stop value",o]);return}s.chrpos2=t}if(parsesample(s,n,e,o,n.itd.badlines)){return}s.dt=dtitd;s.class=mclassitd;s.mname="ITD";n.good++;var r=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(r in n.data)){n.data[r]=[]}n.data[r].push(s)}function parseheader$1(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid header line for intragenic deletion";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";s=o("rnaposition");if(s!=-1){n[s]="rnaposition";s=o("rnadellength");if(s==-1)return"rnadellength is required when rnaPosition is used";n[s]="rnadellength"}s=o("chromosome","chr");if(s!=-1){n[s]="chr";s=o("chr_start");if(s==-1)return"chr_start is required when chr is used";n[s]="chrpos1";s=o("chr_stop");if(s==-1)return"chr_stop is required when chr is used";n[s]="chrpos2"}s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.del.header=n;t.del.loaded=true;return false}function parseline$1(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.del.header.length;e++){if(o[e]==undefined)break;s[n.del.header[e]]=o[e]}if(!s.gene){n.del.badlines.push([e,"missing gene",o]);return}if(s.rnaposition){let t=Number.parseInt(s.rnaposition);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid rnaPosition value",o]);return}s.rnaposition=t;if(!s.rnadellength){n.del.badlines.push([e,"missing rnaDellength value",o]);return}t=Number.parseInt(s.rnadellength);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid rnaDellength value",o]);return}s.rnadellength=t}if(s.chr){let t=Number.parseInt(s.chrpos1);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid chr_start value",o]);return}s.chrpos1=t;t=Number.parseInt(s.chrpos2);if(Number.isNaN(t)||t<0){n.del.badlines.push([e,"invalid chr_stop value",o]);return}s.chrpos2=t}if(parsesample(s,n,e,o,n.del.badlines)){return}s.dt=dtdel;s.class=mclassdel;s.mname="DEL";n.good++;var r=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(r in n.data)){n.data[r]=[]}n.data[r].push(s)}function parseheader(e,t){const n=e.toLowerCase().split("\t");if(n.length<=1)return"invalid header line for truncation";const o=(...e)=>{for(const t of e){const e=n.indexOf(t);if(e!=-1)return e}return-1};let s=o("gene");if(s==-1)return"gene missing from header";n[s]="gene";s=o("annovar_isoform","mrna_accession","mrna accession","refseq_mrna_id","annovar_sj_filter_isoform","refseq","isoform");if(s==-1)return"isoform missing from header";n[s]="isoform";let r=false;s=o("rnaposition");if(s!=-1){n[s]="rnaposition";r=true}s=o("losstype");if(s==-1)return"lossType missing from header";n[s]="losstype";let i=false;s=o("chromosome","chr");if(s!=-1){n[s]="chr";s=o("start","start_position","wu_hg19_pos","chr_position","position");if(s==-1){return"genomic position missing from header"}n[s]="pos";i=true}if(!r&&!i){return"neither rnaposition nor genomic position is given"}s=o("sample","sample_name","tumor_sample_barcode");if(s!=-1)n[s]="sample";s=o("patient","donor","target_case_id");if(s!=-1)n[s]="patient";s=o("disease");if(s!=-1)n[s]="disease";s=o("origin");if(s!=-1)n[s]="origin";s=o("sampletype","sample type","sample_type");if(s!=-1)n[s]="sampletype";t.truncation.header=n;t.truncation.loaded=true;return false}function parseline(e,t,n){if(t==""||t[0]=="#")return;const o=t.split("\t");const s={};for(let e=0;e<n.truncation.header.length;e++){s[n.truncation.header[e]]=o[e]}if(!s.gene){n.truncation.badlines.push([e,"missing gene",o]);return}if(s.rnaposition){const t=Number.parseInt(s.rnaposition);if(Number.isNaN(t)||t<0){n.truncation.badlines.push([e,"invalid rnaPosition value",o]);return}s.rnaposition=t}if(s.pos){const t=Number.parseInt(s.pos);if(Number.isNaN(t)||t<0){n.truncation.badlines.push([e,"invalid genomic position",o]);return}s.pos=t}if(!s.losstype){n.truncation.badlines.push([e,"missing lossType value",o]);return}if(s.losstype!="n"&&s.losstype!="c"){n.truncation.badlines.push([e,'lossType value not "n" or "c"',o]);return}if(parsesample(s,n,e,o,n.truncation.badlines)){return}if(s.losstype=="n"){s.dt=dtnloss;s.class=mclassnloss;s.mname="N-loss"}else{s.dt=dtcloss;s.class=mclasscloss;s.mname="C-loss"}n.good++;const r=n.geneToUpper?s.gene.toUpperCase():s.gene;if(!(r in n.data)){n.data[r]=[]}n.data[r].push(s)}const schemaNames=["heatmapJSON","piebarJSON","survivalJSON","discoJSON","riverJSON"];const typeIndex={snvindel:0,si:0,sv:1,fusion:2,itd:3,deletion:4,truncation:5,cnv:6};let urlProjectLoaded=false;class ProjectHandler{constructor(e){this.bt=e;this.err=this.errHandler();if(!urlProjectLoaded){const e=getParams();if(e.project){this.getData(e.project);urlProjectLoaded=true}}if(e.filediv){this.projectByInput(e.filediv)}}processData(e){const t=e.files.pop();const n=e.expectedFileNames.indexOf(t.name);if(n==-1){if(e.files.length)setTimeout((()=>{this.processData(e)}),1);return}e.expectedFileNames.splice(n,1);this.cohort={name:"project",genome:this.bt.genomes[this.bt.gselect.options[this.bt.gselect.selectedIndex].innerHTML]};if(!this.flag){this.flag=this.bt.init_bulk_flag(this.cohort.genome)}const o=this.bt.content2flag(t.content,t.type,this.flag);if(o){this.err(o);this.processData(e)}else if(!e.files.length){if(e.expectedFileNames.length){this.err('These referenced files were not found: "'+e.expectedFileNames.join('", "')+'".')}this.bt.flag2tp(this.flag,{name:"project"},Object.assign(this.cohort,e.schema),this.ds);return}else{if(!this.ds){for(const e in this.cohort.dsset){this.ds=this.cohort.dsset[e];break}}const n=this.bt.bulkin({flag:this.flag,cohort:this.cohort,flag2thisds:this.ds,filename:"project"},(()=>{this.processData(e)}));if(n){this.err("Error with "+t.name+": "+n);return}if(this.flag.good===0){this.err(t.name+": no data loaded");return}}}getData(e){const[t,n]=e.split("/");const o=n&&n.trim()?n.trim():"ref.txt";this.gettext("/data/projects/"+t+"/"+o,(e=>{const n={};const o={};const s={schema:{},files:[],expectedFileNames:[]};let r=0;e.trim().split("\n").forEach((e=>{const[t,s]=e.trim().split("\t");if(schemaNames.includes(t)){o[s]=t;r+=1}else if(!typeIndex[t]&&typeIndex[t]!==0){this.err("Unrecognized type "+t+" for file "+s+" in reference.txt.")}else{n[s]=typeIndex[t];r+=1}}));s.expectedFileNames=Object.keys(n);const i=this.getTracker(r,(()=>this.processData(s)));Object.keys(o).forEach((e=>{this.getjson("/data/projects/"+t+"/"+e,(t=>{s.schema[o[e]]=t;i()}))}));Object.keys(n).forEach((e=>{this.gettext("/data/projects/"+t+"/"+e,(t=>{s.files.push({name:e,type:n[e],content:t});i()}))}))}))}gettext(e,t){fetch(e).then((t=>{if(t.ok)return t.text();else this.err("File request error: "+e)})).then(t).catch((t=>this.err("File request error: "+e+" "+t)))}getjson(e,t){fetch(e).then((t=>{if(t.ok)return t.json();else this.err("Network error for "+e)})).then(t).catch((t=>this.err("file request error: "+e+" "+t)))}getTracker(e,t){let n=0;return function o(){n+=1;if(n==e){t()}}}projectByInput(e){this.tp=null;const t=e.append("div");t.append("span").html("Project: reference &nbsp;");this.refNameInput=t.append("input").attr("type","text").property("value","ref.txt").style("margin-right","20px").style("padding-left","7px");t.append("label").attr("for","sja-pp-bulk-ui-project-btn").attr("class","sja_btn").style("padding","3px 5px").html("Choose folder");t.append("input").attr("type","file").attr("id","sja-pp-bulk-ui-project-btn").property("multiple",true).property("webkitdirectory",true).property("directory",true).on("change",(e=>this.readFiles(e)));t.append("div").style("margin","10px 10px 10px 0").html(`<a href="https://docs.google.com/document/d/1wlfGzyhxFYtWu9Fyf3FK7pgvS3rVb9_vrfYUBUOUrw4/edit?usp=sharing" target="new">Project user guide</a> | \n\t\t\t<a href='https://proteinpaint.stjude.org/ppdemo/projects/target-tall-project/ref.txt' target=_blank>Example project reference file</a>`);t.append("div").style("margin","20px").style("width","100%").html("-- OR --")}readFiles(e){const t=this;const n=t.refNameInput.property("value");const o=Array.from(e.target.files);const s=o.filter((e=>e.name==n))[0];if(!s){t.err("Missing reference file='"+n+"'.");return}const r={};const i={};const a={schema:{},files:[],expectedFileNames:[]};const l=new FileReader;let c="";let d=0;l.onload=e=>{e.target.result.trim().split("\n").forEach((e=>{const[n,o]=e.trim().split("\t");if(schemaNames.includes(n)){i[o]=n}else if(!typeIndex[n]&&typeIndex[n]!==0){t.err("Unrecognized type "+n+" for file "+o+" in reference.txt.")}else{r[o]=typeIndex[n]}}));a.expectedFileNames=Object.keys(r);const n=o.filter((e=>e.name in i));let s=0;if(!n.length){o.forEach(l)}else{n.forEach((e=>{const r=new FileReader;r.onload=r=>{const c=JSON.parse(r.target.result);s+=1;if(!c){t.err('Unable to parse schema file="'+e.name+'".')}else{a.schema[i[e.name]]=c}if(s==n.length){o.forEach(l)}};r.onerror=()=>{t.err("Error reading schema.txt.")};r.readAsText(e,"utf8")}))}function l(e){if(!a.expectedFileNames.includes(e.name)){d+=1;return}if(!e){t.err("Error reading file.");d+=1;return}if(e.size==0){t.err("Wrong file: "+e.name);d+=1;return}if(!r[e.name]&&r[e.name]!==0&&e.name!=c){t.err("Missing or invalid type assigned to file "+e.name+".");d+=1;return}const n=new FileReader;n.onload=n=>{d+=1;a.files.push({name:e.name,type:r[e.name],content:n.target.result});if(d==o.length){t.processData(a)}};n.onerror=()=>{d+=1;t.err("Error reading file "+e.name);if(d==o.length){t.processData(a)}};n.readAsText(e,"utf8")}};l.onerror=()=>{t.err("Error reading reference.txt.")};l.readAsText(s,"utf8")}errHandler(){const e=d3select("body").append("div");return function(t){if(!t)return;sayerror$1(e,t)}}}function getParams(){const e={};window.location.search.substr(1).split("&").forEach((t=>{const[n,o]=t.split("=");e[n]=o}));return e}const hardcode_root="root";const hierarchy_spacer="...";function stratinput(e,t){const n=Object.create(null);const o=Object.create(null);const s=Object.create(null);for(const r of e){for(const[e,i]of t.entries()){const a=getkey(r,e,t);const l=getkey(r,e-1,t);if(!r[i.k]){if(e>0){s[l]+=1}break}n[a]=l;if(!(a in s)){s[a]=0}if(!(a in o)){const n={lst:[]};if(i.full){n.full=r[i.full]}n.id0=t[0].k;n.v0=r[t[0].k];if(e==1){n.id1=t[1].k;n.v1=r[t[1].k]}if(e==2){n.id2=t[2].k;n.v1=r[t[2].k]}o[a]=n}o[a].lst.push(r);if(e==t.length-1){s[a]+=1}}}const r=[{id:hardcode_root,name:hardcode_root}];for(const e in n){const t=n[e];const i=o[e];const a=e.split(hierarchy_spacer);r.push({id:e,parentId:t,lst:i.lst,value:s[e],name:a[a.length-1],full:i.full,id0:i.id0,v0:i.v0,id1:i.id1,v1:i.v1,id2:i.id2,v2:i.v2})}return r}function getkey(e,t,n){const o=[hardcode_root];for(let s=0;s<t;s++){o.push(e[n[s].k])}if(t>=0){o.push(e[n[t].k])}return o.join(hierarchy_spacer)}function count(e){var t=0,n=e.children,o=n&&n.length;if(!o)t=1;else while(--o>=0)t+=n[o].value;e.value=t}function node_count(){return this.eachAfter(count)}function node_each(e,t){let n=-1;for(const o of this){e.call(t,o,++n,this)}return this}function node_eachBefore(e,t){var n=this,o=[n],s,r,i=-1;while(n=o.pop()){e.call(t,n,++i,this);if(s=n.children){for(r=s.length-1;r>=0;--r){o.push(s[r])}}}return this}function node_eachAfter(e,t){var n=this,o=[n],s=[],r,i,a,l=-1;while(n=o.pop()){s.push(n);if(r=n.children){for(i=0,a=r.length;i<a;++i){o.push(r[i])}}}while(n=s.pop()){e.call(t,n,++l,this)}return this}function node_find(e,t){let n=-1;for(const o of this){if(e.call(t,o,++n,this)){return o}}}function node_sum(e){return this.eachAfter((function(t){var n=+e(t.data)||0,o=t.children,s=o&&o.length;while(--s>=0)n+=o[s].value;t.value=n}))}function node_sort(e){return this.eachBefore((function(t){if(t.children){t.children.sort(e)}}))}function node_path(e){var t=this,n=leastCommonAncestor(t,e),o=[t];while(t!==n){t=t.parent;o.push(t)}var s=o.length;while(e!==n){o.splice(s,0,e);e=e.parent}return o}function leastCommonAncestor(e,t){if(e===t)return e;var n=e.ancestors(),o=t.ancestors(),s=null;e=n.pop();t=o.pop();while(e===t){s=e;e=n.pop();t=o.pop()}return s}function node_ancestors(){var e=this,t=[e];while(e=e.parent){t.push(e)}return t}function node_descendants(){return Array.from(this)}function node_leaves(){var e=[];this.eachBefore((function(t){if(!t.children){e.push(t)}}));return e}function node_links(){var e=this,t=[];e.each((function(n){if(n!==e){t.push({source:n.parent,target:n})}}));return t}function*node_iterator(){var e=this,t,n=[e],o,s,r;do{t=n.reverse(),n=[];while(e=t.pop()){yield e;if(o=e.children){for(s=0,r=o.length;s<r;++s){n.push(o[s])}}}}while(n.length)}function hierarchy(e,t){if(e instanceof Map){e=[undefined,e];if(t===undefined)t=mapChildren}else if(t===undefined){t=objectChildren}var n=new Node(e),o,s=[n],r,i,a,l;while(o=s.pop()){if((i=t(o.data))&&(l=(i=Array.from(i)).length)){o.children=i;for(a=l-1;a>=0;--a){s.push(r=i[a]=new Node(i[a]));r.parent=o;r.depth=o.depth+1}}}return n.eachBefore(computeHeight)}function node_copy(){return hierarchy(this).eachBefore(copyData)}function objectChildren(e){return e.children}function mapChildren(e){return Array.isArray(e)?e[1]:null}function copyData(e){if(e.data.value!==undefined)e.value=e.data.value;e.data=e.data.data}function computeHeight(e){var t=0;do{e.height=t}while((e=e.parent)&&e.height<++t)}function Node(e){this.data=e;this.depth=this.height=0;this.parent=null}Node.prototype=hierarchy.prototype={constructor:Node,count:node_count,each:node_each,eachAfter:node_eachAfter,eachBefore:node_eachBefore,find:node_find,sum:node_sum,sort:node_sort,path:node_path,ancestors:node_ancestors,descendants:node_descendants,leaves:node_leaves,links:node_links,copy:node_copy,[Symbol.iterator]:node_iterator};function optional(e){return e==null?null:required(e)}function required(e){if(typeof e!=="function")throw new Error;return e}var preroot={depth:-1},ambiguous={},imputed={};function defaultId(e){return e.id}function defaultParentId(e){return e.parentId}function stratify(){var e=defaultId,t=defaultParentId,n;function o(o){var s=Array.from(o),r=e,i=t,a,l,c,d,p,f,u,h,m=new Map;if(n!=null){const e=s.map(((e,t)=>normalize(n(e,t,o))));const t=e.map(parentof);const a=new Set(e).add("");for(const n of t){if(!a.has(n)){a.add(n);e.push(n);t.push(parentof(n));s.push(imputed)}}r=(t,n)=>e[n];i=(e,n)=>t[n]}for(c=0,a=s.length;c<a;++c){l=s[c],f=s[c]=new Node(l);if((u=r(l,c,o))!=null&&(u+="")){h=f.id=u;m.set(h,m.has(h)?ambiguous:f)}if((u=i(l,c,o))!=null&&(u+="")){f.parent=u}}for(c=0;c<a;++c){f=s[c];if(u=f.parent){p=m.get(u);if(!p)throw new Error("missing: "+u);if(p===ambiguous)throw new Error("ambiguous: "+u);if(p.children)p.children.push(f);else p.children=[f];f.parent=p}else{if(d)throw new Error("multiple roots");d=f}}if(!d)throw new Error("no root");if(n!=null){while(d.data===imputed&&d.children.length===1){d=d.children[0],--a}for(let e=s.length-1;e>=0;--e){f=s[e];if(f.data!==imputed)break;f.data=null}}d.parent=preroot;d.eachBefore((function(e){e.depth=e.parent.depth+1;--a})).eachBefore(computeHeight);d.parent=null;if(a>0)throw new Error("cycle");return d}o.id=function(t){return arguments.length?(e=optional(t),o):e};o.parentId=function(e){return arguments.length?(t=optional(e),o):t};o.path=function(e){return arguments.length?(n=optional(e),o):n};return o}function normalize(e){e=`${e}`;let t=e.length;if(slash(e,t-1)&&!slash(e,t-2))e=e.slice(0,-1);return e[0]==="/"?e:`/${e}`}function parentof(e){let t=e.length;if(t<2)return"";while(--t>1)if(slash(e,t))break;return e.slice(0,t)}function slash(e,t){if(e[t]==="/"){let n=0;while(t>0&&e[--t]==="\\")++n;if((n&1)===0)return true}return false}function vcf2dstk(e){const t={id2vcf:{},label:e.name||"Unnamed VCF file"};let n;if(e.file){const o=Math.random().toString();n={file:e.file,indexURL:e.indexURL,vcfid:o};t.id2vcf[o]=n}else if(e.url){const o=Math.random().toString();n={url:e.url,indexURL:e.indexURL,vcfid:o};t.id2vcf[o]=n}else{return["no .file or .url"]}n.headernotloaded=true;if(e.samplenamemap){n.samplenamemap=e.samplenamemap}if(e.variant2img){if(!e.variant2img.path)return[".path missing from .variant2img{}"]}const o={type:tkt.ds,isvcf:true,name:t.label,ds:t,populationfrequencyfilter:e.populationfrequencyfilter,vcfinfofilter:e.vcfinfofilter,itemlabelname:e.itemlabelname,viewrangeupperlimit:e.viewrangeupperlimit,variant2img:e.variant2img,axisheight:e.axisheight};if(e.url4variant){const t=check_url4variant(e.url4variant);if(t)return[".url4variant error: "+t];o.url4variant=e.url4variant}if(e.button4variant){const t=check_button4variant(e.button4variant);if(t)return[".button4variant error: "+t];o.button4variant=e.button4variant}if(e.sampleannotation){const t=e.sampleannotation;if(!t.annotation)return[".annotation{} missing from .sampleannotation"];if(t.levels){if(!Array.isArray(t.levels))return[".sampleannotation.levels should be array"];const e=[];for(const n in t.annotation){const o={sample_name:n};for(const e in t.annotation[n]){o[e]=t.annotation[n][e]}e.push(o)}const n=stratinput(e,t.levels);t.root=stratify()(n);t.root.sum((e=>e.value))}if(t.variantsunburst){if(!t.levels)return[".levels missing when .variantsunburst is on from .sampleannotation"]}o.ds.cohort=t}if(e.vcfcohorttrack){if(!e.vcfcohorttrack.file&&!e.vcfcohorttrack.url)return["no .file or .url provided from .vcfcohorttrack"];o.ds.vcfcohorttrack=e.vcfcohorttrack}if(e.germline2dvafplot){if(!e.germline2dvafplot.individualkey)return[".individualkey missing from germline2dvafplot"];if(!e.germline2dvafplot.sampletypekey)return[".sampletypekey missing from germline2dvafplot"];if(!e.germline2dvafplot.xsampletype)return[".xsampletype missing from germline2dvafplot"];if(!e.germline2dvafplot.yleftsampletype)return[".yleftsampletype missing from germline2dvafplot"];if(e.germline2dvafplot.yrightsampletype){if(e.germline2dvafplot.yrightsampletype==e.germline2dvafplot.yleftsampletype)return[".yrightsampletype should not be same as yleftsampletype"]}o.ds.germline2dvafplot=e.germline2dvafplot}if(e.vaf2coverageplot){if(e.vaf2coverageplot.categorykey){if(!e.vaf2coverageplot.categories)return[".categories missing when .categorykey is in use for .vaf2coverageplot"]}o.ds.vaf2coverageplot=e.vaf2coverageplot}if(e.genotype2boxplot){if(e.genotype2boxplot.boxplotvaluekey);else if(e.genotype2boxplot.sampleannotationkey){if(!o.ds.cohort)return["sampleannotation missing when using genotype2boxplot.sampleannotationkey"];if(!o.ds.cohort.annotation)return["sampleannotation.annotation missing when using genotype2boxplot.sampleannotationkey"];let t=false;for(const n in o.ds.cohort.annotation){if(e.genotype2boxplot.sampleannotationkey in o.ds.cohort.annotation[n]){t=true;break}}if(!t)return[e.genotype2boxplot.sampleannotationkey+" not found in any sample annotation"]}else{return["incomplete instruction for genotype2boxplot"]}o.ds.genotype2boxplot=e.genotype2boxplot}if(e.discardsymbolicallele){o.ds.discardsymbolicallele=true}if(e.samplebynumericvalue){if(!e.samplebynumericvalue.attrkey)return["attrkey missing from samplebynumericvalue"];if(!o.ds.cohort)return["sampleannotation missing when using samplebynumericvalue"];if(!o.ds.cohort.annotation)return["sampleannotation.annotation missing when using samplebynumericvalue"];let t=false;for(const n in o.ds.cohort.annotation){if(Number.isFinite(o.ds.cohort.annotation[n][e.samplebynumericvalue.attrkey])){t=true;break}}if(!t)return["samplebynumericvalue.attrkey not found in any sample annotation"];o.ds.samplebynumericvalue=e.samplebynumericvalue}{const t=e.genotypebynumericvalue;if(t){if(!t.refref)return[o.name+": refref missing from genotypebynumericvalue"];if(!t.refalt)return[o.name+": refalt missing from genotypebynumericvalue"];if(!t.altalt)return[o.name+": altalt missing from genotypebynumericvalue"];if(!t.refref.infokey)return[o.name+": refref.infokey missing from genotypebynumericvalue"];if(!t.refalt.infokey)return[o.name+": refalt.infokey missing from genotypebynumericvalue"];if(!t.altalt.infokey)return[o.name+": altalt.infokey missing from genotypebynumericvalue"];if(t.refref.genotypeCountInfokey||t.refalt.genotypeCountInfokey||t.altalt.genotypeCountInfokey){if(!t.refref.genotypeCountInfokey)return[o.name+": genotypeCountInfokey missing from genotypebynumericvalue.refref{}"];if(!t.refalt.genotypeCountInfokey)return[o.name+": genotypeCountInfokey missing from genotypebynumericvalue.refalt{}"];if(!t.altalt.genotypeCountInfokey)return[o.name+": genotypeCountInfokey missing from genotypebynumericvalue.altalt{}"]}o.ds.genotypebynumericvalue=t}}if(e.pointdown){o.aboveprotein=false}if(e.dstk_novcferror){o.dstk_novcferror=true}return[null,o]}function check_url4variant(e){if(!Array.isArray(e))return"value is not an array";for(const t of e){if(!t.makeurl){return".makeurl missing"}if(typeof t.makeurl!="function"){return".makeurl must be a function"}}return false}function check_button4variant(e){if(!Array.isArray(e))return"value is not an array";for(const t of e){if(!t.makebutton){return".makebutton missing"}if(typeof t.makebutton!="function"){return".makebutton must be a function"}}return false}function invalidcoord(e,t,n,o){if(!e)return"no genome";if(!t)return"no chr name";const s=e.chrlookup[t.toUpperCase()];if(!s)return"Invalid chromosome name: "+s;if(!Number.isInteger(n))return"Non-numerical position: "+n;if(n<0||n>=s.len)return"Position out of range: "+n;if(!Number.isInteger(o))return"Non-numerical position: "+o;if(o<0||o>s.len)return"Position out of range: "+o;if(n>o)return"Start position is greater than stop";return false}function string2pos(e,t,n){e=e.replace(/,/g,"");const o=t.chrlookup[e.toUpperCase()];if(o){return{chr:o.name,chrlen:o.len,start:Math.max(0,Math.ceil(o.len/2)-1e4),stop:Math.min(o.len,Math.ceil(o.len/2)+1e4)}}{const n=e.split(".");if(n.length>=2){const e=t.chrlookup[n[0].toUpperCase()];const o=Number.parseInt(n[1]);const s=invalidcoord(t,n[0],o,o+1);if(!s){const t=400;return{chr:e.name,chrlen:e.len,start:Math.max(0,o-Math.ceil(t/2)),stop:Math.min(e.len,o+Math.ceil(t/2)),actualposition:{position:o,len:1}}}}}const s=e.split(/[-:\s]+/);if(s.length==2){const e=Number.parseInt(s[1]);const n=invalidcoord(t,s[0],e,e+1);if(n){return null}const o=t.chrlookup[s[0].toUpperCase()];const r=400;return{chr:o.name,chrlen:o.len,start:Math.max(0,e-Math.ceil(r/2)),stop:Math.min(o.len,e+Math.ceil(r/2)),actualposition:{position:e,len:1}}}if(s.length==3){let e=Number.parseInt(s[1]),o=Number.parseInt(s[2]);const r=invalidcoord(t,s[0],e,o);if(r){return null}const i={position:e,len:o-e};const a=t.chrlookup[s[0].toUpperCase()];if(!n){const t=400;if(o-e<t){let n=Math.ceil((e+o)/2);if(n+t/2>=a.len){n=a.len-Math.ceil(t/2)}e=Math.max(0,n-Math.ceil(t/2));o=e+t}}return{chr:a.name,chrlen:a.len,start:e,stop:o,actualposition:i}}return null}function genomic2gm(e,t,n=0){const o=t.strand=="-";const s={};if(e<t.start){if(o){s.atdownstream={off:t.start-e};s.rnapos=t.rnalen;if(t.cdslen){s.aapos=t.cdslen/3}}else{s.atupstream={off:t.start-e};s.rnapos=0;if(t.cdslen){s.aapos=0}}return s}if(e>=t.stop){if(o){s.atupstream={off:e-t.stop+1};s.rnapos=0;if(t.cdslen){s.aapos=0}}else{s.atdownstream={off:e-t.stop+1};s.rnapos=t.rnalen;if(t.cdslen){s.aapos=t.cdslen/3}}return s}if(e>=t.start&&e<t.stop){for(let r=0;r<t.exon.length;r++){const i=t.exon[r];if(o){if(i[1]+n<=e){s.atexon=r+1;s.atintron=r;break}if(i[0]-n<=e){s.atexon=r+1;break}}else{if(i[0]-n>e){s.atexon=r+1;s.atintron=r;break}if(i[1]+n>e){s.atexon=r+1;break}}}}let r=0;for(const n of t.exon){if(o){if(e>=n[1]){r+=.5;break}if(e<n[0]){r+=n[1]-n[0];continue}r+=n[1]-e;break}else{if(e<n[0]){r+=.5;break}if(e>=n[1]){r+=n[1]-n[0];continue}r+=e-n[0]+1;break}}s.rnapos=r;if(t.coding){let n=0;if(t.utr5){n=t.utr5.reduce(((e,t)=>e+t[1]-t[0]),0)}let i=0;if(t.utr3){i=t.utr3.reduce(((e,t)=>e+t[1]-t[0]),0)}if(r<=n){s.aapos=0}else if(r>n+t.cdslen){s.aapos=t.cdslen/3}else{s.aapos=Math.ceil((r-n)/3)}if(e<t.codingstart){let r=0;if(o){if(t.utr3){for(const n of t.utr3){r+=Math.max(n[1],e)-Math.max(n[0],e)}s.atutr3={total:i,off:r}}}else{if(t.utr5){for(const n of t.utr5){r+=Math.min(n[1],e)-Math.min(n[0],e)}s.atutr5={total:n,off:r}}}}else if(e>t.codingstop){let r=0;if(o){if(t.utr5){for(const n of t.utr5){r+=Math.max(n[1],e)-Math.max(n[0],e)}s.atutr5={total:n,off:r}}}else{if(t.utr3){for(const n of t.utr3){r+=Math.min(n[1],e)-Math.min(n[0],e)}s.atutr3={total:i,off:r}}}}}return s}function aa2gmcoord(e,t){if(!Number.isInteger(e))return null;if(!t.coding)return null;let n=0;for(const o of t.coding){if(n+o[1]-o[0]>=(e-1)*3){if(t.strand=="+"){return o[0]+(e-1)*3-n}return o[1]-1-((e-1)*3-n)}n+=o[1]-o[0]}if(t.strand=="+")return t.codingstop;return t.codingstart}function rna2gmcoord(e,t){if(!Number.isFinite(e))return null;if(!t.exon)return null;let n=0;for(const o of t.exon){if(n+o[1]-o[0]>=e){if(t.strand=="+"){return o[0]+e-n}return o[1]-1-e+n}n+=o[1]-o[0]}if(t.strand=="+")return t.stop;return t.start}function colors(e){var t=e.length/6|0,n=new Array(t),o=0;while(o<t)n[o]="#"+e.slice(o*6,++o*6);return n}var schemeCategory10=colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");let prom;function getsjcharts(){if(window.sjcharts){return Promise.resolve(window.sjcharts)}else if(prom){return prom}else{prom=new Promise(((e,t)=>{const n=window.location.hostname.split(".")[0];const o=["pp-test","pecan-test","ppr"].includes(n)?`${n}.stjude.org`:"proteinpaint.stjude.org";const s=`https://${o}/sjcharts/bin/sjcharts.js`;const r=document.createElement("script");r.setAttribute("type","text/javascript");r.setAttribute("src",s);document.getElementsByTagName("head")[0].appendChild(r);r.onload=()=>{e(window.sjcharts)};r.onerror=()=>{const e="Unable to load SJCharts from "+s;alert(e);t(e)}}));return prom}}function tpinit(e){if(!e.p2st){e.p2st={}}if(!e.assays){e.assays=[]}if(!Array.isArray(e.assays)){return".assays should be an array"}e.assaylst=[];let t=0;for(const n of e.assays){const o=e[n];if(!o){return'Assay "'+n+'" not found in cohort'}const s=o.config;if(!s){return'.config object missing for assay "'+n+'"'}delete o.config;if(!s.type){return'.config.type missing for assay "'+n+'"'}if(s.type.toLowerCase()=="vcf"){s.type=tkt.ds;s.isvcf=true}else{if(!validtkt(s.type)){return'unknown .config.type "'+s.type+'" for assay "'+n+'"'}}s.id=(++t).toString();if(!s.name){s.name=n}if(s.type==tkt.junction){if(s.readcountcutoff){if(!Number.isInteger(s.readcountcutoff)||s.readcountcutoff<0){return'invalid .config.readcountcutoff for assay "'+n+'"'}}}e.assaylst.push(s);for(const t in o){if(!e.p2st[t]){e.p2st[t]={}}for(const r in o[t]){if(!e.p2st[t][r]){e.p2st[t][r]={tktemplate:[]}}if(s.type==tkt.vafs1){for(const i in o[t][r]){const a=o[t][r][i];if(!a.file&&!a.url){return"no file or URL for "+i+" vafs1 of "+t+", "+r}a.type=tkt.vafs1;a.patient=t;a.sampletype=r;a.assayname=n;a.id=s.id;a.tkid=Math.random().toString();if(!a.name){a.name=i+" vaf"}e.p2st[t][r].tktemplate.push(a)}continue}let i=[];if(Array.isArray(o[t][r])){i=o[t][r]}else{i.push(o[t][r])}for(const o of i){let i=o;if(!i.file&&!i.url){return"track has no file or url (sample: "+t+", assay: "+n+")"}if(i.name);else if(i.partname){i.name=t+(r==t?"":" "+r)+" "+n+" "+i.partname}else{i.name=t+(r==t?"":" "+r)+" "+n}if(s.isvcf){const[e,t]=vcf2dstk({name:i.name,file:i.file,url:i.url});if(e){return"VCF track error: "+e}i=t}else{if(i.type){if(!validtkt(i.type)){return'invalid track type "'+i.type+'" (sample: '+t+", assay: "+n+")"}}else{i.type=s.type}}i.patient=t;i.sampletype=r;i.assayname=n;i.id=s.id;i.tkid=Math.random().toString();e.p2st[t][r].tktemplate.push(i);switch(s.type){case tkt.bigwig:const e=tidy_qtk(i,s);if(e){return"Assay "+n+": "+s.type+" track error: "+e}break;case tkt.junction:i.categories=s.categories;i.readcountcutoff=s.readcountcutoff;break}}}}}delete e.assays;{const t=cohort2genometkset(e);if(t){return"Error: "+t}}if(e.patientannotation){const t=parse_patientannotation(e);if(t)return t}if(e.browserview){const t=parse_browserview(e);if(t)return t}if(e.e2pca){if(!e.e2pca.list)return".list missing from e2pca";if(!Array.isArray(e.e2pca.list))return"e2pca.list should be an array";if(e.e2pca.list.length==0)return"e2pca.list[] length 0";if(!e.e2pca.label){e.e2pca.label="Expression - PCA"}for(const t of e.e2pca.list){if(!t.vectorfile)return"vectorfile missing from e2pca";if(!t.dbfile)return"dbfile missing from e2pca"}}return}function loadstudycohort(e,t,n,o,s,r,i){const a=n.append("div").style("color","#858585");a.text("Loading "+t+" ...");return fetch(o+"/study",{method:"POST",body:JSON.stringify({file:t,jwt:s})}).then((e=>e.json())).then((l=>{if(!l){a.text("Server error!");return}if(l.error){a.text("Error loading study: "+l.error);return}const c=l.cohort;if(!c){a.text(".cohort missing");return}if(!c.genome){a.text("No genome specified in the cohort JSON content");return}const d=e[c.genome];if(!d){a.text("Invalid genome from cohort: "+c.genome);return}c.genome=d;c.jwt=s;if(!l.flagset){a.text(".flagset missing");return}a.text("");c.dsset={};for(const e in l.flagset){const n=l.flagset[e];n.genome=d;bulkin({flag:n,filename:t,cohort:c,err:e=>sayerror$1(a,e)})}const p=tpinit(c);if(p){sayerror$1(a,p)}if(!r){return import("./tp.ui-ece56c46.js").then((function(e){return e.t})).then((async e=>{getsjcharts().catch(console.error);e.default(c,n,o,i);return i}))}}))}function tidy_qtk(e,t){if(!t){t={}}if(!e.file&&!e.url){return"no file or url"}if(!e.pcolor){e.pcolor=t.pcolor||"#0066CC"}if(!e.pcolor2){e.pcolor2=t.pcolor2||"#CC0000"}if(!e.ncolor){e.ncolor=t.ncolor||"#FF850A"}if(!e.ncolor2){e.ncolor2=t.ncolor2||"#0A85FF"}if(!e.height){e.height=t.height||50}const n={};if(t.scale){for(const e in t.scale){n[e]=t.scale[e]}}if(e.scale){for(const t in e.scale){n[t]=e.scale[t]}}n.auto=true;if(Number.isFinite(n.min)&&Number.isFinite(n.max)){delete n.auto}else if(Number.isFinite(n.percentile)){delete n.auto}e.scale=n}function cohort2genometkset(e){const t=[];for(const n in e.p2st){for(const o in e.p2st[n]){const s=e.p2st[n][o].tktemplate;if(!s)continue;for(const e of s){t.push(e)}}}if(e.browserview&&e.browserview.assays){for(const n in e.browserview.assays){const o=e.browserview.assays[n];if(o.combined&&o.combinetk){t.push(o.combinetk)}}}if(!e.genome.tkset){e.genome.tkset=[]}const n={name:e.name,tklst:t};if(e.trackfacets){if(!Array.isArray(e.trackfacets)){return".trackfacets is not an array"}const t=[];for(const n of e.trackfacets){if(!n.samples){return"trackfacets: .samples missing from facet "+n.name}if(!Array.isArray(n.samples)){return"trackfacets: .samples is not array from facet "+n.name}if(!n.assays){return"trackfacets: .assays missing from a facet "+n.name}if(!Array.isArray(n.assays)){return"trackfacets: .assays is not array from a facet "+n.name}t.push(n)}if(t.length){n.facetlst=t}}e.genome.tkset.push(n);return null}function parse_browserview(e){if(e.browserview.position){let t;if(typeof e.browserview.position=="string"){t=string2pos(e.browserview.position,e.genome);if(!t){return".browserview.position invalid value"}}else{t=e.browserview.position}const n=invalidcoord(e.genome,t.chr,t.start,t.stop);if(n){return".browserview.position error: "+n}e.browserview.position=t}else{e.browserview.position={chr:e.genome.defaultcoord.chr,start:e.genome.defaultcoord.start,stop:e.genome.defaultcoord.stop}}if(e.browserview.assays){for(const t in e.browserview.assays){if(typeof e.browserview.assays[t]!="object"){e.browserview.assays[t]={}}const n=e.browserview.assays[t];for(const o of e.assaylst){if(o.name==t){n.assayobj=o;break}}if(!n.assayobj){console.log("missing assayobj for assayview of "+t);continue}if(n.sum_view){delete n.sum_view;n.combined=true}if(n.combined){const o={};for(const e in n.assayobj){o[e]=n.assayobj[e]}for(const e in n){if(e=="assayobj")continue;o[e]=n[e]}if(!o.name){o.name=t}o.tracks=[];for(const t in e.p2st){for(const s in e.p2st[t]){for(const r of e.p2st[t][s].tktemplate){if(r.id==n.assayobj.id){r.patient=t;r.sampletype=s;o.tracks.push(r)}}}}if(o.isvcf){o.ds={id2vcf:{},label:o.name};for(const e of o.tracks){for(const t in e.ds.id2vcf){e.__vcfobj=e.ds.id2vcf[t]}o.ds.id2vcf[e.__vcfobj.vcfid]=e.__vcfobj}}n.combinetk=o}}}if(e.browserview.defaultassaytracks){if(!Array.isArray(e.browserview.defaultassaytracks))return".browserview.defaultassaytracks must be array";for(let t=0;t<e.browserview.defaultassaytracks.length;t++){const n=e.browserview.defaultassaytracks[t];if(!n.assay)return".assay missing from .defaultassaytracks #"+(t+1);if(!e[n.assay])return"unknown assay name from .defaultassaytracks #"+(t+1)+": "+n.assay;if(!n.level1)return".level1 missing from .defaultassaytracks #"+(t+1);if(!e[n.assay][n.level1])return"level1 not exist in assay from .defaultassaytracks #"+(t+1)+": "+n.level1;if(n.level2){if(!e[n.assay][n.level1][n.level2])return"level2 not exist in assay from .defaultassaytracks #"+(t+1)+": "+n.level2}}}return null}function parse_patientannotation(e){if(!e.patientannotation.annotation){return".patientannotation.annotation missing"}if(!e.patientannotation.metadata){return".patientannotation.metadata missing"}if(!Array.isArray(e.patientannotation.metadata)){return".patientannotation.metadata should be an array"}const t={};for(const n of e.patientannotation.metadata){if(n.key==undefined){return"patientannotation: key missing for a metadata term"}if(!n.values){return"patientannotation: values missing for metadata term "+n.key}if(!Array.isArray(n.values)){return"patientannotation: .values not an array for metadata term "+n.key}if(!n.label){n.label=n.key}t[n.key]={label:n.label,values:{}};const e=ordinal(schemeCategory10);for(const o of n.values){if(o.key==undefined){return"key missing for an attribute of term "+n.key}if(!o.label){o.label=o.key}if(!o.color){o.color=e(o.key)}t[n.key].values[o.key]=o}}e.patientannotation.mdh=t;return null}const disabled={color:"#ccc"};const icons={x:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(255,100,100)").style("opacity",.9).style("font-weight",700).style("font-size","18px").style("transform","rotate(-45deg)").style("cursor","pointer").html("&oplus;").on("click",t.handler),plus:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","18px").html("&oplus;").on("click",t.handler),combine:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","12px").style("color","rgb(100,100,255)").style("cursor","pointer").html("[]+[]").on("click",t.handler),divide:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","12px").style("color","rgb(100,100,255)").style("cursor","pointer").html("[&divide;]").on("click",t.handler),expand:(e,t)=>{const n="color"in t?t.color:"rgb(100,100,255)";return e.attr("title",t.title).style("height","auto").style("color",n).style("opacity",.9).style("font-size","fontSize"in t?t.fontSize:"16px").style("padding","padding"in t?t.padding:"0 2px").style("display","display"in t?t.display:"inline-block").style("cursor","pointer").html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="${n}" class="bi bi-square" viewBox="0 0 16 16" >\n\t\t\t\t\t <path stroke='${n}' stroke-width='1' d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/>\n\t\t\t\t\t</svg>`).on("click",t.handler)},collapse:(e,t)=>{const n="color"in t?t.color:"rgb(100,100,255)";return e.attr("title",t.title).style("height","auto").style("color",n).style("opacity",.9).style("font-size","fontSize"in t?t.fontSize:"16px").style("padding","padding"in t?t.padding:"0 2px").style("display","display"in t?t.display:"inline-block").style("cursor","pointer").html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="${n}" class="bi bi-dash-lg" viewBox="0 0 16 16">\n\t\t\t\t\t <path stroke='${n}' stroke-width='1' fill-rule="evenodd" d="M2 8a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11A.5.5 0 0 1 2 8Z"/>\n\t\t\t\t\t</svg>`).on("click",t.handler)},corner:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color",t.disabled?disabled.color:"rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("cursor","pointer").html("&#8689;").on("click",t.handler),left:(e,t)=>{const n=t.disabled?disabled.color:"rgb(100,100,255)";return e.attr("title",t.title).style("padding","0 3px").style("color",t.disabled?disabled.color:"rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M0,6L12,0L12,12Z' style='fill:${n}'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler)},right:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding-top","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,0)'>\n\t\t\t\t\t<path d='M0,0L12,6L0,12Z' style='fill:rgb(100,100,255)'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),up:(e,t)=>{const n=t.disabled?disabled.color:"rgb(100,100,255)";return e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","16px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<path d='M6,0L12,12L0,12Z' style='fill:${n}'></path>\n\t\t\t</svg>`).on("click",t.handler)},down:(e,t)=>{const n=t.disabled?disabled.color:"rgb(100,100,255)";return e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).style("font-size","16px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M0,0L12,0L6,12Z' style='fill:${n}'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler)},updown:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","18px").style("font-weight",800).style("text-decoration","underline").style("cursor","pointer").html("&#8693;").on("click",t.handler),seHookArrow:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","18px").style("font-weight",800).style("cursor","pointer").html("&#10533;").on("click",t.handler),swHookArrow:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","18px").style("font-weight",800).style("cursor","pointer").html("&#10534;").on("click",t.handler),unlock:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("opacity",.9).html(`<svg width='12' height='12'>\n\t\t\t<g transform="scale(0.045)" fill="rgb(100,100,255)">\n\t\t\t\t<path d="m299.02 161.26h-185.84v-46.28c0-41.34 33.635-74.979 74.979-74.979 33.758 0 63.51 22.716 72.36 55.24 2.898 10.657 13.888 16.946 24.547 14.05 10.659-2.898 16.949-13.889 14.05-24.548-13.57-49.896-59.2-84.74-110.96-84.74-63.4 0-114.98 51.58-114.98 114.98v46.715c-9.06 1.902-15.888 9.952-15.888 19.571v175.05c0 11.03 8.972 20 20 20h221.73c11.03 0 20-8.972 20-20v-175.05c0-11.03-8.972-20-20-20"/>\n\t\t\t</g>\n\t\t</svg>`).on("click",t.handler),leftBorder:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M1,6L11,1L11,11Z' style='stroke:rgb(100,100,255); stroke-width:1px; fill:#ececec'></path>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),leftCrossedOut:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<path d='M1,6L11,1L11,11Z' style='stroke:rgb(100,100,255); stroke-width:1px; fill:#ececec'></path>\n\t\t\t\t\t<text x='3' y='10' style='font-size:12; fill:#f00; font-weight:bold'>X</text>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),filter:(e,t)=>{e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").on("click",t.handler);e.iconPath=e.append("svg").attr("width",16).attr("height",12).append("g").attr("transform","translate(8,1)").append("path").attr("d","M8,0L2,6L2,12L-2,12L-2,6L-8,0Z").style("fill","rgb(100,100,255)");return e},colorScale:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).html(`<svg width='12' height='12'>\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient id='`+t.linearGradientId+`'>\n\t\t\t\t\t\t<stop offset='0' stop-color='red'></stop>\n\t\t\t\t\t\t<stop offset='1' stop-color='blue'></stop>\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<rect x='0' y='1' width='10' height='10' fill='url(#`+t.linearGradientId+`)'></rect>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),bar:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("color","rgb(100,100,255)").style("opacity",.9).style("font-size","16px").style("padding","3px").style("cursor","pointer").html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<rect x='0' y='0' width='3' height='11' fill='rgb(100,100,255)'></rect>\n\t\t\t\t\t<rect x='4' y='6' width='3' height='5' fill='rgb(100,100,255)'></rect>\n\t\t\t\t\t<rect x='8' y='3' width='3' height='8' fill='rgb(100,100,255)'></rect>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),rect:(e,t)=>e.attr("title",t.title).style("padding","0 3px").style("stroke","rgb(100,100,255)").style("fill","fill"in t?t.fill:"none").style("opacity",.9).html(`<svg width='12' height='12'>\n\t\t\t\t<g transform='translate(0,1)'>\n\t\t\t\t\t<rect x="0" y="1" width="10" height="10"></rect>\n\t\t\t\t</g>\n\t\t\t</svg>`).on("click",t.handler),text:(e,t)=>{const n=e.append("div").style("display","none");const o=n.append("input");o.attr("type","text").style("width",t.width+"px").style("margin","0 0 1px 2px").style("border","1px solid #aaa").style("border-spacing",0).style("height","21px").style("padding",0).style("background-color","#fff").style("cursor","pointer").on("change",t.handler).on("click.tphm2",(e=>e.stopPropagation()));n.append("button").style("margin",0).style("border-spacing",0).style("padding","2px").html("add").on("click",t.handler);return{wrapper:n,input:o}},html:(e,t)=>{select(e.node().parentNode).append("span").html(t.html);if(t.styles){for(const t in styles){e.style(t,styles[t])}}return e},restart:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-house-fill" viewBox="0 0 16 16">\n\t\t<path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/>\n\t\t<path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},zoomIn:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-zoom-in" viewBox="0 0 16 16">\n\t<path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/>\n\t<path d="M10.344 11.742c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1 6.538 6.538 0 0 1-1.398 1.4z"/>\n\t<path fill-rule="evenodd" d="M6.5 3a.5.5 0 0 1 .5.5V6h2.5a.5.5 0 0 1 0 1H7v2.5a.5.5 0 0 1-1 0V7H3.5a.5.5 0 0 1 0-1H6V3.5a.5.5 0 0 1 .5-.5z"/>\n\t</svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},zoomOut:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-zoom-in" viewBox="0 0 16 16">\n\t\t<path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11zM13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/>\n\t\t<path d="M10.344 11.742c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1 6.538 6.538 0 0 1-1.398 1.4z"/>\n\t\t<path fill-rule="evenodd" d="M3 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},lasso:(e,t)=>{const n={color:"black",width:18,height:18};const o=!t.enabled?"transparent":"rgb(207, 226, 243)";Object.assign(n,t);const s=`<button style="cursor:pointer;border:none;background-color:${o};"><svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-zoom-in" viewBox="0 0 16 16">\n\t\t<path d="M15.825.12a.5.5 0 0 1 .132.584c-1.53 3.43-4.743 8.17-7.095 10.64a6.067 6.067 0 0 1-2.373 1.534c-.018.227-.06.538-.16.868-.201.659-.667 1.479-1.708 1.74a8.118 8.118 0 0 1-3.078.132 3.659 3.659 0 0 1-.562-.135 1.382 1.382 0 0 1-.466-.247.714.714 0 0 1-.204-.288.622.622 0 0 1 .004-.443c.095-.245.316-.38.461-.452.394-.197.625-.453.867-.826.095-.144.184-.297.287-.472l.117-.198c.151-.255.326-.54.546-.848.528-.739 1.201-.925 1.746-.896.126.007.243.025.348.048.062-.172.142-.38.238-.608.261-.619.658-1.419 1.187-2.069 2.176-2.67 6.18-6.206 9.117-8.104a.5.5 0 0 1 .596.04zM4.705 11.912a1.23 1.23 0 0 0-.419-.1c-.246-.013-.573.05-.879.479-.197.275-.355.532-.5.777l-.105.177c-.106.181-.213.362-.32.528a3.39 3.39 0 0 1-.76.861c.69.112 1.736.111 2.657-.12.559-.139.843-.569.993-1.06a3.122 3.122 0 0 0 .126-.75l-.793-.792zm1.44.026c.12-.04.277-.1.458-.183a5.068 5.068 0 0 0 1.535-1.1c1.9-1.996 4.412-5.57 6.052-8.631-2.59 1.927-5.566 4.66-7.302 6.792-.442.543-.795 1.243-1.042 1.826-.121.288-.214.54-.275.72v.001l.575.575zm-4.973 3.04.007-.005a.031.031 0 0 1-.007.004zm3.582-3.043.002.001h-.002z"/>\n\t\t</svg></button>`;e.html(s).on("click",t.handler)},download:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-download" viewBox="0 0 16 16">\n\t\t<path d="M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5z"/>\n\t\t<path d="M7.646 11.854a.5.5 0 0 0 .708 0l3-3a.5.5 0 0 0-.708-.708L8.5 10.293V1.5a.5.5 0 0 0-1 0v8.793L5.354 8.146a.5.5 0 1 0-.708.708l3 3z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},help:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-question-circle" viewBox="0 0 16 16">\n\t\t<path d="M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/>\n\t\t<path d="M5.255 5.786a.237.237 0 0 0 .241.247h.825c.138 0 .248-.113.266-.25.09-.656.54-1.134 1.342-1.134.686 0 1.314.343 1.314 1.168 0 .635-.374.927-.965 1.371-.673.489-1.206 1.06-1.168 1.987l.003.217a.25.25 0 0 0 .25.246h.811a.25.25 0 0 0 .25-.25v-.105c0-.718.273-.927 1.01-1.486.609-.463 1.244-.977 1.244-2.056 0-1.511-1.276-2.241-2.673-2.241-1.267 0-2.655.59-2.75 2.286zm1.557 5.763c0 .533.425.927 1.01.927.609 0 1.028-.394 1.028-.927 0-.552-.42-.94-1.029-.94-.584 0-1.009.388-1.009.94z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},search:(e,t)=>{const n={color:"black",width:18,height:18};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" class="bi bi-search" viewBox="0 0 16 16">\n\t\t<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"/>\n\t </svg>`;e.html(o).on("click",t.handler).style("cursor","pointer")},crosshair:(e,t={})=>{const n={color:"black",width:18,height:18,d:2};const o=n.width;const s=n.height;const r=n.d;Object.assign(n,t);const i=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" style='vertical-align: middle'>\n\t\t\x3c!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --\x3e\n\t\t<path d="M${o/2},${r}L${o/2},${s-r}Z" stroke='${n.color}'/>\n\t\t<path d="M${r},${s/2}L${o-r},${s/2}Z" stroke='${n.color}'/>\n\t\t</svg>`;e.html(i).on("click",t.handler).style("cursor","pointer")},grab:(e,t={})=>{const n={color:"black",width:18,height:18,transform:""};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" viewBox="0 0 448 512">\n\t\t\x3c!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --\x3e\n\t\t<path transform='${n.transform}' d="M144 64c0-8.8 7.2-16 16-16s16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16c0 9.1 5.1 17.4 13.3 21.5s17.9 3.2 25.1-2.3c2.7-2 6-3.2 9.6-3.2c8.8 0 16 7.2 16 16V264c0 31.3-20 58-48 67.9c-9.6 3.4-16 12.5-16 22.6V488c0 13.3 10.7 24 24 24s24-10.7 24-24V370.2c38-20.1 64-60.1 64-106.2V160c0-35.3-28.7-64-64-64c-2.8 0-5.6 .2-8.3 .5C332.8 77.1 311.9 64 288 64c-2.8 0-5.6 .2-8.3 .5C268.8 45.1 247.9 32 224 32c-2.8 0-5.6 .2-8.3 .5C204.8 13.1 183.9 0 160 0C124.7 0 96 28.7 96 64v64.3c-11.7 7.4-22.5 16.4-32 26.9l17.8 16.1L64 155.2l-9.4 10.5C40 181.8 32 202.8 32 224.6v12.8c0 49.6 24.2 96.1 64.8 124.5l13.8-19.7L96.8 361.9l8.9 6.2c6.9 4.8 14.4 8.6 22.3 11.3V488c0 13.3 10.7 24 24 24s24-10.7 24-24V359.9c0-12.6-9.8-23.1-22.4-23.9c-7.3-.5-14.3-2.9-20.3-7.1l-13.1 18.7 13.1-18.7-8.9-6.2C96.6 303.1 80 271.3 80 237.4V224.6c0-9.9 3.7-19.4 10.3-26.8l9.4-10.5c3.8-4.2 7.9-8.1 12.3-11.6V208c0 8.8 7.2 16 16 16s16-7.2 16-16V142.3 128 64z"/>\n\t\t</svg>`;e.html(o).style("cursor","pointer");if(t.handler)e.on("click",t.handler)},arrowPointer:(e,t={})=>{const n={color:"black",width:18,height:18,transform:""};Object.assign(n,t);const o=`<svg xmlns="http://www.w3.org/2000/svg" width="${n.width}" height="${n.height}" fill="${n.color}" viewBox="0 0 320 512">\n\t\t\x3c!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --\x3e\n\t\t<path transform='${n.transform}' d="M0 55.2V426c0 12.2 9.9 22 22 22c6.3 0 12.4-2.7 16.6-7.5L121.2 346l58.1 116.3c7.9 15.8 27.1 22.2 42.9 14.3s22.2-27.1 14.3-42.9L179.8 320H297.9c12.2 0 22.1-9.9 22.1-22.1c0-6.3-2.7-12.3-7.4-16.5L38.6 37.9C34.3 34.1 28.9 32 23.2 32C10.4 32 0 42.4 0 55.2z"/>\n\t\t</svg>`;e.html(o).style("cursor","pointer");if(t.handler)e.on("click",t.handler)}};function renderSandboxFormDiv(e,t){e.classed("sjpp-sandbox-form",true);const n=e.append("div").style("margin","40px 20px 20px 20px").classed("sjpp-sandbox-form-inputDiv",true);const o=n.append("p").classed("sjpp-sandbox-form-gselect",true);o.append("span").html("Genome&nbsp;");const s=o.append("select");for(const e in t){s.append("option").text(e)}const r=n.append("div").style("margin","20px 0px").classed("sjpp-sandbox-form-fileDiv",true);const i=e.append("div").style("margin","10px 20px").classed("sjpp-sandbox-form-sayDiv",true);const a=e.append("div").style("margin","20px").classed("sjpp-sandbox-form-visualDiv",true);return[n,s.node(),r,i,a]}const plotIdToSandboxId={};const sandboxIdStr=Math.random().toString().slice(-6)+"-"+(+new Date).toString().slice(-8);let sandboxIdSuffix=0;function newSandboxDiv(e,t={}){var n,o;const s=t.beforePlotId?"#"+plotIdToSandboxId[t.beforePlotId]:":first-child";const r=e.insert("div",s).attr("class","sjpp-sandbox");let i;if(t.plotId){i=`sjpp-sandbox-${sandboxIdStr}-${sandboxIdSuffix++}`;r.attr("id",i);plotIdToSandboxId[t.plotId]=i}const a=r.append("div").attr("class","sjpp-output-sandbox-header").style("width",((n=t.style)===null||n===void 0?void 0:n.width)||"95vw").style("border","1px solid #ccc").style("display","flex").style("align-items","center").style("justify-content","left");const l="blue";const c="black";const d=a.append("div").classed("sjpp-output-sandbox-close-bt",true).style("cursor","pointer").style("vertical-align","middle").on("mouseenter",(()=>{const e=d.select("path");e.attr("stroke",l)})).on("mouseleave",(()=>{const e=d.select("path");e.attr("stroke",c)})).html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-x-lg" viewBox="0 0 16 16">\n\t\t <path stroke='#000' d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/>\n\t\t</svg>`).on("mousedown",(e=>{document.body.dispatchEvent(new Event("mousedown"));e.stopPropagation()})).on("click",(()=>{a.on("click",null).on("mousedown",null);r.selectAll("*").remove();if(typeof t.close==="function")t.close()}));const p=a.append("div").classed("sjpp-output-sandbox-collapse-btn",true);const f=a.append("div").classed("sjpp-output-sandbox-expand-btn",true).style("display","none");const u=a.append("div").style("display","inline-flex").style("align-items","center").style("justify-content","left").style("padding","5px 10px");const h=r.append("div").attr("class","sjpp-output-sandbox-content").style("width",((o=t.style)===null||o===void 0?void 0:o.width)||"95vw");let m=true;icons["collapse"](p,{fontSize:"1.5em",padding:"4px 10px",color:"black",handler:g});icons["expand"](f,{fontSize:"1.5em",padding:"4px 10px",color:"black",display:"none",handler:g});p.on("mouseenter",(()=>{const e=p.select("path");e.attr("stroke",l)})).on("mouseleave",(()=>{const e=p.select("path");e.attr("stroke",c)}));f.on("mouseenter",(()=>{const e=f.select("path");e.attr("stroke",l)})).on("mouseleave",(()=>{const e=f.select("path");e.attr("stroke",c)}));function g(){m=!m;p.style("display",m==true?"inline-block":"none");f.style("display",m==true?"none":"inline-block");h.style("display",m==true?"block":"none")}return{header_row:a,header:u,body:h,app_div:r,id:i}}function bulkui(e,t,n,o,s,r){let i,a,l,c,d,p;if(s!==undefined)[a,l,c,d,p]=renderSandboxFormDiv(s,n);else{[i,a,l,c,d,p]=newpane3(e,t,n);i.header.text("Load mutation from text files")}a.append("div").style("margin","20px 0px").style("color","#858585").html(`\n\t<p>Choose one file and upload to initiate the display panel.<br>From there you can add additional files.</p>\n\t<div>Supported data types:</div>\n\t<ul>\n\t <li>SNV and indel</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1OJ9aXq2_-a3BfIQdKLYCYzrJRTpu4_9i3gephTY-Z38 target=_blank>Format</a>,\n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.snvindel.txt target=_blank>example file</a></li>\n\t </ul>\n\t <li>SV or fusion transcript</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1klDZ0MHVkQTW2-lCu_AvpRE4_FcbhdB-yI17wNdPaOM target=_blank>Tabular format</a>,\n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.svfusion.txt target=_blank>example file</a>\n\t\t</li>\n\t\t<li>JSON-format, to come</li>\n\t </ul>\n\t <li>CNV, gene-level</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1WHptqOWNf96V0bYEDpj-EsKZGYnbBNc9aQIrhzdEJaU target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.cnv.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t <li>ITD</li>\n\t <ul>\n\t \t<li>Internal tandem duplication, in-frame</li>\n\t <li><a href=https://drive.google.com/open?id=1Bh9awBsraoHbV8iWXv_3oDeXMsjIAHaOKHr973IJyZc target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.itd.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t <li>Intragenic deletion, in-frame</li>\n\t <ul>\n\t <li><a href=https://drive.google.com/open?id=1tWbf3rg3BmVIZPGGPk023P0aBkDw_ry5XuZLGyGodyg target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.deletion.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t <li>Truncation</li>\n\t <ul>\n\t \t<li>Either N-terminus loss or C-terminus loss</li>\n\t <li><a href=https://drive.google.com/open?id=1P1g-Y8r30pSKfan1BhYZcsUtSk7wRb4plaO1S-JCJr4 target=_blank>Format</a>, \n\t <a href=https://proteinpaint.stjude.org/ppdemo/hg19/heatmap/exampleFiles/example.truncation.txt target=_blank>example file</a>\n\t\t</li>\n\t </ul>\n\t</ul>`);const f=()=>{c.selectAll("*").remove();new ProjectHandler({bulkin:bulkin,genomes:n,gselect:l,content2flag:content2flag,flag2tp:h,filediv:c,init_bulk_flag:init_bulk_flag});c.append("span").html("Select data type&nbsp;");const e=filetypeselect(c).style("margin-right","20px");const t=c.append("input").attr("type","file").on("change",(t=>{const o=init_bulk_flag(n[l.options[l.selectedIndex].innerHTML]);o.geneToUpper=u.property("checked");d.text("");const s=t.target.files[0];if(!s){f();return}if(s.size==0){d.text("Wrong file: "+s.name);f();return}const r=new FileReader;r.onload=t=>{const n=content2flag(t.target.result,e.node().selectedIndex,o);if(n){d.text("Error: "+n);f();return}h(o,s)};r.onerror=function(){d.text("Error reading file "+s.name);f();return};d.text("Parsing file "+s.name+" ...");r.readAsText(s,"utf8")}));setTimeout((()=>t.node().focus()),1100)};f();c.append("span").html("<br/>Convert gene name to uppercase &nbsp;");const u=c.append("span").append("input").attr("type","checkbox").property("checked",true);function h(e,t,n=null,r=null){if(typeof e=="string"){d.text(e);f();return}d.text("");f();const l=n?n:Object.assign({genome:e.genome,name:t.name});const c=bulkin({flag:e,filename:t.name,cohort:l,flag2thisds:r});if(c){d.text("Error with "+t.name+": "+c);return}if(e.good==0){d.text("No mutations can be loaded");return}let u;if(i){disappear$1(i.pane);const e=newpane({x:100,y:100,toshrink:true});e.header.html('<span style="opacity:.5">FILE</span> '+t.name);u=e.body}if(s!==undefined){u=p.append("div").html('<span style="opacity:.5">FILE</span> '+t.name)}a.selectAll("*").remove();import("./tp.ui-ece56c46.js").then((function(e){return e.t})).then((e=>{e.default(l,u,o)}));return l}return function e(t,n){const o=content2flag(t.content,n,flag);if(o){d.text("Error: "+o);f();return}h(flag,t)}}function content2flag(e,t,n){if(!n)return"should not happen!";let o;switch(t){case 0:o=parse_snvindel(e,n);if(o)return o;break;case 1:o=parse_sv(e,n,true);if(o)return o;break;case 2:o=parse_sv(e,n,false);if(o)return o;break;case 3:o=parse_itd(e,n);if(o)return o;break;case 4:o=parse_del(e,n);if(o)return o;break;case 5:o=parse_trunc(e,n);if(o)return o;break;case 6:o=parse_cnv(e,n);if(o)return o;break;default:return"unknown option array index from file type <select>: "+t}}function bulkin(p,callback=null){const flag=p.flag;const cohort=p.cohort;if(!cohort.p2st){cohort.p2st={}}if(!cohort.dsset){cohort.dsset={}}if(!cohort.assaylst){cohort.assaylst=[]}if(flag.variantgene){if(cohort.variantgene){return"variantgene already set for this cohort"}cohort.variantgene=flag.variantgene}if(flag.snv.badlines.length>0){bulk_badline(flag.snv.header,flag.snv.badlines)}if(flag.fusion.badlines.length>0){bulk_badline(flag.fusion.header,flag.fusion.badlines)}if(flag.sv.badlines.length>0){bulk_badline(flag.sv.header,flag.sv.badlines)}if(flag.cnv.badlines.length>0){bulk_badline(flag.cnv.header,flag.cnv.badlines)}if(flag.itd.badlines.length>0){bulk_badline(flag.itd.header,flag.itd.badlines)}if(flag.del.badlines.length>0){bulk_badline(flag.del.header,flag.del.badlines)}if(flag.truncation.badlines.length>0){bulk_badline(flag.truncation.header,flag.truncation.badlines)}if(flag.good==0){return false}const tmp={};let hastumormaf=false;if(flag.snv.loaded){for(const e of flag.snv.header){tmp[e]=1}if("maf_tumor_v1"in tmp&&"maf_tumor_v2"in tmp){hastumormaf=true}}if(flag.cnv.loaded){for(const e of flag.cnv.header){tmp[e]=1}}if(flag.fusion.loaded){for(const e of flag.fusion.header){tmp[e]=1}}if(flag.sv.loaded){for(const e of flag.sv.header){tmp[e]=1}}if(flag.itd.loaded){for(const e of flag.itd.header){tmp[e]=1}}if(flag.del.loaded){for(const e of flag.del.header){tmp[e]=1}}if(flag.truncation.loaded){for(const e of flag.truncation.header){tmp[e]=1}}const hassample="sample"in tmp||"patient"in tmp;const hasdisease="disease"in tmp;const hasst="sampletype"in tmp;let dsc;if(p.flag2thisds){dsc=p.flag2thisds;if(hassample&&!dsc.hassample){return'"sample" column found in new data but not in existing data'}if(!hassample&&dsc.hassample){return'"sample" column found in existing data but not in new data'}if(hasdisease&&!dsc.hasdisease){return'"disease" column found in new data but not in existing data'}if(!hasdisease&&dsc.hasdisease){return'"disease" column found in existing data but not in new data'}if(hasst&&!dsc.hasst){return'"sampletype" column found in new data but not in existing data'}if(!hasst&&dsc.hasst){return'"sampletype" column found in existing data but not in new data'}for(const e in flag.data){const t=dsc.bulkdata[e];if(t){dsc.bulkdata[e]=t.concat(flag.data[e])}else{dsc.bulkdata[e]=flag.data[e]}}}else{let dsname=p.filename+(flag.tpsetname?"_"+flag.tpsetname:"");if(dsname in flag.genome.datasets){let e=1;let t=dsname+" "+e;while(t in flag.genome.datasets){e++;t=dsname+" "+e}dsname=t}dsc={label:dsname,bulkdata:flag.data,hassample:hassample,hasdisease:hasdisease,hastumormaf:hastumormaf,hasst:hasst,genome:cohort.genome,import:{},imported:{},importsilent:flag.snv.silent==0?false:flag.snv.missense/flag.snv.silent>=5?false:true};flag.genome.datasets[dsname]=dsc;cohort.dsset[dsname]=dsc;if(cohort.dbexpression){if(cohort.dbexpression.tidy){try{cohort.dbexpression.tidy=eval("("+cohort.dbexpression.tidy+")")}catch(e){err("invalid JavaScript for dbexpression.tidy");delete cohort.dbexpression}}dsc.dbexpression=cohort.dbexpression}if(hasdisease){dsc.stratify=[{label:"disease",attr1:{k:"disease",label:"disease"}}]}}if(hassample){for(const e in flag.data){for(const t of flag.data[e]){let e=t.patient;if(!e){e=t.sample;if(!e){continue}}if(!cohort.p2st[e]){cohort.p2st[e]={}}let n=t.sampletype;if(!n){n=e}if(!cohort.p2st[e][n]){cohort.p2st[e][n]={dsset:{},tktemplate:[]}}if(!cohort.p2st[e][n].dsset[dsc.label]){cohort.p2st[e][n].dsset[dsc.label]=[]}cohort.p2st[e][n].dsset[dsc.label].push(t)}}}if(callback)callback();return false}function bulkembed(e){if(!e.name)e.name="Unnamed dataset";let t=e.holder;if(!t){const e=newpane({x:100,y:100});t=e.body}const n=t.append("div");new Promise(((t,n)=>{const o={dsset:{}};for(const t in e){if(t=="snvindel"||t=="svjson"||t=="cnv"||t=="sv"||t=="mutationset"){continue}o[t]=e[t]}t(o)})).then((t=>{if(!e.snvindel&&!e.svjson&&!e.cnv&&!e.sv)return t;const n=init_bulk_flag(t.genome);if(e.snvindel){const t=parse_snvindel(e.snvindel,n);if(t)throw{message:"error in snvindel data: "+t};delete e.snvindel}if(e.svjson){const t=parse_svjson(e.svjson,n);if(t)throw{message:"error in svjson data: "+t};delete e.svjson}if(e.sv){const t=parse_sv(e.sv,n);if(t)throw{message:"error in svjson data: "+t};delete e.sv}if(e.cnv){const t=parse_cnv(e.cnv,n);if(t)throw{message:"error in cnv data: "+t};delete e.cnv}const o=bulkin({flag:n,filename:e.name,cohort:t});if(o)throw{message:"Error parsing data: "+o};return t})).then((t=>{if(!e.mutationset)return t;if(!Array.isArray(e.mutationset))throw{message:"mutationset is not an array"};const n=[];for(const o of e.mutationset){const s=init_bulk_flag(t.genome);const r=[];if(o.snvindel){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.snvindel+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with snvindel file: "+e.error};const t=parse_snvindel(e.text,s);if(t)throw{message:"error with snvindel file: "+t}}));r.push(n)}if(o.snvindel_url){r.push(dofetch("urltextfile",{url:o.snvindel_url}).then((e=>{if(e.error)throw{message:"cannot get snvindel file from url"};const t=parse_snvindel(e.text,s);if(t)throw{message:"error with snvindel file: "+t}})))}if(o.cnv){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.cnv+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with cnv file: "+e.error};const t=parse_cnv(e.text,s);if(t)throw{message:"error with cnv file: "+t}}));r.push(n)}if(o.cnv_url){r.push(dofetch("urltextfile",{url:o.cnv_url}).then((e=>{if(e.error)throw{message:"cannot get cnv file from url"};const t=parse_cnv(e.text,s);if(t)throw{message:"error with cnv file: "+t}})))}if(o.sv){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.sv+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with sv file: "+e.error};const t=parse_sv(e.text,s,true);if(t)throw{message:"error with sv file: "+t}}));r.push(n)}if(o.sv_url){r.push(dofetch("urltextfile",{url:o.sv_url}).then((e=>{if(e.error)throw{message:"cannot get sv file from url"};const t=parse_sv(e.text,s);if(t)throw{message:"error with sv file: "+t}})))}if(o.fusion){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.fusion+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with fusion file: "+e.error};const t=parse_sv(e.text,s,false);if(t)throw{message:"error with fusion file: "+t}}));r.push(n)}if(o.svjson){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.svjson+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with svjson file: "+e.error};const t=parse_svjson(e.text,s);if(t)throw{message:"error with svjson file: "+t}}));r.push(n)}if(o.deletion){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.deletion+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with deletion file: "+e.error};const t=parse_del(e.text,s);if(t)throw{message:"error with deletion file: "+t}}));r.push(n)}if(o.deletion_url){r.push(dofetch("urltextfile",{url:o.deletion_url}).then((e=>{if(e.error)throw{message:"cannot get deletion file from url"};const t=parse_del(e.text,s);if(t)throw{message:"error with deletion file: "+t}})))}if(o.truncation){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.truncation+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with truncation file: "+e.error};const t=parse_trunc(e.text,s);if(t)throw{message:"error with truncation file: "+t}}));r.push(n)}if(o.truncation_url){r.push(dofetch("urltextfile",{url:o.truncation_url}).then((e=>{if(e.error)throw{message:"cannot get truncation file from url"};const t=parse_trunc(e.text,s);if(t)throw{message:"error with truncation file: "+t}})))}if(o.itd){const t=new Request(e.hostURL+"/textfile",{method:"POST",body:'{"file":"'+o.itd+'"}'});const n=fetch(t).then((e=>e.json())).then((e=>{if(e.error)throw{message:"error with itd file: "+e.error};const t=parse_itd(e.text,s);if(t)throw{message:"error with itd file: "+t}}));r.push(n)}if(o.itd_url){r.push(dofetch("urltextfile",{url:o.itd_url}).then((e=>{if(e.error)throw{message:"cannot get itd file from url"};const t=parse_itd(e.text,s);if(t)throw{message:"error with itd file: "+t}})))}const i=Promise.all(r).then((n=>{const r=bulkin({flag:s,filename:e.name,cohort:t});if(r)throw{message:"Error parsing data from "+o.name+": "+r}}));n.push(i)}return Promise.all(n).then((e=>t))})).then((o=>{const s=tpinit(o);if(s)throw{message:"Error parsing study: "+s};n.text("");import("./tp.ui-ece56c46.js").then((function(e){return e.t})).then((n=>{n.default(o,t,e.hostURL)}))})).catch((e=>{n.text(e.message);if(e.stack){console.log(e.stack)}}))}function parse_snvindel(e,t){const n=e.trim().split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$6(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$6(e,n[e],t)}}function parse_svjson(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const[r,i]=parseheader$4(o);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$4(e,n[e],t,i)}}function parse_cnv(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$3(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$3(e,n[e],t)}}function parse_itd(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$2(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$2(e,n[e],t)}}function parse_del(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader$1(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline$1(e,n[e],t)}}function parse_trunc(e,t){const n=e.split(/\r?\n/);let o=n[0];let s=0;while(o[0]=="#"){s++;o=n[s]}if(!o)return"no header line";const r=parseheader(o,t);if(r)return"header error: "+r;for(let e=s+1;e<n.length;e++){if(n[e]=="")continue;if(n[e][0]=="#")continue;parseline(e,n[e],t)}}function parse_sv(e,t,n){const o=e.split(/\r?\n/);let s=o[0];let r=0;while(s[0]=="#"){r++;s=o[r]}if(!s)return"no header line";const i=parseheader$5(s,t,n);if(i)return"header error: "+i;for(let e=r+1;e<o.length;e++){if(o[e]=="")continue;if(o[e][0]=="#")continue;parseline$5(e,o[e],t,n)}}function appear(e,t){e.style("opacity",0).style("display",t||"block").transition().style("opacity",1)}function disappear(e,t){e.style("opacity",1).transition().style("opacity",0).call((()=>{if(t){e.remove()}else{e.style("display","none").style("opacity",1)}}))}function sayerror(e,t){let n;if(typeof t=="string"){n=t}else{n=t.message||t.error;if(t.stack)console.log(t.stack)}const o=e.append("div").attr("class","sja_errorbar");o.append("div").text(n);o.append("div").html("&#10005;").on("click",(()=>{disappear(o,true)}))}function throwMsgWithFilePathAndFnName(e){try{throw new Error}catch(t){const n=t.stack.split("\n");const o=n[2].trim();const s=/\s*at\s+(.*)\s+\((.*).proteinpaint.js:(\d+):(\d+)\)/;const r=o.match(s);if(r){const t=r[1];const n=r[2].replace(/^.*\/bin\//,"").replace(/_([^_]+)$/,".$1").replaceAll(/_/g,"/");const o=`${e} [${n} ${t}()]`;throw new Error(o)}else{throw new Error(e)}}}function showErrorsWithCounter(e,t){if(typeof e=="string")return sayerror(t,e);if(e.length===0)return;if(e.length===1)return sayerror(t,e[0]);let n=false;const o=t.append("div").attr("class","sja_errorbar").on("click",(()=>{n=!n;r.style("display",n?"block":"none")}));const s=o.append("div").style("display","inline-block");s.append("div").style("display","inline-block").style("color","white").style("background-color","red").style("border-radius","100px").style("padding","1px 4px").text(e.length);s.append("div").text("errors found.").style("padding","3px").style("display","inline-block");o.append("div").style("display","inline-block").style("float","right").html("&#10005;").on("click",(()=>{disappear(o,true)}));const r=o.append("div").style("display","none").style("margin-left","10px");for(const t of e){r.append("div").text(t)}}async function string2snp(e,t){const n=await dofetch3("snp",{method:"POST",body:JSON.stringify({byName:true,genome:e.name,lst:[t]})});if(n.error)throw n.error;if(!n.results||n.results.length==0)throw t+": not a SNP";for(const t of n.results){const n=e.chrlookup[t.chrom.toUpperCase()];if(n&&n.major){return{chr:t.chrom,start:t.chromStart,stop:t.chromEnd}}}const o=n.results[0];return{chr:o.chrom,start:o.chromStart,stop:o.chromEnd}}async function blockinit(e){if(!e.holder)throw"No holder for block.init";if(!e.genome)throw"no genome";if(e.holder instanceof Element)e.holder=d3select(e.holder);if(!e.tklst)e.tklst=[];if(e.query){await step1_findgm(e);return}if(e.model&&e.allmodels){await step2_getseq(e);return}}async function step1_findgm(e){const t=e.holder.append("p").style("font-size","2em").style("color","#858585").text("Searching for "+e.query+" ...");const n=await dofetch3("genelookup",{body:{deep:1,input:e.query,genome:e.genome.name}});if(!n)throw"querying genes: server error";if(n.error)throw"error querying genes: "+n.error;if(!n.gmlst||n.gmlst.length==0){if(e.genome.hasSNP){try{const n=await string2snp(e.genome,e.query);t.remove();const o={genome:e.genome,holder:e.holder,chr:n.chr,start:Math.max(0,n.start-300),stop:n.start+300,nobox:true,tklst:e.tklst,debugmode:e.debugmode};first_genetrack_tolist(e.genome,o.tklst);const s=await import("./block-06e306e9.js").then((function(e){return e.c}));const r=new s.Block(o);r.addhlregion(n.chr,n.start,n.stop-1)}catch(n){t.text("Not a gene or SNP: "+e.query)}}else{t.text("No match to gene: "+e.query)}return}t.remove();e.allmodels=n.gmlst;for(const t of e.allmodels){if(t.isoform.toUpperCase()==(n.found_isoform?n.found_isoform.toUpperCase():e.query.toUpperCase())){e.model=t;await step2_getseq(e);return}}const o=[];for(const t of e.allmodels){if(!t.isoform)throw"isoform missing from one gene model: "+JSON.stringify(t);const n=t.isoform.toUpperCase();if(e.genome.isoformcache.has(n)){let o=true;for(const s of e.genome.isoformcache.get(n)){if(s.chr==t.chr&&s.start==t.start&&s.stop==t.stop&&s.strand==t.strand){o=false;break}}if(o){e.genome.isoformcache.get(n).push(t)}}else{e.genome.isoformcache.set(n,[t])}if(t.isoform.toUpperCase()==e.query.toUpperCase()){o.push(t);break}if(t.isdefault){o.push(t)}}if(o.length==1){e.model=o[0]}else if(o.length>1){for(const t of o){if(t.chr=="chrY"){continue}const n=e.genome.chrlookup[t.chr.toUpperCase()];if(!n){continue}if(!n.major){continue}e.model=t;break}if(!e.model){e.model=o[0]}}if(!e.model){e.model=e.allmodels[0]}await step2_getseq(e)}async function step2_getseq(e){if(e.model.genomicseq){o();step2_getpdomain(e);return}const t={genome:e.genome.name,coord:e.model.chr+":"+(e.model.start+1)+"-"+e.model.stop};const n=await dofetch3("ntseq",{method:"POST",body:JSON.stringify(t)});if(!n)throw"getting sequence: server error";if(n.error)throw"getting sequence: "+n.error;if(!n.seq)throw"no nt seq???";e.model.genomicseq=n.seq.toUpperCase();e.model.aaseq=nt2aa(e.model);o();await step2_getpdomain(e);function o(){if(e.model.aaseq){const t=e.model.aaseq.indexOf(codon_stop);const n=e.model.cdslen-(e.model.startCodonFrame?3-e.model.startCodonFrame:0);if(t!=-1&&t<n/3-1){sayerror(e.holder,"Translating "+e.model.isoform+" ends at "+t+" AA, expecting "+n/3)}}}}async function step2_getpdomain(e){const t=new Map;for(const n of e.allmodels){if(!n.pdomains){n.pdomains=[];n.domain_hidden={};if(!t.has(n.isoform))t.set(n.isoform,[]);t.get(n.isoform).push(n)}}if(t.size==0){await step3(e);return}const n=await dofetch3("pdomain",{method:"POST",body:JSON.stringify({genome:e.genome.name,isoforms:[...t.keys()]})});if(n.error)throw"error getting protein domain: "+n.error;if(n.lst){const e=ordinal().range(domaincolorlst);for(const o of n.lst){for(const e of t.get(o.name)){e.pdomains=o.pdomains}for(const t of o.pdomains){if(!t.color){t.color=e(t.name+t.description)}}}}await step3(e)}async function step3(e){let t=e.gmmode;if(!t){if(e.model.cdslen){t=gmmode.protein}else{t=gmmode.exononly}}if(e.dataset){if(!Array.isArray(e.dataset))throw"dataset is not array";for(const t of e.dataset){if(e.genome.datasets[t]&&!e.genome.datasets[t].legacyDsIsUninitiated)continue;const n=await dofetch3(`getDataset?genome=${e.genome.name}&dsname=${t}`);if(n.error)throw`invalid name from dataset[]: ${n.error}`;if(!n.ds)throw".ds missing";const o=e.genome.datasets[n.ds.label];Object.assign(o,n.ds);const s=await import("./legacyDataset-661691af.js");s.validate_oldds(o);delete o.legacyDsIsUninitiated}}const n=await import("./block-06e306e9.js").then((function(e){return e.c}));e.__blockInstance=new n.Block({genome:e.genome,holder:e.holder,nobox:true,usegm:e.model,gmstackheight:37,allgm:e.allmodels,datasetlst:e.dataset,legacyDsFilter:e.legacyDsFilter,mset:e.mset,hlaachange:e.hlaachange,hlvariants:e.hlvariants,hlregions:e.hlregions,gmmode:t,hidedatasetexpression:e.hidedatasetexpression,hidegenecontrol:e.hidegenecontrol,hidegenelegend:e.hidegenelegend,variantPageCall_snv:e.variantPageCall_snv,datasetqueries:e.datasetqueries,samplecart:e.samplecart,debugmode:e.debugmode,tklst:e.tklst,mclassOverride:e.mclassOverride,hide_dsHandles:e.hide_dsHandles,onloadalltk_always:e.onloadalltk_always})}var block_init=Object.freeze({__proto__:null,default:blockinit});async function init_mdsjson(e,t){let n=[],o=[];if(e&&e.includes(","))n=e.split(",");else if(e)n.push(e);else if(t&&t.includes(","))o=t.split(",");else if(t)o.push(t);const s=[];if(n.length){const e=undefined;for(const t of n){s.push(await tklst_pipeline(t,e))}}else if(o.length){const e=undefined;for(const t of o){s.push(await tklst_pipeline(e,t))}}return s}async function tklst_pipeline(e,t){const n=await mdsjson_parse(e,t);validate_mdsjson(n);const o=get_json_tk(n);return o}async function mdsjson_parse(e,t){if(e!==undefined&&e=="")throw".jsonfile missing";if(t!==undefined&&t=="")throw".jsonurl missing";let n;if(e!==undefined)n=await dofetch("textfile",{file:e});else if(t!==undefined)n=await dofetch("urltextfile",{url:t});if(n.error){throw n.error}return JSON.parse(n.text)}function validate_mdsjson(e){if(!e)throw"file is missing";if(!e.type)throw"dataset type is missing";const t=e.svcnvfile||e.svcnvurl;const n=e.vcffile||e.vcfurl;if(!t&&!n)throw"vcf or cnv file/url is required";if(Object.keys(e).filter((e=>e.includes("expression"))).length){if(!e.expressionfile&&!e.expressionurl)throw"expression file/url is missing"}if(Object.keys(e).filter((e=>e.includes("rnabam"))).length){if(!e.rnabamfile&&!e.rnabamurl)throw"rnabam file/url is missing"}if(e.sampleset){for(const t of e.sampleset){if(e.sampleset.length!=1&&!t.name)throw"sampleset name is missing";if(!t.samples)throw"sampleset samples[] is missing"}}if(e.sample2assaytrack){for(const[t,n]of Object.entries(e.sample2assaytrack)){if(!n.length)throw"assay[] missing for "+t;for(const e of n){if(!e.name)throw"assay name is missing for "+t;if(!e.type)throw"assay type is missing for "+t}}}if(e.groupsamplebyattr){if(!e.groupsamplebyattr.attrlst)return".attrlst[] missing from groupsamplebyattr";if(e.groupsamplebyattr.attrlst.length==0)return"groupsamplebyattr.attrlst[] empty array";for(const t of e.groupsamplebyattr.attrlst){if(!t.k)return"k missing from one of groupsamplebyattr.attrlst[]"}if(e.groupsamplebyattr.sortgroupby){if(!e.groupsamplebyattr.sortgroupby.key)return".key missing from .sortgroupby";if(!e.groupsamplebyattr.sortgroupby.order)return".order[] missing from .sortgroupby";if(!Array.isArray(e.groupsamplebyattr.sortgroupby.order))return".order must be an array"}if(!e.groupsamplebyattr.attrnamespacer)e.groupsamplebyattr.attrnamespacer=", "}if(e.fixedgeneexpression){for(const t of e.fixedgeneexpression){if(!t.gene)throw"gene missing in fixedgeneexpression array"}}if(e.vcf){if(!e.vcf.hiddenclass)throw"hiddenclasses[] missing from .vcf"}}function get_json_tk(e){const t={type:e.type,name:e.name};if(e.isdense=="true"||e.isdense==true||e.isfull===false)t.isdense=true;else if(e.isfull)t.isfull=true;if(e.svcnvfile)t.file=e.svcnvfile;else if(e.svcnvurl)t.url=e.svcnvurl;if(Object.keys(e).filter((e=>e.includes("expression"))).length){t.checkexpressionrank={file:e.expressionfile,url:e.expressionurl}}if(Object.keys(e).filter((e=>e.includes("vcf"))).length){t.checkvcf={file:e.vcffile,url:e.vcfurl}}if(e.vcf){if(e.vcf.hiddenclass){t.vcf=[];t.vcf.hiddenclass=e.vcf.hiddenclass}}if(Object.keys(e).filter((e=>e.includes("rnabam"))).length){t.checkrnabam={file:e.rnabamfile,url:e.rnabamurl}}if(e.sampleset){t.sampleset=e.sampleset}if(e.sample2assaytrack){t.sample2assaytrack=e.sample2assaytrack}if(e.groupsamplebyattr){t.groupsamplebyattr=e.groupsamplebyattr}t.fixedgeneexpression=e.fixedgeneexpression;t.getallsamples=e.getallsamples;t.valueCutoff=e.cnvValueCutoff!==undefined?e.cnvValueCutoff:undefined;t.bplengthUpperLimit=e.cnvLengthUpperLimit!==undefined?e.cnvLengthUpperLimit:undefined;t.segmeanValueCutoff=e.segmeanValueCutoff!==undefined?e.segmeanValueCutoff:undefined;t.lohLengthUpperLimit=e.lohLengthUpperLimit!==undefined?e.lohLengthUpperLimit:undefined;t.multihidelabel_vcf=e.multihidelabel_vcf!==undefined?e.multihidelabel_vcf:undefined;t.multihidelabel_fusion=e.multihidelabel_fusion!==undefined?e.multihidelabel_fusion:undefined;t.multihidelabel_sv=e.multihidelabel_sv!==undefined?e.multihidelabel_sv:undefined;t.legend_vorigin=e.legend_vorigin;return t}async function get_scatterplot_data(e,t){let n={};const o=await mdsjson_parse(e,t);n.mdssamplescatterplot=o;return n}function isNumeric(e){return!isNaN(parseFloat(e))&&isFinite(e)}function convertUnits(e,t,n,o,s){if(o>=1){const t=Math.floor(e*o);if(s)return`${t}${n.charAt(0)}`;return`${t} ${t>1?n+"s":""}`}const r=Math.floor(e*o);const i=Math.ceil(e%(1/o));if(i==0){if(s)return`${r}${n.charAt(0)}`;return`${r} ${r>1?n+"s":""}`}if(s)return`${r}${n.charAt(0)}${i}${t.charAt(0)}`;return`${r} ${r>1?n+"s":""} ${i} ${i>1?t+"s":""}`}function urlmap(e="",t=console.warn){const n=e?{search:e}:window.location;const o=new Map;for(const e of n.search.substr(1).split("&")){if(!e)continue;const n=e.split("=");if(n.length==2&&n[0]!=""&&n[1]!=""){let e=decodeURIComponent(n[1]);if(e.startsWith('"')&&e.endsWith('"')||e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")){try{e=JSON.parse(e)}catch(e){t(e)}}else if(isNumeric(e)){e=Number(e)}o.set(n[0].toLowerCase(),e)}else if(n.length>2){t(`unexpected '=' character in the URL parameter value for '${n[0]}'`)}else{t(`Invalid url parameter: '${e}'`)}}return o}function corsMessage(e,t=""){const n=e.state?.embedder;const o=t=>{if(t.origin!==n.origin)return;if(t.data=="getActiveMassSession"){window.removeEventListener("message",o);s.postMessage({state:e.state},n.origin);if(n.origin!=window.location.origin){setTimeout((()=>{try{window.close()}catch(e){console.log(e);window.open(window.location,"_self").close()}}),500)}}};window.addEventListener("message",o,false);setTimeout((()=>window.removeEventListener("message",o)),8e3);if(n.origin!=window.location.origin){confirm(`Another window will open to recover the saved session. When the next window opens,`+`\n- You may need to allow popups.`+`\n- You may have to refresh it.`+`\n- After the session is recovered, this browser window should automatically close.`);document.body.innerHTML=`\n\t\t\t<div style='margin: 20px; padding: 20px; font-size: 24px'>\n\t\t\t\tPlease close this browser tab. The recovered session should visible in another browser tab.\n\t\t\t</div>\n\t\t`}const s=window.open(n.href,"_blank")}async function parse(e){const t=urlmap();if(t.has("appcard")){const n=await Promise.resolve().then((function(){return adSandbox}));const o=t.get("appcard");const s=await dofetch2("/cards/index.json");e.app.drawer.opts.genomes=e.genomes;e.app.drawer.opts.fromApp=true;e.app.drawer.opts.app={cardsPath:"cards"};const r=s.elements.findIndex((e=>e.sandboxJson==o||e.sandboxHtml==o));if(r<=0){const t=[...s.elements.filter((e=>e.type=="nestedCard"))];let r,i;t.findIndex((e=>{for(const[t,n]of e.children.entries()){if(n.sandboxJson==o||n.sandboxHtml==o){r=e;i=t}}}));n.openSandbox(r.children[i],e.app.drawer.opts)}else{n.openSandbox(s.elements[r],e.app.drawer.opts)}return}if(t.has("gdcbamslice")){const n=await import("./block.tk.bam.gdc-318db418.js");n.bamsliceui({genomes:e.genomes,holder:e.holder,debugmode:e.debugmode,stream2download:t.has("stream2download")});return}if(t.has("gdcmaf")){const t=await import("./gdc.maf-84509ef3.js");t.gdcMAFui({holder:e.holder,debugmode:e.debugmode});return}if(t.has("gdcsinglecell")){const t=await import("./gdc.singleCell-350d7e63.js");t.gdcSinglecellUi({holder:e.holder,debugmode:e.debugmode});return}if(t.has("mdsjsonform")){const t=await import("./mdsjsonform-cd7cbed1.js");await t.init_mdsjsonform(e);return}if(t.has("termdb")){const n=t.get("termdb");const o=typeof n==="string"?JSON.parse(n):n;const s={holder:e.holder,state:o};const r=await import("./app-9ef9a482.js");r.appInit(s);return}if(t.has("massnative")){const n=t.get("massnative");const[o,s]=n.split(",");if(!o||!s)throw'value is not "genome,dslabel"';const r={holder:e.holder,genome:e.genomes[o],state:{genome:o,dslabel:s}};if(!r.genome)throw"invalid genome";const i=await import("./app-53b444fe.js");i.appInit(r);return}if(t.has("mass")){const n=t.get("mass");const o=typeof n==="string"?JSON.parse(n):n;const s={holder:e.holder,state:o};if(o.genome){s.genome=e.genomes[o.genome]}else if(o?.vocab?.genome){s.genome=e.genomes[o.vocab.genome]}const r=await import("./app-53b444fe.js");r.appInit(s);return}if(t.has("mass-session-file")||t.has("mass-session-url")){let n;if(t.has("mass-session-file")){const o=t.get("mass-session-file");const s=await dofetch3(`/textfile`,{method:"POST",body:JSON.stringify({file:o})});const r=JSON.parse(s.text);n={holder:e.holder,state:r,genome:e.genomes[r.vocab.genome]}}if(t.has("mass-session-url")){const o=t.get("mass-session-url");const s=await dofetch3("/urltextfile",{method:"POST",body:JSON.stringify({url:o})});const r=JSON.parse(s.text);n={holder:e.holder,state:r,genome:e.genomes[r.vocab.genome]}}const o=await import("./app-53b444fe.js");o.appInit(n);return}if(t.has("mass-session-id")){const n=t.get("mass-session-id");const o=t.get("src");let s;if(o=="browser"){const e=localStorage.getItem("savedMassSessions");const t=JSON.parse(e);s={state:t[n]}}else{const e={headers:{},body:{id:n}};if(o=="cred"){const n=t.get("dslabel");const o=t.get("route");e.body.dslabel=n;e.body.route=o;e.body.route=o;const s=localStorage.getItem("jwtByDsRoute")||`{}`;this.jwtByDsRoute=JSON.parse(s);const r=this.jwtByDsRoute[n][o];e.headers.authorization=`Bearer ${btoa(r)}`}s=await dofetch3(`/massSession`,e);if(s.error)throw s.error}const r=s.state?.embedder;if(r&&r.origin!=window.location.origin){corsMessage(s);return}const i={holder:e.holder,state:s.state,genome:e.genomes[s.state.vocab.genome],sessionDaysLeft:s.sessionDaysLeft,sessionId:n};const a=await import("./app-53b444fe.js");a.appInit(i);return}if(t.has("genome")&&e.selectgenome){const n=t.get("genome");const o=[...e.selectgenome.node().childNodes];const s=o.findIndex((e=>e.value==n));if(s==-1){sayerror(e.holder,`Invalid genome: ${n}. Please provide an available genome from this list: ${o.map((e=>e.value)).join(", ").replace(/,(?=[^,]*$)/,", or")}`);return}e.selectgenome.node().selectedIndex=s;e.selectgenome.node().dispatchEvent(new Event("change"))}if(t.has("hicfile")||t.has("hicurl")){let n,o;if(t.has("hicfile")){n=t.get("hicfile")}else{o=t.get("hicurl")}const s=t.get("genome");if(!s)throw"genome is required for hic";const r=e.genomes[s];if(!r)throw"invalid genome";const i={genome:r,file:n,url:o,name:path__default.basename(n||o),hostURL:e.hostURL,enzyme:t.get("enzyme"),holder:e.holder};const a=await import("./hic.straw-3143889c.js").then((function(e){return e.a}));await a.init_hicstraw(i);return}if(t.has("singlecell")){if(!t.has("genome"))throw'"genome" is required for "singlecell"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s=await import("./singlecell-d21858f6.js");s.init({genome:o,jsonfile:t.get("singlecell")},e.holder);return}if(t.has("mavbfile")){if(!t.has("genome"))throw'"genome" is required for "mavb"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s=await import("./mavb-dc006bd3.js");s.mavbparseinput({genome:o,hostURL:e.hostURL,file:t.get("mavbfile")},(()=>{}),e.holder,e.jwt);return}if(t.has("mavburl")){if(!t.has("genome"))throw'"genome" is required for "mavb"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s=await import("./mavb-dc006bd3.js");s.mavbparseinput({genome:o,hostURL:e.hostURL,url:t.get("mavburl")},(()=>{}),e.holder,e.jwt);return}if(t.has("scatterplot")){if(!t.has("genome"))throw'"genome" is required for "scatterplot"';const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;let s;if(t.has("mdsjson")||t.has("mdsjsonurl")){const e=t.get("mdsjsonurl");const n=t.get("mdsjson");s=await get_scatterplot_data(n,e)}if(t.has("tsnejson")){const e=t.get("tsnejson");const n=await dofetch("textfile",{file:e});if(n.error)throw n.error;else if(n.text){s={mdssamplescatterplot:{analysisdata:JSON.parse(n.text)}}}}s.mdssamplescatterplot.genome=o;const r=await import("./mds.samplescatterplot-c8732bae.js");r.init(s.mdssamplescatterplot,e.holder,false);return}if(t.has("block")){if(!t.has("genome"))throw"missing genome for block";const n=t.get("genome");const o=e.genomes[n];if(!o)throw"invalid genome: "+n;const s={nobox:1,hostURL:e.hostURL,jwt:e.jwt,holder:e.holder,genome:o,dogtag:n,debugmode:e.debugmode};let r=null;let i=null;if(t.has("position")){const e=t.get("position").split(";");if(e[0]){const t=e[0].split(/[:-]/);const n=t[0];const o=Number.parseInt(t[1]);const s=Number.parseInt(t[2]);if(!n)throw"chr missing";if(Number.isNaN(o)||Number.isNaN(s))throw"Invalid start/stop value in position";r={chr:n,start:o,stop:s}}const n=[];for(let t=1;t<e.length;t++){if(!e[t])continue;const o=e[t].split(/[:-]/);const s=o[0];const r=Number.parseInt(o[1]);const i=Number.parseInt(o[2]);if(!s)throw"subpanel chr missing";if(Number.isNaN(r)||Number.isNaN(i))throw"Invalid start/stop value in subpanel position";n.push({chr:s,start:r,stop:i,width:600,leftborder:"rgba(200,0,0,.1)",leftpad:5})}if(n.length){s.subpanels=n}}if(t.has("regions")){i=[];for(const e of t.get("regions").split(",")){const t=e.split(/[:-]/);t[0];const n=Number.parseInt(t[1]);const o=Number.parseInt(t[2]);if(Number.isNaN(n)||Number.isNaN(o))throw"Invalid start/stop value in regions";i.push({chr:t[0],start:n,stop:o})}}if(!r&&!i){if(o.defaultcoord){r={chr:o.defaultcoord.chr,start:o.defaultcoord.start,stop:o.defaultcoord.stop}}}if(r){s.chr=r.chr;s.start=r.start;s.stop=r.stop}else if(i){s.rglst=i}if(t.has("hlregion")){const e=[];for(const n of t.get("hlregion").split(",")){const t=string2pos(n,o,true);if(t)e.push(t)}if(e.length)s.hlregions=e}s.datasetqueries=may_get_officialmds(t);s.tklst=await get_tklst(t,o);first_genetrack_tolist(e.genomes[n],s.tklst);mayAddBedjfilterbyname(t,s.tklst);const a=await import("./block-06e306e9.js").then((function(e){return e.c}));new a.Block(s);return}if(t.has("gene")){const n=t.get("gene");if(n.length==0)throw"zero length query string";const o={hostURL:e.hostURL,query:n,holder:e.holder,variantPageCall_snv:e.variantPageCall_snv,samplecart:e.samplecart,debugmode:e.debugmode};{let n;for(let t in e.genomes){if(e.genomes[t].isdefault){n=t;break}}if(t.has("genome")){n=t.get("genome")}if(!n)throw"No genome, and none set as default";o.genome=e.genomes[n];if(!o.genome)throw"invalid genome: "+n}if(t.has("dataset")){o.dataset=t.get("dataset").split(",")}if(t.has("hlaachange")){o.hlaachange=new Map;for(const e of t.get("hlaachange").split(",")){o.hlaachange.set(e,false)}}if(t.has("hlregion")){const e=[];for(const n of t.get("hlregion").split(",")){const t=string2pos(n,o.genome,true);if(t)e.push(t)}if(e.length)o.hlregions=e}o.tklst=await get_tklst(t,o.genome);mayAddBedjfilterbyname(t,o.tklst);o.datasetqueries=may_get_officialmds(t);await blockinit(o);return}if(t.has("disco")){const n=t.get("genome");const o=e.genomes[n];if(!o)throw"genome missing";const s=t.get("dslabel");if(!s)throw"dslabel missing";const r=t.get("sample");if(!r)throw"sample_id missing";const i=(await import("./filter-6b0bd66e.js").then((function(e){return e.q}))).vocabInit({state:{genome:n,dslabel:s}});const a=await i.getTermdbConfig();await(await import("./plot.disco-15695284.js")).default(a,s,{sample_id:r},e.holder,o);return}if(t.has("study")){const n=t.get("study");if(n!=""){loadstudycohort(e.genomes,n,e.holder,e.hostURL,undefined,false,e.app||{debugmode:e.debugmode,instanceTracker:e.instanceTracker||{},callbacks:e.callbacks||{}})}}}function may_get_officialmds(e){if(!e.has("mds"))return;const t=e.get("mds").split(",");if(t[0]&&t[1]){const n={dataset:t[0],querykey:t[1]};if(e.has("sample")){n.singlesample={name:e.get("sample")};n.getsampletrackquickfix=true}return[n]}return}async function get_tklst(e,t){const n=[];if(e.has("mds3")){const t=e.get("mds3").split(",");for(const o of t){const t={type:tkt.mds3,dslabel:o};if(e.has("token"))t.token=e.get("token");if(e.has("filterobj"))t.filterObj=e.get("filterobj");n.push(t)}}if(e.has("mds3bcffile")){const[t,o]=e.get("mds3bcffile").split(",");if(t&&o){n.push({type:tkt.mds3,name:t,bcf:{file:o}})}}if(e.has("arcfile")){const t=e.get("arcfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.hicstraw,name:t[e],bedfile:t[e+1],mode_hm:false,mode_arc:true})}}}if(e.has("mdsjsoncache")){const t=await dofetch2("mdsjsonform",{method:"POST",body:JSON.stringify({draw:e.get("mdsjsoncache")})});if(t.error)throw t.error;validate_mdsjson(t.json);const o=get_json_tk(t.json);n.push(o)}if(e.has("mdsjson")||e.has("mdsjsonurl")){const t=e.get("mdsjsonurl");const o=e.get("mdsjson");const s=await init_mdsjson(o,t);n.push(...s)}if(e.has("tkjsonfile")){const o=await dofetch("textfile",{file:e.get("tkjsonfile")});if(o.error)throw o.error;if(!o.text)throw".text missing";const s=JSON.parse(o.text);for(const e of s){if(e.isfacet){if(!t.tkset)t.tkset=[];if(!e.tracks)throw".tracks[] missing from a facet table";if(!Array.isArray(e.tracks))throw".tracks[] not an array from a facet table";e.tklst=e.tracks;delete e.tracks;for(const t of e.tklst){if(!t.assay)throw".assay missing from a facet track";if(!t.sample)throw".sample missing from a facet track";t.tkid=Math.random().toString()}t.tkset.push(e)}else{n.push(e)}}}if(e.has("bamfile")){const t=e.get("bamfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bam,name:t[e],file:t[e+1]})}}}if(e.has("bamurl")){const t=e.get("bamurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bam,name:t[e],url:t[e+1]})}}}if(e.has("bedjfile")){const t=e.get("bedjfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bedj,name:t[e],file:t[e+1]})}}}if(e.has("bedjurl")){const t=e.get("bedjurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bedj,name:t[e],url:t[e+1]})}}}if(e.has("hictkfile")||e.has("hictkurl")){const t=e.has("hictkfile");const o=e.get(t?"hictkfile":"hictkurl").split(",");const s=e.has("hictknorm")?e.get("hictknorm").split(","):null;for(let e=0;e<o.length;e+=3){if(o[e]&&o[e+1]&&o[e+2]){const r={type:tkt.hicstraw,name:o[e],enzyme:o[e+1],normalizationmethod:s?s[e/3]:null};if(t){r.file=o[e+2]}else{r.url=o[e+2]}n.push(r)}}}if(e.has("ldfile")){const t=e.get("ldfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.ld,name:t[e],file:t[e+1]})}}}if(e.has("bigwigfile")){const t=e.get("bigwigfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bigwig,name:t[e],file:t[e+1],scale:{auto:1}})}}}if(e.has("bigwigurl")){const t=e.get("bigwigurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.bigwig,name:t[e],url:t[e+1],scale:{auto:1}})}}}if(e.has("junctionfile")){const t=e.get("junctionfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.junction,name:t[e],tracks:[{file:t[e+1]}]})}}}if(e.has("junctionurl")){const t=e.get("junctionurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.junction,name:t[e],tracks:[{url:t[e+1]}]})}}}if(e.has("vcffile")){const t=e.get("vcffile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"vcf",name:t[e],file:t[e+1]})}}}if(e.has("vcfurl")){const t=e.get("vcfurl").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"vcf",name:t[e],url:t[e+1]})}}}if(e.has("aicheckfile")){const t=e.get("aicheckfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"aicheck",name:t[e],file:t[e+1]})}}}if(e.has("bampilefile")){const t=e.get("bampilefile").split(",");let o=null;if(e.has("bampilelink")){o=e.get("bampilelink").split(",").map(decodeURIComponent)}for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){const s={type:tkt.bampile,name:t[e],file:t[e+1]};if(o&&o[e/2]){s.link=o[e/2]}n.push(s)}}}if(e.has("svcnvfpkmurl")){const t=e.get("svcnvfpkmurl").split(",");const o=t[0];const s={};for(let e=1;e<t.length;e+=2){s[t[e]]=t[e+1]}if(s.svcnv||s.vcf){const e={type:tkt.mdssvcnv,name:o};if(s.svcnv){e.url=s.svcnv}if(s.vcf){e.checkvcf={url:s.vcf,indexURL:s.vcfindex}}if(s.fpkm){e.checkexpressionrank={datatype:"FPKM",url:s.fpkm,indexURL:s.fpkmindex}}n.push(e)}}if(e.has("svcnvfpkmfile")){const t=e.get("svcnvfpkmfile").split(",");const o=t[0];const s={};for(let e=1;e<t.length;e+=2){s[t[e]]=t[e+1]}if(s.svcnv||s.vcf){const e={type:tkt.mdssvcnv,name:o};if(s.svcnv){e.file=s.svcnv}if(s.vcf){e.checkvcf={file:s.vcf}}if(s.fpkm){e.checkexpressionrank={datatype:"FPKM",file:s.fpkm}}n.push(e)}}if(e.has("mdsjunctionfile")){const t=e.get("mdsjunctionfile").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"mdsjunction",name:t[e],file:t[e+1]})}}}if(e.has("junctionmatrix")){const t=e.get("junctionmatrix").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:"mdsjunction",name:t[e],file2:t[e+1]})}}}if(e.has("junctionrnapeg")){const t=e.get("junctionrnapeg").split(",");for(let e=0;e<t.length;e+=2){if(t[e]&&t[e+1]){n.push({type:tkt.junction,name:t[e],tracks:[{rnapegfile:t[e+1]}]})}}}for(const e of n){if(e.type=="mds3"&&e.dslabel)continue;e.iscustom=true}if(e.has("isdense")){n.filter((e=>e.type==tkt.mdssvcnv)).forEach((e=>{e.isdense=true;e.isfull=false}))}if(e.has("sample")){n.filter((e=>e.type==tkt.mdssvcnv)).forEach((t=>{t.singlesample={name:e.get("sample")};t.getsampletrackquickfix=true}))}return n}function mayAddBedjfilterbyname(e,t){if(e.has("bedjfilterbyname")){for(const n of t){if(n.type=="bedj")n.filterByName=e.get("bedjfilterbyname")}}}function makeButton(e){const t=e.div.append("button").attr("type","submit").style("background-color",e.backgroundColor?e.backgroundColor:"#cfe2f3").style("margin",e.margin?e.margin:"20px 20px 0px 20px").style("padding","8px").style("border","none").style("border-radius","3px").style("display","inline-block").text(e.text);return t}function addGeneSearchbox(e){const t=e.tip,n=e.row;let o,s=150;if("placeholder"in e){o=e.placeholder}else if(e.geneOnly){o="Gene";s=100}else{o="Gene, position";if(e.genome.hasSNP){o+=", dbSNP";s+=40}if(e.allowVariant){o+=", variant";s+=40}}const r=n.append("input").attr("type","text").attr("placeholder",o).attr("aria-label","Gene symbol, position, or alias").attr("class","sja_genesearchinput").style("width",s+"px").on("focus",(e=>{e.target.select()})).on("keyup",(async n=>{const o=n.target;const s=o.value.trim();if(s.length<=1)return t.hide();i.mark.html("");i.word.style("font-size","0.7em");if(e.hideHelp){i.word.text("")}else{i.word.text("Press ENTER to search, ESC to cancel")}if(keyupEnter(n)){o.blur();t.hide();if(e.geneOnly){const e=t.d.select(".sja_menuoption");if(e.size()>0&&e.attr("isgene")){const t=e.text();f({geneSymbol:t},s)}else{f(null,"not a gene")}return}if(e.allowVariant){const t=await string2variant(s,e.genome);if(t){f(t,"Valid variant");return}}const n=string2pos(s,e.genome);if(n){f(n,"Valid coordinate");return}o.disabled=true;const r=t.d.select(".sja_menuoption");if(r.size()>0&&r.attr("isgene")){await c(r.text())}else{await c(s)}o.disabled=false;return}if(n.code=="Escape"){t.hide();if(p.chr){f(p,p.fromWhat)}else if(e.defaultCoord){const t=e.defaultCoord;o.value=t.chr+(t.isVariant?"."+t.pos+"."+t.ref+"."+t.alt:":"+t.start+"-"+t.stop)}o.blur();return}if(n.key=="ArrowDown"){t.d.selectAll(".sja_menuoption").attr("tabindex",0).on("keyup",(e=>{if(e.key=="Enter"){e.target.click()}else if(e.key=="ArrowDown"){if(e.target.nextSibling)e.target.nextSibling.focus()}else if(e.key=="ArrowUp"){if(e.target.previousSibling)e.target.previousSibling.focus()}}));t.d.select(".sja_menuoption").node().focus();return}l()}));if(!e.focusOff)r.node().focus();const i={mark:n.append("span").style("margin-left","5px"),word:n.append("span").style("margin-left","5px").style("font-size",".8em").style("opacity",.6)};async function a(){const n=r.property("value").trim();if(!n)return;if(e.allowVariant){const t=await string2variant(n,e.genome);if(t){return}}const o=string2pos(n,e.genome,true);if(o){return}t.showunder(r.node()).clear();try{const o=await dofetch3("genelookup",{body:{genome:e.genome.name,input:n}});if(o.error)throw o.error;if(!o.hits||o.hits.length==0)return t.hide();for(const n of o.hits){t.d.append("div").text(n).attr("class","sja_menuoption").style("border-radius","0px").attr("isgene",1).on("click",(()=>{if(e.geneOnly){f({geneSymbol:n},n);t.hide()}else{c(n)}}))}}catch(e){t.d.append("div").text(e.message||e)}}const l=debounce_1.debounce(a,500);async function c(n){t.hide();try{const o=await dofetch3("genelookup",{body:{genome:e.genome.name,input:n,deep:1}});if(o.error)throw o.error;if(!o.gmlst||o.gmlst.length==0){if(e.genome.hasSNP){if(n.toLowerCase().startsWith("rs")){await d(n)}else{f(null,"Not a gene or SNP")}}else{f(null,"No match to gene name")}return}const s=gmlst2loci(o.gmlst);if(s.length==1){const e=o.gmlst[0].name||n;f(s[0],n,e);return}t.showunder(r.node()).clear();for(const e of s){t.d.append("div").attr("class","sja_menuoption").style("border-radius","0px").text(e.name+" "+e.chr+":"+e.start+"-"+e.stop).on("click",(()=>{t.hide();f(e,n+", "+e.name,e.name)}))}}catch(e){f(null,e.message||e)}}async function d(t){const n=await dofetch3("snp",{body:{byName:true,genome:e.genome.name,lst:[t]}});if(n.error)throw n.error;if(!n.results||n.results.length==0)throw"Not a gene or SNP";const o=n.results[0];f({chr:o.chrom,start:o.chromStart,stop:o.chromEnd},t)}const p={};if(e.defaultCoord){const t=e.defaultCoord;if(t.isVariant){r.property("value",t.chr+"."+t.pos+"."+t.ref+"."+t.alt);p.pos=t.pos;p.ref=t.ref;p.alt=t.alt}else{r.property("value",t.chr+":"+t.start+"-"+t.stop);p.start=t.start;p.stop=t.stop}p.chr=t.chr}async function f(t,n,o){if(t){for(const e in p)delete p[e];if(t.isVariant){p.chr=t.chr;p.pos=t.pos;p.ref=t.ref;p.alt=t.alt}else if(t.chr){r.property("value",t.chr+":"+t.start+"-"+t.stop);p.chr=t.chr;p.start=t.start;p.stop=t.stop}else if(t.geneSymbol){r.property("value",t.geneSymbol);p.geneSymbol=t.geneSymbol}i.mark.style("color","green").html("&check;");if(o){p.geneSymbol=o}}else{i.mark.style("color","red").html("&cross;")}i.word.text(n||"");p.fromWhat=n;if(t&&e.callback){await e.callback()}}if(e.geneSymbol){r.property("value",e.geneSymbol);setTimeout((()=>f({geneSymbol:e.geneSymbol},e.geneSymbol)),10)}return p}async function string2variant(e,t){const n=string2simpleVariant(e,t);if(n){return n}return await string2hgvs(e,t)}function string2simpleVariant(e,t){const n=e.split(".");if(n.length!=4)return;const o=n[0];const s=Number(n[1]);const r=invalidcoord(t,o,s,s);if(r)return;return{isVariant:true,chr:o,pos:s,ref:n[2],alt:n[3]}}async function string2hgvs(e,t){const n=e.split(":g.");if(n.length!=2){return}const o=n[0];if(n[1].includes("delins")){return await hgvs_delins(o,n[1],t)}if(n[1].includes("del")){return await hgvs_del(o,n[1],t)}if(n[1].includes("ins")){return hgvs_ins(o,n[1])}return hgvs_snv(o,n[1])}function hgvs_snv(e,t){const n=t.match(/^(\d+)([ATCG])>([ATCG])$/);if(!n||n.length!=4){return}const o=Number(n[1]);if(!Number.isInteger(o))return;return{isVariant:true,chr:e,pos:o,ref:n[2],alt:n[3]}}function hgvs_ins(e,t){const[n,o]=t.split("ins");if(!o)return;const s=Number(n.split("_")[0]);if(!Number.isInteger(s))return;return{isVariant:true,chr:e,pos:s+1,ref:"-",alt:o}}async function hgvs_del(e,t,n){const[o,s]=t.split("del");if(s){const t=Number(o.split("_")[0]);if(!Number.isInteger(t))return;return{isVariant:true,chr:e,pos:t,ref:s,alt:"-"}}const[r,i]=o.split("_");const a=Number(r);const l=i?Number(i):a+1;if(!Number.isInteger(a)||!Number.isInteger(l))return;const c=await getRefAllele(e,a,l,n);return{isVariant:true,chr:e,pos:pos,ref:c,alt:"-"}}async function hgvs_delins(e,t,n){const o=t.match(/^(\d+)_(\d+)delins([ATCG]+)$/);if(!o||o.length!=4){return}const s=Number(o[1]),r=Number(o[2]),i=o[3];if(!Number.isInteger(s)||!Number.isInteger(r))return;const a=await getRefAllele(e,s,r,n);return{isVariant:true,chr:e,pos:s,ref:a,alt:i}}async function getRefAllele(e,t,n,o){const s={coord:e+":"+t+"-"+n,genome:o.name};const r=await dofetch3("ntseq",{body:s});return r.seq}function __awaiter(e,t,n,o){function s(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,r){function i(e){try{l(o.next(e))}catch(e){r(e)}}function a(e){try{l(o["throw"](e))}catch(e){r(e)}}function l(e){e.done?n(e.value):s(e.value).then(i,a)}l((o=o.apply(e,t||[])).next())}))}class Tabs{constructor(e){this.opts=this.validateOpts(e);this.tabs=e.tabs;this.dom={holder:e.holder};this.defaultTabWidth=90;setRenderers$5(this)}validateOpts(e){if(!e.holder)throw`missing opts.holder for Tabs()`;if(!Array.isArray(e.tabs))throw`invalid opts.tabs array for Tabs()`;if(!e.linePosition)e.linePosition="bottom";if(e.linePosition!="bottom"&&e.linePosition!="top"&&e.linePosition!="right"&&e.linePosition!="left")throw`Invalid .linePosition arg. Must be either bottom, top, right, or left`;if(!e.tabsPosition)e.tabsPosition="horizontal";if(e.tabsPosition!="horizontal"&&e.tabsPosition!="vertical")throw`Invalid .tabsPosition arg. Must be either vertical or horizontal`;return e}main(){return __awaiter(this,void 0,void 0,(function*(){try{yield this.render()}catch(e){if(e.stack)console.log(e.stack);else throw e}}))}}function setRenderers$5(e){e.render=()=>__awaiter(this,void 0,void 0,(function*(){const t=e.tabs.find((e=>e.active));if(!t)e.tabs[0].active=true;const n=e.opts.linePosition=="bottom"||e.opts.linePosition=="top"?"center":e.opts.linePosition;e.dom.tabsHolder=e.dom.holder.append("div").style(`border-${e.opts.linePosition}`,"0.5px solid #1575ad");if(!e.opts.contentHolder&&!e.opts.noContent){e.dom.contentHolder=e.dom.holder.append("div")}else e.dom.contentHolder=e.opts.contentHolder;if(e.opts.tabsPosition=="vertical"){e.dom.tabsHolder.style("display","inline-grid").style("align-items","start").style("gap",e.opts.gap||"");e.dom.contentHolder.style("display","inline-block").style("vertical-align","top").style("position","relative")}else e.dom.tabsHolder.style("display","inline-block");yield e.dom.tabsHolder.selectAll("button").data(e.tabs).enter().append("button").attr("class","sj-toggle-button").classed("sjpp-active",(e=>e.active)).style("padding","0px").style("width",(e=>e.width?`${e.width}px`:"fit-content")).style("min-width",(t=>t.width?null:Math.max(e.defaultTabWidth))).style("border","none").style("background-color","transparent").style("display",e.opts.tabsPosition=="vertical"?"flex":"inline-grid").property("disabled",(e=>e.disabled?e.disabled():false)).each((function(t){return __awaiter(this,void 0,void 0,(function*(){t.wrapper=d3select(this);if(e.opts.linePosition=="right")t.wrapper.style("justify-self","end");if(e.opts.linePosition=="left")t.wrapper.style("justify-self","start");if(e.opts.linePosition=="top"||e.opts.linePosition=="left"){t.line=t.wrapper.append("div").style("display",e.opts.linePosition=="left"?"inline-flex":"flex");t.tab=t.wrapper.append("div").style("display",e.opts.linePosition=="left"?"inline-block":"block")}else{t.tab=t.wrapper.append("div").style("display",e.opts.linePosition=="right"?"inline-block":"block");t.line=t.wrapper.append("div").style("display",e.opts.linePosition=="right"?"inline-flex":"flex")}if(t.disabled&&t.isVisible){t.wrapper.style("cursor",t.disabled()==true&&t.isVisible()==true?"not-allowed":"pointer")}t.tab.style("color",t.active?"#1575ad":"#757373").style("text-align",n).style("padding","5px").html(t.label);t.line.style("background-color","#1575ad").style("visibility",t.active?"visible":"hidden");if(e.opts.linePosition=="top"||e.opts.linePosition=="bottom"){t.line.style("height","8px").style("padding","0px 5px")}else{t.line.style("align-self","stretch").style("padding","5px 0px").html('<span style="width: 8px";>&nbsp</span>')}if(e.dom.contentHolder){t.contentHolder=e.dom.contentHolder.append("div").style("display",t.active?"block":"none");if(e.opts.tabsPosition=="horizontal"&&!e.opts.noTopContentStyle){t.contentHolder.style("padding-top","10px").style("margin-top","10px")}}if(t.active&&t.callback)yield t.callback(event,t);t.wrapper.on("mouseenter",(()=>{t.tab.style("color",t.active?"#757373":"#1575ad")})).on("mouseleave",(()=>{t.tab.style("color",t.active?"#1575ad":"#757373")}))}))})).on("click",((t,n)=>__awaiter(this,void 0,void 0,(function*(){for(const t of e.tabs){t.active=t===n}const o=e.tabs.findIndex((e=>e.active));e.update(o);if(n.callback)yield n.callback(t,n)}))));const o=e.tabs.findIndex((e=>e.active));e.update(o)}));e.update=(t=0,n={})=>{e.tabs.forEach(((e,n)=>{e.active=t===n}));e.dom.tabsHolder.selectAll("button").data(e.tabs).classed("sjpp-active",(e=>e.active)).each((e=>{e.wrapper.classed("sjpp-active",e.active);if(e.isVisible)e.wrapper.style("display",(e=>n&&e.isVisible()?"":"none"));if(e.contentHolder)e.contentHolder.style("display",e.active?"block":"none");e.tab.style("color",e.active?"#1575ad":"#757373");e.line.style("visibility",e.active?"visible":"hidden")}))}}class BreadcrumbTrail{constructor(e){this.opts=e;this.dom={holder:e.holder,trailDiv:e.trailDiv||e.holder.append("div")};setRenderers$4(this)}async main(e={}){try{return await this.render()}catch(e){if(e.stack)console.log(e.stack);else throw e}}}function setRenderers$4(e){e.render=async()=>{e.crumbs=e.opts.crumbs;for(const t of e.crumbs){t.label=t.label||t.name}const t=e.crumbs.find((e=>e.inTrail));if(!t)e.crumbs[0].inTrail=true;await e.dom.trailDiv.style("margin-left","5px").style("font-size",".75em").style("display","inline-block").classed("sjpp-breadcrumb-trail",true).selectAll("span").data(e.crumbs).enter().append("span").classed("sjpp-breadcrumb",true).html((e=>`&nbsp> ${e.label}`)).style("display",(e=>e.inTrail?"inline-block":"none")).each((async function(e){if(!e.inTrail)e.inTrail=false;e.crumb=d3select(this)}));e.update()};e.update=(t=0)=>{e.crumbs.forEach(((e,n)=>{e.inTrail=t===n}));e.dom.trailDiv.selectAll("span").data(e.crumbs).each((async e=>{e.crumb.style("display",e.inTrail?"inline-block":"none")}))}}var deepFreezeEs6={exports:{}};function deepFreeze(e){if(e instanceof Map){e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}}else if(e instanceof Set){e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}}Object.freeze(e);Object.getOwnPropertyNames(e).forEach((function(t){var n=e[t];if(typeof n=="object"&&!Object.isFrozen(n)){deepFreeze(n)}}));return e}deepFreezeEs6.exports=deepFreeze;deepFreezeEs6.exports.default=deepFreeze;var deepFreeze$1=deepFreezeEs6.exports;class Response{constructor(e){if(e.data===undefined)e.data={};this.data=e.data;this.isMatchIgnored=false}ignoreMatch(){this.isMatchIgnored=true}}function escapeHTML(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function inherit$1(e,...t){const n=Object.create(null);for(const t in e){n[t]=e[t]}t.forEach((function(e){for(const t in e){n[t]=e[t]}}));return n}const SPAN_CLOSE="</span>";const emitsWrappingTags=e=>!!e.kind;const expandScopeName=(e,{prefix:t})=>{if(e.includes(".")){const n=e.split(".");return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")}return`${t}${e}`};class HTMLRenderer{constructor(e,t){this.buffer="";this.classPrefix=t.classPrefix;e.walk(this)}addText(e){this.buffer+=escapeHTML(e)}openNode(e){if(!emitsWrappingTags(e))return;let t=e.kind;if(e.sublanguage){t=`language-${t}`}else{t=expandScopeName(t,{prefix:this.classPrefix})}this.span(t)}closeNode(e){if(!emitsWrappingTags(e))return;this.buffer+=SPAN_CLOSE}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}class TokenTree{constructor(){this.rootNode={children:[]};this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t);this.stack.push(t)}closeNode(){if(this.stack.length>1){return this.stack.pop()}return undefined}closeAllNodes(){while(this.closeNode());}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){if(typeof t==="string"){e.addText(t)}else if(t.children){e.openNode(t);t.children.forEach((t=>this._walk(e,t)));e.closeNode(t)}return e}static _collapse(e){if(typeof e==="string")return;if(!e.children)return;if(e.children.every((e=>typeof e==="string"))){e.children=[e.children.join("")]}else{e.children.forEach((e=>{TokenTree._collapse(e)}))}}}class TokenTreeEmitter extends TokenTree{constructor(e){super();this.options=e}addKeyword(e,t){if(e===""){return}this.openNode(t);this.addText(e);this.closeNode()}addText(e){if(e===""){return}this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t;n.sublanguage=true;this.add(n)}toHTML(){const e=new HTMLRenderer(this,this.options);return e.value()}finalize(){return true}}function source$1(e){if(!e)return null;if(typeof e==="string")return e;return e.source}function lookahead$1(e){return concat$1("(?=",e,")")}function concat$1(...e){const t=e.map((e=>source$1(e))).join("");return t}function stripOptionsFromArgs(e){const t=e[e.length-1];if(typeof t==="object"&&t.constructor===Object){e.splice(e.length-1,1);return t}else{return{}}}function either(...e){const t=stripOptionsFromArgs(e);const n="("+(t.capture?"":"?:")+e.map((e=>source$1(e))).join("|")+")";return n}function countMatchGroups(e){return new RegExp(e.toString()+"|").exec("").length-1}function startsWith(e,t){const n=e&&e.exec(t);return n&&n.index===0}const BACKREF_RE=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function _rewriteBackreferences(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n;let o=source$1(e);let s="";while(o.length>0){const e=BACKREF_RE.exec(o);if(!e){s+=o;break}s+=o.substring(0,e.index);o=o.substring(e.index+e[0].length);if(e[0][0]==="\\"&&e[1]){s+="\\"+String(Number(e[1])+t)}else{s+=e[0];if(e[0]==="("){n++}}}return s})).map((e=>`(${e})`)).join(t)}const MATCH_NOTHING_RE=/\b\B/;const IDENT_RE$1="[a-zA-Z]\\w*";const UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*";const NUMBER_RE="\\b\\d+(\\.\\d+)?";const C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";const BINARY_NUMBER_RE="\\b(0b[01]+)";const RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";const SHEBANG=(e={})=>{const t=/^#![ ]*\//;if(e.binary){e.begin=concat$1(t,/.*\b/,e.binary,/\b.*/)}return inherit$1({scope:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{if(e.index!==0)t.ignoreMatch()}},e)};const BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0};const APOS_STRING_MODE={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[BACKSLASH_ESCAPE]};const QUOTE_STRING_MODE={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[BACKSLASH_ESCAPE]};const PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/};const COMMENT=function(e,t,n={}){const o=inherit$1({scope:"comment",begin:e,end:t,contains:[]},n);o.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:true,relevance:0});const s=either("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);o.contains.push({begin:concat$1(/[ ]+/,"(",s,/[.]?[:]?([.][ ]|[ ])/,"){3}")});return o};const C_LINE_COMMENT_MODE=COMMENT("//","$");const C_BLOCK_COMMENT_MODE=COMMENT("/\\*","\\*/");const HASH_COMMENT_MODE=COMMENT("#","$");const NUMBER_MODE={scope:"number",begin:NUMBER_RE,relevance:0};const C_NUMBER_MODE={scope:"number",begin:C_NUMBER_RE,relevance:0};const BINARY_NUMBER_MODE={scope:"number",begin:BINARY_NUMBER_RE,relevance:0};const REGEXP_MODE={begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[BACKSLASH_ESCAPE]}]}]};const TITLE_MODE={scope:"title",begin:IDENT_RE$1,relevance:0};const UNDERSCORE_TITLE_MODE={scope:"title",begin:UNDERSCORE_IDENT_RE,relevance:0};const METHOD_GUARD={begin:"\\.\\s*"+UNDERSCORE_IDENT_RE,relevance:0};const END_SAME_AS_BEGIN=function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{if(t.data._beginMatch!==e[1])t.ignoreMatch()}})};var MODES=Object.freeze({__proto__:null,MATCH_NOTHING_RE:MATCH_NOTHING_RE,IDENT_RE:IDENT_RE$1,UNDERSCORE_IDENT_RE:UNDERSCORE_IDENT_RE,NUMBER_RE:NUMBER_RE,C_NUMBER_RE:C_NUMBER_RE,BINARY_NUMBER_RE:BINARY_NUMBER_RE,RE_STARTERS_RE:RE_STARTERS_RE,SHEBANG:SHEBANG,BACKSLASH_ESCAPE:BACKSLASH_ESCAPE,APOS_STRING_MODE:APOS_STRING_MODE,QUOTE_STRING_MODE:QUOTE_STRING_MODE,PHRASAL_WORDS_MODE:PHRASAL_WORDS_MODE,COMMENT:COMMENT,C_LINE_COMMENT_MODE:C_LINE_COMMENT_MODE,C_BLOCK_COMMENT_MODE:C_BLOCK_COMMENT_MODE,HASH_COMMENT_MODE:HASH_COMMENT_MODE,NUMBER_MODE:NUMBER_MODE,C_NUMBER_MODE:C_NUMBER_MODE,BINARY_NUMBER_MODE:BINARY_NUMBER_MODE,REGEXP_MODE:REGEXP_MODE,TITLE_MODE:TITLE_MODE,UNDERSCORE_TITLE_MODE:UNDERSCORE_TITLE_MODE,METHOD_GUARD:METHOD_GUARD,END_SAME_AS_BEGIN:END_SAME_AS_BEGIN});function skipIfHasPrecedingDot(e,t){const n=e.input[e.index-1];if(n==="."){t.ignoreMatch()}}function scopeClassName(e,t){if(e.className!==undefined){e.scope=e.className;delete e.className}}function beginKeywords(e,t){if(!t)return;if(!e.beginKeywords)return;e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)";e.__beforeBegin=skipIfHasPrecedingDot;e.keywords=e.keywords||e.beginKeywords;delete e.beginKeywords;if(e.relevance===undefined)e.relevance=0}function compileIllegal(e,t){if(!Array.isArray(e.illegal))return;e.illegal=either(...e.illegal)}function compileMatch(e,t){if(!e.match)return;if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match;delete e.match}function compileRelevance(e,t){if(e.relevance===undefined)e.relevance=1}const beforeMatchExt=(e,t)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]}));e.keywords=n.keywords;e.begin=concat$1(n.beforeMatch,lookahead$1(n.begin));e.starts={relevance:0,contains:[Object.assign(n,{endsParent:true})]};e.relevance=0;delete n.beforeMatch};const COMMON_KEYWORDS=["of","and","for","in","not","or","if","then","parent","list","value"];const DEFAULT_KEYWORD_SCOPE="keyword";function compileKeywords(e,t,n=DEFAULT_KEYWORD_SCOPE){const o=Object.create(null);if(typeof e==="string"){s(n,e.split(" "))}else if(Array.isArray(e)){s(n,e)}else{Object.keys(e).forEach((function(n){Object.assign(o,compileKeywords(e[n],t,n))}))}return o;function s(e,n){if(t){n=n.map((e=>e.toLowerCase()))}n.forEach((function(t){const n=t.split("|");o[n[0]]=[e,scoreForKeyword(n[0],n[1])]}))}}function scoreForKeyword(e,t){if(t){return Number(t)}return commonKeyword(e)?0:1}function commonKeyword(e){return COMMON_KEYWORDS.includes(e.toLowerCase())}const seenDeprecations={};const error=e=>{console.error(e)};const warn=(e,...t)=>{console.log(`WARN: ${e}`,...t)};const deprecated=(e,t)=>{if(seenDeprecations[`${e}/${t}`])return;console.log(`Deprecated as of ${e}. ${t}`);seenDeprecations[`${e}/${t}`]=true};const MultiClassError=new Error;function remapScopeNames(e,t,{key:n}){let o=0;const s=e[n];const r={};const i={};for(let e=1;e<=t.length;e++){i[e+o]=s[e];r[e+o]=true;o+=countMatchGroups(t[e-1])}e[n]=i;e[n]._emit=r;e[n]._multi=true}function beginMultiClass(e){if(!Array.isArray(e.begin))return;if(e.skip||e.excludeBegin||e.returnBegin){error("skip, excludeBegin, returnBegin not compatible with beginScope: {}");throw MultiClassError}if(typeof e.beginScope!=="object"||e.beginScope===null){error("beginScope must be object");throw MultiClassError}remapScopeNames(e,e.begin,{key:"beginScope"});e.begin=_rewriteBackreferences(e.begin,{joinWith:""})}function endMultiClass(e){if(!Array.isArray(e.end))return;if(e.skip||e.excludeEnd||e.returnEnd){error("skip, excludeEnd, returnEnd not compatible with endScope: {}");throw MultiClassError}if(typeof e.endScope!=="object"||e.endScope===null){error("endScope must be object");throw MultiClassError}remapScopeNames(e,e.end,{key:"endScope"});e.end=_rewriteBackreferences(e.end,{joinWith:""})}function scopeSugar(e){if(e.scope&&typeof e.scope==="object"&&e.scope!==null){e.beginScope=e.scope;delete e.scope}}function MultiClass(e){scopeSugar(e);if(typeof e.beginScope==="string"){e.beginScope={_wrap:e.beginScope}}if(typeof e.endScope==="string"){e.endScope={_wrap:e.endScope}}beginMultiClass(e);endMultiClass(e)}function compileLanguage(e){function t(t,n){return new RegExp(source$1(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class n{constructor(){this.matchIndexes={};this.regexes=[];this.matchAt=1;this.position=0}addRule(e,t){t.position=this.position++;this.matchIndexes[this.matchAt]=t;this.regexes.push([t,e]);this.matchAt+=countMatchGroups(e)+1}compile(){if(this.regexes.length===0){this.exec=()=>null}const e=this.regexes.map((e=>e[1]));this.matcherRe=t(_rewriteBackreferences(e,{joinWith:"|"}),true);this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t){return null}const n=t.findIndex(((e,t)=>t>0&&e!==undefined));const o=this.matchIndexes[n];t.splice(0,n);return Object.assign(t,o)}}class o{constructor(){this.rules=[];this.multiRegexes=[];this.count=0;this.lastIndex=0;this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n;this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n)));t.compile();this.multiRegexes[e]=t;return t}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]);if(t.type==="begin")this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition()){if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1;n=t.exec(e)}}if(n){this.regexIndex+=n.position+1;if(this.regexIndex===this.count){this.considerAll()}}return n}}function s(e){const t=new o;e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"})));if(e.terminatorEnd){t.addRule(e.terminatorEnd,{type:"end"})}if(e.illegal){t.addRule(e.illegal,{type:"illegal"})}return t}function r(n,o){const i=n;if(n.isCompiled)return i;[scopeClassName,compileMatch,MultiClass,beforeMatchExt].forEach((e=>e(n,o)));e.compilerExtensions.forEach((e=>e(n,o)));n.__beforeBegin=null;[beginKeywords,compileIllegal,compileRelevance].forEach((e=>e(n,o)));n.isCompiled=true;let a=null;if(typeof n.keywords==="object"&&n.keywords.$pattern){n.keywords=Object.assign({},n.keywords);a=n.keywords.$pattern;delete n.keywords.$pattern}a=a||/\w+/;if(n.keywords){n.keywords=compileKeywords(n.keywords,e.case_insensitive)}i.keywordPatternRe=t(a,true);if(o){if(!n.begin)n.begin=/\B|\b/;i.beginRe=t(n.begin);if(!n.end&&!n.endsWithParent)n.end=/\B|\b/;if(n.end)i.endRe=t(n.end);i.terminatorEnd=source$1(n.end)||"";if(n.endsWithParent&&o.terminatorEnd){i.terminatorEnd+=(n.end?"|":"")+o.terminatorEnd}}if(n.illegal)i.illegalRe=t(n.illegal);if(!n.contains)n.contains=[];n.contains=[].concat(...n.contains.map((function(e){return expandOrCloneMode(e==="self"?n:e)})));n.contains.forEach((function(e){r(e,i)}));if(n.starts){r(n.starts,o)}i.matcher=s(i);return i}if(!e.compilerExtensions)e.compilerExtensions=[];if(e.contains&&e.contains.includes("self")){throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")}e.classNameAliases=inherit$1(e.classNameAliases||{});return r(e)}function dependencyOnParent(e){if(!e)return false;return e.endsWithParent||dependencyOnParent(e.starts)}function expandOrCloneMode(e){if(e.variants&&!e.cachedVariants){e.cachedVariants=e.variants.map((function(t){return inherit$1(e,{variants:null},t)}))}if(e.cachedVariants){return e.cachedVariants}if(dependencyOnParent(e)){return inherit$1(e,{starts:e.starts?inherit$1(e.starts):null})}if(Object.isFrozen(e)){return inherit$1(e)}return e}var version="11.2.0";const escape=escapeHTML;const inherit=inherit$1;const NO_MATCH=Symbol("nomatch");const MAX_KEYWORD_HITS=7;const HLJS=function(e){const t=Object.create(null);const n=Object.create(null);const o=[];let s=true;const r="Could not find the language '{}', did you forget to load/include a language module?";const i={disableAutodetect:true,name:"Plain text",contains:[]};let a={ignoreUnescapedHTML:false,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:TokenTreeEmitter};function l(e){return a.noHighlightRe.test(e)}function c(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=a.languageDetectRe.exec(t);if(n){const t=N(n[1]);if(!t){warn(r.replace("{}",n[1]));warn("Falling back to no-highlight mode for this block.",e)}return t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>l(e)||N(e)))}function d(e,t,n){let o="";let s="";if(typeof t==="object"){o=e;n=t.ignoreIllegals;s=t.language}else{deprecated("10.7.0","highlight(lang, code, ...args) has been deprecated.");deprecated("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277");s=e;o=t}if(n===undefined){n=true}const r={code:o,language:s};R("before:highlight",r);const i=r.result?r.result:p(r.language,r.code,n);i.code=r.code;R("after:highlight",i);return i}function p(e,n,o,i){const l=Object.create(null);function c(e,t){return e.keywords[t]}function d(){if(!A.keywords){R.addText(M);return}let e=0;A.keywordPatternRe.lastIndex=0;let t=A.keywordPatternRe.exec(M);let n="";while(t){n+=M.substring(e,t.index);const o=j.case_insensitive?t[0].toLowerCase():t[0];const s=c(A,o);if(s){const[e,r]=s;R.addText(n);n="";l[o]=(l[o]||0)+1;if(l[o]<=MAX_KEYWORD_HITS)I+=r;if(e.startsWith("_")){n+=t[0]}else{const n=j.classNameAliases[e]||e;R.addKeyword(t[0],n)}}else{n+=t[0]}e=A.keywordPatternRe.lastIndex;t=A.keywordPatternRe.exec(M)}n+=M.substr(e);R.addText(n)}function f(){if(M==="")return;let e=null;if(typeof A.subLanguage==="string"){if(!t[A.subLanguage]){R.addText(M);return}e=p(A.subLanguage,M,true,C[A.subLanguage]);C[A.subLanguage]=e._top}else{e=u(M,A.subLanguage.length?A.subLanguage:null)}if(A.relevance>0){I+=e.relevance}R.addSublanguage(e._emitter,e.language)}function h(){if(A.subLanguage!=null){f()}else{d()}M=""}function m(e,t){let n=1;while(t[n]!==undefined){if(!e._emit[n]){n++;continue}const o=j.classNameAliases[e[n]]||e[n];const s=t[n];if(o){R.addKeyword(s,o)}else{M=s;d();M=""}n++}}function g(e,t){if(e.scope&&typeof e.scope==="string"){R.openNode(j.classNameAliases[e.scope]||e.scope)}if(e.beginScope){if(e.beginScope._wrap){R.addKeyword(M,j.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap);M=""}else if(e.beginScope._multi){m(e.beginScope,t);M=""}}A=Object.create(e,{parent:{value:A}});return A}function b(e,t,n){let o=startsWith(e.endRe,n);if(o){if(e["on:end"]){const n=new Response(e);e["on:end"](t,n);if(n.isMatchIgnored)o=false}if(o){while(e.endsParent&&e.parent){e=e.parent}return e}}if(e.endsWithParent){return b(e.parent,t,n)}}function y(e){if(A.matcher.regexIndex===0){M+=e[0];return 1}else{$=true;return 0}}function v(e){const t=e[0];const n=e.rule;const o=new Response(n);const s=[n.__beforeBegin,n["on:begin"]];for(const n of s){if(!n)continue;n(e,o);if(o.isMatchIgnored)return y(t)}if(n.skip){M+=t}else{if(n.excludeBegin){M+=t}h();if(!n.returnBegin&&!n.excludeBegin){M=t}}g(n,e);return n.returnBegin?0:t.length}function w(e){const t=e[0];const o=n.substr(e.index);const s=b(A,e,o);if(!s){return NO_MATCH}const r=A;if(A.endScope&&A.endScope._wrap){h();R.addKeyword(t,A.endScope._wrap)}else if(A.endScope&&A.endScope._multi){h();m(A.endScope,e)}else if(r.skip){M+=t}else{if(!(r.returnEnd||r.excludeEnd)){M+=t}h();if(r.excludeEnd){M=t}}do{if(A.scope){R.closeNode()}if(!A.skip&&!A.subLanguage){I+=A.relevance}A=A.parent}while(A!==s.parent);if(s.starts){g(s.starts,e)}return r.returnEnd?0:t.length}function x(){const e=[];for(let t=A;t!==j;t=t.parent){if(t.scope){e.unshift(t.scope)}}e.forEach((e=>R.openNode(e)))}let _={};function k(t,r){const i=r&&r[0];M+=t;if(i==null){h();return 0}if(_.type==="begin"&&r.type==="end"&&_.index===r.index&&i===""){M+=n.slice(r.index,r.index+1);if(!s){const t=new Error(`0 width match regex (${e})`);t.languageName=e;t.badRule=_.rule;throw t}return 1}_=r;if(r.type==="begin"){return v(r)}else if(r.type==="illegal"&&!o){const e=new Error('Illegal lexeme "'+i+'" for mode "'+(A.scope||"<unnamed>")+'"');e.mode=A;throw e}else if(r.type==="end"){const e=w(r);if(e!==NO_MATCH){return e}}if(r.type==="illegal"&&i===""){return 1}if(T>1e5&&T>r.index*3){const e=new Error("potential infinite loop, way more iterations than matches");throw e}M+=i;return i.length}const j=N(e);if(!j){error(r.replace("{}",e));throw new Error('Unknown language: "'+e+'"')}const S=compileLanguage(j);let E="";let A=i||S;const C={};const R=new a.__emitter(a);x();let M="";let I=0;let O=0;let T=0;let $=false;try{A.matcher.considerAll();for(;;){T++;if($){$=false}else{A.matcher.considerAll()}A.matcher.lastIndex=O;const e=A.matcher.exec(n);if(!e)break;const t=n.substring(O,e.index);const o=k(t,e);O=e.index+o}k(n.substr(O));R.closeAllNodes();R.finalize();E=R.toHTML();return{language:e,value:E,relevance:I,illegal:false,_emitter:R,_top:A}}catch(t){if(t.message&&t.message.includes("Illegal")){return{language:e,value:escape(n),illegal:true,relevance:0,_illegalBy:{message:t.message,index:O,context:n.slice(O-100,O+100),mode:t.mode,resultSoFar:E},_emitter:R}}else if(s){return{language:e,value:escape(n),illegal:false,relevance:0,errorRaised:t,_emitter:R,_top:A}}else{throw t}}}function f(e){const t={value:escape(e),illegal:false,relevance:0,_top:i,_emitter:new a.__emitter(a)};t._emitter.addText(e);return t}function u(e,n){n=n||a.languages||Object.keys(t);const o=f(e);const s=n.filter(N).filter(E).map((t=>p(t,e,false)));s.unshift(o);const r=s.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(N(e.language).supersetOf===t.language){return 1}else if(N(t.language).supersetOf===e.language){return-1}}return 0}));const[i,l]=r;const c=i;c.secondBest=l;return c}function h(e,t,o){const s=t&&n[t]||o;e.classList.add("hljs");e.classList.add(`language-${s}`)}function m(e){let t=null;const n=c(e);if(l(n))return;R("before:highlightElement",{el:e,language:n});if(!a.ignoreUnescapedHTML&&e.children.length>0){console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk.");console.warn("https://github.com/highlightjs/highlight.js/issues/2886");console.warn(e)}t=e;const o=t.textContent;const s=n?d(o,{language:n,ignoreIllegals:true}):u(o);e.innerHTML=s.value;h(e,n,s.language);e.result={language:s.language,re:s.relevance,relevance:s.relevance};if(s.secondBest){e.secondBest={language:s.secondBest.language,relevance:s.secondBest.relevance}}R("after:highlightElement",{el:e,result:s,text:o})}function g(e){a=inherit(a,e)}const b=()=>{w();deprecated("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function y(){w();deprecated("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let v=false;function w(){if(document.readyState==="loading"){v=true;return}const e=document.querySelectorAll(a.cssSelector);e.forEach(m)}function x(){if(v)w()}if(typeof window!=="undefined"&&window.addEventListener){window.addEventListener("DOMContentLoaded",x,false)}function _(n,o){let r=null;try{r=o(e)}catch(e){error("Language definition for '{}' could not be registered.".replace("{}",n));if(!s){throw e}else{error(e)}r=i}if(!r.name)r.name=n;t[n]=r;r.rawDefinition=o.bind(null,e);if(r.aliases){S(r.aliases,{languageName:n})}}function k(e){delete t[e];for(const t of Object.keys(n)){if(n[t]===e){delete n[t]}}}function j(){return Object.keys(t)}function N(e){e=(e||"").toLowerCase();return t[e]||t[n[e]]}function S(e,{languageName:t}){if(typeof e==="string"){e=[e]}e.forEach((e=>{n[e.toLowerCase()]=t}))}function E(e){const t=N(e);return t&&!t.disableAutodetect}function A(e){if(e["before:highlightBlock"]&&!e["before:highlightElement"]){e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}}if(e["after:highlightBlock"]&&!e["after:highlightElement"]){e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))}}}function C(e){A(e);o.push(e)}function R(e,t){const n=e;o.forEach((function(e){if(e[n]){e[n](t)}}))}function M(e){deprecated("10.7.0","highlightBlock will be removed entirely in v12.0");deprecated("10.7.0","Please use highlightElement now.");return m(e)}Object.assign(e,{highlight:d,highlightAuto:u,highlightAll:w,highlightElement:m,highlightBlock:M,configure:g,initHighlighting:b,initHighlightingOnLoad:y,registerLanguage:_,unregisterLanguage:k,listLanguages:j,getLanguage:N,registerAliases:S,autoDetection:E,inherit:inherit,addPlugin:C});e.debugMode=function(){s=false};e.safeMode=function(){s=true};e.versionString=version;for(const e in MODES){if(typeof MODES[e]==="object"){deepFreeze$1(MODES[e])}}Object.assign(e,MODES);return e};var highlight=HLJS({});var core=highlight;const IDENT_RE="[A-Za-z$_][0-9A-Za-z$_]*";const KEYWORDS=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"];const LITERALS=["true","false","null","undefined","NaN","Infinity"];const TYPES=["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"];const ERROR_TYPES=["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"];const BUILT_IN_GLOBALS=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"];const BUILT_IN_VARIABLES=["arguments","this","super","console","window","document","localStorage","module","global"];const BUILT_INS=[].concat(BUILT_IN_GLOBALS,TYPES,ERROR_TYPES);function source(e){if(!e)return null;if(typeof e==="string")return e;return e.source}function lookahead(e){return concat("(?=",e,")")}function concat(...e){const t=e.map((e=>source(e))).join("");return t}function javascript(e){const t=(e,{after:t})=>{const n="</"+e[0].slice(1);const o=e.input.indexOf(n,t);return o!==-1};const n=IDENT_RE;const o={begin:"<>",end:"</>"};const s={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const o=e[0].length+e.index;const s=e.input[o];if(s==="<"){n.ignoreMatch();return}if(s===">"){if(!t(e,{after:o})){n.ignoreMatch()}}}};const r={$pattern:IDENT_RE,keyword:KEYWORDS,literal:LITERALS,built_in:BUILT_INS,"variable.language":BUILT_IN_VARIABLES};const i="[0-9](_?[0-9])*";const a=`\\.(${i})`;const l=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;const c={className:"number",variants:[{begin:`(\\b(${l})((${a})|\\.)?|(${a}))`+`[eE][+-]?(${i})\\b`},{begin:`\\b(${l})\\b((${a})\\b|\\.)?|(${a})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0};const d={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]};const p={begin:"html`",end:"",starts:{end:"`",returnEnd:false,contains:[e.BACKSLASH_ESCAPE,d],subLanguage:"xml"}};const f={begin:"css`",end:"",starts:{end:"`",returnEnd:false,contains:[e.BACKSLASH_ESCAPE,d],subLanguage:"css"}};const u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,d]};const h=e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:true,excludeBegin:true,relevance:0},{className:"variable",begin:n+"(?=\\s*(-)|$)",endsParent:true,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]});const m={className:"comment",variants:[h,e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]};const g=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,f,u,c,e.REGEXP_MODE];d.contains=g.concat({begin:/\{/,end:/\}/,keywords:r,contains:["self"].concat(g)});const b=[].concat(m,d.contains);const y=b.concat([{begin:/\(/,end:/\)/,keywords:r,contains:["self"].concat(b)}]);const v={className:"params",begin:/\(/,end:/\)/,excludeBegin:true,excludeEnd:true,keywords:r,contains:y};const w={variants:[{match:[/class/,/\s+/,n],scope:{1:"keyword",3:"title.class"}},{match:[/extends/,/\s+/,concat(n,"(",concat(/\./,n),")*")],scope:{1:"keyword",3:"title.class.inherited"}}]};const x={relevance:0,match:/\b[A-Z][a-z]+([A-Z][a-z]+)*/,className:"title.class",keywords:{_:[...TYPES,...ERROR_TYPES]}};const _={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/};const k={variants:[{match:[/function/,/\s+/,n,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[v],illegal:/%/};const j={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function N(e){return concat("(?!",e.join("|"),")")}const S={match:concat(/\b/,N([...BUILT_IN_GLOBALS,"super"]),n,lookahead(/\(/)),className:"title.function",relevance:0};const E={begin:concat(/\./,lookahead(concat(n,/(?![0-9A-Za-z$_(])/))),end:n,excludeBegin:true,keywords:"prototype",className:"property",relevance:0};const A={match:[/get|set/,/\s+/,n,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},v]};const C="(\\("+"[^()]*(\\("+"[^()]*(\\("+"[^()]*"+"\\)[^()]*)*"+"\\)[^()]*)*"+"\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>";const R={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,lookahead(C)],className:{1:"keyword",3:"title.function"},contains:[v]};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:r,exports:{PARAMS_CONTAINS:y},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),_,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,f,u,m,c,x,{className:"attr",begin:n+lookahead(":"),relevance:0},R,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{className:"function",begin:C,returnBegin:true,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:true},{begin:/\(/,end:/\)/,excludeBegin:true,excludeEnd:true,keywords:r,contains:y}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:o.begin,end:o.end},{begin:s.begin,"on:begin":s.isTrulyOpeningTag,end:s.end}],subLanguage:"xml",contains:[{begin:s.begin,end:s.end,skip:true,contains:["self"]}]}]},k,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\("+"[^()]*(\\("+"[^()]*(\\("+"[^()]*"+"\\)[^()]*)*"+"\\)[^()]*)*"+"\\)\\s*\\{",returnBegin:true,label:"func.def",contains:[v,e.inherit(e.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},E,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[v]},S,j,w,A,{match:/\$[(.]/}]}}function json(e){const t={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01};const n={match:/[{}[\],:]/,className:"punctuation",relevance:0};const o={beginKeywords:["true","false","null"].join(" ")};return{name:"JSON",contains:[t,n,e.QUOTE_STRING_MODE,o,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}core.registerLanguage("javascript",javascript);core.registerLanguage("json",json);async function openSandbox(e,t){const n=newSandboxDiv(t.sandboxDiv);n.header_row;n.header.append("span").text(e.name);n.body.style("overflow","hidden").style("background-color","white");if(e.type=="nestedCard")return openNestedCardSandbox(e,n,t);const o=e.sandboxJson?await dofetch3(`${t.app.cardsPath}/${e.sandboxJson}.json`):await dofetch3(`${t.app.cardsPath}/${e.sandboxHtml}.txt`);if(o.error){sayerror$1(n.body.insert("div","div"),o.error);return}if(e.type=="card")return openCardSandbox(e,o,n,t);if(e.type=="dsButton")return openDatasetButtonSandbox(t,o,n)}async function openNestedCardSandbox(e,t,n){t.body.style("justify-content","center").style("background-color","#f2ebdc");const o=t.body.append("ul").style("list-style","none").style("display","grid").style("grid-template-columns","40vw 40vw").style("grid-template-rows","repeat(1, auto)").style("gap","5px");const s=e.children.filter((e=>!e.hidden));t.header.trail=new BreadcrumbTrail({holder:t.header,crumbs:s});s.forEach((e=>{const r=o.append("li");r.attr("class","sjpp-app-drawer-card").style("padding","10px").style("margin","5px").html(`<p style="margin-left: 12px; font-size:14.5px;font-weight:500; display: block;">${e.name}</p>\n\t\t\t<p style="display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;">${e.description}</p>`).on("click",(async r=>{r.stopPropagation();o.selectAll("*").remove();const i=e.sandboxJson?await dofetch3(`${n.app.cardsPath}/${e.sandboxJson}.json`):await dofetch3(`${n.app.cardsPath}/${e.sandboxHtml}.txt`);if(i.error){sayerror$1(t.body.insert("div","div"),i.error);return}if(e.type=="card"){t.header.trail.main();const o=s.findIndex((t=>t==e));t.header.trail.update(o);openCardSandbox(e,i,t,n)}if(e.type=="dsButton")return openDatasetButtonSandbox(n.app.opts,i,t)}));return JSON.stringify(r)}))}async function openCardSandbox(e,t,n,o){if(e.sandboxHtml){const e=await t.text();return n.body.append("div").style("padding","0vw 0vw 2vw 0vw").append("div").style("background-color","white").style("margin","0vw 10vw").style("padding","10px").append("div").style("margin","0vw 5vw").html(e)}n.body.style("background-color","white");const s={intro:t.intro,ppcalls:t.ppcalls.filter((e=>!e.hidden)),buttons:t.buttons,arrowButtons:t.arrowButtons,ribbonMessage:t.ribbonMessage,citation:t.citation_id};addHtmlText(s.intro,n.body);if(e.ribbon)addHtmlText(s.ribbonMessage,n.body,e.ribbon);const r=n.body.append("div");const i=n.body.append("div");addButtons(s.buttons,r);addArrowBtns(s,"main",r,i,o);if(e.disableTopTabs)renderContent(s.ppcalls[0],n.body,e,o);else{const t=n.body.append("div").style("display","flex").style("align-content","end").style("justify-content","center").style("border","none").style("border-bottom","1px solid lightgray").style("width","100%").style("font-size","20px");const r=n.body.append("div");makeParentTabsMenu(s.ppcalls,e,t,r,n,o)}}function renderContent(e,t,n,o){addHtmlText(e.message,t);const s=t.append("div").style("margin-bottom","20px");const r=t.append("div");addButtons(e.buttons,s);makeDataDownload(e.download,s,n.section);showURLLaunch(e.urlparam,s,n.section);addArrowBtns(e,"call",s,r,o);if(!n.disableTopTabs){t.append("hr").style("border","0").style("border-top","1px dashed #e3e3e6").style("width","100%")}const i={holder:t.append("div").style("margin","20px").node(),host:window.location.origin};const a=JSON.parse(JSON.stringify(e.runargs));runproteinpaint(Object.assign(i,a))}function makeTopTabs(e,t,n,o){const s=[];const r=e.findIndex((e=>e.isUi==true));const i=e.findIndex((e=>e.isUi==undefined));const a=r!=-1?true:false;if(a==true){s.push({label:"Add Your Data",active:false,callback:async(t,n)=>{try{const t={holder:n.contentHolder.append("div").style("margin","20px").node(),sandbox_header:n.contentHolder,host:window.location.origin};const o=JSON.parse(JSON.stringify(e[r].runargs));runproteinpaint(Object.assign(t,o));delete n.callback}catch(e){if(e.stack)console.log(e.stack);else throw e}}})}if(e.length==1&&a!=true||e.length==2&&a==true){s.push({label:"Example",active:false,callback:async(n,s)=>{try{renderContent(e[i],s.contentHolder,t,o);delete s.callback}catch(e){if(e.stack)console.log(e.stack);else throw e}}})}if(e.length>1&&a==false||e.length>2&&a==true){s.push({label:"Examples",active:false,callback:async(s,r)=>{try{const s=e.filter((e=>e.isUi!=true));makeLeftsideTabMenu(t,r.contentHolder,s,n,o);delete r.callback}catch(e){if(e.stack)console.log(e.stack);else throw e}}})}return s}function makeParentTabsMenu(e,t,n,o,s,r){const i=makeTopTabs(e,t,s,r);new Tabs({holder:n,contentHolder:o,tabs:i}).main()}async function makeLeftsideTabMenu(e,t,n,o,s){const r=n.map(((t,n)=>i(t,n,e.section)));o.header.trail=await new BreadcrumbTrail({holder:o.header,crumbs:r});function i(e,t,n){return{active:t===0,label:e.label,callback:async(t,i)=>{const a=tab_wait(i.contentHolder);try{if(!i.rendered){appear$1(i.contentHolder);renderContent(e,i.contentHolder,n,s);a.remove()}i.rendered=true;const t=r.findIndex((e=>e==i));o.header.trail.update(t)}catch(e){a.text("Error: "+(e.message||e))}}}}o.header.trail.main();const a=t.append("div").style("display","grid").style("grid-template-columns","minmax(min-content, 10vw) minmax(60vw, 1fr)").classed("sjpp-vertical-tab-menu",true).style("word-break","break-word");const l=a.append("div").classed("sjpp-tabs-div",true).style("border-right","1px solid lightgray");const c=a.append("div").classed("sjpp-content-div",true);new Tabs({holder:l,contentHolder:c,tabs:r,linePosition:"right",tabsPosition:"vertical",gap:"10px"}).main()}function addHtmlText(e,t,n){if(n&&n.expireDate){const s=new Date;const r=new Date(n.expireDate);if(r>s&&e!=undefined&&e){function o(){const e=n.text.toLowerCase();return e[0].toUpperCase()+e.slice(1)}t.append("div").style("margin","20px").html(`<p style="display:inline-block;font-weight:bold">${o()}: &nbsp</p>${e}`)}}else if(e!=undefined&&e){t.append("div").style("margin","20px").html(e)}}function addButtons(e,t){if(e){e.forEach((e=>{const n=makeButton({div:t,text:e.name});n.on("click",(t=>{t.stopPropagation();if(e.download)window.open(`${e.download}`,"_self","download");else window.open(`${e.link}`,`${e.name}`)}))}))}}function makeArrowButtons(e,t){if(e){e.forEach((e=>{const n=`<div style="margin:10px;" class="sjpp-arrow-content">\n\t\t\t\t${e.message?`<div style="margin: 1vw;">${e.message}</div>`:""}\n\t\t\t\t${e.links?e.links.map((e=>{if(!e)return"";if(e.download){return`<a style="cursor:pointer; margin-left:20px;" onclick="event.stopPropagation();" href="${e.download}", target="_self" download>${e.name}</a>`}if(e.link){return`<a style="cursor:pointer; margin-left:20px;" onclick="event.stopPropagation();" href="${e.link}", target="_blank">${e.name}</a>`}})).join(""):""}</div>`;t.push({name:e.name,callback:async e=>{try{e.append("div").html(n)}catch(e){alert("Error: "+e)}}})}))}}async function addArrowBtns(e,t,n,o,s){let r=[];if(t=="call")showCode(e,r);if(e.datapreview)showViewData(r,e.datapreview);if(t=="main"&&e.citation){const t=await dofetch3(`/${s.app.cardsPath}/citations.json`);if(t.error){console.log(`Error: ${t.error}`);return}for(const n of t.publications){if(e.citation==n.id)showCitation(r,n)}}makeArrowButtons(e.arrowButtons,r);const i=r.findIndex((e=>e.active))==-1?false:true;for(let e=0;e<r.length;e++){const t=r[e];t.btn=makeButton({div:n,text:t.name+" ▼"});t.c=o.append("div").style("margin","20px 0px 10px 20px").style("display",i&&e==0||t.active?"block":"none");if(i&&e==0&&t.callback||t.active){t.callback(t.c);delete t.callback}t.btn.on("click",(()=>{if(t.c.style("display")!="none"){t.btn.text(t.name+" ▼").style("color","black").style("background-color","#cfe2f3");t.c.style("display","none")}else{t.btn.text(t.name+" ▲").style("color","whitesmoke").style("background-color","#487ba8");appear$1(t.c);for(let t=0;t<r.length;t++){if(e!=t){r[t].btn.text(r[t].name+" ▼").style("color","black").style("background-color","#cfe2f3");r[t].c.style("display","none")}}}if(t.callback){t.callback(t.c);delete t.callback}}))}}function showURLLaunch(e,t,n){if(e){const o=makeButton({div:t,text:n=="apps"?"Run app from URL":"Run track from URL"});o.on("click",(t=>{const n=getHostURL();t.stopPropagation();window.open(`${n}${e}`,"_blank")}))}}function makeDataDownload(e,t,n){if(e){const o=makeButton({div:t,text:n=="apps"?"Download App File(s)":"Download Track File(s)"});o.on("click",(t=>{t.stopPropagation();window.open(`${e}`,"_self","download")}))}}async function showCode(e,t){if(e.isUi==true)return;const n=core.highlight(`runproteinpaint({\n host: "${window.location.origin}",\n holder: document.getElementById('a'),\n `+JSON.stringify(e.runargs,"",4).replaceAll(/"(.+)"\s*:/g,"$1:").replaceAll(/\\t/g,"\t").replaceAll(/\\n/g,"\r\t").slice(1,-1).trim()+`\r})`,{language:"javascript"}).value;const o=`<pre style="border: 1px solid #d7d7d9; align-items: center; justify-content: center; margin: 0px 10px 5px 30px; overflow:auto; max-height:400px; ${e.jsonpath?`min-height:400px;`:`min-height: auto;`}">\n\t<code style="font-size:14px; display:block;">${n}</code></pre>`;t.push({name:"Code",callback:async t=>{try{if(e.jsonpath){const n=await showJsonCode(e);const s="<p style='margin:20px 5px 20px 25px;'>ProteinPaint JS code</p>";const r=t.append("div").style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(100px, 1fr))").style("gap","5px");r.append("div").style("display","block").html(s+o);r.append("div").style("display","block").html(n)}else{t.append("div").html(o)}}catch(e){alert("Error: "+e)}}})}async function showJsonCode(e){const t=await dofetch("textfile",{file:e.jsonpath});const n=JSON.parse(t.text);const o=e.jsonpath.split("/");const s=o[o.length-1];let r=JSON.stringify(n,"",4).split("\n");let i;if(r.length>120){r=r.slice(0,100);i=true}const a=core.highlight(r.join("\n"),{language:"json"}).value;const l=`<div>\n\t\t\t<p style="margin: 20px 5px 20px 25px; display: inline-block;">JSON code </p>\n\t\t\t<p style="display: inline-block; color: #696969; font-style:oblique;"> (contents of ${s})</p>\n\t\t</div> \n\t\t<pre style="border: 1px solid #d7d7d9; align-items: center; justify-content: center; margin: 0px 10px 5px 10px; max-height:400px; min-height:400px; overflow:auto;">\n\t\t\t<code class="sjpp-json-code" style="font-size:14px; display:block;">${i==true?`${a} ...<br><p style='margin:20px 25px; justify-content:center;'>Showing first 100 lines. To see the entire JSON, download ${s} from the button above.</p>`:`${a}`}\n\t\t\t</code>\n\t\t</pre>`;return l}function showCitation(e,t){e.push({name:"Citation",callback:async e=>{try{e.append("div").style("margin-left","5w").html(`<p style="display: inline-block;">${t.title}. <em>${t.journal}</em>, ${t.year}. </p>\n\t\t\t\t\t\t${t.pmid?`<p style="display: inline-block;">PMID: <a href="${t.pmidURL}" target="_blank">${t.pmid}</a></p>`:`<p>doi: <a href="${t.doi}" target="_blank style="display: inline-block;">${t.doi}</a></p>`}`)}catch(e){alert("Error: "+e)}}})}function makeDataPreviewDiv(e,t,n,o,s){n.append("div").html(`\n\t\t${s?`<p style="display:block;">${s}<p>`:""}\n\t\t<p style="display: inline-block;">Data preview <span style="color: #696969; font-style:oblique;"> \n\t\t${t>10?`(first ${e.length} rows of ${o})</span></p>`:`(content of ${o})</span></p>`} \n\t`);const r=n.append("div").style("display","grid").style("grid-template-columns","1fr").style("max-width","80%").style("margin-left","10px").style("border","1px solid rgb(227, 227, 230)").style("white-space","pre").style("overflow-x","scroll").style("opacity","0.65").style("padding","1vw");e.forEach((e=>{r.append("code").html(e)}))}async function showViewData(e,t,n){e.push({name:"View Data",callback:async e=>{try{for(const n of t){const t=await dofetch3(`/cardsjson?datafile=${n.file}&tabixCoord=${n.tabixQueryCoord}`);if(t.error){console.log(`Error: ${t.error}`);return}const o=t.file;const s=o.length;const r=o.slice(0,10);const i=n.file.split("/");const a=i[i.length-1];makeDataPreviewDiv(r,s,e,a,n.message)}}catch(e){alert("Error: "+e)}}})}async function openDatasetButtonSandbox(e,t,n){const o=e?.fromApp?e.genomes[t.button.availableGenomes[0]]:e.app.opts.genomes[t.button.availableGenomes[0]];const s=e?.fromApp?e.genomes:e.app.opts.genomes;const r={availableGenomes:t.button.availableGenomes,genome:o,intro:t.button.intro,name:t.button.name,runargs:t.button.runargs,searchBar:t.button.searchBar,dsURLparam:t.button.dsURLparam};const i=n.body.append("div").style("padding","1em").style("border-bottom","1px solid #d0e3ff");if(r.intro){i.append("div").style("line-height","1.5em").style("padding","0.5em 0.5em 1em 0.5em").html(r.intro)}if(r.searchBar=="none"){const e={holder:n.body.append("div").style("margin","20px").style("overflow-x","auto").node(),host:window.location.origin};const t=JSON.parse(JSON.stringify(r.runargs));runproteinpaint(Object.assign(e,t));return}d(i,s);const a=i.append("div").style("display","inline-block").style("padding","0.5em");const l=n.body.append("div").style("max-width","90vw");const c=addGeneSearchbox({genome:r.genome,tip:new Menu({padding:""}),row:a,geneOnly:r.searchBar=="gene"?true:false,focusOff:true,callback:async e=>{const t=l.insert("div",":first-child").style("max-width","90vw").style("margin","1vw");t.append("div").style("display","inline-block").style("cursor","default").style("margin","0px").style("font-size","1.5em").html("&times;").on("click",(()=>{t.selectAll("*").remove()}));makeURLbutton(t,c,r);const n={holder:t.append("div").style("margin","20px").node(),host:window.location.origin,genome:r.genome.name};r.runargs.block==true?(n.position=`${c.chr}:${c.start}-${c.stop}`)&&(n.nativetracks="Refgene"):n.gene=c.geneSymbol;const o=JSON.parse(JSON.stringify(r.runargs));runproteinpaint(Object.assign(n,o))}});function d(e,t){e.append("div").style("display","inline-block").style("padding","10px 10px 0px 20px");const n=[];if(r.availableGenomes.length==1){n.push({label:r.availableGenomes[0],disabled:()=>true,isVisible:()=>true})}else{r.availableGenomes.forEach((e=>{n.push({label:e,callback:(n,o)=>{r.genome=t[e]}})}))}new Tabs({holder:e,tabs:n,noContent:true}).main()}}function makeURLbutton(e,t,n){const o=makeButton({div:e,text:"Run Result from URL"});const s=n.runargs.block==true?`position=${t.chr}:${t.start}-${t.stop}`:`gene=${t.geneSymbol}`;o.on("click",(e=>{e.stopPropagation();const t=getHostURL();window.open(`${t}/?genome=${n.genome.name}&${s}&${n.dsURLparam}`,"_blank")}))}function getHostURL(){const e=sessionStorage.getItem("hostURL");if(e.startsWith("http://localhost")||e.startsWith("https://pp")){return e}else return"https://proteinpaint.stjude.org"}var adSandbox=Object.freeze({__proto__:null,openSandbox:openSandbox});class AppDrawerCard{constructor(e){this.type="card";this.opts=this.validateOpts(e);this.holder=e.holder;this.dom=e.dom;this.sandboxDiv=e.sandboxDiv;setRenderers$3(this)}validateOpts(e){if(!e.element.name)throw`Card .name is missing`;if(e.element.type=="card"){if(!e.element.sandboxJson&&!e.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for card=${e.element.name}`}if(e.element.type=="nestedCard"){if(!e.element.children||e.element.children.length==0)throw`Missing .children for nested card = ${e.element.name}`}if(e.element.ribbon){if(!e.element.ribbon.text)throw`Missing ribbon .text for ${e.element.type} = ${e.element.name}`;if((e.element.ribbon.text.toUpperCase()=="NEW"||e.element.ribbon.text.toUpperCase()=="UPDATED")&&!e.element.ribbon.expireDate)throw`${e.element.type} = ${e.element.name} ribbon is ${e.element.ribbon.text.toUpperCase()} but .expireDate is missing. Please provide`;if(e.element.ribbon.expireDate){if(e.element.ribbon.expireDate>=0){throw`Flag for ${e.element.type} = ${e.element.name} is not a valid date`}}}return e}main(){}}const cardInit=getCompInit(AppDrawerCard);function setRenderers$3(e){const t=e.holder.append("li");if(e.opts.element.type=="card"){t.classed("sjpp-track",true).html(`<div class="sjpp-track-h"><span style="font-size:14.5px;font-weight:500;">${e.opts.element.name}</span></div>\n\t\t\t\t${e.opts.element.description?`<span class="sjpp-track-blurb" style="cursor:default">${e.opts.element.description}</span></div>`:" "}\n\t\t\t\t<span class="sjpp-track-image"><img src="${e.opts.element.image}" alt="${e.opts.element.description}"></img></span>\n\t\t\t\t</div>`)}else if(e.opts.element.type=="nestedCard"){t.classed("sjpp-app-drawer-card",true).html(`<p style="margin-left: 12px; font-size:14.5px;font-weight:500; display: block;">${e.opts.element.name}</p>\n\t\t\t<p style="display: block; font-size: 13px; font-weight: 300; margin-left: 20px; justify-content: center; font-style:oblique; color: #403f3f;">${e.opts.element.description}</p>`)}e.makeRibbon=function(e){const n=t.append("div").classed("sjpp-app-drawer-card-ribbon",true).style("align-items","center").style("justify-content","center");const o=e.text.toUpperCase();const s=o=="BETA"?"#418cb5":o=="NEW"?"#1ba176":o=="UPDATED"?"orange":e.color?e.color:"red";n.append("span").text(o).style("color","white").style("background-color",rgb(s).darker()).style("height","auto").style("width","100%").style("top","15%").style("left","-30%").style("font-size","11.5px").style("text-transform","uppercase").style("text-align","center")};if(e.opts.element.ribbon){const t=new Date;const n=new Date(e.opts.element.ribbon.expireDate);if(n>t||n=="Invalid Date")e.makeRibbon(e.opts.element.ribbon)}t.on("click",(async t=>{t.stopPropagation();await e.app.dispatch({type:"is_apps_btn_active",value:false});slideDrawer(e);await openSandbox(e.opts.element,e.opts)}))}class AppDrawerButton{constructor(e){this.type="button";this.opts=this.validateOpts(e);this.holder=e.holder;this.dom=e.dom;this.sandboxDiv=e.sandboxDiv;setRenderers$2(this)}validateOpts(e){if(!e.element.name)throw`Button name is missing`;if(!e.element.sandboxJson&&!e.element.sandboxHtml)throw`Either .sandboxJson or .sandboxHtml is missing for button=${e.element.name}`;return e}main(){}}const buttonInit=getInitFxn(AppDrawerButton);function setRenderers$2(e){const t=makeButton({div:e.holder,text:e.opts.element.name,margin:"20px 20px 0px"});t.attr("class","sjpp-appdrawer-dataset-btn").on("click",(async t=>{t.stopPropagation();await e.app.dispatch({type:"is_apps_btn_active",value:false});slideDrawer(e);await openSandbox(e.opts.element,e.opts)}))}class AppDrawerLayoutComp{constructor(e){this.type="layout";this.dom={holder:e.dom.drawerDiv,wrapper:e.dom.wrapper,sandboxDiv:e.dom.sandboxDiv};this.state=e.state;this.hasStatePreMain=true}async validateIndexJson(){const e=await this.getIndexJson();if(!e.elements)throw`Missing elements array`;if(!e.elements.length)throw`No element objects provided`;if(e.columnsLayout){if(e.columnsLayout.length==0)throw`Missing column objects`;const t=e.columnsLayout.map((e=>e.gridarea));if(t.length!=new Set(t).size)throw`Duplicate values for .gridarea found`;const n=[];for(const t of e.columnsLayout){if(!t.gridarea)throw`Missing column .gridarea for column = ${t.name}`;if(!t.sections||t.sections.length==0)throw`Missing section objects for column = ${t.name}`;for(const e of t.sections){if(!e.id)throw`Missing section .id in ${e.name?`section = ${e.name}`:`column = ${t.name} array`}`;n.push(e.id)}if(t.sections.length!=new Set(t.sections).size){throw`Non-unique levels in line ${lineNum}: ${JSON.stringify(levelNames)}`}}if(n.length!=new Set(n).size)throw`Duplicate values for section.id found`;for(const t of e.elements){if(!t.section)throw`.section is missing for ${t.type} = ${t.name}`;if(!n.some((e=>e==t.section)))throw`section = ${t.section} for ${t.type} = ${t.name} is not a column section`}}return e}async getIndexJson(){const e=await dofetch3(this.app.cardsPath+"/index.json");if(e.error){sayerror$1(this.dom.holder.append("div"),e.error);return}return e}async init(){this.index=await this.validateIndexJson();this.elementsRendered=false;setRenderers$1(this);this.elements=this.index.elements.filter((e=>!e.hidden));this.layout=this.index.columnsLayout?this.index.columnsLayout:null;this.components={elements:[]}}async main(){if(this.elementsRendered==true)return;this.elementsRendered=true;for(const e of this.elements){const t=d3select(this.layout?`#${e.section} > .sjpp-element-list`:`.sjpp-element-list`);if(e.type=="card"||e.type=="nestedCard"){this.components.elements.push(await cardInit({app:this.app,holder:t.style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(320px, 1fr))").style("gap","10px").style("list-style","none").style("margin","15px 0px"),element:e,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}else if(e.type=="dsButton"){this.components.elements.push(await buttonInit({app:this.app,holder:t,element:e,dom:this.opts.dom,state:this.state,sandboxDiv:this.dom.sandboxDiv}))}}}}const layoutInit=getCompInit(AppDrawerLayoutComp);function setRenderers$1(e){if(!e.index.columnsLayout)noDefinedLayout(e);if(e.index.columnsLayout)columnsLayout(e)}function noDefinedLayout(e){const t=e.dom.wrapper.append("div").style("display","flex").style("padding","10px").classed("sjpp-element-list",true);return t}function columnsLayout(e){const t=e.dom.wrapper.append("div").style("display","grid").style("grid-template-columns","repeat(auto-fit, minmax(425px, 1fr))").style("gap","10px").style("padding","10px").style("text-align","left");const n=[];for(const t of e.index.columnsLayout)n.push(t.gridarea);t.style("grid-template-areas",`"${n.toString().replace(","," ")}"`);for(const n of e.index.columnsLayout){const e=t.append("div").style("grid-area",n.gridarea).classed(".sjpp-track-cols",true);for(const t of n.sections)o(t,e)}function o(e,t){const n=t.append("div").attr("id",e.id);if(e.name)n.append("h5").classed("sjpp-appdrawer-cols",true).style("color",rgb(defaultcolor).darker()).text(e.name);n.append("div").classed("sjpp-element-list",true).style("padding","10px");return n}}class MainHeadboxBtn{constructor(e){this.type="mainBtn";this.opts=this.validateOpts(e);this.dom=e.dom;this.state=e.state;this.hasStatePreMain=true;setRenderers(this)}validateOpts(e){return e.app.opts}getState(e){return{appBtnActive:e.appBtnActive}}async init(){this.btnRendered=false;this.drawerFullHeight="";try{if(window.location.pathname=="/"&&!window.location.search.length)await this.app.dispatch({type:"is_apps_btn_active",value:true});this.components={layout:[]}}catch(e){throw e}}async main(e){if(this.app.getState(e).appBtnActive==true&&this.btnRendered==false){this.dom.drawerDiv.style("background-color","#f5f5f5");this.components.layout.push(await layoutInit({app:this.app,dom:this.dom,state:this.state}));setTimeout((()=>{this.drawerFullHeight=this.dom.drawerDiv.node().getBoundingClientRect().height+5}),this.state.duration+5);slideDrawer(this);this.btnRendered=true}if(this.state.appBtnActive==false&&this.btnRendered==true)slideDrawer(this)}}const mainBtnInit=getCompInit(MainHeadboxBtn);function setRenderers(e){e.dom.btnWrapper.style("background-color",e.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",e.state.appBtnActive?"#fff":"#000").on("click",(async t=>{t.stopPropagation();await e.app.dispatch({type:"is_apps_btn_active"});slideDrawer(e);if(e.state.appBtnActive){setTimeout((()=>{e.drawerFullHeight=e.dom.drawerDiv.node().getBoundingClientRect().height+5}),e.state.duration+5)}}));e.dom.btn.attr("class","sja_menuoption").style("display","inline-block").style("background-color","transparent").style("color",e.state.appBtnActive?"#fff":"#000").style("padding",e.opts.padw_sm).style("margin","0px 5px").style("cursor","pointer").text("Apps");e.dom.drawerHint.style("position","relative").style("display","inline-block").style("height",e.state.arrowSize.closed+"px").style("width",e.state.appBtnActive?e.state.hintWidth.open:e.state.hintWidth.closed).style("background-color","transparent").style("text-align","center").style("cursor","pointer");e.dom.drawerArrow.style("position","absolute").style("font-size",e.state.arrowSize.closed+"px").style("right",e.state.hintPos.closed.rt+"px").style("bottom",e.state.hintPos.closed.btm+"px").style("background-color","transparent").style("color",e.state.arrowColor.closed).style("opacity",e.state.appBtnActive?0:1).style("cursor","pointer").html("&#9660;");e.dom.drawerArrowOpen.style("position","absolute").style("font-size",e.state.arrowSize.open+"px").style("left",e.state.hintPos.open.left+"px").style("bottom",e.state.hintPos.open.btm+"px").style("transform","rotate(180deg)").style("background-color","transparent").style("color",e.state.arrowColor.open).style("opacity",e.state.appBtnActive?1:0).style("cursor","pointer").style("pointer-events",e.state.appBtnActive?"auto":"none").html("&#9660;");e.drawerFullHeight=e.dom.drawerRow.node().getBoundingClientRect().height+5}async function slideDrawer(e){e.dom.btnWrapper.transition().duration(e.opts.state.duration).style("background-color",e.state.appBtnActive?"#b2b2b2":"#f2f2f2").style("color",e.state.appBtnActive?"#fff":"#000");e.dom.btn.transition().duration(e.opts.state.duration).style("color",e.state.appBtnActive?"#fff":"#000");e.dom.drawerDiv.style("display","inline-block").transition().duration(e.opts.state.duration).style("top",e.state.appBtnActive?"0px":"-"+e.drawerFullHeight+"px");e.dom.drawerRow.transition().duration(e.opts.state.duration).style("height",e.state.appBtnActive?e.drawerFullHeight+"px":"0px");e.dom.drawerHint.transition().duration(e.opts.state.duration).style("width",e.state.appBtnActive?e.opts.state.hintWidth.open:e.opts.state.hintWidth.closed);e.dom.drawerArrow.transition().duration(e.opts.state.duration).style("opacity",e.state.appBtnActive?0:1);e.dom.drawerArrowOpen.style("pointer-events",e.state.appBtnActive?"auto":"none").transition().duration(e.opts.state.duration).style("opacity",e.state.appBtnActive?1:0)}class AppDrawerStore{constructor(e){this.type="store";this.defaultState={duration:500,hintPos:{open:{btm:-42,left:13},closed:{btm:3,rt:5}},hintWidth:{open:"0px",closed:"18px"},arrowSize:{open:42,closed:20},arrowColor:{open:"rgb(242,242,242)",closed:"rgb(85,85,85)"},appBtnActive:false}}async init(){}}const appDrawerStoreInit=getStoreInit(AppDrawerStore);AppDrawerStore.prototype.actions={is_apps_btn_active(e){this.state.appBtnActive="value"in e?e.value:!this.state.appBtnActive}};class AppDrawerApp{constructor(e){this.type="app";const t=e.drawerRow.append("div").style("position","relative").style("margin","0 20px").style("padding",`0 ${e.padw_sm}`).style("display","inline-block").style("overflow","hidden").style("border-radius","0px 0px 5px 5px").style("width","93vw").classed("sjpp-drawer-div",true);const n=e.headbox.append("div").style("position","relative").style("display","inline-block").style("margin-left","5px").style("margin-right","5px").style("border-radius","5px").classed("sjpp-apps-btn-wrapper",true);this.dom={drawerRow:e.drawerRow,drawerDiv:t,sandboxDiv:e.sandboxDiv,btnWrapper:n,btn:n.append("div"),drawerHint:n.append("div"),drawerArrow:n.append("div"),drawerArrowOpen:n.append("div"),wrapper:t.append("div")}}preApiFreeze(e){e.cardsPath=this.opts.cardsPath}async init(){try{this.store=await appDrawerStoreInit({app:this.api,state:this.opts.state});this.state=await this.store.copyState();this.components={mainBtn:await mainBtnInit({app:this.api,dom:this.dom,state:this.state,indexJson:this.indexJson})};await this.api.dispatch()}catch(e){throw e}}main(){}}const appDrawerInit=getAppInit(AppDrawerApp);class InputSearch{constructor(e){this.holder=e.holder;this.input=e.holder.append("input");this.tip=e.tip||new Menu({border:"",padding:"0px"});this.style=e.style||{};this.size=e.size||20;this.placeholder=e.placeholder||"";this.title=e.title||"";this.searchItems=e.searchItems;this.app=e.app}initUI(){this.holder.style("padding","padding"in this.style?this.style.padding:"5px").style("display","inline-block");this.input.attr("class","sjpp-input-search").style("border","border"in this.style?this.style.border:"5px").attr("size",this.size).attr("placeholder",this.placeholder).attr("title",this.title).on("keyup",(e=>__awaiter(this,void 0,void 0,(function*(){if(keyupEnter(e))yield this.enterSearch();debounce_1.debounce(this.addSearchItems(),400)}))))}addSearchItems(){return __awaiter(this,void 0,void 0,(function*(){if(!this.input.property("value").trim()){this.tip.hide();return}try{this.tip.clear().showunder(this.input.node());const e=this.tip.d.append("div");const t=yield this.searchItems();yield e.append("div").style("display","flex").selectAll().data(t.filter((e=>e.items.length>=1))).enter().append("div").style("display","block").style("border-left","0.5px solid lightgrey").each(this.showResultsList)}catch(e){if(e.stack)console.log(e.stack);else throwMsgWithFilePathAndFnName(e)}}))}showResultsList(e){return __awaiter(this,void 0,void 0,(function*(){e.wrapper=d3select(this);e.wrapper.style("padding","5px");e.titleDiv=e.wrapper.append("span").style("padding","3px 0px 5px").style("opacity",.65).style("font-size","0.8em").text(e.title);yield e.wrapper.append("div").classed("sjpp-result-wrapper",true).selectAll("div").data(e.items).enter().append("div").classed("sja_menuoption",true).classed("sjpp-search-result",true).style("display","block").style("padding-left","10px").style("background-color",e.color||"").text((e=>e.name||e.label||e)).on("click",((t,n)=>{t.stopPropagation();e.callback(n)}))}))}enterSearch(){return __awaiter(this,void 0,void 0,(function*(){if(!this.input.property("value").trim())return;const e=this.tip.d.select(".sjpp-result-wrapper").node();const t=this.tip.d.select(".sjpp-search-result").node();if(t!=null&&t.__data__)e.__data__.callback(t.__data__);else{const e=yield this.searchItems();const t=e.filter((e=>e.default));t[0].callback(this.input.property("value"))}this.input.property("value","");this.tip.hide()}))}updatePlaceholder(e){this.input.attr("placeholder",e)}}async function findAppDrawerElements(e,t,n,o){const s=await dofetch3(e.cardsPath+"/index.json");if(s.error)throwMsgWithFilePathAndFnName(`Problem retrieving cards/index.json`);const r=t.toLowerCase().trim();const i=[...s.elements];let a;if(r.length>2){await getExampleNames(i,e);a=getFilteredElements(i,r)}else{a=getFilteredElements(i,r)}const l={app:e.drawer.opts,sandboxDiv:e.drawer.opts.sandboxDiv,genomes:e.genomes,fromApp:true};n.push({title:"Tracks and Apps",items:a.filter((e=>e.type=="card")),color:"#e1edf7",callback:t=>{e.drawer.dispatch({type:"is_apps_btn_active",value:false});o.hide();openSandbox(t,l)}},{title:"Datasets",items:a.filter((e=>e.type=="dsButton")),color:"#e5f5e4",callback:t=>{e.drawer.dispatch({type:"is_apps_btn_active",value:false});o.hide();openSandbox(t,l)}});return n}async function getExampleNames(e,t){const n=e.map((async e=>{if(e.hidden||e.type!="card"||!e.sandboxJson)return e;const n=await dofetch3(t.cardsPath+`/${e.sandboxJson}.json`);if(n?.ppcalls.length>0){for(const t of n.ppcalls){if(t.isUI)return;if(t?.label)e.searchterms.push(t.label)}}}));await Promise.all(n)}function getFilteredElements(e,t){return e.filter((e=>{if(e.hidden)return false;let n=(e.searchterms||[]).reduce(((e,n)=>{if(e)return true;return n.toLowerCase().includes(t)}),false);return n||e.name.toLowerCase().includes(t)})).sort(((e,t)=>e.name.localeCompare(t.name)))}async function findgenelst(e,t,n){if(e.length==0)return;try{const o=await dofetch3("/genelookup",{body:{input:e,genome:t,jwt:n}});if(o.error)throw o.error;if(!o.hits)throw".hits[] missing";return o.hits}catch(e){}}async function findgene2paint(e,t,n,o){const s=t.genomes[n];if(!s){console.error("unknown genome "+n);return}const r=newSandboxDiv(t.drawer.opts.sandboxDiv);r.header.html('<div style="display:inline-block;">'+e+'</div><div class="sjpp-output-sandbox-title">'+n+"</div>");const i=urlmap();const a=await get_tklst(i,s);const l=string2pos(e,s);if(l){const e={hostURL:t.hostURL,jwt:o,holder:r.body,genome:s,nobox:true,chr:l.chr,start:l.start,stop:l.stop,dogtag:n,tklst:a,debugmode:t.debugmode};first_genetrack_tolist(s,e.tklst);import("./block-06e306e9.js").then((function(e){return e.c})).then((t=>new t.Block(e))).catch((e=>{t.error0(e)}));return}const c={hostURL:t.hostURL,jwt:o,query:e,genome:s,holder:r.body,variantPageCall_snv:t.variantPageCall_snv,samplecart:t.samplecart,tklst:a,debugmode:t.debugmode};const d=sessionStorage.getItem("urlp_mds");if(d){const e=d.split(",");if(e.length==2){c.datasetqueries=[{dataset:e[0],querykey:e[1]}]}}await blockinit(c)}const headtip=new Menu({padding:"0px",offsetX:0,offsetY:0});headtip.d.style("z-index",5555);function runproteinpaint$1(e){if(!window.structuredClone)window.structuredClone=e=>JSON.parse(JSON.stringify(e));const t={error0(e){sayerror$1(t.holder0,e)},debugmode:false,callbacks:e.callbacks||{sjcharts:{}},instanceTracker:e.instanceTracker||{sjcharts:{}}};setHostUrl(e,t);if(!t.instanceTracker.sjcharts){t.instanceTracker.sjcharts={}}if(!t.callbacks.sjcharts){t.callbacks.sjcharts={}}if(e.clear){d3selectAll(".sja_pane").remove();return}t.holder=d3select(e.holder?e.holder:document.body).append("div").attr("class","sja_root_holder").attr("data-ppclientversion",`2.42.1-0`).style("font","1em Arial, sans-serif").style("color","black");t.sandbox_header=e.sandbox_header||undefined;if(e.jwt){sessionStorage.setItem("jwt",e.jwt)}sessionStorage.setItem("suppressErrors",JSON.stringify(e.suppressErrors));if(e.variantPageCall_snv){t.variantPageCall_snv=e.variantPageCall_snv}if(e.samplecart){t.samplecart=e.samplecart}if(e.base_zindex){newpane({setzindex:e.base_zindex})}const n=e.serverData||e.termdb&&e.termdb.serverData;const o=dofetch3("genomes",{},{serverData:n});return o.then((async n=>{if(n.error)throw{message:"Cannot get genomes: "+n.error};if(!n.genomes)throw{message:"no genome data!?"};if(n.base_zindex){newpane({setzindex:n.base_zindex})}if(n.features){sessionStorage.setItem("optionalFeatures",JSON.stringify(n.features))}t.genomes=n.genomes;t.cardsPath=n.cardsPath;if(n.debugmode){t.debugmode=true}setAuth({dsAuth:n.dsAuth,holder:t.holder});if(n.commonOverrides||e.commonOverrides){applyOverrides(Object.assign(n.commonOverrides||{},e.commonOverrides||{}))}if(n.targetPortal&&n.targetPortal=="gdc")await import("./style.gdc-0f9b5225.js");for(const e in t.genomes){const n=initgenome(t.genomes[e]);if(n){throw{message:"Error with "+e+" genome: "+n}}}if(!e.noheader&&!window.location.search.includes("noheader")&&!window.location.search.includes("mass-session-id")&&!window.location.search.includes("mass-session-file")&&!window.location.search.includes("mass-session-url")){makeheader(t,n,e.jwt)}t.holder0=t.holder.append("div").style("margin","20px");const o=await parseEmbedThenUrl(e,t);return o||t})).catch((e=>{t.holder.text(e.message||e);if(e.stack)console.log(e.stack)}))}runproteinpaint$1.getStatus=async function e(t=""){return await fetch("/healthcheck").then((e=>e.json())).then((e=>{const n={clientVersion:document.querySelector(".sja_root_holder")?.dataset.ppclientversion,versionInfo:e.versionInfo};if(t=="log")console.info(n);else if(t=="json")return JSON.stringify(n);else return n})).catch(console.error)};const ppsrc=document&&document.currentScript&&document.currentScript.src||"";function setHostUrl(e,t){if(e.host){t.hostURL=e.host}else if(window.location.hostname=="localhost"){const e=urlmap();if(e.has("hosturl"))t.hostURL=e.get("hosturl");else if(window.testHost){t.hostURL=window.testHost}else{const n=e.get("hostname");const o=e.get("hostport");const s=window.location.protocol+"//";if(n&&o)t.hostURL=s+n+":"+o;else if(n)t.hostURL=s+n;else if(o)t.hostURL=s+window.location.hostname+":"+o}}if(!t.hostURL){if(ppsrc.includes("://")){t.hostURL=ppsrc.split("://")[0]+"://"+ppsrc.split("://")[1].split("/")[0]}else{t.hostURL=""}}sessionStorage.setItem("hostURL",t.hostURL)}async function makeheader(e,t,n){const o=rgb(defaultcolor);const s="13px";const r="5px 10px";const i="7px 10px";document.documentElement.clientWidth;const a=e.holder.append("div").style("white-space","nowrap").style("border-bottom","solid 1px rgba("+o.r+","+o.g+","+o.b+",.3)");const l=a.append("div").style("margin","10px").style("padding","8px").style("padding-bottom","12px").style("display","inline-block").style("border-bottom","");const c=a.append("div").style("display","inline-block").style("padding",i).style("padding-left","25px").style("font-size",".8em").style("color",rgb(defaultcolor).darker());{const e=c.append("div").style("padding-left","15px");e.append("span").text("Code updated: "+(t.codedate||"??")+", server launched: "+(t.launchdate||"??")+".");if(t.hasblat){e.append("a").style("margin-left","10px").text("Running BLAT").on("click",(async e=>{headtip.clear().showunder(e.target);const t=headtip.d.append("div").style("margin","10px");const n=t.append("div").text("Loading...");try{const e=await dofetch2("blat?serverstat=1");if(e.error)throw e.error;if(!e.lst)throw"invalid response";n.remove();for(const n of e.lst){t.append("div").text(n)}}catch(e){n.text(e.message||e);if(e.stack)console.log(e.stack)}}))}}if(t.headermessage){c.append("div").html(t.headermessage)}l.append("div").text("ProteinPaint").style("display","inline-block").style("padding",s).style("color",defaultcolor).style("font-size","1.3em").style("font-weight","bold");const d=new Menu({border:"",padding:"0px"});const p=async()=>{const t=d3select("input").property("value").trim();const o=[{title:"Genes",default:true,items:await findgenelst(t,e.selectgenome.property("value"),n),callback:t=>{e.drawer.dispatch({type:"is_apps_btn_active",value:false});d.hide();findgene2paint(t,e,e.selectgenome.property("value"),n)}}];await findAppDrawerElements(e,t,o,d);o.push({title:"Help",items:m.filter((e=>e.label.toLowerCase().includes(t.toLowerCase()))),color:"#faebd9",callback:e=>{window.open(e.link,e.label)}});return o};const f=new InputSearch({holder:l,tip:d,style:{padding:i,border:`'solid 1px ${defaultcolor}`},size:32,placeholder:"Gene, position, SNP, app, or dataset",title:"Search by gene, SNP, position, app, or dataset",searchItems:p});f.initUI();const u=l.append("div").attr("class","sjpp-genome-select-div").style("padding",i);const h=()=>{const t=e.genomes[e.selectgenome.property("value")];const n=["Gene","position","app"];if(t.hasSNP)n.splice(2,0,"SNP");if(Object.keys(t.datasets).length)n.push("dataset");const o=n.join(", ").replace(/,(?=[^,]*$)/,", or");return o};e.selectgenome=u.append("select").attr("title","Select a genome").attr("class","sjpp-genome-select").style("padding",r).style("border","solid 1px "+defaultcolor).on("change",(()=>{update_genome_browser_btn(e);f.updatePlaceholder(h())}));for(const t in e.genomes){e.selectgenome.append("option").attr("n",t).text(e.genomes[t].species+" "+t).property("value",t)}e.genome_browser_btn=make_genome_browser_btn(e,l,n);e.drawer=await appDrawerInit({holder:e.holder,genomes:e.genomes,drawerRow:e.holder.append("div").style("position","relative").style("overflow-x","visible").style("overflow-y","hidden").classed("sjpp-drawer-row",true),sandboxDiv:e.holder.append("div").style("margin-top","15px").classed("sjpp-drawer-sandbox",true),genome_browser_btn:e.genome_browser_btn,debugmode:e.debugmode,headbox:l,padw_sm:i,cardsPath:e.cardsPath});const m=[{label:"Embed in your website",link:"https://docs.google.com/document/d/1KNx4pVCKd4wgoHI4pjknBRTLrzYp6AL_D-j6MjcQSvQ/edit?usp=sharing"},{label:"Make a Study View",link:"https://drive.google.com/open?id=121SsSYiCb3NCU8jz0bF7UujFSN-1Y20b674dqa30iXE"},{label:"URL parameters",link:"https://docs.google.com/document/d/1e0JVdcf1yQDZst3j77Xeoj_hDN72B6XZ1bo_cAd2rss/edit?usp=sharing"},{label:"All tutorials",link:"https://docs.google.com/document/d/1JWKq3ScW62GISFGuJvAajXchcRenZ3HAvpaxILeGaw0/edit?usp=sharing"},{label:"User community",link:"https://groups.google.com/g/proteinpaint"},{label:"License ProteinPaint",link:"https://www.stjude.org/research/why-st-jude/shared-resources/technology-licensing/technologies/proteinpaint-web-application-for-visualizing-genomic-data-sj-15-0021.html",onlySearch:true},{label:"Our Team",link:"https://proteinpaint.stjude.org/team/",onlySearch:true}];l.append("span").classed("sja_menuoption",true).style("padding",i).text("Help").on("click",(async e=>{const t=e.target.getBoundingClientRect();const n=headtip.clear().show(t.left-0,t.top+t.height+5);await n.d.append("div").style("padding","5px 20px").selectAll("p").data(m.filter((e=>!e.onlySearch))).enter().append("p").html((e=>`<a href=${e.link} target=_blank>${e.label}</a>`))}))}function make_genome_browser_btn(e,t,n){const o="8px";const s=t.append("span");const r=e.selectgenome.node().options[e.selectgenome.property("selectedIndex")].value;const i=s.attr("class","sja_menuoption").attr("id","genome_btn").style("padding",o).datum(r).text(r+" genome browser").on("click",((t,o)=>{const s=e.genomes[o];if(!s){alert("Invalid genome name: "+o);return}const r=newSandboxDiv(e.drawer.opts.sandboxDiv);r.header.text(o+" genome browser");const i={hostURL:e.hostURL,jwt:n,holder:r.body,genome:s,chr:s.defaultcoord.chr,start:s.defaultcoord.start,stop:s.defaultcoord.stop,nobox:true,tklst:[],debugmode:e.debugmode};first_genetrack_tolist(s,i.tklst);import("./block-06e306e9.js").then((function(e){return e.c})).then((e=>new e.Block(i)));e.drawer.dispatch({type:"is_apps_btn_active",value:false})}));return i}function update_genome_browser_btn(e){e.genome_browser_btn.text(e.selectgenome.node().value+" genome browser");e.genome_browser_btn.datum(e.selectgenome.node().value)}async function parseEmbedThenUrl(e,t){if(e.genome&&t.selectgenome){for(let n=0;n<t.selectgenome.node().childNodes.length;n++){if(t.selectgenome.node().childNodes[n].value==e.genome){t.selectgenome.property("selectedIndex",n);break}}}if(e.mclassOverride){if(!e.mclassOverride.mclassName)e.mclassOverride.mclassName="Class";for(const t in e.mclassOverride.classes){const n=mclass[t];if(n){Object.assign(n,e.mclassOverride.classes[t])}}}if(e.singlecell){launch_singlecell(e.singlecell,t);return t}if(e.fimo){launch_fimo(e.fimo,t);return t}if(e.mdssurvivalplot){if(e.genome)e.mdssurvivalplot.genome=e.genome;launchmdssurvivalplot(e.mdssurvivalplot,t);return t}if(e.mdssamplescatterplot){if(e.genome)e.mdssamplescatterplot.genome=e.genome;launchmdssamplescatterplot(e.mdssamplescatterplot,t);return t}if(e.samplematrix){e.samplematrix.jwt=e.jwt;launchsamplematrix(e.samplematrix,t);return t}if(e.hic){e.hic.jwt=e.jwt;launchhic(e.hic,t);return t}if(e.block){return launchblock(e,t)}if(e.study){loadstudycohort(t.genomes,e.study,t.holder0,t.hostURL,e.jwt,false,t);return t}if(e.studyview){const n=e.studyview;n.hostURL=e.host;const o=n.genome||e.genome;n.genome=t.genomes[o];n.hostURL=t.hostURL;n.jwt=e.jwt;n.holder=t.holder0;bulkembed(n);return t}if(await may_launchGeneView(e,t)){return t}if(e.fusioneditor){launchfusioneditor(e,t);return t}if(e.genefusion){launch_genefusion(e,t);return t}if(e.mavolcanoplot){launchmavb(e,t);return t}if(e.twodmaf){launch2dmaf(e,t);return t}if(e.junctionbymatrix){launchJunctionbyMatrix(e,t);return}if(e.mdsjsonform){await launchmdsjsonform(e,t);return}if(e.selectGenomeWithTklst){await launchSelectGenomeWithTklst(e,t);return}if(e.disco){return await launchDisco(e,t)}if(e.geneSearch4GDCmds3){return await launchGeneSearch4GDCmds3(e,t)}if(e.launchGdcMatrix){return await launchGdcMatrix(e,t)}if(e.launchGdcHierCluster){return await launchGdcHierCluster(e,t)}if(e.parseurl&&location.search.length){try{await parse({app:t,genomes:t.genomes,hostURL:t.hostURL,variantPageCall_snv:t.variantPageCall_snv,samplecart:t.samplecart,holder:t.holder,selectgenome:t.selectgenome,genome_browser_btn:t.genome_browser_btn,debugmode:t.debugmode})}catch(e){t.error0(e)}}if(e.project){let n=undefined;if(e.project.uionly)n=t.holder0;bulkui(0,0,t.genomes,t.hostURL,n,t.sandbox_header)}if(e.termdb){await launchtermdb(e.termdb,t)}if(e.maftimeline){launchmaftimeline(e,t)}if(e.gdcbamslice){return await launchgdcbamslice(e,t)}if(e.mass){return await launchmass(e,t)}if(e.testInternals&&t.debugmode){await import("./internals-d072001b.js")}if(e.tkui){launch_tkUIs(e,t)}if(e.massSessionId){const n=await dofetch3(`/massSession?id=${e.massSessionId}`);if(n.error)throw n.error;const o={holder:t.holder0,state:n.state,genome:t.genomes[n.state.vocab.genome],massSessionDuration:n.massSessionDuration,getDatasetAccessToken:e.getDatasetAccessToken,addLoginCallback:e.addLoginCallback};const s=await import("./app-53b444fe.js");s.appInit(o);return}if(e.massSessionFile||e.massSessionURL){let n;if(e.massSessionFile){const t=e.massSessionFile;const o=await dofetch3(`/textfile`,{method:"POST",body:JSON.stringify({file:t})});if(o.error)throw o.error;n=JSON.parse(o.text)}else{const t=e.massSessionURL;const o=await dofetch3(`/urltextfile`,{method:"POST",body:JSON.stringify({url:t})});if(o.error)throw o.error;n=JSON.parse(o.text)}const o={holder:t.holder0,state:n,genome:t.genomes[n.vocab.genome]};const s=await import("./app-53b444fe.js");s.appInit(o);return}if(e.profileHome){const t=await import("./profileHome-98d3bd09.js");t.init(e);return}}async function may_launchGeneView(e,t){if(e.p){e.gene=e.p;delete e.p}if(e.gene2canonicalisoform){if(!e.genome)throw".genome missing for gene2canonicalisoform";const t=await dofetch2("gene2canonicalisoform?genome="+e.genome+"&gene="+e.gene2canonicalisoform);if(t.error)throw t.error;if(!t.isoform)throw"no canonical isoform for given gene accession";e.gene=t.isoform}if(e.mds3_ssm2canonicalisoform){if(!e.genome)throw".genome missing";if(!e.mds3_ssm2canonicalisoform.ssm_id)throw".ssm_id missing from mds3_ssm2canonicalisoform";if(!e.mds3_ssm2canonicalisoform.dslabel)throw".dslabel missing from mds3_ssm2canonicalisoform";const t=await dofetch2("mds3?"+"genome="+e.genome+"&dslabel="+e.mds3_ssm2canonicalisoform.dslabel+"&ssm2canonicalisoform=1"+"&ssm_id="+e.mds3_ssm2canonicalisoform.ssm_id);if(t.error)throw t.error;if(!t.isoform)throw"no isoform found for given ssm_id";e.gene=t.isoform;if(e.tracks){const t=e.tracks.find((t=>t.dslabel==e.mds3_ssm2canonicalisoform.dslabel));if(t){t.hlssmid=e.mds3_ssm2canonicalisoform.ssm_id}}}if(e.gene){launchgeneview(e,t);return true}return false}async function launchmdssamplescatterplot(e,t){if(!e.genome){t.error0("missing genome for mdssamplescatterplot");return}const n=t.genomes[e.genome];if(!n){t.error0("invalid genome for mdssamplescatterplot");return}e.genome=n;if(e.dataset){e.mds=n.datasets[e.dataset];if(!e.mds){t.error0("invalid dataset for mdssamplescatterplot");return}e.dslabel=e.dataset;delete e.dataset;if(e.mds.mdsIsUninitiated){const t=await dofetch3(`getDataset?genome=${e.genome.name}&dsname=${e.dslabel}`);if(t.error)throw t.error;if(!t.ds)throw"ds missing";Object.assign(e.mds,t.ds);delete e.mds.mdsIsUninitiated}}else if(e.analysisdata);else if(e.analysisdata_file){try{const t=await dofetch("textfile",{file:e.analysisdata_file});if(t.error)throw tmp.error;else if(t.text)e.analysisdata=JSON.parse(t.text)}catch(e){t.error0(e);return}}else{t.error0("neither .dataset or .analysisdata is given");return}import("./mds.samplescatterplot-c8732bae.js").then((n=>{n.init(e,t.holder0,t.debugmode)}))}function launchmdssurvivalplot(e,t){if(!e.genome){t.error0("missing genome for mdssurvivalplot");return}const n=t.genomes[e.genome];if(!n){t.error0("invalid genome for mdssurvivalplot");return}e.genome=n;if(!e.dataset){t.error0("missing dataset for mdssurvivalplot");return}e.mds=n.datasets[e.dataset];if(!e.mds){t.error0("invalid dataset for mdssurvivalplot");return}delete e.dataset;if(e.plotlist){for(const t of e.plotlist){t.renderplot=1}}import("./mds.survivalplot-4e72eb4b.js").then((n=>{n.init(e,t.holder0,t.debugmode)}))}function launch_fimo(e,t){if(!e.genome){t.error0("missing genome for fimo");return}const n=t.genomes[e.genome];if(!n){t.error0("invalid genome for fimo");return}e.genome=n;e.div=t.holder0;import("./mds.fimo-fcc96802.js").then((t=>{t.init(e)}))}function launchhic(e,t){if(!e.genome){t.error0("missing genome for hic");return}e.genome=t.genomes[e.genome];if(!e.genome){t.error0("invalid genome for hic");return}if(!e.file){t.error0("missing file for hic");return}e.hostURL=t.hostURL;e.holder=t.holder0;import("./hic.straw-3143889c.js").then((function(e){return e.a})).then((async n=>{await n.init_hicstraw(e,t.debugmode)}))}function launchsamplematrix(e,t){if(!e.genome){t.error0("missing genome for launching samplematrix");return}e.genome=t.genomes[e.genome];if(!e.genome){t.error0("invalid genome for samplematrix");return}e.hostURL=t.hostURL;e.holder=t.holder0;e.debugmode=t.debugmode;import("./samplematrix-d77014f0.js").then((t=>{new t.Samplematrix(e)}))}async function launchgeneview(e,t){if(!e.genome){t.error0("Cannot embed: must specify reference genome");return}if(e.tracks){for(const t of e.tracks){if(t.type=="mds3"&&t.dslabel)continue;t.iscustom=true}}if(e.tkjsonfile){if(!e.tracks)e.tracks=[];const t=new Map([["tkjsonfile",e.tkjsonfile]]);const n=await get_tklst(t,genomeobj);for(const t of n){e.tracks.push(t)}}const n={jwt:e.jwt,hostURL:t.hostURL,query:e.gene,genome:t.genomes[e.genome],holder:t.holder0,variantPageCall_snv:t.variantPageCall_snv,samplecart:t.samplecart,debugmode:t.debugmode,datasetqueries:e.datasetqueries,mset:e.mset,tklst:e.tracks,gmmode:e.gmmode,mclassOverride:e.mclassOverride,hide_dsHandles:e.hide_dsHandles,onloadalltk_always:e.onloadalltk_always};if(e.dataset){n.dataset=e.dataset.split(",");n.legacyDsFilter=e.legacyDsFilter;if(e.hidedatasetexpression){n.hidedatasetexpression=true}}if(e.hidegenecontrol){n.hidegenecontrol=true}if(e.hidegenelegend){n.hidegenelegend=true}let o=null;if(e.hlaachange){o=new Map;if(Array.isArray(e.hlaachange)){for(const t of e.hlaachange){if(t.name){o.set(t.name,t)}}}else{for(const t of e.hlaachange.split(",")){o.set(t,false)}}if(o.size){n.hlaachange=o}}if(e.hlvariants){n.hlvariants=e.hlvariants}await blockinit(n)}async function launchblock(e,t){if(!e.genome){t.error0("Cannot embed: must specify reference genome");return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}if(e.study){loadstudycohort(t.genomes,e.study,t.holder0,t.hostURL,e.jwt,true,t)}if(e.studyview);if(e.tracks){for(const n of e.tracks){if(n.type==tkt.mds3&&n.dslabel)continue;if(n.mdsjsonfile||n.mdsjsonurl){try{const t=await init_mdsjson(n.mdsjsonfile,n.mdsjsonurl);e.tracks=e.tracks.filter((e=>e!=n));e.tracks.push(...t)}catch(e){sayerror(t.holder0,e)}}n.iscustom=true}}if(e.tkjsonfile){if(!e.tracks)e.tracks=[];const t=new Map([["tkjsonfile",e.tkjsonfile]]);const o=await get_tklst(t,n);for(const t of o){e.tracks.push(t)}}const o={genome:n,hostURL:t.hostURL,jwt:e.jwt,holder:t.holder0,nativetracks:e.nativetracks,tklst:e.tracks,debugmode:t.debugmode,legendimg:e.legendimg};if(e.width){const n=Number.parseInt(e.width);if(Number.isNaN(n))return t.error0("browser width must be integer");o.width=n}if(e.subpanels){if(!Array.isArray(e.subpanels))return t.error0("subpanels is not array");const n=[];for(const o of e.subpanels){if(!o.chr){t.error0("missing chr in one subpanel");continue}if(!o.start||!o.stop){t.error0("missing start or stop in one subpanel");continue}if(!o.width){o.width=400}if(!o.leftpad){o.leftpad=5}n.push(o)}if(n.length){o.subpanels=n}}if(e.nobox){o.nobox=true}else{o.dogtag=e.dogtag||e.genome}if(e.chr&&Number.isInteger(e.start)){o.chr=e.chr;o.start=e.start;o.stop=Number.isInteger(e.stop)?e.stop:e.start+1}else if(e.position){const t=string2pos(e.position,n);if(t){o.chr=t.chr;o.start=t.start;o.stop=t.stop}}else if(e.positionbygene){try{const t=await findgenemodel_bysymbol(e.genome,e.positionbygene);if(t&&t[0]){const e=t[0];o.chr=e.chr;o.start=e.start;o.stop=e.stop}}catch(e){t.error0(e)}}if(!o.chr){o.chr=n.defaultcoord.chr;o.start=n.defaultcoord.start;o.stop=n.defaultcoord.stop}if(e.datasetqueries){o.datasetqueries=e.datasetqueries}if(e.hlregions){const t=[];for(const o of e.hlregions){const e=string2pos(o,n,true);if(e)t.push(e)}if(t.length)o.hlregions=t}const s=urlmap();if(s){if(s.has("position")){const e=string2pos(s.get("position"),n);if(e){o.chr=e.chr;o.start=e.start;o.stop=e.stop}}if(s.has("hlregion")){const e=[];for(const t of s.get("hlregion").split(",")){const o=string2pos(t,n,true);if(o){e.push(o)}}if(e.length){o.hlregions=e}}if(s.has("bedgraphdotfile")){if(!o.tklst)o.tklst=[];const e=s.get("bedgraphdotfile").split(",");for(let t=0;t<e.length;t+=2){if(e[t]&&e[t+1]){o.tklst.push({type:tkt.bedgraphdot,name:e[t],file:e[t+1]})}}}}return import("./block-06e306e9.js").then((function(e){return e.c})).then((e=>{t.block=new e.Block(o);return t}))}function launchfusioneditor(e,t){if(e.fusioneditor.uionly){const[n,o,s,r,i]=renderSandboxFormDiv(t.holder0,t.genomes);import("./svmr-33a9543a.js").then((a=>{a.svmrui([null,n,o,s,r,i],t.genomes,t.hostURL,e.jwt)}));return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}import("./svmr-33a9543a.js").then((o=>{o.svmrparseinput(e.fusioneditor,t.error0,n,t.holder0,t.hostURL,e.jwt)}))}async function launchmdsjsonform(e,t){if(e.mdsjsonform.uionly){const e=await import("./mdsjsonform-cd7cbed1.js");await e.init_mdsjsonform({holder:t.holder0,genomes:t.genomes})}}async function launchSelectGenomeWithTklst(e,t){const n=await import("./selectGenomeWithTklst-f927c08a.js");await n.init(e,t.holder0,t.genomes)}async function launchGeneSearch4GDCmds3(e,t){const n=await import("./geneSearch4GDCmds3-e9196a30.js");return await n.init(e,t.holder0,t.genomes)}async function launchGdcMatrix(e,t){const n=await import("./launchGdcMatrix-6c906351.js");return await n.init(e,t.holder0,t.genomes)}async function launchGdcHierCluster(e,t){const n=await import("./launchGdcHierCluster-001bc76e.js");return await n.init(e,t.holder0,t.genomes)}function launchmavb(e,t){if(e.mavolcanoplot.uionly){import("./mavb-dc006bd3.js").then((n=>{n.mavbui(t.genomes,t.hostURL,e.jwt,t.holder0,t.sandbox_header)}));return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}e.mavolcanoplot.hostURL=t.hostURL;e.mavolcanoplot.genome=n;import("./mavb-dc006bd3.js").then((n=>{n.mavbparseinput(e.mavolcanoplot,t.error0,t.holder0,e.jwt)}))}function launch2dmaf(e,t){if(e.twodmaf.uionly){import("./2dmaf-7f12f347.js").then((e=>{e.d2mafui(t.genomes,t.holder0)}));return}const n=t.genomes[e.genome];if(!n){t.error0("Invalid genome: "+e.genome);return}e.twodmaf.hostURL=t.hostURL;e.twodmaf.genome=n;import("./2dmaf-7f12f347.js").then((n=>{n.d2mafparseinput(e.twodmaf,t.holder0)}))}function launchmaftimeline(e,t){if(e.maftimeline.uionly){import("./maftimeline-8b2d8513.js").then((e=>{e.default(t.genomes,t.holder0,t.sandbox_header)}))}}function launchJunctionbyMatrix(e,t){if(e.junctionbymatrix.uionly){import("./block.tk.junction.textmatrixui-11649433.js").then((n=>{n.default(t.genomes,t.hostURL,e.jwt,t.holder0)}))}}function launchgdcbamslice(e,t){return import("./block.tk.bam.gdc-318db418.js").then((n=>n.bamsliceui({genomes:t.genomes,holder:t.holder0,hideTokenInput:e.gdcbamslice.hideTokenInput,callbacks:e.gdcbamslice.callbacks||{},filter0:e.filter0,stream2download:e.gdcbamslice.stream2download,inputValue:e.gdcbamslice.inputValue})))}async function launch_singlecell(e,t){try{const n=t.genomes[e.genome];if(!n)throw"Invalid genome: "+e.genome;e.genome=n;const o=await import("./singlecell-d21858f6.js");await o.init(e,t.holder0)}catch(e){t.error0("Error launching single cell viewer: "+e);if(e.stack)console.log(e.stack)}}async function launch_tkUIs(e,t){if(e.tkui=="bigwig"){const e=await import("./block.tk.bigwig.ui-bc0afbf9.js");e.bigwigUI(t.genomes,t.holder)}if(e.tkui=="databrowser"){const e=await import("./databrowser.ui-0803623f.js");e.init_databrowserUI(t.holder,t.debugmode)}if(e.tkui=="genefusion"){const e=await import("./genefusion.ui-31ff953e.js");e.init_geneFusionUI(t.holder,t.genomes,t.debugmode)}if(e.tkui=="disco"){const e=await import("./Disco.UI-266c3c98.js");e.init_discoplotUI(t.holder,t.genomes,t.debugmode)}}async function launchtermdb(e,t){if(!e.holder)e.holder=t.holder0;import("./app-9ef9a482.js").then((t=>{t.appInit(e)}))}async function launch_genefusion(e,t){try{const n=t.genomes[e.genome];if(!n)throw"Invalid genome: "+e.genome;const o=await import("./fusion.parse-206fa8af.js");const s=await o.parseFusion({line:e.genefusion.text,genome:n,positionType:e.genefusion.positionType});await getGm(s.pairlst[0].a,n);await getGm(s.pairlst[0].b,n);const r=await import("./svgraph-22fb937c.js");r.default({pairlst:s.pairlst,genome:n,holder:t.holder})}catch(e){t.error0(e)}}async function getGm(e,t){const n=await dofetch3("genelookup",{body:{genome:t.name,input:e.isoform,deep:1}});if(n.error)throw n.error;if(!Array.isArray(n.gmlst))throw"gmlst not array";const o=n.gmlst.find((t=>t.isoform==e.isoform));if(!o)throw"no match to isoform";e.chr=o.chr;e.name=o.name;e.gm={isoform:o.isoform}}async function launchmass(e,t){const n=e.mass;if(!n.holder)n.holder=t.holder0;if(n.state){if(n.state.genome){n.genome=t.genomes[n.state.genome]}else if(n.state?.vocab?.genome){n.genome=t.genomes[n.state.vocab.genome]}}n.getDatasetAccessToken=e.getDatasetAccessToken;n.addLoginCallback=e.addLoginCallback;const o=sessionStorage.getItem("hostURL");if(window.opener&&o!=window.location.origin){n.embeddedSessionState=JSON.parse(sessionStorage.getItem("embeddedSessionState")||`{}`);const e=t=>{if(t.origin!=window.location.origin&&t.origin!==o)return;if(t.data.state){window.removeEventListener("message",e);Object.assign(n.embeddedSessionState,t.data.state);sessionStorage.setItem("embeddedSessionState",JSON.stringify(n.embeddedSessionState))}};window.addEventListener("message",e,false);setTimeout((()=>window.removeEventListener("message",e)),1e3);let t;try{if(window.opener.origin){t=window.opener.origin}else{t=o}}catch(e){t=o}try{window.opener.postMessage("getActiveMassSession",t)}catch(e){console.log(e)}}const s=await import("./app-53b444fe.js");return await s.appInit(n)}function initgenome(e){e.tkset=[];e.isoformcache=new Map;e.junctionframecache=new Map;e.isoformmatch=(t,n,o)=>{if(!t)return null;const s=t.toUpperCase();if(!e.isoformcache.has(s))return null;const r=e.isoformcache.get(s);if(r.length==1)return r[0];if(!n){console.log("no chr provided for matching with "+s);return r[0]}let i=null;for(const e of r){if(e.chr.toUpperCase()==n.toUpperCase()&&e.start<=o&&e.stop>=o){i=e}}if(i)return i;for(const e of r){if(e.chr.toUpperCase()==n.toUpperCase())return e}return null};e.chrlookup={};for(const t in e.majorchr){e.chrlookup[t.toUpperCase()]={name:t,len:e.majorchr[t],major:true}}if(e.minorchr){for(const t in e.minorchr){e.chrlookup[t.toUpperCase()]={name:t,len:e.minorchr[t]}}}if(!e.tracks){e.tracks=[]}for(const t of e.tracks){t.tkid=Math.random().toString()}for(const t in e.datasets){const n=e.datasets[t];if(n.isMds);else if(n.isMds3){if(!n.label)return"ds.label missing"}}return null}async function launchDisco(e,t){if(!e.genome)throw'"genome" parameter missing';const n=t.genomes[e.genome];if(!n)throw"unknown genome";const o=await import("./launch.adhoc-7639eb4a.js");return await o.launch(e.disco,n,t.holder0)}export{make_table_2col as $,stratinput as A,fillbar as B,tkt as C,validate_vcfinfofilter as D,mclass as E,dtdel as F,dtcloss as G,dtnloss as H,dtitd as I,dtfusionrna as J,dtsv as K,dtsnvindel as L,Menu as M,export_data as N,dt2label as O,invalidcoord as P,disappear as Q,appear as R,rgb as S,dofetch3 as T,defaultcolor as U,vcf2dstk as V,tkexists as W,textlensf as X,string2pos as Y,gmlst2loci as Z,string2snp as _,axisstyle as a,formatSpecifier as a$,d3selectAll as a0,newSandboxDiv as a1,tkt$1 as a2,blockinit as a3,sketchGene as a4,exoncolor as a5,sketchSplicerna as a6,sketchRna as a7,sketchProtein2 as a8,nt2aa as a9,getAppInit as aA,getStoreInit as aB,deepFreeze$2 as aC,deepEqual as aD,getInitFxn as aE,isInSession as aF,throwMsgWithFilePathAndFnName as aG,convertUnits as aH,getColors as aI,isNumeric as aJ,Bus as aK,corsMessage as aL,multiInit as aM,Tabs as aN,copyMerge as aO,__awaiter as aP,plotColor as aQ,to_svg as aR,icons as aS,prepStore as aT,dispatch as aU,interpolate$1 as aV,interrupt as aW,transformer as aX,copy as aY,initRange as aZ,ticks as a_,sketchGmsum as aa,sketchProtein as ab,sayerror as ac,mclasscolorchangeui as ad,debounce_1 as ae,dtcnv as af,may_findmatchingsnp as ag,snp_printhtml as ah,contigNameNoChr as ai,coloroutframe as aj,colorinframe as ak,vcfcopymclass as al,ordinal as am,schemeCategory10 as an,morigin as ao,aa2gmcoord as ap,duplicate$1 as aq,gmmode$1 as ar,alleleInGenotypeStr as as,vepinfo as at,mclassdeletion as au,mclasssnv as av,mclassmnv as aw,mclassinsertion as ax,mclassnonstandard as ay,getCompInit as az,basecolor as b,block_init as b$,tab_wait as b0,getsjcharts as b1,first_genetrack_tolist as b2,contigNameNoChr2 as b3,showErrorsWithCounter as b4,validtkt as b5,mclassitd as b6,getMax_byiqr as b7,dtloh as b8,mclassnloss as b9,mclasssv as bA,mclasscnvloss as bB,mclasscnvgain as bC,mclassutr3 as bD,mclassutr5 as bE,filetypeselect as bF,init_bulk_flag as bG,content2flag as bH,bulkin as bI,bulkui as bJ,mclasscolor2table as bK,mclassdel as bL,interpolateRgb as bM,IN_frame as bN,spliceeventchangegmexon as bO,OUT_frame as bP,flyindi as bQ,client as bR,common as bS,ranksays as bT,hierarchy as bU,dt2color as bV,dtgeneexpression as bW,truncatingMutations as bX,proteinChangingMutations as bY,rgbBasis as bZ,runproteinpaint$1 as b_,mclasscloss as ba,mclassfusionrna as bb,colorbgleft as bc,colorbgright as bd,colorctx as be,bulk_badline as bf,tab2box as bg,addGeneSearchbox as bh,renderSandboxFormDiv as bi,newpane3 as bj,bisector as bk,tickStep as bl,continuous as bm,urlmap as bn,table2col as bo,string2variant as bp,linearish as bq,identity$1 as br,initInterpolator as bs,interpolateRound as bt,gene_searchbox as bu,findgenemodel_bysymbol as bv,colors as bw,domaincolorlst as bx,colorantisense as by,timer as bz,dofetch as c,dofetch2 as d,bwSetting as e,format as f,appear$1 as g,disappear$1 as h,labelbox as i,category2legend as j,keyupEnter as k,linear as l,bplen as m,gmmode as n,sayerror$1 as o,font as p,d3select as q,rgb2hex as r,styleInject as s,genomic2gm as t,getdomaintypes as u,default_text_color as v,newpane as w,rna2gmcoord as x,basecompliment as y,stratify as z};