From 5b69b78a64e8b9b01e8fee39acc1e15ac55df432 Mon Sep 17 00:00:00 2001 From: nlowreydufour <53796524+nlowreydufour@users.noreply.github.com> Date: Tue, 8 Oct 2024 18:33:54 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20immense/?= =?UTF-8?q?immybot-documentation@2ae7acb02d7c5f68eb41e748a2e5100748faa42b?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 8 +- FAQ.html | 60 ++++----- README.html | 60 ++++----- add-users.html | 60 ++++----- ...{FAQ.md.CC1cvv3i.js => FAQ.md.B36G0pkM.js} | 2 +- ...1cvv3i.lean.js => FAQ.md.B36G0pkM.lean.js} | 2 +- ...E.md.CLL6q4qu.js => README.md.D38tZSjJ.js} | 2 +- ...4qu.lean.js => README.md.D38tZSjJ.lean.js} | 2 +- ...d.DK9Iwms8.js => add-users.md.OaI5tNlY.js} | 2 +- ....lean.js => add-users.md.OaI5tNlY.lean.js} | 2 +- assets/app.CbQoAe_D.js | 91 -------------- assets/app.DRN3unl1.js | 91 ++++++++++++++ ...re-graph-permissions-setup.md.CQS9UkSF.js} | 2 +- ...aph-permissions-setup.md.CQS9UkSF.lean.js} | 2 +- ...build-your-own-integration.md.CbdX9QBf.js} | 2 +- ...-your-own-integration.md.CbdX9QBf.lean.js} | 2 +- ...G-5N.js => VPAlgoliaSearchBox.hP-Vp1-_.js} | 4 +- .../{arc.EE6MX9ab.js => arc.CbQZFRTr.js} | 2 +- ...W.js => blockDiagram-a8a0820c.B3oN9ihx.js} | 2 +- ...y7Cl.js => c4Diagram-dc8f04df.CKb4DDrj.js} | 2 +- assets/chunks/channel.Bgp4IlJX.js | 1 + assets/chunks/channel.Byw1PSvd.js | 1 - ...m.js => classDiagram-8298e144.B6ahrBSz.js} | 4 +- ...s => classDiagram-v2-296fb1cd.BlvxQji3.js} | 4 +- assets/chunks/clone.Bnzwv1hF.js | 1 + assets/chunks/clone.BumBiDEu.js | 1 - ...Hcb.js => createText-4a4f35c9.Cu3K6_Cl.js} | 2 +- ...CpbBxaaE.js => edges-5962ec63.BFgoqf-O.js} | 2 +- ...rcgg.js => erDiagram-51d2b61e.BKvP5nV4.js} | 6 +- ...VO1h-fk.js => flowDb-0da60e67.CpQFkmn8.js} | 8 +- ...YG.js => flowDiagram-622f9fc1.UNHUO6YN.js} | 2 +- .../flowDiagram-v2-13329dc7.CSjni5i6.js | 1 - .../flowDiagram-v2-a33b4996.npThVBEn.js | 1 + ...chart-elk-definition-930acc39.RaYPOHcR.js} | 2 +- assets/chunks/framework.01Cf-Wcw.js | 1 - assets/chunks/framework.B49Yz1nR.js | 1 + ...q.js => ganttDiagram-a649f789.B3MVSZyS.js} | 8 +- ...s => gitGraphDiagram-23af1bdb.xtAOwR_N.js} | 8 +- assets/chunks/graph.C4kgFXP1.js | 1 + assets/chunks/graph.CwfrPCLx.js | 1 - ...Dh9et-Tw.js => index-9620d214.nAHig6oE.js} | 2 +- ..._0.js => infoDiagram-f86e0131.CYcEreMK.js} | 2 +- ...js => journeyDiagram-de0d04b7.Cjc0E3Qw.js} | 8 +- assets/chunks/layout.C5Nv6jKv.js | 1 + assets/chunks/layout.Ds1muZd1.js | 1 - .../{line.Rvm4JnwS.js => line.DpDoeUQJ.js} | 2 +- ...{linear.CuaGw0Y_.js => linear.DG04O0I7.js} | 2 +- ...> mindmap-definition-b08d3ac4.BURIHg2K.js} | 2 +- ...H9R.js => pieDiagram-31d824a1.BcWock7l.js} | 6 +- ...s => quadrantDiagram-a712a7d9.CBHMGHp7.js} | 2 +- ...> requirementDiagram-eb878fee.DLnn6pB1.js} | 2 +- ....js => sankeyDiagram-c599f8ec.DnE5IYY2.js} | 2 +- ...s => sequenceDiagram-66748113.CycNJCqh.js} | 2 +- ...j.js => stateDiagram-35d39939.CGFuH3-m.js} | 2 +- ...s => stateDiagram-v2-6c43c13a.on8Hb2_5.js} | 2 +- assets/chunks/styles-422bd1c9.CNvCrs-e.js | 116 ++++++++++++++++++ assets/chunks/styles-483fbfea.CCXKtTy9.js | 116 ------------------ ...yb4k6WS.js => styles-de3becd0.CAskXyHY.js} | 8 +- ...pjWbUrA.js => styles-e2b9d258.DqwhFH5o.js} | 2 +- ....js => svgDrawCommon-9d162435.wUjoN1G-.js} | 2 +- assets/chunks/theme.BlGa_csg.js | 2 + assets/chunks/theme.BwHuVLnS.js | 2 - ... timeline-definition-6eaa3543.oX4ehz4e.js} | 2 +- ...js => xychartDiagram-4a8b8217.BboCrNzl.js} | 2 +- ...automate-integration-setup.md.BbRfz9pz.js} | 2 +- ...ate-integration-setup.md.BbRfz9pz.lean.js} | 2 +- ...-control-integration-setup.md.BR0Z4rIs.js} | 2 +- ...rol-integration-setup.md.BR0Z4rIs.lean.js} | 2 +- ...e-manage-integration-setup.md.qxVZT16I.js} | 2 +- ...age-integration-setup.md.qxVZT16I.lean.js} | 2 +- ...jwTd.js => getting-started.md.R7bijnbI.js} | 2 +- ...js => getting-started.md.R7bijnbI.lean.js} | 2 +- ... => halo-integration-setup.md.Bn8P35Lb.js} | 2 +- ...alo-integration-setup.md.Bn8P35Lb.lean.js} | 2 +- ...-gtKAH.js => immy-commands.md.v4hM1wNE.js} | 2 +- ...n.js => immy-commands.md.v4hM1wNE.lean.js} | 2 +- ...ex.md.Bjqt4eZW.js => index.md.DZBl2ip8.js} | 2 +- ...4eZW.lean.js => index.md.DZBl2ip8.lean.js} | 2 +- ...kU.js => markdown-examples.md.-m8imKgy.js} | 2 +- ... => markdown-examples.md.-m8imKgy.lean.js} | 2 +- ...ncentral-integration-setup.md.CSRJTbb9.js} | 2 +- ...ral-integration-setup.md.CSRJTbb9.lean.js} | 2 +- .../ninjarmm-integration-setup.md.DQh0drIy.js | 10 ++ ...armm-integration-setup.md.DQh0drIy.lean.js | 1 + ...ncentral-integration-setup.md.9C3B6NVP.js} | 2 +- ...ral-integration-setup.md.9C3B6NVP.lean.js} | 2 +- ....SL0U_Gws.js => onboarding.md.DvY8VkVM.js} | 2 +- ...lean.js => onboarding.md.DvY8VkVM.lean.js} | 2 +- ...=> recommended-deployments.md.CsGVHl4O.js} | 2 +- ...commended-deployments.md.CsGVHl4O.lean.js} | 2 +- ...keqcJE.js => releases-2020.md.DPH-1fDz.js} | 2 +- ...n.js => releases-2020.md.DPH-1fDz.lean.js} | 2 +- ...lWLwmP.js => releases-2021.md.BS1iS6In.js} | 2 +- ...n.js => releases-2021.md.BS1iS6In.lean.js} | 2 +- ...Qr6RBa.js => releases-2022.md.HDb-adly.js} | 2 +- ...n.js => releases-2022.md.HDb-adly.lean.js} | 2 +- ...md.VbIXcsif.js => releases.md.D4RyUjFl.js} | 2 +- ...f.lean.js => releases.md.D4RyUjFl.lean.js} | 2 +- ....md.DmWdNvqE.js => scripts.md.C-uxU55o.js} | 2 +- ...qE.lean.js => scripts.md.C-uxU55o.lean.js} | 2 +- ...{style.DwWv9iRe.css => style.CyaMcyxm.css} | 2 +- ...DDvZWsL6.js => terminology.md.Wz1ZetDt.js} | 2 +- ...ean.js => terminology.md.Wz1ZetDt.lean.js} | 2 +- ...apdN.js => troubleshooting.md._hAa0pQ-.js} | 2 +- ...js => troubleshooting.md._hAa0pQ-.lean.js} | 2 +- ....DuUr6iiw.js => user-roles.md.CJ8-YXJu.js} | 2 +- ...lean.js => user-roles.md.CJ8-YXJu.lean.js} | 2 +- ...4PLI.js => windows-sandbox.md.c7d4kCuI.js} | 2 +- ...js => windows-sandbox.md.c7d4kCuI.lean.js} | 2 +- azure-graph-permissions-setup.html | 60 ++++----- build-your-own-integration.html | 60 ++++----- connectwise-automate-integration-setup.html | 60 ++++----- connectwise-control-integration-setup.html | 60 ++++----- connectwise-manage-integration-setup.html | 60 ++++----- getting-started.html | 60 ++++----- halo-integration-setup.html | 60 ++++----- hashmap.json | 2 +- immy-commands.html | 60 ++++----- index.html | 60 ++++----- markdown-examples.html | 60 ++++----- ncentral-integration-setup.html | 60 ++++----- ninjarmm-integration-setup.html | 59 +++++++++ old-ncentral-integration-setup.html | 60 ++++----- onboarding.html | 60 ++++----- recommended-deployments.html | 60 ++++----- releases-2020.html | 60 ++++----- releases-2021.html | 60 ++++----- releases-2022.html | 60 ++++----- releases.html | 60 ++++----- scripts.html | 60 ++++----- sitemap.xml | 2 +- terminology.html | 60 ++++----- troubleshooting.html | 60 ++++----- user-roles.html | 60 ++++----- windows-sandbox.html | 60 ++++----- 135 files changed, 1178 insertions(+), 1108 deletions(-) rename assets/{FAQ.md.CC1cvv3i.js => FAQ.md.B36G0pkM.js} (99%) rename assets/{FAQ.md.CC1cvv3i.lean.js => FAQ.md.B36G0pkM.lean.js} (66%) rename assets/{README.md.CLL6q4qu.js => README.md.D38tZSjJ.js} (96%) rename assets/{README.md.CLL6q4qu.lean.js => README.md.D38tZSjJ.lean.js} (83%) rename assets/{add-users.md.DK9Iwms8.js => add-users.md.OaI5tNlY.js} (93%) rename assets/{add-users.md.DK9Iwms8.lean.js => add-users.md.OaI5tNlY.lean.js} (93%) delete mode 100644 assets/app.CbQoAe_D.js create mode 100644 assets/app.DRN3unl1.js rename assets/{azure-graph-permissions-setup.md.COlBgxzm.js => azure-graph-permissions-setup.md.CQS9UkSF.js} (98%) rename assets/{azure-graph-permissions-setup.md.COlBgxzm.lean.js => azure-graph-permissions-setup.md.CQS9UkSF.lean.js} (83%) rename assets/{build-your-own-integration.md.v8AUrf4X.js => build-your-own-integration.md.CbdX9QBf.js} (99%) rename assets/{build-your-own-integration.md.v8AUrf4X.lean.js => build-your-own-integration.md.CbdX9QBf.lean.js} (69%) rename assets/chunks/{VPAlgoliaSearchBox.Dx-SG-5N.js => VPAlgoliaSearchBox.hP-Vp1-_.js} (75%) rename assets/chunks/{arc.EE6MX9ab.js => arc.CbQZFRTr.js} (98%) rename assets/chunks/{blockDiagram-9f4a6865.BhiXeOzW.js => blockDiagram-a8a0820c.B3oN9ihx.js} (78%) rename assets/chunks/{c4Diagram-ae766693.Cw5qy7Cl.js => c4Diagram-dc8f04df.CKb4DDrj.js} (99%) create mode 100644 assets/chunks/channel.Bgp4IlJX.js delete mode 100644 assets/chunks/channel.Byw1PSvd.js rename assets/chunks/{classDiagram-fb54d2a0.RDXiZthm.js => classDiagram-8298e144.B6ahrBSz.js} (94%) rename assets/chunks/{classDiagram-v2-a2b738ad.DbdhFrZX.js => classDiagram-v2-296fb1cd.BlvxQji3.js} (82%) create mode 100644 assets/chunks/clone.Bnzwv1hF.js delete mode 100644 assets/chunks/clone.BumBiDEu.js rename assets/chunks/{createText-ca0c5216.5u9lbHcb.js => createText-4a4f35c9.Cu3K6_Cl.js} (99%) rename assets/chunks/{edges-066a5561.CpbBxaaE.js => edges-5962ec63.BFgoqf-O.js} (97%) rename assets/chunks/{erDiagram-09d1c15f.vOHorcgg.js => erDiagram-51d2b61e.BKvP5nV4.js} (95%) rename assets/chunks/{flowDb-c1833063.BVO1h-fk.js => flowDb-0da60e67.CpQFkmn8.js} (94%) rename assets/chunks/{flowDiagram-b222e15a.Cpr-kPYG.js => flowDiagram-622f9fc1.UNHUO6YN.js} (97%) delete mode 100644 assets/chunks/flowDiagram-v2-13329dc7.CSjni5i6.js create mode 100644 assets/chunks/flowDiagram-v2-a33b4996.npThVBEn.js rename assets/chunks/{flowchart-elk-definition-ae0efee6.CLgAh--I.js => flowchart-elk-definition-930acc39.RaYPOHcR.js} (99%) delete mode 100644 assets/chunks/framework.01Cf-Wcw.js create mode 100644 assets/chunks/framework.B49Yz1nR.js rename assets/chunks/{ganttDiagram-b62c793e.DstTdRzq.js => ganttDiagram-a649f789.B3MVSZyS.js} (92%) rename assets/chunks/{gitGraphDiagram-942e62fe.m2p8tYff.js => gitGraphDiagram-23af1bdb.xtAOwR_N.js} (94%) create mode 100644 assets/chunks/graph.C4kgFXP1.js delete mode 100644 assets/chunks/graph.CwfrPCLx.js rename assets/chunks/{index-01f381cb.Dh9et-Tw.js => index-9620d214.nAHig6oE.js} (96%) rename assets/chunks/{infoDiagram-94cd232f.Dpqcs4_0.js => infoDiagram-f86e0131.CYcEreMK.js} (98%) rename assets/chunks/{journeyDiagram-6625b456.g47i3df6.js => journeyDiagram-de0d04b7.Cjc0E3Qw.js} (92%) create mode 100644 assets/chunks/layout.C5Nv6jKv.js delete mode 100644 assets/chunks/layout.Ds1muZd1.js rename assets/chunks/{line.Rvm4JnwS.js => line.DpDoeUQJ.js} (93%) rename assets/chunks/{linear.CuaGw0Y_.js => linear.DG04O0I7.js} (98%) rename assets/chunks/{mindmap-definition-307c710a.B42RSYq2.js => mindmap-definition-b08d3ac4.BURIHg2K.js} (99%) rename assets/chunks/{pieDiagram-bb1d19e5.CcIweH9R.js => pieDiagram-31d824a1.BcWock7l.js} (89%) rename assets/chunks/{quadrantDiagram-c759a472.DrZVK_s3.js => quadrantDiagram-a712a7d9.CBHMGHp7.js} (99%) rename assets/chunks/{requirementDiagram-87253d64.DTGKGrWZ.js => requirementDiagram-eb878fee.DLnn6pB1.js} (98%) rename assets/chunks/{sankeyDiagram-707fac0f.BUCcUXDc.js => sankeyDiagram-c599f8ec.DnE5IYY2.js} (95%) rename assets/chunks/{sequenceDiagram-6894f283.xh2cdXdg.js => sequenceDiagram-66748113.CycNJCqh.js} (99%) rename assets/chunks/{stateDiagram-5dee940d.BBcnAHJj.js => stateDiagram-35d39939.CGFuH3-m.js} (92%) rename assets/chunks/{stateDiagram-v2-1992cada.BStA_oNN.js => stateDiagram-v2-6c43c13a.on8Hb2_5.js} (86%) create mode 100644 assets/chunks/styles-422bd1c9.CNvCrs-e.js delete mode 100644 assets/chunks/styles-483fbfea.CCXKtTy9.js rename assets/chunks/{styles-0784dbeb.Dyb4k6WS.js => styles-de3becd0.CAskXyHY.js} (95%) rename assets/chunks/{styles-b83b31c9.DpjWbUrA.js => styles-e2b9d258.DqwhFH5o.js} (99%) rename assets/chunks/{svgDrawCommon-5e1cfd1d.Cpp7qDwc.js => svgDrawCommon-9d162435.wUjoN1G-.js} (95%) create mode 100644 assets/chunks/theme.BlGa_csg.js delete mode 100644 assets/chunks/theme.BwHuVLnS.js rename assets/chunks/{timeline-definition-bf702344.D5PATXbR.js => timeline-definition-6eaa3543.oX4ehz4e.js} (98%) rename assets/chunks/{xychartDiagram-f11f50a6.Bqkbyp4J.js => xychartDiagram-4a8b8217.BboCrNzl.js} (98%) rename assets/{connectwise-automate-integration-setup.md.UrG_ePnE.js => connectwise-automate-integration-setup.md.BbRfz9pz.js} (98%) rename assets/{connectwise-automate-integration-setup.md.UrG_ePnE.lean.js => connectwise-automate-integration-setup.md.BbRfz9pz.lean.js} (94%) rename assets/{connectwise-control-integration-setup.md.BAIDwG2f.js => connectwise-control-integration-setup.md.BR0Z4rIs.js} (99%) rename assets/{connectwise-control-integration-setup.md.BAIDwG2f.lean.js => connectwise-control-integration-setup.md.BR0Z4rIs.lean.js} (91%) rename assets/{connectwise-manage-integration-setup.md.C3Jl0y3u.js => connectwise-manage-integration-setup.md.qxVZT16I.js} (96%) rename assets/{connectwise-manage-integration-setup.md.C3Jl0y3u.lean.js => connectwise-manage-integration-setup.md.qxVZT16I.lean.js} (81%) rename assets/{getting-started.md.sOwUjwTd.js => getting-started.md.R7bijnbI.js} (98%) rename assets/{getting-started.md.sOwUjwTd.lean.js => getting-started.md.R7bijnbI.lean.js} (97%) rename assets/{halo-integration-setup.md.DmoZJrZZ.js => halo-integration-setup.md.Bn8P35Lb.js} (96%) rename assets/{halo-integration-setup.md.DmoZJrZZ.lean.js => halo-integration-setup.md.Bn8P35Lb.lean.js} (69%) rename assets/{immy-commands.md.Bt-gtKAH.js => immy-commands.md.v4hM1wNE.js} (99%) rename assets/{immy-commands.md.Bt-gtKAH.lean.js => immy-commands.md.v4hM1wNE.lean.js} (68%) rename assets/{index.md.Bjqt4eZW.js => index.md.DZBl2ip8.js} (95%) rename assets/{index.md.Bjqt4eZW.lean.js => index.md.DZBl2ip8.lean.js} (95%) rename assets/{markdown-examples.md.DU2o7HkU.js => markdown-examples.md.-m8imKgy.js} (97%) rename assets/{markdown-examples.md.DU2o7HkU.lean.js => markdown-examples.md.-m8imKgy.lean.js} (69%) rename assets/{ncentral-integration-setup.md.DZCt8ZGB.js => ncentral-integration-setup.md.CSRJTbb9.js} (99%) rename assets/{ncentral-integration-setup.md.DZCt8ZGB.lean.js => ncentral-integration-setup.md.CSRJTbb9.lean.js} (92%) create mode 100644 assets/ninjarmm-integration-setup.md.DQh0drIy.js create mode 100644 assets/ninjarmm-integration-setup.md.DQh0drIy.lean.js rename assets/{old-ncentral-integration-setup.md.CNK2HfXm.js => old-ncentral-integration-setup.md.9C3B6NVP.js} (98%) rename assets/{old-ncentral-integration-setup.md.CNK2HfXm.lean.js => old-ncentral-integration-setup.md.9C3B6NVP.lean.js} (92%) rename assets/{onboarding.md.SL0U_Gws.js => onboarding.md.DvY8VkVM.js} (97%) rename assets/{onboarding.md.SL0U_Gws.lean.js => onboarding.md.DvY8VkVM.lean.js} (83%) rename assets/{recommended-deployments.md.P_r5cshh.js => recommended-deployments.md.CsGVHl4O.js} (98%) rename assets/{recommended-deployments.md.P_r5cshh.lean.js => recommended-deployments.md.CsGVHl4O.lean.js} (85%) rename assets/{releases-2020.md.D0keqcJE.js => releases-2020.md.DPH-1fDz.js} (99%) rename assets/{releases-2020.md.D0keqcJE.lean.js => releases-2020.md.DPH-1fDz.lean.js} (67%) rename assets/{releases-2021.md.DilWLwmP.js => releases-2021.md.BS1iS6In.js} (99%) rename assets/{releases-2021.md.DilWLwmP.lean.js => releases-2021.md.BS1iS6In.lean.js} (67%) rename assets/{releases-2022.md.CEQr6RBa.js => releases-2022.md.HDb-adly.js} (99%) rename assets/{releases-2022.md.CEQr6RBa.lean.js => releases-2022.md.HDb-adly.lean.js} (67%) rename assets/{releases.md.VbIXcsif.js => releases.md.D4RyUjFl.js} (99%) rename assets/{releases.md.VbIXcsif.lean.js => releases.md.D4RyUjFl.lean.js} (98%) rename assets/{scripts.md.DmWdNvqE.js => scripts.md.C-uxU55o.js} (99%) rename assets/{scripts.md.DmWdNvqE.lean.js => scripts.md.C-uxU55o.lean.js} (66%) rename assets/{style.DwWv9iRe.css => style.CyaMcyxm.css} (98%) rename assets/{terminology.md.DDvZWsL6.js => terminology.md.Wz1ZetDt.js} (99%) rename assets/{terminology.md.DDvZWsL6.lean.js => terminology.md.Wz1ZetDt.lean.js} (98%) rename assets/{troubleshooting.md.BULOapdN.js => troubleshooting.md._hAa0pQ-.js} (99%) rename assets/{troubleshooting.md.BULOapdN.lean.js => troubleshooting.md._hAa0pQ-.lean.js} (98%) rename assets/{user-roles.md.DuUr6iiw.js => user-roles.md.CJ8-YXJu.js} (94%) rename assets/{user-roles.md.DuUr6iiw.lean.js => user-roles.md.CJ8-YXJu.lean.js} (66%) rename assets/{windows-sandbox.md.d3YI4PLI.js => windows-sandbox.md.c7d4kCuI.js} (95%) rename assets/{windows-sandbox.md.d3YI4PLI.lean.js => windows-sandbox.md.c7d4kCuI.lean.js} (81%) create mode 100644 ninjarmm-integration-setup.html diff --git a/404.html b/404.html index 5ce94041..c0fd8b06 100644 --- a/404.html +++ b/404.html @@ -5,10 +5,10 @@ 404 | immy.bot - - + + - + @@ -17,7 +17,7 @@
- + \ No newline at end of file diff --git a/FAQ.html b/FAQ.html index 77544e3f..e6423635 100644 --- a/FAQ.html +++ b/FAQ.html @@ -5,52 +5,52 @@ Frequently Asked Questions | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
Skip to content

ImmyBot will no longer support Windows 7, Sever 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

.NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

Please see the FAQ section for more details

Frequently Asked Questions

What is the difference between the Starter and Standard plan?

Both plans allow you to import all of your existing agents into ImmyBot if you use one of our support integrations.

Both plans allow installing and updating of the ImmyBot agent on all of your existing computers.

Both plans allow running maintenance on all of your computers given that the computer was imported into ImmyBot in the last 7 days.

Starter

Starter does not charge maintenance per computer since it does not support ongoing maintenance for your computers.

Once a computer has been in ImmyBot for at least 7 days, maintenance can no longer be executed against it. This includes all onboarding, full maintenance, and adhoc sessions. If you need to manage ongoing maintenance against a computer older than 7 days, then you will need to upgrade to Standard.

Standard

Standard charges per maintained computer since it supports ongoing maintenance.

What is a maintained computer?

Since we allow you to import all of your agents into ImmyBot, we don't simply charge per agent.

Instead, we only consider computers that have received ongoing maintenance.

A computer has received ongoing maintenance if an onboarding, full maintenance, or adhoc session has been run against it after the computer has been in ImmyBot for over 7 days.

Maintenance per computer

When maintenance is performed against a computer older than 7 days, ImmyBot will check the following:

  1. Is this computer already counted towards your maintained count?

    • If it is, then maintenance can be performed on this computer.
  2. Are we at the maximum number of maintained computers for this subscription?

    • If it is not, then this computer will be added to your active maintained computer count, and maintenance can be performed on this computer.

When a subscription is at the maximum maintained count, only maintenance for computers considered in the count will be allowed. In order to run maintenance on other computers, you can purchase more computer licenses for your subscription.

Do I need a separate USB/Installer per tenant?

No. Create a USB pointing to your own tenant (or create an “Onboarding” tenant) and don’t select the Auto-Onboard option.

You will change the tenant of the computer on the Onboarding area of the computer after it comes into New Computers

ImmyBot does not deploy anything automatically. You can feel safe saving your Deployments. Think of them like documenting how things SHOULD be. If you want Immy to automatically enforce deployments, you would need the Immy Deploy plan which allows you to create schedules.

Think of it like if Group Policy only updated if you manually ran gpupdate /force or otherwise specified a schedule for the gpupdates to happen. We understand that updating and installing software on existing computers can be intrusive to the user which is why we schedule these actions out and give the user the ability to postpone via interactive emails.

IMPORTANT: If you setup integration with your RMM, when you map an RMM client to an ImmyBot tenant, ImmyBot will begin running inventory scripts on those machines every 24 hours. These scripts are read-only, but if you have aggressive monitoring software it may cause false alarms.

What if I don’t know which user will be using the computer?

Do your best to find out, or assign machines to specific users ahead of time. Without this, user level customizations are impossible. However, you may find yourself in a shared-computer scenario where every computer gets the same 365 applications. Simply create a deployment for those 365 applications for all computers under that tenant.

Can Immy join AzureAD?

Yes. Create a deployment for the Join AzureAD task. We use the bulk enrollment technique and generate a provisioning package to join the machine to AzureAD. At the time of writing, this requires you to create a user in each customer’s tenant. We plan to remove this requirement in the future.

My AzureAD Join action is failing, what are some common fixes?

Check if MFA Requirement for Joining is enabled via Conditional Access or Azure Device Settings. MFA requirement for all users in Conditional Access will also block the execution, as the package_XXX user will encounter a MFA prompt. Most other situations are noted during execution failure.

What Windows versions does ImmyAgent support?

The ImmyAgent is written in .NET, and as such supports the same Windows versions the .NET runtime supports. Currently, the ImmyAgent runs on .NET 7 and therefore supports Win7+ devices. However, support for .NET 7 is ending May 14th, 2024. After May 14th, Immybot will be transitioning the Agent to the .NET 8 runtime. Win7 is not officially supported in .NET 8, and as such will no longer be supported in ImmyBot. Older systems may continue to work inside of ImmyBot with necessary updates applied, however, we will not be offering any support for unsupported machines.

DANGER

We do not endorse Legacy Update or similar tools. The best thing to do is upgrade the system. Use at your own risk.

Can Immy make deploying via Intune more simple?

Absolutely! There is a global Task labeled "Deploy ImmyAgent to Intune" that can do an excellent job of it.

  • Ensure you are using the Custom Graph Permissions
  • Ensure you have added the Graph Application permission DeviceManagementConfiguration.ReadWrite.All to your app registration
  • Ensure you have re-consented to your linked tenants with your new Custom registration
  • If there is a failure of the deployment, there is likely a permissions issue with the app registration

Can Immy help migrate my customers to AzureAD from On-Premises environments?

Yes, we have a Task that can migrate machines to associate the user’s profile to their Azure AD identity and join the machine to Azure AD. It can also do the same to and from Active Directory

Domain Join didn’t work, what gives?

Make sure there is a Domain Controller in Immy for the machine. If you are using a supported RMM like CW Automate/Control setup the integration so the Domain Controller is imported automatically. Otherwise, you’ll need to install the ImmyAgent on a domain controller for that customer.

If the Domain Controller doesn’t have the red “Domain Controller” designation, press “Run Inventory”. This may happen if it was recently added to ImmyBot.

Pay attention to the script output, Immy may be reporting that there is a name collision, or that it was unable to run scripts on the domain controller, usually due to security software.

Why are my computers stuck in Identification

  1. The machine has a security tool like Defender for Endpoint, Crowdstrike, Bitdefender or Threatlocker blocking our scripts from running
  • You'll want to create exclusions for ImmyBot
  1. WMI is broken on the machine (Usually on older machines)

Can you target devices in Azure Groups?

Yes, but ImmyBot requires an additional permission on the ImmyBot app registration. You need to grant the Microsoft Graph - Devices.Read.All permission in order for devices to be pulled from Azure Groups.

How do I uninstall the ImmyAgent?

Create a deployment for the "ImmyBot Agent" and set software should be to "Uninstalled"

image

Or

Run the following from Command Line

wmic product where name="ImmyBot Agent" call uninstall /nointeractive

Or

$product = Get-WmiObject win32_product | `
+    
Skip to content

ImmyBot will no longer support Windows 7, Sever 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

.NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

Please see the FAQ section for more details

Frequently Asked Questions

What is the difference between the Starter and Standard plan?

Both plans allow you to import all of your existing agents into ImmyBot if you use one of our support integrations.

Both plans allow installing and updating of the ImmyBot agent on all of your existing computers.

Both plans allow running maintenance on all of your computers given that the computer was imported into ImmyBot in the last 7 days.

Starter

Starter does not charge maintenance per computer since it does not support ongoing maintenance for your computers.

Once a computer has been in ImmyBot for at least 7 days, maintenance can no longer be executed against it. This includes all onboarding, full maintenance, and adhoc sessions. If you need to manage ongoing maintenance against a computer older than 7 days, then you will need to upgrade to Standard.

Standard

Standard charges per maintained computer since it supports ongoing maintenance.

What is a maintained computer?

Since we allow you to import all of your agents into ImmyBot, we don't simply charge per agent.

Instead, we only consider computers that have received ongoing maintenance.

A computer has received ongoing maintenance if an onboarding, full maintenance, or adhoc session has been run against it after the computer has been in ImmyBot for over 7 days.

Maintenance per computer

When maintenance is performed against a computer older than 7 days, ImmyBot will check the following:

  1. Is this computer already counted towards your maintained count?

    • If it is, then maintenance can be performed on this computer.
  2. Are we at the maximum number of maintained computers for this subscription?

    • If it is not, then this computer will be added to your active maintained computer count, and maintenance can be performed on this computer.

When a subscription is at the maximum maintained count, only maintenance for computers considered in the count will be allowed. In order to run maintenance on other computers, you can purchase more computer licenses for your subscription.

Do I need a separate USB/Installer per tenant?

No. Create a USB pointing to your own tenant (or create an “Onboarding” tenant) and don’t select the Auto-Onboard option.

You will change the tenant of the computer on the Onboarding area of the computer after it comes into New Computers

ImmyBot does not deploy anything automatically. You can feel safe saving your Deployments. Think of them like documenting how things SHOULD be. If you want Immy to automatically enforce deployments, you would need the Immy Deploy plan which allows you to create schedules.

Think of it like if Group Policy only updated if you manually ran gpupdate /force or otherwise specified a schedule for the gpupdates to happen. We understand that updating and installing software on existing computers can be intrusive to the user which is why we schedule these actions out and give the user the ability to postpone via interactive emails.

IMPORTANT: If you setup integration with your RMM, when you map an RMM client to an ImmyBot tenant, ImmyBot will begin running inventory scripts on those machines every 24 hours. These scripts are read-only, but if you have aggressive monitoring software it may cause false alarms.

What if I don’t know which user will be using the computer?

Do your best to find out, or assign machines to specific users ahead of time. Without this, user level customizations are impossible. However, you may find yourself in a shared-computer scenario where every computer gets the same 365 applications. Simply create a deployment for those 365 applications for all computers under that tenant.

Can Immy join AzureAD?

Yes. Create a deployment for the Join AzureAD task. We use the bulk enrollment technique and generate a provisioning package to join the machine to AzureAD. At the time of writing, this requires you to create a user in each customer’s tenant. We plan to remove this requirement in the future.

My AzureAD Join action is failing, what are some common fixes?

Check if MFA Requirement for Joining is enabled via Conditional Access or Azure Device Settings. MFA requirement for all users in Conditional Access will also block the execution, as the package_XXX user will encounter a MFA prompt. Most other situations are noted during execution failure.

What Windows versions does ImmyAgent support?

The ImmyAgent is written in .NET, and as such supports the same Windows versions the .NET runtime supports. Currently, the ImmyAgent runs on .NET 7 and therefore supports Win7+ devices. However, support for .NET 7 is ending May 14th, 2024. After May 14th, Immybot will be transitioning the Agent to the .NET 8 runtime. Win7 is not officially supported in .NET 8, and as such will no longer be supported in ImmyBot. Older systems may continue to work inside of ImmyBot with necessary updates applied, however, we will not be offering any support for unsupported machines.

DANGER

We do not endorse Legacy Update or similar tools. The best thing to do is upgrade the system. Use at your own risk.

Can Immy make deploying via Intune more simple?

Absolutely! There is a global Task labeled "Deploy ImmyAgent to Intune" that can do an excellent job of it.

  • Ensure you are using the Custom Graph Permissions
  • Ensure you have added the Graph Application permission DeviceManagementConfiguration.ReadWrite.All to your app registration
  • Ensure you have re-consented to your linked tenants with your new Custom registration
  • If there is a failure of the deployment, there is likely a permissions issue with the app registration

Can Immy help migrate my customers to AzureAD from On-Premises environments?

Yes, we have a Task that can migrate machines to associate the user’s profile to their Azure AD identity and join the machine to Azure AD. It can also do the same to and from Active Directory

Domain Join didn’t work, what gives?

Make sure there is a Domain Controller in Immy for the machine. If you are using a supported RMM like CW Automate/Control setup the integration so the Domain Controller is imported automatically. Otherwise, you’ll need to install the ImmyAgent on a domain controller for that customer.

If the Domain Controller doesn’t have the red “Domain Controller” designation, press “Run Inventory”. This may happen if it was recently added to ImmyBot.

Pay attention to the script output, Immy may be reporting that there is a name collision, or that it was unable to run scripts on the domain controller, usually due to security software.

Why are my computers stuck in Identification

  1. The machine has a security tool like Defender for Endpoint, Crowdstrike, Bitdefender or Threatlocker blocking our scripts from running
  • You'll want to create exclusions for ImmyBot
  1. WMI is broken on the machine (Usually on older machines)

Can you target devices in Azure Groups?

Yes, but ImmyBot requires an additional permission on the ImmyBot app registration. You need to grant the Microsoft Graph - Devices.Read.All permission in order for devices to be pulled from Azure Groups.

How do I uninstall the ImmyAgent?

Create a deployment for the "ImmyBot Agent" and set software should be to "Uninstalled"

image

Or

Run the following from Command Line

wmic product where name="ImmyBot Agent" call uninstall /nointeractive

Or

$product = Get-WmiObject win32_product | `
 
 where{$_.name -eq "ImmyBot Agent"}
 
 $product.IdentifyingNumber
 
 msiexec /x $product.IdentifyingNumber /quiet /noreboot

How/are we able to define which version of Windows is installed during the initial setup?

ImmyBot doesn't install Windows on bare metal. The workflow is you unbox the system from Dell, HP, Lenovo, Microsoft, or your manufacturer of choice and insert the USB with the ImmyBot.ppkg file at the root while the machine is at the out of box screen.

We don't image the machine, we script the factory image into compliance.

We can, however, install Feature Updates during Onboarding (as well as after Onboarding)

Since Immy.Bot doesn’t use an ISO, does it require a device to have the ability to have 2 USB devices plugged in? One for a Windows ISO and one for the ImmyBot ppkg?

If you want to wipe the computer you can use the Media Creation Tool to create a Windows Setup flash drive and then put our .ppkg file on it. After installing Windows, it will automatically apply the .ppkg

Does Immy rely on the Windows preboot for drivers during initial deployment, or does the ImmyBot agent installer have drivers?

Since we are working with the manufacturer's image, all drivers are typically installed. We will automatically install Dell, HP, and Lenovo driver and BIOS updates via those manufacturer's tools (Dell Command, HP Image Assistant, Lenovo System Update)

Does Immy’s setup process support a USB NIC for WiFi? If so, how do we present those drivers to Immy, or do we even need to?

I've found Windows has built in drivers for most USB NICs. If yours doesn't have drivers built into Windows, I'd suggest purchasing one that does.

SentinelOne - How do we define which site Immy.Bot places the agent in during installation of the S1 agent?

Supply ImmyBot with an API Key to SentinelOne, and Immy will look for a Site in your SentinelOne instance that matches the name of the Tenant you are onboarding the computer for.

Are there any repository limits for software deployments? Either to the size of custom software or number of custom installers we can upload?

There are currently no limits. Everything you upload goes into an Azure Storage Account created just for your ImmyBot instance. Don't be the reason we can't have nice things.

For computer rename, are there any other operators we can use when naming devices other then the ones shown? Can we add operators?

You can duplicate the Task into your instance an manipulate it however you like. If it's something you think other MSPs could use, I'd encourage you to submit a request on the ImmyBot Community and we can add it.

Employee profile caching during on-boarding - is this supported? If so/how?

ImmyBot will create a profile for the Primary Person you selected for this machine on the Onboarding screen (It does this via the "Create Profile for Primary Person" task)

We do this so subsequent tasks that set user level settings like default PDF handler and default browser, have the profile for the primary person and thus that user's HKCU where those settings live.

For purchasing Immy, do you guys prefer Credit card or invoice? Would you rather us pay monthly, or can we pay all upfront?

We prefer monthly credit card or ACH.

Is Immy able to group devices and then do role based deployments to them? I assume this is done by tags?

Yes, you would accomplish this with tags

BitLocker - does this write the key to Azure AD by chance?

Yes, but we can't verify that it is written to Azure AD as that would require additional privileges that our App Registration doesn't request.

We also write the Bitlocker Recovery Key to Active Directory for Domain Joined machines. This doesn't require any Group Policy setup, or line of site to the domain controller. This works as long as the machine is joined to a domain and there is a domain controller for that domain in ImmyBot.

Is Immy able to reset Windows / Wipe and Reload a computer?

Yes, the current process will be simplified but here's how to do it:

  1. Click Download ImmyAgent on the left to create a PPKG with the Windows Reset option selected

image

image

  1. Create a Deployment for "Apply Provisioning Package (PPKG)" to deploy the PPKG to the specified machine

image

ImmyBot Agent logs show an error of "The specified SAS token is expired"

This will occur if the device's system time is incorrect. Ensure that the system time is correct and then restart the ImmyBot Agent Service.

What are trusted manufacturers?

Dell, HP, and Lenovo are considered trusted manufacturers. A trusted manufacturer is expected to provide unique serial numbers for their devices. We rely on trusted manufactuers and device serial numbers during device identification. If the agent reports it comes from a trusted manufacturer and a computer already exists inside ImmyBot with the same manufacturer and serial number, then we will automatically associated the agent with the existing computer.

Can I embed the ImmyAgent into an image?

Create a PPKG and place it in C:\Recovery\Customizations, create the folder if it doesn't exist.

You can also use SetupComplete This method was confirmed working on Server 2022.

Place both the ImmyAgent EXE installer and the SetupComplete.cmd in the C:\Windows\Setup\Scripts directory Content of SetupComplete.cmd can be as simple as: start C:\Windows\Setup\Scripts\ImmyAgentInstallerBundle.exe /qn

A member of the ImmyBot community also likes to use the below method to embedded a PPKG into an image:

DISM.exe /Image:D:\mount /Add-ProvisionedAppxPackage /PackagePath:C:\Users\Moi\Downloads\ImmyBotAgentInstaller.ppkg

Do you take requests for features/software/tasks/scripts?

Yes, please feel welcome to submit a request on the ImmyBot Community

- + \ No newline at end of file diff --git a/README.html b/README.html index 877d5d1c..e2e95da0 100644 --- a/README.html +++ b/README.html @@ -5,46 +5,46 @@ Welcome to ImmyBot Docs Github Repo | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
Skip to content

Welcome to ImmyBot Docs Github Repo

Changes made to the main branch here are pushed to https://docs.immy.bot/ automatically.

Feel free to contribute! We may even make you a contributor

To test locally, start by cloning this repo then opening the folder in VS Code.

VS Code will recommend certain extensions when opening it the first time, we recommend you install these.

Then run the following to install the required dependencies

yarn install

To host locally, run

yarn docs:dev
- +
Skip to content

Welcome to ImmyBot Docs Github Repo

Changes made to the main branch here are pushed to https://docs.immy.bot/ automatically.

Feel free to contribute! We may even make you a contributor

To test locally, start by cloning this repo then opening the folder in VS Code.

VS Code will recommend certain extensions when opening it the first time, we recommend you install these.

Then run the following to install the required dependencies

yarn install

To host locally, run

yarn docs:dev
+ \ No newline at end of file diff --git a/add-users.html b/add-users.html index b0e0a923..4f6e875b 100644 --- a/add-users.html +++ b/add-users.html @@ -5,46 +5,46 @@ Adding Users | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
Skip to content

Adding Users

Have the person attempt to login to ImmyBot. Have them request access:

image

Approve that access from a yellow indicator at the top of the screen.

image

- +
Skip to content

Adding Users

Have the person attempt to login to ImmyBot. Have them request access:

image

Approve that access from a yellow indicator at the top of the screen.

image

+ \ No newline at end of file diff --git a/assets/FAQ.md.CC1cvv3i.js b/assets/FAQ.md.B36G0pkM.js similarity index 99% rename from assets/FAQ.md.CC1cvv3i.js rename to assets/FAQ.md.B36G0pkM.js index f3ae4c7a..8ad0e3b0 100644 --- a/assets/FAQ.md.CC1cvv3i.js +++ b/assets/FAQ.md.B36G0pkM.js @@ -1,4 +1,4 @@ -import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.01Cf-Wcw.js";const y=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),n={name:"FAQ.md"},i=o(`

ImmyBot will no longer support Windows 7, Sever 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

.NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

Please see the FAQ section for more details

Frequently Asked Questions

What is the difference between the Starter and Standard plan?

Both plans allow you to import all of your existing agents into ImmyBot if you use one of our support integrations.

Both plans allow installing and updating of the ImmyBot agent on all of your existing computers.

Both plans allow running maintenance on all of your computers given that the computer was imported into ImmyBot in the last 7 days.

Starter

Starter does not charge maintenance per computer since it does not support ongoing maintenance for your computers.

Once a computer has been in ImmyBot for at least 7 days, maintenance can no longer be executed against it. This includes all onboarding, full maintenance, and adhoc sessions. If you need to manage ongoing maintenance against a computer older than 7 days, then you will need to upgrade to Standard.

Standard

Standard charges per maintained computer since it supports ongoing maintenance.

What is a maintained computer?

Since we allow you to import all of your agents into ImmyBot, we don't simply charge per agent.

Instead, we only consider computers that have received ongoing maintenance.

A computer has received ongoing maintenance if an onboarding, full maintenance, or adhoc session has been run against it after the computer has been in ImmyBot for over 7 days.

Maintenance per computer

When maintenance is performed against a computer older than 7 days, ImmyBot will check the following:

  1. Is this computer already counted towards your maintained count?

    • If it is, then maintenance can be performed on this computer.
  2. Are we at the maximum number of maintained computers for this subscription?

    • If it is not, then this computer will be added to your active maintained computer count, and maintenance can be performed on this computer.

When a subscription is at the maximum maintained count, only maintenance for computers considered in the count will be allowed. In order to run maintenance on other computers, you can purchase more computer licenses for your subscription.

Do I need a separate USB/Installer per tenant?

No. Create a USB pointing to your own tenant (or create an “Onboarding” tenant) and don’t select the Auto-Onboard option.

You will change the tenant of the computer on the Onboarding area of the computer after it comes into New Computers

ImmyBot does not deploy anything automatically. You can feel safe saving your Deployments. Think of them like documenting how things SHOULD be. If you want Immy to automatically enforce deployments, you would need the Immy Deploy plan which allows you to create schedules.

Think of it like if Group Policy only updated if you manually ran gpupdate /force or otherwise specified a schedule for the gpupdates to happen. We understand that updating and installing software on existing computers can be intrusive to the user which is why we schedule these actions out and give the user the ability to postpone via interactive emails.

IMPORTANT: If you setup integration with your RMM, when you map an RMM client to an ImmyBot tenant, ImmyBot will begin running inventory scripts on those machines every 24 hours. These scripts are read-only, but if you have aggressive monitoring software it may cause false alarms.

What if I don’t know which user will be using the computer?

Do your best to find out, or assign machines to specific users ahead of time. Without this, user level customizations are impossible. However, you may find yourself in a shared-computer scenario where every computer gets the same 365 applications. Simply create a deployment for those 365 applications for all computers under that tenant.

Can Immy join AzureAD?

Yes. Create a deployment for the Join AzureAD task. We use the bulk enrollment technique and generate a provisioning package to join the machine to AzureAD. At the time of writing, this requires you to create a user in each customer’s tenant. We plan to remove this requirement in the future.

My AzureAD Join action is failing, what are some common fixes?

Check if MFA Requirement for Joining is enabled via Conditional Access or Azure Device Settings. MFA requirement for all users in Conditional Access will also block the execution, as the package_XXX user will encounter a MFA prompt. Most other situations are noted during execution failure.

What Windows versions does ImmyAgent support?

The ImmyAgent is written in .NET, and as such supports the same Windows versions the .NET runtime supports. Currently, the ImmyAgent runs on .NET 7 and therefore supports Win7+ devices. However, support for .NET 7 is ending May 14th, 2024. After May 14th, Immybot will be transitioning the Agent to the .NET 8 runtime. Win7 is not officially supported in .NET 8, and as such will no longer be supported in ImmyBot. Older systems may continue to work inside of ImmyBot with necessary updates applied, however, we will not be offering any support for unsupported machines.

DANGER

We do not endorse Legacy Update or similar tools. The best thing to do is upgrade the system. Use at your own risk.

Can Immy make deploying via Intune more simple?

Absolutely! There is a global Task labeled "Deploy ImmyAgent to Intune" that can do an excellent job of it.

  • Ensure you are using the Custom Graph Permissions
  • Ensure you have added the Graph Application permission DeviceManagementConfiguration.ReadWrite.All to your app registration
  • Ensure you have re-consented to your linked tenants with your new Custom registration
  • If there is a failure of the deployment, there is likely a permissions issue with the app registration

Can Immy help migrate my customers to AzureAD from On-Premises environments?

Yes, we have a Task that can migrate machines to associate the user’s profile to their Azure AD identity and join the machine to Azure AD. It can also do the same to and from Active Directory

Domain Join didn’t work, what gives?

Make sure there is a Domain Controller in Immy for the machine. If you are using a supported RMM like CW Automate/Control setup the integration so the Domain Controller is imported automatically. Otherwise, you’ll need to install the ImmyAgent on a domain controller for that customer.

If the Domain Controller doesn’t have the red “Domain Controller” designation, press “Run Inventory”. This may happen if it was recently added to ImmyBot.

Pay attention to the script output, Immy may be reporting that there is a name collision, or that it was unable to run scripts on the domain controller, usually due to security software.

Why are my computers stuck in Identification

  1. The machine has a security tool like Defender for Endpoint, Crowdstrike, Bitdefender or Threatlocker blocking our scripts from running
  • You'll want to create exclusions for ImmyBot
  1. WMI is broken on the machine (Usually on older machines)

Can you target devices in Azure Groups?

Yes, but ImmyBot requires an additional permission on the ImmyBot app registration. You need to grant the Microsoft Graph - Devices.Read.All permission in order for devices to be pulled from Azure Groups.

How do I uninstall the ImmyAgent?

Create a deployment for the "ImmyBot Agent" and set software should be to "Uninstalled"

image

Or

Run the following from Command Line

wmic product where name="ImmyBot Agent" call uninstall /nointeractive

Or

$product = Get-WmiObject win32_product | \`
+import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.B49Yz1nR.js";const y=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),n={name:"FAQ.md"},i=o(`

ImmyBot will no longer support Windows 7, Sever 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

.NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

Please see the FAQ section for more details

Frequently Asked Questions

What is the difference between the Starter and Standard plan?

Both plans allow you to import all of your existing agents into ImmyBot if you use one of our support integrations.

Both plans allow installing and updating of the ImmyBot agent on all of your existing computers.

Both plans allow running maintenance on all of your computers given that the computer was imported into ImmyBot in the last 7 days.

Starter

Starter does not charge maintenance per computer since it does not support ongoing maintenance for your computers.

Once a computer has been in ImmyBot for at least 7 days, maintenance can no longer be executed against it. This includes all onboarding, full maintenance, and adhoc sessions. If you need to manage ongoing maintenance against a computer older than 7 days, then you will need to upgrade to Standard.

Standard

Standard charges per maintained computer since it supports ongoing maintenance.

What is a maintained computer?

Since we allow you to import all of your agents into ImmyBot, we don't simply charge per agent.

Instead, we only consider computers that have received ongoing maintenance.

A computer has received ongoing maintenance if an onboarding, full maintenance, or adhoc session has been run against it after the computer has been in ImmyBot for over 7 days.

Maintenance per computer

When maintenance is performed against a computer older than 7 days, ImmyBot will check the following:

  1. Is this computer already counted towards your maintained count?

    • If it is, then maintenance can be performed on this computer.
  2. Are we at the maximum number of maintained computers for this subscription?

    • If it is not, then this computer will be added to your active maintained computer count, and maintenance can be performed on this computer.

When a subscription is at the maximum maintained count, only maintenance for computers considered in the count will be allowed. In order to run maintenance on other computers, you can purchase more computer licenses for your subscription.

Do I need a separate USB/Installer per tenant?

No. Create a USB pointing to your own tenant (or create an “Onboarding” tenant) and don’t select the Auto-Onboard option.

You will change the tenant of the computer on the Onboarding area of the computer after it comes into New Computers

ImmyBot does not deploy anything automatically. You can feel safe saving your Deployments. Think of them like documenting how things SHOULD be. If you want Immy to automatically enforce deployments, you would need the Immy Deploy plan which allows you to create schedules.

Think of it like if Group Policy only updated if you manually ran gpupdate /force or otherwise specified a schedule for the gpupdates to happen. We understand that updating and installing software on existing computers can be intrusive to the user which is why we schedule these actions out and give the user the ability to postpone via interactive emails.

IMPORTANT: If you setup integration with your RMM, when you map an RMM client to an ImmyBot tenant, ImmyBot will begin running inventory scripts on those machines every 24 hours. These scripts are read-only, but if you have aggressive monitoring software it may cause false alarms.

What if I don’t know which user will be using the computer?

Do your best to find out, or assign machines to specific users ahead of time. Without this, user level customizations are impossible. However, you may find yourself in a shared-computer scenario where every computer gets the same 365 applications. Simply create a deployment for those 365 applications for all computers under that tenant.

Can Immy join AzureAD?

Yes. Create a deployment for the Join AzureAD task. We use the bulk enrollment technique and generate a provisioning package to join the machine to AzureAD. At the time of writing, this requires you to create a user in each customer’s tenant. We plan to remove this requirement in the future.

My AzureAD Join action is failing, what are some common fixes?

Check if MFA Requirement for Joining is enabled via Conditional Access or Azure Device Settings. MFA requirement for all users in Conditional Access will also block the execution, as the package_XXX user will encounter a MFA prompt. Most other situations are noted during execution failure.

What Windows versions does ImmyAgent support?

The ImmyAgent is written in .NET, and as such supports the same Windows versions the .NET runtime supports. Currently, the ImmyAgent runs on .NET 7 and therefore supports Win7+ devices. However, support for .NET 7 is ending May 14th, 2024. After May 14th, Immybot will be transitioning the Agent to the .NET 8 runtime. Win7 is not officially supported in .NET 8, and as such will no longer be supported in ImmyBot. Older systems may continue to work inside of ImmyBot with necessary updates applied, however, we will not be offering any support for unsupported machines.

DANGER

We do not endorse Legacy Update or similar tools. The best thing to do is upgrade the system. Use at your own risk.

Can Immy make deploying via Intune more simple?

Absolutely! There is a global Task labeled "Deploy ImmyAgent to Intune" that can do an excellent job of it.

  • Ensure you are using the Custom Graph Permissions
  • Ensure you have added the Graph Application permission DeviceManagementConfiguration.ReadWrite.All to your app registration
  • Ensure you have re-consented to your linked tenants with your new Custom registration
  • If there is a failure of the deployment, there is likely a permissions issue with the app registration

Can Immy help migrate my customers to AzureAD from On-Premises environments?

Yes, we have a Task that can migrate machines to associate the user’s profile to their Azure AD identity and join the machine to Azure AD. It can also do the same to and from Active Directory

Domain Join didn’t work, what gives?

Make sure there is a Domain Controller in Immy for the machine. If you are using a supported RMM like CW Automate/Control setup the integration so the Domain Controller is imported automatically. Otherwise, you’ll need to install the ImmyAgent on a domain controller for that customer.

If the Domain Controller doesn’t have the red “Domain Controller” designation, press “Run Inventory”. This may happen if it was recently added to ImmyBot.

Pay attention to the script output, Immy may be reporting that there is a name collision, or that it was unable to run scripts on the domain controller, usually due to security software.

Why are my computers stuck in Identification

  1. The machine has a security tool like Defender for Endpoint, Crowdstrike, Bitdefender or Threatlocker blocking our scripts from running
  • You'll want to create exclusions for ImmyBot
  1. WMI is broken on the machine (Usually on older machines)

Can you target devices in Azure Groups?

Yes, but ImmyBot requires an additional permission on the ImmyBot app registration. You need to grant the Microsoft Graph - Devices.Read.All permission in order for devices to be pulled from Azure Groups.

How do I uninstall the ImmyAgent?

Create a deployment for the "ImmyBot Agent" and set software should be to "Uninstalled"

image

Or

Run the following from Command Line

wmic product where name="ImmyBot Agent" call uninstall /nointeractive

Or

$product = Get-WmiObject win32_product | \`
 
 where{$_.name -eq "ImmyBot Agent"}
 
diff --git a/assets/FAQ.md.CC1cvv3i.lean.js b/assets/FAQ.md.B36G0pkM.lean.js
similarity index 66%
rename from assets/FAQ.md.CC1cvv3i.lean.js
rename to assets/FAQ.md.B36G0pkM.lean.js
index 9c3c774f..0fdd345c 100644
--- a/assets/FAQ.md.CC1cvv3i.lean.js
+++ b/assets/FAQ.md.B36G0pkM.lean.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.01Cf-Wcw.js";const y=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),n={name:"FAQ.md"},i=o("",104),r=[i];function s(l,h,d,m,u,c){return a(),t("div",null,r)}const f=e(n,[["render",s]]);export{y as __pageData,f as default};
+import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.B49Yz1nR.js";const y=JSON.parse('{"title":"Frequently Asked Questions","description":"","frontmatter":{},"headers":[],"relativePath":"FAQ.md","filePath":"FAQ.md"}'),n={name:"FAQ.md"},i=o("",104),r=[i];function s(l,h,d,m,u,c){return a(),t("div",null,r)}const f=e(n,[["render",s]]);export{y as __pageData,f as default};
diff --git a/assets/README.md.CLL6q4qu.js b/assets/README.md.D38tZSjJ.js
similarity index 96%
rename from assets/README.md.CLL6q4qu.js
rename to assets/README.md.D38tZSjJ.js
index 866574e9..2be72298 100644
--- a/assets/README.md.CLL6q4qu.js
+++ b/assets/README.md.D38tZSjJ.js
@@ -1 +1 @@
-import{_ as e,c as t,o,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const b=JSON.parse('{"title":"Welcome to ImmyBot Docs Github Repo","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md"}'),s={name:"README.md"},n=a('

Welcome to ImmyBot Docs Github Repo

Changes made to the main branch here are pushed to https://docs.immy.bot/ automatically.

Feel free to contribute! We may even make you a contributor

To test locally, start by cloning this repo then opening the folder in VS Code.

VS Code will recommend certain extensions when opening it the first time, we recommend you install these.

Then run the following to install the required dependencies

yarn install

To host locally, run

yarn docs:dev
',9),i=[n];function r(c,l,p,d,h,m){return o(),t("div",null,i)}const _=e(s,[["render",r]]);export{b as __pageData,_ as default}; +import{_ as e,c as t,o,a6 as a}from"./chunks/framework.B49Yz1nR.js";const b=JSON.parse('{"title":"Welcome to ImmyBot Docs Github Repo","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md"}'),s={name:"README.md"},n=a('

Welcome to ImmyBot Docs Github Repo

Changes made to the main branch here are pushed to https://docs.immy.bot/ automatically.

Feel free to contribute! We may even make you a contributor

To test locally, start by cloning this repo then opening the folder in VS Code.

VS Code will recommend certain extensions when opening it the first time, we recommend you install these.

Then run the following to install the required dependencies

yarn install

To host locally, run

yarn docs:dev
',9),i=[n];function r(c,l,p,d,h,m){return o(),t("div",null,i)}const _=e(s,[["render",r]]);export{b as __pageData,_ as default}; diff --git a/assets/README.md.CLL6q4qu.lean.js b/assets/README.md.D38tZSjJ.lean.js similarity index 83% rename from assets/README.md.CLL6q4qu.lean.js rename to assets/README.md.D38tZSjJ.lean.js index 15bcb34b..9e3b7bbd 100644 --- a/assets/README.md.CLL6q4qu.lean.js +++ b/assets/README.md.D38tZSjJ.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const b=JSON.parse('{"title":"Welcome to ImmyBot Docs Github Repo","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md"}'),s={name:"README.md"},n=a("",9),i=[n];function r(c,l,p,d,h,m){return o(),t("div",null,i)}const _=e(s,[["render",r]]);export{b as __pageData,_ as default}; +import{_ as e,c as t,o,a6 as a}from"./chunks/framework.B49Yz1nR.js";const b=JSON.parse('{"title":"Welcome to ImmyBot Docs Github Repo","description":"","frontmatter":{},"headers":[],"relativePath":"README.md","filePath":"README.md"}'),s={name:"README.md"},n=a("",9),i=[n];function r(c,l,p,d,h,m){return o(),t("div",null,i)}const _=e(s,[["render",r]]);export{b as __pageData,_ as default}; diff --git a/assets/add-users.md.DK9Iwms8.js b/assets/add-users.md.OaI5tNlY.js similarity index 93% rename from assets/add-users.md.DK9Iwms8.js rename to assets/add-users.md.OaI5tNlY.js index 24bf20e6..5df9173b 100644 --- a/assets/add-users.md.DK9Iwms8.js +++ b/assets/add-users.md.OaI5tNlY.js @@ -1 +1 @@ -import{_ as t,c as s,o as a,j as e,a as o}from"./chunks/framework.01Cf-Wcw.js";const x=JSON.parse('{"title":"Adding Users","description":"","frontmatter":{},"headers":[],"relativePath":"add-users.md","filePath":"add-users.md"}'),r={name:"add-users.md"},d=e("h1",{id:"adding-users",tabindex:"-1"},[o("Adding Users "),e("a",{class:"header-anchor",href:"#adding-users","aria-label":'Permalink to "Adding Users"'},"​")],-1),n=e("p",null,"Have the person attempt to login to ImmyBot. Have them request access:",-1),c=e("p",null,[e("img",{src:"https://user-images.githubusercontent.com/1424395/153074628-4a22c81a-177e-4ebb-9845-898ab0f95d88.jpeg",alt:"image"})],-1),i=e("p",null,"Approve that access from a yellow indicator at the top of the screen.",-1),l=e("p",null,[e("img",{src:"https://immybot.blob.core.windows.net/release-media/bb34184f-c7c3-41cf-9fa3-f6489e6c3600",alt:"image"})],-1),m=[d,n,c,i,l];function p(_,h,u,f,g,b){return a(),s("div",null,m)}const A=t(r,[["render",p]]);export{x as __pageData,A as default}; +import{_ as t,c as s,o as a,j as e,a as o}from"./chunks/framework.B49Yz1nR.js";const x=JSON.parse('{"title":"Adding Users","description":"","frontmatter":{},"headers":[],"relativePath":"add-users.md","filePath":"add-users.md"}'),r={name:"add-users.md"},d=e("h1",{id:"adding-users",tabindex:"-1"},[o("Adding Users "),e("a",{class:"header-anchor",href:"#adding-users","aria-label":'Permalink to "Adding Users"'},"​")],-1),n=e("p",null,"Have the person attempt to login to ImmyBot. Have them request access:",-1),c=e("p",null,[e("img",{src:"https://user-images.githubusercontent.com/1424395/153074628-4a22c81a-177e-4ebb-9845-898ab0f95d88.jpeg",alt:"image"})],-1),i=e("p",null,"Approve that access from a yellow indicator at the top of the screen.",-1),l=e("p",null,[e("img",{src:"https://immybot.blob.core.windows.net/release-media/bb34184f-c7c3-41cf-9fa3-f6489e6c3600",alt:"image"})],-1),m=[d,n,c,i,l];function p(_,h,u,f,g,b){return a(),s("div",null,m)}const A=t(r,[["render",p]]);export{x as __pageData,A as default}; diff --git a/assets/add-users.md.DK9Iwms8.lean.js b/assets/add-users.md.OaI5tNlY.lean.js similarity index 93% rename from assets/add-users.md.DK9Iwms8.lean.js rename to assets/add-users.md.OaI5tNlY.lean.js index 24bf20e6..5df9173b 100644 --- a/assets/add-users.md.DK9Iwms8.lean.js +++ b/assets/add-users.md.OaI5tNlY.lean.js @@ -1 +1 @@ -import{_ as t,c as s,o as a,j as e,a as o}from"./chunks/framework.01Cf-Wcw.js";const x=JSON.parse('{"title":"Adding Users","description":"","frontmatter":{},"headers":[],"relativePath":"add-users.md","filePath":"add-users.md"}'),r={name:"add-users.md"},d=e("h1",{id:"adding-users",tabindex:"-1"},[o("Adding Users "),e("a",{class:"header-anchor",href:"#adding-users","aria-label":'Permalink to "Adding Users"'},"​")],-1),n=e("p",null,"Have the person attempt to login to ImmyBot. Have them request access:",-1),c=e("p",null,[e("img",{src:"https://user-images.githubusercontent.com/1424395/153074628-4a22c81a-177e-4ebb-9845-898ab0f95d88.jpeg",alt:"image"})],-1),i=e("p",null,"Approve that access from a yellow indicator at the top of the screen.",-1),l=e("p",null,[e("img",{src:"https://immybot.blob.core.windows.net/release-media/bb34184f-c7c3-41cf-9fa3-f6489e6c3600",alt:"image"})],-1),m=[d,n,c,i,l];function p(_,h,u,f,g,b){return a(),s("div",null,m)}const A=t(r,[["render",p]]);export{x as __pageData,A as default}; +import{_ as t,c as s,o as a,j as e,a as o}from"./chunks/framework.B49Yz1nR.js";const x=JSON.parse('{"title":"Adding Users","description":"","frontmatter":{},"headers":[],"relativePath":"add-users.md","filePath":"add-users.md"}'),r={name:"add-users.md"},d=e("h1",{id:"adding-users",tabindex:"-1"},[o("Adding Users "),e("a",{class:"header-anchor",href:"#adding-users","aria-label":'Permalink to "Adding Users"'},"​")],-1),n=e("p",null,"Have the person attempt to login to ImmyBot. Have them request access:",-1),c=e("p",null,[e("img",{src:"https://user-images.githubusercontent.com/1424395/153074628-4a22c81a-177e-4ebb-9845-898ab0f95d88.jpeg",alt:"image"})],-1),i=e("p",null,"Approve that access from a yellow indicator at the top of the screen.",-1),l=e("p",null,[e("img",{src:"https://immybot.blob.core.windows.net/release-media/bb34184f-c7c3-41cf-9fa3-f6489e6c3600",alt:"image"})],-1),m=[d,n,c,i,l];function p(_,h,u,f,g,b){return a(),s("div",null,m)}const A=t(r,[["render",p]]);export{x as __pageData,A as default}; diff --git a/assets/app.CbQoAe_D.js b/assets/app.CbQoAe_D.js deleted file mode 100644 index b3549b3a..00000000 --- a/assets/app.CbQoAe_D.js +++ /dev/null @@ -1,91 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/c4Diagram-ae766693.Cw5qy7Cl.js","assets/chunks/svgDrawCommon-5e1cfd1d.Cpp7qDwc.js","assets/chunks/framework.01Cf-Wcw.js","assets/chunks/theme.BwHuVLnS.js","assets/chunks/flowDiagram-b222e15a.Cpr-kPYG.js","assets/chunks/flowDb-c1833063.BVO1h-fk.js","assets/chunks/graph.CwfrPCLx.js","assets/chunks/layout.Ds1muZd1.js","assets/chunks/styles-483fbfea.CCXKtTy9.js","assets/chunks/index-01f381cb.Dh9et-Tw.js","assets/chunks/clone.BumBiDEu.js","assets/chunks/edges-066a5561.CpbBxaaE.js","assets/chunks/createText-ca0c5216.5u9lbHcb.js","assets/chunks/line.Rvm4JnwS.js","assets/chunks/array.BKyUJesY.js","assets/chunks/path.CbwjOpE9.js","assets/chunks/channel.Byw1PSvd.js","assets/chunks/flowDiagram-v2-13329dc7.CSjni5i6.js","assets/chunks/erDiagram-09d1c15f.vOHorcgg.js","assets/chunks/gitGraphDiagram-942e62fe.m2p8tYff.js","assets/chunks/ganttDiagram-b62c793e.DstTdRzq.js","assets/chunks/linear.CuaGw0Y_.js","assets/chunks/init.Gi6I4Gst.js","assets/chunks/infoDiagram-94cd232f.Dpqcs4_0.js","assets/chunks/pieDiagram-bb1d19e5.CcIweH9R.js","assets/chunks/arc.EE6MX9ab.js","assets/chunks/ordinal.BYWQX77i.js","assets/chunks/quadrantDiagram-c759a472.DrZVK_s3.js","assets/chunks/xychartDiagram-f11f50a6.Bqkbyp4J.js","assets/chunks/requirementDiagram-87253d64.DTGKGrWZ.js","assets/chunks/sequenceDiagram-6894f283.xh2cdXdg.js","assets/chunks/classDiagram-fb54d2a0.RDXiZthm.js","assets/chunks/styles-b83b31c9.DpjWbUrA.js","assets/chunks/classDiagram-v2-a2b738ad.DbdhFrZX.js","assets/chunks/stateDiagram-5dee940d.BBcnAHJj.js","assets/chunks/styles-0784dbeb.Dyb4k6WS.js","assets/chunks/stateDiagram-v2-1992cada.BStA_oNN.js","assets/chunks/journeyDiagram-6625b456.g47i3df6.js","assets/chunks/flowchart-elk-definition-ae0efee6.CLgAh--I.js","assets/chunks/timeline-definition-bf702344.D5PATXbR.js","assets/chunks/mindmap-definition-307c710a.B42RSYq2.js","assets/chunks/sankeyDiagram-707fac0f.BUCcUXDc.js","assets/chunks/Tableau10.B-NsZVaP.js","assets/chunks/blockDiagram-9f4a6865.BhiXeOzW.js"])))=>i.map(i=>d[i]); -import{Y as G,s as xo,u as $a,a8 as dh,y as Da,z as ph,o as gh,c as mh,n as _h,U as Qr,a9 as yh,aa as Ch,ab as xh,ac as bh,ad as Th,ae as vh,af as kh,ag as Sh,ah as wh,ai as Bh,d as Ah,x as Lh,aj as Fh,ak as Eh,al as Oh,a5 as Mh}from"./chunks/framework.01Cf-Wcw.js";import{R as Ih}from"./chunks/theme.BwHuVLnS.js";function $h(t){for(var e=[],i=1;i=S?M:""+Array(S+1-w.length).join(C)+M},H={s:z,z:function(M){var S=-M.utcOffset(),C=Math.abs(S),w=Math.floor(C/60),b=C%60;return(S<=0?"+":"-")+z(w,2,"0")+":"+z(b,2,"0")},m:function M(S,C){if(S.date()1)return M(T[0])}else{var j=S.name;K[j]=S,b=j}return!w&&b&&(Y=b),b||!w&&Y},Z=function(M,S){if(W(M))return M.clone();var C=typeof S=="object"?S:{};return C.date=M,C.args=arguments,new Lt(C)},D=H;D.l=qt,D.i=W,D.w=function(M,S){return Z(M,{locale:S.$L,utc:S.$u,x:S.$x,$offset:S.$offset})};var Lt=function(){function M(C){this.$L=qt(C.locale,null,!0),this.parse(C)}var S=M.prototype;return S.parse=function(C){this.$d=function(w){var b=w.date,I=w.utc;if(b===null)return new Date(NaN);if(D.u(b))return new Date;if(b instanceof Date)return new Date(b);if(typeof b=="string"&&!/Z$/i.test(b)){var T=b.match(B);if(T){var j=T[2]-1||0,N=(T[7]||"0").substring(0,3);return I?new Date(Date.UTC(T[1],j,T[3]||1,T[4]||0,T[5]||0,T[6]||0,N)):new Date(T[1],j,T[3]||1,T[4]||0,T[5]||0,T[6]||0,N)}}return new Date(b)}(C),this.$x=C.x||{},this.init()},S.init=function(){var C=this.$d;this.$y=C.getFullYear(),this.$M=C.getMonth(),this.$D=C.getDate(),this.$W=C.getDay(),this.$H=C.getHours(),this.$m=C.getMinutes(),this.$s=C.getSeconds(),this.$ms=C.getMilliseconds()},S.$utils=function(){return D},S.isValid=function(){return this.$d.toString()!==v},S.isSame=function(C,w){var b=Z(C);return this.startOf(w)<=b&&b<=this.endOf(w)},S.isAfter=function(C,w){return Z(C)-1}function l(u){var f=u.replace(n,"");return f.replace(i,function(c,d){return String.fromCharCode(d)})}function h(u){if(!u)return t.BLANK_URL;var f=l(u).replace(r,"").replace(n,"").trim();if(!f)return t.BLANK_URL;if(s(f))return f;var c=f.match(o);if(!c)return f;var d=c[0];return e.test(d)?t.BLANK_URL:f}t.sanitizeUrl=h})(Ra);var qh={value:()=>{}};function Pa(){for(var t=0,e=arguments.length,i={},r;t=0&&(r=i.slice(n+1),i=i.slice(0,n)),i&&!e.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:r}})}Mi.prototype=Pa.prototype={constructor:Mi,on:function(t,e){var i=this._,r=zh(t+"",i),n,o=-1,a=r.length;if(arguments.length<2){for(;++o0)for(var i=new Array(n),r=0,n,o;r=0&&(e=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),To.hasOwnProperty(e)?{space:To[e],local:t}:t}function Hh(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===tn&&e.documentElement.namespaceURI===tn?e.createElement(t):e.createElementNS(i,t)}}function jh(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function qa(t){var e=cr(t);return(e.local?jh:Hh)(e)}function Uh(){}function vn(t){return t==null?Uh:function(){return this.querySelector(t)}}function Yh(t){typeof t!="function"&&(t=vn(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n=z&&(z=k+1);!(Y=B[z])&&++z<_;);H._next=Y||null}}return a=new yt(a,r),a._enter=s,a._exit=l,a}function fc(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function dc(){return new yt(this._exit||this._groups.map(ja),this._parents)}function pc(t,e,i){var r=this.enter(),n=this,o=this.exit();return typeof t=="function"?(r=t(r),r&&(r=r.selection())):r=r.append(t+""),e!=null&&(n=e(n),n&&(n=n.selection())),i==null?o.remove():i(o),r&&n?r.merge(n).order():n}function gc(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,a=Math.min(n,o),s=new Array(n),l=0;l=0;)(a=r[n])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function _c(t){t||(t=yc);function e(f,c){return f&&c?t(f.__data__,c.__data__):!f-!c}for(var i=this._groups,r=i.length,n=new Array(r),o=0;oe?1:t>=e?0:NaN}function Cc(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function xc(){return Array.from(this)}function bc(){for(var t=this._groups,e=0,i=t.length;e1?this.each((e==null?Oc:typeof e=="function"?Ic:Mc)(t,e,i??"")):Oe(this.node(),t)}function Oe(t,e){return t.style.getPropertyValue(e)||Ua(t).getComputedStyle(t,null).getPropertyValue(e)}function Dc(t){return function(){delete this[t]}}function Nc(t,e){return function(){this[t]=e}}function Rc(t,e){return function(){var i=e.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function Pc(t,e){return arguments.length>1?this.each((e==null?Dc:typeof e=="function"?Rc:Nc)(t,e)):this.node()[t]}function Ya(t){return t.trim().split(/^|\s+/)}function kn(t){return t.classList||new Va(t)}function Va(t){this._node=t,this._names=Ya(t.getAttribute("class")||"")}Va.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Ga(t,e){for(var i=kn(t),r=-1,n=e.length;++r=0&&(i=e.slice(r+1),e=e.slice(0,r)),{type:e,name:i}})}function du(t){return function(){var e=this.__on;if(e){for(var i=0,r=-1,n=e.length,o;i>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):i===8?wi(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):i===4?wi(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Tu.exec(t))?new dt(e[1],e[2],e[3],1):(e=vu.exec(t))?new dt(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=ku.exec(t))?wi(e[1],e[2],e[3],e[4]):(e=Su.exec(t))?wi(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=wu.exec(t))?Lo(e[1],e[2]/100,e[3]/100,1):(e=Bu.exec(t))?Lo(e[1],e[2]/100,e[3]/100,e[4]):vo.hasOwnProperty(t)?wo(vo[t]):t==="transparent"?new dt(NaN,NaN,NaN,0):null}function wo(t){return new dt(t>>16&255,t>>8&255,t&255,1)}function wi(t,e,i,r){return r<=0&&(t=e=i=NaN),new dt(t,e,i,r)}function Fu(t){return t instanceof gi||(t=ai(t)),t?(t=t.rgb(),new dt(t.r,t.g,t.b,t.opacity)):new dt}function en(t,e,i,r){return arguments.length===1?Fu(t):new dt(t,e,i,r??1)}function dt(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}Sn(dt,en,Ja(gi,{brighter(t){return t=t==null?Hi:Math.pow(Hi,t),new dt(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?ni:Math.pow(ni,t),new dt(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new dt(ue(this.r),ue(this.g),ue(this.b),ji(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:Bo,formatHex:Bo,formatHex8:Eu,formatRgb:Ao,toString:Ao}));function Bo(){return`#${he(this.r)}${he(this.g)}${he(this.b)}`}function Eu(){return`#${he(this.r)}${he(this.g)}${he(this.b)}${he((isNaN(this.opacity)?1:this.opacity)*255)}`}function Ao(){const t=ji(this.opacity);return`${t===1?"rgb(":"rgba("}${ue(this.r)}, ${ue(this.g)}, ${ue(this.b)}${t===1?")":`, ${t})`}`}function ji(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ue(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function he(t){return t=ue(t),(t<16?"0":"")+t.toString(16)}function Lo(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new St(t,e,i,r)}function Qa(t){if(t instanceof St)return new St(t.h,t.s,t.l,t.opacity);if(t instanceof gi||(t=ai(t)),!t)return new St;if(t instanceof St)return t;t=t.rgb();var e=t.r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(e===o?a=(i-r)/s+(i0&&l<1?0:a,new St(a,s,l,t.opacity)}function Ou(t,e,i,r){return arguments.length===1?Qa(t):new St(t,e,i,r??1)}function St(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}Sn(St,Ou,Ja(gi,{brighter(t){return t=t==null?Hi:Math.pow(Hi,t),new St(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?ni:Math.pow(ni,t),new St(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new dt(Nr(t>=240?t-240:t+120,n,r),Nr(t,n,r),Nr(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new St(Fo(this.h),Bi(this.s),Bi(this.l),ji(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 t=ji(this.opacity);return`${t===1?"hsl(":"hsla("}${Fo(this.h)}, ${Bi(this.s)*100}%, ${Bi(this.l)*100}%${t===1?")":`, ${t})`}`}}));function Fo(t){return t=(t||0)%360,t<0?t+360:t}function Bi(t){return Math.max(0,Math.min(1,t||0))}function Nr(t,e,i){return(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)*255}const wn=t=>()=>t;function ts(t,e){return function(i){return t+i*e}}function Mu(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}function Kb(t,e){var i=e-t;return i?ts(t,i>180||i<-180?i-360*Math.round(i/360):i):wn(isNaN(t)?e:t)}function Iu(t){return(t=+t)==1?es:function(e,i){return i-e?Mu(e,i,t):wn(isNaN(e)?i:e)}}function es(t,e){var i=e-t;return i?ts(t,i):wn(isNaN(t)?e:t)}const Eo=function t(e){var i=Iu(e);function r(n,o){var a=i((n=en(n)).r,(o=en(o)).r),s=i(n.g,o.g),l=i(n.b,o.b),h=es(n.opacity,o.opacity);return function(u){return n.r=a(u),n.g=s(u),n.b=l(u),n.opacity=h(u),n+""}}return r.gamma=t,r}(1);function ee(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var rn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Rr=new RegExp(rn.source,"g");function $u(t){return function(){return t}}function Du(t){return function(e){return t(e)+""}}function Nu(t,e){var i=rn.lastIndex=Rr.lastIndex=0,r,n,o,a=-1,s=[],l=[];for(t=t+"",e=e+"";(r=rn.exec(t))&&(n=Rr.exec(e));)(o=n.index)>i&&(o=e.slice(i,o),s[a]?s[a]+=o:s[++a]=o),(r=r[0])===(n=n[0])?s[a]?s[a]+=n:s[++a]=n:(s[++a]=null,l.push({i:a,x:ee(r,n)})),i=Rr.lastIndex;return i180?u+=360:u-h>180&&(h+=360),c.push({i:f.push(n(f)+"rotate(",null,r)-2,x:ee(h,u)})):u&&f.push(n(f)+"rotate("+u+r)}function s(h,u,f,c){h!==u?c.push({i:f.push(n(f)+"skewX(",null,r)-2,x:ee(h,u)}):u&&f.push(n(f)+"skewX("+u+r)}function l(h,u,f,c,d,_){if(h!==f||u!==c){var v=d.push(n(d)+"scale(",null,",",null,")");_.push({i:v-4,x:ee(h,f)},{i:v-2,x:ee(u,c)})}else(f!==1||c!==1)&&d.push(n(d)+"scale("+f+","+c+")")}return function(h,u){var f=[],c=[];return h=t(h),u=t(u),o(h.translateX,h.translateY,u.translateX,u.translateY,f,c),a(h.rotate,u.rotate,f,c),s(h.skewX,u.skewX,f,c),l(h.scaleX,h.scaleY,u.scaleX,u.scaleY,f,c),h=u=null,function(d){for(var _=-1,v=c.length,B;++_=0&&t._call.call(void 0,e),t=t._next;--Me}function Mo(){pe=(Yi=si.now())+ur,Me=Ge=0;try{Hu()}finally{Me=0,Uu(),pe=0}}function ju(){var t=si.now(),e=t-Yi;e>ns&&(ur-=e,Yi=t)}function Uu(){for(var t,e=Ui,i,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(i=e._next,e._next=null,e=t?t._next=i:Ui=i);Xe=t,on(r)}function on(t){if(!Me){Ge&&(Ge=clearTimeout(Ge));var e=t-pe;e>24?(t<1/0&&(Ge=setTimeout(Mo,t-si.now()-ur)),je&&(je=clearInterval(je))):(je||(Yi=si.now(),je=setInterval(ju,ns)),Me=1,os(Mo))}}function Io(t,e,i){var r=new Vi;return e=e==null?0:+e,r.restart(n=>{r.stop(),t(n+e)},e,i),r}var Yu=Pa("start","end","cancel","interrupt"),Vu=[],ss=0,$o=1,an=2,Ii=3,Do=4,sn=5,$i=6;function fr(t,e,i,r,n,o){var a=t.__transition;if(!a)t.__transition={};else if(i in a)return;Gu(t,i,{name:e,index:r,group:n,on:Yu,tween:Vu,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:ss})}function An(t,e){var i=At(t,e);if(i.state>ss)throw new Error("too late; already scheduled");return i}function Rt(t,e){var i=At(t,e);if(i.state>Ii)throw new Error("too late; already running");return i}function At(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function Gu(t,e,i){var r=t.__transition,n;r[e]=i,i.timer=as(o,0,i.time);function o(h){i.state=$o,i.timer.restart(a,i.delay,i.time),i.delay<=h&&a(h-i.delay)}function a(h){var u,f,c,d;if(i.state!==$o)return l();for(u in r)if(d=r[u],d.name===i.name){if(d.state===Ii)return Io(a);d.state===Do?(d.state=$i,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete r[u]):+uan&&r.state=0&&(e=e.slice(0,i)),!e||e==="start"})}function wf(t,e,i){var r,n,o=Sf(e)?An:Rt;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}function Bf(t,e){var i=this._id;return arguments.length<2?At(this.node(),i).on.on(t):this.each(wf(i,t,e))}function Af(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}function Lf(){return this.on("end.remove",Af(this._id))}function Ff(t){var e=this._name,i=this._id;typeof t!="function"&&(t=vn(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a1?0:t<-1?Fn:Math.acos(t)}function a1(t){return t>=1?Ro:t<=-1?-Ro:Math.asin(t)}function us(t){this._context=t}us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function ed(t){return new us(t)}class fs{constructor(e,i){this._context=e,this._x=i}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,i){switch(e=+e,i=+i,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,i):this._context.moveTo(e,i);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,i,e,i):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+i)/2,e,this._y0,e,i);break}}this._x0=e,this._y0=i}}function id(t){return new fs(t,!0)}function rd(t){return new fs(t,!1)}function re(){}function Gi(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function dr(t){this._context=t}dr.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Gi(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Gi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function nd(t){return new dr(t)}function ds(t){this._context=t}ds.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Gi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function od(t){return new ds(t)}function ps(t){this._context=t}ps.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:Gi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function ad(t){return new ps(t)}function gs(t,e){this._basis=new dr(t),this._beta=e}gs.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r=t[0],n=e[0],o=t[i]-r,a=e[i]-n,s=-1,l;++s<=i;)l=s/i,this._basis.point(this._beta*t[s]+(1-this._beta)*(r+l*o),this._beta*e[s]+(1-this._beta)*(n+l*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const sd=function t(e){function i(r){return e===1?new dr(r):new gs(r,e)}return i.beta=function(r){return t(+r)},i}(.85);function Xi(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function En(t,e){this._context=t,this._k=(1-e)/6}En.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Xi(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Xi(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const ld=function t(e){function i(r){return new En(r,e)}return i.tension=function(r){return t(+r)},i}(0);function On(t,e){this._context=t,this._k=(1-e)/6}On.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Xi(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const hd=function t(e){function i(r){return new On(r,e)}return i.tension=function(r){return t(+r)},i}(0);function Mn(t,e){this._context=t,this._k=(1-e)/6}Mn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Xi(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const cd=function t(e){function i(r){return new Mn(r,e)}return i.tension=function(r){return t(+r)},i}(0);function In(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>No){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>No){var h=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,u=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*h+t._x1*t._l23_2a-e*t._l12_2a)/u,a=(a*h+t._y1*t._l23_2a-i*t._l12_2a)/u}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function ms(t,e){this._context=t,this._alpha=e}ms.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:In(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const ud=function t(e){function i(r){return e?new ms(r,e):new En(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function _s(t,e){this._context=t,this._alpha=e}_s.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:In(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const fd=function t(e){function i(r){return e?new _s(r,e):new On(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function ys(t,e){this._context=t,this._alpha=e}ys.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:In(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const dd=function t(e){function i(r){return e?new ys(r,e):new Mn(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function Cs(t){this._context=t}Cs.prototype={areaStart:re,areaEnd:re,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function pd(t){return new Cs(t)}function Po(t){return t<0?-1:1}function qo(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Po(o)+Po(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function zo(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Pr(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Ki(t){this._context=t}Ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Pr(this,this._t0,zo(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Pr(this,zo(this,i=qo(this,t,e)),i);break;default:Pr(this,this._t0,i=qo(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}};function xs(t){this._context=new bs(t)}(xs.prototype=Object.create(Ki.prototype)).point=function(t,e){Ki.prototype.point.call(this,e,t)};function bs(t){this._context=t}bs.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}};function gd(t){return new Ki(t)}function md(t){return new xs(t)}function Ts(t){this._context=t}Ts.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),i===2)this._context.lineTo(t[1],e[1]);else for(var r=Wo(t),n=Wo(e),o=0,a=1;a=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[i-1]=(t[i]+n[i-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}break}}this._x=t,this._y=e}};function yd(t){return new pr(t,.5)}function Cd(t){return new pr(t,0)}function xd(t){return new pr(t,1)}function Ke(t,e,i){this.k=t,this.x=e,this.y=i}Ke.prototype={constructor:Ke,scale:function(t){return t===1?this:new Ke(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Ke(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};Ke.prototype;/*! @license DOMPurify 3.0.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.5/LICENSE */const{entries:vs,setPrototypeOf:Ho,isFrozen:bd,getPrototypeOf:Td,getOwnPropertyDescriptor:vd}=Object;let{freeze:ut,seal:Bt,create:kd}=Object,{apply:ln,construct:hn}=typeof Reflect<"u"&&Reflect;ln||(ln=function(e,i,r){return e.apply(i,r)});ut||(ut=function(e){return e});Bt||(Bt=function(e){return e});hn||(hn=function(e,i){return new e(...i)});const Sd=Tt(Array.prototype.forEach),jo=Tt(Array.prototype.pop),Ue=Tt(Array.prototype.push),Di=Tt(String.prototype.toLowerCase),qr=Tt(String.prototype.toString),wd=Tt(String.prototype.match),kt=Tt(String.prototype.replace),Bd=Tt(String.prototype.indexOf),Ad=Tt(String.prototype.trim),_t=Tt(RegExp.prototype.test),Ye=Ld(TypeError);function Tt(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n/gm),Id=Bt(/\${[\w\W]*}/gm),$d=Bt(/^data-[\-\w.\u00B7-\uFFFF]/),Dd=Bt(/^aria-[\-\w]+$/),ks=Bt(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Nd=Bt(/^(?:\w+script|data):/i),Rd=Bt(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ss=Bt(/^html$/i);var Xo=Object.freeze({__proto__:null,MUSTACHE_EXPR:Od,ERB_EXPR:Md,TMPLIT_EXPR:Id,DATA_ATTR:$d,ARIA_ATTR:Dd,IS_ALLOWED_URI:ks,IS_SCRIPT_OR_DATA:Nd,ATTR_WHITESPACE:Rd,DOCTYPE_NAME:Ss});const Pd=()=>typeof window>"u"?null:window,qd=function(e,i){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null;const n="data-tt-policy-suffix";i&&i.hasAttribute(n)&&(r=i.getAttribute(n));const o="dompurify"+(r?"#"+r:"");try{return e.createPolicy(o,{createHTML(a){return a},createScriptURL(a){return a}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function ws(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Pd();const e=A=>ws(A);if(e.version="3.0.5",e.removed=[],!t||!t.document||t.document.nodeType!==9)return e.isSupported=!1,e;const i=t.document,r=i.currentScript;let{document:n}=t;const{DocumentFragment:o,HTMLTemplateElement:a,Node:s,Element:l,NodeFilter:h,NamedNodeMap:u=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:f,DOMParser:c,trustedTypes:d}=t,_=l.prototype,v=Li(_,"cloneNode"),B=Li(_,"nextSibling"),P=Li(_,"childNodes"),k=Li(_,"parentNode");if(typeof a=="function"){const A=n.createElement("template");A.content&&A.content.ownerDocument&&(n=A.content.ownerDocument)}let z,H="";const{implementation:Y,createNodeIterator:K,createDocumentFragment:W,getElementsByTagName:qt}=n,{importNode:Z}=i;let D={};e.isSupported=typeof vs=="function"&&typeof k=="function"&&Y&&Y.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:Lt,ERB_EXPR:zt,TMPLIT_EXPR:M,DATA_ATTR:S,ARIA_ATTR:C,IS_SCRIPT_OR_DATA:w,ATTR_WHITESPACE:b}=Xo;let{IS_ALLOWED_URI:I}=Xo,T=null;const j=R({},[...Uo,...zr,...Wr,...Hr,...Yo]);let N=null;const J=R({},[...Vo,...jr,...Go,...Fi]);let q=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),et=null,Ft=null,Et=!0,Wt=!0,Ot=!1,nt=!0,lt=!1,mt=!1,Qt=!1,Ar=!1,xe=!1,xi=!1,bi=!1,ro=!0,no=!1;const nh="user-content-";let Lr=!0,He=!1,be={},Te=null;const oo=R({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let ao=null;const so=R({},["audio","video","img","source","image","track"]);let Fr=null;const lo=R({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ti="http://www.w3.org/1998/Math/MathML",vi="http://www.w3.org/2000/svg",Ht="http://www.w3.org/1999/xhtml";let ve=Ht,Er=!1,Or=null;const oh=R({},[Ti,vi,Ht],qr);let ae;const ah=["application/xhtml+xml","text/html"],sh="text/html";let it,ke=null;const lh=n.createElement("form"),ho=function(p){return p instanceof RegExp||p instanceof Function},Mr=function(p){if(!(ke&&ke===p)){if((!p||typeof p!="object")&&(p={}),p=Se(p),ae=ah.indexOf(p.PARSER_MEDIA_TYPE)===-1?ae=sh:ae=p.PARSER_MEDIA_TYPE,it=ae==="application/xhtml+xml"?qr:Di,T="ALLOWED_TAGS"in p?R({},p.ALLOWED_TAGS,it):j,N="ALLOWED_ATTR"in p?R({},p.ALLOWED_ATTR,it):J,Or="ALLOWED_NAMESPACES"in p?R({},p.ALLOWED_NAMESPACES,qr):oh,Fr="ADD_URI_SAFE_ATTR"in p?R(Se(lo),p.ADD_URI_SAFE_ATTR,it):lo,ao="ADD_DATA_URI_TAGS"in p?R(Se(so),p.ADD_DATA_URI_TAGS,it):so,Te="FORBID_CONTENTS"in p?R({},p.FORBID_CONTENTS,it):oo,et="FORBID_TAGS"in p?R({},p.FORBID_TAGS,it):{},Ft="FORBID_ATTR"in p?R({},p.FORBID_ATTR,it):{},be="USE_PROFILES"in p?p.USE_PROFILES:!1,Et=p.ALLOW_ARIA_ATTR!==!1,Wt=p.ALLOW_DATA_ATTR!==!1,Ot=p.ALLOW_UNKNOWN_PROTOCOLS||!1,nt=p.ALLOW_SELF_CLOSE_IN_ATTR!==!1,lt=p.SAFE_FOR_TEMPLATES||!1,mt=p.WHOLE_DOCUMENT||!1,xe=p.RETURN_DOM||!1,xi=p.RETURN_DOM_FRAGMENT||!1,bi=p.RETURN_TRUSTED_TYPE||!1,Ar=p.FORCE_BODY||!1,ro=p.SANITIZE_DOM!==!1,no=p.SANITIZE_NAMED_PROPS||!1,Lr=p.KEEP_CONTENT!==!1,He=p.IN_PLACE||!1,I=p.ALLOWED_URI_REGEXP||ks,ve=p.NAMESPACE||Ht,q=p.CUSTOM_ELEMENT_HANDLING||{},p.CUSTOM_ELEMENT_HANDLING&&ho(p.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(q.tagNameCheck=p.CUSTOM_ELEMENT_HANDLING.tagNameCheck),p.CUSTOM_ELEMENT_HANDLING&&ho(p.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(q.attributeNameCheck=p.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),p.CUSTOM_ELEMENT_HANDLING&&typeof p.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(q.allowCustomizedBuiltInElements=p.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),lt&&(Wt=!1),xi&&(xe=!0),be&&(T=R({},[...Yo]),N=[],be.html===!0&&(R(T,Uo),R(N,Vo)),be.svg===!0&&(R(T,zr),R(N,jr),R(N,Fi)),be.svgFilters===!0&&(R(T,Wr),R(N,jr),R(N,Fi)),be.mathMl===!0&&(R(T,Hr),R(N,Go),R(N,Fi))),p.ADD_TAGS&&(T===j&&(T=Se(T)),R(T,p.ADD_TAGS,it)),p.ADD_ATTR&&(N===J&&(N=Se(N)),R(N,p.ADD_ATTR,it)),p.ADD_URI_SAFE_ATTR&&R(Fr,p.ADD_URI_SAFE_ATTR,it),p.FORBID_CONTENTS&&(Te===oo&&(Te=Se(Te)),R(Te,p.FORBID_CONTENTS,it)),Lr&&(T["#text"]=!0),mt&&R(T,["html","head","body"]),T.table&&(R(T,["tbody"]),delete et.tbody),p.TRUSTED_TYPES_POLICY){if(typeof p.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ye('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof p.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ye('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');z=p.TRUSTED_TYPES_POLICY,H=z.createHTML("")}else z===void 0&&(z=qd(d,r)),z!==null&&typeof H=="string"&&(H=z.createHTML(""));ut&&ut(p),ke=p}},co=R({},["mi","mo","mn","ms","mtext"]),uo=R({},["foreignobject","desc","title","annotation-xml"]),hh=R({},["title","style","font","a","script"]),ki=R({},zr);R(ki,Wr),R(ki,Fd);const Ir=R({},Hr);R(Ir,Ed);const ch=function(p){let m=k(p);(!m||!m.tagName)&&(m={namespaceURI:ve,tagName:"template"});const x=Di(p.tagName),U=Di(m.tagName);return Or[p.namespaceURI]?p.namespaceURI===vi?m.namespaceURI===Ht?x==="svg":m.namespaceURI===Ti?x==="svg"&&(U==="annotation-xml"||co[U]):!!ki[x]:p.namespaceURI===Ti?m.namespaceURI===Ht?x==="math":m.namespaceURI===vi?x==="math"&&uo[U]:!!Ir[x]:p.namespaceURI===Ht?m.namespaceURI===vi&&!uo[U]||m.namespaceURI===Ti&&!co[U]?!1:!Ir[x]&&(hh[x]||!ki[x]):!!(ae==="application/xhtml+xml"&&Or[p.namespaceURI]):!1},se=function(p){Ue(e.removed,{element:p});try{p.parentNode.removeChild(p)}catch{p.remove()}},$r=function(p,m){try{Ue(e.removed,{attribute:m.getAttributeNode(p),from:m})}catch{Ue(e.removed,{attribute:null,from:m})}if(m.removeAttribute(p),p==="is"&&!N[p])if(xe||xi)try{se(m)}catch{}else try{m.setAttribute(p,"")}catch{}},fo=function(p){let m,x;if(Ar)p=""+p;else{const Ct=wd(p,/^[\r\n\t ]+/);x=Ct&&Ct[0]}ae==="application/xhtml+xml"&&ve===Ht&&(p=''+p+"");const U=z?z.createHTML(p):p;if(ve===Ht)try{m=new c().parseFromString(U,ae)}catch{}if(!m||!m.documentElement){m=Y.createDocument(ve,"template",null);try{m.documentElement.innerHTML=Er?H:U}catch{}}const rt=m.body||m.documentElement;return p&&x&&rt.insertBefore(n.createTextNode(x),rt.childNodes[0]||null),ve===Ht?qt.call(m,mt?"html":"body")[0]:mt?m.documentElement:rt},po=function(p){return K.call(p.ownerDocument||p,p,h.SHOW_ELEMENT|h.SHOW_COMMENT|h.SHOW_TEXT,null,!1)},uh=function(p){return p instanceof f&&(typeof p.nodeName!="string"||typeof p.textContent!="string"||typeof p.removeChild!="function"||!(p.attributes instanceof u)||typeof p.removeAttribute!="function"||typeof p.setAttribute!="function"||typeof p.namespaceURI!="string"||typeof p.insertBefore!="function"||typeof p.hasChildNodes!="function")},Si=function(p){return typeof s=="object"?p instanceof s:p&&typeof p=="object"&&typeof p.nodeType=="number"&&typeof p.nodeName=="string"},jt=function(p,m,x){D[p]&&Sd(D[p],U=>{U.call(e,m,x,ke)})},go=function(p){let m;if(jt("beforeSanitizeElements",p,null),uh(p))return se(p),!0;const x=it(p.nodeName);if(jt("uponSanitizeElement",p,{tagName:x,allowedTags:T}),p.hasChildNodes()&&!Si(p.firstElementChild)&&(!Si(p.content)||!Si(p.content.firstElementChild))&&_t(/<[/\w]/g,p.innerHTML)&&_t(/<[/\w]/g,p.textContent))return se(p),!0;if(!T[x]||et[x]){if(!et[x]&&_o(x)&&(q.tagNameCheck instanceof RegExp&&_t(q.tagNameCheck,x)||q.tagNameCheck instanceof Function&&q.tagNameCheck(x)))return!1;if(Lr&&!Te[x]){const U=k(p)||p.parentNode,rt=P(p)||p.childNodes;if(rt&&U){const Ct=rt.length;for(let X=Ct-1;X>=0;--X)U.insertBefore(v(rt[X],!0),B(p))}}return se(p),!0}return p instanceof l&&!ch(p)||(x==="noscript"||x==="noembed"||x==="noframes")&&_t(/<\/no(script|embed|frames)/i,p.innerHTML)?(se(p),!0):(lt&&p.nodeType===3&&(m=p.textContent,m=kt(m,Lt," "),m=kt(m,zt," "),m=kt(m,M," "),p.textContent!==m&&(Ue(e.removed,{element:p.cloneNode()}),p.textContent=m)),jt("afterSanitizeElements",p,null),!1)},mo=function(p,m,x){if(ro&&(m==="id"||m==="name")&&(x in n||x in lh))return!1;if(!(Wt&&!Ft[m]&&_t(S,m))){if(!(Et&&_t(C,m))){if(!N[m]||Ft[m]){if(!(_o(p)&&(q.tagNameCheck instanceof RegExp&&_t(q.tagNameCheck,p)||q.tagNameCheck instanceof Function&&q.tagNameCheck(p))&&(q.attributeNameCheck instanceof RegExp&&_t(q.attributeNameCheck,m)||q.attributeNameCheck instanceof Function&&q.attributeNameCheck(m))||m==="is"&&q.allowCustomizedBuiltInElements&&(q.tagNameCheck instanceof RegExp&&_t(q.tagNameCheck,x)||q.tagNameCheck instanceof Function&&q.tagNameCheck(x))))return!1}else if(!Fr[m]){if(!_t(I,kt(x,b,""))){if(!((m==="src"||m==="xlink:href"||m==="href")&&p!=="script"&&Bd(x,"data:")===0&&ao[p])){if(!(Ot&&!_t(w,kt(x,b,"")))){if(x)return!1}}}}}}return!0},_o=function(p){return p.indexOf("-")>0},yo=function(p){let m,x,U,rt;jt("beforeSanitizeAttributes",p,null);const{attributes:Ct}=p;if(!Ct)return;const X={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:N};for(rt=Ct.length;rt--;){m=Ct[rt];const{name:Mt,namespaceURI:Dr}=m;if(x=Mt==="value"?m.value:Ad(m.value),U=it(Mt),X.attrName=U,X.attrValue=x,X.keepAttr=!0,X.forceKeepAttr=void 0,jt("uponSanitizeAttribute",p,X),x=X.attrValue,X.forceKeepAttr||($r(Mt,p),!X.keepAttr))continue;if(!nt&&_t(/\/>/i,x)){$r(Mt,p);continue}lt&&(x=kt(x,Lt," "),x=kt(x,zt," "),x=kt(x,M," "));const Co=it(p.nodeName);if(mo(Co,U,x)){if(no&&(U==="id"||U==="name")&&($r(Mt,p),x=nh+x),z&&typeof d=="object"&&typeof d.getAttributeType=="function"&&!Dr)switch(d.getAttributeType(Co,U)){case"TrustedHTML":{x=z.createHTML(x);break}case"TrustedScriptURL":{x=z.createScriptURL(x);break}}try{Dr?p.setAttributeNS(Dr,Mt,x):p.setAttribute(Mt,x),jo(e.removed)}catch{}}}jt("afterSanitizeAttributes",p,null)},fh=function A(p){let m;const x=po(p);for(jt("beforeSanitizeShadowDOM",p,null);m=x.nextNode();)jt("uponSanitizeShadowNode",m,null),!go(m)&&(m.content instanceof o&&A(m.content),yo(m));jt("afterSanitizeShadowDOM",p,null)};return e.sanitize=function(A){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},m,x,U,rt;if(Er=!A,Er&&(A=""),typeof A!="string"&&!Si(A))if(typeof A.toString=="function"){if(A=A.toString(),typeof A!="string")throw Ye("dirty is not a string, aborting")}else throw Ye("toString is not a function");if(!e.isSupported)return A;if(Qt||Mr(p),e.removed=[],typeof A=="string"&&(He=!1),He){if(A.nodeName){const Mt=it(A.nodeName);if(!T[Mt]||et[Mt])throw Ye("root node is forbidden and cannot be sanitized in-place")}}else if(A instanceof s)m=fo(""),x=m.ownerDocument.importNode(A,!0),x.nodeType===1&&x.nodeName==="BODY"||x.nodeName==="HTML"?m=x:m.appendChild(x);else{if(!xe&&!lt&&!mt&&A.indexOf("<")===-1)return z&&bi?z.createHTML(A):A;if(m=fo(A),!m)return xe?null:bi?H:""}m&&Ar&&se(m.firstChild);const Ct=po(He?A:m);for(;U=Ct.nextNode();)go(U)||(U.content instanceof o&&fh(U.content),yo(U));if(He)return A;if(xe){if(xi)for(rt=W.call(m.ownerDocument);m.firstChild;)rt.appendChild(m.firstChild);else rt=m;return(N.shadowroot||N.shadowrootmode)&&(rt=Z.call(i,rt,!0)),rt}let X=mt?m.outerHTML:m.innerHTML;return mt&&T["!doctype"]&&m.ownerDocument&&m.ownerDocument.doctype&&m.ownerDocument.doctype.name&&_t(Ss,m.ownerDocument.doctype.name)&&(X=" -`+X),lt&&(X=kt(X,Lt," "),X=kt(X,zt," "),X=kt(X,M," ")),z&&bi?z.createHTML(X):X},e.setConfig=function(A){Mr(A),Qt=!0},e.clearConfig=function(){ke=null,Qt=!1},e.isValidAttribute=function(A,p,m){ke||Mr({});const x=it(A),U=it(p);return mo(x,U,m)},e.addHook=function(A,p){typeof p=="function"&&(D[A]=D[A]||[],Ue(D[A],p))},e.removeHook=function(A){if(D[A])return jo(D[A])},e.removeHooks=function(A){D[A]&&(D[A]=[])},e.removeAllHooks=function(){D={}},e}var Ie=ws();const Ni={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},r)=>{if(!e)return i*2.55;t/=360,e/=100,i/=100;const n=i<.5?i*(1+e):i+e-i*e,o=2*i-n;switch(r){case"r":return Ni.hue2rgb(o,n,t+1/3)*255;case"g":return Ni.hue2rgb(o,n,t)*255;case"b":return Ni.hue2rgb(o,n,t-1/3)*255}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if(r==="l")return a*100;if(n===o)return 0;const s=n-o,l=a>.5?s/(2-n-o):s/(n+o);if(r==="s")return l*100;switch(n){case t:return((e-i)/s+(ee>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(t*1e10)/1e10},Wd={dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}},$={channel:Ni,lang:zd,unit:Wd},te={};for(let t=0;t<=255;t++)te[t]=$.unit.dec2hex(t);const ot={ALL:0,RGB:1,HSL:2};class Hd{constructor(){this.type=ot.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=ot.ALL}is(e){return this.type===e}}class jd{constructor(e,i){this.color=i,this.changed=!1,this.data=e,this.type=new Hd}set(e,i){return this.color=i,this.changed=!1,this.data=e,this.type.type=ot.ALL,this}_ensureHSL(){const e=this.data,{h:i,s:r,l:n}=e;i===void 0&&(e.h=$.channel.rgb2hsl(e,"h")),r===void 0&&(e.s=$.channel.rgb2hsl(e,"s")),n===void 0&&(e.l=$.channel.rgb2hsl(e,"l"))}_ensureRGB(){const e=this.data,{r:i,g:r,b:n}=e;i===void 0&&(e.r=$.channel.hsl2rgb(e,"r")),r===void 0&&(e.g=$.channel.hsl2rgb(e,"g")),n===void 0&&(e.b=$.channel.hsl2rgb(e,"b"))}get r(){const e=this.data,i=e.r;return!this.type.is(ot.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"r"))}get g(){const e=this.data,i=e.g;return!this.type.is(ot.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"g"))}get b(){const e=this.data,i=e.b;return!this.type.is(ot.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"b"))}get h(){const e=this.data,i=e.h;return!this.type.is(ot.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"h"))}get s(){const e=this.data,i=e.s;return!this.type.is(ot.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"s"))}get l(){const e=this.data,i=e.l;return!this.type.is(ot.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(ot.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(ot.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(ot.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(ot.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(ot.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(ot.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}}const gr=new jd({r:0,g:0,b:0,a:0},"transparent"),Fe={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(t.charCodeAt(0)!==35)return;const e=t.match(Fe.re);if(!e)return;const i=e[1],r=parseInt(i,16),n=i.length,o=n%4===0,a=n>4,s=a?1:17,l=a?8:4,h=o?0:-1,u=a?255:15;return gr.set({r:(r>>l*(h+3)&u)*s,g:(r>>l*(h+2)&u)*s,b:(r>>l*(h+1)&u)*s,a:o?(r&u)*s/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`#${te[Math.round(e)]}${te[Math.round(i)]}${te[Math.round(r)]}${te[Math.round(n*255)]}`:`#${te[Math.round(e)]}${te[Math.round(i)]}${te[Math.round(r)]}`}},ce={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(ce.hueRe);if(e){const[,i,r]=e;switch(r){case"grad":return $.channel.clamp.h(parseFloat(i)*.9);case"rad":return $.channel.clamp.h(parseFloat(i)*180/Math.PI);case"turn":return $.channel.clamp.h(parseFloat(i)*360)}}return $.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(e!==104&&e!==72)return;const i=t.match(ce.re);if(!i)return;const[,r,n,o,a,s]=i;return gr.set({h:ce._hue2deg(r),s:$.channel.clamp.s(parseFloat(n)),l:$.channel.clamp.l(parseFloat(o)),a:a?$.channel.clamp.a(s?parseFloat(a)/100:parseFloat(a)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${$.lang.round(e)}, ${$.lang.round(i)}%, ${$.lang.round(r)}%, ${n})`:`hsl(${$.lang.round(e)}, ${$.lang.round(i)}%, ${$.lang.round(r)}%)`}},Je={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=Je.colors[t];if(e)return Fe.parse(e)},stringify:t=>{const e=Fe.stringify(t);for(const i in Je.colors)if(Je.colors[i]===e)return i}},Ze={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(e!==114&&e!==82)return;const i=t.match(Ze.re);if(!i)return;const[,r,n,o,a,s,l,h,u]=i;return gr.set({r:$.channel.clamp.r(n?parseFloat(r)*2.55:parseFloat(r)),g:$.channel.clamp.g(a?parseFloat(o)*2.55:parseFloat(o)),b:$.channel.clamp.b(l?parseFloat(s)*2.55:parseFloat(s)),a:h?$.channel.clamp.a(u?parseFloat(h)/100:parseFloat(h)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${$.lang.round(e)}, ${$.lang.round(i)}, ${$.lang.round(r)}, ${$.lang.round(n)})`:`rgb(${$.lang.round(e)}, ${$.lang.round(i)}, ${$.lang.round(r)})`}},Dt={format:{keyword:Je,hex:Fe,rgb:Ze,rgba:Ze,hsl:ce,hsla:ce},parse:t=>{if(typeof t!="string")return t;const e=Fe.parse(t)||Ze.parse(t)||ce.parse(t)||Je.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(ot.HSL)||t.data.r===void 0?ce.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Ze.stringify(t):Fe.stringify(t)},Bs=(t,e)=>{const i=Dt.parse(t);for(const r in e)i[r]=$.channel.clamp[r](e[r]);return Dt.stringify(i)},Qe=(t,e,i=0,r=1)=>{if(typeof t!="number")return Bs(t,{a:e});const n=gr.set({r:$.channel.clamp.r(t),g:$.channel.clamp.g(e),b:$.channel.clamp.b(i),a:$.channel.clamp.a(r)});return Dt.stringify(n)},Ud=t=>{const{r:e,g:i,b:r}=Dt.parse(t),n=.2126*$.channel.toLinear(e)+.7152*$.channel.toLinear(i)+.0722*$.channel.toLinear(r);return $.lang.round(n)},Yd=t=>Ud(t)>=.5,mi=t=>!Yd(t),As=(t,e,i)=>{const r=Dt.parse(t),n=r[e],o=$.channel.clamp[e](n+i);return n!==o&&(r[e]=o),Dt.stringify(r)},L=(t,e)=>As(t,"l",e),O=(t,e)=>As(t,"l",-e),g=(t,e)=>{const i=Dt.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return Bs(t,r)},Vd=(t,e,i=50)=>{const{r,g:n,b:o,a}=Dt.parse(t),{r:s,g:l,b:h,a:u}=Dt.parse(e),f=i/100,c=f*2-1,d=a-u,v=((c*d===-1?c:(c+d)/(1+c*d))+1)/2,B=1-v,P=r*v+s*B,k=n*v+l*B,z=o*v+h*B,H=a*f+u*(1-f);return Qe(P,k,z,H)},y=(t,e=100)=>{const i=Dt.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,Vd(i,t,e)};var Ls=typeof global=="object"&&global&&global.Object===Object&&global,Gd=typeof self=="object"&&self&&self.Object===Object&&self,Pt=Ls||Gd||Function("return this")(),Zi=Pt.Symbol,Fs=Object.prototype,Xd=Fs.hasOwnProperty,Kd=Fs.toString,Ve=Zi?Zi.toStringTag:void 0;function Zd(t){var e=Xd.call(t,Ve),i=t[Ve];try{t[Ve]=void 0;var r=!0}catch{}var n=Kd.call(t);return r&&(e?t[Ve]=i:delete t[Ve]),n}var Jd=Object.prototype,Qd=Jd.toString;function tp(t){return Qd.call(t)}var ep="[object Null]",ip="[object Undefined]",Ko=Zi?Zi.toStringTag:void 0;function qe(t){return t==null?t===void 0?ip:ep:Ko&&Ko in Object(t)?Zd(t):tp(t)}function _e(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var rp="[object AsyncFunction]",np="[object Function]",op="[object GeneratorFunction]",ap="[object Proxy]";function $n(t){if(!_e(t))return!1;var e=qe(t);return e==np||e==op||e==rp||e==ap}var Ur=Pt["__core-js_shared__"],Zo=function(){var t=/[^.]+$/.exec(Ur&&Ur.keys&&Ur.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function sp(t){return!!Zo&&Zo in t}var lp=Function.prototype,hp=lp.toString;function ye(t){if(t!=null){try{return hp.call(t)}catch{}try{return t+""}catch{}}return""}var cp=/[\\^$.*+?()[\]{}|]/g,up=/^\[object .+?Constructor\]$/,fp=Function.prototype,dp=Object.prototype,pp=fp.toString,gp=dp.hasOwnProperty,mp=RegExp("^"+pp.call(gp).replace(cp,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function _p(t){if(!_e(t)||sp(t))return!1;var e=$n(t)?mp:up;return e.test(ye(t))}function yp(t,e){return t==null?void 0:t[e]}function Ce(t,e){var i=yp(t,e);return _p(i)?i:void 0}var li=Ce(Object,"create");function Cp(){this.__data__=li?li(null):{},this.size=0}function xp(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var bp="__lodash_hash_undefined__",Tp=Object.prototype,vp=Tp.hasOwnProperty;function kp(t){var e=this.__data__;if(li){var i=e[t];return i===bp?void 0:i}return vp.call(e,t)?e[t]:void 0}var Sp=Object.prototype,wp=Sp.hasOwnProperty;function Bp(t){var e=this.__data__;return li?e[t]!==void 0:wp.call(e,t)}var Ap="__lodash_hash_undefined__";function Lp(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=li&&e===void 0?Ap:e,this}function ge(t){var e=-1,i=t==null?0:t.length;for(this.clear();++e-1}function Dp(t,e){var i=this.__data__,r=_r(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this}function Jt(t){var e=-1,i=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=hg}function xr(t){return t!=null&&$s(t.length)&&!$n(t)}function cg(t){return yi(t)&&xr(t)}function ug(){return!1}var Ds=typeof exports=="object"&&exports&&!exports.nodeType&&exports,na=Ds&&typeof module=="object"&&module&&!module.nodeType&&module,fg=na&&na.exports===Ds,oa=fg?Pt.Buffer:void 0,dg=oa?oa.isBuffer:void 0,Nn=dg||ug,pg="[object Object]",gg=Function.prototype,mg=Object.prototype,Ns=gg.toString,_g=mg.hasOwnProperty,yg=Ns.call(Object);function Cg(t){if(!yi(t)||qe(t)!=pg)return!1;var e=Ms(t);if(e===null)return!0;var i=_g.call(e,"constructor")&&e.constructor;return typeof i=="function"&&i instanceof i&&Ns.call(i)==yg}var xg="[object Arguments]",bg="[object Array]",Tg="[object Boolean]",vg="[object Date]",kg="[object Error]",Sg="[object Function]",wg="[object Map]",Bg="[object Number]",Ag="[object Object]",Lg="[object RegExp]",Fg="[object Set]",Eg="[object String]",Og="[object WeakMap]",Mg="[object ArrayBuffer]",Ig="[object DataView]",$g="[object Float32Array]",Dg="[object Float64Array]",Ng="[object Int8Array]",Rg="[object Int16Array]",Pg="[object Int32Array]",qg="[object Uint8Array]",zg="[object Uint8ClampedArray]",Wg="[object Uint16Array]",Hg="[object Uint32Array]",V={};V[$g]=V[Dg]=V[Ng]=V[Rg]=V[Pg]=V[qg]=V[zg]=V[Wg]=V[Hg]=!0;V[xg]=V[bg]=V[Mg]=V[Tg]=V[Ig]=V[vg]=V[kg]=V[Sg]=V[wg]=V[Bg]=V[Ag]=V[Lg]=V[Fg]=V[Eg]=V[Og]=!1;function jg(t){return yi(t)&&$s(t.length)&&!!V[qe(t)]}function Ug(t){return function(e){return t(e)}}var Rs=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ti=Rs&&typeof module=="object"&&module&&!module.nodeType&&module,Yg=ti&&ti.exports===Rs,Yr=Yg&&Ls.process,aa=function(){try{var t=ti&&ti.require&&ti.require("util").types;return t||Yr&&Yr.binding&&Yr.binding("util")}catch{}}(),sa=aa&&aa.isTypedArray,Rn=sa?Ug(sa):jg;function un(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var Vg=Object.prototype,Gg=Vg.hasOwnProperty;function Xg(t,e,i){var r=t[e];(!(Gg.call(t,e)&&mr(r,i))||i===void 0&&!(e in t))&&Dn(t,e,i)}function Kg(t,e,i,r){var n=!i;i||(i={});for(var o=-1,a=e.length;++o-1&&t%1==0&&t0){if(++e>=dm)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var _m=mm(fm);function ym(t,e){return _m(cm(t,e,Ws),t+"")}function Cm(t,e,i){if(!_e(i))return!1;var r=typeof e;return(r=="number"?xr(i)&&Ps(e,i.length):r=="string"&&e in i)?mr(i[e],t):!1}function xm(t){return ym(function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&typeof o=="function"?(n--,o):void 0,a&&Cm(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r0?ci(We,--vt):0,$e--,Q===10&&($e=1,br--),Q}function wt(){return Q=vt2||fn(Q)>3?"":" "}function Mm(t,e){for(;--e&&wt()&&!(Q<48||Q>102||Q>57&&Q<65||Q>70&&Q<97););return Tr(t,Pi()+(e<6&&fe()==32&&wt()==32))}function dn(t){for(;wt();)switch(Q){case t:return vt;case 34:case 39:t!==34&&t!==39&&dn(Q);break;case 40:t===41&&dn(t);break;case 92:wt();break}return vt}function Im(t,e){for(;wt()&&t+Q!==57;)if(t+Q===84&&fe()===47)break;return"/*"+Tr(e,vt-1)+"*"+Pn(t===47?t:wt())}function $m(t){for(;!fn(fe());)wt();return Tr(t,vt)}function Dm(t){return Em(qi("",null,null,null,[""],t=Fm(t),0,[0],t))}function qi(t,e,i,r,n,o,a,s,l){for(var h=0,u=0,f=a,c=0,d=0,_=0,v=1,B=1,P=1,k=0,z="",H=n,Y=o,K=r,W=z;B;)switch(_=k,k=wt()){case 40:if(_!=108&&ci(W,f-1)==58){wm(W+=Ri(Vr(k),"&","&\f"),"&\f")!=-1&&(P=-1);break}case 34:case 39:case 91:W+=Vr(k);break;case 9:case 10:case 13:case 32:W+=Om(_);break;case 92:W+=Mm(Pi()-1,7);continue;case 47:switch(fe()){case 42:case 47:Ei(Nm(Im(wt(),Pi()),e,i,l),l);break;default:W+="/"}break;case 123*v:s[h++]=Gt(W)*P;case 125*v:case 59:case 0:switch(k){case 0:case 125:B=0;case 59+u:P==-1&&(W=Ri(W,/\f/g,"")),d>0&&Gt(W)-f&&Ei(d>32?ca(W+";",r,i,f-1,l):ca(Ri(W," ","")+";",r,i,f-2,l),l);break;case 59:W+=";";default:if(Ei(K=ha(W,e,i,h,u,n,s,z,H=[],Y=[],f,o),o),k===123)if(u===0)qi(W,e,K,K,H,o,f,s,Y);else switch(c===99&&ci(W,3)===110?100:c){case 100:case 108:case 109:case 115:qi(t,K,K,r&&Ei(ha(t,K,K,0,0,n,s,z,n,H=[],f,Y),Y),n,Y,f,s,r?H:Y);break;default:qi(W,K,K,K,[""],Y,0,s,Y)}}h=u=d=0,v=P=1,z=W="",f=a;break;case 58:f=1+Gt(W),d=_;default:if(v<1){if(k==123)--v;else if(k==125&&v++==0&&Lm()==125)continue}switch(W+=Pn(k),k*v){case 38:P=u>0?1:(W+="\f",-1);break;case 44:s[h++]=(Gt(W)-1)*P,P=1;break;case 64:fe()===45&&(W+=Vr(wt())),c=fe(),u=f=Gt(z=W+=$m(Pi())),k++;break;case 45:_===45&&Gt(W)==2&&(v=0)}}return o}function ha(t,e,i,r,n,o,a,s,l,h,u,f){for(var c=n-1,d=n===0?o:[""],_=Bm(d),v=0,B=0,P=0;v0?d[k]+" "+z:Ri(z,/&\f/g,d[k])))&&(l[P++]=H);return qn(t,e,i,n===0?js:s,l,h,u,f)}function Nm(t,e,i,r){return qn(t,e,i,Hs,Pn(Am()),ui(t,2,-2),0,r)}function ca(t,e,i,r,n){return qn(t,e,i,Us,ui(t,0,r),ui(t,r+1,-1),r,n)}function pn(t,e){for(var i="",r=0;r{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},zn=function(t="fatal"){let e=Yt.fatal;typeof t=="string"?(t=t.toLowerCase(),t in Yt&&(e=Yt[t])):typeof t=="number"&&(e=t),E.trace=()=>{},E.debug=()=>{},E.info=()=>{},E.warn=()=>{},E.error=()=>{},E.fatal=()=>{},e<=Yt.fatal&&(E.fatal=console.error?console.error.bind(console,xt("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",xt("FATAL"))),e<=Yt.error&&(E.error=console.error?console.error.bind(console,xt("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",xt("ERROR"))),e<=Yt.warn&&(E.warn=console.warn?console.warn.bind(console,xt("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",xt("WARN"))),e<=Yt.info&&(E.info=console.info?console.info.bind(console,xt("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",xt("INFO"))),e<=Yt.debug&&(E.debug=console.debug?console.debug.bind(console,xt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",xt("DEBUG"))),e<=Yt.trace&&(E.trace=console.debug?console.debug.bind(console,xt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",xt("TRACE")))},xt=t=>`%c${Ph().format("ss.SSS")} : ${t} : `,Ci=//gi,Qm=t=>t?Xs(t).replace(/\\n/g,"#br#").split("#br#"):[""],t0=(()=>{let t=!1;return()=>{t||(e0(),t=!0)}})();function e0(){const t="data-temp-href-target";Ie.addHook("beforeSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")}),Ie.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}const Gs=t=>(t0(),Ie.sanitize(t)),ma=(t,e)=>{var i;if(((i=e.flowchart)==null?void 0:i.htmlLabels)!==!1){const r=e.securityLevel;r==="antiscript"||r==="strict"?t=Gs(t):r!=="loose"&&(t=Xs(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=o0(t))}return t},fi=(t,e)=>t&&(e.dompurifyConfig?t=Ie.sanitize(ma(t,e),e.dompurifyConfig).toString():t=Ie.sanitize(ma(t,e),{FORBID_TAGS:["style"]}).toString(),t),i0=(t,e)=>typeof t=="string"?fi(t,e):t.flat().map(i=>fi(i,e)),r0=t=>Ci.test(t),n0=t=>t.split(Ci),o0=t=>t.replace(/#br#/g,"
"),Xs=t=>t.replace(Ci,"#br#"),a0=t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},Ks=t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),s0=function(...t){const e=t.filter(i=>!isNaN(i));return Math.max(...e)},l0=function(...t){const e=t.filter(i=>!isNaN(i));return Math.min(...e)},s1=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r0&&r+1Math.max(0,t.split(e).length-1),h0=(t,e)=>{const i=Cn(t,"~"),r=Cn(e,"~");return i===1&&r===1},c0=t=>{const e=Cn(t,"~");let i=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;n!==-1&&o!==-1&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},_a=()=>window.MathMLElement!==void 0,xn=/\$\$(.*)\$\$/g,ya=t=>{var e;return(((e=t.match(xn))==null?void 0:e.length)??0)>0},l1=async(t,e)=>{t=await u0(t,e);const i=document.createElement("div");i.innerHTML=t,i.id="katex-temp",i.style.visibility="hidden",i.style.position="absolute",i.style.top="0";const r=document.querySelector("body");r==null||r.insertAdjacentElement("beforeend",i);const n={width:i.clientWidth,height:i.clientHeight};return i.remove(),n},u0=async(t,e)=>{if(!ya(t))return t;if(!_a()&&!e.legacyMathML)return t.replace(xn,"MathML is unsupported in this environment.");const{default:i}=await G(async()=>{const{default:r}=await import("./chunks/katex.CvgdMzdh.js");return{default:r}},[]);return t.split(Ci).map(r=>ya(r)?` -
- ${r} -
- `:`
${r}
`).join("").replace(xn,(r,n)=>i.renderToString(n,{throwOnError:!0,displayMode:!0,output:_a()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(//g,""))},Wn={getRows:Qm,sanitizeText:fi,sanitizeTextOrArray:i0,hasBreaks:r0,splitBreaks:n0,lineBreakRegex:Ci,removeScript:Gs,getUrl:a0,evaluate:Ks,getMax:s0,getMin:l0},ct=(t,e)=>e?g(t,{s:-40,l:10}):g(t,{s:-40,l:-10}),vr="#ffffff",kr="#f2f2f2";let f0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var e,i,r,n,o,a,s,l,h,u,f;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||g(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||g(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ct(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ct(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||y(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||y(this.tertiaryColor),this.lineColor=this.lineColor||y(this.background),this.arrowheadColor=this.arrowheadColor||y(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?O(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||O(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||y(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||L(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.darkMode)for(let d=0;d{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const d0=t=>{const e=new f0;return e.calculate(t),e};let p0=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=L(this.primaryColor,16),this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=y(this.background),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.tertiaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=L(y("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=Qe(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=O("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=O(this.sectionBkgColor,10),this.taskBorderColor=Qe(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Qe(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var e,i,r,n,o,a,s,l,h,u,f;this.secondBkg=L(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=L(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=L(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=g(this.primaryColor,{h:64}),this.fillType3=g(this.secondaryColor,{h:64}),this.fillType4=g(this.primaryColor,{h:-64}),this.fillType5=g(this.secondaryColor,{h:-64}),this.fillType6=g(this.primaryColor,{h:128}),this.fillType7=g(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330});for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const g0=t=>{const e=new p0;return e.calculate(t),e};let m0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=g(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.tertiaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Qe(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var e,i,r,n,o,a,s,l,h,u,f;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||O(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||O(this.tertiaryColor,40);for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const _0=t=>{const e=new m0;return e.calculate(t),e};let y0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=L("#cde498",10),this.primaryBorderColor=ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.primaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,i,r,n,o,a,s,l,h,u,f;this.actorBorder=O(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||O(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||O(this.tertiaryColor,40);for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const C0=t=>{const e=new y0;return e.calculate(t),e};class x0{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=L(this.contrast,55),this.background="#ffffff",this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=ct(this.primaryColor,this.darkMode),this.secondaryBorderColor=ct(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ct(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.tertiaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,i,r,n,o,a,s,l,h,u,f;this.secondBkg=L(this.contrast,55),this.border2=this.contrast,this.actorBorder=L(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let c=0;c{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}}const b0=t=>{const e=new x0;return e.calculate(t),e},Kt={base:{getThemeVariables:d0},dark:{getThemeVariables:g0},default:{getThemeVariables:_0},forest:{getThemeVariables:C0},neutral:{getThemeVariables:b0}},Vt={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},Zs={...Vt,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Kt.default.getThemeVariables(),sequence:{...Vt.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Vt.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Vt.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Vt.pie,useWidth:984},xyChart:{...Vt.xyChart,useWidth:void 0},requirement:{...Vt.requirement,useWidth:void 0},gitGraph:{...Vt.gitGraph,useMaxWidth:!1},sankey:{...Vt.sankey,useMaxWidth:!1}},Js=(t,e="")=>Object.keys(t).reduce((i,r)=>Array.isArray(t[r])?i:typeof t[r]=="object"&&t[r]!==null?[...i,e+r,...Js(t[r],"")]:[...i,e+r],[]),T0=new Set(Js(Zs,"")),v0=Zs,er=t=>{if(E.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>er(e));return}for(const e of Object.keys(t)){if(E.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!T0.has(e)||t[e]==null){E.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){E.debug("sanitizing object",e),er(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(E.debug("sanitizing css option",e),t[e]=k0(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];i!=null&&i.match&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}E.debug("After sanitization",t)}},k0=t=>{let e=0,i=0;for(const r of t){if(e{for(const{id:e,detector:i,loader:r}of t)il(e,i,r)},il=(t,e,i)=>{De[t]?E.error(`Detector with key ${t} already exists`):De[t]={detector:e,loader:i},E.debug(`Detector with key ${t} added${i?" with loader":""}`)},w0=t=>De[t].loader,bn=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(o=>bn(t,o,n)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(o=>{t.includes(o)||t.push(o)}),t):t===void 0||i<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(o=>{typeof e[o]=="object"&&(t[o]===void 0||typeof t[o]=="object")?(t[o]===void 0&&(t[o]=Array.isArray(e[o])?[]:{}),t[o]=bn(t[o],e[o],{depth:i-1,clobber:r})):(r||typeof t[o]!="object"&&typeof e[o]!="object")&&(t[o]=e[o])}),t)},at=bn,B0="​",A0={curveBasis:nd,curveBasisClosed:od,curveBasisOpen:ad,curveBumpX:id,curveBumpY:rd,curveBundle:sd,curveCardinalClosed:hd,curveCardinalOpen:cd,curveCardinal:ld,curveCatmullRomClosed:fd,curveCatmullRomOpen:dd,curveCatmullRom:ud,curveLinear:ed,curveLinearClosed:pd,curveMonotoneX:gd,curveMonotoneY:md,curveNatural:_d,curveStep:yd,curveStepAfter:xd,curveStepBefore:Cd},L0=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,F0=function(t,e){const i=rl(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const a=i.map(s=>s.args);er(a),r=at(r,[...a])}else r=i.args;if(!r)return;let n=Sr(t,e);const o="config";return r[o]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),r[n]=r[o],delete r[o]),r},rl=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${L0.source})(?=[}][%]{2}).* -`,"ig");t=t.trim().replace(i,"").replace(/'/gm,'"'),E.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let r;const n=[];for(;(r=ei.exec(t))!==null;)if(r.index===ei.lastIndex&&ei.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const o=r[1]?r[1]:r[2],a=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:o,args:a})}return n.length===0?{type:t,args:null}:n.length===1?n[0]:n}catch(i){return E.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},E0=function(t){return t.replace(ei,"")},O0=function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1};function M0(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return A0[i]??e}function I0(t,e){const i=t.trim();if(i)return e.securityLevel!=="loose"?Ra.sanitizeUrl(i):i}const $0=(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a{i+=nl(n,e),e=n});const r=i/2;return Hn(t,r)}function N0(t){return t.length===1?t[0]:D0(t)}const Ca=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},Hn=(t,e)=>{let i,r=e;for(const n of t){if(i){const o=nl(n,i);if(o=1)return{x:n.x,y:n.y};if(a>0&&a<1)return{x:Ca((1-a)*i.x+a*n.x,5),y:Ca((1-a)*i.y+a*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")},R0=(t,e,i)=>{E.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const n=Hn(e,25),o=t?10:5,a=Math.atan2(e[0].y-n.y,e[0].x-n.x),s={x:0,y:0};return s.x=Math.sin(a)*o+(e[0].x+n.x)/2,s.y=-Math.cos(a)*o+(e[0].y+n.y)/2,s};function P0(t,e,i){const r=structuredClone(i);E.info("our points",r),e!=="start_left"&&e!=="start_right"&&r.reverse();const n=25+t,o=Hn(r,n),a=10+t*.5,s=Math.atan2(r[0].y-o.y,r[0].x-o.x),l={x:0,y:0};return e==="start_left"?(l.x=Math.sin(s+Math.PI)*a+(r[0].x+o.x)/2,l.y=-Math.cos(s+Math.PI)*a+(r[0].y+o.y)/2):e==="end_right"?(l.x=Math.sin(s-Math.PI)*a+(r[0].x+o.x)/2-5,l.y=-Math.cos(s-Math.PI)*a+(r[0].y+o.y)/2-5):e==="end_left"?(l.x=Math.sin(s)*a+(r[0].x+o.x)/2-5,l.y=-Math.cos(s)*a+(r[0].y+o.y)/2-5):(l.x=Math.sin(s)*a+(r[0].x+o.x)/2,l.y=-Math.cos(s)*a+(r[0].y+o.y)/2),l}function q0(t){let e="",i="";for(const r of t)r!==void 0&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let xa=0;const z0=()=>(xa++,"id-"+Math.random().toString(36).substr(2,12)+"-"+xa);function W0(t){let e="";const i="0123456789abcdef",r=i.length;for(let n=0;nW0(t.length),j0=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},U0=function(t,e){const i=e.text.replace(Wn.lineBreakRegex," "),[,r]=Un(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),e.class!==void 0&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+e.textMargin*2),o.attr("fill",e.fill),o.text(i),n},Y0=_i((t,e,i)=>{if(!t||(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},i),Wn.lineBreakRegex.test(t)))return t;const r=t.split(" "),n=[];let o="";return r.forEach((a,s)=>{const l=ir(`${a} `,i),h=ir(o,i);if(l>e){const{hyphenatedStrings:c,remainingWord:d}=V0(a,e,"-",i);n.push(o,...c),o=d}else h+l>=e?(n.push(o),o=a):o=[o,a].filter(Boolean).join(" ");s+1===r.length&&n.push(o)}),n.filter(a=>a!=="").join(i.joinWith)},(t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`),V0=_i((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach((s,l)=>{const h=`${a}${s}`;if(ir(h,r)>=e){const f=l+1,c=n.length===f,d=`${h}${i}`;o.push(c?h:d),a=""}else a=h}),{hyphenatedStrings:o,remainingWord:a}},(t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`);function G0(t,e){return jn(t,e).height}function ir(t,e){return jn(t,e).width}const jn=_i((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=Un(i),a=["sans-serif",r],s=t.split(Wn.lineBreakRegex),l=[],h=bt("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const c of a){let d=0;const _={width:0,height:0,lineHeight:0};for(const v of s){const B=j0();B.text=v||B0;const P=U0(u,B).style("font-size",o).style("font-weight",n).style("font-family",c),k=(P._groups||P)[0][0].getBBox();if(k.width===0&&k.height===0)throw new Error("svg element not in render tree");_.width=Math.round(Math.max(_.width,k.width)),d=Math.round(k.height),_.height+=d,_.lineHeight=Math.round(Math.max(_.lineHeight,d))}l.push(_)}u.remove();const f=isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1;return l[f]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`);class X0{constructor(e=!1,i){this.count=0,this.count=i?i.length:0,this.next=e?()=>this.count++:()=>Date.now()}}let Oi;const K0=function(t){return Oi=Oi||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Oi.innerHTML=t,unescape(Oi.textContent)};function ol(t){return"str"in t}const Z0=(t,e,i,r)=>{var n;if(!r)return;const o=(n=t.node())==null?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},Un=t=>{if(typeof t=="number")return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function al(t,e){return bm({},t,e)}const ii={assignWithDepth:at,wrapLabel:Y0,calculateTextHeight:G0,calculateTextWidth:ir,calculateTextDimensions:jn,cleanAndMerge:al,detectInit:F0,detectDirective:rl,isSubstringInArray:O0,interpolateToCurve:M0,calcLabelPosition:N0,calcCardinalityPosition:R0,calcTerminalLabelPosition:P0,formatUrl:I0,getStylesFromArray:q0,generateId:z0,random:H0,runFunc:$0,entityDecode:K0,insertTitle:Z0,parseFontSize:Un,InitIDGenerator:X0},J0=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(i){return i.substring(0,i.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(i){return i.substring(0,i.length-1)}),e=e.replace(/#\w+;/g,function(i){const r=i.substring(1,i.length-1);return/^\+?\d+$/.test(r)?"fl°°"+r+"¶ß":"fl°"+r+"¶ß"}),e},Q0=function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},ba="10.9.1",Ne=Object.freeze(v0);let ft=at({},Ne),sl,Re=[],ri=at({},Ne);const wr=(t,e)=>{let i=at({},t),r={};for(const n of e)cl(n),r=at(r,n);if(i=at(i,r),r.theme&&r.theme in Kt){const n=at({},sl),o=at(n.themeVariables||{},r.themeVariables);i.theme&&i.theme in Kt&&(i.themeVariables=Kt[i.theme].getThemeVariables(o))}return ri=i,ul(ri),ri},t_=t=>(ft=at({},Ne),ft=at(ft,t),t.theme&&Kt[t.theme]&&(ft.themeVariables=Kt[t.theme].getThemeVariables(t.themeVariables)),wr(ft,Re),ft),e_=t=>{sl=at({},t)},i_=t=>(ft=at(ft,t),wr(ft,Re),ft),ll=()=>at({},ft),hl=t=>(ul(t),at(ri,t),Nt()),Nt=()=>at({},ri),cl=t=>{t&&(["secure",...ft.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(E.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&cl(t[e])}))},r_=t=>{er(t),t.fontFamily&&(!t.themeVariables||!t.themeVariables.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),Re.push(t),wr(ft,Re)},rr=(t=ft)=>{Re=[],wr(t,Re)},n_={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ta={},o_=t=>{Ta[t]||(E.warn(n_[t]),Ta[t]=!0)},ul=t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&o_("LAZY_LOAD_DEPRECATED")},fl="c4",a_=t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),s_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/c4Diagram-ae766693.Cw5qy7Cl.js");return{diagram:e}},__vite__mapDeps([0,1,2,3]));return{id:fl,diagram:t}},l_={id:fl,detector:a_,loader:s_},h_=l_,dl="flowchart",c_=(t,e)=>{var i,r;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-wrapper"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)},u_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-b222e15a.Cpr-kPYG.js");return{diagram:e}},__vite__mapDeps([4,5,6,7,8,9,10,11,12,13,14,15,16,2,3]));return{id:dl,diagram:t}},f_={id:dl,detector:c_,loader:u_},d_=f_,pl="flowchart-v2",p_=(t,e)=>{var i,r,n;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-d3"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)&&((n=e==null?void 0:e.flowchart)==null?void 0:n.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)},g_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-v2-13329dc7.CSjni5i6.js");return{diagram:e}},__vite__mapDeps([17,5,8,6,9,7,10,11,12,13,14,15,16,2,3]));return{id:pl,diagram:t}},m_={id:pl,detector:p_,loader:g_},__=m_,gl="er",y_=t=>/^\s*erDiagram/.test(t),C_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/erDiagram-09d1c15f.vOHorcgg.js");return{diagram:e}},__vite__mapDeps([18,6,7,13,14,15,2,3]));return{id:gl,diagram:t}},x_={id:gl,detector:y_,loader:C_},b_=x_,ml="gitGraph",T_=t=>/^\s*gitGraph/.test(t),v_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/gitGraphDiagram-942e62fe.m2p8tYff.js");return{diagram:e}},__vite__mapDeps([19,2,3]));return{id:ml,diagram:t}},k_={id:ml,detector:T_,loader:v_},S_=k_,_l="gantt",w_=t=>/^\s*gantt/.test(t),B_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/ganttDiagram-b62c793e.DstTdRzq.js");return{diagram:e}},__vite__mapDeps([20,21,22,2,3]));return{id:_l,diagram:t}},A_={id:_l,detector:w_,loader:B_},L_=A_,yl="info",F_=t=>/^\s*info/.test(t),E_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/infoDiagram-94cd232f.Dpqcs4_0.js");return{diagram:e}},__vite__mapDeps([23,2,3]));return{id:yl,diagram:t}},O_={id:yl,detector:F_,loader:E_},Cl="pie",M_=t=>/^\s*pie/.test(t),I_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/pieDiagram-bb1d19e5.CcIweH9R.js");return{diagram:e}},__vite__mapDeps([24,25,15,26,22,14,2,3]));return{id:Cl,diagram:t}},$_={id:Cl,detector:M_,loader:I_},xl="quadrantChart",D_=t=>/^\s*quadrantChart/.test(t),N_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/quadrantDiagram-c759a472.DrZVK_s3.js");return{diagram:e}},__vite__mapDeps([27,21,22,2,3]));return{id:xl,diagram:t}},R_={id:xl,detector:D_,loader:N_},P_=R_,bl="xychart",q_=t=>/^\s*xychart-beta/.test(t),z_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/xychartDiagram-f11f50a6.Bqkbyp4J.js");return{diagram:e}},__vite__mapDeps([28,12,22,26,21,13,14,15,2,3]));return{id:bl,diagram:t}},W_={id:bl,detector:q_,loader:z_},H_=W_,Tl="requirement",j_=t=>/^\s*requirement(Diagram)?/.test(t),U_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/requirementDiagram-87253d64.DTGKGrWZ.js");return{diagram:e}},__vite__mapDeps([29,6,7,13,14,15,2,3]));return{id:Tl,diagram:t}},Y_={id:Tl,detector:j_,loader:U_},V_=Y_,vl="sequence",G_=t=>/^\s*sequenceDiagram/.test(t),X_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/sequenceDiagram-6894f283.xh2cdXdg.js");return{diagram:e}},__vite__mapDeps([30,1,2,3]));return{id:vl,diagram:t}},K_={id:vl,detector:G_,loader:X_},Z_=K_,kl="class",J_=(t,e)=>{var i;return((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t)},Q_=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/classDiagram-fb54d2a0.RDXiZthm.js");return{diagram:e}},__vite__mapDeps([31,32,6,7,13,14,15,2,3]));return{id:kl,diagram:t}},ty={id:kl,detector:J_,loader:Q_},ey=ty,Sl="classDiagram",iy=(t,e)=>{var i;return/^\s*classDiagram/.test(t)&&((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t)},ry=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/classDiagram-v2-a2b738ad.DbdhFrZX.js");return{diagram:e}},__vite__mapDeps([33,32,6,9,7,10,11,12,13,14,15,2,3]));return{id:Sl,diagram:t}},ny={id:Sl,detector:iy,loader:ry},oy=ny,wl="state",ay=(t,e)=>{var i;return((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t)},sy=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-5dee940d.BBcnAHJj.js");return{diagram:e}},__vite__mapDeps([34,35,6,7,13,14,15,2,3]));return{id:wl,diagram:t}},ly={id:wl,detector:ay,loader:sy},hy=ly,Bl="stateDiagram",cy=(t,e)=>{var i;return!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper")},uy=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-v2-1992cada.BStA_oNN.js");return{diagram:e}},__vite__mapDeps([36,35,6,9,7,10,11,12,13,14,15,2,3]));return{id:Bl,diagram:t}},fy={id:Bl,detector:cy,loader:uy},dy=fy,Al="journey",py=t=>/^\s*journey/.test(t),gy=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/journeyDiagram-6625b456.g47i3df6.js");return{diagram:e}},__vite__mapDeps([37,1,25,15,2,3]));return{id:Al,diagram:t}},my={id:Al,detector:py,loader:gy},_y=my,yy=function(t,e){for(let i of e)t.attr(i[0],i[1])},Cy=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r},Ll=function(t,e,i,r){const n=Cy(e,i,r);yy(t,n)},xy=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;E.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;E.info(`Graph bounds: ${s}x${l}`,t),s=o+i*2,l=a+i*2,E.info(`Calculated bounds: ${s}x${l}`),Ll(e,l,s,r);const h=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",h)},zi={},by=(t,e,i)=>{let r="";return t in zi&&zi[t]?r=zi[t](i):E.warn(`No theme found for ${t}`),` & { - font-family: ${i.fontFamily}; - font-size: ${i.fontSize}; - fill: ${i.textColor} - } - - /* Classes common for multiple diagrams */ - - & .error-icon { - fill: ${i.errorBkgColor}; - } - & .error-text { - fill: ${i.errorTextColor}; - stroke: ${i.errorTextColor}; - } - - & .edge-thickness-normal { - stroke-width: 2px; - } - & .edge-thickness-thick { - stroke-width: 3.5px - } - & .edge-pattern-solid { - stroke-dasharray: 0; - } - - & .edge-pattern-dashed{ - stroke-dasharray: 3; - } - .edge-pattern-dotted { - stroke-dasharray: 2; - } - - & .marker { - fill: ${i.lineColor}; - stroke: ${i.lineColor}; - } - & .marker.cross { - stroke: ${i.lineColor}; - } - - & svg { - font-family: ${i.fontFamily}; - font-size: ${i.fontSize}; - } - - ${r} - - ${e} -`},Ty=(t,e)=>{e!==void 0&&(zi[t]=e)},vy=by;let Yn="",Vn="",Gn="";const Xn=t=>fi(t,Nt()),ky=()=>{Yn="",Gn="",Vn=""},Sy=t=>{Yn=Xn(t).replace(/^\s+/g,"")},wy=()=>Yn,By=t=>{Gn=Xn(t).replace(/\n\s+/g,` -`)},Ay=()=>Gn,Ly=t=>{Vn=Xn(t)},Fy=()=>Vn,Ey=Object.freeze(Object.defineProperty({__proto__:null,clear:ky,getAccDescription:Ay,getAccTitle:wy,getDiagramTitle:Fy,setAccDescription:By,setAccTitle:Sy,setDiagramTitle:Ly},Symbol.toStringTag,{value:"Module"})),Oy=E,My=zn,Kn=Nt,d1=hl,p1=Ne,Iy=t=>fi(t,Kn()),$y=xy,Dy=()=>Ey,nr={},or=(t,e,i)=>{var r;if(nr[t])throw new Error(`Diagram ${t} already registered.`);nr[t]=e,i&&il(t,i),Ty(t,e.styles),(r=e.injectUtils)==null||r.call(e,Oy,My,Kn,Iy,$y,Dy(),()=>{})},Zn=t=>{if(t in nr)return nr[t];throw new Ny(t)};class Ny extends Error{constructor(e){super(`Diagram ${e} not found.`)}}const Ry=t=>{var e;const{securityLevel:i}=Kn();let r=bt("body");if(i==="sandbox"){const a=((e=bt(`#i${t}`).node())==null?void 0:e.contentDocument)??document;r=bt(a.body)}return r.select(`#${t}`)},Py=(t,e,i)=>{E.debug(`rendering svg for syntax error -`);const r=Ry(e),n=r.append("g");r.attr("viewBox","0 0 2412 512"),Ll(r,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)},Fl={draw:Py},qy=Fl,zy={db:{},renderer:Fl,parser:{parser:{yy:{}},parse:()=>{}}},Wy=zy,El="flowchart-elk",Hy=(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="elk")},jy=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/flowchart-elk-definition-ae0efee6.CLgAh--I.js");return{diagram:e}},__vite__mapDeps([38,5,11,12,13,14,15,2,3]));return{id:El,diagram:t}},Uy={id:El,detector:Hy,loader:jy},Yy=Uy,Ol="timeline",Vy=t=>/^\s*timeline/.test(t),Gy=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/timeline-definition-bf702344.D5PATXbR.js");return{diagram:e}},__vite__mapDeps([39,25,15,2,3]));return{id:Ol,diagram:t}},Xy={id:Ol,detector:Vy,loader:Gy},Ky=Xy,Ml="mindmap",Zy=t=>/^\s*mindmap/.test(t),Jy=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/mindmap-definition-307c710a.B42RSYq2.js");return{diagram:e}},__vite__mapDeps([40,12,2,3]));return{id:Ml,diagram:t}},Qy={id:Ml,detector:Zy,loader:Jy},tC=Qy,Il="sankey",eC=t=>/^\s*sankey-beta/.test(t),iC=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/sankeyDiagram-707fac0f.BUCcUXDc.js");return{diagram:e}},__vite__mapDeps([41,26,22,42,2,3]));return{id:Il,diagram:t}},rC={id:Il,detector:eC,loader:iC},nC=rC,$l="block",oC=t=>/^\s*block-beta/.test(t),aC=async()=>{const{diagram:t}=await G(async()=>{const{diagram:e}=await import("./chunks/blockDiagram-9f4a6865.BhiXeOzW.js");return{diagram:e}},__vite__mapDeps([43,10,6,11,12,13,14,15,26,22,16,42,2,3]));return{id:$l,diagram:t}},sC={id:$l,detector:oC,loader:aC},lC=sC;let va=!1;const Jn=()=>{va||(va=!0,or("error",Wy,t=>t.toLowerCase().trim()==="error"),or("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},t=>t.toLowerCase().trimStart().startsWith("---")),el(h_,oy,ey,b_,L_,O_,$_,V_,Z_,Yy,__,d_,tC,Ky,S_,dy,hy,_y,P_,nC,H_,lC))};class Dl{constructor(e,i={}){this.text=e,this.metadata=i,this.type="graph",this.text=J0(e),this.text+=` -`;const r=Nt();try{this.type=Sr(e,r)}catch(o){this.type="error",this.detectError=o}const n=Zn(this.type);E.debug("Type "+this.type),this.db=n.db,this.renderer=n.renderer,this.parser=n.parser,this.parser.parser.yy=this.db,this.init=n.init,this.parse()}parse(){var e,i,r,n,o;if(this.detectError)throw this.detectError;(i=(e=this.db).clear)==null||i.call(e);const a=Nt();(r=this.init)==null||r.call(this,a),this.metadata.title&&((o=(n=this.db).setDiagramTitle)==null||o.call(n,this.metadata.title)),this.parser.parse(this.text)}async render(e,i){await this.renderer.draw(this.text,e,i,this)}getParser(){return this.parser}getType(){return this.type}}const hC=async(t,e={})=>{const i=Sr(t,Nt());try{Zn(i)}catch{const n=w0(i);if(!n)throw new tl(`Diagram ${i} not found.`);const{id:o,diagram:a}=await n();or(o,a)}return new Dl(t,e)};let ka=[];const cC=()=>{ka.forEach(t=>{t()}),ka=[]},uC="graphics-document document";function fC(t,e){t.attr("role",uC),e!==""&&t.attr("aria-roledescription",e)}function dC(t,e,i,r){if(t.insert!==void 0){if(i){const n=`chart-desc-${r}`;t.attr("aria-describedby",n),t.insert("desc",":first-child").attr("id",n).text(i)}if(e){const n=`chart-title-${r}`;t.attr("aria-labelledby",n),t.insert("title",":first-child").attr("id",n).text(e)}}}const pC=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function Nl(t){return typeof t>"u"||t===null}function gC(t){return typeof t=="object"&&t!==null}function mC(t){return Array.isArray(t)?t:Nl(t)?[]:[t]}function _C(t,e){var i,r,n,o;if(e)for(o=Object.keys(e),i=0,r=o.length;is&&(o=" ... ",e=r-s+o.length),i-r>s&&(a=" ...",i=r+s-a.length),{str:o+t.slice(e,i).replace(/\t/g,"→")+a,pos:r-e+o.length}}function Kr(t,e){return ht.repeat(" ",e-t.length)+t}function wC(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var i=/\r?\n|\r|\0/g,r=[0],n=[],o,a=-1;o=i.exec(t.buffer);)n.push(o.index),r.push(o.index+o[0].length),t.position<=o.index&&a<0&&(a=r.length-2);a<0&&(a=r.length-1);var s="",l,h,u=Math.min(t.line+e.linesAfter,n.length).toString().length,f=e.maxLength-(e.indent+u+3);for(l=1;l<=e.linesBefore&&!(a-l<0);l++)h=Xr(t.buffer,r[a-l],n[a-l],t.position-(r[a]-r[a-l]),f),s=ht.repeat(" ",e.indent)+Kr((t.line-l+1).toString(),u)+" | "+h.str+` -`+s;for(h=Xr(t.buffer,r[a],n[a],t.position,f),s+=ht.repeat(" ",e.indent)+Kr((t.line+1).toString(),u)+" | "+h.str+` -`,s+=ht.repeat("-",e.indent+u+3+h.pos)+`^ -`,l=1;l<=e.linesAfter&&!(a+l>=n.length);l++)h=Xr(t.buffer,r[a+l],n[a+l],t.position-(r[a]-r[a+l]),f),s+=ht.repeat(" ",e.indent)+Kr((t.line+l+1).toString(),u)+" | "+h.str+` -`;return s.replace(/\n$/,"")}var BC=wC,AC=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],LC=["scalar","sequence","mapping"];function FC(t){var e={};return t!==null&&Object.keys(t).forEach(function(i){t[i].forEach(function(r){e[String(r)]=i})}),e}function EC(t,e){if(e=e||{},Object.keys(e).forEach(function(i){if(AC.indexOf(i)===-1)throw new Xt('Unknown option "'+i+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(i){return i},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=FC(e.styleAliases||null),LC.indexOf(this.kind)===-1)throw new Xt('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var st=EC;function Sa(t,e){var i=[];return t[e].forEach(function(r){var n=i.length;i.forEach(function(o,a){o.tag===r.tag&&o.kind===r.kind&&o.multi===r.multi&&(n=a)}),i[n]=r}),i}function OC(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,i;function r(n){n.multi?(t.multi[n.kind].push(n),t.multi.fallback.push(n)):t[n.kind][n.tag]=t.fallback[n.tag]=n}for(e=0,i=arguments.length;e=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),QC=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function tx(t){return!(t===null||!QC.test(t)||t[t.length-1]==="_")}function ex(t){var e,i;return e=t.replace(/_/g,"").toLowerCase(),i=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?i===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:i*parseFloat(e,10)}var ix=/^[-+]?[0-9]+e/;function rx(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ht.isNegativeZero(t))return"-0.0";return i=t.toString(10),ix.test(i)?i.replace("e",".e"):i}function nx(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||ht.isNegativeZero(t))}var ox=new st("tag:yaml.org,2002:float",{kind:"scalar",resolve:tx,construct:ex,predicate:nx,represent:rx,defaultStyle:"lowercase"}),Pl=NC.extend({implicit:[zC,UC,JC,ox]}),ax=Pl,ql=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),zl=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function sx(t){return t===null?!1:ql.exec(t)!==null||zl.exec(t)!==null}function lx(t){var e,i,r,n,o,a,s,l=0,h=null,u,f,c;if(e=ql.exec(t),e===null&&(e=zl.exec(t)),e===null)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],f=+(e[11]||0),h=(u*60+f)*6e4,e[9]==="-"&&(h=-h)),c=new Date(Date.UTC(i,r,n,o,a,s,l)),h&&c.setTime(c.getTime()-h),c}function hx(t){return t.toISOString()}var cx=new st("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:sx,construct:lx,instanceOf:Date,represent:hx});function ux(t){return t==="<<"||t===null}var fx=new st("tag:yaml.org,2002:merge",{kind:"scalar",resolve:ux}),Qn=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function dx(t){if(t===null)return!1;var e,i,r=0,n=t.length,o=Qn;for(i=0;i64)){if(e<0)return!1;r+=6}return r%8===0}function px(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=Qn,a=0,s=[];for(e=0;e>16&255),s.push(a>>8&255),s.push(a&255)),a=a<<6|o.indexOf(r.charAt(e));return i=n%4*6,i===0?(s.push(a>>16&255),s.push(a>>8&255),s.push(a&255)):i===18?(s.push(a>>10&255),s.push(a>>2&255)):i===12&&s.push(a>>4&255),new Uint8Array(s)}function gx(t){var e="",i=0,r,n,o=t.length,a=Qn;for(r=0;r>18&63],e+=a[i>>12&63],e+=a[i>>6&63],e+=a[i&63]),i=(i<<8)+t[r];return n=o%3,n===0?(e+=a[i>>18&63],e+=a[i>>12&63],e+=a[i>>6&63],e+=a[i&63]):n===2?(e+=a[i>>10&63],e+=a[i>>4&63],e+=a[i<<2&63],e+=a[64]):n===1&&(e+=a[i>>2&63],e+=a[i<<4&63],e+=a[64],e+=a[64]),e}function mx(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var _x=new st("tag:yaml.org,2002:binary",{kind:"scalar",resolve:dx,construct:px,predicate:mx,represent:gx}),yx=Object.prototype.hasOwnProperty,Cx=Object.prototype.toString;function xx(t){if(t===null)return!0;var e=[],i,r,n,o,a,s=t;for(i=0,r=s.length;i>10)+55296,(t-65536&1023)+56320)}var Yl=new Array(256),Vl=new Array(256);for(var we=0;we<256;we++)Yl[we]=Aa(we)?1:0,Vl[we]=Aa(we);function qx(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||Ex,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Gl(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=BC(i),new Xt(e,i)}function F(t,e){throw Gl(t,e)}function lr(t,e){t.onWarning&&t.onWarning.call(null,Gl(t,e))}var La={YAML:function(e,i,r){var n,o,a;e.version!==null&&F(e,"duplication of %YAML directive"),r.length!==1&&F(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),n===null&&F(e,"ill-formed argument of the YAML directive"),o=parseInt(n[1],10),a=parseInt(n[2],10),o!==1&&F(e,"unacceptable YAML version of the document"),e.version=r[0],e.checkLineBreaks=a<2,a!==1&&a!==2&&lr(e,"unsupported YAML version of the document")},TAG:function(e,i,r){var n,o;r.length!==2&&F(e,"TAG directive accepts exactly two arguments"),n=r[0],o=r[1],jl.test(n)||F(e,"ill-formed tag handle (first argument) of the TAG directive"),ne.call(e.tagMap,n)&&F(e,'there is a previously declared suffix for "'+n+'" tag handle'),Ul.test(o)||F(e,"ill-formed tag prefix (second argument) of the TAG directive");try{o=decodeURIComponent(o)}catch{F(e,"tag prefix is malformed: "+o)}e.tagMap[n]=o}};function ie(t,e,i,r){var n,o,a,s;if(e1&&(t.result+=ht.repeat(` -`,e-1))}function zx(t,e,i){var r,n,o,a,s,l,h,u,f=t.kind,c=t.result,d;if(d=t.input.charCodeAt(t.position),pt(d)||Be(d)||d===35||d===38||d===42||d===33||d===124||d===62||d===39||d===34||d===37||d===64||d===96||(d===63||d===45)&&(n=t.input.charCodeAt(t.position+1),pt(n)||i&&Be(n)))return!1;for(t.kind="scalar",t.result="",o=a=t.position,s=!1;d!==0;){if(d===58){if(n=t.input.charCodeAt(t.position+1),pt(n)||i&&Be(n))break}else if(d===35){if(r=t.input.charCodeAt(t.position-1),pt(r))break}else{if(t.position===t.lineStart&&Br(t)||i&&Be(d))break;if($t(d))if(l=t.line,h=t.lineStart,u=t.lineIndent,tt(t,!1,-1),t.lineIndent>=e){s=!0,d=t.input.charCodeAt(t.position);continue}else{t.position=a,t.line=l,t.lineStart=h,t.lineIndent=u;break}}s&&(ie(t,o,a,!1),eo(t,t.line-l),o=a=t.position,s=!1),de(d)||(a=t.position+1),d=t.input.charCodeAt(++t.position)}return ie(t,o,a,!1),t.result?!0:(t.kind=f,t.result=c,!1)}function Wx(t,e){var i,r,n;if(i=t.input.charCodeAt(t.position),i!==39)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(i=t.input.charCodeAt(t.position))!==0;)if(i===39)if(ie(t,r,t.position,!0),i=t.input.charCodeAt(++t.position),i===39)r=t.position,t.position++,n=t.position;else return!0;else $t(i)?(ie(t,r,n,!0),eo(t,tt(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Br(t)?F(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);F(t,"unexpected end of the stream within a single quoted scalar")}function Hx(t,e){var i,r,n,o,a,s;if(s=t.input.charCodeAt(t.position),s!==34)return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;(s=t.input.charCodeAt(t.position))!==0;){if(s===34)return ie(t,i,t.position,!0),t.position++,!0;if(s===92){if(ie(t,i,t.position,!0),s=t.input.charCodeAt(++t.position),$t(s))tt(t,!1,e);else if(s<256&&Yl[s])t.result+=Vl[s],t.position++;else if((a=Nx(s))>0){for(n=a,o=0;n>0;n--)s=t.input.charCodeAt(++t.position),(a=Dx(s))>=0?o=(o<<4)+a:F(t,"expected hexadecimal character");t.result+=Px(o),t.position++}else F(t,"unknown escape sequence");i=r=t.position}else $t(s)?(ie(t,i,r,!0),eo(t,tt(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Br(t)?F(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}F(t,"unexpected end of the stream within a double quoted scalar")}function jx(t,e){var i=!0,r,n,o,a=t.tag,s,l=t.anchor,h,u,f,c,d,_=Object.create(null),v,B,P,k;if(k=t.input.charCodeAt(t.position),k===91)u=93,d=!1,s=[];else if(k===123)u=125,d=!0,s={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=s),k=t.input.charCodeAt(++t.position);k!==0;){if(tt(t,!0,e),k=t.input.charCodeAt(t.position),k===u)return t.position++,t.tag=a,t.anchor=l,t.kind=d?"mapping":"sequence",t.result=s,!0;i?k===44&&F(t,"expected the node content, but found ','"):F(t,"missed comma between flow collection entries"),B=v=P=null,f=c=!1,k===63&&(h=t.input.charCodeAt(t.position+1),pt(h)&&(f=c=!0,t.position++,tt(t,!0,e))),r=t.line,n=t.lineStart,o=t.position,Pe(t,e,ar,!1,!0),B=t.tag,v=t.result,tt(t,!0,e),k=t.input.charCodeAt(t.position),(c||t.line===r)&&k===58&&(f=!0,k=t.input.charCodeAt(++t.position),tt(t,!0,e),Pe(t,e,ar,!1,!0),P=t.result),d?Ae(t,s,_,B,v,P,r,n,o):f?s.push(Ae(t,null,_,B,v,P,r,n,o)):s.push(v),tt(t,!0,e),k=t.input.charCodeAt(t.position),k===44?(i=!0,k=t.input.charCodeAt(++t.position)):i=!1}F(t,"unexpected end of the stream within a flow collection")}function Ux(t,e){var i,r,n=Zr,o=!1,a=!1,s=e,l=0,h=!1,u,f;if(f=t.input.charCodeAt(t.position),f===124)r=!1;else if(f===62)r=!0;else return!1;for(t.kind="scalar",t.result="";f!==0;)if(f=t.input.charCodeAt(++t.position),f===43||f===45)Zr===n?n=f===43?wa:Ox:F(t,"repeat of a chomping mode identifier");else if((u=Rx(f))>=0)u===0?F(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):a?F(t,"repeat of an indentation width identifier"):(s=e+u-1,a=!0);else break;if(de(f)){do f=t.input.charCodeAt(++t.position);while(de(f));if(f===35)do f=t.input.charCodeAt(++t.position);while(!$t(f)&&f!==0)}for(;f!==0;){for(to(t),t.lineIndent=0,f=t.input.charCodeAt(t.position);(!a||t.lineIndents&&(s=t.lineIndent),$t(f)){l++;continue}if(t.lineIndente)&&l!==0)F(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(B&&(a=t.line,s=t.lineStart,l=t.position),Pe(t,e,sr,!0,n)&&(B?_=t.result:v=t.result),B||(Ae(t,f,c,d,_,v,a,s,l),d=_=v=null),tt(t,!0,-1),k=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&k!==0)F(t,"bad indentation of a mapping entry");else if(t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),f=0,c=t.implicitTypes.length;f"),t.result!==null&&_.kind!==t.kind&&F(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+_.kind+'", not "'+t.kind+'"'),_.resolve(t.result,t.tag)?(t.result=_.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):F(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||u}function Kx(t){var e=t.position,i,r,n,o=!1,a;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(a=t.input.charCodeAt(t.position))!==0&&(tt(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||a!==37));){for(o=!0,a=t.input.charCodeAt(++t.position),i=t.position;a!==0&&!pt(a);)a=t.input.charCodeAt(++t.position);for(r=t.input.slice(i,t.position),n=[],r.length<1&&F(t,"directive name must not be less than one character in length");a!==0;){for(;de(a);)a=t.input.charCodeAt(++t.position);if(a===35){do a=t.input.charCodeAt(++t.position);while(a!==0&&!$t(a));break}if($t(a))break;for(i=t.position;a!==0&&!pt(a);)a=t.input.charCodeAt(++t.position);n.push(t.input.slice(i,t.position))}a!==0&&to(t),ne.call(La,r)?La[r](t,r,n):lr(t,'unknown document directive "'+r+'"')}if(tt(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,tt(t,!0,-1)):o&&F(t,"directives end mark is expected"),Pe(t,t.lineIndent-1,sr,!1,!0),tt(t,!0,-1),t.checkLineBreaks&&Ix.test(t.input.slice(e,t.position))&&lr(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Br(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,tt(t,!0,-1));return}if(t.position"u"&&(i=e,e=null);var r=Xl(t,i);if(typeof e!="function")return r;for(var n=0,o=r.length;nt.replace(/\r\n?/g,` -`).replace(/<(\w+)([^>]*)>/g,(e,i,r)=>"<"+i+r.replace(/="([^"]*)"/g,"='$1'")+">"),ab=t=>{const{text:e,metadata:i}=nb(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},sb=t=>{const e=ii.detectInit(t)??{},i=ii.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some(({type:r})=>{}):(i==null?void 0:i.type)==="wrap"&&(e.wrap=!0),{text:E0(t),directive:e}};function Kl(t){const e=ob(t),i=ab(e),r=sb(i.text),n=al(i.config,r.directive);return t=pC(r.text),{code:t,title:i.title,config:n}}const lb=5e4,hb="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",cb="sandbox",ub="loose",fb="http://www.w3.org/2000/svg",db="http://www.w3.org/1999/xlink",pb="http://www.w3.org/1999/xhtml",gb="100%",mb="100%",_b="border:0;margin:0;",yb="margin:0",Cb="allow-top-navigation-by-user-activation allow-popups",xb='The "iframe" tag is not supported by your browser.',bb=["foreignobject"],Tb=["dominant-baseline"];function Zl(t){const e=Kl(t);return rr(),r_(e.config??{}),e}async function vb(t,e){Jn(),t=Zl(t).code;try{await io(t)}catch(i){if(e!=null&&e.suppressErrors)return!1;throw i}return!0}const Oa=(t,e,i=[])=>` -.${t} ${e} { ${i.join(" !important; ")} !important; }`,kb=(t,e={})=>{var i;let r="";if(t.themeCSS!==void 0&&(r+=` -${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` -:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` -:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!Gr(e)){const s=t.htmlLabels||((i=t.flowchart)==null?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const l in e){const h=e[l];Gr(h.styles)||s.forEach(u=>{r+=Oa(h.id,u,h.styles)}),Gr(h.textStyles)||(r+=Oa(h.id,"tspan",h.textStyles))}}return r},Sb=(t,e,i,r)=>{const n=kb(t,i),o=vy(e,n,t.themeVariables);return pn(Dm(`${r}{${o}}`),Rm)},wb=(t="",e,i)=>{let r=t;return!i&&!e&&(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=Q0(r),r=r.replace(/
/g,"
"),r},Bb=(t="",e)=>{var i,r;const n=(r=(i=e==null?void 0:e.viewBox)==null?void 0:i.baseVal)!=null&&r.height?e.viewBox.baseVal.height+"px":mb,o=btoa(''+t+"");return``},Ma=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns",fb);return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Ia(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Ab=(t,e,i,r)=>{var n,o,a;(n=t.getElementById(e))==null||n.remove(),(o=t.getElementById(i))==null||o.remove(),(a=t.getElementById(r))==null||a.remove()},Lb=async function(t,e,i){var r,n,o,a,s,l;Jn();const h=Zl(e);e=h.code;const u=Nt();E.debug(u),e.length>((u==null?void 0:u.maxTextSize)??lb)&&(e=hb);const f="#"+t,c="i"+t,d="#"+c,_="d"+t,v="#"+_;let B=bt("body");const P=u.securityLevel===cb,k=u.securityLevel===ub,z=u.fontFamily;if(i!==void 0){if(i&&(i.innerHTML=""),P){const T=Ia(bt(i),c);B=bt(T.nodes()[0].contentDocument.body),B.node().style.margin=0}else B=bt(i);Ma(B,t,_,`font-family: ${z}`,db)}else{if(Ab(document,t,_,c),P){const T=Ia(bt("body"),c);B=bt(T.nodes()[0].contentDocument.body),B.node().style.margin=0}else B=bt("body");Ma(B,t,_)}let H,Y;try{H=await io(e,{title:h.title})}catch(T){H=new Dl("error"),Y=T}const K=B.select(v).node(),W=H.type,qt=K.firstChild,Z=qt.firstChild,D=(n=(r=H.renderer).getClasses)==null?void 0:n.call(r,e,H),Lt=Sb(u,W,D,f),zt=document.createElement("style");zt.innerHTML=Lt,qt.insertBefore(zt,Z);try{await H.renderer.draw(e,t,ba,H)}catch(T){throw qy.draw(e,t,ba),T}const M=B.select(`${v} svg`),S=(a=(o=H.db).getAccTitle)==null?void 0:a.call(o),C=(l=(s=H.db).getAccDescription)==null?void 0:l.call(s);Eb(W,M,S,C),B.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",pb);let w=B.select(v).node().innerHTML;if(E.debug("config.arrowMarkerAbsolute",u.arrowMarkerAbsolute),w=wb(w,P,Ks(u.arrowMarkerAbsolute)),P){const T=B.select(v+" svg").node();w=Bb(w,T)}else k||(w=Ie.sanitize(w,{ADD_TAGS:bb,ADD_ATTR:Tb}));if(cC(),Y)throw Y;const I=bt(P?d:v).node();return I&&"remove"in I&&I.remove(),{svg:w,bindFunctions:H.db.bindFunctions}};function Fb(t={}){var e;t!=null&&t.fontFamily&&!((e=t.themeVariables)!=null&&e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),e_(t),t!=null&&t.theme&&t.theme in Kt?t.themeVariables=Kt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Kt.default.getThemeVariables(t.themeVariables));const i=typeof t=="object"?t_(t):ll();zn(i.logLevel),Jn()}const io=(t,e={})=>{const{code:i}=Kl(t);return hC(i,e)};function Eb(t,e,i,r){fC(e,t),dC(e,i,r,e.attr("id"))}const me=Object.freeze({render:Lb,parse:vb,getDiagramFromText:io,initialize:Fb,getConfig:Nt,setConfig:hl,getSiteConfig:ll,updateSiteConfig:i_,reset:()=>{rr()},globalReset:()=>{rr(Ne)},defaultConfig:Ne});zn(Nt().logLevel);rr(Nt());const Ob=async()=>{E.debug("Loading registered diagrams");const e=(await Promise.allSettled(Object.entries(De).map(async([i,{detector:r,loader:n}])=>{if(n)try{Zn(i)}catch{try{const{diagram:a,id:s}=await n();or(s,a,r)}catch(a){throw E.error(`Failed to load external diagram with key ${i}. Removing from detectors.`),delete De[i],a}}}))).filter(i=>i.status==="rejected");if(e.length>0){E.error(`Failed to load ${e.length} external diagrams`);for(const i of e)E.error(i);throw new Error(`Failed to load ${e.length} external diagrams`)}},Mb=(t,e,i)=>{E.warn(t),ol(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Jl=async function(t={querySelector:".mermaid"}){try{await Ib(t)}catch(e){if(ol(e)&&E.error(e.str),gt.parseError&>.parseError(e),!t.suppressErrors)throw E.error("Use the suppressErrors option to suppress these errors"),e}},Ib=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const r=me.getConfig();E.debug(`${t?"":"No "}Callback function found`);let n;if(i)n=i;else if(e)n=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");E.debug(`Found ${n.length} diagrams`),(r==null?void 0:r.startOnLoad)!==void 0&&(E.debug("Start On Load: "+(r==null?void 0:r.startOnLoad)),me.updateSiteConfig({startOnLoad:r==null?void 0:r.startOnLoad}));const o=new ii.InitIDGenerator(r.deterministicIds,r.deterministicIDSeed);let a;const s=[];for(const l of Array.from(n)){E.info("Rendering diagram: "+l.id);/*! Check if previously processed */if(l.getAttribute("data-processed"))continue;l.setAttribute("data-processed","true");const h=`mermaid-${o.next()}`;a=l.innerHTML,a=$h(ii.entityDecode(a)).trim().replace(//gi,"
");const u=ii.detectInit(a);u&&E.debug("Detected early reinit: ",u);try{const{svg:f,bindFunctions:c}=await ih(h,a,l);l.innerHTML=f,t&&await t(h),c&&c(l)}catch(f){Mb(f,s,gt.parseError)}}if(s.length>0)throw s[0]},Ql=function(t){me.initialize(t)},$b=async function(t,e,i){E.warn("mermaid.init is deprecated. Please use run instead."),t&&Ql(t);const r={postRenderCallback:i,querySelector:".mermaid"};typeof e=="string"?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await Jl(r)},Db=async(t,{lazyLoad:e=!0}={})=>{el(...t),e===!1&&await Ob()},th=function(){if(gt.startOnLoad){const{startOnLoad:t}=me.getConfig();t&>.run().catch(e=>E.error("Mermaid failed to initialize",e))}};if(typeof document<"u"){/*! - * Wait for document loaded before starting the execution - */window.addEventListener("load",th,!1)}const Nb=function(t){gt.parseError=t},hr=[];let Jr=!1;const eh=async()=>{if(!Jr){for(Jr=!0;hr.length>0;){const t=hr.shift();if(t)try{await t()}catch(e){E.error("Error executing queue",e)}}Jr=!1}},Rb=async(t,e)=>new Promise((i,r)=>{const n=()=>new Promise((o,a)=>{me.parse(t,e).then(s=>{o(s),i(s)},s=>{var l;E.error("Error parsing",s),(l=gt.parseError)==null||l.call(gt,s),a(s),r(s)})});hr.push(n),eh().catch(r)}),ih=(t,e,i)=>new Promise((r,n)=>{const o=()=>new Promise((a,s)=>{me.render(t,e,i).then(l=>{a(l),r(l)},l=>{var h;E.error("Error parsing",l),(h=gt.parseError)==null||h.call(gt,l),s(l),n(l)})});hr.push(o),eh().catch(n)}),gt={startOnLoad:!0,mermaidAPI:me,parse:Rb,render:ih,init:$b,run:Jl,registerExternalDiagrams:Db,initialize:Ql,parseError:void 0,contentLoaded:th,setParseErrorHandler:Nb,detectType:Sr},Pb=async t=>{try{gt.registerExternalDiagrams&&await gt.registerExternalDiagrams(t)}catch(e){console.error(e)}},qb=async(t,e,i)=>{gt.initialize(i);const{svg:r}=await gt.render(t,e);return r},zb=["innerHTML"],Wb={__name:"Mermaid",props:{graph:{type:String,required:!0},id:{type:String,required:!0},class:{type:String,required:!1,default:"mermaid"}},setup(t){const e=t,i=xo({securityLevel:"loose",startOnLoad:!1,externalDiagrams:[]}),{page:r}=$a(),{frontmatter:n}=dh(r.value),o=n.mermaidTheme||"",a=xo(null);let s=null;Da(async()=>{var f;await Pb(i.value.externalDiagrams);let h=await G(()=>import("./chunks/virtual_mermaid-config.DDnGl6nM.js"),[]);h!=null&&h.default&&(i.value=h.default),s=new MutationObserver(async()=>await l()),s.observe(document.documentElement,{attributes:!0}),await l(),((f=//.exec(decodeURIComponent(e.graph)))==null?void 0:f.length)>0&&setTimeout(()=>{let c=document.getElementsByTagName("img"),d=Array.from(c);d.length&&Promise.all(d.filter(_=>!_.complete).map(_=>new Promise(v=>{_.onload=_.onerror=v}))).then(async()=>{await l()})},100)}),ph(()=>s.disconnect());const l=async()=>{const h=document.documentElement.classList.contains("dark");let u={...i.value};o&&(u.theme=o),h&&(u.theme="dark");let f=await qb(e.id,decodeURIComponent(e.graph),u);const c=Math.random().toString(36).substring(7);a.value=`${f} ${c}`};return(h,u)=>(gh(),mh("div",{innerHTML:a.value,class:_h(e.class)},null,10,zb))}};function rh(t){if(t.extends){const e=rh(t.extends);return{...e,...t,async enhanceApp(i){e.enhanceApp&&await e.enhanceApp(i),t.enhanceApp&&await t.enhanceApp(i)}}}return t}const Ee=rh(Ih),Hb=Ah({name:"VitePressApp",setup(){const{site:t,lang:e,dir:i}=$a();return Da(()=>{Lh(()=>{document.documentElement.lang=e.value,document.documentElement.dir=i.value})}),t.value.router.prefetchLinks&&Fh(),Eh(),Oh(),Ee.setup&&Ee.setup(),()=>Mh(Ee.Layout)}});async function jb(){globalThis.__VITEPRESS__=!0;const t=Yb(),e=Ub();e.provide(Ch,t);const i=xh(t.route);return e.provide(bh,i),e.component("Mermaid",Wb),e.component("Content",Th),e.component("ClientOnly",vh),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}}),Ee.enhanceApp&&await Ee.enhanceApp({app:e,router:t,siteData:kh}),{app:e,router:t,data:i}}function Ub(){return Sh(Hb)}function Yb(){let t=Qr,e;return wh(i=>{let r=Bh(i),n=null;return r&&(t&&(e=r),(t||e===r)&&(r=r.replace(/\.js$/,".lean.js")),n=import(r)),Qr&&(t=!1),n},Ee.NotFound)}Qr&&jb().then(({app:t,router:e,data:i})=>{e.go().then(()=>{yh(e.route,i.site),t.mount("#app")})});export{Nn as $,ii as A,Qe as B,Ci as C,p1 as D,Ly as E,Fy as F,ky as G,yi as H,qe as I,Zi as J,tr as K,xr as L,im as M,Wm as N,_i as O,Qi as P,Kg as Q,qs as R,yt as S,Ms as T,tg as U,eg as V,le as W,aa as X,Ug as Y,_e as Z,ig as _,Ay as a,l1 as a$,Qp as a0,og as a1,ze as a2,Xg as a3,oe as a4,mr as a5,ea as a6,Rn as a7,$s as a8,Ps as a9,Kb as aA,Ph as aB,wn as aC,ee as aD,ai as aE,Eo as aF,Nu as aG,Ry as aH,n1 as aI,v0 as aJ,al as aK,Un as aL,Fn as aM,Qb as aN,i1 as aO,Ro as aP,No as aQ,r1 as aR,e1 as aS,Zb as aT,Jb as aU,a1 as aV,o1 as aW,t1 as aX,_0 as aY,Nt as aZ,ya as a_,Ws as aa,Zp as ab,_n as ac,ym as ad,cg as ae,um as af,Gr as ag,_m as ah,cm as ai,Cm as aj,Dn as ak,bm as al,$ as am,Dt as an,Q0 as ao,nd as ap,$h as aq,s1 as ar,$y as as,H0 as at,Sn as au,Ja as av,dt as aw,gi as ax,Fu as ay,es as az,By as b,B0 as b0,z0 as b1,Dh as b2,Nh as b3,Ey as b4,mi as b5,L as b6,O as b7,Kn as c,jb as createApp,fi as d,at as e,ir as f,wy as g,bt as h,Ll as i,Wn as j,G0 as k,E as l,Ra as m,ed as n,q0 as o,Ks as p,M0 as q,u0 as r,Sy as s,xy as t,d1 as u,Za as v,Y0 as w,Vh as x,Cg as y,$n as z}; diff --git a/assets/app.DRN3unl1.js b/assets/app.DRN3unl1.js new file mode 100644 index 00000000..1a22628b --- /dev/null +++ b/assets/app.DRN3unl1.js @@ -0,0 +1,91 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/c4Diagram-dc8f04df.CKb4DDrj.js","assets/chunks/svgDrawCommon-9d162435.wUjoN1G-.js","assets/chunks/framework.B49Yz1nR.js","assets/chunks/theme.BlGa_csg.js","assets/chunks/flowDiagram-622f9fc1.UNHUO6YN.js","assets/chunks/flowDb-0da60e67.CpQFkmn8.js","assets/chunks/graph.C4kgFXP1.js","assets/chunks/layout.C5Nv6jKv.js","assets/chunks/styles-422bd1c9.CNvCrs-e.js","assets/chunks/index-9620d214.nAHig6oE.js","assets/chunks/clone.Bnzwv1hF.js","assets/chunks/edges-5962ec63.BFgoqf-O.js","assets/chunks/createText-4a4f35c9.Cu3K6_Cl.js","assets/chunks/line.DpDoeUQJ.js","assets/chunks/array.BKyUJesY.js","assets/chunks/path.CbwjOpE9.js","assets/chunks/channel.Bgp4IlJX.js","assets/chunks/flowDiagram-v2-a33b4996.npThVBEn.js","assets/chunks/erDiagram-51d2b61e.BKvP5nV4.js","assets/chunks/gitGraphDiagram-23af1bdb.xtAOwR_N.js","assets/chunks/ganttDiagram-a649f789.B3MVSZyS.js","assets/chunks/linear.DG04O0I7.js","assets/chunks/init.Gi6I4Gst.js","assets/chunks/infoDiagram-f86e0131.CYcEreMK.js","assets/chunks/pieDiagram-31d824a1.BcWock7l.js","assets/chunks/arc.CbQZFRTr.js","assets/chunks/ordinal.BYWQX77i.js","assets/chunks/quadrantDiagram-a712a7d9.CBHMGHp7.js","assets/chunks/xychartDiagram-4a8b8217.BboCrNzl.js","assets/chunks/requirementDiagram-eb878fee.DLnn6pB1.js","assets/chunks/sequenceDiagram-66748113.CycNJCqh.js","assets/chunks/classDiagram-8298e144.B6ahrBSz.js","assets/chunks/styles-e2b9d258.DqwhFH5o.js","assets/chunks/classDiagram-v2-296fb1cd.BlvxQji3.js","assets/chunks/stateDiagram-35d39939.CGFuH3-m.js","assets/chunks/styles-de3becd0.CAskXyHY.js","assets/chunks/stateDiagram-v2-6c43c13a.on8Hb2_5.js","assets/chunks/journeyDiagram-de0d04b7.Cjc0E3Qw.js","assets/chunks/flowchart-elk-definition-930acc39.RaYPOHcR.js","assets/chunks/timeline-definition-6eaa3543.oX4ehz4e.js","assets/chunks/mindmap-definition-b08d3ac4.BURIHg2K.js","assets/chunks/sankeyDiagram-c599f8ec.DnE5IYY2.js","assets/chunks/Tableau10.B-NsZVaP.js","assets/chunks/blockDiagram-a8a0820c.B3oN9ihx.js"])))=>i.map(i=>d[i]); +import{Y as K,s as Lo,u as Ua,a8 as vc,y as Ya,z as kc,o as Sc,c as wc,n as Bc,U as nn,a9 as Ac,aa as Lc,ab as Fc,ac as Ec,ad as Oc,ae as Mc,af as Ic,ag as $c,ah as Dc,ai as Nc,d as Rc,x as Pc,aj as qc,ak as zc,al as Wc,a5 as Hc}from"./chunks/framework.B49Yz1nR.js";import{R as jc}from"./chunks/theme.BlGa_csg.js";function Uc(t){for(var e=[],i=1;i=x?M:""+Array(x+1-k.length).join(C)+M},D={s:Y,z:function(M){var x=-M.utcOffset(),C=Math.abs(x),k=Math.floor(C/60),T=C%60;return(x<=0?"+":"-")+Y(k,2,"0")+":"+Y(T,2,"0")},m:function M(x,C){if(x.date()1)return M(F[0])}else{var H=x.name;X[H]=x,T=H}return!k&&T&&(U=T),T||!k&&U},Z=function(M,x){if(z(M))return M.clone();var C=typeof x=="object"?x:{};return C.date=M,C.args=arguments,new rt(C)},W=D;W.l=Wt,W.i=z,W.w=function(M,x){return Z(M,{locale:x.$L,utc:x.$u,x:x.$x,$offset:x.$offset})};var rt=function(){function M(C){this.$L=Wt(C.locale,null,!0),this.parse(C)}var x=M.prototype;return x.parse=function(C){this.$d=function(k){var T=k.date,I=k.utc;if(T===null)return new Date(NaN);if(W.u(T))return new Date;if(T instanceof Date)return new Date(T);if(typeof T=="string"&&!/Z$/i.test(T)){var F=T.match(S);if(F){var H=F[2]-1||0,N=(F[7]||"0").substring(0,3);return I?new Date(Date.UTC(F[1],H,F[3]||1,F[4]||0,F[5]||0,F[6]||0,N)):new Date(F[1],H,F[3]||1,F[4]||0,F[5]||0,F[6]||0,N)}}return new Date(T)}(C),this.$x=C.x||{},this.init()},x.init=function(){var C=this.$d;this.$y=C.getFullYear(),this.$M=C.getMonth(),this.$D=C.getDate(),this.$W=C.getDay(),this.$H=C.getHours(),this.$m=C.getMinutes(),this.$s=C.getSeconds(),this.$ms=C.getMilliseconds()},x.$utils=function(){return W},x.isValid=function(){return this.$d.toString()!==b},x.isSame=function(C,k){var T=Z(C);return this.startOf(k)<=T&&T<=this.endOf(k)},x.isAfter=function(C,k){return Z(C)-1}function l(u){var f=u.replace(n,"");return f.replace(i,function(h,p){return String.fromCharCode(p)})}function c(u){if(!u)return t.BLANK_URL;var f=l(u).replace(r,"").replace(n,"").trim();if(!f)return t.BLANK_URL;if(s(f))return f;var h=f.match(o);if(!h)return f;var p=h[0];return e.test(p)?t.BLANK_URL:f}t.sanitizeUrl=c})(Ga);var Kc={value:()=>{}};function Xa(){for(var t=0,e=arguments.length,i={},r;t=0&&(r=i.slice(n+1),i=i.slice(0,n)),i&&!e.hasOwnProperty(i))throw new Error("unknown type: "+i);return{type:i,name:r}})}Ri.prototype=Xa.prototype={constructor:Ri,on:function(t,e){var i=this._,r=Zc(t+"",i),n,o=-1,a=r.length;if(arguments.length<2){for(;++o0)for(var i=new Array(n),r=0,n,o;r=0&&(e=t.slice(0,i))!=="xmlns"&&(t=t.slice(i+1)),Eo.hasOwnProperty(e)?{space:Eo[e],local:t}:t}function Qc(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===on&&e.documentElement.namespaceURI===on?e.createElement(t):e.createElementNS(i,t)}}function th(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Ka(t){var e=gr(t);return(e.local?th:Qc)(e)}function eh(){}function Bn(t){return t==null?eh:function(){return this.querySelector(t)}}function ih(t){typeof t!="function"&&(t=Bn(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n=Y&&(Y=v+1);!(U=S[Y])&&++Y=0;)(a=r[n])&&(o&&a.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(a,o),o=a);return this}function Bh(t){t||(t=Ah);function e(f,h){return f&&h?t(f.__data__,h.__data__):!f-!h}for(var i=this._groups,r=i.length,n=new Array(r),o=0;oe?1:t>=e?0:NaN}function Lh(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Fh(){return Array.from(this)}function Eh(){for(var t=this._groups,e=0,i=t.length;e1?this.each((e==null?Wh:typeof e=="function"?jh:Hh)(t,e,i??"")):Me(this.node(),t)}function Me(t,e){return t.style.getPropertyValue(e)||es(t).getComputedStyle(t,null).getPropertyValue(e)}function Yh(t){return function(){delete this[t]}}function Vh(t,e){return function(){this[t]=e}}function Gh(t,e){return function(){var i=e.apply(this,arguments);i==null?delete this[t]:this[t]=i}}function Xh(t,e){return arguments.length>1?this.each((e==null?Yh:typeof e=="function"?Gh:Vh)(t,e)):this.node()[t]}function is(t){return t.trim().split(/^|\s+/)}function An(t){return t.classList||new rs(t)}function rs(t){this._node=t,this._names=is(t.getAttribute("class")||"")}rs.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function ns(t,e){for(var i=An(t),r=-1,n=e.length;++r=0&&(i=e.slice(r+1),e=e.slice(0,r)),{type:e,name:i}})}function vu(t){return function(){var e=this.__on;if(e){for(var i=0,r=-1,n=e.length,o;i>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):i===8?Ei(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):i===4?Ei(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=Ou.exec(t))?new _t(e[1],e[2],e[3],1):(e=Mu.exec(t))?new _t(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=Iu.exec(t))?Ei(e[1],e[2],e[3],e[4]):(e=$u.exec(t))?Ei(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=Du.exec(t))?Ro(e[1],e[2]/100,e[3]/100,1):(e=Nu.exec(t))?Ro(e[1],e[2]/100,e[3]/100,e[4]):Oo.hasOwnProperty(t)?$o(Oo[t]):t==="transparent"?new _t(NaN,NaN,NaN,0):null}function $o(t){return new _t(t>>16&255,t>>8&255,t&255,1)}function Ei(t,e,i,r){return r<=0&&(t=e=i=NaN),new _t(t,e,i,r)}function qu(t){return t instanceof bi||(t=fi(t)),t?(t=t.rgb(),new _t(t.r,t.g,t.b,t.opacity)):new _t}function an(t,e,i,r){return arguments.length===1?qu(t):new _t(t,e,i,r??1)}function _t(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}Ln(_t,an,ls(bi,{brighter(t){return t=t==null?Gi:Math.pow(Gi,t),new _t(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?hi:Math.pow(hi,t),new _t(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new _t(de(this.r),de(this.g),de(this.b),Xi(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:Do,formatHex:Do,formatHex8:zu,formatRgb:No,toString:No}));function Do(){return`#${ue(this.r)}${ue(this.g)}${ue(this.b)}`}function zu(){return`#${ue(this.r)}${ue(this.g)}${ue(this.b)}${ue((isNaN(this.opacity)?1:this.opacity)*255)}`}function No(){const t=Xi(this.opacity);return`${t===1?"rgb(":"rgba("}${de(this.r)}, ${de(this.g)}, ${de(this.b)}${t===1?")":`, ${t})`}`}function Xi(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function de(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ue(t){return t=de(t),(t<16?"0":"")+t.toString(16)}function Ro(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new Ft(t,e,i,r)}function cs(t){if(t instanceof Ft)return new Ft(t.h,t.s,t.l,t.opacity);if(t instanceof bi||(t=fi(t)),!t)return new Ft;if(t instanceof Ft)return t;t=t.rgb();var e=t.r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(e===o?a=(i-r)/s+(i0&&l<1?0:a,new Ft(a,s,l,t.opacity)}function Wu(t,e,i,r){return arguments.length===1?cs(t):new Ft(t,e,i,r??1)}function Ft(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}Ln(Ft,Wu,ls(bi,{brighter(t){return t=t==null?Gi:Math.pow(Gi,t),new Ft(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?hi:Math.pow(hi,t),new Ft(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new _t(zr(t>=240?t-240:t+120,n,r),zr(t,n,r),zr(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new Ft(Po(this.h),Oi(this.s),Oi(this.l),Xi(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 t=Xi(this.opacity);return`${t===1?"hsl(":"hsla("}${Po(this.h)}, ${Oi(this.s)*100}%, ${Oi(this.l)*100}%${t===1?")":`, ${t})`}`}}));function Po(t){return t=(t||0)%360,t<0?t+360:t}function Oi(t){return Math.max(0,Math.min(1,t||0))}function zr(t,e,i){return(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)*255}const Fn=t=>()=>t;function hs(t,e){return function(i){return t+i*e}}function Hu(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}function n1(t,e){var i=e-t;return i?hs(t,i>180||i<-180?i-360*Math.round(i/360):i):Fn(isNaN(t)?e:t)}function ju(t){return(t=+t)==1?us:function(e,i){return i-e?Hu(e,i,t):Fn(isNaN(e)?i:e)}}function us(t,e){var i=e-t;return i?hs(t,i):Fn(isNaN(t)?e:t)}const qo=function t(e){var i=ju(e);function r(n,o){var a=i((n=an(n)).r,(o=an(o)).r),s=i(n.g,o.g),l=i(n.b,o.b),c=us(n.opacity,o.opacity);return function(u){return n.r=a(u),n.g=s(u),n.b=l(u),n.opacity=c(u),n+""}}return r.gamma=t,r}(1);function re(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var sn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Wr=new RegExp(sn.source,"g");function Uu(t){return function(){return t}}function Yu(t){return function(e){return t(e)+""}}function Vu(t,e){var i=sn.lastIndex=Wr.lastIndex=0,r,n,o,a=-1,s=[],l=[];for(t=t+"",e=e+"";(r=sn.exec(t))&&(n=Wr.exec(e));)(o=n.index)>i&&(o=e.slice(i,o),s[a]?s[a]+=o:s[++a]=o),(r=r[0])===(n=n[0])?s[a]?s[a]+=n:s[++a]=n:(s[++a]=null,l.push({i:a,x:re(r,n)})),i=Wr.lastIndex;return i180?u+=360:u-c>180&&(c+=360),h.push({i:f.push(n(f)+"rotate(",null,r)-2,x:re(c,u)})):u&&f.push(n(f)+"rotate("+u+r)}function s(c,u,f,h){c!==u?h.push({i:f.push(n(f)+"skewX(",null,r)-2,x:re(c,u)}):u&&f.push(n(f)+"skewX("+u+r)}function l(c,u,f,h,p,m){if(c!==f||u!==h){var b=p.push(n(p)+"scale(",null,",",null,")");m.push({i:b-4,x:re(c,f)},{i:b-2,x:re(u,h)})}else(f!==1||h!==1)&&p.push(n(p)+"scale("+f+","+h+")")}return function(c,u){var f=[],h=[];return c=t(c),u=t(u),o(c.translateX,c.translateY,u.translateX,u.translateY,f,h),a(c.rotate,u.rotate,f,h),s(c.skewX,u.skewX,f,h),l(c.scaleX,c.scaleY,u.scaleX,u.scaleY,f,h),c=u=null,function(p){for(var m=-1,b=h.length,S;++m=0&&t._call.call(void 0,e),t=t._next;--Ie}function Wo(){me=(Zi=di.now())+mr,Ie=ti=0;try{Qu()}finally{Ie=0,ef(),me=0}}function tf(){var t=di.now(),e=t-Zi;e>ps&&(mr-=e,Zi=t)}function ef(){for(var t,e=Ki,i,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(i=e._next,e._next=null,e=t?t._next=i:Ki=i);ei=t,cn(r)}function cn(t){if(!Ie){ti&&(ti=clearTimeout(ti));var e=t-me;e>24?(t<1/0&&(ti=setTimeout(Wo,t-di.now()-mr)),Ve&&(Ve=clearInterval(Ve))):(Ve||(Zi=di.now(),Ve=setInterval(tf,ps)),Ie=1,gs(Wo))}}function Ho(t,e,i){var r=new Ji;return e=e==null?0:+e,r.restart(n=>{r.stop(),t(n+e)},e,i),r}var rf=Xa("start","end","cancel","interrupt"),nf=[],_s=0,jo=1,hn=2,Pi=3,Uo=4,un=5,qi=6;function _r(t,e,i,r,n,o){var a=t.__transition;if(!a)t.__transition={};else if(i in a)return;of(t,i,{name:e,index:r,group:n,on:rf,tween:nf,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:_s})}function On(t,e){var i=Ot(t,e);if(i.state>_s)throw new Error("too late; already scheduled");return i}function qt(t,e){var i=Ot(t,e);if(i.state>Pi)throw new Error("too late; already running");return i}function Ot(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function of(t,e,i){var r=t.__transition,n;r[e]=i,i.timer=ms(o,0,i.time);function o(c){i.state=jo,i.timer.restart(a,i.delay,i.time),i.delay<=c&&a(c-i.delay)}function a(c){var u,f,h,p;if(i.state!==jo)return l();for(u in r)if(p=r[u],p.name===i.name){if(p.state===Pi)return Ho(a);p.state===Uo?(p.state=qi,p.timer.stop(),p.on.call("interrupt",t,t.__data__,p.index,p.group),delete r[u]):+uhn&&r.state=0&&(e=e.slice(0,i)),!e||e==="start"})}function Df(t,e,i){var r,n,o=$f(e)?On:qt;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}function Nf(t,e){var i=this._id;return arguments.length<2?Ot(this.node(),i).on.on(t):this.each(Df(i,t,e))}function Rf(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}function Pf(){return this.on("end.remove",Rf(this._id))}function qf(t){var e=this._name,i=this._id;typeof t!="function"&&(t=Bn(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a1?0:t<-1?In:Math.acos(t)}function p1(t){return t>=1?Vo:t<=-1?-Vo:Math.asin(t)}function bs(t){this._context=t}bs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function ud(t){return new bs(t)}class Ts{constructor(e,i){this._context=e,this._x=i}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,i){switch(e=+e,i=+i,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,i):this._context.moveTo(e,i);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,i,e,i):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+i)/2,e,this._y0,e,i);break}}this._x0=e,this._y0=i}}function fd(t){return new Ts(t,!0)}function dd(t){return new Ts(t,!1)}function oe(){}function Qi(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function yr(t){this._context=t}yr.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Qi(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Qi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function pd(t){return new yr(t)}function vs(t){this._context=t}vs.prototype={areaStart:oe,areaEnd:oe,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:Qi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function gd(t){return new vs(t)}function ks(t){this._context=t}ks.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:Qi(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function md(t){return new ks(t)}function Ss(t,e){this._basis=new yr(t),this._beta=e}Ss.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r=t[0],n=e[0],o=t[i]-r,a=e[i]-n,s=-1,l;++s<=i;)l=s/i,this._basis.point(this._beta*t[s]+(1-this._beta)*(r+l*o),this._beta*e[s]+(1-this._beta)*(n+l*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const _d=function t(e){function i(r){return e===1?new yr(r):new Ss(r,e)}return i.beta=function(r){return t(+r)},i}(.85);function tr(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function $n(t,e){this._context=t,this._k=(1-e)/6}$n.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:tr(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:tr(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const yd=function t(e){function i(r){return new $n(r,e)}return i.tension=function(r){return t(+r)},i}(0);function Dn(t,e){this._context=t,this._k=(1-e)/6}Dn.prototype={areaStart:oe,areaEnd:oe,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:tr(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Cd=function t(e){function i(r){return new Dn(r,e)}return i.tension=function(r){return t(+r)},i}(0);function Nn(t,e){this._context=t,this._k=(1-e)/6}Nn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:tr(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const xd=function t(e){function i(r){return new Nn(r,e)}return i.tension=function(r){return t(+r)},i}(0);function Rn(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Yo){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Yo){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,u=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-e*t._l12_2a)/u,a=(a*c+t._y1*t._l23_2a-i*t._l12_2a)/u}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function ws(t,e){this._context=t,this._alpha=e}ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Rn(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const bd=function t(e){function i(r){return e?new ws(r,e):new $n(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function Bs(t,e){this._context=t,this._alpha=e}Bs.prototype={areaStart:oe,areaEnd:oe,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Rn(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Td=function t(e){function i(r){return e?new Bs(r,e):new Dn(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function As(t,e){this._context=t,this._alpha=e}As.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Rn(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const vd=function t(e){function i(r){return e?new As(r,e):new Nn(r,0)}return i.alpha=function(r){return t(+r)},i}(.5);function Ls(t){this._context=t}Ls.prototype={areaStart:oe,areaEnd:oe,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function kd(t){return new Ls(t)}function Go(t){return t<0?-1:1}function Xo(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Go(o)+Go(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Ko(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Hr(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function er(t){this._context=t}er.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Hr(this,this._t0,Ko(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Hr(this,Ko(this,i=Xo(this,t,e)),i);break;default:Hr(this,this._t0,i=Xo(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}};function Fs(t){this._context=new Es(t)}(Fs.prototype=Object.create(er.prototype)).point=function(t,e){er.prototype.point.call(this,e,t)};function Es(t){this._context=t}Es.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}};function Sd(t){return new er(t)}function wd(t){return new Fs(t)}function Os(t){this._context=t}Os.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),i===2)this._context.lineTo(t[1],e[1]);else for(var r=Zo(t),n=Zo(e),o=0,a=1;a=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[i-1]=(t[i]+n[i-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}break}}this._x=t,this._y=e}};function Ad(t){return new Cr(t,.5)}function Ld(t){return new Cr(t,0)}function Fd(t){return new Cr(t,1)}function ii(t,e,i){this.k=t,this.x=e,this.y=i}ii.prototype={constructor:ii,scale:function(t){return t===1?this:new ii(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new ii(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};ii.prototype;/*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE */const{entries:Ms,setPrototypeOf:Jo,isFrozen:Ed,getPrototypeOf:Od,getOwnPropertyDescriptor:Md}=Object;let{freeze:pt,seal:St,create:Is}=Object,{apply:fn,construct:dn}=typeof Reflect<"u"&&Reflect;pt||(pt=function(e){return e});St||(St=function(e){return e});fn||(fn=function(e,i,r){return e.apply(i,r)});dn||(dn=function(e,i){return new e(...i)});const Ii=Tt(Array.prototype.forEach),Qo=Tt(Array.prototype.pop),Ge=Tt(Array.prototype.push),zi=Tt(String.prototype.toLowerCase),jr=Tt(String.prototype.toString),ta=Tt(String.prototype.match),Xe=Tt(String.prototype.replace),Id=Tt(String.prototype.indexOf),$d=Tt(String.prototype.trim),Lt=Tt(Object.prototype.hasOwnProperty),ut=Tt(RegExp.prototype.test),Ke=Dd(TypeError);function Tt(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n2&&arguments[2]!==void 0?arguments[2]:zi;Jo&&Jo(t,null);let r=e.length;for(;r--;){let n=e[r];if(typeof n=="string"){const o=i(n);o!==n&&(Ed(e)||(e[r]=o),n=o)}t[n]=!0}return t}function Nd(t){for(let e=0;e/gm),Wd=St(/\${[\w\W]*}/gm),Hd=St(/^data-[\-\w.\u00B7-\uFFFF]/),jd=St(/^aria-[\-\w]+$/),$s=St(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Ud=St(/^(?:\w+script|data):/i),Yd=St(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Ds=St(/^html$/i),Vd=St(/^[a-z][.\w]*(-[.\w]+)+$/i);var oa=Object.freeze({__proto__:null,MUSTACHE_EXPR:qd,ERB_EXPR:zd,TMPLIT_EXPR:Wd,DATA_ATTR:Hd,ARIA_ATTR:jd,IS_ALLOWED_URI:$s,IS_SCRIPT_OR_DATA:Ud,ATTR_WHITESPACE:Yd,DOCTYPE_NAME:Ds,CUSTOM_ELEMENT:Vd});const Je={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Gd=function(){return typeof window>"u"?null:window},Xd=function(e,i){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let r=null;const n="data-tt-policy-suffix";i&&i.hasAttribute(n)&&(r=i.getAttribute(n));const o="dompurify"+(r?"#"+r:"");try{return e.createPolicy(o,{createHTML(a){return a},createScriptURL(a){return a}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function Ns(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Gd();const e=B=>Ns(B);if(e.version="3.1.6",e.removed=[],!t||!t.document||t.document.nodeType!==Je.document)return e.isSupported=!1,e;let{document:i}=t;const r=i,n=r.currentScript,{DocumentFragment:o,HTMLTemplateElement:a,Node:s,Element:l,NodeFilter:c,NamedNodeMap:u=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:f,DOMParser:h,trustedTypes:p}=t,m=l.prototype,b=Ze(m,"cloneNode"),S=Ze(m,"remove"),R=Ze(m,"nextSibling"),v=Ze(m,"childNodes"),Y=Ze(m,"parentNode");if(typeof a=="function"){const B=i.createElement("template");B.content&&B.content.ownerDocument&&(i=B.content.ownerDocument)}let D,U="";const{implementation:X,createNodeIterator:z,createDocumentFragment:Wt,getElementsByTagName:Z}=i,{importNode:W}=r;let rt={};e.isSupported=typeof Ms=="function"&&typeof Y=="function"&&X&&X.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:Ht,ERB_EXPR:M,TMPLIT_EXPR:x,DATA_ATTR:C,ARIA_ATTR:k,IS_SCRIPT_OR_DATA:T,ATTR_WHITESPACE:I,CUSTOM_ELEMENT:F}=oa;let{IS_ALLOWED_URI:H}=oa,N=null;const J=P({},[...ea,...Ur,...Yr,...Vr,...ia]);let q=null;const ct=P({},[...ra,...Gr,...na,...$i]);let j=Object.seal(Is(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),xt=null,jt=null,Mt=!0,et=!0,Bt=!1,ee=!0,At=!1,Mr=!0,le=!1,Ir=!1,$r=!1,Te=!1,wi=!1,Bi=!1,so=!0,lo=!1;const gc="user-content-";let Dr=!0,je=!1,ve={},ke=null;const co=P({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let ho=null;const uo=P({},["audio","video","img","source","image","track"]);let Nr=null;const fo=P({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ai="http://www.w3.org/1998/Math/MathML",Li="http://www.w3.org/2000/svg",Ut="http://www.w3.org/1999/xhtml";let Se=Ut,Rr=!1,Pr=null;const mc=P({},[Ai,Li,Ut],jr);let Ue=null;const _c=["application/xhtml+xml","text/html"],yc="text/html";let it=null,we=null;const Cc=i.createElement("form"),po=function(d){return d instanceof RegExp||d instanceof Function},qr=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(we&&we===d)){if((!d||typeof d!="object")&&(d={}),d=ce(d),Ue=_c.indexOf(d.PARSER_MEDIA_TYPE)===-1?yc:d.PARSER_MEDIA_TYPE,it=Ue==="application/xhtml+xml"?jr:zi,N=Lt(d,"ALLOWED_TAGS")?P({},d.ALLOWED_TAGS,it):J,q=Lt(d,"ALLOWED_ATTR")?P({},d.ALLOWED_ATTR,it):ct,Pr=Lt(d,"ALLOWED_NAMESPACES")?P({},d.ALLOWED_NAMESPACES,jr):mc,Nr=Lt(d,"ADD_URI_SAFE_ATTR")?P(ce(fo),d.ADD_URI_SAFE_ATTR,it):fo,ho=Lt(d,"ADD_DATA_URI_TAGS")?P(ce(uo),d.ADD_DATA_URI_TAGS,it):uo,ke=Lt(d,"FORBID_CONTENTS")?P({},d.FORBID_CONTENTS,it):co,xt=Lt(d,"FORBID_TAGS")?P({},d.FORBID_TAGS,it):{},jt=Lt(d,"FORBID_ATTR")?P({},d.FORBID_ATTR,it):{},ve=Lt(d,"USE_PROFILES")?d.USE_PROFILES:!1,Mt=d.ALLOW_ARIA_ATTR!==!1,et=d.ALLOW_DATA_ATTR!==!1,Bt=d.ALLOW_UNKNOWN_PROTOCOLS||!1,ee=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,At=d.SAFE_FOR_TEMPLATES||!1,Mr=d.SAFE_FOR_XML!==!1,le=d.WHOLE_DOCUMENT||!1,Te=d.RETURN_DOM||!1,wi=d.RETURN_DOM_FRAGMENT||!1,Bi=d.RETURN_TRUSTED_TYPE||!1,$r=d.FORCE_BODY||!1,so=d.SANITIZE_DOM!==!1,lo=d.SANITIZE_NAMED_PROPS||!1,Dr=d.KEEP_CONTENT!==!1,je=d.IN_PLACE||!1,H=d.ALLOWED_URI_REGEXP||$s,Se=d.NAMESPACE||Ut,j=d.CUSTOM_ELEMENT_HANDLING||{},d.CUSTOM_ELEMENT_HANDLING&&po(d.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(j.tagNameCheck=d.CUSTOM_ELEMENT_HANDLING.tagNameCheck),d.CUSTOM_ELEMENT_HANDLING&&po(d.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(j.attributeNameCheck=d.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(j.allowCustomizedBuiltInElements=d.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),At&&(et=!1),wi&&(Te=!0),ve&&(N=P({},ia),q=[],ve.html===!0&&(P(N,ea),P(q,ra)),ve.svg===!0&&(P(N,Ur),P(q,Gr),P(q,$i)),ve.svgFilters===!0&&(P(N,Yr),P(q,Gr),P(q,$i)),ve.mathMl===!0&&(P(N,Vr),P(q,na),P(q,$i))),d.ADD_TAGS&&(N===J&&(N=ce(N)),P(N,d.ADD_TAGS,it)),d.ADD_ATTR&&(q===ct&&(q=ce(q)),P(q,d.ADD_ATTR,it)),d.ADD_URI_SAFE_ATTR&&P(Nr,d.ADD_URI_SAFE_ATTR,it),d.FORBID_CONTENTS&&(ke===co&&(ke=ce(ke)),P(ke,d.FORBID_CONTENTS,it)),Dr&&(N["#text"]=!0),le&&P(N,["html","head","body"]),N.table&&(P(N,["tbody"]),delete xt.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ke('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ke('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');D=d.TRUSTED_TYPES_POLICY,U=D.createHTML("")}else D===void 0&&(D=Xd(p,n)),D!==null&&typeof U=="string"&&(U=D.createHTML(""));pt&&pt(d),we=d}},go=P({},["mi","mo","mn","ms","mtext"]),mo=P({},["foreignobject","annotation-xml"]),xc=P({},["title","style","font","a","script"]),_o=P({},[...Ur,...Yr,...Rd]),yo=P({},[...Vr,...Pd]),bc=function(d){let _=Y(d);(!_||!_.tagName)&&(_={namespaceURI:Se,tagName:"template"});const w=zi(d.tagName),V=zi(_.tagName);return Pr[d.namespaceURI]?d.namespaceURI===Li?_.namespaceURI===Ut?w==="svg":_.namespaceURI===Ai?w==="svg"&&(V==="annotation-xml"||go[V]):!!_o[w]:d.namespaceURI===Ai?_.namespaceURI===Ut?w==="math":_.namespaceURI===Li?w==="math"&&mo[V]:!!yo[w]:d.namespaceURI===Ut?_.namespaceURI===Li&&!mo[V]||_.namespaceURI===Ai&&!go[V]?!1:!yo[w]&&(xc[w]||!_o[w]):!!(Ue==="application/xhtml+xml"&&Pr[d.namespaceURI]):!1},It=function(d){Ge(e.removed,{element:d});try{Y(d).removeChild(d)}catch{S(d)}},Fi=function(d,_){try{Ge(e.removed,{attribute:_.getAttributeNode(d),from:_})}catch{Ge(e.removed,{attribute:null,from:_})}if(_.removeAttribute(d),d==="is"&&!q[d])if(Te||wi)try{It(_)}catch{}else try{_.setAttribute(d,"")}catch{}},Co=function(d){let _=null,w=null;if($r)d=""+d;else{const nt=ta(d,/^[\r\n\t ]+/);w=nt&&nt[0]}Ue==="application/xhtml+xml"&&Se===Ut&&(d=''+d+"");const V=D?D.createHTML(d):d;if(Se===Ut)try{_=new h().parseFromString(V,Ue)}catch{}if(!_||!_.documentElement){_=X.createDocument(Se,"template",null);try{_.documentElement.innerHTML=Rr?U:V}catch{}}const ot=_.body||_.documentElement;return d&&w&&ot.insertBefore(i.createTextNode(w),ot.childNodes[0]||null),Se===Ut?Z.call(_,le?"html":"body")[0]:le?_.documentElement:ot},xo=function(d){return z.call(d.ownerDocument||d,d,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},bo=function(d){return d instanceof f&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof u)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},To=function(d){return typeof s=="function"&&d instanceof s},Yt=function(d,_,w){rt[d]&&Ii(rt[d],V=>{V.call(e,_,w,we)})},vo=function(d){let _=null;if(Yt("beforeSanitizeElements",d,null),bo(d))return It(d),!0;const w=it(d.nodeName);if(Yt("uponSanitizeElement",d,{tagName:w,allowedTags:N}),d.hasChildNodes()&&!To(d.firstElementChild)&&ut(/<[/\w]/g,d.innerHTML)&&ut(/<[/\w]/g,d.textContent)||d.nodeType===Je.progressingInstruction||Mr&&d.nodeType===Je.comment&&ut(/<[/\w]/g,d.data))return It(d),!0;if(!N[w]||xt[w]){if(!xt[w]&&So(w)&&(j.tagNameCheck instanceof RegExp&&ut(j.tagNameCheck,w)||j.tagNameCheck instanceof Function&&j.tagNameCheck(w)))return!1;if(Dr&&!ke[w]){const V=Y(d)||d.parentNode,ot=v(d)||d.childNodes;if(ot&&V){const nt=ot.length;for(let gt=nt-1;gt>=0;--gt){const $t=b(ot[gt],!0);$t.__removalCount=(d.__removalCount||0)+1,V.insertBefore($t,R(d))}}}return It(d),!0}return d instanceof l&&!bc(d)||(w==="noscript"||w==="noembed"||w==="noframes")&&ut(/<\/no(script|embed|frames)/i,d.innerHTML)?(It(d),!0):(At&&d.nodeType===Je.text&&(_=d.textContent,Ii([Ht,M,x],V=>{_=Xe(_,V," ")}),d.textContent!==_&&(Ge(e.removed,{element:d.cloneNode()}),d.textContent=_)),Yt("afterSanitizeElements",d,null),!1)},ko=function(d,_,w){if(so&&(_==="id"||_==="name")&&(w in i||w in Cc))return!1;if(!(et&&!jt[_]&&ut(C,_))){if(!(Mt&&ut(k,_))){if(!q[_]||jt[_]){if(!(So(d)&&(j.tagNameCheck instanceof RegExp&&ut(j.tagNameCheck,d)||j.tagNameCheck instanceof Function&&j.tagNameCheck(d))&&(j.attributeNameCheck instanceof RegExp&&ut(j.attributeNameCheck,_)||j.attributeNameCheck instanceof Function&&j.attributeNameCheck(_))||_==="is"&&j.allowCustomizedBuiltInElements&&(j.tagNameCheck instanceof RegExp&&ut(j.tagNameCheck,w)||j.tagNameCheck instanceof Function&&j.tagNameCheck(w))))return!1}else if(!Nr[_]){if(!ut(H,Xe(w,I,""))){if(!((_==="src"||_==="xlink:href"||_==="href")&&d!=="script"&&Id(w,"data:")===0&&ho[d])){if(!(Bt&&!ut(T,Xe(w,I,"")))){if(w)return!1}}}}}}return!0},So=function(d){return d!=="annotation-xml"&&ta(d,F)},wo=function(d){Yt("beforeSanitizeAttributes",d,null);const{attributes:_}=d;if(!_)return;const w={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:q};let V=_.length;for(;V--;){const ot=_[V],{name:nt,namespaceURI:gt,value:$t}=ot,Ye=it(nt);let ht=nt==="value"?$t:$d($t);if(w.attrName=Ye,w.attrValue=ht,w.keepAttr=!0,w.forceKeepAttr=void 0,Yt("uponSanitizeAttribute",d,w),ht=w.attrValue,Mr&&ut(/((--!?|])>)|<\/(style|title)/i,ht)){Fi(nt,d);continue}if(w.forceKeepAttr||(Fi(nt,d),!w.keepAttr))continue;if(!ee&&ut(/\/>/i,ht)){Fi(nt,d);continue}At&&Ii([Ht,M,x],Ao=>{ht=Xe(ht,Ao," ")});const Bo=it(d.nodeName);if(ko(Bo,Ye,ht)){if(lo&&(Ye==="id"||Ye==="name")&&(Fi(nt,d),ht=gc+ht),D&&typeof p=="object"&&typeof p.getAttributeType=="function"&&!gt)switch(p.getAttributeType(Bo,Ye)){case"TrustedHTML":{ht=D.createHTML(ht);break}case"TrustedScriptURL":{ht=D.createScriptURL(ht);break}}try{gt?d.setAttributeNS(gt,nt,ht):d.setAttribute(nt,ht),bo(d)?It(d):Qo(e.removed)}catch{}}}Yt("afterSanitizeAttributes",d,null)},Tc=function B(d){let _=null;const w=xo(d);for(Yt("beforeSanitizeShadowDOM",d,null);_=w.nextNode();)Yt("uponSanitizeShadowNode",_,null),!vo(_)&&(_.content instanceof o&&B(_.content),wo(_));Yt("afterSanitizeShadowDOM",d,null)};return e.sanitize=function(B){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},_=null,w=null,V=null,ot=null;if(Rr=!B,Rr&&(B=""),typeof B!="string"&&!To(B))if(typeof B.toString=="function"){if(B=B.toString(),typeof B!="string")throw Ke("dirty is not a string, aborting")}else throw Ke("toString is not a function");if(!e.isSupported)return B;if(Ir||qr(d),e.removed=[],typeof B=="string"&&(je=!1),je){if(B.nodeName){const $t=it(B.nodeName);if(!N[$t]||xt[$t])throw Ke("root node is forbidden and cannot be sanitized in-place")}}else if(B instanceof s)_=Co(""),w=_.ownerDocument.importNode(B,!0),w.nodeType===Je.element&&w.nodeName==="BODY"||w.nodeName==="HTML"?_=w:_.appendChild(w);else{if(!Te&&!At&&!le&&B.indexOf("<")===-1)return D&&Bi?D.createHTML(B):B;if(_=Co(B),!_)return Te?null:Bi?U:""}_&&$r&&It(_.firstChild);const nt=xo(je?B:_);for(;V=nt.nextNode();)vo(V)||(V.content instanceof o&&Tc(V.content),wo(V));if(je)return B;if(Te){if(wi)for(ot=Wt.call(_.ownerDocument);_.firstChild;)ot.appendChild(_.firstChild);else ot=_;return(q.shadowroot||q.shadowrootmode)&&(ot=W.call(r,ot,!0)),ot}let gt=le?_.outerHTML:_.innerHTML;return le&&N["!doctype"]&&_.ownerDocument&&_.ownerDocument.doctype&&_.ownerDocument.doctype.name&&ut(Ds,_.ownerDocument.doctype.name)&&(gt=" +`+gt),At&&Ii([Ht,M,x],$t=>{gt=Xe(gt,$t," ")}),D&&Bi?D.createHTML(gt):gt},e.setConfig=function(){let B=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};qr(B),Ir=!0},e.clearConfig=function(){we=null,Ir=!1},e.isValidAttribute=function(B,d,_){we||qr({});const w=it(B),V=it(d);return ko(w,V,_)},e.addHook=function(B,d){typeof d=="function"&&(rt[B]=rt[B]||[],Ge(rt[B],d))},e.removeHook=function(B){if(rt[B])return Qo(rt[B])},e.removeHooks=function(B){rt[B]&&(rt[B]=[])},e.removeAllHooks=function(){rt={}},e}var $e=Ns();const Wi={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+(e-t)*6*i:i<1/2?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},r)=>{if(!e)return i*2.55;t/=360,e/=100,i/=100;const n=i<.5?i*(1+e):i+e-i*e,o=2*i-n;switch(r){case"r":return Wi.hue2rgb(o,n,t+1/3)*255;case"g":return Wi.hue2rgb(o,n,t)*255;case"b":return Wi.hue2rgb(o,n,t-1/3)*255}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if(r==="l")return a*100;if(n===o)return 0;const s=n-o,l=a>.5?s/(2-n-o):s/(n+o);if(r==="s")return l*100;switch(n){case t:return((e-i)/s+(ee>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(t*1e10)/1e10},Zd={dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}},$={channel:Wi,lang:Kd,unit:Zd},ie={};for(let t=0;t<=255;t++)ie[t]=$.unit.dec2hex(t);const at={ALL:0,RGB:1,HSL:2};class Jd{constructor(){this.type=at.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=at.ALL}is(e){return this.type===e}}class Qd{constructor(e,i){this.color=i,this.changed=!1,this.data=e,this.type=new Jd}set(e,i){return this.color=i,this.changed=!1,this.data=e,this.type.type=at.ALL,this}_ensureHSL(){const e=this.data,{h:i,s:r,l:n}=e;i===void 0&&(e.h=$.channel.rgb2hsl(e,"h")),r===void 0&&(e.s=$.channel.rgb2hsl(e,"s")),n===void 0&&(e.l=$.channel.rgb2hsl(e,"l"))}_ensureRGB(){const e=this.data,{r:i,g:r,b:n}=e;i===void 0&&(e.r=$.channel.hsl2rgb(e,"r")),r===void 0&&(e.g=$.channel.hsl2rgb(e,"g")),n===void 0&&(e.b=$.channel.hsl2rgb(e,"b"))}get r(){const e=this.data,i=e.r;return!this.type.is(at.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"r"))}get g(){const e=this.data,i=e.g;return!this.type.is(at.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"g"))}get b(){const e=this.data,i=e.b;return!this.type.is(at.HSL)&&i!==void 0?i:(this._ensureHSL(),$.channel.hsl2rgb(e,"b"))}get h(){const e=this.data,i=e.h;return!this.type.is(at.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"h"))}get s(){const e=this.data,i=e.s;return!this.type.is(at.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"s"))}get l(){const e=this.data,i=e.l;return!this.type.is(at.RGB)&&i!==void 0?i:(this._ensureRGB(),$.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(at.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(at.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(at.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(at.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(at.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(at.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}}const xr=new Qd({r:0,g:0,b:0,a:0},"transparent"),Ee={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(t.charCodeAt(0)!==35)return;const e=t.match(Ee.re);if(!e)return;const i=e[1],r=parseInt(i,16),n=i.length,o=n%4===0,a=n>4,s=a?1:17,l=a?8:4,c=o?0:-1,u=a?255:15;return xr.set({r:(r>>l*(c+3)&u)*s,g:(r>>l*(c+2)&u)*s,b:(r>>l*(c+1)&u)*s,a:o?(r&u)*s/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`#${ie[Math.round(e)]}${ie[Math.round(i)]}${ie[Math.round(r)]}${ie[Math.round(n*255)]}`:`#${ie[Math.round(e)]}${ie[Math.round(i)]}${ie[Math.round(r)]}`}},fe={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(fe.hueRe);if(e){const[,i,r]=e;switch(r){case"grad":return $.channel.clamp.h(parseFloat(i)*.9);case"rad":return $.channel.clamp.h(parseFloat(i)*180/Math.PI);case"turn":return $.channel.clamp.h(parseFloat(i)*360)}}return $.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(e!==104&&e!==72)return;const i=t.match(fe.re);if(!i)return;const[,r,n,o,a,s]=i;return xr.set({h:fe._hue2deg(r),s:$.channel.clamp.s(parseFloat(n)),l:$.channel.clamp.l(parseFloat(o)),a:a?$.channel.clamp.a(s?parseFloat(a)/100:parseFloat(a)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${$.lang.round(e)}, ${$.lang.round(i)}%, ${$.lang.round(r)}%, ${n})`:`hsl(${$.lang.round(e)}, ${$.lang.round(i)}%, ${$.lang.round(r)}%)`}},ni={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=ni.colors[t];if(e)return Ee.parse(e)},stringify:t=>{const e=Ee.stringify(t);for(const i in ni.colors)if(ni.colors[i]===e)return i}},ri={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(e!==114&&e!==82)return;const i=t.match(ri.re);if(!i)return;const[,r,n,o,a,s,l,c,u]=i;return xr.set({r:$.channel.clamp.r(n?parseFloat(r)*2.55:parseFloat(r)),g:$.channel.clamp.g(a?parseFloat(o)*2.55:parseFloat(o)),b:$.channel.clamp.b(l?parseFloat(s)*2.55:parseFloat(s)),a:c?$.channel.clamp.a(u?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${$.lang.round(e)}, ${$.lang.round(i)}, ${$.lang.round(r)}, ${$.lang.round(n)})`:`rgb(${$.lang.round(e)}, ${$.lang.round(i)}, ${$.lang.round(r)})`}},Rt={format:{keyword:ni,hex:Ee,rgb:ri,rgba:ri,hsl:fe,hsla:fe},parse:t=>{if(typeof t!="string")return t;const e=Ee.parse(t)||ri.parse(t)||fe.parse(t)||ni.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(at.HSL)||t.data.r===void 0?fe.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?ri.stringify(t):Ee.stringify(t)},Rs=(t,e)=>{const i=Rt.parse(t);for(const r in e)i[r]=$.channel.clamp[r](e[r]);return Rt.stringify(i)},oi=(t,e,i=0,r=1)=>{if(typeof t!="number")return Rs(t,{a:e});const n=xr.set({r:$.channel.clamp.r(t),g:$.channel.clamp.g(e),b:$.channel.clamp.b(i),a:$.channel.clamp.a(r)});return Rt.stringify(n)},tp=t=>{const{r:e,g:i,b:r}=Rt.parse(t),n=.2126*$.channel.toLinear(e)+.7152*$.channel.toLinear(i)+.0722*$.channel.toLinear(r);return $.lang.round(n)},ep=t=>tp(t)>=.5,Ti=t=>!ep(t),Ps=(t,e,i)=>{const r=Rt.parse(t),n=r[e],o=$.channel.clamp[e](n+i);return n!==o&&(r[e]=o),Rt.stringify(r)},A=(t,e)=>Ps(t,"l",e),O=(t,e)=>Ps(t,"l",-e),g=(t,e)=>{const i=Rt.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return Rs(t,r)},ip=(t,e,i=50)=>{const{r,g:n,b:o,a}=Rt.parse(t),{r:s,g:l,b:c,a:u}=Rt.parse(e),f=i/100,h=f*2-1,p=a-u,b=((h*p===-1?h:(h+p)/(1+h*p))+1)/2,S=1-b,R=r*b+s*S,v=n*b+l*S,Y=o*b+c*S,D=a*f+u*(1-f);return oi(R,v,Y,D)},y=(t,e=100)=>{const i=Rt.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,ip(i,t,e)};var qs=typeof global=="object"&&global&&global.Object===Object&&global,rp=typeof self=="object"&&self&&self.Object===Object&&self,zt=qs||rp||Function("return this")(),ir=zt.Symbol,zs=Object.prototype,np=zs.hasOwnProperty,op=zs.toString,Qe=ir?ir.toStringTag:void 0;function ap(t){var e=np.call(t,Qe),i=t[Qe];try{t[Qe]=void 0;var r=!0}catch{}var n=op.call(t);return r&&(e?t[Qe]=i:delete t[Qe]),n}var sp=Object.prototype,lp=sp.toString;function cp(t){return lp.call(t)}var hp="[object Null]",up="[object Undefined]",aa=ir?ir.toStringTag:void 0;function ze(t){return t==null?t===void 0?up:hp:aa&&aa in Object(t)?ap(t):cp(t)}function Ce(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var fp="[object AsyncFunction]",dp="[object Function]",pp="[object GeneratorFunction]",gp="[object Proxy]";function Pn(t){if(!Ce(t))return!1;var e=ze(t);return e==dp||e==pp||e==fp||e==gp}var Xr=zt["__core-js_shared__"],sa=function(){var t=/[^.]+$/.exec(Xr&&Xr.keys&&Xr.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function mp(t){return!!sa&&sa in t}var _p=Function.prototype,yp=_p.toString;function xe(t){if(t!=null){try{return yp.call(t)}catch{}try{return t+""}catch{}}return""}var Cp=/[\\^$.*+?()[\]{}|]/g,xp=/^\[object .+?Constructor\]$/,bp=Function.prototype,Tp=Object.prototype,vp=bp.toString,kp=Tp.hasOwnProperty,Sp=RegExp("^"+vp.call(kp).replace(Cp,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function wp(t){if(!Ce(t)||mp(t))return!1;var e=Pn(t)?Sp:xp;return e.test(xe(t))}function Bp(t,e){return t==null?void 0:t[e]}function be(t,e){var i=Bp(t,e);return wp(i)?i:void 0}var pi=be(Object,"create");function Ap(){this.__data__=pi?pi(null):{},this.size=0}function Lp(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Fp="__lodash_hash_undefined__",Ep=Object.prototype,Op=Ep.hasOwnProperty;function Mp(t){var e=this.__data__;if(pi){var i=e[t];return i===Fp?void 0:i}return Op.call(e,t)?e[t]:void 0}var Ip=Object.prototype,$p=Ip.hasOwnProperty;function Dp(t){var e=this.__data__;return pi?e[t]!==void 0:$p.call(e,t)}var Np="__lodash_hash_undefined__";function Rp(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=pi&&e===void 0?Np:e,this}function _e(t){var e=-1,i=t==null?0:t.length;for(this.clear();++e-1}function Up(t,e){var i=this.__data__,r=Tr(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this}function te(t){var e=-1,i=t==null?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=yg}function Sr(t){return t!=null&&Ys(t.length)&&!Pn(t)}function Cg(t){return ki(t)&&Sr(t)}function xg(){return!1}var Vs=typeof exports=="object"&&exports&&!exports.nodeType&&exports,pa=Vs&&typeof module=="object"&&module&&!module.nodeType&&module,bg=pa&&pa.exports===Vs,ga=bg?zt.Buffer:void 0,Tg=ga?ga.isBuffer:void 0,zn=Tg||xg,vg="[object Object]",kg=Function.prototype,Sg=Object.prototype,Gs=kg.toString,wg=Sg.hasOwnProperty,Bg=Gs.call(Object);function Ag(t){if(!ki(t)||ze(t)!=vg)return!1;var e=js(t);if(e===null)return!0;var i=wg.call(e,"constructor")&&e.constructor;return typeof i=="function"&&i instanceof i&&Gs.call(i)==Bg}var Lg="[object Arguments]",Fg="[object Array]",Eg="[object Boolean]",Og="[object Date]",Mg="[object Error]",Ig="[object Function]",$g="[object Map]",Dg="[object Number]",Ng="[object Object]",Rg="[object RegExp]",Pg="[object Set]",qg="[object String]",zg="[object WeakMap]",Wg="[object ArrayBuffer]",Hg="[object DataView]",jg="[object Float32Array]",Ug="[object Float64Array]",Yg="[object Int8Array]",Vg="[object Int16Array]",Gg="[object Int32Array]",Xg="[object Uint8Array]",Kg="[object Uint8ClampedArray]",Zg="[object Uint16Array]",Jg="[object Uint32Array]",G={};G[jg]=G[Ug]=G[Yg]=G[Vg]=G[Gg]=G[Xg]=G[Kg]=G[Zg]=G[Jg]=!0;G[Lg]=G[Fg]=G[Wg]=G[Eg]=G[Hg]=G[Og]=G[Mg]=G[Ig]=G[$g]=G[Dg]=G[Ng]=G[Rg]=G[Pg]=G[qg]=G[zg]=!1;function Qg(t){return ki(t)&&Ys(t.length)&&!!G[ze(t)]}function tm(t){return function(e){return t(e)}}var Xs=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ai=Xs&&typeof module=="object"&&module&&!module.nodeType&&module,em=ai&&ai.exports===Xs,Kr=em&&qs.process,ma=function(){try{var t=ai&&ai.require&&ai.require("util").types;return t||Kr&&Kr.binding&&Kr.binding("util")}catch{}}(),_a=ma&&ma.isTypedArray,Wn=_a?tm(_a):Qg;function gn(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}var im=Object.prototype,rm=im.hasOwnProperty;function nm(t,e,i){var r=t[e];(!(rm.call(t,e)&&br(r,i))||i===void 0&&!(e in t))&&qn(t,e,i)}function om(t,e,i,r){var n=!i;i||(i={});for(var o=-1,a=e.length;++o-1&&t%1==0&&t0){if(++e>=Tm)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var wm=Sm(bm);function Bm(t,e){return wm(Cm(t,e,Qs),t+"")}function Am(t,e,i){if(!Ce(i))return!1;var r=typeof e;return(r=="number"?Sr(i)&&Ks(e,i.length):r=="string"&&e in i)?br(i[e],t):!1}function Lm(t){return Bm(function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&typeof o=="function"?(n--,o):void 0,a&&Am(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r0?mi(He,--wt):0,De--,Q===10&&(De=1,wr--),Q}function Et(){return Q=wt2||mn(Q)>3?"":" "}function Wm(t,e){for(;--e&&Et()&&!(Q<48||Q>102||Q>57&&Q<65||Q>70&&Q<97););return Br(t,ji()+(e<6&&pe()==32&&Et()==32))}function _n(t){for(;Et();)switch(Q){case t:return wt;case 34:case 39:t!==34&&t!==39&&_n(Q);break;case 40:t===41&&_n(t);break;case 92:Et();break}return wt}function Hm(t,e){for(;Et()&&t+Q!==57;)if(t+Q===84&&pe()===47)break;return"/*"+Br(e,wt-1)+"*"+Hn(t===47?t:Et())}function jm(t){for(;!mn(pe());)Et();return Br(t,wt)}function Um(t){return qm(Ui("",null,null,null,[""],t=Pm(t),0,[0],t))}function Ui(t,e,i,r,n,o,a,s,l){for(var c=0,u=0,f=a,h=0,p=0,m=0,b=1,S=1,R=1,v=0,Y="",D=n,U=o,X=r,z=Y;S;)switch(m=v,v=Et()){case 40:if(m!=108&&mi(z,f-1)==58){$m(z+=Hi(Zr(v),"&","&\f"),"&\f")!=-1&&(R=-1);break}case 34:case 39:case 91:z+=Zr(v);break;case 9:case 10:case 13:case 32:z+=zm(m);break;case 92:z+=Wm(ji()-1,7);continue;case 47:switch(pe()){case 42:case 47:Di(Ym(Hm(Et(),ji()),e,i,l),l);break;default:z+="/"}break;case 123*b:s[c++]=Kt(z)*R;case 125*b:case 59:case 0:switch(v){case 0:case 125:S=0;case 59+u:R==-1&&(z=Hi(z,/\f/g,"")),p>0&&Kt(z)-f&&Di(p>32?xa(z+";",r,i,f-1,l):xa(Hi(z," ","")+";",r,i,f-2,l),l);break;case 59:z+=";";default:if(Di(X=Ca(z,e,i,c,u,n,s,Y,D=[],U=[],f,o),o),v===123)if(u===0)Ui(z,e,X,X,D,o,f,s,U);else switch(h===99&&mi(z,3)===110?100:h){case 100:case 108:case 109:case 115:Ui(t,X,X,r&&Di(Ca(t,X,X,0,0,n,s,Y,n,D=[],f,U),U),n,U,f,s,r?D:U);break;default:Ui(z,X,X,X,[""],U,0,s,U)}}c=u=p=0,b=R=1,Y=z="",f=a;break;case 58:f=1+Kt(z),p=m;default:if(b<1){if(v==123)--b;else if(v==125&&b++==0&&Rm()==125)continue}switch(z+=Hn(v),v*b){case 38:R=u>0?1:(z+="\f",-1);break;case 44:s[c++]=(Kt(z)-1)*R,R=1;break;case 64:pe()===45&&(z+=Zr(Et())),h=pe(),u=f=Kt(Y=z+=jm(ji())),v++;break;case 45:m===45&&Kt(z)==2&&(b=0)}}return o}function Ca(t,e,i,r,n,o,a,s,l,c,u,f){for(var h=n-1,p=n===0?o:[""],m=Dm(p),b=0,S=0,R=0;b0?p[v]+" "+Y:Hi(Y,/&\f/g,p[v])))&&(l[R++]=D);return jn(t,e,i,n===0?el:s,l,c,u,f)}function Ym(t,e,i,r){return jn(t,e,i,tl,Hn(Nm()),_i(t,2,-2),0,r)}function xa(t,e,i,r,n){return jn(t,e,i,il,_i(t,0,r),_i(t,r+1,-1),r,n)}function yn(t,e){for(var i="",r=0;r{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},Un=function(t="fatal"){let e=Gt.fatal;typeof t=="string"?(t=t.toLowerCase(),t in Gt&&(e=Gt[t])):typeof t=="number"&&(e=t),E.trace=()=>{},E.debug=()=>{},E.info=()=>{},E.warn=()=>{},E.error=()=>{},E.fatal=()=>{},e<=Gt.fatal&&(E.fatal=console.error?console.error.bind(console,vt("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",vt("FATAL"))),e<=Gt.error&&(E.error=console.error?console.error.bind(console,vt("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",vt("ERROR"))),e<=Gt.warn&&(E.warn=console.warn?console.warn.bind(console,vt("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",vt("WARN"))),e<=Gt.info&&(E.info=console.info?console.info.bind(console,vt("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",vt("INFO"))),e<=Gt.debug&&(E.debug=console.debug?console.debug.bind(console,vt("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",vt("DEBUG"))),e<=Gt.trace&&(E.trace=console.debug?console.debug.bind(console,vt("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",vt("TRACE")))},vt=t=>`%c${Xc().format("ss.SSS")} : ${t} : `,Si=//gi,l0=t=>t?al(t).replace(/\\n/g,"#br#").split("#br#"):[""],c0=(()=>{let t=!1;return()=>{t||(h0(),t=!0)}})();function h0(){const t="data-temp-href-target";$e.addHook("beforeSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute("target")&&e.setAttribute(t,e.getAttribute("target")||"")}),$e.addHook("afterSanitizeAttributes",e=>{e.tagName==="A"&&e.hasAttribute(t)&&(e.setAttribute("target",e.getAttribute(t)||""),e.removeAttribute(t),e.getAttribute("target")==="_blank"&&e.setAttribute("rel","noopener"))})}const ol=t=>(c0(),$e.sanitize(t)),wa=(t,e)=>{var i;if(((i=e.flowchart)==null?void 0:i.htmlLabels)!==!1){const r=e.securityLevel;r==="antiscript"||r==="strict"?t=ol(t):r!=="loose"&&(t=al(t),t=t.replace(//g,">"),t=t.replace(/=/g,"="),t=p0(t))}return t},yi=(t,e)=>t&&(e.dompurifyConfig?t=$e.sanitize(wa(t,e),e.dompurifyConfig).toString():t=$e.sanitize(wa(t,e),{FORBID_TAGS:["style"]}).toString(),t),u0=(t,e)=>typeof t=="string"?yi(t,e):t.flat().map(i=>yi(i,e)),f0=t=>Si.test(t),d0=t=>t.split(Si),p0=t=>t.replace(/#br#/g,"
"),al=t=>t.replace(Si,"#br#"),g0=t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},sl=t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),m0=function(...t){const e=t.filter(i=>!isNaN(i));return Math.max(...e)},_0=function(...t){const e=t.filter(i=>!isNaN(i));return Math.min(...e)},g1=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r0&&r+1Math.max(0,t.split(e).length-1),y0=(t,e)=>{const i=vn(t,"~"),r=vn(e,"~");return i===1&&r===1},C0=t=>{const e=vn(t,"~");let i=!1;if(e<=1)return t;e%2!==0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;n!==-1&&o!==-1&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},Ba=()=>window.MathMLElement!==void 0,kn=/\$\$(.*)\$\$/g,Aa=t=>{var e;return(((e=t.match(kn))==null?void 0:e.length)??0)>0},m1=async(t,e)=>{t=await x0(t,e);const i=document.createElement("div");i.innerHTML=t,i.id="katex-temp",i.style.visibility="hidden",i.style.position="absolute",i.style.top="0";const r=document.querySelector("body");r==null||r.insertAdjacentElement("beforeend",i);const n={width:i.clientWidth,height:i.clientHeight};return i.remove(),n},x0=async(t,e)=>{if(!Aa(t))return t;if(!Ba()&&!e.legacyMathML)return t.replace(kn,"MathML is unsupported in this environment.");const{default:i}=await K(async()=>{const{default:r}=await import("./chunks/katex.CvgdMzdh.js");return{default:r}},[]);return t.split(Si).map(r=>Aa(r)?` +
+ ${r} +
+ `:`
${r}
`).join("").replace(kn,(r,n)=>i.renderToString(n,{throwOnError:!0,displayMode:!0,output:Ba()?"mathml":"htmlAndMathml"}).replace(/\n/g," ").replace(//g,""))},Yn={getRows:l0,sanitizeText:yi,sanitizeTextOrArray:u0,hasBreaks:f0,splitBreaks:d0,lineBreakRegex:Si,removeScript:ol,getUrl:g0,evaluate:sl,getMax:m0,getMin:_0},dt=(t,e)=>e?g(t,{s:-40,l:10}):g(t,{s:-40,l:-10}),Ar="#ffffff",Lr="#f2f2f2";let b0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var e,i,r,n,o,a,s,l,c,u,f;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||g(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||g(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||dt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||dt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||dt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||dt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||y(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||y(this.tertiaryColor),this.lineColor=this.lineColor||y(this.background),this.arrowheadColor=this.arrowheadColor||y(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?O(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||O(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||y(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||A(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.darkMode)for(let p=0;p{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const T0=t=>{const e=new b0;return e.calculate(t),e};let v0=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=A(this.primaryColor,16),this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=y(this.background),this.secondaryBorderColor=dt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=dt(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.tertiaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=A(y("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=oi(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=O("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=O(this.sectionBkgColor,10),this.taskBorderColor=oi(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=oi(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var e,i,r,n,o,a,s,l,c,u,f;this.secondBkg=A(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=A(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=A(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=g(this.primaryColor,{h:64}),this.fillType3=g(this.secondaryColor,{h:64}),this.fillType4=g(this.primaryColor,{h:-64}),this.fillType5=g(this.secondaryColor,{h:-64}),this.fillType6=g(this.primaryColor,{h:128}),this.fillType7=g(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330});for(let h=0;h{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const k0=t=>{const e=new v0;return e.calculate(t),e};let S0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=g(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=dt(this.primaryColor,this.darkMode),this.secondaryBorderColor=dt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=dt(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.tertiaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=oi(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var e,i,r,n,o,a,s,l,c,u,f;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||O(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||O(this.tertiaryColor,40);for(let h=0;h{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const w0=t=>{const e=new S0;return e.calculate(t),e};let B0=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=A("#cde498",10),this.primaryBorderColor=dt(this.primaryColor,this.darkMode),this.secondaryBorderColor=dt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=dt(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.primaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,i,r,n,o,a,s,l,c,u,f;this.actorBorder=O(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||g(this.primaryColor,{h:30}),this.cScale4=this.cScale4||g(this.primaryColor,{h:60}),this.cScale5=this.cScale5||g(this.primaryColor,{h:90}),this.cScale6=this.cScale6||g(this.primaryColor,{h:120}),this.cScale7=this.cScale7||g(this.primaryColor,{h:150}),this.cScale8=this.cScale8||g(this.primaryColor,{h:210}),this.cScale9=this.cScale9||g(this.primaryColor,{h:270}),this.cScale10=this.cScale10||g(this.primaryColor,{h:300}),this.cScale11=this.cScale11||g(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||O(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||O(this.tertiaryColor,40);for(let h=0;h{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}};const A0=t=>{const e=new B0;return e.calculate(t),e};class L0{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=A(this.contrast,55),this.background="#ffffff",this.tertiaryColor=g(this.primaryColor,{h:-160}),this.primaryBorderColor=dt(this.primaryColor,this.darkMode),this.secondaryBorderColor=dt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=dt(this.tertiaryColor,this.darkMode),this.primaryTextColor=y(this.primaryColor),this.secondaryTextColor=y(this.secondaryColor),this.tertiaryTextColor=y(this.tertiaryColor),this.lineColor=y(this.background),this.textColor=y(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var e,i,r,n,o,a,s,l,c,u,f;this.secondBkg=A(this.contrast,55),this.border2=this.contrast,this.actorBorder=A(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let h=0;h{this[r]=e[r]}),this.updateColors(),i.forEach(r=>{this[r]=e[r]})}}const F0=t=>{const e=new L0;return e.calculate(t),e},Jt={base:{getThemeVariables:T0},dark:{getThemeVariables:k0},default:{getThemeVariables:w0},forest:{getThemeVariables:A0},neutral:{getThemeVariables:F0}},Xt={flowchart:{useMaxWidth:!0,titleTopMargin:25,subGraphTitleMargin:{top:0,bottom:0},diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,parallelCommits:!1,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},block:{useMaxWidth:!0,padding:8},theme:"default",maxTextSize:5e4,maxEdges:500,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize","maxEdges"],legacyMathML:!1,deterministicIds:!1,fontSize:16},ll={...Xt,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Jt.default.getThemeVariables(),sequence:{...Xt.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Xt.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Xt.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Xt.pie,useWidth:984},xyChart:{...Xt.xyChart,useWidth:void 0},requirement:{...Xt.requirement,useWidth:void 0},gitGraph:{...Xt.gitGraph,useMaxWidth:!1},sankey:{...Xt.sankey,useMaxWidth:!1}},cl=(t,e="")=>Object.keys(t).reduce((i,r)=>Array.isArray(t[r])?i:typeof t[r]=="object"&&t[r]!==null?[...i,e+r,...cl(t[r],"")]:[...i,e+r],[]),E0=new Set(cl(ll,"")),O0=ll,ar=t=>{if(E.debug("sanitizeDirective called with",t),!(typeof t!="object"||t==null)){if(Array.isArray(t)){t.forEach(e=>ar(e));return}for(const e of Object.keys(t)){if(E.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!E0.has(e)||t[e]==null){E.debug("sanitize deleting key: ",e),delete t[e];continue}if(typeof t[e]=="object"){E.debug("sanitizing object",e),ar(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(E.debug("sanitizing css option",e),t[e]=M0(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];i!=null&&i.match&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}E.debug("After sanitization",t)}},M0=t=>{let e=0,i=0;for(const r of t){if(e{for(const{id:e,detector:i,loader:r}of t)dl(e,i,r)},dl=(t,e,i)=>{Ne[t]?E.error(`Detector with key ${t} already exists`):Ne[t]={detector:e,loader:i},E.debug(`Detector with key ${t} added${i?" with loader":""}`)},$0=t=>Ne[t].loader,Sn=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(o=>Sn(t,o,n)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(o=>{t.includes(o)||t.push(o)}),t):t===void 0||i<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(e!==void 0&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(o=>{typeof e[o]=="object"&&(t[o]===void 0||typeof t[o]=="object")?(t[o]===void 0&&(t[o]=Array.isArray(e[o])?[]:{}),t[o]=Sn(t[o],e[o],{depth:i-1,clobber:r})):(r||typeof t[o]!="object"&&typeof e[o]!="object")&&(t[o]=e[o])}),t)},st=Sn,D0="​",N0={curveBasis:pd,curveBasisClosed:gd,curveBasisOpen:md,curveBumpX:fd,curveBumpY:dd,curveBundle:_d,curveCardinalClosed:Cd,curveCardinalOpen:xd,curveCardinal:yd,curveCatmullRomClosed:Td,curveCatmullRomOpen:vd,curveCatmullRom:bd,curveLinear:ud,curveLinearClosed:kd,curveMonotoneX:Sd,curveMonotoneY:wd,curveNatural:Bd,curveStep:Ad,curveStepAfter:Fd,curveStepBefore:Ld},R0=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,P0=function(t,e){const i=pl(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const a=i.map(s=>s.args);ar(a),r=st(r,[...a])}else r=i.args;if(!r)return;let n=Fr(t,e);const o="config";return r[o]!==void 0&&(n==="flowchart-v2"&&(n="flowchart"),r[n]=r[o],delete r[o]),r},pl=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${R0.source})(?=[}][%]{2}).* +`,"ig");t=t.trim().replace(i,"").replace(/'/gm,'"'),E.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let r;const n=[];for(;(r=si.exec(t))!==null;)if(r.index===si.lastIndex&&si.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const o=r[1]?r[1]:r[2],a=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:o,args:a})}return n.length===0?{type:t,args:null}:n.length===1?n[0]:n}catch(i){return E.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}},q0=function(t){return t.replace(si,"")},z0=function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1};function W0(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return N0[i]??e}function H0(t,e){const i=t.trim();if(i)return e.securityLevel!=="loose"?Ga.sanitizeUrl(i):i}const j0=(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a{i+=gl(n,e),e=n});const r=i/2;return Vn(t,r)}function Y0(t){return t.length===1?t[0]:U0(t)}const La=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},Vn=(t,e)=>{let i,r=e;for(const n of t){if(i){const o=gl(n,i);if(o=1)return{x:n.x,y:n.y};if(a>0&&a<1)return{x:La((1-a)*i.x+a*n.x,5),y:La((1-a)*i.y+a*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")},V0=(t,e,i)=>{E.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const n=Vn(e,25),o=t?10:5,a=Math.atan2(e[0].y-n.y,e[0].x-n.x),s={x:0,y:0};return s.x=Math.sin(a)*o+(e[0].x+n.x)/2,s.y=-Math.cos(a)*o+(e[0].y+n.y)/2,s};function G0(t,e,i){const r=structuredClone(i);E.info("our points",r),e!=="start_left"&&e!=="start_right"&&r.reverse();const n=25+t,o=Vn(r,n),a=10+t*.5,s=Math.atan2(r[0].y-o.y,r[0].x-o.x),l={x:0,y:0};return e==="start_left"?(l.x=Math.sin(s+Math.PI)*a+(r[0].x+o.x)/2,l.y=-Math.cos(s+Math.PI)*a+(r[0].y+o.y)/2):e==="end_right"?(l.x=Math.sin(s-Math.PI)*a+(r[0].x+o.x)/2-5,l.y=-Math.cos(s-Math.PI)*a+(r[0].y+o.y)/2-5):e==="end_left"?(l.x=Math.sin(s)*a+(r[0].x+o.x)/2-5,l.y=-Math.cos(s)*a+(r[0].y+o.y)/2-5):(l.x=Math.sin(s)*a+(r[0].x+o.x)/2,l.y=-Math.cos(s)*a+(r[0].y+o.y)/2),l}function X0(t){let e="",i="";for(const r of t)r!==void 0&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let Fa=0;const K0=()=>(Fa++,"id-"+Math.random().toString(36).substr(2,12)+"-"+Fa);function Z0(t){let e="";const i="0123456789abcdef",r=i.length;for(let n=0;nZ0(t.length),Q0=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""}},t_=function(t,e){const i=e.text.replace(Yn.lineBreakRegex," "),[,r]=Xn(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),e.class!==void 0&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+e.textMargin*2),o.attr("fill",e.fill),o.text(i),n},e_=vi((t,e,i)=>{if(!t||(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"
"},i),Yn.lineBreakRegex.test(t)))return t;const r=t.split(" "),n=[];let o="";return r.forEach((a,s)=>{const l=sr(`${a} `,i),c=sr(o,i);if(l>e){const{hyphenatedStrings:h,remainingWord:p}=i_(a,e,"-",i);n.push(o,...h),o=p}else c+l>=e?(n.push(o),o=a):o=[o,a].filter(Boolean).join(" ");s+1===r.length&&n.push(o)}),n.filter(a=>a!=="").join(i.joinWith)},(t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`),i_=vi((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach((s,l)=>{const c=`${a}${s}`;if(sr(c,r)>=e){const f=l+1,h=n.length===f,p=`${c}${i}`;o.push(h?c:p),a=""}else a=c}),{hyphenatedStrings:o,remainingWord:a}},(t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`);function r_(t,e){return Gn(t,e).height}function sr(t,e){return Gn(t,e).width}const Gn=vi((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=Xn(i),a=["sans-serif",r],s=t.split(Yn.lineBreakRegex),l=[],c=kt("body");if(!c.remove)return{width:0,height:0,lineHeight:0};const u=c.append("svg");for(const h of a){let p=0;const m={width:0,height:0,lineHeight:0};for(const b of s){const S=Q0();S.text=b||D0;const R=t_(u,S).style("font-size",o).style("font-weight",n).style("font-family",h),v=(R._groups||R)[0][0].getBBox();if(v.width===0&&v.height===0)throw new Error("svg element not in render tree");m.width=Math.round(Math.max(m.width,v.width)),p=Math.round(v.height),m.height+=p,m.lineHeight=Math.round(Math.max(m.lineHeight,p))}l.push(m)}u.remove();const f=isNaN(l[1].height)||isNaN(l[1].width)||isNaN(l[1].lineHeight)||l[0].height>l[1].height&&l[0].width>l[1].width&&l[0].lineHeight>l[1].lineHeight?0:1;return l[f]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`);class n_{constructor(e=!1,i){this.count=0,this.count=i?i.length:0,this.next=e?()=>this.count++:()=>Date.now()}}let Ni;const o_=function(t){return Ni=Ni||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),Ni.innerHTML=t,unescape(Ni.textContent)};function ml(t){return"str"in t}const a_=(t,e,i,r)=>{var n;if(!r)return;const o=(n=t.node())==null?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},Xn=t=>{if(typeof t=="number")return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function _l(t,e){return Fm({},t,e)}const li={assignWithDepth:st,wrapLabel:e_,calculateTextHeight:r_,calculateTextWidth:sr,calculateTextDimensions:Gn,cleanAndMerge:_l,detectInit:P0,detectDirective:pl,isSubstringInArray:z0,interpolateToCurve:W0,calcLabelPosition:Y0,calcCardinalityPosition:V0,calcTerminalLabelPosition:G0,formatUrl:H0,getStylesFromArray:X0,generateId:K0,random:J0,runFunc:j0,entityDecode:o_,insertTitle:a_,parseFontSize:Xn,InitIDGenerator:n_},s_=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(i){return i.substring(0,i.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(i){return i.substring(0,i.length-1)}),e=e.replace(/#\w+;/g,function(i){const r=i.substring(1,i.length-1);return/^\+?\d+$/.test(r)?"fl°°"+r+"¶ß":"fl°"+r+"¶ß"}),e},l_=function(t){return t.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},Ea="10.9.2",Re=Object.freeze(O0);let mt=st({},Re),yl,Pe=[],ci=st({},Re);const Er=(t,e)=>{let i=st({},t),r={};for(const n of e)bl(n),r=st(r,n);if(i=st(i,r),r.theme&&r.theme in Jt){const n=st({},yl),o=st(n.themeVariables||{},r.themeVariables);i.theme&&i.theme in Jt&&(i.themeVariables=Jt[i.theme].getThemeVariables(o))}return ci=i,Tl(ci),ci},c_=t=>(mt=st({},Re),mt=st(mt,t),t.theme&&Jt[t.theme]&&(mt.themeVariables=Jt[t.theme].getThemeVariables(t.themeVariables)),Er(mt,Pe),mt),h_=t=>{yl=st({},t)},u_=t=>(mt=st(mt,t),Er(mt,Pe),mt),Cl=()=>st({},mt),xl=t=>(Tl(t),st(ci,t),Pt()),Pt=()=>st({},ci),bl=t=>{t&&(["secure",...mt.secure??[]].forEach(e=>{Object.hasOwn(t,e)&&(E.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])}),Object.keys(t).forEach(e=>{e.startsWith("__")&&delete t[e]}),Object.keys(t).forEach(e=>{typeof t[e]=="string"&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],typeof t[e]=="object"&&bl(t[e])}))},f_=t=>{ar(t),t.fontFamily&&(!t.themeVariables||!t.themeVariables.fontFamily)&&(t.themeVariables={fontFamily:t.fontFamily}),Pe.push(t),Er(mt,Pe)},lr=(t=mt)=>{Pe=[],Er(t,Pe)},d_={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Oa={},p_=t=>{Oa[t]||(E.warn(d_[t]),Oa[t]=!0)},Tl=t=>{t&&(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&p_("LAZY_LOAD_DEPRECATED")},vl="c4",g_=t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),m_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/c4Diagram-dc8f04df.CKb4DDrj.js");return{diagram:e}},__vite__mapDeps([0,1,2,3]));return{id:vl,diagram:t}},__={id:vl,detector:g_,loader:m_},y_=__,kl="flowchart",C_=(t,e)=>{var i,r;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-wrapper"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)},x_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-622f9fc1.UNHUO6YN.js");return{diagram:e}},__vite__mapDeps([4,5,6,7,8,9,10,11,12,13,14,15,16,2,3]));return{id:kl,diagram:t}},b_={id:kl,detector:C_,loader:x_},T_=b_,Sl="flowchart-v2",v_=(t,e)=>{var i,r,n;return((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="dagre-d3"||((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="elk"?!1:/^\s*graph/.test(t)&&((n=e==null?void 0:e.flowchart)==null?void 0:n.defaultRenderer)==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)},k_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-v2-a33b4996.npThVBEn.js");return{diagram:e}},__vite__mapDeps([17,5,8,6,9,7,10,11,12,13,14,15,16,2,3]));return{id:Sl,diagram:t}},S_={id:Sl,detector:v_,loader:k_},w_=S_,wl="er",B_=t=>/^\s*erDiagram/.test(t),A_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/erDiagram-51d2b61e.BKvP5nV4.js");return{diagram:e}},__vite__mapDeps([18,6,7,13,14,15,2,3]));return{id:wl,diagram:t}},L_={id:wl,detector:B_,loader:A_},F_=L_,Bl="gitGraph",E_=t=>/^\s*gitGraph/.test(t),O_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/gitGraphDiagram-23af1bdb.xtAOwR_N.js");return{diagram:e}},__vite__mapDeps([19,2,3]));return{id:Bl,diagram:t}},M_={id:Bl,detector:E_,loader:O_},I_=M_,Al="gantt",$_=t=>/^\s*gantt/.test(t),D_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/ganttDiagram-a649f789.B3MVSZyS.js");return{diagram:e}},__vite__mapDeps([20,21,22,2,3]));return{id:Al,diagram:t}},N_={id:Al,detector:$_,loader:D_},R_=N_,Ll="info",P_=t=>/^\s*info/.test(t),q_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/infoDiagram-f86e0131.CYcEreMK.js");return{diagram:e}},__vite__mapDeps([23,2,3]));return{id:Ll,diagram:t}},z_={id:Ll,detector:P_,loader:q_},Fl="pie",W_=t=>/^\s*pie/.test(t),H_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/pieDiagram-31d824a1.BcWock7l.js");return{diagram:e}},__vite__mapDeps([24,25,15,26,22,14,2,3]));return{id:Fl,diagram:t}},j_={id:Fl,detector:W_,loader:H_},El="quadrantChart",U_=t=>/^\s*quadrantChart/.test(t),Y_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/quadrantDiagram-a712a7d9.CBHMGHp7.js");return{diagram:e}},__vite__mapDeps([27,21,22,2,3]));return{id:El,diagram:t}},V_={id:El,detector:U_,loader:Y_},G_=V_,Ol="xychart",X_=t=>/^\s*xychart-beta/.test(t),K_=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/xychartDiagram-4a8b8217.BboCrNzl.js");return{diagram:e}},__vite__mapDeps([28,12,22,26,21,13,14,15,2,3]));return{id:Ol,diagram:t}},Z_={id:Ol,detector:X_,loader:K_},J_=Z_,Ml="requirement",Q_=t=>/^\s*requirement(Diagram)?/.test(t),ty=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/requirementDiagram-eb878fee.DLnn6pB1.js");return{diagram:e}},__vite__mapDeps([29,6,7,13,14,15,2,3]));return{id:Ml,diagram:t}},ey={id:Ml,detector:Q_,loader:ty},iy=ey,Il="sequence",ry=t=>/^\s*sequenceDiagram/.test(t),ny=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/sequenceDiagram-66748113.CycNJCqh.js");return{diagram:e}},__vite__mapDeps([30,1,2,3]));return{id:Il,diagram:t}},oy={id:Il,detector:ry,loader:ny},ay=oy,$l="class",sy=(t,e)=>{var i;return((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t)},ly=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/classDiagram-8298e144.B6ahrBSz.js");return{diagram:e}},__vite__mapDeps([31,32,6,7,13,14,15,2,3]));return{id:$l,diagram:t}},cy={id:$l,detector:sy,loader:ly},hy=cy,Dl="classDiagram",uy=(t,e)=>{var i;return/^\s*classDiagram/.test(t)&&((i=e==null?void 0:e.class)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t)},fy=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/classDiagram-v2-296fb1cd.BlvxQji3.js");return{diagram:e}},__vite__mapDeps([33,32,6,9,7,10,11,12,13,14,15,2,3]));return{id:Dl,diagram:t}},dy={id:Dl,detector:uy,loader:fy},py=dy,Nl="state",gy=(t,e)=>{var i;return((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t)},my=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-35d39939.CGFuH3-m.js");return{diagram:e}},__vite__mapDeps([34,35,6,7,13,14,15,2,3]));return{id:Nl,diagram:t}},_y={id:Nl,detector:gy,loader:my},yy=_y,Rl="stateDiagram",Cy=(t,e)=>{var i;return!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&((i=e==null?void 0:e.state)==null?void 0:i.defaultRenderer)==="dagre-wrapper")},xy=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-v2-6c43c13a.on8Hb2_5.js");return{diagram:e}},__vite__mapDeps([36,35,6,9,7,10,11,12,13,14,15,2,3]));return{id:Rl,diagram:t}},by={id:Rl,detector:Cy,loader:xy},Ty=by,Pl="journey",vy=t=>/^\s*journey/.test(t),ky=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/journeyDiagram-de0d04b7.Cjc0E3Qw.js");return{diagram:e}},__vite__mapDeps([37,1,25,15,2,3]));return{id:Pl,diagram:t}},Sy={id:Pl,detector:vy,loader:ky},wy=Sy,By=function(t,e){for(let i of e)t.attr(i[0],i[1])},Ay=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r},ql=function(t,e,i,r){const n=Ay(e,i,r);By(t,n)},Ly=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;E.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;E.info(`Graph bounds: ${s}x${l}`,t),s=o+i*2,l=a+i*2,E.info(`Calculated bounds: ${s}x${l}`),ql(e,l,s,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},Yi={},Fy=(t,e,i)=>{let r="";return t in Yi&&Yi[t]?r=Yi[t](i):E.warn(`No theme found for ${t}`),` & { + font-family: ${i.fontFamily}; + font-size: ${i.fontSize}; + fill: ${i.textColor} + } + + /* Classes common for multiple diagrams */ + + & .error-icon { + fill: ${i.errorBkgColor}; + } + & .error-text { + fill: ${i.errorTextColor}; + stroke: ${i.errorTextColor}; + } + + & .edge-thickness-normal { + stroke-width: 2px; + } + & .edge-thickness-thick { + stroke-width: 3.5px + } + & .edge-pattern-solid { + stroke-dasharray: 0; + } + + & .edge-pattern-dashed{ + stroke-dasharray: 3; + } + .edge-pattern-dotted { + stroke-dasharray: 2; + } + + & .marker { + fill: ${i.lineColor}; + stroke: ${i.lineColor}; + } + & .marker.cross { + stroke: ${i.lineColor}; + } + + & svg { + font-family: ${i.fontFamily}; + font-size: ${i.fontSize}; + } + + ${r} + + ${e} +`},Ey=(t,e)=>{e!==void 0&&(Yi[t]=e)},Oy=Fy;let Kn="",Zn="",Jn="";const Qn=t=>yi(t,Pt()),My=()=>{Kn="",Jn="",Zn=""},Iy=t=>{Kn=Qn(t).replace(/^\s+/g,"")},$y=()=>Kn,Dy=t=>{Jn=Qn(t).replace(/\n\s+/g,` +`)},Ny=()=>Jn,Ry=t=>{Zn=Qn(t)},Py=()=>Zn,qy=Object.freeze(Object.defineProperty({__proto__:null,clear:My,getAccDescription:Ny,getAccTitle:$y,getDiagramTitle:Py,setAccDescription:Dy,setAccTitle:Iy,setDiagramTitle:Ry},Symbol.toStringTag,{value:"Module"})),zy=E,Wy=Un,to=Pt,b1=xl,T1=Re,Hy=t=>yi(t,to()),jy=Ly,Uy=()=>qy,cr={},hr=(t,e,i)=>{var r;if(cr[t])throw new Error(`Diagram ${t} already registered.`);cr[t]=e,i&&dl(t,i),Ey(t,e.styles),(r=e.injectUtils)==null||r.call(e,zy,Wy,to,Hy,jy,Uy(),()=>{})},eo=t=>{if(t in cr)return cr[t];throw new Yy(t)};class Yy extends Error{constructor(e){super(`Diagram ${e} not found.`)}}const Vy=t=>{var e;const{securityLevel:i}=to();let r=kt("body");if(i==="sandbox"){const a=((e=kt(`#i${t}`).node())==null?void 0:e.contentDocument)??document;r=kt(a.body)}return r.select(`#${t}`)},Gy=(t,e,i)=>{E.debug(`rendering svg for syntax error +`);const r=Vy(e),n=r.append("g");r.attr("viewBox","0 0 2412 512"),ql(r,100,512,!0),n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)},zl={draw:Gy},Xy=zl,Ky={db:{},renderer:zl,parser:{parser:{yy:{}},parse:()=>{}}},Zy=Ky,Wl="flowchart-elk",Jy=(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&((i=e==null?void 0:e.flowchart)==null?void 0:i.defaultRenderer)==="elk")},Qy=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/flowchart-elk-definition-930acc39.RaYPOHcR.js");return{diagram:e}},__vite__mapDeps([38,5,11,12,13,14,15,2,3]));return{id:Wl,diagram:t}},tC={id:Wl,detector:Jy,loader:Qy},eC=tC,Hl="timeline",iC=t=>/^\s*timeline/.test(t),rC=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/timeline-definition-6eaa3543.oX4ehz4e.js");return{diagram:e}},__vite__mapDeps([39,25,15,2,3]));return{id:Hl,diagram:t}},nC={id:Hl,detector:iC,loader:rC},oC=nC,jl="mindmap",aC=t=>/^\s*mindmap/.test(t),sC=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/mindmap-definition-b08d3ac4.BURIHg2K.js");return{diagram:e}},__vite__mapDeps([40,12,2,3]));return{id:jl,diagram:t}},lC={id:jl,detector:aC,loader:sC},cC=lC,Ul="sankey",hC=t=>/^\s*sankey-beta/.test(t),uC=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/sankeyDiagram-c599f8ec.DnE5IYY2.js");return{diagram:e}},__vite__mapDeps([41,26,22,42,2,3]));return{id:Ul,diagram:t}},fC={id:Ul,detector:hC,loader:uC},dC=fC,Yl="block",pC=t=>/^\s*block-beta/.test(t),gC=async()=>{const{diagram:t}=await K(async()=>{const{diagram:e}=await import("./chunks/blockDiagram-a8a0820c.B3oN9ihx.js");return{diagram:e}},__vite__mapDeps([43,10,6,11,12,13,14,15,26,22,16,42,2,3]));return{id:Yl,diagram:t}},mC={id:Yl,detector:pC,loader:gC},_C=mC;let Ma=!1;const io=()=>{Ma||(Ma=!0,hr("error",Zy,t=>t.toLowerCase().trim()==="error"),hr("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},t=>t.toLowerCase().trimStart().startsWith("---")),fl(y_,py,hy,F_,R_,z_,j_,iy,ay,eC,w_,T_,cC,oC,I_,Ty,yy,wy,G_,dC,J_,_C))};class Vl{constructor(e,i={}){this.text=e,this.metadata=i,this.type="graph",this.text=s_(e),this.text+=` +`;const r=Pt();try{this.type=Fr(e,r)}catch(o){this.type="error",this.detectError=o}const n=eo(this.type);E.debug("Type "+this.type),this.db=n.db,this.renderer=n.renderer,this.parser=n.parser,this.parser.parser.yy=this.db,this.init=n.init,this.parse()}parse(){var e,i,r,n,o;if(this.detectError)throw this.detectError;(i=(e=this.db).clear)==null||i.call(e);const a=Pt();(r=this.init)==null||r.call(this,a),this.metadata.title&&((o=(n=this.db).setDiagramTitle)==null||o.call(n,this.metadata.title)),this.parser.parse(this.text)}async render(e,i){await this.renderer.draw(this.text,e,i,this)}getParser(){return this.parser}getType(){return this.type}}const yC=async(t,e={})=>{const i=Fr(t,Pt());try{eo(i)}catch{const n=$0(i);if(!n)throw new ul(`Diagram ${i} not found.`);const{id:o,diagram:a}=await n();hr(o,a)}return new Vl(t,e)};let Ia=[];const CC=()=>{Ia.forEach(t=>{t()}),Ia=[]},xC="graphics-document document";function bC(t,e){t.attr("role",xC),e!==""&&t.attr("aria-roledescription",e)}function TC(t,e,i,r){if(t.insert!==void 0){if(i){const n=`chart-desc-${r}`;t.attr("aria-describedby",n),t.insert("desc",":first-child").attr("id",n).text(i)}if(e){const n=`chart-title-${r}`;t.attr("aria-labelledby",n),t.insert("title",":first-child").attr("id",n).text(e)}}}const vC=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function Gl(t){return typeof t>"u"||t===null}function kC(t){return typeof t=="object"&&t!==null}function SC(t){return Array.isArray(t)?t:Gl(t)?[]:[t]}function wC(t,e){var i,r,n,o;if(e)for(o=Object.keys(e),i=0,r=o.length;is&&(o=" ... ",e=r-s+o.length),i-r>s&&(a=" ...",i=r+s-a.length),{str:o+t.slice(e,i).replace(/\t/g,"→")+a,pos:r-e+o.length}}function tn(t,e){return ft.repeat(" ",e-t.length)+t}function $C(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var i=/\r?\n|\r|\0/g,r=[0],n=[],o,a=-1;o=i.exec(t.buffer);)n.push(o.index),r.push(o.index+o[0].length),t.position<=o.index&&a<0&&(a=r.length-2);a<0&&(a=r.length-1);var s="",l,c,u=Math.min(t.line+e.linesAfter,n.length).toString().length,f=e.maxLength-(e.indent+u+3);for(l=1;l<=e.linesBefore&&!(a-l<0);l++)c=Qr(t.buffer,r[a-l],n[a-l],t.position-(r[a]-r[a-l]),f),s=ft.repeat(" ",e.indent)+tn((t.line-l+1).toString(),u)+" | "+c.str+` +`+s;for(c=Qr(t.buffer,r[a],n[a],t.position,f),s+=ft.repeat(" ",e.indent)+tn((t.line+1).toString(),u)+" | "+c.str+` +`,s+=ft.repeat("-",e.indent+u+3+c.pos)+`^ +`,l=1;l<=e.linesAfter&&!(a+l>=n.length);l++)c=Qr(t.buffer,r[a+l],n[a+l],t.position-(r[a]-r[a+l]),f),s+=ft.repeat(" ",e.indent)+tn((t.line+l+1).toString(),u)+" | "+c.str+` +`;return s.replace(/\n$/,"")}var DC=$C,NC=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],RC=["scalar","sequence","mapping"];function PC(t){var e={};return t!==null&&Object.keys(t).forEach(function(i){t[i].forEach(function(r){e[String(r)]=i})}),e}function qC(t,e){if(e=e||{},Object.keys(e).forEach(function(i){if(NC.indexOf(i)===-1)throw new Zt('Unknown option "'+i+'" is met in definition of "'+t+'" YAML type.')}),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(i){return i},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=PC(e.styleAliases||null),RC.indexOf(this.kind)===-1)throw new Zt('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var lt=qC;function $a(t,e){var i=[];return t[e].forEach(function(r){var n=i.length;i.forEach(function(o,a){o.tag===r.tag&&o.kind===r.kind&&o.multi===r.multi&&(n=a)}),i[n]=r}),i}function zC(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,i;function r(n){n.multi?(t.multi[n.kind].push(n),t.multi.fallback.push(n)):t[n.kind][n.tag]=t.fallback[n.tag]=n}for(e=0,i=arguments.length;e=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),lx=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function cx(t){return!(t===null||!lx.test(t)||t[t.length-1]==="_")}function hx(t){var e,i;return e=t.replace(/_/g,"").toLowerCase(),i=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?i===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:i*parseFloat(e,10)}var ux=/^[-+]?[0-9]+e/;function fx(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ft.isNegativeZero(t))return"-0.0";return i=t.toString(10),ux.test(i)?i.replace("e",".e"):i}function dx(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||ft.isNegativeZero(t))}var px=new lt("tag:yaml.org,2002:float",{kind:"scalar",resolve:cx,construct:hx,predicate:dx,represent:fx,defaultStyle:"lowercase"}),Kl=YC.extend({implicit:[KC,tx,sx,px]}),gx=Kl,Zl=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Jl=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function mx(t){return t===null?!1:Zl.exec(t)!==null||Jl.exec(t)!==null}function _x(t){var e,i,r,n,o,a,s,l=0,c=null,u,f,h;if(e=Zl.exec(t),e===null&&(e=Jl.exec(t)),e===null)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],f=+(e[11]||0),c=(u*60+f)*6e4,e[9]==="-"&&(c=-c)),h=new Date(Date.UTC(i,r,n,o,a,s,l)),c&&h.setTime(h.getTime()-c),h}function yx(t){return t.toISOString()}var Cx=new lt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:mx,construct:_x,instanceOf:Date,represent:yx});function xx(t){return t==="<<"||t===null}var bx=new lt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:xx}),ro=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function Tx(t){if(t===null)return!1;var e,i,r=0,n=t.length,o=ro;for(i=0;i64)){if(e<0)return!1;r+=6}return r%8===0}function vx(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=ro,a=0,s=[];for(e=0;e>16&255),s.push(a>>8&255),s.push(a&255)),a=a<<6|o.indexOf(r.charAt(e));return i=n%4*6,i===0?(s.push(a>>16&255),s.push(a>>8&255),s.push(a&255)):i===18?(s.push(a>>10&255),s.push(a>>2&255)):i===12&&s.push(a>>4&255),new Uint8Array(s)}function kx(t){var e="",i=0,r,n,o=t.length,a=ro;for(r=0;r>18&63],e+=a[i>>12&63],e+=a[i>>6&63],e+=a[i&63]),i=(i<<8)+t[r];return n=o%3,n===0?(e+=a[i>>18&63],e+=a[i>>12&63],e+=a[i>>6&63],e+=a[i&63]):n===2?(e+=a[i>>10&63],e+=a[i>>4&63],e+=a[i<<2&63],e+=a[64]):n===1&&(e+=a[i>>2&63],e+=a[i<<4&63],e+=a[64],e+=a[64]),e}function Sx(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var wx=new lt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Tx,construct:vx,predicate:Sx,represent:kx}),Bx=Object.prototype.hasOwnProperty,Ax=Object.prototype.toString;function Lx(t){if(t===null)return!0;var e=[],i,r,n,o,a,s=t;for(i=0,r=s.length;i>10)+55296,(t-65536&1023)+56320)}var rc=new Array(256),nc=new Array(256);for(var Be=0;Be<256;Be++)rc[Be]=Ra(Be)?1:0,nc[Be]=Ra(Be);function Xx(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||qx,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function oc(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=DC(i),new Zt(e,i)}function L(t,e){throw oc(t,e)}function dr(t,e){t.onWarning&&t.onWarning.call(null,oc(t,e))}var Pa={YAML:function(e,i,r){var n,o,a;e.version!==null&&L(e,"duplication of %YAML directive"),r.length!==1&&L(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),n===null&&L(e,"ill-formed argument of the YAML directive"),o=parseInt(n[1],10),a=parseInt(n[2],10),o!==1&&L(e,"unacceptable YAML version of the document"),e.version=r[0],e.checkLineBreaks=a<2,a!==1&&a!==2&&dr(e,"unsupported YAML version of the document")},TAG:function(e,i,r){var n,o;r.length!==2&&L(e,"TAG directive accepts exactly two arguments"),n=r[0],o=r[1],ec.test(n)||L(e,"ill-formed tag handle (first argument) of the TAG directive"),ae.call(e.tagMap,n)&&L(e,'there is a previously declared suffix for "'+n+'" tag handle'),ic.test(o)||L(e,"ill-formed tag prefix (second argument) of the TAG directive");try{o=decodeURIComponent(o)}catch{L(e,"tag prefix is malformed: "+o)}e.tagMap[n]=o}};function ne(t,e,i,r){var n,o,a,s;if(e1&&(t.result+=ft.repeat(` +`,e-1))}function Kx(t,e,i){var r,n,o,a,s,l,c,u,f=t.kind,h=t.result,p;if(p=t.input.charCodeAt(t.position),yt(p)||Ae(p)||p===35||p===38||p===42||p===33||p===124||p===62||p===39||p===34||p===37||p===64||p===96||(p===63||p===45)&&(n=t.input.charCodeAt(t.position+1),yt(n)||i&&Ae(n)))return!1;for(t.kind="scalar",t.result="",o=a=t.position,s=!1;p!==0;){if(p===58){if(n=t.input.charCodeAt(t.position+1),yt(n)||i&&Ae(n))break}else if(p===35){if(r=t.input.charCodeAt(t.position-1),yt(r))break}else{if(t.position===t.lineStart&&Or(t)||i&&Ae(p))break;if(Nt(p))if(l=t.line,c=t.lineStart,u=t.lineIndent,tt(t,!1,-1),t.lineIndent>=e){s=!0,p=t.input.charCodeAt(t.position);continue}else{t.position=a,t.line=l,t.lineStart=c,t.lineIndent=u;break}}s&&(ne(t,o,a,!1),oo(t,t.line-l),o=a=t.position,s=!1),ge(p)||(a=t.position+1),p=t.input.charCodeAt(++t.position)}return ne(t,o,a,!1),t.result?!0:(t.kind=f,t.result=h,!1)}function Zx(t,e){var i,r,n;if(i=t.input.charCodeAt(t.position),i!==39)return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;(i=t.input.charCodeAt(t.position))!==0;)if(i===39)if(ne(t,r,t.position,!0),i=t.input.charCodeAt(++t.position),i===39)r=t.position,t.position++,n=t.position;else return!0;else Nt(i)?(ne(t,r,n,!0),oo(t,tt(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Or(t)?L(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);L(t,"unexpected end of the stream within a single quoted scalar")}function Jx(t,e){var i,r,n,o,a,s;if(s=t.input.charCodeAt(t.position),s!==34)return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;(s=t.input.charCodeAt(t.position))!==0;){if(s===34)return ne(t,i,t.position,!0),t.position++,!0;if(s===92){if(ne(t,i,t.position,!0),s=t.input.charCodeAt(++t.position),Nt(s))tt(t,!1,e);else if(s<256&&rc[s])t.result+=nc[s],t.position++;else if((a=Yx(s))>0){for(n=a,o=0;n>0;n--)s=t.input.charCodeAt(++t.position),(a=Ux(s))>=0?o=(o<<4)+a:L(t,"expected hexadecimal character");t.result+=Gx(o),t.position++}else L(t,"unknown escape sequence");i=r=t.position}else Nt(s)?(ne(t,i,r,!0),oo(t,tt(t,!1,e)),i=r=t.position):t.position===t.lineStart&&Or(t)?L(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}L(t,"unexpected end of the stream within a double quoted scalar")}function Qx(t,e){var i=!0,r,n,o,a=t.tag,s,l=t.anchor,c,u,f,h,p,m=Object.create(null),b,S,R,v;if(v=t.input.charCodeAt(t.position),v===91)u=93,p=!1,s=[];else if(v===123)u=125,p=!0,s={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=s),v=t.input.charCodeAt(++t.position);v!==0;){if(tt(t,!0,e),v=t.input.charCodeAt(t.position),v===u)return t.position++,t.tag=a,t.anchor=l,t.kind=p?"mapping":"sequence",t.result=s,!0;i?v===44&&L(t,"expected the node content, but found ','"):L(t,"missed comma between flow collection entries"),S=b=R=null,f=h=!1,v===63&&(c=t.input.charCodeAt(t.position+1),yt(c)&&(f=h=!0,t.position++,tt(t,!0,e))),r=t.line,n=t.lineStart,o=t.position,qe(t,e,ur,!1,!0),S=t.tag,b=t.result,tt(t,!0,e),v=t.input.charCodeAt(t.position),(h||t.line===r)&&v===58&&(f=!0,v=t.input.charCodeAt(++t.position),tt(t,!0,e),qe(t,e,ur,!1,!0),R=t.result),p?Le(t,s,m,S,b,R,r,n,o):f?s.push(Le(t,null,m,S,b,R,r,n,o)):s.push(b),tt(t,!0,e),v=t.input.charCodeAt(t.position),v===44?(i=!0,v=t.input.charCodeAt(++t.position)):i=!1}L(t,"unexpected end of the stream within a flow collection")}function tb(t,e){var i,r,n=en,o=!1,a=!1,s=e,l=0,c=!1,u,f;if(f=t.input.charCodeAt(t.position),f===124)r=!1;else if(f===62)r=!0;else return!1;for(t.kind="scalar",t.result="";f!==0;)if(f=t.input.charCodeAt(++t.position),f===43||f===45)en===n?n=f===43?Da:zx:L(t,"repeat of a chomping mode identifier");else if((u=Vx(f))>=0)u===0?L(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):a?L(t,"repeat of an indentation width identifier"):(s=e+u-1,a=!0);else break;if(ge(f)){do f=t.input.charCodeAt(++t.position);while(ge(f));if(f===35)do f=t.input.charCodeAt(++t.position);while(!Nt(f)&&f!==0)}for(;f!==0;){for(no(t),t.lineIndent=0,f=t.input.charCodeAt(t.position);(!a||t.lineIndents&&(s=t.lineIndent),Nt(f)){l++;continue}if(t.lineIndente)&&l!==0)L(t,"bad indentation of a sequence entry");else if(t.lineIndente)&&(S&&(a=t.line,s=t.lineStart,l=t.position),qe(t,e,fr,!0,n)&&(S?m=t.result:b=t.result),S||(Le(t,f,h,p,m,b,a,s,l),p=m=b=null),tt(t,!0,-1),v=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&v!==0)L(t,"bad indentation of a mapping entry");else if(t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndente?l=1:t.lineIndent===e?l=0:t.lineIndent tag; it should be "scalar", not "'+t.kind+'"'),f=0,h=t.implicitTypes.length;f"),t.result!==null&&m.kind!==t.kind&&L(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+m.kind+'", not "'+t.kind+'"'),m.resolve(t.result,t.tag)?(t.result=m.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):L(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||u}function ob(t){var e=t.position,i,r,n,o=!1,a;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(a=t.input.charCodeAt(t.position))!==0&&(tt(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||a!==37));){for(o=!0,a=t.input.charCodeAt(++t.position),i=t.position;a!==0&&!yt(a);)a=t.input.charCodeAt(++t.position);for(r=t.input.slice(i,t.position),n=[],r.length<1&&L(t,"directive name must not be less than one character in length");a!==0;){for(;ge(a);)a=t.input.charCodeAt(++t.position);if(a===35){do a=t.input.charCodeAt(++t.position);while(a!==0&&!Nt(a));break}if(Nt(a))break;for(i=t.position;a!==0&&!yt(a);)a=t.input.charCodeAt(++t.position);n.push(t.input.slice(i,t.position))}a!==0&&no(t),ae.call(Pa,r)?Pa[r](t,r,n):dr(t,'unknown document directive "'+r+'"')}if(tt(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,tt(t,!0,-1)):o&&L(t,"directives end mark is expected"),qe(t,t.lineIndent-1,fr,!1,!0),tt(t,!0,-1),t.checkLineBreaks&&Hx.test(t.input.slice(e,t.position))&&dr(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Or(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,tt(t,!0,-1));return}if(t.position"u"&&(i=e,e=null);var r=ac(t,i);if(typeof e!="function")return r;for(var n=0,o=r.length;nt.replace(/\r\n?/g,` +`).replace(/<(\w+)([^>]*)>/g,(e,i,r)=>"<"+i+r.replace(/="([^"]*)"/g,"='$1'")+">"),gb=t=>{const{text:e,metadata:i}=db(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},mb=t=>{const e=li.detectInit(t)??{},i=li.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some(({type:r})=>{}):(i==null?void 0:i.type)==="wrap"&&(e.wrap=!0),{text:q0(t),directive:e}};function sc(t){const e=pb(t),i=gb(e),r=mb(i.text),n=_l(i.config,r.directive);return t=vC(r.text),{code:t,title:i.title,config:n}}const _b=5e4,yb="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",Cb="sandbox",xb="loose",bb="http://www.w3.org/2000/svg",Tb="http://www.w3.org/1999/xlink",vb="http://www.w3.org/1999/xhtml",kb="100%",Sb="100%",wb="border:0;margin:0;",Bb="margin:0",Ab="allow-top-navigation-by-user-activation allow-popups",Lb='The "iframe" tag is not supported by your browser.',Fb=["foreignobject"],Eb=["dominant-baseline"];function lc(t){const e=sc(t);return lr(),f_(e.config??{}),e}async function Ob(t,e){io(),t=lc(t).code;try{await ao(t)}catch(i){if(e!=null&&e.suppressErrors)return!1;throw i}return!0}const Wa=(t,e,i=[])=>` +.${t} ${e} { ${i.join(" !important; ")} !important; }`,Mb=(t,e={})=>{var i;let r="";if(t.themeCSS!==void 0&&(r+=` +${t.themeCSS}`),t.fontFamily!==void 0&&(r+=` +:root { --mermaid-font-family: ${t.fontFamily}}`),t.altFontFamily!==void 0&&(r+=` +:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!Jr(e)){const s=t.htmlLabels||((i=t.flowchart)==null?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const l in e){const c=e[l];Jr(c.styles)||s.forEach(u=>{r+=Wa(c.id,u,c.styles)}),Jr(c.textStyles)||(r+=Wa(c.id,"tspan",c.textStyles))}}return r},Ib=(t,e,i,r)=>{const n=Mb(t,i),o=Oy(e,n,t.themeVariables);return yn(Um(`${r}{${o}}`),Vm)},$b=(t="",e,i)=>{let r=t;return!i&&!e&&(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=l_(r),r=r.replace(/
/g,"
"),r},Db=(t="",e)=>{var i,r;const n=(r=(i=e==null?void 0:e.viewBox)==null?void 0:i.baseVal)!=null&&r.height?e.viewBox.baseVal.height+"px":Sb,o=btoa(''+t+"");return``},Ha=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns",bb);return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function ja(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Nb=(t,e,i,r)=>{var n,o,a;(n=t.getElementById(e))==null||n.remove(),(o=t.getElementById(i))==null||o.remove(),(a=t.getElementById(r))==null||a.remove()},Rb=async function(t,e,i){var r,n,o,a,s,l;io();const c=lc(e);e=c.code;const u=Pt();E.debug(u),e.length>((u==null?void 0:u.maxTextSize)??_b)&&(e=yb);const f="#"+t,h="i"+t,p="#"+h,m="d"+t,b="#"+m;let S=kt("body");const R=u.securityLevel===Cb,v=u.securityLevel===xb,Y=u.fontFamily;if(i!==void 0){if(i&&(i.innerHTML=""),R){const F=ja(kt(i),h);S=kt(F.nodes()[0].contentDocument.body),S.node().style.margin=0}else S=kt(i);Ha(S,t,m,`font-family: ${Y}`,Tb)}else{if(Nb(document,t,m,h),R){const F=ja(kt("body"),h);S=kt(F.nodes()[0].contentDocument.body),S.node().style.margin=0}else S=kt("body");Ha(S,t,m)}let D,U;try{D=await ao(e,{title:c.title})}catch(F){D=new Vl("error"),U=F}const X=S.select(b).node(),z=D.type,Wt=X.firstChild,Z=Wt.firstChild,W=(n=(r=D.renderer).getClasses)==null?void 0:n.call(r,e,D),rt=Ib(u,z,W,f),Ht=document.createElement("style");Ht.innerHTML=rt,Wt.insertBefore(Ht,Z);try{await D.renderer.draw(e,t,Ea,D)}catch(F){throw Xy.draw(e,t,Ea),F}const M=S.select(`${b} svg`),x=(a=(o=D.db).getAccTitle)==null?void 0:a.call(o),C=(l=(s=D.db).getAccDescription)==null?void 0:l.call(s);qb(z,M,x,C),S.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns",vb);let k=S.select(b).node().innerHTML;if(E.debug("config.arrowMarkerAbsolute",u.arrowMarkerAbsolute),k=$b(k,R,sl(u.arrowMarkerAbsolute)),R){const F=S.select(b+" svg").node();k=Db(k,F)}else v||(k=$e.sanitize(k,{ADD_TAGS:Fb,ADD_ATTR:Eb}));if(CC(),U)throw U;const I=kt(R?p:b).node();return I&&"remove"in I&&I.remove(),{svg:k,bindFunctions:D.db.bindFunctions}};function Pb(t={}){var e;t!=null&&t.fontFamily&&!((e=t.themeVariables)!=null&&e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),h_(t),t!=null&&t.theme&&t.theme in Jt?t.themeVariables=Jt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Jt.default.getThemeVariables(t.themeVariables));const i=typeof t=="object"?c_(t):Cl();Un(i.logLevel),io()}const ao=(t,e={})=>{const{code:i}=sc(t);return yC(i,e)};function qb(t,e,i,r){bC(e,t),TC(e,i,r,e.attr("id"))}const ye=Object.freeze({render:Rb,parse:Ob,getDiagramFromText:ao,initialize:Pb,getConfig:Pt,setConfig:xl,getSiteConfig:Cl,updateSiteConfig:u_,reset:()=>{lr()},globalReset:()=>{lr(Re)},defaultConfig:Re});Un(Pt().logLevel);lr(Pt());const zb=async()=>{E.debug("Loading registered diagrams");const e=(await Promise.allSettled(Object.entries(Ne).map(async([i,{detector:r,loader:n}])=>{if(n)try{eo(i)}catch{try{const{diagram:a,id:s}=await n();hr(s,a,r)}catch(a){throw E.error(`Failed to load external diagram with key ${i}. Removing from detectors.`),delete Ne[i],a}}}))).filter(i=>i.status==="rejected");if(e.length>0){E.error(`Failed to load ${e.length} external diagrams`);for(const i of e)E.error(i);throw new Error(`Failed to load ${e.length} external diagrams`)}},Wb=(t,e,i)=>{E.warn(t),ml(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},cc=async function(t={querySelector:".mermaid"}){try{await Hb(t)}catch(e){if(ml(e)&&E.error(e.str),Ct.parseError&&Ct.parseError(e),!t.suppressErrors)throw E.error("Use the suppressErrors option to suppress these errors"),e}},Hb=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const r=ye.getConfig();E.debug(`${t?"":"No "}Callback function found`);let n;if(i)n=i;else if(e)n=document.querySelectorAll(e);else throw new Error("Nodes and querySelector are both undefined");E.debug(`Found ${n.length} diagrams`),(r==null?void 0:r.startOnLoad)!==void 0&&(E.debug("Start On Load: "+(r==null?void 0:r.startOnLoad)),ye.updateSiteConfig({startOnLoad:r==null?void 0:r.startOnLoad}));const o=new li.InitIDGenerator(r.deterministicIds,r.deterministicIDSeed);let a;const s=[];for(const l of Array.from(n)){E.info("Rendering diagram: "+l.id);/*! Check if previously processed */if(l.getAttribute("data-processed"))continue;l.setAttribute("data-processed","true");const c=`mermaid-${o.next()}`;a=l.innerHTML,a=Uc(li.entityDecode(a)).trim().replace(//gi,"
");const u=li.detectInit(a);u&&E.debug("Detected early reinit: ",u);try{const{svg:f,bindFunctions:h}=await dc(c,a,l);l.innerHTML=f,t&&await t(c),h&&h(l)}catch(f){Wb(f,s,Ct.parseError)}}if(s.length>0)throw s[0]},hc=function(t){ye.initialize(t)},jb=async function(t,e,i){E.warn("mermaid.init is deprecated. Please use run instead."),t&&hc(t);const r={postRenderCallback:i,querySelector:".mermaid"};typeof e=="string"?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await cc(r)},Ub=async(t,{lazyLoad:e=!0}={})=>{fl(...t),e===!1&&await zb()},uc=function(){if(Ct.startOnLoad){const{startOnLoad:t}=ye.getConfig();t&&Ct.run().catch(e=>E.error("Mermaid failed to initialize",e))}};if(typeof document<"u"){/*! + * Wait for document loaded before starting the execution + */window.addEventListener("load",uc,!1)}const Yb=function(t){Ct.parseError=t},pr=[];let rn=!1;const fc=async()=>{if(!rn){for(rn=!0;pr.length>0;){const t=pr.shift();if(t)try{await t()}catch(e){E.error("Error executing queue",e)}}rn=!1}},Vb=async(t,e)=>new Promise((i,r)=>{const n=()=>new Promise((o,a)=>{ye.parse(t,e).then(s=>{o(s),i(s)},s=>{var l;E.error("Error parsing",s),(l=Ct.parseError)==null||l.call(Ct,s),a(s),r(s)})});pr.push(n),fc().catch(r)}),dc=(t,e,i)=>new Promise((r,n)=>{const o=()=>new Promise((a,s)=>{ye.render(t,e,i).then(l=>{a(l),r(l)},l=>{var c;E.error("Error parsing",l),(c=Ct.parseError)==null||c.call(Ct,l),s(l),n(l)})});pr.push(o),fc().catch(n)}),Ct={startOnLoad:!0,mermaidAPI:ye,parse:Vb,render:dc,init:jb,run:cc,registerExternalDiagrams:Ub,initialize:hc,parseError:void 0,contentLoaded:uc,setParseErrorHandler:Yb,detectType:Fr},Gb=async t=>{try{Ct.registerExternalDiagrams&&await Ct.registerExternalDiagrams(t)}catch(e){console.error(e)}},Xb=async(t,e,i)=>{Ct.initialize(i);const{svg:r}=await Ct.render(t,e);return r},Kb=["innerHTML"],Zb={__name:"Mermaid",props:{graph:{type:String,required:!0},id:{type:String,required:!0},class:{type:String,required:!1,default:"mermaid"}},setup(t){const e=t,i=Lo({securityLevel:"loose",startOnLoad:!1,externalDiagrams:[]}),{page:r}=Ua(),{frontmatter:n}=vc(r.value),o=n.mermaidTheme||"",a=Lo(null);let s=null;Ya(async()=>{var f;await Gb(i.value.externalDiagrams);let c=await K(()=>import("./chunks/virtual_mermaid-config.DDnGl6nM.js"),[]);c!=null&&c.default&&(i.value=c.default),s=new MutationObserver(async()=>await l()),s.observe(document.documentElement,{attributes:!0}),await l(),((f=//.exec(decodeURIComponent(e.graph)))==null?void 0:f.length)>0&&setTimeout(()=>{let h=document.getElementsByTagName("img"),p=Array.from(h);p.length&&Promise.all(p.filter(m=>!m.complete).map(m=>new Promise(b=>{m.onload=m.onerror=b}))).then(async()=>{await l()})},100)}),kc(()=>s.disconnect());const l=async()=>{const c=document.documentElement.classList.contains("dark");let u={...i.value};o&&(u.theme=o),c&&(u.theme="dark");let f=await Xb(e.id,decodeURIComponent(e.graph),u);const h=Math.random().toString(36).substring(7);a.value=`${f} ${h}`};return(c,u)=>(Sc(),wc("div",{innerHTML:a.value,class:Bc(e.class)},null,10,Kb))}};function pc(t){if(t.extends){const e=pc(t.extends);return{...e,...t,async enhanceApp(i){e.enhanceApp&&await e.enhanceApp(i),t.enhanceApp&&await t.enhanceApp(i)}}}return t}const Oe=pc(jc),Jb=Rc({name:"VitePressApp",setup(){const{site:t,lang:e,dir:i}=Ua();return Ya(()=>{Pc(()=>{document.documentElement.lang=e.value,document.documentElement.dir=i.value})}),t.value.router.prefetchLinks&&qc(),zc(),Wc(),Oe.setup&&Oe.setup(),()=>Hc(Oe.Layout)}});async function Qb(){globalThis.__VITEPRESS__=!0;const t=e1(),e=t1();e.provide(Lc,t);const i=Fc(t.route);return e.provide(Ec,i),e.component("Mermaid",Zb),e.component("Content",Oc),e.component("ClientOnly",Mc),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}}),Oe.enhanceApp&&await Oe.enhanceApp({app:e,router:t,siteData:Ic}),{app:e,router:t,data:i}}function t1(){return $c(Jb)}function e1(){let t=nn,e;return Dc(i=>{let r=Nc(i),n=null;return r&&(t&&(e=r),(t||e===r)&&(r=r.replace(/\.js$/,".lean.js")),n=import(r)),nn&&(t=!1),n},Oe.NotFound)}nn&&Qb().then(({app:t,router:e,data:i})=>{e.go().then(()=>{Ac(e.route,i.site),t.mount("#app")})});export{ua as $,My as A,ki as B,ze as C,or as D,Sr as E,um as F,Zm as G,vi as H,nr as I,om as J,Zs as K,js as L,cg as M,hg as N,he as O,ma as P,tm as Q,Ce as R,ir as S,ug as T,zn as U,lg as V,pg as W,We as X,nm as Y,se as Z,br as _,Ny as a,m1 as a$,Wn as a0,Ys as a1,Ks as a2,Qs as a3,ag as a4,bn as a5,Bm as a6,Cg as a7,xm as a8,Pn as a9,n1 as aA,Xc as aB,Fn as aC,re as aD,fi as aE,qo as aF,Vu as aG,Vy as aH,f1 as aI,O0 as aJ,_l as aK,Xn as aL,In as aM,s1 as aN,h1 as aO,Vo as aP,Yo as aQ,u1 as aR,c1 as aS,o1 as aT,a1 as aU,p1 as aV,d1 as aW,l1 as aX,w0 as aY,Pt as aZ,Aa as a_,Jr as aa,bt as ab,ss as ac,rh as ad,Ag as ae,oi as af,wm as ag,Cm as ah,Am as ai,qn as aj,Fm as ak,$ as al,Rt as am,l_ as an,pd as ao,Uc as ap,b1 as aq,g1 as ar,jy as as,J0 as at,Ln as au,ls as av,_t as aw,bi as ax,qu as ay,us as az,Dy as b,D0 as b0,K0 as b1,Yc as b2,Vc as b3,qy as b4,Ti as b5,A as b6,O as b7,to as c,Qb as createApp,yi as d,st as e,sr as f,$y as g,kt as h,ql as i,Yn as j,r_ as k,E as l,Ga as m,ud as n,X0 as o,sl as p,W0 as q,x0 as r,Iy as s,Ly as t,Si as u,T1 as v,e_ as w,Ry as x,Py as y,li as z}; diff --git a/assets/azure-graph-permissions-setup.md.COlBgxzm.js b/assets/azure-graph-permissions-setup.md.CQS9UkSF.js similarity index 98% rename from assets/azure-graph-permissions-setup.md.COlBgxzm.js rename to assets/azure-graph-permissions-setup.md.CQS9UkSF.js index 159d6d5d..63f288bf 100644 --- a/assets/azure-graph-permissions-setup.md.COlBgxzm.js +++ b/assets/azure-graph-permissions-setup.md.CQS9UkSF.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.01Cf-Wcw.js";const r="/assets/2020-12-07-15-46-18.DeHJW7MI.png",s="/assets/2020-12-07-15-47-07.D2JsNLB5.png",i="/assets/2022-12-12_10-42-55.m3LA6Cai.png",n="/assets/2020-12-07-15-47-33.D0KJ5TTo.png",l="/assets/2021-08-16-13-19-15.BgjUtH5A.png",c="/assets/2021-08-16-13-20-45.CoA6pbo3.png",m="/assets/2021-08-16-13-23-26.Dui6prVy.png",q=JSON.parse('{"title":"AzureAD/365 Graph Permissions","description":"","frontmatter":{},"headers":[],"relativePath":"azure-graph-permissions-setup.md","filePath":"azure-graph-permissions-setup.md"}'),u={name:"azure-graph-permissions-setup.md"},p=o('

AzureAD/365 Graph Permissions

Your first ImmyBot tenant will be automatically linked to the Azure tenant that you signed up for ImmyBot with. You can link other ImmyBot tenants to Azure from the tenant Azure tab.

Linking to an Azure Tenant

After creating an ImmyBot tenant, link it to an Azure tenant by navigating to the Azure tab in ImmyBot and entering the Azure tenant's principal id or domain and clicking Save.

Azure Permission Level

Once your ImmyBot tenant has been linked to Azure, you can set the Azure Permission Level from the tenant Azure tab. This allows ImmyBot to:

  1. Sync all users from the Azure tenant
  2. Sync all users from your GDAP customers (please see GDAP Customers)
  3. Install the 365 applications a user is licensed for
    • Apps for business/Apps for entrprise/Project/Visio
  4. Deploy software to Teams, On-Premises Security Groups
    • Ex. Everyone in the Engineering Team gets AutoCAD 2022

The Azure Permission Level has two modes: Default and Custom

NB: In both the Default and Custom modes, consent must be provided for each customer you want to sync. Please see GDAP Customers for requirements

Default

In this mode, you don't need to create an app registration. You consent as an administrator, allowing ImmyBot access users in your tenant and your customers tenants. Please see GDAP Customers if you want ImmyBot to access your customers' users.

Custom

In this mode, you create an App Registration and provide its Application (client) Id and Secret to ImmyBot, allowing you to customize the permissions Immy has to you and your customer's environments.

Create an App Registration

Navigate to: https://aad.portal.azure.com/

Important! Your app registration must have a Web redirect uri of https://<your-domain>.immy.bot/consent-callback, replacing <your-domain> appropriately

Grant Permissions

See the screenshots below for the minimum permissions.

image

image

Create Client Secret

Please see GDAP Customers if you want ImmyBot to access your customers' data.

Copy the Application (client) ID and Client Secret Value into the form in ImmyBot.

GDAP Customers

To sync users from GDAP customers of your Azure Partner, permission must be granted in the customer tenants to Immy's app registration (Default or Custom). This can be achieved either by clicking on the Consent button for each customer individually ("Manual consent") or by using the Pre-consent button ("Pre-consent").

This can be done by clicking on the Consent or Reconsent button for the customer on either the Azure Settings page or ont he Azure tab of the ImmyBot tenat linked to the customer.

NB: When manually consenting to an Azure customer, you must authenticate using an administrator account from that customer!

Immy can automatically grant consent to your GDAP customers using the Partner Center API, removing the need to consent to each customer individually. To do this, you must authenticate to the Partner Center API with a user in the partner tenant that meets these requirements:

  1. Is a member of the AdminAgents security group
  2. Is given the Application administrator and Privileged role administrator Entra roles at the customer through the GDAP relationship

Example: GDAP Role Assignments

Here is an example GDAP relationship configuration that will work with Immy's pre-consent functionality:

  1. Create security group in the partner tenant named Application Administrators
  2. Create security group in the partner tenant named Privileged Role Administrators
  3. Assign the Application administrator Entra role to the Application Administrators security group on the customer's admin relationship
  4. Assign the Privileged role administrator Entra role to the Privileged Role Administrators security group on the customer's admin relationship
  5. Add the partner user that you wish to sign-in to the Partner Center API with to AdminAgents, Application Administrators and Privileged Role Administrators security groups

For more information, see these Azure docs:

Common Issues

AADSTS500113: No reply address is registered for the application

This error occurs when the redirect uri is not set correctly on the custom app registration. Please follow these steps to set the redirect uri correctly:

  1. Navigate to the Azure Portal
  2. Navigate to the Microsoft Entra ID blade
  3. Navigate to the App Registrations blade
  4. Select the app registration you created for ImmyBot
    • You may need to change the filter to "All Applications"
    • You can paste the Application (client) ID of your custom app registration into the search box to find it image
  5. Navigate to the Authentication blade
    • Select "Add a platform"
    • Select "Web" as the type image
    • Enter https://<your-domain>.immy.bot/consent-callback as the redirect uri, replacing <your-domain> appropriately
    • Click "Configure" image
',48),d=[p];function h(g,f,A,y,b,P){return a(),t("div",null,d)}const C=e(u,[["render",h]]);export{q as __pageData,C as default}; +import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.B49Yz1nR.js";const r="/assets/2020-12-07-15-46-18.DeHJW7MI.png",s="/assets/2020-12-07-15-47-07.D2JsNLB5.png",i="/assets/2022-12-12_10-42-55.m3LA6Cai.png",n="/assets/2020-12-07-15-47-33.D0KJ5TTo.png",l="/assets/2021-08-16-13-19-15.BgjUtH5A.png",c="/assets/2021-08-16-13-20-45.CoA6pbo3.png",m="/assets/2021-08-16-13-23-26.Dui6prVy.png",q=JSON.parse('{"title":"AzureAD/365 Graph Permissions","description":"","frontmatter":{},"headers":[],"relativePath":"azure-graph-permissions-setup.md","filePath":"azure-graph-permissions-setup.md"}'),u={name:"azure-graph-permissions-setup.md"},p=o('

AzureAD/365 Graph Permissions

Your first ImmyBot tenant will be automatically linked to the Azure tenant that you signed up for ImmyBot with. You can link other ImmyBot tenants to Azure from the tenant Azure tab.

Linking to an Azure Tenant

After creating an ImmyBot tenant, link it to an Azure tenant by navigating to the Azure tab in ImmyBot and entering the Azure tenant's principal id or domain and clicking Save.

Azure Permission Level

Once your ImmyBot tenant has been linked to Azure, you can set the Azure Permission Level from the tenant Azure tab. This allows ImmyBot to:

  1. Sync all users from the Azure tenant
  2. Sync all users from your GDAP customers (please see GDAP Customers)
  3. Install the 365 applications a user is licensed for
    • Apps for business/Apps for entrprise/Project/Visio
  4. Deploy software to Teams, On-Premises Security Groups
    • Ex. Everyone in the Engineering Team gets AutoCAD 2022

The Azure Permission Level has two modes: Default and Custom

NB: In both the Default and Custom modes, consent must be provided for each customer you want to sync. Please see GDAP Customers for requirements

Default

In this mode, you don't need to create an app registration. You consent as an administrator, allowing ImmyBot access users in your tenant and your customers tenants. Please see GDAP Customers if you want ImmyBot to access your customers' users.

Custom

In this mode, you create an App Registration and provide its Application (client) Id and Secret to ImmyBot, allowing you to customize the permissions Immy has to you and your customer's environments.

Create an App Registration

Navigate to: https://aad.portal.azure.com/

Important! Your app registration must have a Web redirect uri of https://<your-domain>.immy.bot/consent-callback, replacing <your-domain> appropriately

Grant Permissions

See the screenshots below for the minimum permissions.

image

image

Create Client Secret

Please see GDAP Customers if you want ImmyBot to access your customers' data.

Copy the Application (client) ID and Client Secret Value into the form in ImmyBot.

GDAP Customers

To sync users from GDAP customers of your Azure Partner, permission must be granted in the customer tenants to Immy's app registration (Default or Custom). This can be achieved either by clicking on the Consent button for each customer individually ("Manual consent") or by using the Pre-consent button ("Pre-consent").

This can be done by clicking on the Consent or Reconsent button for the customer on either the Azure Settings page or ont he Azure tab of the ImmyBot tenat linked to the customer.

NB: When manually consenting to an Azure customer, you must authenticate using an administrator account from that customer!

Immy can automatically grant consent to your GDAP customers using the Partner Center API, removing the need to consent to each customer individually. To do this, you must authenticate to the Partner Center API with a user in the partner tenant that meets these requirements:

  1. Is a member of the AdminAgents security group
  2. Is given the Application administrator and Privileged role administrator Entra roles at the customer through the GDAP relationship

Example: GDAP Role Assignments

Here is an example GDAP relationship configuration that will work with Immy's pre-consent functionality:

  1. Create security group in the partner tenant named Application Administrators
  2. Create security group in the partner tenant named Privileged Role Administrators
  3. Assign the Application administrator Entra role to the Application Administrators security group on the customer's admin relationship
  4. Assign the Privileged role administrator Entra role to the Privileged Role Administrators security group on the customer's admin relationship
  5. Add the partner user that you wish to sign-in to the Partner Center API with to AdminAgents, Application Administrators and Privileged Role Administrators security groups

For more information, see these Azure docs:

Common Issues

AADSTS500113: No reply address is registered for the application

This error occurs when the redirect uri is not set correctly on the custom app registration. Please follow these steps to set the redirect uri correctly:

  1. Navigate to the Azure Portal
  2. Navigate to the Microsoft Entra ID blade
  3. Navigate to the App Registrations blade
  4. Select the app registration you created for ImmyBot
    • You may need to change the filter to "All Applications"
    • You can paste the Application (client) ID of your custom app registration into the search box to find it image
  5. Navigate to the Authentication blade
    • Select "Add a platform"
    • Select "Web" as the type image
    • Enter https://<your-domain>.immy.bot/consent-callback as the redirect uri, replacing <your-domain> appropriately
    • Click "Configure" image
',48),d=[p];function h(g,f,A,y,b,P){return a(),t("div",null,d)}const C=e(u,[["render",h]]);export{q as __pageData,C as default}; diff --git a/assets/azure-graph-permissions-setup.md.COlBgxzm.lean.js b/assets/azure-graph-permissions-setup.md.CQS9UkSF.lean.js similarity index 83% rename from assets/azure-graph-permissions-setup.md.COlBgxzm.lean.js rename to assets/azure-graph-permissions-setup.md.CQS9UkSF.lean.js index 51d4b894..177e74b7 100644 --- a/assets/azure-graph-permissions-setup.md.COlBgxzm.lean.js +++ b/assets/azure-graph-permissions-setup.md.CQS9UkSF.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.01Cf-Wcw.js";const r="/assets/2020-12-07-15-46-18.DeHJW7MI.png",s="/assets/2020-12-07-15-47-07.D2JsNLB5.png",i="/assets/2022-12-12_10-42-55.m3LA6Cai.png",n="/assets/2020-12-07-15-47-33.D0KJ5TTo.png",l="/assets/2021-08-16-13-19-15.BgjUtH5A.png",c="/assets/2021-08-16-13-20-45.CoA6pbo3.png",m="/assets/2021-08-16-13-23-26.Dui6prVy.png",q=JSON.parse('{"title":"AzureAD/365 Graph Permissions","description":"","frontmatter":{},"headers":[],"relativePath":"azure-graph-permissions-setup.md","filePath":"azure-graph-permissions-setup.md"}'),u={name:"azure-graph-permissions-setup.md"},p=o("",48),d=[p];function h(g,f,A,y,b,P){return a(),t("div",null,d)}const C=e(u,[["render",h]]);export{q as __pageData,C as default}; +import{_ as e,c as t,o as a,a6 as o}from"./chunks/framework.B49Yz1nR.js";const r="/assets/2020-12-07-15-46-18.DeHJW7MI.png",s="/assets/2020-12-07-15-47-07.D2JsNLB5.png",i="/assets/2022-12-12_10-42-55.m3LA6Cai.png",n="/assets/2020-12-07-15-47-33.D0KJ5TTo.png",l="/assets/2021-08-16-13-19-15.BgjUtH5A.png",c="/assets/2021-08-16-13-20-45.CoA6pbo3.png",m="/assets/2021-08-16-13-23-26.Dui6prVy.png",q=JSON.parse('{"title":"AzureAD/365 Graph Permissions","description":"","frontmatter":{},"headers":[],"relativePath":"azure-graph-permissions-setup.md","filePath":"azure-graph-permissions-setup.md"}'),u={name:"azure-graph-permissions-setup.md"},p=o("",48),d=[p];function h(g,f,A,y,b,P){return a(),t("div",null,d)}const C=e(u,[["render",h]]);export{q as __pageData,C as default}; diff --git a/assets/build-your-own-integration.md.v8AUrf4X.js b/assets/build-your-own-integration.md.CbdX9QBf.js similarity index 99% rename from assets/build-your-own-integration.md.v8AUrf4X.js rename to assets/build-your-own-integration.md.CbdX9QBf.js index 03a6a2f2..49fd01a5 100644 --- a/assets/build-your-own-integration.md.v8AUrf4X.js +++ b/assets/build-your-own-integration.md.CbdX9QBf.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.01Cf-Wcw.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"build-your-own-integration.md","filePath":"build-your-own-integration.md"}'),t={name:"build-your-own-integration.md"},h=n(`

Build Your Own Integrations

Inbound vs Outbound Integrations

An inbound integration uses the ImmyBot REST API from an external service.

An outbound integration is defined in PowerShell within ImmyBot and typically consumes another service's API.

Inbound Integrations

Example - Install Software on a Computer

The following example will prompt you to select a piece of software, then select one or more computers to install that software on

  1. Create a brand new App Registration in https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/CreateApplicationBlade/quickStartType~/null/isMSAApp~/false, leave it completely unmodified, don’t change any defaults.
  2. Copy the Client (Application) ID into the $ClientID variable below
  3. Create a secret under Certificates and Secrets and copy the secret VALUE (NOT THE ID!!!!!!!1) into the $Secret variable below
  4. Plug one of your domains into the $AzureDomain variable below
  5. Navigate to the Enterprise App that was created in your Azure AD (You can do this by clicking the Managed Application link on the bottom right of the App Registration) and copy the object id of the Enterprise App
  6. Go into Immy->Show More->People->New and paste the Enterprise App's object id into the AD External ID field
  7. Make that person a user by navigating back to the People list and clicking Create User on the user you just created
  8. Make the user an admin by going to Show More->Users, clicking Edit, and checking the Admin box and clicking Update
  9. Run The code below
  10. Find the API endpoints by going to <yourinstance.immy.bot/swagger/index.html or by using the network tab in your browser as our frontend consumes those APIs.
  11. Modify the code below to suit your needs
powershell
$AzureDomain = '' # contoso.com
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.B49Yz1nR.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"build-your-own-integration.md","filePath":"build-your-own-integration.md"}'),t={name:"build-your-own-integration.md"},h=n(`

Build Your Own Integrations

Inbound vs Outbound Integrations

An inbound integration uses the ImmyBot REST API from an external service.

An outbound integration is defined in PowerShell within ImmyBot and typically consumes another service's API.

Inbound Integrations

Example - Install Software on a Computer

The following example will prompt you to select a piece of software, then select one or more computers to install that software on

  1. Create a brand new App Registration in https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/CreateApplicationBlade/quickStartType~/null/isMSAApp~/false, leave it completely unmodified, don’t change any defaults.
  2. Copy the Client (Application) ID into the $ClientID variable below
  3. Create a secret under Certificates and Secrets and copy the secret VALUE (NOT THE ID!!!!!!!1) into the $Secret variable below
  4. Plug one of your domains into the $AzureDomain variable below
  5. Navigate to the Enterprise App that was created in your Azure AD (You can do this by clicking the Managed Application link on the bottom right of the App Registration) and copy the object id of the Enterprise App
  6. Go into Immy->Show More->People->New and paste the Enterprise App's object id into the AD External ID field
  7. Make that person a user by navigating back to the People list and clicking Create User on the user you just created
  8. Make the user an admin by going to Show More->Users, clicking Edit, and checking the Admin box and clicking Update
  9. Run The code below
  10. Find the API endpoints by going to <yourinstance.immy.bot/swagger/index.html or by using the network tab in your browser as our frontend consumes those APIs.
  11. Modify the code below to suit your needs
powershell
$AzureDomain = '' # contoso.com
 $ClientID = '' # From the steps above
 $Secret = '' # From the steps above
 $InstanceSubdomain = '' # myinstance (don't include .immy.bot)
diff --git a/assets/build-your-own-integration.md.v8AUrf4X.lean.js b/assets/build-your-own-integration.md.CbdX9QBf.lean.js
similarity index 69%
rename from assets/build-your-own-integration.md.v8AUrf4X.lean.js
rename to assets/build-your-own-integration.md.CbdX9QBf.lean.js
index cc19f027..9861647a 100644
--- a/assets/build-your-own-integration.md.v8AUrf4X.lean.js
+++ b/assets/build-your-own-integration.md.CbdX9QBf.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.01Cf-Wcw.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"build-your-own-integration.md","filePath":"build-your-own-integration.md"}'),t={name:"build-your-own-integration.md"},h=n("",62),l=[h];function k(p,e,E,r,d,g){return a(),i("div",null,l)}const F=s(t,[["render",k]]);export{o as __pageData,F as default};
+import{_ as s,c as i,o as a,a6 as n}from"./chunks/framework.B49Yz1nR.js";const o=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"build-your-own-integration.md","filePath":"build-your-own-integration.md"}'),t={name:"build-your-own-integration.md"},h=n("",62),l=[h];function k(p,e,E,r,d,g){return a(),i("div",null,l)}const F=s(t,[["render",k]]);export{o as __pageData,F as default};
diff --git a/assets/chunks/VPAlgoliaSearchBox.Dx-SG-5N.js b/assets/chunks/VPAlgoliaSearchBox.hP-Vp1-_.js
similarity index 75%
rename from assets/chunks/VPAlgoliaSearchBox.Dx-SG-5N.js
rename to assets/chunks/VPAlgoliaSearchBox.hP-Vp1-_.js
index a461f617..14923146 100644
--- a/assets/chunks/VPAlgoliaSearchBox.Dx-SG-5N.js
+++ b/assets/chunks/VPAlgoliaSearchBox.hP-Vp1-_.js
@@ -1,4 +1,4 @@
-import{d as Zr,am as Qr,L as Gr,y as Yr,v as Xr,R as eo,o as to,c as no}from"./framework.01Cf-Wcw.js";import{u as ro}from"./theme.BwHuVLnS.js";/*! @docsearch/js 3.6.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */function on(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function N(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);n3)for(n=[n],i=3;i0?Ue(m.type,m.props,m.key,null,m.__v):m)!=null){if(m.__=n,m.__b=n.__b+1,(p=g[a])===null||p&&m.key==p.key&&m.type===p.type)g[a]=void 0;else for(v=0;v<_;v++){if((p=g[v])&&m.key==p.key&&m.type===p.type){g[v]=void 0;break}p=null}Qt(t,m,p=p||Et,o,i,u,s,l,f),h=m.__e,(v=m.ref)&&p.ref!=v&&(y||(y=[]),p.ref&&y.push(p.ref,null,m),y.push(v,m.__c||h,m)),h!=null?(d==null&&(d=h),typeof m.type=="function"&&m.__k!=null&&m.__k===p.__k?m.__d=l=vr(m,l,t):l=dr(t,m,p,g,h,l),f||n.type!=="option"?typeof n.type=="function"&&(n.__d=l):t.value=""):l&&p.__e==l&&l.parentNode!=t&&(l=nt(p))}for(n.__e=d,a=_;a--;)g[a]!=null&&(typeof n.type=="function"&&g[a].__e!=null&&g[a].__e==n.__d&&(n.__d=nt(r,a+1)),gr(g[a],g[a]));if(y)for(a=0;a3)for(n=[n],i=3;i=n.__.length&&n.__.push({}),n.__[t]}function Gt(t){return Ce=1,br(Sr,t)}function br(t,e,n){var r=it(xe++,2);return r.t=t,r.__c||(r.__=[n?n(e):Sr(void 0,e),function(o){var i=r.t(r.__[0],o);r.__[0]!==i&&(r.__=[i,r.__[1]],r.__c.setState({}))}],r.__c=K),r.__}function Yt(t,e){var n=it(xe++,3);!j.__s&&Xt(n.__H,e)&&(n.__=t,n.__H=e,K.__H.__h.push(n))}function hn(t,e){var n=it(xe++,4);!j.__s&&Xt(n.__H,e)&&(n.__=t,n.__H=e,K.__h.push(n))}function Ct(t,e){var n=it(xe++,7);return Xt(n.__H,e)&&(n.__=t(),n.__H=e,n.__h=t),n.__}function lo(){Ft.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(bt),t.__H.__h.forEach(Bt),t.__H.__h=[]}catch(e){t.__H.__h=[],j.__e(e,t.__v)}}),Ft=[]}j.__b=function(t){K=null,fn&&fn(t)},j.__r=function(t){mn&&mn(t),xe=0;var e=(K=t.__c).__H;e&&(e.__h.forEach(bt),e.__h.forEach(Bt),e.__h=[])},j.diffed=function(t){pn&&pn(t);var e=t.__c;e&&e.__H&&e.__H.__h.length&&(Ft.push(e)!==1&&sn===j.requestAnimationFrame||((sn=j.requestAnimationFrame)||function(n){var r,o=function(){clearTimeout(i),yn&&cancelAnimationFrame(r),setTimeout(n)},i=setTimeout(o,100);yn&&(r=requestAnimationFrame(o))})(lo)),K=void 0},j.__c=function(t,e){e.some(function(n){try{n.__h.forEach(bt),n.__h=n.__h.filter(function(r){return!r.__||Bt(r)})}catch(r){e.some(function(o){o.__h&&(o.__h=[])}),e=[],j.__e(r,n.__v)}}),vn&&vn(t,e)},j.unmount=function(t){dn&&dn(t);var e=t.__c;if(e&&e.__H)try{e.__H.__.forEach(bt)}catch(n){j.__e(n,e.__v)}};var yn=typeof requestAnimationFrame=="function";function bt(t){var e=K;typeof t.__c=="function"&&t.__c(),K=e}function Bt(t){var e=K;t.__c=t.__(),K=e}function Xt(t,e){return!t||t.length!==e.length||e.some(function(n,r){return n!==t[r]})}function Sr(t,e){return typeof e=="function"?e(t):e}function Or(t,e){for(var n in e)t[n]=e[n];return t}function Vt(t,e){for(var n in t)if(n!=="__source"&&!(n in e))return!0;for(var r in e)if(r!=="__source"&&t[r]!==e[r])return!0;return!1}function Kt(t){this.props=t}(Kt.prototype=new te).isPureReactComponent=!0,Kt.prototype.shouldComponentUpdate=function(t,e){return Vt(this.props,t)||Vt(this.state,e)};var gn=j.__b;j.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),gn&&gn(t)};var so=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911,_n=function(t,e){return t==null?null:ie(ie(t).map(e))},fo={map:_n,forEach:_n,count:function(t){return t?ie(t).length:0},only:function(t){var e=ie(t);if(e.length!==1)throw"Children.only";return e[0]},toArray:ie},mo=j.__e;function St(){this.__u=0,this.t=null,this.__b=null}function wr(t){var e=t.__.__c;return e&&e.__e&&e.__e(t)}function qe(){this.u=null,this.o=null}j.__e=function(t,e,n){if(t.then){for(var r,o=e;o=o.__;)if((r=o.__c)&&r.__c)return e.__e==null&&(e.__e=n.__e,e.__k=n.__k),r.__c(t,e)}mo(t,e,n)},(St.prototype=new te).__c=function(t,e){var n=e.__c,r=this;r.t==null&&(r.t=[]),r.t.push(n);var o=wr(r.__v),i=!1,u=function(){i||(i=!0,n.componentWillUnmount=n.__c,o?o(s):s())};n.__c=n.componentWillUnmount,n.componentWillUnmount=function(){u(),n.__c&&n.__c()};var s=function(){if(!--r.__u){if(r.state.__e){var f=r.state.__e;r.__v.__k[0]=function v(p,m,h){return p&&(p.__v=null,p.__k=p.__k&&p.__k.map(function(d){return v(d,m,h)}),p.__c&&p.__c.__P===m&&(p.__e&&h.insertBefore(p.__e,p.__d),p.__c.__e=!0,p.__c.__P=h)),p}(f,f.__c.__P,f.__c.__O)}var a;for(r.setState({__e:r.__b=null});a=r.t.pop();)a.forceUpdate()}},l=e.__h===!0;r.__u++||l||r.setState({__e:r.__b=r.__v.__k[0]}),t.then(u,u)},St.prototype.componentWillUnmount=function(){this.t=[]},St.prototype.render=function(t,e){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function i(u,s,l){return u&&(u.__c&&u.__c.__H&&(u.__c.__H.__.forEach(function(f){typeof f.__c=="function"&&f.__c()}),u.__c.__H=null),(u=Or({},u)).__c!=null&&(u.__c.__P===l&&(u.__c.__P=s),u.__c=null),u.__k=u.__k&&u.__k.map(function(f){return i(f,s,l)})),u}(this.__b,n,r.__O=r.__P)}this.__b=null}var o=e.__e&&ee(pe,null,t.fallback);return o&&(o.__h=null),[ee(pe,null,e.__e?null:t.children),o]};var bn=function(t,e,n){if(++n[1]===n[0]&&t.o.delete(e),t.props.revealOrder&&(t.props.revealOrder[0]!=="t"||!t.o.size))for(n=t.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),e.i.removeChild(r)}}),rt(ee(po,{context:e.context},t.__v),e.l)):e.l&&e.componentWillUnmount()}function Er(t,e){return ee(vo,{__v:t,i:e})}(qe.prototype=new te).__e=function(t){var e=this,n=wr(e.__v),r=e.o.get(t);return r[0]++,function(o){var i=function(){e.props.revealOrder?(r.push(o),bn(e,t,r)):o()};n?n(i):i()}},qe.prototype.render=function(t){this.u=null,this.o=new Map;var e=ie(t.children);t.revealOrder&&t.revealOrder[0]==="b"&&e.reverse();for(var n=e.length;n--;)this.o.set(e[n],this.u=[1,0,this.u]);return t.children},qe.prototype.componentDidUpdate=qe.prototype.componentDidMount=function(){var t=this;this.o.forEach(function(e,n){bn(t,n,e)})};var jr=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,ho=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,yo=function(t){return(typeof Symbol<"u"&&D(Symbol())=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(t)};function Pr(t,e,n){return e.__k==null&&(e.textContent=""),rt(t,e),typeof n=="function"&&n(),t?t.__c:null}te.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(te.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})});var Sn=j.event;function go(){}function _o(){return this.cancelBubble}function bo(){return this.defaultPrevented}j.event=function(t){return Sn&&(t=Sn(t)),t.persist=go,t.isPropagationStopped=_o,t.isDefaultPrevented=bo,t.nativeEvent=t};var Ir,On={configurable:!0,get:function(){return this.class}},wn=j.vnode;j.vnode=function(t){var e=t.type,n=t.props,r=n;if(typeof e=="string"){for(var o in r={},n){var i=n[o];o==="value"&&"defaultValue"in n&&i==null||(o==="defaultValue"&&"value"in n&&n.value==null?o="value":o==="download"&&i===!0?i="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+e)&&!yo(n.type)?o="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():ho.test(o)?o=o.replace(/[A-Z0-9]/,"-$&").toLowerCase():i===null&&(i=void 0),r[o]=i)}e=="select"&&r.multiple&&Array.isArray(r.value)&&(r.value=ie(n.children).forEach(function(u){u.props.selected=r.value.indexOf(u.props.value)!=-1})),e=="select"&&r.defaultValue!=null&&(r.value=ie(n.children).forEach(function(u){u.props.selected=r.multiple?r.defaultValue.indexOf(u.props.value)!=-1:r.defaultValue==u.props.value})),t.props=r}e&&n.class!=n.className&&(On.enumerable="className"in n,n.className!=null&&(r.class=n.className),Object.defineProperty(r,"className",On)),t.$$typeof=jr,wn&&wn(t)};var En=j.__r;j.__r=function(t){En&&En(t),Ir=t.__c};var So={ReactCurrentDispatcher:{current:{readContext:function(t){return Ir.__n[t.__c].props.value}}}};function jn(t){return!!t&&t.$$typeof===jr}(typeof performance>"u"?"undefined":D(performance))=="object"&&typeof performance.now=="function"&&performance.now.bind(performance);var c={useState:Gt,useReducer:br,useEffect:Yt,useLayoutEffect:hn,useRef:function(t){return Ce=5,Ct(function(){return{current:t}},[])},useImperativeHandle:function(t,e,n){Ce=6,hn(function(){typeof t=="function"?t(e()):t&&(t.current=e())},n==null?n:n.concat(t))},useMemo:Ct,useCallback:function(t,e){return Ce=8,Ct(function(){return t},e)},useContext:function(t){var e=K.context[t.__c],n=it(xe++,9);return n.__c=t,e?(n.__==null&&(n.__=!0,e.sub(K)),e.props.value):t.__},useDebugValue:function(t,e){j.useDebugValue&&j.useDebugValue(e?e(t):t)},version:"16.8.0",Children:fo,render:Pr,hydrate:function(t,e,n){return _r(t,e),typeof n=="function"&&n(),t?t.__c:null},unmountComponentAtNode:function(t){return!!t.__k&&(rt(null,t),!0)},createPortal:Er,createElement:ee,createContext:function(t,e){var n={__c:e="__cC"+sr++,__:t,Consumer:function(r,o){return r.children(o)},Provider:function(r){var o,i;return this.getChildContext||(o=[],(i={})[e]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(u){this.props.value!==u.value&&o.some(Ut)},this.sub=function(u){o.push(u);var s=u.componentWillUnmount;u.componentWillUnmount=function(){o.splice(o.indexOf(u),1),s&&s.call(u)}}),r.children}};return n.Provider.__=n.Consumer.contextType=n},createFactory:function(t){return ee.bind(null,t)},cloneElement:function(t){return jn(t)?uo.apply(null,arguments):t},createRef:function(){return{current:null}},Fragment:pe,isValidElement:jn,findDOMNode:function(t){return t&&(t.base||t.nodeType===1&&t)||null},Component:te,PureComponent:Kt,memo:function(t,e){function n(o){var i=this.props.ref,u=i==o.ref;return!u&&i&&(i.call?i(null):i.current=null),e?!e(this.props,o)||!u:Vt(this.props,o)}function r(o){return this.shouldComponentUpdate=n,ee(t,o)}return r.displayName="Memo("+(t.displayName||t.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r},forwardRef:function(t){function e(n,r){var o=Or({},n);return delete o.ref,t(o,(r=n.ref||r)&&(D(r)!="object"||"current"in r)?r:null)}return e.$$typeof=so,e.render=e,e.prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(t.displayName||t.name)+")",e},unstable_batchedUpdates:function(t,e){return t(e)},StrictMode:pe,Suspense:St,SuspenseList:qe,lazy:function(t){var e,n,r;function o(i){if(e||(e=t()).then(function(u){n=u.default||u},function(u){r=u}),r)throw r;if(!n)throw e;return ee(n,i)}return o.displayName="Lazy",o.__f=!0,o},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:So},Oo=["facetName","facetQuery"];function Pn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function Fe(t){for(var e=1;e=0||(a[l]=u[l]);return a}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function be(t,e){return function(n){if(Array.isArray(n))return n}(t)||function(n,r){var o=n==null?null:typeof Symbol<"u"&&n[Symbol.iterator]||n["@@iterator"];if(o!=null){var i,u,s=[],l=!0,f=!1;try{for(o=o.call(n);!(l=(i=o.next()).done)&&(s.push(i.value),!r||s.length!==r);l=!0);}catch(a){f=!0,u=a}finally{try{l||o.return==null||o.return()}finally{if(f)throw u}}return s}}(t,e)||Dr(t,e)||function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
 In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Dr(t,e){if(t){if(typeof t=="string")return Wt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set"?Array.from(t):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Wt(t,e):void 0}}function Wt(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0||(a[l]=u[l]);return a}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}function Xe(t){return Xe=typeof Symbol=="function"&&D(Symbol.iterator)=="symbol"?function(e){return D(e)}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":D(e)},Xe(t)}function Jn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable})),n.push.apply(n,r)}return n}function ri(t){for(var e=1;e0},reshape:function(m){return m.sources}},l),{},{id:(a=l.id)!==null&&a!==void 0?a:"autocomplete-".concat(Io++),plugins:p,initialState:we({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},l.initialState),onStateChange:function(m){var h;(h=l.onStateChange)===null||h===void 0||h.call(l,m),p.forEach(function(d){var y;return(y=d.onStateChange)===null||y===void 0?void 0:y.call(d,m)})},onSubmit:function(m){var h;(h=l.onSubmit)===null||h===void 0||h.call(l,m),p.forEach(function(d){var y;return(y=d.onSubmit)===null||y===void 0?void 0:y.call(d,m)})},onReset:function(m){var h;(h=l.onReset)===null||h===void 0||h.call(l,m),p.forEach(function(d){var y;return(y=d.onReset)===null||y===void 0?void 0:y.call(d,m)})},getSources:function(m){return Promise.all([].concat(function(h){return function(d){if(Array.isArray(d))return Tt(d)}(h)||function(d){if(typeof Symbol<"u"&&d[Symbol.iterator]!=null||d["@@iterator"]!=null)return Array.from(d)}(h)||function(d,y){if(d){if(typeof d=="string")return Tt(d,y);var g=Object.prototype.toString.call(d).slice(8,-1);return g==="Object"&&d.constructor&&(g=d.constructor.name),g==="Map"||g==="Set"?Array.from(d):g==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(g)?Tt(d,y):void 0}}(h)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
 In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}(p.map(function(h){return h.getSources})),[l.getSources]).filter(Boolean).map(function(h){return function(d,y){var g=[];return Promise.resolve(d(y)).then(function(_){return Promise.all(_.filter(function(b){return!!b}).map(function(b){if(b.sourceId,g.includes(b.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(b.sourceId)," is not unique."));g.push(b.sourceId);var S={getItemInputValue:function(E){return E.state.query},getItemUrl:function(){},onSelect:function(E){(0,E.setIsOpen)(!1)},onActive:Ot,onResolve:Ot};Object.keys(S).forEach(function(E){S[E].__default=!0});var O=Ln(Ln({},S),b);return Promise.resolve(O)}))})}(h,m)})).then(function(h){return ot(h)}).then(function(h){return h.map(function(d){return we(we({},d),{},{onSelect:function(y){d.onSelect(y),f.forEach(function(g){var _;return(_=g.onSelect)===null||_===void 0?void 0:_.call(g,y)})},onActive:function(y){d.onActive(y),f.forEach(function(g){var _;return(_=g.onActive)===null||_===void 0?void 0:_.call(g,y)})},onResolve:function(y){d.onResolve(y),f.forEach(function(g){var _;return(_=g.onResolve)===null||_===void 0?void 0:_.call(g,y)})}})})})},navigator:we({navigate:function(m){var h=m.itemUrl;v.location.assign(h)},navigateNewTab:function(m){var h=m.itemUrl,d=v.open(h,"_blank","noopener");d==null||d.focus()},navigateNewWindow:function(m){var h=m.itemUrl;v.open(h,"_blank","noopener")}},l.navigator)})}(t,e),r=function(l,f,a){var v,p=f.initialState;return{getState:function(){return p},dispatch:function(m,h){var d=function(y){for(var g=1;g=0||(ct[G]=Se[G]);return ct}(q,ne);if(Object.getOwnPropertySymbols){var Q=Object.getOwnPropertySymbols(q);for(V=0;V=0||Object.prototype.propertyIsEnumerable.call(q,$)&&(ce[$]=q[$])}return ce}(I,Jo);if(w.key==="ArrowUp"||w.key==="ArrowDown"){var ae=function(){var q=T.environment.document.getElementById("".concat(T.id,"-item-").concat(C.getState().activeItemId));q&&(q.scrollIntoViewIfNeeded?q.scrollIntoViewIfNeeded(!1):q.scrollIntoView(!1))},at=function(){var q=De(C.getState());if(C.getState().activeItemId!==null&&q){var ne=q.item,$=q.itemInputValue,V=q.itemUrl,ce=q.source;ce.onActive(ye({event:w,item:ne,itemInputValue:$,itemUrl:V,refresh:M,source:ce,state:C.getState()},z))}};w.preventDefault(),C.getState().isOpen===!1&&(T.openOnFocus||C.getState().query)?je(ye({event:w,props:T,query:C.getState().query,refresh:M,store:C},z)).then(function(){C.dispatch(w.key,{nextActiveItemId:T.defaultActiveItemId}),at(),setTimeout(ae,0)}):(C.dispatch(w.key,{}),at(),ae())}else if(w.key==="Escape")w.preventDefault(),C.dispatch(w.key,null),C.pendingRequests.cancelAll();else if(w.key==="Tab")C.dispatch("blur",null),C.pendingRequests.cancelAll();else if(w.key==="Enter"){if(C.getState().activeItemId===null||C.getState().collections.every(function(q){return q.items.length===0}))return void(T.debug||C.pendingRequests.cancelAll());w.preventDefault();var de=De(C.getState()),H=de.item,he=de.itemInputValue,J=de.itemUrl,Z=de.source;if(w.metaKey||w.ctrlKey)J!==void 0&&(Z.onSelect(ye({event:w,item:H,itemInputValue:he,itemUrl:J,refresh:M,source:Z,state:C.getState()},z)),T.navigator.navigateNewTab({itemUrl:J,item:H,state:C.getState()}));else if(w.shiftKey)J!==void 0&&(Z.onSelect(ye({event:w,item:H,itemInputValue:he,itemUrl:J,refresh:M,source:Z,state:C.getState()},z)),T.navigator.navigateNewWindow({itemUrl:J,item:H,state:C.getState()}));else if(!w.altKey){if(J!==void 0)return Z.onSelect(ye({event:w,item:H,itemInputValue:he,itemUrl:J,refresh:M,source:Z,state:C.getState()},z)),void T.navigator.navigate({itemUrl:J,item:H,state:C.getState()});je(ye({event:w,nextState:{isOpen:!1},props:T,query:he,refresh:M,store:C},z)).then(function(){Z.onSelect(ye({event:w,item:H,itemInputValue:he,itemUrl:J,refresh:M,source:Z,state:C.getState()},z))})}}})(F({event:P,props:f,refresh:a,store:v},p))},onFocus:y,onBlur:Ot,onClick:function(P){h.inputElement!==f.environment.document.activeElement||v.getState().isOpen||y(P)}},S)},getPanelProps:function(h){return F({onMouseDown:function(d){d.preventDefault()},onMouseLeave:function(){v.dispatch("mouseleave",null)}},h)},getListProps:function(h){var d=h||{},y=d.sourceIndex,g=ge(d,ei);return F({role:"listbox","aria-labelledby":"".concat(m(f.id,y),"-label"),id:"".concat(m(f.id,y),"-list")},g)},getItemProps:function(h){var d=h.item,y=h.source,g=h.sourceIndex,_=ge(h,ti);return F({id:"".concat(m(f.id,g),"-item-").concat(d.__autocomplete_id),role:"option","aria-selected":v.getState().activeItemId===d.__autocomplete_id,onMouseMove:function(b){if(d.__autocomplete_id!==v.getState().activeItemId){v.dispatch("mousemove",d.__autocomplete_id);var S=De(v.getState());if(v.getState().activeItemId!==null&&S){var O=S.item,E=S.itemInputValue,k=S.itemUrl,P=S.source;P.onActive(F({event:b,item:O,itemInputValue:E,itemUrl:k,refresh:a,source:P,state:v.getState()},p))}}},onMouseDown:function(b){b.preventDefault()},onClick:function(b){var S=y.getItemInputValue({item:d,state:v.getState()}),O=y.getItemUrl({item:d,state:v.getState()});(O?Promise.resolve():je(F({event:b,nextState:{isOpen:!1},props:f,query:S,refresh:a,store:v},p))).then(function(){y.onSelect(F({event:b,item:d,itemInputValue:S,itemUrl:O,refresh:a,source:y,state:v.getState()},p))})}},_)}}}(_e({props:n,refresh:u,store:r,navigator:n.navigator},o));function u(){return je(_e({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:u,store:r},o))}if(t.insights&&!n.plugins.some(function(l){return l.name==="aa.algoliaInsightsPlugin"})){var s=typeof t.insights=="boolean"?{}:t.insights;n.plugins.push(qo(s))}return n.plugins.forEach(function(l){var f;return(f=l.subscribe)===null||f===void 0?void 0:f.call(l,_e(_e({},o),{},{navigator:n.navigator,refresh:u,onSelect:function(a){e.push({onSelect:a})},onActive:function(a){e.push({onActive:a})},onResolve:function(a){e.push({onResolve:a})}}))}),function(l){var f,a,v=l.metadata,p=l.environment;if(!((f=p.navigator)===null||f===void 0||(a=f.userAgent)===null||a===void 0)&&a.includes("Algolia Crawler")){var m=p.document.createElement("meta"),h=p.document.querySelector("head");m.name="algolia:metadata",setTimeout(function(){m.content=JSON.stringify(v),h.appendChild(m)},0)}}({metadata:oi({plugins:n.plugins,options:t}),environment:n.environment}),_e(_e({refresh:u,navigator:n.navigator},i),o)}function li(t){var e=t.translations,n=(e===void 0?{}:e).searchByText,r=n===void 0?"Search by":n;return c.createElement("a",{href:"https://www.algolia.com/ref/docsearch/?utm_source=".concat(window.location.hostname,"&utm_medium=referral&utm_content=powered_by&utm_campaign=docsearch"),target:"_blank",rel:"noopener noreferrer"},c.createElement("span",{className:"DocSearch-Label"},r),c.createElement("svg",{width:"77",height:"19","aria-label":"Algolia",role:"img",id:"Layer_1",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 2196.2 500"},c.createElement("defs",null,c.createElement("style",null,".cls-1,.cls-2{fill:#003dff;}.cls-2{fill-rule:evenodd;}")),c.createElement("path",{className:"cls-2",d:"M1070.38,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z"}),c.createElement("rect",{className:"cls-1",x:"1845.88",y:"104.73",width:"62.58",height:"277.9",rx:"5.9",ry:"5.9"}),c.createElement("path",{className:"cls-2",d:"M1851.78,71.38h50.77c3.26,0,5.9-2.64,5.9-5.9V5.9c0-3.62-3.24-6.39-6.82-5.83l-50.77,7.95c-2.87,.45-4.99,2.92-4.99,5.83v51.62c0,3.26,2.64,5.9,5.9,5.9Z"}),c.createElement("path",{className:"cls-2",d:"M1764.03,275.3V5.91c0-3.63-3.24-6.39-6.82-5.83l-50.46,7.94c-2.87,.45-4.99,2.93-4.99,5.84l.17,273.22c0,12.92,0,92.7,95.97,95.49,3.33,.1,6.09-2.58,6.09-5.91v-40.78c0-2.96-2.19-5.51-5.12-5.84-34.85-4.01-34.85-47.57-34.85-54.72Z"}),c.createElement("path",{className:"cls-2",d:"M1631.95,142.72c-11.14-12.25-24.83-21.65-40.78-28.31-15.92-6.53-33.26-9.85-52.07-9.85-18.78,0-36.15,3.17-51.92,9.85-15.59,6.66-29.29,16.05-40.76,28.31-11.47,12.23-20.38,26.87-26.76,44.03-6.38,17.17-9.24,37.37-9.24,58.36,0,20.99,3.19,36.87,9.55,54.21,6.38,17.32,15.14,32.11,26.45,44.36,11.29,12.23,24.83,21.62,40.6,28.46,15.77,6.83,40.12,10.33,52.4,10.48,12.25,0,36.78-3.82,52.7-10.48,15.92-6.68,29.46-16.23,40.78-28.46,11.29-12.25,20.05-27.04,26.25-44.36,6.22-17.34,9.24-33.22,9.24-54.21,0-20.99-3.34-41.19-10.03-58.36-6.38-17.17-15.14-31.8-26.43-44.03Zm-44.43,163.75c-11.47,15.75-27.56,23.7-48.09,23.7-20.55,0-36.63-7.8-48.1-23.7-11.47-15.75-17.21-34.01-17.21-61.2,0-26.89,5.59-49.14,17.06-64.87,11.45-15.75,27.54-23.52,48.07-23.52,20.55,0,36.63,7.78,48.09,23.52,11.47,15.57,17.36,37.98,17.36,64.87,0,27.19-5.72,45.3-17.19,61.2Z"}),c.createElement("path",{className:"cls-2",d:"M894.42,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z"}),c.createElement("path",{className:"cls-2",d:"M2133.97,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-14.52,22.58-22.99,49.63-22.99,78.73,0,44.89,20.13,84.92,51.59,111.1,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47,1.23,0,2.46-.03,3.68-.09,.36-.02,.71-.05,1.07-.07,.87-.05,1.75-.11,2.62-.2,.34-.03,.68-.08,1.02-.12,.91-.1,1.82-.21,2.73-.34,.21-.03,.42-.07,.63-.1,32.89-5.07,61.56-30.82,70.9-62.81v57.83c0,3.26,2.64,5.9,5.9,5.9h50.42c3.26,0,5.9-2.64,5.9-5.9V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,206.92c-12.2,10.16-27.97,13.98-44.84,15.12-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-42.24,0-77.12-35.89-77.12-79.37,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33v142.83Z"}),c.createElement("path",{className:"cls-2",d:"M1314.05,104.73h-49.33c-48.36,0-90.91,25.48-115.75,64.1-11.79,18.34-19.6,39.64-22.11,62.59-.58,5.3-.88,10.68-.88,16.14s.31,11.15,.93,16.59c4.28,38.09,23.14,71.61,50.66,94.52,2.93,2.6,6.05,4.98,9.31,7.14,12.86,8.49,28.11,13.47,44.52,13.47h0c17.99,0,34.61-5.93,48.16-15.97,16.29-11.58,28.88-28.54,34.48-47.75v50.26h-.11v11.08c0,21.84-5.71,38.27-17.34,49.36-11.61,11.08-31.04,16.63-58.25,16.63-11.12,0-28.79-.59-46.6-2.41-2.83-.29-5.46,1.5-6.27,4.22l-12.78,43.11c-1.02,3.46,1.27,7.02,4.83,7.53,21.52,3.08,42.52,4.68,54.65,4.68,48.91,0,85.16-10.75,108.89-32.21,21.48-19.41,33.15-48.89,35.2-88.52V110.63c0-3.26-2.64-5.9-5.9-5.9h-56.32Zm0,64.1s.65,139.13,0,143.36c-12.08,9.77-27.11,13.59-43.49,14.7-.16,.01-.33,.03-.49,.04-1.12,.07-2.24,.1-3.36,.1-1.32,0-2.63-.03-3.94-.1-40.41-2.11-74.52-37.26-74.52-79.38,0-10.25,1.96-20.01,5.42-28.98,11.22-29.12,38.77-49.74,71.06-49.74h49.33Z"}),c.createElement("path",{className:"cls-1",d:"M249.83,0C113.3,0,2,110.09,.03,246.16c-2,138.19,110.12,252.7,248.33,253.5,42.68,.25,83.79-10.19,120.3-30.03,3.56-1.93,4.11-6.83,1.08-9.51l-23.38-20.72c-4.75-4.21-11.51-5.4-17.36-2.92-25.48,10.84-53.17,16.38-81.71,16.03-111.68-1.37-201.91-94.29-200.13-205.96,1.76-110.26,92-199.41,202.67-199.41h202.69V407.41l-115-102.18c-3.72-3.31-9.42-2.66-12.42,1.31-18.46,24.44-48.53,39.64-81.93,37.34-46.33-3.2-83.87-40.5-87.34-86.81-4.15-55.24,39.63-101.52,94-101.52,49.18,0,89.68,37.85,93.91,85.95,.38,4.28,2.31,8.27,5.52,11.12l29.95,26.55c3.4,3.01,8.79,1.17,9.63-3.3,2.16-11.55,2.92-23.58,2.07-35.92-4.82-70.34-61.8-126.93-132.17-131.26-80.68-4.97-148.13,58.14-150.27,137.25-2.09,77.1,61.08,143.56,138.19,145.26,32.19,.71,62.03-9.41,86.14-26.95l150.26,133.2c6.44,5.71,16.61,1.14,16.61-7.47V9.48C499.66,4.25,495.42,0,490.18,0H249.83Z"})))}function yt(t){return c.createElement("svg",{width:"15",height:"15","aria-label":t.ariaLabel,role:"img"},c.createElement("g",{fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.2"},t.children))}function si(t){var e=t.translations,n=e===void 0?{}:e,r=n.selectText,o=r===void 0?"to select":r,i=n.selectKeyAriaLabel,u=i===void 0?"Enter key":i,s=n.navigateText,l=s===void 0?"to navigate":s,f=n.navigateUpKeyAriaLabel,a=f===void 0?"Arrow up":f,v=n.navigateDownKeyAriaLabel,p=v===void 0?"Arrow down":v,m=n.closeText,h=m===void 0?"to close":m,d=n.closeKeyAriaLabel,y=d===void 0?"Escape key":d,g=n.searchByText,_=g===void 0?"Search by":g;return c.createElement(c.Fragment,null,c.createElement("div",{className:"DocSearch-Logo"},c.createElement(li,{translations:{searchByText:_}})),c.createElement("ul",{className:"DocSearch-Commands"},c.createElement("li",null,c.createElement("kbd",{className:"DocSearch-Commands-Key"},c.createElement(yt,{ariaLabel:u},c.createElement("path",{d:"M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"}))),c.createElement("span",{className:"DocSearch-Label"},o)),c.createElement("li",null,c.createElement("kbd",{className:"DocSearch-Commands-Key"},c.createElement(yt,{ariaLabel:p},c.createElement("path",{d:"M7.5 3.5v8M10.5 8.5l-3 3-3-3"}))),c.createElement("kbd",{className:"DocSearch-Commands-Key"},c.createElement(yt,{ariaLabel:a},c.createElement("path",{d:"M7.5 11.5v-8M10.5 6.5l-3-3-3 3"}))),c.createElement("span",{className:"DocSearch-Label"},l)),c.createElement("li",null,c.createElement("kbd",{className:"DocSearch-Commands-Key"},c.createElement(yt,{ariaLabel:y},c.createElement("path",{d:"M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"}))),c.createElement("span",{className:"DocSearch-Label"},h))))}function fi(t){var e=t.hit,n=t.children;return c.createElement("a",{href:e.url},n)}function mi(){return c.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},c.createElement("g",{fill:"none",fillRule:"evenodd"},c.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},c.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),c.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},c.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}function pi(){return c.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},c.createElement("path",{d:"M3.18 6.6a8.23 8.23 0 1112.93 9.94h0a8.23 8.23 0 01-11.63 0"}),c.createElement("path",{d:"M6.44 7.25H2.55V3.36M10.45 6v5.6M10.45 11.6L13 13"})))}function Jt(){return c.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("path",{d:"M10 10l5.09-5.09L10 10l5.09 5.09L10 10zm0 0L4.91 4.91 10 10l-5.09 5.09L10 10z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function vi(){return c.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},c.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),c.createElement("path",{d:"M8 17l-6-6 6-6"})))}var di=function(){return c.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function hi(t){switch(t.type){case"lvl1":return c.createElement(di,null);case"content":return c.createElement(gi,null);default:return c.createElement(yi,null)}}function yi(){return c.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function gi(){return c.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Gn(){return c.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},c.createElement("path",{d:"M10 14.2L5 17l1-5.6-4-4 5.5-.7 2.5-5 2.5 5 5.6.8-4 4 .9 5.5z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function _i(){return c.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},c.createElement("path",{d:"M19 4.8a16 16 0 00-2-1.2m-3.3-1.2A16 16 0 001.1 4.7M16.7 8a12 12 0 00-2.8-1.4M10 6a12 12 0 00-6.7 2M12.3 14.7a4 4 0 00-4.5 0M14.5 11.4A8 8 0 0010 10M3 16L18 2M10 18h0"}))}function bi(){return c.createElement("svg",{width:"40",height:"40",viewBox:"0 0 20 20",fill:"none",fillRule:"evenodd",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},c.createElement("path",{d:"M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"}))}function Si(t){var e=t.translations,n=e===void 0?{}:e,r=n.titleText,o=r===void 0?"Unable to fetch results":r,i=n.helpText,u=i===void 0?"You might want to check your network connection.":i;return c.createElement("div",{className:"DocSearch-ErrorScreen"},c.createElement("div",{className:"DocSearch-Screen-Icon"},c.createElement(_i,null)),c.createElement("p",{className:"DocSearch-Title"},o),c.createElement("p",{className:"DocSearch-Help"},u))}var Oi=["translations"];function wi(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,Oi),o=n.noResultsText,i=o===void 0?"No results for":o,u=n.suggestedQueryText,s=u===void 0?"Try searching for":u,l=n.reportMissingResultsText,f=l===void 0?"Believe this query should return results?":l,a=n.reportMissingResultsLinkText,v=a===void 0?"Let us know.":a,p=r.state.context.searchSuggestions;return c.createElement("div",{className:"DocSearch-NoResults"},c.createElement("div",{className:"DocSearch-Screen-Icon"},c.createElement(bi,null)),c.createElement("p",{className:"DocSearch-Title"},i,' "',c.createElement("strong",null,r.state.query),'"'),p&&p.length>0&&c.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},c.createElement("p",{className:"DocSearch-Help"},s,":"),c.createElement("ul",null,p.slice(0,3).reduce(function(m,h){return[].concat(function(d){return function(y){if(Array.isArray(y))return Wt(y)}(d)||function(y){if(typeof Symbol<"u"&&y[Symbol.iterator]!=null||y["@@iterator"]!=null)return Array.from(y)}(d)||Dr(d)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
-In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}(m),[c.createElement("li",{key:h},c.createElement("button",{className:"DocSearch-Prefill",key:h,type:"button",onClick:function(){r.setQuery(h.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},h))])},[]))),r.getMissingResultsUrl&&c.createElement("p",{className:"DocSearch-Help"},"".concat(f," "),c.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},v)))}var Ei=["hit","attribute","tagName"];function Yn(t,e){return e.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},t)}function Pe(t){var e=t.hit,n=t.attribute,r=t.tagName;return ee(r===void 0?"span":r,Fe(Fe({},ve(t,Ei)),{},{dangerouslySetInnerHTML:{__html:Yn(e,"_snippetResult.".concat(n,".value"))||Yn(e,n)}}))}function $t(t){return t.collection&&t.collection.items.length!==0?c.createElement("section",{className:"DocSearch-Hits"},c.createElement("div",{className:"DocSearch-Hit-source"},t.title),c.createElement("ul",t.getListProps(),t.collection.items.map(function(e,n){return c.createElement(ji,B({key:[t.title,e.objectID].join(":"),item:e,index:n},t))}))):null}function ji(t){var e=t.item,n=t.index,r=t.renderIcon,o=t.renderAction,i=t.getItemProps,u=t.onItemClick,s=t.collection,l=t.hitComponent,f=be(c.useState(!1),2),a=f[0],v=f[1],p=be(c.useState(!1),2),m=p[0],h=p[1],d=c.useRef(null),y=l;return c.createElement("li",B({className:["DocSearch-Hit",e.__docsearch_parent&&"DocSearch-Hit--Child",a&&"DocSearch-Hit--deleting",m&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){d.current&&d.current()}},i({item:e,source:s.source,onClick:function(g){u(e,g)}})),c.createElement(y,{hit:e},c.createElement("div",{className:"DocSearch-Hit-Container"},r({item:e,index:n}),e.hierarchy[e.type]&&e.type==="lvl1"&&c.createElement("div",{className:"DocSearch-Hit-content-wrapper"},c.createElement(Pe,{className:"DocSearch-Hit-title",hit:e,attribute:"hierarchy.lvl1"}),e.content&&c.createElement(Pe,{className:"DocSearch-Hit-path",hit:e,attribute:"content"})),e.hierarchy[e.type]&&(e.type==="lvl2"||e.type==="lvl3"||e.type==="lvl4"||e.type==="lvl5"||e.type==="lvl6")&&c.createElement("div",{className:"DocSearch-Hit-content-wrapper"},c.createElement(Pe,{className:"DocSearch-Hit-title",hit:e,attribute:"hierarchy.".concat(e.type)}),c.createElement(Pe,{className:"DocSearch-Hit-path",hit:e,attribute:"hierarchy.lvl1"})),e.type==="content"&&c.createElement("div",{className:"DocSearch-Hit-content-wrapper"},c.createElement(Pe,{className:"DocSearch-Hit-title",hit:e,attribute:"content"}),c.createElement(Pe,{className:"DocSearch-Hit-path",hit:e,attribute:"hierarchy.lvl1"})),o({item:e,runDeleteTransition:function(g){v(!0),d.current=g},runFavoriteTransition:function(g){h(!0),d.current=g}}))))}function Xn(t,e,n){return t.reduce(function(r,o){var i=e(o);return r.hasOwnProperty(i)||(r[i]=[]),r[i].length<(n||5)&&r[i].push(o),r},{})}function er(t){return t}function gt(t){return t.button===1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}function Pi(){}var Lr=/(|<\/mark>)/g,Ii=RegExp(Lr.source);function qr(t){var e,n,r=t;if(!r.__docsearch_parent&&!t._highlightResult)return t.hierarchy.lvl0;var o=((r.__docsearch_parent?(e=r.__docsearch_parent)===null||e===void 0||(e=e._highlightResult)===null||e===void 0||(e=e.hierarchy)===null||e===void 0?void 0:e.lvl0:(n=t._highlightResult)===null||n===void 0||(n=n.hierarchy)===null||n===void 0?void 0:n.lvl0)||{}).value;return o&&Ii.test(o)?o.replace(Lr,""):o}function Di(t){return c.createElement("div",{className:"DocSearch-Dropdown-Container"},t.state.collections.map(function(e){if(e.items.length===0)return null;var n=qr(e.items[0]);return c.createElement($t,B({},t,{key:e.source.sourceId,title:n,collection:e,renderIcon:function(r){var o,i=r.item,u=r.index;return c.createElement(c.Fragment,null,i.__docsearch_parent&&c.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},c.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},i.__docsearch_parent!==((o=e.items[u+1])===null||o===void 0?void 0:o.__docsearch_parent)?c.createElement("path",{d:"M8 6v21M20 27H8.3"}):c.createElement("path",{d:"M8 6v42M20 27H8.3"}))),c.createElement("div",{className:"DocSearch-Hit-icon"},c.createElement(hi,{type:i.type})))},renderAction:function(){return c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement(vi,null))}}))}),t.resultsFooterComponent&&c.createElement("section",{className:"DocSearch-HitsFooter"},c.createElement(t.resultsFooterComponent,{state:t.state})))}var ki=["translations"];function Ci(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,ki),o=n.recentSearchesTitle,i=o===void 0?"Recent":o,u=n.noRecentSearchesText,s=u===void 0?"No recent searches":u,l=n.saveRecentSearchButtonTitle,f=l===void 0?"Save this search":l,a=n.removeRecentSearchButtonTitle,v=a===void 0?"Remove this search from history":a,p=n.favoriteSearchesTitle,m=p===void 0?"Favorite":p,h=n.removeFavoriteSearchButtonTitle,d=h===void 0?"Remove this search from favorites":h;return r.state.status==="idle"&&r.hasCollections===!1?r.disableUserPersonalization?null:c.createElement("div",{className:"DocSearch-StartScreen"},c.createElement("p",{className:"DocSearch-Help"},s)):r.hasCollections===!1?null:c.createElement("div",{className:"DocSearch-Dropdown-Container"},c.createElement($t,B({},r,{title:i,collection:r.state.collections[0],renderIcon:function(){return c.createElement("div",{className:"DocSearch-Hit-icon"},c.createElement(pi,null))},renderAction:function(y){var g=y.item,_=y.runFavoriteTransition,b=y.runDeleteTransition;return c.createElement(c.Fragment,null,c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(S){S.preventDefault(),S.stopPropagation(),_(function(){r.favoriteSearches.add(g),r.recentSearches.remove(g),r.refresh()})}},c.createElement(Gn,null))),c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement("button",{className:"DocSearch-Hit-action-button",title:v,type:"submit",onClick:function(S){S.preventDefault(),S.stopPropagation(),b(function(){r.recentSearches.remove(g),r.refresh()})}},c.createElement(Jt,null))))}})),c.createElement($t,B({},r,{title:m,collection:r.state.collections[1],renderIcon:function(){return c.createElement("div",{className:"DocSearch-Hit-icon"},c.createElement(Gn,null))},renderAction:function(y){var g=y.item,_=y.runDeleteTransition;return c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(b){b.preventDefault(),b.stopPropagation(),_(function(){r.favoriteSearches.remove(g),r.refresh()})}},c.createElement(Jt,null)))}})))}var Ai=["translations"],xi=c.memo(function(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,Ai);if(r.state.status==="error")return c.createElement(Si,{translations:n==null?void 0:n.errorScreen});var o=r.state.collections.some(function(i){return i.items.length>0});return r.state.query?o===!1?c.createElement(wi,B({},r,{translations:n==null?void 0:n.noResultsScreen})):c.createElement(Di,r):c.createElement(Ci,B({},r,{hasCollections:o,translations:n==null?void 0:n.startScreen}))},function(t,e){return e.state.status==="loading"||e.state.status==="stalled"}),Ni=["translations"];function Ti(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,Ni),o=n.resetButtonTitle,i=o===void 0?"Clear the query":o,u=n.resetButtonAriaLabel,s=u===void 0?"Clear the query":u,l=n.cancelButtonText,f=l===void 0?"Cancel":l,a=n.cancelButtonAriaLabel,v=a===void 0?"Cancel":a,p=n.searchInputLabel,m=p===void 0?"Search":p,h=r.getFormProps({inputElement:r.inputRef.current}).onReset;return c.useEffect(function(){r.autoFocus&&r.inputRef.current&&r.inputRef.current.focus()},[r.autoFocus,r.inputRef]),c.useEffect(function(){r.isFromSelection&&r.inputRef.current&&r.inputRef.current.select()},[r.isFromSelection,r.inputRef]),c.createElement(c.Fragment,null,c.createElement("form",{className:"DocSearch-Form",onSubmit:function(d){d.preventDefault()},onReset:h},c.createElement("label",B({className:"DocSearch-MagnifierLabel"},r.getLabelProps()),c.createElement(kr,null),c.createElement("span",{className:"DocSearch-VisuallyHiddenForAccessibility"},m)),c.createElement("div",{className:"DocSearch-LoadingIndicator"},c.createElement(mi,null)),c.createElement("input",B({className:"DocSearch-Input",ref:r.inputRef},r.getInputProps({inputElement:r.inputRef.current,autoFocus:r.autoFocus,maxLength:64}))),c.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":s,hidden:!r.state.query},c.createElement(Jt,null))),c.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":v,onClick:r.onClose},f))}var Ri=["_highlightResult","_snippetResult"];function tr(t){var e=t.key,n=t.limit,r=n===void 0?5:n,o=function(u){return function(){var s="__TEST_KEY__";try{return localStorage.setItem(s,""),localStorage.removeItem(s),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(s){return window.localStorage.setItem(u,JSON.stringify(s))},getItem:function(){var s=window.localStorage.getItem(u);return s?JSON.parse(s):[]}}}(e),i=o.getItem().slice(0,r);return{add:function(u){var s=u,l=(s._highlightResult,s._snippetResult,ve(s,Ri)),f=i.findIndex(function(a){return a.objectID===l.objectID});f>-1&&i.splice(f,1),i.unshift(l),i=i.slice(0,r),o.setItem(i)},remove:function(u){i=i.filter(function(s){return s.objectID!==u.objectID}),o.setItem(i)},getAll:function(){return i}}}function Li(t){var e,n="algoliasearch-client-js-".concat(t.key),r=function(){return e===void 0&&(e=t.localStorage||window.localStorage),e},o=function(){return JSON.parse(r().getItem(n)||"{}")},i=function(u){r().setItem(n,JSON.stringify(u))};return{get:function(u,s){var l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){(function(){var a=t.timeToLive?1e3*t.timeToLive:null,v=o(),p=Object.fromEntries(Object.entries(v).filter(function(h){return Ie(h,2)[1].timestamp!==void 0}));if(i(p),a){var m=Object.fromEntries(Object.entries(p).filter(function(h){var d=Ie(h,2)[1],y=new Date().getTime();return!(d.timestamp+a2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return o().then(function(u){return Promise.all([u,i.miss(u)])}).then(function(u){return Ie(u,1)[0]})},set:function(r,o){return Promise.resolve(o)},delete:function(r){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(r,o){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(r,o,i).catch(function(){return Me({caches:e}).get(r,o,i)})},set:function(r,o){return n.set(r,o).catch(function(){return Me({caches:e}).set(r,o)})},delete:function(r){return n.delete(r).catch(function(){return Me({caches:e}).delete(r)})},clear:function(){return n.clear().catch(function(){return Me({caches:e}).clear()})}}}function qt(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},e={};return{get:function(n,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},i=JSON.stringify(n);if(i in e)return Promise.resolve(t.serializable?JSON.parse(e[i]):e[i]);var u=r(),s=o&&o.miss||function(){return Promise.resolve()};return u.then(function(l){return s(l)}).then(function(){return u})},set:function(n,r){return e[JSON.stringify(n)]=t.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete:function(n){return delete e[JSON.stringify(n)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function qi(t){for(var e=t.length-1;e>0;e--){var n=Math.floor(Math.random()*(e+1)),r=t[e];t[e]=t[n],t[n]=r}return t}function Mr(t,e){return e&&Object.keys(e).forEach(function(n){t[n]=e[n](t)}),t}function Pt(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r0?r:void 0,timeout:n.timeout||e,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var ke={Read:1,Write:2,Any:3};function rr(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;return N(N({},t),{},{status:e,lastUpdate:Date.now()})}function Hr(t){return typeof t=="string"?{protocol:"https",url:t,accept:ke.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||ke.Any}}var It="POST";function or(t,e,n,r){var o=[],i=function(p,m){if(p.method!=="GET"&&(p.data!==void 0||m.data!==void 0)){var h=Array.isArray(p.data)?p.data:N(N({},p.data),m.data);return JSON.stringify(h)}}(n,r),u=function(p,m){var h=N(N({},p.headers),m.headers),d={};return Object.keys(h).forEach(function(y){var g=h[y];d[y.toLowerCase()]=g}),d}(t,r),s=n.method,l=n.method!=="GET"?{}:N(N({},n.data),r.data),f=N(N(N({"x-algolia-agent":t.userAgent.value},t.queryParameters),l),r.queryParameters),a=0,v=function p(m,h){var d=m.pop();if(d===void 0)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:ir(o)};var y={data:i,headers:u,method:s,url:Hi(d,n.path,f),connectTimeout:h(a,t.timeouts.connect),responseTimeout:h(a,r.timeout)},g=function(b){var S={request:y,response:b,host:d,triesLeft:m.length};return o.push(S),S},_={onSuccess:function(b){return function(S){try{return JSON.parse(S.content)}catch(O){throw function(E,k){return{name:"DeserializationError",message:E,response:k}}(O.message,S)}}(b)},onRetry:function(b){var S=g(b);return b.isTimedOut&&a++,Promise.all([t.logger.info("Retryable failure",Fr(S)),t.hostsCache.set(d,rr(d,b.isTimedOut?3:2))]).then(function(){return p(m,h)})},onFail:function(b){throw g(b),function(S,O){var E=S.content,k=S.status,P=E;try{P=JSON.parse(E).message}catch{}return function(I,w,T){return{name:"ApiError",message:I,status:w,transporterStackTrace:T}}(P,k,O)}(b,ir(o))}};return t.requester.send(y).then(function(b){return function(S,O){return function(E){var k=E.status;return E.isTimedOut||function(P){var I=P.isTimedOut,w=P.status;return!I&&~~w==0}(E)||~~(k/100)!=2&&~~(k/100)!=4}(S)?O.onRetry(S):~~(S.status/100)==2?O.onSuccess(S):O.onFail(S)}(b,_)})};return function(p,m){return Promise.all(m.map(function(h){return p.get(h,function(){return Promise.resolve(rr(h))})})).then(function(h){var d=h.filter(function(_){return function(b){return b.status===1||Date.now()-b.lastUpdate>12e4}(_)}),y=h.filter(function(_){return function(b){return b.status===3&&Date.now()-b.lastUpdate<=12e4}(_)}),g=[].concat(_t(d),_t(y));return{getTimeout:function(_,b){return(y.length===0&&_===0?1:y.length+3+_)*b},statelessHosts:g.length>0?g.map(function(_){return Hr(_)}):m}})}(t.hostsCache,e).then(function(p){return v(_t(p.statelessHosts).reverse(),p.getTimeout)})}function Mi(t){var e={value:"Algolia for JavaScript (".concat(t,")"),add:function(n){var r="; ".concat(n.segment).concat(n.version!==void 0?" (".concat(n.version,")"):"");return e.value.indexOf(r)===-1&&(e.value="".concat(e.value).concat(r)),e}};return e}function Hi(t,e,n){var r=Ur(n),o="".concat(t.protocol,"://").concat(t.url,"/").concat(e.charAt(0)==="/"?e.substr(1):e);return r.length&&(o+="?".concat(r)),o}function Ur(t){return Object.keys(t).map(function(e){return Pt("%s=%s",e,(n=t[e],Object.prototype.toString.call(n)==="[object Object]"||Object.prototype.toString.call(n)==="[object Array]"?JSON.stringify(t[e]):t[e]));var n}).join("&")}function ir(t){return t.map(function(e){return Fr(e)})}function Fr(t){var e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return N(N({},t),{},{request:N(N({},t.request),{},{headers:N(N({},t.request.headers),e)})})}var Ui=function(t){return function(e,n){return e.method==="GET"?t.transporter.read(e,n):t.transporter.write(e,n)}},Br=function(t){return function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return Mr({transporter:t.transporter,appId:t.appId,indexName:e},n.methods)}},ar=function(t){return function(e,n){var r=e.map(function(o){return N(N({},o),{},{params:Ur(o.params||{})})});return t.transporter.read({method:It,path:"1/indexes/*/queries",data:{requests:r},cacheable:!0},n)}},cr=function(t){return function(e,n){return Promise.all(e.map(function(r){var o=r.params,i=o.facetName,u=o.facetQuery,s=function(l,f){if(l==null)return{};var a,v,p=function(h,d){if(h==null)return{};var y,g,_={},b=Object.keys(h);for(g=0;g=0||(_[y]=h[y]);return _}(l,f);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(l);for(v=0;v=0||Object.prototype.propertyIsEnumerable.call(l,a)&&(p[a]=l[a])}return p}(o,Oo);return Br(t)(r.indexName,{methods:{searchForFacetValues:Vr}}).searchForFacetValues(i,u,N(N({},n),s))}))}},Fi=function(t){return function(e,n,r){return t.transporter.read({method:It,path:Pt("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:n},cacheable:!0},r)}},Bi=function(t){return function(e,n){return t.transporter.read({method:It,path:Pt("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},n)}},Vr=function(t){return function(e,n,r){return t.transporter.read({method:It,path:Pt("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:n},cacheable:!0},r)}};function Kr(t,e,n){var r={appId:t,apiKey:e,timeouts:{connect:1,read:2,write:30},requester:{send:function(o){return new Promise(function(i){var u=new XMLHttpRequest;u.open(o.method,o.url,!0),Object.keys(o.headers).forEach(function(a){return u.setRequestHeader(a,o.headers[a])});var s,l=function(a,v){return setTimeout(function(){u.abort(),i({status:0,content:v,isTimedOut:!0})},1e3*a)},f=l(o.connectTimeout,"Connection timeout");u.onreadystatechange=function(){u.readyState>u.OPENED&&s===void 0&&(clearTimeout(f),s=l(o.responseTimeout,"Socket timeout"))},u.onerror=function(){u.status===0&&(clearTimeout(f),clearTimeout(s),i({content:u.responseText||"Network request failed",status:u.status,isTimedOut:!1}))},u.onload=function(){clearTimeout(f),clearTimeout(s),i({content:u.responseText,status:u.status,isTimedOut:!1})},u.send(o.data)})}},logger:{debug:function(o,i){return Promise.resolve()},info:function(o,i){return Promise.resolve()},error:function(o,i){return console.error(o,i),Promise.resolve()}},responsesCache:qt(),requestsCache:qt({serializable:!1}),hostsCache:Me({caches:[Li({key:"4.19.1-".concat(t)}),qt()]}),userAgent:Mi("4.19.1").add({segment:"Browser",version:"lite"}),authMode:0};return function(o){var i=o.appId,u=function(f,a,v){var p={"x-algolia-api-key":v,"x-algolia-application-id":a};return{headers:function(){return f===1?p:{}},queryParameters:function(){return f===0?p:{}}}}(o.authMode!==void 0?o.authMode:1,i,o.apiKey),s=function(f){var a=f.hostsCache,v=f.logger,p=f.requester,m=f.requestsCache,h=f.responsesCache,d=f.timeouts,y=f.userAgent,g=f.hosts,_=f.queryParameters,b={hostsCache:a,logger:v,requester:p,requestsCache:m,responsesCache:h,timeouts:d,userAgent:y,headers:f.headers,queryParameters:_,hosts:g.map(function(S){return Hr(S)}),read:function(S,O){var E=nr(O,b.timeouts.read),k=function(){return or(b,b.hosts.filter(function(I){return(I.accept&ke.Read)!=0}),S,E)};if((E.cacheable!==void 0?E.cacheable:S.cacheable)!==!0)return k();var P={request:S,mappedRequestOptions:E,transporter:{queryParameters:b.queryParameters,headers:b.headers}};return b.responsesCache.get(P,function(){return b.requestsCache.get(P,function(){return b.requestsCache.set(P,k()).then(function(I){return Promise.all([b.requestsCache.delete(P),I])},function(I){return Promise.all([b.requestsCache.delete(P),Promise.reject(I)])}).then(function(I){var w=Ie(I,2);return w[0],w[1]})})},{miss:function(I){return b.responsesCache.set(P,I)}})},write:function(S,O){return or(b,b.hosts.filter(function(E){return(E.accept&ke.Write)!=0}),S,nr(O,b.timeouts.write))}};return b}(N(N({hosts:[{url:"".concat(i,"-dsn.algolia.net"),accept:ke.Read},{url:"".concat(i,".algolia.net"),accept:ke.Write}].concat(qi([{url:"".concat(i,"-1.algolianet.com")},{url:"".concat(i,"-2.algolianet.com")},{url:"".concat(i,"-3.algolianet.com")}]))},o),{},{headers:N(N({},u.headers()),{},{"content-type":"application/x-www-form-urlencoded"},o.headers),queryParameters:N(N({},u.queryParameters()),o.queryParameters)})),l={transporter:s,appId:i,addAlgoliaAgent:function(f,a){s.userAgent.add({segment:f,version:a})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(function(){})}};return Mr(l,o.methods)}(N(N(N({},r),n),{},{methods:{search:ar,searchForFacetValues:cr,multipleQueries:ar,multipleSearchForFacetValues:cr,customRequest:Ui,initIndex:function(o){return function(i){return Br(o)(i,{methods:{search:Bi,searchForFacetValues:Vr,findAnswers:Fi}})}}}}))}Kr.version="4.19.1";var Vi=["footer","searchBox"];function Ki(t){var e=t.appId,n=t.apiKey,r=t.indexName,o=t.placeholder,i=o===void 0?"Search docs":o,u=t.searchParameters,s=t.maxResultsPerGroup,l=t.onClose,f=l===void 0?Pi:l,a=t.transformItems,v=a===void 0?er:a,p=t.hitComponent,m=p===void 0?fi:p,h=t.resultsFooterComponent,d=h===void 0?function(){return null}:h,y=t.navigator,g=t.initialScrollY,_=g===void 0?0:g,b=t.transformSearchClient,S=b===void 0?er:b,O=t.disableUserPersonalization,E=O!==void 0&&O,k=t.initialQuery,P=k===void 0?"":k,I=t.translations,w=I===void 0?{}:I,T=t.getMissingResultsUrl,M=t.insights,C=M!==void 0&&M,z=w.footer,ae=w.searchBox,at=ve(w,Vi),de=be(c.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),H=de[0],he=de[1],J=c.useRef(null),Z=c.useRef(null),q=c.useRef(null),ne=c.useRef(null),$=c.useRef(null),V=c.useRef(10),ce=c.useRef(typeof window<"u"?window.getSelection().toString().slice(0,64):"").current,Q=c.useRef(P||ce).current,Se=function(A,R,U){return c.useMemo(function(){var W=Kr(A,R);return W.addAlgoliaAgent("docsearch","3.6.1"),/docsearch.js \(.*\)/.test(W.transporter.userAgent.value)===!1&&W.addAlgoliaAgent("docsearch-react","3.6.1"),U(W)},[A,R,U])}(e,n,S),ue=c.useRef(tr({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,G=c.useRef(tr({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:ue.getAll().length===0?7:4})).current,Y=c.useCallback(function(A){if(!E){var R=A.type==="content"?A.__docsearch_parent:A;R&&ue.getAll().findIndex(function(U){return U.objectID===R.objectID})===-1&&G.add(R)}},[ue,G,E]),ct=c.useCallback(function(A){if(H.context.algoliaInsightsPlugin&&A.__autocomplete_id){var R=A,U={eventName:"Item Selected",index:R.__autocomplete_indexName,items:[R],positions:[A.__autocomplete_id],queryID:R.__autocomplete_queryID};H.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(U)}},[H.context.algoliaInsightsPlugin]),le=c.useMemo(function(){return ui({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:Q,context:{searchSuggestions:[]}},insights:C,navigator:y,onStateChange:function(A){he(A.state)},getSources:function(A){var R=A.query,U=A.state,W=A.setContext,se=A.setStatus;if(!R)return E?[]:[{sourceId:"recentSearches",onSelect:function(L){var X=L.item,Ne=L.event;Y(X),gt(Ne)||f()},getItemUrl:function(L){return L.item.url},getItems:function(){return G.getAll()}},{sourceId:"favoriteSearches",onSelect:function(L){var X=L.item,Ne=L.event;Y(X),gt(Ne)||f()},getItemUrl:function(L){return L.item.url},getItems:function(){return ue.getAll()}}];var fe=!!C;return Se.search([{query:R,indexName:r,params:Fe({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(V.current),"hierarchy.lvl2:".concat(V.current),"hierarchy.lvl3:".concat(V.current),"hierarchy.lvl4:".concat(V.current),"hierarchy.lvl5:".concat(V.current),"hierarchy.lvl6:".concat(V.current),"content:".concat(V.current)],snippetEllipsisText:"…",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:fe},u)}]).catch(function(L){throw L.name==="RetryError"&&se("error"),L}).then(function(L){var X=L.results[0],Ne=X.hits,Jr=X.nbHits,Dt=Xn(Ne,function(kt){return qr(kt)},s);U.context.searchSuggestions.length0&&(en(),$.current&&$.current.focus())},[Q,en]),c.useEffect(function(){function A(){if(Z.current){var R=.01*window.innerHeight;Z.current.style.setProperty("--docsearch-vh","".concat(R,"px"))}}return A(),window.addEventListener("resize",A),function(){window.removeEventListener("resize",A)}},[]),c.createElement("div",B({ref:J},zr({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",H.status==="stalled"&&"DocSearch-Container--Stalled",H.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(A){A.target===A.currentTarget&&f()}}),c.createElement("div",{className:"DocSearch-Modal",ref:Z},c.createElement("header",{className:"DocSearch-SearchBar",ref:q},c.createElement(Ti,B({},le,{state:H,autoFocus:Q.length===0,inputRef:$,isFromSelection:!!Q&&Q===ce,translations:ae,onClose:f}))),c.createElement("div",{className:"DocSearch-Dropdown",ref:ne},c.createElement(xi,B({},le,{indexName:r,state:H,hitComponent:m,resultsFooterComponent:d,disableUserPersonalization:E,recentSearches:G,favoriteSearches:ue,inputRef:$,translations:at,getMissingResultsUrl:T,onItemClick:function(A,R){ct(A),Y(A),gt(R)||f()}}))),c.createElement("footer",{className:"DocSearch-Footer"},c.createElement(si,{translations:z}))))}function Wi(t){var e,n,r=c.useRef(null),o=be(c.useState(!1),2),i=o[0],u=o[1],s=be(c.useState((t==null?void 0:t.initialQuery)||void 0),2),l=s[0],f=s[1],a=c.useCallback(function(){u(!0)},[u]),v=c.useCallback(function(){u(!1)},[u]);return function(p){var m=p.isOpen,h=p.onOpen,d=p.onClose,y=p.onInput,g=p.searchButtonRef;c.useEffect(function(){function _(b){var S;(b.keyCode===27&&m||((S=b.key)===null||S===void 0?void 0:S.toLowerCase())==="k"&&(b.metaKey||b.ctrlKey)||!function(O){var E=O.target,k=E.tagName;return E.isContentEditable||k==="INPUT"||k==="SELECT"||k==="TEXTAREA"}(b)&&b.key==="/"&&!m)&&(b.preventDefault(),m?d():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||h()),g&&g.current===document.activeElement&&y&&/[a-zA-Z0-9]/.test(String.fromCharCode(b.keyCode))&&y(b)}return window.addEventListener("keydown",_),function(){window.removeEventListener("keydown",_)}},[m,h,d,y,g])}({isOpen:i,onOpen:a,onClose:v,onInput:c.useCallback(function(p){u(!0),f(p.key)},[u,f]),searchButtonRef:r}),c.createElement(c.Fragment,null,c.createElement(Po,{ref:r,translations:t==null||(e=t.translations)===null||e===void 0?void 0:e.button,onClick:a}),i&&Er(c.createElement(Ki,B({},t,{initialScrollY:window.scrollY,initialQuery:l,translations:t==null||(n=t.translations)===null||n===void 0?void 0:n.modal,onClose:v})),document.body))}function zi(t){Pr(c.createElement(Wi,Mt({},t,{transformSearchClient:function(e){return e.addAlgoliaAgent("docsearch.js","3.6.1"),t.transformSearchClient?t.transformSearchClient(e):e}})),function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:window;return typeof e=="string"?n.document.querySelector(e):e}(t.container,t.environment))}const Ji={id:"docsearch"},Qi=Zr({__name:"VPAlgoliaSearchBox",props:{algolia:{}},setup(t){const e=t,n=Qr(),r=Gr(),{site:o,localeIndex:i,lang:u}=ro();Yr(s),Xr(i,s);async function s(){var m,h;await eo();const a={...e.algolia,...(m=e.algolia.locales)==null?void 0:m[i.value]},v=((h=a.searchParameters)==null?void 0:h.facetFilters)??[],p=[...(Array.isArray(v)?v:[v]).filter(d=>!d.startsWith("lang:")),`lang:${u.value}`];l({...a,searchParameters:{...a.searchParameters,facetFilters:p}})}function l(a){const v=Object.assign({},a,{container:"#docsearch",navigator:{navigate({itemUrl:p}){const{pathname:m}=new URL(window.location.origin+p);r.path===m?window.location.assign(window.location.origin+p):n.go(p)}},transformItems(p){return p.map(m=>Object.assign({},m,{url:f(m.url)}))},hitComponent({hit:p,children:m}){return{__v:null,type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:p.url,children:m}}}});zi(v)}function f(a){const{pathname:v,hash:p}=new URL(a,location.origin);return v.replace(/\.html$/,o.value.cleanUrls?"":".html")+p}return(a,v)=>(to(),no("div",Ji))}});export{Qi as default};
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}(m),[c.createElement("li",{key:h},c.createElement("button",{className:"DocSearch-Prefill",key:h,type:"button",onClick:function(){r.setQuery(h.toLowerCase()+" "),r.refresh(),r.inputRef.current.focus()}},h))])},[]))),r.getMissingResultsUrl&&c.createElement("p",{className:"DocSearch-Help"},"".concat(f," "),c.createElement("a",{href:r.getMissingResultsUrl({query:r.state.query}),target:"_blank",rel:"noopener noreferrer"},v)))}var Ei=["hit","attribute","tagName"];function Yn(t,e){return e.split(".").reduce(function(n,r){return n!=null&&n[r]?n[r]:null},t)}function Pe(t){var e=t.hit,n=t.attribute,r=t.tagName;return ee(r===void 0?"span":r,Fe(Fe({},ve(t,Ei)),{},{dangerouslySetInnerHTML:{__html:Yn(e,"_snippetResult.".concat(n,".value"))||Yn(e,n)}}))}function $t(t){return t.collection&&t.collection.items.length!==0?c.createElement("section",{className:"DocSearch-Hits"},c.createElement("div",{className:"DocSearch-Hit-source"},t.title),c.createElement("ul",t.getListProps(),t.collection.items.map(function(e,n){return c.createElement(ji,B({key:[t.title,e.objectID].join(":"),item:e,index:n},t))}))):null}function ji(t){var e=t.item,n=t.index,r=t.renderIcon,o=t.renderAction,i=t.getItemProps,u=t.onItemClick,s=t.collection,l=t.hitComponent,f=be(c.useState(!1),2),a=f[0],v=f[1],p=be(c.useState(!1),2),m=p[0],h=p[1],d=c.useRef(null),y=l;return c.createElement("li",B({className:["DocSearch-Hit",e.__docsearch_parent&&"DocSearch-Hit--Child",a&&"DocSearch-Hit--deleting",m&&"DocSearch-Hit--favoriting"].filter(Boolean).join(" "),onTransitionEnd:function(){d.current&&d.current()}},i({item:e,source:s.source,onClick:function(g){u(e,g)}})),c.createElement(y,{hit:e},c.createElement("div",{className:"DocSearch-Hit-Container"},r({item:e,index:n}),e.hierarchy[e.type]&&e.type==="lvl1"&&c.createElement("div",{className:"DocSearch-Hit-content-wrapper"},c.createElement(Pe,{className:"DocSearch-Hit-title",hit:e,attribute:"hierarchy.lvl1"}),e.content&&c.createElement(Pe,{className:"DocSearch-Hit-path",hit:e,attribute:"content"})),e.hierarchy[e.type]&&(e.type==="lvl2"||e.type==="lvl3"||e.type==="lvl4"||e.type==="lvl5"||e.type==="lvl6")&&c.createElement("div",{className:"DocSearch-Hit-content-wrapper"},c.createElement(Pe,{className:"DocSearch-Hit-title",hit:e,attribute:"hierarchy.".concat(e.type)}),c.createElement(Pe,{className:"DocSearch-Hit-path",hit:e,attribute:"hierarchy.lvl1"})),e.type==="content"&&c.createElement("div",{className:"DocSearch-Hit-content-wrapper"},c.createElement(Pe,{className:"DocSearch-Hit-title",hit:e,attribute:"content"}),c.createElement(Pe,{className:"DocSearch-Hit-path",hit:e,attribute:"hierarchy.lvl1"})),o({item:e,runDeleteTransition:function(g){v(!0),d.current=g},runFavoriteTransition:function(g){h(!0),d.current=g}}))))}function Xn(t,e,n){return t.reduce(function(r,o){var i=e(o);return r.hasOwnProperty(i)||(r[i]=[]),r[i].length<(n||5)&&r[i].push(o),r},{})}function er(t){return t}function gt(t){return t.button===1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}function Pi(){}var Lr=/(|<\/mark>)/g,Ii=RegExp(Lr.source);function qr(t){var e,n,r=t;if(!r.__docsearch_parent&&!t._highlightResult)return t.hierarchy.lvl0;var o=r.__docsearch_parent?(e=r.__docsearch_parent)===null||e===void 0||(e=e._highlightResult)===null||e===void 0||(e=e.hierarchy)===null||e===void 0?void 0:e.lvl0:(n=t._highlightResult)===null||n===void 0||(n=n.hierarchy)===null||n===void 0?void 0:n.lvl0;return o?o.value&&Ii.test(o.value)?o.value.replace(Lr,""):o.value:t.hierarchy.lvl0}function Di(t){return c.createElement("div",{className:"DocSearch-Dropdown-Container"},t.state.collections.map(function(e){if(e.items.length===0)return null;var n=qr(e.items[0]);return c.createElement($t,B({},t,{key:e.source.sourceId,title:n,collection:e,renderIcon:function(r){var o,i=r.item,u=r.index;return c.createElement(c.Fragment,null,i.__docsearch_parent&&c.createElement("svg",{className:"DocSearch-Hit-Tree",viewBox:"0 0 24 54"},c.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},i.__docsearch_parent!==((o=e.items[u+1])===null||o===void 0?void 0:o.__docsearch_parent)?c.createElement("path",{d:"M8 6v21M20 27H8.3"}):c.createElement("path",{d:"M8 6v42M20 27H8.3"}))),c.createElement("div",{className:"DocSearch-Hit-icon"},c.createElement(hi,{type:i.type})))},renderAction:function(){return c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement(vi,null))}}))}),t.resultsFooterComponent&&c.createElement("section",{className:"DocSearch-HitsFooter"},c.createElement(t.resultsFooterComponent,{state:t.state})))}var ki=["translations"];function Ci(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,ki),o=n.recentSearchesTitle,i=o===void 0?"Recent":o,u=n.noRecentSearchesText,s=u===void 0?"No recent searches":u,l=n.saveRecentSearchButtonTitle,f=l===void 0?"Save this search":l,a=n.removeRecentSearchButtonTitle,v=a===void 0?"Remove this search from history":a,p=n.favoriteSearchesTitle,m=p===void 0?"Favorite":p,h=n.removeFavoriteSearchButtonTitle,d=h===void 0?"Remove this search from favorites":h;return r.state.status==="idle"&&r.hasCollections===!1?r.disableUserPersonalization?null:c.createElement("div",{className:"DocSearch-StartScreen"},c.createElement("p",{className:"DocSearch-Help"},s)):r.hasCollections===!1?null:c.createElement("div",{className:"DocSearch-Dropdown-Container"},c.createElement($t,B({},r,{title:i,collection:r.state.collections[0],renderIcon:function(){return c.createElement("div",{className:"DocSearch-Hit-icon"},c.createElement(pi,null))},renderAction:function(y){var g=y.item,_=y.runFavoriteTransition,b=y.runDeleteTransition;return c.createElement(c.Fragment,null,c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(S){S.preventDefault(),S.stopPropagation(),_(function(){r.favoriteSearches.add(g),r.recentSearches.remove(g),r.refresh()})}},c.createElement(Gn,null))),c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement("button",{className:"DocSearch-Hit-action-button",title:v,type:"submit",onClick:function(S){S.preventDefault(),S.stopPropagation(),b(function(){r.recentSearches.remove(g),r.refresh()})}},c.createElement(Jt,null))))}})),c.createElement($t,B({},r,{title:m,collection:r.state.collections[1],renderIcon:function(){return c.createElement("div",{className:"DocSearch-Hit-icon"},c.createElement(Gn,null))},renderAction:function(y){var g=y.item,_=y.runDeleteTransition;return c.createElement("div",{className:"DocSearch-Hit-action"},c.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(b){b.preventDefault(),b.stopPropagation(),_(function(){r.favoriteSearches.remove(g),r.refresh()})}},c.createElement(Jt,null)))}})))}var Ai=["translations"],xi=c.memo(function(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,Ai);if(r.state.status==="error")return c.createElement(Si,{translations:n==null?void 0:n.errorScreen});var o=r.state.collections.some(function(i){return i.items.length>0});return r.state.query?o===!1?c.createElement(wi,B({},r,{translations:n==null?void 0:n.noResultsScreen})):c.createElement(Di,r):c.createElement(Ci,B({},r,{hasCollections:o,translations:n==null?void 0:n.startScreen}))},function(t,e){return e.state.status==="loading"||e.state.status==="stalled"}),Ni=["translations"];function Ti(t){var e=t.translations,n=e===void 0?{}:e,r=ve(t,Ni),o=n.resetButtonTitle,i=o===void 0?"Clear the query":o,u=n.resetButtonAriaLabel,s=u===void 0?"Clear the query":u,l=n.cancelButtonText,f=l===void 0?"Cancel":l,a=n.cancelButtonAriaLabel,v=a===void 0?"Cancel":a,p=n.searchInputLabel,m=p===void 0?"Search":p,h=r.getFormProps({inputElement:r.inputRef.current}).onReset;return c.useEffect(function(){r.autoFocus&&r.inputRef.current&&r.inputRef.current.focus()},[r.autoFocus,r.inputRef]),c.useEffect(function(){r.isFromSelection&&r.inputRef.current&&r.inputRef.current.select()},[r.isFromSelection,r.inputRef]),c.createElement(c.Fragment,null,c.createElement("form",{className:"DocSearch-Form",onSubmit:function(d){d.preventDefault()},onReset:h},c.createElement("label",B({className:"DocSearch-MagnifierLabel"},r.getLabelProps()),c.createElement(kr,null),c.createElement("span",{className:"DocSearch-VisuallyHiddenForAccessibility"},m)),c.createElement("div",{className:"DocSearch-LoadingIndicator"},c.createElement(mi,null)),c.createElement("input",B({className:"DocSearch-Input",ref:r.inputRef},r.getInputProps({inputElement:r.inputRef.current,autoFocus:r.autoFocus,maxLength:64}))),c.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":s,hidden:!r.state.query},c.createElement(Jt,null))),c.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":v,onClick:r.onClose},f))}var Ri=["_highlightResult","_snippetResult"];function tr(t){var e=t.key,n=t.limit,r=n===void 0?5:n,o=function(u){return function(){var s="__TEST_KEY__";try{return localStorage.setItem(s,""),localStorage.removeItem(s),!0}catch{return!1}}()===!1?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(s){return window.localStorage.setItem(u,JSON.stringify(s))},getItem:function(){var s=window.localStorage.getItem(u);return s?JSON.parse(s):[]}}}(e),i=o.getItem().slice(0,r);return{add:function(u){var s=u,l=(s._highlightResult,s._snippetResult,ve(s,Ri)),f=i.findIndex(function(a){return a.objectID===l.objectID});f>-1&&i.splice(f,1),i.unshift(l),i=i.slice(0,r),o.setItem(i)},remove:function(u){i=i.filter(function(s){return s.objectID!==u.objectID}),o.setItem(i)},getAll:function(){return i}}}function Li(t){var e,n="algoliasearch-client-js-".concat(t.key),r=function(){return e===void 0&&(e=t.localStorage||window.localStorage),e},o=function(){return JSON.parse(r().getItem(n)||"{}")},i=function(u){r().setItem(n,JSON.stringify(u))};return{get:function(u,s){var l=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then(function(){(function(){var a=t.timeToLive?1e3*t.timeToLive:null,v=o(),p=Object.fromEntries(Object.entries(v).filter(function(h){return Ie(h,2)[1].timestamp!==void 0}));if(i(p),a){var m=Object.fromEntries(Object.entries(p).filter(function(h){var d=Ie(h,2)[1],y=new Date().getTime();return!(d.timestamp+a2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return o().then(function(u){return Promise.all([u,i.miss(u)])}).then(function(u){return Ie(u,1)[0]})},set:function(r,o){return Promise.resolve(o)},delete:function(r){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(r,o){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}};return n.get(r,o,i).catch(function(){return Me({caches:e}).get(r,o,i)})},set:function(r,o){return n.set(r,o).catch(function(){return Me({caches:e}).set(r,o)})},delete:function(r){return n.delete(r).catch(function(){return Me({caches:e}).delete(r)})},clear:function(){return n.clear().catch(function(){return Me({caches:e}).clear()})}}}function qt(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{serializable:!0},e={};return{get:function(n,r){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{miss:function(){return Promise.resolve()}},i=JSON.stringify(n);if(i in e)return Promise.resolve(t.serializable?JSON.parse(e[i]):e[i]);var u=r(),s=o&&o.miss||function(){return Promise.resolve()};return u.then(function(l){return s(l)}).then(function(){return u})},set:function(n,r){return e[JSON.stringify(n)]=t.serializable?JSON.stringify(r):r,Promise.resolve(r)},delete:function(n){return delete e[JSON.stringify(n)],Promise.resolve()},clear:function(){return e={},Promise.resolve()}}}function qi(t){for(var e=t.length-1;e>0;e--){var n=Math.floor(Math.random()*(e+1)),r=t[e];t[e]=t[n],t[n]=r}return t}function Mr(t,e){return e&&Object.keys(e).forEach(function(n){t[n]=e[n](t)}),t}function Pt(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r0?r:void 0,timeout:n.timeout||e,headers:n.headers||{},queryParameters:n.queryParameters||{},cacheable:n.cacheable}}var ke={Read:1,Write:2,Any:3};function rr(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;return N(N({},t),{},{status:e,lastUpdate:Date.now()})}function Hr(t){return typeof t=="string"?{protocol:"https",url:t,accept:ke.Any}:{protocol:t.protocol||"https",url:t.url,accept:t.accept||ke.Any}}var It="POST";function or(t,e,n,r){var o=[],i=function(p,m){if(p.method!=="GET"&&(p.data!==void 0||m.data!==void 0)){var h=Array.isArray(p.data)?p.data:N(N({},p.data),m.data);return JSON.stringify(h)}}(n,r),u=function(p,m){var h=N(N({},p.headers),m.headers),d={};return Object.keys(h).forEach(function(y){var g=h[y];d[y.toLowerCase()]=g}),d}(t,r),s=n.method,l=n.method!=="GET"?{}:N(N({},n.data),r.data),f=N(N(N({"x-algolia-agent":t.userAgent.value},t.queryParameters),l),r.queryParameters),a=0,v=function p(m,h){var d=m.pop();if(d===void 0)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:ir(o)};var y={data:i,headers:u,method:s,url:Hi(d,n.path,f),connectTimeout:h(a,t.timeouts.connect),responseTimeout:h(a,r.timeout)},g=function(b){var S={request:y,response:b,host:d,triesLeft:m.length};return o.push(S),S},_={onSuccess:function(b){return function(S){try{return JSON.parse(S.content)}catch(O){throw function(E,k){return{name:"DeserializationError",message:E,response:k}}(O.message,S)}}(b)},onRetry:function(b){var S=g(b);return b.isTimedOut&&a++,Promise.all([t.logger.info("Retryable failure",Fr(S)),t.hostsCache.set(d,rr(d,b.isTimedOut?3:2))]).then(function(){return p(m,h)})},onFail:function(b){throw g(b),function(S,O){var E=S.content,k=S.status,P=E;try{P=JSON.parse(E).message}catch{}return function(I,w,T){return{name:"ApiError",message:I,status:w,transporterStackTrace:T}}(P,k,O)}(b,ir(o))}};return t.requester.send(y).then(function(b){return function(S,O){return function(E){var k=E.status;return E.isTimedOut||function(P){var I=P.isTimedOut,w=P.status;return!I&&~~w==0}(E)||~~(k/100)!=2&&~~(k/100)!=4}(S)?O.onRetry(S):~~(S.status/100)==2?O.onSuccess(S):O.onFail(S)}(b,_)})};return function(p,m){return Promise.all(m.map(function(h){return p.get(h,function(){return Promise.resolve(rr(h))})})).then(function(h){var d=h.filter(function(_){return function(b){return b.status===1||Date.now()-b.lastUpdate>12e4}(_)}),y=h.filter(function(_){return function(b){return b.status===3&&Date.now()-b.lastUpdate<=12e4}(_)}),g=[].concat(_t(d),_t(y));return{getTimeout:function(_,b){return(y.length===0&&_===0?1:y.length+3+_)*b},statelessHosts:g.length>0?g.map(function(_){return Hr(_)}):m}})}(t.hostsCache,e).then(function(p){return v(_t(p.statelessHosts).reverse(),p.getTimeout)})}function Mi(t){var e={value:"Algolia for JavaScript (".concat(t,")"),add:function(n){var r="; ".concat(n.segment).concat(n.version!==void 0?" (".concat(n.version,")"):"");return e.value.indexOf(r)===-1&&(e.value="".concat(e.value).concat(r)),e}};return e}function Hi(t,e,n){var r=Ur(n),o="".concat(t.protocol,"://").concat(t.url,"/").concat(e.charAt(0)==="/"?e.substr(1):e);return r.length&&(o+="?".concat(r)),o}function Ur(t){return Object.keys(t).map(function(e){return Pt("%s=%s",e,(n=t[e],Object.prototype.toString.call(n)==="[object Object]"||Object.prototype.toString.call(n)==="[object Array]"?JSON.stringify(t[e]):t[e]));var n}).join("&")}function ir(t){return t.map(function(e){return Fr(e)})}function Fr(t){var e=t.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return N(N({},t),{},{request:N(N({},t.request),{},{headers:N(N({},t.request.headers),e)})})}var Ui=function(t){return function(e,n){return e.method==="GET"?t.transporter.read(e,n):t.transporter.write(e,n)}},Br=function(t){return function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return Mr({transporter:t.transporter,appId:t.appId,indexName:e},n.methods)}},ar=function(t){return function(e,n){var r=e.map(function(o){return N(N({},o),{},{params:Ur(o.params||{})})});return t.transporter.read({method:It,path:"1/indexes/*/queries",data:{requests:r},cacheable:!0},n)}},cr=function(t){return function(e,n){return Promise.all(e.map(function(r){var o=r.params,i=o.facetName,u=o.facetQuery,s=function(l,f){if(l==null)return{};var a,v,p=function(h,d){if(h==null)return{};var y,g,_={},b=Object.keys(h);for(g=0;g=0||(_[y]=h[y]);return _}(l,f);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(l);for(v=0;v=0||Object.prototype.propertyIsEnumerable.call(l,a)&&(p[a]=l[a])}return p}(o,Oo);return Br(t)(r.indexName,{methods:{searchForFacetValues:Vr}}).searchForFacetValues(i,u,N(N({},n),s))}))}},Fi=function(t){return function(e,n,r){return t.transporter.read({method:It,path:Pt("1/answers/%s/prediction",t.indexName),data:{query:e,queryLanguages:n},cacheable:!0},r)}},Bi=function(t){return function(e,n){return t.transporter.read({method:It,path:Pt("1/indexes/%s/query",t.indexName),data:{query:e},cacheable:!0},n)}},Vr=function(t){return function(e,n,r){return t.transporter.read({method:It,path:Pt("1/indexes/%s/facets/%s/query",t.indexName,e),data:{facetQuery:n},cacheable:!0},r)}};function Kr(t,e,n){var r={appId:t,apiKey:e,timeouts:{connect:1,read:2,write:30},requester:{send:function(o){return new Promise(function(i){var u=new XMLHttpRequest;u.open(o.method,o.url,!0),Object.keys(o.headers).forEach(function(a){return u.setRequestHeader(a,o.headers[a])});var s,l=function(a,v){return setTimeout(function(){u.abort(),i({status:0,content:v,isTimedOut:!0})},1e3*a)},f=l(o.connectTimeout,"Connection timeout");u.onreadystatechange=function(){u.readyState>u.OPENED&&s===void 0&&(clearTimeout(f),s=l(o.responseTimeout,"Socket timeout"))},u.onerror=function(){u.status===0&&(clearTimeout(f),clearTimeout(s),i({content:u.responseText||"Network request failed",status:u.status,isTimedOut:!1}))},u.onload=function(){clearTimeout(f),clearTimeout(s),i({content:u.responseText,status:u.status,isTimedOut:!1})},u.send(o.data)})}},logger:{debug:function(o,i){return Promise.resolve()},info:function(o,i){return Promise.resolve()},error:function(o,i){return console.error(o,i),Promise.resolve()}},responsesCache:qt(),requestsCache:qt({serializable:!1}),hostsCache:Me({caches:[Li({key:"4.19.1-".concat(t)}),qt()]}),userAgent:Mi("4.19.1").add({segment:"Browser",version:"lite"}),authMode:0};return function(o){var i=o.appId,u=function(f,a,v){var p={"x-algolia-api-key":v,"x-algolia-application-id":a};return{headers:function(){return f===1?p:{}},queryParameters:function(){return f===0?p:{}}}}(o.authMode!==void 0?o.authMode:1,i,o.apiKey),s=function(f){var a=f.hostsCache,v=f.logger,p=f.requester,m=f.requestsCache,h=f.responsesCache,d=f.timeouts,y=f.userAgent,g=f.hosts,_=f.queryParameters,b={hostsCache:a,logger:v,requester:p,requestsCache:m,responsesCache:h,timeouts:d,userAgent:y,headers:f.headers,queryParameters:_,hosts:g.map(function(S){return Hr(S)}),read:function(S,O){var E=nr(O,b.timeouts.read),k=function(){return or(b,b.hosts.filter(function(I){return(I.accept&ke.Read)!=0}),S,E)};if((E.cacheable!==void 0?E.cacheable:S.cacheable)!==!0)return k();var P={request:S,mappedRequestOptions:E,transporter:{queryParameters:b.queryParameters,headers:b.headers}};return b.responsesCache.get(P,function(){return b.requestsCache.get(P,function(){return b.requestsCache.set(P,k()).then(function(I){return Promise.all([b.requestsCache.delete(P),I])},function(I){return Promise.all([b.requestsCache.delete(P),Promise.reject(I)])}).then(function(I){var w=Ie(I,2);return w[0],w[1]})})},{miss:function(I){return b.responsesCache.set(P,I)}})},write:function(S,O){return or(b,b.hosts.filter(function(E){return(E.accept&ke.Write)!=0}),S,nr(O,b.timeouts.write))}};return b}(N(N({hosts:[{url:"".concat(i,"-dsn.algolia.net"),accept:ke.Read},{url:"".concat(i,".algolia.net"),accept:ke.Write}].concat(qi([{url:"".concat(i,"-1.algolianet.com")},{url:"".concat(i,"-2.algolianet.com")},{url:"".concat(i,"-3.algolianet.com")}]))},o),{},{headers:N(N({},u.headers()),{},{"content-type":"application/x-www-form-urlencoded"},o.headers),queryParameters:N(N({},u.queryParameters()),o.queryParameters)})),l={transporter:s,appId:i,addAlgoliaAgent:function(f,a){s.userAgent.add({segment:f,version:a})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then(function(){})}};return Mr(l,o.methods)}(N(N(N({},r),n),{},{methods:{search:ar,searchForFacetValues:cr,multipleQueries:ar,multipleSearchForFacetValues:cr,customRequest:Ui,initIndex:function(o){return function(i){return Br(o)(i,{methods:{search:Bi,searchForFacetValues:Vr,findAnswers:Fi}})}}}}))}Kr.version="4.19.1";var Vi=["footer","searchBox"];function Ki(t){var e=t.appId,n=t.apiKey,r=t.indexName,o=t.placeholder,i=o===void 0?"Search docs":o,u=t.searchParameters,s=t.maxResultsPerGroup,l=t.onClose,f=l===void 0?Pi:l,a=t.transformItems,v=a===void 0?er:a,p=t.hitComponent,m=p===void 0?fi:p,h=t.resultsFooterComponent,d=h===void 0?function(){return null}:h,y=t.navigator,g=t.initialScrollY,_=g===void 0?0:g,b=t.transformSearchClient,S=b===void 0?er:b,O=t.disableUserPersonalization,E=O!==void 0&&O,k=t.initialQuery,P=k===void 0?"":k,I=t.translations,w=I===void 0?{}:I,T=t.getMissingResultsUrl,M=t.insights,C=M!==void 0&&M,z=w.footer,ae=w.searchBox,at=ve(w,Vi),de=be(c.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),H=de[0],he=de[1],J=c.useRef(null),Z=c.useRef(null),q=c.useRef(null),ne=c.useRef(null),$=c.useRef(null),V=c.useRef(10),ce=c.useRef(typeof window<"u"?window.getSelection().toString().slice(0,64):"").current,Q=c.useRef(P||ce).current,Se=function(A,R,U){return c.useMemo(function(){var W=Kr(A,R);return W.addAlgoliaAgent("docsearch","3.6.2"),/docsearch.js \(.*\)/.test(W.transporter.userAgent.value)===!1&&W.addAlgoliaAgent("docsearch-react","3.6.2"),U(W)},[A,R,U])}(e,n,S),ue=c.useRef(tr({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(r),limit:10})).current,G=c.useRef(tr({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(r),limit:ue.getAll().length===0?7:4})).current,Y=c.useCallback(function(A){if(!E){var R=A.type==="content"?A.__docsearch_parent:A;R&&ue.getAll().findIndex(function(U){return U.objectID===R.objectID})===-1&&G.add(R)}},[ue,G,E]),ct=c.useCallback(function(A){if(H.context.algoliaInsightsPlugin&&A.__autocomplete_id){var R=A,U={eventName:"Item Selected",index:R.__autocomplete_indexName,items:[R],positions:[A.__autocomplete_id],queryID:R.__autocomplete_queryID};H.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(U)}},[H.context.algoliaInsightsPlugin]),le=c.useMemo(function(){return ui({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:Q,context:{searchSuggestions:[]}},insights:C,navigator:y,onStateChange:function(A){he(A.state)},getSources:function(A){var R=A.query,U=A.state,W=A.setContext,se=A.setStatus;if(!R)return E?[]:[{sourceId:"recentSearches",onSelect:function(L){var X=L.item,Ne=L.event;Y(X),gt(Ne)||f()},getItemUrl:function(L){return L.item.url},getItems:function(){return G.getAll()}},{sourceId:"favoriteSearches",onSelect:function(L){var X=L.item,Ne=L.event;Y(X),gt(Ne)||f()},getItemUrl:function(L){return L.item.url},getItems:function(){return ue.getAll()}}];var fe=!!C;return Se.search([{query:R,indexName:r,params:Fe({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(V.current),"hierarchy.lvl2:".concat(V.current),"hierarchy.lvl3:".concat(V.current),"hierarchy.lvl4:".concat(V.current),"hierarchy.lvl5:".concat(V.current),"hierarchy.lvl6:".concat(V.current),"content:".concat(V.current)],snippetEllipsisText:"…",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:fe},u)}]).catch(function(L){throw L.name==="RetryError"&&se("error"),L}).then(function(L){var X=L.results[0],Ne=X.hits,Jr=X.nbHits,Dt=Xn(Ne,function(kt){return qr(kt)},s);U.context.searchSuggestions.length0&&(en(),$.current&&$.current.focus())},[Q,en]),c.useEffect(function(){function A(){if(Z.current){var R=.01*window.innerHeight;Z.current.style.setProperty("--docsearch-vh","".concat(R,"px"))}}return A(),window.addEventListener("resize",A),function(){window.removeEventListener("resize",A)}},[]),c.createElement("div",B({ref:J},zr({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container",H.status==="stalled"&&"DocSearch-Container--Stalled",H.status==="error"&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(A){A.target===A.currentTarget&&f()}}),c.createElement("div",{className:"DocSearch-Modal",ref:Z},c.createElement("header",{className:"DocSearch-SearchBar",ref:q},c.createElement(Ti,B({},le,{state:H,autoFocus:Q.length===0,inputRef:$,isFromSelection:!!Q&&Q===ce,translations:ae,onClose:f}))),c.createElement("div",{className:"DocSearch-Dropdown",ref:ne},c.createElement(xi,B({},le,{indexName:r,state:H,hitComponent:m,resultsFooterComponent:d,disableUserPersonalization:E,recentSearches:G,favoriteSearches:ue,inputRef:$,translations:at,getMissingResultsUrl:T,onItemClick:function(A,R){ct(A),Y(A),gt(R)||f()}}))),c.createElement("footer",{className:"DocSearch-Footer"},c.createElement(si,{translations:z}))))}function Wi(t){var e,n,r=c.useRef(null),o=be(c.useState(!1),2),i=o[0],u=o[1],s=be(c.useState((t==null?void 0:t.initialQuery)||void 0),2),l=s[0],f=s[1],a=c.useCallback(function(){u(!0)},[u]),v=c.useCallback(function(){u(!1)},[u]);return function(p){var m=p.isOpen,h=p.onOpen,d=p.onClose,y=p.onInput,g=p.searchButtonRef;c.useEffect(function(){function _(b){var S;(b.keyCode===27&&m||((S=b.key)===null||S===void 0?void 0:S.toLowerCase())==="k"&&(b.metaKey||b.ctrlKey)||!function(O){var E=O.target,k=E.tagName;return E.isContentEditable||k==="INPUT"||k==="SELECT"||k==="TEXTAREA"}(b)&&b.key==="/"&&!m)&&(b.preventDefault(),m?d():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||h()),g&&g.current===document.activeElement&&y&&/[a-zA-Z0-9]/.test(String.fromCharCode(b.keyCode))&&y(b)}return window.addEventListener("keydown",_),function(){window.removeEventListener("keydown",_)}},[m,h,d,y,g])}({isOpen:i,onOpen:a,onClose:v,onInput:c.useCallback(function(p){u(!0),f(p.key)},[u,f]),searchButtonRef:r}),c.createElement(c.Fragment,null,c.createElement(Po,{ref:r,translations:t==null||(e=t.translations)===null||e===void 0?void 0:e.button,onClick:a}),i&&Er(c.createElement(Ki,B({},t,{initialScrollY:window.scrollY,initialQuery:l,translations:t==null||(n=t.translations)===null||n===void 0?void 0:n.modal,onClose:v})),document.body))}function zi(t){Pr(c.createElement(Wi,Mt({},t,{transformSearchClient:function(e){return e.addAlgoliaAgent("docsearch.js","3.6.2"),t.transformSearchClient?t.transformSearchClient(e):e}})),function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:window;return typeof e=="string"?n.document.querySelector(e):e}(t.container,t.environment))}const Ji={id:"docsearch"},Qi=Zr({__name:"VPAlgoliaSearchBox",props:{algolia:{}},setup(t){const e=t,n=Qr(),r=Gr(),{site:o,localeIndex:i,lang:u}=ro();Yr(s),Xr(i,s);async function s(){var m,h;await eo();const a={...e.algolia,...(m=e.algolia.locales)==null?void 0:m[i.value]},v=((h=a.searchParameters)==null?void 0:h.facetFilters)??[],p=[...(Array.isArray(v)?v:[v]).filter(d=>!d.startsWith("lang:")),`lang:${u.value}`];l({...a,searchParameters:{...a.searchParameters,facetFilters:p}})}function l(a){const v=Object.assign({},a,{container:"#docsearch",navigator:{navigate({itemUrl:p}){const{pathname:m}=new URL(window.location.origin+p);r.path===m?window.location.assign(window.location.origin+p):n.go(p)}},transformItems(p){return p.map(m=>Object.assign({},m,{url:f(m.url)}))},hitComponent({hit:p,children:m}){return{__v:null,type:"a",ref:void 0,constructor:void 0,key:void 0,props:{href:p.url,children:m}}}});zi(v)}function f(a){const{pathname:v,hash:p}=new URL(a,location.origin);return v.replace(/\.html$/,o.value.cleanUrls?"":".html")+p}return(a,v)=>(to(),no("div",Ji))}});export{Qi as default};
diff --git a/assets/chunks/arc.EE6MX9ab.js b/assets/chunks/arc.CbQZFRTr.js
similarity index 98%
rename from assets/chunks/arc.EE6MX9ab.js
rename to assets/chunks/arc.CbQZFRTr.js
index 04325c78..827b488e 100644
--- a/assets/chunks/arc.EE6MX9ab.js
+++ b/assets/chunks/arc.CbQZFRTr.js
@@ -1 +1 @@
-import{w as ln,c as Q}from"./path.CbwjOpE9.js";import{aM as an,aN as X,aO as I,aP as rn,aQ as y,aI as on,aR as B,aS as _,aT as un,aU as t,aV as sn,aW as tn,aX as fn}from"../app.CbQoAe_D.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function mn(l){return l.endAngle}function pn(l){return l&&l.padAngle}function dn(l,h,q,O,v,R,U,a){var D=q-l,i=O-h,n=U-v,m=a-R,r=m*D-n*i;if(!(r*ru*u+W*W&&(M=w,N=d),{cx:M,cy:N,x01:-n,y01:-m,x11:M*(v/T-1),y11:N*(v/T-1)}}function vn(){var l=cn,h=yn,q=Q(0),O=null,v=gn,R=mn,U=pn,a=null,D=ln(i);function i(){var n,m,r=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-rn,c=R.apply(this,arguments)-rn,V=un(c-f),o=c>f;if(a||(a=n=D()),sy))a.moveTo(0,0);else if(V>on-y)a.moveTo(s*X(f),s*I(f)),a.arc(0,0,s,f,c,!o),r>y&&(a.moveTo(r*X(c),r*I(c)),a.arc(0,0,r,c,f,o));else{var p=f,g=c,A=f,T=c,P=V,E=V,M=U.apply(this,arguments)/2,N=M>y&&(O?+O.apply(this,arguments):B(r*r+s*s)),w=_(un(s-r)/2,+q.apply(this,arguments)),d=w,x=w,e,u;if(N>y){var W=sn(N/r*I(M)),C=sn(N/s*I(M));(P-=W*2)>y?(W*=o?1:-1,A+=W,T-=W):(P=0,A=T=(f+c)/2),(E-=C*2)>y?(C*=o?1:-1,p+=C,g-=C):(E=0,p=g=(f+c)/2)}var j=s*X(p),z=s*I(p),F=r*X(T),G=r*I(T);if(w>y){var H=s*X(g),J=s*I(g),L=r*X(A),Y=r*I(A),S;if(Vy?x>y?(e=K(L,Y,j,z,s,x,o),u=K(H,J,F,G,s,x,o),a.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?a.lineTo(F,G):d>y?(e=K(F,G,H,J,r,-d,o),u=K(j,z,L,Y,r,-d,o),a.lineTo(e.cx+e.x01,e.cy+e.y01),du*u+W*W&&(M=w,N=d),{cx:M,cy:N,x01:-n,y01:-m,x11:M*(v/T-1),y11:N*(v/T-1)}}function vn(){var l=cn,h=yn,q=Q(0),O=null,v=gn,R=mn,U=pn,a=null,D=ln(i);function i(){var n,m,r=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-rn,c=R.apply(this,arguments)-rn,V=un(c-f),o=c>f;if(a||(a=n=D()),sy))a.moveTo(0,0);else if(V>on-y)a.moveTo(s*X(f),s*I(f)),a.arc(0,0,s,f,c,!o),r>y&&(a.moveTo(r*X(c),r*I(c)),a.arc(0,0,r,c,f,o));else{var p=f,g=c,A=f,T=c,P=V,E=V,M=U.apply(this,arguments)/2,N=M>y&&(O?+O.apply(this,arguments):B(r*r+s*s)),w=_(un(s-r)/2,+q.apply(this,arguments)),d=w,x=w,e,u;if(N>y){var W=sn(N/r*I(M)),C=sn(N/s*I(M));(P-=W*2)>y?(W*=o?1:-1,A+=W,T-=W):(P=0,A=T=(f+c)/2),(E-=C*2)>y?(C*=o?1:-1,p+=C,g-=C):(E=0,p=g=(f+c)/2)}var j=s*X(p),z=s*I(p),F=r*X(T),G=r*I(T);if(w>y){var H=s*X(g),J=s*I(g),L=r*X(A),Y=r*I(A),S;if(Vy?x>y?(e=K(L,Y,j,z,s,x,o),u=K(H,J,F,G,s,x,o),a.moveTo(e.cx+e.x01,e.cy+e.y01),xy)||!(P>y)?a.lineTo(F,G):d>y?(e=K(F,G,H,J,r,-d,o),u=K(j,z,L,Y,r,-d,o),a.lineTo(e.cx+e.x01,e.cy+e.y01),d"u"&&(w.yylloc={});var J=w.yylloc;t.push(J);var me=w.options&&w.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _e(){var P;return P=u.pop()||w.lex()||C,typeof P!="number"&&(P instanceof Array&&(u=P,P=u.pop()),P=s.symbols_[P]||P),P}for(var I,M,z,Q,W={},X,B,ae,G;;){if(M=i[i.length-1],this.defaultActions[M]?z=this.defaultActions[M]:((I===null||typeof I>"u")&&(I=_e()),z=m[M]&&m[M][I]),typeof z>"u"||!z.length||!z[0]){var $="";G=[];for(X in m[M])this.terminals_[X]&&X>F&&G.push("'"+this.terminals_[X]+"'");w.showPosition?$="Parse error on line "+(R+1)+`:
+import{c as he,aZ as se,h as H,i as ye,l as S,A as Ee,af as we,j as De,o as ve}from"../app.DRN3unl1.js";import{c as Ne}from"./clone.Bnzwv1hF.js";import{i as ke,c as Ie,b as Oe,d as Te,a as ge,p as ze}from"./edges-5962ec63.BFgoqf-O.js";import{G as Ce}from"./graph.C4kgFXP1.js";import{o as Ae}from"./ordinal.BYWQX77i.js";import{c as Re}from"./channel.Bgp4IlJX.js";import{s as Be}from"./Tableau10.B-NsZVaP.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./createText-4a4f35c9.Cu3K6_Cl.js";import"./line.DpDoeUQJ.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";import"./init.Gi6I4Gst.js";var le,oe,ee=function(){var e=function(D,o,s,i){for(s=s||{},i=D.length;i--;s[D[i]]=o);return s},a=[1,7],d=[1,13],c=[1,14],n=[1,15],g=[1,19],l=[1,16],f=[1,17],b=[1,18],p=[8,30],x=[8,21,28,29,30,31,32,40,44,47],y=[1,23],T=[1,24],v=[8,15,16,21,28,29,30,31,32,40,44,47],N=[8,15,16,21,27,28,29,30,31,32,40,44,47],E=[1,49],L={trace:function(){},yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:function(o,s,i,u,h,t,m){var r=t.length-1;switch(h){case 4:u.getLogger().debug("Rule: separator (NL) ");break;case 5:u.getLogger().debug("Rule: separator (Space) ");break;case 6:u.getLogger().debug("Rule: separator (EOF) ");break;case 7:u.getLogger().debug("Rule: hierarchy: ",t[r-1]),u.setHierarchy(t[r-1]);break;case 8:u.getLogger().debug("Stop NL ");break;case 9:u.getLogger().debug("Stop EOF ");break;case 10:u.getLogger().debug("Stop NL2 ");break;case 11:u.getLogger().debug("Stop EOF2 ");break;case 12:u.getLogger().debug("Rule: statement: ",t[r]),typeof t[r].length=="number"?this.$=t[r]:this.$=[t[r]];break;case 13:u.getLogger().debug("Rule: statement #2: ",t[r-1]),this.$=[t[r-1]].concat(t[r]);break;case 14:u.getLogger().debug("Rule: link: ",t[r],o),this.$={edgeTypeStr:t[r],label:""};break;case 15:u.getLogger().debug("Rule: LABEL link: ",t[r-3],t[r-1],t[r]),this.$={edgeTypeStr:t[r],label:t[r-1]};break;case 18:const R=parseInt(t[r]),Y=u.generateId();this.$={id:Y,type:"space",label:"",width:R,children:[]};break;case 23:u.getLogger().debug("Rule: (nodeStatement link node) ",t[r-2],t[r-1],t[r]," typestr: ",t[r-1].edgeTypeStr);const F=u.edgeStrToEdgeData(t[r-1].edgeTypeStr);this.$=[{id:t[r-2].id,label:t[r-2].label,type:t[r-2].type,directions:t[r-2].directions},{id:t[r-2].id+"-"+t[r].id,start:t[r-2].id,end:t[r].id,label:t[r-1].label,type:"edge",directions:t[r].directions,arrowTypeEnd:F,arrowTypeStart:"arrow_open"},{id:t[r].id,label:t[r].label,type:u.typeStr2Type(t[r].typeStr),directions:t[r].directions}];break;case 24:u.getLogger().debug("Rule: nodeStatement (abc88 node size) ",t[r-1],t[r]),this.$={id:t[r-1].id,label:t[r-1].label,type:u.typeStr2Type(t[r-1].typeStr),directions:t[r-1].directions,widthInColumns:parseInt(t[r],10)};break;case 25:u.getLogger().debug("Rule: nodeStatement (node) ",t[r]),this.$={id:t[r].id,label:t[r].label,type:u.typeStr2Type(t[r].typeStr),directions:t[r].directions,widthInColumns:1};break;case 26:u.getLogger().debug("APA123",this?this:"na"),u.getLogger().debug("COLUMNS: ",t[r]),this.$={type:"column-setting",columns:t[r]==="auto"?-1:parseInt(t[r])};break;case 27:u.getLogger().debug("Rule: id-block statement : ",t[r-2],t[r-1]),u.generateId(),this.$={...t[r-2],type:"composite",children:t[r-1]};break;case 28:u.getLogger().debug("Rule: blockStatement : ",t[r-2],t[r-1],t[r]);const C=u.generateId();this.$={id:C,type:"composite",label:"",children:t[r-1]};break;case 29:u.getLogger().debug("Rule: node (NODE_ID separator): ",t[r]),this.$={id:t[r]};break;case 30:u.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",t[r-1],t[r]),this.$={id:t[r-1],label:t[r].label,typeStr:t[r].typeStr,directions:t[r].directions};break;case 31:u.getLogger().debug("Rule: dirList: ",t[r]),this.$=[t[r]];break;case 32:u.getLogger().debug("Rule: dirList: ",t[r-1],t[r]),this.$=[t[r-1]].concat(t[r]);break;case 33:u.getLogger().debug("Rule: nodeShapeNLabel: ",t[r-2],t[r-1],t[r]),this.$={typeStr:t[r-2]+t[r],label:t[r-1]};break;case 34:u.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",t[r-3],t[r-2]," #3:",t[r-1],t[r]),this.$={typeStr:t[r-3]+t[r],label:t[r-2],directions:t[r-1]};break;case 35:case 36:this.$={type:"classDef",id:t[r-1].trim(),css:t[r].trim()};break;case 37:this.$={type:"applyClass",id:t[r-1].trim(),styleClass:t[r].trim()};break;case 38:this.$={type:"applyStyles",id:t[r-1].trim(),stylesStr:t[r].trim()};break}},table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:d,29:c,31:n,32:g,40:l,44:f,47:b},{8:[1,20]},e(p,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:a,28:d,29:c,31:n,32:g,40:l,44:f,47:b}),e(x,[2,16],{14:22,15:y,16:T}),e(x,[2,17]),e(x,[2,18]),e(x,[2,19]),e(x,[2,20]),e(x,[2,21]),e(x,[2,22]),e(v,[2,25],{27:[1,25]}),e(x,[2,26]),{19:26,26:12,32:g},{11:27,13:4,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:d,29:c,31:n,32:g,40:l,44:f,47:b},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(N,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(p,[2,13]),{26:35,32:g},{32:[2,14]},{17:[1,36]},e(v,[2,24]),{11:37,13:4,14:22,15:y,16:T,19:5,20:6,21:a,22:8,23:9,24:10,25:11,26:12,28:d,29:c,31:n,32:g,40:l,44:f,47:b},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(N,[2,30]),{18:[1,43]},{18:[1,44]},e(v,[2,23]),{18:[1,45]},{30:[1,46]},e(x,[2,28]),e(x,[2,35]),e(x,[2,36]),e(x,[2,37]),e(x,[2,38]),{37:[1,47]},{34:48,35:E},{15:[1,50]},e(x,[2,27]),e(N,[2,33]),{39:[1,51]},{34:52,35:E,39:[2,31]},{32:[2,15]},e(N,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:function(o,s){if(s.recoverable)this.trace(o);else{var i=new Error(o);throw i.hash=s,i}},parse:function(o){var s=this,i=[0],u=[],h=[null],t=[],m=this.table,r="",R=0,Y=0,F=2,C=1,Le=t.slice.call(arguments,1),w=Object.create(this.lexer),K={yy:{}};for(var Z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Z)&&(K.yy[Z]=this.yy[Z]);w.setInput(o,K.yy),K.yy.lexer=w,K.yy.parser=this,typeof w.yylloc>"u"&&(w.yylloc={});var J=w.yylloc;t.push(J);var me=w.options&&w.options.ranges;typeof K.yy.parseError=="function"?this.parseError=K.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _e(){var P;return P=u.pop()||w.lex()||C,typeof P!="number"&&(P instanceof Array&&(u=P,P=u.pop()),P=s.symbols_[P]||P),P}for(var I,M,z,Q,W={},X,B,ae,G;;){if(M=i[i.length-1],this.defaultActions[M]?z=this.defaultActions[M]:((I===null||typeof I>"u")&&(I=_e()),z=m[M]&&m[M][I]),typeof z>"u"||!z.length||!z[0]){var $="";G=[];for(X in m[M])this.terminals_[X]&&X>F&&G.push("'"+this.terminals_[X]+"'");w.showPosition?$="Parse error on line "+(R+1)+`:
 `+w.showPosition()+`
 Expecting `+G.join(", ")+", got '"+(this.terminals_[I]||I)+"'":$="Parse error on line "+(R+1)+": Unexpected "+(I==C?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError($,{text:w.match,token:this.terminals_[I]||I,line:w.yylineno,loc:J,expected:G})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+I);switch(z[0]){case 1:i.push(I),h.push(w.yytext),t.push(w.yylloc),i.push(z[1]),I=null,Y=w.yyleng,r=w.yytext,R=w.yylineno,J=w.yylloc;break;case 2:if(B=this.productions_[z[1]][1],W.$=h[h.length-B],W._$={first_line:t[t.length-(B||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(B||1)].first_column,last_column:t[t.length-1].last_column},me&&(W._$.range=[t[t.length-(B||1)].range[0],t[t.length-1].range[1]]),Q=this.performAction.apply(W,[r,Y,R,K.yy,z[1],h,t].concat(Le)),typeof Q<"u")return Q;B&&(i=i.slice(0,-1*B*2),h=h.slice(0,-1*B),t=t.slice(0,-1*B)),i.push(this.productions_[z[1]][0]),h.push(W.$),t.push(W._$),ae=m[i[i.length-2]][i[i.length-1]],i.push(ae);break;case 3:return!0}}return!0}},A=function(){var D={EOF:1,parseError:function(s,i){if(this.yy.parser)this.yy.parser.parseError(s,i);else throw new Error(s)},setInput:function(o,s){return this.yy=s||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var s=o.match(/(?:\r\n?|\n).*/g);return s?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var s=o.length,i=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-s),this.offset-=s;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var h=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===u.length?this.yylloc.first_column:0)+u[u.length-i.length].length-i[0].length:this.yylloc.first_column-s},this.options.ranges&&(this.yylloc.range=[h[0],h[0]+this.yyleng-s]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
 `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(o){this.unput(this.match.slice(o))},pastInput:function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var o=this.pastInput(),s=new Array(o.length+1).join("-");return o+this.upcomingInput()+`
diff --git a/assets/chunks/c4Diagram-ae766693.Cw5qy7Cl.js b/assets/chunks/c4Diagram-dc8f04df.CKb4DDrj.js
similarity index 99%
rename from assets/chunks/c4Diagram-ae766693.Cw5qy7Cl.js
rename to assets/chunks/c4Diagram-dc8f04df.CKb4DDrj.js
index cf4674e3..5d132e2a 100644
--- a/assets/chunks/c4Diagram-ae766693.Cw5qy7Cl.js
+++ b/assets/chunks/c4Diagram-dc8f04df.CKb4DDrj.js
@@ -1,4 +1,4 @@
-import{s as we,g as Oe,a as Te,b as Re,c as Dt,d as ue,e as De,f as wt,h as Nt,l as le,i as Se,w as Pe,j as Kt,k as oe,m as Me}from"../app.CbQoAe_D.js";import{d as Le,g as Ne}from"./svgDrawCommon-5e1cfd1d.Cpp7qDwc.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";var Yt=function(){var e=function(bt,_,x,m){for(x=x||{},m=bt.length;m--;x[bt[m]]=_);return x},t=[1,24],a=[1,25],o=[1,26],l=[1,27],i=[1,28],s=[1,63],r=[1,64],n=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],E=[1,29],O=[1,30],R=[1,31],S=[1,32],L=[1,33],Y=[1,34],Q=[1,35],H=[1,36],q=[1,37],G=[1,38],K=[1,39],J=[1,40],Z=[1,41],$=[1,42],tt=[1,43],et=[1,44],it=[1,45],nt=[1,46],st=[1,47],at=[1,48],rt=[1,50],lt=[1,51],ot=[1,52],ct=[1,53],ht=[1,54],ut=[1,55],dt=[1,56],ft=[1,57],pt=[1,58],yt=[1,59],gt=[1,60],At=[14,42],Vt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Ot=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],v=[1,82],k=[1,83],A=[1,84],C=[1,85],w=[12,14,42],ne=[12,14,33,42],Pt=[12,14,33,42,76,77,79,80],mt=[12,33],zt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Xt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(_,x,m,g,T,u,Tt){var y=u.length-1;switch(T){case 3:g.setDirection("TB");break;case 4:g.setDirection("BT");break;case 5:g.setDirection("RL");break;case 6:g.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:g.setC4Type(u[y-3]);break;case 19:g.setTitle(u[y].substring(6)),this.$=u[y].substring(6);break;case 20:g.setAccDescription(u[y].substring(15)),this.$=u[y].substring(15);break;case 21:this.$=u[y].trim(),g.setTitle(this.$);break;case 22:case 23:this.$=u[y].trim(),g.setAccDescription(this.$);break;case 28:case 29:u[y].splice(2,0,"ENTERPRISE"),g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 30:g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 31:u[y].splice(2,0,"CONTAINER"),g.addContainerBoundary(...u[y]),this.$=u[y];break;case 32:g.addDeploymentNode("node",...u[y]),this.$=u[y];break;case 33:g.addDeploymentNode("nodeL",...u[y]),this.$=u[y];break;case 34:g.addDeploymentNode("nodeR",...u[y]),this.$=u[y];break;case 35:g.popBoundaryParseStack();break;case 39:g.addPersonOrSystem("person",...u[y]),this.$=u[y];break;case 40:g.addPersonOrSystem("external_person",...u[y]),this.$=u[y];break;case 41:g.addPersonOrSystem("system",...u[y]),this.$=u[y];break;case 42:g.addPersonOrSystem("system_db",...u[y]),this.$=u[y];break;case 43:g.addPersonOrSystem("system_queue",...u[y]),this.$=u[y];break;case 44:g.addPersonOrSystem("external_system",...u[y]),this.$=u[y];break;case 45:g.addPersonOrSystem("external_system_db",...u[y]),this.$=u[y];break;case 46:g.addPersonOrSystem("external_system_queue",...u[y]),this.$=u[y];break;case 47:g.addContainer("container",...u[y]),this.$=u[y];break;case 48:g.addContainer("container_db",...u[y]),this.$=u[y];break;case 49:g.addContainer("container_queue",...u[y]),this.$=u[y];break;case 50:g.addContainer("external_container",...u[y]),this.$=u[y];break;case 51:g.addContainer("external_container_db",...u[y]),this.$=u[y];break;case 52:g.addContainer("external_container_queue",...u[y]),this.$=u[y];break;case 53:g.addComponent("component",...u[y]),this.$=u[y];break;case 54:g.addComponent("component_db",...u[y]),this.$=u[y];break;case 55:g.addComponent("component_queue",...u[y]),this.$=u[y];break;case 56:g.addComponent("external_component",...u[y]),this.$=u[y];break;case 57:g.addComponent("external_component_db",...u[y]),this.$=u[y];break;case 58:g.addComponent("external_component_queue",...u[y]),this.$=u[y];break;case 60:g.addRel("rel",...u[y]),this.$=u[y];break;case 61:g.addRel("birel",...u[y]),this.$=u[y];break;case 62:g.addRel("rel_u",...u[y]),this.$=u[y];break;case 63:g.addRel("rel_d",...u[y]),this.$=u[y];break;case 64:g.addRel("rel_l",...u[y]),this.$=u[y];break;case 65:g.addRel("rel_r",...u[y]),this.$=u[y];break;case 66:g.addRel("rel_b",...u[y]),this.$=u[y];break;case 67:u[y].splice(0,1),g.addRel("rel",...u[y]),this.$=u[y];break;case 68:g.updateElStyle("update_el_style",...u[y]),this.$=u[y];break;case 69:g.updateRelStyle("update_rel_style",...u[y]),this.$=u[y];break;case 70:g.updateLayoutConfig("update_layout_config",...u[y]),this.$=u[y];break;case 71:this.$=[u[y]];break;case 72:u[y].unshift(u[y-1]),this.$=u[y];break;case 73:case 75:this.$=u[y].trim();break;case 74:let Et={};Et[u[y-1].trim()]=u[y].trim(),this.$=Et;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:70,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:71,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:72,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:73,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{14:[1,74]},e(At,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(At,[2,14]),e(Vt,[2,16],{12:[1,76]}),e(At,[2,36],{12:[1,77]}),e(Ot,[2,19]),e(Ot,[2,20]),{25:[1,78]},{27:[1,79]},e(Ot,[2,23]),{35:80,75:81,76:v,77:k,79:A,80:C},{35:86,75:81,76:v,77:k,79:A,80:C},{35:87,75:81,76:v,77:k,79:A,80:C},{35:88,75:81,76:v,77:k,79:A,80:C},{35:89,75:81,76:v,77:k,79:A,80:C},{35:90,75:81,76:v,77:k,79:A,80:C},{35:91,75:81,76:v,77:k,79:A,80:C},{35:92,75:81,76:v,77:k,79:A,80:C},{35:93,75:81,76:v,77:k,79:A,80:C},{35:94,75:81,76:v,77:k,79:A,80:C},{35:95,75:81,76:v,77:k,79:A,80:C},{35:96,75:81,76:v,77:k,79:A,80:C},{35:97,75:81,76:v,77:k,79:A,80:C},{35:98,75:81,76:v,77:k,79:A,80:C},{35:99,75:81,76:v,77:k,79:A,80:C},{35:100,75:81,76:v,77:k,79:A,80:C},{35:101,75:81,76:v,77:k,79:A,80:C},{35:102,75:81,76:v,77:k,79:A,80:C},{35:103,75:81,76:v,77:k,79:A,80:C},{35:104,75:81,76:v,77:k,79:A,80:C},e(w,[2,59]),{35:105,75:81,76:v,77:k,79:A,80:C},{35:106,75:81,76:v,77:k,79:A,80:C},{35:107,75:81,76:v,77:k,79:A,80:C},{35:108,75:81,76:v,77:k,79:A,80:C},{35:109,75:81,76:v,77:k,79:A,80:C},{35:110,75:81,76:v,77:k,79:A,80:C},{35:111,75:81,76:v,77:k,79:A,80:C},{35:112,75:81,76:v,77:k,79:A,80:C},{35:113,75:81,76:v,77:k,79:A,80:C},{35:114,75:81,76:v,77:k,79:A,80:C},{35:115,75:81,76:v,77:k,79:A,80:C},{20:116,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{12:[1,118],33:[1,117]},{35:119,75:81,76:v,77:k,79:A,80:C},{35:120,75:81,76:v,77:k,79:A,80:C},{35:121,75:81,76:v,77:k,79:A,80:C},{35:122,75:81,76:v,77:k,79:A,80:C},{35:123,75:81,76:v,77:k,79:A,80:C},{35:124,75:81,76:v,77:k,79:A,80:C},{35:125,75:81,76:v,77:k,79:A,80:C},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(At,[2,15]),e(Vt,[2,17],{21:22,19:130,22:t,23:a,24:o,26:l,28:i}),e(At,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:a,24:o,26:l,28:i,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(Ot,[2,21]),e(Ot,[2,22]),e(w,[2,39]),e(ne,[2,71],{75:81,35:132,76:v,77:k,79:A,80:C}),e(Pt,[2,73]),{78:[1,133]},e(Pt,[2,75]),e(Pt,[2,76]),e(w,[2,40]),e(w,[2,41]),e(w,[2,42]),e(w,[2,43]),e(w,[2,44]),e(w,[2,45]),e(w,[2,46]),e(w,[2,47]),e(w,[2,48]),e(w,[2,49]),e(w,[2,50]),e(w,[2,51]),e(w,[2,52]),e(w,[2,53]),e(w,[2,54]),e(w,[2,55]),e(w,[2,56]),e(w,[2,57]),e(w,[2,58]),e(w,[2,60]),e(w,[2,61]),e(w,[2,62]),e(w,[2,63]),e(w,[2,64]),e(w,[2,65]),e(w,[2,66]),e(w,[2,67]),e(w,[2,68]),e(w,[2,69]),e(w,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(mt,[2,28]),e(mt,[2,29]),e(mt,[2,30]),e(mt,[2,31]),e(mt,[2,32]),e(mt,[2,33]),e(mt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Vt,[2,18]),e(At,[2,38]),e(ne,[2,72]),e(Pt,[2,74]),e(w,[2,24]),e(w,[2,35]),e(zt,[2,25]),e(zt,[2,26],{12:[1,138]}),e(zt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(_,x){if(x.recoverable)this.trace(_);else{var m=new Error(_);throw m.hash=x,m}},parse:function(_){var x=this,m=[0],g=[],T=[null],u=[],Tt=this.table,y="",Et=0,se=0,ve=2,ae=1,ke=u.slice.call(arguments,1),D=Object.create(this.lexer),vt={yy:{}};for(var Qt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Qt)&&(vt.yy[Qt]=this.yy[Qt]);D.setInput(_,vt.yy),vt.yy.lexer=D,vt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Ht=D.yylloc;u.push(Ht);var Ae=D.options&&D.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ce(){var X;return X=g.pop()||D.lex()||ae,typeof X!="number"&&(X instanceof Array&&(g=X,X=g.pop()),X=x.symbols_[X]||X),X}for(var M,kt,N,qt,Ct={},Mt,z,re,Lt;;){if(kt=m[m.length-1],this.defaultActions[kt]?N=this.defaultActions[kt]:((M===null||typeof M>"u")&&(M=Ce()),N=Tt[kt]&&Tt[kt][M]),typeof N>"u"||!N.length||!N[0]){var Gt="";Lt=[];for(Mt in Tt[kt])this.terminals_[Mt]&&Mt>ve&&Lt.push("'"+this.terminals_[Mt]+"'");D.showPosition?Gt="Parse error on line "+(Et+1)+`:
+import{s as we,g as Oe,a as Te,b as Re,c as Dt,d as ue,e as De,f as wt,h as Nt,l as le,i as Se,w as Pe,j as Kt,k as oe,m as Me}from"../app.DRN3unl1.js";import{d as Le,g as Ne}from"./svgDrawCommon-9d162435.wUjoN1G-.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";var Yt=function(){var e=function(bt,_,x,m){for(x=x||{},m=bt.length;m--;x[bt[m]]=_);return x},t=[1,24],a=[1,25],o=[1,26],l=[1,27],i=[1,28],s=[1,63],r=[1,64],n=[1,65],h=[1,66],f=[1,67],d=[1,68],p=[1,69],E=[1,29],O=[1,30],R=[1,31],S=[1,32],L=[1,33],Y=[1,34],Q=[1,35],H=[1,36],q=[1,37],G=[1,38],K=[1,39],J=[1,40],Z=[1,41],$=[1,42],tt=[1,43],et=[1,44],it=[1,45],nt=[1,46],st=[1,47],at=[1,48],rt=[1,50],lt=[1,51],ot=[1,52],ct=[1,53],ht=[1,54],ut=[1,55],dt=[1,56],ft=[1,57],pt=[1,58],yt=[1,59],gt=[1,60],At=[14,42],Vt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Ot=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],v=[1,82],k=[1,83],A=[1,84],C=[1,85],w=[12,14,42],ne=[12,14,33,42],Pt=[12,14,33,42,76,77,79,80],mt=[12,33],zt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],Xt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:function(_,x,m,g,T,u,Tt){var y=u.length-1;switch(T){case 3:g.setDirection("TB");break;case 4:g.setDirection("BT");break;case 5:g.setDirection("RL");break;case 6:g.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:g.setC4Type(u[y-3]);break;case 19:g.setTitle(u[y].substring(6)),this.$=u[y].substring(6);break;case 20:g.setAccDescription(u[y].substring(15)),this.$=u[y].substring(15);break;case 21:this.$=u[y].trim(),g.setTitle(this.$);break;case 22:case 23:this.$=u[y].trim(),g.setAccDescription(this.$);break;case 28:case 29:u[y].splice(2,0,"ENTERPRISE"),g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 30:g.addPersonOrSystemBoundary(...u[y]),this.$=u[y];break;case 31:u[y].splice(2,0,"CONTAINER"),g.addContainerBoundary(...u[y]),this.$=u[y];break;case 32:g.addDeploymentNode("node",...u[y]),this.$=u[y];break;case 33:g.addDeploymentNode("nodeL",...u[y]),this.$=u[y];break;case 34:g.addDeploymentNode("nodeR",...u[y]),this.$=u[y];break;case 35:g.popBoundaryParseStack();break;case 39:g.addPersonOrSystem("person",...u[y]),this.$=u[y];break;case 40:g.addPersonOrSystem("external_person",...u[y]),this.$=u[y];break;case 41:g.addPersonOrSystem("system",...u[y]),this.$=u[y];break;case 42:g.addPersonOrSystem("system_db",...u[y]),this.$=u[y];break;case 43:g.addPersonOrSystem("system_queue",...u[y]),this.$=u[y];break;case 44:g.addPersonOrSystem("external_system",...u[y]),this.$=u[y];break;case 45:g.addPersonOrSystem("external_system_db",...u[y]),this.$=u[y];break;case 46:g.addPersonOrSystem("external_system_queue",...u[y]),this.$=u[y];break;case 47:g.addContainer("container",...u[y]),this.$=u[y];break;case 48:g.addContainer("container_db",...u[y]),this.$=u[y];break;case 49:g.addContainer("container_queue",...u[y]),this.$=u[y];break;case 50:g.addContainer("external_container",...u[y]),this.$=u[y];break;case 51:g.addContainer("external_container_db",...u[y]),this.$=u[y];break;case 52:g.addContainer("external_container_queue",...u[y]),this.$=u[y];break;case 53:g.addComponent("component",...u[y]),this.$=u[y];break;case 54:g.addComponent("component_db",...u[y]),this.$=u[y];break;case 55:g.addComponent("component_queue",...u[y]),this.$=u[y];break;case 56:g.addComponent("external_component",...u[y]),this.$=u[y];break;case 57:g.addComponent("external_component_db",...u[y]),this.$=u[y];break;case 58:g.addComponent("external_component_queue",...u[y]),this.$=u[y];break;case 60:g.addRel("rel",...u[y]),this.$=u[y];break;case 61:g.addRel("birel",...u[y]),this.$=u[y];break;case 62:g.addRel("rel_u",...u[y]),this.$=u[y];break;case 63:g.addRel("rel_d",...u[y]),this.$=u[y];break;case 64:g.addRel("rel_l",...u[y]),this.$=u[y];break;case 65:g.addRel("rel_r",...u[y]),this.$=u[y];break;case 66:g.addRel("rel_b",...u[y]),this.$=u[y];break;case 67:u[y].splice(0,1),g.addRel("rel",...u[y]),this.$=u[y];break;case 68:g.updateElStyle("update_el_style",...u[y]),this.$=u[y];break;case 69:g.updateRelStyle("update_rel_style",...u[y]),this.$=u[y];break;case 70:g.updateLayoutConfig("update_layout_config",...u[y]),this.$=u[y];break;case 71:this.$=[u[y]];break;case 72:u[y].unshift(u[y-1]),this.$=u[y];break;case 73:case 75:this.$=u[y].trim();break;case 74:let Et={};Et[u[y-1].trim()]=u[y].trim(),this.$=Et;break;case 76:this.$="";break}},table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:70,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:71,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:72,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{13:73,19:20,20:21,21:22,22:t,23:a,24:o,26:l,28:i,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{14:[1,74]},e(At,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(At,[2,14]),e(Vt,[2,16],{12:[1,76]}),e(At,[2,36],{12:[1,77]}),e(Ot,[2,19]),e(Ot,[2,20]),{25:[1,78]},{27:[1,79]},e(Ot,[2,23]),{35:80,75:81,76:v,77:k,79:A,80:C},{35:86,75:81,76:v,77:k,79:A,80:C},{35:87,75:81,76:v,77:k,79:A,80:C},{35:88,75:81,76:v,77:k,79:A,80:C},{35:89,75:81,76:v,77:k,79:A,80:C},{35:90,75:81,76:v,77:k,79:A,80:C},{35:91,75:81,76:v,77:k,79:A,80:C},{35:92,75:81,76:v,77:k,79:A,80:C},{35:93,75:81,76:v,77:k,79:A,80:C},{35:94,75:81,76:v,77:k,79:A,80:C},{35:95,75:81,76:v,77:k,79:A,80:C},{35:96,75:81,76:v,77:k,79:A,80:C},{35:97,75:81,76:v,77:k,79:A,80:C},{35:98,75:81,76:v,77:k,79:A,80:C},{35:99,75:81,76:v,77:k,79:A,80:C},{35:100,75:81,76:v,77:k,79:A,80:C},{35:101,75:81,76:v,77:k,79:A,80:C},{35:102,75:81,76:v,77:k,79:A,80:C},{35:103,75:81,76:v,77:k,79:A,80:C},{35:104,75:81,76:v,77:k,79:A,80:C},e(w,[2,59]),{35:105,75:81,76:v,77:k,79:A,80:C},{35:106,75:81,76:v,77:k,79:A,80:C},{35:107,75:81,76:v,77:k,79:A,80:C},{35:108,75:81,76:v,77:k,79:A,80:C},{35:109,75:81,76:v,77:k,79:A,80:C},{35:110,75:81,76:v,77:k,79:A,80:C},{35:111,75:81,76:v,77:k,79:A,80:C},{35:112,75:81,76:v,77:k,79:A,80:C},{35:113,75:81,76:v,77:k,79:A,80:C},{35:114,75:81,76:v,77:k,79:A,80:C},{35:115,75:81,76:v,77:k,79:A,80:C},{20:116,29:49,30:61,32:62,34:s,36:r,37:n,38:h,39:f,40:d,41:p,43:23,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt},{12:[1,118],33:[1,117]},{35:119,75:81,76:v,77:k,79:A,80:C},{35:120,75:81,76:v,77:k,79:A,80:C},{35:121,75:81,76:v,77:k,79:A,80:C},{35:122,75:81,76:v,77:k,79:A,80:C},{35:123,75:81,76:v,77:k,79:A,80:C},{35:124,75:81,76:v,77:k,79:A,80:C},{35:125,75:81,76:v,77:k,79:A,80:C},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(At,[2,15]),e(Vt,[2,17],{21:22,19:130,22:t,23:a,24:o,26:l,28:i}),e(At,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:a,24:o,26:l,28:i,34:s,36:r,37:n,38:h,39:f,40:d,41:p,44:E,45:O,46:R,47:S,48:L,49:Y,50:Q,51:H,52:q,53:G,54:K,55:J,56:Z,57:$,58:tt,59:et,60:it,61:nt,62:st,63:at,64:rt,65:lt,66:ot,67:ct,68:ht,69:ut,70:dt,71:ft,72:pt,73:yt,74:gt}),e(Ot,[2,21]),e(Ot,[2,22]),e(w,[2,39]),e(ne,[2,71],{75:81,35:132,76:v,77:k,79:A,80:C}),e(Pt,[2,73]),{78:[1,133]},e(Pt,[2,75]),e(Pt,[2,76]),e(w,[2,40]),e(w,[2,41]),e(w,[2,42]),e(w,[2,43]),e(w,[2,44]),e(w,[2,45]),e(w,[2,46]),e(w,[2,47]),e(w,[2,48]),e(w,[2,49]),e(w,[2,50]),e(w,[2,51]),e(w,[2,52]),e(w,[2,53]),e(w,[2,54]),e(w,[2,55]),e(w,[2,56]),e(w,[2,57]),e(w,[2,58]),e(w,[2,60]),e(w,[2,61]),e(w,[2,62]),e(w,[2,63]),e(w,[2,64]),e(w,[2,65]),e(w,[2,66]),e(w,[2,67]),e(w,[2,68]),e(w,[2,69]),e(w,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(mt,[2,28]),e(mt,[2,29]),e(mt,[2,30]),e(mt,[2,31]),e(mt,[2,32]),e(mt,[2,33]),e(mt,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(Vt,[2,18]),e(At,[2,38]),e(ne,[2,72]),e(Pt,[2,74]),e(w,[2,24]),e(w,[2,35]),e(zt,[2,25]),e(zt,[2,26],{12:[1,138]}),e(zt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:function(_,x){if(x.recoverable)this.trace(_);else{var m=new Error(_);throw m.hash=x,m}},parse:function(_){var x=this,m=[0],g=[],T=[null],u=[],Tt=this.table,y="",Et=0,se=0,ve=2,ae=1,ke=u.slice.call(arguments,1),D=Object.create(this.lexer),vt={yy:{}};for(var Qt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Qt)&&(vt.yy[Qt]=this.yy[Qt]);D.setInput(_,vt.yy),vt.yy.lexer=D,vt.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var Ht=D.yylloc;u.push(Ht);var Ae=D.options&&D.options.ranges;typeof vt.yy.parseError=="function"?this.parseError=vt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ce(){var X;return X=g.pop()||D.lex()||ae,typeof X!="number"&&(X instanceof Array&&(g=X,X=g.pop()),X=x.symbols_[X]||X),X}for(var M,kt,N,qt,Ct={},Mt,z,re,Lt;;){if(kt=m[m.length-1],this.defaultActions[kt]?N=this.defaultActions[kt]:((M===null||typeof M>"u")&&(M=Ce()),N=Tt[kt]&&Tt[kt][M]),typeof N>"u"||!N.length||!N[0]){var Gt="";Lt=[];for(Mt in Tt[kt])this.terminals_[Mt]&&Mt>ve&&Lt.push("'"+this.terminals_[Mt]+"'");D.showPosition?Gt="Parse error on line "+(Et+1)+`:
 `+D.showPosition()+`
 Expecting `+Lt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":Gt="Parse error on line "+(Et+1)+": Unexpected "+(M==ae?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(Gt,{text:D.match,token:this.terminals_[M]||M,line:D.yylineno,loc:Ht,expected:Lt})}if(N[0]instanceof Array&&N.length>1)throw new Error("Parse Error: multiple actions possible at state: "+kt+", token: "+M);switch(N[0]){case 1:m.push(M),T.push(D.yytext),u.push(D.yylloc),m.push(N[1]),M=null,se=D.yyleng,y=D.yytext,Et=D.yylineno,Ht=D.yylloc;break;case 2:if(z=this.productions_[N[1]][1],Ct.$=T[T.length-z],Ct._$={first_line:u[u.length-(z||1)].first_line,last_line:u[u.length-1].last_line,first_column:u[u.length-(z||1)].first_column,last_column:u[u.length-1].last_column},Ae&&(Ct._$.range=[u[u.length-(z||1)].range[0],u[u.length-1].range[1]]),qt=this.performAction.apply(Ct,[y,se,Et,vt.yy,N[1],T,u].concat(ke)),typeof qt<"u")return qt;z&&(m=m.slice(0,-1*z*2),T=T.slice(0,-1*z),u=u.slice(0,-1*z)),m.push(this.productions_[N[1]][0]),T.push(Ct.$),u.push(Ct._$),re=Tt[m[m.length-2]][m[m.length-1]],m.push(re);break;case 3:return!0}}return!0}},Ee=function(){var bt={EOF:1,parseError:function(x,m){if(this.yy.parser)this.yy.parser.parseError(x,m);else throw new Error(x)},setInput:function(_,x){return this.yy=x||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var x=_.match(/(?:\r\n?|\n).*/g);return x?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},unput:function(_){var x=_.length,m=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-x),this.offset-=x;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),m.length-1&&(this.yylineno-=m.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:m?(m.length===g.length?this.yylloc.first_column:0)+g[g.length-m.length].length-m[0].length:this.yylloc.first_column-x},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-x]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
 `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(_){this.unput(this.match.slice(_))},pastInput:function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _=this.pastInput(),x=new Array(_.length+1).join("-");return _+this.upcomingInput()+`
diff --git a/assets/chunks/channel.Bgp4IlJX.js b/assets/chunks/channel.Bgp4IlJX.js
new file mode 100644
index 00000000..0c831eea
--- /dev/null
+++ b/assets/chunks/channel.Bgp4IlJX.js
@@ -0,0 +1 @@
+import{al as o,am as n}from"../app.DRN3unl1.js";const l=(a,r)=>o.lang.round(n.parse(a)[r]);export{l as c};
diff --git a/assets/chunks/channel.Byw1PSvd.js b/assets/chunks/channel.Byw1PSvd.js
deleted file mode 100644
index 24b61aac..00000000
--- a/assets/chunks/channel.Byw1PSvd.js
+++ /dev/null
@@ -1 +0,0 @@
-import{am as n,an as o}from"../app.CbQoAe_D.js";const t=(a,r)=>n.lang.round(o.parse(a)[r]);export{t as c};
diff --git a/assets/chunks/classDiagram-fb54d2a0.RDXiZthm.js b/assets/chunks/classDiagram-8298e144.B6ahrBSz.js
similarity index 94%
rename from assets/chunks/classDiagram-fb54d2a0.RDXiZthm.js
rename to assets/chunks/classDiagram-8298e144.B6ahrBSz.js
index 45271579..9e22bb24 100644
--- a/assets/chunks/classDiagram-fb54d2a0.RDXiZthm.js
+++ b/assets/chunks/classDiagram-8298e144.B6ahrBSz.js
@@ -1,2 +1,2 @@
-import{p as A,d as S,s as G}from"./styles-b83b31c9.DpjWbUrA.js";import{c as v,l as y,h as B,i as W,ap as $,A as M,ar as I}from"../app.CbQoAe_D.js";import{G as O}from"./graph.CwfrPCLx.js";import{l as P}from"./layout.Ds1muZd1.js";import{l as X}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";let H=0;const Y=function(i,a,t,o,p){const g=function(e){switch(e){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(e=>!Number.isNaN(e.y));const s=a.points,c=X().x(function(e){return e.x}).y(function(e){return e.y}).curve($),n=i.append("path").attr("d",c(s)).attr("id","edge"+H).attr("class","relation");let r="";o.arrowMarkerAbsolute&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.relation.lineType==1&&n.attr("class","relation dashed-line"),t.relation.lineType==10&&n.attr("class","relation dotted-line"),t.relation.type1!=="none"&&n.attr("marker-start","url("+r+"#"+g(t.relation.type1)+"Start)"),t.relation.type2!=="none"&&n.attr("marker-end","url("+r+"#"+g(t.relation.type2)+"End)");let f,h;const x=a.points.length;let b=M.calcLabelPosition(a.points);f=b.x,h=b.y;let u,m,w,k;if(x%2!==0&&x>1){let e=M.calcCardinalityPosition(t.relation.type1!=="none",a.points,a.points[0]),d=M.calcCardinalityPosition(t.relation.type2!=="none",a.points,a.points[x-1]);y.debug("cardinality_1_point "+JSON.stringify(e)),y.debug("cardinality_2_point "+JSON.stringify(d)),u=e.x,m=e.y,w=d.x,k=d.y}if(t.title!==void 0){const e=i.append("g").attr("class","classLabel"),d=e.append("text").attr("class","label").attr("x",f).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(t.title);window.label=d;const l=d.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",l.x-o.padding/2).attr("y",l.y-o.padding/2).attr("width",l.width+o.padding).attr("height",l.height+o.padding)}y.info("Rendering relation "+JSON.stringify(t)),t.relationTitle1!==void 0&&t.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",m).attr("fill","black").attr("font-size","6").text(t.relationTitle1),t.relationTitle2!==void 0&&t.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",w).attr("y",k).attr("fill","black").attr("font-size","6").text(t.relationTitle2),H++},J=function(i,a,t,o){y.debug("Rendering class ",a,t);const p=a.id,g={id:p,label:a.id,width:0,height:0},s=i.append("g").attr("id",o.db.lookUpDomId(p)).attr("class","classGroup");let c;a.link?c=s.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",t.textHeight+t.padding).attr("x",0):c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);let n=!0;a.annotations.forEach(function(d){const l=c.append("tspan").text("«"+d+"»");n||l.attr("dy",t.textHeight),n=!1});let r=C(a);const f=c.append("tspan").text(r).attr("class","title");n||f.attr("dy",t.textHeight);const h=c.node().getBBox().height;let x,b,u;if(a.members.length>0){x=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin/2).attr("y2",t.padding+h+t.dividerMargin/2);const d=s.append("text").attr("x",t.padding).attr("y",h+t.dividerMargin+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.members.forEach(function(l){_(d,l,n,t),n=!1}),b=d.node().getBBox()}if(a.methods.length>0){u=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin+b.height).attr("y2",t.padding+h+t.dividerMargin+b.height);const d=s.append("text").attr("x",t.padding).attr("y",h+2*t.dividerMargin+b.height+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.methods.forEach(function(l){_(d,l,n,t),n=!1})}const m=s.node().getBBox();var w=" ";a.cssClasses.length>0&&(w=w+a.cssClasses.join(" "));const e=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*t.padding).attr("height",m.height+t.padding+.5*t.dividerMargin).attr("class",w).node().getBBox().width;return c.node().childNodes.forEach(function(d){d.setAttribute("x",(e-d.getBBox().width)/2)}),a.tooltip&&c.insert("title").text(a.tooltip),x&&x.attr("x2",e),u&&u.attr("x2",e),g.width=e,g.height=m.height+t.padding+.5*t.dividerMargin,g},C=function(i){let a=i.id;return i.type&&(a+="<"+I(i.type)+">"),a},Z=function(i,a,t,o){y.debug("Rendering note ",a,t);const p=a.id,g={id:p,text:a.text,width:0,height:0},s=i.append("g").attr("id",p).attr("class","classGroup");let c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);const n=JSON.parse(`"${a.text}"`).split(`
-`);n.forEach(function(x){y.debug(`Adding line: ${x}`),c.append("tspan").text(x).attr("class","title").attr("dy",t.textHeight)});const r=s.node().getBBox(),h=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",r.width+2*t.padding).attr("height",r.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin).node().getBBox().width;return c.node().childNodes.forEach(function(x){x.setAttribute("x",(h-x.getBBox().width)/2)}),g.width=h,g.height=r.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin,g},_=function(i,a,t,o){const{displayText:p,cssStyle:g}=a.getDisplayDetails(),s=i.append("tspan").attr("x",o.padding).text(p);g!==""&&s.attr("style",a.cssStyle),t||s.attr("dy",o.textHeight)},N={getClassTitleString:C,drawClass:J,drawEdge:Y,drawNote:Z};let T={};const E=20,L=function(i){const a=Object.entries(T).find(t=>t[1].label===i);if(a)return a[0]},R=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},F=function(i,a,t,o){const p=v().class;T={},y.info("Rendering diagram "+i);const g=v().securityLevel;let s;g==="sandbox"&&(s=B("#i"+a));const c=g==="sandbox"?B(s.nodes()[0].contentDocument.body):B("body"),n=c.select(`[id='${a}']`);R(n);const r=new O({multigraph:!0});r.setGraph({isMultiGraph:!0}),r.setDefaultEdgeLabel(function(){return{}});const f=o.db.getClasses(),h=Object.keys(f);for(const e of h){const d=f[e],l=N.drawClass(n,d,p,o);T[l.id]=l,r.setNode(l.id,l),y.info("Org height: "+l.height)}o.db.getRelations().forEach(function(e){y.info("tjoho"+L(e.id1)+L(e.id2)+JSON.stringify(e)),r.setEdge(L(e.id1),L(e.id2),{relation:e},e.title||"DEFAULT")}),o.db.getNotes().forEach(function(e){y.debug(`Adding note: ${JSON.stringify(e)}`);const d=N.drawNote(n,e,p,o);T[d.id]=d,r.setNode(d.id,d),e.class&&e.class in f&&r.setEdge(e.id,L(e.class),{relation:{id1:e.id,id2:e.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),P(r),r.nodes().forEach(function(e){e!==void 0&&r.node(e)!==void 0&&(y.debug("Node "+e+": "+JSON.stringify(r.node(e))),c.select("#"+(o.db.lookUpDomId(e)||e)).attr("transform","translate("+(r.node(e).x-r.node(e).width/2)+","+(r.node(e).y-r.node(e).height/2)+" )"))}),r.edges().forEach(function(e){e!==void 0&&r.edge(e)!==void 0&&(y.debug("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r.edge(e))),N.drawEdge(n,r.edge(e),r.edge(e).relation,p,o))});const u=n.node().getBBox(),m=u.width+E*2,w=u.height+E*2;W(n,w,m,p.useMaxWidth);const k=`${u.x-E} ${u.y-E} ${m} ${w}`;y.debug(`viewBox ${k}`),n.attr("viewBox",k)},U={draw:F},at={parser:A,db:S,renderer:U,styles:G,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,S.clear()}};export{at as diagram};
+import{p as A,d as S,s as G}from"./styles-e2b9d258.DqwhFH5o.js";import{c as v,l as y,h as B,i as W,ao as $,z as M,ar as I}from"../app.DRN3unl1.js";import{G as O}from"./graph.C4kgFXP1.js";import{l as P}from"./layout.C5Nv6jKv.js";import{l as X}from"./line.DpDoeUQJ.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";let H=0;const Y=function(i,a,t,o,p){const g=function(e){switch(e){case p.db.relationType.AGGREGATION:return"aggregation";case p.db.relationType.EXTENSION:return"extension";case p.db.relationType.COMPOSITION:return"composition";case p.db.relationType.DEPENDENCY:return"dependency";case p.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(e=>!Number.isNaN(e.y));const s=a.points,c=X().x(function(e){return e.x}).y(function(e){return e.y}).curve($),n=i.append("path").attr("d",c(s)).attr("id","edge"+H).attr("class","relation");let r="";o.arrowMarkerAbsolute&&(r=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,r=r.replace(/\(/g,"\\("),r=r.replace(/\)/g,"\\)")),t.relation.lineType==1&&n.attr("class","relation dashed-line"),t.relation.lineType==10&&n.attr("class","relation dotted-line"),t.relation.type1!=="none"&&n.attr("marker-start","url("+r+"#"+g(t.relation.type1)+"Start)"),t.relation.type2!=="none"&&n.attr("marker-end","url("+r+"#"+g(t.relation.type2)+"End)");let f,h;const x=a.points.length;let b=M.calcLabelPosition(a.points);f=b.x,h=b.y;let u,m,w,k;if(x%2!==0&&x>1){let e=M.calcCardinalityPosition(t.relation.type1!=="none",a.points,a.points[0]),d=M.calcCardinalityPosition(t.relation.type2!=="none",a.points,a.points[x-1]);y.debug("cardinality_1_point "+JSON.stringify(e)),y.debug("cardinality_2_point "+JSON.stringify(d)),u=e.x,m=e.y,w=d.x,k=d.y}if(t.title!==void 0){const e=i.append("g").attr("class","classLabel"),d=e.append("text").attr("class","label").attr("x",f).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(t.title);window.label=d;const l=d.node().getBBox();e.insert("rect",":first-child").attr("class","box").attr("x",l.x-o.padding/2).attr("y",l.y-o.padding/2).attr("width",l.width+o.padding).attr("height",l.height+o.padding)}y.info("Rendering relation "+JSON.stringify(t)),t.relationTitle1!==void 0&&t.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",u).attr("y",m).attr("fill","black").attr("font-size","6").text(t.relationTitle1),t.relationTitle2!==void 0&&t.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",w).attr("y",k).attr("fill","black").attr("font-size","6").text(t.relationTitle2),H++},J=function(i,a,t,o){y.debug("Rendering class ",a,t);const p=a.id,g={id:p,label:a.id,width:0,height:0},s=i.append("g").attr("id",o.db.lookUpDomId(p)).attr("class","classGroup");let c;a.link?c=s.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",t.textHeight+t.padding).attr("x",0):c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);let n=!0;a.annotations.forEach(function(d){const l=c.append("tspan").text("«"+d+"»");n||l.attr("dy",t.textHeight),n=!1});let r=C(a);const f=c.append("tspan").text(r).attr("class","title");n||f.attr("dy",t.textHeight);const h=c.node().getBBox().height;let x,b,u;if(a.members.length>0){x=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin/2).attr("y2",t.padding+h+t.dividerMargin/2);const d=s.append("text").attr("x",t.padding).attr("y",h+t.dividerMargin+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.members.forEach(function(l){_(d,l,n,t),n=!1}),b=d.node().getBBox()}if(a.methods.length>0){u=s.append("line").attr("x1",0).attr("y1",t.padding+h+t.dividerMargin+b.height).attr("y2",t.padding+h+t.dividerMargin+b.height);const d=s.append("text").attr("x",t.padding).attr("y",h+2*t.dividerMargin+b.height+t.textHeight).attr("fill","white").attr("class","classText");n=!0,a.methods.forEach(function(l){_(d,l,n,t),n=!1})}const m=s.node().getBBox();var w=" ";a.cssClasses.length>0&&(w=w+a.cssClasses.join(" "));const e=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",m.width+2*t.padding).attr("height",m.height+t.padding+.5*t.dividerMargin).attr("class",w).node().getBBox().width;return c.node().childNodes.forEach(function(d){d.setAttribute("x",(e-d.getBBox().width)/2)}),a.tooltip&&c.insert("title").text(a.tooltip),x&&x.attr("x2",e),u&&u.attr("x2",e),g.width=e,g.height=m.height+t.padding+.5*t.dividerMargin,g},C=function(i){let a=i.id;return i.type&&(a+="<"+I(i.type)+">"),a},Z=function(i,a,t,o){y.debug("Rendering note ",a,t);const p=a.id,g={id:p,text:a.text,width:0,height:0},s=i.append("g").attr("id",p).attr("class","classGroup");let c=s.append("text").attr("y",t.textHeight+t.padding).attr("x",0);const n=JSON.parse(`"${a.text}"`).split(`
+`);n.forEach(function(x){y.debug(`Adding line: ${x}`),c.append("tspan").text(x).attr("class","title").attr("dy",t.textHeight)});const r=s.node().getBBox(),h=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",r.width+2*t.padding).attr("height",r.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin).node().getBBox().width;return c.node().childNodes.forEach(function(x){x.setAttribute("x",(h-x.getBBox().width)/2)}),g.width=h,g.height=r.height+n.length*t.textHeight+t.padding+.5*t.dividerMargin,g},_=function(i,a,t,o){const{displayText:p,cssStyle:g}=a.getDisplayDetails(),s=i.append("tspan").attr("x",o.padding).text(p);g!==""&&s.attr("style",a.cssStyle),t||s.attr("dy",o.textHeight)},N={getClassTitleString:C,drawClass:J,drawEdge:Y,drawNote:Z};let T={};const E=20,L=function(i){const a=Object.entries(T).find(t=>t[1].label===i);if(a)return a[0]},R=function(i){i.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),i.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),i.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),i.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},z=function(i,a,t,o){const p=v().class;T={},y.info("Rendering diagram "+i);const g=v().securityLevel;let s;g==="sandbox"&&(s=B("#i"+a));const c=g==="sandbox"?B(s.nodes()[0].contentDocument.body):B("body"),n=c.select(`[id='${a}']`);R(n);const r=new O({multigraph:!0});r.setGraph({isMultiGraph:!0}),r.setDefaultEdgeLabel(function(){return{}});const f=o.db.getClasses(),h=Object.keys(f);for(const e of h){const d=f[e],l=N.drawClass(n,d,p,o);T[l.id]=l,r.setNode(l.id,l),y.info("Org height: "+l.height)}o.db.getRelations().forEach(function(e){y.info("tjoho"+L(e.id1)+L(e.id2)+JSON.stringify(e)),r.setEdge(L(e.id1),L(e.id2),{relation:e},e.title||"DEFAULT")}),o.db.getNotes().forEach(function(e){y.debug(`Adding note: ${JSON.stringify(e)}`);const d=N.drawNote(n,e,p,o);T[d.id]=d,r.setNode(d.id,d),e.class&&e.class in f&&r.setEdge(e.id,L(e.class),{relation:{id1:e.id,id2:e.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),P(r),r.nodes().forEach(function(e){e!==void 0&&r.node(e)!==void 0&&(y.debug("Node "+e+": "+JSON.stringify(r.node(e))),c.select("#"+(o.db.lookUpDomId(e)||e)).attr("transform","translate("+(r.node(e).x-r.node(e).width/2)+","+(r.node(e).y-r.node(e).height/2)+" )"))}),r.edges().forEach(function(e){e!==void 0&&r.edge(e)!==void 0&&(y.debug("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(r.edge(e))),N.drawEdge(n,r.edge(e),r.edge(e).relation,p,o))});const u=n.node().getBBox(),m=u.width+E*2,w=u.height+E*2;W(n,w,m,p.useMaxWidth);const k=`${u.x-E} ${u.y-E} ${m} ${w}`;y.debug(`viewBox ${k}`),n.attr("viewBox",k)},F={draw:z},at={parser:A,db:S,renderer:F,styles:G,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,S.clear()}};export{at as diagram};
diff --git a/assets/chunks/classDiagram-v2-a2b738ad.DbdhFrZX.js b/assets/chunks/classDiagram-v2-296fb1cd.BlvxQji3.js
similarity index 82%
rename from assets/chunks/classDiagram-v2-a2b738ad.DbdhFrZX.js
rename to assets/chunks/classDiagram-v2-296fb1cd.BlvxQji3.js
index c028e18f..88d5843a 100644
--- a/assets/chunks/classDiagram-v2-a2b738ad.DbdhFrZX.js
+++ b/assets/chunks/classDiagram-v2-296fb1cd.BlvxQji3.js
@@ -1,2 +1,2 @@
-import{p as M,d as _,s as R}from"./styles-b83b31c9.DpjWbUrA.js";import{l as d,c,h as w,A as B,t as G,o as D,q as E,n as A,j as C}from"../app.CbQoAe_D.js";import{G as q}from"./graph.CwfrPCLx.js";import{r as z}from"./index-01f381cb.Dh9et-Tw.js";import"./layout.Ds1muZd1.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./clone.BumBiDEu.js";import"./edges-066a5561.CpbBxaaE.js";import"./createText-ca0c5216.5u9lbHcb.js";import"./line.Rvm4JnwS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const S=s=>C.sanitizeText(s,c());let k={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const P=function(s,e,y,a){const t=Object.keys(s);d.info("keys:",t),d.info(s),t.forEach(function(i){var o,r;const l=s[i],p={shape:"rect",id:l.id,domId:l.domId,labelText:S(l.id),labelStyle:"",style:"fill: none; stroke: black",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};e.setNode(l.id,p),$(l.classes,e,y,a,l.id),d.info("setNode",p)})},$=function(s,e,y,a,t){const i=Object.keys(s);d.info("keys:",i),d.info(s),i.filter(o=>s[o].parent==t).forEach(function(o){var r,l;const n=s[o],p=n.cssClasses.join(" "),f=D(n.styles),m=n.label??n.id,u=0,b={labelStyle:f.labelStyle,shape:"class_box",labelText:S(m),classData:n,rx:u,ry:u,class:p,style:f.style,id:n.id,domId:n.domId,tooltip:a.db.getTooltip(n.id,t)||"",haveCallback:n.haveCallback,link:n.link,width:n.type==="group"?500:void 0,type:n.type,padding:((r=c().flowchart)==null?void 0:r.padding)??((l=c().class)==null?void 0:l.padding)};e.setNode(n.id,b),t&&e.setParent(n.id,t),d.info("setNode",b)})},F=function(s,e,y,a){d.info(s),s.forEach(function(t,i){var o,r;const l=t,n="",p={labelStyle:"",style:""},f=l.text,m=0,h={labelStyle:p.labelStyle,shape:"note",labelText:S(f),noteData:l,rx:m,ry:m,class:n,style:p.style,id:l.id,domId:l.id,tooltip:"",type:"note",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};if(e.setNode(l.id,h),d.info("setNode",h),!l.class||!(l.class in a))return;const b=y+i,x={id:`edgeNote${b}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:E(k.curve,A)};e.setEdge(l.id,l.class,x,b)})},H=function(s,e){const y=c().flowchart;let a=0;s.forEach(function(t){var i;a++;const o={classes:"relation",pattern:t.relation.lineType==1?"dashed":"solid",id:`id_${t.id1}_${t.id2}_${a}`,arrowhead:t.type==="arrow_open"?"none":"normal",startLabelRight:t.relationTitle1==="none"?"":t.relationTitle1,endLabelLeft:t.relationTitle2==="none"?"":t.relationTitle2,arrowTypeStart:N(t.relation.type1),arrowTypeEnd:N(t.relation.type2),style:"fill:none",labelStyle:"",curve:E(y==null?void 0:y.curve,A)};if(d.info(o,t),t.style!==void 0){const r=D(t.style);o.style=r.style,o.labelStyle=r.labelStyle}t.text=t.title,t.text===void 0?t.style!==void 0&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",o.labelpos="c",((i=c().flowchart)==null?void 0:i.htmlLabels)??c().htmlLabels?(o.labelType="html",o.label=''+t.text+""):(o.labelType="text",o.label=t.text.replace(C.lineBreakRegex,`
-`),t.style===void 0&&(o.style=o.style||"stroke: #333; stroke-width: 1.5px;fill:none"),o.labelStyle=o.labelStyle.replace("color:","fill:"))),e.setEdge(t.id1,t.id2,o,a)})},V=function(s){k={...k,...s}},W=async function(s,e,y,a){d.info("Drawing class - ",e);const t=c().flowchart??c().class,i=c().securityLevel;d.info("config:",t);const o=(t==null?void 0:t.nodeSpacing)??50,r=(t==null?void 0:t.rankSpacing)??50,l=new q({multigraph:!0,compound:!0}).setGraph({rankdir:a.db.getDirection(),nodesep:o,ranksep:r,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=a.db.getNamespaces(),p=a.db.getClasses(),f=a.db.getRelations(),m=a.db.getNotes();d.info(f),P(n,l,e,a),$(p,l,e,a),H(f,l),F(m,l,f.length+1,p);let u;i==="sandbox"&&(u=w("#i"+e));const h=i==="sandbox"?w(u.nodes()[0].contentDocument.body):w("body"),b=h.select(`[id="${e}"]`),x=h.select("#"+e+" g");if(await z(x,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),B.insertTitle(b,"classTitleText",(t==null?void 0:t.titleTopMargin)??5,a.db.getDiagramTitle()),G(l,b,t==null?void 0:t.diagramPadding,t==null?void 0:t.useMaxWidth),!(t!=null&&t.htmlLabels)){const T=i==="sandbox"?u.nodes()[0].contentDocument:document,I=T.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const g of I){const L=g.getBBox(),v=T.createElementNS("http://www.w3.org/2000/svg","rect");v.setAttribute("rx",0),v.setAttribute("ry",0),v.setAttribute("width",L.width),v.setAttribute("height",L.height),g.insertBefore(v,g.firstChild)}}};function N(s){let e;switch(s){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const J={setConf:V,draw:W},nt={parser:M,db:_,renderer:J,styles:R,init:s=>{s.class||(s.class={}),s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,_.clear()}};export{nt as diagram};
+import{p as M,d as _,s as R}from"./styles-e2b9d258.DqwhFH5o.js";import{l as d,c,h as w,z as B,t as G,o as D,q as E,n as C,j as A}from"../app.DRN3unl1.js";import{G as z}from"./graph.C4kgFXP1.js";import{r as q}from"./index-9620d214.nAHig6oE.js";import"./layout.C5Nv6jKv.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./clone.Bnzwv1hF.js";import"./edges-5962ec63.BFgoqf-O.js";import"./createText-4a4f35c9.Cu3K6_Cl.js";import"./line.DpDoeUQJ.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const S=s=>A.sanitizeText(s,c());let k={dividerMargin:10,padding:5,textHeight:10,curve:void 0};const P=function(s,e,y,a){const t=Object.keys(s);d.info("keys:",t),d.info(s),t.forEach(function(i){var o,r;const l=s[i],p={shape:"rect",id:l.id,domId:l.domId,labelText:S(l.id),labelStyle:"",style:"fill: none; stroke: black",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};e.setNode(l.id,p),$(l.classes,e,y,a,l.id),d.info("setNode",p)})},$=function(s,e,y,a,t){const i=Object.keys(s);d.info("keys:",i),d.info(s),i.filter(o=>s[o].parent==t).forEach(function(o){var r,l;const n=s[o],p=n.cssClasses.join(" "),f=D(n.styles),m=n.label??n.id,u=0,b={labelStyle:f.labelStyle,shape:"class_box",labelText:S(m),classData:n,rx:u,ry:u,class:p,style:f.style,id:n.id,domId:n.domId,tooltip:a.db.getTooltip(n.id,t)||"",haveCallback:n.haveCallback,link:n.link,width:n.type==="group"?500:void 0,type:n.type,padding:((r=c().flowchart)==null?void 0:r.padding)??((l=c().class)==null?void 0:l.padding)};e.setNode(n.id,b),t&&e.setParent(n.id,t),d.info("setNode",b)})},F=function(s,e,y,a){d.info(s),s.forEach(function(t,i){var o,r;const l=t,n="",p={labelStyle:"",style:""},f=l.text,m=0,h={labelStyle:p.labelStyle,shape:"note",labelText:S(f),noteData:l,rx:m,ry:m,class:n,style:p.style,id:l.id,domId:l.id,tooltip:"",type:"note",padding:((o=c().flowchart)==null?void 0:o.padding)??((r=c().class)==null?void 0:r.padding)};if(e.setNode(l.id,h),d.info("setNode",h),!l.class||!(l.class in a))return;const b=y+i,x={id:`edgeNote${b}`,classes:"relation",pattern:"dotted",arrowhead:"none",startLabelRight:"",endLabelLeft:"",arrowTypeStart:"none",arrowTypeEnd:"none",style:"fill:none",labelStyle:"",curve:E(k.curve,C)};e.setEdge(l.id,l.class,x,b)})},H=function(s,e){const y=c().flowchart;let a=0;s.forEach(function(t){var i;a++;const o={classes:"relation",pattern:t.relation.lineType==1?"dashed":"solid",id:`id_${t.id1}_${t.id2}_${a}`,arrowhead:t.type==="arrow_open"?"none":"normal",startLabelRight:t.relationTitle1==="none"?"":t.relationTitle1,endLabelLeft:t.relationTitle2==="none"?"":t.relationTitle2,arrowTypeStart:N(t.relation.type1),arrowTypeEnd:N(t.relation.type2),style:"fill:none",labelStyle:"",curve:E(y==null?void 0:y.curve,C)};if(d.info(o,t),t.style!==void 0){const r=D(t.style);o.style=r.style,o.labelStyle=r.labelStyle}t.text=t.title,t.text===void 0?t.style!==void 0&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",o.labelpos="c",((i=c().flowchart)==null?void 0:i.htmlLabels)??c().htmlLabels?(o.labelType="html",o.label=''+t.text+""):(o.labelType="text",o.label=t.text.replace(A.lineBreakRegex,`
+`),t.style===void 0&&(o.style=o.style||"stroke: #333; stroke-width: 1.5px;fill:none"),o.labelStyle=o.labelStyle.replace("color:","fill:"))),e.setEdge(t.id1,t.id2,o,a)})},V=function(s){k={...k,...s}},W=async function(s,e,y,a){d.info("Drawing class - ",e);const t=c().flowchart??c().class,i=c().securityLevel;d.info("config:",t);const o=(t==null?void 0:t.nodeSpacing)??50,r=(t==null?void 0:t.rankSpacing)??50,l=new z({multigraph:!0,compound:!0}).setGraph({rankdir:a.db.getDirection(),nodesep:o,ranksep:r,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),n=a.db.getNamespaces(),p=a.db.getClasses(),f=a.db.getRelations(),m=a.db.getNotes();d.info(f),P(n,l,e,a),$(p,l,e,a),H(f,l),F(m,l,f.length+1,p);let u;i==="sandbox"&&(u=w("#i"+e));const h=i==="sandbox"?w(u.nodes()[0].contentDocument.body):w("body"),b=h.select(`[id="${e}"]`),x=h.select("#"+e+" g");if(await q(x,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),B.insertTitle(b,"classTitleText",(t==null?void 0:t.titleTopMargin)??5,a.db.getDiagramTitle()),G(l,b,t==null?void 0:t.diagramPadding,t==null?void 0:t.useMaxWidth),!(t!=null&&t.htmlLabels)){const T=i==="sandbox"?u.nodes()[0].contentDocument:document,I=T.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(const g of I){const L=g.getBBox(),v=T.createElementNS("http://www.w3.org/2000/svg","rect");v.setAttribute("rx",0),v.setAttribute("ry",0),v.setAttribute("width",L.width),v.setAttribute("height",L.height),g.insertBefore(v,g.firstChild)}}};function N(s){let e;switch(s){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const J={setConf:V,draw:W},nt={parser:M,db:_,renderer:J,styles:R,init:s=>{s.class||(s.class={}),s.class.arrowMarkerAbsolute=s.arrowMarkerAbsolute,_.clear()}};export{nt as diagram};
diff --git a/assets/chunks/clone.Bnzwv1hF.js b/assets/chunks/clone.Bnzwv1hF.js
new file mode 100644
index 00000000..0e426024
--- /dev/null
+++ b/assets/chunks/clone.Bnzwv1hF.js
@@ -0,0 +1 @@
+import{a as r}from"./graph.C4kgFXP1.js";var a=4;function n(o){return r(o,a)}export{n as c};
diff --git a/assets/chunks/clone.BumBiDEu.js b/assets/chunks/clone.BumBiDEu.js
deleted file mode 100644
index 57a46d16..00000000
--- a/assets/chunks/clone.BumBiDEu.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as r}from"./graph.CwfrPCLx.js";var a=4;function n(o){return r(o,a)}export{n as c};
diff --git a/assets/chunks/createText-ca0c5216.5u9lbHcb.js b/assets/chunks/createText-4a4f35c9.Cu3K6_Cl.js
similarity index 99%
rename from assets/chunks/createText-ca0c5216.5u9lbHcb.js
rename to assets/chunks/createText-4a4f35c9.Cu3K6_Cl.js
index 2038556a..1489d06e 100644
--- a/assets/chunks/createText-ca0c5216.5u9lbHcb.js
+++ b/assets/chunks/createText-4a4f35c9.Cu3K6_Cl.js
@@ -1,4 +1,4 @@
-import{l as At,ao as zt,aq as It}from"../app.CbQoAe_D.js";const Tt={};function Bt(n,r){const t=Tt,e=typeof t.includeImageAlt=="boolean"?t.includeImageAlt:!0,u=typeof t.includeHtml=="boolean"?t.includeHtml:!0;return et(n,e,u)}function et(n,r,t){if(Lt(n)){if("value"in n)return n.type==="html"&&!t?"":n.value;if(r&&"alt"in n&&n.alt)return n.alt;if("children"in n)return Vn(n.children,r,t)}return Array.isArray(n)?Vn(n,r,t):""}function Vn(n,r,t){const e=[];let u=-1;for(;++uu?0:u+r:r=r>u?u:r,t=t>0?t:0,e.length<1e4)l=Array.from(e),l.unshift(r,t),n.splice(...l);else for(t&&n.splice(r,t);i0?(tn(n,n.length,0,r),n):r}const Wn={}.hasOwnProperty;function Ot(n){const r={};let t=-1;for(;++tl))return;const T=r.events.length;let H=T,N,V;for(;H--;)if(r.events[H][0]==="exit"&&r.events[H][1].type==="chunkFlow"){if(N){V=r.events[H][1].end;break}N=!0}for(b(e),k=T;kF;){const _=t[D];r.containerState=_[1],_[0].exit.call(r,n)}t.length=F}function j(){u.write([null]),i=void 0,u=void 0,r.containerState._closeFlow=void 0}}function Ut(n,r,t){return O(n,n.attempt(this.parser.constructs.document,r,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Un(n){if(n===null||Z(n)||Ht(n))return 1;if(qt(n))return 2}function Ln(n,r,t){const e=[];let u=-1;for(;++u1&&n[t][1].end.offset-n[t][1].start.offset>1?2:1;const f=Object.assign({},n[e][1].end),x=Object.assign({},n[t][1].start);$n(f,-m),$n(x,m),l={type:m>1?"strongSequence":"emphasisSequence",start:f,end:Object.assign({},n[e][1].end)},a={type:m>1?"strongSequence":"emphasisSequence",start:Object.assign({},n[t][1].start),end:x},i={type:m>1?"strongText":"emphasisText",start:Object.assign({},n[e][1].end),end:Object.assign({},n[t][1].start)},u={type:m>1?"strong":"emphasis",start:Object.assign({},l.start),end:Object.assign({},a.end)},n[e][1].end=Object.assign({},l.start),n[t][1].start=Object.assign({},a.end),c=[],n[e][1].end.offset-n[e][1].start.offset&&(c=Y(c,[["enter",n[e][1],r],["exit",n[e][1],r]])),c=Y(c,[["enter",u,r],["enter",l,r],["exit",l,r],["enter",i,r]]),c=Y(c,Ln(r.parser.constructs.insideSpan.null,n.slice(e+1,t),r)),c=Y(c,[["exit",i,r],["enter",a,r],["exit",a,r],["exit",u,r]]),n[t][1].end.offset-n[t][1].start.offset?(p=2,c=Y(c,[["enter",n[t][1],r],["exit",n[t][1],r]])):p=0,tn(n,e-1,t-e+3,c),t=e+c.length-p-2;break}}for(t=-1;++t0&&z(k)?O(n,j,"linePrefix",i+1)(k):j(k)}function j(k){return k===null||C(k)?n.check(Yn,I,D)(k):(n.enter("codeFlowValue"),F(k))}function F(k){return k===null||C(k)?(n.exit("codeFlowValue"),j(k)):(n.consume(k),F)}function D(k){return n.exit("codeFenced"),r(k)}function _(k,T,H){let N=0;return V;function V(w){return k.enter("lineEnding"),k.consume(w),k.exit("lineEnding"),y}function y(w){return k.enter("codeFencedFence"),z(w)?O(k,S,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):S(w)}function S(w){return w===a?(k.enter("codeFencedFenceSequence"),P(w)):H(w)}function P(w){return w===a?(N++,k.consume(w),P):N>=l?(k.exit("codeFencedFenceSequence"),z(w)?O(k,R,"whitespace")(w):R(w)):H(w)}function R(w){return w===null||C(w)?(k.exit("codeFencedFence"),T(w)):H(w)}}}function re(n,r,t){const e=this;return u;function u(l){return l===null?t(l):(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}const Cn={name:"codeIndented",tokenize:ue},ie={tokenize:le,partial:!0};function ue(n,r,t){const e=this;return u;function u(c){return n.enter("codeIndented"),O(n,i,"linePrefix",5)(c)}function i(c){const p=e.events[e.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?l(c):t(c)}function l(c){return c===null?m(c):C(c)?n.attempt(ie,l,m)(c):(n.enter("codeFlowValue"),a(c))}function a(c){return c===null||C(c)?(n.exit("codeFlowValue"),l(c)):(n.consume(c),a)}function m(c){return n.exit("codeIndented"),r(c)}}function le(n,r,t){const e=this;return u;function u(l){return e.parser.lazy[e.now().line]?t(l):C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),u):O(n,i,"linePrefix",5)(l)}function i(l){const a=e.events[e.events.length-1];return a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?r(l):C(l)?u(l):t(l)}}const ae={name:"codeText",tokenize:ce,resolve:oe,previous:se};function oe(n){let r=n.length-4,t=3,e,u;if((n[t][1].type==="lineEnding"||n[t][1].type==="space")&&(n[r][1].type==="lineEnding"||n[r][1].type==="space")){for(e=t;++e=4?r(l):n.interrupt(e.parser.constructs.flow,t,r)(l)}}function at(n,r,t,e,u,i,l,a,m){const c=m||Number.POSITIVE_INFINITY;let p=0;return f;function f(b){return b===60?(n.enter(e),n.enter(u),n.enter(i),n.consume(b),n.exit(i),x):b===null||b===32||b===41||An(b)?t(b):(n.enter(e),n.enter(l),n.enter(a),n.enter("chunkString",{contentType:"string"}),I(b))}function x(b){return b===62?(n.enter(i),n.consume(b),n.exit(i),n.exit(u),n.exit(e),r):(n.enter(a),n.enter("chunkString",{contentType:"string"}),h(b))}function h(b){return b===62?(n.exit("chunkString"),n.exit(a),x(b)):b===null||b===60||C(b)?t(b):(n.consume(b),b===92?A:h)}function A(b){return b===60||b===62||b===92?(n.consume(b),h):h(b)}function I(b){return!p&&(b===null||b===41||Z(b))?(n.exit("chunkString"),n.exit(a),n.exit(l),n.exit(e),r(b)):p999||h===null||h===91||h===93&&!m||h===94&&!a&&"_hiddenFootnoteSupport"in l.parser.constructs?t(h):h===93?(n.exit(i),n.enter(u),n.consume(h),n.exit(u),n.exit(e),r):C(h)?(n.enter("lineEnding"),n.consume(h),n.exit("lineEnding"),p):(n.enter("chunkString",{contentType:"string"}),f(h))}function f(h){return h===null||h===91||h===93||C(h)||a++>999?(n.exit("chunkString"),p(h)):(n.consume(h),m||(m=!z(h)),h===92?x:f)}function x(h){return h===91||h===92||h===93?(n.consume(h),a++,f):f(h)}}function st(n,r,t,e,u,i){let l;return a;function a(x){return x===34||x===39||x===40?(n.enter(e),n.enter(u),n.consume(x),n.exit(u),l=x===40?41:x,m):t(x)}function m(x){return x===l?(n.enter(u),n.consume(x),n.exit(u),n.exit(e),r):(n.enter(i),c(x))}function c(x){return x===l?(n.exit(i),m(l)):x===null?t(x):C(x)?(n.enter("lineEnding"),n.consume(x),n.exit("lineEnding"),O(n,c,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===l||x===null||C(x)?(n.exit("chunkString"),c(x)):(n.consume(x),x===92?f:p)}function f(x){return x===l||x===92?(n.consume(x),p):p(x)}}function dn(n,r){let t;return e;function e(u){return C(u)?(n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),t=!0,e):z(u)?O(n,e,t?"linePrefix":"lineSuffix")(u):r(u)}}function xn(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ke={name:"definition",tokenize:be},de={tokenize:ye,partial:!0};function be(n,r,t){const e=this;let u;return i;function i(h){return n.enter("definition"),l(h)}function l(h){return ot.call(e,n,a,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(h)}function a(h){return u=xn(e.sliceSerialize(e.events[e.events.length-1][1]).slice(1,-1)),h===58?(n.enter("definitionMarker"),n.consume(h),n.exit("definitionMarker"),m):t(h)}function m(h){return Z(h)?dn(n,c)(h):c(h)}function c(h){return at(n,p,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(h)}function p(h){return n.attempt(de,f,f)(h)}function f(h){return z(h)?O(n,x,"whitespace")(h):x(h)}function x(h){return h===null||C(h)?(n.exit("definition"),e.parser.defined.push(u),r(h)):t(h)}}function ye(n,r,t){return e;function e(a){return Z(a)?dn(n,u)(a):t(a)}function u(a){return st(n,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(a)}function i(a){return z(a)?O(n,l,"whitespace")(a):l(a)}function l(a){return a===null||C(a)?r(a):t(a)}}const Se={name:"hardBreakEscape",tokenize:Fe};function Fe(n,r,t){return e;function e(i){return n.enter("hardBreakEscape"),n.consume(i),u}function u(i){return C(i)?(n.exit("hardBreakEscape"),r(i)):t(i)}}const Ee={name:"headingAtx",tokenize:we,resolve:Ce};function Ce(n,r){let t=n.length-2,e=3,u,i;return n[e][1].type==="whitespace"&&(e+=2),t-2>e&&n[t][1].type==="whitespace"&&(t-=2),n[t][1].type==="atxHeadingSequence"&&(e===t-1||t-4>e&&n[t-2][1].type==="whitespace")&&(t-=e+1===t?2:4),t>e&&(u={type:"atxHeadingText",start:n[e][1].start,end:n[t][1].end},i={type:"chunkText",start:n[e][1].start,end:n[t][1].end,contentType:"text"},tn(n,e,t-e+1,[["enter",u,r],["enter",i,r],["exit",i,r],["exit",u,r]])),n}function we(n,r,t){let e=0;return u;function u(p){return n.enter("atxHeading"),i(p)}function i(p){return n.enter("atxHeadingSequence"),l(p)}function l(p){return p===35&&e++<6?(n.consume(p),l):p===null||Z(p)?(n.exit("atxHeadingSequence"),a(p)):t(p)}function a(p){return p===35?(n.enter("atxHeadingSequence"),m(p)):p===null||C(p)?(n.exit("atxHeading"),r(p)):z(p)?O(n,a,"whitespace")(p):(n.enter("atxHeadingText"),c(p))}function m(p){return p===35?(n.consume(p),m):(n.exit("atxHeadingSequence"),a(p))}function c(p){return p===null||p===35||Z(p)?(n.exit("atxHeadingText"),a(p)):(n.consume(p),c)}}const Ae=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Jn=["pre","script","style","textarea"],ze={name:"htmlFlow",tokenize:Le,resolveTo:Be,concrete:!0},Ie={tokenize:De,partial:!0},Te={tokenize:Oe,partial:!0};function Be(n){let r=n.length;for(;r--&&!(n[r][0]==="enter"&&n[r][1].type==="htmlFlow"););return r>1&&n[r-2][1].type==="linePrefix"&&(n[r][1].start=n[r-2][1].start,n[r+1][1].start=n[r-2][1].start,n.splice(r-2,2)),n}function Le(n,r,t){const e=this;let u,i,l,a,m;return c;function c(s){return p(s)}function p(s){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(s),f}function f(s){return s===33?(n.consume(s),x):s===47?(n.consume(s),i=!0,I):s===63?(n.consume(s),u=3,e.interrupt?r:o):nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function x(s){return s===45?(n.consume(s),u=2,h):s===91?(n.consume(s),u=5,a=0,A):nn(s)?(n.consume(s),u=4,e.interrupt?r:o):t(s)}function h(s){return s===45?(n.consume(s),e.interrupt?r:o):t(s)}function A(s){const K="CDATA[";return s===K.charCodeAt(a++)?(n.consume(s),a===K.length?e.interrupt?r:S:A):t(s)}function I(s){return nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function M(s){if(s===null||s===47||s===62||Z(s)){const K=s===47,hn=l.toLowerCase();return!K&&!i&&Jn.includes(hn)?(u=1,e.interrupt?r(s):S(s)):Ae.includes(l.toLowerCase())?(u=6,K?(n.consume(s),b):e.interrupt?r(s):S(s)):(u=7,e.interrupt&&!e.parser.lazy[e.now().line]?t(s):i?j(s):F(s))}return s===45||v(s)?(n.consume(s),l+=String.fromCharCode(s),M):t(s)}function b(s){return s===62?(n.consume(s),e.interrupt?r:S):t(s)}function j(s){return z(s)?(n.consume(s),j):V(s)}function F(s){return s===47?(n.consume(s),V):s===58||s===95||nn(s)?(n.consume(s),D):z(s)?(n.consume(s),F):V(s)}function D(s){return s===45||s===46||s===58||s===95||v(s)?(n.consume(s),D):_(s)}function _(s){return s===61?(n.consume(s),k):z(s)?(n.consume(s),_):F(s)}function k(s){return s===null||s===60||s===61||s===62||s===96?t(s):s===34||s===39?(n.consume(s),m=s,T):z(s)?(n.consume(s),k):H(s)}function T(s){return s===m?(n.consume(s),m=null,N):s===null||C(s)?t(s):(n.consume(s),T)}function H(s){return s===null||s===34||s===39||s===47||s===60||s===61||s===62||s===96||Z(s)?_(s):(n.consume(s),H)}function N(s){return s===47||s===62||z(s)?F(s):t(s)}function V(s){return s===62?(n.consume(s),y):t(s)}function y(s){return s===null||C(s)?S(s):z(s)?(n.consume(s),y):t(s)}function S(s){return s===45&&u===2?(n.consume(s),U):s===60&&u===1?(n.consume(s),W):s===62&&u===4?(n.consume(s),J):s===63&&u===3?(n.consume(s),o):s===93&&u===5?(n.consume(s),en):C(s)&&(u===6||u===7)?(n.exit("htmlFlowData"),n.check(Ie,rn,P)(s)):s===null||C(s)?(n.exit("htmlFlowData"),P(s)):(n.consume(s),S)}function P(s){return n.check(Te,R,rn)(s)}function R(s){return n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),w}function w(s){return s===null||C(s)?P(s):(n.enter("htmlFlowData"),S(s))}function U(s){return s===45?(n.consume(s),o):S(s)}function W(s){return s===47?(n.consume(s),l="",G):S(s)}function G(s){if(s===62){const K=l.toLowerCase();return Jn.includes(K)?(n.consume(s),J):S(s)}return nn(s)&&l.length<8?(n.consume(s),l+=String.fromCharCode(s),G):S(s)}function en(s){return s===93?(n.consume(s),o):S(s)}function o(s){return s===62?(n.consume(s),J):s===45&&u===2?(n.consume(s),o):S(s)}function J(s){return s===null||C(s)?(n.exit("htmlFlowData"),rn(s)):(n.consume(s),J)}function rn(s){return n.exit("htmlFlow"),r(s)}}function Oe(n,r,t){const e=this;return u;function u(l){return C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i):t(l)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}function De(n,r,t){return e;function e(u){return n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),n.attempt(Sn,r,t)}}const Pe={name:"htmlText",tokenize:_e};function _e(n,r,t){const e=this;let u,i,l;return a;function a(o){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume(o),m}function m(o){return o===33?(n.consume(o),c):o===47?(n.consume(o),_):o===63?(n.consume(o),F):nn(o)?(n.consume(o),H):t(o)}function c(o){return o===45?(n.consume(o),p):o===91?(n.consume(o),i=0,A):nn(o)?(n.consume(o),j):t(o)}function p(o){return o===45?(n.consume(o),h):t(o)}function f(o){return o===null?t(o):o===45?(n.consume(o),x):C(o)?(l=f,W(o)):(n.consume(o),f)}function x(o){return o===45?(n.consume(o),h):f(o)}function h(o){return o===62?U(o):o===45?x(o):f(o)}function A(o){const J="CDATA[";return o===J.charCodeAt(i++)?(n.consume(o),i===J.length?I:A):t(o)}function I(o){return o===null?t(o):o===93?(n.consume(o),M):C(o)?(l=I,W(o)):(n.consume(o),I)}function M(o){return o===93?(n.consume(o),b):I(o)}function b(o){return o===62?U(o):o===93?(n.consume(o),b):I(o)}function j(o){return o===null||o===62?U(o):C(o)?(l=j,W(o)):(n.consume(o),j)}function F(o){return o===null?t(o):o===63?(n.consume(o),D):C(o)?(l=F,W(o)):(n.consume(o),F)}function D(o){return o===62?U(o):F(o)}function _(o){return nn(o)?(n.consume(o),k):t(o)}function k(o){return o===45||v(o)?(n.consume(o),k):T(o)}function T(o){return C(o)?(l=T,W(o)):z(o)?(n.consume(o),T):U(o)}function H(o){return o===45||v(o)?(n.consume(o),H):o===47||o===62||Z(o)?N(o):t(o)}function N(o){return o===47?(n.consume(o),U):o===58||o===95||nn(o)?(n.consume(o),V):C(o)?(l=N,W(o)):z(o)?(n.consume(o),N):U(o)}function V(o){return o===45||o===46||o===58||o===95||v(o)?(n.consume(o),V):y(o)}function y(o){return o===61?(n.consume(o),S):C(o)?(l=y,W(o)):z(o)?(n.consume(o),y):N(o)}function S(o){return o===null||o===60||o===61||o===62||o===96?t(o):o===34||o===39?(n.consume(o),u=o,P):C(o)?(l=S,W(o)):z(o)?(n.consume(o),S):(n.consume(o),R)}function P(o){return o===u?(n.consume(o),u=void 0,w):o===null?t(o):C(o)?(l=P,W(o)):(n.consume(o),P)}function R(o){return o===null||o===34||o===39||o===60||o===61||o===96?t(o):o===47||o===62||Z(o)?N(o):(n.consume(o),R)}function w(o){return o===47||o===62||Z(o)?N(o):t(o)}function U(o){return o===62?(n.consume(o),n.exit("htmlTextData"),n.exit("htmlText"),r):t(o)}function W(o){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),G}function G(o){return z(o)?O(n,en,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):en(o)}function en(o){return n.enter("htmlTextData"),l(o)}}const Dn={name:"labelEnd",tokenize:Ne,resolveTo:He,resolveAll:qe},Me={tokenize:Ve},je={tokenize:We},Re={tokenize:Qe};function qe(n){let r=-1;for(;++r=3&&(c===null||C(c))?(n.exit("thematicBreak"),r(c)):t(c)}function m(c){return c===u?(n.consume(c),e++,m):(n.exit("thematicBreakSequence"),z(c)?O(n,a,"whitespace")(c):a(c))}}const $={name:"list",tokenize:ve,continuation:{tokenize:nr},exit:er},Ke={tokenize:rr,partial:!0},Xe={tokenize:tr,partial:!0};function ve(n,r,t){const e=this,u=e.events[e.events.length-1];let i=u&&u[1].type==="linePrefix"?u[2].sliceSerialize(u[1],!0).length:0,l=0;return a;function a(h){const A=e.containerState.type||(h===42||h===43||h===45?"listUnordered":"listOrdered");if(A==="listUnordered"?!e.containerState.marker||h===e.containerState.marker:zn(h)){if(e.containerState.type||(e.containerState.type=A,n.enter(A,{_container:!0})),A==="listUnordered")return n.enter("listItemPrefix"),h===42||h===45?n.check(bn,t,c)(h):c(h);if(!e.interrupt||h===49)return n.enter("listItemPrefix"),n.enter("listItemValue"),m(h)}return t(h)}function m(h){return zn(h)&&++l<10?(n.consume(h),m):(!e.interrupt||l<2)&&(e.containerState.marker?h===e.containerState.marker:h===41||h===46)?(n.exit("listItemValue"),c(h)):t(h)}function c(h){return n.enter("listItemMarker"),n.consume(h),n.exit("listItemMarker"),e.containerState.marker=e.containerState.marker||h,n.check(Sn,e.interrupt?t:p,n.attempt(Ke,x,f))}function p(h){return e.containerState.initialBlankLine=!0,i++,x(h)}function f(h){return z(h)?(n.enter("listItemPrefixWhitespace"),n.consume(h),n.exit("listItemPrefixWhitespace"),x):t(h)}function x(h){return e.containerState.size=i+e.sliceSerialize(n.exit("listItemPrefix"),!0).length,r(h)}}function nr(n,r,t){const e=this;return e.containerState._closeFlow=void 0,n.check(Sn,u,i);function u(a){return e.containerState.furtherBlankLines=e.containerState.furtherBlankLines||e.containerState.initialBlankLine,O(n,r,"listItemIndent",e.containerState.size+1)(a)}function i(a){return e.containerState.furtherBlankLines||!z(a)?(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,l(a)):(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,n.attempt(Xe,r,l)(a))}function l(a){return e.containerState._closeFlow=!0,e.interrupt=void 0,O(n,n.attempt($,r,t),"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a)}}function tr(n,r,t){const e=this;return O(n,u,"listItemIndent",e.containerState.size+1);function u(i){const l=e.events[e.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===e.containerState.size?r(i):t(i)}}function er(n){n.exit(this.containerState.type)}function rr(n,r,t){const e=this;return O(n,u,"listItemPrefixWhitespace",e.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function u(i){const l=e.events[e.events.length-1];return!z(i)&&l&&l[1].type==="listItemPrefixWhitespace"?r(i):t(i)}}const Kn={name:"setextUnderline",tokenize:ur,resolveTo:ir};function ir(n,r){let t=n.length,e,u,i;for(;t--;)if(n[t][0]==="enter"){if(n[t][1].type==="content"){e=t;break}n[t][1].type==="paragraph"&&(u=t)}else n[t][1].type==="content"&&n.splice(t,1),!i&&n[t][1].type==="definition"&&(i=t);const l={type:"setextHeading",start:Object.assign({},n[u][1].start),end:Object.assign({},n[n.length-1][1].end)};return n[u][1].type="setextHeadingText",i?(n.splice(u,0,["enter",l,r]),n.splice(i+1,0,["exit",n[e][1],r]),n[e][1].end=Object.assign({},n[i][1].end)):n[e][1]=l,n.push(["exit",l,r]),n}function ur(n,r,t){const e=this;let u;return i;function i(c){let p=e.events.length,f;for(;p--;)if(e.events[p][1].type!=="lineEnding"&&e.events[p][1].type!=="linePrefix"&&e.events[p][1].type!=="content"){f=e.events[p][1].type==="paragraph";break}return!e.parser.lazy[e.now().line]&&(e.interrupt||f)?(n.enter("setextHeadingLine"),u=c,l(c)):t(c)}function l(c){return n.enter("setextHeadingLineSequence"),a(c)}function a(c){return c===u?(n.consume(c),a):(n.exit("setextHeadingLineSequence"),z(c)?O(n,m,"lineSuffix")(c):m(c))}function m(c){return c===null||C(c)?(n.exit("setextHeadingLine"),r(c)):t(c)}}const lr={tokenize:ar};function ar(n){const r=this,t=n.attempt(Sn,e,n.attempt(this.parser.constructs.flowInitial,u,O(n,n.attempt(this.parser.constructs.flow,u,n.attempt(pe,u)),"linePrefix")));return t;function e(i){if(i===null){n.consume(i);return}return n.enter("lineEndingBlank"),n.consume(i),n.exit("lineEndingBlank"),r.currentConstruct=void 0,t}function u(i){if(i===null){n.consume(i);return}return n.enter("lineEnding"),n.consume(i),n.exit("lineEnding"),r.currentConstruct=void 0,t}}const or={resolveAll:ht()},sr=ct("string"),cr=ct("text");function ct(n){return{tokenize:r,resolveAll:ht(n==="text"?hr:void 0)};function r(t){const e=this,u=this.parser.constructs[n],i=t.attempt(u,l,a);return l;function l(p){return c(p)?i(p):a(p)}function a(p){if(p===null){t.consume(p);return}return t.enter("data"),t.consume(p),m}function m(p){return c(p)?(t.exit("data"),i(p)):(t.consume(p),m)}function c(p){if(p===null)return!0;const f=u[p];let x=-1;if(f)for(;++x-1){const a=l[0];typeof a=="string"?l[0]=a.slice(e):l.shift()}i>0&&l.push(n[u].slice(0,i))}return l}function mr(n,r){let t=-1;const e=[];let u;for(;++tu?0:u+r:r=r>u?u:r,t=t>0?t:0,e.length<1e4)l=Array.from(e),l.unshift(r,t),n.splice(...l);else for(t&&n.splice(r,t);i0?(tn(n,n.length,0,r),n):r}const Wn={}.hasOwnProperty;function Ot(n){const r={};let t=-1;for(;++tl))return;const T=r.events.length;let H=T,N,V;for(;H--;)if(r.events[H][0]==="exit"&&r.events[H][1].type==="chunkFlow"){if(N){V=r.events[H][1].end;break}N=!0}for(b(e),k=T;kF;){const _=t[D];r.containerState=_[1],_[0].exit.call(r,n)}t.length=F}function j(){u.write([null]),i=void 0,u=void 0,r.containerState._closeFlow=void 0}}function Ut(n,r,t){return O(n,n.attempt(this.parser.constructs.document,r,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Un(n){if(n===null||Z(n)||Ht(n))return 1;if(qt(n))return 2}function Ln(n,r,t){const e=[];let u=-1;for(;++u1&&n[t][1].end.offset-n[t][1].start.offset>1?2:1;const f=Object.assign({},n[e][1].end),x=Object.assign({},n[t][1].start);$n(f,-m),$n(x,m),l={type:m>1?"strongSequence":"emphasisSequence",start:f,end:Object.assign({},n[e][1].end)},a={type:m>1?"strongSequence":"emphasisSequence",start:Object.assign({},n[t][1].start),end:x},i={type:m>1?"strongText":"emphasisText",start:Object.assign({},n[e][1].end),end:Object.assign({},n[t][1].start)},u={type:m>1?"strong":"emphasis",start:Object.assign({},l.start),end:Object.assign({},a.end)},n[e][1].end=Object.assign({},l.start),n[t][1].start=Object.assign({},a.end),c=[],n[e][1].end.offset-n[e][1].start.offset&&(c=Y(c,[["enter",n[e][1],r],["exit",n[e][1],r]])),c=Y(c,[["enter",u,r],["enter",l,r],["exit",l,r],["enter",i,r]]),c=Y(c,Ln(r.parser.constructs.insideSpan.null,n.slice(e+1,t),r)),c=Y(c,[["exit",i,r],["enter",a,r],["exit",a,r],["exit",u,r]]),n[t][1].end.offset-n[t][1].start.offset?(p=2,c=Y(c,[["enter",n[t][1],r],["exit",n[t][1],r]])):p=0,tn(n,e-1,t-e+3,c),t=e+c.length-p-2;break}}for(t=-1;++t0&&z(k)?O(n,j,"linePrefix",i+1)(k):j(k)}function j(k){return k===null||C(k)?n.check(Yn,I,D)(k):(n.enter("codeFlowValue"),F(k))}function F(k){return k===null||C(k)?(n.exit("codeFlowValue"),j(k)):(n.consume(k),F)}function D(k){return n.exit("codeFenced"),r(k)}function _(k,T,H){let N=0;return V;function V(w){return k.enter("lineEnding"),k.consume(w),k.exit("lineEnding"),y}function y(w){return k.enter("codeFencedFence"),z(w)?O(k,S,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):S(w)}function S(w){return w===a?(k.enter("codeFencedFenceSequence"),P(w)):H(w)}function P(w){return w===a?(N++,k.consume(w),P):N>=l?(k.exit("codeFencedFenceSequence"),z(w)?O(k,R,"whitespace")(w):R(w)):H(w)}function R(w){return w===null||C(w)?(k.exit("codeFencedFence"),T(w)):H(w)}}}function re(n,r,t){const e=this;return u;function u(l){return l===null?t(l):(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}const Cn={name:"codeIndented",tokenize:ue},ie={tokenize:le,partial:!0};function ue(n,r,t){const e=this;return u;function u(c){return n.enter("codeIndented"),O(n,i,"linePrefix",5)(c)}function i(c){const p=e.events[e.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?l(c):t(c)}function l(c){return c===null?m(c):C(c)?n.attempt(ie,l,m)(c):(n.enter("codeFlowValue"),a(c))}function a(c){return c===null||C(c)?(n.exit("codeFlowValue"),l(c)):(n.consume(c),a)}function m(c){return n.exit("codeIndented"),r(c)}}function le(n,r,t){const e=this;return u;function u(l){return e.parser.lazy[e.now().line]?t(l):C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),u):O(n,i,"linePrefix",5)(l)}function i(l){const a=e.events[e.events.length-1];return a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?r(l):C(l)?u(l):t(l)}}const ae={name:"codeText",tokenize:ce,resolve:oe,previous:se};function oe(n){let r=n.length-4,t=3,e,u;if((n[t][1].type==="lineEnding"||n[t][1].type==="space")&&(n[r][1].type==="lineEnding"||n[r][1].type==="space")){for(e=t;++e=4?r(l):n.interrupt(e.parser.constructs.flow,t,r)(l)}}function at(n,r,t,e,u,i,l,a,m){const c=m||Number.POSITIVE_INFINITY;let p=0;return f;function f(b){return b===60?(n.enter(e),n.enter(u),n.enter(i),n.consume(b),n.exit(i),x):b===null||b===32||b===41||An(b)?t(b):(n.enter(e),n.enter(l),n.enter(a),n.enter("chunkString",{contentType:"string"}),I(b))}function x(b){return b===62?(n.enter(i),n.consume(b),n.exit(i),n.exit(u),n.exit(e),r):(n.enter(a),n.enter("chunkString",{contentType:"string"}),h(b))}function h(b){return b===62?(n.exit("chunkString"),n.exit(a),x(b)):b===null||b===60||C(b)?t(b):(n.consume(b),b===92?A:h)}function A(b){return b===60||b===62||b===92?(n.consume(b),h):h(b)}function I(b){return!p&&(b===null||b===41||Z(b))?(n.exit("chunkString"),n.exit(a),n.exit(l),n.exit(e),r(b)):p999||h===null||h===91||h===93&&!m||h===94&&!a&&"_hiddenFootnoteSupport"in l.parser.constructs?t(h):h===93?(n.exit(i),n.enter(u),n.consume(h),n.exit(u),n.exit(e),r):C(h)?(n.enter("lineEnding"),n.consume(h),n.exit("lineEnding"),p):(n.enter("chunkString",{contentType:"string"}),f(h))}function f(h){return h===null||h===91||h===93||C(h)||a++>999?(n.exit("chunkString"),p(h)):(n.consume(h),m||(m=!z(h)),h===92?x:f)}function x(h){return h===91||h===92||h===93?(n.consume(h),a++,f):f(h)}}function st(n,r,t,e,u,i){let l;return a;function a(x){return x===34||x===39||x===40?(n.enter(e),n.enter(u),n.consume(x),n.exit(u),l=x===40?41:x,m):t(x)}function m(x){return x===l?(n.enter(u),n.consume(x),n.exit(u),n.exit(e),r):(n.enter(i),c(x))}function c(x){return x===l?(n.exit(i),m(l)):x===null?t(x):C(x)?(n.enter("lineEnding"),n.consume(x),n.exit("lineEnding"),O(n,c,"linePrefix")):(n.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===l||x===null||C(x)?(n.exit("chunkString"),c(x)):(n.consume(x),x===92?f:p)}function f(x){return x===l||x===92?(n.consume(x),p):p(x)}}function dn(n,r){let t;return e;function e(u){return C(u)?(n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),t=!0,e):z(u)?O(n,e,t?"linePrefix":"lineSuffix")(u):r(u)}}function xn(n){return n.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const ke={name:"definition",tokenize:be},de={tokenize:ye,partial:!0};function be(n,r,t){const e=this;let u;return i;function i(h){return n.enter("definition"),l(h)}function l(h){return ot.call(e,n,a,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(h)}function a(h){return u=xn(e.sliceSerialize(e.events[e.events.length-1][1]).slice(1,-1)),h===58?(n.enter("definitionMarker"),n.consume(h),n.exit("definitionMarker"),m):t(h)}function m(h){return Z(h)?dn(n,c)(h):c(h)}function c(h){return at(n,p,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(h)}function p(h){return n.attempt(de,f,f)(h)}function f(h){return z(h)?O(n,x,"whitespace")(h):x(h)}function x(h){return h===null||C(h)?(n.exit("definition"),e.parser.defined.push(u),r(h)):t(h)}}function ye(n,r,t){return e;function e(a){return Z(a)?dn(n,u)(a):t(a)}function u(a){return st(n,i,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(a)}function i(a){return z(a)?O(n,l,"whitespace")(a):l(a)}function l(a){return a===null||C(a)?r(a):t(a)}}const Se={name:"hardBreakEscape",tokenize:Fe};function Fe(n,r,t){return e;function e(i){return n.enter("hardBreakEscape"),n.consume(i),u}function u(i){return C(i)?(n.exit("hardBreakEscape"),r(i)):t(i)}}const Ee={name:"headingAtx",tokenize:we,resolve:Ce};function Ce(n,r){let t=n.length-2,e=3,u,i;return n[e][1].type==="whitespace"&&(e+=2),t-2>e&&n[t][1].type==="whitespace"&&(t-=2),n[t][1].type==="atxHeadingSequence"&&(e===t-1||t-4>e&&n[t-2][1].type==="whitespace")&&(t-=e+1===t?2:4),t>e&&(u={type:"atxHeadingText",start:n[e][1].start,end:n[t][1].end},i={type:"chunkText",start:n[e][1].start,end:n[t][1].end,contentType:"text"},tn(n,e,t-e+1,[["enter",u,r],["enter",i,r],["exit",i,r],["exit",u,r]])),n}function we(n,r,t){let e=0;return u;function u(p){return n.enter("atxHeading"),i(p)}function i(p){return n.enter("atxHeadingSequence"),l(p)}function l(p){return p===35&&e++<6?(n.consume(p),l):p===null||Z(p)?(n.exit("atxHeadingSequence"),a(p)):t(p)}function a(p){return p===35?(n.enter("atxHeadingSequence"),m(p)):p===null||C(p)?(n.exit("atxHeading"),r(p)):z(p)?O(n,a,"whitespace")(p):(n.enter("atxHeadingText"),c(p))}function m(p){return p===35?(n.consume(p),m):(n.exit("atxHeadingSequence"),a(p))}function c(p){return p===null||p===35||Z(p)?(n.exit("atxHeadingText"),a(p)):(n.consume(p),c)}}const Ae=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Jn=["pre","script","style","textarea"],ze={name:"htmlFlow",tokenize:Le,resolveTo:Be,concrete:!0},Ie={tokenize:De,partial:!0},Te={tokenize:Oe,partial:!0};function Be(n){let r=n.length;for(;r--&&!(n[r][0]==="enter"&&n[r][1].type==="htmlFlow"););return r>1&&n[r-2][1].type==="linePrefix"&&(n[r][1].start=n[r-2][1].start,n[r+1][1].start=n[r-2][1].start,n.splice(r-2,2)),n}function Le(n,r,t){const e=this;let u,i,l,a,m;return c;function c(s){return p(s)}function p(s){return n.enter("htmlFlow"),n.enter("htmlFlowData"),n.consume(s),f}function f(s){return s===33?(n.consume(s),x):s===47?(n.consume(s),i=!0,I):s===63?(n.consume(s),u=3,e.interrupt?r:o):nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function x(s){return s===45?(n.consume(s),u=2,h):s===91?(n.consume(s),u=5,a=0,A):nn(s)?(n.consume(s),u=4,e.interrupt?r:o):t(s)}function h(s){return s===45?(n.consume(s),e.interrupt?r:o):t(s)}function A(s){const K="CDATA[";return s===K.charCodeAt(a++)?(n.consume(s),a===K.length?e.interrupt?r:S:A):t(s)}function I(s){return nn(s)?(n.consume(s),l=String.fromCharCode(s),M):t(s)}function M(s){if(s===null||s===47||s===62||Z(s)){const K=s===47,hn=l.toLowerCase();return!K&&!i&&Jn.includes(hn)?(u=1,e.interrupt?r(s):S(s)):Ae.includes(l.toLowerCase())?(u=6,K?(n.consume(s),b):e.interrupt?r(s):S(s)):(u=7,e.interrupt&&!e.parser.lazy[e.now().line]?t(s):i?j(s):F(s))}return s===45||v(s)?(n.consume(s),l+=String.fromCharCode(s),M):t(s)}function b(s){return s===62?(n.consume(s),e.interrupt?r:S):t(s)}function j(s){return z(s)?(n.consume(s),j):V(s)}function F(s){return s===47?(n.consume(s),V):s===58||s===95||nn(s)?(n.consume(s),D):z(s)?(n.consume(s),F):V(s)}function D(s){return s===45||s===46||s===58||s===95||v(s)?(n.consume(s),D):_(s)}function _(s){return s===61?(n.consume(s),k):z(s)?(n.consume(s),_):F(s)}function k(s){return s===null||s===60||s===61||s===62||s===96?t(s):s===34||s===39?(n.consume(s),m=s,T):z(s)?(n.consume(s),k):H(s)}function T(s){return s===m?(n.consume(s),m=null,N):s===null||C(s)?t(s):(n.consume(s),T)}function H(s){return s===null||s===34||s===39||s===47||s===60||s===61||s===62||s===96||Z(s)?_(s):(n.consume(s),H)}function N(s){return s===47||s===62||z(s)?F(s):t(s)}function V(s){return s===62?(n.consume(s),y):t(s)}function y(s){return s===null||C(s)?S(s):z(s)?(n.consume(s),y):t(s)}function S(s){return s===45&&u===2?(n.consume(s),U):s===60&&u===1?(n.consume(s),W):s===62&&u===4?(n.consume(s),J):s===63&&u===3?(n.consume(s),o):s===93&&u===5?(n.consume(s),en):C(s)&&(u===6||u===7)?(n.exit("htmlFlowData"),n.check(Ie,rn,P)(s)):s===null||C(s)?(n.exit("htmlFlowData"),P(s)):(n.consume(s),S)}function P(s){return n.check(Te,R,rn)(s)}function R(s){return n.enter("lineEnding"),n.consume(s),n.exit("lineEnding"),w}function w(s){return s===null||C(s)?P(s):(n.enter("htmlFlowData"),S(s))}function U(s){return s===45?(n.consume(s),o):S(s)}function W(s){return s===47?(n.consume(s),l="",G):S(s)}function G(s){if(s===62){const K=l.toLowerCase();return Jn.includes(K)?(n.consume(s),J):S(s)}return nn(s)&&l.length<8?(n.consume(s),l+=String.fromCharCode(s),G):S(s)}function en(s){return s===93?(n.consume(s),o):S(s)}function o(s){return s===62?(n.consume(s),J):s===45&&u===2?(n.consume(s),o):S(s)}function J(s){return s===null||C(s)?(n.exit("htmlFlowData"),rn(s)):(n.consume(s),J)}function rn(s){return n.exit("htmlFlow"),r(s)}}function Oe(n,r,t){const e=this;return u;function u(l){return C(l)?(n.enter("lineEnding"),n.consume(l),n.exit("lineEnding"),i):t(l)}function i(l){return e.parser.lazy[e.now().line]?t(l):r(l)}}function De(n,r,t){return e;function e(u){return n.enter("lineEnding"),n.consume(u),n.exit("lineEnding"),n.attempt(Sn,r,t)}}const Pe={name:"htmlText",tokenize:_e};function _e(n,r,t){const e=this;let u,i,l;return a;function a(o){return n.enter("htmlText"),n.enter("htmlTextData"),n.consume(o),m}function m(o){return o===33?(n.consume(o),c):o===47?(n.consume(o),_):o===63?(n.consume(o),F):nn(o)?(n.consume(o),H):t(o)}function c(o){return o===45?(n.consume(o),p):o===91?(n.consume(o),i=0,A):nn(o)?(n.consume(o),j):t(o)}function p(o){return o===45?(n.consume(o),h):t(o)}function f(o){return o===null?t(o):o===45?(n.consume(o),x):C(o)?(l=f,W(o)):(n.consume(o),f)}function x(o){return o===45?(n.consume(o),h):f(o)}function h(o){return o===62?U(o):o===45?x(o):f(o)}function A(o){const J="CDATA[";return o===J.charCodeAt(i++)?(n.consume(o),i===J.length?I:A):t(o)}function I(o){return o===null?t(o):o===93?(n.consume(o),M):C(o)?(l=I,W(o)):(n.consume(o),I)}function M(o){return o===93?(n.consume(o),b):I(o)}function b(o){return o===62?U(o):o===93?(n.consume(o),b):I(o)}function j(o){return o===null||o===62?U(o):C(o)?(l=j,W(o)):(n.consume(o),j)}function F(o){return o===null?t(o):o===63?(n.consume(o),D):C(o)?(l=F,W(o)):(n.consume(o),F)}function D(o){return o===62?U(o):F(o)}function _(o){return nn(o)?(n.consume(o),k):t(o)}function k(o){return o===45||v(o)?(n.consume(o),k):T(o)}function T(o){return C(o)?(l=T,W(o)):z(o)?(n.consume(o),T):U(o)}function H(o){return o===45||v(o)?(n.consume(o),H):o===47||o===62||Z(o)?N(o):t(o)}function N(o){return o===47?(n.consume(o),U):o===58||o===95||nn(o)?(n.consume(o),V):C(o)?(l=N,W(o)):z(o)?(n.consume(o),N):U(o)}function V(o){return o===45||o===46||o===58||o===95||v(o)?(n.consume(o),V):y(o)}function y(o){return o===61?(n.consume(o),S):C(o)?(l=y,W(o)):z(o)?(n.consume(o),y):N(o)}function S(o){return o===null||o===60||o===61||o===62||o===96?t(o):o===34||o===39?(n.consume(o),u=o,P):C(o)?(l=S,W(o)):z(o)?(n.consume(o),S):(n.consume(o),R)}function P(o){return o===u?(n.consume(o),u=void 0,w):o===null?t(o):C(o)?(l=P,W(o)):(n.consume(o),P)}function R(o){return o===null||o===34||o===39||o===60||o===61||o===96?t(o):o===47||o===62||Z(o)?N(o):(n.consume(o),R)}function w(o){return o===47||o===62||Z(o)?N(o):t(o)}function U(o){return o===62?(n.consume(o),n.exit("htmlTextData"),n.exit("htmlText"),r):t(o)}function W(o){return n.exit("htmlTextData"),n.enter("lineEnding"),n.consume(o),n.exit("lineEnding"),G}function G(o){return z(o)?O(n,en,"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):en(o)}function en(o){return n.enter("htmlTextData"),l(o)}}const Dn={name:"labelEnd",tokenize:Ne,resolveTo:He,resolveAll:qe},Me={tokenize:Ve},je={tokenize:We},Re={tokenize:Qe};function qe(n){let r=-1;for(;++r=3&&(c===null||C(c))?(n.exit("thematicBreak"),r(c)):t(c)}function m(c){return c===u?(n.consume(c),e++,m):(n.exit("thematicBreakSequence"),z(c)?O(n,a,"whitespace")(c):a(c))}}const $={name:"list",tokenize:ve,continuation:{tokenize:nr},exit:er},Ke={tokenize:rr,partial:!0},Xe={tokenize:tr,partial:!0};function ve(n,r,t){const e=this,u=e.events[e.events.length-1];let i=u&&u[1].type==="linePrefix"?u[2].sliceSerialize(u[1],!0).length:0,l=0;return a;function a(h){const A=e.containerState.type||(h===42||h===43||h===45?"listUnordered":"listOrdered");if(A==="listUnordered"?!e.containerState.marker||h===e.containerState.marker:zn(h)){if(e.containerState.type||(e.containerState.type=A,n.enter(A,{_container:!0})),A==="listUnordered")return n.enter("listItemPrefix"),h===42||h===45?n.check(bn,t,c)(h):c(h);if(!e.interrupt||h===49)return n.enter("listItemPrefix"),n.enter("listItemValue"),m(h)}return t(h)}function m(h){return zn(h)&&++l<10?(n.consume(h),m):(!e.interrupt||l<2)&&(e.containerState.marker?h===e.containerState.marker:h===41||h===46)?(n.exit("listItemValue"),c(h)):t(h)}function c(h){return n.enter("listItemMarker"),n.consume(h),n.exit("listItemMarker"),e.containerState.marker=e.containerState.marker||h,n.check(Sn,e.interrupt?t:p,n.attempt(Ke,x,f))}function p(h){return e.containerState.initialBlankLine=!0,i++,x(h)}function f(h){return z(h)?(n.enter("listItemPrefixWhitespace"),n.consume(h),n.exit("listItemPrefixWhitespace"),x):t(h)}function x(h){return e.containerState.size=i+e.sliceSerialize(n.exit("listItemPrefix"),!0).length,r(h)}}function nr(n,r,t){const e=this;return e.containerState._closeFlow=void 0,n.check(Sn,u,i);function u(a){return e.containerState.furtherBlankLines=e.containerState.furtherBlankLines||e.containerState.initialBlankLine,O(n,r,"listItemIndent",e.containerState.size+1)(a)}function i(a){return e.containerState.furtherBlankLines||!z(a)?(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,l(a)):(e.containerState.furtherBlankLines=void 0,e.containerState.initialBlankLine=void 0,n.attempt(Xe,r,l)(a))}function l(a){return e.containerState._closeFlow=!0,e.interrupt=void 0,O(n,n.attempt($,r,t),"linePrefix",e.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a)}}function tr(n,r,t){const e=this;return O(n,u,"listItemIndent",e.containerState.size+1);function u(i){const l=e.events[e.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===e.containerState.size?r(i):t(i)}}function er(n){n.exit(this.containerState.type)}function rr(n,r,t){const e=this;return O(n,u,"listItemPrefixWhitespace",e.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function u(i){const l=e.events[e.events.length-1];return!z(i)&&l&&l[1].type==="listItemPrefixWhitespace"?r(i):t(i)}}const Kn={name:"setextUnderline",tokenize:ur,resolveTo:ir};function ir(n,r){let t=n.length,e,u,i;for(;t--;)if(n[t][0]==="enter"){if(n[t][1].type==="content"){e=t;break}n[t][1].type==="paragraph"&&(u=t)}else n[t][1].type==="content"&&n.splice(t,1),!i&&n[t][1].type==="definition"&&(i=t);const l={type:"setextHeading",start:Object.assign({},n[u][1].start),end:Object.assign({},n[n.length-1][1].end)};return n[u][1].type="setextHeadingText",i?(n.splice(u,0,["enter",l,r]),n.splice(i+1,0,["exit",n[e][1],r]),n[e][1].end=Object.assign({},n[i][1].end)):n[e][1]=l,n.push(["exit",l,r]),n}function ur(n,r,t){const e=this;let u;return i;function i(c){let p=e.events.length,f;for(;p--;)if(e.events[p][1].type!=="lineEnding"&&e.events[p][1].type!=="linePrefix"&&e.events[p][1].type!=="content"){f=e.events[p][1].type==="paragraph";break}return!e.parser.lazy[e.now().line]&&(e.interrupt||f)?(n.enter("setextHeadingLine"),u=c,l(c)):t(c)}function l(c){return n.enter("setextHeadingLineSequence"),a(c)}function a(c){return c===u?(n.consume(c),a):(n.exit("setextHeadingLineSequence"),z(c)?O(n,m,"lineSuffix")(c):m(c))}function m(c){return c===null||C(c)?(n.exit("setextHeadingLine"),r(c)):t(c)}}const lr={tokenize:ar};function ar(n){const r=this,t=n.attempt(Sn,e,n.attempt(this.parser.constructs.flowInitial,u,O(n,n.attempt(this.parser.constructs.flow,u,n.attempt(pe,u)),"linePrefix")));return t;function e(i){if(i===null){n.consume(i);return}return n.enter("lineEndingBlank"),n.consume(i),n.exit("lineEndingBlank"),r.currentConstruct=void 0,t}function u(i){if(i===null){n.consume(i);return}return n.enter("lineEnding"),n.consume(i),n.exit("lineEnding"),r.currentConstruct=void 0,t}}const or={resolveAll:ht()},sr=ct("string"),cr=ct("text");function ct(n){return{tokenize:r,resolveAll:ht(n==="text"?hr:void 0)};function r(t){const e=this,u=this.parser.constructs[n],i=t.attempt(u,l,a);return l;function l(p){return c(p)?i(p):a(p)}function a(p){if(p===null){t.consume(p);return}return t.enter("data"),t.consume(p),m}function m(p){return c(p)?(t.exit("data"),i(p)):(t.consume(p),m)}function c(p){if(p===null)return!0;const f=u[p];let x=-1;if(f)for(;++x-1){const a=l[0];typeof a=="string"?l[0]=a.slice(e):l.shift()}i>0&&l.push(n[u].slice(0,i))}return l}function mr(n,r){let t=-1;const e=[];let u;for(;++t13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"�":String.fromCharCode(t)}const Ir=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Tr(n){return n.replace(Ir,Br)}function Br(n,r,t){if(r)return r;if(t.charCodeAt(0)===35){const u=t.charCodeAt(1),i=u===120||u===88;return pt(t.slice(i?2:1),i?16:10)}return On(t)||n}function yn(n){return!n||typeof n!="object"?"":"position"in n||"type"in n?vn(n.position):"start"in n||"end"in n?vn(n):"line"in n||"column"in n?Tn(n):""}function Tn(n){return nt(n&&n.line)+":"+nt(n&&n.column)}function vn(n){return Tn(n&&n.start)+"-"+Tn(n&&n.end)}function nt(n){return n&&typeof n=="number"?n:1}const ft={}.hasOwnProperty,mt=function(n,r,t){return typeof r!="string"&&(t=r,r=void 0),Lr(t)(zr(wr(t).document().write(Ar()(n,r,!0))))};function Lr(n){const r={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:a(Hn),autolinkProtocol:y,autolinkEmail:y,atxHeading:a(jn),blockQuote:a(Fn),characterEscape:y,characterReference:y,codeFenced:a(Mn),codeFencedFenceInfo:m,codeFencedFenceMeta:m,codeIndented:a(Mn,m),codeText:a(kt,m),codeTextData:y,data:y,codeFlowValue:y,definition:a(dt),definitionDestinationString:m,definitionLabelString:m,definitionTitleString:m,emphasis:a(bt),hardBreakEscape:a(Rn),hardBreakTrailing:a(Rn),htmlFlow:a(qn,m),htmlFlowData:y,htmlText:a(qn,m),htmlTextData:y,image:a(yt),label:m,link:a(Hn),listItem:a(St),listItemValue:A,listOrdered:a(Nn,h),listUnordered:a(Nn),paragraph:a(Ft),reference:hn,referenceString:m,resourceDestinationString:m,resourceTitleString:m,setextHeading:a(jn),strong:a(Et),thematicBreak:a(wt)},exit:{atxHeading:p(),atxHeadingSequence:T,autolink:p(),autolinkEmail:mn,autolinkProtocol:fn,blockQuote:p(),characterEscapeValue:S,characterReferenceMarkerHexadecimal:pn,characterReferenceMarkerNumeric:pn,characterReferenceValue:an,codeFenced:p(j),codeFencedFence:b,codeFencedFenceInfo:I,codeFencedFenceMeta:M,codeFlowValue:S,codeIndented:p(F),codeText:p(W),codeTextData:S,data:S,definition:p(),definitionDestinationString:k,definitionLabelString:D,definitionTitleString:_,emphasis:p(),hardBreakEscape:p(R),hardBreakTrailing:p(R),htmlFlow:p(w),htmlFlowData:S,htmlText:p(U),htmlTextData:S,image:p(en),label:J,labelText:o,lineEnding:P,link:p(G),listItem:p(),listOrdered:p(),listUnordered:p(),paragraph:p(),referenceString:Q,resourceDestinationString:rn,resourceTitleString:s,resource:K,setextHeading:p(V),setextHeadingLineSequence:N,setextHeadingText:H,strong:p(),thematicBreak:p()}};xt(r,(n||{}).mdastExtensions||[]);const t={};return e;function e(g){let d={type:"root",children:[]};const E={stack:[d],tokenStack:[],config:r,enter:c,exit:f,buffer:m,resume:x,setData:i,getData:l},B=[];let L=-1;for(;++L0){const X=E.tokenStack[E.tokenStack.length-1];(X[1]||tt).call(E,void 0,X[0])}for(d.position={start:sn(g.length>0?g[0][1].start:{line:1,column:1,offset:0}),end:sn(g.length>0?g[g.length-2][1].end:{line:1,column:1,offset:0})},L=-1;++L{t.forEach(l=>{wt[l](e,a,i)})},ot=(e,t,a)=>{g.trace("Making markers for ",a),e.append("defs").append("marker").attr("id",a+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},yt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},pt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ft=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},xt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",a+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},dt=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},gt=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},ut=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},bt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},wt={extension:ot,composition:yt,aggregation:pt,dependency:ft,lollipop:xt,point:dt,circle:gt,cross:ut,barb:bt},hr=ht;function mt(e,t){t&&e.attr("style",t)}function kt(e){const t=E(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=t.append("xhtml:div"),i=e.label,l=e.isNode?"nodeLabel":"edgeLabel";return a.html('"+i+""),mt(a,e.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}const vt=(e,t,a,i)=>{let l=e||"";if(typeof l=="object"&&(l=l[0]),H(b().flowchart.htmlLabels)){l=l.replace(/\\n|\n/g,"
"),g.debug("vertexText"+l);const r={isNode:i,label:Q(l).replace(/fa[blrs]?:fa-[\w-]+/g,n=>``),labelStyle:t.replace("fill:","color:")};return kt(r)}else{const r=document.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("style",t.replace("color:","fill:"));let s=[];typeof l=="string"?s=l.split(/\\n|\n|/gi):Array.isArray(l)?s=l:s=[];for(const n of s){const c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),a?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=n.trim(),r.appendChild(c)}return r}},R=vt,M=async(e,t,a,i)=>{let l;const r=t.useHtmlLabels||H(b().flowchart.htmlLabels);a?l=a:l="node default";const s=e.insert("g").attr("class",l).attr("id",t.domId||t.id),n=s.insert("g").attr("class","label").attr("style",t.labelStyle);let c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];const o=n.node();let h;t.labelType==="markdown"?h=st(n,q(Q(c),b()),{useHtmlLabels:r,width:t.width||b().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(R(q(Q(c),b()),t.labelStyle,!1,i));let y=h.getBBox();const f=t.padding/2;if(H(b().flowchart.htmlLabels)){const p=h.children[0],d=E(h),k=p.getElementsByTagName("img");if(k){const x=c.replace(/]*>/g,"").trim()==="";await Promise.all([...k].map(u=>new Promise(S=>{function B(){if(u.style.display="flex",u.style.flexDirection="column",x){const C=b().fontSize?b().fontSize:window.getComputedStyle(document.body).fontSize,A=parseInt(C,10)*5+"px";u.style.minWidth=A,u.style.maxWidth=A}else u.style.width="100%";S(u)}setTimeout(()=>{u.complete&&B()}),u.addEventListener("error",B),u.addEventListener("load",B)})))}y=p.getBoundingClientRect(),d.attr("width",y.width),d.attr("height",y.height)}return r?n.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"):n.attr("transform","translate(0, "+-y.height/2+")"),t.centerLabel&&n.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:s,bbox:y,halfPadding:f,label:n}},m=(e,t)=>{const a=t.node().getBBox();e.width=a.width,e.height=a.height};function I(e,t,a,i){return e.insert("polygon",":first-child").attr("points",i.map(function(l){return l.x+","+l.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+a/2+")")}function Lt(e,t){return e.intersect(t)}function it(e,t,a,i){var l=e.x,r=e.y,s=l-i.x,n=r-i.y,c=Math.sqrt(t*t*n*n+a*a*s*s),o=Math.abs(t*a*s/c);i.x0}function Tt(e,t,a){var i=e.x,l=e.y,r=[],s=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(d){s=Math.min(s,d.x),n=Math.min(n,d.y)}):(s=Math.min(s,t.x),n=Math.min(n,t.y));for(var c=i-e.width/2-s,o=l-e.height/2-n,h=0;h1&&r.sort(function(d,k){var x=d.x-a.x,u=d.y-a.y,S=Math.sqrt(x*x+u*u),B=k.x-a.x,C=k.y-a.y,X=Math.sqrt(B*B+C*C);return S{var a=e.x,i=e.y,l=t.x-a,r=t.y-i,s=e.width/2,n=e.height/2,c,o;return Math.abs(r)*s>Math.abs(l)*n?(r<0&&(n=-n),c=r===0?0:n*l/r,o=n):(l<0&&(s=-s),c=s,o=l===0?0:s*r/l),{x:a+c,y:i+o}},Et=Bt,w={node:Lt,circle:St,ellipse:it,polygon:Tt,rect:Et},Ct=async(e,t)=>{t.useHtmlLabels||b().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:i,bbox:l,halfPadding:r}=await M(e,t,"node "+t.classes,!0);g.info("Classes = ",t.classes);const s=i.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-l.width/2-r).attr("y",-l.height/2-r).attr("width",l.width+t.padding).attr("height",l.height+t.padding),m(t,s),t.intersect=function(n){return w.rect(t,n)},i},$t=Ct,_t=e=>{const t=new Set;for(const a of e)switch(a){case"x":t.add("right"),t.add("left");break;case"y":t.add("up"),t.add("down");break;default:t.add(a);break}return t},Rt=(e,t,a)=>{const i=_t(e),l=2,r=t.height+2*a.padding,s=r/l,n=t.width+2*s+a.padding,c=a.padding/2;return i.has("right")&&i.has("left")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:s,y:0},{x:n/2,y:2*c},{x:n-s,y:0},{x:n,y:0},{x:n,y:-r/3},{x:n+2*c,y:-r/2},{x:n,y:-2*r/3},{x:n,y:-r},{x:n-s,y:-r},{x:n/2,y:-r-2*c},{x:s,y:-r},{x:0,y:-r},{x:0,y:-2*r/3},{x:-2*c,y:-r/2},{x:0,y:-r/3}]:i.has("right")&&i.has("left")&&i.has("up")?[{x:s,y:0},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:s,y:-r},{x:0,y:-r/2}]:i.has("right")&&i.has("left")&&i.has("down")?[{x:0,y:0},{x:s,y:-r},{x:n-s,y:-r},{x:n,y:0}]:i.has("right")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:n,y:-s},{x:n,y:-r+s},{x:0,y:-r}]:i.has("left")&&i.has("up")&&i.has("down")?[{x:n,y:0},{x:0,y:-s},{x:0,y:-r+s},{x:n,y:-r}]:i.has("right")&&i.has("left")?[{x:s,y:0},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r},{x:0,y:-r/2}]:i.has("up")&&i.has("down")?[{x:n/2,y:0},{x:0,y:-c},{x:s,y:-c},{x:s,y:-r+c},{x:0,y:-r+c},{x:n/2,y:-r},{x:n,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c},{x:n,y:-c}]:i.has("right")&&i.has("up")?[{x:0,y:0},{x:n,y:-s},{x:0,y:-r}]:i.has("right")&&i.has("down")?[{x:0,y:0},{x:n,y:0},{x:0,y:-r}]:i.has("left")&&i.has("up")?[{x:n,y:0},{x:0,y:-s},{x:n,y:-r}]:i.has("left")&&i.has("down")?[{x:n,y:0},{x:0,y:0},{x:n,y:-r}]:i.has("right")?[{x:s,y:-c},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r+c}]:i.has("left")?[{x:s,y:0},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r},{x:0,y:-r/2}]:i.has("up")?[{x:s,y:-c},{x:s,y:-r+c},{x:0,y:-r+c},{x:n/2,y:-r},{x:n,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c}]:i.has("down")?[{x:n/2,y:0},{x:0,y:-c},{x:s,y:-c},{x:s,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c},{x:n,y:-c}]:[{x:0,y:0}]},K=e=>e?" "+e:"",_=(e,t)=>`node default${K(e.classes)} ${K(e.class)}`,P=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=l+r,n=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];g.info("Question main (Circle)");const c=I(a,s,s,n);return c.attr("style",t.style),m(t,c),t.intersect=function(o){return g.warn("Intersect called"),w.polygon(t,n,o)},a},Ht=(e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=28,l=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return a.insert("polygon",":first-child").attr("points",l.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return w.circle(t,14,s)},a},It=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=4,r=i.height+t.padding,s=r/l,n=i.width+2*s+t.padding,c=[{x:s,y:0},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:s,y:-r},{x:0,y:-r/2}],o=I(a,n,r,c);return o.attr("style",t.style),m(t,o),t.intersect=function(h){return w.polygon(t,c,h)},a},Nt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,void 0,!0),l=2,r=i.height+2*t.padding,s=r/l,n=i.width+2*s+t.padding,c=Rt(t.directions,i,t),o=I(a,n,r,c);return o.attr("style",t.style),m(t,o),t.intersect=function(h){return w.polygon(t,c,h)},a},Ot=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-r/2,y:0},{x:l,y:0},{x:l,y:-r},{x:-r/2,y:-r},{x:0,y:-r/2}];return I(a,l,r,s).attr("style",t.style),t.width=l+r,t.height=r,t.intersect=function(c){return w.polygon(t,s,c)},a},Wt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-2*r/6,y:0},{x:l-r/6,y:0},{x:l+2*r/6,y:-r},{x:r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Xt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:2*r/6,y:0},{x:l+r/6,y:0},{x:l-2*r/6,y:-r},{x:-r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Yt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-2*r/6,y:0},{x:l+2*r/6,y:0},{x:l-r/6,y:-r},{x:r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},At=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:r/6,y:0},{x:l-r/6,y:0},{x:l+2*r/6,y:-r},{x:-2*r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Dt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:0,y:0},{x:l+r/2,y:0},{x:l,y:-r/2},{x:l+r/2,y:-r},{x:0,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},jt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=l/2,s=r/(2.5+l/50),n=i.height+s+t.padding,c="M 0,"+s+" a "+r+","+s+" 0,0,0 "+l+" 0 a "+r+","+s+" 0,0,0 "+-l+" 0 l 0,"+n+" a "+r+","+s+" 0,0,0 "+l+" 0 l 0,"+-n,o=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-l/2+","+-(n/2+s)+")");return m(t,o),t.intersect=function(h){const y=w.rect(t,h),f=y.x-t.x;if(r!=0&&(Math.abs(f)t.height/2-s)){let p=s*s*(1-f*f/(r*r));p!=0&&(p=Math.sqrt(p)),p=s-p,h.y-t.y>0&&(p=-p),y.y+=p}return y},a},Ut=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,"node "+t.classes+" "+t.class,!0),r=a.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,c=t.positioned?-s/2:-i.width/2-l,o=t.positioned?-n/2:-i.height/2-l;if(r.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",c).attr("y",o).attr("width",s).attr("height",n),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(V(r,t.props.borders,s,n),h.delete("borders")),h.forEach(y=>{g.warn(`Unknown node property ${y}`)})}return m(t,r),t.intersect=function(h){return w.rect(t,h)},a},zt=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,"node "+t.classes,!0),r=a.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,c=t.positioned?-s/2:-i.width/2-l,o=t.positioned?-n/2:-i.height/2-l;if(r.attr("class","basic cluster composite label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",c).attr("y",o).attr("width",s).attr("height",n),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(V(r,t.props.borders,s,n),h.delete("borders")),h.forEach(y=>{g.warn(`Unknown node property ${y}`)})}return m(t,r),t.intersect=function(h){return w.rect(t,h)},a},Zt=async(e,t)=>{const{shapeSvg:a}=await M(e,t,"label",!0);g.trace("Classes = ",t.class);const i=a.insert("rect",":first-child"),l=0,r=0;if(i.attr("width",l).attr("height",r),a.attr("class","label edgeLabel"),t.props){const s=new Set(Object.keys(t.props));t.props.borders&&(V(i,t.props.borders,l,r),s.delete("borders")),s.forEach(n=>{g.warn(`Unknown node property ${n}`)})}return m(t,i),t.intersect=function(s){return w.rect(t,s)},a};function V(e,t,a,i){const l=[],r=n=>{l.push(n,0)},s=n=>{l.push(0,n)};t.includes("t")?(g.debug("add top border"),r(a)):s(a),t.includes("r")?(g.debug("add right border"),r(i)):s(i),t.includes("b")?(g.debug("add bottom border"),r(a)):s(a),t.includes("l")?(g.debug("add left border"),r(i)):s(i),e.attr("stroke-dasharray",l.join(" "))}const Gt=(e,t)=>{let a;t.classes?a="node "+t.classes:a="node default";const i=e.insert("g").attr("class",a).attr("id",t.domId||t.id),l=i.insert("rect",":first-child"),r=i.insert("line"),s=i.insert("g").attr("class","label"),n=t.labelText.flat?t.labelText.flat():t.labelText;let c="";typeof n=="object"?c=n[0]:c=n,g.info("Label text abc79",c,n,typeof n=="object");const o=s.node().appendChild(R(c,t.labelStyle,!0,!0));let h={width:0,height:0};if(H(b().flowchart.htmlLabels)){const k=o.children[0],x=E(o);h=k.getBoundingClientRect(),x.attr("width",h.width),x.attr("height",h.height)}g.info("Text 2",n);const y=n.slice(1,n.length);let f=o.getBBox();const p=s.node().appendChild(R(y.join?y.join("
"):y,t.labelStyle,!0,!0));if(H(b().flowchart.htmlLabels)){const k=p.children[0],x=E(p);h=k.getBoundingClientRect(),x.attr("width",h.width),x.attr("height",h.height)}const d=t.padding/2;return E(p).attr("transform","translate( "+(h.width>f.width?0:(f.width-h.width)/2)+", "+(f.height+d+5)+")"),E(o).attr("transform","translate( "+(h.width{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.height+t.padding,r=i.width+l/4+t.padding,s=a.insert("rect",":first-child").attr("style",t.style).attr("rx",l/2).attr("ry",l/2).attr("x",-r/2).attr("y",-l/2).attr("width",r).attr("height",l);return m(t,s),t.intersect=function(n){return w.rect(t,n)},a},Qt=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,_(t),!0),r=a.insert("circle",":first-child");return r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),g.info("Circle main"),m(t,r),t.intersect=function(s){return g.info("Circle intersect",t,i.width/2+l,s),w.circle(t,i.width/2+l,s)},a},Vt=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,_(t),!0),r=5,s=a.insert("g",":first-child"),n=s.insert("circle"),c=s.insert("circle");return s.attr("class",t.class),n.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l+r).attr("width",i.width+t.padding+r*2).attr("height",i.height+t.padding+r*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),g.info("DoubleCircle main"),m(t,n),t.intersect=function(o){return g.info("DoubleCircle intersect",t,i.width/2+l+r,o),w.circle(t,i.width/2+l+r,o)},a},qt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:0,y:0},{x:l,y:0},{x:l,y:-r},{x:0,y:-r},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-r},{x:-8,y:-r},{x:-8,y:0}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Jt=(e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),m(t,i),t.intersect=function(l){return w.circle(t,7,l)},a},tt=(e,t,a)=>{const i=e.insert("g").attr("class","node default").attr("id",t.domId||t.id);let l=70,r=10;a==="LR"&&(l=10,r=70);const s=i.append("rect").attr("x",-1*l/2).attr("y",-1*r/2).attr("width",l).attr("height",r).attr("class","fork-join");return m(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(n){return w.rect(t,n)},i},Kt=(e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child"),l=a.insert("circle",":first-child");return l.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),m(t,l),t.intersect=function(r){return w.circle(t,7,r)},a},Pt=(e,t)=>{const a=t.padding/2,i=4,l=8;let r;t.classes?r="node "+t.classes:r="node default";const s=e.insert("g").attr("class",r).attr("id",t.domId||t.id),n=s.insert("rect",":first-child"),c=s.insert("line"),o=s.insert("line");let h=0,y=i;const f=s.insert("g").attr("class","label");let p=0;const d=t.classData.annotations&&t.classData.annotations[0],k=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",x=f.node().appendChild(R(k,t.labelStyle,!0,!0));let u=x.getBBox();if(H(b().flowchart.htmlLabels)){const v=x.children[0],L=E(x);u=v.getBoundingClientRect(),L.attr("width",u.width),L.attr("height",u.height)}t.classData.annotations[0]&&(y+=u.height+i,h+=u.width);let S=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(b().flowchart.htmlLabels?S+="<"+t.classData.type+">":S+="<"+t.classData.type+">");const B=f.node().appendChild(R(S,t.labelStyle,!0,!0));E(B).attr("class","classTitle");let C=B.getBBox();if(H(b().flowchart.htmlLabels)){const v=B.children[0],L=E(B);C=v.getBoundingClientRect(),L.attr("width",C.width),L.attr("height",C.height)}y+=C.height+i,C.width>h&&(h=C.width);const X=[];t.classData.members.forEach(v=>{const L=v.getDisplayDetails();let W=L.displayText;b().flowchart.htmlLabels&&(W=W.replace(//g,">"));const N=f.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let $=N.getBBox();if(H(b().flowchart.htmlLabels)){const F=N.children[0],D=E(N);$=F.getBoundingClientRect(),D.attr("width",$.width),D.attr("height",$.height)}$.width>h&&(h=$.width),y+=$.height+i,X.push(N)}),y+=l;const A=[];if(t.classData.methods.forEach(v=>{const L=v.getDisplayDetails();let W=L.displayText;b().flowchart.htmlLabels&&(W=W.replace(//g,">"));const N=f.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let $=N.getBBox();if(H(b().flowchart.htmlLabels)){const F=N.children[0],D=E(N);$=F.getBoundingClientRect(),D.attr("width",$.width),D.attr("height",$.height)}$.width>h&&(h=$.width),y+=$.height+i,A.push(N)}),y+=l,d){let v=(h-u.width)/2;E(x).attr("transform","translate( "+(-1*h/2+v)+", "+-1*y/2+")"),p=u.height+i}let nt=(h-C.width)/2;return E(B).attr("transform","translate( "+(-1*h/2+nt)+", "+(-1*y/2+p)+")"),p+=C.height+i,c.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+p).attr("y2",-y/2-a+l+p),p+=l,X.forEach(v=>{E(v).attr("transform","translate( "+-h/2+", "+(-1*y/2+p+l/2)+")");const L=v==null?void 0:v.getBBox();p+=((L==null?void 0:L.height)??0)+i}),p+=l,o.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+p).attr("y2",-y/2-a+l+p),p+=l,A.forEach(v=>{E(v).attr("transform","translate( "+-h/2+", "+(-1*y/2+p)+")");const L=v==null?void 0:v.getBBox();p+=((L==null?void 0:L.height)??0)+i}),n.attr("style",t.style).attr("class","outer title-state").attr("x",-h/2-a).attr("y",-(y/2)-a).attr("width",h+t.padding).attr("height",y+t.padding),m(t,n),t.intersect=function(v){return w.rect(t,v)},s},rt={rhombus:P,composite:zt,question:P,rect:Ut,labelRect:Zt,rectWithTitle:Gt,choice:Ht,circle:Qt,doublecircle:Vt,stadium:Ft,hexagon:It,block_arrow:Nt,rect_left_inv_arrow:Ot,lean_right:Wt,lean_left:Xt,trapezoid:Yt,inv_trapezoid:At,rect_right_inv_arrow:Dt,cylinder:jt,start:Jt,end:Kt,note:$t,subroutine:qt,fork:tt,join:tt,class_box:Pt};let Y={};const or=async(e,t,a)=>{let i,l;if(t.link){let r;b().securityLevel==="sandbox"?r="_top":t.linkTarget&&(r=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",r),l=await rt[t.shape](i,t,a)}else l=await rt[t.shape](e,t,a),i=l;return t.tooltip&&l.attr("title",t.tooltip),t.class&&l.attr("class","node default "+t.class),i.attr("data-node","true"),i.attr("data-id",t.id),Y[t.id]=i,t.haveCallback&&Y[t.id].attr("class",Y[t.id].attr("class")+" clickable"),i},yr=(e,t)=>{Y[t.id]=e},pr=()=>{Y={}},fr=e=>{const t=Y[e.id];g.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");const a=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-a)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},tr=({flowchart:e})=>{var t,a;const i=((t=e==null?void 0:e.subGraphTitleMargin)==null?void 0:t.top)??0,l=((a=e==null?void 0:e.subGraphTitleMargin)==null?void 0:a.bottom)??0,r=i+l;return{subGraphTitleTopMargin:i,subGraphTitleBottomMargin:l,subGraphTitleTotalMargin:r}},O={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function U(e,t){if(e===void 0||t===void 0)return{angle:0,deltaX:0,deltaY:0};e=Z(e),t=Z(t);const[a,i]=[e.x,e.y],[l,r]=[t.x,t.y],s=l-a,n=r-i;return{angle:Math.atan(n/s),deltaX:s,deltaY:n}}const Z=e=>Array.isArray(e)?{x:e[0],y:e[1]}:e,rr=e=>({x:function(t,a,i){let l=0;if(a===0&&Object.hasOwn(O,e.arrowTypeStart)){const{angle:r,deltaX:s}=U(i[0],i[1]);l=O[e.arrowTypeStart]*Math.cos(r)*(s>=0?1:-1)}else if(a===i.length-1&&Object.hasOwn(O,e.arrowTypeEnd)){const{angle:r,deltaX:s}=U(i[i.length-1],i[i.length-2]);l=O[e.arrowTypeEnd]*Math.cos(r)*(s>=0?1:-1)}return Z(t).x+l},y:function(t,a,i){let l=0;if(a===0&&Object.hasOwn(O,e.arrowTypeStart)){const{angle:r,deltaY:s}=U(i[0],i[1]);l=O[e.arrowTypeStart]*Math.abs(Math.sin(r))*(s>=0?1:-1)}else if(a===i.length-1&&Object.hasOwn(O,e.arrowTypeEnd)){const{angle:r,deltaY:s}=U(i[i.length-1],i[i.length-2]);l=O[e.arrowTypeEnd]*Math.abs(Math.sin(r))*(s>=0?1:-1)}return Z(t).y+l}}),ar=(e,t,a,i,l)=>{t.arrowTypeStart&&at(e,"start",t.arrowTypeStart,a,i,l),t.arrowTypeEnd&&at(e,"end",t.arrowTypeEnd,a,i,l)},er={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},at=(e,t,a,i,l,r)=>{const s=er[a];if(!s){g.warn(`Unknown arrow type: ${a}`);return}const n=t==="start"?"Start":"End";e.attr(`marker-${t}`,`url(${i}#${l}_${r}-${s}${n})`)};let G={},T={};const xr=()=>{G={},T={}},dr=(e,t)=>{const a=H(b().flowchart.htmlLabels),i=t.labelType==="markdown"?st(e,t.label,{style:t.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):R(t.label,t.labelStyle),l=e.insert("g").attr("class","edgeLabel"),r=l.insert("g").attr("class","label");r.node().appendChild(i);let s=i.getBBox();if(a){const c=i.children[0],o=E(i);s=c.getBoundingClientRect(),o.attr("width",s.width),o.attr("height",s.height)}r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),G[t.id]=l,t.width=s.width,t.height=s.height;let n;if(t.startLabelLeft){const c=R(t.startLabelLeft,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),T[t.id]||(T[t.id]={}),T[t.id].startLeft=o,z(n,t.startLabelLeft)}if(t.startLabelRight){const c=R(t.startLabelRight,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=o.node().appendChild(c),h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),T[t.id]||(T[t.id]={}),T[t.id].startRight=o,z(n,t.startLabelRight)}if(t.endLabelLeft){const c=R(t.endLabelLeft,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),o.node().appendChild(c),T[t.id]||(T[t.id]={}),T[t.id].endLeft=o,z(n,t.endLabelLeft)}if(t.endLabelRight){const c=R(t.endLabelRight,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),o.node().appendChild(c),T[t.id]||(T[t.id]={}),T[t.id].endRight=o,z(n,t.endLabelRight)}return i};function z(e,t){b().flowchart.htmlLabels&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}const gr=(e,t)=>{g.debug("Moving label abc88 ",e.id,e.label,G[e.id],t);let a=t.updatedPath?t.updatedPath:t.originalPath;const i=b(),{subGraphTitleTotalMargin:l}=tr(i);if(e.label){const r=G[e.id];let s=e.x,n=e.y;if(a){const c=j.calcLabelPosition(a);g.debug("Moving label "+e.label+" from (",s,",",n,") to (",c.x,",",c.y,") abc88"),t.updatedPath&&(s=c.x,n=c.y)}r.attr("transform",`translate(${s}, ${n+l/2})`)}if(e.startLabelLeft){const r=T[e.id].startLeft;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.startLabelRight){const r=T[e.id].startRight;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.endLabelLeft){const r=T[e.id].endLeft;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.endLabelRight){const r=T[e.id].endRight;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}},sr=(e,t)=>{const a=e.x,i=e.y,l=Math.abs(t.x-a),r=Math.abs(t.y-i),s=e.width/2,n=e.height/2;return l>=s||r>=n},ir=(e,t,a)=>{g.debug(`intersection calc abc89: +import{p as H,c as b,d as q,an as Q,h as E,l as g,z as j,ao as lt}from"../app.DRN3unl1.js";import{c as st}from"./createText-4a4f35c9.Cu3K6_Cl.js";import{l as ct}from"./line.DpDoeUQJ.js";const ht=(e,t,a,i)=>{t.forEach(l=>{wt[l](e,a,i)})},ot=(e,t,a)=>{g.trace("Making markers for ",a),e.append("defs").append("marker").attr("id",a+"_"+t+"-extensionStart").attr("class","marker extension "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},yt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-compositionStart").attr("class","marker composition "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},pt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},ft=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",a+"_"+t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},xt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-lollipopStart").attr("class","marker lollipop "+t).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),e.append("defs").append("marker").attr("id",a+"_"+t+"-lollipopEnd").attr("class","marker lollipop "+t).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},dt=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",6).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},gt=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},ut=(e,t,a)=>{e.append("marker").attr("id",a+"_"+t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",a+"_"+t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},bt=(e,t,a)=>{e.append("defs").append("marker").attr("id",a+"_"+t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},wt={extension:ot,composition:yt,aggregation:pt,dependency:ft,lollipop:xt,point:dt,circle:gt,cross:ut,barb:bt},hr=ht;function mt(e,t){t&&e.attr("style",t)}function kt(e){const t=E(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),a=t.append("xhtml:div"),i=e.label,l=e.isNode?"nodeLabel":"edgeLabel";return a.html('"+i+""),mt(a,e.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap"),a.attr("xmlns","http://www.w3.org/1999/xhtml"),t.node()}const vt=(e,t,a,i)=>{let l=e||"";if(typeof l=="object"&&(l=l[0]),H(b().flowchart.htmlLabels)){l=l.replace(/\\n|\n/g,"
"),g.debug("vertexText"+l);const r={isNode:i,label:Q(l).replace(/fa[blrs]?:fa-[\w-]+/g,n=>``),labelStyle:t.replace("fill:","color:")};return kt(r)}else{const r=document.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("style",t.replace("color:","fill:"));let s=[];typeof l=="string"?s=l.split(/\\n|\n|/gi):Array.isArray(l)?s=l:s=[];for(const n of s){const c=document.createElementNS("http://www.w3.org/2000/svg","tspan");c.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),c.setAttribute("dy","1em"),c.setAttribute("x","0"),a?c.setAttribute("class","title-row"):c.setAttribute("class","row"),c.textContent=n.trim(),r.appendChild(c)}return r}},R=vt,M=async(e,t,a,i)=>{let l;const r=t.useHtmlLabels||H(b().flowchart.htmlLabels);a?l=a:l="node default";const s=e.insert("g").attr("class",l).attr("id",t.domId||t.id),n=s.insert("g").attr("class","label").attr("style",t.labelStyle);let c;t.labelText===void 0?c="":c=typeof t.labelText=="string"?t.labelText:t.labelText[0];const o=n.node();let h;t.labelType==="markdown"?h=st(n,q(Q(c),b()),{useHtmlLabels:r,width:t.width||b().flowchart.wrappingWidth,classes:"markdown-node-label"}):h=o.appendChild(R(q(Q(c),b()),t.labelStyle,!1,i));let y=h.getBBox();const f=t.padding/2;if(H(b().flowchart.htmlLabels)){const p=h.children[0],d=E(h),k=p.getElementsByTagName("img");if(k){const x=c.replace(/]*>/g,"").trim()==="";await Promise.all([...k].map(u=>new Promise(S=>{function B(){if(u.style.display="flex",u.style.flexDirection="column",x){const C=b().fontSize?b().fontSize:window.getComputedStyle(document.body).fontSize,D=parseInt(C,10)*5+"px";u.style.minWidth=D,u.style.maxWidth=D}else u.style.width="100%";S(u)}setTimeout(()=>{u.complete&&B()}),u.addEventListener("error",B),u.addEventListener("load",B)})))}y=p.getBoundingClientRect(),d.attr("width",y.width),d.attr("height",y.height)}return r?n.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"):n.attr("transform","translate(0, "+-y.height/2+")"),t.centerLabel&&n.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),n.insert("rect",":first-child"),{shapeSvg:s,bbox:y,halfPadding:f,label:n}},m=(e,t)=>{const a=t.node().getBBox();e.width=a.width,e.height=a.height};function I(e,t,a,i){return e.insert("polygon",":first-child").attr("points",i.map(function(l){return l.x+","+l.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+a/2+")")}function Lt(e,t){return e.intersect(t)}function it(e,t,a,i){var l=e.x,r=e.y,s=l-i.x,n=r-i.y,c=Math.sqrt(t*t*n*n+a*a*s*s),o=Math.abs(t*a*s/c);i.x0}function Tt(e,t,a){var i=e.x,l=e.y,r=[],s=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY;typeof t.forEach=="function"?t.forEach(function(d){s=Math.min(s,d.x),n=Math.min(n,d.y)}):(s=Math.min(s,t.x),n=Math.min(n,t.y));for(var c=i-e.width/2-s,o=l-e.height/2-n,h=0;h1&&r.sort(function(d,k){var x=d.x-a.x,u=d.y-a.y,S=Math.sqrt(x*x+u*u),B=k.x-a.x,C=k.y-a.y,X=Math.sqrt(B*B+C*C);return S{var a=e.x,i=e.y,l=t.x-a,r=t.y-i,s=e.width/2,n=e.height/2,c,o;return Math.abs(r)*s>Math.abs(l)*n?(r<0&&(n=-n),c=r===0?0:n*l/r,o=n):(l<0&&(s=-s),c=s,o=l===0?0:s*r/l),{x:a+c,y:i+o}},Et=Bt,w={node:Lt,circle:St,ellipse:it,polygon:Tt,rect:Et},Ct=async(e,t)=>{t.useHtmlLabels||b().flowchart.htmlLabels||(t.centerLabel=!0);const{shapeSvg:i,bbox:l,halfPadding:r}=await M(e,t,"node "+t.classes,!0);g.info("Classes = ",t.classes);const s=i.insert("rect",":first-child");return s.attr("rx",t.rx).attr("ry",t.ry).attr("x",-l.width/2-r).attr("y",-l.height/2-r).attr("width",l.width+t.padding).attr("height",l.height+t.padding),m(t,s),t.intersect=function(n){return w.rect(t,n)},i},$t=Ct,_t=e=>{const t=new Set;for(const a of e)switch(a){case"x":t.add("right"),t.add("left");break;case"y":t.add("up"),t.add("down");break;default:t.add(a);break}return t},Rt=(e,t,a)=>{const i=_t(e),l=2,r=t.height+2*a.padding,s=r/l,n=t.width+2*s+a.padding,c=a.padding/2;return i.has("right")&&i.has("left")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:s,y:0},{x:n/2,y:2*c},{x:n-s,y:0},{x:n,y:0},{x:n,y:-r/3},{x:n+2*c,y:-r/2},{x:n,y:-2*r/3},{x:n,y:-r},{x:n-s,y:-r},{x:n/2,y:-r-2*c},{x:s,y:-r},{x:0,y:-r},{x:0,y:-2*r/3},{x:-2*c,y:-r/2},{x:0,y:-r/3}]:i.has("right")&&i.has("left")&&i.has("up")?[{x:s,y:0},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:s,y:-r},{x:0,y:-r/2}]:i.has("right")&&i.has("left")&&i.has("down")?[{x:0,y:0},{x:s,y:-r},{x:n-s,y:-r},{x:n,y:0}]:i.has("right")&&i.has("up")&&i.has("down")?[{x:0,y:0},{x:n,y:-s},{x:n,y:-r+s},{x:0,y:-r}]:i.has("left")&&i.has("up")&&i.has("down")?[{x:n,y:0},{x:0,y:-s},{x:0,y:-r+s},{x:n,y:-r}]:i.has("right")&&i.has("left")?[{x:s,y:0},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r},{x:0,y:-r/2}]:i.has("up")&&i.has("down")?[{x:n/2,y:0},{x:0,y:-c},{x:s,y:-c},{x:s,y:-r+c},{x:0,y:-r+c},{x:n/2,y:-r},{x:n,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c},{x:n,y:-c}]:i.has("right")&&i.has("up")?[{x:0,y:0},{x:n,y:-s},{x:0,y:-r}]:i.has("right")&&i.has("down")?[{x:0,y:0},{x:n,y:0},{x:0,y:-r}]:i.has("left")&&i.has("up")?[{x:n,y:0},{x:0,y:-s},{x:n,y:-r}]:i.has("left")&&i.has("down")?[{x:n,y:0},{x:0,y:0},{x:n,y:-r}]:i.has("right")?[{x:s,y:-c},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r+c}]:i.has("left")?[{x:s,y:0},{x:s,y:-c},{x:n-s,y:-c},{x:n-s,y:-r+c},{x:s,y:-r+c},{x:s,y:-r},{x:0,y:-r/2}]:i.has("up")?[{x:s,y:-c},{x:s,y:-r+c},{x:0,y:-r+c},{x:n/2,y:-r},{x:n,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c}]:i.has("down")?[{x:n/2,y:0},{x:0,y:-c},{x:s,y:-c},{x:s,y:-r+c},{x:n-s,y:-r+c},{x:n-s,y:-c},{x:n,y:-c}]:[{x:0,y:0}]},K=e=>e?" "+e:"",_=(e,t)=>`node default${K(e.classes)} ${K(e.class)}`,P=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=l+r,n=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];g.info("Question main (Circle)");const c=I(a,s,s,n);return c.attr("style",t.style),m(t,c),t.intersect=function(o){return g.warn("Intersect called"),w.polygon(t,n,o)},a},Ht=(e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=28,l=[{x:0,y:i/2},{x:i/2,y:0},{x:0,y:-i/2},{x:-i/2,y:0}];return a.insert("polygon",":first-child").attr("points",l.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),t.width=28,t.height=28,t.intersect=function(s){return w.circle(t,14,s)},a},It=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=4,r=i.height+t.padding,s=r/l,n=i.width+2*s+t.padding,c=[{x:s,y:0},{x:n-s,y:0},{x:n,y:-r/2},{x:n-s,y:-r},{x:s,y:-r},{x:0,y:-r/2}],o=I(a,n,r,c);return o.attr("style",t.style),m(t,o),t.intersect=function(h){return w.polygon(t,c,h)},a},Nt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,void 0,!0),l=2,r=i.height+2*t.padding,s=r/l,n=i.width+2*s+t.padding,c=Rt(t.directions,i,t),o=I(a,n,r,c);return o.attr("style",t.style),m(t,o),t.intersect=function(h){return w.polygon(t,c,h)},a},Ot=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-r/2,y:0},{x:l,y:0},{x:l,y:-r},{x:-r/2,y:-r},{x:0,y:-r/2}];return I(a,l,r,s).attr("style",t.style),t.width=l+r,t.height=r,t.intersect=function(c){return w.polygon(t,s,c)},a},Wt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-2*r/6,y:0},{x:l-r/6,y:0},{x:l+2*r/6,y:-r},{x:r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Xt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:2*r/6,y:0},{x:l+r/6,y:0},{x:l-2*r/6,y:-r},{x:-r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Yt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:-2*r/6,y:0},{x:l+2*r/6,y:0},{x:l-r/6,y:-r},{x:r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Dt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:r/6,y:0},{x:l-r/6,y:0},{x:l+2*r/6,y:-r},{x:-2*r/6,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},At=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:0,y:0},{x:l+r/2,y:0},{x:l,y:-r/2},{x:l+r/2,y:-r},{x:0,y:-r}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},jt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=l/2,s=r/(2.5+l/50),n=i.height+s+t.padding,c="M 0,"+s+" a "+r+","+s+" 0,0,0 "+l+" 0 a "+r+","+s+" 0,0,0 "+-l+" 0 l 0,"+n+" a "+r+","+s+" 0,0,0 "+l+" 0 l 0,"+-n,o=a.attr("label-offset-y",s).insert("path",":first-child").attr("style",t.style).attr("d",c).attr("transform","translate("+-l/2+","+-(n/2+s)+")");return m(t,o),t.intersect=function(h){const y=w.rect(t,h),f=y.x-t.x;if(r!=0&&(Math.abs(f)t.height/2-s)){let p=s*s*(1-f*f/(r*r));p!=0&&(p=Math.sqrt(p)),p=s-p,h.y-t.y>0&&(p=-p),y.y+=p}return y},a},Ut=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,"node "+t.classes+" "+t.class,!0),r=a.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,c=t.positioned?-s/2:-i.width/2-l,o=t.positioned?-n/2:-i.height/2-l;if(r.attr("class","basic label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",c).attr("y",o).attr("width",s).attr("height",n),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(V(r,t.props.borders,s,n),h.delete("borders")),h.forEach(y=>{g.warn(`Unknown node property ${y}`)})}return m(t,r),t.intersect=function(h){return w.rect(t,h)},a},zt=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,"node "+t.classes,!0),r=a.insert("rect",":first-child"),s=t.positioned?t.width:i.width+t.padding,n=t.positioned?t.height:i.height+t.padding,c=t.positioned?-s/2:-i.width/2-l,o=t.positioned?-n/2:-i.height/2-l;if(r.attr("class","basic cluster composite label-container").attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",c).attr("y",o).attr("width",s).attr("height",n),t.props){const h=new Set(Object.keys(t.props));t.props.borders&&(V(r,t.props.borders,s,n),h.delete("borders")),h.forEach(y=>{g.warn(`Unknown node property ${y}`)})}return m(t,r),t.intersect=function(h){return w.rect(t,h)},a},Zt=async(e,t)=>{const{shapeSvg:a}=await M(e,t,"label",!0);g.trace("Classes = ",t.class);const i=a.insert("rect",":first-child"),l=0,r=0;if(i.attr("width",l).attr("height",r),a.attr("class","label edgeLabel"),t.props){const s=new Set(Object.keys(t.props));t.props.borders&&(V(i,t.props.borders,l,r),s.delete("borders")),s.forEach(n=>{g.warn(`Unknown node property ${n}`)})}return m(t,i),t.intersect=function(s){return w.rect(t,s)},a};function V(e,t,a,i){const l=[],r=n=>{l.push(n,0)},s=n=>{l.push(0,n)};t.includes("t")?(g.debug("add top border"),r(a)):s(a),t.includes("r")?(g.debug("add right border"),r(i)):s(i),t.includes("b")?(g.debug("add bottom border"),r(a)):s(a),t.includes("l")?(g.debug("add left border"),r(i)):s(i),e.attr("stroke-dasharray",l.join(" "))}const Gt=(e,t)=>{let a;t.classes?a="node "+t.classes:a="node default";const i=e.insert("g").attr("class",a).attr("id",t.domId||t.id),l=i.insert("rect",":first-child"),r=i.insert("line"),s=i.insert("g").attr("class","label"),n=t.labelText.flat?t.labelText.flat():t.labelText;let c="";typeof n=="object"?c=n[0]:c=n,g.info("Label text abc79",c,n,typeof n=="object");const o=s.node().appendChild(R(c,t.labelStyle,!0,!0));let h={width:0,height:0};if(H(b().flowchart.htmlLabels)){const k=o.children[0],x=E(o);h=k.getBoundingClientRect(),x.attr("width",h.width),x.attr("height",h.height)}g.info("Text 2",n);const y=n.slice(1,n.length);let f=o.getBBox();const p=s.node().appendChild(R(y.join?y.join("
"):y,t.labelStyle,!0,!0));if(H(b().flowchart.htmlLabels)){const k=p.children[0],x=E(p);h=k.getBoundingClientRect(),x.attr("width",h.width),x.attr("height",h.height)}const d=t.padding/2;return E(p).attr("transform","translate( "+(h.width>f.width?0:(f.width-h.width)/2)+", "+(f.height+d+5)+")"),E(o).attr("transform","translate( "+(h.width{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.height+t.padding,r=i.width+l/4+t.padding,s=a.insert("rect",":first-child").attr("style",t.style).attr("rx",l/2).attr("ry",l/2).attr("x",-r/2).attr("y",-l/2).attr("width",r).attr("height",l);return m(t,s),t.intersect=function(n){return w.rect(t,n)},a},Qt=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,_(t),!0),r=a.insert("circle",":first-child");return r.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),g.info("Circle main"),m(t,r),t.intersect=function(s){return g.info("Circle intersect",t,i.width/2+l,s),w.circle(t,i.width/2+l,s)},a},Vt=async(e,t)=>{const{shapeSvg:a,bbox:i,halfPadding:l}=await M(e,t,_(t),!0),r=5,s=a.insert("g",":first-child"),n=s.insert("circle"),c=s.insert("circle");return s.attr("class",t.class),n.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l+r).attr("width",i.width+t.padding+r*2).attr("height",i.height+t.padding+r*2),c.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("r",i.width/2+l).attr("width",i.width+t.padding).attr("height",i.height+t.padding),g.info("DoubleCircle main"),m(t,n),t.intersect=function(o){return g.info("DoubleCircle intersect",t,i.width/2+l+r,o),w.circle(t,i.width/2+l+r,o)},a},qt=async(e,t)=>{const{shapeSvg:a,bbox:i}=await M(e,t,_(t),!0),l=i.width+t.padding,r=i.height+t.padding,s=[{x:0,y:0},{x:l,y:0},{x:l,y:-r},{x:0,y:-r},{x:0,y:0},{x:-8,y:0},{x:l+8,y:0},{x:l+8,y:-r},{x:-8,y:-r},{x:-8,y:0}],n=I(a,l,r,s);return n.attr("style",t.style),m(t,n),t.intersect=function(c){return w.polygon(t,s,c)},a},Jt=(e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),m(t,i),t.intersect=function(l){return w.circle(t,7,l)},a},tt=(e,t,a)=>{const i=e.insert("g").attr("class","node default").attr("id",t.domId||t.id);let l=70,r=10;a==="LR"&&(l=10,r=70);const s=i.append("rect").attr("x",-1*l/2).attr("y",-1*r/2).attr("width",l).attr("height",r).attr("class","fork-join");return m(t,s),t.height=t.height+t.padding/2,t.width=t.width+t.padding/2,t.intersect=function(n){return w.rect(t,n)},i},Kt=(e,t)=>{const a=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),i=a.insert("circle",":first-child"),l=a.insert("circle",":first-child");return l.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),i.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),m(t,l),t.intersect=function(r){return w.circle(t,7,r)},a},Pt=(e,t)=>{const a=t.padding/2,i=4,l=8;let r;t.classes?r="node "+t.classes:r="node default";const s=e.insert("g").attr("class",r).attr("id",t.domId||t.id),n=s.insert("rect",":first-child"),c=s.insert("line"),o=s.insert("line");let h=0,y=i;const f=s.insert("g").attr("class","label");let p=0;const d=t.classData.annotations&&t.classData.annotations[0],k=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",x=f.node().appendChild(R(k,t.labelStyle,!0,!0));let u=x.getBBox();if(H(b().flowchart.htmlLabels)){const v=x.children[0],L=E(x);u=v.getBoundingClientRect(),L.attr("width",u.width),L.attr("height",u.height)}t.classData.annotations[0]&&(y+=u.height+i,h+=u.width);let S=t.classData.label;t.classData.type!==void 0&&t.classData.type!==""&&(b().flowchart.htmlLabels?S+="<"+t.classData.type+">":S+="<"+t.classData.type+">");const B=f.node().appendChild(R(S,t.labelStyle,!0,!0));E(B).attr("class","classTitle");let C=B.getBBox();if(H(b().flowchart.htmlLabels)){const v=B.children[0],L=E(B);C=v.getBoundingClientRect(),L.attr("width",C.width),L.attr("height",C.height)}y+=C.height+i,C.width>h&&(h=C.width);const X=[];t.classData.members.forEach(v=>{const L=v.getDisplayDetails();let W=L.displayText;b().flowchart.htmlLabels&&(W=W.replace(//g,">"));const N=f.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let $=N.getBBox();if(H(b().flowchart.htmlLabels)){const F=N.children[0],A=E(N);$=F.getBoundingClientRect(),A.attr("width",$.width),A.attr("height",$.height)}$.width>h&&(h=$.width),y+=$.height+i,X.push(N)}),y+=l;const D=[];if(t.classData.methods.forEach(v=>{const L=v.getDisplayDetails();let W=L.displayText;b().flowchart.htmlLabels&&(W=W.replace(//g,">"));const N=f.node().appendChild(R(W,L.cssStyle?L.cssStyle:t.labelStyle,!0,!0));let $=N.getBBox();if(H(b().flowchart.htmlLabels)){const F=N.children[0],A=E(N);$=F.getBoundingClientRect(),A.attr("width",$.width),A.attr("height",$.height)}$.width>h&&(h=$.width),y+=$.height+i,D.push(N)}),y+=l,d){let v=(h-u.width)/2;E(x).attr("transform","translate( "+(-1*h/2+v)+", "+-1*y/2+")"),p=u.height+i}let nt=(h-C.width)/2;return E(B).attr("transform","translate( "+(-1*h/2+nt)+", "+(-1*y/2+p)+")"),p+=C.height+i,c.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+p).attr("y2",-y/2-a+l+p),p+=l,X.forEach(v=>{E(v).attr("transform","translate( "+-h/2+", "+(-1*y/2+p+l/2)+")");const L=v==null?void 0:v.getBBox();p+=((L==null?void 0:L.height)??0)+i}),p+=l,o.attr("class","divider").attr("x1",-h/2-a).attr("x2",h/2+a).attr("y1",-y/2-a+l+p).attr("y2",-y/2-a+l+p),p+=l,D.forEach(v=>{E(v).attr("transform","translate( "+-h/2+", "+(-1*y/2+p)+")");const L=v==null?void 0:v.getBBox();p+=((L==null?void 0:L.height)??0)+i}),n.attr("style",t.style).attr("class","outer title-state").attr("x",-h/2-a).attr("y",-(y/2)-a).attr("width",h+t.padding).attr("height",y+t.padding),m(t,n),t.intersect=function(v){return w.rect(t,v)},s},rt={rhombus:P,composite:zt,question:P,rect:Ut,labelRect:Zt,rectWithTitle:Gt,choice:Ht,circle:Qt,doublecircle:Vt,stadium:Ft,hexagon:It,block_arrow:Nt,rect_left_inv_arrow:Ot,lean_right:Wt,lean_left:Xt,trapezoid:Yt,inv_trapezoid:Dt,rect_right_inv_arrow:At,cylinder:jt,start:Jt,end:Kt,note:$t,subroutine:qt,fork:tt,join:tt,class_box:Pt};let Y={};const or=async(e,t,a)=>{let i,l;if(t.link){let r;b().securityLevel==="sandbox"?r="_top":t.linkTarget&&(r=t.linkTarget||"_blank"),i=e.insert("svg:a").attr("xlink:href",t.link).attr("target",r),l=await rt[t.shape](i,t,a)}else l=await rt[t.shape](e,t,a),i=l;return t.tooltip&&l.attr("title",t.tooltip),t.class&&l.attr("class","node default "+t.class),i.attr("data-node","true"),i.attr("data-id",t.id),Y[t.id]=i,t.haveCallback&&Y[t.id].attr("class",Y[t.id].attr("class")+" clickable"),i},yr=(e,t)=>{Y[t.id]=e},pr=()=>{Y={}},fr=e=>{const t=Y[e.id];g.trace("Transforming node",e.diff,e,"translate("+(e.x-e.width/2-5)+", "+e.width/2+")");const a=8,i=e.diff||0;return e.clusterNode?t.attr("transform","translate("+(e.x+i-e.width/2)+", "+(e.y-e.height/2-a)+")"):t.attr("transform","translate("+e.x+", "+e.y+")"),i},tr=({flowchart:e})=>{var t,a;const i=((t=e==null?void 0:e.subGraphTitleMargin)==null?void 0:t.top)??0,l=((a=e==null?void 0:e.subGraphTitleMargin)==null?void 0:a.bottom)??0,r=i+l;return{subGraphTitleTopMargin:i,subGraphTitleBottomMargin:l,subGraphTitleTotalMargin:r}},O={aggregation:18,extension:18,composition:18,dependency:6,lollipop:13.5,arrow_point:5.3};function U(e,t){if(e===void 0||t===void 0)return{angle:0,deltaX:0,deltaY:0};e=Z(e),t=Z(t);const[a,i]=[e.x,e.y],[l,r]=[t.x,t.y],s=l-a,n=r-i;return{angle:Math.atan(n/s),deltaX:s,deltaY:n}}const Z=e=>Array.isArray(e)?{x:e[0],y:e[1]}:e,rr=e=>({x:function(t,a,i){let l=0;if(a===0&&Object.hasOwn(O,e.arrowTypeStart)){const{angle:r,deltaX:s}=U(i[0],i[1]);l=O[e.arrowTypeStart]*Math.cos(r)*(s>=0?1:-1)}else if(a===i.length-1&&Object.hasOwn(O,e.arrowTypeEnd)){const{angle:r,deltaX:s}=U(i[i.length-1],i[i.length-2]);l=O[e.arrowTypeEnd]*Math.cos(r)*(s>=0?1:-1)}return Z(t).x+l},y:function(t,a,i){let l=0;if(a===0&&Object.hasOwn(O,e.arrowTypeStart)){const{angle:r,deltaY:s}=U(i[0],i[1]);l=O[e.arrowTypeStart]*Math.abs(Math.sin(r))*(s>=0?1:-1)}else if(a===i.length-1&&Object.hasOwn(O,e.arrowTypeEnd)){const{angle:r,deltaY:s}=U(i[i.length-1],i[i.length-2]);l=O[e.arrowTypeEnd]*Math.abs(Math.sin(r))*(s>=0?1:-1)}return Z(t).y+l}}),ar=(e,t,a,i,l)=>{t.arrowTypeStart&&at(e,"start",t.arrowTypeStart,a,i,l),t.arrowTypeEnd&&at(e,"end",t.arrowTypeEnd,a,i,l)},er={arrow_cross:"cross",arrow_point:"point",arrow_barb:"barb",arrow_circle:"circle",aggregation:"aggregation",extension:"extension",composition:"composition",dependency:"dependency",lollipop:"lollipop"},at=(e,t,a,i,l,r)=>{const s=er[a];if(!s){g.warn(`Unknown arrow type: ${a}`);return}const n=t==="start"?"Start":"End";e.attr(`marker-${t}`,`url(${i}#${l}_${r}-${s}${n})`)};let G={},T={};const xr=()=>{G={},T={}},dr=(e,t)=>{const a=H(b().flowchart.htmlLabels),i=t.labelType==="markdown"?st(e,t.label,{style:t.labelStyle,useHtmlLabels:a,addSvgBackground:!0}):R(t.label,t.labelStyle),l=e.insert("g").attr("class","edgeLabel"),r=l.insert("g").attr("class","label");r.node().appendChild(i);let s=i.getBBox();if(a){const c=i.children[0],o=E(i);s=c.getBoundingClientRect(),o.attr("width",s.width),o.attr("height",s.height)}r.attr("transform","translate("+-s.width/2+", "+-s.height/2+")"),G[t.id]=l,t.width=s.width,t.height=s.height;let n;if(t.startLabelLeft){const c=R(t.startLabelLeft,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),T[t.id]||(T[t.id]={}),T[t.id].startLeft=o,z(n,t.startLabelLeft)}if(t.startLabelRight){const c=R(t.startLabelRight,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=o.node().appendChild(c),h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),T[t.id]||(T[t.id]={}),T[t.id].startRight=o,z(n,t.startLabelRight)}if(t.endLabelLeft){const c=R(t.endLabelLeft,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),o.node().appendChild(c),T[t.id]||(T[t.id]={}),T[t.id].endLeft=o,z(n,t.endLabelLeft)}if(t.endLabelRight){const c=R(t.endLabelRight,t.labelStyle),o=e.insert("g").attr("class","edgeTerminals"),h=o.insert("g").attr("class","inner");n=h.node().appendChild(c);const y=c.getBBox();h.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),o.node().appendChild(c),T[t.id]||(T[t.id]={}),T[t.id].endRight=o,z(n,t.endLabelRight)}return i};function z(e,t){b().flowchart.htmlLabels&&e&&(e.style.width=t.length*9+"px",e.style.height="12px")}const gr=(e,t)=>{g.debug("Moving label abc88 ",e.id,e.label,G[e.id],t);let a=t.updatedPath?t.updatedPath:t.originalPath;const i=b(),{subGraphTitleTotalMargin:l}=tr(i);if(e.label){const r=G[e.id];let s=e.x,n=e.y;if(a){const c=j.calcLabelPosition(a);g.debug("Moving label "+e.label+" from (",s,",",n,") to (",c.x,",",c.y,") abc88"),t.updatedPath&&(s=c.x,n=c.y)}r.attr("transform",`translate(${s}, ${n+l/2})`)}if(e.startLabelLeft){const r=T[e.id].startLeft;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_left",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.startLabelRight){const r=T[e.id].startRight;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeStart?10:0,"start_right",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.endLabelLeft){const r=T[e.id].endLeft;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_left",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}if(e.endLabelRight){const r=T[e.id].endRight;let s=e.x,n=e.y;if(a){const c=j.calcTerminalLabelPosition(e.arrowTypeEnd?10:0,"end_right",a);s=c.x,n=c.y}r.attr("transform",`translate(${s}, ${n})`)}},sr=(e,t)=>{const a=e.x,i=e.y,l=Math.abs(t.x-a),r=Math.abs(t.y-i),s=e.width/2,n=e.height/2;return l>=s||r>=n},ir=(e,t,a)=>{g.debug(`intersection calc abc89: outsidePoint: ${JSON.stringify(t)} insidePoint : ${JSON.stringify(a)} node : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);const i=e.x,l=e.y,r=Math.abs(i-a.x),s=e.width/2;let n=a.xMath.abs(i-t.x)*c){let y=a.y{g.debug("abc88 cutPathAtIntersect",e,t);let a=[],i=e[0],l=!1;return e.forEach(r=>{if(!sr(t,r)&&!l){const s=ir(t,i,r);let n=!1;a.forEach(c=>{n=n||c.x===s.x&&c.y===s.y}),a.some(c=>c.x===s.x&&c.y===s.y)||a.push(s),l=!0}else i=r,l||a.push(r)}),a},ur=function(e,t,a,i,l,r,s){let n=a.points;g.debug("abc88 InsertEdge: edge=",a,"e=",t);let c=!1;const o=r.node(t.v);var h=r.node(t.w);h!=null&&h.intersect&&(o!=null&&o.intersect)&&(n=n.slice(1,a.points.length-1),n.unshift(o.intersect(n[0])),n.push(h.intersect(n[n.length-1]))),a.toCluster&&(g.debug("to cluster abc88",i[a.toCluster]),n=et(a.points,i[a.toCluster].node),c=!0),a.fromCluster&&(g.debug("from cluster abc88",i[a.fromCluster]),n=et(n.reverse(),i[a.fromCluster].node).reverse(),c=!0);const y=n.filter(C=>!Number.isNaN(C.y));let f=lt;a.curve&&(l==="graph"||l==="flowchart")&&(f=a.curve);const{x:p,y:d}=rr(a),k=ct().x(p).y(d).curve(f);let x;switch(a.thickness){case"normal":x="edge-thickness-normal";break;case"thick":x="edge-thickness-thick";break;case"invisible":x="edge-thickness-thick";break;default:x=""}switch(a.pattern){case"solid":x+=" edge-pattern-solid";break;case"dotted":x+=" edge-pattern-dotted";break;case"dashed":x+=" edge-pattern-dashed";break}const u=e.append("path").attr("d",k(y)).attr("id",a.id).attr("class"," "+x+(a.classes?" "+a.classes:"")).attr("style",a.style);let S="";(b().flowchart.arrowMarkerAbsolute||b().state.arrowMarkerAbsolute)&&(S=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,S=S.replace(/\(/g,"\\("),S=S.replace(/\)/g,"\\)")),ar(u,a,S,s,l);let B={};return c&&(B.updatedPath=n),B.originalPath=a.points,B};export{or as a,dr as b,ur as c,gr as d,pr as e,xr as f,tr as g,R as h,hr as i,Et as j,rr as k,M as l,ar as m,fr as p,yr as s,m as u}; diff --git a/assets/chunks/erDiagram-09d1c15f.vOHorcgg.js b/assets/chunks/erDiagram-51d2b61e.BKvP5nV4.js similarity index 95% rename from assets/chunks/erDiagram-09d1c15f.vOHorcgg.js rename to assets/chunks/erDiagram-51d2b61e.BKvP5nV4.js index 2f15b49f..a1cd7df1 100644 --- a/assets/chunks/erDiagram-09d1c15f.vOHorcgg.js +++ b/assets/chunks/erDiagram-51d2b61e.BKvP5nV4.js @@ -1,9 +1,9 @@ -import{c as Z,s as Et,g as mt,b as gt,a as kt,E as xt,F as Rt,l as V,G as Ot,h as rt,A as bt,i as Nt,ap as Tt,ar as At}from"../app.CbQoAe_D.js";import{G as Mt}from"./graph.CwfrPCLx.js";import{l as St}from"./layout.Ds1muZd1.js";import{l as wt}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const It=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Dt(t){return typeof t=="string"&&It.test(t)}const A=[];for(let t=0;t<256;++t)A.push((t+256).toString(16).slice(1));function vt(t,e=0){return A[t[e+0]]+A[t[e+1]]+A[t[e+2]]+A[t[e+3]]+"-"+A[t[e+4]]+A[t[e+5]]+"-"+A[t[e+6]]+A[t[e+7]]+"-"+A[t[e+8]]+A[t[e+9]]+"-"+A[t[e+10]]+A[t[e+11]]+A[t[e+12]]+A[t[e+13]]+A[t[e+14]]+A[t[e+15]]}function Lt(t){if(!Dt(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}function Bt(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>32-e}function Ft(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const f=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;x=g,g=m,m=it(_,30)>>>0,_=h,h=I}r[0]=r[0]+h>>>0,r[1]=r[1]+_>>>0,r[2]=r[2]+m>>>0,r[3]=r[3]+g>>>0,r[4]=r[4]+x>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}const Wt=Yt("v5",80,Ft);var at=function(){var t=function(S,a,n,c){for(n=n||{},c=S.length;c--;n[S[c]]=a);return n},e=[6,8,10,20,22,24,26,27,28],r=[1,10],u=[1,11],l=[1,12],p=[1,13],f=[1,14],o=[1,15],h=[1,21],_=[1,22],m=[1,23],g=[1,24],x=[1,25],y=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],N=[1,34],I=[27,28,46,47],F=[41,42,43,44,45],W=[17,34],C=[1,54],T=[1,53],M=[17,34,36,38],R={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(a,n,c,d,E,i,K){var s=i.length-1;switch(E){case 1:break;case 2:this.$=[];break;case 3:i[s-1].push(i[s]),this.$=i[s-1];break;case 4:case 5:this.$=i[s];break;case 6:case 7:this.$=[];break;case 8:d.addEntity(i[s-4]),d.addEntity(i[s-2]),d.addRelationship(i[s-4],i[s],i[s-2],i[s-3]);break;case 9:d.addEntity(i[s-3]),d.addAttributes(i[s-3],i[s-1]);break;case 10:d.addEntity(i[s-2]);break;case 11:d.addEntity(i[s]);break;case 12:d.addEntity(i[s-6],i[s-4]),d.addAttributes(i[s-6],i[s-1]);break;case 13:d.addEntity(i[s-5],i[s-3]);break;case 14:d.addEntity(i[s-3],i[s-1]);break;case 15:case 16:this.$=i[s].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=i[s].trim(),d.setAccDescription(this.$);break;case 19:case 43:this.$=i[s];break;case 20:case 41:case 42:this.$=i[s].replace(/"/g,"");break;case 21:case 29:this.$=[i[s]];break;case 22:i[s].push(i[s-1]),this.$=i[s];break;case 23:this.$={attributeType:i[s-1],attributeName:i[s]};break;case 24:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeKeyTypeList:i[s]};break;case 25:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeComment:i[s]};break;case 26:this.$={attributeType:i[s-3],attributeName:i[s-2],attributeKeyTypeList:i[s-1],attributeComment:i[s]};break;case 27:case 28:case 31:this.$=i[s];break;case 30:i[s-2].push(i[s]),this.$=i[s-2];break;case 32:this.$=i[s].replace(/"/g,"");break;case 33:this.$={cardA:i[s],relType:i[s-1],cardB:i[s-2]};break;case 34:this.$=d.Cardinality.ZERO_OR_ONE;break;case 35:this.$=d.Cardinality.ZERO_OR_MORE;break;case 36:this.$=d.Cardinality.ONE_OR_MORE;break;case 37:this.$=d.Cardinality.ONLY_ONE;break;case 38:this.$=d.Cardinality.MD_PARENT;break;case 39:this.$=d.Identification.NON_IDENTIFYING;break;case 40:this.$=d.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:h,42:_,43:m,44:g,45:x}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(y,[2,19]),t(y,[2,20]),t(e,[2,4]),{11:29,27:f,28:o},{16:30,17:[1,31],29:32,30:33,34:N},{11:35,27:f,28:o},{40:36,46:[1,37],47:[1,38]},t(I,[2,34]),t(I,[2,35]),t(I,[2,36]),t(I,[2,37]),t(I,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:N},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:h,42:_,43:m,44:g,45:x},t(F,[2,39]),t(F,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(W,[2,23],{32:50,33:51,35:52,37:C,38:T}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(W,[2,24],{33:56,36:[1,57],38:T}),t(W,[2,25]),t(M,[2,29]),t(W,[2,32]),t(M,[2,31]),{16:58,17:[1,59],29:32,30:33,34:N},t(W,[2,26]),{35:60,37:C},{17:[1,61]},t(e,[2,13]),t(M,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(a,n){if(n.recoverable)this.trace(a);else{var c=new Error(a);throw c.hash=n,c}},parse:function(a){var n=this,c=[0],d=[],E=[null],i=[],K=this.table,s="",Q=0,st=0,ft=2,ot=1,yt=i.slice.call(arguments,1),b=Object.create(this.lexer),G={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(G.yy[J]=this.yy[J]);b.setInput(a,G.yy),G.yy.lexer=b,G.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var $=b.yylloc;i.push($);var pt=b.options&&b.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _t(){var Y;return Y=d.pop()||b.lex()||ot,typeof Y!="number"&&(Y instanceof Array&&(d=Y,Y=d.pop()),Y=n.symbols_[Y]||Y),Y}for(var w,H,D,tt,z={},j,P,lt,q;;){if(H=c[c.length-1],this.defaultActions[H]?D=this.defaultActions[H]:((w===null||typeof w>"u")&&(w=_t()),D=K[H]&&K[H][w]),typeof D>"u"||!D.length||!D[0]){var et="";q=[];for(j in K[H])this.terminals_[j]&&j>ft&&q.push("'"+this.terminals_[j]+"'");b.showPosition?et="Parse error on line "+(Q+1)+`: +import{c as Z,s as Et,g as mt,b as gt,a as kt,x as xt,y as Rt,l as V,A as Ot,h as rt,z as bt,i as Nt,ao as Tt,ar as At}from"../app.DRN3unl1.js";import{G as Mt}from"./graph.C4kgFXP1.js";import{l as St}from"./layout.C5Nv6jKv.js";import{l as wt}from"./line.DpDoeUQJ.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const It=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Dt(t){return typeof t=="string"&&It.test(t)}const A=[];for(let t=0;t<256;++t)A.push((t+256).toString(16).slice(1));function vt(t,e=0){return A[t[e+0]]+A[t[e+1]]+A[t[e+2]]+A[t[e+3]]+"-"+A[t[e+4]]+A[t[e+5]]+"-"+A[t[e+6]]+A[t[e+7]]+"-"+A[t[e+8]]+A[t[e+9]]+"-"+A[t[e+10]]+A[t[e+11]]+A[t[e+12]]+A[t[e+13]]+A[t[e+14]]+A[t[e+15]]}function Lt(t){if(!Dt(t))throw TypeError("Invalid UUID");let e;const r=new Uint8Array(16);return r[0]=(e=parseInt(t.slice(0,8),16))>>>24,r[1]=e>>>16&255,r[2]=e>>>8&255,r[3]=e&255,r[4]=(e=parseInt(t.slice(9,13),16))>>>8,r[5]=e&255,r[6]=(e=parseInt(t.slice(14,18),16))>>>8,r[7]=e&255,r[8]=(e=parseInt(t.slice(19,23),16))>>>8,r[9]=e&255,r[10]=(e=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=e/4294967296&255,r[12]=e>>>24&255,r[13]=e>>>16&255,r[14]=e>>>8&255,r[15]=e&255,r}function Bt(t){t=unescape(encodeURIComponent(t));const e=[];for(let r=0;r>>32-e}function Ft(t){const e=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const f=unescape(encodeURIComponent(t));t=[];for(let o=0;o>>0;x=g,g=m,m=it(_,30)>>>0,_=h,h=I}r[0]=r[0]+h>>>0,r[1]=r[1]+_>>>0,r[2]=r[2]+m>>>0,r[3]=r[3]+g>>>0,r[4]=r[4]+x>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}const Wt=Yt("v5",80,Ft);var at=function(){var t=function(S,a,n,c){for(n=n||{},c=S.length;c--;n[S[c]]=a);return n},e=[6,8,10,20,22,24,26,27,28],r=[1,10],u=[1,11],l=[1,12],p=[1,13],f=[1,14],o=[1,15],h=[1,21],_=[1,22],m=[1,23],g=[1,24],x=[1,25],y=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],N=[1,34],I=[27,28,46,47],F=[41,42,43,44,45],W=[17,34],C=[1,54],T=[1,53],M=[17,34,36,38],R={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,":":13,role:14,BLOCK_START:15,attributes:16,BLOCK_STOP:17,SQS:18,SQE:19,title:20,title_value:21,acc_title:22,acc_title_value:23,acc_descr:24,acc_descr_value:25,acc_descr_multiline_value:26,ALPHANUM:27,ENTITY_NAME:28,attribute:29,attributeType:30,attributeName:31,attributeKeyTypeList:32,attributeComment:33,ATTRIBUTE_WORD:34,attributeKeyType:35,COMMA:36,ATTRIBUTE_KEY:37,COMMENT:38,cardinality:39,relType:40,ZERO_OR_ONE:41,ZERO_OR_MORE:42,ONE_OR_MORE:43,ONLY_ONE:44,MD_PARENT:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:":",15:"BLOCK_START",17:"BLOCK_STOP",18:"SQS",19:"SQE",20:"title",21:"title_value",22:"acc_title",23:"acc_title_value",24:"acc_descr",25:"acc_descr_value",26:"acc_descr_multiline_value",27:"ALPHANUM",28:"ENTITY_NAME",34:"ATTRIBUTE_WORD",36:"COMMA",37:"ATTRIBUTE_KEY",38:"COMMENT",41:"ZERO_OR_ONE",42:"ZERO_OR_MORE",43:"ONE_OR_MORE",44:"ONLY_ONE",45:"MD_PARENT",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],performAction:function(a,n,c,d,E,i,K){var s=i.length-1;switch(E){case 1:break;case 2:this.$=[];break;case 3:i[s-1].push(i[s]),this.$=i[s-1];break;case 4:case 5:this.$=i[s];break;case 6:case 7:this.$=[];break;case 8:d.addEntity(i[s-4]),d.addEntity(i[s-2]),d.addRelationship(i[s-4],i[s],i[s-2],i[s-3]);break;case 9:d.addEntity(i[s-3]),d.addAttributes(i[s-3],i[s-1]);break;case 10:d.addEntity(i[s-2]);break;case 11:d.addEntity(i[s]);break;case 12:d.addEntity(i[s-6],i[s-4]),d.addAttributes(i[s-6],i[s-1]);break;case 13:d.addEntity(i[s-5],i[s-3]);break;case 14:d.addEntity(i[s-3],i[s-1]);break;case 15:case 16:this.$=i[s].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=i[s].trim(),d.setAccDescription(this.$);break;case 19:case 43:this.$=i[s];break;case 20:case 41:case 42:this.$=i[s].replace(/"/g,"");break;case 21:case 29:this.$=[i[s]];break;case 22:i[s].push(i[s-1]),this.$=i[s];break;case 23:this.$={attributeType:i[s-1],attributeName:i[s]};break;case 24:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeKeyTypeList:i[s]};break;case 25:this.$={attributeType:i[s-2],attributeName:i[s-1],attributeComment:i[s]};break;case 26:this.$={attributeType:i[s-3],attributeName:i[s-2],attributeKeyTypeList:i[s-1],attributeComment:i[s]};break;case 27:case 28:case 31:this.$=i[s];break;case 30:i[s-2].push(i[s]),this.$=i[s-2];break;case 32:this.$=i[s].replace(/"/g,"");break;case 33:this.$={cardA:i[s],relType:i[s-1],cardB:i[s-2]};break;case 34:this.$=d.Cardinality.ZERO_OR_ONE;break;case 35:this.$=d.Cardinality.ZERO_OR_MORE;break;case 36:this.$=d.Cardinality.ONE_OR_MORE;break;case 37:this.$=d.Cardinality.ONLY_ONE;break;case 38:this.$=d.Cardinality.MD_PARENT;break;case 39:this.$=d.Identification.NON_IDENTIFYING;break;case 40:this.$=d.Identification.IDENTIFYING;break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:16,11:9,20:r,22:u,24:l,26:p,27:f,28:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:h,42:_,43:m,44:g,45:x}),{21:[1,26]},{23:[1,27]},{25:[1,28]},t(e,[2,18]),t(y,[2,19]),t(y,[2,20]),t(e,[2,4]),{11:29,27:f,28:o},{16:30,17:[1,31],29:32,30:33,34:N},{11:35,27:f,28:o},{40:36,46:[1,37],47:[1,38]},t(I,[2,34]),t(I,[2,35]),t(I,[2,36]),t(I,[2,37]),t(I,[2,38]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),{13:[1,39]},{17:[1,40]},t(e,[2,10]),{16:41,17:[2,21],29:32,30:33,34:N},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:h,42:_,43:m,44:g,45:x},t(F,[2,39]),t(F,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},t(e,[2,9]),{17:[2,22]},t(W,[2,23],{32:50,33:51,35:52,37:C,38:T}),t([17,34,37,38],[2,28]),t(e,[2,14],{15:[1,55]}),t([27,28],[2,33]),t(e,[2,8]),t(e,[2,41]),t(e,[2,42]),t(e,[2,43]),t(W,[2,24],{33:56,36:[1,57],38:T}),t(W,[2,25]),t(M,[2,29]),t(W,[2,32]),t(M,[2,31]),{16:58,17:[1,59],29:32,30:33,34:N},t(W,[2,26]),{35:60,37:C},{17:[1,61]},t(e,[2,13]),t(M,[2,30]),t(e,[2,12])],defaultActions:{34:[2,27],41:[2,22]},parseError:function(a,n){if(n.recoverable)this.trace(a);else{var c=new Error(a);throw c.hash=n,c}},parse:function(a){var n=this,c=[0],d=[],E=[null],i=[],K=this.table,s="",Q=0,st=0,ft=2,ot=1,yt=i.slice.call(arguments,1),b=Object.create(this.lexer),z={yy:{}};for(var J in this.yy)Object.prototype.hasOwnProperty.call(this.yy,J)&&(z.yy[J]=this.yy[J]);b.setInput(a,z.yy),z.yy.lexer=b,z.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var $=b.yylloc;i.push($);var pt=b.options&&b.options.ranges;typeof z.yy.parseError=="function"?this.parseError=z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function _t(){var Y;return Y=d.pop()||b.lex()||ot,typeof Y!="number"&&(Y instanceof Array&&(d=Y,Y=d.pop()),Y=n.symbols_[Y]||Y),Y}for(var w,H,D,tt,G={},j,P,lt,q;;){if(H=c[c.length-1],this.defaultActions[H]?D=this.defaultActions[H]:((w===null||typeof w>"u")&&(w=_t()),D=K[H]&&K[H][w]),typeof D>"u"||!D.length||!D[0]){var et="";q=[];for(j in K[H])this.terminals_[j]&&j>ft&&q.push("'"+this.terminals_[j]+"'");b.showPosition?et="Parse error on line "+(Q+1)+`: `+b.showPosition()+` -Expecting `+q.join(", ")+", got '"+(this.terminals_[w]||w)+"'":et="Parse error on line "+(Q+1)+": Unexpected "+(w==ot?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(et,{text:b.match,token:this.terminals_[w]||w,line:b.yylineno,loc:$,expected:q})}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+w);switch(D[0]){case 1:c.push(w),E.push(b.yytext),i.push(b.yylloc),c.push(D[1]),w=null,st=b.yyleng,s=b.yytext,Q=b.yylineno,$=b.yylloc;break;case 2:if(P=this.productions_[D[1]][1],z.$=E[E.length-P],z._$={first_line:i[i.length-(P||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(P||1)].first_column,last_column:i[i.length-1].last_column},pt&&(z._$.range=[i[i.length-(P||1)].range[0],i[i.length-1].range[1]]),tt=this.performAction.apply(z,[s,st,Q,G.yy,D[1],E,i].concat(yt)),typeof tt<"u")return tt;P&&(c=c.slice(0,-1*P*2),E=E.slice(0,-1*P),i=i.slice(0,-1*P)),c.push(this.productions_[D[1]][0]),E.push(z.$),i.push(z._$),lt=K[c[c.length-2]][c[c.length-1]],c.push(lt);break;case 3:return!0}}return!0}},O=function(){var S={EOF:1,parseError:function(n,c){if(this.yy.parser)this.yy.parser.parseError(n,c);else throw new Error(n)},setInput:function(a,n){return this.yy=n||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var n=a.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var n=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+q.join(", ")+", got '"+(this.terminals_[w]||w)+"'":et="Parse error on line "+(Q+1)+": Unexpected "+(w==ot?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(et,{text:b.match,token:this.terminals_[w]||w,line:b.yylineno,loc:$,expected:q})}if(D[0]instanceof Array&&D.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+w);switch(D[0]){case 1:c.push(w),E.push(b.yytext),i.push(b.yylloc),c.push(D[1]),w=null,st=b.yyleng,s=b.yytext,Q=b.yylineno,$=b.yylloc;break;case 2:if(P=this.productions_[D[1]][1],G.$=E[E.length-P],G._$={first_line:i[i.length-(P||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(P||1)].first_column,last_column:i[i.length-1].last_column},pt&&(G._$.range=[i[i.length-(P||1)].range[0],i[i.length-1].range[1]]),tt=this.performAction.apply(G,[s,st,Q,z.yy,D[1],E,i].concat(yt)),typeof tt<"u")return tt;P&&(c=c.slice(0,-1*P*2),E=E.slice(0,-1*P),i=i.slice(0,-1*P)),c.push(this.productions_[D[1]][0]),E.push(G.$),i.push(G._$),lt=K[c[c.length-2]][c[c.length-1]],c.push(lt);break;case 3:return!0}}return!0}},O=function(){var S={EOF:1,parseError:function(n,c){if(this.yy.parser)this.yy.parser.parseError(n,c);else throw new Error(n)},setInput:function(a,n){return this.yy=n||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var n=a.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var n=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var E=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[E[0],E[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),n=new Array(a.length+1).join("-");return a+this.upcomingInput()+` `+n+"^"},test_match:function(a,n){var c,d,E;if(this.options.backtrack_lexer&&(E={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(E.yylloc.range=this.yylloc.range.slice(0))),d=a[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+a[0].length},this.yytext+=a[0],this.match+=a[0],this.matches=a,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(a[0].length),this.matched+=a[0],c=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),c)return c;if(this._backtrack){for(var i in E)this[i]=E[i];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,n,c,d;this._more||(this.yytext="",this.match="");for(var E=this._currentRules(),i=0;in[0].length)){if(n=c,d=i,this.options.backtrack_lexer){if(a=this.test_match(c,E[i]),a!==!1)return a;if(this._backtrack){n=!1;continue}else return!1}else if(!this.options.flex)break}return n?(a=this.test_match(n,E[d]),a!==!1?a:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var n=this.next();return n||this.lex()},begin:function(n){this.conditionStack.push(n)},popState:function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},pushState:function(n){this.begin(n)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(n,c,d,E){switch(d){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return c.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return c.yytext[0];case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return S}();R.lexer=O;function v(){this.yy={}}return v.prototype=R,R.Parser=v,new v}();at.parser=at;const Ut=at;let U={},nt=[];const Gt={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Ht={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},dt=function(t,e=void 0){return U[t]===void 0?(U[t]={attributes:[],alias:e},V.info("Added new entity :",t)):U[t]&&!U[t].alias&&e&&(U[t].alias=e,V.info(`Add alias '${e}' to entity '${t}'`)),U[t]},zt=()=>U,Kt=function(t,e){let r=dt(t),u;for(u=e.length-1;u>=0;u--)r.attributes.push(e[u]),V.debug("Added attribute ",e[u].attributeName)},Vt=function(t,e,r,u){let l={entityA:t,roleA:e,entityB:r,relSpec:u};nt.push(l),V.debug("Added new relationship :",l)},Xt=()=>nt,Qt=function(){U={},nt=[],Ot()},jt={Cardinality:Gt,Identification:Ht,getConfig:()=>Z().er,addEntity:dt,addAttributes:Kt,getEntities:zt,addRelationship:Vt,getRelationships:Xt,clear:Qt,setAccTitle:Et,getAccTitle:mt,setAccDescription:gt,getAccDescription:kt,setDiagramTitle:xt,getDiagramTitle:Rt},L={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},qt=function(t,e){let r;t.append("defs").append("marker").attr("id",L.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",L.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",L.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",L.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",L.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",L.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},B={ERMarkers:L,insertMarkers:qt},Jt=/[^\dA-Za-z](\W)*/g;let k={},X=new Map;const $t=function(t){const e=Object.keys(t);for(const r of e)k[r]=t[r]},te=(t,e,r)=>{const u=k.entityPadding/3,l=k.entityPadding/3,p=k.fontSize*.85,f=e.node().getBBox(),o=[];let h=!1,_=!1,m=0,g=0,x=0,y=0,N=f.height+u*2,I=1;r.forEach(T=>{T.attributeKeyTypeList!==void 0&&T.attributeKeyTypeList.length>0&&(h=!0),T.attributeComment!==void 0&&(_=!0)}),r.forEach(T=>{const M=`${e.node().id}-attr-${I}`;let R=0;const O=At(T.attributeType),v=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(O),S=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(T.attributeName),a={};a.tn=v,a.nn=S;const n=v.node().getBBox(),c=S.node().getBBox();if(m=Math.max(m,n.width),g=Math.max(g,c.width),R=Math.max(n.height,c.height),h){const d=T.attributeKeyTypeList!==void 0?T.attributeKeyTypeList.join(","):"",E=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(d);a.kn=E;const i=E.node().getBBox();x=Math.max(x,i.width),R=Math.max(R,i.height)}if(_){const d=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(T.attributeComment||"");a.cn=d;const E=d.node().getBBox();y=Math.max(y,E.width),R=Math.max(R,E.height)}a.height=R,o.push(a),N+=R+u*2,I+=1});let F=4;h&&(F+=2),_&&(F+=2);const W=m+g+x+y,C={width:Math.max(k.minEntityWidth,Math.max(f.width+k.entityPadding*2,W+l*F)),height:r.length>0?N:Math.max(k.minEntityHeight,f.height+k.entityPadding*2)};if(r.length>0){const T=Math.max(0,(C.width-W-l*F)/(F/2));e.attr("transform","translate("+C.width/2+","+(u+f.height/2)+")");let M=f.height+u*2,R="attributeBoxOdd";o.forEach(O=>{const v=M+u+O.height/2;O.tn.attr("transform","translate("+l+","+v+")");const S=t.insert("rect","#"+O.tn.node().id).classed(`er ${R}`,!0).attr("x",0).attr("y",M).attr("width",m+l*2+T).attr("height",O.height+u*2),a=parseFloat(S.attr("x"))+parseFloat(S.attr("width"));O.nn.attr("transform","translate("+(a+l)+","+v+")");const n=t.insert("rect","#"+O.nn.node().id).classed(`er ${R}`,!0).attr("x",a).attr("y",M).attr("width",g+l*2+T).attr("height",O.height+u*2);let c=parseFloat(n.attr("x"))+parseFloat(n.attr("width"));if(h){O.kn.attr("transform","translate("+(c+l)+","+v+")");const d=t.insert("rect","#"+O.kn.node().id).classed(`er ${R}`,!0).attr("x",c).attr("y",M).attr("width",x+l*2+T).attr("height",O.height+u*2);c=parseFloat(d.attr("x"))+parseFloat(d.attr("width"))}_&&(O.cn.attr("transform","translate("+(c+l)+","+v+")"),t.insert("rect","#"+O.cn.node().id).classed(`er ${R}`,"true").attr("x",c).attr("y",M).attr("width",y+l*2+T).attr("height",O.height+u*2)),M+=O.height+u*2,R=R==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else C.height=Math.max(k.minEntityHeight,N),e.attr("transform","translate("+C.width/2+","+C.height/2+")");return C},ee=function(t,e,r){const u=Object.keys(e);let l;return u.forEach(function(p){const f=oe(p,"entity");X.set(p,f);const o=t.append("g").attr("id",f);l=l===void 0?f:l;const h="text-"+f,_=o.append("text").classed("er entityLabel",!0).attr("id",h).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",Z().fontFamily).style("font-size",k.fontSize+"px").text(e[p].alias??p),{width:m,height:g}=te(o,_,e[p].attributes),y=o.insert("rect","#"+h).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",m).attr("height",g).node().getBBox();r.setNode(f,{width:y.width,height:y.height,shape:"rect",id:f})}),l},re=function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},ut=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},ie=function(t,e){return t.forEach(function(r){e.setEdge(X.get(r.entityA),X.get(r.entityB),{relationship:r},ut(r))}),t};let ct=0;const ae=function(t,e,r,u,l){ct++;const p=r.edge(X.get(e.entityA),X.get(e.entityB),ut(e)),f=wt().x(function(N){return N.x}).y(function(N){return N.y}).curve(Tt),o=t.insert("path","#"+u).classed("er relationshipLine",!0).attr("d",f(p.points)).style("stroke",k.stroke).style("fill","none");e.relSpec.relType===l.db.Identification.NON_IDENTIFYING&&o.attr("stroke-dasharray","8,8");let h="";switch(k.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case l.db.Cardinality.ZERO_OR_ONE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ZERO_OR_ONE_END+")");break;case l.db.Cardinality.ZERO_OR_MORE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ZERO_OR_MORE_END+")");break;case l.db.Cardinality.ONE_OR_MORE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ONE_OR_MORE_END+")");break;case l.db.Cardinality.ONLY_ONE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ONLY_ONE_END+")");break;case l.db.Cardinality.MD_PARENT:o.attr("marker-end","url("+h+"#"+B.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case l.db.Cardinality.ZERO_OR_ONE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ZERO_OR_ONE_START+")");break;case l.db.Cardinality.ZERO_OR_MORE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ZERO_OR_MORE_START+")");break;case l.db.Cardinality.ONE_OR_MORE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ONE_OR_MORE_START+")");break;case l.db.Cardinality.ONLY_ONE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ONLY_ONE_START+")");break;case l.db.Cardinality.MD_PARENT:o.attr("marker-start","url("+h+"#"+B.ERMarkers.MD_PARENT_START+")");break}const _=o.node().getTotalLength(),m=o.node().getPointAtLength(_*.5),g="rel"+ct,y=t.append("text").classed("er relationshipLabel",!0).attr("id",g).attr("x",m.x).attr("y",m.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",Z().fontFamily).style("font-size",k.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+g).classed("er relationshipLabelBox",!0).attr("x",m.x-y.width/2).attr("y",m.y-y.height/2).attr("width",y.width).attr("height",y.height)},ne=function(t,e,r,u){k=Z().er,V.info("Drawing ER diagram");const l=Z().securityLevel;let p;l==="sandbox"&&(p=rt("#i"+e));const o=(l==="sandbox"?rt(p.nodes()[0].contentDocument.body):rt("body")).select(`[id='${e}']`);B.insertMarkers(o,k);let h;h=new Mt({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:k.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const _=ee(o,u.db.getEntities(),h),m=ie(u.db.getRelationships(),h);St(h),re(o,h),m.forEach(function(I){ae(o,I,h,_,u)});const g=k.diagramPadding;bt.insertTitle(o,"entityTitleText",k.titleTopMargin,u.db.getDiagramTitle());const x=o.node().getBBox(),y=x.width+g*2,N=x.height+g*2;Nt(o,N,y,k.useMaxWidth),o.attr("viewBox",`${x.x-g} ${x.y-g} ${y} ${N}`)},se="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function oe(t="",e=""){const r=t.replace(Jt,"");return`${ht(e)}${ht(r)}${Wt(t,se)}`}function ht(t=""){return t.length>0?`${t}-`:""}const le={setConf:$t,draw:ne},ce=t=>` +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var n=this.next();return n||this.lex()},begin:function(n){this.conditionStack.push(n)},popState:function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},pushState:function(n){this.begin(n)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(n,c,d,E){switch(d){case 0:return this.begin("acc_title"),22;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),24;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 10;case 8:break;case 9:return 8;case 10:return 28;case 11:return 48;case 12:return 4;case 13:return this.begin("block"),15;case 14:return 36;case 15:break;case 16:return 37;case 17:return 34;case 18:return 34;case 19:return 38;case 20:break;case 21:return this.popState(),17;case 22:return c.yytext[0];case 23:return 18;case 24:return 19;case 25:return 41;case 26:return 43;case 27:return 43;case 28:return 43;case 29:return 41;case 30:return 41;case 31:return 42;case 32:return 42;case 33:return 42;case 34:return 42;case 35:return 42;case 36:return 43;case 37:return 42;case 38:return 43;case 39:return 44;case 40:return 44;case 41:return 44;case 42:return 44;case 43:return 41;case 44:return 42;case 45:return 43;case 46:return 45;case 47:return 46;case 48:return 47;case 49:return 47;case 50:return 46;case 51:return 46;case 52:return 46;case 53:return 27;case 54:return c.yytext[0];case 55:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:,)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\*A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\[)/i,/^(?:\])/i,/^(?:one or zero\b)/i,/^(?:one or more\b)/i,/^(?:one or many\b)/i,/^(?:1\+)/i,/^(?:\|o\b)/i,/^(?:zero or one\b)/i,/^(?:zero or more\b)/i,/^(?:zero or many\b)/i,/^(?:0\+)/i,/^(?:\}o\b)/i,/^(?:many\(0\))/i,/^(?:many\(1\))/i,/^(?:many\b)/i,/^(?:\}\|)/i,/^(?:one\b)/i,/^(?:only one\b)/i,/^(?:1\b)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\s*u\b)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:to\b)/i,/^(?:optionally to\b)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},block:{rules:[14,15,16,17,18,19,20,21,22],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],inclusive:!0}}};return S}();R.lexer=O;function v(){this.yy={}}return v.prototype=R,R.Parser=v,new v}();at.parser=at;const Ut=at;let U={},nt=[];const zt={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE",MD_PARENT:"MD_PARENT"},Ht={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},dt=function(t,e=void 0){return U[t]===void 0?(U[t]={attributes:[],alias:e},V.info("Added new entity :",t)):U[t]&&!U[t].alias&&e&&(U[t].alias=e,V.info(`Add alias '${e}' to entity '${t}'`)),U[t]},Gt=()=>U,Kt=function(t,e){let r=dt(t),u;for(u=e.length-1;u>=0;u--)r.attributes.push(e[u]),V.debug("Added attribute ",e[u].attributeName)},Vt=function(t,e,r,u){let l={entityA:t,roleA:e,entityB:r,relSpec:u};nt.push(l),V.debug("Added new relationship :",l)},Xt=()=>nt,Qt=function(){U={},nt=[],Ot()},jt={Cardinality:zt,Identification:Ht,getConfig:()=>Z().er,addEntity:dt,addAttributes:Kt,getEntities:Gt,addRelationship:Vt,getRelationships:Xt,clear:Qt,setAccTitle:Et,getAccTitle:mt,setAccDescription:gt,getAccDescription:kt,setDiagramTitle:xt,getDiagramTitle:Rt},L={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END",MD_PARENT_END:"MD_PARENT_END",MD_PARENT_START:"MD_PARENT_START"},qt=function(t,e){let r;t.append("defs").append("marker").attr("id",L.MD_PARENT_START).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",L.MD_PARENT_END).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",L.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",L.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",L.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",L.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",L.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},B={ERMarkers:L,insertMarkers:qt},Jt=/[^\dA-Za-z](\W)*/g;let k={},X=new Map;const $t=function(t){const e=Object.keys(t);for(const r of e)k[r]=t[r]},te=(t,e,r)=>{const u=k.entityPadding/3,l=k.entityPadding/3,p=k.fontSize*.85,f=e.node().getBBox(),o=[];let h=!1,_=!1,m=0,g=0,x=0,y=0,N=f.height+u*2,I=1;r.forEach(T=>{T.attributeKeyTypeList!==void 0&&T.attributeKeyTypeList.length>0&&(h=!0),T.attributeComment!==void 0&&(_=!0)}),r.forEach(T=>{const M=`${e.node().id}-attr-${I}`;let R=0;const O=At(T.attributeType),v=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-type`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(O),S=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-name`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(T.attributeName),a={};a.tn=v,a.nn=S;const n=v.node().getBBox(),c=S.node().getBBox();if(m=Math.max(m,n.width),g=Math.max(g,c.width),R=Math.max(n.height,c.height),h){const d=T.attributeKeyTypeList!==void 0?T.attributeKeyTypeList.join(","):"",E=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-key`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(d);a.kn=E;const i=E.node().getBBox();x=Math.max(x,i.width),R=Math.max(R,i.height)}if(_){const d=t.append("text").classed("er entityLabel",!0).attr("id",`${M}-comment`).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","left").style("font-family",Z().fontFamily).style("font-size",p+"px").text(T.attributeComment||"");a.cn=d;const E=d.node().getBBox();y=Math.max(y,E.width),R=Math.max(R,E.height)}a.height=R,o.push(a),N+=R+u*2,I+=1});let F=4;h&&(F+=2),_&&(F+=2);const W=m+g+x+y,C={width:Math.max(k.minEntityWidth,Math.max(f.width+k.entityPadding*2,W+l*F)),height:r.length>0?N:Math.max(k.minEntityHeight,f.height+k.entityPadding*2)};if(r.length>0){const T=Math.max(0,(C.width-W-l*F)/(F/2));e.attr("transform","translate("+C.width/2+","+(u+f.height/2)+")");let M=f.height+u*2,R="attributeBoxOdd";o.forEach(O=>{const v=M+u+O.height/2;O.tn.attr("transform","translate("+l+","+v+")");const S=t.insert("rect","#"+O.tn.node().id).classed(`er ${R}`,!0).attr("x",0).attr("y",M).attr("width",m+l*2+T).attr("height",O.height+u*2),a=parseFloat(S.attr("x"))+parseFloat(S.attr("width"));O.nn.attr("transform","translate("+(a+l)+","+v+")");const n=t.insert("rect","#"+O.nn.node().id).classed(`er ${R}`,!0).attr("x",a).attr("y",M).attr("width",g+l*2+T).attr("height",O.height+u*2);let c=parseFloat(n.attr("x"))+parseFloat(n.attr("width"));if(h){O.kn.attr("transform","translate("+(c+l)+","+v+")");const d=t.insert("rect","#"+O.kn.node().id).classed(`er ${R}`,!0).attr("x",c).attr("y",M).attr("width",x+l*2+T).attr("height",O.height+u*2);c=parseFloat(d.attr("x"))+parseFloat(d.attr("width"))}_&&(O.cn.attr("transform","translate("+(c+l)+","+v+")"),t.insert("rect","#"+O.cn.node().id).classed(`er ${R}`,"true").attr("x",c).attr("y",M).attr("width",y+l*2+T).attr("height",O.height+u*2)),M+=O.height+u*2,R=R==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else C.height=Math.max(k.minEntityHeight,N),e.attr("transform","translate("+C.width/2+","+C.height/2+")");return C},ee=function(t,e,r){const u=Object.keys(e);let l;return u.forEach(function(p){const f=oe(p,"entity");X.set(p,f);const o=t.append("g").attr("id",f);l=l===void 0?f:l;const h="text-"+f,_=o.append("text").classed("er entityLabel",!0).attr("id",h).attr("x",0).attr("y",0).style("dominant-baseline","middle").style("text-anchor","middle").style("font-family",Z().fontFamily).style("font-size",k.fontSize+"px").text(e[p].alias??p),{width:m,height:g}=te(o,_,e[p].attributes),y=o.insert("rect","#"+h).classed("er entityBox",!0).attr("x",0).attr("y",0).attr("width",m).attr("height",g).node().getBBox();r.setNode(f,{width:y.width,height:y.height,shape:"rect",id:f})}),l},re=function(t,e){e.nodes().forEach(function(r){r!==void 0&&e.node(r)!==void 0&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},ut=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},ie=function(t,e){return t.forEach(function(r){e.setEdge(X.get(r.entityA),X.get(r.entityB),{relationship:r},ut(r))}),t};let ct=0;const ae=function(t,e,r,u,l){ct++;const p=r.edge(X.get(e.entityA),X.get(e.entityB),ut(e)),f=wt().x(function(N){return N.x}).y(function(N){return N.y}).curve(Tt),o=t.insert("path","#"+u).classed("er relationshipLine",!0).attr("d",f(p.points)).style("stroke",k.stroke).style("fill","none");e.relSpec.relType===l.db.Identification.NON_IDENTIFYING&&o.attr("stroke-dasharray","8,8");let h="";switch(k.arrowMarkerAbsolute&&(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,h=h.replace(/\(/g,"\\("),h=h.replace(/\)/g,"\\)")),e.relSpec.cardA){case l.db.Cardinality.ZERO_OR_ONE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ZERO_OR_ONE_END+")");break;case l.db.Cardinality.ZERO_OR_MORE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ZERO_OR_MORE_END+")");break;case l.db.Cardinality.ONE_OR_MORE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ONE_OR_MORE_END+")");break;case l.db.Cardinality.ONLY_ONE:o.attr("marker-end","url("+h+"#"+B.ERMarkers.ONLY_ONE_END+")");break;case l.db.Cardinality.MD_PARENT:o.attr("marker-end","url("+h+"#"+B.ERMarkers.MD_PARENT_END+")");break}switch(e.relSpec.cardB){case l.db.Cardinality.ZERO_OR_ONE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ZERO_OR_ONE_START+")");break;case l.db.Cardinality.ZERO_OR_MORE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ZERO_OR_MORE_START+")");break;case l.db.Cardinality.ONE_OR_MORE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ONE_OR_MORE_START+")");break;case l.db.Cardinality.ONLY_ONE:o.attr("marker-start","url("+h+"#"+B.ERMarkers.ONLY_ONE_START+")");break;case l.db.Cardinality.MD_PARENT:o.attr("marker-start","url("+h+"#"+B.ERMarkers.MD_PARENT_START+")");break}const _=o.node().getTotalLength(),m=o.node().getPointAtLength(_*.5),g="rel"+ct,y=t.append("text").classed("er relationshipLabel",!0).attr("id",g).attr("x",m.x).attr("y",m.y).style("text-anchor","middle").style("dominant-baseline","middle").style("font-family",Z().fontFamily).style("font-size",k.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+g).classed("er relationshipLabelBox",!0).attr("x",m.x-y.width/2).attr("y",m.y-y.height/2).attr("width",y.width).attr("height",y.height)},ne=function(t,e,r,u){k=Z().er,V.info("Drawing ER diagram");const l=Z().securityLevel;let p;l==="sandbox"&&(p=rt("#i"+e));const o=(l==="sandbox"?rt(p.nodes()[0].contentDocument.body):rt("body")).select(`[id='${e}']`);B.insertMarkers(o,k);let h;h=new Mt({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:k.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const _=ee(o,u.db.getEntities(),h),m=ie(u.db.getRelationships(),h);St(h),re(o,h),m.forEach(function(I){ae(o,I,h,_,u)});const g=k.diagramPadding;bt.insertTitle(o,"entityTitleText",k.titleTopMargin,u.db.getDiagramTitle());const x=o.node().getBBox(),y=x.width+g*2,N=x.height+g*2;Nt(o,N,y,k.useMaxWidth),o.attr("viewBox",`${x.x-g} ${x.y-g} ${y} ${N}`)},se="28e9f9db-3c8d-5aa5-9faf-44286ae5937c";function oe(t="",e=""){const r=t.replace(Jt,"");return`${ht(e)}${ht(r)}${Wt(t,se)}`}function ht(t=""){return t.length>0?`${t}-`:""}const le={setConf:$t,draw:ne},ce=t=>` .entityBox { fill: ${t.mainBkg}; stroke: ${t.nodeBorder}; diff --git a/assets/chunks/flowDb-c1833063.BVO1h-fk.js b/assets/chunks/flowDb-0da60e67.CpQFkmn8.js similarity index 94% rename from assets/chunks/flowDb-c1833063.BVO1h-fk.js rename to assets/chunks/flowDb-0da60e67.CpQFkmn8.js index 15b715ca..6ae3f16a 100644 --- a/assets/chunks/flowDb-c1833063.BVO1h-fk.js +++ b/assets/chunks/flowDb-0da60e67.CpQFkmn8.js @@ -1,10 +1,10 @@ -import{c as et,D as me,s as ye,g as ve,a as Ve,b as Le,E as Ie,F as Re,l as J1,A as dt,G as Ne,j as we,h as w1}from"../app.CbQoAe_D.js";var pt=function(){var e=function(f1,a,o,f){for(o=o||{},f=f1.length;f--;o[f1[f]]=a);return o},u=[1,4],i=[1,3],n=[1,5],c=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],l=[2,2],h=[1,13],G=[1,14],F=[1,15],w=[1,16],X=[1,23],o1=[1,25],p1=[1,26],A1=[1,27],C=[1,49],k=[1,48],l1=[1,29],G1=[1,30],U1=[1,31],M1=[1,32],K1=[1,33],x=[1,44],B=[1,46],m=[1,42],y=[1,47],v=[1,43],V=[1,50],L=[1,45],I=[1,51],R=[1,52],Y1=[1,34],j1=[1,35],z1=[1,36],X1=[1,37],I1=[1,57],b=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],q=[1,61],Q=[1,60],Z=[1,62],H1=[8,9,11,73,75],k1=[1,88],b1=[1,93],g1=[1,92],D1=[1,89],F1=[1,85],T1=[1,91],S1=[1,87],C1=[1,94],_1=[1,90],x1=[1,95],B1=[1,86],W1=[8,9,10,11,73,75],N=[8,9,10,11,44,73,75],M=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],Et=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],R1=[42,58,86,99,102,103,106,108,111,112,113],kt=[1,121],bt=[1,120],gt=[1,128],Dt=[1,142],Ft=[1,143],Tt=[1,144],St=[1,145],Ct=[1,130],_t=[1,132],xt=[1,136],Bt=[1,137],mt=[1,138],yt=[1,139],vt=[1,140],Vt=[1,141],Lt=[1,146],It=[1,147],Rt=[1,126],Nt=[1,127],wt=[1,134],Ot=[1,129],Pt=[1,133],Gt=[1,131],nt=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Ut=[1,149],T=[8,9,11],K=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],p=[1,169],O=[1,165],P=[1,166],A=[1,170],d=[1,167],E=[1,168],m1=[75,113,116],g=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],Mt=[10,103],h1=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],J=[1,235],$=[1,233],t1=[1,237],e1=[1,231],s1=[1,232],u1=[1,234],i1=[1,236],r1=[1,238],y1=[1,255],Kt=[8,9,11,103],W=[8,9,10,11,58,81,102,103,106,107,108,109],at={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(a,o,f,r,S,t,N1){var s=t.length-1;switch(S){case 2:this.$=[];break;case 3:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 176:this.$=t[s];break;case 11:r.setDirection("TB"),this.$="TB";break;case 12:r.setDirection(t[s-1]),this.$=t[s-1];break;case 27:this.$=t[s-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=r.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 34:this.$=r.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 35:this.$=r.addSubGraph(void 0,t[s-1],void 0);break;case 37:this.$=t[s].trim(),r.setAccTitle(this.$);break;case 38:case 39:this.$=t[s].trim(),r.setAccDescription(this.$);break;case 43:r.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 44:r.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 45:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 46:this.$={stmt:t[s],nodes:t[s]};break;case 47:this.$=[t[s]];break;case 48:this.$=t[s-4].concat(t[s]);break;case 49:this.$=t[s];break;case 50:this.$=t[s-2],r.setClass(t[s-2],t[s]);break;case 51:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"square");break;case 52:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"doublecircle");break;case 53:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"circle");break;case 54:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"ellipse");break;case 55:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"stadium");break;case 56:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"subroutine");break;case 57:this.$=t[s-7],r.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 58:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"cylinder");break;case 59:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"round");break;case 60:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"diamond");break;case 61:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"hexagon");break;case 62:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"odd");break;case 63:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"trapezoid");break;case 64:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 65:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_right");break;case 66:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_left");break;case 67:this.$=t[s],r.addVertex(t[s]);break;case 68:t[s-1].text=t[s],this.$=t[s-1];break;case 69:case 70:t[s-2].text=t[s-1],this.$=t[s-2];break;case 71:this.$=t[s];break;case 72:var Y=r.destructLink(t[s],t[s-2]);this.$={type:Y.type,stroke:Y.stroke,length:Y.length,text:t[s-1]};break;case 73:this.$={text:t[s],type:"text"};break;case 74:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 75:this.$={text:t[s],type:"string"};break;case 76:this.$={text:t[s],type:"markdown"};break;case 77:var Y=r.destructLink(t[s]);this.$={type:Y.type,stroke:Y.stroke,length:Y.length};break;case 78:this.$=t[s-1];break;case 79:this.$={text:t[s],type:"text"};break;case 80:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 81:this.$={text:t[s],type:"string"};break;case 82:case 97:this.$={text:t[s],type:"markdown"};break;case 94:this.$={text:t[s],type:"text"};break;case 95:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 96:this.$={text:t[s],type:"text"};break;case 98:this.$=t[s-4],r.addClass(t[s-2],t[s]);break;case 99:this.$=t[s-4],r.setClass(t[s-2],t[s]);break;case 100:case 108:this.$=t[s-1],r.setClickEvent(t[s-1],t[s]);break;case 101:case 109:this.$=t[s-3],r.setClickEvent(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 102:this.$=t[s-2],r.setClickEvent(t[s-2],t[s-1],t[s]);break;case 103:this.$=t[s-4],r.setClickEvent(t[s-4],t[s-3],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 104:this.$=t[s-2],r.setLink(t[s-2],t[s]);break;case 105:this.$=t[s-4],r.setLink(t[s-4],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 106:this.$=t[s-4],r.setLink(t[s-4],t[s-2],t[s]);break;case 107:this.$=t[s-6],r.setLink(t[s-6],t[s-4],t[s]),r.setTooltip(t[s-6],t[s-2]);break;case 110:this.$=t[s-1],r.setLink(t[s-1],t[s]);break;case 111:this.$=t[s-3],r.setLink(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 112:this.$=t[s-3],r.setLink(t[s-3],t[s-2],t[s]);break;case 113:this.$=t[s-5],r.setLink(t[s-5],t[s-4],t[s]),r.setTooltip(t[s-5],t[s-2]);break;case 114:this.$=t[s-4],r.addVertex(t[s-2],void 0,void 0,t[s]);break;case 115:this.$=t[s-4],r.updateLink([t[s-2]],t[s]);break;case 116:this.$=t[s-4],r.updateLink(t[s-2],t[s]);break;case 117:this.$=t[s-8],r.updateLinkInterpolate([t[s-6]],t[s-2]),r.updateLink([t[s-6]],t[s]);break;case 118:this.$=t[s-8],r.updateLinkInterpolate(t[s-6],t[s-2]),r.updateLink(t[s-6],t[s]);break;case 119:this.$=t[s-6],r.updateLinkInterpolate([t[s-4]],t[s]);break;case 120:this.$=t[s-6],r.updateLinkInterpolate(t[s-4],t[s]);break;case 121:case 123:this.$=[t[s]];break;case 122:case 124:t[s-2].push(t[s]),this.$=t[s-2];break;case 126:this.$=t[s-1]+t[s];break;case 174:this.$=t[s];break;case 175:this.$=t[s-1]+""+t[s];break;case 177:this.$=t[s-1]+""+t[s];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:u,10:i,12:n},{1:[3]},e(c,l,{5:6}),{4:7,9:u,10:i,12:n},{4:8,9:u,10:i,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:h,9:G,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:G1,83:U1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},e(c,[2,9]),e(c,[2,10]),e(c,[2,11]),{8:[1,54],9:[1,55],10:I1,15:53,18:56},e(b,[2,3]),e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),e(b,[2,7]),e(b,[2,8]),{8:q,9:Q,11:Z,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:q,9:Q,11:Z,21:66},{8:q,9:Q,11:Z,21:67},{8:q,9:Q,11:Z,21:68},{8:q,9:Q,11:Z,21:69},{8:q,9:Q,11:Z,21:70},{8:q,9:Q,10:[1,71],11:Z,21:72},e(b,[2,36]),{35:[1,73]},{37:[1,74]},e(b,[2,39]),e(H1,[2,46],{18:75,10:I1}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:k1,42:b1,58:g1,77:[1,83],86:D1,92:[1,80],94:[1,81],98:82,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},e(b,[2,178]),e(b,[2,179]),e(b,[2,180]),e(b,[2,181]),e(W1,[2,47]),e(W1,[2,49],{44:[1,96]}),e(N,[2,67],{110:109,29:[1,97],42:C,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:k,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),e(M,[2,174]),e(M,[2,135]),e(M,[2,136]),e(M,[2,137]),e(M,[2,138]),e(M,[2,139]),e(M,[2,140]),e(M,[2,141]),e(M,[2,142]),e(M,[2,143]),e(M,[2,144]),e(M,[2,145]),e(c,[2,12]),e(c,[2,18]),e(c,[2,19]),{9:[1,110]},e(Et,[2,26],{18:111,10:I1}),e(b,[2,27]),{40:112,41:38,42:C,43:39,45:40,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(b,[2,40]),e(b,[2,41]),e(b,[2,42]),e(R1,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:kt,116:bt},e([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),e(b,[2,28]),e(b,[2,29]),e(b,[2,30]),e(b,[2,31]),e(b,[2,32]),{10:gt,12:Dt,14:Ft,27:Tt,28:122,32:St,42:Ct,58:_t,73:xt,77:[1,124],78:[1,125],80:135,81:Bt,82:mt,83:yt,84:vt,85:Vt,86:Lt,87:It,88:123,102:Rt,106:Nt,108:wt,111:Ot,112:Pt,113:Gt},e(nt,l,{5:148}),e(b,[2,37]),e(b,[2,38]),e(H1,[2,45],{42:Ut}),{42:C,45:150,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{99:[1,151],100:152,102:[1,153]},{42:C,45:154,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{42:C,45:155,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},e(T,[2,108],{117:160,10:[1,159],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,110],{10:[1,161]}),e(K,[2,176]),e(K,[2,163]),e(K,[2,164]),e(K,[2,165]),e(K,[2,166]),e(K,[2,167]),e(K,[2,168]),e(K,[2,169]),e(K,[2,170]),e(K,[2,171]),e(K,[2,172]),e(K,[2,173]),{42:C,45:162,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{30:163,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:171,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:173,48:[1,172],65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:174,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:175,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:176,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{106:[1,177]},{30:178,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:179,63:[1,180],65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:181,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:182,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:183,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(M,[2,175]),e(c,[2,20]),e(Et,[2,25]),e(H1,[2,43],{18:184,10:I1}),e(R1,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{75:[1,188],76:189,113:kt,116:bt},e(m1,[2,73]),e(m1,[2,75]),e(m1,[2,76]),e(m1,[2,161]),e(m1,[2,162]),{8:q,9:Q,10:gt,11:Z,12:Dt,14:Ft,21:191,27:Tt,29:[1,190],32:St,42:Ct,58:_t,73:xt,80:135,81:Bt,82:mt,83:yt,84:vt,85:Vt,86:Lt,87:It,88:192,102:Rt,106:Nt,108:wt,111:Ot,112:Pt,113:Gt},e(g,[2,94]),e(g,[2,96]),e(g,[2,97]),e(g,[2,150]),e(g,[2,151]),e(g,[2,152]),e(g,[2,153]),e(g,[2,154]),e(g,[2,155]),e(g,[2,156]),e(g,[2,157]),e(g,[2,158]),e(g,[2,159]),e(g,[2,160]),e(g,[2,83]),e(g,[2,84]),e(g,[2,85]),e(g,[2,86]),e(g,[2,87]),e(g,[2,88]),e(g,[2,89]),e(g,[2,90]),e(g,[2,91]),e(g,[2,92]),e(g,[2,93]),{6:11,7:12,8:h,9:G,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,193],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:G1,83:U1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},{10:I1,18:194},{10:[1,195],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,196]},{10:[1,197],103:[1,198]},e(Mt,[2,121]),{10:[1,199],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,200],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{77:[1,201]},e(T,[2,102],{10:[1,202]}),e(T,[2,104],{10:[1,203]}),{77:[1,204]},e(K,[2,177]),{77:[1,205],95:[1,206]},e(W1,[2,50],{110:109,42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),{31:[1,207],65:p,79:208,113:A,114:d,115:E},e(h1,[2,79]),e(h1,[2,81]),e(h1,[2,82]),e(h1,[2,146]),e(h1,[2,147]),e(h1,[2,148]),e(h1,[2,149]),{47:[1,209],65:p,79:208,113:A,114:d,115:E},{30:210,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{49:[1,211],65:p,79:208,113:A,114:d,115:E},{51:[1,212],65:p,79:208,113:A,114:d,115:E},{53:[1,213],65:p,79:208,113:A,114:d,115:E},{55:[1,214],65:p,79:208,113:A,114:d,115:E},{58:[1,215]},{62:[1,216],65:p,79:208,113:A,114:d,115:E},{64:[1,217],65:p,79:208,113:A,114:d,115:E},{30:218,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{31:[1,219],65:p,79:208,113:A,114:d,115:E},{65:p,67:[1,220],69:[1,221],79:208,113:A,114:d,115:E},{65:p,67:[1,223],69:[1,222],79:208,113:A,114:d,115:E},e(H1,[2,44],{42:Ut}),e(R1,[2,70]),e(R1,[2,69]),{60:[1,224],65:p,79:208,113:A,114:d,115:E},e(R1,[2,72]),e(m1,[2,74]),{30:225,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(nt,l,{5:226}),e(g,[2,95]),e(b,[2,35]),{41:227,42:C,43:39,45:40,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{10:J,58:$,81:t1,89:228,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:239,101:[1,240],102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:241,101:[1,242],102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{102:[1,243]},{10:J,58:$,81:t1,89:244,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{42:C,45:245,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},e(T,[2,109]),e(T,[2,111],{10:[1,249]}),e(T,[2,112]),e(N,[2,51]),e(h1,[2,80]),e(N,[2,52]),{49:[1,250],65:p,79:208,113:A,114:d,115:E},e(N,[2,59]),e(N,[2,54]),e(N,[2,55]),e(N,[2,56]),{106:[1,251]},e(N,[2,58]),e(N,[2,60]),{64:[1,252],65:p,79:208,113:A,114:d,115:E},e(N,[2,62]),e(N,[2,63]),e(N,[2,65]),e(N,[2,64]),e(N,[2,66]),e([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:p,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:G,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,254],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:G1,83:U1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},e(W1,[2,48]),e(T,[2,114],{103:y1}),e(Kt,[2,123],{105:256,10:J,58:$,81:t1,102:e1,106:s1,107:u1,108:i1,109:r1}),e(W,[2,125]),e(W,[2,127]),e(W,[2,128]),e(W,[2,129]),e(W,[2,130]),e(W,[2,131]),e(W,[2,132]),e(W,[2,133]),e(W,[2,134]),e(T,[2,115],{103:y1}),{10:[1,257]},e(T,[2,116],{103:y1}),{10:[1,258]},e(Mt,[2,122]),e(T,[2,98],{103:y1}),e(T,[2,99],{110:109,42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),e(T,[2,103]),e(T,[2,105],{10:[1,259]}),e(T,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:q,9:Q,11:Z,21:264},e(b,[2,34]),{10:J,58:$,81:t1,102:e1,104:265,105:230,106:s1,107:u1,108:i1,109:r1},e(W,[2,126]),{14:k1,42:b1,58:g1,86:D1,98:266,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},{14:k1,42:b1,58:g1,86:D1,98:267,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},{95:[1,268]},e(T,[2,113]),e(N,[2,53]),{30:269,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(N,[2,61]),e(nt,l,{5:270}),e(Kt,[2,124],{105:256,10:J,58:$,81:t1,102:e1,106:s1,107:u1,108:i1,109:r1}),e(T,[2,119],{117:160,10:[1,271],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,120],{117:160,10:[1,272],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,107]),{31:[1,273],65:p,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:G,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,274],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:G1,83:U1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},{10:J,58:$,81:t1,89:275,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:276,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},e(N,[2,57]),e(b,[2,33]),e(T,[2,117],{103:y1}),e(T,[2,118],{103:y1})],defaultActions:{},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var f=new Error(a);throw f.hash=o,f}},parse:function(a){var o=this,f=[0],r=[],S=[null],t=[],N1=this.table,s="",Y=0,Yt=0,Ce=2,jt=1,_e=t.slice.call(arguments,1),_=Object.create(this.lexer),d1={yy:{}};for(var ot in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ot)&&(d1.yy[ot]=this.yy[ot]);_.setInput(a,d1.yy),d1.yy.lexer=_,d1.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var lt=_.yylloc;t.push(lt);var xe=_.options&&_.options.ranges;typeof d1.yy.parseError=="function"?this.parseError=d1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Be(){var a1;return a1=r.pop()||_.lex()||jt,typeof a1!="number"&&(a1 instanceof Array&&(r=a1,a1=r.pop()),a1=o.symbols_[a1]||a1),a1}for(var U,E1,j,ht,v1={},q1,n1,zt,Q1;;){if(E1=f[f.length-1],this.defaultActions[E1]?j=this.defaultActions[E1]:((U===null||typeof U>"u")&&(U=Be()),j=N1[E1]&&N1[E1][U]),typeof j>"u"||!j.length||!j[0]){var ft="";Q1=[];for(q1 in N1[E1])this.terminals_[q1]&&q1>Ce&&Q1.push("'"+this.terminals_[q1]+"'");_.showPosition?ft="Parse error on line "+(Y+1)+`: +import{c as et,v as me,s as ye,g as ve,a as Ve,b as Le,x as Ie,y as Re,l as J1,z as dt,A as Ne,j as we,h as w1}from"../app.DRN3unl1.js";var pt=function(){var e=function(f1,a,o,f){for(o=o||{},f=f1.length;f--;o[f1[f]]=a);return o},u=[1,4],i=[1,3],n=[1,5],c=[1,8,9,10,11,27,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],l=[2,2],h=[1,13],U=[1,14],F=[1,15],w=[1,16],X=[1,23],o1=[1,25],p1=[1,26],A1=[1,27],C=[1,49],k=[1,48],l1=[1,29],U1=[1,30],G1=[1,31],M1=[1,32],K1=[1,33],x=[1,44],B=[1,46],m=[1,42],y=[1,47],v=[1,43],V=[1,50],L=[1,45],I=[1,51],R=[1,52],Y1=[1,34],j1=[1,35],z1=[1,36],X1=[1,37],I1=[1,57],b=[1,8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],q=[1,61],Q=[1,60],Z=[1,62],H1=[8,9,11,73,75],k1=[1,88],b1=[1,93],g1=[1,92],D1=[1,89],F1=[1,85],T1=[1,91],S1=[1,87],C1=[1,94],_1=[1,90],x1=[1,95],B1=[1,86],W1=[8,9,10,11,73,75],N=[8,9,10,11,44,73,75],M=[8,9,10,11,29,42,44,46,48,50,52,54,56,58,61,63,65,66,68,73,75,86,99,102,103,106,108,111,112,113],Et=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],R1=[42,58,86,99,102,103,106,108,111,112,113],kt=[1,121],bt=[1,120],gt=[1,128],Dt=[1,142],Ft=[1,143],Tt=[1,144],St=[1,145],Ct=[1,130],_t=[1,132],xt=[1,136],Bt=[1,137],mt=[1,138],yt=[1,139],vt=[1,140],Vt=[1,141],Lt=[1,146],It=[1,147],Rt=[1,126],Nt=[1,127],wt=[1,134],Ot=[1,129],Pt=[1,133],Ut=[1,131],nt=[8,9,10,11,27,32,34,36,38,42,58,81,82,83,84,85,86,99,102,103,106,108,111,112,113,118,119,120,121],Gt=[1,149],T=[8,9,11],K=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],p=[1,169],O=[1,165],P=[1,166],A=[1,170],d=[1,167],E=[1,168],m1=[75,113,116],g=[8,9,10,11,12,14,27,29,32,42,58,73,81,82,83,84,85,86,87,102,106,108,111,112,113],Mt=[10,103],h1=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],J=[1,235],$=[1,233],t1=[1,237],e1=[1,231],s1=[1,232],u1=[1,234],i1=[1,236],r1=[1,238],y1=[1,255],Kt=[8,9,11,103],W=[8,9,10,11,58,81,102,103,106,107,108,109],at={trace:function(){},yy:{},symbols_:{error:2,start:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,NODIR:13,DIR:14,FirstStmtSeparator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,vertexStatement:20,separator:21,styleStatement:22,linkStyleStatement:23,classDefStatement:24,classStatement:25,clickStatement:26,subgraph:27,textNoTags:28,SQS:29,text:30,SQE:31,end:32,direction:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,link:39,node:40,styledVertex:41,AMP:42,vertex:43,STYLE_SEPARATOR:44,idString:45,DOUBLECIRCLESTART:46,DOUBLECIRCLEEND:47,PS:48,PE:49,"(-":50,"-)":51,STADIUMSTART:52,STADIUMEND:53,SUBROUTINESTART:54,SUBROUTINEEND:55,VERTEX_WITH_PROPS_START:56,"NODE_STRING[field]":57,COLON:58,"NODE_STRING[value]":59,PIPE:60,CYLINDERSTART:61,CYLINDEREND:62,DIAMOND_START:63,DIAMOND_STOP:64,TAGEND:65,TRAPSTART:66,TRAPEND:67,INVTRAPSTART:68,INVTRAPEND:69,linkStatement:70,arrowText:71,TESTSTR:72,START_LINK:73,edgeText:74,LINK:75,edgeTextToken:76,STR:77,MD_STR:78,textToken:79,keywords:80,STYLE:81,LINKSTYLE:82,CLASSDEF:83,CLASS:84,CLICK:85,DOWN:86,UP:87,textNoTagsToken:88,stylesOpt:89,"idString[vertex]":90,"idString[class]":91,CALLBACKNAME:92,CALLBACKARGS:93,HREF:94,LINK_TARGET:95,"STR[link]":96,"STR[tooltip]":97,alphaNum:98,DEFAULT:99,numList:100,INTERPOLATE:101,NUM:102,COMMA:103,style:104,styleComponent:105,NODE_STRING:106,UNIT:107,BRKT:108,PCT:109,idStringToken:110,MINUS:111,MULT:112,UNICODE_TEXT:113,TEXT:114,TAGSTART:115,EDGE_TEXT:116,alphaNumToken:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"NODIR",14:"DIR",27:"subgraph",29:"SQS",31:"SQE",32:"end",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",42:"AMP",44:"STYLE_SEPARATOR",46:"DOUBLECIRCLESTART",47:"DOUBLECIRCLEEND",48:"PS",49:"PE",50:"(-",51:"-)",52:"STADIUMSTART",53:"STADIUMEND",54:"SUBROUTINESTART",55:"SUBROUTINEEND",56:"VERTEX_WITH_PROPS_START",57:"NODE_STRING[field]",58:"COLON",59:"NODE_STRING[value]",60:"PIPE",61:"CYLINDERSTART",62:"CYLINDEREND",63:"DIAMOND_START",64:"DIAMOND_STOP",65:"TAGEND",66:"TRAPSTART",67:"TRAPEND",68:"INVTRAPSTART",69:"INVTRAPEND",72:"TESTSTR",73:"START_LINK",75:"LINK",77:"STR",78:"MD_STR",81:"STYLE",82:"LINKSTYLE",83:"CLASSDEF",84:"CLASS",85:"CLICK",86:"DOWN",87:"UP",90:"idString[vertex]",91:"idString[class]",92:"CALLBACKNAME",93:"CALLBACKARGS",94:"HREF",95:"LINK_TARGET",96:"STR[link]",97:"STR[tooltip]",99:"DEFAULT",101:"INTERPOLATE",102:"NUM",103:"COMMA",106:"NODE_STRING",107:"UNIT",108:"BRKT",109:"PCT",111:"MINUS",112:"MULT",113:"UNICODE_TEXT",114:"TEXT",115:"TAGSTART",116:"EDGE_TEXT",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,2],[4,3],[16,2],[16,1],[17,1],[17,1],[17,1],[15,1],[15,1],[15,2],[19,2],[19,2],[19,1],[19,1],[18,2],[18,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,9],[7,6],[7,4],[7,1],[7,2],[7,2],[7,1],[21,1],[21,1],[21,1],[20,3],[20,4],[20,2],[20,1],[40,1],[40,5],[41,1],[41,3],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,8],[43,4],[43,4],[43,4],[43,6],[43,4],[43,4],[43,4],[43,4],[43,4],[43,1],[39,2],[39,3],[39,3],[39,1],[39,3],[74,1],[74,2],[74,1],[74,1],[70,1],[71,3],[30,1],[30,2],[30,1],[30,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[28,1],[28,2],[28,1],[28,1],[24,5],[25,5],[26,2],[26,4],[26,3],[26,5],[26,3],[26,5],[26,5],[26,7],[26,2],[26,4],[26,2],[26,4],[26,4],[26,6],[22,5],[23,5],[23,5],[23,9],[23,9],[23,7],[23,7],[100,1],[100,3],[89,1],[89,3],[104,1],[104,2],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[105,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[110,1],[79,1],[79,1],[79,1],[79,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[88,1],[76,1],[76,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[117,1],[45,1],[45,2],[98,1],[98,2],[33,1],[33,1],[33,1],[33,1]],performAction:function(a,o,f,r,S,t,N1){var s=t.length-1;switch(S){case 2:this.$=[];break;case 3:(!Array.isArray(t[s])||t[s].length>0)&&t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 176:this.$=t[s];break;case 11:r.setDirection("TB"),this.$="TB";break;case 12:r.setDirection(t[s-1]),this.$=t[s-1];break;case 27:this.$=t[s-1].nodes;break;case 28:case 29:case 30:case 31:case 32:this.$=[];break;case 33:this.$=r.addSubGraph(t[s-6],t[s-1],t[s-4]);break;case 34:this.$=r.addSubGraph(t[s-3],t[s-1],t[s-3]);break;case 35:this.$=r.addSubGraph(void 0,t[s-1],void 0);break;case 37:this.$=t[s].trim(),r.setAccTitle(this.$);break;case 38:case 39:this.$=t[s].trim(),r.setAccDescription(this.$);break;case 43:r.addLink(t[s-2].stmt,t[s],t[s-1]),this.$={stmt:t[s],nodes:t[s].concat(t[s-2].nodes)};break;case 44:r.addLink(t[s-3].stmt,t[s-1],t[s-2]),this.$={stmt:t[s-1],nodes:t[s-1].concat(t[s-3].nodes)};break;case 45:this.$={stmt:t[s-1],nodes:t[s-1]};break;case 46:this.$={stmt:t[s],nodes:t[s]};break;case 47:this.$=[t[s]];break;case 48:this.$=t[s-4].concat(t[s]);break;case 49:this.$=t[s];break;case 50:this.$=t[s-2],r.setClass(t[s-2],t[s]);break;case 51:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"square");break;case 52:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"doublecircle");break;case 53:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"circle");break;case 54:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"ellipse");break;case 55:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"stadium");break;case 56:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"subroutine");break;case 57:this.$=t[s-7],r.addVertex(t[s-7],t[s-1],"rect",void 0,void 0,void 0,Object.fromEntries([[t[s-5],t[s-3]]]));break;case 58:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"cylinder");break;case 59:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"round");break;case 60:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"diamond");break;case 61:this.$=t[s-5],r.addVertex(t[s-5],t[s-2],"hexagon");break;case 62:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"odd");break;case 63:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"trapezoid");break;case 64:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"inv_trapezoid");break;case 65:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_right");break;case 66:this.$=t[s-3],r.addVertex(t[s-3],t[s-1],"lean_left");break;case 67:this.$=t[s],r.addVertex(t[s]);break;case 68:t[s-1].text=t[s],this.$=t[s-1];break;case 69:case 70:t[s-2].text=t[s-1],this.$=t[s-2];break;case 71:this.$=t[s];break;case 72:var Y=r.destructLink(t[s],t[s-2]);this.$={type:Y.type,stroke:Y.stroke,length:Y.length,text:t[s-1]};break;case 73:this.$={text:t[s],type:"text"};break;case 74:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 75:this.$={text:t[s],type:"string"};break;case 76:this.$={text:t[s],type:"markdown"};break;case 77:var Y=r.destructLink(t[s]);this.$={type:Y.type,stroke:Y.stroke,length:Y.length};break;case 78:this.$=t[s-1];break;case 79:this.$={text:t[s],type:"text"};break;case 80:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 81:this.$={text:t[s],type:"string"};break;case 82:case 97:this.$={text:t[s],type:"markdown"};break;case 94:this.$={text:t[s],type:"text"};break;case 95:this.$={text:t[s-1].text+""+t[s],type:t[s-1].type};break;case 96:this.$={text:t[s],type:"text"};break;case 98:this.$=t[s-4],r.addClass(t[s-2],t[s]);break;case 99:this.$=t[s-4],r.setClass(t[s-2],t[s]);break;case 100:case 108:this.$=t[s-1],r.setClickEvent(t[s-1],t[s]);break;case 101:case 109:this.$=t[s-3],r.setClickEvent(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 102:this.$=t[s-2],r.setClickEvent(t[s-2],t[s-1],t[s]);break;case 103:this.$=t[s-4],r.setClickEvent(t[s-4],t[s-3],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 104:this.$=t[s-2],r.setLink(t[s-2],t[s]);break;case 105:this.$=t[s-4],r.setLink(t[s-4],t[s-2]),r.setTooltip(t[s-4],t[s]);break;case 106:this.$=t[s-4],r.setLink(t[s-4],t[s-2],t[s]);break;case 107:this.$=t[s-6],r.setLink(t[s-6],t[s-4],t[s]),r.setTooltip(t[s-6],t[s-2]);break;case 110:this.$=t[s-1],r.setLink(t[s-1],t[s]);break;case 111:this.$=t[s-3],r.setLink(t[s-3],t[s-2]),r.setTooltip(t[s-3],t[s]);break;case 112:this.$=t[s-3],r.setLink(t[s-3],t[s-2],t[s]);break;case 113:this.$=t[s-5],r.setLink(t[s-5],t[s-4],t[s]),r.setTooltip(t[s-5],t[s-2]);break;case 114:this.$=t[s-4],r.addVertex(t[s-2],void 0,void 0,t[s]);break;case 115:this.$=t[s-4],r.updateLink([t[s-2]],t[s]);break;case 116:this.$=t[s-4],r.updateLink(t[s-2],t[s]);break;case 117:this.$=t[s-8],r.updateLinkInterpolate([t[s-6]],t[s-2]),r.updateLink([t[s-6]],t[s]);break;case 118:this.$=t[s-8],r.updateLinkInterpolate(t[s-6],t[s-2]),r.updateLink(t[s-6],t[s]);break;case 119:this.$=t[s-6],r.updateLinkInterpolate([t[s-4]],t[s]);break;case 120:this.$=t[s-6],r.updateLinkInterpolate(t[s-4],t[s]);break;case 121:case 123:this.$=[t[s]];break;case 122:case 124:t[s-2].push(t[s]),this.$=t[s-2];break;case 126:this.$=t[s-1]+t[s];break;case 174:this.$=t[s];break;case 175:this.$=t[s-1]+""+t[s];break;case 177:this.$=t[s-1]+""+t[s];break;case 178:this.$={stmt:"dir",value:"TB"};break;case 179:this.$={stmt:"dir",value:"BT"};break;case 180:this.$={stmt:"dir",value:"RL"};break;case 181:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,9:u,10:i,12:n},{1:[3]},e(c,l,{5:6}),{4:7,9:u,10:i,12:n},{4:8,9:u,10:i,12:n},{13:[1,9],14:[1,10]},{1:[2,1],6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:U1,83:G1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},e(c,[2,9]),e(c,[2,10]),e(c,[2,11]),{8:[1,54],9:[1,55],10:I1,15:53,18:56},e(b,[2,3]),e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),e(b,[2,7]),e(b,[2,8]),{8:q,9:Q,11:Z,21:58,39:59,70:63,73:[1,64],75:[1,65]},{8:q,9:Q,11:Z,21:66},{8:q,9:Q,11:Z,21:67},{8:q,9:Q,11:Z,21:68},{8:q,9:Q,11:Z,21:69},{8:q,9:Q,11:Z,21:70},{8:q,9:Q,10:[1,71],11:Z,21:72},e(b,[2,36]),{35:[1,73]},{37:[1,74]},e(b,[2,39]),e(H1,[2,46],{18:75,10:I1}),{10:[1,76]},{10:[1,77]},{10:[1,78]},{10:[1,79]},{14:k1,42:b1,58:g1,77:[1,83],86:D1,92:[1,80],94:[1,81],98:82,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},e(b,[2,178]),e(b,[2,179]),e(b,[2,180]),e(b,[2,181]),e(W1,[2,47]),e(W1,[2,49],{44:[1,96]}),e(N,[2,67],{110:109,29:[1,97],42:C,46:[1,98],48:[1,99],50:[1,100],52:[1,101],54:[1,102],56:[1,103],58:k,61:[1,104],63:[1,105],65:[1,106],66:[1,107],68:[1,108],86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),e(M,[2,174]),e(M,[2,135]),e(M,[2,136]),e(M,[2,137]),e(M,[2,138]),e(M,[2,139]),e(M,[2,140]),e(M,[2,141]),e(M,[2,142]),e(M,[2,143]),e(M,[2,144]),e(M,[2,145]),e(c,[2,12]),e(c,[2,18]),e(c,[2,19]),{9:[1,110]},e(Et,[2,26],{18:111,10:I1}),e(b,[2,27]),{40:112,41:38,42:C,43:39,45:40,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(b,[2,40]),e(b,[2,41]),e(b,[2,42]),e(R1,[2,71],{71:113,60:[1,115],72:[1,114]}),{74:116,76:117,77:[1,118],78:[1,119],113:kt,116:bt},e([42,58,60,72,86,99,102,103,106,108,111,112,113],[2,77]),e(b,[2,28]),e(b,[2,29]),e(b,[2,30]),e(b,[2,31]),e(b,[2,32]),{10:gt,12:Dt,14:Ft,27:Tt,28:122,32:St,42:Ct,58:_t,73:xt,77:[1,124],78:[1,125],80:135,81:Bt,82:mt,83:yt,84:vt,85:Vt,86:Lt,87:It,88:123,102:Rt,106:Nt,108:wt,111:Ot,112:Pt,113:Ut},e(nt,l,{5:148}),e(b,[2,37]),e(b,[2,38]),e(H1,[2,45],{42:Gt}),{42:C,45:150,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{99:[1,151],100:152,102:[1,153]},{42:C,45:154,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{42:C,45:155,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,100],{10:[1,156],93:[1,157]}),{77:[1,158]},e(T,[2,108],{117:160,10:[1,159],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,110],{10:[1,161]}),e(K,[2,176]),e(K,[2,163]),e(K,[2,164]),e(K,[2,165]),e(K,[2,166]),e(K,[2,167]),e(K,[2,168]),e(K,[2,169]),e(K,[2,170]),e(K,[2,171]),e(K,[2,172]),e(K,[2,173]),{42:C,45:162,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{30:163,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:171,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:173,48:[1,172],65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:174,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:175,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:176,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{106:[1,177]},{30:178,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:179,63:[1,180],65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:181,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:182,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{30:183,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(M,[2,175]),e(c,[2,20]),e(Et,[2,25]),e(H1,[2,43],{18:184,10:I1}),e(R1,[2,68],{10:[1,185]}),{10:[1,186]},{30:187,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{75:[1,188],76:189,113:kt,116:bt},e(m1,[2,73]),e(m1,[2,75]),e(m1,[2,76]),e(m1,[2,161]),e(m1,[2,162]),{8:q,9:Q,10:gt,11:Z,12:Dt,14:Ft,21:191,27:Tt,29:[1,190],32:St,42:Ct,58:_t,73:xt,80:135,81:Bt,82:mt,83:yt,84:vt,85:Vt,86:Lt,87:It,88:192,102:Rt,106:Nt,108:wt,111:Ot,112:Pt,113:Ut},e(g,[2,94]),e(g,[2,96]),e(g,[2,97]),e(g,[2,150]),e(g,[2,151]),e(g,[2,152]),e(g,[2,153]),e(g,[2,154]),e(g,[2,155]),e(g,[2,156]),e(g,[2,157]),e(g,[2,158]),e(g,[2,159]),e(g,[2,160]),e(g,[2,83]),e(g,[2,84]),e(g,[2,85]),e(g,[2,86]),e(g,[2,87]),e(g,[2,88]),e(g,[2,89]),e(g,[2,90]),e(g,[2,91]),e(g,[2,92]),e(g,[2,93]),{6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,193],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:U1,83:G1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},{10:I1,18:194},{10:[1,195],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,196]},{10:[1,197],103:[1,198]},e(Mt,[2,121]),{10:[1,199],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{10:[1,200],42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:109,111:L,112:I,113:R},{77:[1,201]},e(T,[2,102],{10:[1,202]}),e(T,[2,104],{10:[1,203]}),{77:[1,204]},e(K,[2,177]),{77:[1,205],95:[1,206]},e(W1,[2,50],{110:109,42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),{31:[1,207],65:p,79:208,113:A,114:d,115:E},e(h1,[2,79]),e(h1,[2,81]),e(h1,[2,82]),e(h1,[2,146]),e(h1,[2,147]),e(h1,[2,148]),e(h1,[2,149]),{47:[1,209],65:p,79:208,113:A,114:d,115:E},{30:210,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{49:[1,211],65:p,79:208,113:A,114:d,115:E},{51:[1,212],65:p,79:208,113:A,114:d,115:E},{53:[1,213],65:p,79:208,113:A,114:d,115:E},{55:[1,214],65:p,79:208,113:A,114:d,115:E},{58:[1,215]},{62:[1,216],65:p,79:208,113:A,114:d,115:E},{64:[1,217],65:p,79:208,113:A,114:d,115:E},{30:218,65:p,77:O,78:P,79:164,113:A,114:d,115:E},{31:[1,219],65:p,79:208,113:A,114:d,115:E},{65:p,67:[1,220],69:[1,221],79:208,113:A,114:d,115:E},{65:p,67:[1,223],69:[1,222],79:208,113:A,114:d,115:E},e(H1,[2,44],{42:Gt}),e(R1,[2,70]),e(R1,[2,69]),{60:[1,224],65:p,79:208,113:A,114:d,115:E},e(R1,[2,72]),e(m1,[2,74]),{30:225,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(nt,l,{5:226}),e(g,[2,95]),e(b,[2,35]),{41:227,42:C,43:39,45:40,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},{10:J,58:$,81:t1,89:228,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:239,101:[1,240],102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:241,101:[1,242],102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{102:[1,243]},{10:J,58:$,81:t1,89:244,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{42:C,45:245,58:k,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R},e(T,[2,101]),{77:[1,246]},{77:[1,247],95:[1,248]},e(T,[2,109]),e(T,[2,111],{10:[1,249]}),e(T,[2,112]),e(N,[2,51]),e(h1,[2,80]),e(N,[2,52]),{49:[1,250],65:p,79:208,113:A,114:d,115:E},e(N,[2,59]),e(N,[2,54]),e(N,[2,55]),e(N,[2,56]),{106:[1,251]},e(N,[2,58]),e(N,[2,60]),{64:[1,252],65:p,79:208,113:A,114:d,115:E},e(N,[2,62]),e(N,[2,63]),e(N,[2,65]),e(N,[2,64]),e(N,[2,66]),e([10,42,58,86,99,102,103,106,108,111,112,113],[2,78]),{31:[1,253],65:p,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,254],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:U1,83:G1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},e(W1,[2,48]),e(T,[2,114],{103:y1}),e(Kt,[2,123],{105:256,10:J,58:$,81:t1,102:e1,106:s1,107:u1,108:i1,109:r1}),e(W,[2,125]),e(W,[2,127]),e(W,[2,128]),e(W,[2,129]),e(W,[2,130]),e(W,[2,131]),e(W,[2,132]),e(W,[2,133]),e(W,[2,134]),e(T,[2,115],{103:y1}),{10:[1,257]},e(T,[2,116],{103:y1}),{10:[1,258]},e(Mt,[2,122]),e(T,[2,98],{103:y1}),e(T,[2,99],{110:109,42:C,58:k,86:x,99:B,102:m,103:y,106:v,108:V,111:L,112:I,113:R}),e(T,[2,103]),e(T,[2,105],{10:[1,259]}),e(T,[2,106]),{95:[1,260]},{49:[1,261]},{60:[1,262]},{64:[1,263]},{8:q,9:Q,11:Z,21:264},e(b,[2,34]),{10:J,58:$,81:t1,102:e1,104:265,105:230,106:s1,107:u1,108:i1,109:r1},e(W,[2,126]),{14:k1,42:b1,58:g1,86:D1,98:266,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},{14:k1,42:b1,58:g1,86:D1,98:267,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1,117:84},{95:[1,268]},e(T,[2,113]),e(N,[2,53]),{30:269,65:p,77:O,78:P,79:164,113:A,114:d,115:E},e(N,[2,61]),e(nt,l,{5:270}),e(Kt,[2,124],{105:256,10:J,58:$,81:t1,102:e1,106:s1,107:u1,108:i1,109:r1}),e(T,[2,119],{117:160,10:[1,271],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,120],{117:160,10:[1,272],14:k1,42:b1,58:g1,86:D1,102:F1,103:T1,106:S1,108:C1,111:_1,112:x1,113:B1}),e(T,[2,107]),{31:[1,273],65:p,79:208,113:A,114:d,115:E},{6:11,7:12,8:h,9:U,10:F,11:w,20:17,22:18,23:19,24:20,25:21,26:22,27:X,32:[1,274],33:24,34:o1,36:p1,38:A1,40:28,41:38,42:C,43:39,45:40,58:k,81:l1,82:U1,83:G1,84:M1,85:K1,86:x,99:B,102:m,103:y,106:v,108:V,110:41,111:L,112:I,113:R,118:Y1,119:j1,120:z1,121:X1},{10:J,58:$,81:t1,89:275,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},{10:J,58:$,81:t1,89:276,102:e1,104:229,105:230,106:s1,107:u1,108:i1,109:r1},e(N,[2,57]),e(b,[2,33]),e(T,[2,117],{103:y1}),e(T,[2,118],{103:y1})],defaultActions:{},parseError:function(a,o){if(o.recoverable)this.trace(a);else{var f=new Error(a);throw f.hash=o,f}},parse:function(a){var o=this,f=[0],r=[],S=[null],t=[],N1=this.table,s="",Y=0,Yt=0,Ce=2,jt=1,_e=t.slice.call(arguments,1),_=Object.create(this.lexer),d1={yy:{}};for(var ot in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ot)&&(d1.yy[ot]=this.yy[ot]);_.setInput(a,d1.yy),d1.yy.lexer=_,d1.yy.parser=this,typeof _.yylloc>"u"&&(_.yylloc={});var lt=_.yylloc;t.push(lt);var xe=_.options&&_.options.ranges;typeof d1.yy.parseError=="function"?this.parseError=d1.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Be(){var a1;return a1=r.pop()||_.lex()||jt,typeof a1!="number"&&(a1 instanceof Array&&(r=a1,a1=r.pop()),a1=o.symbols_[a1]||a1),a1}for(var G,E1,j,ht,v1={},q1,n1,zt,Q1;;){if(E1=f[f.length-1],this.defaultActions[E1]?j=this.defaultActions[E1]:((G===null||typeof G>"u")&&(G=Be()),j=N1[E1]&&N1[E1][G]),typeof j>"u"||!j.length||!j[0]){var ft="";Q1=[];for(q1 in N1[E1])this.terminals_[q1]&&q1>Ce&&Q1.push("'"+this.terminals_[q1]+"'");_.showPosition?ft="Parse error on line "+(Y+1)+`: `+_.showPosition()+` -Expecting `+Q1.join(", ")+", got '"+(this.terminals_[U]||U)+"'":ft="Parse error on line "+(Y+1)+": Unexpected "+(U==jt?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(ft,{text:_.match,token:this.terminals_[U]||U,line:_.yylineno,loc:lt,expected:Q1})}if(j[0]instanceof Array&&j.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E1+", token: "+U);switch(j[0]){case 1:f.push(U),S.push(_.yytext),t.push(_.yylloc),f.push(j[1]),U=null,Yt=_.yyleng,s=_.yytext,Y=_.yylineno,lt=_.yylloc;break;case 2:if(n1=this.productions_[j[1]][1],v1.$=S[S.length-n1],v1._$={first_line:t[t.length-(n1||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(n1||1)].first_column,last_column:t[t.length-1].last_column},xe&&(v1._$.range=[t[t.length-(n1||1)].range[0],t[t.length-1].range[1]]),ht=this.performAction.apply(v1,[s,Yt,Y,d1.yy,j[1],S,t].concat(_e)),typeof ht<"u")return ht;n1&&(f=f.slice(0,-1*n1*2),S=S.slice(0,-1*n1),t=t.slice(0,-1*n1)),f.push(this.productions_[j[1]][0]),S.push(v1.$),t.push(v1._$),zt=N1[f[f.length-2]][f[f.length-1]],f.push(zt);break;case 3:return!0}}return!0}},Se=function(){var f1={EOF:1,parseError:function(o,f){if(this.yy.parser)this.yy.parser.parseError(o,f);else throw new Error(o)},setInput:function(a,o){return this.yy=o||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var o=a.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var o=a.length,f=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===r.length?this.yylloc.first_column:0)+r[r.length-f.length].length-f[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+Q1.join(", ")+", got '"+(this.terminals_[G]||G)+"'":ft="Parse error on line "+(Y+1)+": Unexpected "+(G==jt?"end of input":"'"+(this.terminals_[G]||G)+"'"),this.parseError(ft,{text:_.match,token:this.terminals_[G]||G,line:_.yylineno,loc:lt,expected:Q1})}if(j[0]instanceof Array&&j.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E1+", token: "+G);switch(j[0]){case 1:f.push(G),S.push(_.yytext),t.push(_.yylloc),f.push(j[1]),G=null,Yt=_.yyleng,s=_.yytext,Y=_.yylineno,lt=_.yylloc;break;case 2:if(n1=this.productions_[j[1]][1],v1.$=S[S.length-n1],v1._$={first_line:t[t.length-(n1||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(n1||1)].first_column,last_column:t[t.length-1].last_column},xe&&(v1._$.range=[t[t.length-(n1||1)].range[0],t[t.length-1].range[1]]),ht=this.performAction.apply(v1,[s,Yt,Y,d1.yy,j[1],S,t].concat(_e)),typeof ht<"u")return ht;n1&&(f=f.slice(0,-1*n1*2),S=S.slice(0,-1*n1),t=t.slice(0,-1*n1)),f.push(this.productions_[j[1]][0]),S.push(v1.$),t.push(v1._$),zt=N1[f[f.length-2]][f[f.length-1]],f.push(zt);break;case 3:return!0}}return!0}},Se=function(){var f1={EOF:1,parseError:function(o,f){if(this.yy.parser)this.yy.parser.parseError(o,f);else throw new Error(o)},setInput:function(a,o){return this.yy=o||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var o=a.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var o=a.length,f=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===r.length?this.yylloc.first_column:0)+r[r.length-f.length].length-f[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),o=new Array(a.length+1).join("-");return a+this.upcomingInput()+` `+o+"^"},test_match:function(a,o){var f,r,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),r=a[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+a[0].length},this.yytext+=a[0],this.match+=a[0],this.matches=a,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(a[0].length),this.matched+=a[0],f=this.performAction.call(this,this.yy,this,o,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),f)return f;if(this._backtrack){for(var t in S)this[t]=S[t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,o,f,r;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),t=0;to[0].length)){if(o=f,r=t,this.options.backtrack_lexer){if(a=this.test_match(f,S[t]),a!==!1)return a;if(this._backtrack){o=!1;continue}else return!1}else if(!this.options.flex)break}return o?(a=this.test_match(o,S[r]),a!==!1?a:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var o=this.next();return o||this.lex()},begin:function(o){this.conditionStack.push(o)},popState:function(){var o=this.conditionStack.length-1;return o>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(o){return o=this.conditionStack.length-1-Math.abs(o||0),o>=0?this.conditionStack[o]:"INITIAL"},pushState:function(o){this.begin(o)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(o,f,r,S){switch(r){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return o.lex.firstGraph()&&this.begin("dir"),12;case 30:return o.lex.firstGraph()&&this.begin("dir"),12;case 31:return o.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return f1}();at.lexer=Se;function ct(){this.yy={}}return ct.prototype=at,at.Parser=ct,new ct}();pt.parser=pt;const Xe=pt,Oe="flowchart-";let Xt=0,L1=et(),D={},H=[],V1={},c1=[],$1={},tt={},Z1=0,At=!0,z,st,ut=[];const it=e=>we.sanitizeText(e,L1),P1=function(e){const u=Object.keys(D);for(const i of u)if(D[i].id===e)return D[i].domId;return e},Ht=function(e,u,i,n,c,l,h={}){let G,F=e;F!==void 0&&F.trim().length!==0&&(D[F]===void 0&&(D[F]={id:F,labelType:"text",domId:Oe+F+"-"+Xt,styles:[],classes:[]}),Xt++,u!==void 0?(L1=et(),G=it(u.text.trim()),D[F].labelType=u.type,G[0]==='"'&&G[G.length-1]==='"'&&(G=G.substring(1,G.length-1)),D[F].text=G):D[F].text===void 0&&(D[F].text=e),i!==void 0&&(D[F].type=i),n!=null&&n.forEach(function(w){D[F].styles.push(w)}),c!=null&&c.forEach(function(w){D[F].classes.push(w)}),l!==void 0&&(D[F].dir=l),D[F].props===void 0?D[F].props=h:h!==void 0&&Object.assign(D[F].props,h))},Wt=function(e,u,i){const l={start:e,end:u,type:void 0,text:"",labelType:"text"};J1.info("abc78 Got edge...",l);const h=i.text;if(h!==void 0&&(l.text=it(h.text.trim()),l.text[0]==='"'&&l.text[l.text.length-1]==='"'&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=h.type),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length),(l==null?void 0:l.length)>10&&(l.length=10),H.length<(L1.maxEdges??500))J1.info("abc78 pushing edge..."),H.push(l);else throw new Error(`Edge limit exceeded. ${H.length} edges found, but the limit is ${L1.maxEdges}. +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var o=this.next();return o||this.lex()},begin:function(o){this.conditionStack.push(o)},popState:function(){var o=this.conditionStack.length-1;return o>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(o){return o=this.conditionStack.length-1-Math.abs(o||0),o>=0?this.conditionStack[o]:"INITIAL"},pushState:function(o){this.begin(o)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(o,f,r,S){switch(r){case 0:return this.begin("acc_title"),34;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),36;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:this.begin("callbackname");break;case 8:this.popState();break;case 9:this.popState(),this.begin("callbackargs");break;case 10:return 92;case 11:this.popState();break;case 12:return 93;case 13:return"MD_STR";case 14:this.popState();break;case 15:this.begin("md_string");break;case 16:return"STR";case 17:this.popState();break;case 18:this.pushState("string");break;case 19:return 81;case 20:return 99;case 21:return 82;case 22:return 101;case 23:return 83;case 24:return 84;case 25:return 94;case 26:this.begin("click");break;case 27:this.popState();break;case 28:return 85;case 29:return o.lex.firstGraph()&&this.begin("dir"),12;case 30:return o.lex.firstGraph()&&this.begin("dir"),12;case 31:return o.lex.firstGraph()&&this.begin("dir"),12;case 32:return 27;case 33:return 32;case 34:return 95;case 35:return 95;case 36:return 95;case 37:return 95;case 38:return this.popState(),13;case 39:return this.popState(),14;case 40:return this.popState(),14;case 41:return this.popState(),14;case 42:return this.popState(),14;case 43:return this.popState(),14;case 44:return this.popState(),14;case 45:return this.popState(),14;case 46:return this.popState(),14;case 47:return this.popState(),14;case 48:return this.popState(),14;case 49:return 118;case 50:return 119;case 51:return 120;case 52:return 121;case 53:return 102;case 54:return 108;case 55:return 44;case 56:return 58;case 57:return 42;case 58:return 8;case 59:return 103;case 60:return 112;case 61:return this.popState(),75;case 62:return this.pushState("edgeText"),73;case 63:return 116;case 64:return this.popState(),75;case 65:return this.pushState("thickEdgeText"),73;case 66:return 116;case 67:return this.popState(),75;case 68:return this.pushState("dottedEdgeText"),73;case 69:return 116;case 70:return 75;case 71:return this.popState(),51;case 72:return"TEXT";case 73:return this.pushState("ellipseText"),50;case 74:return this.popState(),53;case 75:return this.pushState("text"),52;case 76:return this.popState(),55;case 77:return this.pushState("text"),54;case 78:return 56;case 79:return this.pushState("text"),65;case 80:return this.popState(),62;case 81:return this.pushState("text"),61;case 82:return this.popState(),47;case 83:return this.pushState("text"),46;case 84:return this.popState(),67;case 85:return this.popState(),69;case 86:return 114;case 87:return this.pushState("trapText"),66;case 88:return this.pushState("trapText"),68;case 89:return 115;case 90:return 65;case 91:return 87;case 92:return"SEP";case 93:return 86;case 94:return 112;case 95:return 108;case 96:return 42;case 97:return 106;case 98:return 111;case 99:return 113;case 100:return this.popState(),60;case 101:return this.pushState("text"),60;case 102:return this.popState(),49;case 103:return this.pushState("text"),48;case 104:return this.popState(),31;case 105:return this.pushState("text"),29;case 106:return this.popState(),64;case 107:return this.pushState("text"),63;case 108:return"TEXT";case 109:return"QUOTE";case 110:return 9;case 111:return 10;case 112:return 11}},rules:[/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:[^`"]+)/,/^(?:[`]["])/,/^(?:["][`])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:["])/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s])/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:flowchart-elk\b)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:[^-]|-(?!-)+)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:[^=]|=(?!))/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:[^\.]|\.(?!))/,/^(?:\s*~~[\~]+\s*)/,/^(?:[-/\)][\)])/,/^(?:[^\(\)\[\]\{\}]|!\)+)/,/^(?:\(-)/,/^(?:\]\))/,/^(?:\(\[)/,/^(?:\]\])/,/^(?:\[\[)/,/^(?:\[\|)/,/^(?:>)/,/^(?:\)\])/,/^(?:\[\()/,/^(?:\)\)\))/,/^(?:\(\(\()/,/^(?:[\\(?=\])][\]])/,/^(?:\/(?=\])\])/,/^(?:\/(?!\])|\\(?!\])|[^\\\[\]\(\)\{\}\/]+)/,/^(?:\[\/)/,/^(?:\[\\)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:\*)/,/^(?:#)/,/^(?:&)/,/^(?:([A-Za-z0-9!"\#$%&'*+\.`?\\_\/]|-(?=[^\>\-\.])|(?!))+)/,/^(?:-)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\|)/,/^(?:\))/,/^(?:\()/,/^(?:\])/,/^(?:\[)/,/^(?:(\}))/,/^(?:\{)/,/^(?:[^\[\]\(\)\{\}\|\"]+)/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{callbackargs:{rules:[11,12,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},callbackname:{rules:[8,9,10,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},href:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},click:{rules:[15,18,27,28,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dottedEdgeText:{rules:[15,18,67,69,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},thickEdgeText:{rules:[15,18,64,66,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},edgeText:{rules:[15,18,61,63,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},trapText:{rules:[15,18,70,73,75,77,81,83,84,85,86,87,88,101,103,105,107],inclusive:!1},ellipseText:{rules:[15,18,70,71,72,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},text:{rules:[15,18,70,73,74,75,76,77,80,81,82,83,87,88,100,101,102,103,104,105,106,107,108],inclusive:!1},vertex:{rules:[15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},dir:{rules:[15,18,38,39,40,41,42,43,44,45,46,47,48,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr_multiline:{rules:[5,6,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_descr:{rules:[3,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},acc_title:{rules:[1,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},md_string:{rules:[13,14,15,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},string:{rules:[15,16,17,18,70,73,75,77,81,83,87,88,101,103,105,107],inclusive:!1},INITIAL:{rules:[0,2,4,7,15,18,19,20,21,22,23,24,25,26,29,30,31,32,33,34,35,36,37,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,67,68,70,73,75,77,78,79,81,83,87,88,89,90,91,92,93,94,95,96,97,98,99,101,103,105,107,109,110,111,112],inclusive:!0}}};return f1}();at.lexer=Se;function ct(){this.yy={}}return ct.prototype=at,at.Parser=ct,new ct}();pt.parser=pt;const Xe=pt,Oe="flowchart-";let Xt=0,L1=et(),D={},H=[],V1={},c1=[],$1={},tt={},Z1=0,At=!0,z,st,ut=[];const it=e=>we.sanitizeText(e,L1),P1=function(e){const u=Object.keys(D);for(const i of u)if(D[i].id===e)return D[i].domId;return e},Ht=function(e,u,i,n,c,l,h={}){let U,F=e;F!==void 0&&F.trim().length!==0&&(D[F]===void 0&&(D[F]={id:F,labelType:"text",domId:Oe+F+"-"+Xt,styles:[],classes:[]}),Xt++,u!==void 0?(L1=et(),U=it(u.text.trim()),D[F].labelType=u.type,U[0]==='"'&&U[U.length-1]==='"'&&(U=U.substring(1,U.length-1)),D[F].text=U):D[F].text===void 0&&(D[F].text=e),i!==void 0&&(D[F].type=i),n!=null&&n.forEach(function(w){D[F].styles.push(w)}),c!=null&&c.forEach(function(w){D[F].classes.push(w)}),l!==void 0&&(D[F].dir=l),D[F].props===void 0?D[F].props=h:h!==void 0&&Object.assign(D[F].props,h))},Wt=function(e,u,i){const l={start:e,end:u,type:void 0,text:"",labelType:"text"};J1.info("abc78 Got edge...",l);const h=i.text;if(h!==void 0&&(l.text=it(h.text.trim()),l.text[0]==='"'&&l.text[l.text.length-1]==='"'&&(l.text=l.text.substring(1,l.text.length-1)),l.labelType=h.type),i!==void 0&&(l.type=i.type,l.stroke=i.stroke,l.length=i.length),(l==null?void 0:l.length)>10&&(l.length=10),H.length<(L1.maxEdges??500))J1.info("abc78 pushing edge..."),H.push(l);else throw new Error(`Edge limit exceeded. ${H.length} edges found, but the limit is ${L1.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. -You have to call mermaid.initialize.`)},qt=function(e,u,i){J1.info("addLink (abc78)",e,u,i);let n,c;for(n=0;n=H.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${H.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?H.defaultStyle=u:(dt.isSubstringInArray("fill",u)===-1&&u.push("fill:none"),H[i].style=u)})},Jt=function(e,u){e.split(",").forEach(function(i){V1[i]===void 0&&(V1[i]={id:i,styles:[],textStyles:[]}),u!=null&&u.forEach(function(n){if(n.match("color")){const c=n.replace("fill","bgFill").replace("color","fill");V1[i].textStyles.push(c)}V1[i].styles.push(n)})})},$t=function(e){z=e,z.match(/.*/)&&(z="LR"),z.match(/.*v/)&&(z="TB"),z==="TD"&&(z="TB")},rt=function(e,u){e.split(",").forEach(function(i){let n=i;D[n]!==void 0&&D[n].classes.push(u),$1[n]!==void 0&&$1[n].classes.push(u)})},Pe=function(e,u){e.split(",").forEach(function(i){u!==void 0&&(tt[st==="gen-1"?P1(i):i]=it(u))})},Ge=function(e,u,i){let n=P1(e);if(et().securityLevel!=="loose"||u===void 0)return;let c=[];if(typeof i=="string"){c=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l")),c.classed("hover",!0)}).on("mouseout",function(){u.transition().duration(500).style("opacity",0),w1(this).classed("hover",!1)})};ut.push(ce);const oe=function(e="gen-1"){D={},V1={},H=[],ut=[ce],c1=[],$1={},Z1=0,tt={},At=!0,st=e,L1=et(),Ne()},le=e=>{st=e||"gen-2"},he=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},fe=function(e,u,i){let n=e.text.trim(),c=i.text;e===i&&i.text.match(/\s/)&&(n=void 0);function l(X){const o1={boolean:{},number:{},string:{}},p1=[];let A1;return{nodeList:X.filter(function(k){const l1=typeof k;return k.stmt&&k.stmt==="dir"?(A1=k.value,!1):k.trim()===""?!1:l1 in o1?o1[l1].hasOwnProperty(k)?!1:o1[l1][k]=!0:p1.includes(k)?!1:p1.push(k)}),dir:A1}}let h=[];const{nodeList:G,dir:F}=l(h.concat.apply(h,u));if(h=G,st==="gen-1")for(let X=0;X2e3)return;if(pe[O1]=u,c1[u].id===e)return{result:!0,count:0};let n=0,c=1;for(;n=0){const h=Ae(e,l);if(h.result)return{result:!0,count:c+h.count};c=c+h.count}n=n+1}return{result:!1,count:c}},de=function(e){return pe[e]},Ee=function(){O1=-1,c1.length>0&&Ae("none",c1.length-1)},ke=function(){return c1},be=()=>At?(At=!1,!0):!1,Me=e=>{let u=e.trim(),i="arrow_open";switch(u[0]){case"<":i="arrow_point",u=u.slice(1);break;case"x":i="arrow_cross",u=u.slice(1);break;case"o":i="arrow_circle",u=u.slice(1);break}let n="normal";return u.includes("=")&&(n="thick"),u.includes(".")&&(n="dotted"),{type:i,stroke:n}},Ke=(e,u)=>{const i=u.length;let n=0;for(let c=0;c{const u=e.trim();let i=u.slice(0,-1),n="arrow_open";switch(u.slice(-1)){case"x":n="arrow_cross",u[0]==="x"&&(n="double_"+n,i=i.slice(1));break;case">":n="arrow_point",u[0]==="<"&&(n="double_"+n,i=i.slice(1));break;case"o":n="arrow_circle",u[0]==="o"&&(n="double_"+n,i=i.slice(1));break}let c="normal",l=i.length-1;i[0]==="="&&(c="thick"),i[0]==="~"&&(c="invisible");let h=Ke(".",i);return h&&(c="dotted",l=h),{type:n,stroke:c,length:l}},ge=(e,u)=>{const i=Ye(e);let n;if(u){if(n=Me(u),n.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=i.type;else{if(n.type!==i.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=i.length,n}return i},De=(e,u)=>{let i=!1;return e.forEach(n=>{n.nodes.indexOf(u)>=0&&(i=!0)}),i},Fe=(e,u)=>{const i=[];return e.nodes.forEach((n,c)=>{De(u,n)||i.push(e.nodes[c])}),{nodes:i}},Te={firstGraph:be},je={defaultConfig:()=>me.flowchart,setAccTitle:ye,getAccTitle:ve,getAccDescription:Ve,setAccDescription:Le,addVertex:Ht,lookUpDomId:P1,addLink:qt,updateLinkInterpolate:Qt,updateLink:Zt,addClass:Jt,setDirection:$t,setClass:rt,setTooltip:Pe,getTooltip:ee,setClickEvent:se,setLink:te,bindFunctions:ue,getDirection:ie,getVertices:re,getEdges:ne,getClasses:ae,clear:oe,setGen:le,defaultStyle:he,addSubGraph:fe,getDepthFirstPos:de,indexNodes:Ee,getSubGraphs:ke,destructLink:ge,lex:Te,exists:De,makeUniq:Fe,setDiagramTitle:Ie,getDiagramTitle:Re},He=Object.freeze(Object.defineProperty({__proto__:null,addClass:Jt,addLink:qt,addSingleLink:Wt,addSubGraph:fe,addVertex:Ht,bindFunctions:ue,clear:oe,default:je,defaultStyle:he,destructLink:ge,firstGraph:be,getClasses:ae,getDepthFirstPos:de,getDirection:ie,getEdges:ne,getSubGraphs:ke,getTooltip:ee,getVertices:re,indexNodes:Ee,lex:Te,lookUpDomId:P1,setClass:rt,setClickEvent:se,setDirection:$t,setGen:le,setLink:te,updateLink:Zt,updateLinkInterpolate:Qt},Symbol.toStringTag,{value:"Module"}));export{He as d,je as f,Xe as p}; +You have to call mermaid.initialize.`)},qt=function(e,u,i){J1.info("addLink (abc78)",e,u,i);let n,c;for(n=0;n=H.length)throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${H.length-1}. (Help: Ensure that the index is within the range of existing edges.)`);i==="default"?H.defaultStyle=u:(dt.isSubstringInArray("fill",u)===-1&&u.push("fill:none"),H[i].style=u)})},Jt=function(e,u){e.split(",").forEach(function(i){V1[i]===void 0&&(V1[i]={id:i,styles:[],textStyles:[]}),u!=null&&u.forEach(function(n){if(n.match("color")){const c=n.replace("fill","bgFill").replace("color","fill");V1[i].textStyles.push(c)}V1[i].styles.push(n)})})},$t=function(e){z=e,z.match(/.*/)&&(z="LR"),z.match(/.*v/)&&(z="TB"),z==="TD"&&(z="TB")},rt=function(e,u){e.split(",").forEach(function(i){let n=i;D[n]!==void 0&&D[n].classes.push(u),$1[n]!==void 0&&$1[n].classes.push(u)})},Pe=function(e,u){e.split(",").forEach(function(i){u!==void 0&&(tt[st==="gen-1"?P1(i):i]=it(u))})},Ue=function(e,u,i){let n=P1(e);if(et().securityLevel!=="loose"||u===void 0)return;let c=[];if(typeof i=="string"){c=i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let l=0;l")),c.classed("hover",!0)}).on("mouseout",function(){u.transition().duration(500).style("opacity",0),w1(this).classed("hover",!1)})};ut.push(ce);const oe=function(e="gen-1"){D={},V1={},H=[],ut=[ce],c1=[],$1={},Z1=0,tt={},At=!0,st=e,L1=et(),Ne()},le=e=>{st=e||"gen-2"},he=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},fe=function(e,u,i){let n=e.text.trim(),c=i.text;e===i&&i.text.match(/\s/)&&(n=void 0);function l(X){const o1={boolean:{},number:{},string:{}},p1=[];let A1;return{nodeList:X.filter(function(k){const l1=typeof k;return k.stmt&&k.stmt==="dir"?(A1=k.value,!1):k.trim()===""?!1:l1 in o1?o1[l1].hasOwnProperty(k)?!1:o1[l1][k]=!0:p1.includes(k)?!1:p1.push(k)}),dir:A1}}let h=[];const{nodeList:U,dir:F}=l(h.concat.apply(h,u));if(h=U,st==="gen-1")for(let X=0;X2e3)return;if(pe[O1]=u,c1[u].id===e)return{result:!0,count:0};let n=0,c=1;for(;n=0){const h=Ae(e,l);if(h.result)return{result:!0,count:c+h.count};c=c+h.count}n=n+1}return{result:!1,count:c}},de=function(e){return pe[e]},Ee=function(){O1=-1,c1.length>0&&Ae("none",c1.length-1)},ke=function(){return c1},be=()=>At?(At=!1,!0):!1,Me=e=>{let u=e.trim(),i="arrow_open";switch(u[0]){case"<":i="arrow_point",u=u.slice(1);break;case"x":i="arrow_cross",u=u.slice(1);break;case"o":i="arrow_circle",u=u.slice(1);break}let n="normal";return u.includes("=")&&(n="thick"),u.includes(".")&&(n="dotted"),{type:i,stroke:n}},Ke=(e,u)=>{const i=u.length;let n=0;for(let c=0;c{const u=e.trim();let i=u.slice(0,-1),n="arrow_open";switch(u.slice(-1)){case"x":n="arrow_cross",u[0]==="x"&&(n="double_"+n,i=i.slice(1));break;case">":n="arrow_point",u[0]==="<"&&(n="double_"+n,i=i.slice(1));break;case"o":n="arrow_circle",u[0]==="o"&&(n="double_"+n,i=i.slice(1));break}let c="normal",l=i.length-1;i[0]==="="&&(c="thick"),i[0]==="~"&&(c="invisible");let h=Ke(".",i);return h&&(c="dotted",l=h),{type:n,stroke:c,length:l}},ge=(e,u)=>{const i=Ye(e);let n;if(u){if(n=Me(u),n.stroke!==i.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=i.type;else{if(n.type!==i.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=i.length,n}return i},De=(e,u)=>{let i=!1;return e.forEach(n=>{n.nodes.indexOf(u)>=0&&(i=!0)}),i},Fe=(e,u)=>{const i=[];return e.nodes.forEach((n,c)=>{De(u,n)||i.push(e.nodes[c])}),{nodes:i}},Te={firstGraph:be},je={defaultConfig:()=>me.flowchart,setAccTitle:ye,getAccTitle:ve,getAccDescription:Ve,setAccDescription:Le,addVertex:Ht,lookUpDomId:P1,addLink:qt,updateLinkInterpolate:Qt,updateLink:Zt,addClass:Jt,setDirection:$t,setClass:rt,setTooltip:Pe,getTooltip:ee,setClickEvent:se,setLink:te,bindFunctions:ue,getDirection:ie,getVertices:re,getEdges:ne,getClasses:ae,clear:oe,setGen:le,defaultStyle:he,addSubGraph:fe,getDepthFirstPos:de,indexNodes:Ee,getSubGraphs:ke,destructLink:ge,lex:Te,exists:De,makeUniq:Fe,setDiagramTitle:Ie,getDiagramTitle:Re},He=Object.freeze(Object.defineProperty({__proto__:null,addClass:Jt,addLink:qt,addSingleLink:Wt,addSubGraph:fe,addVertex:Ht,bindFunctions:ue,clear:oe,default:je,defaultStyle:he,destructLink:ge,firstGraph:be,getClasses:ae,getDepthFirstPos:de,getDirection:ie,getEdges:ne,getSubGraphs:ke,getTooltip:ee,getVertices:re,indexNodes:Ee,lex:Te,lookUpDomId:P1,setClass:rt,setClickEvent:se,setDirection:$t,setGen:le,setLink:te,updateLink:Zt,updateLinkInterpolate:Qt},Symbol.toStringTag,{value:"Module"}));export{He as d,je as f,Xe as p}; diff --git a/assets/chunks/flowDiagram-b222e15a.Cpr-kPYG.js b/assets/chunks/flowDiagram-622f9fc1.UNHUO6YN.js similarity index 97% rename from assets/chunks/flowDiagram-b222e15a.Cpr-kPYG.js rename to assets/chunks/flowDiagram-622f9fc1.UNHUO6YN.js index 763f0eb4..c887a89f 100644 --- a/assets/chunks/flowDiagram-b222e15a.Cpr-kPYG.js +++ b/assets/chunks/flowDiagram-622f9fc1.UNHUO6YN.js @@ -1,4 +1,4 @@ -import{p as Lt,f as V}from"./flowDb-c1833063.BVO1h-fk.js";import{h as S,f as tt,G as _t}from"./graph.CwfrPCLx.js";import{h as x,n as U,o as Y,p as et,c as G,r as rt,j as at,l as R,q as z,t as Et}from"../app.CbQoAe_D.js";import{u as Tt,r as Nt,p as At,l as Ct,d as M}from"./layout.Ds1muZd1.js";import{a as N,b as nt,i as st,c as E,e as it,d as ot,f as It,g as Bt,s as Mt}from"./styles-483fbfea.CCXKtTy9.js";import{l as Dt}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./index-01f381cb.Dh9et-Tw.js";import"./clone.BumBiDEu.js";import"./edges-066a5561.CpbBxaaE.js";import"./createText-ca0c5216.5u9lbHcb.js";import"./channel.Byw1PSvd.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";function Rt(r){if(!r.ok)throw new Error(r.status+" "+r.statusText);return r.text()}function Gt(r,e){return fetch(r,e).then(Rt)}function Pt(r){return(e,t)=>Gt(e,t).then(n=>new DOMParser().parseFromString(n,r))}var Ut=Pt("image/svg+xml"),H={normal:Wt,vee:Vt,undirected:zt};function $t(r){H=r}function Wt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Vt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function zt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Yt(r,e){var t=r;return t.node().appendChild(e.label),N(t,e.labelStyle),t}function Ht(r,e){for(var t=r.append("text"),n=Xt(e.label).split(` +import{p as Lt,f as V}from"./flowDb-0da60e67.CpQFkmn8.js";import{h as S,f as tt,G as _t}from"./graph.C4kgFXP1.js";import{h as x,n as U,o as Y,p as et,c as G,r as rt,j as at,l as R,q as z,t as Et}from"../app.DRN3unl1.js";import{u as Tt,r as Nt,p as At,l as Ct,d as M}from"./layout.C5Nv6jKv.js";import{a as N,b as nt,i as st,c as E,e as it,d as ot,f as It,g as Bt,s as Mt}from"./styles-422bd1c9.CNvCrs-e.js";import{l as Dt}from"./line.DpDoeUQJ.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./index-9620d214.nAHig6oE.js";import"./clone.Bnzwv1hF.js";import"./edges-5962ec63.BFgoqf-O.js";import"./createText-4a4f35c9.Cu3K6_Cl.js";import"./channel.Bgp4IlJX.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";function Rt(r){if(!r.ok)throw new Error(r.status+" "+r.statusText);return r.text()}function Gt(r,e){return fetch(r,e).then(Rt)}function Pt(r){return(e,t)=>Gt(e,t).then(n=>new DOMParser().parseFromString(n,r))}var Ut=Pt("image/svg+xml"),H={normal:Wt,vee:Vt,undirected:zt};function $t(r){H=r}function Wt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Vt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function zt(r,e,t,n){var a=r.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=a.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");N(s,t[n+"Style"]),t[n+"Class"]&&s.attr("class",t[n+"Class"])}function Yt(r,e){var t=r;return t.node().appendChild(e.label),N(t,e.labelStyle),t}function Ht(r,e){for(var t=r.append("text"),n=Xt(e.label).split(` `),a=0;a0}function T(r,e,t){var n=r.x,a=r.y,s=[],i=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;e.forEach(function(p){i=Math.min(i,p.x),o=Math.min(o,p.y)});for(var c=n-r.width/2-i,d=a-r.height/2-o,l=0;l1&&s.sort(function(p,y){var f=p.x-t.x,g=p.y-t.y,k=Math.sqrt(f*f+g*g),I=y.x-t.x,_=y.y-t.y,$=Math.sqrt(I*I+_*_);return k<$?-1:k===$?0:1}),s[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",r),r)}function Z(r,e){var t=r.x,n=r.y,a=e.x-t,s=e.y-n,i=r.width/2,o=r.height/2,c,d;return Math.abs(s)*i>Math.abs(a)*o?(s<0&&(o=-o),c=s===0?0:o*a/s,d=o):(a<0&&(i=-i),c=i,d=a===0?0:i*s/a),{x:t+c,y:n+d}}var K={rect:oe,ellipse:le,circle:ce,diamond:de};function ie(r){K=r}function oe(r,e,t){var n=r.insert("rect",":first-child").attr("rx",t.rx).attr("ry",t.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return t.intersect=function(a){return Z(t,a)},n}function le(r,e,t){var n=e.width/2,a=e.height/2,s=r.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",n).attr("ry",a);return t.intersect=function(i){return ct(t,n,a,i)},s}function ce(r,e,t){var n=Math.max(e.width,e.height)/2,a=r.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",n);return t.intersect=function(s){return ne(t,n,s)},a}function de(r,e,t){var n=e.width*Math.SQRT2/2,a=e.height*Math.SQRT2/2,s=[{x:0,y:-a},{x:-n,y:0},{x:0,y:a},{x:n,y:0}],i=r.insert("polygon",":first-child").attr("points",s.map(function(o){return o.x+","+o.y}).join(" "));return t.intersect=function(o){return T(t,s,o)},i}function he(){var r=function(e,t){pe(t);var n=D(e,"output"),a=D(n,"clusters"),s=D(n,"edgePaths"),i=F(D(n,"edgeLabels"),t),o=Q(D(n,"nodes"),t,K);Ct(t),ae(o,t),re(i,t),q(s,t,H);var c=X(a,t);ee(c,t),ve(t)};return r.createNodes=function(e){return arguments.length?(te(e),r):Q},r.createClusters=function(e){return arguments.length?(Ft(e),r):X},r.createEdgeLabels=function(e){return arguments.length?(qt(e),r):F},r.createEdgePaths=function(e){return arguments.length?(Qt(e),r):q},r.shapes=function(e){return arguments.length?(ie(e),r):K},r.arrows=function(e){return arguments.length?($t(e),r):H},r}var ue={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},fe={arrowhead:"normal",curve:U};function pe(r){r.nodes().forEach(function(e){var t=r.node(e);!S(t,"label")&&!r.children(e).length&&(t.label=e),S(t,"paddingX")&&M(t,{paddingLeft:t.paddingX,paddingRight:t.paddingX}),S(t,"paddingY")&&M(t,{paddingTop:t.paddingY,paddingBottom:t.paddingY}),S(t,"padding")&&M(t,{paddingLeft:t.padding,paddingRight:t.padding,paddingTop:t.padding,paddingBottom:t.padding}),M(t,ue),tt(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(n){t[n]=Number(t[n])}),S(t,"width")&&(t._prevWidth=t.width),S(t,"height")&&(t._prevHeight=t.height)}),r.edges().forEach(function(e){var t=r.edge(e);S(t,"label")||(t.label=""),M(t,fe)})}function ve(r){tt(r.nodes(),function(e){var t=r.node(e);S(t,"_prevWidth")?t.width=t._prevWidth:delete t.width,S(t,"_prevHeight")?t.height=t._prevHeight:delete t.height,delete t._prevWidth,delete t._prevHeight})}function D(r,e){var t=r.select("g."+e);return t.empty()&&(t=r.append("g").attr("class",e)),t}function dt(r,e,t){const n=e.width,a=e.height,s=(n+a)*.9,i=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}],o=A(r,s,s,i);return t.intersect=function(c){return T(t,i,c)},o}function ht(r,e,t){const a=e.height,s=a/4,i=e.width+2*s,o=[{x:s,y:0},{x:i-s,y:0},{x:i,y:-a/2},{x:i-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],c=A(r,i,a,o);return t.intersect=function(d){return T(t,o,d)},c}function ut(r,e,t){const n=e.width,a=e.height,s=[{x:-a/2,y:0},{x:n,y:0},{x:n,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function ft(r,e,t){const n=e.width,a=e.height,s=[{x:-2*a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function pt(r,e,t){const n=e.width,a=e.height,s=[{x:2*a/6,y:0},{x:n+a/6,y:0},{x:n-2*a/6,y:-a},{x:-a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function vt(r,e,t){const n=e.width,a=e.height,s=[{x:-2*a/6,y:0},{x:n+2*a/6,y:0},{x:n-a/6,y:-a},{x:a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function gt(r,e,t){const n=e.width,a=e.height,s=[{x:a/6,y:0},{x:n-a/6,y:0},{x:n+2*a/6,y:-a},{x:-2*a/6,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function yt(r,e,t){const n=e.width,a=e.height,s=[{x:0,y:0},{x:n+a/2,y:0},{x:n,y:-a/2},{x:n+a/2,y:-a},{x:0,y:-a}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function wt(r,e,t){const n=e.height,a=e.width+n/4,s=r.insert("rect",":first-child").attr("rx",n/2).attr("ry",n/2).attr("x",-a/2).attr("y",-n/2).attr("width",a).attr("height",n);return t.intersect=function(i){return Z(t,i)},s}function mt(r,e,t){const n=e.width,a=e.height,s=[{x:0,y:0},{x:n,y:0},{x:n,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],i=A(r,n,a,s);return t.intersect=function(o){return T(t,s,o)},i}function xt(r,e,t){const n=e.width,a=n/2,s=a/(2.5+n/50),i=e.height+s,o="M 0,"+s+" a "+a+","+s+" 0,0,0 "+n+" 0 a "+a+","+s+" 0,0,0 "+-n+" 0 l 0,"+i+" a "+a+","+s+" 0,0,0 "+n+" 0 l 0,"+-i,c=r.attr("label-offset-y",s).insert("path",":first-child").attr("d",o).attr("transform","translate("+-n/2+","+-(i/2+s)+")");return t.intersect=function(d){const l=Z(t,d),v=l.x-t.x;if(a!=0&&(Math.abs(v)t.height/2-s)){let h=s*s*(1-v*v/(a*a));h!=0&&(h=Math.sqrt(h)),h=s-h,d.y-t.y>0&&(h=-h),l.y+=h}return l},c}function ge(r){r.shapes().question=dt,r.shapes().hexagon=ht,r.shapes().stadium=wt,r.shapes().subroutine=mt,r.shapes().cylinder=xt,r.shapes().rect_left_inv_arrow=ut,r.shapes().lean_right=ft,r.shapes().lean_left=pt,r.shapes().trapezoid=vt,r.shapes().inv_trapezoid=gt,r.shapes().rect_right_inv_arrow=yt}function ye(r){r({question:dt}),r({hexagon:ht}),r({stadium:wt}),r({subroutine:mt}),r({cylinder:xt}),r({rect_left_inv_arrow:ut}),r({lean_right:ft}),r({lean_left:pt}),r({trapezoid:vt}),r({inv_trapezoid:gt}),r({rect_right_inv_arrow:yt})}function A(r,e,t,n){return r.insert("polygon",":first-child").attr("points",n.map(function(a){return a.x+","+a.y}).join(" ")).attr("transform","translate("+-e/2+","+t/2+")")}const we={addToRender:ge,addToRenderV2:ye},bt={},me=function(r){const e=Object.keys(r);for(const t of e)bt[t]=r[t]},kt=async function(r,e,t,n,a,s){const i=n?n.select(`[id="${t}"]`):x(`[id="${t}"]`),o=a||document,c=Object.keys(r);for(const d of c){const l=r[d];let v="default";l.classes.length>0&&(v=l.classes.join(" "));const h=Y(l.styles);let u=l.text!==void 0?l.text:l.id,p;if(et(G().flowchart.htmlLabels)){const g={label:await rt(u.replace(/fa[blrs]?:fa-[\w-]+/g,k=>``),G())};p=nt(i,g).node(),p.parentNode.removeChild(p)}else{const g=o.createElementNS("http://www.w3.org/2000/svg","text");g.setAttribute("style",h.labelStyle.replace("color:","fill:"));const k=u.split(at.lineBreakRegex);for(const I of k){const _=o.createElementNS("http://www.w3.org/2000/svg","tspan");_.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),_.setAttribute("dy","1em"),_.setAttribute("x","1"),_.textContent=I,g.appendChild(_)}p=g}let y=0,f="";switch(l.type){case"round":y=5,f="rect";break;case"square":f="rect";break;case"diamond":f="question";break;case"hexagon":f="hexagon";break;case"odd":f="rect_left_inv_arrow";break;case"lean_right":f="lean_right";break;case"lean_left":f="lean_left";break;case"trapezoid":f="trapezoid";break;case"inv_trapezoid":f="inv_trapezoid";break;case"odd_right":f="rect_left_inv_arrow";break;case"circle":f="circle";break;case"ellipse":f="ellipse";break;case"stadium":f="stadium";break;case"subroutine":f="subroutine";break;case"cylinder":f="cylinder";break;case"group":f="rect";break;default:f="rect"}R.warn("Adding node",l.id,l.domId),e.setNode(s.db.lookUpDomId(l.id),{labelType:"svg",labelStyle:h.labelStyle,shape:f,label:p,rx:y,ry:y,class:v,style:h.style,id:s.db.lookUpDomId(l.id)})}},St=async function(r,e,t){let n=0,a,s;if(r.defaultStyle!==void 0){const i=Y(r.defaultStyle);a=i.style,s=i.labelStyle}for(const i of r){n++;const o="L-"+i.start+"-"+i.end,c="LS-"+i.start,d="LE-"+i.end,l={};i.type==="arrow_open"?l.arrowhead="none":l.arrowhead="normal";let v="",h="";if(i.style!==void 0){const u=Y(i.style);v=u.style,h=u.labelStyle}else switch(i.stroke){case"normal":v="fill:none",a!==void 0&&(v=a),s!==void 0&&(h=s);break;case"dotted":v="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":v=" stroke-width: 3.5px;fill:none";break}l.style=v,l.labelStyle=h,i.interpolate!==void 0?l.curve=z(i.interpolate,U):r.defaultInterpolate!==void 0?l.curve=z(r.defaultInterpolate,U):l.curve=z(bt.curve,U),i.text===void 0?i.style!==void 0&&(l.arrowheadStyle="fill: #333"):(l.arrowheadStyle="fill: #333",l.labelpos="c",et(G().flowchart.htmlLabels)?(l.labelType="html",l.label=`${await rt(i.text.replace(/fa[blrs]?:fa-[\w-]+/g,u=>``),G())}`):(l.labelType="text",l.label=i.text.replace(at.lineBreakRegex,` `),i.style===void 0&&(l.style=l.style||"stroke: #333; stroke-width: 1.5px;fill:none"),l.labelStyle=l.labelStyle.replace("color:","fill:"))),l.id=o,l.class=c+" "+d,l.minlen=i.length||1,e.setEdge(t.db.lookUpDomId(i.start),t.db.lookUpDomId(i.end),l,n)}},xe=function(r,e){return R.info("Extracting classes"),e.db.getClasses()},be=async function(r,e,t,n){R.info("Drawing flowchart");const{securityLevel:a,flowchart:s}=G();let i;a==="sandbox"&&(i=x("#i"+e));const o=a==="sandbox"?x(i.nodes()[0].contentDocument.body):x("body"),c=a==="sandbox"?i.nodes()[0].contentDocument:document;let d=n.db.getDirection();d===void 0&&(d="TD");const l=s.nodeSpacing||50,v=s.rankSpacing||50,h=new _t({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:l,ranksep:v,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let u;const p=n.db.getSubGraphs();for(let w=p.length-1;w>=0;w--)u=p[w],n.db.addVertex(u.id,u.title,"group",void 0,u.classes);const y=n.db.getVertices();R.warn("Get vertices",y);const f=n.db.getEdges();let g=0;for(g=p.length-1;g>=0;g--){u=p[g],Mt("cluster").append("text");for(let w=0;w{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,ke.setConf(r.flowchart),V.clear(),V.setGen("gen-1")}};export{Ue as diagram}; diff --git a/assets/chunks/flowDiagram-v2-13329dc7.CSjni5i6.js b/assets/chunks/flowDiagram-v2-13329dc7.CSjni5i6.js deleted file mode 100644 index 98fc8e99..00000000 --- a/assets/chunks/flowDiagram-v2-13329dc7.CSjni5i6.js +++ /dev/null @@ -1 +0,0 @@ -import{p as e,f as o}from"./flowDb-c1833063.BVO1h-fk.js";import{f as t,g as a}from"./styles-483fbfea.CCXKtTy9.js";import{u as i}from"../app.CbQoAe_D.js";import"./graph.CwfrPCLx.js";import"./layout.Ds1muZd1.js";import"./index-01f381cb.Dh9et-Tw.js";import"./clone.BumBiDEu.js";import"./edges-066a5561.CpbBxaaE.js";import"./createText-ca0c5216.5u9lbHcb.js";import"./line.Rvm4JnwS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";import"./channel.Byw1PSvd.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";const c={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,i({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{c as diagram}; diff --git a/assets/chunks/flowDiagram-v2-a33b4996.npThVBEn.js b/assets/chunks/flowDiagram-v2-a33b4996.npThVBEn.js new file mode 100644 index 00000000..4f56161f --- /dev/null +++ b/assets/chunks/flowDiagram-v2-a33b4996.npThVBEn.js @@ -0,0 +1 @@ +import{p as e,f as o}from"./flowDb-0da60e67.CpQFkmn8.js";import{f as t,g as a}from"./styles-422bd1c9.CNvCrs-e.js";import{aq as i}from"../app.DRN3unl1.js";import"./graph.C4kgFXP1.js";import"./layout.C5Nv6jKv.js";import"./index-9620d214.nAHig6oE.js";import"./clone.Bnzwv1hF.js";import"./edges-5962ec63.BFgoqf-O.js";import"./createText-4a4f35c9.Cu3K6_Cl.js";import"./line.DpDoeUQJ.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";import"./channel.Bgp4IlJX.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";const c={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,i({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{c as diagram}; diff --git a/assets/chunks/flowchart-elk-definition-ae0efee6.CLgAh--I.js b/assets/chunks/flowchart-elk-definition-930acc39.RaYPOHcR.js similarity index 99% rename from assets/chunks/flowchart-elk-definition-ae0efee6.CLgAh--I.js rename to assets/chunks/flowchart-elk-definition-930acc39.RaYPOHcR.js index c7130c8a..feaa2e61 100644 --- a/assets/chunks/flowchart-elk-definition-ae0efee6.CLgAh--I.js +++ b/assets/chunks/flowchart-elk-definition-930acc39.RaYPOHcR.js @@ -1,4 +1,4 @@ -import{d as xNe,p as FNe}from"./flowDb-c1833063.BVO1h-fk.js";import{b2 as Nse,b3 as BNe,l as Ba,h as IO,aZ as xU,t as RNe,o as E0n,q as j0n,n as $U,j as KNe}from"../app.CbQoAe_D.js";import{i as _Ne,a as HNe,l as qNe,b as UNe,k as GNe,m as zNe}from"./edges-066a5561.CpbBxaaE.js";import{l as XNe}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./createText-ca0c5216.5u9lbHcb.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";function NU(ct){throw new Error('Could not dynamically require "'+ct+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Bse={exports:{}};(function(ct,_t){(function(Xt){ct.exports=Xt()})(function(){return function(){function Xt(gt,Sr,Di){function y(Ht,Jt){if(!Sr[Ht]){if(!gt[Ht]){var ze=typeof NU=="function"&&NU;if(!Jt&&ze)return ze(Ht,!0);if(Wt)return Wt(Ht,!0);var Yi=new Error("Cannot find module '"+Ht+"'");throw Yi.code="MODULE_NOT_FOUND",Yi}var Ri=Sr[Ht]={exports:{}};gt[Ht][0].call(Ri.exports,function(En){var hu=gt[Ht][1][En];return y(hu||En)},Ri,Ri.exports,Xt,gt,Sr,Di)}return Sr[Ht].exports}for(var Wt=typeof NU=="function"&&NU,Bu=0;Bu0&&arguments[0]!==void 0?arguments[0]:{},Yi=ze.defaultLayoutOptions,Ri=Yi===void 0?{}:Yi,En=ze.algorithms,hu=En===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:En,Qc=ze.workerFactory,Ru=ze.workerUrl;if(y(this,Ht),this.defaultLayoutOptions=Ri,this.initialized=!1,typeof Ru>"u"&&typeof Qc>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var Pr=Qc;typeof Ru<"u"&&typeof Qc>"u"&&(Pr=function(N1){return new Worker(N1)});var Cf=Pr(Ru);if(typeof Cf.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new Bu(Cf),this.worker.postMessage({cmd:"register",algorithms:hu}).then(function(L1){return Jt.initialized=!0}).catch(console.err)}return Di(Ht,[{key:"layout",value:function(ze){var Yi=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ri=Yi.layoutOptions,En=Ri===void 0?this.defaultLayoutOptions:Ri,hu=Yi.logging,Qc=hu===void 0?!1:hu,Ru=Yi.measureExecutionTime,Pr=Ru===void 0?!1:Ru;return ze?this.worker.postMessage({cmd:"layout",graph:ze,layoutOptions:En,options:{logging:Qc,measureExecutionTime:Pr}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker&&this.worker.terminate()}}]),Ht}();Sr.default=Wt;var Bu=function(){function Ht(Jt){var ze=this;if(y(this,Ht),Jt===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=Jt,this.worker.onmessage=function(Yi){setTimeout(function(){ze.receive(ze,Yi)},0)}}return Di(Ht,[{key:"postMessage",value:function(ze){var Yi=this.id||0;this.id=Yi+1,ze.id=Yi;var Ri=this;return new Promise(function(En,hu){Ri.resolvers[Yi]=function(Qc,Ru){Qc?(Ri.convertGwtStyleError(Qc),hu(Qc)):En(Ru)},Ri.worker.postMessage(ze)})}},{key:"receive",value:function(ze,Yi){var Ri=Yi.data,En=ze.resolvers[Ri.id];En&&(delete ze.resolvers[Ri.id],Ri.error?En(Ri.error):En(null,Ri.data))}},{key:"terminate",value:function(){this.worker&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(ze){if(ze){var Yi=ze.__java$exception;Yi&&(Yi.cause&&Yi.cause.backingJsObject&&(ze.cause=Yi.cause.backingJsObject,this.convertGwtStyleError(ze.cause)),delete ze.__java$exception)}}}]),Ht}()},{}],2:[function(Xt,gt,Sr){(function(Di){(function(){var y;typeof window<"u"?y=window:typeof Di<"u"?y=Di:typeof self<"u"&&(y=self);var Wt;function Bu(){}function Ht(){}function Jt(){}function ze(){}function Yi(){}function Ri(){}function En(){}function hu(){}function Qc(){}function Ru(){}function Pr(){}function Cf(){}function L1(){}function N1(){}function og(){}function V3(){}function $1(){}function ul(){}function C0n(){}function M0n(){}function J2(){}function F(){}function T0n(){}function mE(){}function A0n(){}function S0n(){}function P0n(){}function I0n(){}function O0n(){}function FU(){}function D0n(){}function L0n(){}function N0n(){}function OO(){}function $0n(){}function x0n(){}function F0n(){}function DO(){}function B0n(){}function R0n(){}function BU(){}function K0n(){}function _0n(){}function yu(){}function ju(){}function Q2(){}function Y2(){}function H0n(){}function q0n(){}function U0n(){}function G0n(){}function RU(){}function Eu(){}function Z2(){}function np(){}function z0n(){}function X0n(){}function LO(){}function V0n(){}function W0n(){}function J0n(){}function Q0n(){}function Y0n(){}function Z0n(){}function nbn(){}function ebn(){}function tbn(){}function ibn(){}function rbn(){}function cbn(){}function ubn(){}function obn(){}function sbn(){}function fbn(){}function hbn(){}function lbn(){}function abn(){}function dbn(){}function bbn(){}function wbn(){}function gbn(){}function pbn(){}function mbn(){}function vbn(){}function kbn(){}function ybn(){}function jbn(){}function Ebn(){}function Cbn(){}function Mbn(){}function Tbn(){}function KU(){}function Abn(){}function Sbn(){}function Pbn(){}function Ibn(){}function NO(){}function $O(){}function vE(){}function Obn(){}function Dbn(){}function xO(){}function Lbn(){}function Nbn(){}function $bn(){}function kE(){}function xbn(){}function Fbn(){}function Bbn(){}function Rbn(){}function Kbn(){}function _bn(){}function Hbn(){}function qbn(){}function Ubn(){}function _U(){}function Gbn(){}function zbn(){}function HU(){}function Xbn(){}function Vbn(){}function Wbn(){}function Jbn(){}function Qbn(){}function Ybn(){}function Zbn(){}function nwn(){}function ewn(){}function twn(){}function iwn(){}function rwn(){}function cwn(){}function FO(){}function uwn(){}function own(){}function swn(){}function fwn(){}function hwn(){}function lwn(){}function awn(){}function dwn(){}function bwn(){}function qU(){}function UU(){}function wwn(){}function gwn(){}function pwn(){}function mwn(){}function vwn(){}function kwn(){}function ywn(){}function jwn(){}function Ewn(){}function Cwn(){}function Mwn(){}function Twn(){}function Awn(){}function Swn(){}function Pwn(){}function Iwn(){}function Own(){}function Dwn(){}function Lwn(){}function Nwn(){}function $wn(){}function xwn(){}function Fwn(){}function Bwn(){}function Rwn(){}function Kwn(){}function _wn(){}function Hwn(){}function qwn(){}function Uwn(){}function Gwn(){}function zwn(){}function Xwn(){}function Vwn(){}function Wwn(){}function Jwn(){}function Qwn(){}function Ywn(){}function Zwn(){}function ngn(){}function egn(){}function tgn(){}function ign(){}function rgn(){}function cgn(){}function ugn(){}function ogn(){}function sgn(){}function fgn(){}function hgn(){}function lgn(){}function agn(){}function dgn(){}function bgn(){}function wgn(){}function ggn(){}function pgn(){}function mgn(){}function vgn(){}function kgn(){}function ygn(){}function jgn(){}function Egn(){}function Cgn(){}function Mgn(){}function Tgn(){}function Agn(){}function Sgn(){}function Pgn(){}function Ign(){}function Ogn(){}function Dgn(){}function Lgn(){}function Ngn(){}function $gn(){}function xgn(){}function Fgn(){}function Bgn(){}function Rgn(){}function Kgn(){}function _gn(){}function Hgn(){}function qgn(){}function Ugn(){}function Ggn(){}function zgn(){}function Xgn(){}function Vgn(){}function Wgn(){}function Jgn(){}function Qgn(){}function Ygn(){}function Zgn(){}function n2n(){}function e2n(){}function t2n(){}function i2n(){}function r2n(){}function c2n(){}function u2n(){}function GU(){}function o2n(){}function s2n(){}function f2n(){}function h2n(){}function l2n(){}function a2n(){}function d2n(){}function b2n(){}function w2n(){}function g2n(){}function p2n(){}function m2n(){}function v2n(){}function k2n(){}function y2n(){}function j2n(){}function E2n(){}function C2n(){}function M2n(){}function T2n(){}function A2n(){}function S2n(){}function P2n(){}function I2n(){}function O2n(){}function D2n(){}function L2n(){}function N2n(){}function $2n(){}function x2n(){}function F2n(){}function B2n(){}function R2n(){}function K2n(){}function _2n(){}function H2n(){}function q2n(){}function U2n(){}function G2n(){}function z2n(){}function X2n(){}function V2n(){}function W2n(){}function J2n(){}function Q2n(){}function Y2n(){}function Z2n(){}function npn(){}function epn(){}function tpn(){}function ipn(){}function rpn(){}function cpn(){}function upn(){}function opn(){}function spn(){}function fpn(){}function hpn(){}function lpn(){}function apn(){}function dpn(){}function bpn(){}function wpn(){}function gpn(){}function ppn(){}function mpn(){}function vpn(){}function kpn(){}function ypn(){}function jpn(){}function Epn(){}function Cpn(){}function Mpn(){}function zU(){}function Tpn(){}function Apn(){}function Spn(){}function Ppn(){}function Ipn(){}function Opn(){}function Dpn(){}function Lpn(){}function Npn(){}function $pn(){}function XU(){}function xpn(){}function Fpn(){}function Bpn(){}function Rpn(){}function Kpn(){}function _pn(){}function VU(){}function WU(){}function Hpn(){}function JU(){}function QU(){}function qpn(){}function Upn(){}function Gpn(){}function zpn(){}function Xpn(){}function Vpn(){}function Wpn(){}function Jpn(){}function Qpn(){}function Ypn(){}function Zpn(){}function YU(){}function n3n(){}function e3n(){}function t3n(){}function i3n(){}function r3n(){}function c3n(){}function u3n(){}function o3n(){}function s3n(){}function f3n(){}function h3n(){}function l3n(){}function a3n(){}function d3n(){}function b3n(){}function w3n(){}function g3n(){}function p3n(){}function m3n(){}function v3n(){}function k3n(){}function y3n(){}function j3n(){}function E3n(){}function C3n(){}function M3n(){}function T3n(){}function A3n(){}function S3n(){}function P3n(){}function I3n(){}function O3n(){}function D3n(){}function L3n(){}function N3n(){}function $3n(){}function x3n(){}function F3n(){}function B3n(){}function R3n(){}function K3n(){}function _3n(){}function H3n(){}function q3n(){}function U3n(){}function G3n(){}function z3n(){}function X3n(){}function V3n(){}function W3n(){}function J3n(){}function Q3n(){}function Y3n(){}function Z3n(){}function n4n(){}function e4n(){}function t4n(){}function i4n(){}function r4n(){}function c4n(){}function u4n(){}function o4n(){}function s4n(){}function f4n(){}function h4n(){}function l4n(){}function a4n(){}function d4n(){}function b4n(){}function w4n(){}function g4n(){}function p4n(){}function m4n(){}function v4n(){}function k4n(){}function y4n(){}function j4n(){}function E4n(){}function C4n(){}function M4n(){}function T4n(){}function A4n(){}function S4n(){}function P4n(){}function I4n(){}function O4n(){}function _se(){}function D4n(){}function L4n(){}function N4n(){}function $4n(){}function x4n(){}function F4n(){}function B4n(){}function R4n(){}function K4n(){}function _4n(){}function H4n(){}function q4n(){}function U4n(){}function G4n(){}function z4n(){}function X4n(){}function V4n(){}function W4n(){}function J4n(){}function Q4n(){}function Y4n(){}function Z4n(){}function nmn(){}function emn(){}function tmn(){}function imn(){}function rmn(){}function BO(){}function RO(){}function cmn(){}function KO(){}function umn(){}function omn(){}function smn(){}function fmn(){}function hmn(){}function lmn(){}function amn(){}function dmn(){}function bmn(){}function wmn(){}function ZU(){}function gmn(){}function pmn(){}function mmn(){}function Hse(){}function vmn(){}function kmn(){}function ymn(){}function jmn(){}function Emn(){}function Cmn(){}function Mmn(){}function Ra(){}function Tmn(){}function ep(){}function nG(){}function Amn(){}function Smn(){}function Pmn(){}function Imn(){}function Omn(){}function Dmn(){}function Lmn(){}function Nmn(){}function $mn(){}function xmn(){}function Fmn(){}function Bmn(){}function Rmn(){}function Kmn(){}function _mn(){}function Hmn(){}function qmn(){}function Umn(){}function Gmn(){}function hn(){}function zmn(){}function Xmn(){}function Vmn(){}function Wmn(){}function Jmn(){}function Qmn(){}function Ymn(){}function Zmn(){}function nvn(){}function evn(){}function tvn(){}function ivn(){}function rvn(){}function _O(){}function cvn(){}function uvn(){}function ovn(){}function yE(){}function svn(){}function HO(){}function jE(){}function fvn(){}function eG(){}function hvn(){}function lvn(){}function avn(){}function dvn(){}function bvn(){}function wvn(){}function EE(){}function gvn(){}function pvn(){}function CE(){}function mvn(){}function ME(){}function vvn(){}function tG(){}function kvn(){}function qO(){}function iG(){}function yvn(){}function jvn(){}function Evn(){}function Cvn(){}function qse(){}function Mvn(){}function Tvn(){}function Avn(){}function Svn(){}function Pvn(){}function Ivn(){}function Ovn(){}function Dvn(){}function Lvn(){}function Nvn(){}function W3(){}function UO(){}function $vn(){}function xvn(){}function Fvn(){}function Bvn(){}function Rvn(){}function Kvn(){}function _vn(){}function Hvn(){}function qvn(){}function Uvn(){}function Gvn(){}function zvn(){}function Xvn(){}function Vvn(){}function Wvn(){}function Jvn(){}function Qvn(){}function Yvn(){}function Zvn(){}function n6n(){}function e6n(){}function t6n(){}function i6n(){}function r6n(){}function c6n(){}function u6n(){}function o6n(){}function s6n(){}function f6n(){}function h6n(){}function l6n(){}function a6n(){}function d6n(){}function b6n(){}function w6n(){}function g6n(){}function p6n(){}function m6n(){}function v6n(){}function k6n(){}function y6n(){}function j6n(){}function E6n(){}function C6n(){}function M6n(){}function T6n(){}function A6n(){}function S6n(){}function P6n(){}function I6n(){}function O6n(){}function D6n(){}function L6n(){}function N6n(){}function $6n(){}function x6n(){}function F6n(){}function B6n(){}function R6n(){}function K6n(){}function _6n(){}function H6n(){}function q6n(){}function U6n(){}function G6n(){}function z6n(){}function X6n(){}function V6n(){}function W6n(){}function J6n(){}function Q6n(){}function Y6n(){}function Z6n(){}function n5n(){}function e5n(){}function t5n(){}function i5n(){}function r5n(){}function c5n(){}function u5n(){}function o5n(){}function s5n(){}function f5n(){}function h5n(){}function l5n(){}function a5n(){}function d5n(){}function b5n(){}function w5n(){}function g5n(){}function p5n(){}function m5n(){}function v5n(){}function k5n(){}function y5n(){}function j5n(){}function E5n(){}function C5n(){}function M5n(){}function T5n(){}function A5n(){}function rG(){}function S5n(){}function P5n(){}function GO(){n6()}function I5n(){u7()}function O5n(){aA()}function D5n(){Q$()}function L5n(){M5()}function N5n(){ann()}function $5n(){qs()}function x5n(){jZ()}function F5n(){zk()}function B5n(){o7()}function R5n(){$7()}function K5n(){aCn()}function _5n(){Hp()}function H5n(){KLn()}function q5n(){yQ()}function U5n(){SOn()}function G5n(){jQ()}function z5n(){pNn()}function X5n(){AOn()}function V5n(){cm()}function W5n(){nxn()}function J5n(){Z$n()}function Q5n(){EDn()}function Y5n(){exn()}function Z5n(){ca()}function n8n(){ZE()}function e8n(){ltn()}function t8n(){cn()}function i8n(){txn()}function r8n(){Pxn()}function c8n(){POn()}function u8n(){nKn()}function o8n(){IOn()}function s8n(){bUn()}function f8n(){qnn()}function h8n(){kl()}function l8n(){wBn()}function a8n(){lc()}function d8n(){ROn()}function b8n(){_p()}function w8n(){Men()}function g8n(){ua()}function p8n(){Ten()}function m8n(){Bf()}function v8n(){Qk()}function k8n(){EF()}function y8n(){Dx()}function cf(){wSn()}function j8n(){YM()}function E8n(){mA()}function cG(){qe()}function C8n(){NT()}function M8n(){YY()}function uG(){D$()}function oG(){KA()}function T8n(){Fen()}function sG(n){Jn(n)}function A8n(n){this.a=n}function TE(n){this.a=n}function S8n(n){this.a=n}function P8n(n){this.a=n}function I8n(n){this.a=n}function O8n(n){this.a=n}function D8n(n){this.a=n}function L8n(n){this.a=n}function fG(n){this.a=n}function hG(n){this.a=n}function N8n(n){this.a=n}function $8n(n){this.a=n}function zO(n){this.a=n}function x8n(n){this.a=n}function F8n(n){this.a=n}function XO(n){this.a=n}function VO(n){this.a=n}function B8n(n){this.a=n}function WO(n){this.a=n}function R8n(n){this.a=n}function K8n(n){this.a=n}function _8n(n){this.a=n}function lG(n){this.b=n}function H8n(n){this.c=n}function q8n(n){this.a=n}function U8n(n){this.a=n}function G8n(n){this.a=n}function z8n(n){this.a=n}function X8n(n){this.a=n}function V8n(n){this.a=n}function W8n(n){this.a=n}function J8n(n){this.a=n}function Q8n(n){this.a=n}function Y8n(n){this.a=n}function Z8n(n){this.a=n}function n9n(n){this.a=n}function e9n(n){this.a=n}function aG(n){this.a=n}function dG(n){this.a=n}function AE(n){this.a=n}function z9(n){this.a=n}function Ka(){this.a=[]}function t9n(n,e){n.a=e}function Use(n,e){n.a=e}function Gse(n,e){n.b=e}function zse(n,e){n.b=e}function Xse(n,e){n.b=e}function bG(n,e){n.j=e}function Vse(n,e){n.g=e}function Wse(n,e){n.i=e}function Jse(n,e){n.c=e}function Qse(n,e){n.c=e}function Yse(n,e){n.d=e}function Zse(n,e){n.d=e}function _a(n,e){n.k=e}function nfe(n,e){n.c=e}function wG(n,e){n.c=e}function gG(n,e){n.a=e}function efe(n,e){n.a=e}function tfe(n,e){n.f=e}function ife(n,e){n.a=e}function rfe(n,e){n.b=e}function JO(n,e){n.d=e}function SE(n,e){n.i=e}function pG(n,e){n.o=e}function cfe(n,e){n.r=e}function ufe(n,e){n.a=e}function ofe(n,e){n.b=e}function i9n(n,e){n.e=e}function sfe(n,e){n.f=e}function mG(n,e){n.g=e}function ffe(n,e){n.e=e}function hfe(n,e){n.f=e}function lfe(n,e){n.f=e}function QO(n,e){n.a=e}function YO(n,e){n.b=e}function afe(n,e){n.n=e}function dfe(n,e){n.a=e}function bfe(n,e){n.c=e}function wfe(n,e){n.c=e}function gfe(n,e){n.c=e}function pfe(n,e){n.a=e}function mfe(n,e){n.a=e}function vfe(n,e){n.d=e}function kfe(n,e){n.d=e}function yfe(n,e){n.e=e}function jfe(n,e){n.e=e}function Efe(n,e){n.g=e}function Cfe(n,e){n.f=e}function Mfe(n,e){n.j=e}function Tfe(n,e){n.a=e}function Afe(n,e){n.a=e}function Sfe(n,e){n.b=e}function r9n(n){n.b=n.a}function c9n(n){n.c=n.d.d}function vG(n){this.a=n}function kG(n){this.a=n}function yG(n){this.a=n}function Ha(n){this.a=n}function qa(n){this.a=n}function X9(n){this.a=n}function u9n(n){this.a=n}function jG(n){this.a=n}function V9(n){this.a=n}function PE(n){this.a=n}function ol(n){this.a=n}function Sb(n){this.a=n}function o9n(n){this.a=n}function s9n(n){this.a=n}function ZO(n){this.b=n}function J3(n){this.b=n}function Q3(n){this.b=n}function nD(n){this.a=n}function f9n(n){this.a=n}function eD(n){this.c=n}function C(n){this.c=n}function h9n(n){this.c=n}function Xv(n){this.d=n}function EG(n){this.a=n}function Te(n){this.a=n}function l9n(n){this.a=n}function CG(n){this.a=n}function MG(n){this.a=n}function TG(n){this.a=n}function AG(n){this.a=n}function SG(n){this.a=n}function PG(n){this.a=n}function Y3(n){this.a=n}function a9n(n){this.a=n}function d9n(n){this.a=n}function Z3(n){this.a=n}function b9n(n){this.a=n}function w9n(n){this.a=n}function g9n(n){this.a=n}function p9n(n){this.a=n}function m9n(n){this.a=n}function v9n(n){this.a=n}function k9n(n){this.a=n}function y9n(n){this.a=n}function j9n(n){this.a=n}function E9n(n){this.a=n}function C9n(n){this.a=n}function M9n(n){this.a=n}function T9n(n){this.a=n}function A9n(n){this.a=n}function S9n(n){this.a=n}function Vv(n){this.a=n}function P9n(n){this.a=n}function I9n(n){this.a=n}function O9n(n){this.a=n}function D9n(n){this.a=n}function IE(n){this.a=n}function L9n(n){this.a=n}function N9n(n){this.a=n}function n4(n){this.a=n}function IG(n){this.a=n}function $9n(n){this.a=n}function x9n(n){this.a=n}function F9n(n){this.a=n}function B9n(n){this.a=n}function R9n(n){this.a=n}function K9n(n){this.a=n}function OG(n){this.a=n}function DG(n){this.a=n}function LG(n){this.a=n}function Wv(n){this.a=n}function OE(n){this.e=n}function e4(n){this.a=n}function _9n(n){this.a=n}function tp(n){this.a=n}function NG(n){this.a=n}function H9n(n){this.a=n}function q9n(n){this.a=n}function U9n(n){this.a=n}function G9n(n){this.a=n}function z9n(n){this.a=n}function X9n(n){this.a=n}function V9n(n){this.a=n}function W9n(n){this.a=n}function J9n(n){this.a=n}function Q9n(n){this.a=n}function Y9n(n){this.a=n}function $G(n){this.a=n}function Z9n(n){this.a=n}function n7n(n){this.a=n}function e7n(n){this.a=n}function t7n(n){this.a=n}function i7n(n){this.a=n}function r7n(n){this.a=n}function c7n(n){this.a=n}function u7n(n){this.a=n}function o7n(n){this.a=n}function s7n(n){this.a=n}function f7n(n){this.a=n}function h7n(n){this.a=n}function l7n(n){this.a=n}function a7n(n){this.a=n}function d7n(n){this.a=n}function b7n(n){this.a=n}function w7n(n){this.a=n}function g7n(n){this.a=n}function p7n(n){this.a=n}function m7n(n){this.a=n}function v7n(n){this.a=n}function k7n(n){this.a=n}function y7n(n){this.a=n}function j7n(n){this.a=n}function E7n(n){this.a=n}function C7n(n){this.a=n}function M7n(n){this.a=n}function T7n(n){this.a=n}function A7n(n){this.a=n}function S7n(n){this.a=n}function P7n(n){this.a=n}function I7n(n){this.a=n}function O7n(n){this.a=n}function D7n(n){this.a=n}function L7n(n){this.a=n}function N7n(n){this.a=n}function $7n(n){this.a=n}function x7n(n){this.a=n}function F7n(n){this.c=n}function B7n(n){this.b=n}function R7n(n){this.a=n}function K7n(n){this.a=n}function _7n(n){this.a=n}function H7n(n){this.a=n}function q7n(n){this.a=n}function U7n(n){this.a=n}function G7n(n){this.a=n}function z7n(n){this.a=n}function X7n(n){this.a=n}function V7n(n){this.a=n}function W7n(n){this.a=n}function J7n(n){this.a=n}function Q7n(n){this.a=n}function Y7n(n){this.a=n}function Z7n(n){this.a=n}function nkn(n){this.a=n}function ekn(n){this.a=n}function tkn(n){this.a=n}function ikn(n){this.a=n}function rkn(n){this.a=n}function ckn(n){this.a=n}function ukn(n){this.a=n}function okn(n){this.a=n}function skn(n){this.a=n}function fkn(n){this.a=n}function hkn(n){this.a=n}function lkn(n){this.a=n}function sl(n){this.a=n}function sg(n){this.a=n}function akn(n){this.a=n}function dkn(n){this.a=n}function bkn(n){this.a=n}function wkn(n){this.a=n}function gkn(n){this.a=n}function pkn(n){this.a=n}function mkn(n){this.a=n}function vkn(n){this.a=n}function kkn(n){this.a=n}function ykn(n){this.a=n}function jkn(n){this.a=n}function Ekn(n){this.a=n}function Ckn(n){this.a=n}function Mkn(n){this.a=n}function Tkn(n){this.a=n}function Akn(n){this.a=n}function Skn(n){this.a=n}function Pkn(n){this.a=n}function Ikn(n){this.a=n}function Okn(n){this.a=n}function Dkn(n){this.a=n}function Lkn(n){this.a=n}function Nkn(n){this.a=n}function $kn(n){this.a=n}function xkn(n){this.a=n}function Fkn(n){this.a=n}function DE(n){this.a=n}function Bkn(n){this.f=n}function Rkn(n){this.a=n}function Kkn(n){this.a=n}function _kn(n){this.a=n}function Hkn(n){this.a=n}function qkn(n){this.a=n}function Ukn(n){this.a=n}function Gkn(n){this.a=n}function zkn(n){this.a=n}function Xkn(n){this.a=n}function Vkn(n){this.a=n}function Wkn(n){this.a=n}function Jkn(n){this.a=n}function Qkn(n){this.a=n}function Ykn(n){this.a=n}function Zkn(n){this.a=n}function nyn(n){this.a=n}function eyn(n){this.a=n}function tyn(n){this.a=n}function iyn(n){this.a=n}function ryn(n){this.a=n}function cyn(n){this.a=n}function uyn(n){this.a=n}function oyn(n){this.a=n}function syn(n){this.a=n}function fyn(n){this.a=n}function hyn(n){this.a=n}function lyn(n){this.a=n}function ayn(n){this.a=n}function tD(n){this.a=n}function xG(n){this.a=n}function lt(n){this.b=n}function dyn(n){this.a=n}function byn(n){this.a=n}function wyn(n){this.a=n}function gyn(n){this.a=n}function pyn(n){this.a=n}function myn(n){this.a=n}function vyn(n){this.a=n}function kyn(n){this.b=n}function yyn(n){this.a=n}function W9(n){this.a=n}function jyn(n){this.a=n}function Eyn(n){this.a=n}function FG(n){this.c=n}function LE(n){this.e=n}function NE(n){this.a=n}function $E(n){this.a=n}function iD(n){this.a=n}function Cyn(n){this.d=n}function Myn(n){this.a=n}function BG(n){this.a=n}function RG(n){this.a=n}function Wd(n){this.e=n}function Pfe(){this.a=0}function de(){Hu(this)}function Z(){pL(this)}function rD(){sIn(this)}function Tyn(){}function Jd(){this.c=Gdn}function Ayn(n,e){n.b+=e}function Ife(n,e){e.Wb(n)}function Ofe(n){return n.a}function Dfe(n){return n.a}function Lfe(n){return n.a}function Nfe(n){return n.a}function $fe(n){return n.a}function M(n){return n.e}function xfe(){return null}function Ffe(){return null}function Bfe(){Cz(),pLe()}function Rfe(n){n.b.Of(n.e)}function Syn(n){n.b=new CD}function Jv(n,e){n.b=e-n.b}function Qv(n,e){n.a=e-n.a}function Bn(n,e){n.push(e)}function Pyn(n,e){n.sort(e)}function Iyn(n,e){e.jd(n.a)}function Kfe(n,e){gi(e,n)}function _fe(n,e,t){n.Yd(t,e)}function J9(n,e){n.e=e,e.b=n}function KG(n){uh(),this.a=n}function Oyn(n){uh(),this.a=n}function Dyn(n){uh(),this.a=n}function cD(n){m0(),this.a=n}function Lyn(n){O4(),VK.le(n)}function _G(){_G=F,new de}function Ua(){YTn.call(this)}function HG(){YTn.call(this)}function qG(){Ua.call(this)}function uD(){Ua.call(this)}function Nyn(){Ua.call(this)}function Q9(){Ua.call(this)}function Cu(){Ua.call(this)}function ip(){Ua.call(this)}function Pe(){Ua.call(this)}function Bo(){Ua.call(this)}function $yn(){Ua.call(this)}function nc(){Ua.call(this)}function xyn(){Ua.call(this)}function Fyn(){this.a=this}function xE(){this.Bb|=256}function Byn(){this.b=new GMn}function Pb(n,e){n.length=e}function FE(n,e){nn(n.a,e)}function Hfe(n,e){bnn(n.c,e)}function qfe(n,e){fi(n.b,e)}function Ufe(n,e){uA(n.a,e)}function Gfe(n,e){cx(n.a,e)}function t4(n,e){it(n.e,e)}function rp(n){jA(n.c,n.b)}function zfe(n,e){n.kc().Nb(e)}function UG(n){this.a=B5e(n)}function ni(){this.a=new de}function Ryn(){this.a=new de}function GG(){this.a=new rCn}function BE(){this.a=new Z}function oD(){this.a=new Z}function zG(){this.a=new Z}function hs(){this.a=new cbn}function Ga(){this.a=new NLn}function XG(){this.a=new _U}function VG(){this.a=new TOn}function WG(){this.a=new BAn}function Kyn(){this.a=new Z}function _yn(){this.a=new Z}function Hyn(){this.a=new Z}function JG(){this.a=new Z}function qyn(){this.d=new Z}function Uyn(){this.a=new zOn}function Gyn(){this.a=new ni}function zyn(){this.a=new de}function Xyn(){this.b=new de}function Vyn(){this.b=new Z}function QG(){this.e=new Z}function Wyn(){this.a=new Z5n}function Jyn(){this.d=new Z}function Qyn(){QIn.call(this)}function Yyn(){QIn.call(this)}function Zyn(){Z.call(this)}function YG(){qG.call(this)}function ZG(){BE.call(this)}function njn(){qC.call(this)}function ejn(){JG.call(this)}function Yv(){Tyn.call(this)}function sD(){Yv.call(this)}function cp(){Tyn.call(this)}function nz(){cp.call(this)}function tjn(){rz.call(this)}function ijn(){rz.call(this)}function rjn(){rz.call(this)}function cjn(){cz.call(this)}function Zv(){svn.call(this)}function ez(){svn.call(this)}function Mu(){Ct.call(this)}function ujn(){yjn.call(this)}function ojn(){yjn.call(this)}function sjn(){de.call(this)}function fjn(){de.call(this)}function hjn(){de.call(this)}function fD(){cxn.call(this)}function ljn(){ni.call(this)}function ajn(){xE.call(this)}function hD(){BX.call(this)}function tz(){de.call(this)}function lD(){BX.call(this)}function aD(){de.call(this)}function djn(){de.call(this)}function iz(){ME.call(this)}function bjn(){iz.call(this)}function wjn(){ME.call(this)}function gjn(){rG.call(this)}function rz(){this.a=new ni}function pjn(){this.a=new de}function mjn(){this.a=new Z}function cz(){this.a=new de}function up(){this.a=new Ct}function vjn(){this.j=new Z}function kjn(){this.a=new mEn}function yjn(){this.a=new mvn}function uz(){this.a=new Z4n}function n6(){n6=F,KK=new Ht}function dD(){dD=F,_K=new Ejn}function bD(){bD=F,HK=new jjn}function jjn(){XO.call(this,"")}function Ejn(){XO.call(this,"")}function Cjn(n){S$n.call(this,n)}function Mjn(n){S$n.call(this,n)}function oz(n){fG.call(this,n)}function sz(n){XEn.call(this,n)}function Xfe(n){XEn.call(this,n)}function Vfe(n){sz.call(this,n)}function Wfe(n){sz.call(this,n)}function Jfe(n){sz.call(this,n)}function Tjn(n){zN.call(this,n)}function Ajn(n){zN.call(this,n)}function Sjn(n){uSn.call(this,n)}function Pjn(n){Oz.call(this,n)}function e6(n){WE.call(this,n)}function fz(n){WE.call(this,n)}function Ijn(n){WE.call(this,n)}function hz(n){mje.call(this,n)}function lz(n){hz.call(this,n)}function ec(n){APn.call(this,n)}function Ojn(n){ec.call(this,n)}function op(){z9.call(this,{})}function Djn(){Djn=F,dQn=new M0n}function RE(){RE=F,GK=new STn}function Ljn(){Ljn=F,oun=new Bu}function az(){az=F,sun=new N1}function KE(){KE=F,P8=new $1}function wD(n){b4(),this.a=n}function gD(n){RQ(),this.a=n}function Qd(n){nN(),this.f=n}function pD(n){nN(),this.f=n}function Njn(n){bSn(),this.a=n}function $jn(n){n.b=null,n.c=0}function Qfe(n,e){n.e=e,bqn(n,e)}function Yfe(n,e){n.a=e,cEe(n)}function mD(n,e,t){n.a[e.g]=t}function Zfe(n,e,t){kke(t,n,e)}function nhe(n,e){Wae(e.i,n.n)}function xjn(n,e){v6e(n).Cd(e)}function ehe(n,e){n.a.ec().Mc(e)}function Fjn(n,e){return n.g-e.g}function the(n,e){return n*n/e}function on(n){return Jn(n),n}function $(n){return Jn(n),n}function Y9(n){return Jn(n),n}function ihe(n){return new AE(n)}function rhe(n){return new qb(n)}function dz(n){return Jn(n),n}function che(n){return Jn(n),n}function _E(n){ec.call(this,n)}function Ir(n){ec.call(this,n)}function Bjn(n){ec.call(this,n)}function vD(n){APn.call(this,n)}function i4(n){ec.call(this,n)}function Gn(n){ec.call(this,n)}function Or(n){ec.call(this,n)}function Rjn(n){ec.call(this,n)}function sp(n){ec.call(this,n)}function Kl(n){ec.call(this,n)}function _l(n){ec.call(this,n)}function fp(n){ec.call(this,n)}function nh(n){ec.call(this,n)}function kD(n){ec.call(this,n)}function Le(n){ec.call(this,n)}function Ku(n){Jn(n),this.a=n}function bz(n){return ld(n),n}function t6(n){TW(n,n.length)}function i6(n){return n.b==n.c}function Ib(n){return!!n&&n.b}function uhe(n){return!!n&&n.k}function ohe(n){return!!n&&n.j}function she(n,e,t){n.c.Ef(e,t)}function Kjn(n,e){n.be(e),e.ae(n)}function hp(n){uh(),this.a=Se(n)}function yD(){this.a=Oe(Se(ur))}function _jn(){throw M(new Pe)}function fhe(){throw M(new Pe)}function wz(){throw M(new Pe)}function Hjn(){throw M(new Pe)}function hhe(){throw M(new Pe)}function lhe(){throw M(new Pe)}function HE(){HE=F,O4()}function Hl(){X9.call(this,"")}function r6(){X9.call(this,"")}function x1(){X9.call(this,"")}function lp(){X9.call(this,"")}function gz(n){Ir.call(this,n)}function pz(n){Ir.call(this,n)}function eh(n){Gn.call(this,n)}function r4(n){Q3.call(this,n)}function qjn(n){r4.call(this,n)}function jD(n){BC.call(this,n)}function ED(n){JX.call(this,n,0)}function CD(){sJ.call(this,12,3)}function T(n,e){return kOn(n,e)}function qE(n,e){return o$(n,e)}function ahe(n,e){return n.a-e.a}function dhe(n,e){return n.a-e.a}function bhe(n,e){return n.a-e.a}function whe(n,e){return e in n.a}function Ujn(n){return n.a?n.b:0}function ghe(n){return n.a?n.b:0}function phe(n,e,t){e.Cd(n.a[t])}function mhe(n,e,t){e.Pe(n.a[t])}function vhe(n,e){n.b=new rr(e)}function khe(n,e){return n.b=e,n}function Gjn(n,e){return n.c=e,n}function zjn(n,e){return n.f=e,n}function yhe(n,e){return n.g=e,n}function mz(n,e){return n.a=e,n}function vz(n,e){return n.f=e,n}function jhe(n,e){return n.k=e,n}function kz(n,e){return n.a=e,n}function Ehe(n,e){return n.e=e,n}function yz(n,e){return n.e=e,n}function Che(n,e){return n.f=e,n}function Mhe(n,e){n.b=!0,n.d=e}function The(n,e){return n.b-e.b}function Ahe(n,e){return n.g-e.g}function She(n,e){return n?0:e-1}function Xjn(n,e){return n?0:e-1}function Phe(n,e){return n?e-1:0}function Ihe(n,e){return n.s-e.s}function Ohe(n,e){return e.rg(n)}function Yd(n,e){return n.b=e,n}function UE(n,e){return n.a=e,n}function Zd(n,e){return n.c=e,n}function n0(n,e){return n.d=e,n}function e0(n,e){return n.e=e,n}function jz(n,e){return n.f=e,n}function c6(n,e){return n.a=e,n}function c4(n,e){return n.b=e,n}function u4(n,e){return n.c=e,n}function an(n,e){return n.c=e,n}function Sn(n,e){return n.b=e,n}function dn(n,e){return n.d=e,n}function bn(n,e){return n.e=e,n}function Dhe(n,e){return n.f=e,n}function wn(n,e){return n.g=e,n}function gn(n,e){return n.a=e,n}function pn(n,e){return n.i=e,n}function mn(n,e){return n.j=e,n}function Lhe(n,e){ca(),ic(e,n)}function Nhe(n,e,t){Jbe(n.a,e,t)}function GE(n){$L.call(this,n)}function Vjn(n){Z5e.call(this,n)}function Wjn(n){SIn.call(this,n)}function Ez(n){SIn.call(this,n)}function F1(n){S0.call(this,n)}function Jjn(n){CN.call(this,n)}function Qjn(n){CN.call(this,n)}function Yjn(){DX.call(this,"")}function Li(){this.a=0,this.b=0}function Zjn(){this.b=0,this.a=0}function nEn(n,e){n.b=0,Zb(n,e)}function eEn(n,e){return n.k=e,n}function $he(n,e){return n.j=e,n}function xhe(n,e){n.c=e,n.b=!0}function tEn(){tEn=F,TQn=Xke()}function B1(){B1=F,voe=rke()}function iEn(){iEn=F,Ti=gye()}function Cz(){Cz=F,Oa=z4()}function o4(){o4=F,Udn=cke()}function rEn(){rEn=F,ise=uke()}function Mz(){Mz=F,yc=tEe()}function uf(n){return n.e&&n.e()}function cEn(n){return n.l|n.m<<22}function uEn(n,e){return n.c._b(e)}function oEn(n,e){return rBn(n.b,e)}function MD(n){return n?n.d:null}function Fhe(n){return n?n.g:null}function Bhe(n){return n?n.i:null}function za(n){return ll(n),n.o}function fg(n,e){return n.a+=e,n}function TD(n,e){return n.a+=e,n}function ql(n,e){return n.a+=e,n}function t0(n,e){return n.a+=e,n}function Tz(n,e){for(;n.Bd(e););}function zE(n){this.a=new ap(n)}function sEn(){throw M(new Pe)}function fEn(){throw M(new Pe)}function hEn(){throw M(new Pe)}function lEn(){throw M(new Pe)}function aEn(){throw M(new Pe)}function dEn(){throw M(new Pe)}function Ul(n){this.a=new iN(n)}function bEn(){this.a=new K5(Rln)}function wEn(){this.b=new K5(rln)}function gEn(){this.a=new K5(f1n)}function pEn(){this.b=new K5(Fq)}function mEn(){this.b=new K5(Fq)}function XE(n){this.a=0,this.b=n}function Az(n){zGn(),ILe(this,n)}function s4(n){return z1(n),n.a}function Z9(n){return n.b!=n.d.c}function Sz(n,e){return n.d[e.p]}function vEn(n,e){return XTe(n,e)}function Pz(n,e,t){n.splice(e,t)}function hg(n,e){for(;n.Re(e););}function kEn(n){n.c?Dqn(n):Lqn(n)}function yEn(){throw M(new Pe)}function jEn(){throw M(new Pe)}function EEn(){throw M(new Pe)}function CEn(){throw M(new Pe)}function MEn(){throw M(new Pe)}function TEn(){throw M(new Pe)}function AEn(){throw M(new Pe)}function SEn(){throw M(new Pe)}function PEn(){throw M(new Pe)}function IEn(){throw M(new Pe)}function Rhe(){throw M(new nc)}function Khe(){throw M(new nc)}function n7(n){this.a=new OEn(n)}function OEn(n){Ume(this,n,jje())}function e7(n){return!n||oIn(n)}function t7(n){return Zf[n]!=-1}function _he(){cP!=0&&(cP=0),uP=-1}function DEn(){RK==null&&(RK=[])}function i7(n,e){Cg.call(this,n,e)}function f4(n,e){i7.call(this,n,e)}function LEn(n,e){this.a=n,this.b=e}function NEn(n,e){this.a=n,this.b=e}function $En(n,e){this.a=n,this.b=e}function xEn(n,e){this.a=n,this.b=e}function FEn(n,e){this.a=n,this.b=e}function BEn(n,e){this.a=n,this.b=e}function REn(n,e){this.a=n,this.b=e}function h4(n,e){this.e=n,this.d=e}function Iz(n,e){this.b=n,this.c=e}function KEn(n,e){this.b=n,this.a=e}function _En(n,e){this.b=n,this.a=e}function HEn(n,e){this.b=n,this.a=e}function qEn(n,e){this.b=n,this.a=e}function UEn(n,e){this.a=n,this.b=e}function AD(n,e){this.a=n,this.b=e}function GEn(n,e){this.a=n,this.f=e}function i0(n,e){this.g=n,this.i=e}function je(n,e){this.f=n,this.g=e}function zEn(n,e){this.b=n,this.c=e}function XEn(n){KX(n.dc()),this.c=n}function Hhe(n,e){this.a=n,this.b=e}function VEn(n,e){this.a=n,this.b=e}function WEn(n){this.a=u(Se(n),15)}function Oz(n){this.a=u(Se(n),15)}function JEn(n){this.a=u(Se(n),85)}function VE(n){this.b=u(Se(n),85)}function WE(n){this.b=u(Se(n),51)}function JE(){this.q=new y.Date}function SD(n,e){this.a=n,this.b=e}function QEn(n,e){return Zc(n.b,e)}function r7(n,e){return n.b.Hc(e)}function YEn(n,e){return n.b.Ic(e)}function ZEn(n,e){return n.b.Qc(e)}function nCn(n,e){return n.b.Hc(e)}function eCn(n,e){return n.c.uc(e)}function tCn(n,e){return rt(n.c,e)}function of(n,e){return n.a._b(e)}function iCn(n,e){return n>e&&e0}function ND(n,e){return Ec(n,e)<0}function vCn(n,e){return JL(n.a,e)}function ole(n,e){yOn.call(this,n,e)}function Bz(n){wN(),uSn.call(this,n)}function Rz(n,e){bPn(n,n.length,e)}function s7(n,e){HPn(n,n.length,e)}function d6(n,e){return n.a.get(e)}function kCn(n,e){return Zc(n.e,e)}function Kz(n){return Jn(n),!1}function _z(n){this.a=u(Se(n),229)}function cC(n){In.call(this,n,21)}function uC(n,e){je.call(this,n,e)}function $D(n,e){je.call(this,n,e)}function yCn(n,e){this.b=n,this.a=e}function oC(n,e){this.d=n,this.e=e}function jCn(n,e){this.a=n,this.b=e}function ECn(n,e){this.a=n,this.b=e}function CCn(n,e){this.a=n,this.b=e}function MCn(n,e){this.a=n,this.b=e}function bp(n,e){this.a=n,this.b=e}function TCn(n,e){this.b=n,this.a=e}function Hz(n,e){this.b=n,this.a=e}function qz(n,e){je.call(this,n,e)}function Uz(n,e){je.call(this,n,e)}function lg(n,e){je.call(this,n,e)}function xD(n,e){je.call(this,n,e)}function FD(n,e){je.call(this,n,e)}function BD(n,e){je.call(this,n,e)}function sC(n,e){je.call(this,n,e)}function Gz(n,e){this.b=n,this.a=e}function fC(n,e){je.call(this,n,e)}function zz(n,e){this.b=n,this.a=e}function hC(n,e){je.call(this,n,e)}function ACn(n,e){this.b=n,this.a=e}function Xz(n,e){je.call(this,n,e)}function RD(n,e){je.call(this,n,e)}function f7(n,e){je.call(this,n,e)}function b6(n,e,t){n.splice(e,0,t)}function sle(n,e,t){n.Mb(t)&&e.Cd(t)}function fle(n,e,t){e.Pe(n.a.Ye(t))}function hle(n,e,t){e.Dd(n.a.Ze(t))}function lle(n,e,t){e.Cd(n.a.Kb(t))}function ale(n,e){return Au(n.c,e)}function dle(n,e){return Au(n.e,e)}function lC(n,e){je.call(this,n,e)}function aC(n,e){je.call(this,n,e)}function w6(n,e){je.call(this,n,e)}function Vz(n,e){je.call(this,n,e)}function ei(n,e){je.call(this,n,e)}function dC(n,e){je.call(this,n,e)}function SCn(n,e){this.a=n,this.b=e}function PCn(n,e){this.a=n,this.b=e}function ICn(n,e){this.a=n,this.b=e}function OCn(n,e){this.a=n,this.b=e}function DCn(n,e){this.a=n,this.b=e}function LCn(n,e){this.a=n,this.b=e}function NCn(n,e){this.b=n,this.a=e}function $Cn(n,e){this.b=n,this.a=e}function Wz(n,e){this.b=n,this.a=e}function d4(n,e){this.c=n,this.d=e}function xCn(n,e){this.e=n,this.d=e}function FCn(n,e){this.a=n,this.b=e}function BCn(n,e){this.a=n,this.b=e}function RCn(n,e){this.a=n,this.b=e}function KCn(n,e){this.b=n,this.a=e}function _Cn(n,e){this.b=e,this.c=n}function bC(n,e){je.call(this,n,e)}function h7(n,e){je.call(this,n,e)}function KD(n,e){je.call(this,n,e)}function Jz(n,e){je.call(this,n,e)}function g6(n,e){je.call(this,n,e)}function _D(n,e){je.call(this,n,e)}function HD(n,e){je.call(this,n,e)}function l7(n,e){je.call(this,n,e)}function Qz(n,e){je.call(this,n,e)}function qD(n,e){je.call(this,n,e)}function p6(n,e){je.call(this,n,e)}function Yz(n,e){je.call(this,n,e)}function m6(n,e){je.call(this,n,e)}function v6(n,e){je.call(this,n,e)}function Db(n,e){je.call(this,n,e)}function UD(n,e){je.call(this,n,e)}function GD(n,e){je.call(this,n,e)}function Zz(n,e){je.call(this,n,e)}function a7(n,e){je.call(this,n,e)}function ag(n,e){je.call(this,n,e)}function zD(n,e){je.call(this,n,e)}function wC(n,e){je.call(this,n,e)}function d7(n,e){je.call(this,n,e)}function Lb(n,e){je.call(this,n,e)}function gC(n,e){je.call(this,n,e)}function nX(n,e){je.call(this,n,e)}function XD(n,e){je.call(this,n,e)}function VD(n,e){je.call(this,n,e)}function WD(n,e){je.call(this,n,e)}function JD(n,e){je.call(this,n,e)}function QD(n,e){je.call(this,n,e)}function YD(n,e){je.call(this,n,e)}function ZD(n,e){je.call(this,n,e)}function HCn(n,e){this.b=n,this.a=e}function eX(n,e){je.call(this,n,e)}function qCn(n,e){this.a=n,this.b=e}function UCn(n,e){this.a=n,this.b=e}function GCn(n,e){this.a=n,this.b=e}function tX(n,e){je.call(this,n,e)}function iX(n,e){je.call(this,n,e)}function zCn(n,e){this.a=n,this.b=e}function ble(n,e){return k4(),e!=n}function b7(n){return oe(n.a),n.b}function nL(n){return yCe(n,n.c),n}function XCn(){return tEn(),new TQn}function VCn(){VC(),this.a=new kV}function WCn(){OA(),this.a=new ni}function JCn(){NN(),this.b=new ni}function QCn(n,e){this.b=n,this.d=e}function YCn(n,e){this.a=n,this.b=e}function ZCn(n,e){this.a=n,this.b=e}function nMn(n,e){this.a=n,this.b=e}function eMn(n,e){this.b=n,this.a=e}function rX(n,e){je.call(this,n,e)}function cX(n,e){je.call(this,n,e)}function pC(n,e){je.call(this,n,e)}function u0(n,e){je.call(this,n,e)}function eL(n,e){je.call(this,n,e)}function mC(n,e){je.call(this,n,e)}function uX(n,e){je.call(this,n,e)}function oX(n,e){je.call(this,n,e)}function w7(n,e){je.call(this,n,e)}function sX(n,e){je.call(this,n,e)}function tL(n,e){je.call(this,n,e)}function vC(n,e){je.call(this,n,e)}function iL(n,e){je.call(this,n,e)}function rL(n,e){je.call(this,n,e)}function cL(n,e){je.call(this,n,e)}function uL(n,e){je.call(this,n,e)}function fX(n,e){je.call(this,n,e)}function oL(n,e){je.call(this,n,e)}function hX(n,e){je.call(this,n,e)}function g7(n,e){je.call(this,n,e)}function sL(n,e){je.call(this,n,e)}function lX(n,e){je.call(this,n,e)}function p7(n,e){je.call(this,n,e)}function aX(n,e){je.call(this,n,e)}function tMn(n,e){this.b=n,this.a=e}function iMn(n,e){this.b=n,this.a=e}function rMn(n,e){this.b=n,this.a=e}function cMn(n,e){this.b=n,this.a=e}function dX(n,e){this.a=n,this.b=e}function uMn(n,e){this.a=n,this.b=e}function oMn(n,e){this.a=n,this.b=e}function V(n,e){this.a=n,this.b=e}function k6(n,e){je.call(this,n,e)}function m7(n,e){je.call(this,n,e)}function wp(n,e){je.call(this,n,e)}function y6(n,e){je.call(this,n,e)}function v7(n,e){je.call(this,n,e)}function fL(n,e){je.call(this,n,e)}function kC(n,e){je.call(this,n,e)}function j6(n,e){je.call(this,n,e)}function hL(n,e){je.call(this,n,e)}function yC(n,e){je.call(this,n,e)}function dg(n,e){je.call(this,n,e)}function k7(n,e){je.call(this,n,e)}function E6(n,e){je.call(this,n,e)}function C6(n,e){je.call(this,n,e)}function y7(n,e){je.call(this,n,e)}function jC(n,e){je.call(this,n,e)}function bg(n,e){je.call(this,n,e)}function lL(n,e){je.call(this,n,e)}function sMn(n,e){je.call(this,n,e)}function EC(n,e){je.call(this,n,e)}function fMn(n,e){this.a=n,this.b=e}function hMn(n,e){this.a=n,this.b=e}function lMn(n,e){this.a=n,this.b=e}function aMn(n,e){this.a=n,this.b=e}function dMn(n,e){this.a=n,this.b=e}function bMn(n,e){this.a=n,this.b=e}function bi(n,e){this.a=n,this.b=e}function wMn(n,e){this.a=n,this.b=e}function gMn(n,e){this.a=n,this.b=e}function pMn(n,e){this.a=n,this.b=e}function mMn(n,e){this.a=n,this.b=e}function vMn(n,e){this.a=n,this.b=e}function kMn(n,e){this.a=n,this.b=e}function yMn(n,e){this.b=n,this.a=e}function jMn(n,e){this.b=n,this.a=e}function EMn(n,e){this.b=n,this.a=e}function CMn(n,e){this.b=n,this.a=e}function MMn(n,e){this.a=n,this.b=e}function TMn(n,e){this.a=n,this.b=e}function CC(n,e){je.call(this,n,e)}function AMn(n,e){this.a=n,this.b=e}function SMn(n,e){this.a=n,this.b=e}function gp(n,e){je.call(this,n,e)}function PMn(n,e){this.f=n,this.c=e}function bX(n,e){return Au(n.g,e)}function wle(n,e){return Au(e.b,n)}function IMn(n,e){return wx(n.a,e)}function gle(n,e){return-n.b.af(e)}function ple(n,e){n&&Xe(hE,n,e)}function wX(n,e){n.i=null,kT(n,e)}function mle(n,e,t){yKn(e,oF(n,t))}function vle(n,e,t){yKn(e,oF(n,t))}function kle(n,e){VMe(n.a,u(e,58))}function OMn(n,e){U4e(n.a,u(e,12))}function MC(n,e){this.a=n,this.b=e}function DMn(n,e){this.a=n,this.b=e}function LMn(n,e){this.a=n,this.b=e}function NMn(n,e){this.a=n,this.b=e}function $Mn(n,e){this.a=n,this.b=e}function xMn(n,e){this.d=n,this.b=e}function FMn(n,e){this.e=n,this.a=e}function j7(n,e){this.b=n,this.c=e}function gX(n,e){this.i=n,this.g=e}function pX(n,e){this.d=n,this.e=e}function yle(n,e){cme(new ne(n),e)}function TC(n){return Rk(n.c,n.b)}function Kr(n){return n?n.md():null}function x(n){return n??null}function Ai(n){return typeof n===nB}function Nb(n){return typeof n===i3}function $b(n){return typeof n===dtn}function o0(n,e){return Ec(n,e)==0}function AC(n,e){return Ec(n,e)>=0}function M6(n,e){return Ec(n,e)!=0}function SC(n,e){return jve(n.Kc(),e)}function _1(n,e){return n.Rd().Xb(e)}function BMn(n){return eo(n),n.d.gc()}function PC(n){return F6(n==null),n}function T6(n,e){return n.a+=""+e,n}function Er(n,e){return n.a+=""+e,n}function A6(n,e){return n.a+=""+e,n}function Dc(n,e){return n.a+=""+e,n}function Be(n,e){return n.a+=""+e,n}function mX(n,e){return n.a+=""+e,n}function jle(n){return""+(Jn(n),n)}function RMn(n){Hu(this),f5(this,n)}function KMn(){oJ(),dW.call(this)}function _Mn(n,e){mW.call(this,n,e)}function HMn(n,e){mW.call(this,n,e)}function IC(n,e){mW.call(this,n,e)}function ir(n,e){xt(n,e,n.c.b,n.c)}function wg(n,e){xt(n,e,n.a,n.a.a)}function vX(n){return Ln(n,0),null}function qMn(){this.b=0,this.a=!1}function UMn(){this.b=0,this.a=!1}function GMn(){this.b=new ap(Qb(12))}function zMn(){zMn=F,kYn=Ce(jx())}function XMn(){XMn=F,HZn=Ce(iqn())}function VMn(){VMn=F,lre=Ce(xxn())}function kX(){kX=F,_G(),fun=new de}function sf(n){return n.a=0,n.b=0,n}function WMn(n,e){return n.a=e.g+1,n}function aL(n,e){Kb.call(this,n,e)}function Mn(n,e){Dt.call(this,n,e)}function gg(n,e){gX.call(this,n,e)}function JMn(n,e){T7.call(this,n,e)}function dL(n,e){Y4.call(this,n,e)}function Ue(n,e){iC(),Xe(yO,n,e)}function QMn(n,e){n.q.setTime(id(e))}function Ele(n){y.clearTimeout(n)}function Cle(n){return Se(n),new S6(n)}function YMn(n,e){return x(n)===x(e)}function ZMn(n,e){return n.a.a.a.cc(e)}function bL(n,e){return qo(n.a,0,e)}function yX(n){return Awe(u(n,74))}function pp(n){return wi((Jn(n),n))}function Mle(n){return wi((Jn(n),n))}function nTn(n){return Yc(n.l,n.m,n.h)}function jX(n,e){return jc(n.a,e.a)}function Tle(n,e){return KPn(n.a,e.a)}function Ale(n,e){return bt(n.a,e.a)}function th(n,e){return n.indexOf(e)}function Sle(n,e){return n.j[e.p]==2}function s0(n,e){return n==e?0:n?1:-1}function OC(n){return n<10?"0"+n:""+n}function Vr(n){return typeof n===dtn}function Ple(n){return n==rb||n==Iw}function Ile(n){return n==rb||n==Pw}function eTn(n,e){return jc(n.g,e.g)}function EX(n){return qr(n.b.b,n,0)}function tTn(){rM.call(this,0,0,0,0)}function ih(){CG.call(this,new Ql)}function CX(n,e){F4(n,0,n.length,e)}function Ole(n,e){return nn(n.a,e),e}function Dle(n,e){return xs(),e.a+=n}function Lle(n,e){return xs(),e.a+=n}function Nle(n,e){return xs(),e.c+=n}function $le(n,e){return nn(n.c,e),n}function MX(n,e){return Mo(n.a,e),n}function iTn(n){this.a=XCn(),this.b=n}function rTn(n){this.a=XCn(),this.b=n}function rr(n){this.a=n.a,this.b=n.b}function S6(n){this.a=n,GO.call(this)}function cTn(n){this.a=n,GO.call(this)}function mp(){Ho.call(this,0,0,0,0)}function DC(n){return Mo(new ii,n)}function uTn(n){return jM(u(n,123))}function fo(n){return n.vh()&&n.wh()}function pg(n){return n!=Jf&&n!=Sa}function hl(n){return n==Br||n==Xr}function mg(n){return n==us||n==Vf}function oTn(n){return n==S2||n==A2}function xle(n,e){return jc(n.g,e.g)}function sTn(n,e){return new Y4(e,n)}function Fle(n,e){return new Y4(e,n)}function TX(n){return rbe(n.b.Kc(),n.a)}function wL(n,e){um(n,e),G4(n,n.D)}function gL(n,e,t){aT(n,e),lT(n,t)}function vg(n,e,t){I0(n,e),P0(n,t)}function Ro(n,e,t){eu(n,e),tu(n,t)}function E7(n,e,t){_4(n,e),q4(n,t)}function C7(n,e,t){H4(n,e),U4(n,t)}function fTn(n,e,t){sV.call(this,n,e,t)}function AX(n){PMn.call(this,n,!0)}function hTn(){uC.call(this,"Tail",3)}function lTn(){uC.call(this,"Head",1)}function H1(n){dh(),mve.call(this,n)}function f0(n){rM.call(this,n,n,n,n)}function pL(n){n.c=K(ki,Fn,1,0,5,1)}function SX(n){return n.b&&xF(n),n.a}function PX(n){return n.b&&xF(n),n.c}function Ble(n,e){qf||(n.b=e)}function Rle(n,e){return n[n.length]=e}function Kle(n,e){return n[n.length]=e}function _le(n,e){return Yb(e,Af(n))}function Hle(n,e){return Yb(e,Af(n))}function qle(n,e){return pT(dN(n.d),e)}function Ule(n,e){return pT(dN(n.g),e)}function Gle(n,e){return pT(dN(n.j),e)}function Ni(n,e){Dt.call(this,n.b,e)}function zle(n,e){ve(Sc(n.a),DOn(e))}function Xle(n,e){ve(no(n.a),LOn(e))}function Vle(n,e,t){Ro(t,t.i+n,t.j+e)}function aTn(n,e,t){$t(n.c[e.g],e.g,t)}function Wle(n,e,t){u(n.c,71).Gi(e,t)}function mL(n,e,t){return $t(n,e,t),t}function dTn(n){nu(n.Sf(),new D9n(n))}function kg(n){return n!=null?mt(n):0}function Jle(n){return n==null?0:mt(n)}function P6(n){nt(),Wd.call(this,n)}function bTn(n){this.a=n,qV.call(this,n)}function Mf(){Mf=F,y.Math.log(2)}function Ko(){Ko=F,rl=(pCn(),Moe)}function wTn(){wTn=F,YH=new j5(aU)}function Ie(){Ie=F,new gTn,new Z}function gTn(){new de,new de,new de}function Qle(){throw M(new Kl(QJn))}function Yle(){throw M(new Kl(QJn))}function Zle(){throw M(new Kl(YJn))}function n1e(){throw M(new Kl(YJn))}function vL(n){this.a=n,VE.call(this,n)}function kL(n){this.a=n,VE.call(this,n)}function pTn(n,e){m0(),this.a=n,this.b=e}function e1e(n,e){Se(e),Tg(n).Jc(new Ru)}function Yt(n,e){QL(n.c,n.c.length,e)}function tc(n){return n.ae?1:0}function OX(n,e){return Ec(n,e)>0?n:e}function Yc(n,e,t){return{l:n,m:e,h:t}}function t1e(n,e){n.a!=null&&OMn(e,n.a)}function i1e(n){Zi(n,null),Ii(n,null)}function r1e(n,e,t){return Xe(n.g,t,e)}function yg(n,e,t){return nZ(e,t,n.c)}function c1e(n,e,t){return Xe(n.k,t,e)}function u1e(n,e,t){return GOe(n,e,t),t}function o1e(n,e){return ko(),e.n.b+=n}function vTn(n){nJ.call(this),this.b=n}function DX(n){vV.call(this),this.a=n}function kTn(){uC.call(this,"Range",2)}function LC(n){this.b=n,this.a=new Z}function yTn(n){this.b=new $bn,this.a=n}function jTn(n){n.a=new OO,n.c=new OO}function ETn(n){n.a=new de,n.d=new de}function CTn(n){$N(n,null),xN(n,null)}function MTn(n,e){return XOe(n.a,e,null)}function s1e(n,e){return Xe(n.a,e.a,e)}function Ki(n){return new V(n.a,n.b)}function LX(n){return new V(n.c,n.d)}function f1e(n){return new V(n.c,n.d)}function I6(n,e){return cOe(n.c,n.b,e)}function O(n,e){return n!=null&&Tx(n,e)}function yL(n,e){return Yve(n.Kc(),e)!=-1}function NC(n){return n.Ob()?n.Pb():null}function h1e(n){this.b=(Dn(),new eD(n))}function NX(n){this.a=n,de.call(this)}function TTn(){T7.call(this,null,null)}function ATn(){_C.call(this,null,null)}function STn(){je.call(this,"INSTANCE",0)}function PTn(){LZ(),this.a=new K5(Ion)}function ITn(n){return hh(n,0,n.length)}function l1e(n,e){return new VTn(n.Kc(),e)}function $X(n,e){return n.a.Bc(e)!=null}function OTn(n,e){me(n),n.Gc(u(e,15))}function a1e(n,e,t){n.c.bd(e,u(t,136))}function d1e(n,e,t){n.c.Ui(e,u(t,136))}function DTn(n,e){n.c&&(tW(e),rOn(e))}function b1e(n,e){n.q.setHours(e),G5(n,e)}function w1e(n,e){a0(e,n.a.a.a,n.a.a.b)}function g1e(n,e,t,i){$t(n.a[e.g],t.g,i)}function jL(n,e,t){return n.a[e.g][t.g]}function p1e(n,e){return n.e[e.c.p][e.p]}function m1e(n,e){return n.c[e.c.p][e.p]}function Tf(n,e){return n.a[e.c.p][e.p]}function v1e(n,e){return n.j[e.p]=IMe(e)}function EL(n,e){return n.a.Bc(e)!=null}function k1e(n,e){return $(R(e.a))<=n}function y1e(n,e){return $(R(e.a))>=n}function j1e(n,e){return RJ(n.f,e.Pg())}function vp(n,e){return n.a*e.a+n.b*e.b}function E1e(n,e){return n.a0?e/(n*n):e*100}function V1e(n,e){return n>0?e*e/n:e*e*100}function xb(n,e){return u(Lf(n.a,e),34)}function W1e(n,e){return ca(),Pn(n,e.e,e)}function J1e(n,e,t){return nC(),t.Mg(n,e)}function Q1e(n){return kl(),n.e.a+n.f.a/2}function Y1e(n,e,t){return kl(),t.e.a-n*e}function Z1e(n){return kl(),n.e.b+n.f.b/2}function nae(n,e,t){return kl(),t.e.b-n*e}function sAn(n){n.d=new cAn(n),n.e=new de}function fAn(){this.a=new C0,this.b=new C0}function hAn(n){this.c=n,this.a=1,this.b=1}function lAn(n){YF(),Syn(this),this.Ff(n)}function eae(n,e,t){YM(),n.pf(e)&&t.Cd(n)}function tae(n,e,t){return nn(e,jBn(n,t))}function a0(n,e,t){return n.a+=e,n.b+=t,n}function iae(n,e,t){return n.a*=e,n.b*=t,n}function ZX(n,e){return n.a=e.a,n.b=e.b,n}function HC(n){return n.a=-n.a,n.b=-n.b,n}function N6(n,e,t){return n.a-=e,n.b-=t,n}function aAn(n){Ct.call(this),c5(this,n)}function dAn(){je.call(this,"GROW_TREE",0)}function bAn(){je.call(this,"POLYOMINO",0)}function lo(n,e,t){Iu.call(this,n,e,t,2)}function rae(n,e,t){k5(Sc(n.a),e,DOn(t))}function wAn(n,e){a6(),T7.call(this,n,e)}function nV(n,e){Gl(),_C.call(this,n,e)}function gAn(n,e){Gl(),nV.call(this,n,e)}function pAn(n,e){Gl(),_C.call(this,n,e)}function cae(n,e){return n.c.Fc(u(e,136))}function uae(n,e,t){k5(no(n.a),e,LOn(t))}function mAn(n){this.c=n,eu(n,0),tu(n,0)}function PL(n,e){Ko(),oM.call(this,n,e)}function vAn(n,e){Ko(),PL.call(this,n,e)}function eV(n,e){Ko(),PL.call(this,n,e)}function tV(n,e){Ko(),oM.call(this,n,e)}function kAn(n,e){Ko(),eV.call(this,n,e)}function yAn(n,e){Ko(),tV.call(this,n,e)}function jAn(n,e){Ko(),oM.call(this,n,e)}function oae(n,e,t){return e.zl(n.e,n.c,t)}function sae(n,e,t){return e.Al(n.e,n.c,t)}function iV(n,e,t){return qA(ak(n,e),t)}function IL(n,e){return na(n.e,u(e,54))}function fae(n){return n==null?null:NDe(n)}function hae(n){return n==null?null:Aje(n)}function lae(n){return n==null?null:Jr(n)}function aae(n){return n==null?null:Jr(n)}function un(n){return F6(n==null||Nb(n)),n}function R(n){return F6(n==null||$b(n)),n}function Oe(n){return F6(n==null||Ai(n)),n}function ll(n){n.o==null&&cMe(n)}function rV(n){if(!n)throw M(new Q9)}function dae(n){if(!n)throw M(new uD)}function oe(n){if(!n)throw M(new nc)}function Fb(n){if(!n)throw M(new Cu)}function EAn(n){if(!n)throw M(new Bo)}function m4(){m4=F,aE=new ujn,new ojn}function Mg(){Mg=F,O2=new lt("root")}function cV(){cxn.call(this),this.Bb|=hr}function bae(n,e){this.d=n,c9n(this),this.b=e}function uV(n,e){i$.call(this,n),this.a=e}function oV(n,e){i$.call(this,n),this.a=e}function sV(n,e,t){VM.call(this,n,e,t,null)}function CAn(n,e,t){VM.call(this,n,e,t,null)}function P7(n,e){this.c=n,h4.call(this,n,e)}function $6(n,e){this.a=n,P7.call(this,n,e)}function fV(n){this.q=new y.Date(id(n))}function MAn(n){return n>8?0:n+1}function TAn(n,e){qf||nn(n.a,e)}function wae(n,e){return o7(),Q4(e.d.i,n)}function gae(n,e){return Hp(),new tUn(e,n)}function pae(n,e,t){return n.Ne(e,t)<=0?t:e}function mae(n,e,t){return n.Ne(e,t)<=0?e:t}function vae(n,e){return u(Lf(n.b,e),143)}function kae(n,e){return u(Lf(n.c,e),233)}function OL(n){return u(sn(n.a,n.b),294)}function AAn(n){return new V(n.c,n.d+n.a)}function SAn(n){return Jn(n),n?1231:1237}function PAn(n){return ko(),oTn(u(n,203))}function Bb(){Bb=F,ron=yn((go(),Gd))}function yae(n,e){e.a?MCe(n,e):EL(n.a,e.b)}function I7(n,e,t){++n.j,n.tj(),t$(n,e,t)}function IAn(n,e,t){++n.j,n.qj(e,n.Zi(e,t))}function OAn(n,e,t){var i;i=n.fd(e),i.Rb(t)}function hV(n,e,t){return t=So(n,e,6,t),t}function lV(n,e,t){return t=So(n,e,3,t),t}function aV(n,e,t){return t=So(n,e,9,t),t}function ch(n,e){return X7(e,xtn),n.f=e,n}function dV(n,e){return(e&et)%n.d.length}function DAn(n,e,t){return zen(n.c,n.b,e,t)}function LAn(n,e){this.c=n,S0.call(this,e)}function NAn(n,e){this.a=n,kyn.call(this,e)}function O7(n,e){this.a=n,kyn.call(this,e)}function Dt(n,e){lt.call(this,n),this.a=e}function bV(n,e){FG.call(this,n),this.a=e}function DL(n,e){FG.call(this,n),this.a=e}function jae(n){VY.call(this,0,0),this.f=n}function $An(n,e,t){return n.a+=hh(e,0,t),n}function D7(n){return!n.a&&(n.a=new C0n),n.a}function wV(n,e){var t;return t=n.e,n.e=e,t}function gV(n,e){var t;return t=e,!!n.Fe(t)}function Eae(n,e){return _n(),n==e?0:n?1:-1}function Rb(n,e){n.a.bd(n.b,e),++n.b,n.c=-1}function L7(n){n.b?L7(n.b):n.f.c.zc(n.e,n.d)}function xAn(n){Hu(n.e),n.d.b=n.d,n.d.a=n.d}function Cae(n,e,t){Xa(),t9n(n,e.Ve(n.a,t))}function pV(n,e,t){return Pp(n,u(e,22),t)}function $s(n,e){return qE(new Array(e),n)}function Mae(n){return Ae(U1(n,32))^Ae(n)}function LL(n){return String.fromCharCode(n)}function Tae(n){return n==null?null:n.message}function Aae(n,e,t){return n.apply(e,t)}function Sae(n,e){var t;t=n[DB],t.call(n,e)}function Pae(n,e){var t;t=n[DB],t.call(n,e)}function Iae(n,e){return o7(),!Q4(e.d.i,n)}function mV(n,e,t,i){rM.call(this,n,e,t,i)}function FAn(){qC.call(this),this.a=new Li}function vV(){this.n=new Li,this.o=new Li}function BAn(){this.b=new Li,this.c=new Z}function RAn(){this.a=new Z,this.b=new Z}function KAn(){this.a=new _U,this.b=new Byn}function kV(){this.b=new Ql,this.a=new Ql}function _An(){this.b=new ni,this.a=new ni}function HAn(){this.b=new de,this.a=new de}function qAn(){this.b=new wEn,this.a=new H3n}function UAn(){this.a=new n8n,this.b=new Lpn}function GAn(){this.a=new Z,this.d=new Z}function qC(){this.n=new cp,this.i=new mp}function zAn(n){this.a=(Co(n,mw),new Gc(n))}function XAn(n){this.a=(Co(n,mw),new Gc(n))}function Oae(n){return n<100?null:new F1(n)}function Dae(n,e){return n.n.a=(Jn(e),e+10)}function Lae(n,e){return n.n.a=(Jn(e),e+10)}function Nae(n,e){return e==n||km(TA(e),n)}function VAn(n,e){return Xe(n.a,e,"")==null}function $ae(n,e){var t;return t=e.qi(n.a),t}function tt(n,e){return n.a+=e.a,n.b+=e.b,n}function mi(n,e){return n.a-=e.a,n.b-=e.b,n}function xae(n){return Pb(n.j.c,0),n.a=-1,n}function yV(n,e,t){return t=So(n,e,11,t),t}function Fae(n,e,t){t!=null&&mT(e,Fx(n,t))}function Bae(n,e,t){t!=null&&vT(e,Fx(n,t))}function jp(n,e,t,i){q.call(this,n,e,t,i)}function jV(n,e,t,i){q.call(this,n,e,t,i)}function WAn(n,e,t,i){jV.call(this,n,e,t,i)}function JAn(n,e,t,i){bM.call(this,n,e,t,i)}function NL(n,e,t,i){bM.call(this,n,e,t,i)}function EV(n,e,t,i){bM.call(this,n,e,t,i)}function QAn(n,e,t,i){NL.call(this,n,e,t,i)}function CV(n,e,t,i){NL.call(this,n,e,t,i)}function Nn(n,e,t,i){EV.call(this,n,e,t,i)}function YAn(n,e,t,i){CV.call(this,n,e,t,i)}function ZAn(n,e,t,i){jW.call(this,n,e,t,i)}function Kb(n,e){Ir.call(this,k8+n+Td+e)}function MV(n,e){return n.jk().wi().ri(n,e)}function TV(n,e){return n.jk().wi().ti(n,e)}function nSn(n,e){return Jn(n),x(n)===x(e)}function An(n,e){return Jn(n),x(n)===x(e)}function Rae(n,e){return n.b.Bd(new ECn(n,e))}function Kae(n,e){return n.b.Bd(new CCn(n,e))}function eSn(n,e){return n.b.Bd(new MCn(n,e))}function _ae(n,e){return n.e=u(n.d.Kb(e),159)}function AV(n,e,t){return n.lastIndexOf(e,t)}function Hae(n,e,t){return bt(n[e.a],n[t.a])}function qae(n,e){return U(e,(cn(),Cj),n)}function Uae(n,e){return jc(e.a.d.p,n.a.d.p)}function Gae(n,e){return jc(n.a.d.p,e.a.d.p)}function zae(n,e){return bt(n.c-n.s,e.c-e.s)}function Xae(n,e){return bt(n.b.e.a,e.b.e.a)}function Vae(n,e){return bt(n.c.e.a,e.c.e.a)}function tSn(n){return n.c?qr(n.c.a,n,0):-1}function Ep(n){return n==Ud||n==tl||n==qc}function SV(n,e){this.c=n,oN.call(this,n,e)}function iSn(n,e,t){this.a=n,JX.call(this,e,t)}function rSn(n){this.c=n,IC.call(this,Ey,0)}function cSn(n,e,t){this.c=e,this.b=t,this.a=n}function N7(n){k4(),this.d=n,this.a=new Eg}function uSn(n){uh(),this.a=(Dn(),new r4(n))}function Wae(n,e){hl(n.f)?QCe(n,e):Sye(n,e)}function oSn(n,e){sbe.call(this,n,n.length,e)}function Jae(n,e){qf||e&&(n.d=e)}function sSn(n,e){return O(e,15)&&xqn(n.c,e)}function Qae(n,e,t){return u(n.c,71).Wk(e,t)}function UC(n,e,t){return u(n.c,71).Xk(e,t)}function Yae(n,e,t){return oae(n,u(e,343),t)}function PV(n,e,t){return sae(n,u(e,343),t)}function Zae(n,e,t){return PKn(n,u(e,343),t)}function fSn(n,e,t){return _ye(n,u(e,343),t)}function x6(n,e){return e==null?null:tw(n.b,e)}function IV(n){return $b(n)?(Jn(n),n):n.ue()}function GC(n){return!isNaN(n)&&!isFinite(n)}function $L(n){jTn(this),vo(this),Bi(this,n)}function _u(n){pL(this),zV(this.c,0,n.Pc())}function _o(n,e,t){this.a=n,this.b=e,this.c=t}function hSn(n,e,t){this.a=n,this.b=e,this.c=t}function lSn(n,e,t){this.d=n,this.b=t,this.a=e}function aSn(n){this.a=n,fl(),vc(Date.now())}function dSn(n){bo(n.a),GJ(n.c,n.b),n.b=null}function xL(){xL=F,Oun=new $0n,AQn=new x0n}function bSn(){bSn=F,Ioe=K(ki,Fn,1,0,5,1)}function wSn(){wSn=F,Voe=K(ki,Fn,1,0,5,1)}function OV(){OV=F,Woe=K(ki,Fn,1,0,5,1)}function uh(){uh=F,new KG((Dn(),Dn(),sr))}function nde(n){return B4(),Ee((yNn(),IQn),n)}function ede(n){return Gu(),Ee((lNn(),xQn),n)}function tde(n){return YT(),Ee((JDn(),HQn),n)}function ide(n){return cT(),Ee((QDn(),qQn),n)}function rde(n){return NA(),Ee((Jxn(),UQn),n)}function cde(n){return bf(),Ee((fNn(),XQn),n)}function ude(n){return Uu(),Ee((sNn(),WQn),n)}function ode(n){return bu(),Ee((hNn(),QQn),n)}function sde(n){return VA(),Ee((zMn(),kYn),n)}function fde(n){return N0(),Ee((ENn(),jYn),n)}function hde(n){return Vp(),Ee((MNn(),CYn),n)}function lde(n){return A5(),Ee((CNn(),AYn),n)}function ade(n){return YE(),Ee((jDn(),SYn),n)}function dde(n){return uT(),Ee((YDn(),GYn),n)}function bde(n){return i5(),Ee((aNn(),pZn),n)}function wde(n){return Vi(),Ee((u$n(),yZn),n)}function gde(n){return nm(),Ee((ANn(),TZn),n)}function pde(n){return dd(),Ee((TNn(),DZn),n)}function DV(n,e){if(!n)throw M(new Gn(e))}function v4(n){if(!n)throw M(new Or(btn))}function FL(n,e){if(n!=e)throw M(new Bo)}function gSn(n,e,t){this.a=n,this.b=e,this.c=t}function LV(n,e,t){this.a=n,this.b=e,this.c=t}function pSn(n,e,t){this.a=n,this.b=e,this.c=t}function zC(n,e,t){this.b=n,this.a=e,this.c=t}function NV(n,e,t){this.b=n,this.c=e,this.a=t}function $V(n,e,t){this.a=n,this.b=e,this.c=t}function XC(n,e,t){this.e=e,this.b=n,this.d=t}function mSn(n,e,t){this.b=n,this.a=e,this.c=t}function mde(n,e,t){return Xa(),n.a.Yd(e,t),e}function BL(n){var e;return e=new ubn,e.e=n,e}function xV(n){var e;return e=new qyn,e.b=n,e}function $7(){$7=F,CP=new sgn,MP=new fgn}function VC(){VC=F,XZn=new xgn,zZn=new Fgn}function xs(){xs=F,YZn=new G2n,ZZn=new z2n}function vde(n){return D0(),Ee((qLn(),fne),n)}function kde(n){return tr(),Ee((XMn(),HZn),n)}function yde(n){return OT(),Ee((PNn(),GZn),n)}function jde(n){return $f(),Ee((SNn(),tne),n)}function Ede(n){return ow(),Ee((o$n(),rne),n)}function Cde(n){return DA(),Ee(($xn(),hne),n)}function Mde(n){return Yp(),Ee((D$n(),lne),n)}function Tde(n){return QM(),Ee((cLn(),ane),n)}function Ade(n){return u5(),Ee((_Ln(),dne),n)}function Sde(n){return bT(),Ee((HLn(),bne),n)}function Pde(n){return o1(),Ee((s$n(),wne),n)}function Ide(n){return pk(),Ee((eLn(),gne),n)}function Ode(n){return jm(),Ee(($$n(),jne),n)}function Dde(n){return pr(),Ee((aFn(),Ene),n)}function Lde(n){return Z4(),Ee((GLn(),Cne),n)}function Nde(n){return vl(),Ee((zLn(),Tne),n)}function $de(n){return KM(),Ee((nLn(),Ane),n)}function xde(n){return Jk(),Ee((N$n(),yne),n)}function Fde(n){return hd(),Ee((ULn(),mne),n)}function Bde(n){return vA(),Ee((L$n(),vne),n)}function Rde(n){return hk(),Ee((tLn(),kne),n)}function Kde(n){return Yo(),Ee((h$n(),Sne),n)}function _de(n){return a1(),Ee((Xxn(),Yte),n)}function Hde(n){return g5(),Ee((XLn(),Zte),n)}function qde(n){return cw(),Ee((INn(),nie),n)}function Ude(n){return T5(),Ee((f$n(),eie),n)}function Gde(n){return gs(),Ee((dFn(),tie),n)}function zde(n){return lh(),Ee((ONn(),iie),n)}function Xde(n){return wk(),Ee((iLn(),rie),n)}function Vde(n){return gr(),Ee((JLn(),uie),n)}function Wde(n){return ST(),Ee((VLn(),oie),n)}function Jde(n){return d5(),Ee((WLn(),sie),n)}function Qde(n){return om(),Ee((QLn(),fie),n)}function Yde(n){return dT(),Ee((YLn(),hie),n)}function Zde(n){return DT(),Ee((ZLn(),lie),n)}function n0e(n){return O0(),Ee((oNn(),Aie),n)}function e0e(n){return n5(),Ee((rLn(),Die),n)}function t0e(n){return sh(),Ee((sLn(),Rie),n)}function i0e(n){return Sf(),Ee((fLn(),_ie),n)}function r0e(n){return lf(),Ee((hLn(),tre),n)}function c0e(n){return M0(),Ee((lLn(),fre),n)}function u0e(n){return Qp(),Ee((BNn(),hre),n)}function o0e(n){return q5(),Ee((VMn(),lre),n)}function s0e(n){return b5(),Ee((nNn(),are),n)}function f0e(n){return w5(),Ee((FNn(),$re),n)}function h0e(n){return FM(),Ee((uLn(),xre),n)}function l0e(n){return yT(),Ee((oLn(),_re),n)}function a0e(n){return wA(),Ee((l$n(),qre),n)}function d0e(n){return Ok(),Ee((eNn(),Gre),n)}function b0e(n){return ZM(),Ee((aLn(),Ure),n)}function w0e(n){return sA(),Ee((xNn(),lce),n)}function g0e(n){return AT(),Ee((tNn(),ace),n)}function p0e(n){return XT(),Ee((iNn(),dce),n)}function m0e(n){return rA(),Ee((rNn(),wce),n)}function v0e(n){return _T(),Ee((cNn(),mce),n)}function k0e(n){return GM(),Ee((dLn(),Rce),n)}function y0e(n){return V4(),Ee((ZDn(),_Zn),n)}function j0e(n){return Vn(),Ee((x$n(),xZn),n)}function E0e(n){return nT(),Ee((uNn(),Kce),n)}function C0e(n){return N$(),Ee((bLn(),_ce),n)}function M0e(n){return R5(),Ee((a$n(),qce),n)}function T0e(n){return eC(),Ee((IDn(),Gce),n)}function A0e(n){return Fk(),Ee((bNn(),Uce),n)}function S0e(n){return tC(),Ee((ODn(),Xce),n)}function P0e(n){return ck(),Ee((wLn(),Vce),n)}function I0e(n){return Yk(),Ee((d$n(),Wce),n)}function O0e(n){return f6(),Ee((DDn(),lue),n)}function D0e(n){return Ak(),Ee((gLn(),aue),n)}function L0e(n){return gf(),Ee((w$n(),mue),n)}function N0e(n){return l1(),Ee((Lxn(),kue),n)}function $0e(n){return Rh(),Ee((F$n(),yue),n)}function x0e(n){return wd(),Ee((B$n(),Aue),n)}function F0e(n){return ci(),Ee((b$n(),zue),n)}function B0e(n){return Nf(),Ee((wNn(),Xue),n)}function R0e(n){return El(),Ee((RNn(),Vue),n)}function K0e(n){return pA(),Ee((R$n(),Wue),n)}function _0e(n){return jl(),Ee((dNn(),Que),n)}function H0e(n){return To(),Ee((KNn(),Zue),n)}function q0e(n){return lw(),Ee((Wxn(),noe),n)}function U0e(n){return Fg(),Ee((g$n(),eoe),n)}function G0e(n){return Oi(),Ee((K$n(),toe),n)}function z0e(n){return zu(),Ee((_$n(),ioe),n)}function X0e(n){return tn(),Ee((p$n(),roe),n)}function V0e(n){return go(),Ee((_Nn(),foe),n)}function W0e(n){return io(),Ee((Vxn(),hoe),n)}function J0e(n){return Gp(),Ee((gNn(),loe),n)}function Q0e(n,e){return Jn(n),n+(Jn(e),e)}function Y0e(n){return RL(),Ee((pLn(),aoe),n)}function Z0e(n){return qT(),Ee((HNn(),doe),n)}function nbe(n){return LT(),Ee((qNn(),goe),n)}function k4(){k4=F,tln=(tn(),Wn),II=Zn}function RL(){RL=F,vdn=new VSn,kdn=new LPn}function ebe(n){return!n.e&&(n.e=new Z),n.e}function KL(n,e){this.c=n,this.a=e,this.b=e-n}function vSn(n,e,t){this.a=n,this.b=e,this.c=t}function _L(n,e,t){this.a=n,this.b=e,this.c=t}function FV(n,e,t){this.a=n,this.b=e,this.c=t}function BV(n,e,t){this.a=n,this.b=e,this.c=t}function kSn(n,e,t){this.a=n,this.b=e,this.c=t}function ySn(n,e,t){this.a=n,this.b=e,this.c=t}function Xl(n,e,t){this.e=n,this.a=e,this.c=t}function jSn(n,e,t){Ko(),tJ.call(this,n,e,t)}function HL(n,e,t){Ko(),RW.call(this,n,e,t)}function RV(n,e,t){Ko(),RW.call(this,n,e,t)}function KV(n,e,t){Ko(),RW.call(this,n,e,t)}function ESn(n,e,t){Ko(),HL.call(this,n,e,t)}function _V(n,e,t){Ko(),HL.call(this,n,e,t)}function CSn(n,e,t){Ko(),_V.call(this,n,e,t)}function MSn(n,e,t){Ko(),RV.call(this,n,e,t)}function TSn(n,e,t){Ko(),KV.call(this,n,e,t)}function qL(n){rM.call(this,n.d,n.c,n.a,n.b)}function HV(n){rM.call(this,n.d,n.c,n.a,n.b)}function qV(n){this.d=n,c9n(this),this.b=nwe(n.d)}function tbe(n){return Cm(),Ee((Nxn(),Poe),n)}function x7(n,e){return Se(n),Se(e),new NEn(n,e)}function Cp(n,e){return Se(n),Se(e),new RSn(n,e)}function ibe(n,e){return Se(n),Se(e),new KSn(n,e)}function rbe(n,e){return Se(n),Se(e),new qEn(n,e)}function UL(n){return oe(n.b!=0),Xo(n,n.a.a)}function cbe(n){return oe(n.b!=0),Xo(n,n.c.b)}function ube(n){return!n.c&&(n.c=new W3),n.c}function y4(n){var e;return e=new Z,b$(e,n),e}function obe(n){var e;return e=new ni,b$(e,n),e}function ASn(n){var e;return e=new GG,A$(e,n),e}function F7(n){var e;return e=new Ct,A$(e,n),e}function u(n,e){return F6(n==null||Tx(n,e)),n}function sbe(n,e,t){TPn.call(this,e,t),this.a=n}function SSn(n,e){this.c=n,this.b=e,this.a=!1}function PSn(){this.a=";,;",this.b="",this.c=""}function ISn(n,e,t){this.b=n,_Mn.call(this,e,t)}function UV(n,e,t){this.c=n,oC.call(this,e,t)}function GV(n,e,t){d4.call(this,n,e),this.b=t}function zV(n,e,t){Bnn(t,0,n,e,t.length,!1)}function Lh(n,e,t,i,r){n.b=e,n.c=t,n.d=i,n.a=r}function XV(n,e,t,i,r){n.d=e,n.c=t,n.a=i,n.b=r}function fbe(n,e){e&&(n.b=e,n.a=(z1(e),e.a))}function B7(n,e){if(!n)throw M(new Gn(e))}function Mp(n,e){if(!n)throw M(new Or(e))}function VV(n,e){if(!n)throw M(new Bjn(e))}function hbe(n,e){return ZE(),jc(n.d.p,e.d.p)}function lbe(n,e){return kl(),bt(n.e.b,e.e.b)}function abe(n,e){return kl(),bt(n.e.a,e.e.a)}function dbe(n,e){return jc(GSn(n.d),GSn(e.d))}function WC(n,e){return e&&vM(n,e.d)?e:null}function bbe(n,e){return e==(tn(),Wn)?n.c:n.d}function WV(n){return Q1(dwe(Vr(n)?ds(n):n))}function wbe(n){return new V(n.c+n.b,n.d+n.a)}function OSn(n){return n!=null&&!lx(n,N9,$9)}function gbe(n,e){return(fBn(n)<<4|fBn(e))&ui}function DSn(n,e,t,i,r){n.c=e,n.d=t,n.b=i,n.a=r}function JV(n){var e,t;e=n.b,t=n.c,n.b=t,n.c=e}function QV(n){var e,t;t=n.d,e=n.a,n.d=e,n.a=t}function pbe(n,e){var t;return t=n.c,PQ(n,e),t}function YV(n,e){return e<0?n.g=-1:n.g=e,n}function JC(n,e){return Mme(n),n.a*=e,n.b*=e,n}function LSn(n,e,t){A$n.call(this,e,t),this.d=n}function R7(n,e,t){pX.call(this,n,e),this.c=t}function QC(n,e,t){pX.call(this,n,e),this.c=t}function ZV(n){OV(),ME.call(this),this.ci(n)}function NSn(){$4(),Bwe.call(this,(R1(),Ss))}function $Sn(n){return nt(),new Nh(0,n)}function xSn(){xSn=F,AU=(Dn(),new nD(IK))}function YC(){YC=F,new hZ((bD(),HK),(dD(),_K))}function FSn(){FSn=F,pun=K(Gi,J,17,256,0,1)}function BSn(){this.b=$(R(rn((qs(),y_))))}function GL(n){this.b=n,this.a=Wa(this.b.a).Od()}function RSn(n,e){this.b=n,this.a=e,GO.call(this)}function KSn(n,e){this.a=n,this.b=e,GO.call(this)}function _Sn(n,e,t){this.a=n,gg.call(this,e,t)}function HSn(n,e,t){this.a=n,gg.call(this,e,t)}function j4(n,e,t){var i;i=new qb(t),df(n,e,i)}function nW(n,e,t){var i;return i=n[e],n[e]=t,i}function ZC(n){var e;return e=n.slice(),o$(e,n)}function nM(n){var e;return e=n.n,n.a.b+e.d+e.a}function qSn(n){var e;return e=n.n,n.e.b+e.d+e.a}function eW(n){var e;return e=n.n,n.e.a+e.b+e.c}function tW(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function xe(n,e){return xt(n,e,n.c.b,n.c),!0}function mbe(n){return n.a?n.a:vN(n)}function vbe(n){return Lp(),Kh(n)==At(ia(n))}function kbe(n){return Lp(),ia(n)==At(Kh(n))}function d0(n,e){return O5(n,new d4(e.a,e.b))}function ybe(n,e){return yM(),Nx(n,e),new lIn(n,e)}function jbe(n,e){return n.c=e)throw M(new YG)}function _b(n,e){return $k(n,(Jn(e),new a9n(e)))}function Ap(n,e){return $k(n,(Jn(e),new d9n(e)))}function SPn(n,e,t){return VLe(n,u(e,12),u(t,12))}function PPn(n){return Ou(),u(n,12).g.c.length!=0}function IPn(n){return Ou(),u(n,12).e.c.length!=0}function uwe(n,e){return Hp(),bt(e.a.o.a,n.a.o.a)}function owe(n,e){e.Bb&kc&&!n.a.o&&(n.a.o=e)}function swe(n,e){e.Ug("General 'Rotator",1),jDe(n)}function fwe(n,e,t){e.qf(t,$(R(ee(n.b,t)))*n.a)}function OPn(n,e,t){return Xg(),W4(n,e)&&W4(n,t)}function _6(n){return zu(),!n.Hc(Fl)&&!n.Hc(Pa)}function hwe(n){return n.e?qJ(n.e):null}function H6(n){return Vr(n)?""+n:$qn(n)}function yW(n){var e;for(e=n;e.f;)e=e.f;return e}function lwe(n,e,t){return $t(e,0,oW(e[0],t[0])),e}function Vl(n,e,t,i){var r;r=n.i,r.i=e,r.a=t,r.b=i}function q(n,e,t,i){ti.call(this,n,e,t),this.b=i}function Ci(n,e,t,i,r){c$.call(this,n,e,t,i,r,-1)}function q6(n,e,t,i,r){ok.call(this,n,e,t,i,r,-1)}function bM(n,e,t,i){R7.call(this,n,e,t),this.b=i}function DPn(n){PMn.call(this,n,!1),this.a=!1}function LPn(){sMn.call(this,"LOOKAHEAD_LAYOUT",1)}function NPn(n){this.b=n,kp.call(this,n),RTn(this)}function $Pn(n){this.b=n,A7.call(this,n),KTn(this)}function Hb(n,e,t){this.a=n,jp.call(this,e,t,5,6)}function jW(n,e,t,i){this.b=n,ti.call(this,e,t,i)}function xPn(n,e){this.b=n,H8n.call(this,n.b),this.a=e}function FPn(n){this.a=kRn(n.a),this.b=new _u(n.b)}function EW(n,e){m0(),Hhe.call(this,n,FT(new Ku(e)))}function wM(n,e){return nt(),new BW(n,e,0)}function rN(n,e){return nt(),new BW(6,n,e)}function _i(n,e){for(Jn(e);n.Ob();)e.Cd(n.Pb())}function Zc(n,e){return Ai(e)?AN(n,e):!!wr(n.f,e)}function cN(n,e){return e.Vh()?na(n.b,u(e,54)):e}function awe(n,e){return An(n.substr(0,e.length),e)}function $h(n){return new te(new UX(n.a.length,n.a))}function gM(n){return new V(n.c+n.b/2,n.d+n.a/2)}function dwe(n){return Yc(~n.l&ro,~n.m&ro,~n.h&Il)}function uN(n){return typeof n===vy||typeof n===eB}function Hu(n){n.f=new iTn(n),n.i=new rTn(n),++n.g}function BPn(n){if(!n)throw M(new nc);return n.d}function Sp(n){var e;return e=a5(n),oe(e!=null),e}function bwe(n){var e;return e=I5e(n),oe(e!=null),e}function C4(n,e){var t;return t=n.a.gc(),BJ(e,t),t-e}function fi(n,e){var t;return t=n.a.zc(e,n),t==null}function _7(n,e){return n.a.zc(e,(_n(),wa))==null}function CW(n){return new Tn(null,vwe(n,n.length))}function MW(n,e,t){return cGn(n,u(e,42),u(t,176))}function Pp(n,e,t){return Ks(n.a,e),nW(n.b,e.g,t)}function wwe(n,e,t){E4(t,n.a.c.length),Go(n.a,t,e)}function B(n,e,t,i){xFn(e,t,n.length),gwe(n,e,t,i)}function gwe(n,e,t,i){var r;for(r=e;r0?y.Math.log(n/e):-100}function KPn(n,e){return Ec(n,e)<0?-1:Ec(n,e)>0?1:0}function H7(n,e){OTn(n,O(e,160)?e:u(e,2036).Rl())}function PW(n,e){if(n==null)throw M(new sp(e))}function vwe(n,e){return yme(e,n.length),new XSn(n,e)}function IW(n,e){return e?Bi(n,e):!1}function kwe(){return RE(),S(T(uQn,1),G,549,0,[GK])}function G6(n){return n.e==0?n:new Qa(-n.e,n.d,n.a)}function ywe(n,e){return bt(n.c.c+n.c.b,e.c.c+e.c.b)}function q7(n,e){xt(n.d,e,n.b.b,n.b),++n.a,n.c=null}function _Pn(n,e){return n.c?_Pn(n.c,e):nn(n.b,e),n}function jwe(n,e,t){var i;return i=Jb(n,e),qN(n,e,t),i}function HPn(n,e,t){var i;for(i=0;i=n.g}function $t(n,e,t){return dae(t==null||oPe(n,t)),n[e]=t}function $W(n,e){return zn(e,n.length+1),n.substr(e)}function gN(n,e){for(Jn(e);n.c=n?new Dz:Gme(n-1)}function Hi(n){return!n.a&&n.c?n.c.b:n.a}function KW(n){return O(n,616)?n:new oOn(n)}function z1(n){n.c?z1(n.c):(ea(n),n.d=!0)}function V6(n){n.c?n.c.$e():(n.d=!0,fTe(n))}function sIn(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function fIn(n){var e,t;return e=n.c.i.c,t=n.d.i.c,e==t}function _we(n,e){var t;t=n.Ih(e),t>=0?n.ki(t):Pnn(n,e)}function hIn(n,e){n.c<0||n.b.b0;)n=n<<1|(n<0?1:0);return n}function mIn(n,e){var t;return t=new Lc(n),Bn(e.c,t),t}function vIn(n,e){n.u.Hc((zu(),Fl))&&zEe(n,e),h4e(n,e)}function mc(n,e){return x(n)===x(e)||n!=null&&rt(n,e)}function Cr(n,e){return JL(n.a,e)?n.b[u(e,22).g]:null}function nge(){return YE(),S(T(oon,1),G,489,0,[b_])}function ege(){return eC(),S(T($1n,1),G,490,0,[Bq])}function tge(){return tC(),S(T(zce,1),G,558,0,[Rq])}function ige(){return f6(),S(T(tan,1),G,539,0,[Hj])}function jM(n){return!n.n&&(n.n=new q(Ar,n,1,7)),n.n}function mN(n){return!n.c&&(n.c=new q(Qu,n,9,9)),n.c}function UW(n){return!n.c&&(n.c=new Nn(he,n,5,8)),n.c}function rge(n){return!n.b&&(n.b=new Nn(he,n,4,7)),n.b}function U7(n){return n.j.c.length=0,zW(n.c),xae(n.a),n}function P4(n){return n.e==rv&&jfe(n,Y8e(n.g,n.b)),n.e}function G7(n){return n.f==rv&&Cfe(n,q7e(n.g,n.b)),n.f}function Ve(n,e,t,i){return Hxn(n,e,t,!1),BT(n,i),n}function kIn(n,e){this.b=n,oN.call(this,n,e),RTn(this)}function yIn(n,e){this.b=n,SV.call(this,n,e),KTn(this)}function W6(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function GW(n,e){this.b=n,this.c=e,this.a=new dp(this.b)}function Xi(n,e){return zn(e,n.length),n.charCodeAt(e)}function cge(n,e){DY(n,$(yl(e,"x")),$(yl(e,"y")))}function uge(n,e){DY(n,$(yl(e,"x")),$(yl(e,"y")))}function ut(n,e){return ea(n),new Tn(n,new tQ(e,n.a))}function _r(n,e){return ea(n),new Tn(n,new _J(e,n.a))}function Ub(n,e){return ea(n),new uV(n,new ILn(e,n.a))}function EM(n,e){return ea(n),new oV(n,new OLn(e,n.a))}function oge(n,e){return new GIn(u(Se(n),50),u(Se(e),50))}function sge(n,e){return bt(n.d.c+n.d.b/2,e.d.c+e.d.b/2)}function jIn(n,e,t){t.a?tu(n,e.b-n.f/2):eu(n,e.a-n.g/2)}function fge(n,e){return bt(n.g.c+n.g.b/2,e.g.c+e.g.b/2)}function hge(n,e){return $z(),bt((Jn(n),n),(Jn(e),e))}function lge(n){return n!=null&&r7(jO,n.toLowerCase())}function zW(n){var e;for(e=n.Kc();e.Ob();)e.Pb(),e.Qb()}function Tg(n){var e;return e=n.b,!e&&(n.b=e=new N8n(n)),e}function vN(n){var e;return e=Wme(n),e||null}function EIn(n,e){var t,i;return t=n/e,i=wi(t),t>i&&++i,i}function age(n,e,t){var i;i=u(n.d.Kb(t),159),i&&i.Nb(e)}function dge(n,e,t){wIe(n.a,t),zve(t),xCe(n.b,t),$Ie(e,t)}function CM(n,e,t,i){this.a=n,this.c=e,this.b=t,this.d=i}function XW(n,e,t,i){this.c=n,this.b=e,this.a=t,this.d=i}function CIn(n,e,t,i){this.c=n,this.b=e,this.d=t,this.a=i}function Ho(n,e,t,i){this.c=n,this.d=e,this.b=t,this.a=i}function MIn(n,e,t,i){this.a=n,this.d=e,this.c=t,this.b=i}function kN(n,e,t,i){this.a=n,this.e=e,this.d=t,this.c=i}function TIn(n,e,t,i){this.a=n,this.c=e,this.d=t,this.b=i}function yN(n,e,t){this.a=ktn,this.d=n,this.b=e,this.c=t}function Op(n,e,t,i){je.call(this,n,e),this.a=t,this.b=i}function AIn(n,e){this.d=(Jn(n),n),this.a=16449,this.c=e}function SIn(n){this.a=new Z,this.e=K(ye,J,53,n,0,2)}function bge(n){n.Ug("No crossing minimization",1),n.Vg()}function PIn(){ec.call(this,"There is no more element.")}function IIn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function OIn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function Za(n,e,t,i){this.e=n,this.a=e,this.c=t,this.d=i}function DIn(n,e,t,i){this.a=n,this.c=e,this.d=t,this.b=i}function LIn(n,e,t,i){Ko(),DLn.call(this,e,t,i),this.a=n}function NIn(n,e,t,i){Ko(),DLn.call(this,e,t,i),this.a=n}function jN(n,e,t){var i,r;return i=utn(n),r=e.ti(t,i),r}function al(n){var e,t;return t=(e=new Jd,e),K4(t,n),t}function EN(n){var e,t;return t=(e=new Jd,e),fnn(t,n),t}function wge(n,e){var t;return t=ee(n.f,e),HQ(e,t),null}function $In(n){return!n.b&&(n.b=new q(Vt,n,12,3)),n.b}function xIn(n){return F6(n==null||uN(n)&&n.Tm!==J2),n}function MM(n){return n.n&&(n.e!==Fzn&&n.je(),n.j=null),n}function I4(n){if(eo(n.d),n.d.d!=n.c)throw M(new Bo)}function VW(n){return oe(n.b0&&bKn(this)}function FIn(n,e){this.a=n,bae.call(this,n,u(n.d,15).fd(e))}function gge(n,e){return bt(Su(n)*ao(n),Su(e)*ao(e))}function pge(n,e){return bt(Su(n)*ao(n),Su(e)*ao(e))}function mge(n){return _0(n)&&on(un(z(n,(cn(),Nd))))}function vge(n,e){return Pn(n,u(v(e,(cn(),Cv)),17),e)}function kge(n,e){return u(v(n,(W(),T3)),15).Fc(e),e}function WW(n,e){return n.b=e.b,n.c=e.c,n.d=e.d,n.a=e.a,n}function BIn(n,e,t,i){this.b=n,this.c=i,IC.call(this,e,t)}function yge(n,e,t){n.i=0,n.e=0,e!=t&&yFn(n,e,t)}function jge(n,e,t){n.i=0,n.e=0,e!=t&&jFn(n,e,t)}function Ege(n,e,t){return s6(),J5e(u(ee(n.e,e),529),t)}function Dp(n){var e;return e=n.f,e||(n.f=new h4(n,n.c))}function RIn(n,e){return xg(n.j,e.s,e.c)+xg(e.e,n.s,n.c)}function KIn(n,e){n.e&&!n.e.a&&(Ayn(n.e,e),KIn(n.e,e))}function _In(n,e){n.d&&!n.d.a&&(Ayn(n.d,e),_In(n.d,e))}function Cge(n,e){return-bt(Su(n)*ao(n),Su(e)*ao(e))}function Mge(n){return u(n.ld(),149).Pg()+":"+Jr(n.md())}function HIn(){tF(this,new oG),this.wb=(G1(),Hn),o4()}function qIn(n){this.b=new Z,hi(this.b,this.b),this.a=n}function JW(n,e){new Ct,this.a=new Mu,this.b=n,this.c=e}function j0(){j0=F,Pun=new FU,ZK=new FU,Iun=new D0n}function Dn(){Dn=F,sr=new A0n,Wh=new P0n,hP=new I0n}function QW(){QW=F,RQn=new nbn,_Qn=new aW,KQn=new ebn}function Lp(){Lp=F,mP=new Z,m_=new de,p_=new Z}function TM(n,e){if(n==null)throw M(new sp(e));return n}function AM(n){return!n.a&&(n.a=new q(Qe,n,10,11)),n.a}function ft(n){return!n.q&&(n.q=new q(As,n,11,10)),n.q}function _(n){return!n.s&&(n.s=new q(ku,n,21,17)),n.s}function Tge(n){return Se(n),IRn(new te(re(n.a.Kc(),new En)))}function Age(n,e){return wo(n),wo(e),Fjn(u(n,22),u(e,22))}function nd(n,e,t){var i,r;i=IV(t),r=new AE(i),df(n,e,r)}function MN(n,e,t,i,r,c){ok.call(this,n,e,t,i,r,c?-2:-1)}function UIn(n,e,t,i){pX.call(this,e,t),this.b=n,this.a=i}function GIn(n,e){Vfe.call(this,new iN(n)),this.a=n,this.b=e}function YW(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function Sge(n){xs();var e;e=u(n.g,10),e.n.a=n.d.c+e.d.b}function O4(){O4=F;var n,e;e=!$8e(),n=new V3,VK=e?new og:n}function TN(n){return Dn(),O(n,59)?new jD(n):new BC(n)}function SM(n){return O(n,16)?new B6(u(n,16)):obe(n.Kc())}function Pge(n){return new HTn(n,n.e.Rd().gc()*n.c.Rd().gc())}function Ige(n){return new qTn(n,n.e.Rd().gc()*n.c.Rd().gc())}function ZW(n){return n&&n.hashCode?n.hashCode():l0(n)}function AN(n,e){return e==null?!!wr(n.f,null):zbe(n.i,e)}function Oge(n,e){var t;return t=$X(n.a,e),t&&(e.d=null),t}function zIn(n,e,t){return n.f?n.f.ef(e,t):!1}function z7(n,e,t,i){$t(n.c[e.g],t.g,i),$t(n.c[t.g],e.g,i)}function SN(n,e,t,i){$t(n.c[e.g],e.g,t),$t(n.b[e.g],e.g,i)}function Dge(n,e,t){return $(R(t.a))<=n&&$(R(t.b))>=e}function XIn(n,e){this.g=n,this.d=S(T(Qh,1),b1,10,0,[e])}function VIn(n){this.c=n,this.b=new Ul(u(Se(new tbn),50))}function WIn(n){this.c=n,this.b=new Ul(u(Se(new ewn),50))}function JIn(n){this.b=n,this.a=new Ul(u(Se(new Nbn),50))}function QIn(){this.b=new ni,this.d=new Ct,this.e=new ZG}function nJ(){this.c=new Li,this.d=new Li,this.e=new Li}function E0(){this.a=new Mu,this.b=(Co(3,mw),new Gc(3))}function Wl(n,e){this.e=n,this.a=ki,this.b=Qqn(e),this.c=e}function PM(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function YIn(n,e,t,i,r,c){this.a=n,k$.call(this,e,t,i,r,c)}function ZIn(n,e,t,i,r,c){this.a=n,k$.call(this,e,t,i,r,c)}function X1(n,e,t,i,r,c,s){return new GN(n.e,e,t,i,r,c,s)}function Lge(n,e,t){return t>=0&&An(n.substr(t,e.length),e)}function nOn(n,e){return O(e,149)&&An(n.b,u(e,149).Pg())}function Nge(n,e){return n.a?e.Gh().Kc():u(e.Gh(),71).Ii()}function eOn(n,e){var t;return t=n.b.Qc(e),WDn(t,n.b.gc()),t}function X7(n,e){if(n==null)throw M(new sp(e));return n}function Hr(n){return n.u||(Zu(n),n.u=new NAn(n,n)),n.u}function PN(n){this.a=(Dn(),O(n,59)?new jD(n):new BC(n))}function au(n){var e;return e=u(Un(n,16),29),e||n.ii()}function IM(n,e){var t;return t=za(n.Rm),e==null?t:t+": "+e}function qo(n,e,t){return Fi(e,t,n.length),n.substr(e,t-e)}function tOn(n,e){qC.call(this),lQ(this),this.a=n,this.c=e}function $ge(n){n&&IM(n,n.ie())}function xge(n){HE(),y.setTimeout(function(){throw n},0)}function Fge(){return YT(),S(T(Bun,1),G,436,0,[o_,Fun])}function Bge(){return cT(),S(T(Kun,1),G,435,0,[Run,s_])}function Rge(){return uT(),S(T(bon,1),G,432,0,[v_,vP])}function Kge(){return V4(),S(T(KZn,1),G,517,0,[dj,L_])}function _ge(){return KM(),S(T(Qsn,1),G,429,0,[fH,Jsn])}function Hge(){return pk(),S(T($sn,1),G,428,0,[WP,Nsn])}function qge(){return QM(),S(T(Asn,1),G,431,0,[Tsn,V_])}function Uge(){return wk(),S(T(qhn,1),G,430,0,[UH,GH])}function Gge(){return n5(),S(T(Oie,1),G,531,0,[r9,i9])}function zge(){return yT(),S(T(Rln,1),G,501,0,[RI,D2])}function Xge(){return sh(),S(T(Bie,1),G,523,0,[mb,y1])}function Vge(){return Sf(),S(T(Kie,1),G,522,0,[Rd,zf])}function Wge(){return lf(),S(T(ere,1),G,528,0,[zw,ja])}function Jge(){return hk(),S(T(Bsn,1),G,488,0,[Fsn,QP])}function Qge(){return GM(),S(T(S1n,1),G,491,0,[$q,A1n])}function Yge(){return N$(),S(T(N1n,1),G,492,0,[D1n,L1n])}function Zge(){return FM(),S(T(Bln,1),G,433,0,[dq,Fln])}function n2e(){return ZM(),S(T(_ln,1),G,434,0,[Kln,vq])}function e2e(){return M0(),S(T(sre,1),G,465,0,[Ea,P2])}function t2e(){return ck(),S(T(x1n,1),G,438,0,[Kq,JI])}function i2e(){return Ak(),S(T(ran,1),G,437,0,[YI,ian])}function r2e(){return RL(),S(T(dO,1),G,347,0,[vdn,kdn])}function OM(n,e,t,i){return t>=0?n.Uh(e,t,i):n.Ch(null,t,i)}function V7(n){return n.b.b==0?n.a.sf():UL(n.b)}function c2e(n){if(n.p!=5)throw M(new Cu);return Ae(n.f)}function u2e(n){if(n.p!=5)throw M(new Cu);return Ae(n.k)}function eJ(n){return x(n.a)===x((D$(),CU))&&rOe(n),n.a}function o2e(n,e){n.b=e,n.c>0&&n.b>0&&(n.g=cM(n.c,n.b,n.a))}function s2e(n,e){n.c=e,n.c>0&&n.b>0&&(n.g=cM(n.c,n.b,n.a))}function iOn(n,e){ufe(this,new V(n.a,n.b)),ofe(this,F7(e))}function C0(){Wfe.call(this,new ap(Qb(12))),KX(!0),this.a=2}function IN(n,e,t){nt(),Wd.call(this,n),this.b=e,this.a=t}function tJ(n,e,t){Ko(),LE.call(this,e),this.a=n,this.b=t}function rOn(n){var e;e=n.c.d.b,n.b=e,n.a=n.c.d,e.a=n.c.d.b=n}function f2e(n){return n.b==0?null:(oe(n.b!=0),Xo(n,n.a.a))}function Nc(n,e){return e==null?Kr(wr(n.f,null)):d6(n.i,e)}function cOn(n,e,t,i,r){return new rF(n,(B4(),i_),e,t,i,r)}function DM(n,e){return zDn(e),Lme(n,K(ye,Ke,28,e,15,1),e)}function LM(n,e){return TM(n,"set1"),TM(e,"set2"),new VEn(n,e)}function h2e(n,e){var t=XK[n.charCodeAt(0)];return t??n}function uOn(n,e){var t,i;return t=e,i=new DO,LGn(n,t,i),i.d}function ON(n,e,t,i){var r;r=new FAn,e.a[t.g]=r,Pp(n.b,i,r)}function l2e(n,e){var t;return t=Ime(n.f,e),tt(HC(t),n.f.d)}function W7(n){var e;_me(n.a),dTn(n.a),e=new IE(n.a),HY(e)}function a2e(n,e){_qn(n,!0),nu(n.e.Rf(),new NV(n,!0,e))}function d2e(n,e){return Lp(),n==At(Kh(e))||n==At(ia(e))}function b2e(n,e){return kl(),u(v(e,(lc(),Sh)),17).a==n}function wi(n){return Math.max(Math.min(n,et),-2147483648)|0}function oOn(n){this.a=u(Se(n),277),this.b=(Dn(),new XX(n))}function sOn(n,e,t){this.i=new Z,this.b=n,this.g=e,this.a=t}function iJ(n,e,t){this.a=new Z,this.e=n,this.f=e,this.c=t}function NM(n,e,t){this.c=new Z,this.e=n,this.f=e,this.b=t}function fOn(n){qC.call(this),lQ(this),this.a=n,this.c=!0}function w2e(n){function e(){}return e.prototype=n||{},new e}function g2e(n){if(n.Ae())return null;var e=n.n;return rP[e]}function J7(n){return n.Db>>16!=3?null:u(n.Cb,27)}function Af(n){return n.Db>>16!=9?null:u(n.Cb,27)}function hOn(n){return n.Db>>16!=6?null:u(n.Cb,74)}function M0(){M0=F,Ea=new cX(s3,0),P2=new cX(f3,1)}function sh(){sh=F,mb=new tX(f3,0),y1=new tX(s3,1)}function Sf(){Sf=F,Rd=new iX(_B,0),zf=new iX("UP",1)}function lOn(){lOn=F,oQn=Ce((RE(),S(T(uQn,1),G,549,0,[GK])))}function aOn(n){var e;return e=new zE(Qb(n.length)),eY(e,n),e}function dOn(n,e){return n.b+=e.b,n.c+=e.c,n.d+=e.d,n.a+=e.a,n}function p2e(n,e){return Zxn(n,e)?(W$n(n),!0):!1}function dl(n,e){if(e==null)throw M(new ip);return F8e(n,e)}function Q7(n,e){var t;t=n.q.getHours(),n.q.setDate(e),G5(n,t)}function rJ(n,e,t){var i;i=n.Ih(e),i>=0?n.bi(i,t):ten(n,e,t)}function bOn(n,e){var t;return t=n.Ih(e),t>=0?n.Wh(t):hF(n,e)}function wOn(n,e){var t;for(Se(e),t=n.a;t;t=t.c)e.Yd(t.g,t.i)}function DN(n,e,t){var i;i=vFn(n,e,t),n.b=new ET(i.c.length)}function Ag(n,e,t){$M(),n&&Xe(yU,n,e),n&&Xe(hE,n,t)}function m2e(n,e){return VC(),_n(),u(e.a,17).a0}function cJ(n){var e;return e=n.d,e=n.bj(n.f),ve(n,e),e.Ob()}function gOn(n,e){var t;return t=new fW(e),_Kn(t,n),new _u(t)}function y2e(n){if(n.p!=0)throw M(new Cu);return M6(n.f,0)}function j2e(n){if(n.p!=0)throw M(new Cu);return M6(n.k,0)}function pOn(n){return n.Db>>16!=7?null:u(n.Cb,241)}function D4(n){return n.Db>>16!=6?null:u(n.Cb,241)}function mOn(n){return n.Db>>16!=7?null:u(n.Cb,167)}function At(n){return n.Db>>16!=11?null:u(n.Cb,27)}function Gb(n){return n.Db>>16!=17?null:u(n.Cb,29)}function vOn(n){return n.Db>>16!=3?null:u(n.Cb,155)}function uJ(n){var e;return ea(n),e=new ni,ut(n,new M9n(e))}function kOn(n,e){var t=n.a=n.a||[];return t[e]||(t[e]=n.ve(e))}function E2e(n,e){var t;t=n.q.getHours(),n.q.setMonth(e),G5(n,t)}function yOn(n,e){xC(this),this.f=e,this.g=n,MM(this),this.je()}function jOn(n,e){this.a=n,this.c=Ki(this.a),this.b=new PM(e)}function EOn(n,e,t){this.a=e,this.c=n,this.b=(Se(t),new _u(t))}function COn(n,e,t){this.a=e,this.c=n,this.b=(Se(t),new _u(t))}function MOn(n){this.a=n,this.b=K(Sie,J,2043,n.e.length,0,2)}function TOn(){this.a=new ih,this.e=new ni,this.g=0,this.i=0}function $M(){$M=F,yU=new de,hE=new de,ple(MQn,new wvn)}function AOn(){AOn=F,aie=Pu(new ii,(Vi(),zr),(tr(),bj))}function oJ(){oJ=F,die=Pu(new ii,(Vi(),zr),(tr(),bj))}function SOn(){SOn=F,wie=Pu(new ii,(Vi(),zr),(tr(),bj))}function POn(){POn=F,Lie=Re(new ii,(Vi(),zr),(tr(),x8))}function ko(){ko=F,xie=Re(new ii,(Vi(),zr),(tr(),x8))}function IOn(){IOn=F,Fie=Re(new ii,(Vi(),zr),(tr(),x8))}function NN(){NN=F,Hie=Re(new ii,(Vi(),zr),(tr(),x8))}function J6(n,e,t,i,r,c){return new ml(n.e,e,n.Lj(),t,i,r,c)}function Dr(n,e,t){return e==null?Vc(n.f,null,t):$0(n.i,e,t)}function Zi(n,e){n.c&&du(n.c.g,n),n.c=e,n.c&&nn(n.c.g,n)}function $i(n,e){n.c&&du(n.c.a,n),n.c=e,n.c&&nn(n.c.a,n)}function ic(n,e){n.i&&du(n.i.j,n),n.i=e,n.i&&nn(n.i.j,n)}function Ii(n,e){n.d&&du(n.d.e,n),n.d=e,n.d&&nn(n.d.e,n)}function $N(n,e){n.a&&du(n.a.k,n),n.a=e,n.a&&nn(n.a.k,n)}function xN(n,e){n.b&&du(n.b.f,n),n.b=e,n.b&&nn(n.b.f,n)}function OOn(n,e){$we(n,n.b,n.c),u(n.b.b,68),e&&u(e.b,68).b}function C2e(n,e){return bt(u(n.c,65).c.e.b,u(e.c,65).c.e.b)}function M2e(n,e){return bt(u(n.c,65).c.e.a,u(e.c,65).c.e.a)}function T2e(n){return Y$(),_n(),u(n.a,86).d.e!=0}function xM(n,e){O(n.Cb,184)&&(u(n.Cb,184).tb=null),zc(n,e)}function FN(n,e){O(n.Cb,90)&&hw(Zu(u(n.Cb,90)),4),zc(n,e)}function A2e(n,e){LY(n,e),O(n.Cb,90)&&hw(Zu(u(n.Cb,90)),2)}function S2e(n,e){var t,i;t=e.c,i=t!=null,i&&Ip(n,new qb(e.c))}function DOn(n){var e,t;return t=(o4(),e=new Jd,e),K4(t,n),t}function LOn(n){var e,t;return t=(o4(),e=new Jd,e),K4(t,n),t}function NOn(n){for(var e;;)if(e=n.Pb(),!n.Ob())return e}function P2e(n,e,t){return nn(n.a,(yM(),Nx(e,t),new i0(e,t))),n}function $c(n,e){return dr(),a$(e)?new eM(e,n):new j7(e,n)}function Y7(n){return dh(),Ec(n,0)>=0?ta(n):G6(ta(n1(n)))}function I2e(n){var e;return e=u(ZC(n.b),9),new _o(n.a,e,n.c)}function $On(n,e){var t;return t=u(tw(Dp(n.a),e),16),t?t.gc():0}function xOn(n,e,t){var i;oBn(e,t,n.c.length),i=t-e,Pz(n.c,e,i)}function Jl(n,e,t){oBn(e,t,n.gc()),this.c=n,this.a=e,this.b=t-e}function Np(n){this.c=new Ct,this.b=n.b,this.d=n.c,this.a=n.a}function BN(n){this.a=y.Math.cos(n),this.b=y.Math.sin(n)}function ed(n,e,t,i){this.c=n,this.d=i,$N(this,e),xN(this,t)}function sJ(n,e){Xfe.call(this,new ap(Qb(n))),Co(e,Ozn),this.a=e}function FOn(n,e,t){return new rF(n,(B4(),t_),null,!1,e,t)}function BOn(n,e,t){return new rF(n,(B4(),r_),e,t,null,!1)}function O2e(){return Gu(),S(T(xr,1),G,108,0,[xun,Yr,Aw])}function D2e(){return bu(),S(T(JQn,1),G,472,0,[vf,pa,zs])}function L2e(){return Uu(),S(T(VQn,1),G,471,0,[Mh,ga,Gs])}function N2e(){return bf(),S(T(Sw,1),G,237,0,[bc,Wc,wc])}function $2e(){return i5(),S(T(Pon,1),G,391,0,[E_,j_,C_])}function x2e(){return D0(),S(T(R_,1),G,372,0,[ub,ma,cb])}function F2e(){return u5(),S(T(Psn,1),G,322,0,[B8,pj,Ssn])}function B2e(){return bT(),S(T(Osn,1),G,351,0,[Isn,VP,W_])}function R2e(){return hd(),S(T(pne,1),G,460,0,[Y_,mv,p2])}function K2e(){return Z4(),S(T(sH,1),G,299,0,[uH,oH,mj])}function _2e(){return vl(),S(T(Mne,1),G,311,0,[vj,v2,E3])}function H2e(){return g5(),S(T(Lhn,1),G,390,0,[FH,Dhn,MI])}function q2e(){return gr(),S(T(cie,1),G,463,0,[n9,Vu,Jc])}function U2e(){return ST(),S(T(zhn,1),G,387,0,[Uhn,zH,Ghn])}function G2e(){return d5(),S(T(Xhn,1),G,349,0,[VH,XH,Ij])}function z2e(){return om(),S(T(Whn,1),G,350,0,[WH,Vhn,e9])}function X2e(){return dT(),S(T(Yhn,1),G,352,0,[Qhn,JH,Jhn])}function V2e(){return DT(),S(T(Zhn,1),G,388,0,[QH,Ov,Gw])}function W2e(){return O0(),S(T(Tie,1),G,464,0,[Oj,t9,PI])}function Pf(n){return cc(S(T(Ei,1),J,8,0,[n.i.n,n.n,n.a]))}function J2e(){return b5(),S(T(gln,1),G,392,0,[wln,nq,Lj])}function ROn(){ROn=F,Fre=Pu(new ii,(Qp(),u9),(q5(),uln))}function FM(){FM=F,dq=new uX("DFS",0),Fln=new uX("BFS",1)}function KOn(n,e,t){var i;i=new E3n,i.b=e,i.a=t,++e.b,nn(n.d,i)}function Q2e(n,e,t){var i;i=new rr(t.d),tt(i,n),DY(e,i.a,i.b)}function Y2e(n,e){LTn(n,Ae(vi(w0(e,24),YA)),Ae(vi(e,YA)))}function zb(n,e){if(n<0||n>e)throw M(new Ir(Ptn+n+Itn+e))}function Ln(n,e){if(n<0||n>=e)throw M(new Ir(Ptn+n+Itn+e))}function zn(n,e){if(n<0||n>=e)throw M(new gz(Ptn+n+Itn+e))}function In(n,e){this.b=(Jn(n),n),this.a=e&vw?e:e|64|wh}function fJ(n){var e;return ea(n),e=(j0(),j0(),ZK),fT(n,e)}function Z2e(n,e,t){var i;return i=V5(n,e,!1),i.b<=e&&i.a<=t}function npe(){return nT(),S(T(O1n,1),G,439,0,[xq,I1n,P1n])}function epe(){return _T(),S(T(a1n,1),G,394,0,[l1n,Oq,h1n])}function tpe(){return XT(),S(T(f1n,1),G,445,0,[Bj,qI,Mq])}function ipe(){return rA(),S(T(bce,1),G,456,0,[Tq,Sq,Aq])}function rpe(){return Ok(),S(T(Uln,1),G,393,0,[KI,Hln,qln])}function cpe(){return AT(),S(T(s1n,1),G,300,0,[Cq,o1n,u1n])}function upe(){return jl(),S(T(ldn,1),G,346,0,[uO,M1,M9])}function ope(){return Fk(),S(T(Fq,1),G,444,0,[XI,VI,WI])}function spe(){return Nf(),S(T(Zan,1),G,278,0,[Bv,Jw,Rv])}function fpe(){return Gp(),S(T(mdn,1),G,280,0,[pdn,Yw,aO])}function T0(n){return Se(n),O(n,16)?new _u(u(n,16)):y4(n.Kc())}function hJ(n,e){return n&&n.equals?n.equals(e):x(n)===x(e)}function vi(n,e){return Q1(ewe(Vr(n)?ds(n):n,Vr(e)?ds(e):e))}function hf(n,e){return Q1(twe(Vr(n)?ds(n):n,Vr(e)?ds(e):e))}function RN(n,e){return Q1(iwe(Vr(n)?ds(n):n,Vr(e)?ds(e):e))}function hpe(n,e){var t;return t=(Jn(n),n).g,rV(!!t),Jn(e),t(e)}function _On(n,e){var t,i;return i=C4(n,e),t=n.a.fd(i),new zEn(n,t)}function lpe(n){return n.Db>>16!=6?null:u(dF(n),241)}function ape(n){if(n.p!=2)throw M(new Cu);return Ae(n.f)&ui}function dpe(n){if(n.p!=2)throw M(new Cu);return Ae(n.k)&ui}function E(n){return oe(n.ai?1:0}function GOn(n,e){var t,i;return t=s$(e),i=t,u(ee(n.c,i),17).a}function KN(n,e,t){var i;i=n.d[e.p],n.d[e.p]=n.d[t.p],n.d[t.p]=i}function Cpe(n,e,t){var i;n.n&&e&&t&&(i=new uvn,nn(n.e,i))}function _N(n,e){if(fi(n.a,e),e.d)throw M(new ec(nXn));e.d=n}function dJ(n,e){this.a=new Z,this.d=new Z,this.f=n,this.c=e}function zOn(){this.c=new PTn,this.a=new $Ln,this.b=new Xyn,lCn()}function XOn(){qp(),this.b=new de,this.a=new de,this.c=new Z}function VOn(n,e,t){this.d=n,this.j=e,this.e=t,this.o=-1,this.p=3}function WOn(n,e,t){this.d=n,this.k=e,this.f=t,this.o=-1,this.p=5}function JOn(n,e,t,i,r,c){dQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function QOn(n,e,t,i,r,c){bQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function YOn(n,e,t,i,r,c){OJ.call(this,n,e,t,i,r),c&&(this.o=-2)}function ZOn(n,e,t,i,r,c){pQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function nDn(n,e,t,i,r,c){DJ.call(this,n,e,t,i,r),c&&(this.o=-2)}function eDn(n,e,t,i,r,c){wQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function tDn(n,e,t,i,r,c){gQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function iDn(n,e,t,i,r,c){LJ.call(this,n,e,t,i,r),c&&(this.o=-2)}function rDn(n,e,t,i){LE.call(this,t),this.b=n,this.c=e,this.d=i}function cDn(n,e){this.f=n,this.a=($4(),MO),this.c=MO,this.b=e}function uDn(n,e){this.g=n,this.d=($4(),TO),this.a=TO,this.b=e}function bJ(n,e){!n.c&&(n.c=new Rt(n,0)),HA(n.c,(at(),F9),e)}function Mpe(n,e){return oMe(n,e,O(e,102)&&(u(e,19).Bb&hr)!=0)}function Tpe(n,e){return KPn(vc(n.q.getTime()),vc(e.q.getTime()))}function oDn(n){return XL(n.e.Rd().gc()*n.c.Rd().gc(),16,new O8n(n))}function Ape(n){return!!n.u&&Sc(n.u.a).i!=0&&!(n.n&&Ix(n.n))}function Spe(n){return!!n.a&&no(n.a.a).i!=0&&!(n.b&&Ox(n.b))}function wJ(n,e){return e==0?!!n.o&&n.o.f!=0:Cx(n,e)}function Ppe(n,e,t){var i;return i=u(n.Zb().xc(e),16),!!i&&i.Hc(t)}function sDn(n,e,t){var i;return i=u(n.Zb().xc(e),16),!!i&&i.Mc(t)}function fDn(n,e){var t;return t=1-e,n.a[t]=jT(n.a[t],t),jT(n,e)}function hDn(n,e){var t,i;return i=vi(n,mr),t=Fs(e,32),hf(t,i)}function lDn(n,e,t){var i;i=(Se(n),new _u(n)),O7e(new EOn(i,e,t))}function Z7(n,e,t){var i;i=(Se(n),new _u(n)),D7e(new COn(i,e,t))}function fc(n,e,t,i,r,c){return Hxn(n,e,t,c),CY(n,i),MY(n,r),n}function aDn(n,e,t,i){return n.a+=""+qo(e==null?gu:Jr(e),t,i),n}function xi(n,e){this.a=n,Xv.call(this,n),zb(e,n.gc()),this.b=e}function dDn(n){this.a=K(ki,Fn,1,QQ(y.Math.max(8,n))<<1,5,1)}function nk(n){return u(xf(n,K(Qh,b1,10,n.c.length,0,1)),199)}function fh(n){return u(xf(n,K(O_,rR,18,n.c.length,0,1)),483)}function bDn(n){return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function Q6(n){for(;n.d>0&&n.a[--n.d]==0;);n.a[n.d++]==0&&(n.e=0)}function wDn(n){return oe(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function Ipe(n,e,t){n.a=e,n.c=t,n.b.a.$b(),vo(n.d),Pb(n.e.a.c,0)}function gDn(n,e){var t;n.e=new uz,t=aw(e),Yt(t,n.c),Iqn(n,t,0)}function ri(n,e,t,i){var r;r=new nG,r.a=e,r.b=t,r.c=i,xe(n.a,r)}function Q(n,e,t,i){var r;r=new nG,r.a=e,r.b=t,r.c=i,xe(n.b,r)}function pDn(n,e,t){if(n<0||et)throw M(new Ir(qje(n,e,t)))}function ek(n,e){if(n<0||n>=e)throw M(new Ir(kEe(n,e)));return n}function Ope(n){if(!("stack"in n))try{throw n}catch{}return n}function Sg(n){return s6(),O(n.g,10)?u(n.g,10):null}function Dpe(n){return Tg(n).dc()?!1:(e1e(n,new Pr),!0)}function id(n){var e;return Vr(n)?(e=n,e==-0?0:e):X4e(n)}function mDn(n,e){return O(e,44)?xx(n.a,u(e,44)):!1}function vDn(n,e){return O(e,44)?xx(n.a,u(e,44)):!1}function kDn(n,e){return O(e,44)?xx(n.a,u(e,44)):!1}function gJ(n){var e;return z1(n),e=new L0n,hg(n.a,new j9n(e)),e}function pJ(){var n,e,t;return e=(t=(n=new Jd,n),t),nn(n0n,e),e}function BM(n){var e;return z1(n),e=new N0n,hg(n.a,new E9n(e)),e}function Lpe(n,e){return n.a<=n.b?(e.Dd(n.a++),!0):!1}function yDn(n){P$.call(this,n,(B4(),e_),null,!1,null,!1)}function jDn(){jDn=F,SYn=Ce((YE(),S(T(oon,1),G,489,0,[b_])))}function EDn(){EDn=F,eln=wIn(Y(1),Y(4)),nln=wIn(Y(1),Y(2))}function Npe(n,e){return new _L(e,N6(Ki(e.e),n,n),(_n(),!0))}function RM(n){return new Gc((Co(n,cB),oT(nr(nr(5,n),n/10|0))))}function $pe(n){return XL(n.e.Rd().gc()*n.c.Rd().gc(),273,new I8n(n))}function CDn(n){return u(xf(n,K(FZn,DXn,12,n.c.length,0,1)),2042)}function xpe(n){return ko(),!fr(n)&&!(!fr(n)&&n.c.i.c==n.d.i.c)}function Fpe(n,e){return _p(),u(v(e,(lc(),I2)),17).a>=n.gc()}function Y6(n,e){vLe(e,n),JV(n.d),JV(u(v(n,(cn(),mI)),214))}function HN(n,e){kLe(e,n),QV(n.d),QV(u(v(n,(cn(),mI)),214))}function Bpe(n,e,t){n.d&&du(n.d.e,n),n.d=e,n.d&&b0(n.d.e,t,n)}function Rpe(n,e,t){return t.f.c.length>0?MW(n.a,e,t):MW(n.b,e,t)}function Kpe(n,e,t){var i;i=i9e();try{return Aae(n,e,t)}finally{D3e(i)}}function A0(n,e){var t,i;return t=dl(n,e),i=null,t&&(i=t.pe()),i}function Z6(n,e){var t,i;return t=dl(n,e),i=null,t&&(i=t.se()),i}function L4(n,e){var t,i;return t=Jb(n,e),i=null,t&&(i=t.se()),i}function bl(n,e){var t,i;return t=dl(n,e),i=null,t&&(i=gnn(t)),i}function _pe(n,e,t){var i;return i=wm(t),FA(n.g,i,e),FA(n.i,e,t),e}function mJ(n,e,t){this.d=new $7n(this),this.e=n,this.i=e,this.f=t}function MDn(n,e,t,i){this.e=null,this.c=n,this.d=e,this.a=t,this.b=i}function TDn(n,e,t,i){ETn(this),this.c=n,this.e=e,this.f=t,this.b=i}function vJ(n,e,t,i){this.d=n,this.n=e,this.g=t,this.o=i,this.p=-1}function ADn(n,e,t,i){return O(t,59)?new iAn(n,e,t,i):new vW(n,e,t,i)}function N4(n){return O(n,16)?u(n,16).dc():!n.Kc().Ob()}function SDn(n){if(n.e.g!=n.b)throw M(new Bo);return!!n.c&&n.d>0}function be(n){return oe(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function kJ(n,e){Jn(e),$t(n.a,n.c,e),n.c=n.c+1&n.a.length-1,JRn(n)}function V1(n,e){Jn(e),n.b=n.b-1&n.a.length-1,$t(n.a,n.b,e),JRn(n)}function PDn(n){var e;e=n.Gh(),this.a=O(e,71)?u(e,71).Ii():e.Kc()}function Hpe(n){return new In(Ame(u(n.a.md(),16).gc(),n.a.ld()),16)}function IDn(){IDn=F,Gce=Ce((eC(),S(T($1n,1),G,490,0,[Bq])))}function ODn(){ODn=F,Xce=Ce((tC(),S(T(zce,1),G,558,0,[Rq])))}function DDn(){DDn=F,lue=Ce((f6(),S(T(tan,1),G,539,0,[Hj])))}function qpe(){return dd(),S(T(Lon,1),G,389,0,[Ow,Don,P_,I_])}function Upe(){return B4(),S(T(lP,1),G,304,0,[e_,t_,i_,r_])}function Gpe(){return Vp(),S(T(EYn,1),G,332,0,[uj,cj,oj,sj])}function zpe(){return A5(),S(T(TYn,1),G,406,0,[fj,wP,gP,hj])}function Xpe(){return N0(),S(T(yYn,1),G,417,0,[rj,ij,a_,d_])}function Vpe(){return nm(),S(T(MZn,1),G,416,0,[rb,Iw,Pw,a2])}function Wpe(){return $f(),S(T(ene,1),G,421,0,[j3,lv,av,B_])}function Jpe(){return OT(),S(T(UZn,1),G,371,0,[F_,HP,qP,wj])}function Qpe(){return cw(),S(T(RH,1),G,203,0,[TI,BH,S2,A2])}function Ype(){return lh(),S(T(Hhn,1),G,284,0,[k1,_hn,HH,qH])}function Zpe(n){var e;return n.j==(tn(),ae)&&(e=mHn(n),Au(e,Zn))}function n3e(n,e){var t;t=e.a,Zi(t,e.c.d),Ii(t,e.d.d),nw(t.a,n.n)}function yJ(n,e){var t;return t=u(Lf(n.b,e),67),!t&&(t=new Ct),t}function xp(n){return s6(),O(n.g,154)?u(n.g,154):null}function e3e(n){n.a=null,n.e=null,Pb(n.b.c,0),Pb(n.f.c,0),n.c=null}function KM(){KM=F,fH=new Zz(qm,0),Jsn=new Zz("TOP_LEFT",1)}function n5(){n5=F,r9=new eX("UPPER",0),i9=new eX("LOWER",1)}function t3e(n,e){return vp(new V(e.e.a+e.f.a/2,e.e.b+e.f.b/2),n)}function LDn(n,e){return u(ho(_b(u(ot(n.k,e),15).Oc(),b2)),113)}function NDn(n,e){return u(ho(Ap(u(ot(n.k,e),15).Oc(),b2)),113)}function i3e(){return Qp(),S(T(rln,1),G,405,0,[LI,c9,u9,o9])}function r3e(){return w5(),S(T(xln,1),G,353,0,[aq,BI,lq,hq])}function c3e(){return sA(),S(T(c1n,1),G,354,0,[Eq,i1n,r1n,t1n])}function u3e(){return go(),S(T(I9,1),G,386,0,[rE,Gd,iE,Qw])}function o3e(){return To(),S(T(Yue,1),G,291,0,[nE,nl,Ta,Zj])}function s3e(){return El(),S(T(aU,1),G,223,0,[lU,Yj,Kv,F3])}function f3e(){return qT(),S(T(Cdn,1),G,320,0,[wU,ydn,Edn,jdn])}function h3e(){return LT(),S(T(woe,1),G,415,0,[gU,Tdn,Mdn,Adn])}function l3e(n){return $M(),Zc(yU,n)?u(ee(yU,n),341).Qg():null}function Uo(n,e,t){return e<0?hF(n,t):u(t,69).wk().Bk(n,n.hi(),e)}function a3e(n,e,t){var i;return i=wm(t),FA(n.j,i,e),Xe(n.k,e,t),e}function d3e(n,e,t){var i;return i=wm(t),FA(n.d,i,e),Xe(n.e,e,t),e}function $Dn(n){var e,t;return e=(B1(),t=new HO,t),n&&AA(e,n),e}function jJ(n){var e;return e=n.aj(n.i),n.i>0&&Ic(n.g,0,e,0,n.i),e}function xDn(n,e){var t;for(t=n.j.c.length;t>24}function w3e(n){if(n.p!=1)throw M(new Cu);return Ae(n.k)<<24>>24}function g3e(n){if(n.p!=7)throw M(new Cu);return Ae(n.k)<<16>>16}function p3e(n){if(n.p!=7)throw M(new Cu);return Ae(n.f)<<16>>16}function Pg(n,e){return e.e==0||n.e==0?O8:(Am(),vF(n,e))}function RDn(n,e){return x(e)===x(n)?"(this Map)":e==null?gu:Jr(e)}function m3e(n,e,t){return tN(R(Kr(wr(n.f,e))),R(Kr(wr(n.f,t))))}function v3e(n,e,t){var i;i=u(ee(n.g,t),60),nn(n.a.c,new bi(e,i))}function KDn(n,e,t){n.i=0,n.e=0,e!=t&&(jFn(n,e,t),yFn(n,e,t))}function k3e(n,e,t,i,r){var c;c=yMe(r,t,i),nn(e,dEe(r,c)),rje(n,r,e)}function EJ(n,e,t,i,r){this.i=n,this.a=e,this.e=t,this.j=i,this.f=r}function _Dn(n,e){nJ.call(this),this.a=n,this.b=e,nn(this.a.b,this)}function HDn(n){this.b=new de,this.c=new de,this.d=new de,this.a=n}function qDn(n,e){var t;return t=new lp,n.Gd(t),t.a+="..",e.Hd(t),t.a}function UDn(n,e){var t;for(t=e;t;)a0(n,t.i,t.j),t=At(t);return n}function GDn(n,e,t){var i;return i=wm(t),Xe(n.b,i,e),Xe(n.c,e,t),e}function wl(n){var e;for(e=0;n.Ob();)n.Pb(),e=nr(e,1);return oT(e)}function Fh(n,e){dr();var t;return t=u(n,69).vk(),kje(t,e),t.xl(e)}function y3e(n,e,t){if(t){var i=t.oe();n.a[e]=i(t)}else delete n.a[e]}function CJ(n,e){var t;t=n.q.getHours(),n.q.setFullYear(e+fa),G5(n,t)}function j3e(n,e){return u(e==null?Kr(wr(n.f,null)):d6(n.i,e),288)}function MJ(n,e){return n==(Vn(),zt)&&e==zt?4:n==zt||e==zt?8:32}function _M(n,e,t){return RA(n,e,t,O(e,102)&&(u(e,19).Bb&hr)!=0)}function E3e(n,e,t){return Om(n,e,t,O(e,102)&&(u(e,19).Bb&hr)!=0)}function C3e(n,e,t){return bMe(n,e,t,O(e,102)&&(u(e,19).Bb&hr)!=0)}function TJ(n){n.b!=n.c&&(n.a=K(ki,Fn,1,8,5,1),n.b=0,n.c=0)}function e5(n){return oe(n.a=0&&n.a[t]===e[t];t--);return t<0}function HM(n){var e;return n?new fW(n):(e=new ih,A$(e,n),e)}function O3e(n,e){var t,i;i=!1;do t=lFn(n,e),i=i|t;while(t);return i}function D3e(n){n&&rme((az(),sun)),--cP,n&&uP!=-1&&(Ele(uP),uP=-1)}function qM(n){nnn(),LTn(this,Ae(vi(w0(n,24),YA)),Ae(vi(n,YA)))}function JDn(){JDn=F,HQn=Ce((YT(),S(T(Bun,1),G,436,0,[o_,Fun])))}function QDn(){QDn=F,qQn=Ce((cT(),S(T(Kun,1),G,435,0,[Run,s_])))}function YDn(){YDn=F,GYn=Ce((uT(),S(T(bon,1),G,432,0,[v_,vP])))}function ZDn(){ZDn=F,_Zn=Ce((V4(),S(T(KZn,1),G,517,0,[dj,L_])))}function nLn(){nLn=F,Ane=Ce((KM(),S(T(Qsn,1),G,429,0,[fH,Jsn])))}function eLn(){eLn=F,gne=Ce((pk(),S(T($sn,1),G,428,0,[WP,Nsn])))}function tLn(){tLn=F,kne=Ce((hk(),S(T(Bsn,1),G,488,0,[Fsn,QP])))}function iLn(){iLn=F,rie=Ce((wk(),S(T(qhn,1),G,430,0,[UH,GH])))}function rLn(){rLn=F,Die=Ce((n5(),S(T(Oie,1),G,531,0,[r9,i9])))}function cLn(){cLn=F,ane=Ce((QM(),S(T(Asn,1),G,431,0,[Tsn,V_])))}function uLn(){uLn=F,xre=Ce((FM(),S(T(Bln,1),G,433,0,[dq,Fln])))}function oLn(){oLn=F,_re=Ce((yT(),S(T(Rln,1),G,501,0,[RI,D2])))}function sLn(){sLn=F,Rie=Ce((sh(),S(T(Bie,1),G,523,0,[mb,y1])))}function fLn(){fLn=F,_ie=Ce((Sf(),S(T(Kie,1),G,522,0,[Rd,zf])))}function hLn(){hLn=F,tre=Ce((lf(),S(T(ere,1),G,528,0,[zw,ja])))}function lLn(){lLn=F,fre=Ce((M0(),S(T(sre,1),G,465,0,[Ea,P2])))}function aLn(){aLn=F,Ure=Ce((ZM(),S(T(_ln,1),G,434,0,[Kln,vq])))}function dLn(){dLn=F,Rce=Ce((GM(),S(T(S1n,1),G,491,0,[$q,A1n])))}function bLn(){bLn=F,_ce=Ce((N$(),S(T(N1n,1),G,492,0,[D1n,L1n])))}function wLn(){wLn=F,Vce=Ce((ck(),S(T(x1n,1),G,438,0,[Kq,JI])))}function gLn(){gLn=F,aue=Ce((Ak(),S(T(ran,1),G,437,0,[YI,ian])))}function pLn(){pLn=F,aoe=Ce((RL(),S(T(dO,1),G,347,0,[vdn,kdn])))}function L3e(){return ci(),S(T(E9,1),G,88,0,[Wf,Xr,Br,Vf,us])}function N3e(){return tn(),S(T(lr,1),Mc,64,0,[sc,Xn,Zn,ae,Wn])}function $3e(n,e,t){return u(e==null?Vc(n.f,null,t):$0(n.i,e,t),288)}function x3e(n){return(n.k==(Vn(),zt)||n.k==Zt)&&kt(n,(W(),H8))}function XN(n){return n.c&&n.d?aJ(n.c)+"->"+aJ(n.d):"e_"+l0(n)}function qi(n,e){var t,i;for(Jn(e),i=n.Kc();i.Ob();)t=i.Pb(),e.Cd(t)}function F3e(n,e){var t;t=new op,nd(t,"x",e.a),nd(t,"y",e.b),Ip(n,t)}function B3e(n,e){var t;t=new op,nd(t,"x",e.a),nd(t,"y",e.b),Ip(n,t)}function mLn(n,e){var t;for(t=e;t;)a0(n,-t.i,-t.j),t=At(t);return n}function SJ(n,e){var t,i;for(t=e,i=0;t>0;)i+=n.a[t],t-=t&-t;return i}function Go(n,e,t){var i;return i=(Ln(e,n.c.length),n.c[e]),n.c[e]=t,i}function PJ(n,e,t){n.a.c.length=0,fOe(n,e,t),n.a.c.length==0||xSe(n,e)}function tk(n){n.i=0,s7(n.b,null),s7(n.c,null),n.a=null,n.e=null,++n.g}function UM(){UM=F,qf=!0,DQn=!1,LQn=!1,$Qn=!1,NQn=!1}function VN(n){UM(),!qf&&(this.c=n,this.e=!0,this.a=new Z)}function vLn(n,e){this.c=0,this.b=e,HMn.call(this,n,17493),this.a=this.c}function kLn(n){jzn(),Syn(this),this.a=new Ct,sY(this,n),xe(this.a,n)}function yLn(){pL(this),this.b=new V(St,St),this.a=new V(li,li)}function GM(){GM=F,$q=new fX(cin,0),A1n=new fX("TARGET_WIDTH",1)}function Ig(n,e){return(ea(n),s4(new Tn(n,new tQ(e,n.a)))).Bd(v3)}function R3e(){return Vi(),S(T(Ion,1),G,367,0,[Xs,Jh,Oc,Kc,zr])}function K3e(){return ow(),S(T(ine,1),G,375,0,[gj,zP,XP,GP,UP])}function _3e(){return o1(),S(T(Lsn,1),G,348,0,[J_,Dsn,Q_,pv,gv])}function H3e(){return T5(),S(T($hn,1),G,323,0,[Nhn,KH,_H,Y8,Z8])}function q3e(){return Yo(),S(T(hfn,1),G,171,0,[Ej,U8,ka,G8,xw])}function U3e(){return wA(),S(T(Hre,1),G,368,0,[pq,bq,mq,wq,gq])}function G3e(){return R5(),S(T(Hce,1),G,373,0,[L2,D3,g9,w9,_j])}function z3e(){return Yk(),S(T(K1n,1),G,324,0,[F1n,_q,R1n,Hq,B1n])}function X3e(){return gf(),S(T(Zh,1),G,170,0,[xn,pi,Ph,Kd,E1])}function V3e(){return Fg(),S(T(A9,1),G,256,0,[Aa,eE,adn,T9,ddn])}function W3e(n){return HE(),function(){return Kpe(n,this,arguments)}}function fr(n){return!n.c||!n.d?!1:!!n.c.i&&n.c.i==n.d.i}function IJ(n,e){return O(e,143)?An(n.c,u(e,143).c):!1}function Zu(n){return n.t||(n.t=new myn(n),k5(new Njn(n),0,n.t)),n.t}function jLn(n){this.b=n,ne.call(this,n),this.a=u(Un(this.b.a,4),129)}function ELn(n){this.b=n,yp.call(this,n),this.a=u(Un(this.b.a,4),129)}function Bs(n,e,t,i,r){LLn.call(this,e,i,r),this.c=n,this.b=t}function OJ(n,e,t,i,r){VOn.call(this,e,i,r),this.c=n,this.a=t}function DJ(n,e,t,i,r){WOn.call(this,e,i,r),this.c=n,this.a=t}function LJ(n,e,t,i,r){LLn.call(this,e,i,r),this.c=n,this.a=t}function WN(n,e){var t;return t=u(Lf(n.d,e),23),t||u(Lf(n.e,e),23)}function CLn(n,e){var t,i;return t=e.ld(),i=n.Fe(t),!!i&&mc(i.e,e.md())}function MLn(n,e){var t;return t=e.ld(),new i0(t,n.e.pc(t,u(e.md(),16)))}function J3e(n,e){var t;return t=n.a.get(e),t??K(ki,Fn,1,0,5,1)}function TLn(n){var e;return e=n.length,An(Yn.substr(Yn.length-e,e),n)}function fe(n){if(pe(n))return n.c=n.a,n.a.Pb();throw M(new nc)}function NJ(n,e){return e==0||n.e==0?n:e>0?wqn(n,e):RBn(n,-e)}function Fp(n,e){return e==0||n.e==0?n:e>0?RBn(n,e):wqn(n,-e)}function $J(n){ole.call(this,n==null?gu:Jr(n),O(n,82)?u(n,82):null)}function ALn(n){var e;return n.c||(e=n.r,O(e,90)&&(n.c=u(e,29))),n.c}function JN(n){var e;return e=new E0,Ur(e,n),U(e,(cn(),Fr),null),e}function SLn(n){var e,t;return e=n.c.i,t=n.d.i,e.k==(Vn(),Zt)&&t.k==Zt}function QN(n){var e,t,i;return e=n&ro,t=n>>22&ro,i=n<0?Il:0,Yc(e,t,i)}function Q3e(n){var e,t,i,r;for(t=n,i=0,r=t.length;i=0?n.Lh(i,t,!0):H0(n,e,t)}function Z3e(n,e,t){return bt(vp(pm(n),Ki(e.b)),vp(pm(n),Ki(t.b)))}function n4e(n,e,t){return bt(vp(pm(n),Ki(e.e)),vp(pm(n),Ki(t.e)))}function e4e(n,e){return y.Math.min(W1(e.a,n.d.d.c),W1(e.b,n.d.d.c))}function ik(n,e){n._i(n.i+1),O6(n,n.i,n.Zi(n.i,e)),n.Mi(n.i++,e),n.Ni()}function t5(n){var e,t;++n.j,e=n.g,t=n.i,n.g=null,n.i=0,n.Oi(t,e),n.Ni()}function PLn(n,e,t){var i;i=new NX(n.a),f5(i,n.a.a),Vc(i.f,e,t),n.a.a=i}function xJ(n,e,t,i){var r;for(r=0;re)throw M(new Ir(Mnn(n,e,"index")));return n}function Yl(n,e){var t;return t=(Ln(e,n.c.length),n.c[e]),Pz(n.c,e,1),t}function RJ(n,e){var t,i;return t=(Jn(n),n),i=(Jn(e),e),t==i?0:te.p?-1:0}function FLn(n){var e;return n.a||(e=n.r,O(e,156)&&(n.a=u(e,156))),n.a}function o4e(n,e,t){var i;return++n.e,--n.f,i=u(n.d[e].gd(t),136),i.md()}function s4e(n){var e,t;return e=n.ld(),t=u(n.md(),16),x7(t.Nc(),new L8n(e))}function BLn(n,e){return Zc(n.a,e)?(Bp(n.a,e),!0):!1}function Rp(n,e,t){return ek(e,n.e.Rd().gc()),ek(t,n.c.Rd().gc()),n.a[e][t]}function XM(n,e,t){this.a=n,this.b=e,this.c=t,nn(n.t,this),nn(e.i,this)}function VM(n,e,t,i){this.f=n,this.e=e,this.d=t,this.b=i,this.c=i?i.d:null}function rk(){this.b=new Ct,this.a=new Ct,this.b=new Ct,this.a=new Ct}function $4(){$4=F;var n,e;MO=(o4(),e=new xE,e),TO=(n=new fD,n)}function f4e(n){var e;return ea(n),e=new ISn(n,n.a.e,n.a.d|4),new uV(n,e)}function RLn(n){var e;for(z1(n),e=0;n.a.Bd(new W0n);)e=nr(e,1);return e}function WM(n,e){return Jn(e),n.c=0,"Initial capacity must not be negative")}function JM(){JM=F,p9=new lt("org.eclipse.elk.labels.labelManager")}function KLn(){KLn=F,ysn=new Dt("separateLayerConnections",(OT(),F_))}function lf(){lf=F,zw=new rX("REGULAR",0),ja=new rX("CRITICAL",1)}function ck(){ck=F,Kq=new lX("FIXED",0),JI=new lX("CENTER_NODE",1)}function QM(){QM=F,Tsn=new Jz("QUADRATIC",0),V_=new Jz("SCANLINE",1)}function _Ln(){_Ln=F,dne=Ce((u5(),S(T(Psn,1),G,322,0,[B8,pj,Ssn])))}function HLn(){HLn=F,bne=Ce((bT(),S(T(Osn,1),G,351,0,[Isn,VP,W_])))}function qLn(){qLn=F,fne=Ce((D0(),S(T(R_,1),G,372,0,[ub,ma,cb])))}function ULn(){ULn=F,mne=Ce((hd(),S(T(pne,1),G,460,0,[Y_,mv,p2])))}function GLn(){GLn=F,Cne=Ce((Z4(),S(T(sH,1),G,299,0,[uH,oH,mj])))}function zLn(){zLn=F,Tne=Ce((vl(),S(T(Mne,1),G,311,0,[vj,v2,E3])))}function XLn(){XLn=F,Zte=Ce((g5(),S(T(Lhn,1),G,390,0,[FH,Dhn,MI])))}function VLn(){VLn=F,oie=Ce((ST(),S(T(zhn,1),G,387,0,[Uhn,zH,Ghn])))}function WLn(){WLn=F,sie=Ce((d5(),S(T(Xhn,1),G,349,0,[VH,XH,Ij])))}function JLn(){JLn=F,uie=Ce((gr(),S(T(cie,1),G,463,0,[n9,Vu,Jc])))}function QLn(){QLn=F,fie=Ce((om(),S(T(Whn,1),G,350,0,[WH,Vhn,e9])))}function YLn(){YLn=F,hie=Ce((dT(),S(T(Yhn,1),G,352,0,[Qhn,JH,Jhn])))}function ZLn(){ZLn=F,lie=Ce((DT(),S(T(Zhn,1),G,388,0,[QH,Ov,Gw])))}function nNn(){nNn=F,are=Ce((b5(),S(T(gln,1),G,392,0,[wln,nq,Lj])))}function eNn(){eNn=F,Gre=Ce((Ok(),S(T(Uln,1),G,393,0,[KI,Hln,qln])))}function tNn(){tNn=F,ace=Ce((AT(),S(T(s1n,1),G,300,0,[Cq,o1n,u1n])))}function iNn(){iNn=F,dce=Ce((XT(),S(T(f1n,1),G,445,0,[Bj,qI,Mq])))}function rNn(){rNn=F,wce=Ce((rA(),S(T(bce,1),G,456,0,[Tq,Sq,Aq])))}function cNn(){cNn=F,mce=Ce((_T(),S(T(a1n,1),G,394,0,[l1n,Oq,h1n])))}function uNn(){uNn=F,Kce=Ce((nT(),S(T(O1n,1),G,439,0,[xq,I1n,P1n])))}function oNn(){oNn=F,Aie=Ce((O0(),S(T(Tie,1),G,464,0,[Oj,t9,PI])))}function sNn(){sNn=F,WQn=Ce((Uu(),S(T(VQn,1),G,471,0,[Mh,ga,Gs])))}function fNn(){fNn=F,XQn=Ce((bf(),S(T(Sw,1),G,237,0,[bc,Wc,wc])))}function hNn(){hNn=F,QQn=Ce((bu(),S(T(JQn,1),G,472,0,[vf,pa,zs])))}function lNn(){lNn=F,xQn=Ce((Gu(),S(T(xr,1),G,108,0,[xun,Yr,Aw])))}function aNn(){aNn=F,pZn=Ce((i5(),S(T(Pon,1),G,391,0,[E_,j_,C_])))}function dNn(){dNn=F,Que=Ce((jl(),S(T(ldn,1),G,346,0,[uO,M1,M9])))}function bNn(){bNn=F,Uce=Ce((Fk(),S(T(Fq,1),G,444,0,[XI,VI,WI])))}function wNn(){wNn=F,Xue=Ce((Nf(),S(T(Zan,1),G,278,0,[Bv,Jw,Rv])))}function gNn(){gNn=F,loe=Ce((Gp(),S(T(mdn,1),G,280,0,[pdn,Yw,aO])))}function Df(n,e){return!n.o&&(n.o=new Iu((Cc(),il),T1,n,0)),wx(n.o,e)}function h4e(n,e){var t;n.C&&(t=u(Cr(n.b,e),127).n,t.d=n.C.d,t.a=n.C.a)}function UJ(n){var e,t,i,r;r=n.d,e=n.a,t=n.b,i=n.c,n.d=t,n.a=i,n.b=r,n.c=e}function l4e(n){return!n.g&&(n.g=new CE),!n.g.b&&(n.g.b=new byn(n)),n.g.b}function uk(n){return!n.g&&(n.g=new CE),!n.g.c&&(n.g.c=new pyn(n)),n.g.c}function a4e(n){return!n.g&&(n.g=new CE),!n.g.d&&(n.g.d=new wyn(n)),n.g.d}function d4e(n){return!n.g&&(n.g=new CE),!n.g.a&&(n.g.a=new gyn(n)),n.g.a}function b4e(n,e,t,i){return t&&(i=t.Rh(e,Ot(t.Dh(),n.c.uk()),null,i)),i}function w4e(n,e,t,i){return t&&(i=t.Th(e,Ot(t.Dh(),n.c.uk()),null,i)),i}function e$(n,e,t,i){var r;return r=K(ye,Ke,28,e+1,15,1),vPe(r,n,e,t,i),r}function K(n,e,t,i,r,c){var s;return s=_Rn(r,i),r!=10&&S(T(n,c),e,t,r,s),s}function g4e(n,e,t){var i,r;for(r=new Y4(e,n),i=0;it||e=0?n.Lh(t,!0,!0):H0(n,e,!0)}function L4e(n,e,t){var i;return i=vFn(n,e,t),n.b=new ET(i.c.length),den(n,i)}function N4e(n){if(n.b<=0)throw M(new nc);return--n.b,n.a-=n.c.c,Y(n.a)}function $4e(n){var e;if(!n.a)throw M(new PIn);return e=n.a,n.a=At(n.a),e}function x4e(n){for(;!n.a;)if(!eSn(n.c,new C9n(n)))return!1;return!0}function Kp(n){var e;return Se(n),O(n,204)?(e=u(n,204),e):new _8n(n)}function F4e(n){YM(),u(n.of((qe(),Ww)),181).Fc((zu(),tE)),n.qf(sU,null)}function YM(){YM=F,wue=new Emn,pue=new Cmn,gue=M6e((qe(),sU),wue,Ma,pue)}function ZM(){ZM=F,Kln=new sX("LEAF_NUMBER",0),vq=new sX("NODE_SIZE",1)}function u$(n){n.a=K(ye,Ke,28,n.b+1,15,1),n.c=K(ye,Ke,28,n.b,15,1),n.d=0}function B4e(n,e){n.a.Ne(e.d,n.b)>0&&(nn(n.c,new GV(e.c,e.d,n.d)),n.b=e.d)}function nQ(n,e){if(n.g==null||e>=n.i)throw M(new aL(e,n.i));return n.g[e]}function kNn(n,e,t){if(rm(n,t),t!=null&&!n.fk(t))throw M(new uD);return t}function o$(n,e){return gk(e)!=10&&S(wo(e),e.Sm,e.__elementTypeId$,gk(e),n),n}function F4(n,e,t,i){var r;i=(j0(),i||Pun),r=n.slice(e,t),Tnn(r,n,e,t,-e,i)}function zo(n,e,t,i,r){return e<0?H0(n,t,i):u(t,69).wk().yk(n,n.hi(),e,i,r)}function R4e(n,e){return bt($(R(v(n,(W(),fb)))),$(R(v(e,fb))))}function yNn(){yNn=F,IQn=Ce((B4(),S(T(lP,1),G,304,0,[e_,t_,i_,r_])))}function B4(){B4=F,e_=new uC("All",0),t_=new lTn,i_=new kTn,r_=new hTn}function Uu(){Uu=F,Mh=new FD(s3,0),ga=new FD(qm,1),Gs=new FD(f3,2)}function jNn(){jNn=F,KA(),s0n=St,mse=li,f0n=new V9(St),vse=new V9(li)}function ENn(){ENn=F,jYn=Ce((N0(),S(T(yYn,1),G,417,0,[rj,ij,a_,d_])))}function CNn(){CNn=F,AYn=Ce((A5(),S(T(TYn,1),G,406,0,[fj,wP,gP,hj])))}function MNn(){MNn=F,CYn=Ce((Vp(),S(T(EYn,1),G,332,0,[uj,cj,oj,sj])))}function TNn(){TNn=F,DZn=Ce((dd(),S(T(Lon,1),G,389,0,[Ow,Don,P_,I_])))}function ANn(){ANn=F,TZn=Ce((nm(),S(T(MZn,1),G,416,0,[rb,Iw,Pw,a2])))}function SNn(){SNn=F,tne=Ce(($f(),S(T(ene,1),G,421,0,[j3,lv,av,B_])))}function PNn(){PNn=F,GZn=Ce((OT(),S(T(UZn,1),G,371,0,[F_,HP,qP,wj])))}function INn(){INn=F,nie=Ce((cw(),S(T(RH,1),G,203,0,[TI,BH,S2,A2])))}function ONn(){ONn=F,iie=Ce((lh(),S(T(Hhn,1),G,284,0,[k1,_hn,HH,qH])))}function hk(){hk=F,Fsn=new Yz(kh,0),QP=new Yz("IMPROVE_STRAIGHTNESS",1)}function DNn(n,e){var t,i;return i=e/n.c.Rd().gc()|0,t=e%n.c.Rd().gc(),Rp(n,i,t)}function LNn(n){var e;if(n.nl())for(e=n.i-1;e>=0;--e)L(n,e);return jJ(n)}function eQ(n){var e,t;if(!n.b)return null;for(t=n.b;e=t.a[0];)t=e;return t}function NNn(n){var e,t;if(!n.b)return null;for(t=n.b;e=t.a[1];)t=e;return t}function K4e(n){return O(n,180)?""+u(n,180).a:n==null?null:Jr(n)}function _4e(n){return O(n,180)?""+u(n,180).a:n==null?null:Jr(n)}function $Nn(n,e){if(e.a)throw M(new ec(nXn));fi(n.a,e),e.a=n,!n.j&&(n.j=e)}function tQ(n,e){IC.call(this,e.zd(),e.yd()&-16449),Jn(n),this.a=n,this.c=e}function H4e(n,e){return new _L(e,a0(Ki(e.e),e.f.a+n,e.f.b+n),(_n(),!1))}function q4e(n,e){return k4(),nn(n,new bi(e,Y(e.e.c.length+e.g.c.length)))}function U4e(n,e){return k4(),nn(n,new bi(e,Y(e.e.c.length+e.g.c.length)))}function xNn(){xNn=F,lce=Ce((sA(),S(T(c1n,1),G,354,0,[Eq,i1n,r1n,t1n])))}function FNn(){FNn=F,$re=Ce((w5(),S(T(xln,1),G,353,0,[aq,BI,lq,hq])))}function BNn(){BNn=F,hre=Ce((Qp(),S(T(rln,1),G,405,0,[LI,c9,u9,o9])))}function RNn(){RNn=F,Vue=Ce((El(),S(T(aU,1),G,223,0,[lU,Yj,Kv,F3])))}function KNn(){KNn=F,Zue=Ce((To(),S(T(Yue,1),G,291,0,[nE,nl,Ta,Zj])))}function _Nn(){_Nn=F,foe=Ce((go(),S(T(I9,1),G,386,0,[rE,Gd,iE,Qw])))}function HNn(){HNn=F,doe=Ce((qT(),S(T(Cdn,1),G,320,0,[wU,ydn,Edn,jdn])))}function qNn(){qNn=F,goe=Ce((LT(),S(T(woe,1),G,415,0,[gU,Tdn,Mdn,Adn])))}function nT(){nT=F,xq=new oL(mVn,0),I1n=new oL(Crn,1),P1n=new oL(kh,2)}function Wb(n,e,t,i,r){return Jn(n),Jn(e),Jn(t),Jn(i),Jn(r),new AW(n,e,i)}function UNn(n,e){var t;return t=u(Bp(n.e,e),400),t?(tW(t),t.e):null}function du(n,e){var t;return t=qr(n,e,0),t==-1?!1:(Yl(n,t),!0)}function GNn(n,e,t){var i;return z1(n),i=new LO,i.a=e,n.a.Nb(new TCn(i,t)),i.a}function G4e(n){var e;return z1(n),e=K(Pi,Tr,28,0,15,1),hg(n.a,new y9n(e)),e}function iQ(n){var e;if(!E$(n))throw M(new nc);return n.e=1,e=n.d,n.d=null,e}function n1(n){var e;return Vr(n)&&(e=0-n,!isNaN(e))?e:Q1(tm(n))}function qr(n,e,t){for(;t=0?tA(n,t,!0,!0):H0(n,e,!0)}function cQ(n){var e;return e=cd(Un(n,32)),e==null&&(iu(n),e=cd(Un(n,32))),e}function uQ(n){var e;return n.Oh()||(e=se(n.Dh())-n.ji(),n.$h().Mk(e)),n.zh()}function QNn(n,e){con=new kE,MYn=e,L8=n,u(L8.b,68),XJ(L8,con,null),aGn(L8)}function i5(){i5=F,E_=new RD("XY",0),j_=new RD("X",1),C_=new RD("Y",2)}function bu(){bu=F,vf=new BD("TOP",0),pa=new BD(qm,1),zs=new BD(Ftn,2)}function vl(){vl=F,vj=new GD(kh,0),v2=new GD("TOP",1),E3=new GD(Ftn,2)}function wk(){wk=F,UH=new nX("INPUT_ORDER",0),GH=new nX("PORT_DEGREE",1)}function R4(){R4=F,hun=Yc(ro,ro,524287),bQn=Yc(0,0,Ty),lun=QN(1),QN(2),aun=QN(0)}function a$(n){var e;return n.d!=n.r&&(e=ws(n),n.e=!!e&&e.lk()==bJn,n.d=e),n.e}function d$(n,e,t){var i;return i=n.g[e],O6(n,e,n.Zi(e,t)),n.Ri(e,t,i),n.Ni(),i}function rT(n,e){var t;return t=n.dd(e),t>=0?(n.gd(t),!0):!1}function b$(n,e){var t;for(Se(n),Se(e),t=!1;e.Ob();)t=t|n.Fc(e.Pb());return t}function Lf(n,e){var t;return t=u(ee(n.e,e),400),t?(DTn(n,t),t.e):null}function YNn(n){var e,t;return e=n/60|0,t=n%60,t==0?""+e:""+e+":"+(""+t)}function Jb(n,e){var t=n.a[e],i=(K$(),WK)[typeof t];return i?i(t):wY(typeof t)}function rc(n,e){var t,i;return ea(n),i=new _J(e,n.a),t=new rSn(i),new Tn(n,t)}function w$(n){var e;return e=n.b.c.length==0?null:sn(n.b,0),e!=null&&M$(n,0),e}function W4e(n,e){var t,i,r;r=e.c.i,t=u(ee(n.f,r),60),i=t.d.c-t.e.c,BQ(e.a,i,0)}function oQ(n,e){var t;for(++n.d,++n.c[e],t=e+1;t0&&arguments[0]!==void 0?arguments[0]:{},Yi=ze.defaultLayoutOptions,Ri=Yi===void 0?{}:Yi,En=ze.algorithms,hu=En===void 0?["layered","stress","mrtree","radial","force","disco","sporeOverlap","sporeCompaction","rectpacking"]:En,Qc=ze.workerFactory,Ru=ze.workerUrl;if(y(this,Ht),this.defaultLayoutOptions=Ri,this.initialized=!1,typeof Ru>"u"&&typeof Qc>"u")throw new Error("Cannot construct an ELK without both 'workerUrl' and 'workerFactory'.");var Pr=Qc;typeof Ru<"u"&&typeof Qc>"u"&&(Pr=function(N1){return new Worker(N1)});var Cf=Pr(Ru);if(typeof Cf.postMessage!="function")throw new TypeError("Created worker does not provide the required 'postMessage' function.");this.worker=new Bu(Cf),this.worker.postMessage({cmd:"register",algorithms:hu}).then(function(L1){return Jt.initialized=!0}).catch(console.err)}return Di(Ht,[{key:"layout",value:function(ze){var Yi=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Ri=Yi.layoutOptions,En=Ri===void 0?this.defaultLayoutOptions:Ri,hu=Yi.logging,Qc=hu===void 0?!1:hu,Ru=Yi.measureExecutionTime,Pr=Ru===void 0?!1:Ru;return ze?this.worker.postMessage({cmd:"layout",graph:ze,layoutOptions:En,options:{logging:Qc,measureExecutionTime:Pr}}):Promise.reject(new Error("Missing mandatory parameter 'graph'."))}},{key:"knownLayoutAlgorithms",value:function(){return this.worker.postMessage({cmd:"algorithms"})}},{key:"knownLayoutOptions",value:function(){return this.worker.postMessage({cmd:"options"})}},{key:"knownLayoutCategories",value:function(){return this.worker.postMessage({cmd:"categories"})}},{key:"terminateWorker",value:function(){this.worker&&this.worker.terminate()}}]),Ht}();Sr.default=Wt;var Bu=function(){function Ht(Jt){var ze=this;if(y(this,Ht),Jt===void 0)throw new Error("Missing mandatory parameter 'worker'.");this.resolvers={},this.worker=Jt,this.worker.onmessage=function(Yi){setTimeout(function(){ze.receive(ze,Yi)},0)}}return Di(Ht,[{key:"postMessage",value:function(ze){var Yi=this.id||0;this.id=Yi+1,ze.id=Yi;var Ri=this;return new Promise(function(En,hu){Ri.resolvers[Yi]=function(Qc,Ru){Qc?(Ri.convertGwtStyleError(Qc),hu(Qc)):En(Ru)},Ri.worker.postMessage(ze)})}},{key:"receive",value:function(ze,Yi){var Ri=Yi.data,En=ze.resolvers[Ri.id];En&&(delete ze.resolvers[Ri.id],Ri.error?En(Ri.error):En(null,Ri.data))}},{key:"terminate",value:function(){this.worker&&this.worker.terminate()}},{key:"convertGwtStyleError",value:function(ze){if(ze){var Yi=ze.__java$exception;Yi&&(Yi.cause&&Yi.cause.backingJsObject&&(ze.cause=Yi.cause.backingJsObject,this.convertGwtStyleError(ze.cause)),delete ze.__java$exception)}}}]),Ht}()},{}],2:[function(Xt,gt,Sr){(function(Di){(function(){var y;typeof window<"u"?y=window:typeof Di<"u"?y=Di:typeof self<"u"&&(y=self);var Wt;function Bu(){}function Ht(){}function Jt(){}function ze(){}function Yi(){}function Ri(){}function En(){}function hu(){}function Qc(){}function Ru(){}function Pr(){}function Cf(){}function L1(){}function N1(){}function og(){}function V3(){}function $1(){}function ul(){}function C0n(){}function M0n(){}function J2(){}function F(){}function T0n(){}function mE(){}function A0n(){}function S0n(){}function P0n(){}function I0n(){}function O0n(){}function FU(){}function D0n(){}function L0n(){}function N0n(){}function OO(){}function $0n(){}function x0n(){}function F0n(){}function DO(){}function B0n(){}function R0n(){}function BU(){}function K0n(){}function _0n(){}function yu(){}function ju(){}function Q2(){}function Y2(){}function H0n(){}function q0n(){}function U0n(){}function G0n(){}function RU(){}function Eu(){}function Z2(){}function np(){}function z0n(){}function X0n(){}function LO(){}function V0n(){}function W0n(){}function J0n(){}function Q0n(){}function Y0n(){}function Z0n(){}function nbn(){}function ebn(){}function tbn(){}function ibn(){}function rbn(){}function cbn(){}function ubn(){}function obn(){}function sbn(){}function fbn(){}function hbn(){}function lbn(){}function abn(){}function dbn(){}function bbn(){}function wbn(){}function gbn(){}function pbn(){}function mbn(){}function vbn(){}function kbn(){}function ybn(){}function jbn(){}function Ebn(){}function Cbn(){}function Mbn(){}function Tbn(){}function KU(){}function Abn(){}function Sbn(){}function Pbn(){}function Ibn(){}function NO(){}function $O(){}function vE(){}function Obn(){}function Dbn(){}function xO(){}function Lbn(){}function Nbn(){}function $bn(){}function kE(){}function xbn(){}function Fbn(){}function Bbn(){}function Rbn(){}function Kbn(){}function _bn(){}function Hbn(){}function qbn(){}function Ubn(){}function _U(){}function Gbn(){}function zbn(){}function HU(){}function Xbn(){}function Vbn(){}function Wbn(){}function Jbn(){}function Qbn(){}function Ybn(){}function Zbn(){}function nwn(){}function ewn(){}function twn(){}function iwn(){}function rwn(){}function cwn(){}function FO(){}function uwn(){}function own(){}function swn(){}function fwn(){}function hwn(){}function lwn(){}function awn(){}function dwn(){}function bwn(){}function qU(){}function UU(){}function wwn(){}function gwn(){}function pwn(){}function mwn(){}function vwn(){}function kwn(){}function ywn(){}function jwn(){}function Ewn(){}function Cwn(){}function Mwn(){}function Twn(){}function Awn(){}function Swn(){}function Pwn(){}function Iwn(){}function Own(){}function Dwn(){}function Lwn(){}function Nwn(){}function $wn(){}function xwn(){}function Fwn(){}function Bwn(){}function Rwn(){}function Kwn(){}function _wn(){}function Hwn(){}function qwn(){}function Uwn(){}function Gwn(){}function zwn(){}function Xwn(){}function Vwn(){}function Wwn(){}function Jwn(){}function Qwn(){}function Ywn(){}function Zwn(){}function ngn(){}function egn(){}function tgn(){}function ign(){}function rgn(){}function cgn(){}function ugn(){}function ogn(){}function sgn(){}function fgn(){}function hgn(){}function lgn(){}function agn(){}function dgn(){}function bgn(){}function wgn(){}function ggn(){}function pgn(){}function mgn(){}function vgn(){}function kgn(){}function ygn(){}function jgn(){}function Egn(){}function Cgn(){}function Mgn(){}function Tgn(){}function Agn(){}function Sgn(){}function Pgn(){}function Ign(){}function Ogn(){}function Dgn(){}function Lgn(){}function Ngn(){}function $gn(){}function xgn(){}function Fgn(){}function Bgn(){}function Rgn(){}function Kgn(){}function _gn(){}function Hgn(){}function qgn(){}function Ugn(){}function Ggn(){}function zgn(){}function Xgn(){}function Vgn(){}function Wgn(){}function Jgn(){}function Qgn(){}function Ygn(){}function Zgn(){}function n2n(){}function e2n(){}function t2n(){}function i2n(){}function r2n(){}function c2n(){}function u2n(){}function GU(){}function o2n(){}function s2n(){}function f2n(){}function h2n(){}function l2n(){}function a2n(){}function d2n(){}function b2n(){}function w2n(){}function g2n(){}function p2n(){}function m2n(){}function v2n(){}function k2n(){}function y2n(){}function j2n(){}function E2n(){}function C2n(){}function M2n(){}function T2n(){}function A2n(){}function S2n(){}function P2n(){}function I2n(){}function O2n(){}function D2n(){}function L2n(){}function N2n(){}function $2n(){}function x2n(){}function F2n(){}function B2n(){}function R2n(){}function K2n(){}function _2n(){}function H2n(){}function q2n(){}function U2n(){}function G2n(){}function z2n(){}function X2n(){}function V2n(){}function W2n(){}function J2n(){}function Q2n(){}function Y2n(){}function Z2n(){}function npn(){}function epn(){}function tpn(){}function ipn(){}function rpn(){}function cpn(){}function upn(){}function opn(){}function spn(){}function fpn(){}function hpn(){}function lpn(){}function apn(){}function dpn(){}function bpn(){}function wpn(){}function gpn(){}function ppn(){}function mpn(){}function vpn(){}function kpn(){}function ypn(){}function jpn(){}function Epn(){}function Cpn(){}function Mpn(){}function zU(){}function Tpn(){}function Apn(){}function Spn(){}function Ppn(){}function Ipn(){}function Opn(){}function Dpn(){}function Lpn(){}function Npn(){}function $pn(){}function XU(){}function xpn(){}function Fpn(){}function Bpn(){}function Rpn(){}function Kpn(){}function _pn(){}function VU(){}function WU(){}function Hpn(){}function JU(){}function QU(){}function qpn(){}function Upn(){}function Gpn(){}function zpn(){}function Xpn(){}function Vpn(){}function Wpn(){}function Jpn(){}function Qpn(){}function Ypn(){}function Zpn(){}function YU(){}function n3n(){}function e3n(){}function t3n(){}function i3n(){}function r3n(){}function c3n(){}function u3n(){}function o3n(){}function s3n(){}function f3n(){}function h3n(){}function l3n(){}function a3n(){}function d3n(){}function b3n(){}function w3n(){}function g3n(){}function p3n(){}function m3n(){}function v3n(){}function k3n(){}function y3n(){}function j3n(){}function E3n(){}function C3n(){}function M3n(){}function T3n(){}function A3n(){}function S3n(){}function P3n(){}function I3n(){}function O3n(){}function D3n(){}function L3n(){}function N3n(){}function $3n(){}function x3n(){}function F3n(){}function B3n(){}function R3n(){}function K3n(){}function _3n(){}function H3n(){}function q3n(){}function U3n(){}function G3n(){}function z3n(){}function X3n(){}function V3n(){}function W3n(){}function J3n(){}function Q3n(){}function Y3n(){}function Z3n(){}function n4n(){}function e4n(){}function t4n(){}function i4n(){}function r4n(){}function c4n(){}function u4n(){}function o4n(){}function s4n(){}function f4n(){}function h4n(){}function l4n(){}function a4n(){}function d4n(){}function b4n(){}function w4n(){}function g4n(){}function p4n(){}function m4n(){}function v4n(){}function k4n(){}function y4n(){}function j4n(){}function E4n(){}function C4n(){}function M4n(){}function T4n(){}function A4n(){}function S4n(){}function P4n(){}function I4n(){}function O4n(){}function _se(){}function D4n(){}function L4n(){}function N4n(){}function $4n(){}function x4n(){}function F4n(){}function B4n(){}function R4n(){}function K4n(){}function _4n(){}function H4n(){}function q4n(){}function U4n(){}function G4n(){}function z4n(){}function X4n(){}function V4n(){}function W4n(){}function J4n(){}function Q4n(){}function Y4n(){}function Z4n(){}function nmn(){}function emn(){}function tmn(){}function imn(){}function rmn(){}function BO(){}function RO(){}function cmn(){}function KO(){}function umn(){}function omn(){}function smn(){}function fmn(){}function hmn(){}function lmn(){}function amn(){}function dmn(){}function bmn(){}function wmn(){}function ZU(){}function gmn(){}function pmn(){}function mmn(){}function Hse(){}function vmn(){}function kmn(){}function ymn(){}function jmn(){}function Emn(){}function Cmn(){}function Mmn(){}function Ra(){}function Tmn(){}function ep(){}function nG(){}function Amn(){}function Smn(){}function Pmn(){}function Imn(){}function Omn(){}function Dmn(){}function Lmn(){}function Nmn(){}function $mn(){}function xmn(){}function Fmn(){}function Bmn(){}function Rmn(){}function Kmn(){}function _mn(){}function Hmn(){}function qmn(){}function Umn(){}function Gmn(){}function hn(){}function zmn(){}function Xmn(){}function Vmn(){}function Wmn(){}function Jmn(){}function Qmn(){}function Ymn(){}function Zmn(){}function nvn(){}function evn(){}function tvn(){}function ivn(){}function rvn(){}function _O(){}function cvn(){}function uvn(){}function ovn(){}function yE(){}function svn(){}function HO(){}function jE(){}function fvn(){}function eG(){}function hvn(){}function lvn(){}function avn(){}function dvn(){}function bvn(){}function wvn(){}function EE(){}function gvn(){}function pvn(){}function CE(){}function mvn(){}function ME(){}function vvn(){}function tG(){}function kvn(){}function qO(){}function iG(){}function yvn(){}function jvn(){}function Evn(){}function Cvn(){}function qse(){}function Mvn(){}function Tvn(){}function Avn(){}function Svn(){}function Pvn(){}function Ivn(){}function Ovn(){}function Dvn(){}function Lvn(){}function Nvn(){}function W3(){}function UO(){}function $vn(){}function xvn(){}function Fvn(){}function Bvn(){}function Rvn(){}function Kvn(){}function _vn(){}function Hvn(){}function qvn(){}function Uvn(){}function Gvn(){}function zvn(){}function Xvn(){}function Vvn(){}function Wvn(){}function Jvn(){}function Qvn(){}function Yvn(){}function Zvn(){}function n6n(){}function e6n(){}function t6n(){}function i6n(){}function r6n(){}function c6n(){}function u6n(){}function o6n(){}function s6n(){}function f6n(){}function h6n(){}function l6n(){}function a6n(){}function d6n(){}function b6n(){}function w6n(){}function g6n(){}function p6n(){}function m6n(){}function v6n(){}function k6n(){}function y6n(){}function j6n(){}function E6n(){}function C6n(){}function M6n(){}function T6n(){}function A6n(){}function S6n(){}function P6n(){}function I6n(){}function O6n(){}function D6n(){}function L6n(){}function N6n(){}function $6n(){}function x6n(){}function F6n(){}function B6n(){}function R6n(){}function K6n(){}function _6n(){}function H6n(){}function q6n(){}function U6n(){}function G6n(){}function z6n(){}function X6n(){}function V6n(){}function W6n(){}function J6n(){}function Q6n(){}function Y6n(){}function Z6n(){}function n5n(){}function e5n(){}function t5n(){}function i5n(){}function r5n(){}function c5n(){}function u5n(){}function o5n(){}function s5n(){}function f5n(){}function h5n(){}function l5n(){}function a5n(){}function d5n(){}function b5n(){}function w5n(){}function g5n(){}function p5n(){}function m5n(){}function v5n(){}function k5n(){}function y5n(){}function j5n(){}function E5n(){}function C5n(){}function M5n(){}function T5n(){}function A5n(){}function rG(){}function S5n(){}function P5n(){}function GO(){n6()}function I5n(){u7()}function O5n(){aA()}function D5n(){Q$()}function L5n(){M5()}function N5n(){ann()}function $5n(){qs()}function x5n(){jZ()}function F5n(){zk()}function B5n(){o7()}function R5n(){$7()}function K5n(){aCn()}function _5n(){Hp()}function H5n(){KLn()}function q5n(){yQ()}function U5n(){SOn()}function G5n(){jQ()}function z5n(){pNn()}function X5n(){AOn()}function V5n(){cm()}function W5n(){nxn()}function J5n(){Z$n()}function Q5n(){EDn()}function Y5n(){exn()}function Z5n(){ca()}function n8n(){ZE()}function e8n(){ltn()}function t8n(){cn()}function i8n(){txn()}function r8n(){Pxn()}function c8n(){POn()}function u8n(){nKn()}function o8n(){IOn()}function s8n(){bUn()}function f8n(){qnn()}function h8n(){kl()}function l8n(){wBn()}function a8n(){lc()}function d8n(){ROn()}function b8n(){_p()}function w8n(){Men()}function g8n(){ua()}function p8n(){Ten()}function m8n(){Bf()}function v8n(){Qk()}function k8n(){EF()}function y8n(){Dx()}function cf(){wSn()}function j8n(){YM()}function E8n(){mA()}function cG(){qe()}function C8n(){NT()}function M8n(){YY()}function uG(){D$()}function oG(){KA()}function T8n(){Fen()}function sG(n){Jn(n)}function A8n(n){this.a=n}function TE(n){this.a=n}function S8n(n){this.a=n}function P8n(n){this.a=n}function I8n(n){this.a=n}function O8n(n){this.a=n}function D8n(n){this.a=n}function L8n(n){this.a=n}function fG(n){this.a=n}function hG(n){this.a=n}function N8n(n){this.a=n}function $8n(n){this.a=n}function zO(n){this.a=n}function x8n(n){this.a=n}function F8n(n){this.a=n}function XO(n){this.a=n}function VO(n){this.a=n}function B8n(n){this.a=n}function WO(n){this.a=n}function R8n(n){this.a=n}function K8n(n){this.a=n}function _8n(n){this.a=n}function lG(n){this.b=n}function H8n(n){this.c=n}function q8n(n){this.a=n}function U8n(n){this.a=n}function G8n(n){this.a=n}function z8n(n){this.a=n}function X8n(n){this.a=n}function V8n(n){this.a=n}function W8n(n){this.a=n}function J8n(n){this.a=n}function Q8n(n){this.a=n}function Y8n(n){this.a=n}function Z8n(n){this.a=n}function n9n(n){this.a=n}function e9n(n){this.a=n}function aG(n){this.a=n}function dG(n){this.a=n}function AE(n){this.a=n}function z9(n){this.a=n}function Ka(){this.a=[]}function t9n(n,e){n.a=e}function Use(n,e){n.a=e}function Gse(n,e){n.b=e}function zse(n,e){n.b=e}function Xse(n,e){n.b=e}function bG(n,e){n.j=e}function Vse(n,e){n.g=e}function Wse(n,e){n.i=e}function Jse(n,e){n.c=e}function Qse(n,e){n.c=e}function Yse(n,e){n.d=e}function Zse(n,e){n.d=e}function _a(n,e){n.k=e}function nfe(n,e){n.c=e}function wG(n,e){n.c=e}function gG(n,e){n.a=e}function efe(n,e){n.a=e}function tfe(n,e){n.f=e}function ife(n,e){n.a=e}function rfe(n,e){n.b=e}function JO(n,e){n.d=e}function SE(n,e){n.i=e}function pG(n,e){n.o=e}function cfe(n,e){n.r=e}function ufe(n,e){n.a=e}function ofe(n,e){n.b=e}function i9n(n,e){n.e=e}function sfe(n,e){n.f=e}function mG(n,e){n.g=e}function ffe(n,e){n.e=e}function hfe(n,e){n.f=e}function lfe(n,e){n.f=e}function QO(n,e){n.a=e}function YO(n,e){n.b=e}function afe(n,e){n.n=e}function dfe(n,e){n.a=e}function bfe(n,e){n.c=e}function wfe(n,e){n.c=e}function gfe(n,e){n.c=e}function pfe(n,e){n.a=e}function mfe(n,e){n.a=e}function vfe(n,e){n.d=e}function kfe(n,e){n.d=e}function yfe(n,e){n.e=e}function jfe(n,e){n.e=e}function Efe(n,e){n.g=e}function Cfe(n,e){n.f=e}function Mfe(n,e){n.j=e}function Tfe(n,e){n.a=e}function Afe(n,e){n.a=e}function Sfe(n,e){n.b=e}function r9n(n){n.b=n.a}function c9n(n){n.c=n.d.d}function vG(n){this.a=n}function kG(n){this.a=n}function yG(n){this.a=n}function Ha(n){this.a=n}function qa(n){this.a=n}function X9(n){this.a=n}function u9n(n){this.a=n}function jG(n){this.a=n}function V9(n){this.a=n}function PE(n){this.a=n}function ol(n){this.a=n}function Sb(n){this.a=n}function o9n(n){this.a=n}function s9n(n){this.a=n}function ZO(n){this.b=n}function J3(n){this.b=n}function Q3(n){this.b=n}function nD(n){this.a=n}function f9n(n){this.a=n}function eD(n){this.c=n}function C(n){this.c=n}function h9n(n){this.c=n}function Xv(n){this.d=n}function EG(n){this.a=n}function Te(n){this.a=n}function l9n(n){this.a=n}function CG(n){this.a=n}function MG(n){this.a=n}function TG(n){this.a=n}function AG(n){this.a=n}function SG(n){this.a=n}function PG(n){this.a=n}function Y3(n){this.a=n}function a9n(n){this.a=n}function d9n(n){this.a=n}function Z3(n){this.a=n}function b9n(n){this.a=n}function w9n(n){this.a=n}function g9n(n){this.a=n}function p9n(n){this.a=n}function m9n(n){this.a=n}function v9n(n){this.a=n}function k9n(n){this.a=n}function y9n(n){this.a=n}function j9n(n){this.a=n}function E9n(n){this.a=n}function C9n(n){this.a=n}function M9n(n){this.a=n}function T9n(n){this.a=n}function A9n(n){this.a=n}function S9n(n){this.a=n}function Vv(n){this.a=n}function P9n(n){this.a=n}function I9n(n){this.a=n}function O9n(n){this.a=n}function D9n(n){this.a=n}function IE(n){this.a=n}function L9n(n){this.a=n}function N9n(n){this.a=n}function n4(n){this.a=n}function IG(n){this.a=n}function $9n(n){this.a=n}function x9n(n){this.a=n}function F9n(n){this.a=n}function B9n(n){this.a=n}function R9n(n){this.a=n}function K9n(n){this.a=n}function OG(n){this.a=n}function DG(n){this.a=n}function LG(n){this.a=n}function Wv(n){this.a=n}function OE(n){this.e=n}function e4(n){this.a=n}function _9n(n){this.a=n}function tp(n){this.a=n}function NG(n){this.a=n}function H9n(n){this.a=n}function q9n(n){this.a=n}function U9n(n){this.a=n}function G9n(n){this.a=n}function z9n(n){this.a=n}function X9n(n){this.a=n}function V9n(n){this.a=n}function W9n(n){this.a=n}function J9n(n){this.a=n}function Q9n(n){this.a=n}function Y9n(n){this.a=n}function $G(n){this.a=n}function Z9n(n){this.a=n}function n7n(n){this.a=n}function e7n(n){this.a=n}function t7n(n){this.a=n}function i7n(n){this.a=n}function r7n(n){this.a=n}function c7n(n){this.a=n}function u7n(n){this.a=n}function o7n(n){this.a=n}function s7n(n){this.a=n}function f7n(n){this.a=n}function h7n(n){this.a=n}function l7n(n){this.a=n}function a7n(n){this.a=n}function d7n(n){this.a=n}function b7n(n){this.a=n}function w7n(n){this.a=n}function g7n(n){this.a=n}function p7n(n){this.a=n}function m7n(n){this.a=n}function v7n(n){this.a=n}function k7n(n){this.a=n}function y7n(n){this.a=n}function j7n(n){this.a=n}function E7n(n){this.a=n}function C7n(n){this.a=n}function M7n(n){this.a=n}function T7n(n){this.a=n}function A7n(n){this.a=n}function S7n(n){this.a=n}function P7n(n){this.a=n}function I7n(n){this.a=n}function O7n(n){this.a=n}function D7n(n){this.a=n}function L7n(n){this.a=n}function N7n(n){this.a=n}function $7n(n){this.a=n}function x7n(n){this.a=n}function F7n(n){this.c=n}function B7n(n){this.b=n}function R7n(n){this.a=n}function K7n(n){this.a=n}function _7n(n){this.a=n}function H7n(n){this.a=n}function q7n(n){this.a=n}function U7n(n){this.a=n}function G7n(n){this.a=n}function z7n(n){this.a=n}function X7n(n){this.a=n}function V7n(n){this.a=n}function W7n(n){this.a=n}function J7n(n){this.a=n}function Q7n(n){this.a=n}function Y7n(n){this.a=n}function Z7n(n){this.a=n}function nkn(n){this.a=n}function ekn(n){this.a=n}function tkn(n){this.a=n}function ikn(n){this.a=n}function rkn(n){this.a=n}function ckn(n){this.a=n}function ukn(n){this.a=n}function okn(n){this.a=n}function skn(n){this.a=n}function fkn(n){this.a=n}function hkn(n){this.a=n}function lkn(n){this.a=n}function sl(n){this.a=n}function sg(n){this.a=n}function akn(n){this.a=n}function dkn(n){this.a=n}function bkn(n){this.a=n}function wkn(n){this.a=n}function gkn(n){this.a=n}function pkn(n){this.a=n}function mkn(n){this.a=n}function vkn(n){this.a=n}function kkn(n){this.a=n}function ykn(n){this.a=n}function jkn(n){this.a=n}function Ekn(n){this.a=n}function Ckn(n){this.a=n}function Mkn(n){this.a=n}function Tkn(n){this.a=n}function Akn(n){this.a=n}function Skn(n){this.a=n}function Pkn(n){this.a=n}function Ikn(n){this.a=n}function Okn(n){this.a=n}function Dkn(n){this.a=n}function Lkn(n){this.a=n}function Nkn(n){this.a=n}function $kn(n){this.a=n}function xkn(n){this.a=n}function Fkn(n){this.a=n}function DE(n){this.a=n}function Bkn(n){this.f=n}function Rkn(n){this.a=n}function Kkn(n){this.a=n}function _kn(n){this.a=n}function Hkn(n){this.a=n}function qkn(n){this.a=n}function Ukn(n){this.a=n}function Gkn(n){this.a=n}function zkn(n){this.a=n}function Xkn(n){this.a=n}function Vkn(n){this.a=n}function Wkn(n){this.a=n}function Jkn(n){this.a=n}function Qkn(n){this.a=n}function Ykn(n){this.a=n}function Zkn(n){this.a=n}function nyn(n){this.a=n}function eyn(n){this.a=n}function tyn(n){this.a=n}function iyn(n){this.a=n}function ryn(n){this.a=n}function cyn(n){this.a=n}function uyn(n){this.a=n}function oyn(n){this.a=n}function syn(n){this.a=n}function fyn(n){this.a=n}function hyn(n){this.a=n}function lyn(n){this.a=n}function ayn(n){this.a=n}function tD(n){this.a=n}function xG(n){this.a=n}function lt(n){this.b=n}function dyn(n){this.a=n}function byn(n){this.a=n}function wyn(n){this.a=n}function gyn(n){this.a=n}function pyn(n){this.a=n}function myn(n){this.a=n}function vyn(n){this.a=n}function kyn(n){this.b=n}function yyn(n){this.a=n}function W9(n){this.a=n}function jyn(n){this.a=n}function Eyn(n){this.a=n}function FG(n){this.c=n}function LE(n){this.e=n}function NE(n){this.a=n}function $E(n){this.a=n}function iD(n){this.a=n}function Cyn(n){this.d=n}function Myn(n){this.a=n}function BG(n){this.a=n}function RG(n){this.a=n}function Wd(n){this.e=n}function Pfe(){this.a=0}function de(){Hu(this)}function Z(){pL(this)}function rD(){sIn(this)}function Tyn(){}function Jd(){this.c=Gdn}function Ayn(n,e){n.b+=e}function Ife(n,e){e.Wb(n)}function Ofe(n){return n.a}function Dfe(n){return n.a}function Lfe(n){return n.a}function Nfe(n){return n.a}function $fe(n){return n.a}function M(n){return n.e}function xfe(){return null}function Ffe(){return null}function Bfe(){Cz(),pLe()}function Rfe(n){n.b.Of(n.e)}function Syn(n){n.b=new CD}function Jv(n,e){n.b=e-n.b}function Qv(n,e){n.a=e-n.a}function Bn(n,e){n.push(e)}function Pyn(n,e){n.sort(e)}function Iyn(n,e){e.jd(n.a)}function Kfe(n,e){gi(e,n)}function _fe(n,e,t){n.Yd(t,e)}function J9(n,e){n.e=e,e.b=n}function KG(n){uh(),this.a=n}function Oyn(n){uh(),this.a=n}function Dyn(n){uh(),this.a=n}function cD(n){m0(),this.a=n}function Lyn(n){O4(),VK.le(n)}function _G(){_G=F,new de}function Ua(){YTn.call(this)}function HG(){YTn.call(this)}function qG(){Ua.call(this)}function uD(){Ua.call(this)}function Nyn(){Ua.call(this)}function Q9(){Ua.call(this)}function Cu(){Ua.call(this)}function ip(){Ua.call(this)}function Pe(){Ua.call(this)}function Bo(){Ua.call(this)}function $yn(){Ua.call(this)}function nc(){Ua.call(this)}function xyn(){Ua.call(this)}function Fyn(){this.a=this}function xE(){this.Bb|=256}function Byn(){this.b=new GMn}function Pb(n,e){n.length=e}function FE(n,e){nn(n.a,e)}function Hfe(n,e){bnn(n.c,e)}function qfe(n,e){fi(n.b,e)}function Ufe(n,e){uA(n.a,e)}function Gfe(n,e){cx(n.a,e)}function t4(n,e){it(n.e,e)}function rp(n){jA(n.c,n.b)}function zfe(n,e){n.kc().Nb(e)}function UG(n){this.a=B5e(n)}function ni(){this.a=new de}function Ryn(){this.a=new de}function GG(){this.a=new rCn}function BE(){this.a=new Z}function oD(){this.a=new Z}function zG(){this.a=new Z}function hs(){this.a=new cbn}function Ga(){this.a=new NLn}function XG(){this.a=new _U}function VG(){this.a=new TOn}function WG(){this.a=new BAn}function Kyn(){this.a=new Z}function _yn(){this.a=new Z}function Hyn(){this.a=new Z}function JG(){this.a=new Z}function qyn(){this.d=new Z}function Uyn(){this.a=new zOn}function Gyn(){this.a=new ni}function zyn(){this.a=new de}function Xyn(){this.b=new de}function Vyn(){this.b=new Z}function QG(){this.e=new Z}function Wyn(){this.a=new Z5n}function Jyn(){this.d=new Z}function Qyn(){QIn.call(this)}function Yyn(){QIn.call(this)}function Zyn(){Z.call(this)}function YG(){qG.call(this)}function ZG(){BE.call(this)}function njn(){qC.call(this)}function ejn(){JG.call(this)}function Yv(){Tyn.call(this)}function sD(){Yv.call(this)}function cp(){Tyn.call(this)}function nz(){cp.call(this)}function tjn(){rz.call(this)}function ijn(){rz.call(this)}function rjn(){rz.call(this)}function cjn(){cz.call(this)}function Zv(){svn.call(this)}function ez(){svn.call(this)}function Mu(){Ct.call(this)}function ujn(){yjn.call(this)}function ojn(){yjn.call(this)}function sjn(){de.call(this)}function fjn(){de.call(this)}function hjn(){de.call(this)}function fD(){cxn.call(this)}function ljn(){ni.call(this)}function ajn(){xE.call(this)}function hD(){BX.call(this)}function tz(){de.call(this)}function lD(){BX.call(this)}function aD(){de.call(this)}function djn(){de.call(this)}function iz(){ME.call(this)}function bjn(){iz.call(this)}function wjn(){ME.call(this)}function gjn(){rG.call(this)}function rz(){this.a=new ni}function pjn(){this.a=new de}function mjn(){this.a=new Z}function cz(){this.a=new de}function up(){this.a=new Ct}function vjn(){this.j=new Z}function kjn(){this.a=new mEn}function yjn(){this.a=new mvn}function uz(){this.a=new Z4n}function n6(){n6=F,KK=new Ht}function dD(){dD=F,_K=new Ejn}function bD(){bD=F,HK=new jjn}function jjn(){XO.call(this,"")}function Ejn(){XO.call(this,"")}function Cjn(n){S$n.call(this,n)}function Mjn(n){S$n.call(this,n)}function oz(n){fG.call(this,n)}function sz(n){XEn.call(this,n)}function Xfe(n){XEn.call(this,n)}function Vfe(n){sz.call(this,n)}function Wfe(n){sz.call(this,n)}function Jfe(n){sz.call(this,n)}function Tjn(n){zN.call(this,n)}function Ajn(n){zN.call(this,n)}function Sjn(n){uSn.call(this,n)}function Pjn(n){Oz.call(this,n)}function e6(n){WE.call(this,n)}function fz(n){WE.call(this,n)}function Ijn(n){WE.call(this,n)}function hz(n){mje.call(this,n)}function lz(n){hz.call(this,n)}function ec(n){APn.call(this,n)}function Ojn(n){ec.call(this,n)}function op(){z9.call(this,{})}function Djn(){Djn=F,dQn=new M0n}function RE(){RE=F,GK=new STn}function Ljn(){Ljn=F,oun=new Bu}function az(){az=F,sun=new N1}function KE(){KE=F,P8=new $1}function wD(n){b4(),this.a=n}function gD(n){RQ(),this.a=n}function Qd(n){nN(),this.f=n}function pD(n){nN(),this.f=n}function Njn(n){bSn(),this.a=n}function $jn(n){n.b=null,n.c=0}function Qfe(n,e){n.e=e,bqn(n,e)}function Yfe(n,e){n.a=e,cEe(n)}function mD(n,e,t){n.a[e.g]=t}function Zfe(n,e,t){kke(t,n,e)}function nhe(n,e){Wae(e.i,n.n)}function xjn(n,e){v6e(n).Cd(e)}function ehe(n,e){n.a.ec().Mc(e)}function Fjn(n,e){return n.g-e.g}function the(n,e){return n*n/e}function on(n){return Jn(n),n}function $(n){return Jn(n),n}function Y9(n){return Jn(n),n}function ihe(n){return new AE(n)}function rhe(n){return new qb(n)}function dz(n){return Jn(n),n}function che(n){return Jn(n),n}function _E(n){ec.call(this,n)}function Ir(n){ec.call(this,n)}function Bjn(n){ec.call(this,n)}function vD(n){APn.call(this,n)}function i4(n){ec.call(this,n)}function Gn(n){ec.call(this,n)}function Or(n){ec.call(this,n)}function Rjn(n){ec.call(this,n)}function sp(n){ec.call(this,n)}function Kl(n){ec.call(this,n)}function _l(n){ec.call(this,n)}function fp(n){ec.call(this,n)}function nh(n){ec.call(this,n)}function kD(n){ec.call(this,n)}function Le(n){ec.call(this,n)}function Ku(n){Jn(n),this.a=n}function bz(n){return ld(n),n}function t6(n){TW(n,n.length)}function i6(n){return n.b==n.c}function Ib(n){return!!n&&n.b}function uhe(n){return!!n&&n.k}function ohe(n){return!!n&&n.j}function she(n,e,t){n.c.Ef(e,t)}function Kjn(n,e){n.be(e),e.ae(n)}function hp(n){uh(),this.a=Se(n)}function yD(){this.a=Oe(Se(ur))}function _jn(){throw M(new Pe)}function fhe(){throw M(new Pe)}function wz(){throw M(new Pe)}function Hjn(){throw M(new Pe)}function hhe(){throw M(new Pe)}function lhe(){throw M(new Pe)}function HE(){HE=F,O4()}function Hl(){X9.call(this,"")}function r6(){X9.call(this,"")}function x1(){X9.call(this,"")}function lp(){X9.call(this,"")}function gz(n){Ir.call(this,n)}function pz(n){Ir.call(this,n)}function eh(n){Gn.call(this,n)}function r4(n){Q3.call(this,n)}function qjn(n){r4.call(this,n)}function jD(n){BC.call(this,n)}function ED(n){JX.call(this,n,0)}function CD(){sJ.call(this,12,3)}function T(n,e){return kOn(n,e)}function qE(n,e){return o$(n,e)}function ahe(n,e){return n.a-e.a}function dhe(n,e){return n.a-e.a}function bhe(n,e){return n.a-e.a}function whe(n,e){return e in n.a}function Ujn(n){return n.a?n.b:0}function ghe(n){return n.a?n.b:0}function phe(n,e,t){e.Cd(n.a[t])}function mhe(n,e,t){e.Pe(n.a[t])}function vhe(n,e){n.b=new rr(e)}function khe(n,e){return n.b=e,n}function Gjn(n,e){return n.c=e,n}function zjn(n,e){return n.f=e,n}function yhe(n,e){return n.g=e,n}function mz(n,e){return n.a=e,n}function vz(n,e){return n.f=e,n}function jhe(n,e){return n.k=e,n}function kz(n,e){return n.a=e,n}function Ehe(n,e){return n.e=e,n}function yz(n,e){return n.e=e,n}function Che(n,e){return n.f=e,n}function Mhe(n,e){n.b=!0,n.d=e}function The(n,e){return n.b-e.b}function Ahe(n,e){return n.g-e.g}function She(n,e){return n?0:e-1}function Xjn(n,e){return n?0:e-1}function Phe(n,e){return n?e-1:0}function Ihe(n,e){return n.s-e.s}function Ohe(n,e){return e.rg(n)}function Yd(n,e){return n.b=e,n}function UE(n,e){return n.a=e,n}function Zd(n,e){return n.c=e,n}function n0(n,e){return n.d=e,n}function e0(n,e){return n.e=e,n}function jz(n,e){return n.f=e,n}function c6(n,e){return n.a=e,n}function c4(n,e){return n.b=e,n}function u4(n,e){return n.c=e,n}function an(n,e){return n.c=e,n}function Sn(n,e){return n.b=e,n}function dn(n,e){return n.d=e,n}function bn(n,e){return n.e=e,n}function Dhe(n,e){return n.f=e,n}function wn(n,e){return n.g=e,n}function gn(n,e){return n.a=e,n}function pn(n,e){return n.i=e,n}function mn(n,e){return n.j=e,n}function Lhe(n,e){ca(),ic(e,n)}function Nhe(n,e,t){Jbe(n.a,e,t)}function GE(n){$L.call(this,n)}function Vjn(n){Z5e.call(this,n)}function Wjn(n){SIn.call(this,n)}function Ez(n){SIn.call(this,n)}function F1(n){S0.call(this,n)}function Jjn(n){CN.call(this,n)}function Qjn(n){CN.call(this,n)}function Yjn(){DX.call(this,"")}function Li(){this.a=0,this.b=0}function Zjn(){this.b=0,this.a=0}function nEn(n,e){n.b=0,Zb(n,e)}function eEn(n,e){return n.k=e,n}function $he(n,e){return n.j=e,n}function xhe(n,e){n.c=e,n.b=!0}function tEn(){tEn=F,TQn=Xke()}function B1(){B1=F,voe=rke()}function iEn(){iEn=F,Ti=gye()}function Cz(){Cz=F,Oa=z4()}function o4(){o4=F,Udn=cke()}function rEn(){rEn=F,ise=uke()}function Mz(){Mz=F,yc=tEe()}function uf(n){return n.e&&n.e()}function cEn(n){return n.l|n.m<<22}function uEn(n,e){return n.c._b(e)}function oEn(n,e){return rBn(n.b,e)}function MD(n){return n?n.d:null}function Fhe(n){return n?n.g:null}function Bhe(n){return n?n.i:null}function za(n){return ll(n),n.o}function fg(n,e){return n.a+=e,n}function TD(n,e){return n.a+=e,n}function ql(n,e){return n.a+=e,n}function t0(n,e){return n.a+=e,n}function Tz(n,e){for(;n.Bd(e););}function zE(n){this.a=new ap(n)}function sEn(){throw M(new Pe)}function fEn(){throw M(new Pe)}function hEn(){throw M(new Pe)}function lEn(){throw M(new Pe)}function aEn(){throw M(new Pe)}function dEn(){throw M(new Pe)}function Ul(n){this.a=new iN(n)}function bEn(){this.a=new K5(Rln)}function wEn(){this.b=new K5(rln)}function gEn(){this.a=new K5(f1n)}function pEn(){this.b=new K5(Fq)}function mEn(){this.b=new K5(Fq)}function XE(n){this.a=0,this.b=n}function Az(n){zGn(),ILe(this,n)}function s4(n){return z1(n),n.a}function Z9(n){return n.b!=n.d.c}function Sz(n,e){return n.d[e.p]}function vEn(n,e){return XTe(n,e)}function Pz(n,e,t){n.splice(e,t)}function hg(n,e){for(;n.Re(e););}function kEn(n){n.c?Dqn(n):Lqn(n)}function yEn(){throw M(new Pe)}function jEn(){throw M(new Pe)}function EEn(){throw M(new Pe)}function CEn(){throw M(new Pe)}function MEn(){throw M(new Pe)}function TEn(){throw M(new Pe)}function AEn(){throw M(new Pe)}function SEn(){throw M(new Pe)}function PEn(){throw M(new Pe)}function IEn(){throw M(new Pe)}function Rhe(){throw M(new nc)}function Khe(){throw M(new nc)}function n7(n){this.a=new OEn(n)}function OEn(n){Ume(this,n,jje())}function e7(n){return!n||oIn(n)}function t7(n){return Zf[n]!=-1}function _he(){cP!=0&&(cP=0),uP=-1}function DEn(){RK==null&&(RK=[])}function i7(n,e){Cg.call(this,n,e)}function f4(n,e){i7.call(this,n,e)}function LEn(n,e){this.a=n,this.b=e}function NEn(n,e){this.a=n,this.b=e}function $En(n,e){this.a=n,this.b=e}function xEn(n,e){this.a=n,this.b=e}function FEn(n,e){this.a=n,this.b=e}function BEn(n,e){this.a=n,this.b=e}function REn(n,e){this.a=n,this.b=e}function h4(n,e){this.e=n,this.d=e}function Iz(n,e){this.b=n,this.c=e}function KEn(n,e){this.b=n,this.a=e}function _En(n,e){this.b=n,this.a=e}function HEn(n,e){this.b=n,this.a=e}function qEn(n,e){this.b=n,this.a=e}function UEn(n,e){this.a=n,this.b=e}function AD(n,e){this.a=n,this.b=e}function GEn(n,e){this.a=n,this.f=e}function i0(n,e){this.g=n,this.i=e}function je(n,e){this.f=n,this.g=e}function zEn(n,e){this.b=n,this.c=e}function XEn(n){KX(n.dc()),this.c=n}function Hhe(n,e){this.a=n,this.b=e}function VEn(n,e){this.a=n,this.b=e}function WEn(n){this.a=u(Se(n),15)}function Oz(n){this.a=u(Se(n),15)}function JEn(n){this.a=u(Se(n),85)}function VE(n){this.b=u(Se(n),85)}function WE(n){this.b=u(Se(n),51)}function JE(){this.q=new y.Date}function SD(n,e){this.a=n,this.b=e}function QEn(n,e){return Zc(n.b,e)}function r7(n,e){return n.b.Hc(e)}function YEn(n,e){return n.b.Ic(e)}function ZEn(n,e){return n.b.Qc(e)}function nCn(n,e){return n.b.Hc(e)}function eCn(n,e){return n.c.uc(e)}function tCn(n,e){return rt(n.c,e)}function of(n,e){return n.a._b(e)}function iCn(n,e){return n>e&&e0}function ND(n,e){return Ec(n,e)<0}function vCn(n,e){return JL(n.a,e)}function ole(n,e){yOn.call(this,n,e)}function Bz(n){wN(),uSn.call(this,n)}function Rz(n,e){bPn(n,n.length,e)}function s7(n,e){HPn(n,n.length,e)}function d6(n,e){return n.a.get(e)}function kCn(n,e){return Zc(n.e,e)}function Kz(n){return Jn(n),!1}function _z(n){this.a=u(Se(n),229)}function cC(n){In.call(this,n,21)}function uC(n,e){je.call(this,n,e)}function $D(n,e){je.call(this,n,e)}function yCn(n,e){this.b=n,this.a=e}function oC(n,e){this.d=n,this.e=e}function jCn(n,e){this.a=n,this.b=e}function ECn(n,e){this.a=n,this.b=e}function CCn(n,e){this.a=n,this.b=e}function MCn(n,e){this.a=n,this.b=e}function bp(n,e){this.a=n,this.b=e}function TCn(n,e){this.b=n,this.a=e}function Hz(n,e){this.b=n,this.a=e}function qz(n,e){je.call(this,n,e)}function Uz(n,e){je.call(this,n,e)}function lg(n,e){je.call(this,n,e)}function xD(n,e){je.call(this,n,e)}function FD(n,e){je.call(this,n,e)}function BD(n,e){je.call(this,n,e)}function sC(n,e){je.call(this,n,e)}function Gz(n,e){this.b=n,this.a=e}function fC(n,e){je.call(this,n,e)}function zz(n,e){this.b=n,this.a=e}function hC(n,e){je.call(this,n,e)}function ACn(n,e){this.b=n,this.a=e}function Xz(n,e){je.call(this,n,e)}function RD(n,e){je.call(this,n,e)}function f7(n,e){je.call(this,n,e)}function b6(n,e,t){n.splice(e,0,t)}function sle(n,e,t){n.Mb(t)&&e.Cd(t)}function fle(n,e,t){e.Pe(n.a.Ye(t))}function hle(n,e,t){e.Dd(n.a.Ze(t))}function lle(n,e,t){e.Cd(n.a.Kb(t))}function ale(n,e){return Au(n.c,e)}function dle(n,e){return Au(n.e,e)}function lC(n,e){je.call(this,n,e)}function aC(n,e){je.call(this,n,e)}function w6(n,e){je.call(this,n,e)}function Vz(n,e){je.call(this,n,e)}function ei(n,e){je.call(this,n,e)}function dC(n,e){je.call(this,n,e)}function SCn(n,e){this.a=n,this.b=e}function PCn(n,e){this.a=n,this.b=e}function ICn(n,e){this.a=n,this.b=e}function OCn(n,e){this.a=n,this.b=e}function DCn(n,e){this.a=n,this.b=e}function LCn(n,e){this.a=n,this.b=e}function NCn(n,e){this.b=n,this.a=e}function $Cn(n,e){this.b=n,this.a=e}function Wz(n,e){this.b=n,this.a=e}function d4(n,e){this.c=n,this.d=e}function xCn(n,e){this.e=n,this.d=e}function FCn(n,e){this.a=n,this.b=e}function BCn(n,e){this.a=n,this.b=e}function RCn(n,e){this.a=n,this.b=e}function KCn(n,e){this.b=n,this.a=e}function _Cn(n,e){this.b=e,this.c=n}function bC(n,e){je.call(this,n,e)}function h7(n,e){je.call(this,n,e)}function KD(n,e){je.call(this,n,e)}function Jz(n,e){je.call(this,n,e)}function g6(n,e){je.call(this,n,e)}function _D(n,e){je.call(this,n,e)}function HD(n,e){je.call(this,n,e)}function l7(n,e){je.call(this,n,e)}function Qz(n,e){je.call(this,n,e)}function qD(n,e){je.call(this,n,e)}function p6(n,e){je.call(this,n,e)}function Yz(n,e){je.call(this,n,e)}function m6(n,e){je.call(this,n,e)}function v6(n,e){je.call(this,n,e)}function Db(n,e){je.call(this,n,e)}function UD(n,e){je.call(this,n,e)}function GD(n,e){je.call(this,n,e)}function Zz(n,e){je.call(this,n,e)}function a7(n,e){je.call(this,n,e)}function ag(n,e){je.call(this,n,e)}function zD(n,e){je.call(this,n,e)}function wC(n,e){je.call(this,n,e)}function d7(n,e){je.call(this,n,e)}function Lb(n,e){je.call(this,n,e)}function gC(n,e){je.call(this,n,e)}function nX(n,e){je.call(this,n,e)}function XD(n,e){je.call(this,n,e)}function VD(n,e){je.call(this,n,e)}function WD(n,e){je.call(this,n,e)}function JD(n,e){je.call(this,n,e)}function QD(n,e){je.call(this,n,e)}function YD(n,e){je.call(this,n,e)}function ZD(n,e){je.call(this,n,e)}function HCn(n,e){this.b=n,this.a=e}function eX(n,e){je.call(this,n,e)}function qCn(n,e){this.a=n,this.b=e}function UCn(n,e){this.a=n,this.b=e}function GCn(n,e){this.a=n,this.b=e}function tX(n,e){je.call(this,n,e)}function iX(n,e){je.call(this,n,e)}function zCn(n,e){this.a=n,this.b=e}function ble(n,e){return k4(),e!=n}function b7(n){return oe(n.a),n.b}function nL(n){return yCe(n,n.c),n}function XCn(){return tEn(),new TQn}function VCn(){VC(),this.a=new kV}function WCn(){OA(),this.a=new ni}function JCn(){NN(),this.b=new ni}function QCn(n,e){this.b=n,this.d=e}function YCn(n,e){this.a=n,this.b=e}function ZCn(n,e){this.a=n,this.b=e}function nMn(n,e){this.a=n,this.b=e}function eMn(n,e){this.b=n,this.a=e}function rX(n,e){je.call(this,n,e)}function cX(n,e){je.call(this,n,e)}function pC(n,e){je.call(this,n,e)}function u0(n,e){je.call(this,n,e)}function eL(n,e){je.call(this,n,e)}function mC(n,e){je.call(this,n,e)}function uX(n,e){je.call(this,n,e)}function oX(n,e){je.call(this,n,e)}function w7(n,e){je.call(this,n,e)}function sX(n,e){je.call(this,n,e)}function tL(n,e){je.call(this,n,e)}function vC(n,e){je.call(this,n,e)}function iL(n,e){je.call(this,n,e)}function rL(n,e){je.call(this,n,e)}function cL(n,e){je.call(this,n,e)}function uL(n,e){je.call(this,n,e)}function fX(n,e){je.call(this,n,e)}function oL(n,e){je.call(this,n,e)}function hX(n,e){je.call(this,n,e)}function g7(n,e){je.call(this,n,e)}function sL(n,e){je.call(this,n,e)}function lX(n,e){je.call(this,n,e)}function p7(n,e){je.call(this,n,e)}function aX(n,e){je.call(this,n,e)}function tMn(n,e){this.b=n,this.a=e}function iMn(n,e){this.b=n,this.a=e}function rMn(n,e){this.b=n,this.a=e}function cMn(n,e){this.b=n,this.a=e}function dX(n,e){this.a=n,this.b=e}function uMn(n,e){this.a=n,this.b=e}function oMn(n,e){this.a=n,this.b=e}function V(n,e){this.a=n,this.b=e}function k6(n,e){je.call(this,n,e)}function m7(n,e){je.call(this,n,e)}function wp(n,e){je.call(this,n,e)}function y6(n,e){je.call(this,n,e)}function v7(n,e){je.call(this,n,e)}function fL(n,e){je.call(this,n,e)}function kC(n,e){je.call(this,n,e)}function j6(n,e){je.call(this,n,e)}function hL(n,e){je.call(this,n,e)}function yC(n,e){je.call(this,n,e)}function dg(n,e){je.call(this,n,e)}function k7(n,e){je.call(this,n,e)}function E6(n,e){je.call(this,n,e)}function C6(n,e){je.call(this,n,e)}function y7(n,e){je.call(this,n,e)}function jC(n,e){je.call(this,n,e)}function bg(n,e){je.call(this,n,e)}function lL(n,e){je.call(this,n,e)}function sMn(n,e){je.call(this,n,e)}function EC(n,e){je.call(this,n,e)}function fMn(n,e){this.a=n,this.b=e}function hMn(n,e){this.a=n,this.b=e}function lMn(n,e){this.a=n,this.b=e}function aMn(n,e){this.a=n,this.b=e}function dMn(n,e){this.a=n,this.b=e}function bMn(n,e){this.a=n,this.b=e}function bi(n,e){this.a=n,this.b=e}function wMn(n,e){this.a=n,this.b=e}function gMn(n,e){this.a=n,this.b=e}function pMn(n,e){this.a=n,this.b=e}function mMn(n,e){this.a=n,this.b=e}function vMn(n,e){this.a=n,this.b=e}function kMn(n,e){this.a=n,this.b=e}function yMn(n,e){this.b=n,this.a=e}function jMn(n,e){this.b=n,this.a=e}function EMn(n,e){this.b=n,this.a=e}function CMn(n,e){this.b=n,this.a=e}function MMn(n,e){this.a=n,this.b=e}function TMn(n,e){this.a=n,this.b=e}function CC(n,e){je.call(this,n,e)}function AMn(n,e){this.a=n,this.b=e}function SMn(n,e){this.a=n,this.b=e}function gp(n,e){je.call(this,n,e)}function PMn(n,e){this.f=n,this.c=e}function bX(n,e){return Au(n.g,e)}function wle(n,e){return Au(e.b,n)}function IMn(n,e){return wx(n.a,e)}function gle(n,e){return-n.b.af(e)}function ple(n,e){n&&Xe(hE,n,e)}function wX(n,e){n.i=null,kT(n,e)}function mle(n,e,t){yKn(e,oF(n,t))}function vle(n,e,t){yKn(e,oF(n,t))}function kle(n,e){VMe(n.a,u(e,58))}function OMn(n,e){U4e(n.a,u(e,12))}function MC(n,e){this.a=n,this.b=e}function DMn(n,e){this.a=n,this.b=e}function LMn(n,e){this.a=n,this.b=e}function NMn(n,e){this.a=n,this.b=e}function $Mn(n,e){this.a=n,this.b=e}function xMn(n,e){this.d=n,this.b=e}function FMn(n,e){this.e=n,this.a=e}function j7(n,e){this.b=n,this.c=e}function gX(n,e){this.i=n,this.g=e}function pX(n,e){this.d=n,this.e=e}function yle(n,e){cme(new ne(n),e)}function TC(n){return Rk(n.c,n.b)}function Kr(n){return n?n.md():null}function x(n){return n??null}function Ai(n){return typeof n===nB}function Nb(n){return typeof n===i3}function $b(n){return typeof n===dtn}function o0(n,e){return Ec(n,e)==0}function AC(n,e){return Ec(n,e)>=0}function M6(n,e){return Ec(n,e)!=0}function SC(n,e){return jve(n.Kc(),e)}function _1(n,e){return n.Rd().Xb(e)}function BMn(n){return eo(n),n.d.gc()}function PC(n){return F6(n==null),n}function T6(n,e){return n.a+=""+e,n}function Er(n,e){return n.a+=""+e,n}function A6(n,e){return n.a+=""+e,n}function Dc(n,e){return n.a+=""+e,n}function Be(n,e){return n.a+=""+e,n}function mX(n,e){return n.a+=""+e,n}function jle(n){return""+(Jn(n),n)}function RMn(n){Hu(this),f5(this,n)}function KMn(){oJ(),dW.call(this)}function _Mn(n,e){mW.call(this,n,e)}function HMn(n,e){mW.call(this,n,e)}function IC(n,e){mW.call(this,n,e)}function ir(n,e){xt(n,e,n.c.b,n.c)}function wg(n,e){xt(n,e,n.a,n.a.a)}function vX(n){return Ln(n,0),null}function qMn(){this.b=0,this.a=!1}function UMn(){this.b=0,this.a=!1}function GMn(){this.b=new ap(Qb(12))}function zMn(){zMn=F,kYn=Ce(jx())}function XMn(){XMn=F,HZn=Ce(iqn())}function VMn(){VMn=F,lre=Ce(xxn())}function kX(){kX=F,_G(),fun=new de}function sf(n){return n.a=0,n.b=0,n}function WMn(n,e){return n.a=e.g+1,n}function aL(n,e){Kb.call(this,n,e)}function Mn(n,e){Dt.call(this,n,e)}function gg(n,e){gX.call(this,n,e)}function JMn(n,e){T7.call(this,n,e)}function dL(n,e){Y4.call(this,n,e)}function Ue(n,e){iC(),Xe(yO,n,e)}function QMn(n,e){n.q.setTime(id(e))}function Ele(n){y.clearTimeout(n)}function Cle(n){return Se(n),new S6(n)}function YMn(n,e){return x(n)===x(e)}function ZMn(n,e){return n.a.a.a.cc(e)}function bL(n,e){return qo(n.a,0,e)}function yX(n){return Awe(u(n,74))}function pp(n){return wi((Jn(n),n))}function Mle(n){return wi((Jn(n),n))}function nTn(n){return Yc(n.l,n.m,n.h)}function jX(n,e){return jc(n.a,e.a)}function Tle(n,e){return KPn(n.a,e.a)}function Ale(n,e){return bt(n.a,e.a)}function th(n,e){return n.indexOf(e)}function Sle(n,e){return n.j[e.p]==2}function s0(n,e){return n==e?0:n?1:-1}function OC(n){return n<10?"0"+n:""+n}function Vr(n){return typeof n===dtn}function Ple(n){return n==rb||n==Iw}function Ile(n){return n==rb||n==Pw}function eTn(n,e){return jc(n.g,e.g)}function EX(n){return qr(n.b.b,n,0)}function tTn(){rM.call(this,0,0,0,0)}function ih(){CG.call(this,new Ql)}function CX(n,e){F4(n,0,n.length,e)}function Ole(n,e){return nn(n.a,e),e}function Dle(n,e){return xs(),e.a+=n}function Lle(n,e){return xs(),e.a+=n}function Nle(n,e){return xs(),e.c+=n}function $le(n,e){return nn(n.c,e),n}function MX(n,e){return Mo(n.a,e),n}function iTn(n){this.a=XCn(),this.b=n}function rTn(n){this.a=XCn(),this.b=n}function rr(n){this.a=n.a,this.b=n.b}function S6(n){this.a=n,GO.call(this)}function cTn(n){this.a=n,GO.call(this)}function mp(){Ho.call(this,0,0,0,0)}function DC(n){return Mo(new ii,n)}function uTn(n){return jM(u(n,123))}function fo(n){return n.vh()&&n.wh()}function pg(n){return n!=Jf&&n!=Sa}function hl(n){return n==Br||n==Xr}function mg(n){return n==us||n==Vf}function oTn(n){return n==S2||n==A2}function xle(n,e){return jc(n.g,e.g)}function sTn(n,e){return new Y4(e,n)}function Fle(n,e){return new Y4(e,n)}function TX(n){return rbe(n.b.Kc(),n.a)}function wL(n,e){um(n,e),G4(n,n.D)}function gL(n,e,t){aT(n,e),lT(n,t)}function vg(n,e,t){I0(n,e),P0(n,t)}function Ro(n,e,t){eu(n,e),tu(n,t)}function E7(n,e,t){_4(n,e),q4(n,t)}function C7(n,e,t){H4(n,e),U4(n,t)}function fTn(n,e,t){sV.call(this,n,e,t)}function AX(n){PMn.call(this,n,!0)}function hTn(){uC.call(this,"Tail",3)}function lTn(){uC.call(this,"Head",1)}function H1(n){dh(),mve.call(this,n)}function f0(n){rM.call(this,n,n,n,n)}function pL(n){n.c=K(ki,Fn,1,0,5,1)}function SX(n){return n.b&&xF(n),n.a}function PX(n){return n.b&&xF(n),n.c}function Ble(n,e){qf||(n.b=e)}function Rle(n,e){return n[n.length]=e}function Kle(n,e){return n[n.length]=e}function _le(n,e){return Yb(e,Af(n))}function Hle(n,e){return Yb(e,Af(n))}function qle(n,e){return pT(dN(n.d),e)}function Ule(n,e){return pT(dN(n.g),e)}function Gle(n,e){return pT(dN(n.j),e)}function Ni(n,e){Dt.call(this,n.b,e)}function zle(n,e){ve(Sc(n.a),DOn(e))}function Xle(n,e){ve(no(n.a),LOn(e))}function Vle(n,e,t){Ro(t,t.i+n,t.j+e)}function aTn(n,e,t){$t(n.c[e.g],e.g,t)}function Wle(n,e,t){u(n.c,71).Gi(e,t)}function mL(n,e,t){return $t(n,e,t),t}function dTn(n){nu(n.Sf(),new D9n(n))}function kg(n){return n!=null?mt(n):0}function Jle(n){return n==null?0:mt(n)}function P6(n){nt(),Wd.call(this,n)}function bTn(n){this.a=n,qV.call(this,n)}function Mf(){Mf=F,y.Math.log(2)}function Ko(){Ko=F,rl=(pCn(),Moe)}function wTn(){wTn=F,YH=new j5(aU)}function Ie(){Ie=F,new gTn,new Z}function gTn(){new de,new de,new de}function Qle(){throw M(new Kl(QJn))}function Yle(){throw M(new Kl(QJn))}function Zle(){throw M(new Kl(YJn))}function n1e(){throw M(new Kl(YJn))}function vL(n){this.a=n,VE.call(this,n)}function kL(n){this.a=n,VE.call(this,n)}function pTn(n,e){m0(),this.a=n,this.b=e}function e1e(n,e){Se(e),Tg(n).Jc(new Ru)}function Yt(n,e){QL(n.c,n.c.length,e)}function tc(n){return n.ae?1:0}function OX(n,e){return Ec(n,e)>0?n:e}function Yc(n,e,t){return{l:n,m:e,h:t}}function t1e(n,e){n.a!=null&&OMn(e,n.a)}function i1e(n){Zi(n,null),Ii(n,null)}function r1e(n,e,t){return Xe(n.g,t,e)}function yg(n,e,t){return nZ(e,t,n.c)}function c1e(n,e,t){return Xe(n.k,t,e)}function u1e(n,e,t){return GOe(n,e,t),t}function o1e(n,e){return ko(),e.n.b+=n}function vTn(n){nJ.call(this),this.b=n}function DX(n){vV.call(this),this.a=n}function kTn(){uC.call(this,"Range",2)}function LC(n){this.b=n,this.a=new Z}function yTn(n){this.b=new $bn,this.a=n}function jTn(n){n.a=new OO,n.c=new OO}function ETn(n){n.a=new de,n.d=new de}function CTn(n){$N(n,null),xN(n,null)}function MTn(n,e){return XOe(n.a,e,null)}function s1e(n,e){return Xe(n.a,e.a,e)}function Ki(n){return new V(n.a,n.b)}function LX(n){return new V(n.c,n.d)}function f1e(n){return new V(n.c,n.d)}function I6(n,e){return cOe(n.c,n.b,e)}function O(n,e){return n!=null&&Tx(n,e)}function yL(n,e){return Yve(n.Kc(),e)!=-1}function NC(n){return n.Ob()?n.Pb():null}function h1e(n){this.b=(Dn(),new eD(n))}function NX(n){this.a=n,de.call(this)}function TTn(){T7.call(this,null,null)}function ATn(){_C.call(this,null,null)}function STn(){je.call(this,"INSTANCE",0)}function PTn(){LZ(),this.a=new K5(Ion)}function ITn(n){return hh(n,0,n.length)}function l1e(n,e){return new VTn(n.Kc(),e)}function $X(n,e){return n.a.Bc(e)!=null}function OTn(n,e){me(n),n.Gc(u(e,15))}function a1e(n,e,t){n.c.bd(e,u(t,136))}function d1e(n,e,t){n.c.Ui(e,u(t,136))}function DTn(n,e){n.c&&(tW(e),rOn(e))}function b1e(n,e){n.q.setHours(e),G5(n,e)}function w1e(n,e){a0(e,n.a.a.a,n.a.a.b)}function g1e(n,e,t,i){$t(n.a[e.g],t.g,i)}function jL(n,e,t){return n.a[e.g][t.g]}function p1e(n,e){return n.e[e.c.p][e.p]}function m1e(n,e){return n.c[e.c.p][e.p]}function Tf(n,e){return n.a[e.c.p][e.p]}function v1e(n,e){return n.j[e.p]=IMe(e)}function EL(n,e){return n.a.Bc(e)!=null}function k1e(n,e){return $(R(e.a))<=n}function y1e(n,e){return $(R(e.a))>=n}function j1e(n,e){return RJ(n.f,e.Pg())}function vp(n,e){return n.a*e.a+n.b*e.b}function E1e(n,e){return n.a0?e/(n*n):e*100}function V1e(n,e){return n>0?e*e/n:e*e*100}function xb(n,e){return u(Lf(n.a,e),34)}function W1e(n,e){return ca(),Pn(n,e.e,e)}function J1e(n,e,t){return nC(),t.Mg(n,e)}function Q1e(n){return kl(),n.e.a+n.f.a/2}function Y1e(n,e,t){return kl(),t.e.a-n*e}function Z1e(n){return kl(),n.e.b+n.f.b/2}function nae(n,e,t){return kl(),t.e.b-n*e}function sAn(n){n.d=new cAn(n),n.e=new de}function fAn(){this.a=new C0,this.b=new C0}function hAn(n){this.c=n,this.a=1,this.b=1}function lAn(n){YF(),Syn(this),this.Ff(n)}function eae(n,e,t){YM(),n.pf(e)&&t.Cd(n)}function tae(n,e,t){return nn(e,jBn(n,t))}function a0(n,e,t){return n.a+=e,n.b+=t,n}function iae(n,e,t){return n.a*=e,n.b*=t,n}function ZX(n,e){return n.a=e.a,n.b=e.b,n}function HC(n){return n.a=-n.a,n.b=-n.b,n}function N6(n,e,t){return n.a-=e,n.b-=t,n}function aAn(n){Ct.call(this),c5(this,n)}function dAn(){je.call(this,"GROW_TREE",0)}function bAn(){je.call(this,"POLYOMINO",0)}function lo(n,e,t){Iu.call(this,n,e,t,2)}function rae(n,e,t){k5(Sc(n.a),e,DOn(t))}function wAn(n,e){a6(),T7.call(this,n,e)}function nV(n,e){Gl(),_C.call(this,n,e)}function gAn(n,e){Gl(),nV.call(this,n,e)}function pAn(n,e){Gl(),_C.call(this,n,e)}function cae(n,e){return n.c.Fc(u(e,136))}function uae(n,e,t){k5(no(n.a),e,LOn(t))}function mAn(n){this.c=n,eu(n,0),tu(n,0)}function PL(n,e){Ko(),oM.call(this,n,e)}function vAn(n,e){Ko(),PL.call(this,n,e)}function eV(n,e){Ko(),PL.call(this,n,e)}function tV(n,e){Ko(),oM.call(this,n,e)}function kAn(n,e){Ko(),eV.call(this,n,e)}function yAn(n,e){Ko(),tV.call(this,n,e)}function jAn(n,e){Ko(),oM.call(this,n,e)}function oae(n,e,t){return e.zl(n.e,n.c,t)}function sae(n,e,t){return e.Al(n.e,n.c,t)}function iV(n,e,t){return qA(ak(n,e),t)}function IL(n,e){return na(n.e,u(e,54))}function fae(n){return n==null?null:NDe(n)}function hae(n){return n==null?null:Aje(n)}function lae(n){return n==null?null:Jr(n)}function aae(n){return n==null?null:Jr(n)}function un(n){return F6(n==null||Nb(n)),n}function R(n){return F6(n==null||$b(n)),n}function Oe(n){return F6(n==null||Ai(n)),n}function ll(n){n.o==null&&cMe(n)}function rV(n){if(!n)throw M(new Q9)}function dae(n){if(!n)throw M(new uD)}function oe(n){if(!n)throw M(new nc)}function Fb(n){if(!n)throw M(new Cu)}function EAn(n){if(!n)throw M(new Bo)}function m4(){m4=F,aE=new ujn,new ojn}function Mg(){Mg=F,O2=new lt("root")}function cV(){cxn.call(this),this.Bb|=hr}function bae(n,e){this.d=n,c9n(this),this.b=e}function uV(n,e){i$.call(this,n),this.a=e}function oV(n,e){i$.call(this,n),this.a=e}function sV(n,e,t){VM.call(this,n,e,t,null)}function CAn(n,e,t){VM.call(this,n,e,t,null)}function P7(n,e){this.c=n,h4.call(this,n,e)}function $6(n,e){this.a=n,P7.call(this,n,e)}function fV(n){this.q=new y.Date(id(n))}function MAn(n){return n>8?0:n+1}function TAn(n,e){qf||nn(n.a,e)}function wae(n,e){return o7(),Q4(e.d.i,n)}function gae(n,e){return Hp(),new tUn(e,n)}function pae(n,e,t){return n.Ne(e,t)<=0?t:e}function mae(n,e,t){return n.Ne(e,t)<=0?e:t}function vae(n,e){return u(Lf(n.b,e),143)}function kae(n,e){return u(Lf(n.c,e),233)}function OL(n){return u(sn(n.a,n.b),294)}function AAn(n){return new V(n.c,n.d+n.a)}function SAn(n){return Jn(n),n?1231:1237}function PAn(n){return ko(),oTn(u(n,203))}function Bb(){Bb=F,ron=yn((go(),Gd))}function yae(n,e){e.a?MCe(n,e):EL(n.a,e.b)}function I7(n,e,t){++n.j,n.tj(),t$(n,e,t)}function IAn(n,e,t){++n.j,n.qj(e,n.Zi(e,t))}function OAn(n,e,t){var i;i=n.fd(e),i.Rb(t)}function hV(n,e,t){return t=So(n,e,6,t),t}function lV(n,e,t){return t=So(n,e,3,t),t}function aV(n,e,t){return t=So(n,e,9,t),t}function ch(n,e){return X7(e,xtn),n.f=e,n}function dV(n,e){return(e&et)%n.d.length}function DAn(n,e,t){return zen(n.c,n.b,e,t)}function LAn(n,e){this.c=n,S0.call(this,e)}function NAn(n,e){this.a=n,kyn.call(this,e)}function O7(n,e){this.a=n,kyn.call(this,e)}function Dt(n,e){lt.call(this,n),this.a=e}function bV(n,e){FG.call(this,n),this.a=e}function DL(n,e){FG.call(this,n),this.a=e}function jae(n){VY.call(this,0,0),this.f=n}function $An(n,e,t){return n.a+=hh(e,0,t),n}function D7(n){return!n.a&&(n.a=new C0n),n.a}function wV(n,e){var t;return t=n.e,n.e=e,t}function gV(n,e){var t;return t=e,!!n.Fe(t)}function Eae(n,e){return _n(),n==e?0:n?1:-1}function Rb(n,e){n.a.bd(n.b,e),++n.b,n.c=-1}function L7(n){n.b?L7(n.b):n.f.c.zc(n.e,n.d)}function xAn(n){Hu(n.e),n.d.b=n.d,n.d.a=n.d}function Cae(n,e,t){Xa(),t9n(n,e.Ve(n.a,t))}function pV(n,e,t){return Pp(n,u(e,22),t)}function $s(n,e){return qE(new Array(e),n)}function Mae(n){return Ae(U1(n,32))^Ae(n)}function LL(n){return String.fromCharCode(n)}function Tae(n){return n==null?null:n.message}function Aae(n,e,t){return n.apply(e,t)}function Sae(n,e){var t;t=n[DB],t.call(n,e)}function Pae(n,e){var t;t=n[DB],t.call(n,e)}function Iae(n,e){return o7(),!Q4(e.d.i,n)}function mV(n,e,t,i){rM.call(this,n,e,t,i)}function FAn(){qC.call(this),this.a=new Li}function vV(){this.n=new Li,this.o=new Li}function BAn(){this.b=new Li,this.c=new Z}function RAn(){this.a=new Z,this.b=new Z}function KAn(){this.a=new _U,this.b=new Byn}function kV(){this.b=new Ql,this.a=new Ql}function _An(){this.b=new ni,this.a=new ni}function HAn(){this.b=new de,this.a=new de}function qAn(){this.b=new wEn,this.a=new H3n}function UAn(){this.a=new n8n,this.b=new Lpn}function GAn(){this.a=new Z,this.d=new Z}function qC(){this.n=new cp,this.i=new mp}function zAn(n){this.a=(Co(n,mw),new Gc(n))}function XAn(n){this.a=(Co(n,mw),new Gc(n))}function Oae(n){return n<100?null:new F1(n)}function Dae(n,e){return n.n.a=(Jn(e),e+10)}function Lae(n,e){return n.n.a=(Jn(e),e+10)}function Nae(n,e){return e==n||km(TA(e),n)}function VAn(n,e){return Xe(n.a,e,"")==null}function $ae(n,e){var t;return t=e.qi(n.a),t}function tt(n,e){return n.a+=e.a,n.b+=e.b,n}function mi(n,e){return n.a-=e.a,n.b-=e.b,n}function xae(n){return Pb(n.j.c,0),n.a=-1,n}function yV(n,e,t){return t=So(n,e,11,t),t}function Fae(n,e,t){t!=null&&mT(e,Fx(n,t))}function Bae(n,e,t){t!=null&&vT(e,Fx(n,t))}function jp(n,e,t,i){q.call(this,n,e,t,i)}function jV(n,e,t,i){q.call(this,n,e,t,i)}function WAn(n,e,t,i){jV.call(this,n,e,t,i)}function JAn(n,e,t,i){bM.call(this,n,e,t,i)}function NL(n,e,t,i){bM.call(this,n,e,t,i)}function EV(n,e,t,i){bM.call(this,n,e,t,i)}function QAn(n,e,t,i){NL.call(this,n,e,t,i)}function CV(n,e,t,i){NL.call(this,n,e,t,i)}function Nn(n,e,t,i){EV.call(this,n,e,t,i)}function YAn(n,e,t,i){CV.call(this,n,e,t,i)}function ZAn(n,e,t,i){jW.call(this,n,e,t,i)}function Kb(n,e){Ir.call(this,k8+n+Td+e)}function MV(n,e){return n.jk().wi().ri(n,e)}function TV(n,e){return n.jk().wi().ti(n,e)}function nSn(n,e){return Jn(n),x(n)===x(e)}function An(n,e){return Jn(n),x(n)===x(e)}function Rae(n,e){return n.b.Bd(new ECn(n,e))}function Kae(n,e){return n.b.Bd(new CCn(n,e))}function eSn(n,e){return n.b.Bd(new MCn(n,e))}function _ae(n,e){return n.e=u(n.d.Kb(e),159)}function AV(n,e,t){return n.lastIndexOf(e,t)}function Hae(n,e,t){return bt(n[e.a],n[t.a])}function qae(n,e){return U(e,(cn(),Cj),n)}function Uae(n,e){return jc(e.a.d.p,n.a.d.p)}function Gae(n,e){return jc(n.a.d.p,e.a.d.p)}function zae(n,e){return bt(n.c-n.s,e.c-e.s)}function Xae(n,e){return bt(n.b.e.a,e.b.e.a)}function Vae(n,e){return bt(n.c.e.a,e.c.e.a)}function tSn(n){return n.c?qr(n.c.a,n,0):-1}function Ep(n){return n==Ud||n==tl||n==qc}function SV(n,e){this.c=n,oN.call(this,n,e)}function iSn(n,e,t){this.a=n,JX.call(this,e,t)}function rSn(n){this.c=n,IC.call(this,Ey,0)}function cSn(n,e,t){this.c=e,this.b=t,this.a=n}function N7(n){k4(),this.d=n,this.a=new Eg}function uSn(n){uh(),this.a=(Dn(),new r4(n))}function Wae(n,e){hl(n.f)?QCe(n,e):Sye(n,e)}function oSn(n,e){sbe.call(this,n,n.length,e)}function Jae(n,e){qf||e&&(n.d=e)}function sSn(n,e){return O(e,15)&&xqn(n.c,e)}function Qae(n,e,t){return u(n.c,71).Wk(e,t)}function UC(n,e,t){return u(n.c,71).Xk(e,t)}function Yae(n,e,t){return oae(n,u(e,343),t)}function PV(n,e,t){return sae(n,u(e,343),t)}function Zae(n,e,t){return PKn(n,u(e,343),t)}function fSn(n,e,t){return _ye(n,u(e,343),t)}function x6(n,e){return e==null?null:tw(n.b,e)}function IV(n){return $b(n)?(Jn(n),n):n.ue()}function GC(n){return!isNaN(n)&&!isFinite(n)}function $L(n){jTn(this),vo(this),Bi(this,n)}function _u(n){pL(this),zV(this.c,0,n.Pc())}function _o(n,e,t){this.a=n,this.b=e,this.c=t}function hSn(n,e,t){this.a=n,this.b=e,this.c=t}function lSn(n,e,t){this.d=n,this.b=t,this.a=e}function aSn(n){this.a=n,fl(),vc(Date.now())}function dSn(n){bo(n.a),GJ(n.c,n.b),n.b=null}function xL(){xL=F,Oun=new $0n,AQn=new x0n}function bSn(){bSn=F,Ioe=K(ki,Fn,1,0,5,1)}function wSn(){wSn=F,Voe=K(ki,Fn,1,0,5,1)}function OV(){OV=F,Woe=K(ki,Fn,1,0,5,1)}function uh(){uh=F,new KG((Dn(),Dn(),sr))}function nde(n){return B4(),Ee((yNn(),IQn),n)}function ede(n){return Gu(),Ee((lNn(),xQn),n)}function tde(n){return YT(),Ee((JDn(),HQn),n)}function ide(n){return cT(),Ee((QDn(),qQn),n)}function rde(n){return NA(),Ee((Jxn(),UQn),n)}function cde(n){return bf(),Ee((fNn(),XQn),n)}function ude(n){return Uu(),Ee((sNn(),WQn),n)}function ode(n){return bu(),Ee((hNn(),QQn),n)}function sde(n){return VA(),Ee((zMn(),kYn),n)}function fde(n){return N0(),Ee((ENn(),jYn),n)}function hde(n){return Vp(),Ee((MNn(),CYn),n)}function lde(n){return A5(),Ee((CNn(),AYn),n)}function ade(n){return YE(),Ee((jDn(),SYn),n)}function dde(n){return uT(),Ee((YDn(),GYn),n)}function bde(n){return i5(),Ee((aNn(),pZn),n)}function wde(n){return Vi(),Ee((u$n(),yZn),n)}function gde(n){return nm(),Ee((ANn(),TZn),n)}function pde(n){return dd(),Ee((TNn(),DZn),n)}function DV(n,e){if(!n)throw M(new Gn(e))}function v4(n){if(!n)throw M(new Or(btn))}function FL(n,e){if(n!=e)throw M(new Bo)}function gSn(n,e,t){this.a=n,this.b=e,this.c=t}function LV(n,e,t){this.a=n,this.b=e,this.c=t}function pSn(n,e,t){this.a=n,this.b=e,this.c=t}function zC(n,e,t){this.b=n,this.a=e,this.c=t}function NV(n,e,t){this.b=n,this.c=e,this.a=t}function $V(n,e,t){this.a=n,this.b=e,this.c=t}function XC(n,e,t){this.e=e,this.b=n,this.d=t}function mSn(n,e,t){this.b=n,this.a=e,this.c=t}function mde(n,e,t){return Xa(),n.a.Yd(e,t),e}function BL(n){var e;return e=new ubn,e.e=n,e}function xV(n){var e;return e=new qyn,e.b=n,e}function $7(){$7=F,CP=new sgn,MP=new fgn}function VC(){VC=F,XZn=new xgn,zZn=new Fgn}function xs(){xs=F,YZn=new G2n,ZZn=new z2n}function vde(n){return D0(),Ee((qLn(),fne),n)}function kde(n){return tr(),Ee((XMn(),HZn),n)}function yde(n){return OT(),Ee((PNn(),GZn),n)}function jde(n){return $f(),Ee((SNn(),tne),n)}function Ede(n){return ow(),Ee((o$n(),rne),n)}function Cde(n){return DA(),Ee(($xn(),hne),n)}function Mde(n){return Yp(),Ee((D$n(),lne),n)}function Tde(n){return QM(),Ee((cLn(),ane),n)}function Ade(n){return u5(),Ee((_Ln(),dne),n)}function Sde(n){return bT(),Ee((HLn(),bne),n)}function Pde(n){return o1(),Ee((s$n(),wne),n)}function Ide(n){return pk(),Ee((eLn(),gne),n)}function Ode(n){return jm(),Ee(($$n(),jne),n)}function Dde(n){return pr(),Ee((aFn(),Ene),n)}function Lde(n){return Z4(),Ee((GLn(),Cne),n)}function Nde(n){return vl(),Ee((zLn(),Tne),n)}function $de(n){return KM(),Ee((nLn(),Ane),n)}function xde(n){return Jk(),Ee((N$n(),yne),n)}function Fde(n){return hd(),Ee((ULn(),mne),n)}function Bde(n){return vA(),Ee((L$n(),vne),n)}function Rde(n){return hk(),Ee((tLn(),kne),n)}function Kde(n){return Yo(),Ee((h$n(),Sne),n)}function _de(n){return a1(),Ee((Xxn(),Yte),n)}function Hde(n){return g5(),Ee((XLn(),Zte),n)}function qde(n){return cw(),Ee((INn(),nie),n)}function Ude(n){return T5(),Ee((f$n(),eie),n)}function Gde(n){return gs(),Ee((dFn(),tie),n)}function zde(n){return lh(),Ee((ONn(),iie),n)}function Xde(n){return wk(),Ee((iLn(),rie),n)}function Vde(n){return gr(),Ee((JLn(),uie),n)}function Wde(n){return ST(),Ee((VLn(),oie),n)}function Jde(n){return d5(),Ee((WLn(),sie),n)}function Qde(n){return om(),Ee((QLn(),fie),n)}function Yde(n){return dT(),Ee((YLn(),hie),n)}function Zde(n){return DT(),Ee((ZLn(),lie),n)}function n0e(n){return O0(),Ee((oNn(),Aie),n)}function e0e(n){return n5(),Ee((rLn(),Die),n)}function t0e(n){return sh(),Ee((sLn(),Rie),n)}function i0e(n){return Sf(),Ee((fLn(),_ie),n)}function r0e(n){return lf(),Ee((hLn(),tre),n)}function c0e(n){return M0(),Ee((lLn(),fre),n)}function u0e(n){return Qp(),Ee((BNn(),hre),n)}function o0e(n){return q5(),Ee((VMn(),lre),n)}function s0e(n){return b5(),Ee((nNn(),are),n)}function f0e(n){return w5(),Ee((FNn(),$re),n)}function h0e(n){return FM(),Ee((uLn(),xre),n)}function l0e(n){return yT(),Ee((oLn(),_re),n)}function a0e(n){return wA(),Ee((l$n(),qre),n)}function d0e(n){return Ok(),Ee((eNn(),Gre),n)}function b0e(n){return ZM(),Ee((aLn(),Ure),n)}function w0e(n){return sA(),Ee((xNn(),lce),n)}function g0e(n){return AT(),Ee((tNn(),ace),n)}function p0e(n){return XT(),Ee((iNn(),dce),n)}function m0e(n){return rA(),Ee((rNn(),wce),n)}function v0e(n){return _T(),Ee((cNn(),mce),n)}function k0e(n){return GM(),Ee((dLn(),Rce),n)}function y0e(n){return V4(),Ee((ZDn(),_Zn),n)}function j0e(n){return Vn(),Ee((x$n(),xZn),n)}function E0e(n){return nT(),Ee((uNn(),Kce),n)}function C0e(n){return N$(),Ee((bLn(),_ce),n)}function M0e(n){return R5(),Ee((a$n(),qce),n)}function T0e(n){return eC(),Ee((IDn(),Gce),n)}function A0e(n){return Fk(),Ee((bNn(),Uce),n)}function S0e(n){return tC(),Ee((ODn(),Xce),n)}function P0e(n){return ck(),Ee((wLn(),Vce),n)}function I0e(n){return Yk(),Ee((d$n(),Wce),n)}function O0e(n){return f6(),Ee((DDn(),lue),n)}function D0e(n){return Ak(),Ee((gLn(),aue),n)}function L0e(n){return gf(),Ee((w$n(),mue),n)}function N0e(n){return l1(),Ee((Lxn(),kue),n)}function $0e(n){return Rh(),Ee((F$n(),yue),n)}function x0e(n){return wd(),Ee((B$n(),Aue),n)}function F0e(n){return ci(),Ee((b$n(),zue),n)}function B0e(n){return Nf(),Ee((wNn(),Xue),n)}function R0e(n){return El(),Ee((RNn(),Vue),n)}function K0e(n){return pA(),Ee((R$n(),Wue),n)}function _0e(n){return jl(),Ee((dNn(),Que),n)}function H0e(n){return To(),Ee((KNn(),Zue),n)}function q0e(n){return lw(),Ee((Wxn(),noe),n)}function U0e(n){return Fg(),Ee((g$n(),eoe),n)}function G0e(n){return Oi(),Ee((K$n(),toe),n)}function z0e(n){return zu(),Ee((_$n(),ioe),n)}function X0e(n){return tn(),Ee((p$n(),roe),n)}function V0e(n){return go(),Ee((_Nn(),foe),n)}function W0e(n){return io(),Ee((Vxn(),hoe),n)}function J0e(n){return Gp(),Ee((gNn(),loe),n)}function Q0e(n,e){return Jn(n),n+(Jn(e),e)}function Y0e(n){return RL(),Ee((pLn(),aoe),n)}function Z0e(n){return qT(),Ee((HNn(),doe),n)}function nbe(n){return LT(),Ee((qNn(),goe),n)}function k4(){k4=F,tln=(tn(),Wn),II=Zn}function RL(){RL=F,vdn=new VSn,kdn=new LPn}function ebe(n){return!n.e&&(n.e=new Z),n.e}function KL(n,e){this.c=n,this.a=e,this.b=e-n}function vSn(n,e,t){this.a=n,this.b=e,this.c=t}function _L(n,e,t){this.a=n,this.b=e,this.c=t}function FV(n,e,t){this.a=n,this.b=e,this.c=t}function BV(n,e,t){this.a=n,this.b=e,this.c=t}function kSn(n,e,t){this.a=n,this.b=e,this.c=t}function ySn(n,e,t){this.a=n,this.b=e,this.c=t}function Xl(n,e,t){this.e=n,this.a=e,this.c=t}function jSn(n,e,t){Ko(),tJ.call(this,n,e,t)}function HL(n,e,t){Ko(),RW.call(this,n,e,t)}function RV(n,e,t){Ko(),RW.call(this,n,e,t)}function KV(n,e,t){Ko(),RW.call(this,n,e,t)}function ESn(n,e,t){Ko(),HL.call(this,n,e,t)}function _V(n,e,t){Ko(),HL.call(this,n,e,t)}function CSn(n,e,t){Ko(),_V.call(this,n,e,t)}function MSn(n,e,t){Ko(),RV.call(this,n,e,t)}function TSn(n,e,t){Ko(),KV.call(this,n,e,t)}function qL(n){rM.call(this,n.d,n.c,n.a,n.b)}function HV(n){rM.call(this,n.d,n.c,n.a,n.b)}function qV(n){this.d=n,c9n(this),this.b=nwe(n.d)}function tbe(n){return Cm(),Ee((Nxn(),Poe),n)}function x7(n,e){return Se(n),Se(e),new NEn(n,e)}function Cp(n,e){return Se(n),Se(e),new RSn(n,e)}function ibe(n,e){return Se(n),Se(e),new KSn(n,e)}function rbe(n,e){return Se(n),Se(e),new qEn(n,e)}function UL(n){return oe(n.b!=0),Xo(n,n.a.a)}function cbe(n){return oe(n.b!=0),Xo(n,n.c.b)}function ube(n){return!n.c&&(n.c=new W3),n.c}function y4(n){var e;return e=new Z,b$(e,n),e}function obe(n){var e;return e=new ni,b$(e,n),e}function ASn(n){var e;return e=new GG,A$(e,n),e}function F7(n){var e;return e=new Ct,A$(e,n),e}function u(n,e){return F6(n==null||Tx(n,e)),n}function sbe(n,e,t){TPn.call(this,e,t),this.a=n}function SSn(n,e){this.c=n,this.b=e,this.a=!1}function PSn(){this.a=";,;",this.b="",this.c=""}function ISn(n,e,t){this.b=n,_Mn.call(this,e,t)}function UV(n,e,t){this.c=n,oC.call(this,e,t)}function GV(n,e,t){d4.call(this,n,e),this.b=t}function zV(n,e,t){Bnn(t,0,n,e,t.length,!1)}function Lh(n,e,t,i,r){n.b=e,n.c=t,n.d=i,n.a=r}function XV(n,e,t,i,r){n.d=e,n.c=t,n.a=i,n.b=r}function fbe(n,e){e&&(n.b=e,n.a=(z1(e),e.a))}function B7(n,e){if(!n)throw M(new Gn(e))}function Mp(n,e){if(!n)throw M(new Or(e))}function VV(n,e){if(!n)throw M(new Bjn(e))}function hbe(n,e){return ZE(),jc(n.d.p,e.d.p)}function lbe(n,e){return kl(),bt(n.e.b,e.e.b)}function abe(n,e){return kl(),bt(n.e.a,e.e.a)}function dbe(n,e){return jc(GSn(n.d),GSn(e.d))}function WC(n,e){return e&&vM(n,e.d)?e:null}function bbe(n,e){return e==(tn(),Wn)?n.c:n.d}function WV(n){return Q1(dwe(Vr(n)?ds(n):n))}function wbe(n){return new V(n.c+n.b,n.d+n.a)}function OSn(n){return n!=null&&!lx(n,N9,$9)}function gbe(n,e){return(fBn(n)<<4|fBn(e))&ui}function DSn(n,e,t,i,r){n.c=e,n.d=t,n.b=i,n.a=r}function JV(n){var e,t;e=n.b,t=n.c,n.b=t,n.c=e}function QV(n){var e,t;t=n.d,e=n.a,n.d=e,n.a=t}function pbe(n,e){var t;return t=n.c,PQ(n,e),t}function YV(n,e){return e<0?n.g=-1:n.g=e,n}function JC(n,e){return Mme(n),n.a*=e,n.b*=e,n}function LSn(n,e,t){A$n.call(this,e,t),this.d=n}function R7(n,e,t){pX.call(this,n,e),this.c=t}function QC(n,e,t){pX.call(this,n,e),this.c=t}function ZV(n){OV(),ME.call(this),this.ci(n)}function NSn(){$4(),Bwe.call(this,(R1(),Ss))}function $Sn(n){return nt(),new Nh(0,n)}function xSn(){xSn=F,AU=(Dn(),new nD(IK))}function YC(){YC=F,new hZ((bD(),HK),(dD(),_K))}function FSn(){FSn=F,pun=K(Gi,J,17,256,0,1)}function BSn(){this.b=$(R(rn((qs(),y_))))}function GL(n){this.b=n,this.a=Wa(this.b.a).Od()}function RSn(n,e){this.b=n,this.a=e,GO.call(this)}function KSn(n,e){this.a=n,this.b=e,GO.call(this)}function _Sn(n,e,t){this.a=n,gg.call(this,e,t)}function HSn(n,e,t){this.a=n,gg.call(this,e,t)}function j4(n,e,t){var i;i=new qb(t),df(n,e,i)}function nW(n,e,t){var i;return i=n[e],n[e]=t,i}function ZC(n){var e;return e=n.slice(),o$(e,n)}function nM(n){var e;return e=n.n,n.a.b+e.d+e.a}function qSn(n){var e;return e=n.n,n.e.b+e.d+e.a}function eW(n){var e;return e=n.n,n.e.a+e.b+e.c}function tW(n){n.a.b=n.b,n.b.a=n.a,n.a=n.b=null}function xe(n,e){return xt(n,e,n.c.b,n.c),!0}function mbe(n){return n.a?n.a:vN(n)}function vbe(n){return Lp(),Kh(n)==At(ia(n))}function kbe(n){return Lp(),ia(n)==At(Kh(n))}function d0(n,e){return O5(n,new d4(e.a,e.b))}function ybe(n,e){return yM(),Nx(n,e),new lIn(n,e)}function jbe(n,e){return n.c=e)throw M(new YG)}function _b(n,e){return $k(n,(Jn(e),new a9n(e)))}function Ap(n,e){return $k(n,(Jn(e),new d9n(e)))}function SPn(n,e,t){return VLe(n,u(e,12),u(t,12))}function PPn(n){return Ou(),u(n,12).g.c.length!=0}function IPn(n){return Ou(),u(n,12).e.c.length!=0}function uwe(n,e){return Hp(),bt(e.a.o.a,n.a.o.a)}function owe(n,e){e.Bb&kc&&!n.a.o&&(n.a.o=e)}function swe(n,e){e.Ug("General 'Rotator",1),jDe(n)}function fwe(n,e,t){e.qf(t,$(R(ee(n.b,t)))*n.a)}function OPn(n,e,t){return Xg(),W4(n,e)&&W4(n,t)}function _6(n){return zu(),!n.Hc(Fl)&&!n.Hc(Pa)}function hwe(n){return n.e?qJ(n.e):null}function H6(n){return Vr(n)?""+n:$qn(n)}function yW(n){var e;for(e=n;e.f;)e=e.f;return e}function lwe(n,e,t){return $t(e,0,oW(e[0],t[0])),e}function Vl(n,e,t,i){var r;r=n.i,r.i=e,r.a=t,r.b=i}function q(n,e,t,i){ti.call(this,n,e,t),this.b=i}function Ci(n,e,t,i,r){c$.call(this,n,e,t,i,r,-1)}function q6(n,e,t,i,r){ok.call(this,n,e,t,i,r,-1)}function bM(n,e,t,i){R7.call(this,n,e,t),this.b=i}function DPn(n){PMn.call(this,n,!1),this.a=!1}function LPn(){sMn.call(this,"LOOKAHEAD_LAYOUT",1)}function NPn(n){this.b=n,kp.call(this,n),RTn(this)}function $Pn(n){this.b=n,A7.call(this,n),KTn(this)}function Hb(n,e,t){this.a=n,jp.call(this,e,t,5,6)}function jW(n,e,t,i){this.b=n,ti.call(this,e,t,i)}function xPn(n,e){this.b=n,H8n.call(this,n.b),this.a=e}function FPn(n){this.a=kRn(n.a),this.b=new _u(n.b)}function EW(n,e){m0(),Hhe.call(this,n,FT(new Ku(e)))}function wM(n,e){return nt(),new BW(n,e,0)}function rN(n,e){return nt(),new BW(6,n,e)}function _i(n,e){for(Jn(e);n.Ob();)e.Cd(n.Pb())}function Zc(n,e){return Ai(e)?AN(n,e):!!wr(n.f,e)}function cN(n,e){return e.Vh()?na(n.b,u(e,54)):e}function awe(n,e){return An(n.substr(0,e.length),e)}function $h(n){return new te(new UX(n.a.length,n.a))}function gM(n){return new V(n.c+n.b/2,n.d+n.a/2)}function dwe(n){return Yc(~n.l&ro,~n.m&ro,~n.h&Il)}function uN(n){return typeof n===vy||typeof n===eB}function Hu(n){n.f=new iTn(n),n.i=new rTn(n),++n.g}function BPn(n){if(!n)throw M(new nc);return n.d}function Sp(n){var e;return e=a5(n),oe(e!=null),e}function bwe(n){var e;return e=I5e(n),oe(e!=null),e}function C4(n,e){var t;return t=n.a.gc(),BJ(e,t),t-e}function fi(n,e){var t;return t=n.a.zc(e,n),t==null}function _7(n,e){return n.a.zc(e,(_n(),wa))==null}function CW(n){return new Tn(null,vwe(n,n.length))}function MW(n,e,t){return cGn(n,u(e,42),u(t,176))}function Pp(n,e,t){return Ks(n.a,e),nW(n.b,e.g,t)}function wwe(n,e,t){E4(t,n.a.c.length),Go(n.a,t,e)}function B(n,e,t,i){xFn(e,t,n.length),gwe(n,e,t,i)}function gwe(n,e,t,i){var r;for(r=e;r0?y.Math.log(n/e):-100}function KPn(n,e){return Ec(n,e)<0?-1:Ec(n,e)>0?1:0}function H7(n,e){OTn(n,O(e,160)?e:u(e,2036).Rl())}function PW(n,e){if(n==null)throw M(new sp(e))}function vwe(n,e){return yme(e,n.length),new XSn(n,e)}function IW(n,e){return e?Bi(n,e):!1}function kwe(){return RE(),S(T(uQn,1),G,549,0,[GK])}function G6(n){return n.e==0?n:new Qa(-n.e,n.d,n.a)}function ywe(n,e){return bt(n.c.c+n.c.b,e.c.c+e.c.b)}function q7(n,e){xt(n.d,e,n.b.b,n.b),++n.a,n.c=null}function _Pn(n,e){return n.c?_Pn(n.c,e):nn(n.b,e),n}function jwe(n,e,t){var i;return i=Jb(n,e),qN(n,e,t),i}function HPn(n,e,t){var i;for(i=0;i=n.g}function $t(n,e,t){return dae(t==null||oPe(n,t)),n[e]=t}function $W(n,e){return zn(e,n.length+1),n.substr(e)}function gN(n,e){for(Jn(e);n.c=n?new Dz:Gme(n-1)}function Hi(n){return!n.a&&n.c?n.c.b:n.a}function KW(n){return O(n,616)?n:new oOn(n)}function z1(n){n.c?z1(n.c):(ea(n),n.d=!0)}function V6(n){n.c?n.c.$e():(n.d=!0,fTe(n))}function sIn(n){n.b=!1,n.c=!1,n.d=!1,n.a=!1}function fIn(n){var e,t;return e=n.c.i.c,t=n.d.i.c,e==t}function _we(n,e){var t;t=n.Ih(e),t>=0?n.ki(t):Pnn(n,e)}function hIn(n,e){n.c<0||n.b.b0;)n=n<<1|(n<0?1:0);return n}function mIn(n,e){var t;return t=new Lc(n),Bn(e.c,t),t}function vIn(n,e){n.u.Hc((zu(),Fl))&&zEe(n,e),h4e(n,e)}function mc(n,e){return x(n)===x(e)||n!=null&&rt(n,e)}function Cr(n,e){return JL(n.a,e)?n.b[u(e,22).g]:null}function nge(){return YE(),S(T(oon,1),G,489,0,[b_])}function ege(){return eC(),S(T($1n,1),G,490,0,[Bq])}function tge(){return tC(),S(T(zce,1),G,558,0,[Rq])}function ige(){return f6(),S(T(tan,1),G,539,0,[Hj])}function jM(n){return!n.n&&(n.n=new q(Ar,n,1,7)),n.n}function mN(n){return!n.c&&(n.c=new q(Qu,n,9,9)),n.c}function UW(n){return!n.c&&(n.c=new Nn(he,n,5,8)),n.c}function rge(n){return!n.b&&(n.b=new Nn(he,n,4,7)),n.b}function U7(n){return n.j.c.length=0,zW(n.c),xae(n.a),n}function P4(n){return n.e==rv&&jfe(n,Y8e(n.g,n.b)),n.e}function G7(n){return n.f==rv&&Cfe(n,q7e(n.g,n.b)),n.f}function Ve(n,e,t,i){return Hxn(n,e,t,!1),BT(n,i),n}function kIn(n,e){this.b=n,oN.call(this,n,e),RTn(this)}function yIn(n,e){this.b=n,SV.call(this,n,e),KTn(this)}function W6(n){this.d=n,this.a=this.d.b,this.b=this.d.c}function GW(n,e){this.b=n,this.c=e,this.a=new dp(this.b)}function Xi(n,e){return zn(e,n.length),n.charCodeAt(e)}function cge(n,e){DY(n,$(yl(e,"x")),$(yl(e,"y")))}function uge(n,e){DY(n,$(yl(e,"x")),$(yl(e,"y")))}function ut(n,e){return ea(n),new Tn(n,new tQ(e,n.a))}function _r(n,e){return ea(n),new Tn(n,new _J(e,n.a))}function Ub(n,e){return ea(n),new uV(n,new ILn(e,n.a))}function EM(n,e){return ea(n),new oV(n,new OLn(e,n.a))}function oge(n,e){return new GIn(u(Se(n),50),u(Se(e),50))}function sge(n,e){return bt(n.d.c+n.d.b/2,e.d.c+e.d.b/2)}function jIn(n,e,t){t.a?tu(n,e.b-n.f/2):eu(n,e.a-n.g/2)}function fge(n,e){return bt(n.g.c+n.g.b/2,e.g.c+e.g.b/2)}function hge(n,e){return $z(),bt((Jn(n),n),(Jn(e),e))}function lge(n){return n!=null&&r7(jO,n.toLowerCase())}function zW(n){var e;for(e=n.Kc();e.Ob();)e.Pb(),e.Qb()}function Tg(n){var e;return e=n.b,!e&&(n.b=e=new N8n(n)),e}function vN(n){var e;return e=Wme(n),e||null}function EIn(n,e){var t,i;return t=n/e,i=wi(t),t>i&&++i,i}function age(n,e,t){var i;i=u(n.d.Kb(t),159),i&&i.Nb(e)}function dge(n,e,t){wIe(n.a,t),zve(t),xCe(n.b,t),$Ie(e,t)}function CM(n,e,t,i){this.a=n,this.c=e,this.b=t,this.d=i}function XW(n,e,t,i){this.c=n,this.b=e,this.a=t,this.d=i}function CIn(n,e,t,i){this.c=n,this.b=e,this.d=t,this.a=i}function Ho(n,e,t,i){this.c=n,this.d=e,this.b=t,this.a=i}function MIn(n,e,t,i){this.a=n,this.d=e,this.c=t,this.b=i}function kN(n,e,t,i){this.a=n,this.e=e,this.d=t,this.c=i}function TIn(n,e,t,i){this.a=n,this.c=e,this.d=t,this.b=i}function yN(n,e,t){this.a=ktn,this.d=n,this.b=e,this.c=t}function Op(n,e,t,i){je.call(this,n,e),this.a=t,this.b=i}function AIn(n,e){this.d=(Jn(n),n),this.a=16449,this.c=e}function SIn(n){this.a=new Z,this.e=K(ye,J,53,n,0,2)}function bge(n){n.Ug("No crossing minimization",1),n.Vg()}function PIn(){ec.call(this,"There is no more element.")}function IIn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function OIn(n,e,t,i){this.a=n,this.b=e,this.c=t,this.d=i}function Za(n,e,t,i){this.e=n,this.a=e,this.c=t,this.d=i}function DIn(n,e,t,i){this.a=n,this.c=e,this.d=t,this.b=i}function LIn(n,e,t,i){Ko(),DLn.call(this,e,t,i),this.a=n}function NIn(n,e,t,i){Ko(),DLn.call(this,e,t,i),this.a=n}function jN(n,e,t){var i,r;return i=utn(n),r=e.ti(t,i),r}function al(n){var e,t;return t=(e=new Jd,e),K4(t,n),t}function EN(n){var e,t;return t=(e=new Jd,e),fnn(t,n),t}function wge(n,e){var t;return t=ee(n.f,e),HQ(e,t),null}function $In(n){return!n.b&&(n.b=new q(Vt,n,12,3)),n.b}function xIn(n){return F6(n==null||uN(n)&&n.Tm!==J2),n}function MM(n){return n.n&&(n.e!==Fzn&&n.je(),n.j=null),n}function I4(n){if(eo(n.d),n.d.d!=n.c)throw M(new Bo)}function VW(n){return oe(n.b0&&bKn(this)}function FIn(n,e){this.a=n,bae.call(this,n,u(n.d,15).fd(e))}function gge(n,e){return bt(Su(n)*ao(n),Su(e)*ao(e))}function pge(n,e){return bt(Su(n)*ao(n),Su(e)*ao(e))}function mge(n){return _0(n)&&on(un(z(n,(cn(),Nd))))}function vge(n,e){return Pn(n,u(v(e,(cn(),Cv)),17),e)}function kge(n,e){return u(v(n,(W(),T3)),15).Fc(e),e}function WW(n,e){return n.b=e.b,n.c=e.c,n.d=e.d,n.a=e.a,n}function BIn(n,e,t,i){this.b=n,this.c=i,IC.call(this,e,t)}function yge(n,e,t){n.i=0,n.e=0,e!=t&&yFn(n,e,t)}function jge(n,e,t){n.i=0,n.e=0,e!=t&&jFn(n,e,t)}function Ege(n,e,t){return s6(),J5e(u(ee(n.e,e),529),t)}function Dp(n){var e;return e=n.f,e||(n.f=new h4(n,n.c))}function RIn(n,e){return xg(n.j,e.s,e.c)+xg(e.e,n.s,n.c)}function KIn(n,e){n.e&&!n.e.a&&(Ayn(n.e,e),KIn(n.e,e))}function _In(n,e){n.d&&!n.d.a&&(Ayn(n.d,e),_In(n.d,e))}function Cge(n,e){return-bt(Su(n)*ao(n),Su(e)*ao(e))}function Mge(n){return u(n.ld(),149).Pg()+":"+Jr(n.md())}function HIn(){tF(this,new oG),this.wb=(G1(),Hn),o4()}function qIn(n){this.b=new Z,hi(this.b,this.b),this.a=n}function JW(n,e){new Ct,this.a=new Mu,this.b=n,this.c=e}function j0(){j0=F,Pun=new FU,ZK=new FU,Iun=new D0n}function Dn(){Dn=F,sr=new A0n,Wh=new P0n,hP=new I0n}function QW(){QW=F,RQn=new nbn,_Qn=new aW,KQn=new ebn}function Lp(){Lp=F,mP=new Z,m_=new de,p_=new Z}function TM(n,e){if(n==null)throw M(new sp(e));return n}function AM(n){return!n.a&&(n.a=new q(Qe,n,10,11)),n.a}function ft(n){return!n.q&&(n.q=new q(As,n,11,10)),n.q}function _(n){return!n.s&&(n.s=new q(ku,n,21,17)),n.s}function Tge(n){return Se(n),IRn(new te(re(n.a.Kc(),new En)))}function Age(n,e){return wo(n),wo(e),Fjn(u(n,22),u(e,22))}function nd(n,e,t){var i,r;i=IV(t),r=new AE(i),df(n,e,r)}function MN(n,e,t,i,r,c){ok.call(this,n,e,t,i,r,c?-2:-1)}function UIn(n,e,t,i){pX.call(this,e,t),this.b=n,this.a=i}function GIn(n,e){Vfe.call(this,new iN(n)),this.a=n,this.b=e}function YW(n){this.b=n,this.c=n,n.e=null,n.c=null,this.a=1}function Sge(n){xs();var e;e=u(n.g,10),e.n.a=n.d.c+e.d.b}function O4(){O4=F;var n,e;e=!$8e(),n=new V3,VK=e?new og:n}function TN(n){return Dn(),O(n,59)?new jD(n):new BC(n)}function SM(n){return O(n,16)?new B6(u(n,16)):obe(n.Kc())}function Pge(n){return new HTn(n,n.e.Rd().gc()*n.c.Rd().gc())}function Ige(n){return new qTn(n,n.e.Rd().gc()*n.c.Rd().gc())}function ZW(n){return n&&n.hashCode?n.hashCode():l0(n)}function AN(n,e){return e==null?!!wr(n.f,null):zbe(n.i,e)}function Oge(n,e){var t;return t=$X(n.a,e),t&&(e.d=null),t}function zIn(n,e,t){return n.f?n.f.ef(e,t):!1}function z7(n,e,t,i){$t(n.c[e.g],t.g,i),$t(n.c[t.g],e.g,i)}function SN(n,e,t,i){$t(n.c[e.g],e.g,t),$t(n.b[e.g],e.g,i)}function Dge(n,e,t){return $(R(t.a))<=n&&$(R(t.b))>=e}function XIn(n,e){this.g=n,this.d=S(T(Qh,1),b1,10,0,[e])}function VIn(n){this.c=n,this.b=new Ul(u(Se(new tbn),50))}function WIn(n){this.c=n,this.b=new Ul(u(Se(new ewn),50))}function JIn(n){this.b=n,this.a=new Ul(u(Se(new Nbn),50))}function QIn(){this.b=new ni,this.d=new Ct,this.e=new ZG}function nJ(){this.c=new Li,this.d=new Li,this.e=new Li}function E0(){this.a=new Mu,this.b=(Co(3,mw),new Gc(3))}function Wl(n,e){this.e=n,this.a=ki,this.b=Qqn(e),this.c=e}function PM(n){this.c=n.c,this.d=n.d,this.b=n.b,this.a=n.a}function YIn(n,e,t,i,r,c){this.a=n,k$.call(this,e,t,i,r,c)}function ZIn(n,e,t,i,r,c){this.a=n,k$.call(this,e,t,i,r,c)}function X1(n,e,t,i,r,c,s){return new GN(n.e,e,t,i,r,c,s)}function Lge(n,e,t){return t>=0&&An(n.substr(t,e.length),e)}function nOn(n,e){return O(e,149)&&An(n.b,u(e,149).Pg())}function Nge(n,e){return n.a?e.Gh().Kc():u(e.Gh(),71).Ii()}function eOn(n,e){var t;return t=n.b.Qc(e),WDn(t,n.b.gc()),t}function X7(n,e){if(n==null)throw M(new sp(e));return n}function Hr(n){return n.u||(Zu(n),n.u=new NAn(n,n)),n.u}function PN(n){this.a=(Dn(),O(n,59)?new jD(n):new BC(n))}function au(n){var e;return e=u(Un(n,16),29),e||n.ii()}function IM(n,e){var t;return t=za(n.Rm),e==null?t:t+": "+e}function qo(n,e,t){return Fi(e,t,n.length),n.substr(e,t-e)}function tOn(n,e){qC.call(this),lQ(this),this.a=n,this.c=e}function $ge(n){n&&IM(n,n.ie())}function xge(n){HE(),y.setTimeout(function(){throw n},0)}function Fge(){return YT(),S(T(Bun,1),G,436,0,[o_,Fun])}function Bge(){return cT(),S(T(Kun,1),G,435,0,[Run,s_])}function Rge(){return uT(),S(T(bon,1),G,432,0,[v_,vP])}function Kge(){return V4(),S(T(KZn,1),G,517,0,[dj,L_])}function _ge(){return KM(),S(T(Qsn,1),G,429,0,[fH,Jsn])}function Hge(){return pk(),S(T($sn,1),G,428,0,[WP,Nsn])}function qge(){return QM(),S(T(Asn,1),G,431,0,[Tsn,V_])}function Uge(){return wk(),S(T(qhn,1),G,430,0,[UH,GH])}function Gge(){return n5(),S(T(Oie,1),G,531,0,[r9,i9])}function zge(){return yT(),S(T(Rln,1),G,501,0,[RI,D2])}function Xge(){return sh(),S(T(Bie,1),G,523,0,[mb,y1])}function Vge(){return Sf(),S(T(Kie,1),G,522,0,[Rd,zf])}function Wge(){return lf(),S(T(ere,1),G,528,0,[zw,ja])}function Jge(){return hk(),S(T(Bsn,1),G,488,0,[Fsn,QP])}function Qge(){return GM(),S(T(S1n,1),G,491,0,[$q,A1n])}function Yge(){return N$(),S(T(N1n,1),G,492,0,[D1n,L1n])}function Zge(){return FM(),S(T(Bln,1),G,433,0,[dq,Fln])}function n2e(){return ZM(),S(T(_ln,1),G,434,0,[Kln,vq])}function e2e(){return M0(),S(T(sre,1),G,465,0,[Ea,P2])}function t2e(){return ck(),S(T(x1n,1),G,438,0,[Kq,JI])}function i2e(){return Ak(),S(T(ran,1),G,437,0,[YI,ian])}function r2e(){return RL(),S(T(dO,1),G,347,0,[vdn,kdn])}function OM(n,e,t,i){return t>=0?n.Uh(e,t,i):n.Ch(null,t,i)}function V7(n){return n.b.b==0?n.a.sf():UL(n.b)}function c2e(n){if(n.p!=5)throw M(new Cu);return Ae(n.f)}function u2e(n){if(n.p!=5)throw M(new Cu);return Ae(n.k)}function eJ(n){return x(n.a)===x((D$(),CU))&&rOe(n),n.a}function o2e(n,e){n.b=e,n.c>0&&n.b>0&&(n.g=cM(n.c,n.b,n.a))}function s2e(n,e){n.c=e,n.c>0&&n.b>0&&(n.g=cM(n.c,n.b,n.a))}function iOn(n,e){ufe(this,new V(n.a,n.b)),ofe(this,F7(e))}function C0(){Wfe.call(this,new ap(Qb(12))),KX(!0),this.a=2}function IN(n,e,t){nt(),Wd.call(this,n),this.b=e,this.a=t}function tJ(n,e,t){Ko(),LE.call(this,e),this.a=n,this.b=t}function rOn(n){var e;e=n.c.d.b,n.b=e,n.a=n.c.d,e.a=n.c.d.b=n}function f2e(n){return n.b==0?null:(oe(n.b!=0),Xo(n,n.a.a))}function Nc(n,e){return e==null?Kr(wr(n.f,null)):d6(n.i,e)}function cOn(n,e,t,i,r){return new rF(n,(B4(),i_),e,t,i,r)}function DM(n,e){return zDn(e),Lme(n,K(ye,Ke,28,e,15,1),e)}function LM(n,e){return TM(n,"set1"),TM(e,"set2"),new VEn(n,e)}function h2e(n,e){var t=XK[n.charCodeAt(0)];return t??n}function uOn(n,e){var t,i;return t=e,i=new DO,LGn(n,t,i),i.d}function ON(n,e,t,i){var r;r=new FAn,e.a[t.g]=r,Pp(n.b,i,r)}function l2e(n,e){var t;return t=Ime(n.f,e),tt(HC(t),n.f.d)}function W7(n){var e;_me(n.a),dTn(n.a),e=new IE(n.a),HY(e)}function a2e(n,e){_qn(n,!0),nu(n.e.Rf(),new NV(n,!0,e))}function d2e(n,e){return Lp(),n==At(Kh(e))||n==At(ia(e))}function b2e(n,e){return kl(),u(v(e,(lc(),Sh)),17).a==n}function wi(n){return Math.max(Math.min(n,et),-2147483648)|0}function oOn(n){this.a=u(Se(n),277),this.b=(Dn(),new XX(n))}function sOn(n,e,t){this.i=new Z,this.b=n,this.g=e,this.a=t}function iJ(n,e,t){this.a=new Z,this.e=n,this.f=e,this.c=t}function NM(n,e,t){this.c=new Z,this.e=n,this.f=e,this.b=t}function fOn(n){qC.call(this),lQ(this),this.a=n,this.c=!0}function w2e(n){function e(){}return e.prototype=n||{},new e}function g2e(n){if(n.Ae())return null;var e=n.n;return rP[e]}function J7(n){return n.Db>>16!=3?null:u(n.Cb,27)}function Af(n){return n.Db>>16!=9?null:u(n.Cb,27)}function hOn(n){return n.Db>>16!=6?null:u(n.Cb,74)}function M0(){M0=F,Ea=new cX(s3,0),P2=new cX(f3,1)}function sh(){sh=F,mb=new tX(f3,0),y1=new tX(s3,1)}function Sf(){Sf=F,Rd=new iX(_B,0),zf=new iX("UP",1)}function lOn(){lOn=F,oQn=Ce((RE(),S(T(uQn,1),G,549,0,[GK])))}function aOn(n){var e;return e=new zE(Qb(n.length)),eY(e,n),e}function dOn(n,e){return n.b+=e.b,n.c+=e.c,n.d+=e.d,n.a+=e.a,n}function p2e(n,e){return Zxn(n,e)?(W$n(n),!0):!1}function dl(n,e){if(e==null)throw M(new ip);return F8e(n,e)}function Q7(n,e){var t;t=n.q.getHours(),n.q.setDate(e),G5(n,t)}function rJ(n,e,t){var i;i=n.Ih(e),i>=0?n.bi(i,t):ten(n,e,t)}function bOn(n,e){var t;return t=n.Ih(e),t>=0?n.Wh(t):hF(n,e)}function wOn(n,e){var t;for(Se(e),t=n.a;t;t=t.c)e.Yd(t.g,t.i)}function DN(n,e,t){var i;i=vFn(n,e,t),n.b=new ET(i.c.length)}function Ag(n,e,t){$M(),n&&Xe(yU,n,e),n&&Xe(hE,n,t)}function m2e(n,e){return VC(),_n(),u(e.a,17).a0}function cJ(n){var e;return e=n.d,e=n.bj(n.f),ve(n,e),e.Ob()}function gOn(n,e){var t;return t=new fW(e),_Kn(t,n),new _u(t)}function y2e(n){if(n.p!=0)throw M(new Cu);return M6(n.f,0)}function j2e(n){if(n.p!=0)throw M(new Cu);return M6(n.k,0)}function pOn(n){return n.Db>>16!=7?null:u(n.Cb,241)}function D4(n){return n.Db>>16!=6?null:u(n.Cb,241)}function mOn(n){return n.Db>>16!=7?null:u(n.Cb,167)}function At(n){return n.Db>>16!=11?null:u(n.Cb,27)}function Gb(n){return n.Db>>16!=17?null:u(n.Cb,29)}function vOn(n){return n.Db>>16!=3?null:u(n.Cb,155)}function uJ(n){var e;return ea(n),e=new ni,ut(n,new M9n(e))}function kOn(n,e){var t=n.a=n.a||[];return t[e]||(t[e]=n.ve(e))}function E2e(n,e){var t;t=n.q.getHours(),n.q.setMonth(e),G5(n,t)}function yOn(n,e){xC(this),this.f=e,this.g=n,MM(this),this.je()}function jOn(n,e){this.a=n,this.c=Ki(this.a),this.b=new PM(e)}function EOn(n,e,t){this.a=e,this.c=n,this.b=(Se(t),new _u(t))}function COn(n,e,t){this.a=e,this.c=n,this.b=(Se(t),new _u(t))}function MOn(n){this.a=n,this.b=K(Sie,J,2043,n.e.length,0,2)}function TOn(){this.a=new ih,this.e=new ni,this.g=0,this.i=0}function $M(){$M=F,yU=new de,hE=new de,ple(MQn,new wvn)}function AOn(){AOn=F,aie=Pu(new ii,(Vi(),zr),(tr(),bj))}function oJ(){oJ=F,die=Pu(new ii,(Vi(),zr),(tr(),bj))}function SOn(){SOn=F,wie=Pu(new ii,(Vi(),zr),(tr(),bj))}function POn(){POn=F,Lie=Re(new ii,(Vi(),zr),(tr(),x8))}function ko(){ko=F,xie=Re(new ii,(Vi(),zr),(tr(),x8))}function IOn(){IOn=F,Fie=Re(new ii,(Vi(),zr),(tr(),x8))}function NN(){NN=F,Hie=Re(new ii,(Vi(),zr),(tr(),x8))}function J6(n,e,t,i,r,c){return new ml(n.e,e,n.Lj(),t,i,r,c)}function Dr(n,e,t){return e==null?Vc(n.f,null,t):$0(n.i,e,t)}function Zi(n,e){n.c&&du(n.c.g,n),n.c=e,n.c&&nn(n.c.g,n)}function $i(n,e){n.c&&du(n.c.a,n),n.c=e,n.c&&nn(n.c.a,n)}function ic(n,e){n.i&&du(n.i.j,n),n.i=e,n.i&&nn(n.i.j,n)}function Ii(n,e){n.d&&du(n.d.e,n),n.d=e,n.d&&nn(n.d.e,n)}function $N(n,e){n.a&&du(n.a.k,n),n.a=e,n.a&&nn(n.a.k,n)}function xN(n,e){n.b&&du(n.b.f,n),n.b=e,n.b&&nn(n.b.f,n)}function OOn(n,e){$we(n,n.b,n.c),u(n.b.b,68),e&&u(e.b,68).b}function C2e(n,e){return bt(u(n.c,65).c.e.b,u(e.c,65).c.e.b)}function M2e(n,e){return bt(u(n.c,65).c.e.a,u(e.c,65).c.e.a)}function T2e(n){return Y$(),_n(),u(n.a,86).d.e!=0}function xM(n,e){O(n.Cb,184)&&(u(n.Cb,184).tb=null),zc(n,e)}function FN(n,e){O(n.Cb,90)&&hw(Zu(u(n.Cb,90)),4),zc(n,e)}function A2e(n,e){LY(n,e),O(n.Cb,90)&&hw(Zu(u(n.Cb,90)),2)}function S2e(n,e){var t,i;t=e.c,i=t!=null,i&&Ip(n,new qb(e.c))}function DOn(n){var e,t;return t=(o4(),e=new Jd,e),K4(t,n),t}function LOn(n){var e,t;return t=(o4(),e=new Jd,e),K4(t,n),t}function NOn(n){for(var e;;)if(e=n.Pb(),!n.Ob())return e}function P2e(n,e,t){return nn(n.a,(yM(),Nx(e,t),new i0(e,t))),n}function $c(n,e){return dr(),a$(e)?new eM(e,n):new j7(e,n)}function Y7(n){return dh(),Ec(n,0)>=0?ta(n):G6(ta(n1(n)))}function I2e(n){var e;return e=u(ZC(n.b),9),new _o(n.a,e,n.c)}function $On(n,e){var t;return t=u(tw(Dp(n.a),e),16),t?t.gc():0}function xOn(n,e,t){var i;oBn(e,t,n.c.length),i=t-e,Pz(n.c,e,i)}function Jl(n,e,t){oBn(e,t,n.gc()),this.c=n,this.a=e,this.b=t-e}function Np(n){this.c=new Ct,this.b=n.b,this.d=n.c,this.a=n.a}function BN(n){this.a=y.Math.cos(n),this.b=y.Math.sin(n)}function ed(n,e,t,i){this.c=n,this.d=i,$N(this,e),xN(this,t)}function sJ(n,e){Xfe.call(this,new ap(Qb(n))),Co(e,Ozn),this.a=e}function FOn(n,e,t){return new rF(n,(B4(),t_),null,!1,e,t)}function BOn(n,e,t){return new rF(n,(B4(),r_),e,t,null,!1)}function O2e(){return Gu(),S(T(xr,1),G,108,0,[xun,Yr,Aw])}function D2e(){return bu(),S(T(JQn,1),G,472,0,[vf,pa,zs])}function L2e(){return Uu(),S(T(VQn,1),G,471,0,[Mh,ga,Gs])}function N2e(){return bf(),S(T(Sw,1),G,237,0,[bc,Wc,wc])}function $2e(){return i5(),S(T(Pon,1),G,391,0,[E_,j_,C_])}function x2e(){return D0(),S(T(R_,1),G,372,0,[ub,ma,cb])}function F2e(){return u5(),S(T(Psn,1),G,322,0,[B8,pj,Ssn])}function B2e(){return bT(),S(T(Osn,1),G,351,0,[Isn,VP,W_])}function R2e(){return hd(),S(T(pne,1),G,460,0,[Y_,mv,p2])}function K2e(){return Z4(),S(T(sH,1),G,299,0,[uH,oH,mj])}function _2e(){return vl(),S(T(Mne,1),G,311,0,[vj,v2,E3])}function H2e(){return g5(),S(T(Lhn,1),G,390,0,[FH,Dhn,MI])}function q2e(){return gr(),S(T(cie,1),G,463,0,[n9,Vu,Jc])}function U2e(){return ST(),S(T(zhn,1),G,387,0,[Uhn,zH,Ghn])}function G2e(){return d5(),S(T(Xhn,1),G,349,0,[VH,XH,Ij])}function z2e(){return om(),S(T(Whn,1),G,350,0,[WH,Vhn,e9])}function X2e(){return dT(),S(T(Yhn,1),G,352,0,[Qhn,JH,Jhn])}function V2e(){return DT(),S(T(Zhn,1),G,388,0,[QH,Ov,Gw])}function W2e(){return O0(),S(T(Tie,1),G,464,0,[Oj,t9,PI])}function Pf(n){return cc(S(T(Ei,1),J,8,0,[n.i.n,n.n,n.a]))}function J2e(){return b5(),S(T(gln,1),G,392,0,[wln,nq,Lj])}function ROn(){ROn=F,Fre=Pu(new ii,(Qp(),u9),(q5(),uln))}function FM(){FM=F,dq=new uX("DFS",0),Fln=new uX("BFS",1)}function KOn(n,e,t){var i;i=new E3n,i.b=e,i.a=t,++e.b,nn(n.d,i)}function Q2e(n,e,t){var i;i=new rr(t.d),tt(i,n),DY(e,i.a,i.b)}function Y2e(n,e){LTn(n,Ae(vi(w0(e,24),YA)),Ae(vi(e,YA)))}function zb(n,e){if(n<0||n>e)throw M(new Ir(Ptn+n+Itn+e))}function Ln(n,e){if(n<0||n>=e)throw M(new Ir(Ptn+n+Itn+e))}function zn(n,e){if(n<0||n>=e)throw M(new gz(Ptn+n+Itn+e))}function In(n,e){this.b=(Jn(n),n),this.a=e&vw?e:e|64|wh}function fJ(n){var e;return ea(n),e=(j0(),j0(),ZK),fT(n,e)}function Z2e(n,e,t){var i;return i=V5(n,e,!1),i.b<=e&&i.a<=t}function npe(){return nT(),S(T(O1n,1),G,439,0,[xq,I1n,P1n])}function epe(){return _T(),S(T(a1n,1),G,394,0,[l1n,Oq,h1n])}function tpe(){return XT(),S(T(f1n,1),G,445,0,[Bj,qI,Mq])}function ipe(){return rA(),S(T(bce,1),G,456,0,[Tq,Sq,Aq])}function rpe(){return Ok(),S(T(Uln,1),G,393,0,[KI,Hln,qln])}function cpe(){return AT(),S(T(s1n,1),G,300,0,[Cq,o1n,u1n])}function upe(){return jl(),S(T(ldn,1),G,346,0,[uO,M1,M9])}function ope(){return Fk(),S(T(Fq,1),G,444,0,[XI,VI,WI])}function spe(){return Nf(),S(T(Zan,1),G,278,0,[Bv,Jw,Rv])}function fpe(){return Gp(),S(T(mdn,1),G,280,0,[pdn,Yw,aO])}function T0(n){return Se(n),O(n,16)?new _u(u(n,16)):y4(n.Kc())}function hJ(n,e){return n&&n.equals?n.equals(e):x(n)===x(e)}function vi(n,e){return Q1(ewe(Vr(n)?ds(n):n,Vr(e)?ds(e):e))}function hf(n,e){return Q1(twe(Vr(n)?ds(n):n,Vr(e)?ds(e):e))}function RN(n,e){return Q1(iwe(Vr(n)?ds(n):n,Vr(e)?ds(e):e))}function hpe(n,e){var t;return t=(Jn(n),n).g,rV(!!t),Jn(e),t(e)}function _On(n,e){var t,i;return i=C4(n,e),t=n.a.fd(i),new zEn(n,t)}function lpe(n){return n.Db>>16!=6?null:u(dF(n),241)}function ape(n){if(n.p!=2)throw M(new Cu);return Ae(n.f)&ui}function dpe(n){if(n.p!=2)throw M(new Cu);return Ae(n.k)&ui}function E(n){return oe(n.ai?1:0}function GOn(n,e){var t,i;return t=s$(e),i=t,u(ee(n.c,i),17).a}function KN(n,e,t){var i;i=n.d[e.p],n.d[e.p]=n.d[t.p],n.d[t.p]=i}function Cpe(n,e,t){var i;n.n&&e&&t&&(i=new uvn,nn(n.e,i))}function _N(n,e){if(fi(n.a,e),e.d)throw M(new ec(nXn));e.d=n}function dJ(n,e){this.a=new Z,this.d=new Z,this.f=n,this.c=e}function zOn(){this.c=new PTn,this.a=new $Ln,this.b=new Xyn,lCn()}function XOn(){qp(),this.b=new de,this.a=new de,this.c=new Z}function VOn(n,e,t){this.d=n,this.j=e,this.e=t,this.o=-1,this.p=3}function WOn(n,e,t){this.d=n,this.k=e,this.f=t,this.o=-1,this.p=5}function JOn(n,e,t,i,r,c){dQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function QOn(n,e,t,i,r,c){bQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function YOn(n,e,t,i,r,c){OJ.call(this,n,e,t,i,r),c&&(this.o=-2)}function ZOn(n,e,t,i,r,c){pQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function nDn(n,e,t,i,r,c){DJ.call(this,n,e,t,i,r),c&&(this.o=-2)}function eDn(n,e,t,i,r,c){wQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function tDn(n,e,t,i,r,c){gQ.call(this,n,e,t,i,r),c&&(this.o=-2)}function iDn(n,e,t,i,r,c){LJ.call(this,n,e,t,i,r),c&&(this.o=-2)}function rDn(n,e,t,i){LE.call(this,t),this.b=n,this.c=e,this.d=i}function cDn(n,e){this.f=n,this.a=($4(),MO),this.c=MO,this.b=e}function uDn(n,e){this.g=n,this.d=($4(),TO),this.a=TO,this.b=e}function bJ(n,e){!n.c&&(n.c=new Rt(n,0)),HA(n.c,(at(),F9),e)}function Mpe(n,e){return oMe(n,e,O(e,102)&&(u(e,19).Bb&hr)!=0)}function Tpe(n,e){return KPn(vc(n.q.getTime()),vc(e.q.getTime()))}function oDn(n){return XL(n.e.Rd().gc()*n.c.Rd().gc(),16,new O8n(n))}function Ape(n){return!!n.u&&Sc(n.u.a).i!=0&&!(n.n&&Ix(n.n))}function Spe(n){return!!n.a&&no(n.a.a).i!=0&&!(n.b&&Ox(n.b))}function wJ(n,e){return e==0?!!n.o&&n.o.f!=0:Cx(n,e)}function Ppe(n,e,t){var i;return i=u(n.Zb().xc(e),16),!!i&&i.Hc(t)}function sDn(n,e,t){var i;return i=u(n.Zb().xc(e),16),!!i&&i.Mc(t)}function fDn(n,e){var t;return t=1-e,n.a[t]=jT(n.a[t],t),jT(n,e)}function hDn(n,e){var t,i;return i=vi(n,mr),t=Fs(e,32),hf(t,i)}function lDn(n,e,t){var i;i=(Se(n),new _u(n)),O7e(new EOn(i,e,t))}function Z7(n,e,t){var i;i=(Se(n),new _u(n)),D7e(new COn(i,e,t))}function fc(n,e,t,i,r,c){return Hxn(n,e,t,c),CY(n,i),MY(n,r),n}function aDn(n,e,t,i){return n.a+=""+qo(e==null?gu:Jr(e),t,i),n}function xi(n,e){this.a=n,Xv.call(this,n),zb(e,n.gc()),this.b=e}function dDn(n){this.a=K(ki,Fn,1,QQ(y.Math.max(8,n))<<1,5,1)}function nk(n){return u(xf(n,K(Qh,b1,10,n.c.length,0,1)),199)}function fh(n){return u(xf(n,K(O_,rR,18,n.c.length,0,1)),483)}function bDn(n){return n.a?n.e.length==0?n.a.a:n.a.a+(""+n.e):n.c}function Q6(n){for(;n.d>0&&n.a[--n.d]==0;);n.a[n.d++]==0&&(n.e=0)}function wDn(n){return oe(n.b.b!=n.d.a),n.c=n.b=n.b.b,--n.a,n.c.c}function Ipe(n,e,t){n.a=e,n.c=t,n.b.a.$b(),vo(n.d),Pb(n.e.a.c,0)}function gDn(n,e){var t;n.e=new uz,t=aw(e),Yt(t,n.c),Iqn(n,t,0)}function ri(n,e,t,i){var r;r=new nG,r.a=e,r.b=t,r.c=i,xe(n.a,r)}function Q(n,e,t,i){var r;r=new nG,r.a=e,r.b=t,r.c=i,xe(n.b,r)}function pDn(n,e,t){if(n<0||et)throw M(new Ir(qje(n,e,t)))}function ek(n,e){if(n<0||n>=e)throw M(new Ir(kEe(n,e)));return n}function Ope(n){if(!("stack"in n))try{throw n}catch{}return n}function Sg(n){return s6(),O(n.g,10)?u(n.g,10):null}function Dpe(n){return Tg(n).dc()?!1:(e1e(n,new Pr),!0)}function id(n){var e;return Vr(n)?(e=n,e==-0?0:e):X4e(n)}function mDn(n,e){return O(e,44)?xx(n.a,u(e,44)):!1}function vDn(n,e){return O(e,44)?xx(n.a,u(e,44)):!1}function kDn(n,e){return O(e,44)?xx(n.a,u(e,44)):!1}function gJ(n){var e;return z1(n),e=new L0n,hg(n.a,new j9n(e)),e}function pJ(){var n,e,t;return e=(t=(n=new Jd,n),t),nn(n0n,e),e}function BM(n){var e;return z1(n),e=new N0n,hg(n.a,new E9n(e)),e}function Lpe(n,e){return n.a<=n.b?(e.Dd(n.a++),!0):!1}function yDn(n){P$.call(this,n,(B4(),e_),null,!1,null,!1)}function jDn(){jDn=F,SYn=Ce((YE(),S(T(oon,1),G,489,0,[b_])))}function EDn(){EDn=F,eln=wIn(Y(1),Y(4)),nln=wIn(Y(1),Y(2))}function Npe(n,e){return new _L(e,N6(Ki(e.e),n,n),(_n(),!0))}function RM(n){return new Gc((Co(n,cB),oT(nr(nr(5,n),n/10|0))))}function $pe(n){return XL(n.e.Rd().gc()*n.c.Rd().gc(),273,new I8n(n))}function CDn(n){return u(xf(n,K(FZn,DXn,12,n.c.length,0,1)),2042)}function xpe(n){return ko(),!fr(n)&&!(!fr(n)&&n.c.i.c==n.d.i.c)}function Fpe(n,e){return _p(),u(v(e,(lc(),I2)),17).a>=n.gc()}function Y6(n,e){vLe(e,n),JV(n.d),JV(u(v(n,(cn(),mI)),214))}function HN(n,e){kLe(e,n),QV(n.d),QV(u(v(n,(cn(),mI)),214))}function Bpe(n,e,t){n.d&&du(n.d.e,n),n.d=e,n.d&&b0(n.d.e,t,n)}function Rpe(n,e,t){return t.f.c.length>0?MW(n.a,e,t):MW(n.b,e,t)}function Kpe(n,e,t){var i;i=i9e();try{return Aae(n,e,t)}finally{D3e(i)}}function A0(n,e){var t,i;return t=dl(n,e),i=null,t&&(i=t.pe()),i}function Z6(n,e){var t,i;return t=dl(n,e),i=null,t&&(i=t.se()),i}function L4(n,e){var t,i;return t=Jb(n,e),i=null,t&&(i=t.se()),i}function bl(n,e){var t,i;return t=dl(n,e),i=null,t&&(i=gnn(t)),i}function _pe(n,e,t){var i;return i=wm(t),FA(n.g,i,e),FA(n.i,e,t),e}function mJ(n,e,t){this.d=new $7n(this),this.e=n,this.i=e,this.f=t}function MDn(n,e,t,i){this.e=null,this.c=n,this.d=e,this.a=t,this.b=i}function TDn(n,e,t,i){ETn(this),this.c=n,this.e=e,this.f=t,this.b=i}function vJ(n,e,t,i){this.d=n,this.n=e,this.g=t,this.o=i,this.p=-1}function ADn(n,e,t,i){return O(t,59)?new iAn(n,e,t,i):new vW(n,e,t,i)}function N4(n){return O(n,16)?u(n,16).dc():!n.Kc().Ob()}function SDn(n){if(n.e.g!=n.b)throw M(new Bo);return!!n.c&&n.d>0}function be(n){return oe(n.b!=n.d.c),n.c=n.b,n.b=n.b.a,++n.a,n.c.c}function kJ(n,e){Jn(e),$t(n.a,n.c,e),n.c=n.c+1&n.a.length-1,JRn(n)}function V1(n,e){Jn(e),n.b=n.b-1&n.a.length-1,$t(n.a,n.b,e),JRn(n)}function PDn(n){var e;e=n.Gh(),this.a=O(e,71)?u(e,71).Ii():e.Kc()}function Hpe(n){return new In(Ame(u(n.a.md(),16).gc(),n.a.ld()),16)}function IDn(){IDn=F,Gce=Ce((eC(),S(T($1n,1),G,490,0,[Bq])))}function ODn(){ODn=F,Xce=Ce((tC(),S(T(zce,1),G,558,0,[Rq])))}function DDn(){DDn=F,lue=Ce((f6(),S(T(tan,1),G,539,0,[Hj])))}function qpe(){return dd(),S(T(Lon,1),G,389,0,[Ow,Don,P_,I_])}function Upe(){return B4(),S(T(lP,1),G,304,0,[e_,t_,i_,r_])}function Gpe(){return Vp(),S(T(EYn,1),G,332,0,[uj,cj,oj,sj])}function zpe(){return A5(),S(T(TYn,1),G,406,0,[fj,wP,gP,hj])}function Xpe(){return N0(),S(T(yYn,1),G,417,0,[rj,ij,a_,d_])}function Vpe(){return nm(),S(T(MZn,1),G,416,0,[rb,Iw,Pw,a2])}function Wpe(){return $f(),S(T(ene,1),G,421,0,[j3,lv,av,B_])}function Jpe(){return OT(),S(T(UZn,1),G,371,0,[F_,HP,qP,wj])}function Qpe(){return cw(),S(T(RH,1),G,203,0,[TI,BH,S2,A2])}function Ype(){return lh(),S(T(Hhn,1),G,284,0,[k1,_hn,HH,qH])}function Zpe(n){var e;return n.j==(tn(),ae)&&(e=mHn(n),Au(e,Zn))}function n3e(n,e){var t;t=e.a,Zi(t,e.c.d),Ii(t,e.d.d),nw(t.a,n.n)}function yJ(n,e){var t;return t=u(Lf(n.b,e),67),!t&&(t=new Ct),t}function xp(n){return s6(),O(n.g,154)?u(n.g,154):null}function e3e(n){n.a=null,n.e=null,Pb(n.b.c,0),Pb(n.f.c,0),n.c=null}function KM(){KM=F,fH=new Zz(qm,0),Jsn=new Zz("TOP_LEFT",1)}function n5(){n5=F,r9=new eX("UPPER",0),i9=new eX("LOWER",1)}function t3e(n,e){return vp(new V(e.e.a+e.f.a/2,e.e.b+e.f.b/2),n)}function LDn(n,e){return u(ho(_b(u(ot(n.k,e),15).Oc(),b2)),113)}function NDn(n,e){return u(ho(Ap(u(ot(n.k,e),15).Oc(),b2)),113)}function i3e(){return Qp(),S(T(rln,1),G,405,0,[LI,c9,u9,o9])}function r3e(){return w5(),S(T(xln,1),G,353,0,[aq,BI,lq,hq])}function c3e(){return sA(),S(T(c1n,1),G,354,0,[Eq,i1n,r1n,t1n])}function u3e(){return go(),S(T(I9,1),G,386,0,[rE,Gd,iE,Qw])}function o3e(){return To(),S(T(Yue,1),G,291,0,[nE,nl,Ta,Zj])}function s3e(){return El(),S(T(aU,1),G,223,0,[lU,Yj,Kv,F3])}function f3e(){return qT(),S(T(Cdn,1),G,320,0,[wU,ydn,Edn,jdn])}function h3e(){return LT(),S(T(woe,1),G,415,0,[gU,Tdn,Mdn,Adn])}function l3e(n){return $M(),Zc(yU,n)?u(ee(yU,n),341).Qg():null}function Uo(n,e,t){return e<0?hF(n,t):u(t,69).wk().Bk(n,n.hi(),e)}function a3e(n,e,t){var i;return i=wm(t),FA(n.j,i,e),Xe(n.k,e,t),e}function d3e(n,e,t){var i;return i=wm(t),FA(n.d,i,e),Xe(n.e,e,t),e}function $Dn(n){var e,t;return e=(B1(),t=new HO,t),n&&AA(e,n),e}function jJ(n){var e;return e=n.aj(n.i),n.i>0&&Ic(n.g,0,e,0,n.i),e}function xDn(n,e){var t;for(t=n.j.c.length;t>24}function w3e(n){if(n.p!=1)throw M(new Cu);return Ae(n.k)<<24>>24}function g3e(n){if(n.p!=7)throw M(new Cu);return Ae(n.k)<<16>>16}function p3e(n){if(n.p!=7)throw M(new Cu);return Ae(n.f)<<16>>16}function Pg(n,e){return e.e==0||n.e==0?O8:(Am(),vF(n,e))}function RDn(n,e){return x(e)===x(n)?"(this Map)":e==null?gu:Jr(e)}function m3e(n,e,t){return tN(R(Kr(wr(n.f,e))),R(Kr(wr(n.f,t))))}function v3e(n,e,t){var i;i=u(ee(n.g,t),60),nn(n.a.c,new bi(e,i))}function KDn(n,e,t){n.i=0,n.e=0,e!=t&&(jFn(n,e,t),yFn(n,e,t))}function k3e(n,e,t,i,r){var c;c=yMe(r,t,i),nn(e,dEe(r,c)),rje(n,r,e)}function EJ(n,e,t,i,r){this.i=n,this.a=e,this.e=t,this.j=i,this.f=r}function _Dn(n,e){nJ.call(this),this.a=n,this.b=e,nn(this.a.b,this)}function HDn(n){this.b=new de,this.c=new de,this.d=new de,this.a=n}function qDn(n,e){var t;return t=new lp,n.Gd(t),t.a+="..",e.Hd(t),t.a}function UDn(n,e){var t;for(t=e;t;)a0(n,t.i,t.j),t=At(t);return n}function GDn(n,e,t){var i;return i=wm(t),Xe(n.b,i,e),Xe(n.c,e,t),e}function wl(n){var e;for(e=0;n.Ob();)n.Pb(),e=nr(e,1);return oT(e)}function Fh(n,e){dr();var t;return t=u(n,69).vk(),kje(t,e),t.xl(e)}function y3e(n,e,t){if(t){var i=t.oe();n.a[e]=i(t)}else delete n.a[e]}function CJ(n,e){var t;t=n.q.getHours(),n.q.setFullYear(e+fa),G5(n,t)}function j3e(n,e){return u(e==null?Kr(wr(n.f,null)):d6(n.i,e),288)}function MJ(n,e){return n==(Vn(),zt)&&e==zt?4:n==zt||e==zt?8:32}function _M(n,e,t){return RA(n,e,t,O(e,102)&&(u(e,19).Bb&hr)!=0)}function E3e(n,e,t){return Om(n,e,t,O(e,102)&&(u(e,19).Bb&hr)!=0)}function C3e(n,e,t){return bMe(n,e,t,O(e,102)&&(u(e,19).Bb&hr)!=0)}function TJ(n){n.b!=n.c&&(n.a=K(ki,Fn,1,8,5,1),n.b=0,n.c=0)}function e5(n){return oe(n.a=0&&n.a[t]===e[t];t--);return t<0}function HM(n){var e;return n?new fW(n):(e=new ih,A$(e,n),e)}function O3e(n,e){var t,i;i=!1;do t=lFn(n,e),i=i|t;while(t);return i}function D3e(n){n&&rme((az(),sun)),--cP,n&&uP!=-1&&(Ele(uP),uP=-1)}function qM(n){nnn(),LTn(this,Ae(vi(w0(n,24),YA)),Ae(vi(n,YA)))}function JDn(){JDn=F,HQn=Ce((YT(),S(T(Bun,1),G,436,0,[o_,Fun])))}function QDn(){QDn=F,qQn=Ce((cT(),S(T(Kun,1),G,435,0,[Run,s_])))}function YDn(){YDn=F,GYn=Ce((uT(),S(T(bon,1),G,432,0,[v_,vP])))}function ZDn(){ZDn=F,_Zn=Ce((V4(),S(T(KZn,1),G,517,0,[dj,L_])))}function nLn(){nLn=F,Ane=Ce((KM(),S(T(Qsn,1),G,429,0,[fH,Jsn])))}function eLn(){eLn=F,gne=Ce((pk(),S(T($sn,1),G,428,0,[WP,Nsn])))}function tLn(){tLn=F,kne=Ce((hk(),S(T(Bsn,1),G,488,0,[Fsn,QP])))}function iLn(){iLn=F,rie=Ce((wk(),S(T(qhn,1),G,430,0,[UH,GH])))}function rLn(){rLn=F,Die=Ce((n5(),S(T(Oie,1),G,531,0,[r9,i9])))}function cLn(){cLn=F,ane=Ce((QM(),S(T(Asn,1),G,431,0,[Tsn,V_])))}function uLn(){uLn=F,xre=Ce((FM(),S(T(Bln,1),G,433,0,[dq,Fln])))}function oLn(){oLn=F,_re=Ce((yT(),S(T(Rln,1),G,501,0,[RI,D2])))}function sLn(){sLn=F,Rie=Ce((sh(),S(T(Bie,1),G,523,0,[mb,y1])))}function fLn(){fLn=F,_ie=Ce((Sf(),S(T(Kie,1),G,522,0,[Rd,zf])))}function hLn(){hLn=F,tre=Ce((lf(),S(T(ere,1),G,528,0,[zw,ja])))}function lLn(){lLn=F,fre=Ce((M0(),S(T(sre,1),G,465,0,[Ea,P2])))}function aLn(){aLn=F,Ure=Ce((ZM(),S(T(_ln,1),G,434,0,[Kln,vq])))}function dLn(){dLn=F,Rce=Ce((GM(),S(T(S1n,1),G,491,0,[$q,A1n])))}function bLn(){bLn=F,_ce=Ce((N$(),S(T(N1n,1),G,492,0,[D1n,L1n])))}function wLn(){wLn=F,Vce=Ce((ck(),S(T(x1n,1),G,438,0,[Kq,JI])))}function gLn(){gLn=F,aue=Ce((Ak(),S(T(ran,1),G,437,0,[YI,ian])))}function pLn(){pLn=F,aoe=Ce((RL(),S(T(dO,1),G,347,0,[vdn,kdn])))}function L3e(){return ci(),S(T(E9,1),G,88,0,[Wf,Xr,Br,Vf,us])}function N3e(){return tn(),S(T(lr,1),Mc,64,0,[sc,Xn,Zn,ae,Wn])}function $3e(n,e,t){return u(e==null?Vc(n.f,null,t):$0(n.i,e,t),288)}function x3e(n){return(n.k==(Vn(),zt)||n.k==Zt)&&kt(n,(W(),H8))}function XN(n){return n.c&&n.d?aJ(n.c)+"->"+aJ(n.d):"e_"+l0(n)}function qi(n,e){var t,i;for(Jn(e),i=n.Kc();i.Ob();)t=i.Pb(),e.Cd(t)}function F3e(n,e){var t;t=new op,nd(t,"x",e.a),nd(t,"y",e.b),Ip(n,t)}function B3e(n,e){var t;t=new op,nd(t,"x",e.a),nd(t,"y",e.b),Ip(n,t)}function mLn(n,e){var t;for(t=e;t;)a0(n,-t.i,-t.j),t=At(t);return n}function SJ(n,e){var t,i;for(t=e,i=0;t>0;)i+=n.a[t],t-=t&-t;return i}function Go(n,e,t){var i;return i=(Ln(e,n.c.length),n.c[e]),n.c[e]=t,i}function PJ(n,e,t){n.a.c.length=0,fOe(n,e,t),n.a.c.length==0||xSe(n,e)}function tk(n){n.i=0,s7(n.b,null),s7(n.c,null),n.a=null,n.e=null,++n.g}function UM(){UM=F,qf=!0,DQn=!1,LQn=!1,$Qn=!1,NQn=!1}function VN(n){UM(),!qf&&(this.c=n,this.e=!0,this.a=new Z)}function vLn(n,e){this.c=0,this.b=e,HMn.call(this,n,17493),this.a=this.c}function kLn(n){jzn(),Syn(this),this.a=new Ct,sY(this,n),xe(this.a,n)}function yLn(){pL(this),this.b=new V(St,St),this.a=new V(li,li)}function GM(){GM=F,$q=new fX(cin,0),A1n=new fX("TARGET_WIDTH",1)}function Ig(n,e){return(ea(n),s4(new Tn(n,new tQ(e,n.a)))).Bd(v3)}function R3e(){return Vi(),S(T(Ion,1),G,367,0,[Xs,Jh,Oc,Kc,zr])}function K3e(){return ow(),S(T(ine,1),G,375,0,[gj,zP,XP,GP,UP])}function _3e(){return o1(),S(T(Lsn,1),G,348,0,[J_,Dsn,Q_,pv,gv])}function H3e(){return T5(),S(T($hn,1),G,323,0,[Nhn,KH,_H,Y8,Z8])}function q3e(){return Yo(),S(T(hfn,1),G,171,0,[Ej,U8,ka,G8,xw])}function U3e(){return wA(),S(T(Hre,1),G,368,0,[pq,bq,mq,wq,gq])}function G3e(){return R5(),S(T(Hce,1),G,373,0,[L2,D3,g9,w9,_j])}function z3e(){return Yk(),S(T(K1n,1),G,324,0,[F1n,_q,R1n,Hq,B1n])}function X3e(){return gf(),S(T(Zh,1),G,170,0,[xn,pi,Ph,Kd,E1])}function V3e(){return Fg(),S(T(A9,1),G,256,0,[Aa,eE,adn,T9,ddn])}function W3e(n){return HE(),function(){return Kpe(n,this,arguments)}}function fr(n){return!n.c||!n.d?!1:!!n.c.i&&n.c.i==n.d.i}function IJ(n,e){return O(e,143)?An(n.c,u(e,143).c):!1}function Zu(n){return n.t||(n.t=new myn(n),k5(new Njn(n),0,n.t)),n.t}function jLn(n){this.b=n,ne.call(this,n),this.a=u(Un(this.b.a,4),129)}function ELn(n){this.b=n,yp.call(this,n),this.a=u(Un(this.b.a,4),129)}function Bs(n,e,t,i,r){LLn.call(this,e,i,r),this.c=n,this.b=t}function OJ(n,e,t,i,r){VOn.call(this,e,i,r),this.c=n,this.a=t}function DJ(n,e,t,i,r){WOn.call(this,e,i,r),this.c=n,this.a=t}function LJ(n,e,t,i,r){LLn.call(this,e,i,r),this.c=n,this.a=t}function WN(n,e){var t;return t=u(Lf(n.d,e),23),t||u(Lf(n.e,e),23)}function CLn(n,e){var t,i;return t=e.ld(),i=n.Fe(t),!!i&&mc(i.e,e.md())}function MLn(n,e){var t;return t=e.ld(),new i0(t,n.e.pc(t,u(e.md(),16)))}function J3e(n,e){var t;return t=n.a.get(e),t??K(ki,Fn,1,0,5,1)}function TLn(n){var e;return e=n.length,An(Yn.substr(Yn.length-e,e),n)}function fe(n){if(pe(n))return n.c=n.a,n.a.Pb();throw M(new nc)}function NJ(n,e){return e==0||n.e==0?n:e>0?wqn(n,e):RBn(n,-e)}function Fp(n,e){return e==0||n.e==0?n:e>0?RBn(n,e):wqn(n,-e)}function $J(n){ole.call(this,n==null?gu:Jr(n),O(n,82)?u(n,82):null)}function ALn(n){var e;return n.c||(e=n.r,O(e,90)&&(n.c=u(e,29))),n.c}function JN(n){var e;return e=new E0,Ur(e,n),U(e,(cn(),Fr),null),e}function SLn(n){var e,t;return e=n.c.i,t=n.d.i,e.k==(Vn(),Zt)&&t.k==Zt}function QN(n){var e,t,i;return e=n&ro,t=n>>22&ro,i=n<0?Il:0,Yc(e,t,i)}function Q3e(n){var e,t,i,r;for(t=n,i=0,r=t.length;i=0?n.Lh(i,t,!0):H0(n,e,t)}function Z3e(n,e,t){return bt(vp(pm(n),Ki(e.b)),vp(pm(n),Ki(t.b)))}function n4e(n,e,t){return bt(vp(pm(n),Ki(e.e)),vp(pm(n),Ki(t.e)))}function e4e(n,e){return y.Math.min(W1(e.a,n.d.d.c),W1(e.b,n.d.d.c))}function ik(n,e){n._i(n.i+1),O6(n,n.i,n.Zi(n.i,e)),n.Mi(n.i++,e),n.Ni()}function t5(n){var e,t;++n.j,e=n.g,t=n.i,n.g=null,n.i=0,n.Oi(t,e),n.Ni()}function PLn(n,e,t){var i;i=new NX(n.a),f5(i,n.a.a),Vc(i.f,e,t),n.a.a=i}function xJ(n,e,t,i){var r;for(r=0;re)throw M(new Ir(Mnn(n,e,"index")));return n}function Yl(n,e){var t;return t=(Ln(e,n.c.length),n.c[e]),Pz(n.c,e,1),t}function RJ(n,e){var t,i;return t=(Jn(n),n),i=(Jn(e),e),t==i?0:te.p?-1:0}function FLn(n){var e;return n.a||(e=n.r,O(e,156)&&(n.a=u(e,156))),n.a}function o4e(n,e,t){var i;return++n.e,--n.f,i=u(n.d[e].gd(t),136),i.md()}function s4e(n){var e,t;return e=n.ld(),t=u(n.md(),16),x7(t.Nc(),new L8n(e))}function BLn(n,e){return Zc(n.a,e)?(Bp(n.a,e),!0):!1}function Rp(n,e,t){return ek(e,n.e.Rd().gc()),ek(t,n.c.Rd().gc()),n.a[e][t]}function XM(n,e,t){this.a=n,this.b=e,this.c=t,nn(n.t,this),nn(e.i,this)}function VM(n,e,t,i){this.f=n,this.e=e,this.d=t,this.b=i,this.c=i?i.d:null}function rk(){this.b=new Ct,this.a=new Ct,this.b=new Ct,this.a=new Ct}function $4(){$4=F;var n,e;MO=(o4(),e=new xE,e),TO=(n=new fD,n)}function f4e(n){var e;return ea(n),e=new ISn(n,n.a.e,n.a.d|4),new uV(n,e)}function RLn(n){var e;for(z1(n),e=0;n.a.Bd(new W0n);)e=nr(e,1);return e}function WM(n,e){return Jn(e),n.c=0,"Initial capacity must not be negative")}function JM(){JM=F,p9=new lt("org.eclipse.elk.labels.labelManager")}function KLn(){KLn=F,ysn=new Dt("separateLayerConnections",(OT(),F_))}function lf(){lf=F,zw=new rX("REGULAR",0),ja=new rX("CRITICAL",1)}function ck(){ck=F,Kq=new lX("FIXED",0),JI=new lX("CENTER_NODE",1)}function QM(){QM=F,Tsn=new Jz("QUADRATIC",0),V_=new Jz("SCANLINE",1)}function _Ln(){_Ln=F,dne=Ce((u5(),S(T(Psn,1),G,322,0,[B8,pj,Ssn])))}function HLn(){HLn=F,bne=Ce((bT(),S(T(Osn,1),G,351,0,[Isn,VP,W_])))}function qLn(){qLn=F,fne=Ce((D0(),S(T(R_,1),G,372,0,[ub,ma,cb])))}function ULn(){ULn=F,mne=Ce((hd(),S(T(pne,1),G,460,0,[Y_,mv,p2])))}function GLn(){GLn=F,Cne=Ce((Z4(),S(T(sH,1),G,299,0,[uH,oH,mj])))}function zLn(){zLn=F,Tne=Ce((vl(),S(T(Mne,1),G,311,0,[vj,v2,E3])))}function XLn(){XLn=F,Zte=Ce((g5(),S(T(Lhn,1),G,390,0,[FH,Dhn,MI])))}function VLn(){VLn=F,oie=Ce((ST(),S(T(zhn,1),G,387,0,[Uhn,zH,Ghn])))}function WLn(){WLn=F,sie=Ce((d5(),S(T(Xhn,1),G,349,0,[VH,XH,Ij])))}function JLn(){JLn=F,uie=Ce((gr(),S(T(cie,1),G,463,0,[n9,Vu,Jc])))}function QLn(){QLn=F,fie=Ce((om(),S(T(Whn,1),G,350,0,[WH,Vhn,e9])))}function YLn(){YLn=F,hie=Ce((dT(),S(T(Yhn,1),G,352,0,[Qhn,JH,Jhn])))}function ZLn(){ZLn=F,lie=Ce((DT(),S(T(Zhn,1),G,388,0,[QH,Ov,Gw])))}function nNn(){nNn=F,are=Ce((b5(),S(T(gln,1),G,392,0,[wln,nq,Lj])))}function eNn(){eNn=F,Gre=Ce((Ok(),S(T(Uln,1),G,393,0,[KI,Hln,qln])))}function tNn(){tNn=F,ace=Ce((AT(),S(T(s1n,1),G,300,0,[Cq,o1n,u1n])))}function iNn(){iNn=F,dce=Ce((XT(),S(T(f1n,1),G,445,0,[Bj,qI,Mq])))}function rNn(){rNn=F,wce=Ce((rA(),S(T(bce,1),G,456,0,[Tq,Sq,Aq])))}function cNn(){cNn=F,mce=Ce((_T(),S(T(a1n,1),G,394,0,[l1n,Oq,h1n])))}function uNn(){uNn=F,Kce=Ce((nT(),S(T(O1n,1),G,439,0,[xq,I1n,P1n])))}function oNn(){oNn=F,Aie=Ce((O0(),S(T(Tie,1),G,464,0,[Oj,t9,PI])))}function sNn(){sNn=F,WQn=Ce((Uu(),S(T(VQn,1),G,471,0,[Mh,ga,Gs])))}function fNn(){fNn=F,XQn=Ce((bf(),S(T(Sw,1),G,237,0,[bc,Wc,wc])))}function hNn(){hNn=F,QQn=Ce((bu(),S(T(JQn,1),G,472,0,[vf,pa,zs])))}function lNn(){lNn=F,xQn=Ce((Gu(),S(T(xr,1),G,108,0,[xun,Yr,Aw])))}function aNn(){aNn=F,pZn=Ce((i5(),S(T(Pon,1),G,391,0,[E_,j_,C_])))}function dNn(){dNn=F,Que=Ce((jl(),S(T(ldn,1),G,346,0,[uO,M1,M9])))}function bNn(){bNn=F,Uce=Ce((Fk(),S(T(Fq,1),G,444,0,[XI,VI,WI])))}function wNn(){wNn=F,Xue=Ce((Nf(),S(T(Zan,1),G,278,0,[Bv,Jw,Rv])))}function gNn(){gNn=F,loe=Ce((Gp(),S(T(mdn,1),G,280,0,[pdn,Yw,aO])))}function Df(n,e){return!n.o&&(n.o=new Iu((Cc(),il),T1,n,0)),wx(n.o,e)}function h4e(n,e){var t;n.C&&(t=u(Cr(n.b,e),127).n,t.d=n.C.d,t.a=n.C.a)}function UJ(n){var e,t,i,r;r=n.d,e=n.a,t=n.b,i=n.c,n.d=t,n.a=i,n.b=r,n.c=e}function l4e(n){return!n.g&&(n.g=new CE),!n.g.b&&(n.g.b=new byn(n)),n.g.b}function uk(n){return!n.g&&(n.g=new CE),!n.g.c&&(n.g.c=new pyn(n)),n.g.c}function a4e(n){return!n.g&&(n.g=new CE),!n.g.d&&(n.g.d=new wyn(n)),n.g.d}function d4e(n){return!n.g&&(n.g=new CE),!n.g.a&&(n.g.a=new gyn(n)),n.g.a}function b4e(n,e,t,i){return t&&(i=t.Rh(e,Ot(t.Dh(),n.c.uk()),null,i)),i}function w4e(n,e,t,i){return t&&(i=t.Th(e,Ot(t.Dh(),n.c.uk()),null,i)),i}function e$(n,e,t,i){var r;return r=K(ye,Ke,28,e+1,15,1),vPe(r,n,e,t,i),r}function K(n,e,t,i,r,c){var s;return s=_Rn(r,i),r!=10&&S(T(n,c),e,t,r,s),s}function g4e(n,e,t){var i,r;for(r=new Y4(e,n),i=0;it||e=0?n.Lh(t,!0,!0):H0(n,e,!0)}function L4e(n,e,t){var i;return i=vFn(n,e,t),n.b=new ET(i.c.length),den(n,i)}function N4e(n){if(n.b<=0)throw M(new nc);return--n.b,n.a-=n.c.c,Y(n.a)}function $4e(n){var e;if(!n.a)throw M(new PIn);return e=n.a,n.a=At(n.a),e}function x4e(n){for(;!n.a;)if(!eSn(n.c,new C9n(n)))return!1;return!0}function Kp(n){var e;return Se(n),O(n,204)?(e=u(n,204),e):new _8n(n)}function F4e(n){YM(),u(n.of((qe(),Ww)),181).Fc((zu(),tE)),n.qf(sU,null)}function YM(){YM=F,wue=new Emn,pue=new Cmn,gue=M6e((qe(),sU),wue,Ma,pue)}function ZM(){ZM=F,Kln=new sX("LEAF_NUMBER",0),vq=new sX("NODE_SIZE",1)}function u$(n){n.a=K(ye,Ke,28,n.b+1,15,1),n.c=K(ye,Ke,28,n.b,15,1),n.d=0}function B4e(n,e){n.a.Ne(e.d,n.b)>0&&(nn(n.c,new GV(e.c,e.d,n.d)),n.b=e.d)}function nQ(n,e){if(n.g==null||e>=n.i)throw M(new aL(e,n.i));return n.g[e]}function kNn(n,e,t){if(rm(n,t),t!=null&&!n.fk(t))throw M(new uD);return t}function o$(n,e){return gk(e)!=10&&S(wo(e),e.Sm,e.__elementTypeId$,gk(e),n),n}function F4(n,e,t,i){var r;i=(j0(),i||Pun),r=n.slice(e,t),Tnn(r,n,e,t,-e,i)}function zo(n,e,t,i,r){return e<0?H0(n,t,i):u(t,69).wk().yk(n,n.hi(),e,i,r)}function R4e(n,e){return bt($(R(v(n,(W(),fb)))),$(R(v(e,fb))))}function yNn(){yNn=F,IQn=Ce((B4(),S(T(lP,1),G,304,0,[e_,t_,i_,r_])))}function B4(){B4=F,e_=new uC("All",0),t_=new lTn,i_=new kTn,r_=new hTn}function Uu(){Uu=F,Mh=new FD(s3,0),ga=new FD(qm,1),Gs=new FD(f3,2)}function jNn(){jNn=F,KA(),s0n=St,mse=li,f0n=new V9(St),vse=new V9(li)}function ENn(){ENn=F,jYn=Ce((N0(),S(T(yYn,1),G,417,0,[rj,ij,a_,d_])))}function CNn(){CNn=F,AYn=Ce((A5(),S(T(TYn,1),G,406,0,[fj,wP,gP,hj])))}function MNn(){MNn=F,CYn=Ce((Vp(),S(T(EYn,1),G,332,0,[uj,cj,oj,sj])))}function TNn(){TNn=F,DZn=Ce((dd(),S(T(Lon,1),G,389,0,[Ow,Don,P_,I_])))}function ANn(){ANn=F,TZn=Ce((nm(),S(T(MZn,1),G,416,0,[rb,Iw,Pw,a2])))}function SNn(){SNn=F,tne=Ce(($f(),S(T(ene,1),G,421,0,[j3,lv,av,B_])))}function PNn(){PNn=F,GZn=Ce((OT(),S(T(UZn,1),G,371,0,[F_,HP,qP,wj])))}function INn(){INn=F,nie=Ce((cw(),S(T(RH,1),G,203,0,[TI,BH,S2,A2])))}function ONn(){ONn=F,iie=Ce((lh(),S(T(Hhn,1),G,284,0,[k1,_hn,HH,qH])))}function hk(){hk=F,Fsn=new Yz(kh,0),QP=new Yz("IMPROVE_STRAIGHTNESS",1)}function DNn(n,e){var t,i;return i=e/n.c.Rd().gc()|0,t=e%n.c.Rd().gc(),Rp(n,i,t)}function LNn(n){var e;if(n.nl())for(e=n.i-1;e>=0;--e)L(n,e);return jJ(n)}function eQ(n){var e,t;if(!n.b)return null;for(t=n.b;e=t.a[0];)t=e;return t}function NNn(n){var e,t;if(!n.b)return null;for(t=n.b;e=t.a[1];)t=e;return t}function K4e(n){return O(n,180)?""+u(n,180).a:n==null?null:Jr(n)}function _4e(n){return O(n,180)?""+u(n,180).a:n==null?null:Jr(n)}function $Nn(n,e){if(e.a)throw M(new ec(nXn));fi(n.a,e),e.a=n,!n.j&&(n.j=e)}function tQ(n,e){IC.call(this,e.zd(),e.yd()&-16449),Jn(n),this.a=n,this.c=e}function H4e(n,e){return new _L(e,a0(Ki(e.e),e.f.a+n,e.f.b+n),(_n(),!1))}function q4e(n,e){return k4(),nn(n,new bi(e,Y(e.e.c.length+e.g.c.length)))}function U4e(n,e){return k4(),nn(n,new bi(e,Y(e.e.c.length+e.g.c.length)))}function xNn(){xNn=F,lce=Ce((sA(),S(T(c1n,1),G,354,0,[Eq,i1n,r1n,t1n])))}function FNn(){FNn=F,$re=Ce((w5(),S(T(xln,1),G,353,0,[aq,BI,lq,hq])))}function BNn(){BNn=F,hre=Ce((Qp(),S(T(rln,1),G,405,0,[LI,c9,u9,o9])))}function RNn(){RNn=F,Vue=Ce((El(),S(T(aU,1),G,223,0,[lU,Yj,Kv,F3])))}function KNn(){KNn=F,Zue=Ce((To(),S(T(Yue,1),G,291,0,[nE,nl,Ta,Zj])))}function _Nn(){_Nn=F,foe=Ce((go(),S(T(I9,1),G,386,0,[rE,Gd,iE,Qw])))}function HNn(){HNn=F,doe=Ce((qT(),S(T(Cdn,1),G,320,0,[wU,ydn,Edn,jdn])))}function qNn(){qNn=F,goe=Ce((LT(),S(T(woe,1),G,415,0,[gU,Tdn,Mdn,Adn])))}function nT(){nT=F,xq=new oL(mVn,0),I1n=new oL(Crn,1),P1n=new oL(kh,2)}function Wb(n,e,t,i,r){return Jn(n),Jn(e),Jn(t),Jn(i),Jn(r),new AW(n,e,i)}function UNn(n,e){var t;return t=u(Bp(n.e,e),400),t?(tW(t),t.e):null}function du(n,e){var t;return t=qr(n,e,0),t==-1?!1:(Yl(n,t),!0)}function GNn(n,e,t){var i;return z1(n),i=new LO,i.a=e,n.a.Nb(new TCn(i,t)),i.a}function G4e(n){var e;return z1(n),e=K(Pi,Tr,28,0,15,1),hg(n.a,new y9n(e)),e}function iQ(n){var e;if(!E$(n))throw M(new nc);return n.e=1,e=n.d,n.d=null,e}function n1(n){var e;return Vr(n)&&(e=0-n,!isNaN(e))?e:Q1(tm(n))}function qr(n,e,t){for(;t=0?tA(n,t,!0,!0):H0(n,e,!0)}function cQ(n){var e;return e=cd(Un(n,32)),e==null&&(iu(n),e=cd(Un(n,32))),e}function uQ(n){var e;return n.Oh()||(e=se(n.Dh())-n.ji(),n.$h().Mk(e)),n.zh()}function QNn(n,e){con=new kE,MYn=e,L8=n,u(L8.b,68),XJ(L8,con,null),aGn(L8)}function i5(){i5=F,E_=new RD("XY",0),j_=new RD("X",1),C_=new RD("Y",2)}function bu(){bu=F,vf=new BD("TOP",0),pa=new BD(qm,1),zs=new BD(Ftn,2)}function vl(){vl=F,vj=new GD(kh,0),v2=new GD("TOP",1),E3=new GD(Ftn,2)}function wk(){wk=F,UH=new nX("INPUT_ORDER",0),GH=new nX("PORT_DEGREE",1)}function R4(){R4=F,hun=Yc(ro,ro,524287),bQn=Yc(0,0,Ty),lun=QN(1),QN(2),aun=QN(0)}function a$(n){var e;return n.d!=n.r&&(e=ws(n),n.e=!!e&&e.lk()==bJn,n.d=e),n.e}function d$(n,e,t){var i;return i=n.g[e],O6(n,e,n.Zi(e,t)),n.Ri(e,t,i),n.Ni(),i}function rT(n,e){var t;return t=n.dd(e),t>=0?(n.gd(t),!0):!1}function b$(n,e){var t;for(Se(n),Se(e),t=!1;e.Ob();)t=t|n.Fc(e.Pb());return t}function Lf(n,e){var t;return t=u(ee(n.e,e),400),t?(DTn(n,t),t.e):null}function YNn(n){var e,t;return e=n/60|0,t=n%60,t==0?""+e:""+e+":"+(""+t)}function Jb(n,e){var t=n.a[e],i=(K$(),WK)[typeof t];return i?i(t):wY(typeof t)}function rc(n,e){var t,i;return ea(n),i=new _J(e,n.a),t=new rSn(i),new Tn(n,t)}function w$(n){var e;return e=n.b.c.length==0?null:sn(n.b,0),e!=null&&M$(n,0),e}function W4e(n,e){var t,i,r;r=e.c.i,t=u(ee(n.f,r),60),i=t.d.c-t.e.c,BQ(e.a,i,0)}function oQ(n,e){var t;for(++n.d,++n.c[e],t=e+1;t=0;)++e[0]}function J4e(n,e){eu(n,e==null||GC((Jn(e),e))||isNaN((Jn(e),e))?0:(Jn(e),e))}function Q4e(n,e){tu(n,e==null||GC((Jn(e),e))||isNaN((Jn(e),e))?0:(Jn(e),e))}function Y4e(n,e){I0(n,e==null||GC((Jn(e),e))||isNaN((Jn(e),e))?0:(Jn(e),e))}function Z4e(n,e){P0(n,e==null||GC((Jn(e),e))||isNaN((Jn(e),e))?0:(Jn(e),e))}function nme(n,e,t){return vp(new V(t.e.a+t.f.a/2,t.e.b+t.f.b/2),n)==(Jn(e),e)}function eme(n,e){return O(e,102)&&u(e,19).Bb&hr?new dL(e,n):new Y4(e,n)}function tme(n,e){return O(e,102)&&u(e,19).Bb&hr?new dL(e,n):new Y4(e,n)}function gk(n){return n.__elementTypeCategory$==null?10:n.__elementTypeCategory$}function e$n(n,e){return e==(xL(),xL(),AQn)?n.toLocaleLowerCase():n.toLowerCase()}function t$n(n){if(!n.e)throw M(new nc);return n.c=n.a=n.e,n.e=n.e.e,--n.d,n.a.f}function sQ(n){if(!n.c)throw M(new nc);return n.e=n.a=n.c,n.c=n.c.c,++n.d,n.a.f}function i$n(n){var e;for(++n.a,e=n.c.a.length;n.an.a[i]&&(i=t);return i}function r$n(n){var e;return e=u(v(n,(W(),ob)),313),e?e.a==n:!1}function c$n(n){var e;return e=u(v(n,(W(),ob)),313),e?e.i==n:!1}function u$n(){u$n=F,yZn=Ce((Vi(),S(T(Ion,1),G,367,0,[Xs,Jh,Oc,Kc,zr])))}function o$n(){o$n=F,rne=Ce((ow(),S(T(ine,1),G,375,0,[gj,zP,XP,GP,UP])))}function s$n(){s$n=F,wne=Ce((o1(),S(T(Lsn,1),G,348,0,[J_,Dsn,Q_,pv,gv])))}function f$n(){f$n=F,eie=Ce((T5(),S(T($hn,1),G,323,0,[Nhn,KH,_H,Y8,Z8])))}function h$n(){h$n=F,Sne=Ce((Yo(),S(T(hfn,1),G,171,0,[Ej,U8,ka,G8,xw])))}function l$n(){l$n=F,qre=Ce((wA(),S(T(Hre,1),G,368,0,[pq,bq,mq,wq,gq])))}function a$n(){a$n=F,qce=Ce((R5(),S(T(Hce,1),G,373,0,[L2,D3,g9,w9,_j])))}function d$n(){d$n=F,Wce=Ce((Yk(),S(T(K1n,1),G,324,0,[F1n,_q,R1n,Hq,B1n])))}function b$n(){b$n=F,zue=Ce((ci(),S(T(E9,1),G,88,0,[Wf,Xr,Br,Vf,us])))}function w$n(){w$n=F,mue=Ce((gf(),S(T(Zh,1),G,170,0,[xn,pi,Ph,Kd,E1])))}function g$n(){g$n=F,eoe=Ce((Fg(),S(T(A9,1),G,256,0,[Aa,eE,adn,T9,ddn])))}function p$n(){p$n=F,roe=Ce((tn(),S(T(lr,1),Mc,64,0,[sc,Xn,Zn,ae,Wn])))}function cT(){cT=F,Run=new Uz("BY_SIZE",0),s_=new Uz("BY_SIZE_AND_SHAPE",1)}function uT(){uT=F,v_=new Xz("EADES",0),vP=new Xz("FRUCHTERMAN_REINGOLD",1)}function pk(){pk=F,WP=new Qz("READING_DIRECTION",0),Nsn=new Qz("ROTATION",1)}function r5(){r5=F,PZn=new rwn,IZn=new own,AZn=new swn,SZn=new uwn,OZn=new fwn}function m$n(n){this.b=new Z,this.a=new Z,this.c=new Z,this.d=new Z,this.e=n}function v$n(n){this.g=n,this.f=new Z,this.a=y.Math.min(this.g.c.c,this.g.d.c)}function k$n(n,e,t){qC.call(this),lQ(this),this.a=n,this.c=t,this.b=e.d,this.f=e.e}function sme(n,e,t){var i,r;for(r=new C(t);r.a=0&&e0?e-1:e,eEn($he(U$n(YV(new up,t),n.n),n.j),n.k)}function Nr(n){var e,t;t=(e=new hD,e),ve((!n.q&&(n.q=new q(As,n,11,10)),n.q),t)}function fQ(n){return(n.i&2?"interface ":n.i&1?"":"class ")+(ll(n),n.o)}function oT(n){return Ec(n,et)>0?et:Ec(n,Wi)<0?Wi:Ae(n)}function Qb(n){return n<3?(Co(n,$zn),n+1):n=-.01&&n.a<=Kf&&(n.a=0),n.b>=-.01&&n.b<=Kf&&(n.b=0),n}function Og(n){Xg();var e,t;for(t=Arn,e=0;et&&(t=n[e]);return t}function C$n(n,e){var t;if(t=oy(n.Dh(),e),!t)throw M(new Gn(da+e+sK));return t}function Yb(n,e){var t;for(t=n;At(t);)if(t=At(t),t==e)return!0;return!1}function vme(n,e){var t,i,r;for(i=e.a.ld(),t=u(e.a.md(),16).gc(),r=0;rn||n>e)throw M(new pz("fromIndex: 0, toIndex: "+n+Mtn+e))}function S0(n){if(n<0)throw M(new Gn("Illegal Capacity: "+n));this.g=this.aj(n)}function hQ(n,e){return Mf(),Rs(sa),y.Math.abs(n-e)<=sa||n==e||isNaN(n)&&isNaN(e)}function m$(n,e){var t,i,r,c;for(i=n.d,r=0,c=i.length;r0&&(n.a/=e,n.b/=e),n}function jo(n){var e;return n.w?n.w:(e=lpe(n),e&&!e.Vh()&&(n.w=e),e)}function K4(n,e){var t,i;i=n.a,t=w5e(n,e,null),i!=e&&!n.e&&(t=Nm(n,e,t)),t&&t.oj()}function P$n(n,e,t){var i,r;i=e;do r=$(n.p[i.p])+t,n.p[i.p]=r,i=n.a[i.p];while(i!=e)}function I$n(n,e,t){var i=function(){return n.apply(i,arguments)};return e.apply(i,t),i}function Tme(n){var e;return n==null?null:(e=u(n,195),Bye(e,e.length))}function L(n,e){if(n.g==null||e>=n.i)throw M(new aL(e,n.i));return n.Wi(e,n.g[e])}function Ame(n,e){Dn();var t,i;for(i=new Z,t=0;t=14&&e<=16))),n}function Ee(n,e){var t;return Jn(e),t=n[":"+e],B7(!!t,"Enum constant undefined: "+e),t}function we(n,e,t,i,r,c){var s;return s=bN(n,e),G$n(t,s),s.i=r?8:0,s.f=i,s.e=r,s.g=c,s}function dQ(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=1,this.c=n,this.a=t}function bQ(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=2,this.c=n,this.a=t}function wQ(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=6,this.c=n,this.a=t}function gQ(n,e,t,i,r){this.d=e,this.k=i,this.f=r,this.o=-1,this.p=7,this.c=n,this.a=t}function pQ(n,e,t,i,r){this.d=e,this.j=i,this.e=r,this.o=-1,this.p=4,this.c=n,this.a=t}function z$n(n,e){var t,i,r,c;for(i=e,r=0,c=i.length;r=0))throw M(new Gn("tolerance ("+n+") must be >= 0"));return n}function V$n(n,e){var t;return O(e,44)?n.c.Mc(e):(t=wx(n,e),VT(n,e),t)}function Mr(n,e,t){return ad(n,e),zc(n,t),e1(n,0),Zb(n,1),u1(n,!0),c1(n,!0),n}function vk(n,e){var t;if(t=n.gc(),e<0||e>t)throw M(new Kb(e,t));return new SV(n,e)}function wT(n,e){n.b=y.Math.max(n.b,e.d),n.e+=e.r+(n.a.c.length==0?0:n.c),nn(n.a,e)}function W$n(n){Fb(n.c>=0),_8e(n.d,n.c)<0&&(n.a=n.a-1&n.d.a.length-1,n.b=n.d.c),n.c=-1}function gT(n){var e,t;for(t=n.c.Cc().Kc();t.Ob();)e=u(t.Pb(),16),e.$b();n.c.$b(),n.d=0}function Fme(n){var e,t,i,r;for(t=n.a,i=0,r=t.length;i=0}function CQ(n,e){n.r>0&&n.c0&&n.g!=0&&CQ(n.i,e/n.r*n.i.d))}function MQ(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,1,t,n.c))}function y$(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,4,t,n.c))}function X4(n,e){var t;t=n.k,n.k=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,2,t,n.k))}function j$(n,e){var t;t=n.D,n.D=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,2,t,n.D))}function mT(n,e){var t;t=n.f,n.f=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,8,t,n.f))}function vT(n,e){var t;t=n.i,n.i=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,7,t,n.i))}function TQ(n,e){var t;t=n.a,n.a=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,8,t,n.a))}function AQ(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,0,t,n.b))}function SQ(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,0,t,n.b))}function PQ(n,e){var t;t=n.c,n.c=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,1,t,n.c))}function IQ(n,e){var t;t=n.d,n.d=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,1,t,n.d))}function Ume(n,e,t){var i;n.b=e,n.a=t,i=(n.a&512)==512?new gjn:new rG,n.c=rAe(i,n.b,n.a)}function oxn(n,e){return Sl(n.e,e)?(dr(),a$(e)?new eM(e,n):new j7(e,n)):new $Mn(e,n)}function Gme(n){var e,t;return 0>n?new Dz:(e=n+1,t=new vLn(e,n),new oV(null,t))}function zme(n,e){Dn();var t;return t=new ap(1),Ai(n)?Dr(t,n,e):Vc(t.f,n,e),new eD(t)}function Xme(n,e){var t,i;return t=n.c,i=e.e[n.p],i>0?u(sn(t.a,i-1),10):null}function Vme(n,e){var t,i;return t=n.o+n.p,i=e.o+e.p,te?(e<<=1,e>0?e:Y5):e}function E$(n){switch(_X(n.e!=3),n.e){case 2:return!1;case 0:return!0}return i4e(n)}function fxn(n,e){var t;return O(e,8)?(t=u(e,8),n.a==t.a&&n.b==t.b):!1}function Jme(n,e){var t;t=new kE,u(e.b,68),u(e.b,68),u(e.b,68),nu(e.a,new BV(n,t,e))}function hxn(n,e){var t,i;for(i=e.vc().Kc();i.Ob();)t=u(i.Pb(),44),Vk(n,t.ld(),t.md())}function OQ(n,e){var t;t=n.d,n.d=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,11,t,n.d))}function kT(n,e){var t;t=n.j,n.j=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,13,t,n.j))}function DQ(n,e){var t;t=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,1,21,t,n.b))}function Qme(n,e){(UM(),qf?null:e.c).length==0&&TAn(e,new BU),Dr(n.a,qf?null:e.c,e)}function Yme(n,e){e.Ug("Hierarchical port constraint processing",1),g9e(n),xLe(n),e.Vg()}function D0(){D0=F,ub=new KD("START",0),ma=new KD("MIDDLE",1),cb=new KD("END",2)}function yT(){yT=F,RI=new oX("P1_NODE_PLACEMENT",0),D2=new oX("P2_EDGE_ROUTING",1)}function J1(){J1=F,y3=new lt(Jtn),jP=new lt(MXn),$8=new lt(TXn),lj=new lt(AXn)}function L0(n){var e;return FL(n.f.g,n.d),oe(n.b),n.c=n.a,e=u(n.a.Pb(),44),n.b=GQ(n),e}function LQ(n){var e;return n.b==null?(Gl(),Gl(),dE):(e=n.ul()?n.tl():n.sl(),e)}function lxn(n,e){var t;return t=e==null?-1:qr(n.b,e,0),t<0?!1:(M$(n,t),!0)}function Ks(n,e){var t;return Jn(e),t=e.g,n.b[t]?!1:($t(n.b,t,e),++n.c,!0)}function jT(n,e){var t,i;return t=1-e,i=n.a[t],n.a[t]=i.a[e],i.a[e]=n,n.b=!0,i.b=!1,i}function Zme(n,e){var t,i;for(i=e.Kc();i.Ob();)t=u(i.Pb(),272),n.b=!0,fi(n.e,t),t.b=n}function nve(n,e){var t,i;return t=u(v(n,(cn(),Hw)),8),i=u(v(e,Hw),8),bt(t.b,i.b)}function C$(n,e,t){var i,r,c;return c=e>>5,r=e&31,i=vi(U1(n.n[t][c],Ae(Fs(r,1))),3),i}function axn(n,e,t){var i,r,c;for(c=n.a.length-1,r=n.b,i=0;i0?1:0:(!n.c&&(n.c=Y7(vc(n.f))),n.c).e}function yxn(n,e){e?n.B==null&&(n.B=n.D,n.D=null):n.B!=null&&(n.D=n.B,n.B=null)}function rve(n,e){return nm(),n==rb&&e==Iw||n==Iw&&e==rb||n==a2&&e==Pw||n==Pw&&e==a2}function cve(n,e){return nm(),n==rb&&e==Pw||n==rb&&e==a2||n==Iw&&e==a2||n==Iw&&e==Pw}function jxn(n,e){return Mf(),Rs(Kf),y.Math.abs(0-e)<=Kf||e==0||isNaN(0)&&isNaN(e)?0:n/e}function Exn(n,e){return $(R(ho($k(_r(new Tn(null,new In(n.c.b,16)),new I7n(n)),e))))}function FQ(n,e){return $(R(ho($k(_r(new Tn(null,new In(n.c.b,16)),new P7n(n)),e))))}function uve(){return pr(),S(T(cH,1),G,259,0,[ZP,cs,K8,nI,yv,m2,_8,vv,kv,eI])}function ove(){return gs(),S(T(Khn,1),G,243,0,[AI,Sj,Pj,Fhn,Bhn,xhn,Rhn,SI,pb,Uw])}function sve(n,e){var t;e.Ug("General Compactor",1),t=d8e(u(z(n,(ua(),yq)),393)),t.Cg(n)}function fve(n,e){var t,i;return t=u(z(n,(ua(),_I)),17),i=u(z(e,_I),17),jc(t.a,i.a)}function BQ(n,e,t){var i,r;for(r=ge(n,0);r.b!=r.d.c;)i=u(be(r),8),i.a+=e,i.b+=t;return n}function o5(n,e,t){var i;for(i=n.b[t&n.f];i;i=i.b)if(t==i.a&&oh(e,i.g))return i;return null}function s5(n,e,t){var i;for(i=n.c[t&n.f];i;i=i.d)if(t==i.f&&oh(e,i.i))return i;return null}function hve(n,e,t){var i,r,c;for(i=0,r=0;r>>31;i!=0&&(n[t]=i)}function P$(n,e,t,i,r,c){var s;this.c=n,s=new Z,pZ(n,s,e,n.b,t,i,r,c),this.a=new xi(s,0)}function Cxn(){this.c=new XE(0),this.b=new XE(Trn),this.d=new XE(lVn),this.a=new XE(QB)}function Vo(n,e,t,i,r,c,s){je.call(this,n,e),this.d=t,this.e=i,this.c=r,this.b=c,this.a=If(s)}function Ut(n,e,t,i,r,c,s,f,h,l,a,d,g){return P_n(n,e,t,i,r,c,s,f,h,l,a,d,g),sx(n,!1),n}function lve(n){return n.b.c.i.k==(Vn(),Zt)?u(v(n.b.c.i,(W(),st)),12):n.b.c}function Mxn(n){return n.b.d.i.k==(Vn(),Zt)?u(v(n.b.d.i,(W(),st)),12):n.b.d}function ave(n){var e;return e=BM(n),o0(e.a,0)?(QE(),QE(),SQn):(QE(),new uAn(e.b))}function I$(n){var e;return e=gJ(n),o0(e.a,0)?(Ob(),Ob(),n_):(Ob(),new AL(e.b))}function O$(n){var e;return e=gJ(n),o0(e.a,0)?(Ob(),Ob(),n_):(Ob(),new AL(e.c))}function Txn(n){switch(n.g){case 2:return tn(),Wn;case 4:return tn(),Zn;default:return n}}function Axn(n){switch(n.g){case 1:return tn(),ae;case 3:return tn(),Xn;default:return n}}function Sxn(n){switch(n.g){case 0:return new hmn;case 1:return new lmn;default:return null}}function Hp(){Hp=F,x_=new Dt("edgelabelcenterednessanalysis.includelabel",(_n(),wa))}function RQ(){RQ=F,Mie=ah(WMn(Re(Re(new ii,(Vi(),Oc),(tr(),NP)),Kc,PP),zr),LP)}function Pxn(){Pxn=F,Pie=ah(WMn(Re(Re(new ii,(Vi(),Oc),(tr(),NP)),Kc,PP),zr),LP)}function D$(){D$=F,x9=new ljn,CU=S(T(ku,1),s2,179,0,[]),Joe=S(T(As,1),Gcn,62,0,[])}function V4(){V4=F,dj=new Vz("TO_INTERNAL_LTR",0),L_=new Vz("TO_INPUT_DIRECTION",1)}function Ou(){Ou=F,Ron=new wwn,Fon=new gwn,Bon=new pwn,xon=new mwn,Kon=new vwn,_on=new kwn}function dve(n,e){e.Ug(HXn,1),HY(Qhe(new IE((o6(),new kN(n,!1,!1,new qU))))),e.Vg()}function bve(n,e,t){t.Ug("DFS Treeifying phase",1),O8e(n,e),PTe(n,e),n.a=null,n.b=null,t.Vg()}function kk(n,e){return _n(),Ai(n)?RJ(n,Oe(e)):$b(n)?tN(n,R(e)):Nb(n)?rwe(n,un(e)):n.Fd(e)}function f5(n,e){var t,i;for(Jn(e),i=e.vc().Kc();i.Ob();)t=u(i.Pb(),44),n.zc(t.ld(),t.md())}function wve(n,e,t){var i;for(i=t.Kc();i.Ob();)if(!_M(n,e,i.Pb()))return!1;return!0}function gve(n,e,t,i,r){var c;return t&&(c=Ot(e.Dh(),n.c),r=t.Rh(e,-1-(c==-1?i:c),null,r)),r}function pve(n,e,t,i,r){var c;return t&&(c=Ot(e.Dh(),n.c),r=t.Th(e,-1-(c==-1?i:c),null,r)),r}function Ixn(n){var e;if(n.b==-2){if(n.e==0)e=-1;else for(e=0;n.a[e]==0;e++);n.b=e}return n.b}function mve(n){if(Jn(n),n.length==0)throw M(new eh("Zero length BigInteger"));ESe(this,n)}function KQ(n){this.i=n.gc(),this.i>0&&(this.g=this.aj(this.i+(this.i/8|0)+1),n.Qc(this.g))}function Oxn(n,e,t){this.g=n,this.d=e,this.e=t,this.a=new Z,IEe(this),Dn(),Yt(this.a,null)}function _Q(n,e){e.q=n,n.d=y.Math.max(n.d,e.r),n.b+=e.d+(n.a.c.length==0?0:n.c),nn(n.a,e)}function W4(n,e){var t,i,r,c;return r=n.c,t=n.c+n.b,c=n.d,i=n.d+n.a,e.a>r&&e.ac&&e.br?t=r:zn(e,t+1),n.a=qo(n.a,0,e)+(""+i)+$W(n.a,t)}function Kxn(n,e){n.a=nr(n.a,1),n.c=y.Math.min(n.c,e),n.b=y.Math.max(n.b,e),n.d=nr(n.d,e)}function Mve(n,e){return e1||n.Ob())return++n.a,n.g=0,e=n.i,n.Ob(),e;throw M(new nc)}function Uxn(n){switch(n.a.g){case 1:return new WCn;case 3:return new WRn;default:return new s8n}}function qQ(n,e){switch(e){case 1:return!!n.n&&n.n.i!=0;case 2:return n.k!=null}return wJ(n,e)}function vc(n){return Ay>22),r=n.h+e.h+(i>>22),Yc(t&ro,i&ro,r&Il)}function Yxn(n,e){var t,i,r;return t=n.l-e.l,i=n.m-e.m+(t>>22),r=n.h-e.h+(i>>22),Yc(t&ro,i&ro,r&Il)}function zve(n){var e,t;for(RDe(n),t=new C(n.d);t.ai)throw M(new Kb(e,i));return n.Si()&&(t=gOn(n,t)),n.Ei(e,t)}function em(n,e,t,i,r){var c,s;for(s=t;s<=r;s++)for(c=e;c<=i;c++)Rg(n,c,s)||xA(n,c,s,!0,!1)}function u6e(n){Xg();var e,t,i;for(t=K(Ei,J,8,2,0,1),i=0,e=0;e<2;e++)i+=.5,t[e]=Z9e(i,n);return t}function tm(n){var e,t,i;return e=~n.l+1&ro,t=~n.m+(e==0?1:0)&ro,i=~n.h+(e==0&&t==0?1:0)&Il,Yc(e,t,i)}function QQ(n){var e;if(n<0)return Wi;if(n==0)return 0;for(e=Y5;!(e&n);e>>=1);return e}function R$(n,e,t){return n>=128?!1:n<64?M6(vi(Fs(1,n),t),0):M6(vi(Fs(1,n-64),e),0)}function Pk(n,e,t){return t==null?(!n.q&&(n.q=new de),Bp(n.q,e)):(!n.q&&(n.q=new de),Xe(n.q,e,t)),n}function U(n,e,t){return t==null?(!n.q&&(n.q=new de),Bp(n.q,e)):(!n.q&&(n.q=new de),Xe(n.q,e,t)),n}function fFn(n){var e,t;return t=new zM,Ur(t,n),U(t,(J1(),y3),n),e=new de,$Pe(n,t,e),fDe(n,t,e),t}function hFn(n){var e,t;return e=n.t-n.k[n.o.p]*n.d+n.j[n.o.p]>n.f,t=n.u+n.e[n.o.p]*n.d>n.f*n.s*n.d,e||t}function lFn(n,e){var t,i,r,c;for(t=!1,i=n.a[e].length,c=0;c=0,"Negative initial capacity"),B7(e>=0,"Non-positive load factor"),Hu(this)}function s6e(n,e,t,i,r){var c,s;if(s=n.length,c=t.length,e<0||i<0||r<0||e+r>s||i+r>c)throw M(new qG)}function eY(n,e){Dn();var t,i,r,c,s;for(s=!1,i=e,r=0,c=i.length;r1||e>=0&&n.b<3)}function H$(n){var e,t,i;e=~n.l+1&ro,t=~n.m+(e==0?1:0)&ro,i=~n.h+(e==0&&t==0?1:0)&Il,n.l=e,n.m=t,n.h=i}function rY(n){Dn();var e,t,i;for(i=1,t=n.Kc();t.Ob();)e=t.Pb(),i=31*i+(e!=null?mt(e):0),i=i|0;return i}function d6e(n,e,t,i,r){var c;return c=Xnn(n,e),t&&H$(c),r&&(n=u7e(n,e),i?ba=tm(n):ba=Yc(n.l,n.m,n.h)),c}function yFn(n,e,t){n.g=uF(n,e,(tn(),Zn),n.b),n.d=uF(n,t,Zn,n.b),!(n.g.c==0||n.d.c==0)&&YKn(n)}function jFn(n,e,t){n.g=uF(n,e,(tn(),Wn),n.j),n.d=uF(n,t,Wn,n.j),!(n.g.c==0||n.d.c==0)&&YKn(n)}function cY(n,e){switch(e){case 7:return!!n.e&&n.e.i!=0;case 8:return!!n.d&&n.d.i!=0}return qY(n,e)}function b6e(n,e){switch(e.g){case 0:O(n.b,641)||(n.b=new Rxn);break;case 1:O(n.b,642)||(n.b=new BSn)}}function EFn(n){switch(n.g){case 0:return new gmn;default:throw M(new Gn(xS+(n.f!=null?n.f:""+n.g)))}}function CFn(n){switch(n.g){case 0:return new wmn;default:throw M(new Gn(xS+(n.f!=null?n.f:""+n.g)))}}function w6e(n,e,t){return!s4(ut(new Tn(null,new In(n.c,16)),new Z3(new hMn(e,t)))).Bd((Xa(),v3))}function MFn(n,e){return vp(pm(u(v(e,(lc(),vb)),88)),new V(n.c.e.a-n.b.e.a,n.c.e.b-n.b.e.b))<=0}function g6e(n,e){for(;n.g==null&&!n.c?cJ(n):n.g==null||n.i!=0&&u(n.g[n.i-1],51).Ob();)kle(e,CA(n))}function ld(n){var e,t;for(t=new C(n.a.b);t.ai?1:0}function v6e(n){return nn(n.c,(qp(),bue)),hQ(n.a,$(R(rn((bx(),EI)))))?new tvn:new $kn(n)}function k6e(n){for(;!n.d||!n.d.Ob();)if(n.b&&!i6(n.b))n.d=u(Sp(n.b),51);else return null;return n.d}function oY(n){switch(n.g){case 1:return lVn;default:case 2:return 0;case 3:return QB;case 4:return Trn}}function y6e(){nt();var n;return IU||(n=_1e(oa("M",!0)),n=uM(oa("M",!1),n),IU=n,IU)}function LT(){LT=F,gU=new CC("ELK",0),Tdn=new CC("JSON",1),Mdn=new CC("DOT",2),Adn=new CC("SVG",3)}function d5(){d5=F,VH=new WD("STACKED",0),XH=new WD("REVERSE_STACKED",1),Ij=new WD("SEQUENCED",2)}function b5(){b5=F,wln=new eL(kh,0),nq=new eL("MIDDLE_TO_MIDDLE",1),Lj=new eL("AVOID_OVERLAP",2)}function cm(){cm=F,Esn=new Ygn,Csn=new Zgn,JZn=new Jgn,WZn=new n2n,VZn=new Qgn,jsn=(Jn(VZn),new O0n)}function NT(){NT=F,hdn=new f0(15),Jue=new Ni((qe(),C1),hdn),C9=N3,udn=Pue,odn=Hd,fdn=K2,sdn=Vw}function Lg(n,e){var t,i,r,c,s;for(i=e,r=0,c=i.length;r=n.b.c.length||(fY(n,2*e+1),t=2*e+2,t0&&(e.Cd(t),t.i&&E5e(t))}function hY(n,e,t){var i;for(i=t-1;i>=0&&n[i]===e[i];i--);return i<0?0:ND(vi(n[i],mr),vi(e[i],mr))?-1:1}function SFn(n,e,t){var i,r;this.g=n,this.c=e,this.a=this,this.d=this,r=sxn(t),i=K(sQn,Cy,227,r,0,1),this.b=i}function X$(n,e,t,i,r){var c,s;for(s=t;s<=r;s++)for(c=e;c<=i;c++)if(Rg(n,c,s))return!0;return!1}function A6e(n,e){var t,i;for(i=n.Zb().Cc().Kc();i.Ob();)if(t=u(i.Pb(),16),t.Hc(e))return!0;return!1}function PFn(n,e,t){var i,r,c,s;for(Jn(t),s=!1,c=n.fd(e),r=t.Kc();r.Ob();)i=r.Pb(),c.Rb(i),s=!0;return s}function V$(n,e){var t,i;return i=u(Un(n.a,4),129),t=K(jU,MK,424,e,0,1),i!=null&&Ic(i,0,t,0,i.length),t}function IFn(n,e){var t;return t=new jF((n.f&256)!=0,n.i,n.a,n.d,(n.f&16)!=0,n.j,n.g,e),n.e!=null||(t.c=n),t}function S6e(n,e){var t;return n===e?!0:O(e,85)?(t=u(e,85),dnn(Wa(n),t.vc())):!1}function OFn(n,e,t){var i,r;for(r=t.Kc();r.Ob();)if(i=u(r.Pb(),44),n.Be(e,i.md()))return!0;return!1}function DFn(n,e,t){return n.d[e.p][t.p]||(O9e(n,e,t),n.d[e.p][t.p]=!0,n.d[t.p][e.p]=!0),n.a[e.p][t.p]}function P6e(n,e){var t;return!n||n==e||!kt(e,(W(),sb))?!1:(t=u(v(e,(W(),sb)),10),t!=n)}function W$(n){switch(n.i){case 2:return!0;case 1:return!1;case-1:++n.c;default:return n.$l()}}function LFn(n){switch(n.i){case-2:return!0;case-1:return!1;case 1:--n.c;default:return n._l()}}function NFn(n){yOn.call(this,"The given string does not match the expected format for individual spacings.",n)}function I6e(n,e){var t;e.Ug("Min Size Preprocessing",1),t=jnn(n),ht(n,(_h(),a9),t.a),ht(n,UI,t.b),e.Vg()}function O6e(n){var e,t,i;for(e=0,i=K(Ei,J,8,n.b,0,1),t=ge(n,0);t.b!=t.d.c;)i[e++]=u(be(t),8);return i}function J$(n,e,t){var i,r,c;for(i=new Ct,c=ge(t,0);c.b!=c.d.c;)r=u(be(c),8),xe(i,new rr(r));PFn(n,e,i)}function D6e(n,e){var t;return t=nr(n,e),ND(RN(n,e),0)|AC(RN(n,t),0)?t:nr(Ey,RN(U1(t,63),1))}function L6e(n,e){var t,i;return t=u(n.d.Bc(e),16),t?(i=n.e.hc(),i.Gc(t),n.e.d-=t.gc(),t.$b(),i):null}function $Fn(n){var e;if(e=n.a.c.length,e>0)return E4(e-1,n.a.c.length),Yl(n.a,e-1);throw M(new $yn)}function xFn(n,e,t){if(n>e)throw M(new Gn(ZA+n+Qzn+e));if(n<0||e>t)throw M(new pz(ZA+n+Stn+e+Mtn+t))}function um(n,e){n.D==null&&n.B!=null&&(n.D=n.B,n.B=null),j$(n,e==null?null:(Jn(e),e)),n.C&&n.hl(null)}function N6e(n,e){var t;t=rn((bx(),EI))!=null&&e.Sg()!=null?$(R(e.Sg()))/$(R(rn(EI))):1,Xe(n.b,e,t)}function lY(n,e){var t,i;if(i=n.c[e],i!=0)for(n.c[e]=0,n.d-=i,t=e+1;tPS?n-t>PS:t-n>PS}function XFn(n,e){var t;for(t=0;tr&&(EKn(e.q,r),i=t!=e.q.d)),i}function VFn(n,e){var t,i,r,c,s,f,h,l;return h=e.i,l=e.j,i=n.f,r=i.i,c=i.j,s=h-r,f=l-c,t=y.Math.sqrt(s*s+f*f),t}function pY(n,e){var t,i;return i=WT(n),i||(t=(UF(),$Hn(e)),i=new Cyn(t),ve(i.El(),n)),i}function Lk(n,e){var t,i;return t=u(n.c.Bc(e),16),t?(i=n.hc(),i.Gc(t),n.d-=t.gc(),t.$b(),n.mc(i)):n.jc()}function G6e(n,e){var t,i;for(i=to(n.d,1)!=0,t=!0;t;)t=!1,t=e.c.mg(e.e,i),t=t|sy(n,e,i,!1),i=!i;$Q(n)}function WFn(n,e,t,i){var r,c;n.a=e,c=i?0:1,n.f=(r=new s_n(n.c,n.a,t,c),new Kqn(t,n.a,r,n.e,n.b,n.c==(O0(),t9)))}function xT(n){var e;return oe(n.a!=n.b),e=n.d.a[n.a],EAn(n.b==n.d.c&&e!=null),n.c=n.a,n.a=n.a+1&n.d.a.length-1,e}function JFn(n){var e;if(n.c!=0)return n.c;for(e=0;e=n.c.b:n.a<=n.c.b))throw M(new nc);return e=n.a,n.a+=n.c.c,++n.b,Y(e)}function ex(n){var e;return e=new DX(n.a),Ur(e,n),U(e,(W(),st),n),e.o.a=n.g,e.o.b=n.f,e.n.a=n.i,e.n.b=n.j,e}function tx(n){return(tn(),mu).Hc(n.j)?$(R(v(n,(W(),jv)))):cc(S(T(Ei,1),J,8,0,[n.i.n,n.n,n.a])).b}function X6e(n){var e;return e=DC(Cie),u(v(n,(W(),Hc)),21).Hc((pr(),yv))&&Re(e,(Vi(),Oc),(tr(),FP)),e}function V6e(n){var e,t,i,r;for(r=new ni,i=new C(n);i.a=0?e:-e;i>0;)i%2==0?(t*=t,i=i/2|0):(r*=t,i-=1);return e<0?1/r:r}function Z6e(n,e){var t,i,r;for(r=1,t=n,i=e>=0?e:-e;i>0;)i%2==0?(t*=t,i=i/2|0):(r*=t,i-=1);return e<0?1/r:r}function na(n,e){var t,i,r,c;return c=(r=n?WT(n):null,O_n((i=e,r&&r.Gl(),i))),c==e&&(t=WT(n),t&&t.Gl()),c}function QFn(n,e,t){var i,r;return r=n.f,n.f=e,n.Db&4&&!(n.Db&1)&&(i=new Ci(n,1,0,r,e),t?t.nj(i):t=i),t}function YFn(n,e,t){var i,r;return r=n.b,n.b=e,n.Db&4&&!(n.Db&1)&&(i=new Ci(n,1,3,r,e),t?t.nj(i):t=i),t}function vY(n,e,t){var i,r;return r=n.a,n.a=e,n.Db&4&&!(n.Db&1)&&(i=new Ci(n,1,1,r,e),t?t.nj(i):t=i),t}function ZFn(n){var e,t;if(n!=null)for(t=0;t=i||e-129&&n<128?(FSn(),e=n+128,t=pun[e],!t&&(t=pun[e]=new vG(n)),t):new vG(n)}function sm(n){var e,t;return n>-129&&n<128?(nPn(),e=n+128,t=yun[e],!t&&(t=yun[e]=new yG(n)),t):new yG(n)}function tBn(n,e){var t;n.a.c.length>0&&(t=u(sn(n.a,n.a.c.length-1),579),sY(t,e))||nn(n.a,new kLn(e))}function c5e(n){xs();var e,t;e=n.d.c-n.e.c,t=u(n.g,154),nu(t.b,new p7n(e)),nu(t.c,new m7n(e)),qi(t.i,new v7n(e))}function iBn(n){var e;return e=new x1,e.a+="VerticalSegment ",Dc(e,n.e),e.a+=" ",Be(e,RX(new yD,new C(n.k))),e.a}function ix(n,e){var t,i,r;for(t=0,r=uc(n,e).Kc();r.Ob();)i=u(r.Pb(),12),t+=v(i,(W(),Xu))!=null?1:0;return t}function xg(n,e,t){var i,r,c;for(i=0,c=ge(n,0);c.b!=c.d.c&&(r=$(R(be(c))),!(r>t));)r>=e&&++i;return i}function rBn(n,e){Se(n);try{return n._b(e)}catch(t){if(t=It(t),O(t,212)||O(t,169))return!1;throw M(t)}}function yY(n,e){Se(n);try{return n.Hc(e)}catch(t){if(t=It(t),O(t,212)||O(t,169))return!1;throw M(t)}}function u5e(n,e){Se(n);try{return n.Mc(e)}catch(t){if(t=It(t),O(t,212)||O(t,169))return!1;throw M(t)}}function tw(n,e){Se(n);try{return n.xc(e)}catch(t){if(t=It(t),O(t,212)||O(t,169))return null;throw M(t)}}function o5e(n,e){Se(n);try{return n.Bc(e)}catch(t){if(t=It(t),O(t,212)||O(t,169))return null;throw M(t)}}function p5(n,e){switch(e.g){case 2:case 1:return uc(n,e);case 3:case 4:return Qo(uc(n,e))}return Dn(),Dn(),sr}function m5(n){var e;return n.Db&64?_s(n):(e=new ls(_s(n)),e.a+=" (name: ",Er(e,n.zb),e.a+=")",e.a)}function s5e(n){var e;return e=u(Lf(n.c.c,""),233),e||(e=new Np(u4(c4(new ep,""),"Other")),s1(n.c.c,"",e)),e}function jY(n,e,t){var i,r;return r=n.sb,n.sb=e,n.Db&4&&!(n.Db&1)&&(i=new Ci(n,1,4,r,e),t?t.nj(i):t=i),t}function EY(n,e,t){var i,r;return r=n.r,n.r=e,n.Db&4&&!(n.Db&1)&&(i=new Ci(n,1,8,r,n.r),t?t.nj(i):t=i),t}function f5e(n,e,t){var i,r;return i=new ml(n.e,4,13,(r=e.c,r||(On(),Yf)),null,f1(n,e),!1),t?t.nj(i):t=i,t}function h5e(n,e,t){var i,r;return i=new ml(n.e,3,13,null,(r=e.c,r||(On(),Yf)),f1(n,e),!1),t?t.nj(i):t=i,t}function r1(n,e){var t,i;return t=u(e,691),i=t.el(),!i&&t.fl(i=O(e,90)?new xMn(n,u(e,29)):new cDn(n,u(e,156))),i}function Nk(n,e,t){var i;n._i(n.i+1),i=n.Zi(e,t),e!=n.i&&Ic(n.g,e,n.g,e+1,n.i-e),$t(n.g,e,i),++n.i,n.Mi(e,t),n.Ni()}function l5e(n,e){var t;return e.a&&(t=e.a.a.length,n.a?Be(n.a,n.b):n.a=new mo(n.d),aDn(n.a,e.a,e.d.length,t)),n}function a5e(n,e){var t;n.c=e,n.a=p8e(e),n.a<54&&(n.f=(t=e.d>1?hDn(e.a[0],e.a[1]):hDn(e.a[0],0),id(e.e>0?t:n1(t))))}function $k(n,e){var t;return t=new LO,n.a.Bd(t)?(b4(),new wD(Jn(GNn(n,t.a,e)))):(z1(n),b4(),b4(),Dun)}function cBn(n,e){var t;n.c.length!=0&&(t=u(xf(n,K(Qh,b1,10,n.c.length,0,1)),199),CX(t,new rgn),Y_n(t,e))}function uBn(n,e){var t;n.c.length!=0&&(t=u(xf(n,K(Qh,b1,10,n.c.length,0,1)),199),CX(t,new cgn),Y_n(t,e))}function rt(n,e){return Ai(n)?An(n,e):$b(n)?nSn(n,e):Nb(n)?(Jn(n),x(n)===x(e)):pW(n)?n.Fb(e):hW(n)?YMn(n,e):hJ(n,e)}function Wo(n,e,t){if(e<0)Pnn(n,t);else{if(!t.rk())throw M(new Gn(da+t.xe()+p8));u(t,69).wk().Ek(n,n.hi(),e)}}function oBn(n,e,t){if(n<0||e>t)throw M(new Ir(ZA+n+Stn+e+", size: "+t));if(n>e)throw M(new Gn(ZA+n+Qzn+e))}function sBn(n){var e;return n.Db&64?_s(n):(e=new ls(_s(n)),e.a+=" (source: ",Er(e,n.d),e.a+=")",e.a)}function fBn(n){return n>=65&&n<=70?n-65+10:n>=97&&n<=102?n-97+10:n>=48&&n<=57?n-48:0}function d5e(n){VA();var e,t,i,r;for(t=jx(),i=0,r=t.length;i=0?ta(n):G6(ta(n1(n))))}function aBn(n,e,t,i,r,c){this.e=new Z,this.f=(gr(),n9),nn(this.e,n),this.d=e,this.a=t,this.b=i,this.f=r,this.c=c}function g5e(n,e,t){n.n=Va(xa,[J,SB],[376,28],14,[t,wi(y.Math.ceil(e/32))],2),n.o=e,n.p=t,n.j=e-1>>1,n.k=t-1>>1}function dBn(n){return n-=n>>1&1431655765,n=(n>>2&858993459)+(n&858993459),n=(n>>4)+n&252645135,n+=n>>8,n+=n>>16,n&63}function bBn(n,e){var t,i;for(i=new ne(n);i.e!=i.i.gc();)if(t=u(ce(i),142),x(e)===x(t))return!0;return!1}function p5e(n,e,t){var i,r,c;return c=(r=Mm(n.b,e),r),c&&(i=u(qA(ak(n,c),""),29),i)?Qnn(n,i,e,t):null}function rx(n,e,t){var i,r,c;return c=(r=Mm(n.b,e),r),c&&(i=u(qA(ak(n,c),""),29),i)?Ynn(n,i,e,t):null}function m5e(n,e){var t;if(t=Dg(n.i,e),t==null)throw M(new nh("Node did not exist in input."));return HQ(e,t),null}function v5e(n,e){var t;if(t=oy(n,e),O(t,331))return u(t,35);throw M(new Gn(da+e+"' is not a valid attribute"))}function k5(n,e,t){var i;if(i=n.gc(),e>i)throw M(new Kb(e,i));if(n.Si()&&n.Hc(t))throw M(new Gn(Vy));n.Gi(e,t)}function k5e(n,e){e.Ug("Sort end labels",1),qt(ut(rc(new Tn(null,new In(n.b,16)),new Hwn),new qwn),new Uwn),e.Vg()}function ci(){ci=F,Wf=new v7(i8,0),Xr=new v7(f3,1),Br=new v7(s3,2),Vf=new v7(_B,3),us=new v7("UP",4)}function Fk(){Fk=F,XI=new sL("P1_STRUCTURE",0),VI=new sL("P2_PROCESSING_ORDER",1),WI=new sL("P3_EXECUTION",2)}function wBn(){wBn=F,Rre=ah(ah(l6(ah(ah(l6(Re(new ii,(Qp(),c9),(q5(),ZH)),u9),lln),dln),o9),oln),bln)}function y5e(n){switch(u(v(n,(W(),Od)),311).g){case 1:U(n,Od,(vl(),E3));break;case 2:U(n,Od,(vl(),v2))}}function j5e(n){switch(n){case 0:return new rjn;case 1:return new tjn;case 2:return new ijn;default:throw M(new Q9)}}function gBn(n){switch(n.g){case 2:return Xr;case 1:return Br;case 4:return Vf;case 3:return us;default:return Wf}}function AY(n,e){switch(n.b.g){case 0:case 1:return e;case 2:case 3:return new Ho(e.d,0,e.a,e.b);default:return null}}function SY(n){switch(n.g){case 1:return Wn;case 2:return Xn;case 3:return Zn;case 4:return ae;default:return sc}}function Bk(n){switch(n.g){case 1:return ae;case 2:return Wn;case 3:return Xn;case 4:return Zn;default:return sc}}function RT(n){switch(n.g){case 1:return Zn;case 2:return ae;case 3:return Wn;case 4:return Xn;default:return sc}}function PY(n,e,t,i){switch(e){case 1:return!n.n&&(n.n=new q(Ar,n,1,7)),n.n;case 2:return n.k}return yZ(n,e,t,i)}function y5(n,e,t){var i,r;return n.Pj()?(r=n.Qj(),i=lF(n,e,t),n.Jj(n.Ij(7,Y(t),i,e,r)),i):lF(n,e,t)}function cx(n,e){var t,i,r;n.d==null?(++n.e,--n.f):(r=e.ld(),t=e.Bi(),i=(t&et)%n.d.length,o4e(n,i,RHn(n,i,t,r)))}function fm(n,e){var t;t=(n.Bb&Us)!=0,e?n.Bb|=Us:n.Bb&=-1025,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,10,t,e))}function hm(n,e){var t;t=(n.Bb&vw)!=0,e?n.Bb|=vw:n.Bb&=-4097,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,12,t,e))}function lm(n,e){var t;t=(n.Bb&$u)!=0,e?n.Bb|=$u:n.Bb&=-8193,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,15,t,e))}function am(n,e){var t;t=(n.Bb&Tw)!=0,e?n.Bb|=Tw:n.Bb&=-2049,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,11,t,e))}function E5e(n){var e;n.g&&(e=n.c.kg()?n.f:n.a,len(e.a,n.o,!0),len(e.a,n.o,!1),U(n.o,(cn(),Kt),(Oi(),Ud)))}function C5e(n){var e;if(!n.a)throw M(new Or("Cannot offset an unassigned cut."));e=n.c-n.b,n.b+=e,_In(n,e),KIn(n,e)}function M5e(n,e){var t;if(t=ee(n.k,e),t==null)throw M(new nh("Port did not exist in input."));return HQ(e,t),null}function T5e(n){var e,t;for(t=xHn(jo(n)).Kc();t.Ob();)if(e=Oe(t.Pb()),U5(n,e))return A3e((mCn(),Boe),e);return null}function pBn(n){var e,t;for(t=n.p.a.ec().Kc();t.Ob();)if(e=u(t.Pb(),218),e.f&&n.b[e.c]<-1e-10)return e;return null}function A5e(n){var e,t;for(t=Ya(new x1,91),e=!0;n.Ob();)e||(t.a+=ur),e=!1,Dc(t,n.Pb());return(t.a+="]",t).a}function S5e(n){var e,t,i;for(e=new Z,i=new C(n.b);i.ae?1:n==e?n==0?bt(1/n,1/e):0:isNaN(n)?isNaN(e)?0:1:-1}function I5e(n){var e;return e=n.a[n.c-1&n.a.length-1],e==null?null:(n.c=n.c-1&n.a.length-1,$t(n.a,n.c,null),e)}function O5e(n){var e,t,i;for(i=0,t=n.length,e=0;e=1?Xr:Vf):t}function $5e(n){switch(u(v(n,(cn(),$l)),223).g){case 1:return new Ppn;case 3:return new Npn;default:return new Spn}}function ea(n){if(n.c)ea(n.c);else if(n.d)throw M(new Or("Stream already terminated, can't be modified or used"))}function $0(n,e,t){var i;return i=n.a.get(e),n.a.set(e,t===void 0?null:t),i===void 0?(++n.c,++n.b.g):++n.d,i}function x5e(n,e,t){var i,r;for(r=n.a.ec().Kc();r.Ob();)if(i=u(r.Pb(),10),Mk(t,u(sn(e,i.p),16)))return i;return null}function OY(n,e,t){var i;return i=0,e&&(mg(n.a)?i+=e.f.a/2:i+=e.f.b/2),t&&(mg(n.a)?i+=t.f.a/2:i+=t.f.b/2),i}function F5e(n,e,t){var i;i=t,!i&&(i=YV(new up,0)),i.Ug(PXn,2),jRn(n.b,e,i.eh(1)),YIe(n,e,i.eh(1)),eLe(e,i.eh(1)),i.Vg()}function DY(n,e,t){var i,r;return i=(B1(),r=new yE,r),aT(i,e),lT(i,t),n&&ve((!n.a&&(n.a=new ti(xo,n,5)),n.a),i),i}function ox(n){var e;return n.Db&64?_s(n):(e=new ls(_s(n)),e.a+=" (identifier: ",Er(e,n.k),e.a+=")",e.a)}function sx(n,e){var t;t=(n.Bb&kc)!=0,e?n.Bb|=kc:n.Bb&=-32769,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,18,t,e))}function LY(n,e){var t;t=(n.Bb&kc)!=0,e?n.Bb|=kc:n.Bb&=-32769,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,18,t,e))}function dm(n,e){var t;t=(n.Bb&wh)!=0,e?n.Bb|=wh:n.Bb&=-16385,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,16,t,e))}function NY(n,e){var t;t=(n.Bb&hr)!=0,e?n.Bb|=hr:n.Bb&=-65537,n.Db&4&&!(n.Db&1)&&it(n,new Bs(n,1,20,t,e))}function $Y(n){var e;return e=K(fs,gh,28,2,15,1),n-=hr,e[0]=(n>>10)+Sy&ui,e[1]=(n&1023)+56320&ui,hh(e,0,e.length)}function B5e(n){var e;return e=sw(n),e>34028234663852886e22?St:e<-34028234663852886e22?li:e}function nr(n,e){var t;return Vr(n)&&Vr(e)&&(t=n+e,Ay"+td(e.c):"e_"+mt(e),n.b&&n.c?td(n.b)+"->"+td(n.c):"e_"+mt(n))}function _5e(n,e){return An(e.b&&e.c?td(e.b)+"->"+td(e.c):"e_"+mt(e),n.b&&n.c?td(n.b)+"->"+td(n.c):"e_"+mt(n))}function x0(n,e){return Mf(),Rs(sa),y.Math.abs(n-e)<=sa||n==e||isNaN(n)&&isNaN(e)?0:ne?1:s0(isNaN(n),isNaN(e))}function El(){El=F,lU=new kC(i8,0),Yj=new kC("POLYLINE",1),Kv=new kC("ORTHOGONAL",2),F3=new kC("SPLINES",3)}function _T(){_T=F,l1n=new uL("ASPECT_RATIO_DRIVEN",0),Oq=new uL("MAX_SCALE_DRIVEN",1),h1n=new uL("AREA_DRIVEN",2)}function H5e(n,e,t){var i;try{l6e(n,e,t)}catch(r){throw r=It(r),O(r,606)?(i=r,M(new $J(i))):M(r)}return e}function q5e(n){var e,t,i;for(t=0,i=n.length;te&&i.Ne(n[c-1],n[c])>0;--c)s=n[c],$t(n,c,n[c-1]),$t(n,c-1,s)}function vn(n,e){var t,i,r,c,s;if(t=e.f,s1(n.c.d,t,e),e.g!=null)for(r=e.g,c=0,s=r.length;ce){wDn(t);break}}q7(t,e)}function X5e(n,e){var t,i,r;i=Sg(e),r=$(R(rw(i,(cn(),Vs)))),t=y.Math.max(0,r/2-.5),I5(e,t,1),nn(n,new NCn(e,t))}function V5e(n,e,t){var i;t.Ug("Straight Line Edge Routing",1),t.dh(e,xrn),i=u(z(e,(Mg(),O2)),27),iGn(n,i),t.dh(e,DS)}function xY(n,e){n.n.c.length==0&&nn(n.n,new NM(n.s,n.t,n.i)),nn(n.b,e),gZ(u(sn(n.n,n.n.c.length-1),209),e),RUn(n,e)}function j5(n){var e;this.a=(e=u(n.e&&n.e(),9),new _o(e,u($s(e,e.length),9),0)),this.b=K(ki,Fn,1,this.a.a.length,5,1)}function Jr(n){var e;return Array.isArray(n)&&n.Tm===J2?za(wo(n))+"@"+(e=mt(n)>>>0,e.toString(16)):n.toString()}function W5e(n,e){return n.h==Ty&&n.m==0&&n.l==0?(e&&(ba=Yc(0,0,0)),nTn((R4(),lun))):(e&&(ba=Yc(n.l,n.m,n.h)),Yc(0,0,0))}function J5e(n,e){switch(e.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function yBn(n,e){switch(e.g){case 2:return n.b;case 1:return n.c;case 4:return n.d;case 3:return n.a;default:return!1}}function FY(n,e,t,i){switch(e){case 3:return n.f;case 4:return n.g;case 5:return n.i;case 6:return n.j}return PY(n,e,t,i)}function HT(n,e){if(e==n.d)return n.e;if(e==n.e)return n.d;throw M(new Gn("Node "+e+" not part of edge "+n))}function Q5e(n,e){var t;if(t=oy(n.Dh(),e),O(t,102))return u(t,19);throw M(new Gn(da+e+"' is not a valid reference"))}function Jo(n,e,t,i){if(e<0)ten(n,t,i);else{if(!t.rk())throw M(new Gn(da+t.xe()+p8));u(t,69).wk().Ck(n,n.hi(),e,i)}}function eo(n){var e;if(n.b){if(eo(n.b),n.b.d!=n.c)throw M(new Bo)}else n.d.dc()&&(e=u(n.f.c.xc(n.e),16),e&&(n.d=e))}function Y5e(n){Bb();var e,t,i,r;for(e=n.o.b,i=u(u(ot(n.r,(tn(),ae)),21),87).Kc();i.Ob();)t=u(i.Pb(),117),r=t.e,r.b+=e}function Z5e(n){var e,t,i;for(this.a=new ih,i=new C(n);i.a=r)return e.c+t;return e.c+e.b.gc()}function e8e(n,e){m4();var t,i,r,c;for(i=LNn(n),r=e,F4(i,0,i.length,r),t=0;t0&&(i+=r,++t);return t>1&&(i+=n.d*(t-1)),i}function i8e(n){var e,t,i,r,c;return c=enn(n),t=e7(n.c),i=!t,i&&(r=new Ka,df(c,"knownLayouters",r),e=new lyn(r),qi(n.c,e)),c}function KY(n){var e,t,i;for(i=new Hl,i.a+="[",e=0,t=n.gc();e0&&(zn(e-1,n.length),n.charCodeAt(e-1)==58)&&!lx(n,N9,$9))}function _Y(n,e){var t;return x(n)===x(e)?!0:O(e,92)?(t=u(e,92),n.e==t.e&&n.d==t.d&&I3e(n,t.a)):!1}function zp(n){switch(tn(),n.g){case 4:return Xn;case 1:return Zn;case 3:return ae;case 2:return Wn;default:return sc}}function o8e(n){var e,t;if(n.b)return n.b;for(t=qf?null:n.d;t;){if(e=qf?null:t.b,e)return e;t=qf?null:t.d}return a4(),$un}function HY(n){var e,t,i;for(i=$(R(n.a.of((qe(),iO)))),t=new C(n.a.Sf());t.a>5,e=n&31,i=K(ye,Ke,28,t+1,15,1),i[t]=1<3;)r*=10,--c;n=(n+(r>>1))/r|0}return i.i=n,!0}function Ot(n,e){var t,i,r;if(t=(n.i==null&&bh(n),n.i),i=e.Lj(),i!=-1){for(r=t.length;i=0;--i)for(e=t[i],r=0;r>1,this.k=e-1>>1}function j8e(n){YM(),u(n.of((qe(),Ma)),181).Hc((io(),hO))&&(u(n.of(Ww),181).Fc((zu(),B3)),u(n.of(Ma),181).Mc(hO))}function SBn(n){var e,t;e=n.d==(Yp(),dv),t=GZ(n),e&&!t||!e&&t?U(n.a,(cn(),Th),(Rh(),Uj)):U(n.a,(cn(),Th),(Rh(),qj))}function bx(){bx=F,nC(),EI=(cn(),gb),Qte=If(S(T(Xq,1),Ern,149,0,[Tj,Vs,M2,wb,qw,IH,Av,Sv,OH,J8,C2,Bd,T2]))}function E8e(n,e){var t;return t=u(Wr(n,qu(new ju,new yu,new Eu,S(T(xr,1),G,108,0,[(Gu(),Yr)]))),15),t.Qc(WSn(t.gc()))}function PBn(n,e){var t,i;if(i=new Y3(n.a.ad(e,!0)),i.a.gc()<=1)throw M(new ip);return t=i.a.ec().Kc(),t.Pb(),u(t.Pb(),40)}function C8e(n,e,t){var i,r;return i=$(n.p[e.i.p])+$(n.d[e.i.p])+e.n.b+e.a.b,r=$(n.p[t.i.p])+$(n.d[t.i.p])+t.n.b+t.a.b,r-i}function WY(n,e){var t;return n.i>0&&(e.lengthn.i&&$t(e,n.i,null),e}function UT(n){var e;return n.Db&64?m5(n):(e=new ls(m5(n)),e.a+=" (instanceClassName: ",Er(e,n.D),e.a+=")",e.a)}function GT(n){var e,t,i,r;for(r=0,t=0,i=n.length;t0?(n._j(),i=e==null?0:mt(e),r=(i&et)%n.d.length,t=RHn(n,r,i,e),t!=-1):!1}function IBn(n,e){var t,i;n.a=nr(n.a,1),n.c=y.Math.min(n.c,e),n.b=y.Math.max(n.b,e),n.d+=e,t=e-n.f,i=n.e+t,n.f=i-n.e-t,n.e=i}function JY(n,e){switch(e){case 3:P0(n,0);return;case 4:I0(n,0);return;case 5:eu(n,0);return;case 6:tu(n,0);return}kY(n,e)}function F0(n,e){switch(e.g){case 1:return Cp(n.j,(Ou(),Fon));case 2:return Cp(n.j,(Ou(),Ron));default:return Dn(),Dn(),sr}}function QY(n){m0();var e;switch(e=n.Pc(),e.length){case 0:return qK;case 1:return new VL(Se(e[0]));default:return new PN(q5e(e))}}function OBn(n,e){n.Xj();try{n.d.bd(n.e++,e),n.f=n.d.j,n.g=-1}catch(t){throw t=It(t),O(t,77)?M(new Bo):M(t)}}function gx(){gx=F,TU=new Tvn,zdn=new Avn,Xdn=new Svn,Vdn=new Pvn,Wdn=new Ivn,Jdn=new Ovn,Qdn=new Dvn,Ydn=new Lvn,Zdn=new Nvn}function zT(n,e){kX();var t,i;return t=D7((KE(),KE(),P8)),i=null,e==t&&(i=u(Nc(fun,n),624)),i||(i=new JPn(n),e==t&&Dr(fun,n,i)),i}function DBn(n){cw();var e;return(n.q?n.q:(Dn(),Dn(),Wh))._b((cn(),db))?e=u(v(n,db),203):e=u(v(Hi(n),W8),203),e}function rw(n,e){var t,i;return i=null,kt(n,(cn(),yI))&&(t=u(v(n,yI),96),t.pf(e)&&(i=t.of(e))),i==null&&(i=v(Hi(n),e)),i}function LBn(n,e){var t,i,r;return O(e,44)?(t=u(e,44),i=t.ld(),r=tw(n.Rc(),i),oh(r,t.md())&&(r!=null||n.Rc()._b(i))):!1}function wf(n,e){var t,i,r;return n.f>0&&(n._j(),i=e==null?0:mt(e),r=(i&et)%n.d.length,t=xnn(n,r,i,e),t)?t.md():null}function Xc(n,e,t){var i,r,c;return n.Pj()?(i=n.i,c=n.Qj(),Nk(n,i,e),r=n.Ij(3,null,e,i,c),t?t.nj(r):t=r):Nk(n,n.i,e),t}function T8e(n,e,t){var i,r;return i=new ml(n.e,4,10,(r=e.c,O(r,90)?u(r,29):(On(),Ps)),null,f1(n,e),!1),t?t.nj(i):t=i,t}function A8e(n,e,t){var i,r;return i=new ml(n.e,3,10,null,(r=e.c,O(r,90)?u(r,29):(On(),Ps)),f1(n,e),!1),t?t.nj(i):t=i,t}function NBn(n){Bb();var e;return e=new rr(u(n.e.of((qe(),K2)),8)),n.B.Hc((io(),Hv))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function ta(n){dh();var e,t;return t=Ae(n),e=Ae(U1(n,32)),e!=0?new HOn(t,e):t>10||t<0?new gl(1,t):kQn[t]}function Kk(n,e){var t;return Vr(n)&&Vr(e)&&(t=n%e,Ay=0?c=c.a[1]:(r=c,c=c.a[0])}return r}function Hk(n,e,t){var i,r,c;for(r=null,c=n.b;c;){if(i=n.a.Ne(e,c.d),t&&i==0)return c;i<=0?c=c.a[0]:(r=c,c=c.a[1])}return r}function L8e(n,e,t,i){var r,c,s;return r=!1,xOe(n.f,t,i)&&(e9e(n.f,n.a[e][t],n.a[e][i]),c=n.a[e],s=c[i],c[i]=c[t],c[t]=s,r=!0),r}function BBn(n,e,t){var i,r,c,s;for(r=u(ee(n.b,t),183),i=0,s=new C(e.j);s.a>5,e&=31,r=n.d+t+(e==0?0:1),i=K(ye,Ke,28,r,15,1),Oye(i,n.a,t,e),c=new Qa(n.e,r,i),Q6(c),c}function N8e(n,e){var t,i,r;for(i=new te(re(Qt(n).a.Kc(),new En));pe(i);)if(t=u(fe(i),18),r=t.d.i,r.c==e)return!1;return!0}function nZ(n,e,t){var i,r,c,s,f;return s=n.k,f=e.k,i=t[s.g][f.g],r=R(rw(n,i)),c=R(rw(e,i)),y.Math.max((Jn(r),r),(Jn(c),c))}function $8e(){return Error.stackTraceLimit>0?(y.Error.stackTraceLimit=Error.stackTraceLimit=64,!0):"stack"in new Error}function x8e(n,e){return Mf(),Mf(),Rs(sa),(y.Math.abs(n-e)<=sa||n==e||isNaN(n)&&isNaN(e)?0:ne?1:s0(isNaN(n),isNaN(e)))>0}function eZ(n,e){return Mf(),Mf(),Rs(sa),(y.Math.abs(n-e)<=sa||n==e||isNaN(n)&&isNaN(e)?0:ne?1:s0(isNaN(n),isNaN(e)))<0}function KBn(n,e){return Mf(),Mf(),Rs(sa),(y.Math.abs(n-e)<=sa||n==e||isNaN(n)&&isNaN(e)?0:ne?1:s0(isNaN(n),isNaN(e)))<=0}function mx(n,e){for(var t=0;!e[t]||e[t]=="";)t++;for(var i=e[t++];t0&&this.b>0&&(this.g=cM(this.c,this.b,this.a))}function F8e(n,e){var t=n.a,i;e=String(e),t.hasOwnProperty(e)&&(i=t[e]);var r=(K$(),WK)[typeof i],c=r?r(i):wY(typeof i);return c}function wm(n){var e,t,i;if(i=null,e=Eh in n.a,t=!e,t)throw M(new nh("Every element must have an id."));return i=Zp(dl(n,Eh)),i}function B0(n){var e,t;for(t=a_n(n),e=null;n.c==2;)Ye(n),e||(e=(nt(),nt(),new P6(2)),pd(e,t),t=e),t.Jm(a_n(n));return t}function VT(n,e){var t,i,r;return n._j(),i=e==null?0:mt(e),r=(i&et)%n.d.length,t=xnn(n,r,i,e),t?(V$n(n,t),t.md()):null}function XBn(n,e){return n.e>e.e?1:n.ee.d?n.e:n.d=48&&n<48+y.Math.min(10,10)?n-48:n>=97&&n<97?n-97+10:n>=65&&n<65?n-65+10:-1}function B8e(n,e){if(e.c==n)return e.d;if(e.d==n)return e.c;throw M(new Gn("Input edge is not connected to the input port."))}function R8e(n){if(JT(nv,n))return _n(),ov;if(JT(cK,n))return _n(),wa;throw M(new Gn("Expecting true or false"))}function rZ(n){switch(typeof n){case nB:return t1(n);case dtn:return pp(n);case i3:return SAn(n);default:return n==null?0:l0(n)}}function ah(n,e){if(n.a<0)throw M(new Or("Did not call before(...) or after(...) before calling add(...)."));return YX(n,n.a,e),n}function cZ(n){return $M(),O(n,162)?u(ee(hE,MQn),295).Rg(n):Zc(hE,wo(n))?u(ee(hE,wo(n)),295).Rg(n):null}function iu(n){var e,t;return n.Db&32||(t=(e=u(Un(n,16),29),se(e||n.ii())-se(n.ii())),t!=0&&Xp(n,32,K(ki,Fn,1,t,5,1))),n}function Xp(n,e,t){var i;n.Db&e?t==null?jCe(n,e):(i=Rx(n,e),i==-1?n.Eb=t:$t(cd(n.Eb),i,t)):t!=null&>e(n,e,t)}function K8e(n,e,t,i){var r,c;e.c.length!=0&&(r=$Me(t,i),c=xEe(e),qt(fT(new Tn(null,new In(c,1)),new L3n),new MIn(n,t,r,i)))}function _8e(n,e){var t,i,r,c;return i=n.a.length-1,t=e-n.b&i,c=n.c-e&i,r=n.c-n.b&i,EAn(t=c?(R6e(n,e),-1):(B6e(n,e),1)}function WT(n){var e,t,i;if(i=n.Jh(),!i)for(e=0,t=n.Ph();t;t=t.Ph()){if(++e>PB)return t.Qh();if(i=t.Jh(),i||t==n)break}return i}function WBn(n,e){var t;return x(e)===x(n)?!0:!O(e,21)||(t=u(e,21),t.gc()!=n.gc())?!1:n.Ic(t)}function H8e(n,e){return n.ee.e?1:n.fe.f?1:mt(n)-mt(e)}function JT(n,e){return Jn(n),e==null?!1:An(n,e)?!0:n.length==e.length&&An(n.toLowerCase(),e.toLowerCase())}function Ml(n){var e,t;return Ec(n,-129)>0&&Ec(n,128)<0?(ZSn(),e=Ae(n)+128,t=mun[e],!t&&(t=mun[e]=new kG(n)),t):new kG(n)}function dd(){dd=F,Ow=new aC(kh,0),Don=new aC("INSIDE_PORT_SIDE_GROUPS",1),P_=new aC("GROUP_MODEL_ORDER",2),I_=new aC(tin,3)}function q8e(n){var e;return n.b||xhe(n,(e=$ae(n.e,n.a),!e||!An(cK,wf((!e.b&&(e.b=new lo((On(),ar),pc,e)),e.b),"qualified")))),n.c}function U8e(n,e){var t,i;for(t=(zn(e,n.length),n.charCodeAt(e)),i=e+1;i2e3&&(hQn=n,uP=y.setTimeout(_he,10))),cP++==0?(ime((az(),sun)),!0):!1}function r9e(n,e,t){var i;(DQn?(o8e(n),!0):LQn||$Qn?(a4(),!0):NQn&&(a4(),!1))&&(i=new aSn(e),i.b=t,aje(n,i))}function kx(n,e){var t;t=!n.A.Hc((go(),Gd))||n.q==(Oi(),qc),n.u.Hc((zu(),Fl))?t?XDe(n,e):UGn(n,e):n.u.Hc(Pa)&&(t?dDe(n,e):czn(n,e))}function eRn(n){var e;x(z(n,(qe(),B2)))===x((jl(),uO))&&(At(n)?(e=u(z(At(n),B2),346),ht(n,B2,e)):ht(n,B2,M9))}function c9e(n){var e,t;return kt(n.d.i,(cn(),Cv))?(e=u(v(n.c.i,Cv),17),t=u(v(n.d.i,Cv),17),jc(e.a,t.a)>0):!1}function tRn(n,e,t){return new Ho(y.Math.min(n.a,e.a)-t/2,y.Math.min(n.b,e.b)-t/2,y.Math.abs(n.a-e.a)+t,y.Math.abs(n.b-e.b)+t)}function iRn(n){var e;this.d=new Z,this.j=new Li,this.g=new Li,e=n.g.b,this.f=u(v(Hi(e),(cn(),Do)),88),this.e=$(R(nA(e,qw)))}function rRn(n){this.d=new Z,this.e=new Ql,this.c=K(ye,Ke,28,(tn(),S(T(lr,1),Mc,64,0,[sc,Xn,Zn,ae,Wn])).length,15,1),this.b=n}function sZ(n,e,t){var i;switch(i=t[n.g][e],n.g){case 1:case 3:return new V(0,i);case 2:case 4:return new V(i,0);default:return null}}function cRn(n,e,t){var i,r;r=u(V7(e.f),205);try{r.rf(n,t),hIn(e.f,r)}catch(c){throw c=It(c),O(c,103)?(i=c,M(i)):M(c)}}function uRn(n,e,t){var i,r,c,s,f,h;return i=null,f=Zen(z4(),e),c=null,f&&(r=null,h=Qen(f,t),s=null,h!=null&&(s=n.qf(f,h)),r=s,c=r),i=c,i}function yx(n,e,t,i){var r;if(r=n.length,e>=r)return r;for(e=e>0?e:0;ei&&$t(e,i,null),e}function oRn(n,e){var t,i;for(i=n.a.length,e.lengthi&&$t(e,i,null),e}function gm(n,e){var t,i;if(++n.j,e!=null&&(t=(i=n.a.Cb,O(i,99)?u(i,99).th():null),hCe(e,t))){Xp(n.a,4,t);return}Xp(n.a,4,u(e,129))}function u9e(n){var e;if(n==null)return null;if(e=lMe(Fc(n,!0)),e==null)throw M(new kD("Invalid hexBinary value: '"+n+"'"));return e}function QT(n,e,t){var i;e.a.length>0&&(nn(n.b,new SSn(e.a,t)),i=e.a.length,0i&&(e.a+=ITn(K(fs,gh,28,-i,15,1))))}function sRn(n,e,t){var i,r,c;if(!t[e.d])for(t[e.d]=!0,r=new C($g(e));r.a=n.b>>1)for(i=n.c,t=n.b;t>e;--t)i=i.b;else for(i=n.a.a,t=0;t=0?n.Wh(r):hF(n,i)):t<0?hF(n,i):u(i,69).wk().Bk(n,n.hi(),t)}function aRn(n){var e,t,i;for(i=(!n.o&&(n.o=new Iu((Cc(),il),T1,n,0)),n.o),t=i.c.Kc();t.e!=t.i.gc();)e=u(t.Yj(),44),e.md();return uk(i)}function rn(n){var e;if(O(n.a,4)){if(e=cZ(n.a),e==null)throw M(new Or(NVn+n.b+"'. "+LVn+(ll(lE),lE.k)+bcn));return e}else return n.a}function b9e(n,e){var t,i;if(n.j.length!=e.j.length)return!1;for(t=0,i=n.j.length;t=64&&e<128&&(r=hf(r,Fs(1,e-64)));return r}function nA(n,e){var t,i;return i=null,kt(n,(qe(),$3))&&(t=u(v(n,$3),96),t.pf(e)&&(i=t.of(e))),i==null&&Hi(n)&&(i=v(Hi(n),e)),i}function w9e(n,e){var t;return t=u(v(n,(cn(),Fr)),75),yL(e,LZn)?t?vo(t):(t=new Mu,U(n,Fr,t)):t&&U(n,Fr,null),t}function M5(){M5=F,aon=(qe(),qan),g_=Ean,DYn=$2,lon=C1,xYn=(aA(),Uun),$Yn=Hun,FYn=zun,NYn=_un,LYn=(Q$(),son),w_=PYn,hon=IYn,pP=OYn}function eA(n){switch($z(),this.c=new Z,this.d=n,n.g){case 0:case 2:this.a=qW(Oon),this.b=St;break;case 3:case 1:this.a=Oon,this.b=li}}function g9e(n){var e;Ep(u(v(n,(cn(),Kt)),101))&&(e=n.b,nHn((Ln(0,e.c.length),u(e.c[0],30))),nHn(u(sn(e,e.c.length-1),30)))}function p9e(n,e){e.Ug("Self-Loop post-processing",1),qt(ut(ut(rc(new Tn(null,new In(n.b,16)),new s2n),new f2n),new h2n),new l2n),e.Vg()}function dRn(n,e,t){var i,r;if(n.c)eu(n.c,n.c.i+e),tu(n.c,n.c.j+t);else for(r=new C(n.b);r.a=0&&(t.d=n.t);break;case 3:n.t>=0&&(t.a=n.t)}n.C&&(t.b=n.C.b,t.c=n.C.c)}function T5(){T5=F,Nhn=new d7(Crn,0),KH=new d7(sR,1),_H=new d7("LINEAR_SEGMENTS",2),Y8=new d7("BRANDES_KOEPF",3),Z8=new d7(sVn,4)}function A5(){A5=F,fj=new hC(eS,0),wP=new hC(HB,1),gP=new hC(qB,2),hj=new hC(UB,3),fj.a=!1,wP.a=!0,gP.a=!1,hj.a=!0}function Vp(){Vp=F,uj=new fC(eS,0),cj=new fC(HB,1),oj=new fC(qB,2),sj=new fC(UB,3),uj.a=!1,cj.a=!0,oj.a=!1,sj.a=!0}function Wp(n,e,t,i){var r;return t>=0?n.Sh(e,t,i):(n.Ph()&&(i=(r=n.Fh(),r>=0?n.Ah(i):n.Ph().Th(n,-1-r,null,i))),n.Ch(e,t,i))}function fZ(n,e){switch(e){case 7:!n.e&&(n.e=new Nn(Vt,n,7,4)),me(n.e);return;case 8:!n.d&&(n.d=new Nn(Vt,n,8,5)),me(n.d);return}JY(n,e)}function ht(n,e,t){return t==null?(!n.o&&(n.o=new Iu((Cc(),il),T1,n,0)),VT(n.o,e)):(!n.o&&(n.o=new Iu((Cc(),il),T1,n,0)),Vk(n.o,e,t)),n}function pRn(n,e){Dn();var t,i,r,c;for(t=n,c=e,O(n,21)&&!O(e,21)&&(t=e,c=n),r=t.Kc();r.Ob();)if(i=r.Pb(),c.Hc(i))return!1;return!0}function j9e(n,e,t,i){if(e.at.b)return!0}return!1}function Tx(n,e){return Ai(n)?!!iQn[e]:n.Sm?!!n.Sm[e]:$b(n)?!!tQn[e]:Nb(n)?!!eQn[e]:!1}function E9e(n){var e;e=n.a;do e=u(fe(new te(re(ji(e).a.Kc(),new En))),18).c.i,e.k==(Vn(),Mi)&&n.b.Fc(e);while(e.k==(Vn(),Mi));n.b=Qo(n.b)}function mRn(n,e){var t,i,r;for(r=n,i=new te(re(ji(e).a.Kc(),new En));pe(i);)t=u(fe(i),18),t.c.i.c&&(r=y.Math.max(r,t.c.i.c.p));return r}function C9e(n,e){var t,i,r;for(r=0,i=u(u(ot(n.r,e),21),87).Kc();i.Ob();)t=u(i.Pb(),117),r+=t.d.d+t.b.Mf().b+t.d.a,i.Ob()&&(r+=n.w);return r}function M9e(n,e){var t,i,r;for(r=0,i=u(u(ot(n.r,e),21),87).Kc();i.Ob();)t=u(i.Pb(),117),r+=t.d.b+t.b.Mf().a+t.d.c,i.Ob()&&(r+=n.w);return r}function vRn(n){var e,t,i,r;if(i=0,r=aw(n),r.c.length==0)return 1;for(t=new C(r);t.a=0?n.Lh(s,t,!0):H0(n,c,t)):u(c,69).wk().yk(n,n.hi(),r,t,i)}function P9e(n,e,t,i){var r,c;c=e.pf((qe(),R2))?u(e.of(R2),21):n.j,r=d5e(c),r!=(VA(),l_)&&(t&&!tZ(r)||bnn(aMe(n,r,i),e))}function I9e(n){switch(n.g){case 1:return N0(),rj;case 3:return N0(),ij;case 2:return N0(),d_;case 4:return N0(),a_;default:return null}}function O9e(n,e,t){if(n.e)switch(n.b){case 1:yge(n.c,e,t);break;case 0:jge(n.c,e,t)}else KDn(n.c,e,t);n.a[e.p][t.p]=n.c.i,n.a[t.p][e.p]=n.c.e}function kRn(n){var e,t;if(n==null)return null;for(t=K(Qh,J,199,n.length,0,2),e=0;e=0)return r;if(n.ol()){for(i=0;i=r)throw M(new Kb(e,r));if(n.Si()&&(i=n.dd(t),i>=0&&i!=e))throw M(new Gn(Vy));return n.Xi(e,t)}function hZ(n,e){if(this.a=u(Se(n),253),this.b=u(Se(e),253),n.Ed(e)>0||n==(dD(),_K)||e==(bD(),HK))throw M(new Gn("Invalid range: "+qDn(n,e)))}function yRn(n){var e,t;for(this.b=new Z,this.c=n,this.a=!1,t=new C(n.a);t.a0),(e&-e)==e)return wi(e*to(n,31)*4656612873077393e-25);do t=to(n,31),i=t%e;while(t-i+(e-1)<0);return wi(i)}function F9e(n,e,t){switch(t.g){case 1:n.a=e.a/2,n.b=0;break;case 2:n.a=e.a,n.b=e.b/2;break;case 3:n.a=e.a/2,n.b=e.b;break;case 4:n.a=0,n.b=e.b/2}}function qk(n,e,t,i){var r,c;for(r=e;r1&&(c=L9e(n,e)),c}function CRn(n){var e;return e=$(R(z(n,(qe(),Qj))))*y.Math.sqrt((!n.a&&(n.a=new q(Qe,n,10,11)),n.a).i),new V(e,e/$(R(z(n,rO))))}function Sx(n){var e;return n.f&&n.f.Vh()&&(e=u(n.f,54),n.f=u(na(n,e),84),n.f!=e&&n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,9,8,e,n.f))),n.f}function Px(n){var e;return n.i&&n.i.Vh()&&(e=u(n.i,54),n.i=u(na(n,e),84),n.i!=e&&n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,9,7,e,n.i))),n.i}function br(n){var e;return n.b&&n.b.Db&64&&(e=n.b,n.b=u(na(n,e),19),n.b!=e&&n.Db&4&&!(n.Db&1)&&it(n,new Ci(n,9,21,e,n.b))),n.b}function uA(n,e){var t,i,r;n.d==null?(++n.e,++n.f):(i=e.Bi(),uTe(n,n.f+1),r=(i&et)%n.d.length,t=n.d[r],!t&&(t=n.d[r]=n.dk()),t.Fc(e),++n.f)}function dZ(n,e,t){var i;return e.tk()?!1:e.Ik()!=-2?(i=e.ik(),i==null?t==null:rt(i,t)):e.qk()==n.e.Dh()&&t==null}function oA(){var n;Co(16,$zn),n=sxn(16),this.b=K(UK,Cy,303,n,0,1),this.c=K(UK,Cy,303,n,0,1),this.a=null,this.e=null,this.i=0,this.f=n-1,this.g=0}function Tl(n){vV.call(this),this.k=(Vn(),zt),this.j=(Co(6,mw),new Gc(6)),this.b=(Co(2,mw),new Gc(2)),this.d=new sD,this.f=new nz,this.a=n}function R9e(n){var e,t;n.c.length<=1||(e=Sqn(n,(tn(),ae)),w_n(n,u(e.a,17).a,u(e.b,17).a),t=Sqn(n,Wn),w_n(n,u(t.a,17).a,u(t.b,17).a))}function K9e(n,e,t){var i,r;for(r=n.a.b,i=r.c.length;i102?-1:n<=57?n-48:n<65?-1:n<=70?n-65+10:n<97?-1:n-97+10}function Nx(n,e){if(n==null)throw M(new sp("null key in entry: null="+e));if(e==null)throw M(new sp("null value in entry: "+n+"=null"))}function q9e(n,e){for(var t,i;n.Ob();)if(!e.Ob()||(t=n.Pb(),i=e.Pb(),!(x(t)===x(i)||t!=null&&rt(t,i))))return!1;return!e.Ob()}function ARn(n,e){var t;return t=S(T(Pi,1),Tr,28,15,[Z$(n.a[0],e),Z$(n.a[1],e),Z$(n.a[2],e)]),n.d&&(t[0]=y.Math.max(t[0],t[2]),t[2]=t[0]),t}function SRn(n,e){var t;return t=S(T(Pi,1),Tr,28,15,[$T(n.a[0],e),$T(n.a[1],e),$T(n.a[2],e)]),n.d&&(t[0]=y.Math.max(t[0],t[2]),t[2]=t[0]),t}function wZ(n,e,t){Ep(u(v(e,(cn(),Kt)),101))||(PJ(n,e,h1(e,t)),PJ(n,e,h1(e,(tn(),ae))),PJ(n,e,h1(e,Xn)),Dn(),Yt(e.j,new N7n(n)))}function PRn(n){var e,t;for(n.c||sOe(n),t=new Mu,e=new C(n.a),E(e);e.a0&&(zn(0,e.length),e.charCodeAt(0)==43)?(zn(1,e.length+1),e.substr(1)):e))}function i7e(n){var e;return n==null?null:new H1((e=Fc(n,!0),e.length>0&&(zn(0,e.length),e.charCodeAt(0)==43)?(zn(1,e.length+1),e.substr(1)):e))}function pZ(n,e,t,i,r,c,s,f){var h,l;i&&(h=i.a[0],h&&pZ(n,e,t,h,r,c,s,f),qx(n,t,i.d,r,c,s,f)&&e.Fc(i),l=i.a[1],l&&pZ(n,e,t,l,r,c,s,f))}function Rg(n,e,t){try{return o0(C$(n,e,t),1)}catch(i){throw i=It(i),O(i,333)?M(new Ir(GB+n.o+"*"+n.p+zB+e+ur+t+XB)):M(i)}}function NRn(n,e,t){try{return o0(C$(n,e,t),0)}catch(i){throw i=It(i),O(i,333)?M(new Ir(GB+n.o+"*"+n.p+zB+e+ur+t+XB)):M(i)}}function $Rn(n,e,t){try{return o0(C$(n,e,t),2)}catch(i){throw i=It(i),O(i,333)?M(new Ir(GB+n.o+"*"+n.p+zB+e+ur+t+XB)):M(i)}}function xRn(n,e){if(n.g==-1)throw M(new Cu);n.Xj();try{n.d.hd(n.g,e),n.f=n.d.j}catch(t){throw t=It(t),O(t,77)?M(new Bo):M(t)}}function r7e(n){var e,t,i,r,c;for(i=new C(n.b);i.ac&&$t(e,c,null),e}function c7e(n,e){var t,i;if(i=n.gc(),e==null){for(t=0;t0&&(h+=r),l[a]=s,s+=f*(h+i)}function BRn(n){var e,t,i;for(i=n.f,n.n=K(Pi,Tr,28,i,15,1),n.d=K(Pi,Tr,28,i,15,1),e=0;e0?n.c:0),++r;n.b=i,n.d=c}function qRn(n,e){var t;return t=S(T(Pi,1),Tr,28,15,[aZ(n,(bf(),bc),e),aZ(n,Wc,e),aZ(n,wc,e)]),n.f&&(t[0]=y.Math.max(t[0],t[2]),t[2]=t[0]),t}function d7e(n,e,t){var i;try{xA(n,e+n.j,t+n.k,!1,!0)}catch(r){throw r=It(r),O(r,77)?(i=r,M(new Ir(i.g+iS+e+ur+t+")."))):M(r)}}function b7e(n,e,t){var i;try{xA(n,e+n.j,t+n.k,!0,!1)}catch(r){throw r=It(r),O(r,77)?(i=r,M(new Ir(i.g+iS+e+ur+t+")."))):M(r)}}function URn(n){var e;kt(n,(cn(),ab))&&(e=u(v(n,ab),21),e.Hc((lw(),Js))?(e.Mc(Js),e.Fc(Qs)):e.Hc(Qs)&&(e.Mc(Qs),e.Fc(Js)))}function GRn(n){var e;kt(n,(cn(),ab))&&(e=u(v(n,ab),21),e.Hc((lw(),Zs))?(e.Mc(Zs),e.Fc(Cs)):e.Hc(Cs)&&(e.Mc(Cs),e.Fc(Zs)))}function Kx(n,e,t,i){var r,c,s,f;return n.a==null&&gje(n,e),s=e.b.j.c.length,c=t.d.p,f=i.d.p,r=f-1,r<0&&(r=s-1),c<=r?n.a[r]-n.a[c]:n.a[s-1]-n.a[c]+n.a[r]}function w7e(n){var e,t;if(!n.b)for(n.b=RM(u(n.f,27).kh().i),t=new ne(u(n.f,27).kh());t.e!=t.i.gc();)e=u(ce(t),135),nn(n.b,new pD(e));return n.b}function g7e(n){var e,t;if(!n.e)for(n.e=RM(mN(u(n.f,27)).i),t=new ne(mN(u(n.f,27)));t.e!=t.i.gc();)e=u(ce(t),123),nn(n.e,new Bkn(e));return n.e}function zRn(n){var e,t;if(!n.a)for(n.a=RM(AM(u(n.f,27)).i),t=new ne(AM(u(n.f,27)));t.e!=t.i.gc();)e=u(ce(t),27),nn(n.a,new ML(n,e));return n.a}function K0(n){var e;if(!n.C&&(n.D!=null||n.B!=null))if(e=iDe(n),e)n.hl(e);else try{n.hl(null)}catch(t){if(t=It(t),!O(t,63))throw M(t)}return n.C}function p7e(n){switch(n.q.g){case 5:gKn(n,(tn(),Xn)),gKn(n,ae);break;case 4:mGn(n,(tn(),Xn)),mGn(n,ae);break;default:y_n(n,(tn(),Xn)),y_n(n,ae)}}function m7e(n){switch(n.q.g){case 5:pKn(n,(tn(),Zn)),pKn(n,Wn);break;case 4:vGn(n,(tn(),Zn)),vGn(n,Wn);break;default:j_n(n,(tn(),Zn)),j_n(n,Wn)}}function Kg(n,e){var t,i,r;for(r=new Li,i=n.Kc();i.Ob();)t=u(i.Pb(),36),Sm(t,r.a,0),r.a+=t.f.a+e,r.b=y.Math.max(r.b,t.f.b);return r.b>0&&(r.b+=e),r}function hA(n,e){var t,i,r;for(r=new Li,i=n.Kc();i.Ob();)t=u(i.Pb(),36),Sm(t,0,r.b),r.b+=t.f.b+e,r.a=y.Math.max(r.a,t.f.a);return r.a>0&&(r.a+=e),r}function XRn(n){var e,t,i;for(i=et,t=new C(n.a);t.a>16==6?n.Cb.Th(n,5,jf,e):(i=br(u($n((t=u(Un(n,16),29),t||n.ii()),n.Db>>16),19)),n.Cb.Th(n,i.n,i.f,e))}function v7e(n){O4();var e=n.e;if(e&&e.stack){var t=e.stack,i=e+` `;return t.substring(0,i.length)==i&&(t=t.substring(i.length)),t.split(` diff --git a/assets/chunks/framework.01Cf-Wcw.js b/assets/chunks/framework.01Cf-Wcw.js deleted file mode 100644 index 513d814f..00000000 --- a/assets/chunks/framework.01Cf-Wcw.js +++ /dev/null @@ -1 +0,0 @@ -function gr(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s!!n[s]}const ne={},ht=[],Me=()=>{},io=()=>!1,oo=/^on[^a-z]/,qt=e=>oo.test(e),mr=e=>e.startsWith("onUpdate:"),ce=Object.assign,vr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},lo=Object.prototype.hasOwnProperty,Y=(e,t)=>lo.call(e,t),K=Array.isArray,pt=e=>yn(e)==="[object Map]",Hs=e=>yn(e)==="[object Set]",V=e=>typeof e=="function",se=e=>typeof e=="string",yr=e=>typeof e=="symbol",te=e=>e!==null&&typeof e=="object",$s=e=>te(e)&&V(e.then)&&V(e.catch),ks=Object.prototype.toString,yn=e=>ks.call(e),co=e=>yn(e).slice(8,-1),js=e=>yn(e)==="[object Object]",_r=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Mt=gr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_n=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ao=/-(\w)/g,Be=_n(e=>e.replace(ao,(t,n)=>n?n.toUpperCase():"")),uo=/\B([A-Z])/g,ct=_n(e=>e.replace(uo,"-$1").toLowerCase()),bn=_n(e=>e.charAt(0).toUpperCase()+e.slice(1)),ln=_n(e=>e?`on${bn(e)}`:""),kt=(e,t)=>!Object.is(e,t),Hn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},fo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ds=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let zr;const tr=()=>zr||(zr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function wn(e){if(K(e)){const t={};for(let n=0;n{if(n){const r=n.split(po);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function En(e){let t="";if(se(e))t=e;else if(K(e))for(let n=0;nse(e)?e:e==null?"":K(e)||te(e)&&(e.toString===ks||!V(e.toString))?JSON.stringify(e,Ks,2):String(e),Ks=(e,t)=>t&&t.__v_isRef?Ks(e,t.value):pt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s])=>(n[`${r} =>`]=s,n),{})}:Hs(t)?{[`Set(${t.size})`]:[...t.values()]}:te(t)&&!K(t)&&!js(t)?String(t):t;let we;class _o{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},qs=e=>(e.w&Je)>0,Vs=e=>(e.n&Je)>0,Eo=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(h==="length"||h>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":K(e)?_r(n)&&l.push(o.get("length")):(l.push(o.get(it)),pt(e)&&l.push(o.get(rr)));break;case"delete":K(e)||(l.push(o.get(it)),pt(e)&&l.push(o.get(rr)));break;case"set":pt(e)&&l.push(o.get(it));break}if(l.length===1)l[0]&&sr(l[0]);else{const c=[];for(const a of l)a&&c.push(...a);sr(br(c))}}function sr(e,t){const n=K(e)?e:[...e];for(const r of n)r.computed&&Xr(r);for(const r of n)r.computed||Xr(r)}function Xr(e,t){(e!==Ie||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function xo(e,t){var n;return(n=fn.get(e))==null?void 0:n.get(t)}const To=gr("__proto__,__v_isRef,__isVue"),Xs=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(yr)),Ao=Er(),So=Er(!1,!0),Io=Er(!0),Jr=Oo();function Oo(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=X(this);for(let i=0,o=this.length;i{e[t]=function(...n){At();const r=X(this)[t].apply(this,n);return St(),r}}),e}function Ro(e){const t=X(this);return _e(t,"has",e),t.hasOwnProperty(e)}function Er(e=!1,t=!1){return function(r,s,i){if(s==="__v_isReactive")return!e;if(s==="__v_isReadonly")return e;if(s==="__v_isShallow")return t;if(s==="__v_raw"&&i===(e?t?Vo:ei:t?Gs:Zs).get(r))return r;const o=K(r);if(!e){if(o&&Y(Jr,s))return Reflect.get(Jr,s,i);if(s==="hasOwnProperty")return Ro}const l=Reflect.get(r,s,i);return(yr(s)?Xs.has(s):To(s))||(e||_e(r,"get",s),t)?l:ue(l)?o&&_r(s)?l:l.value:te(l)?e?Tn(l):xn(l):l}}const Po=Js(),Fo=Js(!0);function Js(e=!1){return function(n,r,s,i){let o=n[r];if(bt(o)&&ue(o)&&!ue(s))return!1;if(!e&&(!dn(s)&&!bt(s)&&(o=X(o),s=X(s)),!K(n)&&ue(o)&&!ue(s)))return o.value=s,!0;const l=K(n)&&_r(r)?Number(r)e,Cn=e=>Reflect.getPrototypeOf(e);function Xt(e,t,n=!1,r=!1){e=e.__v_raw;const s=X(e),i=X(t);n||(t!==i&&_e(s,"get",t),_e(s,"get",i));const{has:o}=Cn(s),l=r?Cr:n?Ar:jt;if(o.call(s,t))return l(e.get(t));if(o.call(s,i))return l(e.get(i));e!==s&&e.get(t)}function Jt(e,t=!1){const n=this.__v_raw,r=X(n),s=X(e);return t||(e!==s&&_e(r,"has",e),_e(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Qt(e,t=!1){return e=e.__v_raw,!t&&_e(X(e),"iterate",it),Reflect.get(e,"size",e)}function Qr(e){e=X(e);const t=X(this);return Cn(t).has.call(t,e)||(t.add(e),ke(t,"add",e,e)),this}function Zr(e,t){t=X(t);const n=X(this),{has:r,get:s}=Cn(n);let i=r.call(n,e);i||(e=X(e),i=r.call(n,e));const o=s.call(n,e);return n.set(e,t),i?kt(t,o)&&ke(n,"set",e,t):ke(n,"add",e,t),this}function Gr(e){const t=X(this),{has:n,get:r}=Cn(t);let s=n.call(t,e);s||(e=X(e),s=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return s&&ke(t,"delete",e,void 0),i}function es(){const e=X(this),t=e.size!==0,n=e.clear();return t&&ke(e,"clear",void 0,void 0),n}function Zt(e,t){return function(r,s){const i=this,o=i.__v_raw,l=X(o),c=t?Cr:e?Ar:jt;return!e&&_e(l,"iterate",it),o.forEach((a,h)=>r.call(s,c(a),c(h),i))}}function Gt(e,t,n){return function(...r){const s=this.__v_raw,i=X(s),o=pt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=s[e](...r),h=n?Cr:t?Ar:jt;return!t&&_e(i,"iterate",c?rr:it),{next(){const{value:d,done:p}=a.next();return p?{value:d,done:p}:{value:l?[h(d[0]),h(d[1])]:h(d),done:p}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:this}}function $o(){const e={get(i){return Xt(this,i)},get size(){return Qt(this)},has:Jt,add:Qr,set:Zr,delete:Gr,clear:es,forEach:Zt(!1,!1)},t={get(i){return Xt(this,i,!1,!0)},get size(){return Qt(this)},has:Jt,add:Qr,set:Zr,delete:Gr,clear:es,forEach:Zt(!1,!0)},n={get(i){return Xt(this,i,!0)},get size(){return Qt(this,!0)},has(i){return Jt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:Zt(!0,!1)},r={get(i){return Xt(this,i,!0,!0)},get size(){return Qt(this,!0)},has(i){return Jt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:Zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Gt(i,!1,!1),n[i]=Gt(i,!0,!1),t[i]=Gt(i,!1,!0),r[i]=Gt(i,!0,!0)}),[e,n,t,r]}const[ko,jo,Do,Uo]=$o();function xr(e,t){const n=t?e?Uo:Do:e?jo:ko;return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,i)}const Ko={get:xr(!1,!1)},Wo={get:xr(!1,!0)},qo={get:xr(!0,!1)},Zs=new WeakMap,Gs=new WeakMap,ei=new WeakMap,Vo=new WeakMap;function zo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Yo(e){return e.__v_skip||!Object.isExtensible(e)?0:zo(co(e))}function xn(e){return bt(e)?e:Tr(e,!1,Qs,Ko,Zs)}function Xo(e){return Tr(e,!1,Ho,Wo,Gs)}function Tn(e){return Tr(e,!0,Bo,qo,ei)}function Tr(e,t,n,r,s){if(!te(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const o=Yo(e);if(o===0)return e;const l=new Proxy(e,o===2?r:n);return s.set(e,l),l}function gt(e){return bt(e)?gt(e.__v_raw):!!(e&&e.__v_isReactive)}function bt(e){return!!(e&&e.__v_isReadonly)}function dn(e){return!!(e&&e.__v_isShallow)}function ti(e){return gt(e)||bt(e)}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function Nt(e){return un(e,"__v_skip",!0),e}const jt=e=>te(e)?xn(e):e,Ar=e=>te(e)?Tn(e):e;function Sr(e){ze&&Ie&&(e=X(e),Ys(e.dep||(e.dep=br())))}function Ir(e,t){e=X(e);const n=e.dep;n&&sr(n)}function ue(e){return!!(e&&e.__v_isRef===!0)}function le(e){return ri(e,!1)}function ni(e){return ri(e,!0)}function ri(e,t){return ue(e)?e:new Jo(e,t)}class Jo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:X(t),this._value=n?t:jt(t)}get value(){return Sr(this),this._value}set value(t){const n=this.__v_isShallow||dn(t)||bt(t);t=n?t:X(t),kt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:jt(t),Ir(this))}}function si(e){return ue(e)?e.value:e}const Qo={get:(e,t,n)=>si(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ue(s)&&!ue(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function ii(e){return gt(e)?e:new Proxy(e,Qo)}class Zo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Sr(this),()=>Ir(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Go(e){return new Zo(e)}class el{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return xo(X(this._object),this._key)}}class tl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function nl(e,t,n){return ue(e)?e:V(e)?new tl(e):te(e)&&arguments.length>1?rl(e,t,n):le(e)}function rl(e,t,n){const r=e[t];return ue(r)?r:new el(e,t,n)}class sl{constructor(t,n,r,s){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new wr(t,()=>{this._dirty||(this._dirty=!0,Ir(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=X(this);return Sr(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function il(e,t,n=!1){let r,s;const i=V(e);return i?(r=e,s=Me):(r=e.get,s=e.set),new sl(r,s,i||!s,n)}function Ye(e,t,n,r){let s;try{s=r?e(...r):e()}catch(i){It(i,t,n)}return s}function Ae(e,t,n,r){if(V(e)){const i=Ye(e,t,n,r);return i&&$s(i)&&i.catch(o=>{It(o,t,n)}),i}const s=[];for(let i=0;i>>1;Ut(he[r])Fe&&he.splice(t,1)}function ci(e){K(e)?mt.push(...e):(!$e||!$e.includes(e,e.allowRecurse?rt+1:rt))&&mt.push(e),li()}function ts(e,t=Dt?Fe+1:0){for(;tUt(n)-Ut(r)),rt=0;rt<$e.length;rt++)$e[rt]();$e=null,rt=0}}const Ut=e=>e.id==null?1/0:e.id,al=(e,t)=>{const n=Ut(e)-Ut(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ai(e){ir=!1,Dt=!0,he.sort(al);try{for(Fe=0;Fese(_)?_.trim():_)),d&&(s=n.map(fo))}let l,c=r[l=ln(t)]||r[l=ln(Be(t))];!c&&i&&(c=r[l=ln(ct(t))]),c&&Ae(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(a,e,6,s)}}function ui(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},l=!1;if(!V(e)){const c=a=>{const h=ui(a,t,!0);h&&(l=!0,ce(o,h))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(te(e)&&r.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):ce(o,i),te(e)&&r.set(e,o),o)}function In(e,t){return!e||!qt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,ct(t))||Y(e,t))}let pe=null,On=null;function pn(e){const t=pe;return pe=e,On=e&&e.type.__scopeId||null,t}function Ka(e){On=e}function Wa(){On=null}function fl(e,t=pe,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&ps(-1);const i=pn(t);let o;try{o=e(...s)}finally{pn(i),r._d&&ps(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function $n(e){const{type:t,vnode:n,proxy:r,withProxy:s,props:i,propsOptions:[o],slots:l,attrs:c,emit:a,render:h,renderCache:d,data:p,setupState:_,ctx:x,inheritAttrs:T}=e;let B,y;const v=pn(e);try{if(n.shapeFlag&4){const m=s||r;B=xe(h.call(m,m,d,i,_,p,x)),y=c}else{const m=t;B=xe(m.length>1?m(i,{attrs:c,slots:l,emit:a}):m(i,null)),y=t.props?c:hl(c)}}catch(m){$t.length=0,It(m,e,1),B=re(me)}let H=B;if(y&&T!==!1){const m=Object.keys(y),{shapeFlag:P}=H;m.length&&P&7&&(o&&m.some(mr)&&(y=pl(y,o)),H=Qe(H,y))}return n.dirs&&(H=Qe(H),H.dirs=H.dirs?H.dirs.concat(n.dirs):n.dirs),n.transition&&(H.transition=n.transition),B=H,pn(v),B}function dl(e){let t;for(let n=0;n{let t;for(const n in e)(n==="class"||n==="style"||qt(n))&&((t||(t={}))[n]=e[n]);return t},pl=(e,t)=>{const n={};for(const r in e)(!mr(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function gl(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?ns(r,o,a):!!o;if(c&8){const h=t.dynamicProps;for(let d=0;de.__isSuspense,vl={name:"Suspense",__isSuspense:!0,process(e,t,n,r,s,i,o,l,c,a){e==null?yl(t,n,r,s,i,o,l,c,a):_l(e,t,n,r,s,o,l,c,a)},hydrate:bl,create:Pr,normalize:wl},qa=vl;function Kt(e,t){const n=e.props&&e.props[t];V(n)&&n()}function yl(e,t,n,r,s,i,o,l,c){const{p:a,o:{createElement:h}}=c,d=h("div"),p=e.suspense=Pr(e,s,r,t,d,n,i,o,l,c);a(null,p.pendingBranch=e.ssContent,d,null,r,p,i,o),p.deps>0?(Kt(e,"onPending"),Kt(e,"onFallback"),a(null,e.ssFallback,t,n,r,null,i,o),vt(p,e.ssFallback)):p.resolve(!1,!0)}function _l(e,t,n,r,s,i,o,l,{p:c,um:a,o:{createElement:h}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const p=t.ssContent,_=t.ssFallback,{activeBranch:x,pendingBranch:T,isInFallback:B,isHydrating:y}=d;if(T)d.pendingBranch=p,Le(p,T)?(c(T,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0?d.resolve():B&&(c(x,_,n,r,s,null,i,o,l),vt(d,_))):(d.pendingId++,y?(d.isHydrating=!1,d.activeBranch=T):a(T,s,d),d.deps=0,d.effects.length=0,d.hiddenContainer=h("div"),B?(c(null,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0?d.resolve():(c(x,_,n,r,s,null,i,o,l),vt(d,_))):x&&Le(p,x)?(c(x,p,n,r,s,d,i,o,l),d.resolve(!0)):(c(null,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0&&d.resolve()));else if(x&&Le(p,x))c(x,p,n,r,s,d,i,o,l),vt(d,p);else if(Kt(t,"onPending"),d.pendingBranch=p,d.pendingId++,c(null,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0)d.resolve();else{const{timeout:v,pendingId:H}=d;v>0?setTimeout(()=>{d.pendingId===H&&d.fallback(_)},v):v===0&&d.fallback(_)}}function Pr(e,t,n,r,s,i,o,l,c,a,h=!1){const{p:d,m:p,um:_,n:x,o:{parentNode:T,remove:B}}=a;let y;const v=El(e);v&&t!=null&&t.pendingBranch&&(y=t.pendingId,t.deps++);const H=e.props?Ds(e.props.timeout):void 0,m={vnode:e,parent:t,parentComponent:n,isSVG:o,container:r,hiddenContainer:s,anchor:i,deps:0,pendingId:0,timeout:typeof H=="number"?H:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:h,isUnmounted:!1,effects:[],resolve(P=!1,W=!1){const{vnode:D,activeBranch:C,pendingBranch:$,pendingId:A,effects:L,parentComponent:I,container:U}=m;if(m.isHydrating)m.isHydrating=!1;else if(!P){const J=C&&$.transition&&$.transition.mode==="out-in";J&&(C.transition.afterLeave=()=>{A===m.pendingId&&p($,U,Z,0)});let{anchor:Z}=m;C&&(Z=x(C),_(C,I,m,!0)),J||p($,U,Z,0)}vt(m,$),m.pendingBranch=null,m.isInFallback=!1;let M=m.parent,fe=!1;for(;M;){if(M.pendingBranch){M.effects.push(...L),fe=!0;break}M=M.parent}fe||ci(L),m.effects=[],v&&t&&t.pendingBranch&&y===t.pendingId&&(t.deps--,t.deps===0&&!W&&t.resolve()),Kt(D,"onResolve")},fallback(P){if(!m.pendingBranch)return;const{vnode:W,activeBranch:D,parentComponent:C,container:$,isSVG:A}=m;Kt(W,"onFallback");const L=x(D),I=()=>{m.isInFallback&&(d(null,P,$,L,C,null,A,l,c),vt(m,P))},U=P.transition&&P.transition.mode==="out-in";U&&(D.transition.afterLeave=I),m.isInFallback=!0,_(D,C,null,!0),U||I()},move(P,W,D){m.activeBranch&&p(m.activeBranch,P,W,D),m.container=P},next(){return m.activeBranch&&x(m.activeBranch)},registerDep(P,W){const D=!!m.pendingBranch;D&&m.deps++;const C=P.vnode.el;P.asyncDep.catch($=>{It($,P,0)}).then($=>{if(P.isUnmounted||m.isUnmounted||m.pendingId!==P.suspenseId)return;P.asyncResolved=!0;const{vnode:A}=P;dr(P,$,!1),C&&(A.el=C);const L=!C&&P.subTree.el;W(P,A,T(C||P.subTree.el),C?null:x(P.subTree),m,o,c),L&&B(L),Rr(P,A.el),D&&--m.deps===0&&m.resolve()})},unmount(P,W){m.isUnmounted=!0,m.activeBranch&&_(m.activeBranch,n,P,W),m.pendingBranch&&_(m.pendingBranch,n,P,W)}};return m}function bl(e,t,n,r,s,i,o,l,c){const a=t.suspense=Pr(t,r,n,e.parentNode,document.createElement("div"),null,s,i,o,l,!0),h=c(e,a.pendingBranch=t.ssContent,n,a,i,o);return a.deps===0&&a.resolve(!1,!0),h}function wl(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=rs(r?n.default:n),e.ssFallback=r?rs(n.fallback):re(me)}function rs(e){let t;if(V(e)){const n=Et&&e._c;n&&(e._d=!1,Br()),e=e(),n&&(e._d=!0,t=Te,Ri())}return K(e)&&(e=dl(e)),e=xe(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function fi(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):ci(e)}function vt(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e,s=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=s,Rr(r,s))}function El(e){var t;return((t=e.props)==null?void 0:t.suspensible)!=null&&e.props.suspensible!==!1}function di(e,t){return Rn(e,null,t)}function Va(e,t){return Rn(e,null,{flush:"post"})}const en={};function Ne(e,t,n){return Rn(e,t,n)}function Rn(e,t,{immediate:n,deep:r,flush:s,onTrack:i,onTrigger:o}=ne){var l;const c=Ws()===((l=ae)==null?void 0:l.scope)?ae:null;let a,h=!1,d=!1;if(ue(e)?(a=()=>e.value,h=dn(e)):gt(e)?(a=()=>e,r=!0):K(e)?(d=!0,h=e.some(m=>gt(m)||dn(m)),a=()=>e.map(m=>{if(ue(m))return m.value;if(gt(m))return dt(m);if(V(m))return Ye(m,c,2)})):V(e)?t?a=()=>Ye(e,c,2):a=()=>{if(!(c&&c.isUnmounted))return p&&p(),Ae(e,c,3,[_])}:a=Me,t&&r){const m=a;a=()=>dt(m())}let p,_=m=>{p=v.onStop=()=>{Ye(m,c,4)}},x;if(xt)if(_=Me,t?n&&Ae(t,c,3,[a(),d?[]:void 0,_]):a(),s==="sync"){const m=gc();x=m.__watcherHandles||(m.__watcherHandles=[])}else return Me;let T=d?new Array(e.length).fill(en):en;const B=()=>{if(v.active)if(t){const m=v.run();(r||h||(d?m.some((P,W)=>kt(P,T[W])):kt(m,T)))&&(p&&p(),Ae(t,c,3,[m,T===en?void 0:d&&T[0]===en?[]:T,_]),T=m)}else v.run()};B.allowRecurse=!!t;let y;s==="sync"?y=B:s==="post"?y=()=>ve(B,c&&c.suspense):(B.pre=!0,c&&(B.id=c.uid),y=()=>Sn(B));const v=new wr(a,y);t?n?B():T=v.run():s==="post"?ve(v.run.bind(v),c&&c.suspense):v.run();const H=()=>{v.stop(),c&&c.scope&&vr(c.scope.effects,v)};return x&&x.push(H),H}function Cl(e,t,n){const r=this.proxy,s=se(e)?e.includes(".")?hi(r,e):()=>r[e]:e.bind(r,r);let i;V(t)?i=t:(i=t.handler,n=t);const o=ae;Ct(this);const l=Rn(s,i.bind(r),n);return o?Ct(o):ot(),l}function hi(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{dt(n,t)});else if(js(e))for(const n in e)dt(e[n],t);return e}function Pe(e,t,n,r){const s=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),yi(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],pi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},Tl={name:"BaseTransition",props:pi,setup(e,{slots:t}){const n=Mn(),r=xl();let s;return()=>{const i=t.default&&mi(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const T of i)if(T.type!==me){o=T;break}}const l=X(e),{mode:c}=l;if(r.isLeaving)return kn(o);const a=ss(o);if(!a)return kn(o);const h=or(a,l,r,n);lr(a,h);const d=n.subTree,p=d&&ss(d);let _=!1;const{getTransitionKey:x}=a.type;if(x){const T=x();s===void 0?s=T:T!==s&&(s=T,_=!0)}if(p&&p.type!==me&&(!Le(a,p)||_)){const T=or(p,l,r,n);if(lr(p,T),c==="out-in")return r.isLeaving=!0,T.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},kn(o);c==="in-out"&&a.type!==me&&(T.delayLeave=(B,y,v)=>{const H=gi(r,p);H[String(p.key)]=p,B._leaveCb=()=>{y(),B._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=v})}return o}}},Al=Tl;function gi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function or(e,t,n,r){const{appear:s,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:d,onLeave:p,onAfterLeave:_,onLeaveCancelled:x,onBeforeAppear:T,onAppear:B,onAfterAppear:y,onAppearCancelled:v}=t,H=String(e.key),m=gi(n,e),P=(C,$)=>{C&&Ae(C,r,9,$)},W=(C,$)=>{const A=$[1];P(C,$),K(C)?C.every(L=>L.length<=1)&&A():C.length<=1&&A()},D={mode:i,persisted:o,beforeEnter(C){let $=l;if(!n.isMounted)if(s)$=T||l;else return;C._leaveCb&&C._leaveCb(!0);const A=m[H];A&&Le(e,A)&&A.el._leaveCb&&A.el._leaveCb(),P($,[C])},enter(C){let $=c,A=a,L=h;if(!n.isMounted)if(s)$=B||c,A=y||a,L=v||h;else return;let I=!1;const U=C._enterCb=M=>{I||(I=!0,M?P(L,[C]):P(A,[C]),D.delayedLeave&&D.delayedLeave(),C._enterCb=void 0)};$?W($,[C,U]):U()},leave(C,$){const A=String(e.key);if(C._enterCb&&C._enterCb(!0),n.isUnmounting)return $();P(d,[C]);let L=!1;const I=C._leaveCb=U=>{L||(L=!0,$(),U?P(x,[C]):P(_,[C]),C._leaveCb=void 0,m[A]===e&&delete m[A])};m[A]=e,p?W(p,[C,I]):I()},clone(C){return or(C,t,n,r)}};return D}function kn(e){if(Vt(e))return e=Qe(e),e.children=null,e}function ss(e){return Vt(e)?e.children?e.children[0]:void 0:e}function lr(e,t){e.shapeFlag&6&&e.component?lr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function mi(e,t=!1,n){let r=[],s=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;function za(e){V(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:i,suspensible:o=!0,onError:l}=e;let c=null,a,h=0;const d=()=>(h++,c=null,p()),p=()=>{let _;return c||(_=c=t().catch(x=>{if(x=x instanceof Error?x:new Error(String(x)),l)return new Promise((T,B)=>{l(x,()=>T(d()),()=>B(x),h+1)});throw x}).then(x=>_!==c&&c?c:(x&&(x.__esModule||x[Symbol.toStringTag]==="Module")&&(x=x.default),a=x,x)))};return Fr({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const _=ae;if(a)return()=>jn(a,_);const x=v=>{c=null,It(v,_,13,!r)};if(o&&_.suspense||xt)return p().then(v=>()=>jn(v,_)).catch(v=>(x(v),()=>r?re(r,{error:v}):null));const T=le(!1),B=le(),y=le(!!s);return s&&setTimeout(()=>{y.value=!1},s),i!=null&&setTimeout(()=>{if(!T.value&&!B.value){const v=new Error(`Async component timed out after ${i}ms.`);x(v),B.value=v}},i),p().then(()=>{T.value=!0,_.parent&&Vt(_.parent.vnode)&&Sn(_.parent.update)}).catch(v=>{x(v),B.value=v}),()=>{if(T.value&&a)return jn(a,_);if(B.value&&r)return re(r,{error:B.value});if(n&&!y.value)return re(n)}}})}function jn(e,t){const{ref:n,props:r,children:s,ce:i}=t.vnode,o=re(e,r,s);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const Vt=e=>e.type.__isKeepAlive;function Sl(e,t){vi(e,"a",t)}function Il(e,t){vi(e,"da",t)}function vi(e,t,n=ae){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Pn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Vt(s.parent.vnode)&&Ol(r,t,n,s),s=s.parent}}function Ol(e,t,n,r){const s=Pn(t,e,r,!0);Fn(()=>{vr(r[t],s)},n)}function Pn(e,t,n=ae,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;At(),Ct(n);const l=Ae(t,n,e,o);return ot(),St(),l});return r?s.unshift(i):s.push(i),i}}const De=e=>(t,n=ae)=>(!xt||e==="sp")&&Pn(e,(...r)=>t(...r),n),Rl=De("bm"),Ot=De("m"),Pl=De("bu"),Fl=De("u"),yi=De("bum"),Fn=De("um"),Ll=De("sp"),Ml=De("rtg"),Nl=De("rtc");function Bl(e,t=ae){Pn("ec",e,t)}const Lr="components";function Ya(e,t){return bi(Lr,e,!0,t)||e}const _i=Symbol.for("v-ndc");function Xa(e){return se(e)?bi(Lr,e,!1)||e:e||_i}function bi(e,t,n=!0,r=!1){const s=pe||ae;if(s){const i=s.type;if(e===Lr){const l=dc(i,!1);if(l&&(l===t||l===Be(t)||l===bn(Be(t))))return i}const o=is(s[e]||i[e],t)||is(s.appContext[e],t);return!o&&r?i:o}}function is(e,t){return e&&(e[t]||e[Be(t)]||e[bn(Be(t))])}function Ja(e,t,n,r){let s;const i=n;if(K(e)||se(e)){s=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i));else{const o=Object.keys(e);s=new Array(o.length);for(let l=0,c=o.length;lWt(t)?!(t.type===me||t.type===ye&&!wi(t.children)):!0)?e:null}function Za(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:ln(r)]=e[r];return n}const cr=e=>e?Bi(e)?kr(e)||e.proxy:cr(e.parent):null,Bt=ce(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>cr(e.parent),$root:e=>cr(e.root),$emit:e=>e.emit,$options:e=>Mr(e),$forceUpdate:e=>e.f||(e.f=()=>Sn(e.update)),$nextTick:e=>e.n||(e.n=An.bind(e.proxy)),$watch:e=>Cl.bind(e)}),Dn=(e,t)=>e!==ne&&!e.__isScriptSetup&&Y(e,t),Hl={get({_:e},t){const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const _=o[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(Dn(r,t))return o[t]=1,r[t];if(s!==ne&&Y(s,t))return o[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return o[t]=3,i[t];if(n!==ne&&Y(n,t))return o[t]=4,n[t];ar&&(o[t]=0)}}const h=Bt[t];let d,p;if(h)return t==="$attrs"&&_e(e,"get",t),h(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==ne&&Y(n,t))return o[t]=4,n[t];if(p=c.config.globalProperties,Y(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return Dn(s,t)?(s[t]=n,!0):r!==ne&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:i}},o){let l;return!!n[o]||e!==ne&&Y(e,o)||Dn(t,o)||(l=i[0])&&Y(l,o)||Y(r,o)||Y(Bt,o)||Y(s.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ga(){return $l().slots}function $l(){const e=Mn();return e.setupContext||(e.setupContext=$i(e))}function os(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ar=!0;function kl(e){const t=Mr(e),n=e.proxy,r=e.ctx;ar=!1,t.beforeCreate&&ls(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:o,watch:l,provide:c,inject:a,created:h,beforeMount:d,mounted:p,beforeUpdate:_,updated:x,activated:T,deactivated:B,beforeDestroy:y,beforeUnmount:v,destroyed:H,unmounted:m,render:P,renderTracked:W,renderTriggered:D,errorCaptured:C,serverPrefetch:$,expose:A,inheritAttrs:L,components:I,directives:U,filters:M}=t;if(a&&jl(a,r,null),o)for(const Z in o){const G=o[Z];V(G)&&(r[Z]=G.bind(n))}if(s){const Z=s.call(n,n);te(Z)&&(e.data=xn(Z))}if(ar=!0,i)for(const Z in i){const G=i[Z],Ze=V(G)?G.bind(n,n):V(G.get)?G.get.bind(n,n):Me,zt=!V(G)&&V(G.set)?G.set.bind(n):Me,Ge=ie({get:Ze,set:zt});Object.defineProperty(r,Z,{enumerable:!0,configurable:!0,get:()=>Ge.value,set:Oe=>Ge.value=Oe})}if(l)for(const Z in l)Ei(l[Z],r,n,Z);if(c){const Z=V(c)?c.call(n):c;Reflect.ownKeys(Z).forEach(G=>{Vl(G,Z[G])})}h&&ls(h,e,"c");function J(Z,G){K(G)?G.forEach(Ze=>Z(Ze.bind(n))):G&&Z(G.bind(n))}if(J(Rl,d),J(Ot,p),J(Pl,_),J(Fl,x),J(Sl,T),J(Il,B),J(Bl,C),J(Nl,W),J(Ml,D),J(yi,v),J(Fn,m),J(Ll,$),K(A))if(A.length){const Z=e.exposed||(e.exposed={});A.forEach(G=>{Object.defineProperty(Z,G,{get:()=>n[G],set:Ze=>n[G]=Ze})})}else e.exposed||(e.exposed={});P&&e.render===Me&&(e.render=P),L!=null&&(e.inheritAttrs=L),I&&(e.components=I),U&&(e.directives=U)}function jl(e,t,n=Me){K(e)&&(e=ur(e));for(const r in e){const s=e[r];let i;te(s)?"default"in s?i=_t(s.from||r,s.default,!0):i=_t(s.from||r):i=_t(s),ue(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function ls(e,t,n){Ae(K(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ei(e,t,n,r){const s=r.includes(".")?hi(n,r):()=>n[r];if(se(e)){const i=t[e];V(i)&&Ne(s,i)}else if(V(e))Ne(s,e.bind(n));else if(te(e))if(K(e))e.forEach(i=>Ei(i,t,n,r));else{const i=V(e.handler)?e.handler.bind(n):t[e.handler];V(i)&&Ne(s,i,e)}}function Mr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>gn(c,a,o,!0)),gn(c,t,o)),te(t)&&i.set(t,c),c}function gn(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&gn(e,i,n,!0),s&&s.forEach(o=>gn(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const l=Dl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Dl={data:cs,props:as,emits:as,methods:Lt,computed:Lt,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:Lt,directives:Lt,watch:Kl,provide:cs,inject:Ul};function cs(e,t){return t?e?function(){return ce(V(e)?e.call(this,this):e,V(t)?t.call(this,this):t)}:t:e}function Ul(e,t){return Lt(ur(e),ur(t))}function ur(e){if(K(e)){const t={};for(let n=0;n1)return n&&V(t)?t.call(r&&r.proxy):t}}function zl(e,t,n,r=!1){const s={},i={};un(i,Ln,1),e.propsDefaults=Object.create(null),xi(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:Xo(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function Yl(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,l=X(s),[c]=e.propsOptions;let a=!1;if((r||o>0)&&!(o&16)){if(o&8){const h=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[p,_]=Ti(d,t,!0);ce(o,p),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!c)return te(e)&&r.set(e,ht),ht;if(K(i))for(let h=0;h-1,_[1]=T<0||x-1||Y(_,"default"))&&l.push(d)}}}const a=[o,l];return te(e)&&r.set(e,a),a}function us(e){return e[0]!=="$"}function fs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function ds(e,t){return fs(e)===fs(t)}function hs(e,t){return K(t)?t.findIndex(n=>ds(n,e)):V(t)&&ds(t,e)?0:-1}const Ai=e=>e[0]==="_"||e==="$stable",Nr=e=>K(e)?e.map(xe):[xe(e)],Xl=(e,t,n)=>{if(t._n)return t;const r=fl((...s)=>Nr(t(...s)),n);return r._c=!1,r},Si=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Ai(s))continue;const i=e[s];if(V(i))t[s]=Xl(s,i,r);else if(i!=null){const o=Nr(i);t[s]=()=>o}}},Ii=(e,t)=>{const n=Nr(t);e.slots.default=()=>n},Jl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=X(t),un(t,"_",n)):Si(t,e.slots={})}else e.slots={},t&&Ii(e,t);un(e.slots,Ln,1)},Ql=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=ne;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(ce(s,t),!n&&l===1&&delete s._):(i=!t.$stable,Si(t,s)),o=t}else t&&(Ii(e,t),o={default:1});if(i)for(const l in s)!Ai(l)&&!(l in o)&&delete s[l]};function vn(e,t,n,r,s=!1){if(K(e)){e.forEach((p,_)=>vn(p,t&&(K(t)?t[_]:t),n,r,s));return}if(yt(r)&&!s)return;const i=r.shapeFlag&4?kr(r.component)||r.component.proxy:r.el,o=s?null:i,{i:l,r:c}=e,a=t&&t.r,h=l.refs===ne?l.refs={}:l.refs,d=l.setupState;if(a!=null&&a!==c&&(se(a)?(h[a]=null,Y(d,a)&&(d[a]=null)):ue(a)&&(a.value=null)),V(c))Ye(c,l,12,[o,h]);else{const p=se(c),_=ue(c);if(p||_){const x=()=>{if(e.f){const T=p?Y(d,c)?d[c]:h[c]:c.value;s?K(T)&&vr(T,i):K(T)?T.includes(i)||T.push(i):p?(h[c]=[i],Y(d,c)&&(d[c]=h[c])):(c.value=[i],e.k&&(h[e.k]=c.value))}else p?(h[c]=o,Y(d,c)&&(d[c]=o)):_&&(c.value=o,e.k&&(h[e.k]=o))};o?(x.id=-1,ve(x,n)):x()}}}let Ke=!1;const tn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",nn=e=>e.nodeType===8;function Zl(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:a}}=e,h=(y,v)=>{if(!v.hasChildNodes()){n(null,y,v),hn(),v._vnode=y;return}Ke=!1,d(v.firstChild,y,null,null,null),hn(),v._vnode=y,Ke&&console.error("Hydration completed but contains mismatches.")},d=(y,v,H,m,P,W=!1)=>{const D=nn(y)&&y.data==="[",C=()=>T(y,v,H,m,P,D),{type:$,ref:A,shapeFlag:L,patchFlag:I}=v;let U=y.nodeType;v.el=y,I===-2&&(W=!1,v.dynamicChildren=null);let M=null;switch($){case wt:U!==3?v.children===""?(c(v.el=s(""),o(y),y),M=y):M=C():(y.data!==v.children&&(Ke=!0,y.data=v.children),M=i(y));break;case me:U!==8||D?M=C():M=i(y);break;case Ht:if(D&&(y=i(y),U=y.nodeType),U===1||U===3){M=y;const fe=!v.children.length;for(let J=0;J{W=W||!!v.dynamicChildren;const{type:D,props:C,patchFlag:$,shapeFlag:A,dirs:L}=v,I=D==="input"&&L||D==="option";if(I||$!==-1){if(L&&Pe(v,null,H,"created"),C)if(I||!W||$&48)for(const M in C)(I&&M.endsWith("value")||qt(M)&&!Mt(M))&&r(y,M,null,C[M],!1,void 0,H);else C.onClick&&r(y,"onClick",null,C.onClick,!1,void 0,H);let U;if((U=C&&C.onVnodeBeforeMount)&&Ce(U,H,v),L&&Pe(v,null,H,"beforeMount"),((U=C&&C.onVnodeMounted)||L)&&fi(()=>{U&&Ce(U,H,v),L&&Pe(v,null,H,"mounted")},m),A&16&&!(C&&(C.innerHTML||C.textContent))){let M=_(y.firstChild,v,y,H,m,P,W);for(;M;){Ke=!0;const fe=M;M=M.nextSibling,l(fe)}}else A&8&&y.textContent!==v.children&&(Ke=!0,y.textContent=v.children)}return y.nextSibling},_=(y,v,H,m,P,W,D)=>{D=D||!!v.dynamicChildren;const C=v.children,$=C.length;for(let A=0;A<$;A++){const L=D?C[A]:C[A]=xe(C[A]);if(y)y=d(y,L,m,P,W,D);else{if(L.type===wt&&!L.children)continue;Ke=!0,n(null,L,H,null,m,P,tn(H),W)}}return y},x=(y,v,H,m,P,W)=>{const{slotScopeIds:D}=v;D&&(P=P?P.concat(D):D);const C=o(y),$=_(i(y),v,C,H,m,P,W);return $&&nn($)&&$.data==="]"?i(v.anchor=$):(Ke=!0,c(v.anchor=a("]"),C,$),$)},T=(y,v,H,m,P,W)=>{if(Ke=!0,v.el=null,W){const $=B(y);for(;;){const A=i(y);if(A&&A!==$)l(A);else break}}const D=i(y),C=o(y);return l(y),n(null,v,C,D,H,m,tn(C),P),D},B=y=>{let v=0;for(;y;)if(y=i(y),y&&nn(y)&&(y.data==="["&&v++,y.data==="]")){if(v===0)return i(y);v--}return y};return[h,d]}const ve=fi;function Gl(e){return ec(e,Zl)}function ec(e,t){const n=tr();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:h,parentNode:d,nextSibling:p,setScopeId:_=Me,insertStaticContent:x}=e,T=(u,f,g,w=null,b=null,O=null,F=!1,S=null,R=!!f.dynamicChildren)=>{if(u===f)return;u&&!Le(u,f)&&(w=Yt(u),Oe(u,b,O,!0),u=null),f.patchFlag===-2&&(R=!1,f.dynamicChildren=null);const{type:E,ref:k,shapeFlag:N}=f;switch(E){case wt:B(u,f,g,w);break;case me:y(u,f,g,w);break;case Ht:u==null&&v(f,g,w,F);break;case ye:I(u,f,g,w,b,O,F,S,R);break;default:N&1?P(u,f,g,w,b,O,F,S,R):N&6?U(u,f,g,w,b,O,F,S,R):(N&64||N&128)&&E.process(u,f,g,w,b,O,F,S,R,at)}k!=null&&b&&vn(k,u&&u.ref,O,f||u,!f)},B=(u,f,g,w)=>{if(u==null)r(f.el=l(f.children),g,w);else{const b=f.el=u.el;f.children!==u.children&&a(b,f.children)}},y=(u,f,g,w)=>{u==null?r(f.el=c(f.children||""),g,w):f.el=u.el},v=(u,f,g,w)=>{[u.el,u.anchor]=x(u.children,f,g,w,u.el,u.anchor)},H=({el:u,anchor:f},g,w)=>{let b;for(;u&&u!==f;)b=p(u),r(u,g,w),u=b;r(f,g,w)},m=({el:u,anchor:f})=>{let g;for(;u&&u!==f;)g=p(u),s(u),u=g;s(f)},P=(u,f,g,w,b,O,F,S,R)=>{F=F||f.type==="svg",u==null?W(f,g,w,b,O,F,S,R):$(u,f,b,O,F,S,R)},W=(u,f,g,w,b,O,F,S)=>{let R,E;const{type:k,props:N,shapeFlag:j,transition:q,dirs:z}=u;if(R=u.el=o(u.type,O,N&&N.is,N),j&8?h(R,u.children):j&16&&C(u.children,R,null,w,b,O&&k!=="foreignObject",F,S),z&&Pe(u,null,w,"created"),D(R,u,u.scopeId,F,w),N){for(const Q in N)Q!=="value"&&!Mt(Q)&&i(R,Q,null,N[Q],O,u.children,w,b,He);"value"in N&&i(R,"value",null,N.value),(E=N.onVnodeBeforeMount)&&Ce(E,w,u)}z&&Pe(u,null,w,"beforeMount");const ee=(!b||b&&!b.pendingBranch)&&q&&!q.persisted;ee&&q.beforeEnter(R),r(R,f,g),((E=N&&N.onVnodeMounted)||ee||z)&&ve(()=>{E&&Ce(E,w,u),ee&&q.enter(R),z&&Pe(u,null,w,"mounted")},b)},D=(u,f,g,w,b)=>{if(g&&_(u,g),w)for(let O=0;O{for(let E=R;E{const S=f.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:k}=f;R|=u.patchFlag&16;const N=u.props||ne,j=f.props||ne;let q;g&&et(g,!1),(q=j.onVnodeBeforeUpdate)&&Ce(q,g,f,u),k&&Pe(f,u,g,"beforeUpdate"),g&&et(g,!0);const z=b&&f.type!=="foreignObject";if(E?A(u.dynamicChildren,E,S,g,w,z,O):F||G(u,f,S,null,g,w,z,O,!1),R>0){if(R&16)L(S,f,N,j,g,w,b);else if(R&2&&N.class!==j.class&&i(S,"class",null,j.class,b),R&4&&i(S,"style",N.style,j.style,b),R&8){const ee=f.dynamicProps;for(let Q=0;Q{q&&Ce(q,g,f,u),k&&Pe(f,u,g,"updated")},w)},A=(u,f,g,w,b,O,F)=>{for(let S=0;S{if(g!==w){if(g!==ne)for(const S in g)!Mt(S)&&!(S in w)&&i(u,S,g[S],null,F,f.children,b,O,He);for(const S in w){if(Mt(S))continue;const R=w[S],E=g[S];R!==E&&S!=="value"&&i(u,S,E,R,F,f.children,b,O,He)}"value"in w&&i(u,"value",g.value,w.value)}},I=(u,f,g,w,b,O,F,S,R)=>{const E=f.el=u?u.el:l(""),k=f.anchor=u?u.anchor:l("");let{patchFlag:N,dynamicChildren:j,slotScopeIds:q}=f;q&&(S=S?S.concat(q):q),u==null?(r(E,g,w),r(k,g,w),C(f.children,g,k,b,O,F,S,R)):N>0&&N&64&&j&&u.dynamicChildren?(A(u.dynamicChildren,j,g,b,O,F,S),(f.key!=null||b&&f===b.subTree)&&Oi(u,f,!0)):G(u,f,g,k,b,O,F,S,R)},U=(u,f,g,w,b,O,F,S,R)=>{f.slotScopeIds=S,u==null?f.shapeFlag&512?b.ctx.activate(f,g,w,F,R):M(f,g,w,b,O,F,R):fe(u,f,R)},M=(u,f,g,w,b,O,F)=>{const S=u.component=cc(u,w,b);if(Vt(u)&&(S.ctx.renderer=at),ac(S),S.asyncDep){if(b&&b.registerDep(S,J),!u.el){const R=S.subTree=re(me);y(null,R,f,g)}return}J(S,u,f,g,b,O,F)},fe=(u,f,g)=>{const w=f.component=u.component;if(gl(u,f,g))if(w.asyncDep&&!w.asyncResolved){Z(w,f,g);return}else w.next=f,cl(w.update),w.update();else f.el=u.el,w.vnode=f},J=(u,f,g,w,b,O,F)=>{const S=()=>{if(u.isMounted){let{next:k,bu:N,u:j,parent:q,vnode:z}=u,ee=k,Q;et(u,!1),k?(k.el=z.el,Z(u,k,F)):k=z,N&&Hn(N),(Q=k.props&&k.props.onVnodeBeforeUpdate)&&Ce(Q,q,k,z),et(u,!0);const oe=$n(u),Se=u.subTree;u.subTree=oe,T(Se,oe,d(Se.el),Yt(Se),u,b,O),k.el=oe.el,ee===null&&Rr(u,oe.el),j&&ve(j,b),(Q=k.props&&k.props.onVnodeUpdated)&&ve(()=>Ce(Q,q,k,z),b)}else{let k;const{el:N,props:j}=f,{bm:q,m:z,parent:ee}=u,Q=yt(f);if(et(u,!1),q&&Hn(q),!Q&&(k=j&&j.onVnodeBeforeMount)&&Ce(k,ee,f),et(u,!0),N&&Bn){const oe=()=>{u.subTree=$n(u),Bn(N,u.subTree,u,b,null)};Q?f.type.__asyncLoader().then(()=>!u.isUnmounted&&oe()):oe()}else{const oe=u.subTree=$n(u);T(null,oe,g,w,u,b,O),f.el=oe.el}if(z&&ve(z,b),!Q&&(k=j&&j.onVnodeMounted)){const oe=f;ve(()=>Ce(k,ee,oe),b)}(f.shapeFlag&256||ee&&yt(ee.vnode)&&ee.vnode.shapeFlag&256)&&u.a&&ve(u.a,b),u.isMounted=!0,f=g=w=null}},R=u.effect=new wr(S,()=>Sn(E),u.scope),E=u.update=()=>R.run();E.id=u.uid,et(u,!0),E()},Z=(u,f,g)=>{f.component=u;const w=u.vnode.props;u.vnode=f,u.next=null,Yl(u,f.props,w,g),Ql(u,f.children,g),At(),ts(),St()},G=(u,f,g,w,b,O,F,S,R=!1)=>{const E=u&&u.children,k=u?u.shapeFlag:0,N=f.children,{patchFlag:j,shapeFlag:q}=f;if(j>0){if(j&128){zt(E,N,g,w,b,O,F,S,R);return}else if(j&256){Ze(E,N,g,w,b,O,F,S,R);return}}q&8?(k&16&&He(E,b,O),N!==E&&h(g,N)):k&16?q&16?zt(E,N,g,w,b,O,F,S,R):He(E,b,O,!0):(k&8&&h(g,""),q&16&&C(N,g,w,b,O,F,S,R))},Ze=(u,f,g,w,b,O,F,S,R)=>{u=u||ht,f=f||ht;const E=u.length,k=f.length,N=Math.min(E,k);let j;for(j=0;jk?He(u,b,O,!0,!1,N):C(f,g,w,b,O,F,S,R,N)},zt=(u,f,g,w,b,O,F,S,R)=>{let E=0;const k=f.length;let N=u.length-1,j=k-1;for(;E<=N&&E<=j;){const q=u[E],z=f[E]=R?Ve(f[E]):xe(f[E]);if(Le(q,z))T(q,z,g,null,b,O,F,S,R);else break;E++}for(;E<=N&&E<=j;){const q=u[N],z=f[j]=R?Ve(f[j]):xe(f[j]);if(Le(q,z))T(q,z,g,null,b,O,F,S,R);else break;N--,j--}if(E>N){if(E<=j){const q=j+1,z=qj)for(;E<=N;)Oe(u[E],b,O,!0),E++;else{const q=E,z=E,ee=new Map;for(E=z;E<=j;E++){const be=f[E]=R?Ve(f[E]):xe(f[E]);be.key!=null&&ee.set(be.key,E)}let Q,oe=0;const Se=j-z+1;let ut=!1,Wr=0;const Rt=new Array(Se);for(E=0;E=Se){Oe(be,b,O,!0);continue}let Re;if(be.key!=null)Re=ee.get(be.key);else for(Q=z;Q<=j;Q++)if(Rt[Q-z]===0&&Le(be,f[Q])){Re=Q;break}Re===void 0?Oe(be,b,O,!0):(Rt[Re-z]=E+1,Re>=Wr?Wr=Re:ut=!0,T(be,f[Re],g,null,b,O,F,S,R),oe++)}const qr=ut?tc(Rt):ht;for(Q=qr.length-1,E=Se-1;E>=0;E--){const be=z+E,Re=f[be],Vr=be+1{const{el:O,type:F,transition:S,children:R,shapeFlag:E}=u;if(E&6){Ge(u.component.subTree,f,g,w);return}if(E&128){u.suspense.move(f,g,w);return}if(E&64){F.move(u,f,g,at);return}if(F===ye){r(O,f,g);for(let N=0;NS.enter(O),b);else{const{leave:N,delayLeave:j,afterLeave:q}=S,z=()=>r(O,f,g),ee=()=>{N(O,()=>{z(),q&&q()})};j?j(O,z,ee):ee()}else r(O,f,g)},Oe=(u,f,g,w=!1,b=!1)=>{const{type:O,props:F,ref:S,children:R,dynamicChildren:E,shapeFlag:k,patchFlag:N,dirs:j}=u;if(S!=null&&vn(S,null,g,u,!0),k&256){f.ctx.deactivate(u);return}const q=k&1&&j,z=!yt(u);let ee;if(z&&(ee=F&&F.onVnodeBeforeUnmount)&&Ce(ee,f,u),k&6)so(u.component,g,w);else{if(k&128){u.suspense.unmount(g,w);return}q&&Pe(u,null,f,"beforeUnmount"),k&64?u.type.remove(u,f,g,b,at,w):E&&(O!==ye||N>0&&N&64)?He(E,f,g,!1,!0):(O===ye&&N&384||!b&&k&16)&&He(R,f,g),w&&Ur(u)}(z&&(ee=F&&F.onVnodeUnmounted)||q)&&ve(()=>{ee&&Ce(ee,f,u),q&&Pe(u,null,f,"unmounted")},g)},Ur=u=>{const{type:f,el:g,anchor:w,transition:b}=u;if(f===ye){ro(g,w);return}if(f===Ht){m(u);return}const O=()=>{s(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:F,delayLeave:S}=b,R=()=>F(g,O);S?S(u.el,O,R):R()}else O()},ro=(u,f)=>{let g;for(;u!==f;)g=p(u),s(u),u=g;s(f)},so=(u,f,g)=>{const{bum:w,scope:b,update:O,subTree:F,um:S}=u;w&&Hn(w),b.stop(),O&&(O.active=!1,Oe(F,u,f,g)),S&&ve(S,f),ve(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},He=(u,f,g,w=!1,b=!1,O=0)=>{for(let F=O;Fu.shapeFlag&6?Yt(u.component.subTree):u.shapeFlag&128?u.suspense.next():p(u.anchor||u.el),Kr=(u,f,g)=>{u==null?f._vnode&&Oe(f._vnode,null,null,!0):T(f._vnode||null,u,f,null,null,null,g),ts(),hn(),f._vnode=u},at={p:T,um:Oe,m:Ge,r:Ur,mt:M,mc:C,pc:G,pbc:A,n:Yt,o:e};let Nn,Bn;return t&&([Nn,Bn]=t(at)),{render:Kr,hydrate:Nn,createApp:ql(Kr,Nn)}}function et({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Oi(e,t,n=!1){const r=e.children,s=t.children;if(K(r)&&K(s))for(let i=0;i>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}const nc=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),wt=Symbol.for("v-txt"),me=Symbol.for("v-cmt"),Ht=Symbol.for("v-stc"),$t=[];let Te=null;function Br(e=!1){$t.push(Te=e?null:[])}function Ri(){$t.pop(),Te=$t[$t.length-1]||null}let Et=1;function ps(e){Et+=e}function Pi(e){return e.dynamicChildren=Et>0?Te||ht:null,Ri(),Et>0&&Te&&Te.push(e),e}function eu(e,t,n,r,s,i){return Pi(Mi(e,t,n,r,s,i,!0))}function Fi(e,t,n,r,s){return Pi(re(e,t,n,r,s,!0))}function Wt(e){return e?e.__v_isVNode===!0:!1}function Le(e,t){return e.type===t.type&&e.key===t.key}const Ln="__vInternal",Li=({key:e})=>e??null,cn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ue(e)||V(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function Mi(e,t=null,n=null,r=0,s=null,i=e===ye?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Li(t),ref:t&&cn(t),scopeId:On,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:pe};return l?(Hr(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Et>0&&!o&&Te&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Te.push(c),c}const re=rc;function rc(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===_i)&&(e=me),Wt(e)){const l=Qe(e,t,!0);return n&&Hr(l,n),Et>0&&!i&&Te&&(l.shapeFlag&6?Te[Te.indexOf(e)]=l:Te.push(l)),l.patchFlag|=-2,l}if(hc(e)&&(e=e.__vccOpts),t){t=sc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=En(l)),te(c)&&(ti(c)&&!K(c)&&(c=ce({},c)),t.style=wn(c))}const o=se(e)?1:ml(e)?128:nc(e)?64:te(e)?4:V(e)?2:0;return Mi(e,t,n,r,s,o,i,!0)}function sc(e){return e?ti(e)||Ln in e?ce({},e):e:null}function Qe(e,t,n=!1){const{props:r,ref:s,patchFlag:i,children:o}=e,l=t?ic(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Li(l),ref:t&&t.ref?n&&s?K(s)?s.concat(cn(t)):[s,cn(t)]:cn(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ni(e=" ",t=0){return re(wt,null,e,t)}function tu(e,t){const n=re(Ht,null,e);return n.staticCount=t,n}function nu(e="",t=!1){return t?(Br(),Fi(me,null,e)):re(me,null,e)}function xe(e){return e==null||typeof e=="boolean"?re(me):K(e)?re(ye,null,e.slice()):typeof e=="object"?Ve(e):re(wt,null,String(e))}function Ve(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Hr(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Hr(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!(Ln in t)?t._ctx=pe:s===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else V(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),r&64?(n=16,t=[Ni(t)]):n=8);e.children=t,e.shapeFlag|=n}function ic(...e){const t={};for(let n=0;nae||pe;let $r,ft,gs="__VUE_INSTANCE_SETTERS__";(ft=tr()[gs])||(ft=tr()[gs]=[]),ft.push(e=>ae=e),$r=e=>{ft.length>1?ft.forEach(t=>t(e)):ft[0](e)};const Ct=e=>{$r(e),e.scope.on()},ot=()=>{ae&&ae.scope.off(),$r(null)};function Bi(e){return e.vnode.shapeFlag&4}let xt=!1;function ac(e,t=!1){xt=t;const{props:n,children:r}=e.vnode,s=Bi(e);zl(e,n,s,t),Jl(e,r);const i=s?uc(e,t):void 0;return xt=!1,i}function uc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Nt(new Proxy(e.ctx,Hl));const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?$i(e):null;Ct(e),At();const i=Ye(r,e,0,[e.props,s]);if(St(),ot(),$s(i)){if(i.then(ot,ot),t)return i.then(o=>{dr(e,o,t)}).catch(o=>{It(o,e,0)});e.asyncDep=i}else dr(e,i,t)}else Hi(e,t)}function dr(e,t,n){V(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:te(t)&&(e.setupState=ii(t)),Hi(e,n)}let ms;function Hi(e,t,n){const r=e.type;if(!e.render){if(!t&&ms&&!r.render){const s=r.template||Mr(e).template;if(s){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=ce(ce({isCustomElement:i,delimiters:l},o),c);r.render=ms(s,a)}}e.render=r.render||Me}Ct(e),At(),kl(e),St(),ot()}function fc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return _e(e,"get","$attrs"),t[n]}}))}function $i(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return fc(e)},slots:e.slots,emit:e.emit,expose:t}}function kr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ii(Nt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Bt)return Bt[n](e)},has(t,n){return n in t||n in Bt}}))}function dc(e,t=!0){return V(e)?e.displayName||e.name:e.name||t&&e.__name}function hc(e){return V(e)&&"__vccOpts"in e}const ie=(e,t)=>il(e,t,xt);function hr(e,t,n){const r=arguments.length;return r===2?te(t)&&!K(t)?Wt(t)?re(e,null,[t]):re(e,t):re(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Wt(n)&&(n=[n]),re(e,t,n))}const pc=Symbol.for("v-scx"),gc=()=>_t(pc),mc="3.3.4",vc="http://www.w3.org/2000/svg",st=typeof document<"u"?document:null,vs=st&&st.createElement("template"),yc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t?st.createElementNS(vc,e):st.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>st.createTextNode(e),createComment:e=>st.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>st.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{vs.innerHTML=r?`${e}`:e;const l=vs.content;if(r){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function _c(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function bc(e,t,n){const r=e.style,s=se(n);if(n&&!s){if(t&&!se(t))for(const i in t)n[i]==null&&pr(r,i,"");for(const i in n)pr(r,i,n[i])}else{const i=r.display;s?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=i)}}const ys=/\s*!important$/;function pr(e,t,n){if(K(n))n.forEach(r=>pr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=wc(e,t);ys.test(n)?e.setProperty(ct(r),n.replace(ys,""),"important"):e[r]=n}}const _s=["Webkit","Moz","ms"],Un={};function wc(e,t){const n=Un[t];if(n)return n;let r=Be(t);if(r!=="filter"&&r in e)return Un[t]=r;r=bn(r);for(let s=0;s<_s.length;s++){const i=_s[s]+r;if(i in e)return Un[t]=i}return t}const bs="http://www.w3.org/1999/xlink";function Ec(e,t,n,r,s){if(r&&t.startsWith("xlink:"))n==null?e.removeAttributeNS(bs,t.slice(6,t.length)):e.setAttributeNS(bs,t,n);else{const i=yo(t);n==null||i&&!Us(n)?e.removeAttribute(t):e.setAttribute(t,i?"":n)}}function Cc(e,t,n,r,s,i,o){if(t==="innerHTML"||t==="textContent"){r&&o(r,s,i),e[t]=n??"";return}const l=e.tagName;if(t==="value"&&l!=="PROGRESS"&&!l.includes("-")){e._value=n;const a=l==="OPTION"?e.getAttribute("value"):e.value,h=n??"";a!==h&&(e.value=h),n==null&&e.removeAttribute(t);return}let c=!1;if(n===""||n==null){const a=typeof e[t];a==="boolean"?n=Us(n):n==null&&a==="string"?(n="",c=!0):a==="number"&&(n=0,c=!0)}try{e[t]=n}catch{}c&&e.removeAttribute(t)}function xc(e,t,n,r){e.addEventListener(t,n,r)}function Tc(e,t,n,r){e.removeEventListener(t,n,r)}function Ac(e,t,n,r,s=null){const i=e._vei||(e._vei={}),o=i[t];if(r&&o)o.value=r;else{const[l,c]=Sc(t);if(r){const a=i[t]=Rc(r,s);xc(e,l,a,c)}else o&&(Tc(e,l,o,c),i[t]=void 0)}}const ws=/(?:Once|Passive|Capture)$/;function Sc(e){let t;if(ws.test(e)){t={};let r;for(;r=e.match(ws);)e=e.slice(0,e.length-r[0].length),t[r[0].toLowerCase()]=!0}return[e[2]===":"?e.slice(3):ct(e.slice(2)),t]}let Kn=0;const Ic=Promise.resolve(),Oc=()=>Kn||(Ic.then(()=>Kn=0),Kn=Date.now());function Rc(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ae(Pc(r,n.value),t,5,[r])};return n.value=e,n.attached=Oc(),n}function Pc(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Es=/^on[a-z]/,Fc=(e,t,n,r,s=!1,i,o,l,c)=>{t==="class"?_c(e,r,s):t==="style"?bc(e,n,r):qt(t)?mr(t)||Ac(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Lc(e,t,r,s))?Cc(e,t,r,i,o,l,c):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ec(e,t,r,s))};function Lc(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&Es.test(t)&&V(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Es.test(t)&&se(n)?!1:t in e}const We="transition",Pt="animation",ki=(e,{slots:t})=>hr(Al,Mc(e),t);ki.displayName="Transition";const ji={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ki.props=ce({},pi,ji);const tt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Cs=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function Mc(e){const t={};for(const I in e)I in ji||(t[I]=e[I]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:a=o,appearToClass:h=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,x=Nc(s),T=x&&x[0],B=x&&x[1],{onBeforeEnter:y,onEnter:v,onEnterCancelled:H,onLeave:m,onLeaveCancelled:P,onBeforeAppear:W=y,onAppear:D=v,onAppearCancelled:C=H}=t,$=(I,U,M)=>{nt(I,U?h:l),nt(I,U?a:o),M&&M()},A=(I,U)=>{I._isLeaving=!1,nt(I,d),nt(I,_),nt(I,p),U&&U()},L=I=>(U,M)=>{const fe=I?D:v,J=()=>$(U,I,M);tt(fe,[U,J]),xs(()=>{nt(U,I?c:i),qe(U,I?h:l),Cs(fe)||Ts(U,r,T,J)})};return ce(t,{onBeforeEnter(I){tt(y,[I]),qe(I,i),qe(I,o)},onBeforeAppear(I){tt(W,[I]),qe(I,c),qe(I,a)},onEnter:L(!1),onAppear:L(!0),onLeave(I,U){I._isLeaving=!0;const M=()=>A(I,U);qe(I,d),$c(),qe(I,p),xs(()=>{I._isLeaving&&(nt(I,d),qe(I,_),Cs(m)||Ts(I,r,B,M))}),tt(m,[I,M])},onEnterCancelled(I){$(I,!1),tt(H,[I])},onAppearCancelled(I){$(I,!0),tt(C,[I])},onLeaveCancelled(I){A(I),tt(P,[I])}})}function Nc(e){if(e==null)return null;if(te(e))return[Wn(e.enter),Wn(e.leave)];{const t=Wn(e);return[t,t]}}function Wn(e){return Ds(e)}function qe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function nt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function xs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Bc=0;function Ts(e,t,n,r){const s=e._endId=++Bc,i=()=>{s===e._endId&&r()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Hc(e,t);if(!o)return r();const a=o+"end";let h=0;const d=()=>{e.removeEventListener(a,p),i()},p=_=>{_.target===e&&++h>=c&&d()};setTimeout(()=>{h(n[x]||"").split(", "),s=r(`${We}Delay`),i=r(`${We}Duration`),o=As(s,i),l=r(`${Pt}Delay`),c=r(`${Pt}Duration`),a=As(l,c);let h=null,d=0,p=0;t===We?o>0&&(h=We,d=o,p=i.length):t===Pt?a>0&&(h=Pt,d=a,p=c.length):(d=Math.max(o,a),h=d>0?o>a?We:Pt:null,p=h?h===We?i.length:c.length:0);const _=h===We&&/\b(transform|all)(,|$)/.test(r(`${We}Property`).toString());return{type:h,timeout:d,propCount:p,hasTransform:_}}function As(e,t){for(;e.lengthSs(n)+Ss(e[r])))}function Ss(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function $c(){return document.body.offsetHeight}const kc=["ctrl","shift","alt","meta"],jc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>kc.some(n=>e[`${n}Key`]&&!t.includes(n))},ru=(e,t)=>(n,...r)=>{for(let s=0;sn=>{if(!("key"in n))return;const r=ct(n.key);if(t.some(s=>s===r||Dc[s]===r))return e(n)},Uc=ce({patchProp:Fc},yc);let qn,Is=!1;function Kc(){return qn=Is?qn:Gl(Uc),Is=!0,qn}const iu=(...e)=>{const t=Kc().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Wc(r);if(s)return n(s,!0,s instanceof SVGElement)},t};function Wc(e){return se(e)?document.querySelector(e):e}const ou=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},qc="modulepreload",Vc=function(e){return"/"+e},Os={},lu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.allSettled(n.map(c=>{if(c=Vc(c),c in Os)return;Os[c]=!0;const a=c.endsWith(".css"),h=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${h}`))return;const d=document.createElement("link");if(d.rel=a?"stylesheet":qc,a||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),a)return new Promise((p,_)=>{d.addEventListener("load",p),d.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return s.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},zc=window.__VP_SITE_DATA__;function jr(e){return Ws()?(wo(e),!0):!1}function Xe(e){return typeof e=="function"?e():si(e)}const Di=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Yc=Object.prototype.toString,Xc=e=>Yc.call(e)==="[object Object]",Ui=()=>{},Rs=Jc();function Jc(){var e,t;return Di&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Qc(e,t){function n(...r){return new Promise((s,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(i)})}return n}const Ki=e=>e();function Zc(e=Ki){const t=le(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...i)=>{t.value&&e(...i)};return{isActive:Tn(t),pause:n,resume:r,eventFilter:s}}function Gc(e){return Mn()}function Wi(...e){if(e.length!==1)return nl(...e);const t=e[0];return typeof t=="function"?Tn(Go(()=>({get:t,set:Ui}))):le(t)}function ea(e,t,n={}){const{eventFilter:r=Ki,...s}=n;return Ne(e,Qc(r,t),s)}function ta(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Zc(r);return{stop:ea(e,t,{...s,eventFilter:i}),pause:o,resume:l,isActive:c}}function Dr(e,t=!0,n){Gc()?Ot(e,n):t?e():An(e)}const je=Di?window:void 0;function qi(e){var t;const n=Xe(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Tt(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=je):[t,n,r,s]=e,!t)return Ui;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],o=()=>{i.forEach(h=>h()),i.length=0},l=(h,d,p,_)=>(h.addEventListener(d,p,_),()=>h.removeEventListener(d,p,_)),c=Ne(()=>[qi(t),Xe(s)],([h,d])=>{if(o(),!h)return;const p=Xc(d)?{...d}:d;i.push(...n.flatMap(_=>r.map(x=>l(h,_,x,p))))},{immediate:!0,flush:"post"}),a=()=>{c(),o()};return jr(a),a}function na(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function cu(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=r,c=na(t);return Tt(s,i,h=>{h.repeat&&Xe(l)||c(h)&&n(h)},o)}function ra(){const e=le(!1),t=Mn();return t&&Ot(()=>{e.value=!0},t),e}function sa(e){const t=ra();return ie(()=>(t.value,!!e()))}function Vi(e,t={}){const{window:n=je}=t,r=sa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const i=le(!1),o=a=>{i.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",o):s.removeListener(o))},c=di(()=>{r.value&&(l(),s=n.matchMedia(Xe(e)),"addEventListener"in s?s.addEventListener("change",o):s.addListener(o),i.value=s.matches)});return jr(()=>{c(),l(),s=void 0}),i}const rn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},sn="__vueuse_ssr_handlers__",ia=oa();function oa(){return sn in rn||(rn[sn]=rn[sn]||{}),rn[sn]}function zi(e,t){return ia[e]||t}function Yi(e){return Vi("(prefers-color-scheme: dark)",e)}function la(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ca={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ps="vueuse-storage";function aa(e,t,n,r={}){var s;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:h,window:d=je,eventFilter:p,onError:_=A=>{console.error(A)},initOnMounted:x}=r,T=(h?ni:le)(typeof t=="function"?t():t);if(!n)try{n=zi("getDefaultStorage",()=>{var A;return(A=je)==null?void 0:A.localStorage})()}catch(A){_(A)}if(!n)return T;const B=Xe(t),y=la(B),v=(s=r.serializer)!=null?s:ca[y],{pause:H,resume:m}=ta(T,()=>W(T.value),{flush:i,deep:o,eventFilter:p});d&&l&&Dr(()=>{n instanceof Storage?Tt(d,"storage",C):Tt(d,Ps,$),x&&C()}),x||C();function P(A,L){if(d){const I={key:e,oldValue:A,newValue:L,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",I):new CustomEvent(Ps,{detail:I}))}}function W(A){try{const L=n.getItem(e);if(A==null)P(L,null),n.removeItem(e);else{const I=v.write(A);L!==I&&(n.setItem(e,I),P(L,I))}}catch(L){_(L)}}function D(A){const L=A?A.newValue:n.getItem(e);if(L==null)return c&&B!=null&&n.setItem(e,v.write(B)),B;if(!A&&a){const I=v.read(L);return typeof a=="function"?a(I,B):y==="object"&&!Array.isArray(I)?{...B,...I}:I}else return typeof L!="string"?L:v.read(L)}function C(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){T.value=B;return}if(!(A&&A.key!==e)){H();try{(A==null?void 0:A.newValue)!==v.write(T.value)&&(T.value=D(A))}catch(L){_(L)}finally{A?An(m):m()}}}}function $(A){C(A.detail)}return T}const ua="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function fa(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:h=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},p=Yi({window:s}),_=ie(()=>p.value?"dark":"light"),x=c||(o==null?Wi(r):aa(o,r,i,{window:s,listenToStorageChanges:l})),T=ie(()=>x.value==="auto"?_.value:x.value),B=zi("updateHTMLAttrs",(m,P,W)=>{const D=typeof m=="string"?s==null?void 0:s.document.querySelector(m):qi(m);if(!D)return;const C=new Set,$=new Set;let A=null;if(P==="class"){const I=W.split(/\s/g);Object.values(d).flatMap(U=>(U||"").split(/\s/g)).filter(Boolean).forEach(U=>{I.includes(U)?C.add(U):$.add(U)})}else A={key:P,value:W};if(C.size===0&&$.size===0&&A===null)return;let L;h&&(L=s.document.createElement("style"),L.appendChild(document.createTextNode(ua)),s.document.head.appendChild(L));for(const I of C)D.classList.add(I);for(const I of $)D.classList.remove(I);A&&D.setAttribute(A.key,A.value),h&&(s.getComputedStyle(L).opacity,document.head.removeChild(L))});function y(m){var P;B(t,n,(P=d[m])!=null?P:m)}function v(m){e.onChanged?e.onChanged(m,y):y(m)}Ne(T,v,{flush:"post",immediate:!0}),Dr(()=>v(T.value));const H=ie({get(){return a?x.value:T.value},set(m){x.value=m}});try{return Object.assign(H,{store:x,system:_,state:T})}catch{return H}}function da(e={}){const{valueDark:t="dark",valueLight:n="",window:r=je}=e,s=fa({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>s.system?s.system.value:Yi({window:r}).value?"dark":"light");return ie({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?s.value="auto":s.value=c}})}function Vn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Xi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const zn=new WeakMap;function au(e,t=!1){const n=le(t);let r=null,s="";Ne(Wi(e),l=>{const c=Vn(Xe(l));if(c){const a=c;if(zn.get(a)||zn.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=Vn(Xe(e));!l||n.value||(Rs&&(r=Tt(l,"touchmove",c=>{ha(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=Vn(Xe(e));!l||!n.value||(Rs&&(r==null||r()),l.style.overflow=s,zn.delete(l),n.value=!1)};return jr(o),ie({get(){return n.value},set(l){l?i():o()}})}function uu(e={}){const{window:t=je,behavior:n="auto"}=e;if(!t)return{x:le(0),y:le(0)};const r=le(t.scrollX),s=le(t.scrollY),i=ie({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Tt(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function fu(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=le(n),c=le(r),a=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(a(),Dr(a),Tt("resize",a,{passive:!0}),s){const h=Vi("(orientation: portrait)");Ne(h,()=>a())}return{width:l,height:c}}const Yn={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var Xn={};const Ji=/^(?:[a-z]+:|\/\/)/i,pa="vitepress-theme-appearance",ga=/#.*$/,ma=/[?#].*$/,va=/(?:(^|\/)index)?\.(?:md|html)$/,de=typeof document<"u",Qi={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ya(e,t,n=!1){if(t===void 0)return!1;if(e=Fs(`/${e}`),n)return new RegExp(t).test(e);if(Fs(t)!==e)return!1;const r=t.match(ga);return r?(de?location.hash:"")===r[0]:!0}function Fs(e){return decodeURI(e).replace(ma,"").replace(va,"$1")}function _a(e){return Ji.test(e)}function ba(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!_a(n)&&ya(t,`/${n}/`,!0))||"root"}function wa(e,t){var r,s,i,o,l,c,a;const n=ba(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Gi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Zi(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Ea(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Ea(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ca(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([i,o])=>i===n&&o[s[0]]===s[1])}function Gi(e,t){return[...e.filter(n=>!Ca(t,n)),...t]}const xa=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ta=/^[a-z]:/i;function Ls(e){const t=Ta.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(xa,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Jn=new Set;function Aa(e){if(Jn.size===0){const n=typeof process=="object"&&(Xn==null?void 0:Xn.VITE_EXTRA_EXTENSIONS)||(Yn==null?void 0:Yn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>Jn.add(r))}const t=e.split(".").pop();return t==null||!Jn.has(t.toLowerCase())}const Sa=Symbol(),lt=ni(zc);function du(e){const t=ie(()=>wa(lt.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?le(!0):n?da({storageKey:pa,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):le(!1),s=le(de?location.hash:"");return de&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Ne(()=>e.data,()=>{s.value=de?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Zi(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:r,hash:ie(()=>s.value)}}function Ia(){const e=_t(Sa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Oa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ms(e){return Ji.test(e)||!e.startsWith("/")?e:Oa(lt.value.base,e)}function Ra(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),de){const n="/";t=Ls(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${Ls(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let an=[];function hu(e){an.push(e),Fn(()=>{an=an.filter(t=>t!==e)})}function Pa(){let e=lt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ns(e,n);else if(Array.isArray(e))for(const r of e){const s=Ns(r,n);if(s){t=s;break}}return t}function Ns(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Fa=Symbol(),eo="http://a.com",La=()=>({path:"/",component:null,data:Qi});function pu(e,t){const n=xn(La()),r={route:n,go:s};async function s(l=de?location.href:"/"){var c,a;l=Qn(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(de&&l!==Qn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let i=null;async function o(l,c=0,a=!1){var p;if(await((p=r.onBeforePageLoad)==null?void 0:p.call(r,l))===!1)return;const h=new URL(l,eo),d=i=h.pathname;try{let _=await e(d);if(!_)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:x,__pageData:T}=_;if(!x)throw new Error(`Invalid route component: ${x}`);n.path=de?d:Ms(d),n.component=Nt(x),n.data=Nt(T),de&&An(()=>{let B=lt.value.base+T.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!lt.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==h.pathname&&(h.pathname=B,l=B+h.search+h.hash,history.replaceState({},"",l)),h.hash&&!c){let y=null;try{y=document.getElementById(decodeURIComponent(h.hash).slice(1))}catch(v){console.warn(v)}if(y){Bs(y,h.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!a)try{const x=await fetch(lt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await x.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=de?d:Ms(d),n.component=t?Nt(t):null;const x=de?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Qi,relativePath:x}}}}return de&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const a=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(a==null)return;const{href:h,origin:d,pathname:p,hash:_,search:x}=new URL(a,c.baseURI),T=new URL(location.href);d===T.origin&&Aa(p)&&(l.preventDefault(),p===T.pathname&&x===T.search?(_!==T.hash&&(history.pushState({},"",h),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:T.href,newURL:h}))),_?Bs(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(h))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(Qn(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ma(){const e=_t(Fa);if(!e)throw new Error("useRouter() is called without provider.");return e}function to(){return Ma().route}function Bs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(r).paddingTop,10),o=window.scrollY+r.getBoundingClientRect().top-Pa()+i;requestAnimationFrame(s)}}function Qn(e){const t=new URL(e,eo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),lt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const Zn=()=>an.forEach(e=>e()),gu=Fr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=to(),{site:n}=Ia();return()=>hr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?hr(t.component,{onVnodeMounted:Zn,onVnodeUpdated:Zn,onVnodeUnmounted:Zn}):"404 Page Not Found"])}}),mu=Fr({setup(e,{slots:t}){const n=le(!1);return Ot(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function vu(){de&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const i=r.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(a=>a.classList.contains("active"));if(!o)return;const l=i.children[s];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function yu(){if(de){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,i=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(h=>h.remove());let a=c.textContent||"";o&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Na(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const h=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,h)})}})}}async function Na(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function _u(e,t){let n=!0,r=[];const s=i=>{if(n){n=!1,i.forEach(l=>{const c=Gn(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const o=i.map(Gn);r.forEach((l,c)=>{const a=o.findIndex(h=>h==null?void 0:h.isEqualNode(l??null));a!==-1?delete o[a]:(l==null||l.remove(),delete r[c])}),o.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...o].filter(Boolean)};di(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],a=Zi(o,i);a!==document.title&&(document.title=a);const h=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==h&&d.setAttribute("content",h):Gn(["meta",{name:"description",content:h}]),s(Gi(o.head,Ha(c)))})}function Gn([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function Ba(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ha(e){return e.filter(t=>!Ba(t))}const er=new Set,no=()=>document.createElement("link"),$a=e=>{const t=no();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ka=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let on;const ja=de&&(on=no())&&on.relList&&on.relList.supports&&on.relList.supports("prefetch")?$a:ka;function bu(){if(!de||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!er.has(c)){er.add(c);const a=Ra(c);a&&ja(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):er.add(l))})})};Ot(r);const s=to();Ne(()=>s.path,r),Fn(()=>{n&&n.disconnect()})}export{Vl as $,Va as A,Fl as B,Pa as C,Ya as D,Ja as E,ye as F,ni as G,hu as H,re as I,Xa as J,Ji as K,to as L,ic as M,_t as N,fu as O,wn as P,cu as Q,An as R,uu as S,ki as T,de as U,Tn as V,Da as W,za as X,lu as Y,au as Z,ou as _,Ni as a,Za as a0,su as a1,yi as a2,ru as a3,Ga as a4,hr as a5,tu as a6,qa as a7,X as a8,_u as a9,Fa as aa,du as ab,Sa as ac,gu as ad,mu as ae,lt as af,iu as ag,pu as ah,Ra as ai,bu as aj,yu as ak,vu as al,Ma as am,Fi as b,eu as c,Fr as d,nu as e,Aa as f,Ms as g,ie as h,_a as i,Mi as j,si as k,Wa as l,ya as m,En as n,Br as o,Ka as p,Vi as q,Qa as r,le as s,Ua as t,Ia as u,Ne as v,fl as w,di as x,Ot as y,Fn as z}; diff --git a/assets/chunks/framework.B49Yz1nR.js b/assets/chunks/framework.B49Yz1nR.js new file mode 100644 index 00000000..4f3d5209 --- /dev/null +++ b/assets/chunks/framework.B49Yz1nR.js @@ -0,0 +1 @@ +function gr(e,t){const n=Object.create(null),r=e.split(",");for(let s=0;s!!n[s]}const ne={},ht=[],Ne=()=>{},io=()=>!1,oo=/^on[^a-z]/,qt=e=>oo.test(e),mr=e=>e.startsWith("onUpdate:"),ce=Object.assign,vr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},lo=Object.prototype.hasOwnProperty,Y=(e,t)=>lo.call(e,t),K=Array.isArray,pt=e=>_n(e)==="[object Map]",Bs=e=>_n(e)==="[object Set]",V=e=>typeof e=="function",se=e=>typeof e=="string",yr=e=>typeof e=="symbol",te=e=>e!==null&&typeof e=="object",Hs=e=>te(e)&&V(e.then)&&V(e.catch),$s=Object.prototype.toString,_n=e=>$s.call(e),co=e=>_n(e).slice(8,-1),ks=e=>_n(e)==="[object Object]",_r=e=>se(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Mt=gr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),bn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ao=/-(\w)/g,Be=bn(e=>e.replace(ao,(t,n)=>n?n.toUpperCase():"")),uo=/\B([A-Z])/g,ct=bn(e=>e.replace(uo,"-$1").toLowerCase()),wn=bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),cn=bn(e=>e?`on${wn(e)}`:""),kt=(e,t)=>!Object.is(e,t),$n=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},fo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},js=e=>{const t=se(e)?Number(e):NaN;return isNaN(t)?e:t};let Vr;const tr=()=>Vr||(Vr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function En(e){if(K(e)){const t={};for(let n=0;n{if(n){const r=n.split(po);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Cn(e){let t="";if(se(e))t=e;else if(K(e))for(let n=0;nse(e)?e:e==null?"":K(e)||te(e)&&(e.toString===$s||!V(e.toString))?JSON.stringify(e,Us,2):String(e),Us=(e,t)=>t&&t.__v_isRef?Us(e,t.value):pt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s])=>(n[`${r} =>`]=s,n),{})}:Bs(t)?{[`Set(${t.size})`]:[...t.values()]}:te(t)&&!K(t)&&!ks(t)?String(t):t;let we;class _o{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},Ws=e=>(e.w&Je)>0,qs=e=>(e.n&Je)>0,Eo=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(h==="length"||h>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":K(e)?_r(n)&&l.push(o.get("length")):(l.push(o.get(it)),pt(e)&&l.push(o.get(rr)));break;case"delete":K(e)||(l.push(o.get(it)),pt(e)&&l.push(o.get(rr)));break;case"set":pt(e)&&l.push(o.get(it));break}if(l.length===1)l[0]&&sr(l[0]);else{const c=[];for(const a of l)a&&c.push(...a);sr(br(c))}}function sr(e,t){const n=K(e)?e:[...e];for(const r of n)r.computed&&Yr(r);for(const r of n)r.computed||Yr(r)}function Yr(e,t){(e!==Ie||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function xo(e,t){var n;return(n=dn.get(e))==null?void 0:n.get(t)}const To=gr("__proto__,__v_isRef,__isVue"),Ys=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(yr)),Ao=Er(),So=Er(!1,!0),Io=Er(!0),Xr=Oo();function Oo(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=X(this);for(let i=0,o=this.length;i{e[t]=function(...n){At();const r=X(this)[t].apply(this,n);return St(),r}}),e}function Ro(e){const t=X(this);return _e(t,"has",e),t.hasOwnProperty(e)}function Er(e=!1,t=!1){return function(r,s,i){if(s==="__v_isReactive")return!e;if(s==="__v_isReadonly")return e;if(s==="__v_isShallow")return t;if(s==="__v_raw"&&i===(e?t?Vo:Gs:t?Zs:Qs).get(r))return r;const o=K(r);if(!e){if(o&&Y(Xr,s))return Reflect.get(Xr,s,i);if(s==="hasOwnProperty")return Ro}const l=Reflect.get(r,s,i);return(yr(s)?Ys.has(s):To(s))||(e||_e(r,"get",s),t)?l:ue(l)?o&&_r(s)?l:l.value:te(l)?e?An(l):Tn(l):l}}const Po=Xs(),Fo=Xs(!0);function Xs(e=!1){return function(n,r,s,i){let o=n[r];if(bt(o)&&ue(o)&&!ue(s))return!1;if(!e&&(!hn(s)&&!bt(s)&&(o=X(o),s=X(s)),!K(n)&&ue(o)&&!ue(s)))return o.value=s,!0;const l=K(n)&&_r(r)?Number(r)e,xn=e=>Reflect.getPrototypeOf(e);function Xt(e,t,n=!1,r=!1){e=e.__v_raw;const s=X(e),i=X(t);n||(t!==i&&_e(s,"get",t),_e(s,"get",i));const{has:o}=xn(s),l=r?Cr:n?Ar:jt;if(o.call(s,t))return l(e.get(t));if(o.call(s,i))return l(e.get(i));e!==s&&e.get(t)}function Jt(e,t=!1){const n=this.__v_raw,r=X(n),s=X(e);return t||(e!==s&&_e(r,"has",e),_e(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Qt(e,t=!1){return e=e.__v_raw,!t&&_e(X(e),"iterate",it),Reflect.get(e,"size",e)}function Jr(e){e=X(e);const t=X(this);return xn(t).has.call(t,e)||(t.add(e),ke(t,"add",e,e)),this}function Qr(e,t){t=X(t);const n=X(this),{has:r,get:s}=xn(n);let i=r.call(n,e);i||(e=X(e),i=r.call(n,e));const o=s.call(n,e);return n.set(e,t),i?kt(t,o)&&ke(n,"set",e,t):ke(n,"add",e,t),this}function Zr(e){const t=X(this),{has:n,get:r}=xn(t);let s=n.call(t,e);s||(e=X(e),s=n.call(t,e)),r&&r.call(t,e);const i=t.delete(e);return s&&ke(t,"delete",e,void 0),i}function Gr(){const e=X(this),t=e.size!==0,n=e.clear();return t&&ke(e,"clear",void 0,void 0),n}function Zt(e,t){return function(r,s){const i=this,o=i.__v_raw,l=X(o),c=t?Cr:e?Ar:jt;return!e&&_e(l,"iterate",it),o.forEach((a,h)=>r.call(s,c(a),c(h),i))}}function Gt(e,t,n){return function(...r){const s=this.__v_raw,i=X(s),o=pt(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=s[e](...r),h=n?Cr:t?Ar:jt;return!t&&_e(i,"iterate",c?rr:it),{next(){const{value:d,done:p}=a.next();return p?{value:d,done:p}:{value:l?[h(d[0]),h(d[1])]:h(d),done:p}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:this}}function $o(){const e={get(i){return Xt(this,i)},get size(){return Qt(this)},has:Jt,add:Jr,set:Qr,delete:Zr,clear:Gr,forEach:Zt(!1,!1)},t={get(i){return Xt(this,i,!1,!0)},get size(){return Qt(this)},has:Jt,add:Jr,set:Qr,delete:Zr,clear:Gr,forEach:Zt(!1,!0)},n={get(i){return Xt(this,i,!0)},get size(){return Qt(this,!0)},has(i){return Jt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:Zt(!0,!1)},r={get(i){return Xt(this,i,!0,!0)},get size(){return Qt(this,!0)},has(i){return Jt.call(this,i,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:Zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{e[i]=Gt(i,!1,!1),n[i]=Gt(i,!0,!1),t[i]=Gt(i,!1,!0),r[i]=Gt(i,!0,!0)}),[e,n,t,r]}const[ko,jo,Do,Uo]=$o();function xr(e,t){const n=t?e?Uo:Do:e?jo:ko;return(r,s,i)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,i)}const Ko={get:xr(!1,!1)},Wo={get:xr(!1,!0)},qo={get:xr(!0,!1)},Qs=new WeakMap,Zs=new WeakMap,Gs=new WeakMap,Vo=new WeakMap;function zo(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Yo(e){return e.__v_skip||!Object.isExtensible(e)?0:zo(co(e))}function Tn(e){return bt(e)?e:Tr(e,!1,Js,Ko,Qs)}function Xo(e){return Tr(e,!1,Ho,Wo,Zs)}function An(e){return Tr(e,!0,Bo,qo,Gs)}function Tr(e,t,n,r,s){if(!te(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=s.get(e);if(i)return i;const o=Yo(e);if(o===0)return e;const l=new Proxy(e,o===2?r:n);return s.set(e,l),l}function gt(e){return bt(e)?gt(e.__v_raw):!!(e&&e.__v_isReactive)}function bt(e){return!!(e&&e.__v_isReadonly)}function hn(e){return!!(e&&e.__v_isShallow)}function ei(e){return gt(e)||bt(e)}function X(e){const t=e&&e.__v_raw;return t?X(t):e}function Nt(e){return fn(e,"__v_skip",!0),e}const jt=e=>te(e)?Tn(e):e,Ar=e=>te(e)?An(e):e;function Sr(e){ze&&Ie&&(e=X(e),zs(e.dep||(e.dep=br())))}function Ir(e,t){e=X(e);const n=e.dep;n&&sr(n)}function ue(e){return!!(e&&e.__v_isRef===!0)}function le(e){return ni(e,!1)}function ti(e){return ni(e,!0)}function ni(e,t){return ue(e)?e:new Jo(e,t)}class Jo{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:X(t),this._value=n?t:jt(t)}get value(){return Sr(this),this._value}set value(t){const n=this.__v_isShallow||hn(t)||bt(t);t=n?t:X(t),kt(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:jt(t),Ir(this))}}function ri(e){return ue(e)?e.value:e}const Qo={get:(e,t,n)=>ri(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return ue(s)&&!ue(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function si(e){return gt(e)?e:new Proxy(e,Qo)}class Zo{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Sr(this),()=>Ir(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Go(e){return new Zo(e)}class el{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return xo(X(this._object),this._key)}}class tl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function nl(e,t,n){return ue(e)?e:V(e)?new tl(e):te(e)&&arguments.length>1?rl(e,t,n):le(e)}function rl(e,t,n){const r=e[t];return ue(r)?r:new el(e,t,n)}class sl{constructor(t,n,r,s){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new wr(t,()=>{this._dirty||(this._dirty=!0,Ir(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=X(this);return Sr(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function il(e,t,n=!1){let r,s;const i=V(e);return i?(r=e,s=Ne):(r=e.get,s=e.set),new sl(r,s,i||!s,n)}function Ye(e,t,n,r){let s;try{s=r?e(...r):e()}catch(i){It(i,t,n)}return s}function Ae(e,t,n,r){if(V(e)){const i=Ye(e,t,n,r);return i&&Hs(i)&&i.catch(o=>{It(o,t,n)}),i}const s=[];for(let i=0;i>>1;Ut(he[r])Le&&he.splice(t,1)}function li(e){K(e)?mt.push(...e):(!$e||!$e.includes(e,e.allowRecurse?rt+1:rt))&&mt.push(e),oi()}function es(e,t=Dt?Le+1:0){for(;tUt(n)-Ut(r)),rt=0;rt<$e.length;rt++)$e[rt]();$e=null,rt=0}}const Ut=e=>e.id==null?1/0:e.id,al=(e,t)=>{const n=Ut(e)-Ut(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function ci(e){ir=!1,Dt=!0,he.sort(al);try{for(Le=0;Lese(b)?b.trim():b)),d&&(s=n.map(fo))}let l,c=r[l=cn(t)]||r[l=cn(Be(t))];!c&&i&&(c=r[l=cn(ct(t))]),c&&Ae(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(a,e,6,s)}}function ai(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const i=e.emits;let o={},l=!1;if(!V(e)){const c=a=>{const h=ai(a,t,!0);h&&(l=!0,ce(o,h))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(te(e)&&r.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):ce(o,i),te(e)&&r.set(e,o),o)}function On(e,t){return!e||!qt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,ct(t))||Y(e,t))}let pe=null,Rn=null;function gn(e){const t=pe;return pe=e,Rn=e&&e.type.__scopeId||null,t}function Ka(e){Rn=e}function Wa(){Rn=null}function fl(e,t=pe,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&hs(-1);const i=gn(t);let o;try{o=e(...s)}finally{gn(i),r._d&&hs(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function kn(e){const{type:t,vnode:n,proxy:r,withProxy:s,props:i,propsOptions:[o],slots:l,attrs:c,emit:a,render:h,renderCache:d,data:p,setupState:b,ctx:T,inheritAttrs:x}=e;let $,y;const m=gn(e);try{if(n.shapeFlag&4){const v=s||r;$=xe(h.call(v,v,d,i,b,p,T)),y=c}else{const v=t;$=xe(v.length>1?v(i,{attrs:c,slots:l,emit:a}):v(i,null)),y=t.props?c:hl(c)}}catch(v){$t.length=0,It(v,e,1),$=re(me)}let B=$;if(y&&x!==!1){const v=Object.keys(y),{shapeFlag:P}=B;v.length&&P&7&&(o&&v.some(mr)&&(y=pl(y,o)),B=Qe(B,y))}return n.dirs&&(B=Qe(B),B.dirs=B.dirs?B.dirs.concat(n.dirs):n.dirs),n.transition&&(B.transition=n.transition),$=B,gn(m),$}function dl(e){let t;for(let n=0;n{let t;for(const n in e)(n==="class"||n==="style"||qt(n))&&((t||(t={}))[n]=e[n]);return t},pl=(e,t)=>{const n={};for(const r in e)(!mr(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function gl(e,t,n){const{props:r,children:s,component:i}=e,{props:o,children:l,patchFlag:c}=t,a=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?ts(r,o,a):!!o;if(c&8){const h=t.dynamicProps;for(let d=0;de.__isSuspense,vl={name:"Suspense",__isSuspense:!0,process(e,t,n,r,s,i,o,l,c,a){e==null?yl(t,n,r,s,i,o,l,c,a):_l(e,t,n,r,s,o,l,c,a)},hydrate:bl,create:Pr,normalize:wl},qa=vl;function Kt(e,t){const n=e.props&&e.props[t];V(n)&&n()}function yl(e,t,n,r,s,i,o,l,c){const{p:a,o:{createElement:h}}=c,d=h("div"),p=e.suspense=Pr(e,s,r,t,d,n,i,o,l,c);a(null,p.pendingBranch=e.ssContent,d,null,r,p,i,o),p.deps>0?(Kt(e,"onPending"),Kt(e,"onFallback"),a(null,e.ssFallback,t,n,r,null,i,o),vt(p,e.ssFallback)):p.resolve(!1,!0)}function _l(e,t,n,r,s,i,o,l,{p:c,um:a,o:{createElement:h}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const p=t.ssContent,b=t.ssFallback,{activeBranch:T,pendingBranch:x,isInFallback:$,isHydrating:y}=d;if(x)d.pendingBranch=p,Me(p,x)?(c(x,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0?d.resolve():$&&(c(T,b,n,r,s,null,i,o,l),vt(d,b))):(d.pendingId++,y?(d.isHydrating=!1,d.activeBranch=x):a(x,s,d),d.deps=0,d.effects.length=0,d.hiddenContainer=h("div"),$?(c(null,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0?d.resolve():(c(T,b,n,r,s,null,i,o,l),vt(d,b))):T&&Me(p,T)?(c(T,p,n,r,s,d,i,o,l),d.resolve(!0)):(c(null,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0&&d.resolve()));else if(T&&Me(p,T))c(T,p,n,r,s,d,i,o,l),vt(d,p);else if(Kt(t,"onPending"),d.pendingBranch=p,d.pendingId++,c(null,p,d.hiddenContainer,null,s,d,i,o,l),d.deps<=0)d.resolve();else{const{timeout:m,pendingId:B}=d;m>0?setTimeout(()=>{d.pendingId===B&&d.fallback(b)},m):m===0&&d.fallback(b)}}function Pr(e,t,n,r,s,i,o,l,c,a,h=!1){const{p:d,m:p,um:b,n:T,o:{parentNode:x,remove:$}}=a;let y;const m=El(e);m&&t!=null&&t.pendingBranch&&(y=t.pendingId,t.deps++);const B=e.props?js(e.props.timeout):void 0,v={vnode:e,parent:t,parentComponent:n,isSVG:o,container:r,hiddenContainer:s,anchor:i,deps:0,pendingId:0,timeout:typeof B=="number"?B:-1,activeBranch:null,pendingBranch:null,isInFallback:!0,isHydrating:h,isUnmounted:!1,effects:[],resolve(P=!1,W=!1){const{vnode:D,activeBranch:C,pendingBranch:H,pendingId:A,effects:L,parentComponent:I,container:U}=v;if(v.isHydrating)v.isHydrating=!1;else if(!P){const J=C&&H.transition&&H.transition.mode==="out-in";J&&(C.transition.afterLeave=()=>{A===v.pendingId&&p(H,U,Z,0)});let{anchor:Z}=v;C&&(Z=T(C),b(C,I,v,!0)),J||p(H,U,Z,0)}vt(v,H),v.pendingBranch=null,v.isInFallback=!1;let M=v.parent,fe=!1;for(;M;){if(M.pendingBranch){M.effects.push(...L),fe=!0;break}M=M.parent}fe||li(L),v.effects=[],m&&t&&t.pendingBranch&&y===t.pendingId&&(t.deps--,t.deps===0&&!W&&t.resolve()),Kt(D,"onResolve")},fallback(P){if(!v.pendingBranch)return;const{vnode:W,activeBranch:D,parentComponent:C,container:H,isSVG:A}=v;Kt(W,"onFallback");const L=T(D),I=()=>{v.isInFallback&&(d(null,P,H,L,C,null,A,l,c),vt(v,P))},U=P.transition&&P.transition.mode==="out-in";U&&(D.transition.afterLeave=I),v.isInFallback=!0,b(D,C,null,!0),U||I()},move(P,W,D){v.activeBranch&&p(v.activeBranch,P,W,D),v.container=P},next(){return v.activeBranch&&T(v.activeBranch)},registerDep(P,W){const D=!!v.pendingBranch;D&&v.deps++;const C=P.vnode.el;P.asyncDep.catch(H=>{It(H,P,0)}).then(H=>{if(P.isUnmounted||v.isUnmounted||v.pendingId!==P.suspenseId)return;P.asyncResolved=!0;const{vnode:A}=P;dr(P,H,!1),C&&(A.el=C);const L=!C&&P.subTree.el;W(P,A,x(C||P.subTree.el),C?null:T(P.subTree),v,o,c),L&&$(L),Rr(P,A.el),D&&--v.deps===0&&v.resolve()})},unmount(P,W){v.isUnmounted=!0,v.activeBranch&&b(v.activeBranch,n,P,W),v.pendingBranch&&b(v.pendingBranch,n,P,W)}};return v}function bl(e,t,n,r,s,i,o,l,c){const a=t.suspense=Pr(t,r,n,e.parentNode,document.createElement("div"),null,s,i,o,l,!0),h=c(e,a.pendingBranch=t.ssContent,n,a,i,o);return a.deps===0&&a.resolve(!1,!0),h}function wl(e){const{shapeFlag:t,children:n}=e,r=t&32;e.ssContent=ns(r?n.default:n),e.ssFallback=r?ns(n.fallback):re(me)}function ns(e){let t;if(V(e)){const n=Et&&e._c;n&&(e._d=!1,Nr()),e=e(),n&&(e._d=!0,t=Te,Ri())}return K(e)&&(e=dl(e)),e=xe(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function ui(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):li(e)}function vt(e,t){e.activeBranch=t;const{vnode:n,parentComponent:r}=e,s=n.el=t.el;r&&r.subTree===n&&(r.vnode.el=s,Rr(r,s))}function El(e){var t;return((t=e.props)==null?void 0:t.suspensible)!=null&&e.props.suspensible!==!1}function fi(e,t){return Pn(e,null,t)}function Va(e,t){return Pn(e,null,{flush:"post"})}const en={};function Oe(e,t,n){return Pn(e,t,n)}function Pn(e,t,{immediate:n,deep:r,flush:s,onTrack:i,onTrigger:o}=ne){var l;const c=Ks()===((l=ae)==null?void 0:l.scope)?ae:null;let a,h=!1,d=!1;if(ue(e)?(a=()=>e.value,h=hn(e)):gt(e)?(a=()=>e,r=!0):K(e)?(d=!0,h=e.some(v=>gt(v)||hn(v)),a=()=>e.map(v=>{if(ue(v))return v.value;if(gt(v))return dt(v);if(V(v))return Ye(v,c,2)})):V(e)?t?a=()=>Ye(e,c,2):a=()=>{if(!(c&&c.isUnmounted))return p&&p(),Ae(e,c,3,[b])}:a=Ne,t&&r){const v=a;a=()=>dt(v())}let p,b=v=>{p=m.onStop=()=>{Ye(v,c,4)}},T;if(xt)if(b=Ne,t?n&&Ae(t,c,3,[a(),d?[]:void 0,b]):a(),s==="sync"){const v=gc();T=v.__watcherHandles||(v.__watcherHandles=[])}else return Ne;let x=d?new Array(e.length).fill(en):en;const $=()=>{if(m.active)if(t){const v=m.run();(r||h||(d?v.some((P,W)=>kt(P,x[W])):kt(v,x)))&&(p&&p(),Ae(t,c,3,[v,x===en?void 0:d&&x[0]===en?[]:x,b]),x=v)}else m.run()};$.allowRecurse=!!t;let y;s==="sync"?y=$:s==="post"?y=()=>ve($,c&&c.suspense):($.pre=!0,c&&($.id=c.uid),y=()=>In($));const m=new wr(a,y);t?n?$():x=m.run():s==="post"?ve(m.run.bind(m),c&&c.suspense):m.run();const B=()=>{m.stop(),c&&c.scope&&vr(c.scope.effects,m)};return T&&T.push(B),B}function Cl(e,t,n){const r=this.proxy,s=se(e)?e.includes(".")?di(r,e):()=>r[e]:e.bind(r,r);let i;V(t)?i=t:(i=t.handler,n=t);const o=ae;Ct(this);const l=Pn(s,i.bind(r),n);return o?Ct(o):ot(),l}function di(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{dt(n,t)});else if(ks(e))for(const n in e)dt(e[n],t);return e}function Fe(e,t,n,r){const s=e.dirs,i=t&&t.dirs;for(let o=0;o{e.isMounted=!0}),vi(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],hi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},Tl={name:"BaseTransition",props:hi,setup(e,{slots:t}){const n=Nn(),r=xl();let s;return()=>{const i=t.default&&gi(t.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const x of i)if(x.type!==me){o=x;break}}const l=X(e),{mode:c}=l;if(r.isLeaving)return jn(o);const a=rs(o);if(!a)return jn(o);const h=or(a,l,r,n);lr(a,h);const d=n.subTree,p=d&&rs(d);let b=!1;const{getTransitionKey:T}=a.type;if(T){const x=T();s===void 0?s=x:x!==s&&(s=x,b=!0)}if(p&&p.type!==me&&(!Me(a,p)||b)){const x=or(p,l,r,n);if(lr(p,x),c==="out-in")return r.isLeaving=!0,x.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},jn(o);c==="in-out"&&a.type!==me&&(x.delayLeave=($,y,m)=>{const B=pi(r,p);B[String(p.key)]=p,$._leaveCb=()=>{y(),$._leaveCb=void 0,delete h.delayedLeave},h.delayedLeave=m})}return o}}},Al=Tl;function pi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function or(e,t,n,r){const{appear:s,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:h,onBeforeLeave:d,onLeave:p,onAfterLeave:b,onLeaveCancelled:T,onBeforeAppear:x,onAppear:$,onAfterAppear:y,onAppearCancelled:m}=t,B=String(e.key),v=pi(n,e),P=(C,H)=>{C&&Ae(C,r,9,H)},W=(C,H)=>{const A=H[1];P(C,H),K(C)?C.every(L=>L.length<=1)&&A():C.length<=1&&A()},D={mode:i,persisted:o,beforeEnter(C){let H=l;if(!n.isMounted)if(s)H=x||l;else return;C._leaveCb&&C._leaveCb(!0);const A=v[B];A&&Me(e,A)&&A.el._leaveCb&&A.el._leaveCb(),P(H,[C])},enter(C){let H=c,A=a,L=h;if(!n.isMounted)if(s)H=$||c,A=y||a,L=m||h;else return;let I=!1;const U=C._enterCb=M=>{I||(I=!0,M?P(L,[C]):P(A,[C]),D.delayedLeave&&D.delayedLeave(),C._enterCb=void 0)};H?W(H,[C,U]):U()},leave(C,H){const A=String(e.key);if(C._enterCb&&C._enterCb(!0),n.isUnmounting)return H();P(d,[C]);let L=!1;const I=C._leaveCb=U=>{L||(L=!0,H(),U?P(T,[C]):P(b,[C]),C._leaveCb=void 0,v[A]===e&&delete v[A])};v[A]=e,p?W(p,[C,I]):I()},clone(C){return or(C,t,n,r)}};return D}function jn(e){if(Vt(e))return e=Qe(e),e.children=null,e}function rs(e){return Vt(e)?e.children?e.children[0]:void 0:e}function lr(e,t){e.shapeFlag&6&&e.component?lr(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function gi(e,t=!1,n){let r=[],s=0;for(let i=0;i1)for(let i=0;i!!e.type.__asyncLoader;function za(e){V(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:i,suspensible:o=!0,onError:l}=e;let c=null,a,h=0;const d=()=>(h++,c=null,p()),p=()=>{let b;return c||(b=c=t().catch(T=>{if(T=T instanceof Error?T:new Error(String(T)),l)return new Promise((x,$)=>{l(T,()=>x(d()),()=>$(T),h+1)});throw T}).then(T=>b!==c&&c?c:(T&&(T.__esModule||T[Symbol.toStringTag]==="Module")&&(T=T.default),a=T,T)))};return Fr({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return a},setup(){const b=ae;if(a)return()=>Dn(a,b);const T=m=>{c=null,It(m,b,13,!r)};if(o&&b.suspense||xt)return p().then(m=>()=>Dn(m,b)).catch(m=>(T(m),()=>r?re(r,{error:m}):null));const x=le(!1),$=le(),y=le(!!s);return s&&setTimeout(()=>{y.value=!1},s),i!=null&&setTimeout(()=>{if(!x.value&&!$.value){const m=new Error(`Async component timed out after ${i}ms.`);T(m),$.value=m}},i),p().then(()=>{x.value=!0,b.parent&&Vt(b.parent.vnode)&&In(b.parent.update)}).catch(m=>{T(m),$.value=m}),()=>{if(x.value&&a)return Dn(a,b);if($.value&&r)return re(r,{error:$.value});if(n&&!y.value)return re(n)}}})}function Dn(e,t){const{ref:n,props:r,children:s,ce:i}=t.vnode,o=re(e,r,s);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const Vt=e=>e.type.__isKeepAlive;function Sl(e,t){mi(e,"a",t)}function Il(e,t){mi(e,"da",t)}function mi(e,t,n=ae){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Fn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Vt(s.parent.vnode)&&Ol(r,t,n,s),s=s.parent}}function Ol(e,t,n,r){const s=Fn(t,e,r,!0);Ln(()=>{vr(r[t],s)},n)}function Fn(e,t,n=ae,r=!1){if(n){const s=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;At(),Ct(n);const l=Ae(t,n,e,o);return ot(),St(),l});return r?s.unshift(i):s.push(i),i}}const De=e=>(t,n=ae)=>(!xt||e==="sp")&&Fn(e,(...r)=>t(...r),n),Rl=De("bm"),Ot=De("m"),Pl=De("bu"),Fl=De("u"),vi=De("bum"),Ln=De("um"),Ll=De("sp"),Ml=De("rtg"),Nl=De("rtc");function Bl(e,t=ae){Fn("ec",e,t)}const yi="components";function Ya(e,t){return bi(yi,e,!0,t)||e}const _i=Symbol.for("v-ndc");function Xa(e){return se(e)?bi(yi,e,!1)||e:e||_i}function bi(e,t,n=!0,r=!1){const s=pe||ae;if(s){const i=s.type;{const l=dc(i,!1);if(l&&(l===t||l===Be(t)||l===wn(Be(t))))return i}const o=ss(s[e]||i[e],t)||ss(s.appContext[e],t);return!o&&r?i:o}}function ss(e,t){return e&&(e[t]||e[Be(t)]||e[wn(Be(t))])}function Ja(e,t,n,r){let s;const i=n;if(K(e)||se(e)){s=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,i));else{const o=Object.keys(e);s=new Array(o.length);for(let l=0,c=o.length;lWt(t)?!(t.type===me||t.type===ye&&!wi(t.children)):!0)?e:null}function Za(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:cn(r)]=e[r];return n}const cr=e=>e?Bi(e)?$r(e)||e.proxy:cr(e.parent):null,Bt=ce(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>cr(e.parent),$root:e=>cr(e.root),$emit:e=>e.emit,$options:e=>Lr(e),$forceUpdate:e=>e.f||(e.f=()=>In(e.update)),$nextTick:e=>e.n||(e.n=Sn.bind(e.proxy)),$watch:e=>Cl.bind(e)}),Un=(e,t)=>e!==ne&&!e.__isScriptSetup&&Y(e,t),Hl={get({_:e},t){const{ctx:n,setupState:r,data:s,props:i,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const b=o[t];if(b!==void 0)switch(b){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return i[t]}else{if(Un(r,t))return o[t]=1,r[t];if(s!==ne&&Y(s,t))return o[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return o[t]=3,i[t];if(n!==ne&&Y(n,t))return o[t]=4,n[t];ar&&(o[t]=0)}}const h=Bt[t];let d,p;if(h)return t==="$attrs"&&_e(e,"get",t),h(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==ne&&Y(n,t))return o[t]=4,n[t];if(p=c.config.globalProperties,Y(p,t))return p[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:i}=e;return Un(s,t)?(s[t]=n,!0):r!==ne&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:i}},o){let l;return!!n[o]||e!==ne&&Y(e,o)||Un(t,o)||(l=i[0])&&Y(l,o)||Y(r,o)||Y(Bt,o)||Y(s.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Ga(){return $l().slots}function $l(){const e=Nn();return e.setupContext||(e.setupContext=$i(e))}function is(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ar=!0;function kl(e){const t=Lr(e),n=e.proxy,r=e.ctx;ar=!1,t.beforeCreate&&os(t.beforeCreate,e,"bc");const{data:s,computed:i,methods:o,watch:l,provide:c,inject:a,created:h,beforeMount:d,mounted:p,beforeUpdate:b,updated:T,activated:x,deactivated:$,beforeDestroy:y,beforeUnmount:m,destroyed:B,unmounted:v,render:P,renderTracked:W,renderTriggered:D,errorCaptured:C,serverPrefetch:H,expose:A,inheritAttrs:L,components:I,directives:U,filters:M}=t;if(a&&jl(a,r,null),o)for(const Z in o){const G=o[Z];V(G)&&(r[Z]=G.bind(n))}if(s){const Z=s.call(n,n);te(Z)&&(e.data=Tn(Z))}if(ar=!0,i)for(const Z in i){const G=i[Z],Ze=V(G)?G.bind(n,n):V(G.get)?G.get.bind(n,n):Ne,zt=!V(G)&&V(G.set)?G.set.bind(n):Ne,Ge=ie({get:Ze,set:zt});Object.defineProperty(r,Z,{enumerable:!0,configurable:!0,get:()=>Ge.value,set:Re=>Ge.value=Re})}if(l)for(const Z in l)Ei(l[Z],r,n,Z);if(c){const Z=V(c)?c.call(n):c;Reflect.ownKeys(Z).forEach(G=>{Vl(G,Z[G])})}h&&os(h,e,"c");function J(Z,G){K(G)?G.forEach(Ze=>Z(Ze.bind(n))):G&&Z(G.bind(n))}if(J(Rl,d),J(Ot,p),J(Pl,b),J(Fl,T),J(Sl,x),J(Il,$),J(Bl,C),J(Nl,W),J(Ml,D),J(vi,m),J(Ln,v),J(Ll,H),K(A))if(A.length){const Z=e.exposed||(e.exposed={});A.forEach(G=>{Object.defineProperty(Z,G,{get:()=>n[G],set:Ze=>n[G]=Ze})})}else e.exposed||(e.exposed={});P&&e.render===Ne&&(e.render=P),L!=null&&(e.inheritAttrs=L),I&&(e.components=I),U&&(e.directives=U)}function jl(e,t,n=Ne){K(e)&&(e=ur(e));for(const r in e){const s=e[r];let i;te(s)?"default"in s?i=_t(s.from||r,s.default,!0):i=_t(s.from||r):i=_t(s),ue(i)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[r]=i}}function os(e,t,n){Ae(K(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ei(e,t,n,r){const s=r.includes(".")?di(n,r):()=>n[r];if(se(e)){const i=t[e];V(i)&&Oe(s,i)}else if(V(e))Oe(s,e.bind(n));else if(te(e))if(K(e))e.forEach(i=>Ei(i,t,n,r));else{const i=V(e.handler)?e.handler.bind(n):t[e.handler];V(i)&&Oe(s,i,e)}}function Lr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>mn(c,a,o,!0)),mn(c,t,o)),te(t)&&i.set(t,c),c}function mn(e,t,n,r=!1){const{mixins:s,extends:i}=t;i&&mn(e,i,n,!0),s&&s.forEach(o=>mn(e,o,n,!0));for(const o in t)if(!(r&&o==="expose")){const l=Dl[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Dl={data:ls,props:cs,emits:cs,methods:Lt,computed:Lt,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:Lt,directives:Lt,watch:Kl,provide:ls,inject:Ul};function ls(e,t){return t?e?function(){return ce(V(e)?e.call(this,this):e,V(t)?t.call(this,this):t)}:t:e}function Ul(e,t){return Lt(ur(e),ur(t))}function ur(e){if(K(e)){const t={};for(let n=0;n1)return n&&V(t)?t.call(r&&r.proxy):t}}function zl(e,t,n,r=!1){const s={},i={};fn(i,Mn,1),e.propsDefaults=Object.create(null),xi(e,t,s,i);for(const o in e.propsOptions[0])o in s||(s[o]=void 0);n?e.props=r?s:Xo(s):e.type.props?e.props=s:e.props=i,e.attrs=i}function Yl(e,t,n,r){const{props:s,attrs:i,vnode:{patchFlag:o}}=e,l=X(s),[c]=e.propsOptions;let a=!1;if((r||o>0)&&!(o&16)){if(o&8){const h=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[p,b]=Ti(d,t,!0);ce(o,p),b&&l.push(...b)};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}if(!i&&!c)return te(e)&&r.set(e,ht),ht;if(K(i))for(let h=0;h-1,b[1]=x<0||T-1||Y(b,"default"))&&l.push(d)}}}const a=[o,l];return te(e)&&r.set(e,a),a}function as(e){return e[0]!=="$"}function us(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function fs(e,t){return us(e)===us(t)}function ds(e,t){return K(t)?t.findIndex(n=>fs(n,e)):V(t)&&fs(t,e)?0:-1}const Ai=e=>e[0]==="_"||e==="$stable",Mr=e=>K(e)?e.map(xe):[xe(e)],Xl=(e,t,n)=>{if(t._n)return t;const r=fl((...s)=>Mr(t(...s)),n);return r._c=!1,r},Si=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Ai(s))continue;const i=e[s];if(V(i))t[s]=Xl(s,i,r);else if(i!=null){const o=Mr(i);t[s]=()=>o}}},Ii=(e,t)=>{const n=Mr(t);e.slots.default=()=>n},Jl=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=X(t),fn(t,"_",n)):Si(t,e.slots={})}else e.slots={},t&&Ii(e,t);fn(e.slots,Mn,1)},Ql=(e,t,n)=>{const{vnode:r,slots:s}=e;let i=!0,o=ne;if(r.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:(ce(s,t),!n&&l===1&&delete s._):(i=!t.$stable,Si(t,s)),o=t}else t&&(Ii(e,t),o={default:1});if(i)for(const l in s)!Ai(l)&&!(l in o)&&delete s[l]};function yn(e,t,n,r,s=!1){if(K(e)){e.forEach((p,b)=>yn(p,t&&(K(t)?t[b]:t),n,r,s));return}if(yt(r)&&!s)return;const i=r.shapeFlag&4?$r(r.component)||r.component.proxy:r.el,o=s?null:i,{i:l,r:c}=e,a=t&&t.r,h=l.refs===ne?l.refs={}:l.refs,d=l.setupState;if(a!=null&&a!==c&&(se(a)?(h[a]=null,Y(d,a)&&(d[a]=null)):ue(a)&&(a.value=null)),V(c))Ye(c,l,12,[o,h]);else{const p=se(c),b=ue(c);if(p||b){const T=()=>{if(e.f){const x=p?Y(d,c)?d[c]:h[c]:c.value;s?K(x)&&vr(x,i):K(x)?x.includes(i)||x.push(i):p?(h[c]=[i],Y(d,c)&&(d[c]=h[c])):(c.value=[i],e.k&&(h[e.k]=c.value))}else p?(h[c]=o,Y(d,c)&&(d[c]=o)):b&&(c.value=o,e.k&&(h[e.k]=o))};o?(T.id=-1,ve(T,n)):T()}}}let Ke=!1;const tn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",nn=e=>e.nodeType===8;function Zl(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:a}}=e,h=(y,m)=>{if(!m.hasChildNodes()){n(null,y,m),pn(),m._vnode=y;return}Ke=!1,d(m.firstChild,y,null,null,null),pn(),m._vnode=y,Ke&&console.error("Hydration completed but contains mismatches.")},d=(y,m,B,v,P,W=!1)=>{const D=nn(y)&&y.data==="[",C=()=>x(y,m,B,v,P,D),{type:H,ref:A,shapeFlag:L,patchFlag:I}=m;let U=y.nodeType;m.el=y,I===-2&&(W=!1,m.dynamicChildren=null);let M=null;switch(H){case wt:U!==3?m.children===""?(c(m.el=s(""),o(y),y),M=y):M=C():(y.data!==m.children&&(Ke=!0,y.data=m.children),M=i(y));break;case me:U!==8||D?M=C():M=i(y);break;case Ht:if(D&&(y=i(y),U=y.nodeType),U===1||U===3){M=y;const fe=!m.children.length;for(let J=0;J{W=W||!!m.dynamicChildren;const{type:D,props:C,patchFlag:H,shapeFlag:A,dirs:L}=m,I=D==="input"&&L||D==="option";if(I||H!==-1){if(L&&Fe(m,null,B,"created"),C)if(I||!W||H&48)for(const M in C)(I&&M.endsWith("value")||qt(M)&&!Mt(M))&&r(y,M,null,C[M],!1,void 0,B);else C.onClick&&r(y,"onClick",null,C.onClick,!1,void 0,B);let U;if((U=C&&C.onVnodeBeforeMount)&&Ce(U,B,m),L&&Fe(m,null,B,"beforeMount"),((U=C&&C.onVnodeMounted)||L)&&ui(()=>{U&&Ce(U,B,m),L&&Fe(m,null,B,"mounted")},v),A&16&&!(C&&(C.innerHTML||C.textContent))){let M=b(y.firstChild,m,y,B,v,P,W);for(;M;){Ke=!0;const fe=M;M=M.nextSibling,l(fe)}}else A&8&&y.textContent!==m.children&&(Ke=!0,y.textContent=m.children)}return y.nextSibling},b=(y,m,B,v,P,W,D)=>{D=D||!!m.dynamicChildren;const C=m.children,H=C.length;for(let A=0;A{const{slotScopeIds:D}=m;D&&(P=P?P.concat(D):D);const C=o(y),H=b(i(y),m,C,B,v,P,W);return H&&nn(H)&&H.data==="]"?i(m.anchor=H):(Ke=!0,c(m.anchor=a("]"),C,H),H)},x=(y,m,B,v,P,W)=>{if(Ke=!0,m.el=null,W){const H=$(y);for(;;){const A=i(y);if(A&&A!==H)l(A);else break}}const D=i(y),C=o(y);return l(y),n(null,m,C,D,B,v,tn(C),P),D},$=y=>{let m=0;for(;y;)if(y=i(y),y&&nn(y)&&(y.data==="["&&m++,y.data==="]")){if(m===0)return i(y);m--}return y};return[h,d]}const ve=ui;function Gl(e){return ec(e,Zl)}function ec(e,t){const n=tr();n.__VUE__=!0;const{insert:r,remove:s,patchProp:i,createElement:o,createText:l,createComment:c,setText:a,setElementText:h,parentNode:d,nextSibling:p,setScopeId:b=Ne,insertStaticContent:T}=e,x=(u,f,g,w=null,_=null,O=null,F=!1,S=null,R=!!f.dynamicChildren)=>{if(u===f)return;u&&!Me(u,f)&&(w=Yt(u),Re(u,_,O,!0),u=null),f.patchFlag===-2&&(R=!1,f.dynamicChildren=null);const{type:E,ref:k,shapeFlag:N}=f;switch(E){case wt:$(u,f,g,w);break;case me:y(u,f,g,w);break;case Ht:u==null&&m(f,g,w,F);break;case ye:I(u,f,g,w,_,O,F,S,R);break;default:N&1?P(u,f,g,w,_,O,F,S,R):N&6?U(u,f,g,w,_,O,F,S,R):(N&64||N&128)&&E.process(u,f,g,w,_,O,F,S,R,at)}k!=null&&_&&yn(k,u&&u.ref,O,f||u,!f)},$=(u,f,g,w)=>{if(u==null)r(f.el=l(f.children),g,w);else{const _=f.el=u.el;f.children!==u.children&&a(_,f.children)}},y=(u,f,g,w)=>{u==null?r(f.el=c(f.children||""),g,w):f.el=u.el},m=(u,f,g,w)=>{[u.el,u.anchor]=T(u.children,f,g,w,u.el,u.anchor)},B=({el:u,anchor:f},g,w)=>{let _;for(;u&&u!==f;)_=p(u),r(u,g,w),u=_;r(f,g,w)},v=({el:u,anchor:f})=>{let g;for(;u&&u!==f;)g=p(u),s(u),u=g;s(f)},P=(u,f,g,w,_,O,F,S,R)=>{F=F||f.type==="svg",u==null?W(f,g,w,_,O,F,S,R):H(u,f,_,O,F,S,R)},W=(u,f,g,w,_,O,F,S)=>{let R,E;const{type:k,props:N,shapeFlag:j,transition:q,dirs:z}=u;if(R=u.el=o(u.type,O,N&&N.is,N),j&8?h(R,u.children):j&16&&C(u.children,R,null,w,_,O&&k!=="foreignObject",F,S),z&&Fe(u,null,w,"created"),D(R,u,u.scopeId,F,w),N){for(const Q in N)Q!=="value"&&!Mt(Q)&&i(R,Q,null,N[Q],O,u.children,w,_,He);"value"in N&&i(R,"value",null,N.value),(E=N.onVnodeBeforeMount)&&Ce(E,w,u)}z&&Fe(u,null,w,"beforeMount");const ee=(!_||_&&!_.pendingBranch)&&q&&!q.persisted;ee&&q.beforeEnter(R),r(R,f,g),((E=N&&N.onVnodeMounted)||ee||z)&&ve(()=>{E&&Ce(E,w,u),ee&&q.enter(R),z&&Fe(u,null,w,"mounted")},_)},D=(u,f,g,w,_)=>{if(g&&b(u,g),w)for(let O=0;O{for(let E=R;E{const S=f.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:k}=f;R|=u.patchFlag&16;const N=u.props||ne,j=f.props||ne;let q;g&&et(g,!1),(q=j.onVnodeBeforeUpdate)&&Ce(q,g,f,u),k&&Fe(f,u,g,"beforeUpdate"),g&&et(g,!0);const z=_&&f.type!=="foreignObject";if(E?A(u.dynamicChildren,E,S,g,w,z,O):F||G(u,f,S,null,g,w,z,O,!1),R>0){if(R&16)L(S,f,N,j,g,w,_);else if(R&2&&N.class!==j.class&&i(S,"class",null,j.class,_),R&4&&i(S,"style",N.style,j.style,_),R&8){const ee=f.dynamicProps;for(let Q=0;Q{q&&Ce(q,g,f,u),k&&Fe(f,u,g,"updated")},w)},A=(u,f,g,w,_,O,F)=>{for(let S=0;S{if(g!==w){if(g!==ne)for(const S in g)!Mt(S)&&!(S in w)&&i(u,S,g[S],null,F,f.children,_,O,He);for(const S in w){if(Mt(S))continue;const R=w[S],E=g[S];R!==E&&S!=="value"&&i(u,S,E,R,F,f.children,_,O,He)}"value"in w&&i(u,"value",g.value,w.value)}},I=(u,f,g,w,_,O,F,S,R)=>{const E=f.el=u?u.el:l(""),k=f.anchor=u?u.anchor:l("");let{patchFlag:N,dynamicChildren:j,slotScopeIds:q}=f;q&&(S=S?S.concat(q):q),u==null?(r(E,g,w),r(k,g,w),C(f.children,g,k,_,O,F,S,R)):N>0&&N&64&&j&&u.dynamicChildren?(A(u.dynamicChildren,j,g,_,O,F,S),(f.key!=null||_&&f===_.subTree)&&Oi(u,f,!0)):G(u,f,g,k,_,O,F,S,R)},U=(u,f,g,w,_,O,F,S,R)=>{f.slotScopeIds=S,u==null?f.shapeFlag&512?_.ctx.activate(f,g,w,F,R):M(f,g,w,_,O,F,R):fe(u,f,R)},M=(u,f,g,w,_,O,F)=>{const S=u.component=cc(u,w,_);if(Vt(u)&&(S.ctx.renderer=at),ac(S),S.asyncDep){if(_&&_.registerDep(S,J),!u.el){const R=S.subTree=re(me);y(null,R,f,g)}return}J(S,u,f,g,_,O,F)},fe=(u,f,g)=>{const w=f.component=u.component;if(gl(u,f,g))if(w.asyncDep&&!w.asyncResolved){Z(w,f,g);return}else w.next=f,cl(w.update),w.update();else f.el=u.el,w.vnode=f},J=(u,f,g,w,_,O,F)=>{const S=()=>{if(u.isMounted){let{next:k,bu:N,u:j,parent:q,vnode:z}=u,ee=k,Q;et(u,!1),k?(k.el=z.el,Z(u,k,F)):k=z,N&&$n(N),(Q=k.props&&k.props.onVnodeBeforeUpdate)&&Ce(Q,q,k,z),et(u,!0);const oe=kn(u),Se=u.subTree;u.subTree=oe,x(Se,oe,d(Se.el),Yt(Se),u,_,O),k.el=oe.el,ee===null&&Rr(u,oe.el),j&&ve(j,_),(Q=k.props&&k.props.onVnodeUpdated)&&ve(()=>Ce(Q,q,k,z),_)}else{let k;const{el:N,props:j}=f,{bm:q,m:z,parent:ee}=u,Q=yt(f);if(et(u,!1),q&&$n(q),!Q&&(k=j&&j.onVnodeBeforeMount)&&Ce(k,ee,f),et(u,!0),N&&Hn){const oe=()=>{u.subTree=kn(u),Hn(N,u.subTree,u,_,null)};Q?f.type.__asyncLoader().then(()=>!u.isUnmounted&&oe()):oe()}else{const oe=u.subTree=kn(u);x(null,oe,g,w,u,_,O),f.el=oe.el}if(z&&ve(z,_),!Q&&(k=j&&j.onVnodeMounted)){const oe=f;ve(()=>Ce(k,ee,oe),_)}(f.shapeFlag&256||ee&&yt(ee.vnode)&&ee.vnode.shapeFlag&256)&&u.a&&ve(u.a,_),u.isMounted=!0,f=g=w=null}},R=u.effect=new wr(S,()=>In(E),u.scope),E=u.update=()=>R.run();E.id=u.uid,et(u,!0),E()},Z=(u,f,g)=>{f.component=u;const w=u.vnode.props;u.vnode=f,u.next=null,Yl(u,f.props,w,g),Ql(u,f.children,g),At(),es(),St()},G=(u,f,g,w,_,O,F,S,R=!1)=>{const E=u&&u.children,k=u?u.shapeFlag:0,N=f.children,{patchFlag:j,shapeFlag:q}=f;if(j>0){if(j&128){zt(E,N,g,w,_,O,F,S,R);return}else if(j&256){Ze(E,N,g,w,_,O,F,S,R);return}}q&8?(k&16&&He(E,_,O),N!==E&&h(g,N)):k&16?q&16?zt(E,N,g,w,_,O,F,S,R):He(E,_,O,!0):(k&8&&h(g,""),q&16&&C(N,g,w,_,O,F,S,R))},Ze=(u,f,g,w,_,O,F,S,R)=>{u=u||ht,f=f||ht;const E=u.length,k=f.length,N=Math.min(E,k);let j;for(j=0;jk?He(u,_,O,!0,!1,N):C(f,g,w,_,O,F,S,R,N)},zt=(u,f,g,w,_,O,F,S,R)=>{let E=0;const k=f.length;let N=u.length-1,j=k-1;for(;E<=N&&E<=j;){const q=u[E],z=f[E]=R?Ve(f[E]):xe(f[E]);if(Me(q,z))x(q,z,g,null,_,O,F,S,R);else break;E++}for(;E<=N&&E<=j;){const q=u[N],z=f[j]=R?Ve(f[j]):xe(f[j]);if(Me(q,z))x(q,z,g,null,_,O,F,S,R);else break;N--,j--}if(E>N){if(E<=j){const q=j+1,z=qj)for(;E<=N;)Re(u[E],_,O,!0),E++;else{const q=E,z=E,ee=new Map;for(E=z;E<=j;E++){const be=f[E]=R?Ve(f[E]):xe(f[E]);be.key!=null&&ee.set(be.key,E)}let Q,oe=0;const Se=j-z+1;let ut=!1,Kr=0;const Rt=new Array(Se);for(E=0;E=Se){Re(be,_,O,!0);continue}let Pe;if(be.key!=null)Pe=ee.get(be.key);else for(Q=z;Q<=j;Q++)if(Rt[Q-z]===0&&Me(be,f[Q])){Pe=Q;break}Pe===void 0?Re(be,_,O,!0):(Rt[Pe-z]=E+1,Pe>=Kr?Kr=Pe:ut=!0,x(be,f[Pe],g,null,_,O,F,S,R),oe++)}const Wr=ut?tc(Rt):ht;for(Q=Wr.length-1,E=Se-1;E>=0;E--){const be=z+E,Pe=f[be],qr=be+1{const{el:O,type:F,transition:S,children:R,shapeFlag:E}=u;if(E&6){Ge(u.component.subTree,f,g,w);return}if(E&128){u.suspense.move(f,g,w);return}if(E&64){F.move(u,f,g,at);return}if(F===ye){r(O,f,g);for(let N=0;NS.enter(O),_);else{const{leave:N,delayLeave:j,afterLeave:q}=S,z=()=>r(O,f,g),ee=()=>{N(O,()=>{z(),q&&q()})};j?j(O,z,ee):ee()}else r(O,f,g)},Re=(u,f,g,w=!1,_=!1)=>{const{type:O,props:F,ref:S,children:R,dynamicChildren:E,shapeFlag:k,patchFlag:N,dirs:j}=u;if(S!=null&&yn(S,null,g,u,!0),k&256){f.ctx.deactivate(u);return}const q=k&1&&j,z=!yt(u);let ee;if(z&&(ee=F&&F.onVnodeBeforeUnmount)&&Ce(ee,f,u),k&6)so(u.component,g,w);else{if(k&128){u.suspense.unmount(g,w);return}q&&Fe(u,null,f,"beforeUnmount"),k&64?u.type.remove(u,f,g,_,at,w):E&&(O!==ye||N>0&&N&64)?He(E,f,g,!1,!0):(O===ye&&N&384||!_&&k&16)&&He(R,f,g),w&&Dr(u)}(z&&(ee=F&&F.onVnodeUnmounted)||q)&&ve(()=>{ee&&Ce(ee,f,u),q&&Fe(u,null,f,"unmounted")},g)},Dr=u=>{const{type:f,el:g,anchor:w,transition:_}=u;if(f===ye){ro(g,w);return}if(f===Ht){v(u);return}const O=()=>{s(g),_&&!_.persisted&&_.afterLeave&&_.afterLeave()};if(u.shapeFlag&1&&_&&!_.persisted){const{leave:F,delayLeave:S}=_,R=()=>F(g,O);S?S(u.el,O,R):R()}else O()},ro=(u,f)=>{let g;for(;u!==f;)g=p(u),s(u),u=g;s(f)},so=(u,f,g)=>{const{bum:w,scope:_,update:O,subTree:F,um:S}=u;w&&$n(w),_.stop(),O&&(O.active=!1,Re(F,u,f,g)),S&&ve(S,f),ve(()=>{u.isUnmounted=!0},f),f&&f.pendingBranch&&!f.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===f.pendingId&&(f.deps--,f.deps===0&&f.resolve())},He=(u,f,g,w=!1,_=!1,O=0)=>{for(let F=O;Fu.shapeFlag&6?Yt(u.component.subTree):u.shapeFlag&128?u.suspense.next():p(u.anchor||u.el),Ur=(u,f,g)=>{u==null?f._vnode&&Re(f._vnode,null,null,!0):x(f._vnode||null,u,f,null,null,null,g),es(),pn(),f._vnode=u},at={p:x,um:Re,m:Ge,r:Dr,mt:M,mc:C,pc:G,pbc:A,n:Yt,o:e};let Bn,Hn;return t&&([Bn,Hn]=t(at)),{render:Ur,hydrate:Bn,createApp:ql(Ur,Bn)}}function et({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Oi(e,t,n=!1){const r=e.children,s=t.children;if(K(r)&&K(s))for(let i=0;i>1,e[n[l]]0&&(t[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}const nc=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),wt=Symbol.for("v-txt"),me=Symbol.for("v-cmt"),Ht=Symbol.for("v-stc"),$t=[];let Te=null;function Nr(e=!1){$t.push(Te=e?null:[])}function Ri(){$t.pop(),Te=$t[$t.length-1]||null}let Et=1;function hs(e){Et+=e}function Pi(e){return e.dynamicChildren=Et>0?Te||ht:null,Ri(),Et>0&&Te&&Te.push(e),e}function eu(e,t,n,r,s,i){return Pi(Mi(e,t,n,r,s,i,!0))}function Fi(e,t,n,r,s){return Pi(re(e,t,n,r,s,!0))}function Wt(e){return e?e.__v_isVNode===!0:!1}function Me(e,t){return e.type===t.type&&e.key===t.key}const Mn="__vInternal",Li=({key:e})=>e??null,an=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?se(e)||ue(e)||V(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function Mi(e,t=null,n=null,r=0,s=null,i=e===ye?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Li(t),ref:t&&an(t),scopeId:Rn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:pe};return l?(Br(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=se(n)?8:16),Et>0&&!o&&Te&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Te.push(c),c}const re=rc;function rc(e,t=null,n=null,r=0,s=null,i=!1){if((!e||e===_i)&&(e=me),Wt(e)){const l=Qe(e,t,!0);return n&&Br(l,n),Et>0&&!i&&Te&&(l.shapeFlag&6?Te[Te.indexOf(e)]=l:Te.push(l)),l.patchFlag|=-2,l}if(hc(e)&&(e=e.__vccOpts),t){t=sc(t);let{class:l,style:c}=t;l&&!se(l)&&(t.class=Cn(l)),te(c)&&(ei(c)&&!K(c)&&(c=ce({},c)),t.style=En(c))}const o=se(e)?1:ml(e)?128:nc(e)?64:te(e)?4:V(e)?2:0;return Mi(e,t,n,r,s,o,i,!0)}function sc(e){return e?ei(e)||Mn in e?ce({},e):e:null}function Qe(e,t,n=!1){const{props:r,ref:s,patchFlag:i,children:o}=e,l=t?ic(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Li(l),ref:t&&t.ref?n&&s?K(s)?s.concat(an(t)):[s,an(t)]:an(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ni(e=" ",t=0){return re(wt,null,e,t)}function tu(e,t){const n=re(Ht,null,e);return n.staticCount=t,n}function nu(e="",t=!1){return t?(Nr(),Fi(me,null,e)):re(me,null,e)}function xe(e){return e==null||typeof e=="boolean"?re(me):K(e)?re(ye,null,e.slice()):typeof e=="object"?Ve(e):re(wt,null,String(e))}function Ve(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Br(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Br(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!(Mn in t)?t._ctx=pe:s===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else V(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),r&64?(n=16,t=[Ni(t)]):n=8);e.children=t,e.shapeFlag|=n}function ic(...e){const t={};for(let n=0;nae||pe;let Hr,ft,ps="__VUE_INSTANCE_SETTERS__";(ft=tr()[ps])||(ft=tr()[ps]=[]),ft.push(e=>ae=e),Hr=e=>{ft.length>1?ft.forEach(t=>t(e)):ft[0](e)};const Ct=e=>{Hr(e),e.scope.on()},ot=()=>{ae&&ae.scope.off(),Hr(null)};function Bi(e){return e.vnode.shapeFlag&4}let xt=!1;function ac(e,t=!1){xt=t;const{props:n,children:r}=e.vnode,s=Bi(e);zl(e,n,s,t),Jl(e,r);const i=s?uc(e,t):void 0;return xt=!1,i}function uc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Nt(new Proxy(e.ctx,Hl));const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?$i(e):null;Ct(e),At();const i=Ye(r,e,0,[e.props,s]);if(St(),ot(),Hs(i)){if(i.then(ot,ot),t)return i.then(o=>{dr(e,o,t)}).catch(o=>{It(o,e,0)});e.asyncDep=i}else dr(e,i,t)}else Hi(e,t)}function dr(e,t,n){V(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:te(t)&&(e.setupState=si(t)),Hi(e,n)}let gs;function Hi(e,t,n){const r=e.type;if(!e.render){if(!t&&gs&&!r.render){const s=r.template||Lr(e).template;if(s){const{isCustomElement:i,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=ce(ce({isCustomElement:i,delimiters:l},o),c);r.render=gs(s,a)}}e.render=r.render||Ne}Ct(e),At(),kl(e),St(),ot()}function fc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return _e(e,"get","$attrs"),t[n]}}))}function $i(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return fc(e)},slots:e.slots,emit:e.emit,expose:t}}function $r(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(si(Nt(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Bt)return Bt[n](e)},has(t,n){return n in t||n in Bt}}))}function dc(e,t=!0){return V(e)?e.displayName||e.name:e.name||t&&e.__name}function hc(e){return V(e)&&"__vccOpts"in e}const ie=(e,t)=>il(e,t,xt);function hr(e,t,n){const r=arguments.length;return r===2?te(t)&&!K(t)?Wt(t)?re(e,null,[t]):re(e,t):re(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Wt(n)&&(n=[n]),re(e,t,n))}const pc=Symbol.for("v-scx"),gc=()=>_t(pc),mc="3.3.4",vc="http://www.w3.org/2000/svg",st=typeof document<"u"?document:null,ms=st&&st.createElement("template"),yc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t?st.createElementNS(vc,e):st.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>st.createTextNode(e),createComment:e=>st.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>st.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,i){const o=n?n.previousSibling:t.lastChild;if(s&&(s===i||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===i||!(s=s.nextSibling)););else{ms.innerHTML=r?`${e}`:e;const l=ms.content;if(r){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function _c(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function bc(e,t,n){const r=e.style,s=se(n);if(n&&!s){if(t&&!se(t))for(const i in t)n[i]==null&&pr(r,i,"");for(const i in n)pr(r,i,n[i])}else{const i=r.display;s?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=i)}}const vs=/\s*!important$/;function pr(e,t,n){if(K(n))n.forEach(r=>pr(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=wc(e,t);vs.test(n)?e.setProperty(ct(r),n.replace(vs,""),"important"):e[r]=n}}const ys=["Webkit","Moz","ms"],Kn={};function wc(e,t){const n=Kn[t];if(n)return n;let r=Be(t);if(r!=="filter"&&r in e)return Kn[t]=r;r=wn(r);for(let s=0;sWn||(Ic.then(()=>Wn=0),Wn=Date.now());function Rc(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ae(Pc(r,n.value),t,5,[r])};return n.value=e,n.attached=Oc(),n}function Pc(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const ws=/^on[a-z]/,Fc=(e,t,n,r,s=!1,i,o,l,c)=>{t==="class"?_c(e,r,s):t==="style"?bc(e,n,r):qt(t)?mr(t)||Ac(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Lc(e,t,r,s))?Cc(e,t,r,i,o,l,c):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Ec(e,t,r,s))};function Lc(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&ws.test(t)&&V(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ws.test(t)&&se(n)?!1:t in e}const We="transition",Pt="animation",ki=(e,{slots:t})=>hr(Al,Mc(e),t);ki.displayName="Transition";const ji={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ki.props=ce({},hi,ji);const tt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Es=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function Mc(e){const t={};for(const I in e)I in ji||(t[I]=e[I]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:a=o,appearToClass:h=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:b=`${n}-leave-to`}=e,T=Nc(s),x=T&&T[0],$=T&&T[1],{onBeforeEnter:y,onEnter:m,onEnterCancelled:B,onLeave:v,onLeaveCancelled:P,onBeforeAppear:W=y,onAppear:D=m,onAppearCancelled:C=B}=t,H=(I,U,M)=>{nt(I,U?h:l),nt(I,U?a:o),M&&M()},A=(I,U)=>{I._isLeaving=!1,nt(I,d),nt(I,b),nt(I,p),U&&U()},L=I=>(U,M)=>{const fe=I?D:m,J=()=>H(U,I,M);tt(fe,[U,J]),Cs(()=>{nt(U,I?c:i),qe(U,I?h:l),Es(fe)||xs(U,r,x,J)})};return ce(t,{onBeforeEnter(I){tt(y,[I]),qe(I,i),qe(I,o)},onBeforeAppear(I){tt(W,[I]),qe(I,c),qe(I,a)},onEnter:L(!1),onAppear:L(!0),onLeave(I,U){I._isLeaving=!0;const M=()=>A(I,U);qe(I,d),$c(),qe(I,p),Cs(()=>{I._isLeaving&&(nt(I,d),qe(I,b),Es(v)||xs(I,r,$,M))}),tt(v,[I,M])},onEnterCancelled(I){H(I,!1),tt(B,[I])},onAppearCancelled(I){H(I,!0),tt(C,[I])},onLeaveCancelled(I){A(I),tt(P,[I])}})}function Nc(e){if(e==null)return null;if(te(e))return[qn(e.enter),qn(e.leave)];{const t=qn(e);return[t,t]}}function qn(e){return js(e)}function qe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function nt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Cs(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Bc=0;function xs(e,t,n,r){const s=e._endId=++Bc,i=()=>{s===e._endId&&r()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=Hc(e,t);if(!o)return r();const a=o+"end";let h=0;const d=()=>{e.removeEventListener(a,p),i()},p=b=>{b.target===e&&++h>=c&&d()};setTimeout(()=>{h(n[T]||"").split(", "),s=r(`${We}Delay`),i=r(`${We}Duration`),o=Ts(s,i),l=r(`${Pt}Delay`),c=r(`${Pt}Duration`),a=Ts(l,c);let h=null,d=0,p=0;t===We?o>0&&(h=We,d=o,p=i.length):t===Pt?a>0&&(h=Pt,d=a,p=c.length):(d=Math.max(o,a),h=d>0?o>a?We:Pt:null,p=h?h===We?i.length:c.length:0);const b=h===We&&/\b(transform|all)(,|$)/.test(r(`${We}Property`).toString());return{type:h,timeout:d,propCount:p,hasTransform:b}}function Ts(e,t){for(;e.lengthAs(n)+As(e[r])))}function As(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function $c(){return document.body.offsetHeight}const kc=["ctrl","shift","alt","meta"],jc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>kc.some(n=>e[`${n}Key`]&&!t.includes(n))},ru=(e,t)=>(n,...r)=>{for(let s=0;sn=>{if(!("key"in n))return;const r=ct(n.key);if(t.some(s=>s===r||Dc[s]===r))return e(n)},Uc=ce({patchProp:Fc},yc);let Vn,Ss=!1;function Kc(){return Vn=Ss?Vn:Gl(Uc),Ss=!0,Vn}const iu=(...e)=>{const t=Kc().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=Wc(r);if(s)return n(s,!0,s instanceof SVGElement)},t};function Wc(e){return se(e)?document.querySelector(e):e}const ou=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},qc="modulepreload",Vc=function(e){return"/"+e},Is={},lu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.allSettled(n.map(c=>{if(c=Vc(c),c in Is)return;Is[c]=!0;const a=c.endsWith(".css"),h=a?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${h}`))return;const d=document.createElement("link");if(d.rel=a?"stylesheet":qc,a||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),a)return new Promise((p,b)=>{d.addEventListener("load",p),d.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return s.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},zc=window.__VP_SITE_DATA__;function kr(e){return Ks()?(wo(e),!0):!1}function Xe(e){return typeof e=="function"?e():ri(e)}const Di=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Yc=Object.prototype.toString,Xc=e=>Yc.call(e)==="[object Object]",Ui=()=>{},Os=Jc();function Jc(){var e,t;return Di&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function Qc(e,t){function n(...r){return new Promise((s,i)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(i)})}return n}const Ki=e=>e();function Zc(e=Ki){const t=le(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...i)=>{t.value&&e(...i)};return{isActive:An(t),pause:n,resume:r,eventFilter:s}}function Gc(e){return Nn()}function Wi(...e){if(e.length!==1)return nl(...e);const t=e[0];return typeof t=="function"?An(Go(()=>({get:t,set:Ui}))):le(t)}function ea(e,t,n={}){const{eventFilter:r=Ki,...s}=n;return Oe(e,Qc(r,t),s)}function ta(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:i,pause:o,resume:l,isActive:c}=Zc(r);return{stop:ea(e,t,{...s,eventFilter:i}),pause:o,resume:l,isActive:c}}function jr(e,t=!0,n){Gc()?Ot(e,n):t?e():Sn(e)}const je=Di?window:void 0;function qi(e){var t;const n=Xe(e);return(t=n==null?void 0:n.$el)!=null?t:n}function Tt(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=je):[t,n,r,s]=e,!t)return Ui;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const i=[],o=()=>{i.forEach(h=>h()),i.length=0},l=(h,d,p,b)=>(h.addEventListener(d,p,b),()=>h.removeEventListener(d,p,b)),c=Oe(()=>[qi(t),Xe(s)],([h,d])=>{if(o(),!h)return;const p=Xc(d)?{...d}:d;i.push(...n.flatMap(b=>r.map(T=>l(h,b,T,p))))},{immediate:!0,flush:"post"}),a=()=>{c(),o()};return kr(a),a}function na(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function cu(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=je,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=r,c=na(t);return Tt(s,i,h=>{h.repeat&&Xe(l)||c(h)&&n(h)},o)}function ra(){const e=le(!1),t=Nn();return t&&Ot(()=>{e.value=!0},t),e}function sa(e){const t=ra();return ie(()=>(t.value,!!e()))}function Vi(e,t={}){const{window:n=je}=t,r=sa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const i=le(!1),o=a=>{i.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",o):s.removeListener(o))},c=fi(()=>{r.value&&(l(),s=n.matchMedia(Xe(e)),"addEventListener"in s?s.addEventListener("change",o):s.addListener(o),i.value=s.matches)});return kr(()=>{c(),l(),s=void 0}),i}const rn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},sn="__vueuse_ssr_handlers__",ia=oa();function oa(){return sn in rn||(rn[sn]=rn[sn]||{}),rn[sn]}function zi(e,t){return ia[e]||t}function Yi(e){return Vi("(prefers-color-scheme: dark)",e)}function la(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const ca={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Rs="vueuse-storage";function aa(e,t,n,r={}){var s;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:h,window:d=je,eventFilter:p,onError:b=A=>{console.error(A)},initOnMounted:T}=r,x=(h?ti:le)(typeof t=="function"?t():t);if(!n)try{n=zi("getDefaultStorage",()=>{var A;return(A=je)==null?void 0:A.localStorage})()}catch(A){b(A)}if(!n)return x;const $=Xe(t),y=la($),m=(s=r.serializer)!=null?s:ca[y],{pause:B,resume:v}=ta(x,()=>W(x.value),{flush:i,deep:o,eventFilter:p});d&&l&&jr(()=>{n instanceof Storage?Tt(d,"storage",C):Tt(d,Rs,H),T&&C()}),T||C();function P(A,L){if(d){const I={key:e,oldValue:A,newValue:L,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",I):new CustomEvent(Rs,{detail:I}))}}function W(A){try{const L=n.getItem(e);if(A==null)P(L,null),n.removeItem(e);else{const I=m.write(A);L!==I&&(n.setItem(e,I),P(L,I))}}catch(L){b(L)}}function D(A){const L=A?A.newValue:n.getItem(e);if(L==null)return c&&$!=null&&n.setItem(e,m.write($)),$;if(!A&&a){const I=m.read(L);return typeof a=="function"?a(I,$):y==="object"&&!Array.isArray(I)?{...$,...I}:I}else return typeof L!="string"?L:m.read(L)}function C(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){x.value=$;return}if(!(A&&A.key!==e)){B();try{(A==null?void 0:A.newValue)!==m.write(x.value)&&(x.value=D(A))}catch(L){b(L)}finally{A?Sn(v):v()}}}}function H(A){C(A.detail)}return x}const ua="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function fa(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=je,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:h=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},p=Yi({window:s}),b=ie(()=>p.value?"dark":"light"),T=c||(o==null?Wi(r):aa(o,r,i,{window:s,listenToStorageChanges:l})),x=ie(()=>T.value==="auto"?b.value:T.value),$=zi("updateHTMLAttrs",(v,P,W)=>{const D=typeof v=="string"?s==null?void 0:s.document.querySelector(v):qi(v);if(!D)return;const C=new Set,H=new Set;let A=null;if(P==="class"){const I=W.split(/\s/g);Object.values(d).flatMap(U=>(U||"").split(/\s/g)).filter(Boolean).forEach(U=>{I.includes(U)?C.add(U):H.add(U)})}else A={key:P,value:W};if(C.size===0&&H.size===0&&A===null)return;let L;h&&(L=s.document.createElement("style"),L.appendChild(document.createTextNode(ua)),s.document.head.appendChild(L));for(const I of C)D.classList.add(I);for(const I of H)D.classList.remove(I);A&&D.setAttribute(A.key,A.value),h&&(s.getComputedStyle(L).opacity,document.head.removeChild(L))});function y(v){var P;$(t,n,(P=d[v])!=null?P:v)}function m(v){e.onChanged?e.onChanged(v,y):y(v)}Oe(x,m,{flush:"post",immediate:!0}),jr(()=>m(x.value));const B=ie({get(){return a?T.value:x.value},set(v){T.value=v}});try{return Object.assign(B,{store:T,system:b,state:x})}catch{return B}}function da(e={}){const{valueDark:t="dark",valueLight:n="",window:r=je}=e,s=fa({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),i=ie(()=>s.system?s.system.value:Yi({window:r}).value?"dark":"light");return ie({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";i.value===c?s.value="auto":s.value=c}})}function zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Xi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Yn=new WeakMap;function au(e,t=!1){const n=le(t);let r=null,s="";Oe(Wi(e),l=>{const c=zn(Xe(l));if(c){const a=c;if(Yn.get(a)||Yn.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=zn(Xe(e));!l||n.value||(Os&&(r=Tt(l,"touchmove",c=>{ha(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=zn(Xe(e));!l||!n.value||(Os&&(r==null||r()),l.style.overflow=s,Yn.delete(l),n.value=!1)};return kr(o),ie({get(){return n.value},set(l){l?i():o()}})}function uu(e={}){const{window:t=je,behavior:n="auto"}=e;if(!t)return{x:le(0),y:le(0)};const r=le(t.scrollX),s=le(t.scrollY),i=ie({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),o=ie({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Tt(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:i,y:o}}function fu(e={}){const{window:t=je,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=le(n),c=le(r),a=()=>{t&&(o==="outer"?(l.value=t.outerWidth,c.value=t.outerHeight):i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight))};if(a(),jr(a),Tt("resize",a,{passive:!0}),s){const h=Vi("(orientation: portrait)");Oe(h,()=>a())}return{width:l,height:c}}const Xn={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1};var Jn={};const Ji=/^(?:[a-z]+:|\/\/)/i,pa="vitepress-theme-appearance",ga=/#.*$/,ma=/[?#].*$/,va=/(?:(^|\/)index)?\.(?:md|html)$/,de=typeof document<"u",Qi={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function ya(e,t,n=!1){if(t===void 0)return!1;if(e=Ps(`/${e}`),n)return new RegExp(t).test(e);if(Ps(t)!==e)return!1;const r=t.match(ga);return r?(de?location.hash:"")===r[0]:!0}function Ps(e){return decodeURI(e).replace(ma,"").replace(va,"$1")}function _a(e){return Ji.test(e)}function ba(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!_a(n)&&ya(t,`/${n}/`,!0))||"root"}function wa(e,t){var r,s,i,o,l,c,a;const n=ba(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Gi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Zi(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Ea(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Ea(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ca(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([i,o])=>i===n&&o[s[0]]===s[1])}function Gi(e,t){return[...e.filter(n=>!Ca(t,n)),...t]}const xa=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ta=/^[a-z]:/i;function Fs(e){const t=Ta.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(xa,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const Qn=new Set;function Aa(e){if(Qn.size===0){const n=typeof process=="object"&&(Jn==null?void 0:Jn.VITE_EXTRA_EXTENSIONS)||(Xn==null?void 0:Xn.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>Qn.add(r))}const t=e.split(".").pop();return t==null||!Qn.has(t.toLowerCase())}const Sa=Symbol(),lt=ti(zc);function du(e){const t=ie(()=>wa(lt.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?le(!0):n?da({storageKey:pa,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):le(!1),s=le(de?location.hash:"");return de&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Oe(()=>e.data,()=>{s.value=de?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>Zi(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:r,hash:ie(()=>s.value)}}function Ia(){const e=_t(Sa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Oa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ls(e){return Ji.test(e)||!e.startsWith("/")?e:Oa(lt.value.base,e)}function Ra(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),de){const n="/";t=Fs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${Fs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let un=[];function hu(e){un.push(e),Ln(()=>{un=un.filter(t=>t!==e)})}function Pa(){let e=lt.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ms(e,n);else if(Array.isArray(e))for(const r of e){const s=Ms(r,n);if(s){t=s;break}}return t}function Ms(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Fa=Symbol(),eo="http://a.com",La=()=>({path:"/",component:null,data:Qi});function pu(e,t){const n=Tn(La()),r={route:n,go:s};async function s(l=de?location.href:"/"){var c,a;l=Zn(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(de&&l!==Zn(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let i=null;async function o(l,c=0,a=!1){var p,b;if(await((p=r.onBeforePageLoad)==null?void 0:p.call(r,l))===!1)return;const h=new URL(l,eo),d=i=h.pathname;try{let T=await e(d);if(!T)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:x,__pageData:$}=T;if(!x)throw new Error(`Invalid route component: ${x}`);await((b=r.onAfterPageLoad)==null?void 0:b.call(r,l)),n.path=de?d:Ls(d),n.component=Nt(x),n.data=Nt($),de&&Sn(()=>{let y=lt.value.base+$.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!lt.value.cleanUrls&&!y.endsWith("/")&&(y+=".html"),y!==h.pathname&&(h.pathname=y,l=y+h.search+h.hash,history.replaceState({},"",l)),h.hash&&!c){let m=null;try{m=document.getElementById(decodeURIComponent(h.hash).slice(1))}catch(B){console.warn(B)}if(m){Ns(m,h.hash);return}}window.scrollTo(0,c)})}}catch(T){if(!/fetch|Page not found/.test(T.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(T),!a)try{const x=await fetch(lt.value.base+"hashmap.json");window.__VP_HASH_MAP__=await x.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=de?d:Ls(d),n.component=t?Nt(t):null;const x=de?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Qi,relativePath:x}}}}return de&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const a=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(a==null)return;const{href:h,origin:d,pathname:p,hash:b,search:T}=new URL(a,c.baseURI),x=new URL(location.href);d===x.origin&&Aa(p)&&(l.preventDefault(),p===x.pathname&&T===x.search?(b!==x.hash&&(history.pushState({},"",h),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:x.href,newURL:h}))),b?Ns(c,b,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(h))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await o(Zn(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ma(){const e=_t(Fa);if(!e)throw new Error("useRouter() is called without provider.");return e}function to(){return Ma().route}function Ns(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(r).paddingTop,10),o=window.scrollY+r.getBoundingClientRect().top-Pa()+i;requestAnimationFrame(s)}}function Zn(e){const t=new URL(e,eo);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),lt.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const on=()=>un.forEach(e=>e()),gu=Fr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=to(),{frontmatter:n,site:r}=Ia();return Oe(n,on,{deep:!0,flush:"post"}),()=>hr(e.as,r.value.contentProps??{style:{position:"relative"}},[t.component?hr(t.component,{onVnodeMounted:on,onVnodeUpdated:on,onVnodeUnmounted:on}):"404 Page Not Found"])}}),mu=Fr({setup(e,{slots:t}){const n=le(!1);return Ot(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function vu(){de&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const i=r.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(a=>a.classList.contains("active"));if(!o)return;const l=i.children[s];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function yu(){if(de){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,i=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(h=>h.remove());let a=c.textContent||"";o&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Na(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const h=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,h)})}})}}async function Na(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function _u(e,t){let n=!0,r=[];const s=i=>{if(n){n=!1,i.forEach(l=>{const c=Gn(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const o=i.map(Gn);r.forEach((l,c)=>{const a=o.findIndex(h=>h==null?void 0:h.isEqualNode(l??null));a!==-1?delete o[a]:(l==null||l.remove(),delete r[c])}),o.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...o].filter(Boolean)};fi(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],a=Zi(o,i);a!==document.title&&(document.title=a);const h=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==h&&d.setAttribute("content",h):Gn(["meta",{name:"description",content:h}]),s(Gi(o.head,Ha(c)))})}function Gn([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function Ba(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Ha(e){return e.filter(t=>!Ba(t))}const er=new Set,no=()=>document.createElement("link"),$a=e=>{const t=no();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ka=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let ln;const ja=de&&(ln=no())&&ln.relList&&ln.relList.supports&&ln.relList.supports("prefetch")?$a:ka;function bu(){if(!de||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!er.has(c)){er.add(c);const a=Ra(c);a&&ja(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):er.add(l))})})};Ot(r);const s=to();Oe(()=>s.path,r),Ln(()=>{n&&n.disconnect()})}export{Vl as $,Va as A,Fl as B,Pa as C,Ya as D,Ja as E,ye as F,ti as G,hu as H,re as I,Xa as J,Ji as K,to as L,ic as M,_t as N,fu as O,En as P,cu as Q,Sn as R,uu as S,ki as T,de as U,An as V,Da as W,za as X,lu as Y,au as Z,ou as _,Ni as a,Za as a0,su as a1,vi as a2,ru as a3,Ga as a4,hr as a5,tu as a6,qa as a7,X as a8,_u as a9,Fa as aa,du as ab,Sa as ac,gu as ad,mu as ae,lt as af,iu as ag,pu as ah,Ra as ai,bu as aj,yu as ak,vu as al,Ma as am,Fi as b,eu as c,Fr as d,nu as e,Aa as f,Ls as g,ie as h,_a as i,Mi as j,ri as k,Wa as l,ya as m,Cn as n,Nr as o,Ka as p,Vi as q,Qa as r,le as s,Ua as t,Ia as u,Oe as v,fl as w,fi as x,Ot as y,Ln as z}; diff --git a/assets/chunks/ganttDiagram-b62c793e.DstTdRzq.js b/assets/chunks/ganttDiagram-a649f789.B3MVSZyS.js similarity index 92% rename from assets/chunks/ganttDiagram-b62c793e.DstTdRzq.js rename to assets/chunks/ganttDiagram-a649f789.B3MVSZyS.js index c05f8f90..bf76837b 100644 --- a/assets/chunks/ganttDiagram-b62c793e.DstTdRzq.js +++ b/assets/chunks/ganttDiagram-a649f789.B3MVSZyS.js @@ -1,9 +1,9 @@ -import{au as Je,av as $e,aw as Ke,ax as tn,ay as Un,az as ie,aA as Fn,aB as nt,c as Mt,s as An,g as Ln,E as En,F as In,b as Wn,a as On,G as Hn,m as Nn,l as $t,h as Xt,i as Vn,j as Pn,A as zn}from"../app.CbQoAe_D.js";import{b as Rn,t as Ee,c as Bn,a as Zn,l as Xn}from"./linear.CuaGw0Y_.js";import{i as qn}from"./init.Gi6I4Gst.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";function Gn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n=i)&&(n=i)}return n}function Qn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function jn(t){return t}var Qt=1,ae=2,ke=3,qt=4,Ie=1e-6;function Jn(t){return"translate("+t+",0)"}function $n(t){return"translate(0,"+t+")"}function Kn(t){return e=>+t(e)}function tr(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function er(){return!this.__axis}function en(t,e){var n=[],r=null,i=null,a=6,s=6,m=3,T=typeof window<"u"&&window.devicePixelRatio>1?0:.5,k=t===Qt||t===qt?-1:1,y=t===qt||t===ae?"x":"y",_=t===Qt||t===ke?Jn:$n;function b(p){var E=r??(e.ticks?e.ticks.apply(e,n):e.domain()),D=i??(e.tickFormat?e.tickFormat.apply(e,n):jn),R=Math.max(a,0)+m,X=e.range(),tt=+X[0]+T,B=+X[X.length-1]+T,Z=(e.bandwidth?tr:Kn)(e.copy(),T),J=p.selection?p.selection():p,x=J.selectAll(".domain").data([null]),V=J.selectAll(".tick").data(E,e).order(),w=V.exit(),F=V.enter().append("g").attr("class","tick"),U=V.select("line"),C=V.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),V=V.merge(F),U=U.merge(F.append("line").attr("stroke","currentColor").attr(y+"2",k*a)),C=C.merge(F.append("text").attr("fill","currentColor").attr(y,k*R).attr("dy",t===Qt?"0em":t===ke?"0.71em":"0.32em")),p!==J&&(x=x.transition(p),V=V.transition(p),U=U.transition(p),C=C.transition(p),w=w.transition(p).attr("opacity",Ie).attr("transform",function(c){return isFinite(c=Z(c))?_(c+T):this.getAttribute("transform")}),F.attr("opacity",Ie).attr("transform",function(c){var d=this.parentNode.__axis;return _((d&&isFinite(d=d(c))?d:Z(c))+T)})),w.remove(),x.attr("d",t===qt||t===ae?s?"M"+k*s+","+tt+"H"+T+"V"+B+"H"+k*s:"M"+T+","+tt+"V"+B:s?"M"+tt+","+k*s+"V"+T+"H"+B+"V"+k*s:"M"+tt+","+T+"H"+B),V.attr("opacity",1).attr("transform",function(c){return _(Z(c)+T)}),U.attr(y+"2",k*a),C.attr(y,k*R).text(D),J.filter(er).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===ae?"start":t===qt?"end":"middle"),J.each(function(){this.__axis=Z})}return b.scale=function(p){return arguments.length?(e=p,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(p){return arguments.length?(n=p==null?[]:Array.from(p),b):n.slice()},b.tickValues=function(p){return arguments.length?(r=p==null?null:Array.from(p),b):r&&r.slice()},b.tickFormat=function(p){return arguments.length?(i=p,b):i},b.tickSize=function(p){return arguments.length?(a=s=+p,b):a},b.tickSizeInner=function(p){return arguments.length?(a=+p,b):a},b.tickSizeOuter=function(p){return arguments.length?(s=+p,b):s},b.tickPadding=function(p){return arguments.length?(m=+p,b):m},b.offset=function(p){return arguments.length?(T=+p,b):T},b}function nr(t){return en(Qt,t)}function rr(t){return en(ke,t)}const ir=Math.PI/180,ar=180/Math.PI,Kt=18,nn=.96422,rn=1,an=.82521,sn=4/29,St=6/29,on=3*St*St,sr=St*St*St;function cn(t){if(t instanceof ot)return new ot(t.l,t.a,t.b,t.opacity);if(t instanceof ut)return ln(t);t instanceof Ke||(t=Un(t));var e=le(t.r),n=le(t.g),r=le(t.b),i=se((.2225045*e+.7168786*n+.0606169*r)/rn),a,s;return e===n&&n===r?a=s=i:(a=se((.4360747*e+.3850649*n+.1430804*r)/nn),s=se((.0139322*e+.0971045*n+.7141733*r)/an)),new ot(116*i-16,500*(a-i),200*(i-s),t.opacity)}function or(t,e,n,r){return arguments.length===1?cn(t):new ot(t,e,n,r??1)}function ot(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}Je(ot,or,$e(tn,{brighter(t){return new ot(this.l+Kt*(t??1),this.a,this.b,this.opacity)},darker(t){return new ot(this.l-Kt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=nn*oe(e),t=rn*oe(t),n=an*oe(n),new Ke(ce(3.1338561*e-1.6168667*t-.4906146*n),ce(-.9787684*e+1.9161415*t+.033454*n),ce(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function se(t){return t>sr?Math.pow(t,1/3):t/on+sn}function oe(t){return t>St?t*t*t:on*(t-sn)}function ce(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function le(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ut)return new ut(t.h,t.c,t.l,t.opacity);if(t instanceof ot||(t=cn(t)),t.a===0&&t.b===0)return new ut(NaN,0(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{const s=i(a),m=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,m)=>{const T=[];if(a=i.ceil(a),m=m==null?1:Math.floor(m),!(a0))return T;let k;do T.push(k=new Date(+a)),e(a,m),t(a);while(kj(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,m)=>{if(s>=s)if(m<0)for(;++m<=0;)for(;e(s,-1),!a(s););else for(;--m>=0;)for(;e(s,1),!a(s););}),n&&(i.count=(a,s)=>(ue.setTime(+a),fe.setTime(+s),t(ue),t(fe),Math.floor(n(ue,fe))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(r?s=>r(s)%a===0:s=>i.count(0,s)%a===0):i)),i}const Yt=j(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Yt.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?j(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Yt);Yt.range;const ft=1e3,it=ft*60,ht=it*60,dt=ht*24,we=dt*7,We=dt*30,he=dt*365,gt=j(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCSeconds());gt.range;const Ot=j(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft)},(t,e)=>{t.setTime(+t+e*it)},(t,e)=>(e-t)/it,t=>t.getMinutes());Ot.range;const hr=j(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*it)},(t,e)=>(e-t)/it,t=>t.getUTCMinutes());hr.range;const Ht=j(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft-t.getMinutes()*it)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getHours());Ht.range;const dr=j(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getUTCHours());dr.range;const Tt=j(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*it)/dt,t=>t.getDate()-1);Tt.range;const Ce=j(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>t.getUTCDate()-1);Ce.range;const mr=j(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>Math.floor(t/dt));mr.range;function xt(t){return j(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*it)/we)}const Pt=xt(0),Nt=xt(1),un=xt(2),fn=xt(3),vt=xt(4),hn=xt(5),dn=xt(6);Pt.range;Nt.range;un.range;fn.range;vt.range;hn.range;dn.range;function wt(t){return j(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/we)}const mn=wt(0),te=wt(1),gr=wt(2),yr=wt(3),Ut=wt(4),kr=wt(5),pr=wt(6);mn.range;te.range;gr.range;yr.range;Ut.range;kr.range;pr.range;const Vt=j(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Vt.range;const Tr=j(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());Tr.range;const mt=j(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());mt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:j(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});mt.range;const bt=j(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:j(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});bt.range;function vr(t,e,n,r,i,a){const s=[[gt,1,ft],[gt,5,5*ft],[gt,15,15*ft],[gt,30,30*ft],[a,1,it],[a,5,5*it],[a,15,15*it],[a,30,30*it],[i,1,ht],[i,3,3*ht],[i,6,6*ht],[i,12,12*ht],[r,1,dt],[r,2,2*dt],[n,1,we],[e,1,We],[e,3,3*We],[t,1,he]];function m(k,y,_){const b=yR).right(s,b);if(p===s.length)return t.every(Ee(k/he,y/he,_));if(p===0)return Yt.every(Math.max(Ee(k,y,_),1));const[E,D]=s[b/s[p-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?(N=me(Lt(l.y,0,1)),G=N.getUTCDay(),N=G>4||G===0?te.ceil(N):te(N),N=Ce.offset(N,(l.V-1)*7),l.y=N.getUTCFullYear(),l.m=N.getUTCMonth(),l.d=N.getUTCDate()+(l.w+6)%7):(N=de(Lt(l.y,0,1)),G=N.getDay(),N=G>4||G===0?Nt.ceil(N):Nt(N),N=Tt.offset(N,(l.V-1)*7),l.y=N.getFullYear(),l.m=N.getMonth(),l.d=N.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),G="Z"in l?me(Lt(l.y,0,1)).getUTCDay():de(Lt(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(G+5)%7:l.w+l.U*7-(G+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,me(l)):de(l)}}function w(v,A,M,l){for(var P=0,N=A.length,G=M.length,$,et;P=G)return-1;if($=A.charCodeAt(P++),$===37){if($=A.charAt(P++),et=J[$ in Oe?A.charAt(P++):$],!et||(l=et(v,M,l))<0)return-1}else if($!=M.charCodeAt(l++))return-1}return l}function F(v,A,M){var l=k.exec(A.slice(M));return l?(v.p=y.get(l[0].toLowerCase()),M+l[0].length):-1}function U(v,A,M){var l=p.exec(A.slice(M));return l?(v.w=E.get(l[0].toLowerCase()),M+l[0].length):-1}function C(v,A,M){var l=_.exec(A.slice(M));return l?(v.w=b.get(l[0].toLowerCase()),M+l[0].length):-1}function c(v,A,M){var l=X.exec(A.slice(M));return l?(v.m=tt.get(l[0].toLowerCase()),M+l[0].length):-1}function d(v,A,M){var l=D.exec(A.slice(M));return l?(v.m=R.get(l[0].toLowerCase()),M+l[0].length):-1}function g(v,A,M){return w(v,e,A,M)}function u(v,A,M){return w(v,n,A,M)}function S(v,A,M){return w(v,r,A,M)}function o(v){return s[v.getDay()]}function q(v){return a[v.getDay()]}function h(v){return T[v.getMonth()]}function f(v){return m[v.getMonth()]}function Y(v){return i[+(v.getHours()>=12)]}function z(v){return 1+~~(v.getMonth()/3)}function I(v){return s[v.getUTCDay()]}function O(v){return a[v.getUTCDay()]}function L(v){return T[v.getUTCMonth()]}function H(v){return m[v.getUTCMonth()]}function kt(v){return i[+(v.getUTCHours()>=12)]}function pt(v){return 1+~~(v.getUTCMonth()/3)}return{format:function(v){var A=x(v+="",B);return A.toString=function(){return v},A},parse:function(v){var A=V(v+="",!1);return A.toString=function(){return v},A},utcFormat:function(v){var A=x(v+="",Z);return A.toString=function(){return v},A},utcParse:function(v){var A=V(v+="",!0);return A.toString=function(){return v},A}}}var Oe={"-":"",_:" ",0:"0"},K=/^\s*\d+/,Cr=/^%/,Dr=/[\\^$*+?|[\]().{}]/g;function W(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a[e.toLowerCase(),n]))}function Sr(t,e,n){var r=K.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function _r(t,e,n){var r=K.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Ur(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Fr(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function He(t,e,n){var r=K.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ne(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ar(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Lr(t,e,n){var r=K.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Er(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ve(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Ir(t,e,n){var r=K.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Pe(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Wr(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Hr(t,e,n){var r=K.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Nr(t,e,n){var r=K.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Vr(t,e,n){var r=Cr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Pr(t,e,n){var r=K.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function zr(t,e,n){var r=K.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ze(t,e){return W(t.getDate(),e,2)}function Rr(t,e){return W(t.getHours(),e,2)}function Br(t,e){return W(t.getHours()%12||12,e,2)}function Zr(t,e){return W(1+Tt.count(mt(t),t),e,3)}function gn(t,e){return W(t.getMilliseconds(),e,3)}function Xr(t,e){return gn(t,e)+"000"}function qr(t,e){return W(t.getMonth()+1,e,2)}function Gr(t,e){return W(t.getMinutes(),e,2)}function Qr(t,e){return W(t.getSeconds(),e,2)}function jr(t){var e=t.getDay();return e===0?7:e}function Jr(t,e){return W(Pt.count(mt(t)-1,t),e,2)}function yn(t){var e=t.getDay();return e>=4||e===0?vt(t):vt.ceil(t)}function $r(t,e){return t=yn(t),W(vt.count(mt(t),t)+(mt(t).getDay()===4),e,2)}function Kr(t){return t.getDay()}function ti(t,e){return W(Nt.count(mt(t)-1,t),e,2)}function ei(t,e){return W(t.getFullYear()%100,e,2)}function ni(t,e){return t=yn(t),W(t.getFullYear()%100,e,2)}function ri(t,e){return W(t.getFullYear()%1e4,e,4)}function ii(t,e){var n=t.getDay();return t=n>=4||n===0?vt(t):vt.ceil(t),W(t.getFullYear()%1e4,e,4)}function ai(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+W(e/60|0,"0",2)+W(e%60,"0",2)}function Re(t,e){return W(t.getUTCDate(),e,2)}function si(t,e){return W(t.getUTCHours(),e,2)}function oi(t,e){return W(t.getUTCHours()%12||12,e,2)}function ci(t,e){return W(1+Ce.count(bt(t),t),e,3)}function kn(t,e){return W(t.getUTCMilliseconds(),e,3)}function li(t,e){return kn(t,e)+"000"}function ui(t,e){return W(t.getUTCMonth()+1,e,2)}function fi(t,e){return W(t.getUTCMinutes(),e,2)}function hi(t,e){return W(t.getUTCSeconds(),e,2)}function di(t){var e=t.getUTCDay();return e===0?7:e}function mi(t,e){return W(mn.count(bt(t)-1,t),e,2)}function pn(t){var e=t.getUTCDay();return e>=4||e===0?Ut(t):Ut.ceil(t)}function gi(t,e){return t=pn(t),W(Ut.count(bt(t),t)+(bt(t).getUTCDay()===4),e,2)}function yi(t){return t.getUTCDay()}function ki(t,e){return W(te.count(bt(t)-1,t),e,2)}function pi(t,e){return W(t.getUTCFullYear()%100,e,2)}function Ti(t,e){return t=pn(t),W(t.getUTCFullYear()%100,e,2)}function vi(t,e){return W(t.getUTCFullYear()%1e4,e,4)}function bi(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Ut(t):Ut.ceil(t),W(t.getUTCFullYear()%1e4,e,4)}function xi(){return"+0000"}function Be(){return"%"}function Ze(t){return+t}function Xe(t){return Math.floor(+t/1e3)}var Dt,ee;wi({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function wi(t){return Dt=wr(t),ee=Dt.format,Dt.parse,Dt.utcFormat,Dt.utcParse,Dt}function Ci(t){return new Date(t)}function Di(t){return t instanceof Date?+t:+new Date(+t)}function Tn(t,e,n,r,i,a,s,m,T,k){var y=Bn(),_=y.invert,b=y.domain,p=k(".%L"),E=k(":%S"),D=k("%I:%M"),R=k("%I %p"),X=k("%a %d"),tt=k("%b %d"),B=k("%B"),Z=k("%Y");function J(x){return(T(x)4&&(_+=7),y.add(_,ge)},i=function(T){return T.add(4-T.isoWeekday(),ge)},a=e.prototype;a.isoWeekYear=function(){var m=i(this);return m.year()},a.isoWeek=function(m){if(!this.$utils().u(m))return this.add((m-this.isoWeek())*7,ge);var T=i(this),k=r(this.isoWeekYear(),this.$u);return T.diff(k,Si)+1},a.isoWeekday=function(m){return this.$utils().u(m)?this.day()||7:this.day(this.day()%7?m:m-7)};var s=a.startOf;a.startOf=function(m,T){var k=this.$utils(),y=k.u(T)?!0:T,_=k.p(m);return _===Ui?y?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(m,T)}};var Ai=function(e){return e.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(n,r,i){return r||i.slice(1)})},Li={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ei=function(e,n){return e.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(r,i,a){var s=a&&a.toUpperCase();return i||n[a]||Li[a]||Ai(n[s])})},Ii=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,Wi=/\d/,Gt=/\d\d/,Oi=/\d{3}/,Hi=/\d{4}/,at=/\d\d?/,Ni=/[+-]?\d+/,Vi=/[+-]\d\d:?(\d\d)?|Z/,Wt=/\d*[^-_:/,()\s\d]+/,yt={},vn=function(e){return e=+e,e+(e>68?1900:2e3)};function Pi(t){if(!t||t==="Z")return 0;var e=t.match(/([+-]|\d\d)/g),n=+(e[1]*60)+(+e[2]||0);return n===0?0:e[0]==="+"?-n:n}var rt=function(e){return function(n){this[e]=+n}},qe=[Vi,function(t){var e=this.zone||(this.zone={});e.offset=Pi(t)}],ye=function(e){var n=yt[e];return n&&(n.indexOf?n:n.s.concat(n.f))},Ge=function(e,n){var r,i=yt,a=i.meridiem;if(!a)r=e===(n?"pm":"PM");else for(var s=1;s<=24;s+=1)if(e.indexOf(a(s,0,n))>-1){r=s>12;break}return r},zi={A:[Wt,function(t){this.afternoon=Ge(t,!1)}],a:[Wt,function(t){this.afternoon=Ge(t,!0)}],S:[Wi,function(t){this.milliseconds=+t*100}],SS:[Gt,function(t){this.milliseconds=+t*10}],SSS:[Oi,function(t){this.milliseconds=+t}],s:[at,rt("seconds")],ss:[at,rt("seconds")],m:[at,rt("minutes")],mm:[at,rt("minutes")],H:[at,rt("hours")],h:[at,rt("hours")],HH:[at,rt("hours")],hh:[at,rt("hours")],D:[at,rt("day")],DD:[Gt,rt("day")],Do:[Wt,function(t){var e=yt,n=e.ordinal,r=t.match(/\d+/);if(this.day=r[0],!!n)for(var i=1;i<=31;i+=1)n(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[at,rt("month")],MM:[Gt,rt("month")],MMM:[Wt,function(t){var e=ye("months"),n=ye("monthsShort"),r=(n||e.map(function(i){return i.slice(0,3)})).indexOf(t)+1;if(r<1)throw new Error;this.month=r%12||r}],MMMM:[Wt,function(t){var e=ye("months"),n=e.indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],Y:[Ni,rt("year")],YY:[Gt,function(t){this.year=vn(t)}],YYYY:[Hi,rt("year")],Z:qe,ZZ:qe};function Ri(t){var e=t.afternoon;if(e!==void 0){var n=t.hours;e?n<12&&(t.hours+=12):n===12&&(t.hours=0),delete t.afternoon}}function Bi(t){t=Ei(t,yt&&yt.formats);for(var e=t.match(Ii),n=e.length,r=0;r-1)return new Date((n==="X"?1e3:1)*e);var i=Bi(n),a=i(e),s=a.year,m=a.month,T=a.day,k=a.hours,y=a.minutes,_=a.seconds,b=a.milliseconds,p=a.zone,E=new Date,D=T||(!s&&!m?E.getDate():1),R=s||E.getFullYear(),X=0;s&&!m||(X=m>0?m-1:E.getMonth());var tt=k||0,B=y||0,Z=_||0,J=b||0;return p?new Date(Date.UTC(R,X,D,tt,B,Z,J+p.offset*60*1e3)):r?new Date(Date.UTC(R,X,D,tt,B,Z,J)):new Date(R,X,D,tt,B,Z,J)}catch{return new Date("")}};const Xi=function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(vn=t.parseTwoDigitYear);var r=e.prototype,i=r.parse;r.parse=function(a){var s=a.date,m=a.utc,T=a.args;this.$u=m;var k=T[1];if(typeof k=="string"){var y=T[2]===!0,_=T[3]===!0,b=y||_,p=T[2];_&&(p=T[2]),yt=this.$locale(),!y&&p&&(yt=n.Ls[p]),this.$d=Zi(s,k,m),this.init(),p&&p!==!0&&(this.$L=this.locale(p).$L),b&&s!=this.format(k)&&(this.$d=new Date("")),yt={}}else if(k instanceof Array)for(var E=k.length,D=1;D<=E;D+=1){T[1]=k[D-1];var R=n.apply(this,T);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}D===E&&(this.$d=new Date(""))}else i.call(this,a)}},qi=function(t,e){var n=e.prototype,r=n.format;n.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return r.bind(this)(i);var m=this.$utils(),T=i||Yi,k=T.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(y){switch(y){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return m.s(a.week(),y==="w"?1:2,"0");case"W":case"WW":return m.s(a.isoWeek(),y==="W"?1:2,"0");case"k":case"kk":return m.s(String(a.$H===0?24:a.$H),y==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return y}});return r.bind(this)(k)}};var Te=function(){var t=function(C,c,d,g){for(d=d||{},g=C.length;g--;d[C[g]]=c);return d},e=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],r=[1,26],i=[1,27],a=[1,28],s=[1,29],m=[1,30],T=[1,31],k=[1,9],y=[1,10],_=[1,11],b=[1,12],p=[1,13],E=[1,14],D=[1,15],R=[1,16],X=[1,18],tt=[1,19],B=[1,20],Z=[1,21],J=[1,22],x=[1,24],V=[1,32],w={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(c,d,g,u,S,o,q){var h=o.length-1;switch(S){case 1:return o[h-1];case 2:this.$=[];break;case 3:o[h-1].push(o[h]),this.$=o[h-1];break;case 4:case 5:this.$=o[h];break;case 6:case 7:this.$=[];break;case 8:u.setWeekday("monday");break;case 9:u.setWeekday("tuesday");break;case 10:u.setWeekday("wednesday");break;case 11:u.setWeekday("thursday");break;case 12:u.setWeekday("friday");break;case 13:u.setWeekday("saturday");break;case 14:u.setWeekday("sunday");break;case 15:u.setDateFormat(o[h].substr(11)),this.$=o[h].substr(11);break;case 16:u.enableInclusiveEndDates(),this.$=o[h].substr(18);break;case 17:u.TopAxis(),this.$=o[h].substr(8);break;case 18:u.setAxisFormat(o[h].substr(11)),this.$=o[h].substr(11);break;case 19:u.setTickInterval(o[h].substr(13)),this.$=o[h].substr(13);break;case 20:u.setExcludes(o[h].substr(9)),this.$=o[h].substr(9);break;case 21:u.setIncludes(o[h].substr(9)),this.$=o[h].substr(9);break;case 22:u.setTodayMarker(o[h].substr(12)),this.$=o[h].substr(12);break;case 24:u.setDiagramTitle(o[h].substr(6)),this.$=o[h].substr(6);break;case 25:this.$=o[h].trim(),u.setAccTitle(this.$);break;case 26:case 27:this.$=o[h].trim(),u.setAccDescription(this.$);break;case 28:u.addSection(o[h].substr(8)),this.$=o[h].substr(8);break;case 30:u.addTask(o[h-1],o[h]),this.$="task";break;case 31:this.$=o[h-1],u.setClickEvent(o[h-1],o[h],null);break;case 32:this.$=o[h-2],u.setClickEvent(o[h-2],o[h-1],o[h]);break;case 33:this.$=o[h-2],u.setClickEvent(o[h-2],o[h-1],null),u.setLink(o[h-2],o[h]);break;case 34:this.$=o[h-3],u.setClickEvent(o[h-3],o[h-2],o[h-1]),u.setLink(o[h-3],o[h]);break;case 35:this.$=o[h-2],u.setClickEvent(o[h-2],o[h],null),u.setLink(o[h-2],o[h-1]);break;case 36:this.$=o[h-3],u.setClickEvent(o[h-3],o[h-1],o[h]),u.setLink(o[h-3],o[h-2]);break;case 37:this.$=o[h-1],u.setLink(o[h-1],o[h]);break;case 38:case 44:this.$=o[h-1]+" "+o[h];break;case 39:case 40:case 42:this.$=o[h-2]+" "+o[h-1]+" "+o[h];break;case 41:case 43:this.$=o[h-3]+" "+o[h-2]+" "+o[h-1]+" "+o[h];break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:i,15:a,16:s,17:m,18:T,19:k,20:y,21:_,22:b,23:p,24:E,25:D,26:R,27:X,28:tt,30:B,32:Z,33:J,34:23,35:x,37:V},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:r,14:i,15:a,16:s,17:m,18:T,19:k,20:y,21:_,22:b,23:p,24:E,25:D,26:R,27:X,28:tt,30:B,32:Z,33:J,34:23,35:x,37:V},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],defaultActions:{},parseError:function(c,d){if(d.recoverable)this.trace(c);else{var g=new Error(c);throw g.hash=d,g}},parse:function(c){var d=this,g=[0],u=[],S=[null],o=[],q=this.table,h="",f=0,Y=0,z=2,I=1,O=o.slice.call(arguments,1),L=Object.create(this.lexer),H={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(H.yy[kt]=this.yy[kt]);L.setInput(c,H.yy),H.yy.lexer=L,H.yy.parser=this,typeof L.yylloc>"u"&&(L.yylloc={});var pt=L.yylloc;o.push(pt);var v=L.options&&L.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function A(){var ct;return ct=u.pop()||L.lex()||I,typeof ct!="number"&&(ct instanceof Array&&(u=ct,ct=u.pop()),ct=d.symbols_[ct]||ct),ct}for(var M,l,P,N,G={},$,et,At,Zt;;){if(l=g[g.length-1],this.defaultActions[l]?P=this.defaultActions[l]:((M===null||typeof M>"u")&&(M=A()),P=q[l]&&q[l][M]),typeof P>"u"||!P.length||!P[0]){var re="";Zt=[];for($ in q[l])this.terminals_[$]&&$>z&&Zt.push("'"+this.terminals_[$]+"'");L.showPosition?re="Parse error on line "+(f+1)+`: +import{au as Je,av as $e,aw as Ke,ax as tn,ay as Un,az as ie,aA as Fn,aB as nt,c as Mt,s as An,g as Ln,x as En,y as In,b as Wn,a as On,A as Hn,m as Nn,l as $t,h as Xt,i as Vn,j as zn,z as Pn}from"../app.DRN3unl1.js";import{b as Rn,t as Ee,c as Bn,a as Zn,l as Xn}from"./linear.DG04O0I7.js";import{i as qn}from"./init.Gi6I4Gst.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";function Gn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n=i)&&(n=i)}return n}function Qn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let i of t)(i=e(i,++r,t))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function jn(t){return t}var Qt=1,ae=2,ke=3,qt=4,Ie=1e-6;function Jn(t){return"translate("+t+",0)"}function $n(t){return"translate(0,"+t+")"}function Kn(t){return e=>+t(e)}function tr(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function er(){return!this.__axis}function en(t,e){var n=[],r=null,i=null,a=6,s=6,m=3,T=typeof window<"u"&&window.devicePixelRatio>1?0:.5,k=t===Qt||t===qt?-1:1,y=t===qt||t===ae?"x":"y",_=t===Qt||t===ke?Jn:$n;function b(p){var E=r??(e.ticks?e.ticks.apply(e,n):e.domain()),D=i??(e.tickFormat?e.tickFormat.apply(e,n):jn),R=Math.max(a,0)+m,X=e.range(),tt=+X[0]+T,B=+X[X.length-1]+T,Z=(e.bandwidth?tr:Kn)(e.copy(),T),J=p.selection?p.selection():p,x=J.selectAll(".domain").data([null]),V=J.selectAll(".tick").data(E,e).order(),w=V.exit(),F=V.enter().append("g").attr("class","tick"),U=V.select("line"),C=V.select("text");x=x.merge(x.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),V=V.merge(F),U=U.merge(F.append("line").attr("stroke","currentColor").attr(y+"2",k*a)),C=C.merge(F.append("text").attr("fill","currentColor").attr(y,k*R).attr("dy",t===Qt?"0em":t===ke?"0.71em":"0.32em")),p!==J&&(x=x.transition(p),V=V.transition(p),U=U.transition(p),C=C.transition(p),w=w.transition(p).attr("opacity",Ie).attr("transform",function(c){return isFinite(c=Z(c))?_(c+T):this.getAttribute("transform")}),F.attr("opacity",Ie).attr("transform",function(c){var d=this.parentNode.__axis;return _((d&&isFinite(d=d(c))?d:Z(c))+T)})),w.remove(),x.attr("d",t===qt||t===ae?s?"M"+k*s+","+tt+"H"+T+"V"+B+"H"+k*s:"M"+T+","+tt+"V"+B:s?"M"+tt+","+k*s+"V"+T+"H"+B+"V"+k*s:"M"+tt+","+T+"H"+B),V.attr("opacity",1).attr("transform",function(c){return _(Z(c)+T)}),U.attr(y+"2",k*a),C.attr(y,k*R).text(D),J.filter(er).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===ae?"start":t===qt?"end":"middle"),J.each(function(){this.__axis=Z})}return b.scale=function(p){return arguments.length?(e=p,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(p){return arguments.length?(n=p==null?[]:Array.from(p),b):n.slice()},b.tickValues=function(p){return arguments.length?(r=p==null?null:Array.from(p),b):r&&r.slice()},b.tickFormat=function(p){return arguments.length?(i=p,b):i},b.tickSize=function(p){return arguments.length?(a=s=+p,b):a},b.tickSizeInner=function(p){return arguments.length?(a=+p,b):a},b.tickSizeOuter=function(p){return arguments.length?(s=+p,b):s},b.tickPadding=function(p){return arguments.length?(m=+p,b):m},b.offset=function(p){return arguments.length?(T=+p,b):T},b}function nr(t){return en(Qt,t)}function rr(t){return en(ke,t)}const ir=Math.PI/180,ar=180/Math.PI,Kt=18,nn=.96422,rn=1,an=.82521,sn=4/29,St=6/29,on=3*St*St,sr=St*St*St;function cn(t){if(t instanceof ot)return new ot(t.l,t.a,t.b,t.opacity);if(t instanceof ut)return ln(t);t instanceof Ke||(t=Un(t));var e=le(t.r),n=le(t.g),r=le(t.b),i=se((.2225045*e+.7168786*n+.0606169*r)/rn),a,s;return e===n&&n===r?a=s=i:(a=se((.4360747*e+.3850649*n+.1430804*r)/nn),s=se((.0139322*e+.0971045*n+.7141733*r)/an)),new ot(116*i-16,500*(a-i),200*(i-s),t.opacity)}function or(t,e,n,r){return arguments.length===1?cn(t):new ot(t,e,n,r??1)}function ot(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}Je(ot,or,$e(tn,{brighter(t){return new ot(this.l+Kt*(t??1),this.a,this.b,this.opacity)},darker(t){return new ot(this.l-Kt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=nn*oe(e),t=rn*oe(t),n=an*oe(n),new Ke(ce(3.1338561*e-1.6168667*t-.4906146*n),ce(-.9787684*e+1.9161415*t+.033454*n),ce(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function se(t){return t>sr?Math.pow(t,1/3):t/on+sn}function oe(t){return t>St?t*t*t:on*(t-sn)}function ce(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function le(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ut)return new ut(t.h,t.c,t.l,t.opacity);if(t instanceof ot||(t=cn(t)),t.a===0&&t.b===0)return new ut(NaN,0(t(a=new Date(+a)),a),i.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),i.round=a=>{const s=i(a),m=i.ceil(a);return a-s(e(a=new Date(+a),s==null?1:Math.floor(s)),a),i.range=(a,s,m)=>{const T=[];if(a=i.ceil(a),m=m==null?1:Math.floor(m),!(a0))return T;let k;do T.push(k=new Date(+a)),e(a,m),t(a);while(kj(s=>{if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},(s,m)=>{if(s>=s)if(m<0)for(;++m<=0;)for(;e(s,-1),!a(s););else for(;--m>=0;)for(;e(s,1),!a(s););}),n&&(i.count=(a,s)=>(ue.setTime(+a),fe.setTime(+s),t(ue),t(fe),Math.floor(n(ue,fe))),i.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(r?s=>r(s)%a===0:s=>i.count(0,s)%a===0):i)),i}const Yt=j(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);Yt.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?j(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):Yt);Yt.range;const ft=1e3,it=ft*60,ht=it*60,dt=ht*24,we=dt*7,We=dt*30,he=dt*365,gt=j(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCSeconds());gt.range;const Ot=j(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft)},(t,e)=>{t.setTime(+t+e*it)},(t,e)=>(e-t)/it,t=>t.getMinutes());Ot.range;const hr=j(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*it)},(t,e)=>(e-t)/it,t=>t.getUTCMinutes());hr.range;const Ht=j(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ft-t.getMinutes()*it)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getHours());Ht.range;const dr=j(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getUTCHours());dr.range;const Tt=j(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*it)/dt,t=>t.getDate()-1);Tt.range;const Ce=j(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>t.getUTCDate()-1);Ce.range;const mr=j(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/dt,t=>Math.floor(t/dt));mr.range;function xt(t){return j(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*it)/we)}const zt=xt(0),Nt=xt(1),un=xt(2),fn=xt(3),vt=xt(4),hn=xt(5),dn=xt(6);zt.range;Nt.range;un.range;fn.range;vt.range;hn.range;dn.range;function wt(t){return j(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/we)}const mn=wt(0),te=wt(1),gr=wt(2),yr=wt(3),Ut=wt(4),kr=wt(5),pr=wt(6);mn.range;te.range;gr.range;yr.range;Ut.range;kr.range;pr.range;const Vt=j(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Vt.range;const Tr=j(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());Tr.range;const mt=j(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());mt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:j(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});mt.range;const bt=j(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:j(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});bt.range;function vr(t,e,n,r,i,a){const s=[[gt,1,ft],[gt,5,5*ft],[gt,15,15*ft],[gt,30,30*ft],[a,1,it],[a,5,5*it],[a,15,15*it],[a,30,30*it],[i,1,ht],[i,3,3*ht],[i,6,6*ht],[i,12,12*ht],[r,1,dt],[r,2,2*dt],[n,1,we],[e,1,We],[e,3,3*We],[t,1,he]];function m(k,y,_){const b=yR).right(s,b);if(p===s.length)return t.every(Ee(k/he,y/he,_));if(p===0)return Yt.every(Math.max(Ee(k,y,_),1));const[E,D]=s[b/s[p-1][2]53)return null;"w"in l||(l.w=1),"Z"in l?(N=me(Lt(l.y,0,1)),G=N.getUTCDay(),N=G>4||G===0?te.ceil(N):te(N),N=Ce.offset(N,(l.V-1)*7),l.y=N.getUTCFullYear(),l.m=N.getUTCMonth(),l.d=N.getUTCDate()+(l.w+6)%7):(N=de(Lt(l.y,0,1)),G=N.getDay(),N=G>4||G===0?Nt.ceil(N):Nt(N),N=Tt.offset(N,(l.V-1)*7),l.y=N.getFullYear(),l.m=N.getMonth(),l.d=N.getDate()+(l.w+6)%7)}else("W"in l||"U"in l)&&("w"in l||(l.w="u"in l?l.u%7:"W"in l?1:0),G="Z"in l?me(Lt(l.y,0,1)).getUTCDay():de(Lt(l.y,0,1)).getDay(),l.m=0,l.d="W"in l?(l.w+6)%7+l.W*7-(G+5)%7:l.w+l.U*7-(G+6)%7);return"Z"in l?(l.H+=l.Z/100|0,l.M+=l.Z%100,me(l)):de(l)}}function w(v,A,M,l){for(var z=0,N=A.length,G=M.length,$,et;z=G)return-1;if($=A.charCodeAt(z++),$===37){if($=A.charAt(z++),et=J[$ in Oe?A.charAt(z++):$],!et||(l=et(v,M,l))<0)return-1}else if($!=M.charCodeAt(l++))return-1}return l}function F(v,A,M){var l=k.exec(A.slice(M));return l?(v.p=y.get(l[0].toLowerCase()),M+l[0].length):-1}function U(v,A,M){var l=p.exec(A.slice(M));return l?(v.w=E.get(l[0].toLowerCase()),M+l[0].length):-1}function C(v,A,M){var l=_.exec(A.slice(M));return l?(v.w=b.get(l[0].toLowerCase()),M+l[0].length):-1}function c(v,A,M){var l=X.exec(A.slice(M));return l?(v.m=tt.get(l[0].toLowerCase()),M+l[0].length):-1}function d(v,A,M){var l=D.exec(A.slice(M));return l?(v.m=R.get(l[0].toLowerCase()),M+l[0].length):-1}function g(v,A,M){return w(v,e,A,M)}function u(v,A,M){return w(v,n,A,M)}function S(v,A,M){return w(v,r,A,M)}function o(v){return s[v.getDay()]}function q(v){return a[v.getDay()]}function h(v){return T[v.getMonth()]}function f(v){return m[v.getMonth()]}function Y(v){return i[+(v.getHours()>=12)]}function P(v){return 1+~~(v.getMonth()/3)}function I(v){return s[v.getUTCDay()]}function O(v){return a[v.getUTCDay()]}function L(v){return T[v.getUTCMonth()]}function H(v){return m[v.getUTCMonth()]}function kt(v){return i[+(v.getUTCHours()>=12)]}function pt(v){return 1+~~(v.getUTCMonth()/3)}return{format:function(v){var A=x(v+="",B);return A.toString=function(){return v},A},parse:function(v){var A=V(v+="",!1);return A.toString=function(){return v},A},utcFormat:function(v){var A=x(v+="",Z);return A.toString=function(){return v},A},utcParse:function(v){var A=V(v+="",!0);return A.toString=function(){return v},A}}}var Oe={"-":"",_:" ",0:"0"},K=/^\s*\d+/,Cr=/^%/,Dr=/[\\^$*+?|[\]().{}]/g;function W(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a[e.toLowerCase(),n]))}function Sr(t,e,n){var r=K.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function _r(t,e,n){var r=K.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Ur(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Fr(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function He(t,e,n){var r=K.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ne(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ar(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Lr(t,e,n){var r=K.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Er(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ve(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Ir(t,e,n){var r=K.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ze(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Wr(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=K.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Hr(t,e,n){var r=K.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Nr(t,e,n){var r=K.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Vr(t,e,n){var r=Cr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function zr(t,e,n){var r=K.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Pr(t,e,n){var r=K.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Pe(t,e){return W(t.getDate(),e,2)}function Rr(t,e){return W(t.getHours(),e,2)}function Br(t,e){return W(t.getHours()%12||12,e,2)}function Zr(t,e){return W(1+Tt.count(mt(t),t),e,3)}function gn(t,e){return W(t.getMilliseconds(),e,3)}function Xr(t,e){return gn(t,e)+"000"}function qr(t,e){return W(t.getMonth()+1,e,2)}function Gr(t,e){return W(t.getMinutes(),e,2)}function Qr(t,e){return W(t.getSeconds(),e,2)}function jr(t){var e=t.getDay();return e===0?7:e}function Jr(t,e){return W(zt.count(mt(t)-1,t),e,2)}function yn(t){var e=t.getDay();return e>=4||e===0?vt(t):vt.ceil(t)}function $r(t,e){return t=yn(t),W(vt.count(mt(t),t)+(mt(t).getDay()===4),e,2)}function Kr(t){return t.getDay()}function ti(t,e){return W(Nt.count(mt(t)-1,t),e,2)}function ei(t,e){return W(t.getFullYear()%100,e,2)}function ni(t,e){return t=yn(t),W(t.getFullYear()%100,e,2)}function ri(t,e){return W(t.getFullYear()%1e4,e,4)}function ii(t,e){var n=t.getDay();return t=n>=4||n===0?vt(t):vt.ceil(t),W(t.getFullYear()%1e4,e,4)}function ai(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+W(e/60|0,"0",2)+W(e%60,"0",2)}function Re(t,e){return W(t.getUTCDate(),e,2)}function si(t,e){return W(t.getUTCHours(),e,2)}function oi(t,e){return W(t.getUTCHours()%12||12,e,2)}function ci(t,e){return W(1+Ce.count(bt(t),t),e,3)}function kn(t,e){return W(t.getUTCMilliseconds(),e,3)}function li(t,e){return kn(t,e)+"000"}function ui(t,e){return W(t.getUTCMonth()+1,e,2)}function fi(t,e){return W(t.getUTCMinutes(),e,2)}function hi(t,e){return W(t.getUTCSeconds(),e,2)}function di(t){var e=t.getUTCDay();return e===0?7:e}function mi(t,e){return W(mn.count(bt(t)-1,t),e,2)}function pn(t){var e=t.getUTCDay();return e>=4||e===0?Ut(t):Ut.ceil(t)}function gi(t,e){return t=pn(t),W(Ut.count(bt(t),t)+(bt(t).getUTCDay()===4),e,2)}function yi(t){return t.getUTCDay()}function ki(t,e){return W(te.count(bt(t)-1,t),e,2)}function pi(t,e){return W(t.getUTCFullYear()%100,e,2)}function Ti(t,e){return t=pn(t),W(t.getUTCFullYear()%100,e,2)}function vi(t,e){return W(t.getUTCFullYear()%1e4,e,4)}function bi(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Ut(t):Ut.ceil(t),W(t.getUTCFullYear()%1e4,e,4)}function xi(){return"+0000"}function Be(){return"%"}function Ze(t){return+t}function Xe(t){return Math.floor(+t/1e3)}var Dt,ee;wi({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function wi(t){return Dt=wr(t),ee=Dt.format,Dt.parse,Dt.utcFormat,Dt.utcParse,Dt}function Ci(t){return new Date(t)}function Di(t){return t instanceof Date?+t:+new Date(+t)}function Tn(t,e,n,r,i,a,s,m,T,k){var y=Bn(),_=y.invert,b=y.domain,p=k(".%L"),E=k(":%S"),D=k("%I:%M"),R=k("%I %p"),X=k("%a %d"),tt=k("%b %d"),B=k("%B"),Z=k("%Y");function J(x){return(T(x)4&&(_+=7),y.add(_,ge)},i=function(T){return T.add(4-T.isoWeekday(),ge)},a=e.prototype;a.isoWeekYear=function(){var m=i(this);return m.year()},a.isoWeek=function(m){if(!this.$utils().u(m))return this.add((m-this.isoWeek())*7,ge);var T=i(this),k=r(this.isoWeekYear(),this.$u);return T.diff(k,Si)+1},a.isoWeekday=function(m){return this.$utils().u(m)?this.day()||7:this.day(this.day()%7?m:m-7)};var s=a.startOf;a.startOf=function(m,T){var k=this.$utils(),y=k.u(T)?!0:T,_=k.p(m);return _===Ui?y?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):s.bind(this)(m,T)}};var Ai=function(e){return e.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(n,r,i){return r||i.slice(1)})},Li={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ei=function(e,n){return e.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(r,i,a){var s=a&&a.toUpperCase();return i||n[a]||Li[a]||Ai(n[s])})},Ii=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,Wi=/\d/,Gt=/\d\d/,Oi=/\d{3}/,Hi=/\d{4}/,at=/\d\d?/,Ni=/[+-]?\d+/,Vi=/[+-]\d\d:?(\d\d)?|Z/,Wt=/\d*[^-_:/,()\s\d]+/,yt={},vn=function(e){return e=+e,e+(e>68?1900:2e3)};function zi(t){if(!t||t==="Z")return 0;var e=t.match(/([+-]|\d\d)/g),n=+(e[1]*60)+(+e[2]||0);return n===0?0:e[0]==="+"?-n:n}var rt=function(e){return function(n){this[e]=+n}},qe=[Vi,function(t){var e=this.zone||(this.zone={});e.offset=zi(t)}],ye=function(e){var n=yt[e];return n&&(n.indexOf?n:n.s.concat(n.f))},Ge=function(e,n){var r,i=yt,a=i.meridiem;if(!a)r=e===(n?"pm":"PM");else for(var s=1;s<=24;s+=1)if(e.indexOf(a(s,0,n))>-1){r=s>12;break}return r},Pi={A:[Wt,function(t){this.afternoon=Ge(t,!1)}],a:[Wt,function(t){this.afternoon=Ge(t,!0)}],S:[Wi,function(t){this.milliseconds=+t*100}],SS:[Gt,function(t){this.milliseconds=+t*10}],SSS:[Oi,function(t){this.milliseconds=+t}],s:[at,rt("seconds")],ss:[at,rt("seconds")],m:[at,rt("minutes")],mm:[at,rt("minutes")],H:[at,rt("hours")],h:[at,rt("hours")],HH:[at,rt("hours")],hh:[at,rt("hours")],D:[at,rt("day")],DD:[Gt,rt("day")],Do:[Wt,function(t){var e=yt,n=e.ordinal,r=t.match(/\d+/);if(this.day=r[0],!!n)for(var i=1;i<=31;i+=1)n(i).replace(/\[|\]/g,"")===t&&(this.day=i)}],M:[at,rt("month")],MM:[Gt,rt("month")],MMM:[Wt,function(t){var e=ye("months"),n=ye("monthsShort"),r=(n||e.map(function(i){return i.slice(0,3)})).indexOf(t)+1;if(r<1)throw new Error;this.month=r%12||r}],MMMM:[Wt,function(t){var e=ye("months"),n=e.indexOf(t)+1;if(n<1)throw new Error;this.month=n%12||n}],Y:[Ni,rt("year")],YY:[Gt,function(t){this.year=vn(t)}],YYYY:[Hi,rt("year")],Z:qe,ZZ:qe};function Ri(t){var e=t.afternoon;if(e!==void 0){var n=t.hours;e?n<12&&(t.hours+=12):n===12&&(t.hours=0),delete t.afternoon}}function Bi(t){t=Ei(t,yt&&yt.formats);for(var e=t.match(Ii),n=e.length,r=0;r-1)return new Date((n==="X"?1e3:1)*e);var i=Bi(n),a=i(e),s=a.year,m=a.month,T=a.day,k=a.hours,y=a.minutes,_=a.seconds,b=a.milliseconds,p=a.zone,E=new Date,D=T||(!s&&!m?E.getDate():1),R=s||E.getFullYear(),X=0;s&&!m||(X=m>0?m-1:E.getMonth());var tt=k||0,B=y||0,Z=_||0,J=b||0;return p?new Date(Date.UTC(R,X,D,tt,B,Z,J+p.offset*60*1e3)):r?new Date(Date.UTC(R,X,D,tt,B,Z,J)):new Date(R,X,D,tt,B,Z,J)}catch{return new Date("")}};const Xi=function(t,e,n){n.p.customParseFormat=!0,t&&t.parseTwoDigitYear&&(vn=t.parseTwoDigitYear);var r=e.prototype,i=r.parse;r.parse=function(a){var s=a.date,m=a.utc,T=a.args;this.$u=m;var k=T[1];if(typeof k=="string"){var y=T[2]===!0,_=T[3]===!0,b=y||_,p=T[2];_&&(p=T[2]),yt=this.$locale(),!y&&p&&(yt=n.Ls[p]),this.$d=Zi(s,k,m),this.init(),p&&p!==!0&&(this.$L=this.locale(p).$L),b&&s!=this.format(k)&&(this.$d=new Date("")),yt={}}else if(k instanceof Array)for(var E=k.length,D=1;D<=E;D+=1){T[1]=k[D-1];var R=n.apply(this,T);if(R.isValid()){this.$d=R.$d,this.$L=R.$L,this.init();break}D===E&&(this.$d=new Date(""))}else i.call(this,a)}},qi=function(t,e){var n=e.prototype,r=n.format;n.format=function(i){var a=this,s=this.$locale();if(!this.isValid())return r.bind(this)(i);var m=this.$utils(),T=i||Yi,k=T.replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(y){switch(y){case"Q":return Math.ceil((a.$M+1)/3);case"Do":return s.ordinal(a.$D);case"gggg":return a.weekYear();case"GGGG":return a.isoWeekYear();case"wo":return s.ordinal(a.week(),"W");case"w":case"ww":return m.s(a.week(),y==="w"?1:2,"0");case"W":case"WW":return m.s(a.isoWeek(),y==="W"?1:2,"0");case"k":case"kk":return m.s(String(a.$H===0?24:a.$H),y==="k"?1:2,"0");case"X":return Math.floor(a.$d.getTime()/1e3);case"x":return a.$d.getTime();case"z":return"["+a.offsetName()+"]";case"zzz":return"["+a.offsetName("long")+"]";default:return y}});return r.bind(this)(k)}};var Te=function(){var t=function(C,c,d,g){for(d=d||{},g=C.length;g--;d[C[g]]=c);return d},e=[6,8,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,32,33,35,37],n=[1,25],r=[1,26],i=[1,27],a=[1,28],s=[1,29],m=[1,30],T=[1,31],k=[1,9],y=[1,10],_=[1,11],b=[1,12],p=[1,13],E=[1,14],D=[1,15],R=[1,16],X=[1,18],tt=[1,19],B=[1,20],Z=[1,21],J=[1,22],x=[1,24],V=[1,32],w={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,dateFormat:19,inclusiveEndDates:20,topAxis:21,axisFormat:22,tickInterval:23,excludes:24,includes:25,todayMarker:26,title:27,acc_title:28,acc_title_value:29,acc_descr:30,acc_descr_value:31,acc_descr_multiline_value:32,section:33,clickStatement:34,taskTxt:35,taskData:36,click:37,callbackname:38,callbackargs:39,href:40,clickStatementDebug:41,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",19:"dateFormat",20:"inclusiveEndDates",21:"topAxis",22:"axisFormat",23:"tickInterval",24:"excludes",25:"includes",26:"todayMarker",27:"title",28:"acc_title",29:"acc_title_value",30:"acc_descr",31:"acc_descr_value",32:"acc_descr_multiline_value",33:"section",35:"taskTxt",36:"taskData",37:"click",38:"callbackname",39:"callbackargs",40:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[34,2],[34,3],[34,3],[34,4],[34,3],[34,4],[34,2],[41,2],[41,3],[41,3],[41,4],[41,3],[41,4],[41,2]],performAction:function(c,d,g,u,S,o,q){var h=o.length-1;switch(S){case 1:return o[h-1];case 2:this.$=[];break;case 3:o[h-1].push(o[h]),this.$=o[h-1];break;case 4:case 5:this.$=o[h];break;case 6:case 7:this.$=[];break;case 8:u.setWeekday("monday");break;case 9:u.setWeekday("tuesday");break;case 10:u.setWeekday("wednesday");break;case 11:u.setWeekday("thursday");break;case 12:u.setWeekday("friday");break;case 13:u.setWeekday("saturday");break;case 14:u.setWeekday("sunday");break;case 15:u.setDateFormat(o[h].substr(11)),this.$=o[h].substr(11);break;case 16:u.enableInclusiveEndDates(),this.$=o[h].substr(18);break;case 17:u.TopAxis(),this.$=o[h].substr(8);break;case 18:u.setAxisFormat(o[h].substr(11)),this.$=o[h].substr(11);break;case 19:u.setTickInterval(o[h].substr(13)),this.$=o[h].substr(13);break;case 20:u.setExcludes(o[h].substr(9)),this.$=o[h].substr(9);break;case 21:u.setIncludes(o[h].substr(9)),this.$=o[h].substr(9);break;case 22:u.setTodayMarker(o[h].substr(12)),this.$=o[h].substr(12);break;case 24:u.setDiagramTitle(o[h].substr(6)),this.$=o[h].substr(6);break;case 25:this.$=o[h].trim(),u.setAccTitle(this.$);break;case 26:case 27:this.$=o[h].trim(),u.setAccDescription(this.$);break;case 28:u.addSection(o[h].substr(8)),this.$=o[h].substr(8);break;case 30:u.addTask(o[h-1],o[h]),this.$="task";break;case 31:this.$=o[h-1],u.setClickEvent(o[h-1],o[h],null);break;case 32:this.$=o[h-2],u.setClickEvent(o[h-2],o[h-1],o[h]);break;case 33:this.$=o[h-2],u.setClickEvent(o[h-2],o[h-1],null),u.setLink(o[h-2],o[h]);break;case 34:this.$=o[h-3],u.setClickEvent(o[h-3],o[h-2],o[h-1]),u.setLink(o[h-3],o[h]);break;case 35:this.$=o[h-2],u.setClickEvent(o[h-2],o[h],null),u.setLink(o[h-2],o[h-1]);break;case 36:this.$=o[h-3],u.setClickEvent(o[h-3],o[h-1],o[h]),u.setLink(o[h-3],o[h-2]);break;case 37:this.$=o[h-1],u.setLink(o[h-1],o[h]);break;case 38:case 44:this.$=o[h-1]+" "+o[h];break;case 39:case 40:case 42:this.$=o[h-2]+" "+o[h-1]+" "+o[h];break;case 41:case 43:this.$=o[h-3]+" "+o[h-2]+" "+o[h-1]+" "+o[h];break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:i,15:a,16:s,17:m,18:T,19:k,20:y,21:_,22:b,23:p,24:E,25:D,26:R,27:X,28:tt,30:B,32:Z,33:J,34:23,35:x,37:V},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:33,11:17,12:n,13:r,14:i,15:a,16:s,17:m,18:T,19:k,20:y,21:_,22:b,23:p,24:E,25:D,26:R,27:X,28:tt,30:B,32:Z,33:J,34:23,35:x,37:V},t(e,[2,5]),t(e,[2,6]),t(e,[2,15]),t(e,[2,16]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),{29:[1,34]},{31:[1,35]},t(e,[2,27]),t(e,[2,28]),t(e,[2,29]),{36:[1,36]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),{38:[1,37],40:[1,38]},t(e,[2,4]),t(e,[2,25]),t(e,[2,26]),t(e,[2,30]),t(e,[2,31],{39:[1,39],40:[1,40]}),t(e,[2,37],{38:[1,41]}),t(e,[2,32],{40:[1,42]}),t(e,[2,33]),t(e,[2,35],{39:[1,43]}),t(e,[2,34]),t(e,[2,36])],defaultActions:{},parseError:function(c,d){if(d.recoverable)this.trace(c);else{var g=new Error(c);throw g.hash=d,g}},parse:function(c){var d=this,g=[0],u=[],S=[null],o=[],q=this.table,h="",f=0,Y=0,P=2,I=1,O=o.slice.call(arguments,1),L=Object.create(this.lexer),H={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(H.yy[kt]=this.yy[kt]);L.setInput(c,H.yy),H.yy.lexer=L,H.yy.parser=this,typeof L.yylloc>"u"&&(L.yylloc={});var pt=L.yylloc;o.push(pt);var v=L.options&&L.options.ranges;typeof H.yy.parseError=="function"?this.parseError=H.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function A(){var ct;return ct=u.pop()||L.lex()||I,typeof ct!="number"&&(ct instanceof Array&&(u=ct,ct=u.pop()),ct=d.symbols_[ct]||ct),ct}for(var M,l,z,N,G={},$,et,At,Zt;;){if(l=g[g.length-1],this.defaultActions[l]?z=this.defaultActions[l]:((M===null||typeof M>"u")&&(M=A()),z=q[l]&&q[l][M]),typeof z>"u"||!z.length||!z[0]){var re="";Zt=[];for($ in q[l])this.terminals_[$]&&$>P&&Zt.push("'"+this.terminals_[$]+"'");L.showPosition?re="Parse error on line "+(f+1)+`: `+L.showPosition()+` -Expecting `+Zt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":re="Parse error on line "+(f+1)+": Unexpected "+(M==I?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(re,{text:L.match,token:this.terminals_[M]||M,line:L.yylineno,loc:pt,expected:Zt})}if(P[0]instanceof Array&&P.length>1)throw new Error("Parse Error: multiple actions possible at state: "+l+", token: "+M);switch(P[0]){case 1:g.push(M),S.push(L.yytext),o.push(L.yylloc),g.push(P[1]),M=null,Y=L.yyleng,h=L.yytext,f=L.yylineno,pt=L.yylloc;break;case 2:if(et=this.productions_[P[1]][1],G.$=S[S.length-et],G._$={first_line:o[o.length-(et||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(et||1)].first_column,last_column:o[o.length-1].last_column},v&&(G._$.range=[o[o.length-(et||1)].range[0],o[o.length-1].range[1]]),N=this.performAction.apply(G,[h,Y,f,H.yy,P[1],S,o].concat(O)),typeof N<"u")return N;et&&(g=g.slice(0,-1*et*2),S=S.slice(0,-1*et),o=o.slice(0,-1*et)),g.push(this.productions_[P[1]][0]),S.push(G.$),o.push(G._$),At=q[g[g.length-2]][g[g.length-1]],g.push(At);break;case 3:return!0}}return!0}},F=function(){var C={EOF:1,parseError:function(d,g){if(this.yy.parser)this.yy.parser.parseError(d,g);else throw new Error(d)},setInput:function(c,d){return this.yy=d||this.yy||{},this._input=c,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var c=this._input[0];this.yytext+=c,this.yyleng++,this.offset++,this.match+=c,this.matched+=c;var d=c.match(/(?:\r\n?|\n).*/g);return d?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),c},unput:function(c){var d=c.length,g=c.split(/(?:\r\n?|\n)/g);this._input=c+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-d),this.offset-=d;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===u.length?this.yylloc.first_column:0)+u[u.length-g.length].length-g[0].length:this.yylloc.first_column-d},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-d]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+Zt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":re="Parse error on line "+(f+1)+": Unexpected "+(M==I?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(re,{text:L.match,token:this.terminals_[M]||M,line:L.yylineno,loc:pt,expected:Zt})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+l+", token: "+M);switch(z[0]){case 1:g.push(M),S.push(L.yytext),o.push(L.yylloc),g.push(z[1]),M=null,Y=L.yyleng,h=L.yytext,f=L.yylineno,pt=L.yylloc;break;case 2:if(et=this.productions_[z[1]][1],G.$=S[S.length-et],G._$={first_line:o[o.length-(et||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(et||1)].first_column,last_column:o[o.length-1].last_column},v&&(G._$.range=[o[o.length-(et||1)].range[0],o[o.length-1].range[1]]),N=this.performAction.apply(G,[h,Y,f,H.yy,z[1],S,o].concat(O)),typeof N<"u")return N;et&&(g=g.slice(0,-1*et*2),S=S.slice(0,-1*et),o=o.slice(0,-1*et)),g.push(this.productions_[z[1]][0]),S.push(G.$),o.push(G._$),At=q[g[g.length-2]][g[g.length-1]],g.push(At);break;case 3:return!0}}return!0}},F=function(){var C={EOF:1,parseError:function(d,g){if(this.yy.parser)this.yy.parser.parseError(d,g);else throw new Error(d)},setInput:function(c,d){return this.yy=d||this.yy||{},this._input=c,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var c=this._input[0];this.yytext+=c,this.yyleng++,this.offset++,this.match+=c,this.matched+=c;var d=c.match(/(?:\r\n?|\n).*/g);return d?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),c},unput:function(c){var d=c.length,g=c.split(/(?:\r\n?|\n)/g);this._input=c+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-d),this.offset-=d;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var S=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===u.length?this.yylloc.first_column:0)+u[u.length-g.length].length-g[0].length:this.yylloc.first_column-d},this.options.ranges&&(this.yylloc.range=[S[0],S[0]+this.yyleng-d]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(c){this.unput(this.match.slice(c))},pastInput:function(){var c=this.matched.substr(0,this.matched.length-this.match.length);return(c.length>20?"...":"")+c.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var c=this.match;return c.length<20&&(c+=this._input.substr(0,20-c.length)),(c.substr(0,20)+(c.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var c=this.pastInput(),d=new Array(c.length+1).join("-");return c+this.upcomingInput()+` `+d+"^"},test_match:function(c,d){var g,u,S;if(this.options.backtrack_lexer&&(S={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(S.yylloc.range=this.yylloc.range.slice(0))),u=c[0].match(/(?:\r\n?|\n).*/g),u&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+c[0].length},this.yytext+=c[0],this.match+=c[0],this.matches=c,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(c[0].length),this.matched+=c[0],g=this.performAction.call(this,this.yy,this,d,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),g)return g;if(this._backtrack){for(var o in S)this[o]=S[o];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var c,d,g,u;this._more||(this.yytext="",this.match="");for(var S=this._currentRules(),o=0;od[0].length)){if(d=g,u=o,this.options.backtrack_lexer){if(c=this.test_match(g,S[o]),c!==!1)return c;if(this._backtrack){d=!1;continue}else return!1}else if(!this.options.flex)break}return d?(c=this.test_match(d,S[u]),c!==!1?c:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var d=this.next();return d||this.lex()},begin:function(d){this.conditionStack.push(d)},popState:function(){var d=this.conditionStack.length-1;return d>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(d){return d=this.conditionStack.length-1-Math.abs(d||0),d>=0?this.conditionStack[d]:"INITIAL"},pushState:function(d){this.begin(d)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(d,g,u,S){switch(u){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 40;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 38;case 21:this.popState();break;case 22:return 39;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 37;case 26:return 4;case 27:return 19;case 28:return 20;case 29:return 21;case 30:return 22;case 31:return 23;case 32:return 25;case 33:return 24;case 34:return 26;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return"date";case 43:return 27;case 44:return"accDescription";case 45:return 33;case 46:return 35;case 47:return 36;case 48:return":";case 49:return 6;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};return C}();w.lexer=F;function U(){this.yy={}}return U.prototype=w,w.Parser=U,new U}();Te.parser=Te;const Gi=Te;nt.extend(Fi);nt.extend(Xi);nt.extend(qi);let st="",De="",Me,Se="",zt=[],Rt=[],_e={},Ye=[],ne=[],Ft="",Ue="";const bn=["active","done","crit","milestone"];let Fe=[],Bt=!1,Ae=!1,Le="sunday",ve=0;const Qi=function(){Ye=[],ne=[],Ft="",Fe=[],jt=0,xe=void 0,Jt=void 0,Q=[],st="",De="",Ue="",Me=void 0,Se="",zt=[],Rt=[],Bt=!1,Ae=!1,ve=0,_e={},Hn(),Le="sunday"},ji=function(t){De=t},Ji=function(){return De},$i=function(t){Me=t},Ki=function(){return Me},ta=function(t){Se=t},ea=function(){return Se},na=function(t){st=t},ra=function(){Bt=!0},ia=function(){return Bt},aa=function(){Ae=!0},sa=function(){return Ae},oa=function(t){Ue=t},ca=function(){return Ue},la=function(){return st},ua=function(t){zt=t.toLowerCase().split(/[\s,]+/)},fa=function(){return zt},ha=function(t){Rt=t.toLowerCase().split(/[\s,]+/)},da=function(){return Rt},ma=function(){return _e},ga=function(t){Ft=t,Ye.push(t)},ya=function(){return Ye},ka=function(){let t=Qe();const e=10;let n=0;for(;!t&&n=6&&n.includes("weekends")||n.includes(t.format("dddd").toLowerCase())?!0:n.includes(t.format(e.trim()))},pa=function(t){Le=t},Ta=function(){return Le},wn=function(t,e,n,r){if(!n.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=nt(t.startTime):i=nt(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=nt(t.endTime):a=nt(t.endTime,e,!0);const[s,m]=va(i,a,e,n,r);t.endTime=s.toDate(),t.renderEndTime=m},va=function(t,e,n,r,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=xn(t,n,r,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},be=function(t,e,n){n=n.trim();const i=/^after\s+(?[\d\w- ]+)/.exec(n);if(i!==null){let s=null;for(const T of i.groups.ids.split(" ")){let k=Ct(T);k!==void 0&&(!s||k.endTime>s.endTime)&&(s=k)}if(s)return s.endTime;const m=new Date;return m.setHours(0,0,0,0),m}let a=nt(n,e.trim(),!0);if(a.isValid())return a.toDate();{$t.debug("Invalid date:"+n),$t.debug("With date format:"+e.trim());const s=new Date(n);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+n);return s}},Cn=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},Dn=function(t,e,n,r=!1){n=n.trim();const a=/^until\s+(?[\d\w- ]+)/.exec(n);if(a!==null){let y=null;for(const b of a.groups.ids.split(" ")){let p=Ct(b);p!==void 0&&(!y||p.startTime{window.open(n,"_self")}),_e[r]=n)}),Sn(t,"clickable")},Sn=function(t,e){t.split(",").forEach(function(n){let r=Ct(n);r!==void 0&&r.classes.push(e)})},Ma=function(t,e,n){if(Mt().securityLevel!=="loose"||e===void 0)return;let r=[];if(typeof n=="string"){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{zn.runFunc(e,...r)})},_n=function(t,e){Fe.push(function(){const n=document.querySelector(`[id="${t}"]`);n!==null&&n.addEventListener("click",function(){e()})},function(){const n=document.querySelector(`[id="${t}-text"]`);n!==null&&n.addEventListener("click",function(){e()})})},Sa=function(t,e,n){t.split(",").forEach(function(r){Ma(r,e,n)}),Sn(t,"clickable")},_a=function(t){Fe.forEach(function(e){e(t)})},Ya={getConfig:()=>Mt().gantt,clear:Qi,setDateFormat:na,getDateFormat:la,enableInclusiveEndDates:ra,endDatesAreInclusive:ia,enableTopAxis:aa,topAxisEnabled:sa,setAxisFormat:ji,getAxisFormat:Ji,setTickInterval:$i,getTickInterval:Ki,setTodayMarker:ta,getTodayMarker:ea,setAccTitle:An,getAccTitle:Ln,setDiagramTitle:En,getDiagramTitle:In,setDisplayMode:oa,getDisplayMode:ca,setAccDescription:Wn,getAccDescription:On,addSection:ga,getSections:ya,getTasks:ka,addTask:wa,findTaskById:Ct,addTaskOrg:Ca,setIncludes:ua,getIncludes:fa,setExcludes:ha,getExcludes:da,setClickEvent:Sa,setLink:Da,getLinks:ma,bindFunctions:_a,parseDuration:Cn,isInvalidDate:xn,setWeekday:pa,getWeekday:Ta};function Yn(t,e,n){let r=!0;for(;r;)r=!1,n.forEach(function(i){const a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),r=!0)})}const Ua=function(){$t.debug("Something is calling, setConf, remove the call")},je={monday:Nt,tuesday:un,wednesday:fn,thursday:vt,friday:hn,saturday:dn,sunday:Pt},Fa=(t,e)=>{let n=[...t].map(()=>-1/0),r=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(const a of r)for(let s=0;s=n[s]){n[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i};let lt;const Aa=function(t,e,n,r){const i=Mt().gantt,a=Mt().securityLevel;let s;a==="sandbox"&&(s=Xt("#i"+e));const m=a==="sandbox"?Xt(s.nodes()[0].contentDocument.body):Xt("body"),T=a==="sandbox"?s.nodes()[0].contentDocument:document,k=T.getElementById(e);lt=k.parentElement.offsetWidth,lt===void 0&&(lt=1200),i.useWidth!==void 0&&(lt=i.useWidth);const y=r.db.getTasks();let _=[];for(const w of y)_.push(w.type);_=V(_);const b={};let p=2*i.topPadding;if(r.db.getDisplayMode()==="compact"||i.displayMode==="compact"){const w={};for(const U of y)w[U.section]===void 0?w[U.section]=[U]:w[U.section].push(U);let F=0;for(const U of Object.keys(w)){const C=Fa(w[U],F)+1;F+=C,p+=C*(i.barHeight+i.barGap),b[U]=C}}else{p+=y.length*(i.barHeight+i.barGap);for(const w of _)b[w]=y.filter(F=>F.type===w).length}k.setAttribute("viewBox","0 0 "+lt+" "+p);const E=m.select(`[id="${e}"]`),D=Mi().domain([Qn(y,function(w){return w.startTime}),Gn(y,function(w){return w.endTime})]).rangeRound([0,lt-i.leftPadding-i.rightPadding]);function R(w,F){const U=w.startTime,C=F.startTime;let c=0;return U>C?c=1:Uf.order))].map(f=>w.find(Y=>Y.order===f));E.append("g").selectAll("rect").data(S).enter().append("rect").attr("x",0).attr("y",function(f,Y){return Y=f.order,Y*F+U-2}).attr("width",function(){return g-i.rightPadding/2}).attr("height",F).attr("class",function(f){for(const[Y,z]of _.entries())if(f.type===z)return"section section"+Y%i.numberSectionStyles;return"section section0"});const o=E.append("g").selectAll("rect").data(w).enter(),q=r.db.getLinks();if(o.append("rect").attr("id",function(f){return f.id}).attr("rx",3).attr("ry",3).attr("x",function(f){return f.milestone?D(f.startTime)+C+.5*(D(f.endTime)-D(f.startTime))-.5*c:D(f.startTime)+C}).attr("y",function(f,Y){return Y=f.order,Y*F+U}).attr("width",function(f){return f.milestone?c:D(f.renderEndTime||f.endTime)-D(f.startTime)}).attr("height",c).attr("transform-origin",function(f,Y){return Y=f.order,(D(f.startTime)+C+.5*(D(f.endTime)-D(f.startTime))).toString()+"px "+(Y*F+U+.5*c).toString()+"px"}).attr("class",function(f){const Y="task";let z="";f.classes.length>0&&(z=f.classes.join(" "));let I=0;for(const[L,H]of _.entries())f.type===H&&(I=L%i.numberSectionStyles);let O="";return f.active?f.crit?O+=" activeCrit":O=" active":f.done?f.crit?O=" doneCrit":O=" done":f.crit&&(O+=" crit"),O.length===0&&(O=" task"),f.milestone&&(O=" milestone "+O),O+=I,O+=" "+z,Y+O}),o.append("text").attr("id",function(f){return f.id+"-text"}).text(function(f){return f.task}).attr("font-size",i.fontSize).attr("x",function(f){let Y=D(f.startTime),z=D(f.renderEndTime||f.endTime);f.milestone&&(Y+=.5*(D(f.endTime)-D(f.startTime))-.5*c),f.milestone&&(z=Y+c);const I=this.getBBox().width;return I>z-Y?z+I+1.5*i.leftPadding>g?Y+C-5:z+C+5:(z-Y)/2+Y+C}).attr("y",function(f,Y){return Y=f.order,Y*F+i.barHeight/2+(i.fontSize/2-2)+U}).attr("text-height",c).attr("class",function(f){const Y=D(f.startTime);let z=D(f.endTime);f.milestone&&(z=Y+c);const I=this.getBBox().width;let O="";f.classes.length>0&&(O=f.classes.join(" "));let L=0;for(const[kt,pt]of _.entries())f.type===pt&&(L=kt%i.numberSectionStyles);let H="";return f.active&&(f.crit?H="activeCritText"+L:H="activeText"+L),f.done?f.crit?H=H+" doneCritText"+L:H=H+" doneText"+L:f.crit&&(H=H+" critText"+L),f.milestone&&(H+=" milestoneText"),I>z-Y?z+I+1.5*i.leftPadding>g?O+" taskTextOutsideLeft taskTextOutside"+L+" "+H:O+" taskTextOutsideRight taskTextOutside"+L+" "+H+" width-"+I:O+" taskText taskText"+L+" "+H+" width-"+I}),Mt().securityLevel==="sandbox"){let f;f=Xt("#i"+e);const Y=f.nodes()[0].contentDocument;o.filter(function(z){return q[z.id]!==void 0}).each(function(z){var I=Y.querySelector("#"+z.id),O=Y.querySelector("#"+z.id+"-text");const L=I.parentNode;var H=Y.createElement("a");H.setAttribute("xlink:href",q[z.id]),H.setAttribute("target","_top"),L.appendChild(H),H.appendChild(I),H.appendChild(O)})}}function B(w,F,U,C,c,d,g,u){if(g.length===0&&u.length===0)return;let S,o;for(const{startTime:I,endTime:O}of d)(S===void 0||Io)&&(o=O);if(!S||!o)return;if(nt(o).diff(nt(S),"year")>5){$t.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const q=r.db.getDateFormat(),h=[];let f=null,Y=nt(S);for(;Y.valueOf()<=o;)r.db.isInvalidDate(Y,q,g,u)?f?f.end=Y:f={start:Y,end:Y}:f&&(h.push(f),f=null),Y=Y.add(1,"d");E.append("g").selectAll("rect").data(h).enter().append("rect").attr("id",function(I){return"exclude-"+I.start.format("YYYY-MM-DD")}).attr("x",function(I){return D(I.start)+U}).attr("y",i.gridLineStartPadding).attr("width",function(I){const O=I.end.add(1,"day");return D(O)-D(I.start)}).attr("height",c-F-i.gridLineStartPadding).attr("transform-origin",function(I,O){return(D(I.start)+U+.5*(D(I.end)-D(I.start))).toString()+"px "+(O*w+.5*c).toString()+"px"}).attr("class","exclude-range")}function Z(w,F,U,C){let c=rr(D).tickSize(-C+F+i.gridLineStartPadding).tickFormat(ee(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));const g=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(r.db.getTickInterval()||i.tickInterval);if(g!==null){const u=g[1],S=g[2],o=r.db.getWeekday()||i.weekday;switch(S){case"millisecond":c.ticks(Yt.every(u));break;case"second":c.ticks(gt.every(u));break;case"minute":c.ticks(Ot.every(u));break;case"hour":c.ticks(Ht.every(u));break;case"day":c.ticks(Tt.every(u));break;case"week":c.ticks(je[o].every(u));break;case"month":c.ticks(Vt.every(u));break}}if(E.append("g").attr("class","grid").attr("transform","translate("+w+", "+(C-50)+")").call(c).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),r.db.topAxisEnabled()||i.topAxis){let u=nr(D).tickSize(-C+F+i.gridLineStartPadding).tickFormat(ee(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(g!==null){const S=g[1],o=g[2],q=r.db.getWeekday()||i.weekday;switch(o){case"millisecond":u.ticks(Yt.every(S));break;case"second":u.ticks(gt.every(S));break;case"minute":u.ticks(Ot.every(S));break;case"hour":u.ticks(Ht.every(S));break;case"day":u.ticks(Tt.every(S));break;case"week":u.ticks(je[q].every(S));break;case"month":u.ticks(Vt.every(S));break}}E.append("g").attr("class","grid").attr("transform","translate("+w+", "+F+")").call(u).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function J(w,F){let U=0;const C=Object.keys(b).map(c=>[c,b[c]]);E.append("g").selectAll("text").data(C).enter().append(function(c){const d=c[0].split(Pn.lineBreakRegex),g=-(d.length-1)/2,u=T.createElementNS("http://www.w3.org/2000/svg","text");u.setAttribute("dy",g+"em");for(const[S,o]of d.entries()){const q=T.createElementNS("http://www.w3.org/2000/svg","tspan");q.setAttribute("alignment-baseline","central"),q.setAttribute("x","10"),S>0&&q.setAttribute("dy","1em"),q.textContent=o,u.appendChild(q)}return u}).attr("x",10).attr("y",function(c,d){if(d>0)for(let g=0;g` +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var d=this.next();return d||this.lex()},begin:function(d){this.conditionStack.push(d)},popState:function(){var d=this.conditionStack.length-1;return d>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(d){return d=this.conditionStack.length-1-Math.abs(d||0),d>=0?this.conditionStack[d]:"INITIAL"},pushState:function(d){this.begin(d)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(d,g,u,S){switch(u){case 0:return this.begin("open_directive"),"open_directive";case 1:return this.begin("acc_title"),28;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),30;case 4:return this.popState(),"acc_descr_value";case 5:this.begin("acc_descr_multiline");break;case 6:this.popState();break;case 7:return"acc_descr_multiline_value";case 8:break;case 9:break;case 10:break;case 11:return 10;case 12:break;case 13:break;case 14:this.begin("href");break;case 15:this.popState();break;case 16:return 40;case 17:this.begin("callbackname");break;case 18:this.popState();break;case 19:this.popState(),this.begin("callbackargs");break;case 20:return 38;case 21:this.popState();break;case 22:return 39;case 23:this.begin("click");break;case 24:this.popState();break;case 25:return 37;case 26:return 4;case 27:return 19;case 28:return 20;case 29:return 21;case 30:return 22;case 31:return 23;case 32:return 25;case 33:return 24;case 34:return 26;case 35:return 12;case 36:return 13;case 37:return 14;case 38:return 15;case 39:return 16;case 40:return 17;case 41:return 18;case 42:return"date";case 43:return 27;case 44:return"accDescription";case 45:return 33;case 46:return 35;case 47:return 36;case 48:return":";case 49:return 6;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:tickInterval\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:weekday\s+monday\b)/i,/^(?:weekday\s+tuesday\b)/i,/^(?:weekday\s+wednesday\b)/i,/^(?:weekday\s+thursday\b)/i,/^(?:weekday\s+friday\b)/i,/^(?:weekday\s+saturday\b)/i,/^(?:weekday\s+sunday\b)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^\n]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^\n]+)/i,/^(?:[^:\n]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},callbackargs:{rules:[21,22],inclusive:!1},callbackname:{rules:[18,19,20],inclusive:!1},href:{rules:[15,16],inclusive:!1},click:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,17,23,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],inclusive:!0}}};return C}();w.lexer=F;function U(){this.yy={}}return U.prototype=w,w.Parser=U,new U}();Te.parser=Te;const Gi=Te;nt.extend(Fi);nt.extend(Xi);nt.extend(qi);let st="",De="",Me,Se="",Pt=[],Rt=[],_e={},Ye=[],ne=[],Ft="",Ue="";const bn=["active","done","crit","milestone"];let Fe=[],Bt=!1,Ae=!1,Le="sunday",ve=0;const Qi=function(){Ye=[],ne=[],Ft="",Fe=[],jt=0,xe=void 0,Jt=void 0,Q=[],st="",De="",Ue="",Me=void 0,Se="",Pt=[],Rt=[],Bt=!1,Ae=!1,ve=0,_e={},Hn(),Le="sunday"},ji=function(t){De=t},Ji=function(){return De},$i=function(t){Me=t},Ki=function(){return Me},ta=function(t){Se=t},ea=function(){return Se},na=function(t){st=t},ra=function(){Bt=!0},ia=function(){return Bt},aa=function(){Ae=!0},sa=function(){return Ae},oa=function(t){Ue=t},ca=function(){return Ue},la=function(){return st},ua=function(t){Pt=t.toLowerCase().split(/[\s,]+/)},fa=function(){return Pt},ha=function(t){Rt=t.toLowerCase().split(/[\s,]+/)},da=function(){return Rt},ma=function(){return _e},ga=function(t){Ft=t,Ye.push(t)},ya=function(){return Ye},ka=function(){let t=Qe();const e=10;let n=0;for(;!t&&n=6&&n.includes("weekends")||n.includes(t.format("dddd").toLowerCase())?!0:n.includes(t.format(e.trim()))},pa=function(t){Le=t},Ta=function(){return Le},wn=function(t,e,n,r){if(!n.length||t.manualEndTime)return;let i;t.startTime instanceof Date?i=nt(t.startTime):i=nt(t.startTime,e,!0),i=i.add(1,"d");let a;t.endTime instanceof Date?a=nt(t.endTime):a=nt(t.endTime,e,!0);const[s,m]=va(i,a,e,n,r);t.endTime=s.toDate(),t.renderEndTime=m},va=function(t,e,n,r,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=xn(t,n,r,i),a&&(e=e.add(1,"d")),t=t.add(1,"d");return[e,s]},be=function(t,e,n){n=n.trim();const i=/^after\s+(?[\d\w- ]+)/.exec(n);if(i!==null){let s=null;for(const T of i.groups.ids.split(" ")){let k=Ct(T);k!==void 0&&(!s||k.endTime>s.endTime)&&(s=k)}if(s)return s.endTime;const m=new Date;return m.setHours(0,0,0,0),m}let a=nt(n,e.trim(),!0);if(a.isValid())return a.toDate();{$t.debug("Invalid date:"+n),$t.debug("With date format:"+e.trim());const s=new Date(n);if(s===void 0||isNaN(s.getTime())||s.getFullYear()<-1e4||s.getFullYear()>1e4)throw new Error("Invalid date:"+n);return s}},Cn=function(t){const e=/^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(t.trim());return e!==null?[Number.parseFloat(e[1]),e[2]]:[NaN,"ms"]},Dn=function(t,e,n,r=!1){n=n.trim();const a=/^until\s+(?[\d\w- ]+)/.exec(n);if(a!==null){let y=null;for(const b of a.groups.ids.split(" ")){let p=Ct(b);p!==void 0&&(!y||p.startTime{window.open(n,"_self")}),_e[r]=n)}),Sn(t,"clickable")},Sn=function(t,e){t.split(",").forEach(function(n){let r=Ct(n);r!==void 0&&r.classes.push(e)})},Ma=function(t,e,n){if(Mt().securityLevel!=="loose"||e===void 0)return;let r=[];if(typeof n=="string"){r=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a{Pn.runFunc(e,...r)})},_n=function(t,e){Fe.push(function(){const n=document.querySelector(`[id="${t}"]`);n!==null&&n.addEventListener("click",function(){e()})},function(){const n=document.querySelector(`[id="${t}-text"]`);n!==null&&n.addEventListener("click",function(){e()})})},Sa=function(t,e,n){t.split(",").forEach(function(r){Ma(r,e,n)}),Sn(t,"clickable")},_a=function(t){Fe.forEach(function(e){e(t)})},Ya={getConfig:()=>Mt().gantt,clear:Qi,setDateFormat:na,getDateFormat:la,enableInclusiveEndDates:ra,endDatesAreInclusive:ia,enableTopAxis:aa,topAxisEnabled:sa,setAxisFormat:ji,getAxisFormat:Ji,setTickInterval:$i,getTickInterval:Ki,setTodayMarker:ta,getTodayMarker:ea,setAccTitle:An,getAccTitle:Ln,setDiagramTitle:En,getDiagramTitle:In,setDisplayMode:oa,getDisplayMode:ca,setAccDescription:Wn,getAccDescription:On,addSection:ga,getSections:ya,getTasks:ka,addTask:wa,findTaskById:Ct,addTaskOrg:Ca,setIncludes:ua,getIncludes:fa,setExcludes:ha,getExcludes:da,setClickEvent:Sa,setLink:Da,getLinks:ma,bindFunctions:_a,parseDuration:Cn,isInvalidDate:xn,setWeekday:pa,getWeekday:Ta};function Yn(t,e,n){let r=!0;for(;r;)r=!1,n.forEach(function(i){const a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),r=!0)})}const Ua=function(){$t.debug("Something is calling, setConf, remove the call")},je={monday:Nt,tuesday:un,wednesday:fn,thursday:vt,friday:hn,saturday:dn,sunday:zt},Fa=(t,e)=>{let n=[...t].map(()=>-1/0),r=[...t].sort((a,s)=>a.startTime-s.startTime||a.order-s.order),i=0;for(const a of r)for(let s=0;s=n[s]){n[s]=a.endTime,a.order=s+e,s>i&&(i=s);break}return i};let lt;const Aa=function(t,e,n,r){const i=Mt().gantt,a=Mt().securityLevel;let s;a==="sandbox"&&(s=Xt("#i"+e));const m=a==="sandbox"?Xt(s.nodes()[0].contentDocument.body):Xt("body"),T=a==="sandbox"?s.nodes()[0].contentDocument:document,k=T.getElementById(e);lt=k.parentElement.offsetWidth,lt===void 0&&(lt=1200),i.useWidth!==void 0&&(lt=i.useWidth);const y=r.db.getTasks();let _=[];for(const w of y)_.push(w.type);_=V(_);const b={};let p=2*i.topPadding;if(r.db.getDisplayMode()==="compact"||i.displayMode==="compact"){const w={};for(const U of y)w[U.section]===void 0?w[U.section]=[U]:w[U.section].push(U);let F=0;for(const U of Object.keys(w)){const C=Fa(w[U],F)+1;F+=C,p+=C*(i.barHeight+i.barGap),b[U]=C}}else{p+=y.length*(i.barHeight+i.barGap);for(const w of _)b[w]=y.filter(F=>F.type===w).length}k.setAttribute("viewBox","0 0 "+lt+" "+p);const E=m.select(`[id="${e}"]`),D=Mi().domain([Qn(y,function(w){return w.startTime}),Gn(y,function(w){return w.endTime})]).rangeRound([0,lt-i.leftPadding-i.rightPadding]);function R(w,F){const U=w.startTime,C=F.startTime;let c=0;return U>C?c=1:Uf.order))].map(f=>w.find(Y=>Y.order===f));E.append("g").selectAll("rect").data(S).enter().append("rect").attr("x",0).attr("y",function(f,Y){return Y=f.order,Y*F+U-2}).attr("width",function(){return g-i.rightPadding/2}).attr("height",F).attr("class",function(f){for(const[Y,P]of _.entries())if(f.type===P)return"section section"+Y%i.numberSectionStyles;return"section section0"});const o=E.append("g").selectAll("rect").data(w).enter(),q=r.db.getLinks();if(o.append("rect").attr("id",function(f){return f.id}).attr("rx",3).attr("ry",3).attr("x",function(f){return f.milestone?D(f.startTime)+C+.5*(D(f.endTime)-D(f.startTime))-.5*c:D(f.startTime)+C}).attr("y",function(f,Y){return Y=f.order,Y*F+U}).attr("width",function(f){return f.milestone?c:D(f.renderEndTime||f.endTime)-D(f.startTime)}).attr("height",c).attr("transform-origin",function(f,Y){return Y=f.order,(D(f.startTime)+C+.5*(D(f.endTime)-D(f.startTime))).toString()+"px "+(Y*F+U+.5*c).toString()+"px"}).attr("class",function(f){const Y="task";let P="";f.classes.length>0&&(P=f.classes.join(" "));let I=0;for(const[L,H]of _.entries())f.type===H&&(I=L%i.numberSectionStyles);let O="";return f.active?f.crit?O+=" activeCrit":O=" active":f.done?f.crit?O=" doneCrit":O=" done":f.crit&&(O+=" crit"),O.length===0&&(O=" task"),f.milestone&&(O=" milestone "+O),O+=I,O+=" "+P,Y+O}),o.append("text").attr("id",function(f){return f.id+"-text"}).text(function(f){return f.task}).attr("font-size",i.fontSize).attr("x",function(f){let Y=D(f.startTime),P=D(f.renderEndTime||f.endTime);f.milestone&&(Y+=.5*(D(f.endTime)-D(f.startTime))-.5*c),f.milestone&&(P=Y+c);const I=this.getBBox().width;return I>P-Y?P+I+1.5*i.leftPadding>g?Y+C-5:P+C+5:(P-Y)/2+Y+C}).attr("y",function(f,Y){return Y=f.order,Y*F+i.barHeight/2+(i.fontSize/2-2)+U}).attr("text-height",c).attr("class",function(f){const Y=D(f.startTime);let P=D(f.endTime);f.milestone&&(P=Y+c);const I=this.getBBox().width;let O="";f.classes.length>0&&(O=f.classes.join(" "));let L=0;for(const[kt,pt]of _.entries())f.type===pt&&(L=kt%i.numberSectionStyles);let H="";return f.active&&(f.crit?H="activeCritText"+L:H="activeText"+L),f.done?f.crit?H=H+" doneCritText"+L:H=H+" doneText"+L:f.crit&&(H=H+" critText"+L),f.milestone&&(H+=" milestoneText"),I>P-Y?P+I+1.5*i.leftPadding>g?O+" taskTextOutsideLeft taskTextOutside"+L+" "+H:O+" taskTextOutsideRight taskTextOutside"+L+" "+H+" width-"+I:O+" taskText taskText"+L+" "+H+" width-"+I}),Mt().securityLevel==="sandbox"){let f;f=Xt("#i"+e);const Y=f.nodes()[0].contentDocument;o.filter(function(P){return q[P.id]!==void 0}).each(function(P){var I=Y.querySelector("#"+P.id),O=Y.querySelector("#"+P.id+"-text");const L=I.parentNode;var H=Y.createElement("a");H.setAttribute("xlink:href",q[P.id]),H.setAttribute("target","_top"),L.appendChild(H),H.appendChild(I),H.appendChild(O)})}}function B(w,F,U,C,c,d,g,u){if(g.length===0&&u.length===0)return;let S,o;for(const{startTime:I,endTime:O}of d)(S===void 0||Io)&&(o=O);if(!S||!o)return;if(nt(o).diff(nt(S),"year")>5){$t.warn("The difference between the min and max time is more than 5 years. This will cause performance issues. Skipping drawing exclude days.");return}const q=r.db.getDateFormat(),h=[];let f=null,Y=nt(S);for(;Y.valueOf()<=o;)r.db.isInvalidDate(Y,q,g,u)?f?f.end=Y:f={start:Y,end:Y}:f&&(h.push(f),f=null),Y=Y.add(1,"d");E.append("g").selectAll("rect").data(h).enter().append("rect").attr("id",function(I){return"exclude-"+I.start.format("YYYY-MM-DD")}).attr("x",function(I){return D(I.start)+U}).attr("y",i.gridLineStartPadding).attr("width",function(I){const O=I.end.add(1,"day");return D(O)-D(I.start)}).attr("height",c-F-i.gridLineStartPadding).attr("transform-origin",function(I,O){return(D(I.start)+U+.5*(D(I.end)-D(I.start))).toString()+"px "+(O*w+.5*c).toString()+"px"}).attr("class","exclude-range")}function Z(w,F,U,C){let c=rr(D).tickSize(-C+F+i.gridLineStartPadding).tickFormat(ee(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));const g=/^([1-9]\d*)(millisecond|second|minute|hour|day|week|month)$/.exec(r.db.getTickInterval()||i.tickInterval);if(g!==null){const u=g[1],S=g[2],o=r.db.getWeekday()||i.weekday;switch(S){case"millisecond":c.ticks(Yt.every(u));break;case"second":c.ticks(gt.every(u));break;case"minute":c.ticks(Ot.every(u));break;case"hour":c.ticks(Ht.every(u));break;case"day":c.ticks(Tt.every(u));break;case"week":c.ticks(je[o].every(u));break;case"month":c.ticks(Vt.every(u));break}}if(E.append("g").attr("class","grid").attr("transform","translate("+w+", "+(C-50)+")").call(c).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),r.db.topAxisEnabled()||i.topAxis){let u=nr(D).tickSize(-C+F+i.gridLineStartPadding).tickFormat(ee(r.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(g!==null){const S=g[1],o=g[2],q=r.db.getWeekday()||i.weekday;switch(o){case"millisecond":u.ticks(Yt.every(S));break;case"second":u.ticks(gt.every(S));break;case"minute":u.ticks(Ot.every(S));break;case"hour":u.ticks(Ht.every(S));break;case"day":u.ticks(Tt.every(S));break;case"week":u.ticks(je[q].every(S));break;case"month":u.ticks(Vt.every(S));break}}E.append("g").attr("class","grid").attr("transform","translate("+w+", "+F+")").call(u).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function J(w,F){let U=0;const C=Object.keys(b).map(c=>[c,b[c]]);E.append("g").selectAll("text").data(C).enter().append(function(c){const d=c[0].split(zn.lineBreakRegex),g=-(d.length-1)/2,u=T.createElementNS("http://www.w3.org/2000/svg","text");u.setAttribute("dy",g+"em");for(const[S,o]of d.entries()){const q=T.createElementNS("http://www.w3.org/2000/svg","tspan");q.setAttribute("alignment-baseline","central"),q.setAttribute("x","10"),S>0&&q.setAttribute("dy","1em"),q.textContent=o,u.appendChild(q)}return u}).attr("x",10).attr("y",function(c,d){if(d>0)for(let g=0;g` .mermaid-main-font { font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } @@ -254,4 +254,4 @@ Expecting `+Zt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":re="Parse error fill: ${t.titleColor||t.textColor}; font-family: var(--mermaid-font-family, "trebuchet ms", verdana, arial, sans-serif); } -`,Ia=Ea,Pa={parser:Gi,db:Ya,renderer:La,styles:Ia};export{Pa as diagram}; +`,Ia=Ea,za={parser:Gi,db:Ya,renderer:La,styles:Ia};export{za as diagram}; diff --git a/assets/chunks/gitGraphDiagram-942e62fe.m2p8tYff.js b/assets/chunks/gitGraphDiagram-23af1bdb.xtAOwR_N.js similarity index 94% rename from assets/chunks/gitGraphDiagram-942e62fe.m2p8tYff.js rename to assets/chunks/gitGraphDiagram-23af1bdb.xtAOwR_N.js index 381d7591..ddc09540 100644 --- a/assets/chunks/gitGraphDiagram-942e62fe.m2p8tYff.js +++ b/assets/chunks/gitGraphDiagram-23af1bdb.xtAOwR_N.js @@ -1,9 +1,9 @@ -import{c as C,s as vt,g as Ct,a as Ot,b as Pt,E as Gt,F as At,l as B,j as D,G as St,h as It,A as Nt,as as Ht,at as Bt}from"../app.CbQoAe_D.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";var mt=function(){var r=function(A,o,u,d){for(u=u||{},d=A.length;d--;u[A[d]]=o);return u},n=[1,3],l=[1,6],h=[1,4],i=[1,5],c=[2,5],p=[1,12],m=[5,7,13,19,21,23,24,26,28,31,37,40,47],x=[7,13,19,21,23,24,26,28,31,37,40],y=[7,12,13,19,21,23,24,26,28,31,37,40],a=[7,13,47],R=[1,42],_=[1,41],b=[7,13,29,32,35,38,47],f=[1,55],k=[1,56],g=[1,57],E=[7,13,32,35,42,47],z={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(o,u,d,s,T,t,X){var e=t.length-1;switch(T){case 2:return t[e];case 3:return t[e-1];case 4:return s.setDirection(t[e-3]),t[e-1];case 6:s.setOptions(t[e-1]),this.$=t[e];break;case 7:t[e-1]+=t[e],this.$=t[e-1];break;case 9:this.$=[];break;case 10:t[e-1].push(t[e]),this.$=t[e-1];break;case 11:this.$=t[e-1];break;case 16:this.$=t[e].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=t[e].trim(),s.setAccDescription(this.$);break;case 19:s.addSection(t[e].substr(8)),this.$=t[e].substr(8);break;case 21:s.checkout(t[e]);break;case 22:s.branch(t[e]);break;case 23:s.branch(t[e-2],t[e]);break;case 24:s.cherryPick(t[e],"",void 0);break;case 25:s.cherryPick(t[e-2],"",void 0,t[e]);break;case 26:s.cherryPick(t[e-2],"",t[e]);break;case 27:s.cherryPick(t[e-4],"",t[e],t[e-2]);break;case 28:s.cherryPick(t[e-4],"",t[e-2],t[e]);break;case 29:s.cherryPick(t[e],"",t[e-2]);break;case 30:s.cherryPick(t[e],"","");break;case 31:s.cherryPick(t[e-2],"","");break;case 32:s.cherryPick(t[e-4],"","",t[e-2]);break;case 33:s.cherryPick(t[e-4],"","",t[e]);break;case 34:s.cherryPick(t[e-2],"",t[e-4],t[e]);break;case 35:s.cherryPick(t[e-2],"","",t[e]);break;case 36:s.merge(t[e],"","","");break;case 37:s.merge(t[e-2],t[e],"","");break;case 38:s.merge(t[e-2],"",t[e],"");break;case 39:s.merge(t[e-2],"","",t[e]);break;case 40:s.merge(t[e-4],t[e],"",t[e-2]);break;case 41:s.merge(t[e-4],"",t[e],t[e-2]);break;case 42:s.merge(t[e-4],"",t[e-2],t[e]);break;case 43:s.merge(t[e-4],t[e-2],t[e],"");break;case 44:s.merge(t[e-4],t[e-2],"",t[e]);break;case 45:s.merge(t[e-4],t[e],t[e-2],"");break;case 46:s.merge(t[e-6],t[e-4],t[e-2],t[e]);break;case 47:s.merge(t[e-6],t[e],t[e-4],t[e-2]);break;case 48:s.merge(t[e-6],t[e-4],t[e],t[e-2]);break;case 49:s.merge(t[e-6],t[e-2],t[e-4],t[e]);break;case 50:s.merge(t[e-6],t[e],t[e-2],t[e-4]);break;case 51:s.merge(t[e-6],t[e-2],t[e],t[e-4]);break;case 52:s.commit(t[e]);break;case 53:s.commit("","",s.commitType.NORMAL,t[e]);break;case 54:s.commit("","",t[e],"");break;case 55:s.commit("","",t[e],t[e-2]);break;case 56:s.commit("","",t[e-2],t[e]);break;case 57:s.commit("",t[e],s.commitType.NORMAL,"");break;case 58:s.commit("",t[e-2],s.commitType.NORMAL,t[e]);break;case 59:s.commit("",t[e],s.commitType.NORMAL,t[e-2]);break;case 60:s.commit("",t[e-2],t[e],"");break;case 61:s.commit("",t[e],t[e-2],"");break;case 62:s.commit("",t[e-4],t[e-2],t[e]);break;case 63:s.commit("",t[e-4],t[e],t[e-2]);break;case 64:s.commit("",t[e-2],t[e-4],t[e]);break;case 65:s.commit("",t[e],t[e-4],t[e-2]);break;case 66:s.commit("",t[e],t[e-2],t[e-4]);break;case 67:s.commit("",t[e-2],t[e],t[e-4]);break;case 68:s.commit(t[e],"",s.commitType.NORMAL,"");break;case 69:s.commit(t[e],"",s.commitType.NORMAL,t[e-2]);break;case 70:s.commit(t[e-2],"",s.commitType.NORMAL,t[e]);break;case 71:s.commit(t[e-2],"",t[e],"");break;case 72:s.commit(t[e],"",t[e-2],"");break;case 73:s.commit(t[e],t[e-2],s.commitType.NORMAL,"");break;case 74:s.commit(t[e-2],t[e],s.commitType.NORMAL,"");break;case 75:s.commit(t[e-4],"",t[e-2],t[e]);break;case 76:s.commit(t[e-4],"",t[e],t[e-2]);break;case 77:s.commit(t[e-2],"",t[e-4],t[e]);break;case 78:s.commit(t[e],"",t[e-4],t[e-2]);break;case 79:s.commit(t[e],"",t[e-2],t[e-4]);break;case 80:s.commit(t[e-2],"",t[e],t[e-4]);break;case 81:s.commit(t[e-4],t[e],t[e-2],"");break;case 82:s.commit(t[e-4],t[e-2],t[e],"");break;case 83:s.commit(t[e-2],t[e],t[e-4],"");break;case 84:s.commit(t[e],t[e-2],t[e-4],"");break;case 85:s.commit(t[e],t[e-4],t[e-2],"");break;case 86:s.commit(t[e-2],t[e-4],t[e],"");break;case 87:s.commit(t[e-4],t[e],s.commitType.NORMAL,t[e-2]);break;case 88:s.commit(t[e-4],t[e-2],s.commitType.NORMAL,t[e]);break;case 89:s.commit(t[e-2],t[e],s.commitType.NORMAL,t[e-4]);break;case 90:s.commit(t[e],t[e-2],s.commitType.NORMAL,t[e-4]);break;case 91:s.commit(t[e],t[e-4],s.commitType.NORMAL,t[e-2]);break;case 92:s.commit(t[e-2],t[e-4],s.commitType.NORMAL,t[e]);break;case 93:s.commit(t[e-6],t[e-4],t[e-2],t[e]);break;case 94:s.commit(t[e-6],t[e-4],t[e],t[e-2]);break;case 95:s.commit(t[e-6],t[e-2],t[e-4],t[e]);break;case 96:s.commit(t[e-6],t[e],t[e-4],t[e-2]);break;case 97:s.commit(t[e-6],t[e-2],t[e],t[e-4]);break;case 98:s.commit(t[e-6],t[e],t[e-2],t[e-4]);break;case 99:s.commit(t[e-4],t[e-6],t[e-2],t[e]);break;case 100:s.commit(t[e-4],t[e-6],t[e],t[e-2]);break;case 101:s.commit(t[e-2],t[e-6],t[e-4],t[e]);break;case 102:s.commit(t[e],t[e-6],t[e-4],t[e-2]);break;case 103:s.commit(t[e-2],t[e-6],t[e],t[e-4]);break;case 104:s.commit(t[e],t[e-6],t[e-2],t[e-4]);break;case 105:s.commit(t[e],t[e-4],t[e-2],t[e-6]);break;case 106:s.commit(t[e-2],t[e-4],t[e],t[e-6]);break;case 107:s.commit(t[e],t[e-2],t[e-4],t[e-6]);break;case 108:s.commit(t[e-2],t[e],t[e-4],t[e-6]);break;case 109:s.commit(t[e-4],t[e-2],t[e],t[e-6]);break;case 110:s.commit(t[e-4],t[e],t[e-2],t[e-6]);break;case 111:s.commit(t[e-2],t[e-4],t[e-6],t[e]);break;case 112:s.commit(t[e],t[e-4],t[e-6],t[e-2]);break;case 113:s.commit(t[e-2],t[e],t[e-6],t[e-4]);break;case 114:s.commit(t[e],t[e-2],t[e-6],t[e-4]);break;case 115:s.commit(t[e-4],t[e-2],t[e-6],t[e]);break;case 116:s.commit(t[e-4],t[e],t[e-6],t[e-2]);break;case 117:this.$="";break;case 118:this.$=t[e];break;case 119:this.$=s.commitType.NORMAL;break;case 120:this.$=s.commitType.REVERSE;break;case 121:this.$=s.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:n,7:l,13:h,47:i},{1:[3]},{3:7,4:2,5:n,7:l,13:h,47:i},{6:8,7:c,8:[1,9],9:[1,10],10:11,13:p},r(m,[2,124]),r(m,[2,125]),r(m,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:c,10:11,13:p},{8:[1,15]},r(x,[2,9],{11:16,12:[1,17]}),r(y,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:c,10:11,13:p},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},r(y,[2,7]),{1:[2,3]},{7:[1,36]},r(x,[2,10]),{4:37,7:l,13:h,47:i},r(x,[2,12]),r(a,[2,13]),r(a,[2,14]),r(a,[2,15]),{20:[1,38]},{22:[1,39]},r(a,[2,18]),r(a,[2,19]),r(a,[2,20]),{27:40,33:R,46:_},r(a,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:R,46:_},{32:[1,50],35:[1,51]},{27:52,33:R,46:_},{1:[2,4]},r(x,[2,11]),r(a,[2,16]),r(a,[2,17]),r(a,[2,21]),r(b,[2,122]),r(b,[2,123]),r(a,[2,52]),{33:[1,53]},{39:54,43:f,44:k,45:g},{33:[1,58]},{33:[1,59]},r(a,[2,118]),r(a,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},r(a,[2,22],{29:[1,66]}),r(a,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),r(a,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),r(E,[2,119]),r(E,[2,120]),r(E,[2,121]),r(a,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),r(a,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:f,44:k,45:g},{33:[1,81]},r(a,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:f,44:k,45:g},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:f,44:k,45:g},{33:[1,95]},{33:[1,96]},{39:97,43:f,44:k,45:g},{33:[1,98]},r(a,[2,37],{35:[1,100],38:[1,99]}),r(a,[2,38],{32:[1,102],35:[1,101]}),r(a,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},r(a,[2,23]),r(a,[2,55],{32:[1,110],42:[1,111]}),r(a,[2,59],{38:[1,112],42:[1,113]}),r(a,[2,69],{32:[1,115],38:[1,114]}),r(a,[2,56],{32:[1,116],42:[1,117]}),r(a,[2,61],{35:[1,118],42:[1,119]}),r(a,[2,72],{32:[1,121],35:[1,120]}),r(a,[2,58],{38:[1,122],42:[1,123]}),r(a,[2,60],{35:[1,124],42:[1,125]}),r(a,[2,73],{35:[1,127],38:[1,126]}),r(a,[2,70],{32:[1,129],38:[1,128]}),r(a,[2,71],{32:[1,131],35:[1,130]}),r(a,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:f,44:k,45:g},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:f,44:k,45:g},r(a,[2,25],{35:[1,140]}),r(a,[2,26],{34:[1,141]}),r(a,[2,31],{34:[1,142]}),r(a,[2,29],{34:[1,143]}),r(a,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:f,44:k,45:g},{33:[1,148]},{39:149,43:f,44:k,45:g},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:f,44:k,45:g},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:f,44:k,45:g},{33:[1,162]},{39:163,43:f,44:k,45:g},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:f,44:k,45:g},{33:[1,168]},r(a,[2,43],{35:[1,169]}),r(a,[2,44],{38:[1,170]}),r(a,[2,42],{32:[1,171]}),r(a,[2,45],{35:[1,172]}),r(a,[2,40],{38:[1,173]}),r(a,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},r(a,[2,66],{42:[1,181]}),r(a,[2,79],{32:[1,182]}),r(a,[2,67],{42:[1,183]}),r(a,[2,90],{38:[1,184]}),r(a,[2,80],{32:[1,185]}),r(a,[2,89],{38:[1,186]}),r(a,[2,65],{42:[1,187]}),r(a,[2,78],{32:[1,188]}),r(a,[2,64],{42:[1,189]}),r(a,[2,84],{35:[1,190]}),r(a,[2,77],{32:[1,191]}),r(a,[2,83],{35:[1,192]}),r(a,[2,63],{42:[1,193]}),r(a,[2,91],{38:[1,194]}),r(a,[2,62],{42:[1,195]}),r(a,[2,85],{35:[1,196]}),r(a,[2,86],{35:[1,197]}),r(a,[2,92],{38:[1,198]}),r(a,[2,76],{32:[1,199]}),r(a,[2,87],{38:[1,200]}),r(a,[2,75],{32:[1,201]}),r(a,[2,81],{35:[1,202]}),r(a,[2,82],{35:[1,203]}),r(a,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:f,44:k,45:g},{33:[1,207]},{33:[1,208]},{39:209,43:f,44:k,45:g},{33:[1,210]},r(a,[2,27]),r(a,[2,32]),r(a,[2,28]),r(a,[2,33]),r(a,[2,34]),r(a,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:f,44:k,45:g},{33:[1,215]},{39:216,43:f,44:k,45:g},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:f,44:k,45:g},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:f,44:k,45:g},{33:[1,229]},{39:230,43:f,44:k,45:g},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:f,44:k,45:g},r(a,[2,46]),r(a,[2,48]),r(a,[2,47]),r(a,[2,49]),r(a,[2,51]),r(a,[2,50]),r(a,[2,107]),r(a,[2,108]),r(a,[2,105]),r(a,[2,106]),r(a,[2,110]),r(a,[2,109]),r(a,[2,114]),r(a,[2,113]),r(a,[2,112]),r(a,[2,111]),r(a,[2,116]),r(a,[2,115]),r(a,[2,104]),r(a,[2,103]),r(a,[2,102]),r(a,[2,101]),r(a,[2,99]),r(a,[2,100]),r(a,[2,98]),r(a,[2,97]),r(a,[2,96]),r(a,[2,95]),r(a,[2,93]),r(a,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(o,u){if(u.recoverable)this.trace(o);else{var d=new Error(o);throw d.hash=u,d}},parse:function(o){var u=this,d=[0],s=[],T=[null],t=[],X=this.table,e="",rt=0,ft=0,wt=2,pt=1,Lt=t.slice.call(arguments,1),O=Object.create(this.lexer),F={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(F.yy[ct]=this.yy[ct]);O.setInput(o,F.yy),F.yy.lexer=O,F.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var ot=O.yylloc;t.push(ot);var Rt=O.options&&O.options.ranges;typeof F.yy.parseError=="function"?this.parseError=F.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Mt(){var q;return q=s.pop()||O.lex()||pt,typeof q!="number"&&(q instanceof Array&&(s=q,q=s.pop()),q=u.symbols_[q]||q),q}for(var N,K,V,lt,J={},it,j,bt,st;;){if(K=d[d.length-1],this.defaultActions[K]?V=this.defaultActions[K]:((N===null||typeof N>"u")&&(N=Mt()),V=X[K]&&X[K][N]),typeof V>"u"||!V.length||!V[0]){var ht="";st=[];for(it in X[K])this.terminals_[it]&&it>wt&&st.push("'"+this.terminals_[it]+"'");O.showPosition?ht="Parse error on line "+(rt+1)+`: +import{c as C,s as vt,g as Ct,a as Ot,b as Pt,x as At,y as Gt,l as B,j as D,A as St,h as It,z as Nt,as as Ht,at as Bt}from"../app.DRN3unl1.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";var mt=function(){var r=function(G,o,u,d){for(u=u||{},d=G.length;d--;u[G[d]]=o);return u},n=[1,3],l=[1,6],h=[1,4],i=[1,5],c=[2,5],p=[1,12],m=[5,7,13,19,21,23,24,26,28,31,37,40,47],x=[7,13,19,21,23,24,26,28,31,37,40],y=[7,12,13,19,21,23,24,26,28,31,37,40],a=[7,13,47],R=[1,42],_=[1,41],b=[7,13,29,32,35,38,47],f=[1,55],k=[1,56],g=[1,57],E=[7,13,32,35,42,47],z={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,GG:5,document:6,EOF:7,":":8,DIR:9,options:10,body:11,OPT:12,NL:13,line:14,statement:15,commitStatement:16,mergeStatement:17,cherryPickStatement:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,section:24,branchStatement:25,CHECKOUT:26,ref:27,BRANCH:28,ORDER:29,NUM:30,CHERRY_PICK:31,COMMIT_ID:32,STR:33,PARENT_COMMIT:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,ID:46,";":47,$accept:0,$end:1},terminals_:{2:"error",5:"GG",7:"EOF",8:":",9:"DIR",12:"OPT",13:"NL",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"section",26:"CHECKOUT",28:"BRANCH",29:"ORDER",30:"NUM",31:"CHERRY_PICK",32:"COMMIT_ID",33:"STR",34:"PARENT_COMMIT",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",46:"ID",47:";"},productions_:[0,[3,2],[3,3],[3,4],[3,5],[6,0],[6,2],[10,2],[10,1],[11,0],[11,2],[14,2],[14,1],[15,1],[15,1],[15,1],[15,2],[15,2],[15,1],[15,1],[15,1],[15,2],[25,2],[25,4],[18,3],[18,5],[18,5],[18,7],[18,7],[18,5],[18,5],[18,5],[18,7],[18,7],[18,7],[18,7],[17,2],[17,4],[17,4],[17,4],[17,6],[17,6],[17,6],[17,6],[17,6],[17,6],[17,8],[17,8],[17,8],[17,8],[17,8],[17,8],[16,2],[16,3],[16,3],[16,5],[16,5],[16,3],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,3],[16,5],[16,5],[16,5],[16,5],[16,5],[16,5],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,7],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[16,9],[41,0],[41,1],[39,1],[39,1],[39,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(o,u,d,s,T,t,X){var e=t.length-1;switch(T){case 2:return t[e];case 3:return t[e-1];case 4:return s.setDirection(t[e-3]),t[e-1];case 6:s.setOptions(t[e-1]),this.$=t[e];break;case 7:t[e-1]+=t[e],this.$=t[e-1];break;case 9:this.$=[];break;case 10:t[e-1].push(t[e]),this.$=t[e-1];break;case 11:this.$=t[e-1];break;case 16:this.$=t[e].trim(),s.setAccTitle(this.$);break;case 17:case 18:this.$=t[e].trim(),s.setAccDescription(this.$);break;case 19:s.addSection(t[e].substr(8)),this.$=t[e].substr(8);break;case 21:s.checkout(t[e]);break;case 22:s.branch(t[e]);break;case 23:s.branch(t[e-2],t[e]);break;case 24:s.cherryPick(t[e],"",void 0);break;case 25:s.cherryPick(t[e-2],"",void 0,t[e]);break;case 26:s.cherryPick(t[e-2],"",t[e]);break;case 27:s.cherryPick(t[e-4],"",t[e],t[e-2]);break;case 28:s.cherryPick(t[e-4],"",t[e-2],t[e]);break;case 29:s.cherryPick(t[e],"",t[e-2]);break;case 30:s.cherryPick(t[e],"","");break;case 31:s.cherryPick(t[e-2],"","");break;case 32:s.cherryPick(t[e-4],"","",t[e-2]);break;case 33:s.cherryPick(t[e-4],"","",t[e]);break;case 34:s.cherryPick(t[e-2],"",t[e-4],t[e]);break;case 35:s.cherryPick(t[e-2],"","",t[e]);break;case 36:s.merge(t[e],"","","");break;case 37:s.merge(t[e-2],t[e],"","");break;case 38:s.merge(t[e-2],"",t[e],"");break;case 39:s.merge(t[e-2],"","",t[e]);break;case 40:s.merge(t[e-4],t[e],"",t[e-2]);break;case 41:s.merge(t[e-4],"",t[e],t[e-2]);break;case 42:s.merge(t[e-4],"",t[e-2],t[e]);break;case 43:s.merge(t[e-4],t[e-2],t[e],"");break;case 44:s.merge(t[e-4],t[e-2],"",t[e]);break;case 45:s.merge(t[e-4],t[e],t[e-2],"");break;case 46:s.merge(t[e-6],t[e-4],t[e-2],t[e]);break;case 47:s.merge(t[e-6],t[e],t[e-4],t[e-2]);break;case 48:s.merge(t[e-6],t[e-4],t[e],t[e-2]);break;case 49:s.merge(t[e-6],t[e-2],t[e-4],t[e]);break;case 50:s.merge(t[e-6],t[e],t[e-2],t[e-4]);break;case 51:s.merge(t[e-6],t[e-2],t[e],t[e-4]);break;case 52:s.commit(t[e]);break;case 53:s.commit("","",s.commitType.NORMAL,t[e]);break;case 54:s.commit("","",t[e],"");break;case 55:s.commit("","",t[e],t[e-2]);break;case 56:s.commit("","",t[e-2],t[e]);break;case 57:s.commit("",t[e],s.commitType.NORMAL,"");break;case 58:s.commit("",t[e-2],s.commitType.NORMAL,t[e]);break;case 59:s.commit("",t[e],s.commitType.NORMAL,t[e-2]);break;case 60:s.commit("",t[e-2],t[e],"");break;case 61:s.commit("",t[e],t[e-2],"");break;case 62:s.commit("",t[e-4],t[e-2],t[e]);break;case 63:s.commit("",t[e-4],t[e],t[e-2]);break;case 64:s.commit("",t[e-2],t[e-4],t[e]);break;case 65:s.commit("",t[e],t[e-4],t[e-2]);break;case 66:s.commit("",t[e],t[e-2],t[e-4]);break;case 67:s.commit("",t[e-2],t[e],t[e-4]);break;case 68:s.commit(t[e],"",s.commitType.NORMAL,"");break;case 69:s.commit(t[e],"",s.commitType.NORMAL,t[e-2]);break;case 70:s.commit(t[e-2],"",s.commitType.NORMAL,t[e]);break;case 71:s.commit(t[e-2],"",t[e],"");break;case 72:s.commit(t[e],"",t[e-2],"");break;case 73:s.commit(t[e],t[e-2],s.commitType.NORMAL,"");break;case 74:s.commit(t[e-2],t[e],s.commitType.NORMAL,"");break;case 75:s.commit(t[e-4],"",t[e-2],t[e]);break;case 76:s.commit(t[e-4],"",t[e],t[e-2]);break;case 77:s.commit(t[e-2],"",t[e-4],t[e]);break;case 78:s.commit(t[e],"",t[e-4],t[e-2]);break;case 79:s.commit(t[e],"",t[e-2],t[e-4]);break;case 80:s.commit(t[e-2],"",t[e],t[e-4]);break;case 81:s.commit(t[e-4],t[e],t[e-2],"");break;case 82:s.commit(t[e-4],t[e-2],t[e],"");break;case 83:s.commit(t[e-2],t[e],t[e-4],"");break;case 84:s.commit(t[e],t[e-2],t[e-4],"");break;case 85:s.commit(t[e],t[e-4],t[e-2],"");break;case 86:s.commit(t[e-2],t[e-4],t[e],"");break;case 87:s.commit(t[e-4],t[e],s.commitType.NORMAL,t[e-2]);break;case 88:s.commit(t[e-4],t[e-2],s.commitType.NORMAL,t[e]);break;case 89:s.commit(t[e-2],t[e],s.commitType.NORMAL,t[e-4]);break;case 90:s.commit(t[e],t[e-2],s.commitType.NORMAL,t[e-4]);break;case 91:s.commit(t[e],t[e-4],s.commitType.NORMAL,t[e-2]);break;case 92:s.commit(t[e-2],t[e-4],s.commitType.NORMAL,t[e]);break;case 93:s.commit(t[e-6],t[e-4],t[e-2],t[e]);break;case 94:s.commit(t[e-6],t[e-4],t[e],t[e-2]);break;case 95:s.commit(t[e-6],t[e-2],t[e-4],t[e]);break;case 96:s.commit(t[e-6],t[e],t[e-4],t[e-2]);break;case 97:s.commit(t[e-6],t[e-2],t[e],t[e-4]);break;case 98:s.commit(t[e-6],t[e],t[e-2],t[e-4]);break;case 99:s.commit(t[e-4],t[e-6],t[e-2],t[e]);break;case 100:s.commit(t[e-4],t[e-6],t[e],t[e-2]);break;case 101:s.commit(t[e-2],t[e-6],t[e-4],t[e]);break;case 102:s.commit(t[e],t[e-6],t[e-4],t[e-2]);break;case 103:s.commit(t[e-2],t[e-6],t[e],t[e-4]);break;case 104:s.commit(t[e],t[e-6],t[e-2],t[e-4]);break;case 105:s.commit(t[e],t[e-4],t[e-2],t[e-6]);break;case 106:s.commit(t[e-2],t[e-4],t[e],t[e-6]);break;case 107:s.commit(t[e],t[e-2],t[e-4],t[e-6]);break;case 108:s.commit(t[e-2],t[e],t[e-4],t[e-6]);break;case 109:s.commit(t[e-4],t[e-2],t[e],t[e-6]);break;case 110:s.commit(t[e-4],t[e],t[e-2],t[e-6]);break;case 111:s.commit(t[e-2],t[e-4],t[e-6],t[e]);break;case 112:s.commit(t[e],t[e-4],t[e-6],t[e-2]);break;case 113:s.commit(t[e-2],t[e],t[e-6],t[e-4]);break;case 114:s.commit(t[e],t[e-2],t[e-6],t[e-4]);break;case 115:s.commit(t[e-4],t[e-2],t[e-6],t[e]);break;case 116:s.commit(t[e-4],t[e],t[e-6],t[e-2]);break;case 117:this.$="";break;case 118:this.$=t[e];break;case 119:this.$=s.commitType.NORMAL;break;case 120:this.$=s.commitType.REVERSE;break;case 121:this.$=s.commitType.HIGHLIGHT;break}},table:[{3:1,4:2,5:n,7:l,13:h,47:i},{1:[3]},{3:7,4:2,5:n,7:l,13:h,47:i},{6:8,7:c,8:[1,9],9:[1,10],10:11,13:p},r(m,[2,124]),r(m,[2,125]),r(m,[2,126]),{1:[2,1]},{7:[1,13]},{6:14,7:c,10:11,13:p},{8:[1,15]},r(x,[2,9],{11:16,12:[1,17]}),r(y,[2,8]),{1:[2,2]},{7:[1,18]},{6:19,7:c,10:11,13:p},{7:[2,6],13:[1,22],14:20,15:21,16:23,17:24,18:25,19:[1,26],21:[1,27],23:[1,28],24:[1,29],25:30,26:[1,31],28:[1,35],31:[1,34],37:[1,33],40:[1,32]},r(y,[2,7]),{1:[2,3]},{7:[1,36]},r(x,[2,10]),{4:37,7:l,13:h,47:i},r(x,[2,12]),r(a,[2,13]),r(a,[2,14]),r(a,[2,15]),{20:[1,38]},{22:[1,39]},r(a,[2,18]),r(a,[2,19]),r(a,[2,20]),{27:40,33:R,46:_},r(a,[2,117],{41:43,32:[1,46],33:[1,48],35:[1,44],38:[1,45],42:[1,47]}),{27:49,33:R,46:_},{32:[1,50],35:[1,51]},{27:52,33:R,46:_},{1:[2,4]},r(x,[2,11]),r(a,[2,16]),r(a,[2,17]),r(a,[2,21]),r(b,[2,122]),r(b,[2,123]),r(a,[2,52]),{33:[1,53]},{39:54,43:f,44:k,45:g},{33:[1,58]},{33:[1,59]},r(a,[2,118]),r(a,[2,36],{32:[1,60],35:[1,62],38:[1,61]}),{33:[1,63]},{33:[1,64],36:[1,65]},r(a,[2,22],{29:[1,66]}),r(a,[2,53],{32:[1,68],38:[1,67],42:[1,69]}),r(a,[2,54],{32:[1,71],35:[1,70],42:[1,72]}),r(E,[2,119]),r(E,[2,120]),r(E,[2,121]),r(a,[2,57],{35:[1,73],38:[1,74],42:[1,75]}),r(a,[2,68],{32:[1,78],35:[1,76],38:[1,77]}),{33:[1,79]},{39:80,43:f,44:k,45:g},{33:[1,81]},r(a,[2,24],{34:[1,82],35:[1,83]}),{32:[1,84]},{32:[1,85]},{30:[1,86]},{39:87,43:f,44:k,45:g},{33:[1,88]},{33:[1,89]},{33:[1,90]},{33:[1,91]},{33:[1,92]},{33:[1,93]},{39:94,43:f,44:k,45:g},{33:[1,95]},{33:[1,96]},{39:97,43:f,44:k,45:g},{33:[1,98]},r(a,[2,37],{35:[1,100],38:[1,99]}),r(a,[2,38],{32:[1,102],35:[1,101]}),r(a,[2,39],{32:[1,103],38:[1,104]}),{33:[1,105]},{33:[1,106],36:[1,107]},{33:[1,108]},{33:[1,109]},r(a,[2,23]),r(a,[2,55],{32:[1,110],42:[1,111]}),r(a,[2,59],{38:[1,112],42:[1,113]}),r(a,[2,69],{32:[1,115],38:[1,114]}),r(a,[2,56],{32:[1,116],42:[1,117]}),r(a,[2,61],{35:[1,118],42:[1,119]}),r(a,[2,72],{32:[1,121],35:[1,120]}),r(a,[2,58],{38:[1,122],42:[1,123]}),r(a,[2,60],{35:[1,124],42:[1,125]}),r(a,[2,73],{35:[1,127],38:[1,126]}),r(a,[2,70],{32:[1,129],38:[1,128]}),r(a,[2,71],{32:[1,131],35:[1,130]}),r(a,[2,74],{35:[1,133],38:[1,132]}),{39:134,43:f,44:k,45:g},{33:[1,135]},{33:[1,136]},{33:[1,137]},{33:[1,138]},{39:139,43:f,44:k,45:g},r(a,[2,25],{35:[1,140]}),r(a,[2,26],{34:[1,141]}),r(a,[2,31],{34:[1,142]}),r(a,[2,29],{34:[1,143]}),r(a,[2,30],{34:[1,144]}),{33:[1,145]},{33:[1,146]},{39:147,43:f,44:k,45:g},{33:[1,148]},{39:149,43:f,44:k,45:g},{33:[1,150]},{33:[1,151]},{33:[1,152]},{33:[1,153]},{33:[1,154]},{33:[1,155]},{33:[1,156]},{39:157,43:f,44:k,45:g},{33:[1,158]},{33:[1,159]},{33:[1,160]},{39:161,43:f,44:k,45:g},{33:[1,162]},{39:163,43:f,44:k,45:g},{33:[1,164]},{33:[1,165]},{33:[1,166]},{39:167,43:f,44:k,45:g},{33:[1,168]},r(a,[2,43],{35:[1,169]}),r(a,[2,44],{38:[1,170]}),r(a,[2,42],{32:[1,171]}),r(a,[2,45],{35:[1,172]}),r(a,[2,40],{38:[1,173]}),r(a,[2,41],{32:[1,174]}),{33:[1,175],36:[1,176]},{33:[1,177]},{33:[1,178]},{33:[1,179]},{33:[1,180]},r(a,[2,66],{42:[1,181]}),r(a,[2,79],{32:[1,182]}),r(a,[2,67],{42:[1,183]}),r(a,[2,90],{38:[1,184]}),r(a,[2,80],{32:[1,185]}),r(a,[2,89],{38:[1,186]}),r(a,[2,65],{42:[1,187]}),r(a,[2,78],{32:[1,188]}),r(a,[2,64],{42:[1,189]}),r(a,[2,84],{35:[1,190]}),r(a,[2,77],{32:[1,191]}),r(a,[2,83],{35:[1,192]}),r(a,[2,63],{42:[1,193]}),r(a,[2,91],{38:[1,194]}),r(a,[2,62],{42:[1,195]}),r(a,[2,85],{35:[1,196]}),r(a,[2,86],{35:[1,197]}),r(a,[2,92],{38:[1,198]}),r(a,[2,76],{32:[1,199]}),r(a,[2,87],{38:[1,200]}),r(a,[2,75],{32:[1,201]}),r(a,[2,81],{35:[1,202]}),r(a,[2,82],{35:[1,203]}),r(a,[2,88],{38:[1,204]}),{33:[1,205]},{39:206,43:f,44:k,45:g},{33:[1,207]},{33:[1,208]},{39:209,43:f,44:k,45:g},{33:[1,210]},r(a,[2,27]),r(a,[2,32]),r(a,[2,28]),r(a,[2,33]),r(a,[2,34]),r(a,[2,35]),{33:[1,211]},{33:[1,212]},{33:[1,213]},{39:214,43:f,44:k,45:g},{33:[1,215]},{39:216,43:f,44:k,45:g},{33:[1,217]},{33:[1,218]},{33:[1,219]},{33:[1,220]},{33:[1,221]},{33:[1,222]},{33:[1,223]},{39:224,43:f,44:k,45:g},{33:[1,225]},{33:[1,226]},{33:[1,227]},{39:228,43:f,44:k,45:g},{33:[1,229]},{39:230,43:f,44:k,45:g},{33:[1,231]},{33:[1,232]},{33:[1,233]},{39:234,43:f,44:k,45:g},r(a,[2,46]),r(a,[2,48]),r(a,[2,47]),r(a,[2,49]),r(a,[2,51]),r(a,[2,50]),r(a,[2,107]),r(a,[2,108]),r(a,[2,105]),r(a,[2,106]),r(a,[2,110]),r(a,[2,109]),r(a,[2,114]),r(a,[2,113]),r(a,[2,112]),r(a,[2,111]),r(a,[2,116]),r(a,[2,115]),r(a,[2,104]),r(a,[2,103]),r(a,[2,102]),r(a,[2,101]),r(a,[2,99]),r(a,[2,100]),r(a,[2,98]),r(a,[2,97]),r(a,[2,96]),r(a,[2,95]),r(a,[2,93]),r(a,[2,94])],defaultActions:{7:[2,1],13:[2,2],18:[2,3],36:[2,4]},parseError:function(o,u){if(u.recoverable)this.trace(o);else{var d=new Error(o);throw d.hash=u,d}},parse:function(o){var u=this,d=[0],s=[],T=[null],t=[],X=this.table,e="",rt=0,ft=0,wt=2,pt=1,Lt=t.slice.call(arguments,1),O=Object.create(this.lexer),F={yy:{}};for(var ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ct)&&(F.yy[ct]=this.yy[ct]);O.setInput(o,F.yy),F.yy.lexer=O,F.yy.parser=this,typeof O.yylloc>"u"&&(O.yylloc={});var ot=O.yylloc;t.push(ot);var Rt=O.options&&O.options.ranges;typeof F.yy.parseError=="function"?this.parseError=F.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Mt(){var q;return q=s.pop()||O.lex()||pt,typeof q!="number"&&(q instanceof Array&&(s=q,q=s.pop()),q=u.symbols_[q]||q),q}for(var N,K,V,lt,J={},it,j,bt,st;;){if(K=d[d.length-1],this.defaultActions[K]?V=this.defaultActions[K]:((N===null||typeof N>"u")&&(N=Mt()),V=X[K]&&X[K][N]),typeof V>"u"||!V.length||!V[0]){var ht="";st=[];for(it in X[K])this.terminals_[it]&&it>wt&&st.push("'"+this.terminals_[it]+"'");O.showPosition?ht="Parse error on line "+(rt+1)+`: `+O.showPosition()+` -Expecting `+st.join(", ")+", got '"+(this.terminals_[N]||N)+"'":ht="Parse error on line "+(rt+1)+": Unexpected "+(N==pt?"end of input":"'"+(this.terminals_[N]||N)+"'"),this.parseError(ht,{text:O.match,token:this.terminals_[N]||N,line:O.yylineno,loc:ot,expected:st})}if(V[0]instanceof Array&&V.length>1)throw new Error("Parse Error: multiple actions possible at state: "+K+", token: "+N);switch(V[0]){case 1:d.push(N),T.push(O.yytext),t.push(O.yylloc),d.push(V[1]),N=null,ft=O.yyleng,e=O.yytext,rt=O.yylineno,ot=O.yylloc;break;case 2:if(j=this.productions_[V[1]][1],J.$=T[T.length-j],J._$={first_line:t[t.length-(j||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(j||1)].first_column,last_column:t[t.length-1].last_column},Rt&&(J._$.range=[t[t.length-(j||1)].range[0],t[t.length-1].range[1]]),lt=this.performAction.apply(J,[e,ft,rt,F.yy,V[1],T,t].concat(Lt)),typeof lt<"u")return lt;j&&(d=d.slice(0,-1*j*2),T=T.slice(0,-1*j),t=t.slice(0,-1*j)),d.push(this.productions_[V[1]][0]),T.push(J.$),t.push(J._$),bt=X[d[d.length-2]][d[d.length-1]],d.push(bt);break;case 3:return!0}}return!0}},M=function(){var A={EOF:1,parseError:function(u,d){if(this.yy.parser)this.yy.parser.parseError(u,d);else throw new Error(u)},setInput:function(o,u){return this.yy=u||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var u=o.match(/(?:\r\n?|\n).*/g);return u?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var u=o.length,d=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-u),this.offset-=u;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===s.length?this.yylloc.first_column:0)+s[s.length-d.length].length-d[0].length:this.yylloc.first_column-u},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-u]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+st.join(", ")+", got '"+(this.terminals_[N]||N)+"'":ht="Parse error on line "+(rt+1)+": Unexpected "+(N==pt?"end of input":"'"+(this.terminals_[N]||N)+"'"),this.parseError(ht,{text:O.match,token:this.terminals_[N]||N,line:O.yylineno,loc:ot,expected:st})}if(V[0]instanceof Array&&V.length>1)throw new Error("Parse Error: multiple actions possible at state: "+K+", token: "+N);switch(V[0]){case 1:d.push(N),T.push(O.yytext),t.push(O.yylloc),d.push(V[1]),N=null,ft=O.yyleng,e=O.yytext,rt=O.yylineno,ot=O.yylloc;break;case 2:if(j=this.productions_[V[1]][1],J.$=T[T.length-j],J._$={first_line:t[t.length-(j||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(j||1)].first_column,last_column:t[t.length-1].last_column},Rt&&(J._$.range=[t[t.length-(j||1)].range[0],t[t.length-1].range[1]]),lt=this.performAction.apply(J,[e,ft,rt,F.yy,V[1],T,t].concat(Lt)),typeof lt<"u")return lt;j&&(d=d.slice(0,-1*j*2),T=T.slice(0,-1*j),t=t.slice(0,-1*j)),d.push(this.productions_[V[1]][0]),T.push(J.$),t.push(J._$),bt=X[d[d.length-2]][d[d.length-1]],d.push(bt);break;case 3:return!0}}return!0}},M=function(){var G={EOF:1,parseError:function(u,d){if(this.yy.parser)this.yy.parser.parseError(u,d);else throw new Error(u)},setInput:function(o,u){return this.yy=u||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var u=o.match(/(?:\r\n?|\n).*/g);return u?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},unput:function(o){var u=o.length,d=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-u),this.offset-=u;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===s.length?this.yylloc.first_column:0)+s[s.length-d.length].length-d[0].length:this.yylloc.first_column-u},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-u]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(o){this.unput(this.match.slice(o))},pastInput:function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var o=this.pastInput(),u=new Array(o.length+1).join("-");return o+this.upcomingInput()+` `+u+"^"},test_match:function(o,u){var d,s,T;if(this.options.backtrack_lexer&&(T={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(T.yylloc.range=this.yylloc.range.slice(0))),s=o[0].match(/(?:\r\n?|\n).*/g),s&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+o[0].length},this.yytext+=o[0],this.match+=o[0],this.matches=o,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(o[0].length),this.matched+=o[0],d=this.performAction.call(this,this.yy,this,u,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),d)return d;if(this._backtrack){for(var t in T)this[t]=T[t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var o,u,d,s;this._more||(this.yytext="",this.match="");for(var T=this._currentRules(),t=0;tu[0].length)){if(u=d,s=t,this.options.backtrack_lexer){if(o=this.test_match(d,T[t]),o!==!1)return o;if(this._backtrack){u=!1;continue}else return!1}else if(!this.options.flex)break}return u?(o=this.test_match(u,T[s]),o!==!1?o:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var u=this.next();return u||this.lex()},begin:function(u){this.conditionStack.push(u)},popState:function(){var u=this.conditionStack.length-1;return u>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(u){return u=this.conditionStack.length-1-Math.abs(u||0),u>=0?this.conditionStack[u]:"INITIAL"},pushState:function(u){this.begin(u)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(u,d,s,T){switch(s){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:return 9;case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 30:this.popState();break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 34:this.popState();break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};return A}();z.lexer=M;function S(){this.yy={}}return S.prototype=z,z.Parser=S,new S}();mt.parser=mt;const Vt=mt;let at=C().gitGraph.mainBranchName,Dt=C().gitGraph.mainBranchOrder,v={},I=null,tt={};tt[at]={name:at,order:Dt};let L={};L[at]=I;let G=at,kt="LR",W=0;function ut(){return Bt({length:7})}function zt(r,n){const l=Object.create(null);return r.reduce((h,i)=>{const c=n(i);return l[c]||(l[c]=!0,h.push(i)),h},[])}const jt=function(r){kt=r};let xt={};const qt=function(r){B.debug("options str",r),r=r&&r.trim(),r=r||"{}";try{xt=JSON.parse(r)}catch(n){B.error("error while parsing gitGraph options",n.message)}},Yt=function(){return xt},Ft=function(r,n,l,h){B.debug("Entering commit:",r,n,l,h),n=D.sanitizeText(n,C()),r=D.sanitizeText(r,C()),h=D.sanitizeText(h,C());const i={id:n||W+"-"+ut(),message:r,seq:W++,type:l||Q.NORMAL,tag:h||"",parents:I==null?[]:[I.id],branch:G};I=i,v[i.id]=i,L[G]=i.id,B.debug("in pushCommit "+i.id)},Kt=function(r,n){if(r=D.sanitizeText(r,C()),L[r]===void 0)L[r]=I!=null?I.id:null,tt[r]={name:r,order:n?parseInt(n,10):null},yt(r),B.debug("in createBranch");else{let l=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+r+'")');throw l.hash={text:"branch "+r,token:"branch "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+r+'"']},l}},Ut=function(r,n,l,h){r=D.sanitizeText(r,C()),n=D.sanitizeText(n,C());const i=v[L[G]],c=v[L[r]];if(G===r){let m=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},m}else if(i===void 0||!i){let m=new Error('Incorrect usage of "merge". Current branch ('+G+")has no commits");throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},m}else if(L[r]===void 0){let m=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") does not exist");throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+r]},m}else if(c===void 0||!c){let m=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") has no commits");throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},m}else if(i===c){let m=new Error('Incorrect usage of "merge". Both branches have same head');throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},m}else if(n&&v[n]!==void 0){let m=new Error('Incorrect usage of "merge". Commit with id:'+n+" already exists, use different custom Id");throw m.hash={text:"merge "+r+n+l+h,token:"merge "+r+n+l+h,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+r+" "+n+"_UNIQUE "+l+" "+h]},m}const p={id:n||W+"-"+ut(),message:"merged branch "+r+" into "+G,seq:W++,parents:[I==null?null:I.id,L[r]],branch:G,type:Q.MERGE,customType:l,customId:!!n,tag:h||""};I=p,v[p.id]=p,L[G]=p.id,B.debug(L),B.debug("in mergeBranch")},Wt=function(r,n,l,h){if(B.debug("Entering cherryPick:",r,n,l),r=D.sanitizeText(r,C()),n=D.sanitizeText(n,C()),l=D.sanitizeText(l,C()),h=D.sanitizeText(h,C()),!r||v[r]===void 0){let p=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw p.hash={text:"cherryPick "+r+" "+n,token:"cherryPick "+r+" "+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},p}let i=v[r],c=i.branch;if(h&&!(Array.isArray(i.parents)&&i.parents.includes(h)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");if(i.type===Q.MERGE&&!h)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!n||v[n]===void 0){if(c===G){let x=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw x.hash={text:"cherryPick "+r+" "+n,token:"cherryPick "+r+" "+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},x}const p=v[L[G]];if(p===void 0||!p){let x=new Error('Incorrect usage of "cherry-pick". Current branch ('+G+")has no commits");throw x.hash={text:"cherryPick "+r+" "+n,token:"cherryPick "+r+" "+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},x}const m={id:W+"-"+ut(),message:"cherry-picked "+i+" into "+G,seq:W++,parents:[I==null?null:I.id,i.id],branch:G,type:Q.CHERRY_PICK,tag:l??`cherry-pick:${i.id}${i.type===Q.MERGE?`|parent:${h}`:""}`};I=m,v[m.id]=m,L[G]=m.id,B.debug(L),B.debug("in cherryPick")}},yt=function(r){if(r=D.sanitizeText(r,C()),L[r]===void 0){let n=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+r+'")');throw n.hash={text:"checkout "+r,token:"checkout "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+r+'"']},n}else{G=r;const n=L[G];I=v[n]}};function gt(r,n,l){const h=r.indexOf(n);h===-1?r.push(l):r.splice(h,1,l)}function _t(r){const n=r.reduce((i,c)=>i.seq>c.seq?i:c,r[0]);let l="";r.forEach(function(i){i===n?l+=" *":l+=" |"});const h=[l,n.id,n.seq];for(let i in L)L[i]===n.id&&h.push(i);if(B.debug(h.join(" ")),n.parents&&n.parents.length==2){const i=v[n.parents[0]];gt(r,n,i),r.push(v[n.parents[1]])}else{if(n.parents.length==0)return;{const i=v[n.parents];gt(r,n,i)}}r=zt(r,i=>i.id),_t(r)}const Jt=function(){B.debug(v);const r=Et()[0];_t([r])},Qt=function(){v={},I=null;let r=C().gitGraph.mainBranchName,n=C().gitGraph.mainBranchOrder;L={},L[r]=null,tt={},tt[r]={name:r,order:n},G=r,W=0,St()},Xt=function(){return Object.values(tt).map((n,l)=>n.order!==null?n:{...n,order:parseFloat(`0.${l}`,10)}).sort((n,l)=>n.order-l.order).map(({name:n})=>({name:n}))},Zt=function(){return L},$t=function(){return v},Et=function(){const r=Object.keys(v).map(function(n){return v[n]});return r.forEach(function(n){B.debug(n.id)}),r.sort((n,l)=>n.seq-l.seq),r},te=function(){return G},ee=function(){return kt},re=function(){return I},Q={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},ie={getConfig:()=>C().gitGraph,setDirection:jt,setOptions:qt,getOptions:Yt,commit:Ft,branch:Kt,merge:Ut,cherryPick:Wt,checkout:yt,prettyPrint:Jt,clear:Qt,getBranchesAsObjArray:Xt,getBranches:Zt,getCommits:$t,getCommitsArray:Et,getCurrentBranch:te,getDirection:ee,getHead:re,setAccTitle:vt,getAccTitle:Ct,getAccDescription:Ot,setAccDescription:Pt,setDiagramTitle:Gt,getDiagramTitle:At,commitType:Q};let Z={};const P={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},U=8;let H={},Y={},nt=[],et=0,w="LR";const se=()=>{H={},Y={},Z={},et=0,nt=[],w="LR"},Tt=r=>{const n=document.createElementNS("http://www.w3.org/2000/svg","text");let l=[];typeof r=="string"?l=r.split(/\\n|\n|/gi):Array.isArray(r)?l=r:l=[];for(const h of l){const i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=h.trim(),n.appendChild(i)}return n},ae=r=>{let n="",l=0;return r.forEach(h=>{const i=w==="TB"?Y[h].y:Y[h].x;i>=l&&(n=h,l=i)}),n||void 0},dt=(r,n,l)=>{const h=C().gitGraph,i=r.append("g").attr("class","commit-bullets"),c=r.append("g").attr("class","commit-labels");let p=0;w==="TB"&&(p=30);const x=Object.keys(n).sort((_,b)=>n[_].seq-n[b].seq),y=h.parallelCommits,a=10,R=40;x.forEach(_=>{const b=n[_];if(y)if(b.parents.length){const E=ae(b.parents);p=w==="TB"?Y[E].y+R:Y[E].x+R}else p=0,w==="TB"&&(p=30);const f=p+a,k=w==="TB"?f:H[b.branch].pos,g=w==="TB"?H[b.branch].pos:f;if(l){let E,z=b.customType!==void 0&&b.customType!==""?b.customType:b.type;switch(z){case P.NORMAL:E="commit-normal";break;case P.REVERSE:E="commit-reverse";break;case P.HIGHLIGHT:E="commit-highlight";break;case P.MERGE:E="commit-merge";break;case P.CHERRY_PICK:E="commit-cherry-pick";break;default:E="commit-normal"}if(z===P.HIGHLIGHT){const M=i.append("rect");M.attr("x",g-10),M.attr("y",k-10),M.attr("height",20),M.attr("width",20),M.attr("class",`commit ${b.id} commit-highlight${H[b.branch].index%U} ${E}-outer`),i.append("rect").attr("x",g-6).attr("y",k-6).attr("height",12).attr("width",12).attr("class",`commit ${b.id} commit${H[b.branch].index%U} ${E}-inner`)}else if(z===P.CHERRY_PICK)i.append("circle").attr("cx",g).attr("cy",k).attr("r",10).attr("class",`commit ${b.id} ${E}`),i.append("circle").attr("cx",g-3).attr("cy",k+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${b.id} ${E}`),i.append("circle").attr("cx",g+3).attr("cy",k+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${b.id} ${E}`),i.append("line").attr("x1",g+3).attr("y1",k+1).attr("x2",g).attr("y2",k-5).attr("stroke","#fff").attr("class",`commit ${b.id} ${E}`),i.append("line").attr("x1",g-3).attr("y1",k+1).attr("x2",g).attr("y2",k-5).attr("stroke","#fff").attr("class",`commit ${b.id} ${E}`);else{const M=i.append("circle");if(M.attr("cx",g),M.attr("cy",k),M.attr("r",b.type===P.MERGE?9:10),M.attr("class",`commit ${b.id} commit${H[b.branch].index%U}`),z===P.MERGE){const S=i.append("circle");S.attr("cx",g),S.attr("cy",k),S.attr("r",6),S.attr("class",`commit ${E} ${b.id} commit${H[b.branch].index%U}`)}z===P.REVERSE&&i.append("path").attr("d",`M ${g-5},${k-5}L${g+5},${k+5}M${g-5},${k+5}L${g+5},${k-5}`).attr("class",`commit ${E} ${b.id} commit${H[b.branch].index%U}`)}}if(w==="TB"?Y[b.id]={x:g,y:f}:Y[b.id]={x:f,y:k},l){if(b.type!==P.CHERRY_PICK&&(b.customId&&b.type===P.MERGE||b.type!==P.MERGE)&&h.showCommitLabel){const M=c.append("g"),S=M.insert("rect").attr("class","commit-label-bkg"),A=M.append("text").attr("x",p).attr("y",k+25).attr("class","commit-label").text(b.id);let o=A.node().getBBox();if(S.attr("x",f-o.width/2-2).attr("y",k+13.5).attr("width",o.width+2*2).attr("height",o.height+2*2),w==="TB"&&(S.attr("x",g-(o.width+4*4+5)).attr("y",k-12),A.attr("x",g-(o.width+4*4)).attr("y",k+o.height-12)),w!=="TB"&&A.attr("x",f-o.width/2),h.rotateCommitLabel)if(w==="TB")A.attr("transform","rotate(-45, "+g+", "+k+")"),S.attr("transform","rotate(-45, "+g+", "+k+")");else{let u=-7.5-(o.width+10)/25*9.5,d=10+o.width/25*8.5;M.attr("transform","translate("+u+", "+d+") rotate(-45, "+p+", "+k+")")}}if(b.tag){const M=c.insert("polygon"),S=c.append("circle"),A=c.append("text").attr("y",k-16).attr("class","tag-label").text(b.tag);let o=A.node().getBBox();A.attr("x",f-o.width/2);const u=o.height/2,d=k-19.2;M.attr("class","tag-label-bkg").attr("points",` +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var u=this.next();return u||this.lex()},begin:function(u){this.conditionStack.push(u)},popState:function(){var u=this.conditionStack.length-1;return u>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(u){return u=this.conditionStack.length-1-Math.abs(u||0),u>=0?this.conditionStack[u]:"INITIAL"},pushState:function(u){this.begin(u)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(u,d,s,T){switch(s){case 0:return this.begin("acc_title"),19;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),21;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return 13;case 8:break;case 9:break;case 10:return 5;case 11:return 40;case 12:return 32;case 13:return 38;case 14:return 42;case 15:return 43;case 16:return 44;case 17:return 45;case 18:return 35;case 19:return 28;case 20:return 29;case 21:return 37;case 22:return 31;case 23:return 34;case 24:return 26;case 25:return 9;case 26:return 9;case 27:return 8;case 28:return"CARET";case 29:this.begin("options");break;case 30:this.popState();break;case 31:return 12;case 32:return 36;case 33:this.begin("string");break;case 34:this.popState();break;case 35:return 33;case 36:return 30;case 37:return 46;case 38:return 7}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:parent:)/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:TB\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},options:{rules:[30,31],inclusive:!1},string:{rules:[34,35],inclusive:!1},INITIAL:{rules:[0,2,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,32,33,36,37,38,39],inclusive:!0}}};return G}();z.lexer=M;function S(){this.yy={}}return S.prototype=z,z.Parser=S,new S}();mt.parser=mt;const Vt=mt;let at=C().gitGraph.mainBranchName,Dt=C().gitGraph.mainBranchOrder,v={},I=null,tt={};tt[at]={name:at,order:Dt};let L={};L[at]=I;let A=at,kt="LR",W=0;function ut(){return Bt({length:7})}function zt(r,n){const l=Object.create(null);return r.reduce((h,i)=>{const c=n(i);return l[c]||(l[c]=!0,h.push(i)),h},[])}const jt=function(r){kt=r};let xt={};const qt=function(r){B.debug("options str",r),r=r&&r.trim(),r=r||"{}";try{xt=JSON.parse(r)}catch(n){B.error("error while parsing gitGraph options",n.message)}},Yt=function(){return xt},Ft=function(r,n,l,h){B.debug("Entering commit:",r,n,l,h),n=D.sanitizeText(n,C()),r=D.sanitizeText(r,C()),h=D.sanitizeText(h,C());const i={id:n||W+"-"+ut(),message:r,seq:W++,type:l||Q.NORMAL,tag:h||"",parents:I==null?[]:[I.id],branch:A};I=i,v[i.id]=i,L[A]=i.id,B.debug("in pushCommit "+i.id)},Kt=function(r,n){if(r=D.sanitizeText(r,C()),L[r]===void 0)L[r]=I!=null?I.id:null,tt[r]={name:r,order:n?parseInt(n,10):null},yt(r),B.debug("in createBranch");else{let l=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+r+'")');throw l.hash={text:"branch "+r,token:"branch "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+r+'"']},l}},Ut=function(r,n,l,h){r=D.sanitizeText(r,C()),n=D.sanitizeText(n,C());const i=v[L[A]],c=v[L[r]];if(A===r){let m=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},m}else if(i===void 0||!i){let m=new Error('Incorrect usage of "merge". Current branch ('+A+")has no commits");throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},m}else if(L[r]===void 0){let m=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") does not exist");throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+r]},m}else if(c===void 0||!c){let m=new Error('Incorrect usage of "merge". Branch to be merged ('+r+") has no commits");throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},m}else if(i===c){let m=new Error('Incorrect usage of "merge". Both branches have same head');throw m.hash={text:"merge "+r,token:"merge "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},m}else if(n&&v[n]!==void 0){let m=new Error('Incorrect usage of "merge". Commit with id:'+n+" already exists, use different custom Id");throw m.hash={text:"merge "+r+n+l+h,token:"merge "+r+n+l+h,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+r+" "+n+"_UNIQUE "+l+" "+h]},m}const p={id:n||W+"-"+ut(),message:"merged branch "+r+" into "+A,seq:W++,parents:[I==null?null:I.id,L[r]],branch:A,type:Q.MERGE,customType:l,customId:!!n,tag:h||""};I=p,v[p.id]=p,L[A]=p.id,B.debug(L),B.debug("in mergeBranch")},Wt=function(r,n,l,h){if(B.debug("Entering cherryPick:",r,n,l),r=D.sanitizeText(r,C()),n=D.sanitizeText(n,C()),l=D.sanitizeText(l,C()),h=D.sanitizeText(h,C()),!r||v[r]===void 0){let p=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw p.hash={text:"cherryPick "+r+" "+n,token:"cherryPick "+r+" "+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},p}let i=v[r],c=i.branch;if(h&&!(Array.isArray(i.parents)&&i.parents.includes(h)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");if(i.type===Q.MERGE&&!h)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!n||v[n]===void 0){if(c===A){let x=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw x.hash={text:"cherryPick "+r+" "+n,token:"cherryPick "+r+" "+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},x}const p=v[L[A]];if(p===void 0||!p){let x=new Error('Incorrect usage of "cherry-pick". Current branch ('+A+")has no commits");throw x.hash={text:"cherryPick "+r+" "+n,token:"cherryPick "+r+" "+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},x}const m={id:W+"-"+ut(),message:"cherry-picked "+i+" into "+A,seq:W++,parents:[I==null?null:I.id,i.id],branch:A,type:Q.CHERRY_PICK,tag:l??`cherry-pick:${i.id}${i.type===Q.MERGE?`|parent:${h}`:""}`};I=m,v[m.id]=m,L[A]=m.id,B.debug(L),B.debug("in cherryPick")}},yt=function(r){if(r=D.sanitizeText(r,C()),L[r]===void 0){let n=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+r+'")');throw n.hash={text:"checkout "+r,token:"checkout "+r,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+r+'"']},n}else{A=r;const n=L[A];I=v[n]}};function gt(r,n,l){const h=r.indexOf(n);h===-1?r.push(l):r.splice(h,1,l)}function _t(r){const n=r.reduce((i,c)=>i.seq>c.seq?i:c,r[0]);let l="";r.forEach(function(i){i===n?l+=" *":l+=" |"});const h=[l,n.id,n.seq];for(let i in L)L[i]===n.id&&h.push(i);if(B.debug(h.join(" ")),n.parents&&n.parents.length==2){const i=v[n.parents[0]];gt(r,n,i),r.push(v[n.parents[1]])}else{if(n.parents.length==0)return;{const i=v[n.parents];gt(r,n,i)}}r=zt(r,i=>i.id),_t(r)}const Jt=function(){B.debug(v);const r=Et()[0];_t([r])},Qt=function(){v={},I=null;let r=C().gitGraph.mainBranchName,n=C().gitGraph.mainBranchOrder;L={},L[r]=null,tt={},tt[r]={name:r,order:n},A=r,W=0,St()},Xt=function(){return Object.values(tt).map((n,l)=>n.order!==null?n:{...n,order:parseFloat(`0.${l}`,10)}).sort((n,l)=>n.order-l.order).map(({name:n})=>({name:n}))},Zt=function(){return L},$t=function(){return v},Et=function(){const r=Object.keys(v).map(function(n){return v[n]});return r.forEach(function(n){B.debug(n.id)}),r.sort((n,l)=>n.seq-l.seq),r},te=function(){return A},ee=function(){return kt},re=function(){return I},Q={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},ie={getConfig:()=>C().gitGraph,setDirection:jt,setOptions:qt,getOptions:Yt,commit:Ft,branch:Kt,merge:Ut,cherryPick:Wt,checkout:yt,prettyPrint:Jt,clear:Qt,getBranchesAsObjArray:Xt,getBranches:Zt,getCommits:$t,getCommitsArray:Et,getCurrentBranch:te,getDirection:ee,getHead:re,setAccTitle:vt,getAccTitle:Ct,getAccDescription:Ot,setAccDescription:Pt,setDiagramTitle:At,getDiagramTitle:Gt,commitType:Q};let Z={};const P={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},U=8;let H={},Y={},nt=[],et=0,w="LR";const se=()=>{H={},Y={},Z={},et=0,nt=[],w="LR"},Tt=r=>{const n=document.createElementNS("http://www.w3.org/2000/svg","text");let l=[];typeof r=="string"?l=r.split(/\\n|\n|/gi):Array.isArray(r)?l=r:l=[];for(const h of l){const i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=h.trim(),n.appendChild(i)}return n},ae=r=>{let n="",l=0;return r.forEach(h=>{const i=w==="TB"?Y[h].y:Y[h].x;i>=l&&(n=h,l=i)}),n||void 0},dt=(r,n,l)=>{const h=C().gitGraph,i=r.append("g").attr("class","commit-bullets"),c=r.append("g").attr("class","commit-labels");let p=0;w==="TB"&&(p=30);const x=Object.keys(n).sort((_,b)=>n[_].seq-n[b].seq),y=h.parallelCommits,a=10,R=40;x.forEach(_=>{const b=n[_];if(y)if(b.parents.length){const E=ae(b.parents);p=w==="TB"?Y[E].y+R:Y[E].x+R}else p=0,w==="TB"&&(p=30);const f=p+a,k=w==="TB"?f:H[b.branch].pos,g=w==="TB"?H[b.branch].pos:f;if(l){let E,z=b.customType!==void 0&&b.customType!==""?b.customType:b.type;switch(z){case P.NORMAL:E="commit-normal";break;case P.REVERSE:E="commit-reverse";break;case P.HIGHLIGHT:E="commit-highlight";break;case P.MERGE:E="commit-merge";break;case P.CHERRY_PICK:E="commit-cherry-pick";break;default:E="commit-normal"}if(z===P.HIGHLIGHT){const M=i.append("rect");M.attr("x",g-10),M.attr("y",k-10),M.attr("height",20),M.attr("width",20),M.attr("class",`commit ${b.id} commit-highlight${H[b.branch].index%U} ${E}-outer`),i.append("rect").attr("x",g-6).attr("y",k-6).attr("height",12).attr("width",12).attr("class",`commit ${b.id} commit${H[b.branch].index%U} ${E}-inner`)}else if(z===P.CHERRY_PICK)i.append("circle").attr("cx",g).attr("cy",k).attr("r",10).attr("class",`commit ${b.id} ${E}`),i.append("circle").attr("cx",g-3).attr("cy",k+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${b.id} ${E}`),i.append("circle").attr("cx",g+3).attr("cy",k+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${b.id} ${E}`),i.append("line").attr("x1",g+3).attr("y1",k+1).attr("x2",g).attr("y2",k-5).attr("stroke","#fff").attr("class",`commit ${b.id} ${E}`),i.append("line").attr("x1",g-3).attr("y1",k+1).attr("x2",g).attr("y2",k-5).attr("stroke","#fff").attr("class",`commit ${b.id} ${E}`);else{const M=i.append("circle");if(M.attr("cx",g),M.attr("cy",k),M.attr("r",b.type===P.MERGE?9:10),M.attr("class",`commit ${b.id} commit${H[b.branch].index%U}`),z===P.MERGE){const S=i.append("circle");S.attr("cx",g),S.attr("cy",k),S.attr("r",6),S.attr("class",`commit ${E} ${b.id} commit${H[b.branch].index%U}`)}z===P.REVERSE&&i.append("path").attr("d",`M ${g-5},${k-5}L${g+5},${k+5}M${g-5},${k+5}L${g+5},${k-5}`).attr("class",`commit ${E} ${b.id} commit${H[b.branch].index%U}`)}}if(w==="TB"?Y[b.id]={x:g,y:f}:Y[b.id]={x:f,y:k},l){if(b.type!==P.CHERRY_PICK&&(b.customId&&b.type===P.MERGE||b.type!==P.MERGE)&&h.showCommitLabel){const M=c.append("g"),S=M.insert("rect").attr("class","commit-label-bkg"),G=M.append("text").attr("x",p).attr("y",k+25).attr("class","commit-label").text(b.id);let o=G.node().getBBox();if(S.attr("x",f-o.width/2-2).attr("y",k+13.5).attr("width",o.width+2*2).attr("height",o.height+2*2),w==="TB"&&(S.attr("x",g-(o.width+4*4+5)).attr("y",k-12),G.attr("x",g-(o.width+4*4)).attr("y",k+o.height-12)),w!=="TB"&&G.attr("x",f-o.width/2),h.rotateCommitLabel)if(w==="TB")G.attr("transform","rotate(-45, "+g+", "+k+")"),S.attr("transform","rotate(-45, "+g+", "+k+")");else{let u=-7.5-(o.width+10)/25*9.5,d=10+o.width/25*8.5;M.attr("transform","translate("+u+", "+d+") rotate(-45, "+p+", "+k+")")}}if(b.tag){const M=c.insert("polygon"),S=c.append("circle"),G=c.append("text").attr("y",k-16).attr("class","tag-label").text(b.tag);let o=G.node().getBBox();G.attr("x",f-o.width/2);const u=o.height/2,d=k-19.2;M.attr("class","tag-label-bkg").attr("points",` ${p-o.width/2-4/2},${d+2} ${p-o.width/2-4/2},${d-2} ${f-o.width/2-4},${d-u-2} @@ -15,7 +15,7 @@ Expecting `+st.join(", ")+", got '"+(this.terminals_[N]||N)+"'":ht="Parse error ${g+a},${p-u-2} ${g+a+o.width+4},${p-u-2} ${g+a+o.width+4},${p+u+2} - ${g+a},${p+u+2}`).attr("transform","translate(12,12) rotate(45, "+g+","+p+")"),S.attr("cx",g+4/2).attr("cy",p).attr("transform","translate(12,12) rotate(45, "+g+","+p+")"),A.attr("x",g+5).attr("y",p+3).attr("transform","translate(14,14) rotate(45, "+g+","+p+")"))}}p+=R+a,p>et&&(et=p)})},ne=(r,n,l,h,i)=>{const p=(w==="TB"?l.xy.branch===p,x=y=>y.seq>r.seq&&y.seqx(y)&&m(y))},$=(r,n,l=0)=>{const h=r+Math.abs(r-n)/2;if(l>5)return h;if(nt.every(p=>Math.abs(p-h)>=10))return nt.push(h),h;const c=Math.abs(r-n);return $(r,n-c/5,l+1)},ce=(r,n,l,h)=>{const i=Y[n.id],c=Y[l.id],p=ne(n,l,i,c,h);let m="",x="",y=0,a=0,R=H[l.branch].index;l.type===P.MERGE&&n.id!==l.parents[0]&&(R=H[n.branch].index);let _;if(p){m="A 10 10, 0, 0, 0,",x="A 10 10, 0, 0, 1,",y=10,a=10;const b=i.yc.x&&(m="A 20 20, 0, 0, 0,",x="A 20 20, 0, 0, 1,",y=20,a=20,l.type===P.MERGE&&n.id!==l.parents[0]?_=`M ${i.x} ${i.y} L ${i.x} ${c.y-y} ${x} ${i.x-a} ${c.y} L ${c.x} ${c.y}`:_=`M ${i.x} ${i.y} L ${c.x+y} ${i.y} ${m} ${c.x} ${i.y+a} L ${c.x} ${c.y}`),i.x===c.x&&(_=`M ${i.x} ${i.y} L ${c.x} ${c.y}`)):(i.yc.y&&(l.type===P.MERGE&&n.id!==l.parents[0]?_=`M ${i.x} ${i.y} L ${c.x-y} ${i.y} ${m} ${c.x} ${i.y-a} L ${c.x} ${c.y}`:_=`M ${i.x} ${i.y} L ${i.x} ${c.y+y} ${x} ${i.x+a} ${c.y} L ${c.x} ${c.y}`),i.y===c.y&&(_=`M ${i.x} ${i.y} L ${c.x} ${c.y}`));r.append("path").attr("d",_).attr("class","arrow arrow"+R%U)},oe=(r,n)=>{const l=r.append("g").attr("class","commit-arrows");Object.keys(n).forEach(h=>{const i=n[h];i.parents&&i.parents.length>0&&i.parents.forEach(c=>{ce(l,n[c],i,n)})})},le=(r,n)=>{const l=C().gitGraph,h=r.append("g");n.forEach((i,c)=>{const p=c%U,m=H[i.name].pos,x=h.append("line");x.attr("x1",0),x.attr("y1",m),x.attr("x2",et),x.attr("y2",m),x.attr("class","branch branch"+p),w==="TB"&&(x.attr("y1",30),x.attr("x1",m),x.attr("y2",et),x.attr("x2",m)),nt.push(m);let y=i.name;const a=Tt(y),R=h.insert("rect"),b=h.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+p);b.node().appendChild(a);let f=a.getBBox();R.attr("class","branchLabelBkg label"+p).attr("rx",4).attr("ry",4).attr("x",-f.width-4-(l.rotateCommitLabel===!0?30:0)).attr("y",-f.height/2+8).attr("width",f.width+18).attr("height",f.height+4),b.attr("transform","translate("+(-f.width-14-(l.rotateCommitLabel===!0?30:0))+", "+(m-f.height/2-1)+")"),w==="TB"&&(R.attr("x",m-f.width/2-10).attr("y",0),b.attr("transform","translate("+(m-f.width/2-5)+", 0)")),w!=="TB"&&R.attr("transform","translate(-19, "+(m-f.height/2)+")")})},he=function(r,n,l,h){se();const i=C(),c=i.gitGraph;B.debug("in gitgraph renderer",r+` + ${g+a},${p+u+2}`).attr("transform","translate(12,12) rotate(45, "+g+","+p+")"),S.attr("cx",g+4/2).attr("cy",p).attr("transform","translate(12,12) rotate(45, "+g+","+p+")"),G.attr("x",g+5).attr("y",p+3).attr("transform","translate(14,14) rotate(45, "+g+","+p+")"))}}p+=R+a,p>et&&(et=p)})},ne=(r,n,l,h,i)=>{const p=(w==="TB"?l.xy.branch===p,x=y=>y.seq>r.seq&&y.seqx(y)&&m(y))},$=(r,n,l=0)=>{const h=r+Math.abs(r-n)/2;if(l>5)return h;if(nt.every(p=>Math.abs(p-h)>=10))return nt.push(h),h;const c=Math.abs(r-n);return $(r,n-c/5,l+1)},ce=(r,n,l,h)=>{const i=Y[n.id],c=Y[l.id],p=ne(n,l,i,c,h);let m="",x="",y=0,a=0,R=H[l.branch].index;l.type===P.MERGE&&n.id!==l.parents[0]&&(R=H[n.branch].index);let _;if(p){m="A 10 10, 0, 0, 0,",x="A 10 10, 0, 0, 1,",y=10,a=10;const b=i.yc.x&&(m="A 20 20, 0, 0, 0,",x="A 20 20, 0, 0, 1,",y=20,a=20,l.type===P.MERGE&&n.id!==l.parents[0]?_=`M ${i.x} ${i.y} L ${i.x} ${c.y-y} ${x} ${i.x-a} ${c.y} L ${c.x} ${c.y}`:_=`M ${i.x} ${i.y} L ${c.x+y} ${i.y} ${m} ${c.x} ${i.y+a} L ${c.x} ${c.y}`),i.x===c.x&&(_=`M ${i.x} ${i.y} L ${c.x} ${c.y}`)):(i.yc.y&&(l.type===P.MERGE&&n.id!==l.parents[0]?_=`M ${i.x} ${i.y} L ${c.x-y} ${i.y} ${m} ${c.x} ${i.y-a} L ${c.x} ${c.y}`:_=`M ${i.x} ${i.y} L ${i.x} ${c.y+y} ${x} ${i.x+a} ${c.y} L ${c.x} ${c.y}`),i.y===c.y&&(_=`M ${i.x} ${i.y} L ${c.x} ${c.y}`));r.append("path").attr("d",_).attr("class","arrow arrow"+R%U)},oe=(r,n)=>{const l=r.append("g").attr("class","commit-arrows");Object.keys(n).forEach(h=>{const i=n[h];i.parents&&i.parents.length>0&&i.parents.forEach(c=>{ce(l,n[c],i,n)})})},le=(r,n)=>{const l=C().gitGraph,h=r.append("g");n.forEach((i,c)=>{const p=c%U,m=H[i.name].pos,x=h.append("line");x.attr("x1",0),x.attr("y1",m),x.attr("x2",et),x.attr("y2",m),x.attr("class","branch branch"+p),w==="TB"&&(x.attr("y1",30),x.attr("x1",m),x.attr("y2",et),x.attr("x2",m)),nt.push(m);let y=i.name;const a=Tt(y),R=h.insert("rect"),b=h.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+p);b.node().appendChild(a);let f=a.getBBox();R.attr("class","branchLabelBkg label"+p).attr("rx",4).attr("ry",4).attr("x",-f.width-4-(l.rotateCommitLabel===!0?30:0)).attr("y",-f.height/2+8).attr("width",f.width+18).attr("height",f.height+4),b.attr("transform","translate("+(-f.width-14-(l.rotateCommitLabel===!0?30:0))+", "+(m-f.height/2-1)+")"),w==="TB"&&(R.attr("x",m-f.width/2-10).attr("y",0),b.attr("transform","translate("+(m-f.width/2-5)+", 0)")),w!=="TB"&&R.attr("transform","translate(-19, "+(m-f.height/2)+")")})},he=function(r,n,l,h){se();const i=C(),c=i.gitGraph;B.debug("in gitgraph renderer",r+` `,"id:",n,l),Z=h.db.getCommits();const p=h.db.getBranchesAsObjArray();w=h.db.getDirection();const m=It(`[id="${n}"]`);let x=0;p.forEach((y,a)=>{const R=Tt(y.name),_=m.append("g"),b=_.insert("g").attr("class","branchLabel"),f=b.insert("g").attr("class","label branch-label");f.node().appendChild(R);let k=R.getBBox();H[y.name]={pos:x,index:a},x+=50+(c.rotateCommitLabel?40:0)+(w==="TB"?k.width/2:0),f.remove(),b.remove(),_.remove()}),dt(m,Z,!1),c.showBranches&&le(m,p),oe(m,Z),dt(m,Z,!0),Nt.insertTitle(m,"gitTitleText",c.titleTopMargin,h.db.getDiagramTitle()),Ht(void 0,m,c.diagramPadding,c.useMaxWidth??i.useMaxWidth)},me={draw:he},ue=r=>` .commit-id, .commit-msg, diff --git a/assets/chunks/graph.C4kgFXP1.js b/assets/chunks/graph.C4kgFXP1.js new file mode 100644 index 00000000..99175847 --- /dev/null +++ b/assets/chunks/graph.C4kgFXP1.js @@ -0,0 +1 @@ +import{B as I,C as Ze,S as m,D as y,E as Te,F as qe,G as Xe,H as Je,I as Ee,J as G,K as X,L as Qe,M as me,N as We,O as C,P as x,Q as Oe,R as ve,T as ze,U as Z,V as Ve,W as ke,X as P,Y as en,Z as nn,_ as rn,$ as re,a0 as tn,a1 as sn,a2 as an,a3 as we,a4 as un,a5 as j,a6 as fn,a7 as on,a8 as M,a9 as te,aa as ie}from"../app.DRN3unl1.js";var dn="[object Symbol]";function J(e){return typeof e=="symbol"||I(e)&&Ze(e)==dn}function $e(e,n){for(var r=-1,t=e==null?0:e.length,i=Array(t);++r-1}function T(e){return Te(e)?qe(e):Xe(e)}var yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,An=/^\w*$/;function Q(e,n){if(y(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||J(e)?!0:An.test(e)||!yn.test(e)||n!=null&&e in Object(n)}var Tn=500;function En(e){var n=Je(e,function(t){return r.size===Tn&&r.clear(),t}),r=n.cache;return n}var mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,On=/\\(\\)?/g,vn=En(function(e){var n=[];return e.charCodeAt(0)===46&&n.push(""),e.replace(mn,function(r,t,i,s){n.push(i?s.replace(On,"$1"):t||r)}),n});function wn(e){return e==null?"":Le(e)}function Ie(e,n){return y(e)?e:Q(e,n)?[e]:vn(wn(e))}var $n=1/0;function U(e){if(typeof e=="string"||J(e))return e;var n=e+"";return n=="0"&&1/e==-$n?"-0":n}function Ce(e,n){n=Ie(n,e);for(var r=0,t=n.length;e!=null&&ru))return!1;var l=s.get(e),g=s.get(n);if(l&&g)return l==n&&g==e;var o=-1,h=!0,A=r&Qr?new S:void 0;for(s.set(e,n),s.set(n,e);++o=Ht){var l=Kt(e);if(l)return V(l);a=!1,i=Ge,f=new S}else f=u;e:for(;++t1?i.setNode(s,r):i.setNode(s)}),this}setNode(n,r){return E(this._nodes,n)?(arguments.length>1&&(this._nodes[n]=r),this):(this._nodes[n]=arguments.length>1?r:this._defaultNodeLabelFn(n),this._isCompound&&(this._parent[n]=w,this._children[n]={},this._children[w][n]=!0),this._in[n]={},this._preds[n]={},this._out[n]={},this._sucs[n]={},++this._nodeCount,this)}node(n){return this._nodes[n]}hasNode(n){return E(this._nodes,n)}removeNode(n){var r=this;if(E(this._nodes,n)){var t=function(i){r.removeEdge(r._edgeObjs[i])};delete this._nodes[n],this._isCompound&&(this._removeFromParentsChildList(n),delete this._parent[n],v(this.children(n),function(i){r.setParent(i)}),delete this._children[n]),v(T(this._in[n]),t),delete this._in[n],delete this._preds[n],v(T(this._out[n]),t),delete this._out[n],delete this._sucs[n],--this._nodeCount}return this}setParent(n,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if($(r))r=w;else{r+="";for(var t=r;!$(t);t=this.parent(t))if(t===n)throw new Error("Setting "+r+" as parent of "+n+" would create a cycle");this.setNode(r)}return this.setNode(n),this._removeFromParentsChildList(n),this._parent[n]=r,this._children[r][n]=!0,this}_removeFromParentsChildList(n){delete this._children[this._parent[n]][n]}parent(n){if(this._isCompound){var r=this._parent[n];if(r!==w)return r}}children(n){if($(n)&&(n=w),this._isCompound){var r=this._children[n];if(r)return T(r)}else{if(n===w)return this.nodes();if(this.hasNode(n))return[]}}predecessors(n){var r=this._preds[n];if(r)return T(r)}successors(n){var r=this._sucs[n];if(r)return T(r)}neighbors(n){var r=this.predecessors(n);if(r)return Zt(r,this.successors(n))}isLeaf(n){var r;return this.isDirected()?r=this.successors(n):r=this.neighbors(n),r.length===0}filterNodes(n){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var t=this;v(this._nodes,function(a,u){n(u)&&r.setNode(u,a)}),v(this._edgeObjs,function(a){r.hasNode(a.v)&&r.hasNode(a.w)&&r.setEdge(a,t.edge(a))});var i={};function s(a){var u=t.parent(a);return u===void 0||r.hasNode(u)?(i[a]=u,u):u in i?i[u]:s(u)}return this._isCompound&&v(r.nodes(),function(a){r.setParent(a,s(a))}),r}setDefaultEdgeLabel(n){return te(n)||(n=M(n)),this._defaultEdgeLabelFn=n,this}edgeCount(){return this._edgeCount}edges(){return H(this._edgeObjs)}setPath(n,r){var t=this,i=arguments;return jt(n,function(s,a){return i.length>1?t.setEdge(s,a,r):t.setEdge(s,a),a}),this}setEdge(){var n,r,t,i,s=!1,a=arguments[0];typeof a=="object"&&a!==null&&"v"in a?(n=a.v,r=a.w,t=a.name,arguments.length===2&&(i=arguments[1],s=!0)):(n=a,r=arguments[1],t=arguments[3],arguments.length>2&&(i=arguments[2],s=!0)),n=""+n,r=""+r,$(t)||(t=""+t);var u=L(this._isDirected,n,r,t);if(E(this._edgeLabels,u))return s&&(this._edgeLabels[u]=i),this;if(!$(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(n),this.setNode(r),this._edgeLabels[u]=s?i:this._defaultEdgeLabelFn(n,r,t);var f=Xt(this._isDirected,n,r,t);return n=f.v,r=f.w,Object.freeze(f),this._edgeObjs[u]=f,ye(this._preds[r],n),ye(this._sucs[n],r),this._in[r][u]=f,this._out[n][u]=f,this._edgeCount++,this}edge(n,r,t){var i=arguments.length===1?Y(this._isDirected,arguments[0]):L(this._isDirected,n,r,t);return this._edgeLabels[i]}hasEdge(n,r,t){var i=arguments.length===1?Y(this._isDirected,arguments[0]):L(this._isDirected,n,r,t);return E(this._edgeLabels,i)}removeEdge(n,r,t){var i=arguments.length===1?Y(this._isDirected,arguments[0]):L(this._isDirected,n,r,t),s=this._edgeObjs[i];return s&&(n=s.v,r=s.w,delete this._edgeLabels[i],delete this._edgeObjs[i],Ae(this._preds[r],n),Ae(this._sucs[n],r),delete this._in[r][i],delete this._out[n][i],this._edgeCount--),this}inEdges(n,r){var t=this._in[n];if(t){var i=H(t);return r?D(i,function(s){return s.v===r}):i}}outEdges(n,r){var t=this._out[n];if(t){var i=H(t);return r?D(i,function(s){return s.w===r}):i}}nodeEdges(n,r){var t=this.inEdges(n,r);if(t)return t.concat(this.outEdges(n,r))}}Ye.prototype._nodeCount=0;Ye.prototype._edgeCount=0;function ye(e,n){e[n]?e[n]++:e[n]=1}function Ae(e,n){--e[n]||delete e[n]}function L(e,n,r,t){var i=""+n,s=""+r;if(!e&&i>s){var a=i;i=s,s=a}return i+be+s+be+($(t)?qt:t)}function Xt(e,n,r,t){var i=""+n,s=""+r;if(!e&&i>s){var a=i;i=s,s=a}var u={v:i,w:s};return t&&(u.name=t),u}function Y(e,n){return L(e,n.v,n.w,n.name)}export{Ye as G,B as a,In as b,He as c,ln as d,ee as e,v as f,$e as g,E as h,J as i,Ft as j,T as k,St as l,Ie as m,Ce as n,vt as o,wn as p,$ as q,D as r,jt as s,U as t,H as v}; diff --git a/assets/chunks/graph.CwfrPCLx.js b/assets/chunks/graph.CwfrPCLx.js deleted file mode 100644 index d4d22f6f..00000000 --- a/assets/chunks/graph.CwfrPCLx.js +++ /dev/null @@ -1 +0,0 @@ -import{H as I,I as Ze,J as m,K as y,L as Te,M as qe,N as Xe,O as Je,P as Ee,Q as G,R as X,T as Qe,U as me,V as We,W as C,X as D,Y as Oe,Z as ve,_ as ze,$ as Z,a0 as Ve,a1 as ke,a2 as P,a3 as en,a4 as nn,a5 as rn,a6 as re,a7 as tn,a8 as sn,a9 as an,aa as we,ab as un,ac as j,ad as fn,ae as on,af as M,z as te,ag as ie}from"../app.CbQoAe_D.js";var dn="[object Symbol]";function J(e){return typeof e=="symbol"||I(e)&&Ze(e)==dn}function $e(e,n){for(var r=-1,t=e==null?0:e.length,i=Array(t);++r-1}function T(e){return Te(e)?qe(e):Xe(e)}var yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,An=/^\w*$/;function Q(e,n){if(y(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||J(e)?!0:An.test(e)||!yn.test(e)||n!=null&&e in Object(n)}var Tn=500;function En(e){var n=Je(e,function(t){return r.size===Tn&&r.clear(),t}),r=n.cache;return n}var mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,On=/\\(\\)?/g,vn=En(function(e){var n=[];return e.charCodeAt(0)===46&&n.push(""),e.replace(mn,function(r,t,i,s){n.push(i?s.replace(On,"$1"):t||r)}),n});function wn(e){return e==null?"":Le(e)}function Ie(e,n){return y(e)?e:Q(e,n)?[e]:vn(wn(e))}var $n=1/0;function U(e){if(typeof e=="string"||J(e))return e;var n=e+"";return n=="0"&&1/e==-$n?"-0":n}function Ce(e,n){n=Ie(n,e);for(var r=0,t=n.length;e!=null&&ru))return!1;var l=s.get(e),g=s.get(n);if(l&&g)return l==n&&g==e;var o=-1,h=!0,A=r&Qr?new S:void 0;for(s.set(e,n),s.set(n,e);++o=Ht){var l=Kt(e);if(l)return V(l);a=!1,i=Ge,f=new S}else f=u;e:for(;++t1?i.setNode(s,r):i.setNode(s)}),this}setNode(n,r){return E(this._nodes,n)?(arguments.length>1&&(this._nodes[n]=r),this):(this._nodes[n]=arguments.length>1?r:this._defaultNodeLabelFn(n),this._isCompound&&(this._parent[n]=w,this._children[n]={},this._children[w][n]=!0),this._in[n]={},this._preds[n]={},this._out[n]={},this._sucs[n]={},++this._nodeCount,this)}node(n){return this._nodes[n]}hasNode(n){return E(this._nodes,n)}removeNode(n){var r=this;if(E(this._nodes,n)){var t=function(i){r.removeEdge(r._edgeObjs[i])};delete this._nodes[n],this._isCompound&&(this._removeFromParentsChildList(n),delete this._parent[n],v(this.children(n),function(i){r.setParent(i)}),delete this._children[n]),v(T(this._in[n]),t),delete this._in[n],delete this._preds[n],v(T(this._out[n]),t),delete this._out[n],delete this._sucs[n],--this._nodeCount}return this}setParent(n,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if($(r))r=w;else{r+="";for(var t=r;!$(t);t=this.parent(t))if(t===n)throw new Error("Setting "+r+" as parent of "+n+" would create a cycle");this.setNode(r)}return this.setNode(n),this._removeFromParentsChildList(n),this._parent[n]=r,this._children[r][n]=!0,this}_removeFromParentsChildList(n){delete this._children[this._parent[n]][n]}parent(n){if(this._isCompound){var r=this._parent[n];if(r!==w)return r}}children(n){if($(n)&&(n=w),this._isCompound){var r=this._children[n];if(r)return T(r)}else{if(n===w)return this.nodes();if(this.hasNode(n))return[]}}predecessors(n){var r=this._preds[n];if(r)return T(r)}successors(n){var r=this._sucs[n];if(r)return T(r)}neighbors(n){var r=this.predecessors(n);if(r)return Zt(r,this.successors(n))}isLeaf(n){var r;return this.isDirected()?r=this.successors(n):r=this.neighbors(n),r.length===0}filterNodes(n){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var t=this;v(this._nodes,function(a,u){n(u)&&r.setNode(u,a)}),v(this._edgeObjs,function(a){r.hasNode(a.v)&&r.hasNode(a.w)&&r.setEdge(a,t.edge(a))});var i={};function s(a){var u=t.parent(a);return u===void 0||r.hasNode(u)?(i[a]=u,u):u in i?i[u]:s(u)}return this._isCompound&&v(r.nodes(),function(a){r.setParent(a,s(a))}),r}setDefaultEdgeLabel(n){return te(n)||(n=M(n)),this._defaultEdgeLabelFn=n,this}edgeCount(){return this._edgeCount}edges(){return H(this._edgeObjs)}setPath(n,r){var t=this,i=arguments;return jt(n,function(s,a){return i.length>1?t.setEdge(s,a,r):t.setEdge(s,a),a}),this}setEdge(){var n,r,t,i,s=!1,a=arguments[0];typeof a=="object"&&a!==null&&"v"in a?(n=a.v,r=a.w,t=a.name,arguments.length===2&&(i=arguments[1],s=!0)):(n=a,r=arguments[1],t=arguments[3],arguments.length>2&&(i=arguments[2],s=!0)),n=""+n,r=""+r,$(t)||(t=""+t);var u=L(this._isDirected,n,r,t);if(E(this._edgeLabels,u))return s&&(this._edgeLabels[u]=i),this;if(!$(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(n),this.setNode(r),this._edgeLabels[u]=s?i:this._defaultEdgeLabelFn(n,r,t);var f=Xt(this._isDirected,n,r,t);return n=f.v,r=f.w,Object.freeze(f),this._edgeObjs[u]=f,ye(this._preds[r],n),ye(this._sucs[n],r),this._in[r][u]=f,this._out[n][u]=f,this._edgeCount++,this}edge(n,r,t){var i=arguments.length===1?Y(this._isDirected,arguments[0]):L(this._isDirected,n,r,t);return this._edgeLabels[i]}hasEdge(n,r,t){var i=arguments.length===1?Y(this._isDirected,arguments[0]):L(this._isDirected,n,r,t);return E(this._edgeLabels,i)}removeEdge(n,r,t){var i=arguments.length===1?Y(this._isDirected,arguments[0]):L(this._isDirected,n,r,t),s=this._edgeObjs[i];return s&&(n=s.v,r=s.w,delete this._edgeLabels[i],delete this._edgeObjs[i],Ae(this._preds[r],n),Ae(this._sucs[n],r),delete this._in[r][i],delete this._out[n][i],this._edgeCount--),this}inEdges(n,r){var t=this._in[n];if(t){var i=H(t);return r?x(i,function(s){return s.v===r}):i}}outEdges(n,r){var t=this._out[n];if(t){var i=H(t);return r?x(i,function(s){return s.w===r}):i}}nodeEdges(n,r){var t=this.inEdges(n,r);if(t)return t.concat(this.outEdges(n,r))}}Ye.prototype._nodeCount=0;Ye.prototype._edgeCount=0;function ye(e,n){e[n]?e[n]++:e[n]=1}function Ae(e,n){--e[n]||delete e[n]}function L(e,n,r,t){var i=""+n,s=""+r;if(!e&&i>s){var a=i;i=s,s=a}return i+be+s+be+($(t)?qt:t)}function Xt(e,n,r,t){var i=""+n,s=""+r;if(!e&&i>s){var a=i;i=s,s=a}var u={v:i,w:s};return t&&(u.name=t),u}function Y(e,n){return L(e,n.v,n.w,n.name)}export{Ye as G,B as a,In as b,He as c,ln as d,ee as e,v as f,$e as g,E as h,J as i,Ft as j,T as k,St as l,Ie as m,Ce as n,vt as o,wn as p,$ as q,x as r,jt as s,U as t,H as v}; diff --git a/assets/chunks/index-01f381cb.Dh9et-Tw.js b/assets/chunks/index-9620d214.nAHig6oE.js similarity index 96% rename from assets/chunks/index-01f381cb.Dh9et-Tw.js rename to assets/chunks/index-9620d214.nAHig6oE.js index fbcc3edf..467887e8 100644 --- a/assets/chunks/index-01f381cb.Dh9et-Tw.js +++ b/assets/chunks/index-9620d214.nAHig6oE.js @@ -1 +1 @@ -import{q as N,G as A}from"./graph.CwfrPCLx.js";import{m as $,l as H}from"./layout.Ds1muZd1.js";import{c as V}from"./clone.BumBiDEu.js";import{i as q,u as U,s as W,a as _,b as z,g as D,p as O,c as K,d as Q,e as Y,f as Z,h as J,j as p}from"./edges-066a5561.CpbBxaaE.js";import{l as s,c as T,p as S,h as L}from"../app.CbQoAe_D.js";import{c as I}from"./createText-ca0c5216.5u9lbHcb.js";function m(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:tt(e),edges:et(e)};return N(e.graph())||(t.value=V(e.graph())),t}function tt(e){return $(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),i={v:t};return N(n)||(i.value=n),N(r)||(i.parent=r),i})}function et(e){return $(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return N(t.name)||(r.name=t.name),N(n)||(r.value=n),r})}let l={},g={},R={};const nt=()=>{g={},R={},l={}},B=(e,t)=>(s.trace("In isDescendant",t," ",e," = ",g[t].includes(e)),!!g[t].includes(e)),it=(e,t)=>(s.info("Descendants of ",t," is ",g[t]),s.info("Edge is ",e),e.v===t||e.w===t?!1:g[t]?g[t].includes(e.v)||B(e.v,t)||B(e.w,t)||g[t].includes(e.w):(s.debug("Tilt, ",t,",not in descendants"),!1)),P=(e,t,n,r)=>{s.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),s.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach(a=>{if(t.children(a).length>0)P(a,t,n,r);else{const d=t.node(a);s.info("cp ",a," to ",r," with parent ",e),n.setNode(a,d),r!==t.parent(a)&&(s.warn("Setting parent",a,t.parent(a)),n.setParent(a,t.parent(a))),e!==r&&a!==e?(s.debug("Setting parent",a,e),n.setParent(a,e)):(s.info("In copy ",e,"root",r,"data",t.node(e),r),s.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==r,"node!==clusterId",a!==e));const u=t.edges(a);s.debug("Copying Edges",u),u.forEach(f=>{s.info("Edge",f);const h=t.edge(f.v,f.w,f.name);s.info("Edge data",h,r);try{it(f,r)?(s.info("Copying as ",f.v,f.w,h,f.name),n.setEdge(f.v,f.w,h,f.name),s.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):s.info("Skipping copy of edge ",f.v,"-->",f.w," rootId: ",r," clusterId:",e)}catch(w){s.error(w)}})}s.debug("Removing node",a),t.removeNode(a)})},k=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)R[i]=e,r=[...r,...k(i,t)];return r},C=(e,t)=>{s.trace("Searching",e);const n=t.children(e);if(s.trace("Searching children of id ",e,n),n.length<1)return s.trace("This is a valid node",e),e;for(const r of n){const i=C(r,t);if(i)return s.trace("Found replacement for",e," => ",i),i}},X=e=>!l[e]||!l[e].externalConnections?e:l[e]?l[e].id:e,st=(e,t)=>{if(!e||t>10){s.debug("Opting out, no graph ");return}else s.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(s.warn("Cluster identified",n," Replacement id in edges: ",C(n,e)),g[n]=k(n,e),l[n]={id:C(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){const r=e.children(n),i=e.edges();r.length>0?(s.debug("Cluster identified",n,g),i.forEach(a=>{if(a.v!==n&&a.w!==n){const d=B(a.v,n),u=B(a.w,n);d^u&&(s.warn("Edge: ",a," leaves cluster ",n),s.warn("Descendants of XXX ",n,": ",g[n]),l[n].externalConnections=!0)}})):s.debug("Not a cluster ",n,g)});for(let n of Object.keys(l)){const r=l[n].id,i=e.parent(r);i!==n&&l[i]&&!l[i].externalConnections&&(l[n].id=i)}e.edges().forEach(function(n){const r=e.edge(n);s.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),s.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let i=n.v,a=n.w;if(s.warn("Fix XXX",l,"ids:",n.v,n.w,"Translating: ",l[n.v]," --- ",l[n.w]),l[n.v]&&l[n.w]&&l[n.v]===l[n.w]){s.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),s.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),i=X(n.v),a=X(n.w),e.removeEdge(n.v,n.w,n.name);const d=n.w+"---"+n.v;e.setNode(d,{domId:d,id:d,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});const u=structuredClone(r),f=structuredClone(r);u.label="",u.arrowTypeEnd="none",f.label="",u.fromCluster=n.v,f.toCluster=n.v,e.setEdge(i,d,u,n.name+"-cyclic-special"),e.setEdge(d,a,f,n.name+"-cyclic-special")}else if(l[n.v]||l[n.w]){if(s.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),i=X(n.v),a=X(n.w),e.removeEdge(n.v,n.w,n.name),i!==n.v){const d=e.parent(i);l[d].externalConnections=!0,r.fromCluster=n.v}if(a!==n.w){const d=e.parent(a);l[d].externalConnections=!0,r.toCluster=n.w}s.warn("Fix Replacing with XXX",i,a,n.name),e.setEdge(i,a,r,n.name)}}),s.warn("Adjusted Graph",m(e)),F(e,0),s.trace(l)},F=(e,t)=>{if(s.warn("extractor - ",t,m(e),e.children("D")),t>10){s.error("Bailing out");return}let n=e.nodes(),r=!1;for(const i of n){const a=e.children(i);r=r||a.length>0}if(!r){s.debug("Done, no node has children",e.nodes());return}s.debug("Nodes = ",n,t);for(const i of n)if(s.debug("Extracting node",i,l,l[i]&&!l[i].externalConnections,!e.parent(i),e.node(i),e.children("D")," Depth ",t),!l[i])s.debug("Not a cluster",i,t);else if(!l[i].externalConnections&&e.children(i)&&e.children(i).length>0){s.warn("Cluster without external connections, without a parent and with children",i,t);let d=e.graph().rankdir==="TB"?"LR":"TB";l[i]&&l[i].clusterData&&l[i].clusterData.dir&&(d=l[i].clusterData.dir,s.warn("Fixing dir",l[i].clusterData.dir,d));const u=new A({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});s.warn("Old graph before copy",m(e)),P(i,e,u,i),e.setNode(i,{clusterNode:!0,id:i,clusterData:l[i].clusterData,labelText:l[i].labelText,graph:u}),s.warn("New graph after copy node: (",i,")",m(u)),s.debug("Old graph after copy",m(e))}else s.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!l[i].externalConnections," no parent: ",!e.parent(i)," children ",e.children(i)&&e.children(i).length>0,e.children("D"),t),s.debug(l);n=e.nodes(),s.warn("New list of nodes",n);for(const i of n){const a=e.node(i);s.warn(" Now next level",i,a),a.clusterNode&&F(a.graph,t+1)}},G=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{const i=e.children(r),a=G(e,i);n=[...n,...a]}),n},rt=e=>G(e,e.children()),at=(e,t)=>{s.info("Creating subgraph rect for ",t.id,t);const n=T(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),a=S(n.flowchart.htmlLabels),d=r.insert("g").attr("class","cluster-label"),u=t.labelType==="markdown"?I(d,t.labelText,{style:t.labelStyle,useHtmlLabels:a}):d.node().appendChild(J(t.labelText,t.labelStyle,void 0,!0));let f=u.getBBox();if(S(n.flowchart.htmlLabels)){const c=u.children[0],o=L(u);f=c.getBoundingClientRect(),o.attr("width",f.width),o.attr("height",f.height)}const h=0*t.padding,w=h/2,x=t.width<=f.width+h?f.width+h:t.width;t.width<=f.width+h?t.diff=(f.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,s.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-x/2).attr("y",t.y-t.height/2-w).attr("width",x).attr("height",t.height+h);const{subGraphTitleTopMargin:v}=D(n);a?d.attr("transform",`translate(${t.x-f.width/2}, ${t.y-t.height/2+v})`):d.attr("transform",`translate(${t.x}, ${t.y-t.height/2+v})`);const y=i.node().getBBox();return t.width=y.width,t.height=y.height,t.intersect=function(c){return p(t,c)},r},ct=(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2-a).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.intersect=function(u){return p(t,u)},n},ot=(e,t)=>{const n=T(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),a=r.insert("g").attr("class","cluster-label"),d=r.append("rect"),u=a.node().appendChild(J(t.labelText,t.labelStyle,void 0,!0));let f=u.getBBox();if(S(n.flowchart.htmlLabels)){const c=u.children[0],o=L(u);f=c.getBoundingClientRect(),o.attr("width",f.width),o.attr("height",f.height)}f=u.getBBox();const h=0*t.padding,w=h/2,x=t.width<=f.width+t.padding?f.width+t.padding:t.width;t.width<=f.width+t.padding?t.diff=(f.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-x/2-w).attr("y",t.y-t.height/2-w).attr("width",x+h).attr("height",t.height+h),d.attr("class","inner").attr("x",t.x-x/2-w).attr("y",t.y-t.height/2-w+f.height-1).attr("width",x+h).attr("height",t.height+h-f.height-3);const{subGraphTitleTopMargin:v}=D(n);a.attr("transform",`translate(${t.x-f.width/2}, ${t.y-t.height/2-t.padding/3+(S(n.flowchart.htmlLabels)?5:3)+v})`);const y=i.node().getBBox();return t.height=y.height,t.intersect=function(c){return p(t,c)},r},lt=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.diff=-t.padding/2,t.intersect=function(u){return p(t,u)},n},ft={rect:at,roundedWithTitle:ot,noteGroup:ct,divider:lt};let j={};const dt=(e,t)=>{s.trace("Inserting cluster");const n=t.shape||"rect";j[t.id]=ft[n](e,t)},ut=()=>{j={}},M=async(e,t,n,r,i,a)=>{s.info("Graph in recursive render: XXX",m(t),i);const d=t.graph().rankdir;s.trace("Dir in recursive render - dir:",d);const u=e.insert("g").attr("class","root");t.nodes()?s.info("Recursive render XXX",t.nodes()):s.info("No nodes found for",t),t.edges().length>0&&s.trace("Recursive edges",t.edge(t.edges()[0]));const f=u.insert("g").attr("class","clusters"),h=u.insert("g").attr("class","edgePaths"),w=u.insert("g").attr("class","edgeLabels"),x=u.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(c){const o=t.node(c);if(i!==void 0){const b=JSON.parse(JSON.stringify(i.clusterData));s.info("Setting data for cluster XXX (",c,") ",b,i),t.setNode(i.id,b),t.parent(c)||(s.trace("Setting parent",c,i.id),t.setParent(c,i.id,b))}if(s.info("(Insert) Node XXX"+c+": "+JSON.stringify(t.node(c))),o&&o.clusterNode){s.info("Cluster identified",c,o.width,t.node(c));const b=await M(x,o.graph,n,r,t.node(c),a),E=b.elem;U(o,E),o.diff=b.diff||0,s.info("Node bounds (abc123)",c,o,o.width,o.x,o.y),W(E,o),s.warn("Recursive render complete ",E,o)}else t.children(c).length>0?(s.info("Cluster - the non recursive path XXX",c,o.id,o,t),s.info(C(o.id,t)),l[o.id]={id:C(o.id,t),node:o}):(s.info("Node - the non recursive path",c,o.id,o),await _(x,t.node(c),d))})),t.edges().forEach(function(c){const o=t.edge(c.v,c.w,c.name);s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(c)),s.info("Edge "+c.v+" -> "+c.w+": ",c," ",JSON.stringify(t.edge(c))),s.info("Fix",l,"ids:",c.v,c.w,"Translating: ",l[c.v],l[c.w]),z(w,o)}),t.edges().forEach(function(c){s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(c))}),s.info("#############################################"),s.info("### Layout ###"),s.info("#############################################"),s.info(t),H(t),s.info("Graph after layout:",m(t));let v=0;const{subGraphTitleTotalMargin:y}=D(a);return rt(t).forEach(function(c){const o=t.node(c);s.info("Position "+c+": "+JSON.stringify(t.node(c))),s.info("Position "+c+": ("+o.x,","+o.y,") width: ",o.width," height: ",o.height),o&&o.clusterNode?(o.y+=y,O(o)):t.children(c).length>0?(o.height+=y,dt(f,o),l[o.id].node=o):(o.y+=y/2,O(o))}),t.edges().forEach(function(c){const o=t.edge(c);s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(o),o),o.points.forEach(E=>E.y+=y/2);const b=K(h,c,o,l,n,t,r);Q(o,b)}),t.nodes().forEach(function(c){const o=t.node(c);s.info(c,o.type,o.diff),o.type==="group"&&(v=o.diff)}),{elem:u,diff:v}},bt=async(e,t,n,r,i)=>{q(e,n,r,i),Y(),Z(),ut(),nt(),s.warn("Graph at first:",JSON.stringify(m(t))),st(t),s.warn("Graph after:",JSON.stringify(m(t)));const a=T();await M(e,t,r,i,void 0,a)};export{bt as r}; +import{q as N,G as A}from"./graph.C4kgFXP1.js";import{m as $,l as H}from"./layout.C5Nv6jKv.js";import{c as V}from"./clone.Bnzwv1hF.js";import{i as q,u as U,s as W,a as _,b as z,g as D,p as O,c as K,d as Q,e as Y,f as Z,h as J,j as p}from"./edges-5962ec63.BFgoqf-O.js";import{l as s,c as T,p as S,h as L}from"../app.DRN3unl1.js";import{c as I}from"./createText-4a4f35c9.Cu3K6_Cl.js";function m(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:tt(e),edges:et(e)};return N(e.graph())||(t.value=V(e.graph())),t}function tt(e){return $(e.nodes(),function(t){var n=e.node(t),r=e.parent(t),i={v:t};return N(n)||(i.value=n),N(r)||(i.parent=r),i})}function et(e){return $(e.edges(),function(t){var n=e.edge(t),r={v:t.v,w:t.w};return N(t.name)||(r.name=t.name),N(n)||(r.value=n),r})}let l={},g={},R={};const nt=()=>{g={},R={},l={}},B=(e,t)=>(s.trace("In isDescendant",t," ",e," = ",g[t].includes(e)),!!g[t].includes(e)),it=(e,t)=>(s.info("Descendants of ",t," is ",g[t]),s.info("Edge is ",e),e.v===t||e.w===t?!1:g[t]?g[t].includes(e.v)||B(e.v,t)||B(e.w,t)||g[t].includes(e.w):(s.debug("Tilt, ",t,",not in descendants"),!1)),P=(e,t,n,r)=>{s.warn("Copying children of ",e,"root",r,"data",t.node(e),r);const i=t.children(e)||[];e!==r&&i.push(e),s.warn("Copying (nodes) clusterId",e,"nodes",i),i.forEach(a=>{if(t.children(a).length>0)P(a,t,n,r);else{const d=t.node(a);s.info("cp ",a," to ",r," with parent ",e),n.setNode(a,d),r!==t.parent(a)&&(s.warn("Setting parent",a,t.parent(a)),n.setParent(a,t.parent(a))),e!==r&&a!==e?(s.debug("Setting parent",a,e),n.setParent(a,e)):(s.info("In copy ",e,"root",r,"data",t.node(e),r),s.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==r,"node!==clusterId",a!==e));const u=t.edges(a);s.debug("Copying Edges",u),u.forEach(f=>{s.info("Edge",f);const h=t.edge(f.v,f.w,f.name);s.info("Edge data",h,r);try{it(f,r)?(s.info("Copying as ",f.v,f.w,h,f.name),n.setEdge(f.v,f.w,h,f.name),s.info("newGraph edges ",n.edges(),n.edge(n.edges()[0]))):s.info("Skipping copy of edge ",f.v,"-->",f.w," rootId: ",r," clusterId:",e)}catch(w){s.error(w)}})}s.debug("Removing node",a),t.removeNode(a)})},k=(e,t)=>{const n=t.children(e);let r=[...n];for(const i of n)R[i]=e,r=[...r,...k(i,t)];return r},C=(e,t)=>{s.trace("Searching",e);const n=t.children(e);if(s.trace("Searching children of id ",e,n),n.length<1)return s.trace("This is a valid node",e),e;for(const r of n){const i=C(r,t);if(i)return s.trace("Found replacement for",e," => ",i),i}},X=e=>!l[e]||!l[e].externalConnections?e:l[e]?l[e].id:e,st=(e,t)=>{if(!e||t>10){s.debug("Opting out, no graph ");return}else s.debug("Opting in, graph ");e.nodes().forEach(function(n){e.children(n).length>0&&(s.warn("Cluster identified",n," Replacement id in edges: ",C(n,e)),g[n]=k(n,e),l[n]={id:C(n,e),clusterData:e.node(n)})}),e.nodes().forEach(function(n){const r=e.children(n),i=e.edges();r.length>0?(s.debug("Cluster identified",n,g),i.forEach(a=>{if(a.v!==n&&a.w!==n){const d=B(a.v,n),u=B(a.w,n);d^u&&(s.warn("Edge: ",a," leaves cluster ",n),s.warn("Descendants of XXX ",n,": ",g[n]),l[n].externalConnections=!0)}})):s.debug("Not a cluster ",n,g)});for(let n of Object.keys(l)){const r=l[n].id,i=e.parent(r);i!==n&&l[i]&&!l[i].externalConnections&&(l[n].id=i)}e.edges().forEach(function(n){const r=e.edge(n);s.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(n)),s.warn("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(e.edge(n)));let i=n.v,a=n.w;if(s.warn("Fix XXX",l,"ids:",n.v,n.w,"Translating: ",l[n.v]," --- ",l[n.w]),l[n.v]&&l[n.w]&&l[n.v]===l[n.w]){s.warn("Fixing and trixing link to self - removing XXX",n.v,n.w,n.name),s.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),i=X(n.v),a=X(n.w),e.removeEdge(n.v,n.w,n.name);const d=n.w+"---"+n.v;e.setNode(d,{domId:d,id:d,labelStyle:"",labelText:r.label,padding:0,shape:"labelRect",style:""});const u=structuredClone(r),f=structuredClone(r);u.label="",u.arrowTypeEnd="none",f.label="",u.fromCluster=n.v,f.toCluster=n.v,e.setEdge(i,d,u,n.name+"-cyclic-special"),e.setEdge(d,a,f,n.name+"-cyclic-special")}else if(l[n.v]||l[n.w]){if(s.warn("Fixing and trixing - removing XXX",n.v,n.w,n.name),i=X(n.v),a=X(n.w),e.removeEdge(n.v,n.w,n.name),i!==n.v){const d=e.parent(i);l[d].externalConnections=!0,r.fromCluster=n.v}if(a!==n.w){const d=e.parent(a);l[d].externalConnections=!0,r.toCluster=n.w}s.warn("Fix Replacing with XXX",i,a,n.name),e.setEdge(i,a,r,n.name)}}),s.warn("Adjusted Graph",m(e)),F(e,0),s.trace(l)},F=(e,t)=>{if(s.warn("extractor - ",t,m(e),e.children("D")),t>10){s.error("Bailing out");return}let n=e.nodes(),r=!1;for(const i of n){const a=e.children(i);r=r||a.length>0}if(!r){s.debug("Done, no node has children",e.nodes());return}s.debug("Nodes = ",n,t);for(const i of n)if(s.debug("Extracting node",i,l,l[i]&&!l[i].externalConnections,!e.parent(i),e.node(i),e.children("D")," Depth ",t),!l[i])s.debug("Not a cluster",i,t);else if(!l[i].externalConnections&&e.children(i)&&e.children(i).length>0){s.warn("Cluster without external connections, without a parent and with children",i,t);let d=e.graph().rankdir==="TB"?"LR":"TB";l[i]&&l[i].clusterData&&l[i].clusterData.dir&&(d=l[i].clusterData.dir,s.warn("Fixing dir",l[i].clusterData.dir,d));const u=new A({multigraph:!0,compound:!0}).setGraph({rankdir:d,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});s.warn("Old graph before copy",m(e)),P(i,e,u,i),e.setNode(i,{clusterNode:!0,id:i,clusterData:l[i].clusterData,labelText:l[i].labelText,graph:u}),s.warn("New graph after copy node: (",i,")",m(u)),s.debug("Old graph after copy",m(e))}else s.warn("Cluster ** ",i," **not meeting the criteria !externalConnections:",!l[i].externalConnections," no parent: ",!e.parent(i)," children ",e.children(i)&&e.children(i).length>0,e.children("D"),t),s.debug(l);n=e.nodes(),s.warn("New list of nodes",n);for(const i of n){const a=e.node(i);s.warn(" Now next level",i,a),a.clusterNode&&F(a.graph,t+1)}},G=(e,t)=>{if(t.length===0)return[];let n=Object.assign(t);return t.forEach(r=>{const i=e.children(r),a=G(e,i);n=[...n,...a]}),n},rt=e=>G(e,e.children()),at=(e,t)=>{s.info("Creating subgraph rect for ",t.id,t);const n=T(),r=e.insert("g").attr("class","cluster"+(t.class?" "+t.class:"")).attr("id",t.id),i=r.insert("rect",":first-child"),a=S(n.flowchart.htmlLabels),d=r.insert("g").attr("class","cluster-label"),u=t.labelType==="markdown"?I(d,t.labelText,{style:t.labelStyle,useHtmlLabels:a}):d.node().appendChild(J(t.labelText,t.labelStyle,void 0,!0));let f=u.getBBox();if(S(n.flowchart.htmlLabels)){const c=u.children[0],o=L(u);f=c.getBoundingClientRect(),o.attr("width",f.width),o.attr("height",f.height)}const h=0*t.padding,w=h/2,x=t.width<=f.width+h?f.width+h:t.width;t.width<=f.width+h?t.diff=(f.width-t.width)/2-t.padding/2:t.diff=-t.padding/2,s.trace("Data ",t,JSON.stringify(t)),i.attr("style",t.style).attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-x/2).attr("y",t.y-t.height/2-w).attr("width",x).attr("height",t.height+h);const{subGraphTitleTopMargin:v}=D(n);a?d.attr("transform",`translate(${t.x-f.width/2}, ${t.y-t.height/2+v})`):d.attr("transform",`translate(${t.x}, ${t.y-t.height/2+v})`);const y=i.node().getBBox();return t.width=y.width,t.height=y.height,t.intersect=function(c){return p(t,c)},r},ct=(e,t)=>{const n=e.insert("g").attr("class","note-cluster").attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("rx",t.rx).attr("ry",t.ry).attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2-a).attr("width",t.width+i).attr("height",t.height+i).attr("fill","none");const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.intersect=function(u){return p(t,u)},n},ot=(e,t)=>{const n=T(),r=e.insert("g").attr("class",t.classes).attr("id",t.id),i=r.insert("rect",":first-child"),a=r.insert("g").attr("class","cluster-label"),d=r.append("rect"),u=a.node().appendChild(J(t.labelText,t.labelStyle,void 0,!0));let f=u.getBBox();if(S(n.flowchart.htmlLabels)){const c=u.children[0],o=L(u);f=c.getBoundingClientRect(),o.attr("width",f.width),o.attr("height",f.height)}f=u.getBBox();const h=0*t.padding,w=h/2,x=t.width<=f.width+t.padding?f.width+t.padding:t.width;t.width<=f.width+t.padding?t.diff=(f.width+t.padding*0-t.width)/2:t.diff=-t.padding/2,i.attr("class","outer").attr("x",t.x-x/2-w).attr("y",t.y-t.height/2-w).attr("width",x+h).attr("height",t.height+h),d.attr("class","inner").attr("x",t.x-x/2-w).attr("y",t.y-t.height/2-w+f.height-1).attr("width",x+h).attr("height",t.height+h-f.height-3);const{subGraphTitleTopMargin:v}=D(n);a.attr("transform",`translate(${t.x-f.width/2}, ${t.y-t.height/2-t.padding/3+(S(n.flowchart.htmlLabels)?5:3)+v})`);const y=i.node().getBBox();return t.height=y.height,t.intersect=function(c){return p(t,c)},r},lt=(e,t)=>{const n=e.insert("g").attr("class",t.classes).attr("id",t.id),r=n.insert("rect",":first-child"),i=0*t.padding,a=i/2;r.attr("class","divider").attr("x",t.x-t.width/2-a).attr("y",t.y-t.height/2).attr("width",t.width+i).attr("height",t.height+i);const d=r.node().getBBox();return t.width=d.width,t.height=d.height,t.diff=-t.padding/2,t.intersect=function(u){return p(t,u)},n},ft={rect:at,roundedWithTitle:ot,noteGroup:ct,divider:lt};let j={};const dt=(e,t)=>{s.trace("Inserting cluster");const n=t.shape||"rect";j[t.id]=ft[n](e,t)},ut=()=>{j={}},M=async(e,t,n,r,i,a)=>{s.info("Graph in recursive render: XXX",m(t),i);const d=t.graph().rankdir;s.trace("Dir in recursive render - dir:",d);const u=e.insert("g").attr("class","root");t.nodes()?s.info("Recursive render XXX",t.nodes()):s.info("No nodes found for",t),t.edges().length>0&&s.trace("Recursive edges",t.edge(t.edges()[0]));const f=u.insert("g").attr("class","clusters"),h=u.insert("g").attr("class","edgePaths"),w=u.insert("g").attr("class","edgeLabels"),x=u.insert("g").attr("class","nodes");await Promise.all(t.nodes().map(async function(c){const o=t.node(c);if(i!==void 0){const b=JSON.parse(JSON.stringify(i.clusterData));s.info("Setting data for cluster XXX (",c,") ",b,i),t.setNode(i.id,b),t.parent(c)||(s.trace("Setting parent",c,i.id),t.setParent(c,i.id,b))}if(s.info("(Insert) Node XXX"+c+": "+JSON.stringify(t.node(c))),o&&o.clusterNode){s.info("Cluster identified",c,o.width,t.node(c));const b=await M(x,o.graph,n,r,t.node(c),a),E=b.elem;U(o,E),o.diff=b.diff||0,s.info("Node bounds (abc123)",c,o,o.width,o.x,o.y),W(E,o),s.warn("Recursive render complete ",E,o)}else t.children(c).length>0?(s.info("Cluster - the non recursive path XXX",c,o.id,o,t),s.info(C(o.id,t)),l[o.id]={id:C(o.id,t),node:o}):(s.info("Node - the non recursive path",c,o.id,o),await _(x,t.node(c),d))})),t.edges().forEach(function(c){const o=t.edge(c.v,c.w,c.name);s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(c)),s.info("Edge "+c.v+" -> "+c.w+": ",c," ",JSON.stringify(t.edge(c))),s.info("Fix",l,"ids:",c.v,c.w,"Translating: ",l[c.v],l[c.w]),z(w,o)}),t.edges().forEach(function(c){s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(c))}),s.info("#############################################"),s.info("### Layout ###"),s.info("#############################################"),s.info(t),H(t),s.info("Graph after layout:",m(t));let v=0;const{subGraphTitleTotalMargin:y}=D(a);return rt(t).forEach(function(c){const o=t.node(c);s.info("Position "+c+": "+JSON.stringify(t.node(c))),s.info("Position "+c+": ("+o.x,","+o.y,") width: ",o.width," height: ",o.height),o&&o.clusterNode?(o.y+=y,O(o)):t.children(c).length>0?(o.height+=y,dt(f,o),l[o.id].node=o):(o.y+=y/2,O(o))}),t.edges().forEach(function(c){const o=t.edge(c);s.info("Edge "+c.v+" -> "+c.w+": "+JSON.stringify(o),o),o.points.forEach(E=>E.y+=y/2);const b=K(h,c,o,l,n,t,r);Q(o,b)}),t.nodes().forEach(function(c){const o=t.node(c);s.info(c,o.type,o.diff),o.type==="group"&&(v=o.diff)}),{elem:u,diff:v}},bt=async(e,t,n,r,i)=>{q(e,n,r,i),Y(),Z(),ut(),nt(),s.warn("Graph at first:",JSON.stringify(m(t))),st(t),s.warn("Graph after:",JSON.stringify(m(t)));const a=T();await M(e,t,r,i,void 0,a)};export{bt as r}; diff --git a/assets/chunks/infoDiagram-94cd232f.Dpqcs4_0.js b/assets/chunks/infoDiagram-f86e0131.CYcEreMK.js similarity index 98% rename from assets/chunks/infoDiagram-94cd232f.Dpqcs4_0.js rename to assets/chunks/infoDiagram-f86e0131.CYcEreMK.js index 0f8c85a1..0863cfc3 100644 --- a/assets/chunks/infoDiagram-94cd232f.Dpqcs4_0.js +++ b/assets/chunks/infoDiagram-f86e0131.CYcEreMK.js @@ -1,4 +1,4 @@ -import{l as Y,aH as D,i as M}from"../app.CbQoAe_D.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";var O=function(){var a=function(u,t,e,n){for(e=e||{},n=u.length;n--;e[u[n]]=t);return e},f=[6,9,10],m={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,s,r,i,d){switch(i.length-1,r){case 1:return s;case 4:break;case 6:s.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},a(f,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},a(f,[2,3]),a(f,[2,4]),a(f,[2,5]),a(f,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(e.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=e,n}},parse:function(t){var e=this,n=[0],s=[],r=[null],i=[],d=this.table,P="",v=0,L=0,N=2,T=1,R=i.slice.call(arguments,1),o=Object.create(this.lexer),p={yy:{}};for(var E in this.yy)Object.prototype.hasOwnProperty.call(this.yy,E)&&(p.yy[E]=this.yy[E]);o.setInput(t,p.yy),p.yy.lexer=o,p.yy.parser=this,typeof o.yylloc>"u"&&(o.yylloc={});var I=o.yylloc;i.push(I);var z=o.options&&o.options.ranges;typeof p.yy.parseError=="function"?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function U(){var y;return y=s.pop()||o.lex()||T,typeof y!="number"&&(y instanceof Array&&(s=y,y=s.pop()),y=e.symbols_[y]||y),y}for(var l,g,h,w,_={},b,c,F,S;;){if(g=n[n.length-1],this.defaultActions[g]?h=this.defaultActions[g]:((l===null||typeof l>"u")&&(l=U()),h=d[g]&&d[g][l]),typeof h>"u"||!h.length||!h[0]){var A="";S=[];for(b in d[g])this.terminals_[b]&&b>N&&S.push("'"+this.terminals_[b]+"'");o.showPosition?A="Parse error on line "+(v+1)+`: +import{l as Y,aH as D,i as M}from"../app.DRN3unl1.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";var O=function(){var a=function(u,t,e,n){for(e=e||{},n=u.length;n--;e[u[n]]=t);return e},f=[6,9,10],m={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,s,r,i,d){switch(i.length-1,r){case 1:return s;case 4:break;case 6:s.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},a(f,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},a(f,[2,3]),a(f,[2,4]),a(f,[2,5]),a(f,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(e.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=e,n}},parse:function(t){var e=this,n=[0],s=[],r=[null],i=[],d=this.table,P="",v=0,L=0,N=2,T=1,R=i.slice.call(arguments,1),o=Object.create(this.lexer),p={yy:{}};for(var E in this.yy)Object.prototype.hasOwnProperty.call(this.yy,E)&&(p.yy[E]=this.yy[E]);o.setInput(t,p.yy),p.yy.lexer=o,p.yy.parser=this,typeof o.yylloc>"u"&&(o.yylloc={});var I=o.yylloc;i.push(I);var z=o.options&&o.options.ranges;typeof p.yy.parseError=="function"?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function U(){var y;return y=s.pop()||o.lex()||T,typeof y!="number"&&(y instanceof Array&&(s=y,y=s.pop()),y=e.symbols_[y]||y),y}for(var l,g,h,w,_={},b,c,F,S;;){if(g=n[n.length-1],this.defaultActions[g]?h=this.defaultActions[g]:((l===null||typeof l>"u")&&(l=U()),h=d[g]&&d[g][l]),typeof h>"u"||!h.length||!h[0]){var A="";S=[];for(b in d[g])this.terminals_[b]&&b>N&&S.push("'"+this.terminals_[b]+"'");o.showPosition?A="Parse error on line "+(v+1)+`: `+o.showPosition()+` Expecting `+S.join(", ")+", got '"+(this.terminals_[l]||l)+"'":A="Parse error on line "+(v+1)+": Unexpected "+(l==T?"end of input":"'"+(this.terminals_[l]||l)+"'"),this.parseError(A,{text:o.match,token:this.terminals_[l]||l,line:o.yylineno,loc:I,expected:S})}if(h[0]instanceof Array&&h.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+l);switch(h[0]){case 1:n.push(l),r.push(o.yytext),i.push(o.yylloc),n.push(h[1]),l=null,L=o.yyleng,P=o.yytext,v=o.yylineno,I=o.yylloc;break;case 2:if(c=this.productions_[h[1]][1],_.$=r[r.length-c],_._$={first_line:i[i.length-(c||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(c||1)].first_column,last_column:i[i.length-1].last_column},z&&(_._$.range=[i[i.length-(c||1)].range[0],i[i.length-1].range[1]]),w=this.performAction.apply(_,[P,L,v,p.yy,h[1],r,i].concat(R)),typeof w<"u")return w;c&&(n=n.slice(0,-1*c*2),r=r.slice(0,-1*c),i=i.slice(0,-1*c)),n.push(this.productions_[h[1]][0]),r.push(_.$),i.push(_._$),F=d[n[n.length-2]][n[n.length-1]],n.push(F);break;case 3:return!0}}return!0}},k=function(){var u={EOF:1,parseError:function(e,n){if(this.yy.parser)this.yy.parser.parseError(e,n);else throw new Error(e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var e=t.match(/(?:\r\n?|\n).*/g);return e?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===s.length?this.yylloc.first_column:0)+s[s.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+` diff --git a/assets/chunks/journeyDiagram-6625b456.g47i3df6.js b/assets/chunks/journeyDiagram-de0d04b7.Cjc0E3Qw.js similarity index 92% rename from assets/chunks/journeyDiagram-6625b456.g47i3df6.js rename to assets/chunks/journeyDiagram-de0d04b7.Cjc0E3Qw.js index 022a5acd..c16e5d6e 100644 --- a/assets/chunks/journeyDiagram-6625b456.g47i3df6.js +++ b/assets/chunks/journeyDiagram-de0d04b7.Cjc0E3Qw.js @@ -1,9 +1,9 @@ -import{c as I,E as yt,F as ft,s as dt,g as pt,b as gt,a as mt,G as xt,h as G,i as kt}from"../app.CbQoAe_D.js";import{d as _t,f as bt,a as vt,g as it}from"./svgDrawCommon-5e1cfd1d.Cpp7qDwc.js";import{a as Q}from"./arc.EE6MX9ab.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./path.CbwjOpE9.js";var X=function(){var t=function(p,s,r,a){for(r=r||{},a=p.length;a--;r[p[a]]=s);return r},e=[6,8,10,11,12,14,16,17,18],i=[1,9],l=[1,10],n=[1,11],h=[1,12],c=[1,13],f=[1,14],y={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(s,r,a,u,d,o,w){var k=o.length-1;switch(d){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:u.addTask(o[k-1],o[k]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:function(s,r){if(r.recoverable)this.trace(s);else{var a=new Error(s);throw a.hash=r,a}},parse:function(s){var r=this,a=[0],u=[],d=[null],o=[],w=this.table,k="",R=0,Z=0,lt=2,J=1,ct=o.slice.call(arguments,1),x=Object.create(this.lexer),S={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(S.yy[z]=this.yy[z]);x.setInput(s,S.yy),S.yy.lexer=x,S.yy.parser=this,typeof x.yylloc>"u"&&(x.yylloc={});var Y=x.yylloc;o.push(Y);var ht=x.options&&x.options.ranges;typeof S.yy.parseError=="function"?this.parseError=S.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ut(){var T;return T=u.pop()||x.lex()||J,typeof T!="number"&&(T instanceof Array&&(u=T,T=u.pop()),T=r.symbols_[T]||T),T}for(var _,E,b,O,A={},N,$,K,B;;){if(E=a[a.length-1],this.defaultActions[E]?b=this.defaultActions[E]:((_===null||typeof _>"u")&&(_=ut()),b=w[E]&&w[E][_]),typeof b>"u"||!b.length||!b[0]){var q="";B=[];for(N in w[E])this.terminals_[N]&&N>lt&&B.push("'"+this.terminals_[N]+"'");x.showPosition?q="Parse error on line "+(R+1)+`: +import{c as A,x as yt,y as ft,s as dt,g as pt,b as gt,a as mt,A as xt,h as W,i as kt}from"../app.DRN3unl1.js";import{d as _t,f as bt,a as vt,g as it}from"./svgDrawCommon-9d162435.wUjoN1G-.js";import{a as Q}from"./arc.CbQZFRTr.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./path.CbwjOpE9.js";var G=function(){var t=function(p,s,r,a){for(r=r||{},a=p.length;a--;r[p[a]]=s);return r},e=[6,8,10,11,12,14,16,17,18],i=[1,9],l=[1,10],n=[1,11],h=[1,12],c=[1,13],f=[1,14],y={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:function(s,r,a,u,d,o,w){var k=o.length-1;switch(d){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:u.addTask(o[k-1],o[k]),this.$="task";break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:i,12:l,14:n,16:h,17:c,18:f},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:function(s,r){if(r.recoverable)this.trace(s);else{var a=new Error(s);throw a.hash=r,a}},parse:function(s){var r=this,a=[0],u=[],d=[null],o=[],w=this.table,k="",R=0,Z=0,lt=2,J=1,ct=o.slice.call(arguments,1),x=Object.create(this.lexer),S={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(S.yy[z]=this.yy[z]);x.setInput(s,S.yy),S.yy.lexer=x,S.yy.parser=this,typeof x.yylloc>"u"&&(x.yylloc={});var Y=x.yylloc;o.push(Y);var ht=x.options&&x.options.ranges;typeof S.yy.parseError=="function"?this.parseError=S.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ut(){var T;return T=u.pop()||x.lex()||J,typeof T!="number"&&(T instanceof Array&&(u=T,T=u.pop()),T=r.symbols_[T]||T),T}for(var _,E,b,O,I={},N,$,K,B;;){if(E=a[a.length-1],this.defaultActions[E]?b=this.defaultActions[E]:((_===null||typeof _>"u")&&(_=ut()),b=w[E]&&w[E][_]),typeof b>"u"||!b.length||!b[0]){var q="";B=[];for(N in w[E])this.terminals_[N]&&N>lt&&B.push("'"+this.terminals_[N]+"'");x.showPosition?q="Parse error on line "+(R+1)+`: `+x.showPosition()+` -Expecting `+B.join(", ")+", got '"+(this.terminals_[_]||_)+"'":q="Parse error on line "+(R+1)+": Unexpected "+(_==J?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(q,{text:x.match,token:this.terminals_[_]||_,line:x.yylineno,loc:Y,expected:B})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+_);switch(b[0]){case 1:a.push(_),d.push(x.yytext),o.push(x.yylloc),a.push(b[1]),_=null,Z=x.yyleng,k=x.yytext,R=x.yylineno,Y=x.yylloc;break;case 2:if($=this.productions_[b[1]][1],A.$=d[d.length-$],A._$={first_line:o[o.length-($||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-($||1)].first_column,last_column:o[o.length-1].last_column},ht&&(A._$.range=[o[o.length-($||1)].range[0],o[o.length-1].range[1]]),O=this.performAction.apply(A,[k,Z,R,S.yy,b[1],d,o].concat(ct)),typeof O<"u")return O;$&&(a=a.slice(0,-1*$*2),d=d.slice(0,-1*$),o=o.slice(0,-1*$)),a.push(this.productions_[b[1]][0]),d.push(A.$),o.push(A._$),K=w[a[a.length-2]][a[a.length-1]],a.push(K);break;case 3:return!0}}return!0}},m=function(){var p={EOF:1,parseError:function(r,a){if(this.yy.parser)this.yy.parser.parseError(r,a);else throw new Error(r)},setInput:function(s,r){return this.yy=r||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var r=s.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},unput:function(s){var r=s.length,a=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var d=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===u.length?this.yylloc.first_column:0)+u[u.length-a.length].length-a[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[d[0],d[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+B.join(", ")+", got '"+(this.terminals_[_]||_)+"'":q="Parse error on line "+(R+1)+": Unexpected "+(_==J?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(q,{text:x.match,token:this.terminals_[_]||_,line:x.yylineno,loc:Y,expected:B})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+E+", token: "+_);switch(b[0]){case 1:a.push(_),d.push(x.yytext),o.push(x.yylloc),a.push(b[1]),_=null,Z=x.yyleng,k=x.yytext,R=x.yylineno,Y=x.yylloc;break;case 2:if($=this.productions_[b[1]][1],I.$=d[d.length-$],I._$={first_line:o[o.length-($||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-($||1)].first_column,last_column:o[o.length-1].last_column},ht&&(I._$.range=[o[o.length-($||1)].range[0],o[o.length-1].range[1]]),O=this.performAction.apply(I,[k,Z,R,S.yy,b[1],d,o].concat(ct)),typeof O<"u")return O;$&&(a=a.slice(0,-1*$*2),d=d.slice(0,-1*$),o=o.slice(0,-1*$)),a.push(this.productions_[b[1]][0]),d.push(I.$),o.push(I._$),K=w[a[a.length-2]][a[a.length-1]],a.push(K);break;case 3:return!0}}return!0}},m=function(){var p={EOF:1,parseError:function(r,a){if(this.yy.parser)this.yy.parser.parseError(r,a);else throw new Error(r)},setInput:function(s,r){return this.yy=r||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var r=s.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},unput:function(s){var r=s.length,a=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var d=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===u.length?this.yylloc.first_column:0)+u[u.length-a.length].length-a[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[d[0],d[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(s){this.unput(this.match.slice(s))},pastInput:function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var s=this.pastInput(),r=new Array(s.length+1).join("-");return s+this.upcomingInput()+` `+r+"^"},test_match:function(s,r){var a,u,d;if(this.options.backtrack_lexer&&(d={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(d.yylloc.range=this.yylloc.range.slice(0))),u=s[0].match(/(?:\r\n?|\n).*/g),u&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+s[0].length},this.yytext+=s[0],this.match+=s[0],this.matches=s,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(s[0].length),this.matched+=s[0],a=this.performAction.call(this,this.yy,this,r,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a)return a;if(this._backtrack){for(var o in d)this[o]=d[o];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var s,r,a,u;this._more||(this.yytext="",this.match="");for(var d=this._currentRules(),o=0;or[0].length)){if(r=a,u=o,this.options.backtrack_lexer){if(s=this.test_match(a,d[o]),s!==!1)return s;if(this._backtrack){r=!1;continue}else return!1}else if(!this.options.flex)break}return r?(s=this.test_match(r,d[u]),s!==!1?s:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var r=this.next();return r||this.lex()},begin:function(r){this.conditionStack.push(r)},popState:function(){var r=this.conditionStack.length-1;return r>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(r){return r=this.conditionStack.length-1-Math.abs(r||0),r>=0?this.conditionStack[r]:"INITIAL"},pushState:function(r){this.begin(r)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(r,a,u,d){switch(u){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return p}();y.lexer=m;function g(){this.yy={}}return g.prototype=y,y.Parser=g,new g}();X.parser=X;const wt=X;let C="";const H=[],V=[],F=[],$t=function(){H.length=0,V.length=0,C="",F.length=0,xt()},Tt=function(t){C=t,H.push(t)},Mt=function(){return H},St=function(){let t=D();const e=100;let i=0;for(;!t&&i{i.people&&t.push(...i.people)}),[...new Set(t)].sort()},Pt=function(t,e){const i=e.substr(1).split(":");let l=0,n=[];i.length===1?(l=Number(i[0]),n=[]):(l=Number(i[0]),n=i[1].split(","));const h=n.map(f=>f.trim()),c={section:C,type:C,people:h,task:t,score:l};F.push(c)},It=function(t){const e={section:C,type:C,description:t,task:t,classes:[]};V.push(e)},D=function(){const t=function(i){return F[i].processed};let e=!0;for(const[i,l]of F.entries())t(i),e=e&&l.processed;return e},At=function(){return Et()},tt={getConfig:()=>I().journey,clear:$t,setDiagramTitle:yt,getDiagramTitle:ft,setAccTitle:dt,getAccTitle:pt,setAccDescription:gt,getAccDescription:mt,addSection:Tt,getSections:Mt,getTasks:St,addTask:Pt,addTaskOrg:It,getActors:At},Ct=t=>`.label { +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var r=this.next();return r||this.lex()},begin:function(r){this.conditionStack.push(r)},popState:function(){var r=this.conditionStack.length-1;return r>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(r){return r=this.conditionStack.length-1-Math.abs(r||0),r>=0?this.conditionStack[r]:"INITIAL"},pushState:function(r){this.begin(r)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(r,a,u,d){switch(u){case 0:break;case 1:break;case 2:return 10;case 3:break;case 4:break;case 5:return 4;case 6:return 11;case 7:return this.begin("acc_title"),12;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),14;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:return 17;case 15:return 18;case 16:return 19;case 17:return":";case 18:return 6;case 19:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,9,11,14,15,16,17,18,19],inclusive:!0}}};return p}();y.lexer=m;function g(){this.yy={}}return g.prototype=y,y.Parser=g,new g}();G.parser=G;const wt=G;let C="";const H=[],V=[],F=[],$t=function(){H.length=0,V.length=0,C="",F.length=0,xt()},Tt=function(t){C=t,H.push(t)},Mt=function(){return H},St=function(){let t=D();const e=100;let i=0;for(;!t&&i{i.people&&t.push(...i.people)}),[...new Set(t)].sort()},Pt=function(t,e){const i=e.substr(1).split(":");let l=0,n=[];i.length===1?(l=Number(i[0]),n=[]):(l=Number(i[0]),n=i[1].split(","));const h=n.map(f=>f.trim()),c={section:C,type:C,people:h,task:t,score:l};F.push(c)},At=function(t){const e={section:C,type:C,description:t,task:t,classes:[]};V.push(e)},D=function(){const t=function(i){return F[i].processed};let e=!0;for(const[i,l]of F.entries())t(i),e=e&&l.processed;return e},It=function(){return Et()},tt={getConfig:()=>A().journey,clear:$t,setDiagramTitle:yt,getDiagramTitle:ft,setAccTitle:dt,getAccTitle:pt,setAccDescription:gt,getAccDescription:mt,addSection:Tt,getSections:Mt,getTasks:St,addTask:Pt,addTaskOrg:At,getActors:It},Ct=t=>`.label { font-family: 'trebuchet ms', verdana, arial, sans-serif; font-family: var(--mermaid-font-family); color: ${t.textColor}; @@ -136,4 +136,4 @@ Expecting `+B.join(", ")+", got '"+(this.terminals_[_]||_)+"'":q="Parse error on .actor-5 { ${t.actor5?`fill: ${t.actor5}`:""}; } -`,Vt=Ct,U=function(t,e){return _t(t,e)},Ft=function(t,e){const l=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");n.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function h(y){const m=Q().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);y.append("path").attr("class","mouth").attr("d",m).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function c(y){const m=Q().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);y.append("path").attr("class","mouth").attr("d",m).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}function f(y){y.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return e.score>3?h(n):e.score<3?c(n):f(n),l},rt=function(t,e){const i=t.append("circle");return i.attr("cx",e.cx),i.attr("cy",e.cy),i.attr("class","actor-"+e.pos),i.attr("fill",e.fill),i.attr("stroke",e.stroke),i.attr("r",e.r),i.class!==void 0&&i.attr("class",i.class),e.title!==void 0&&i.append("title").text(e.title),i},at=function(t,e){return bt(t,e)},Lt=function(t,e){function i(n,h,c,f,y){return n+","+h+" "+(n+c)+","+h+" "+(n+c)+","+(h+f-y)+" "+(n+c-y*1.2)+","+(h+f)+" "+n+","+(h+f)}const l=t.append("polygon");l.attr("points",i(e.x,e.y,50,20,7)),l.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,at(t,e)},Rt=function(t,e,i){const l=t.append("g"),n=it();n.x=e.x,n.y=e.y,n.fill=e.fill,n.width=i.width*e.taskCount+i.diagramMarginX*(e.taskCount-1),n.height=i.height,n.class="journey-section section-type-"+e.num,n.rx=3,n.ry=3,U(l,n),ot(i)(e.text,l,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+e.num},i,e.colour)};let et=-1;const Nt=function(t,e,i){const l=e.x+i.width/2,n=t.append("g");et++;const h=300+5*30;n.append("line").attr("id","task"+et).attr("x1",l).attr("y1",e.y).attr("x2",l).attr("y2",h).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Ft(n,{cx:l,cy:300+(5-e.score)*30,score:e.score});const c=it();c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=i.width,c.height=i.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,U(n,c);let f=e.x+14;e.people.forEach(y=>{const m=e.actors[y].color,g={cx:f,cy:e.y,r:7,fill:m,stroke:"#000",title:y,pos:e.actors[y].position};rt(n,g),f+=10}),ot(i)(e.task,n,c.x,c.y,c.width,c.height,{class:"task"},i,e.colour)},Bt=function(t,e){vt(t,e)},ot=function(){function t(n,h,c,f,y,m,g,p){const s=h.append("text").attr("x",c+y/2).attr("y",f+m/2+5).style("font-color",p).style("text-anchor","middle").text(n);l(s,g)}function e(n,h,c,f,y,m,g,p,s){const{taskFontSize:r,taskFontFamily:a}=p,u=n.split(//gi);for(let d=0;d{const n=M[l].color,h={cx:20,cy:i,r:7,fill:n,stroke:"#000",pos:M[l].position};L.drawCircle(t,h);const c={x:40,y:i+7,fill:"#666",text:l,textMargin:e.boxTextMargin|5};L.drawText(t,c),i+=20})}const j=I().journey,P=j.leftMargin,Ot=function(t,e,i,l){const n=I().journey,h=I().securityLevel;let c;h==="sandbox"&&(c=G("#i"+e));const f=h==="sandbox"?G(c.nodes()[0].contentDocument.body):G("body");v.init();const y=f.select("#"+e);L.initGraphics(y);const m=l.db.getTasks(),g=l.db.getDiagramTitle(),p=l.db.getActors();for(const o in M)delete M[o];let s=0;p.forEach(o=>{M[o]={color:n.actorColours[s%n.actorColours.length],position:s},s++}),Yt(y),v.insert(0,0,P,Object.keys(M).length*50),qt(y,m,0);const r=v.getBounds();g&&y.append("text").text(g).attr("x",P).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const a=r.stopy-r.starty+2*n.diagramMarginY,u=P+r.stopx+2*n.diagramMarginX;kt(y,a,u,n.useMaxWidth),y.append("line").attr("x1",P).attr("y1",n.height*4).attr("x2",u-P-4).attr("y2",n.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const d=g?70:0;y.attr("viewBox",`${r.startx} -25 ${u} ${a+d}`),y.attr("preserveAspectRatio","xMinYMin meet"),y.attr("height",a+d+25)},v={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,i,l){t[e]===void 0?t[e]=i:t[e]=l(i,t[e])},updateBounds:function(t,e,i,l){const n=I().journey,h=this;let c=0;function f(y){return function(g){c++;const p=h.sequenceItems.length-c+1;h.updateVal(g,"starty",e-p*n.boxMargin,Math.min),h.updateVal(g,"stopy",l+p*n.boxMargin,Math.max),h.updateVal(v.data,"startx",t-p*n.boxMargin,Math.min),h.updateVal(v.data,"stopx",i+p*n.boxMargin,Math.max),h.updateVal(g,"startx",t-p*n.boxMargin,Math.min),h.updateVal(g,"stopx",i+p*n.boxMargin,Math.max),h.updateVal(v.data,"starty",e-p*n.boxMargin,Math.min),h.updateVal(v.data,"stopy",l+p*n.boxMargin,Math.max)}}this.sequenceItems.forEach(f())},insert:function(t,e,i,l){const n=Math.min(t,i),h=Math.max(t,i),c=Math.min(e,l),f=Math.max(e,l);this.updateVal(v.data,"startx",n,Math.min),this.updateVal(v.data,"starty",c,Math.min),this.updateVal(v.data,"stopx",h,Math.max),this.updateVal(v.data,"stopy",f,Math.max),this.updateBounds(n,c,h,f)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},W=j.sectionFills,st=j.sectionColours,qt=function(t,e,i){const l=I().journey;let n="";const h=l.height*2+l.diagramMarginY,c=i+h;let f=0,y="#CCC",m="black",g=0;for(const[p,s]of e.entries()){if(n!==s.section){y=W[f%W.length],g=f%W.length,m=st[f%st.length];let a=0;const u=s.section;for(let o=p;o(M[u]&&(a[u]=M[u]),a),{});s.x=p*l.taskMargin+p*l.width+P,s.y=c,s.width=l.diagramMarginX,s.height=l.diagramMarginY,s.colour=m,s.fill=y,s.num=g,s.actors=r,L.drawTask(t,s,l),v.insert(s.x,s.y,s.x+s.width+l.taskMargin,300+5*30)}},nt={setConf:zt,draw:Ot},Jt={parser:wt,db:tt,renderer:nt,styles:Vt,init:t=>{nt.setConf(t.journey),tt.clear()}};export{Jt as diagram}; +`,Vt=Ct,U=function(t,e){return _t(t,e)},Ft=function(t,e){const l=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),n=t.append("g");n.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),n.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function h(y){const m=Q().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);y.append("path").attr("class","mouth").attr("d",m).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function c(y){const m=Q().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);y.append("path").attr("class","mouth").attr("d",m).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}function f(y){y.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return e.score>3?h(n):e.score<3?c(n):f(n),l},rt=function(t,e){const i=t.append("circle");return i.attr("cx",e.cx),i.attr("cy",e.cy),i.attr("class","actor-"+e.pos),i.attr("fill",e.fill),i.attr("stroke",e.stroke),i.attr("r",e.r),i.class!==void 0&&i.attr("class",i.class),e.title!==void 0&&i.append("title").text(e.title),i},at=function(t,e){return bt(t,e)},Lt=function(t,e){function i(n,h,c,f,y){return n+","+h+" "+(n+c)+","+h+" "+(n+c)+","+(h+f-y)+" "+(n+c-y*1.2)+","+(h+f)+" "+n+","+(h+f)}const l=t.append("polygon");l.attr("points",i(e.x,e.y,50,20,7)),l.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,at(t,e)},Rt=function(t,e,i){const l=t.append("g"),n=it();n.x=e.x,n.y=e.y,n.fill=e.fill,n.width=i.width*e.taskCount+i.diagramMarginX*(e.taskCount-1),n.height=i.height,n.class="journey-section section-type-"+e.num,n.rx=3,n.ry=3,U(l,n),ot(i)(e.text,l,n.x,n.y,n.width,n.height,{class:"journey-section section-type-"+e.num},i,e.colour)};let et=-1;const Nt=function(t,e,i){const l=e.x+i.width/2,n=t.append("g");et++;const h=300+5*30;n.append("line").attr("id","task"+et).attr("x1",l).attr("y1",e.y).attr("x2",l).attr("y2",h).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),Ft(n,{cx:l,cy:300+(5-e.score)*30,score:e.score});const c=it();c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=i.width,c.height=i.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,U(n,c);let f=e.x+14;e.people.forEach(y=>{const m=e.actors[y].color,g={cx:f,cy:e.y,r:7,fill:m,stroke:"#000",title:y,pos:e.actors[y].position};rt(n,g),f+=10}),ot(i)(e.task,n,c.x,c.y,c.width,c.height,{class:"task"},i,e.colour)},Bt=function(t,e){vt(t,e)},ot=function(){function t(n,h,c,f,y,m,g,p){const s=h.append("text").attr("x",c+y/2).attr("y",f+m/2+5).style("font-color",p).style("text-anchor","middle").text(n);l(s,g)}function e(n,h,c,f,y,m,g,p,s){const{taskFontSize:r,taskFontFamily:a}=p,u=n.split(//gi);for(let d=0;d{const n=M[l].color,h={cx:20,cy:i,r:7,fill:n,stroke:"#000",pos:M[l].position};L.drawCircle(t,h);const c={x:40,y:i+7,fill:"#666",text:l,textMargin:e.boxTextMargin|5};L.drawText(t,c),i+=20})}const j=A().journey,P=j.leftMargin,Ot=function(t,e,i,l){const n=A().journey,h=A().securityLevel;let c;h==="sandbox"&&(c=W("#i"+e));const f=h==="sandbox"?W(c.nodes()[0].contentDocument.body):W("body");v.init();const y=f.select("#"+e);L.initGraphics(y);const m=l.db.getTasks(),g=l.db.getDiagramTitle(),p=l.db.getActors();for(const o in M)delete M[o];let s=0;p.forEach(o=>{M[o]={color:n.actorColours[s%n.actorColours.length],position:s},s++}),Yt(y),v.insert(0,0,P,Object.keys(M).length*50),qt(y,m,0);const r=v.getBounds();g&&y.append("text").text(g).attr("x",P).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const a=r.stopy-r.starty+2*n.diagramMarginY,u=P+r.stopx+2*n.diagramMarginX;kt(y,a,u,n.useMaxWidth),y.append("line").attr("x1",P).attr("y1",n.height*4).attr("x2",u-P-4).attr("y2",n.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const d=g?70:0;y.attr("viewBox",`${r.startx} -25 ${u} ${a+d}`),y.attr("preserveAspectRatio","xMinYMin meet"),y.attr("height",a+d+25)},v={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,i,l){t[e]===void 0?t[e]=i:t[e]=l(i,t[e])},updateBounds:function(t,e,i,l){const n=A().journey,h=this;let c=0;function f(y){return function(g){c++;const p=h.sequenceItems.length-c+1;h.updateVal(g,"starty",e-p*n.boxMargin,Math.min),h.updateVal(g,"stopy",l+p*n.boxMargin,Math.max),h.updateVal(v.data,"startx",t-p*n.boxMargin,Math.min),h.updateVal(v.data,"stopx",i+p*n.boxMargin,Math.max),h.updateVal(g,"startx",t-p*n.boxMargin,Math.min),h.updateVal(g,"stopx",i+p*n.boxMargin,Math.max),h.updateVal(v.data,"starty",e-p*n.boxMargin,Math.min),h.updateVal(v.data,"stopy",l+p*n.boxMargin,Math.max)}}this.sequenceItems.forEach(f())},insert:function(t,e,i,l){const n=Math.min(t,i),h=Math.max(t,i),c=Math.min(e,l),f=Math.max(e,l);this.updateVal(v.data,"startx",n,Math.min),this.updateVal(v.data,"starty",c,Math.min),this.updateVal(v.data,"stopx",h,Math.max),this.updateVal(v.data,"stopy",f,Math.max),this.updateBounds(n,c,h,f)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},X=j.sectionFills,st=j.sectionColours,qt=function(t,e,i){const l=A().journey;let n="";const h=l.height*2+l.diagramMarginY,c=i+h;let f=0,y="#CCC",m="black",g=0;for(const[p,s]of e.entries()){if(n!==s.section){y=X[f%X.length],g=f%X.length,m=st[f%st.length];let a=0;const u=s.section;for(let o=p;o(M[u]&&(a[u]=M[u]),a),{});s.x=p*l.taskMargin+p*l.width+P,s.y=c,s.width=l.diagramMarginX,s.height=l.diagramMarginY,s.colour=m,s.fill=y,s.num=g,s.actors=r,L.drawTask(t,s,l),v.insert(s.x,s.y,s.x+s.width+l.taskMargin,300+5*30)}},nt={setConf:zt,draw:Ot},Jt={parser:wt,db:tt,renderer:nt,styles:Vt,init:t=>{nt.setConf(t.journey),tt.clear()}};export{Jt as diagram}; diff --git a/assets/chunks/layout.C5Nv6jKv.js b/assets/chunks/layout.C5Nv6jKv.js new file mode 100644 index 00000000..ea6c1cd0 --- /dev/null +++ b/assets/chunks/layout.C5Nv6jKv.js @@ -0,0 +1 @@ +import{i as F,b as gn,a as zn,c as L,k as Xn,d as Un,e as Hn,g as P,j as xn,l as En,m as kn,t as jn,n as yn,o as Kn,p as Jn,f as s,G as x,h as w,q as g,r as M,v as y,s as Y}from"./graph.C4kgFXP1.js";import{R as A,ag as Qn,ah as Zn,a6 as Nn,ai as B,K as Ln,_ as ne,E as _n,D as K,a4 as ee,aj as re,a3 as J,a2 as te,Y as Cn,Q as ie,a8 as ae,ak as H}from"../app.DRN3unl1.js";var oe=/\s/;function ue(n){for(var e=n.length;e--&&oe.test(n.charAt(e)););return e}var de=/^\s+/;function fe(n){return n&&n.slice(0,ue(n)+1).replace(de,"")}var un=NaN,se=/^[-+]0x[0-9a-f]+$/i,ce=/^0b[01]+$/i,he=/^0o[0-7]+$/i,le=parseInt;function ve(n){if(typeof n=="number")return n;if(F(n))return un;if(A(n)){var e=typeof n.valueOf=="function"?n.valueOf():n;n=A(e)?e+"":e}if(typeof n!="string")return n===0?n:+n;n=fe(n);var r=ce.test(n);return r||he.test(n)?le(n.slice(2),r?2:8):se.test(n)?un:+n}var dn=1/0,pe=17976931348623157e292;function S(n){if(!n)return n===0?n:0;if(n=ve(n),n===dn||n===-dn){var e=n<0?-1:1;return e*pe}return n===n?n:0}function we(n){var e=S(n),r=e%1;return e===e?r?e-r:e:0}function _(n){var e=n==null?0:n.length;return e?gn(n):[]}function me(n){return Qn(Zn(n,void 0,_),n+"")}var be=1,ge=4;function xe(n){return zn(n,be|ge)}var In=Object.prototype,Ee=In.hasOwnProperty,ke=Nn(function(n,e){n=Object(n);var r=-1,t=e.length,i=t>2?e[2]:void 0;for(i&&B(e[0],e[1],i)&&(t=1);++r-1?i[o?e[a]:a]:void 0}}var Ne=Math.max;function Le(n,e,r){var t=n==null?0:n.length;if(!t)return-1;var i=r==null?0:we(r);return i<0&&(i=Ne(t+i,0)),Un(n,L(e),i)}var Q=ye(Le);function Rn(n,e){var r=-1,t=_n(n)?Array(n.length):[];return Hn(n,function(i,o,a){t[++r]=e(i,o,a)}),t}function m(n,e){var r=K(n)?P:Rn;return r(n,L(e))}function _e(n,e){return n==null?n:ee(n,xn(e),Ln)}function Ce(n,e){return n&&En(n,xn(e))}function Ie(n,e){return n>e}function Tn(n,e){return ne||o&&a&&d&&!u&&!f||t&&a&&d||!r&&d||!i)return 1;if(!t&&!o&&!f&&n=u)return d;var f=r[t];return d*(f=="desc"?-1:1)}}return n.index-e.index}function Se(n,e,r){e.length?e=P(e,function(o){return K(o)?function(a){return yn(a,o.length===1?o[0]:o)}:o}):e=[J];var t=-1;e=P(e,ie(L));var i=Rn(n,function(o,a,u){var d=P(e,function(f){return f(o)});return{criteria:d,index:++t,value:o}});return Me(i,function(o,a){return Pe(o,a,r)})}function Fe(n,e){return Te(n,e,function(r,t){return Kn(n,t)})}var V=me(function(n,e){return n==null?{}:Fe(n,e)}),Ae=Math.ceil,Be=Math.max;function Ge(n,e,r,t){for(var i=-1,o=Be(Ae((e-n)/(r||1)),0),a=Array(o);o--;)a[++i]=n,n+=r;return a}function Ve(n){return function(e,r,t){return t&&typeof t!="number"&&B(e,r,t)&&(r=t=void 0),e=S(e),r===void 0?(r=e,e=0):r=S(r),t=t===void 0?e1&&B(n,e[0],e[1])?e=[]:r>2&&B(e[0],e[1],e[2])&&(e=[e[0]]),Se(n,gn(e),[])}),Ye=0;function en(n){var e=++Ye;return Jn(n)+e}function De(n,e,r){for(var t=-1,i=n.length,o=e.length,a={};++t0;--u)if(a=e[u].dequeue(),a){t=t.concat(q(n,e,r,a,!0));break}}}return t}function q(n,e,r,t,i){var o=i?[]:void 0;return s(n.inEdges(t.v),function(a){var u=n.edge(a),d=n.node(a.v);i&&o.push({v:a.v,w:a.w}),d.out-=u,j(e,r,d)}),s(n.outEdges(t.v),function(a){var u=n.edge(a),d=a.w,f=n.node(d);f.in-=u,j(e,r,f)}),n.removeNode(t.v),o}function He(n,e){var r=new x,t=0,i=0;s(n.nodes(),function(u){r.setNode(u,{v:u,in:0,out:0})}),s(n.edges(),function(u){var d=r.edge(u.v,u.w)||0,f=e(u),c=d+f;r.setEdge(u.v,u.w,c),i=Math.max(i,r.node(u.v).out+=f),t=Math.max(t,r.node(u.w).in+=f)});var o=N(i+t+3).map(function(){return new qe}),a=t+1;return s(r.nodes(),function(u){j(o,a,r.node(u))}),{graph:r,buckets:o,zeroIdx:a}}function j(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function je(n){var e=n.graph().acyclicer==="greedy"?Xe(n,r(n)):Ke(n);s(e,function(t){var i=n.edge(t);n.removeEdge(t),i.forwardName=t.name,i.reversed=!0,n.setEdge(t.w,t.v,i,en("rev"))});function r(t){return function(i){return t.edge(i).weight}}}function Ke(n){var e=[],r={},t={};function i(o){w(t,o)||(t[o]=!0,r[o]=!0,s(n.outEdges(o),function(a){w(r,a.w)?e.push(a):i(a.w)}),delete r[o])}return s(n.nodes(),i),e}function Je(n){s(n.edges(),function(e){var r=n.edge(e);if(r.reversed){n.removeEdge(e);var t=r.forwardName;delete r.reversed,delete r.forwardName,n.setEdge(e.w,e.v,r,t)}})}function C(n,e,r,t){var i;do i=en(t);while(n.hasNode(i));return r.dummy=e,n.setNode(i,r),i}function Qe(n){var e=new x().setGraph(n.graph());return s(n.nodes(),function(r){e.setNode(r,n.node(r))}),s(n.edges(),function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},i=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+i.weight,minlen:Math.max(t.minlen,i.minlen)})}),e}function Mn(n){var e=new x({multigraph:n.isMultigraph()}).setGraph(n.graph());return s(n.nodes(),function(r){n.children(r).length||e.setNode(r,n.node(r))}),s(n.edges(),function(r){e.setEdge(r,n.edge(r))}),e}function sn(n,e){var r=n.x,t=n.y,i=e.x-r,o=e.y-t,a=n.width/2,u=n.height/2;if(!i&&!o)throw new Error("Not possible to find intersection inside of the rectangle");var d,f;return Math.abs(o)*a>Math.abs(i)*u?(o<0&&(u=-u),d=u*i/o,f=u):(i<0&&(a=-a),d=a,f=a*o/i),{x:r+d,y:t+f}}function $(n){var e=m(N(On(n)+1),function(){return[]});return s(n.nodes(),function(r){var t=n.node(r),i=t.rank;g(i)||(e[i][t.order]=r)}),e}function Ze(n){var e=R(m(n.nodes(),function(r){return n.node(r).rank}));s(n.nodes(),function(r){var t=n.node(r);w(t,"rank")&&(t.rank-=e)})}function nr(n){var e=R(m(n.nodes(),function(o){return n.node(o).rank})),r=[];s(n.nodes(),function(o){var a=n.node(o).rank-e;r[a]||(r[a]=[]),r[a].push(o)});var t=0,i=n.graph().nodeRankFactor;s(r,function(o,a){g(o)&&a%i!==0?--t:t&&s(o,function(u){n.node(u).rank+=t})})}function cn(n,e,r,t){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=t),C(n,"border",i,e)}function On(n){return E(m(n.nodes(),function(e){var r=n.node(e).rank;if(!g(r))return r}))}function er(n,e){var r={lhs:[],rhs:[]};return s(n,function(t){e(t)?r.lhs.push(t):r.rhs.push(t)}),r}function rr(n,e){return e()}function tr(n){function e(r){var t=n.children(r),i=n.node(r);if(t.length&&s(t,e),w(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var o=i.minRank,a=i.maxRank+1;oa.lim&&(u=a,d=!0);var f=M(e.edges(),function(c){return d===vn(n,n.node(c.v),u)&&d!==vn(n,n.node(c.w),u)});return nn(f,function(c){return T(e,c)})}function Dn(n,e,r,t){var i=r.v,o=r.w;n.removeEdge(i,o),n.setEdge(t.v,t.w,{}),an(n),tn(n,e),br(n,e)}function br(n,e){var r=Q(n.nodes(),function(i){return!e.node(i).parent}),t=wr(n,r);t=t.slice(1),s(t,function(i){var o=n.node(i).parent,a=e.edge(i,o),u=!1;a||(a=e.edge(o,i),u=!0),e.node(i).rank=e.node(o).rank+(u?a.minlen:-a.minlen)})}function gr(n,e,r){return n.hasEdge(e,r)}function vn(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function xr(n){switch(n.graph().ranker){case"network-simplex":pn(n);break;case"tight-tree":kr(n);break;case"longest-path":Er(n);break;default:pn(n)}}var Er=rn;function kr(n){rn(n),Sn(n)}function pn(n){k(n)}function yr(n){var e=C(n,"root",{},"_root"),r=Nr(n),t=E(y(r))-1,i=2*t+1;n.graph().nestingRoot=e,s(n.edges(),function(a){n.edge(a).minlen*=i});var o=Lr(n)+1;s(n.children(),function(a){$n(n,e,i,o,t,r,a)}),n.graph().nodeRankFactor=i}function $n(n,e,r,t,i,o,a){var u=n.children(a);if(!u.length){a!==e&&n.setEdge(e,a,{weight:0,minlen:r});return}var d=cn(n,"_bt"),f=cn(n,"_bb"),c=n.node(a);n.setParent(d,a),c.borderTop=d,n.setParent(f,a),c.borderBottom=f,s(u,function(h){$n(n,e,r,t,i,o,h);var l=n.node(h),v=l.borderTop?l.borderTop:h,p=l.borderBottom?l.borderBottom:h,b=l.borderTop?t:2*t,I=v!==p?1:i-o[a]+1;n.setEdge(d,v,{weight:b,minlen:I,nestingEdge:!0}),n.setEdge(p,f,{weight:b,minlen:I,nestingEdge:!0})}),n.parent(a)||n.setEdge(e,d,{weight:0,minlen:i+o[a]})}function Nr(n){var e={};function r(t,i){var o=n.children(t);o&&o.length&&s(o,function(a){r(a,i+1)}),e[t]=i}return s(n.children(),function(t){r(t,1)}),e}function Lr(n){return Y(n.edges(),function(e,r){return e+n.edge(r).weight},0)}function _r(n){var e=n.graph();n.removeNode(e.nestingRoot),delete e.nestingRoot,s(n.edges(),function(r){var t=n.edge(r);t.nestingEdge&&n.removeEdge(r)})}function Cr(n,e,r){var t={},i;s(r,function(o){for(var a=n.parent(o),u,d;a;){if(u=n.parent(a),u?(d=t[u],t[u]=a):(d=i,i=a),d&&d!==a){e.setEdge(d,a);return}a=u}})}function Ir(n,e,r){var t=Rr(n),i=new x({compound:!0}).setGraph({root:t}).setDefaultNodeLabel(function(o){return n.node(o)});return s(n.nodes(),function(o){var a=n.node(o),u=n.parent(o);(a.rank===e||a.minRank<=e&&e<=a.maxRank)&&(i.setNode(o),i.setParent(o,u||t),s(n[r](o),function(d){var f=d.v===o?d.w:d.v,c=i.edge(f,o),h=g(c)?0:c.weight;i.setEdge(f,o,{weight:n.edge(d).weight+h})}),w(a,"minRank")&&i.setNode(o,{borderLeft:a.borderLeft[e],borderRight:a.borderRight[e]}))}),i}function Rr(n){for(var e;n.hasNode(e=en("_root")););return e}function Tr(n,e){for(var r=0,t=1;t0;)c%2&&(h+=u[c+1]),c=c-1>>1,u[c]+=f.weight;d+=f.weight*h})),d}function Or(n){var e={},r=M(n.nodes(),function(u){return!n.children(u).length}),t=E(m(r,function(u){return n.node(u).rank})),i=m(N(t+1),function(){return[]});function o(u){if(!w(e,u)){e[u]=!0;var d=n.node(u);i[d.rank].push(u),s(n.successors(u),o)}}var a=O(r,function(u){return n.node(u).rank});return s(a,o),i}function Pr(n,e){return m(e,function(r){var t=n.inEdges(r);if(t.length){var i=Y(t,function(o,a){var u=n.edge(a),d=n.node(a.v);return{sum:o.sum+u.weight*d.order,weight:o.weight+u.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}function Sr(n,e){var r={};s(n,function(i,o){var a=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:o};g(i.barycenter)||(a.barycenter=i.barycenter,a.weight=i.weight)}),s(e.edges(),function(i){var o=r[i.v],a=r[i.w];!g(o)&&!g(a)&&(a.indegree++,o.out.push(r[i.w]))});var t=M(r,function(i){return!i.indegree});return Fr(t)}function Fr(n){var e=[];function r(o){return function(a){a.merged||(g(a.barycenter)||g(o.barycenter)||a.barycenter>=o.barycenter)&&Ar(o,a)}}function t(o){return function(a){a.in.push(o),--a.indegree===0&&n.push(a)}}for(;n.length;){var i=n.pop();e.push(i),s(i.in.reverse(),r(i)),s(i.out,t(i))}return m(M(e,function(o){return!o.merged}),function(o){return V(o,["vs","i","barycenter","weight"])})}function Ar(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight),e.weight&&(r+=e.barycenter*e.weight,t+=e.weight),n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}function Br(n,e){var r=er(n,function(c){return w(c,"barycenter")}),t=r.lhs,i=O(r.rhs,function(c){return-c.i}),o=[],a=0,u=0,d=0;t.sort(Gr(!!e)),d=wn(o,i,d),s(t,function(c){d+=c.vs.length,o.push(c.vs),a+=c.barycenter*c.weight,u+=c.weight,d=wn(o,i,d)});var f={vs:_(o)};return u&&(f.barycenter=a/u,f.weight=u),f}function wn(n,e,r){for(var t;e.length&&(t=G(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function Gr(n){return function(e,r){return e.barycenterr.barycenter?1:n?r.i-e.i:e.i-r.i}}function qn(n,e,r,t){var i=n.children(e),o=n.node(e),a=o?o.borderLeft:void 0,u=o?o.borderRight:void 0,d={};a&&(i=M(i,function(p){return p!==a&&p!==u}));var f=Pr(n,i);s(f,function(p){if(n.children(p.v).length){var b=qn(n,p.v,r,t);d[p.v]=b,w(b,"barycenter")&&Yr(p,b)}});var c=Sr(f,r);Vr(c,d);var h=Br(c,t);if(a&&(h.vs=_([a,h.vs,u]),n.predecessors(a).length)){var l=n.node(n.predecessors(a)[0]),v=n.node(n.predecessors(u)[0]);w(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+l.order+v.order)/(h.weight+2),h.weight+=2}return h}function Vr(n,e){s(n,function(r){r.vs=_(r.vs.map(function(t){return e[t]?e[t].vs:t}))})}function Yr(n,e){g(n.barycenter)?(n.barycenter=e.barycenter,n.weight=e.weight):(n.barycenter=(n.barycenter*n.weight+e.barycenter*e.weight)/(n.weight+e.weight),n.weight+=e.weight)}function Dr(n){var e=On(n),r=mn(n,N(1,e+1),"inEdges"),t=mn(n,N(e-1,-1,-1),"outEdges"),i=Or(n);bn(n,i);for(var o=Number.POSITIVE_INFINITY,a,u=0,d=0;d<4;++u,++d){$r(u%2?r:t,u%4>=2),i=$(n);var f=Tr(n,i);fa||u>e[d].lim));for(f=d,d=t;(d=n.parent(d))!==f;)o.push(d);return{path:i.concat(o.reverse()),lca:f}}function zr(n){var e={},r=0;function t(i){var o=r;s(n.children(i),t),e[i]={low:o,lim:r++}}return s(n.children(),t),e}function Xr(n,e){var r={};function t(i,o){var a=0,u=0,d=i.length,f=G(o);return s(o,function(c,h){var l=Hr(n,c),v=l?n.node(l).order:d;(l||c===f)&&(s(o.slice(u,h+1),function(p){s(n.predecessors(p),function(b){var I=n.node(b),on=I.order;(onf)&&Wn(r,l,c)})})}function i(o,a){var u=-1,d,f=0;return s(a,function(c,h){if(n.node(c).dummy==="border"){var l=n.predecessors(c);l.length&&(d=n.node(l[0]).order,t(a,f,h,u,d),f=h,u=d)}t(a,f,a.length,d,o.length)}),a}return Y(e,i),r}function Hr(n,e){if(n.node(e).dummy)return Q(n.predecessors(e),function(r){return n.node(r).dummy})}function Wn(n,e,r){if(e>r){var t=e;e=r,r=t}var i=n[e];i||(n[e]=i={}),i[r]=!0}function jr(n,e,r){if(e>r){var t=e;e=r,r=t}return w(n[e],r)}function Kr(n,e,r,t){var i={},o={},a={};return s(e,function(u){s(u,function(d,f){i[d]=d,o[d]=d,a[d]=f})}),s(e,function(u){var d=-1;s(u,function(f){var c=t(f);if(c.length){c=O(c,function(b){return a[b]});for(var h=(c.length-1)/2,l=Math.floor(h),v=Math.ceil(h);l<=v;++l){var p=c[l];o[f]===f&&d2?e[2]:void 0;for(i&&B(e[0],e[1],i)&&(t=1);++r-1?i[o?e[a]:a]:void 0}}var Ne=Math.max;function Le(n,e,r){var t=n==null?0:n.length;if(!t)return-1;var i=r==null?0:we(r);return i<0&&(i=Ne(t+i,0)),Un(n,L(e),i)}var J=ye(Le);function Rn(n,e){var r=-1,t=_n(n)?Array(n.length):[];return Hn(n,function(i,o,a){t[++r]=e(i,o,a)}),t}function m(n,e){var r=K(n)?P:Rn;return r(n,L(e))}function _e(n,e){return n==null?n:ee(n,xn(e),Ln)}function Ce(n,e){return n&&En(n,xn(e))}function Ie(n,e){return n>e}function Tn(n,e){return ne||o&&a&&d&&!u&&!f||t&&a&&d||!r&&d||!i)return 1;if(!t&&!o&&!f&&n=u)return d;var f=r[t];return d*(f=="desc"?-1:1)}}return n.index-e.index}function Se(n,e,r){e.length?e=P(e,function(o){return K(o)?function(a){return yn(a,o.length===1?o[0]:o)}:o}):e=[Z];var t=-1;e=P(e,ie(L));var i=Rn(n,function(o,a,u){var d=P(e,function(f){return f(o)});return{criteria:d,index:++t,value:o}});return Me(i,function(o,a){return Pe(o,a,r)})}function Fe(n,e){return Te(n,e,function(r,t){return Kn(n,t)})}var V=me(function(n,e){return n==null?{}:Fe(n,e)}),Ae=Math.ceil,Be=Math.max;function Ge(n,e,r,t){for(var i=-1,o=Be(Ae((e-n)/(r||1)),0),a=Array(o);o--;)a[++i]=n,n+=r;return a}function Ve(n){return function(e,r,t){return t&&typeof t!="number"&&B(e,r,t)&&(r=t=void 0),e=S(e),r===void 0?(r=e,e=0):r=S(r),t=t===void 0?e1&&B(n,e[0],e[1])?e=[]:r>2&&B(e[0],e[1],e[2])&&(e=[e[0]]),Se(n,gn(e),[])}),Ye=0;function en(n){var e=++Ye;return Zn(n)+e}function $e(n,e,r){for(var t=-1,i=n.length,o=e.length,a={};++t0;--u)if(a=e[u].dequeue(),a){t=t.concat(q(n,e,r,a,!0));break}}}return t}function q(n,e,r,t,i){var o=i?[]:void 0;return s(n.inEdges(t.v),function(a){var u=n.edge(a),d=n.node(a.v);i&&o.push({v:a.v,w:a.w}),d.out-=u,j(e,r,d)}),s(n.outEdges(t.v),function(a){var u=n.edge(a),d=a.w,f=n.node(d);f.in-=u,j(e,r,f)}),n.removeNode(t.v),o}function He(n,e){var r=new x,t=0,i=0;s(n.nodes(),function(u){r.setNode(u,{v:u,in:0,out:0})}),s(n.edges(),function(u){var d=r.edge(u.v,u.w)||0,f=e(u),c=d+f;r.setEdge(u.v,u.w,c),i=Math.max(i,r.node(u.v).out+=f),t=Math.max(t,r.node(u.w).in+=f)});var o=N(i+t+3).map(function(){return new qe}),a=t+1;return s(r.nodes(),function(u){j(o,a,r.node(u))}),{graph:r,buckets:o,zeroIdx:a}}function j(n,e,r){r.out?r.in?n[r.out-r.in+e].enqueue(r):n[n.length-1].enqueue(r):n[0].enqueue(r)}function je(n){var e=n.graph().acyclicer==="greedy"?Xe(n,r(n)):Ke(n);s(e,function(t){var i=n.edge(t);n.removeEdge(t),i.forwardName=t.name,i.reversed=!0,n.setEdge(t.w,t.v,i,en("rev"))});function r(t){return function(i){return t.edge(i).weight}}}function Ke(n){var e=[],r={},t={};function i(o){w(t,o)||(t[o]=!0,r[o]=!0,s(n.outEdges(o),function(a){w(r,a.w)?e.push(a):i(a.w)}),delete r[o])}return s(n.nodes(),i),e}function Ze(n){s(n.edges(),function(e){var r=n.edge(e);if(r.reversed){n.removeEdge(e);var t=r.forwardName;delete r.reversed,delete r.forwardName,n.setEdge(e.w,e.v,r,t)}})}function C(n,e,r,t){var i;do i=en(t);while(n.hasNode(i));return r.dummy=e,n.setNode(i,r),i}function Je(n){var e=new x().setGraph(n.graph());return s(n.nodes(),function(r){e.setNode(r,n.node(r))}),s(n.edges(),function(r){var t=e.edge(r.v,r.w)||{weight:0,minlen:1},i=n.edge(r);e.setEdge(r.v,r.w,{weight:t.weight+i.weight,minlen:Math.max(t.minlen,i.minlen)})}),e}function Mn(n){var e=new x({multigraph:n.isMultigraph()}).setGraph(n.graph());return s(n.nodes(),function(r){n.children(r).length||e.setNode(r,n.node(r))}),s(n.edges(),function(r){e.setEdge(r,n.edge(r))}),e}function sn(n,e){var r=n.x,t=n.y,i=e.x-r,o=e.y-t,a=n.width/2,u=n.height/2;if(!i&&!o)throw new Error("Not possible to find intersection inside of the rectangle");var d,f;return Math.abs(o)*a>Math.abs(i)*u?(o<0&&(u=-u),d=u*i/o,f=u):(i<0&&(a=-a),d=a,f=a*o/i),{x:r+d,y:t+f}}function D(n){var e=m(N(On(n)+1),function(){return[]});return s(n.nodes(),function(r){var t=n.node(r),i=t.rank;g(i)||(e[i][t.order]=r)}),e}function Qe(n){var e=R(m(n.nodes(),function(r){return n.node(r).rank}));s(n.nodes(),function(r){var t=n.node(r);w(t,"rank")&&(t.rank-=e)})}function nr(n){var e=R(m(n.nodes(),function(o){return n.node(o).rank})),r=[];s(n.nodes(),function(o){var a=n.node(o).rank-e;r[a]||(r[a]=[]),r[a].push(o)});var t=0,i=n.graph().nodeRankFactor;s(r,function(o,a){g(o)&&a%i!==0?--t:t&&s(o,function(u){n.node(u).rank+=t})})}function cn(n,e,r,t){var i={width:0,height:0};return arguments.length>=4&&(i.rank=r,i.order=t),C(n,"border",i,e)}function On(n){return E(m(n.nodes(),function(e){var r=n.node(e).rank;if(!g(r))return r}))}function er(n,e){var r={lhs:[],rhs:[]};return s(n,function(t){e(t)?r.lhs.push(t):r.rhs.push(t)}),r}function rr(n,e){return e()}function tr(n){function e(r){var t=n.children(r),i=n.node(r);if(t.length&&s(t,e),w(i,"minRank")){i.borderLeft=[],i.borderRight=[];for(var o=i.minRank,a=i.maxRank+1;oa.lim&&(u=a,d=!0);var f=M(e.edges(),function(c){return d===vn(n,n.node(c.v),u)&&d!==vn(n,n.node(c.w),u)});return nn(f,function(c){return T(e,c)})}function $n(n,e,r,t){var i=r.v,o=r.w;n.removeEdge(i,o),n.setEdge(t.v,t.w,{}),an(n),tn(n,e),br(n,e)}function br(n,e){var r=J(n.nodes(),function(i){return!e.node(i).parent}),t=wr(n,r);t=t.slice(1),s(t,function(i){var o=n.node(i).parent,a=e.edge(i,o),u=!1;a||(a=e.edge(o,i),u=!0),e.node(i).rank=e.node(o).rank+(u?a.minlen:-a.minlen)})}function gr(n,e,r){return n.hasEdge(e,r)}function vn(n,e,r){return r.low<=e.lim&&e.lim<=r.lim}function xr(n){switch(n.graph().ranker){case"network-simplex":pn(n);break;case"tight-tree":kr(n);break;case"longest-path":Er(n);break;default:pn(n)}}var Er=rn;function kr(n){rn(n),Sn(n)}function pn(n){k(n)}function yr(n){var e=C(n,"root",{},"_root"),r=Nr(n),t=E(y(r))-1,i=2*t+1;n.graph().nestingRoot=e,s(n.edges(),function(a){n.edge(a).minlen*=i});var o=Lr(n)+1;s(n.children(),function(a){Dn(n,e,i,o,t,r,a)}),n.graph().nodeRankFactor=i}function Dn(n,e,r,t,i,o,a){var u=n.children(a);if(!u.length){a!==e&&n.setEdge(e,a,{weight:0,minlen:r});return}var d=cn(n,"_bt"),f=cn(n,"_bb"),c=n.node(a);n.setParent(d,a),c.borderTop=d,n.setParent(f,a),c.borderBottom=f,s(u,function(h){Dn(n,e,r,t,i,o,h);var l=n.node(h),v=l.borderTop?l.borderTop:h,p=l.borderBottom?l.borderBottom:h,b=l.borderTop?t:2*t,I=v!==p?1:i-o[a]+1;n.setEdge(d,v,{weight:b,minlen:I,nestingEdge:!0}),n.setEdge(p,f,{weight:b,minlen:I,nestingEdge:!0})}),n.parent(a)||n.setEdge(e,d,{weight:0,minlen:i+o[a]})}function Nr(n){var e={};function r(t,i){var o=n.children(t);o&&o.length&&s(o,function(a){r(a,i+1)}),e[t]=i}return s(n.children(),function(t){r(t,1)}),e}function Lr(n){return Y(n.edges(),function(e,r){return e+n.edge(r).weight},0)}function _r(n){var e=n.graph();n.removeNode(e.nestingRoot),delete e.nestingRoot,s(n.edges(),function(r){var t=n.edge(r);t.nestingEdge&&n.removeEdge(r)})}function Cr(n,e,r){var t={},i;s(r,function(o){for(var a=n.parent(o),u,d;a;){if(u=n.parent(a),u?(d=t[u],t[u]=a):(d=i,i=a),d&&d!==a){e.setEdge(d,a);return}a=u}})}function Ir(n,e,r){var t=Rr(n),i=new x({compound:!0}).setGraph({root:t}).setDefaultNodeLabel(function(o){return n.node(o)});return s(n.nodes(),function(o){var a=n.node(o),u=n.parent(o);(a.rank===e||a.minRank<=e&&e<=a.maxRank)&&(i.setNode(o),i.setParent(o,u||t),s(n[r](o),function(d){var f=d.v===o?d.w:d.v,c=i.edge(f,o),h=g(c)?0:c.weight;i.setEdge(f,o,{weight:n.edge(d).weight+h})}),w(a,"minRank")&&i.setNode(o,{borderLeft:a.borderLeft[e],borderRight:a.borderRight[e]}))}),i}function Rr(n){for(var e;n.hasNode(e=en("_root")););return e}function Tr(n,e){for(var r=0,t=1;t0;)c%2&&(h+=u[c+1]),c=c-1>>1,u[c]+=f.weight;d+=f.weight*h})),d}function Or(n){var e={},r=M(n.nodes(),function(u){return!n.children(u).length}),t=E(m(r,function(u){return n.node(u).rank})),i=m(N(t+1),function(){return[]});function o(u){if(!w(e,u)){e[u]=!0;var d=n.node(u);i[d.rank].push(u),s(n.successors(u),o)}}var a=O(r,function(u){return n.node(u).rank});return s(a,o),i}function Pr(n,e){return m(e,function(r){var t=n.inEdges(r);if(t.length){var i=Y(t,function(o,a){var u=n.edge(a),d=n.node(a.v);return{sum:o.sum+u.weight*d.order,weight:o.weight+u.weight}},{sum:0,weight:0});return{v:r,barycenter:i.sum/i.weight,weight:i.weight}}else return{v:r}})}function Sr(n,e){var r={};s(n,function(i,o){var a=r[i.v]={indegree:0,in:[],out:[],vs:[i.v],i:o};g(i.barycenter)||(a.barycenter=i.barycenter,a.weight=i.weight)}),s(e.edges(),function(i){var o=r[i.v],a=r[i.w];!g(o)&&!g(a)&&(a.indegree++,o.out.push(r[i.w]))});var t=M(r,function(i){return!i.indegree});return Fr(t)}function Fr(n){var e=[];function r(o){return function(a){a.merged||(g(a.barycenter)||g(o.barycenter)||a.barycenter>=o.barycenter)&&Ar(o,a)}}function t(o){return function(a){a.in.push(o),--a.indegree===0&&n.push(a)}}for(;n.length;){var i=n.pop();e.push(i),s(i.in.reverse(),r(i)),s(i.out,t(i))}return m(M(e,function(o){return!o.merged}),function(o){return V(o,["vs","i","barycenter","weight"])})}function Ar(n,e){var r=0,t=0;n.weight&&(r+=n.barycenter*n.weight,t+=n.weight),e.weight&&(r+=e.barycenter*e.weight,t+=e.weight),n.vs=e.vs.concat(n.vs),n.barycenter=r/t,n.weight=t,n.i=Math.min(e.i,n.i),e.merged=!0}function Br(n,e){var r=er(n,function(c){return w(c,"barycenter")}),t=r.lhs,i=O(r.rhs,function(c){return-c.i}),o=[],a=0,u=0,d=0;t.sort(Gr(!!e)),d=wn(o,i,d),s(t,function(c){d+=c.vs.length,o.push(c.vs),a+=c.barycenter*c.weight,u+=c.weight,d=wn(o,i,d)});var f={vs:_(o)};return u&&(f.barycenter=a/u,f.weight=u),f}function wn(n,e,r){for(var t;e.length&&(t=G(e)).i<=r;)e.pop(),n.push(t.vs),r++;return r}function Gr(n){return function(e,r){return e.barycenterr.barycenter?1:n?r.i-e.i:e.i-r.i}}function qn(n,e,r,t){var i=n.children(e),o=n.node(e),a=o?o.borderLeft:void 0,u=o?o.borderRight:void 0,d={};a&&(i=M(i,function(p){return p!==a&&p!==u}));var f=Pr(n,i);s(f,function(p){if(n.children(p.v).length){var b=qn(n,p.v,r,t);d[p.v]=b,w(b,"barycenter")&&Yr(p,b)}});var c=Sr(f,r);Vr(c,d);var h=Br(c,t);if(a&&(h.vs=_([a,h.vs,u]),n.predecessors(a).length)){var l=n.node(n.predecessors(a)[0]),v=n.node(n.predecessors(u)[0]);w(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+l.order+v.order)/(h.weight+2),h.weight+=2}return h}function Vr(n,e){s(n,function(r){r.vs=_(r.vs.map(function(t){return e[t]?e[t].vs:t}))})}function Yr(n,e){g(n.barycenter)?(n.barycenter=e.barycenter,n.weight=e.weight):(n.barycenter=(n.barycenter*n.weight+e.barycenter*e.weight)/(n.weight+e.weight),n.weight+=e.weight)}function $r(n){var e=On(n),r=mn(n,N(1,e+1),"inEdges"),t=mn(n,N(e-1,-1,-1),"outEdges"),i=Or(n);bn(n,i);for(var o=Number.POSITIVE_INFINITY,a,u=0,d=0;d<4;++u,++d){Dr(u%2?r:t,u%4>=2),i=D(n);var f=Tr(n,i);fa||u>e[d].lim));for(f=d,d=t;(d=n.parent(d))!==f;)o.push(d);return{path:i.concat(o.reverse()),lca:f}}function zr(n){var e={},r=0;function t(i){var o=r;s(n.children(i),t),e[i]={low:o,lim:r++}}return s(n.children(),t),e}function Xr(n,e){var r={};function t(i,o){var a=0,u=0,d=i.length,f=G(o);return s(o,function(c,h){var l=Hr(n,c),v=l?n.node(l).order:d;(l||c===f)&&(s(o.slice(u,h+1),function(p){s(n.predecessors(p),function(b){var I=n.node(b),on=I.order;(onf)&&Wn(r,l,c)})})}function i(o,a){var u=-1,d,f=0;return s(a,function(c,h){if(n.node(c).dummy==="border"){var l=n.predecessors(c);l.length&&(d=n.node(l[0]).order,t(a,f,h,u,d),f=h,u=d)}t(a,f,a.length,d,o.length)}),a}return Y(e,i),r}function Hr(n,e){if(n.node(e).dummy)return J(n.predecessors(e),function(r){return n.node(r).dummy})}function Wn(n,e,r){if(e>r){var t=e;e=r,r=t}var i=n[e];i||(n[e]=i={}),i[r]=!0}function jr(n,e,r){if(e>r){var t=e;e=r,r=t}return w(n[e],r)}function Kr(n,e,r,t){var i={},o={},a={};return s(e,function(u){s(u,function(d,f){i[d]=d,o[d]=d,a[d]=f})}),s(e,function(u){var d=-1;s(u,function(f){var c=t(f);if(c.length){c=O(c,function(b){return a[b]});for(var h=(c.length-1)/2,l=Math.floor(h),v=Math.ceil(h);l<=v;++l){var p=c[l];o[f]===f&&dt?1:n>=t?0:NaN}function hn(n,t){return n==null||t==null?NaN:tn?1:t>=n?0:NaN}function _(n){let t,e,r;n.length!==2?(t=$,e=(u,c)=>$(n(u),c),r=(u,c)=>n(u)-c):(t=n===$||n===hn?n:mn,e=n,r=n);function i(u,c,o=0,s=u.length){if(o>>1;e(u[h],c)<0?o=h+1:s=h}while(o>>1;e(u[h],c)<=0?o=h+1:s=h}while(oo&&r(u[h-1],c)>-r(u[h],c)?h-1:h}return{left:i,center:a,right:f}}function mn(){return 0}function ln(n){return n===null?NaN:+n}const sn=_($),dn=sn.right;_(ln).center;const gn=Math.sqrt(50),yn=Math.sqrt(10),Mn=Math.sqrt(2);function E(n,t,e){const r=(t-n)/Math.max(0,e),i=Math.floor(Math.log10(r)),f=r/Math.pow(10,i),a=f>=gn?10:f>=yn?5:f>=Mn?2:1;let u,c,o;return i<0?(o=Math.pow(10,-i)/a,u=Math.round(n*o),c=Math.round(t*o),u/ot&&--c,o=-o):(o=Math.pow(10,i)*a,u=Math.round(n/o),c=Math.round(t/o),u*ot&&--c),c0))return[];if(n===t)return[n];const r=t=i))return[];const u=f-i+1,c=new Array(u);if(r)if(a<0)for(let o=0;o=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function R(n,t){if((e=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var e,r=n.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+n.slice(e+1)]}function v(n){return n=R(Math.abs(n)),n?n[1]:NaN}function jn(n,t){return function(e,r){for(var i=e.length,f=[],a=0,u=n[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),f.push(e.substring(i-=u,i+u)),!((c+=u+1)>r));)u=n[a=(a+1)%n.length];return f.reverse().join(t)}}function Pn(n){return function(t){return t.replace(/[0-9]/g,function(e){return n[+e]})}}var zn=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function D(n){if(!(t=zn.exec(n)))throw new Error("invalid format: "+n);var t;return new G({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]})}D.prototype=G.prototype;function G(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}G.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Fn(n){n:for(var t=n.length,e=1,r=-1,i;e0&&(r=0);break}return r>0?n.slice(0,r)+n.slice(i+1):n}var nn;function $n(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1],f=i-(nn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=r.length;return f===a?r:f>a?r+new Array(f-a+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+R(n,Math.max(0,t+f-1))[0]}function Z(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const H={"%":(n,t)=>(n*100).toFixed(t),b:n=>Math.round(n).toString(2),c:n=>n+"",d:bn,e:(n,t)=>n.toExponential(t),f:(n,t)=>n.toFixed(t),g:(n,t)=>n.toPrecision(t),o:n=>Math.round(n).toString(8),p:(n,t)=>Z(n*100,t),r:Z,s:$n,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function J(n){return n}var K=Array.prototype.map,Q=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function En(n){var t=n.grouping===void 0||n.thousands===void 0?J:jn(K.call(n.grouping,Number),n.thousands+""),e=n.currency===void 0?"":n.currency[0]+"",r=n.currency===void 0?"":n.currency[1]+"",i=n.decimal===void 0?".":n.decimal+"",f=n.numerals===void 0?J:Pn(K.call(n.numerals,String)),a=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function o(h){h=D(h);var l=h.fill,p=h.align,y=h.sign,S=h.symbol,k=h.zero,b=h.width,T=h.comma,w=h.precision,B=h.trim,d=h.type;d==="n"?(T=!0,d="g"):H[d]||(w===void 0&&(w=12),B=!0,d="g"),(k||l==="0"&&p==="=")&&(k=!0,l="0",p="=");var en=S==="$"?e:S==="#"&&/[boxX]/.test(d)?"0"+d.toLowerCase():"",on=S==="$"?r:/[%p]/.test(d)?a:"",O=H[d],an=/[defgprs%]/.test(d);w=w===void 0?6:/[gprs]/.test(d)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function V(m){var N=en,g=on,x,X,j;if(d==="c")g=O(m)+g,m="";else{m=+m;var P=m<0||1/m<0;if(m=isNaN(m)?c:O(Math.abs(m),w),B&&(m=Fn(m)),P&&+m==0&&y!=="+"&&(P=!1),N=(P?y==="("?y:u:y==="-"||y==="("?"":y)+N,g=(d==="s"?Q[8+nn/3]:"")+g+(P&&y==="("?")":""),an){for(x=-1,X=m.length;++xj||j>57){g=(j===46?i+m.slice(x+1):m.slice(x))+g,m=m.slice(0,x);break}}}T&&!k&&(m=t(m,1/0));var z=N.length+m.length+g.length,M=z>1)+N+m+g+M.slice(z);break;default:m=M+N+m+g;break}return f(m)}return V.toString=function(){return h+""},V}function s(h,l){var p=o((h=D(h),h.type="f",h)),y=Math.max(-8,Math.min(8,Math.floor(v(l)/3)))*3,S=Math.pow(10,-y),k=Q[8+y/3];return function(b){return p(S*b)+k}}return{format:o,formatPrefix:s}}var F,tn,rn;Rn({thousands:",",grouping:[3],currency:["$",""]});function Rn(n){return F=En(n),tn=F.format,rn=F.formatPrefix,F}function Dn(n){return Math.max(0,-v(Math.abs(n)))}function Tn(n,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(v(t)/3)))*3-v(Math.abs(n)))}function Cn(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,v(t)-v(n))+1}function In(n){return function(){return n}}function Ln(n){return+n}var W=[0,1];function A(n){return n}function L(n,t){return(t-=n=+n)?function(e){return(e-n)/t}:In(isNaN(t)?NaN:.5)}function qn(n,t){var e;return n>t&&(e=n,n=t,t=e),function(r){return Math.max(n,Math.min(t,r))}}function Gn(n,t,e){var r=n[0],i=n[1],f=t[0],a=t[1];return i2?Bn:Gn,c=o=null,h}function h(l){return l==null||isNaN(l=+l)?f:(c||(c=u(n.map(r),t,e)))(r(a(l)))}return h.invert=function(l){return a(i((o||(o=u(t,n.map(r),C)))(l)))},h.domain=function(l){return arguments.length?(n=Array.from(l,Ln),s()):n.slice()},h.range=function(l){return arguments.length?(t=Array.from(l),s()):t.slice()},h.rangeRound=function(l){return t=Array.from(l),e=Sn,s()},h.clamp=function(l){return arguments.length?(a=l?!0:A,s()):a!==A},h.interpolate=function(l){return arguments.length?(e=l,s()):e},h.unknown=function(l){return arguments.length?(f=l,h):f},function(l,p){return r=l,i=p,s()}}function Xn(){return Vn()(A,A)}function Un(n,t,e,r){var i=wn(n,t,e),f;switch(r=D(r??",f"),r.type){case"s":{var a=Math.max(Math.abs(n),Math.abs(t));return r.precision==null&&!isNaN(f=Tn(i,a))&&(r.precision=f),rn(r,a)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(f=Cn(i,Math.max(Math.abs(n),Math.abs(t))))&&(r.precision=f-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(f=Dn(i))&&(r.precision=f-(r.type==="%")*2);break}}return tn(r)}function Yn(n){var t=n.domain;return n.ticks=function(e){var r=t();return pn(r[0],r[r.length-1],e??10)},n.tickFormat=function(e,r){var i=t();return Un(i[0],i[i.length-1],e??10,r)},n.nice=function(e){e==null&&(e=10);var r=t(),i=0,f=r.length-1,a=r[i],u=r[f],c,o,s=10;for(u0;){if(o=I(a,u,e),o===c)return r[i]=a,r[f]=u,t(r);if(o>0)a=Math.floor(a/o)*o,u=Math.ceil(u/o)*o;else if(o<0)a=Math.ceil(a*o)/o,u=Math.floor(u*o)/o;else break;c=o}return n},n}function Zn(){var n=Xn();return n.copy=function(){return On(n,Zn())},cn.apply(n,arguments),Yn(n)}export{On as a,_ as b,Xn as c,Zn as l,wn as t}; +import{aC as un,aD as C,aE as U,aF as Y,aG as fn}from"../app.DRN3unl1.js";import{i as cn}from"./init.Gi6I4Gst.js";function $(n,t){return n==null||t==null?NaN:nt?1:n>=t?0:NaN}function hn(n,t){return n==null||t==null?NaN:tn?1:t>=n?0:NaN}function _(n){let t,e,r;n.length!==2?(t=$,e=(u,c)=>$(n(u),c),r=(u,c)=>n(u)-c):(t=n===$||n===hn?n:mn,e=n,r=n);function i(u,c,o=0,s=u.length){if(o>>1;e(u[h],c)<0?o=h+1:s=h}while(o>>1;e(u[h],c)<=0?o=h+1:s=h}while(oo&&r(u[h-1],c)>-r(u[h],c)?h-1:h}return{left:i,center:a,right:f}}function mn(){return 0}function ln(n){return n===null?NaN:+n}const sn=_($),dn=sn.right;_(ln).center;const gn=Math.sqrt(50),yn=Math.sqrt(10),Mn=Math.sqrt(2);function E(n,t,e){const r=(t-n)/Math.max(0,e),i=Math.floor(Math.log10(r)),f=r/Math.pow(10,i),a=f>=gn?10:f>=yn?5:f>=Mn?2:1;let u,c,o;return i<0?(o=Math.pow(10,-i)/a,u=Math.round(n*o),c=Math.round(t*o),u/ot&&--c,o=-o):(o=Math.pow(10,i)*a,u=Math.round(n/o),c=Math.round(t/o),u*ot&&--c),c0))return[];if(n===t)return[n];const r=t=i))return[];const u=f-i+1,c=new Array(u);if(r)if(a<0)for(let o=0;o=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function R(n,t){if((e=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var e,r=n.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+n.slice(e+1)]}function v(n){return n=R(Math.abs(n)),n?n[1]:NaN}function jn(n,t){return function(e,r){for(var i=e.length,f=[],a=0,u=n[0],c=0;i>0&&u>0&&(c+u+1>r&&(u=Math.max(1,r-c)),f.push(e.substring(i-=u,i+u)),!((c+=u+1)>r));)u=n[a=(a+1)%n.length];return f.reverse().join(t)}}function Pn(n){return function(t){return t.replace(/[0-9]/g,function(e){return n[+e]})}}var zn=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function D(n){if(!(t=zn.exec(n)))throw new Error("invalid format: "+n);var t;return new G({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]})}D.prototype=G.prototype;function G(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}G.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Fn(n){n:for(var t=n.length,e=1,r=-1,i;e0&&(r=0);break}return r>0?n.slice(0,r)+n.slice(i+1):n}var nn;function $n(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1],f=i-(nn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=r.length;return f===a?r:f>a?r+new Array(f-a+1).join("0"):f>0?r.slice(0,f)+"."+r.slice(f):"0."+new Array(1-f).join("0")+R(n,Math.max(0,t+f-1))[0]}function Z(n,t){var e=R(n,t);if(!e)return n+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const H={"%":(n,t)=>(n*100).toFixed(t),b:n=>Math.round(n).toString(2),c:n=>n+"",d:bn,e:(n,t)=>n.toExponential(t),f:(n,t)=>n.toFixed(t),g:(n,t)=>n.toPrecision(t),o:n=>Math.round(n).toString(8),p:(n,t)=>Z(n*100,t),r:Z,s:$n,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function J(n){return n}var K=Array.prototype.map,Q=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function En(n){var t=n.grouping===void 0||n.thousands===void 0?J:jn(K.call(n.grouping,Number),n.thousands+""),e=n.currency===void 0?"":n.currency[0]+"",r=n.currency===void 0?"":n.currency[1]+"",i=n.decimal===void 0?".":n.decimal+"",f=n.numerals===void 0?J:Pn(K.call(n.numerals,String)),a=n.percent===void 0?"%":n.percent+"",u=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function o(h){h=D(h);var l=h.fill,p=h.align,y=h.sign,S=h.symbol,k=h.zero,b=h.width,T=h.comma,w=h.precision,B=h.trim,d=h.type;d==="n"?(T=!0,d="g"):H[d]||(w===void 0&&(w=12),B=!0,d="g"),(k||l==="0"&&p==="=")&&(k=!0,l="0",p="=");var en=S==="$"?e:S==="#"&&/[boxX]/.test(d)?"0"+d.toLowerCase():"",on=S==="$"?r:/[%p]/.test(d)?a:"",O=H[d],an=/[defgprs%]/.test(d);w=w===void 0?6:/[gprs]/.test(d)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function V(m){var N=en,g=on,x,X,j;if(d==="c")g=O(m)+g,m="";else{m=+m;var P=m<0||1/m<0;if(m=isNaN(m)?c:O(Math.abs(m),w),B&&(m=Fn(m)),P&&+m==0&&y!=="+"&&(P=!1),N=(P?y==="("?y:u:y==="-"||y==="("?"":y)+N,g=(d==="s"?Q[8+nn/3]:"")+g+(P&&y==="("?")":""),an){for(x=-1,X=m.length;++xj||j>57){g=(j===46?i+m.slice(x+1):m.slice(x))+g,m=m.slice(0,x);break}}}T&&!k&&(m=t(m,1/0));var z=N.length+m.length+g.length,M=z>1)+N+m+g+M.slice(z);break;default:m=M+N+m+g;break}return f(m)}return V.toString=function(){return h+""},V}function s(h,l){var p=o((h=D(h),h.type="f",h)),y=Math.max(-8,Math.min(8,Math.floor(v(l)/3)))*3,S=Math.pow(10,-y),k=Q[8+y/3];return function(b){return p(S*b)+k}}return{format:o,formatPrefix:s}}var F,tn,rn;Rn({thousands:",",grouping:[3],currency:["$",""]});function Rn(n){return F=En(n),tn=F.format,rn=F.formatPrefix,F}function Dn(n){return Math.max(0,-v(Math.abs(n)))}function Tn(n,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(v(t)/3)))*3-v(Math.abs(n)))}function Cn(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,v(t)-v(n))+1}function In(n){return function(){return n}}function Ln(n){return+n}var W=[0,1];function A(n){return n}function L(n,t){return(t-=n=+n)?function(e){return(e-n)/t}:In(isNaN(t)?NaN:.5)}function qn(n,t){var e;return n>t&&(e=n,n=t,t=e),function(r){return Math.max(n,Math.min(t,r))}}function Gn(n,t,e){var r=n[0],i=n[1],f=t[0],a=t[1];return i2?Bn:Gn,c=o=null,h}function h(l){return l==null||isNaN(l=+l)?f:(c||(c=u(n.map(r),t,e)))(r(a(l)))}return h.invert=function(l){return a(i((o||(o=u(t,n.map(r),C)))(l)))},h.domain=function(l){return arguments.length?(n=Array.from(l,Ln),s()):n.slice()},h.range=function(l){return arguments.length?(t=Array.from(l),s()):t.slice()},h.rangeRound=function(l){return t=Array.from(l),e=Sn,s()},h.clamp=function(l){return arguments.length?(a=l?!0:A,s()):a!==A},h.interpolate=function(l){return arguments.length?(e=l,s()):e},h.unknown=function(l){return arguments.length?(f=l,h):f},function(l,p){return r=l,i=p,s()}}function Xn(){return Vn()(A,A)}function Un(n,t,e,r){var i=wn(n,t,e),f;switch(r=D(r??",f"),r.type){case"s":{var a=Math.max(Math.abs(n),Math.abs(t));return r.precision==null&&!isNaN(f=Tn(i,a))&&(r.precision=f),rn(r,a)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(f=Cn(i,Math.max(Math.abs(n),Math.abs(t))))&&(r.precision=f-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(f=Dn(i))&&(r.precision=f-(r.type==="%")*2);break}}return tn(r)}function Yn(n){var t=n.domain;return n.ticks=function(e){var r=t();return pn(r[0],r[r.length-1],e??10)},n.tickFormat=function(e,r){var i=t();return Un(i[0],i[i.length-1],e??10,r)},n.nice=function(e){e==null&&(e=10);var r=t(),i=0,f=r.length-1,a=r[i],u=r[f],c,o,s=10;for(u0;){if(o=I(a,u,e),o===c)return r[i]=a,r[f]=u,t(r);if(o>0)a=Math.floor(a/o)*o,u=Math.ceil(u/o)*o;else if(o<0)a=Math.ceil(a*o)/o,u=Math.floor(u*o)/o;else break;c=o}return n},n}function Zn(){var n=Xn();return n.copy=function(){return On(n,Zn())},cn.apply(n,arguments),Yn(n)}export{On as a,_ as b,Xn as c,Zn as l,wn as t}; diff --git a/assets/chunks/mindmap-definition-307c710a.B42RSYq2.js b/assets/chunks/mindmap-definition-b08d3ac4.BURIHg2K.js similarity index 99% rename from assets/chunks/mindmap-definition-307c710a.B42RSYq2.js rename to assets/chunks/mindmap-definition-b08d3ac4.BURIHg2K.js index de24a8d7..6d080737 100644 --- a/assets/chunks/mindmap-definition-307c710a.B42RSYq2.js +++ b/assets/chunks/mindmap-definition-b08d3ac4.BURIHg2K.js @@ -1,4 +1,4 @@ -import{b2 as hi,b3 as rl,l as Er,c as ci,aH as al,t as nl,aJ as ja,d as en,h as il,b5 as sl,b6 as ol,b7 as ul,aL as ll}from"../app.CbQoAe_D.js";import{c as fl}from"./createText-ca0c5216.5u9lbHcb.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";function Xe(t){"@babel/helpers - typeof";return Xe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xe(t)}function vi(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function hl(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,a=new Array(e);rt.length)&&(e=t.length);for(var r=0,a=new Array(e);r=t.length?{done:!0}:{done:!1,value:t[a++]}},e:function(u){throw u},f:n}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var i=!0,s=!1,o;return{s:function(){r=r.call(t)},n:function(){var u=r.next();return i=u.done,u},e:function(u){s=!0,o=u},f:function(){try{!i&&r.return!=null&&r.return()}finally{if(s)throw o}}}}var Ye=typeof window>"u"?null:window,Yi=Ye?Ye.navigator:null;Ye&&Ye.document;var gl=Xe(""),so=Xe({}),pl=Xe(function(){}),yl=typeof HTMLElement>"u"?"undefined":Xe(HTMLElement),xa=function(e){return e&&e.instanceString&&Ge(e.instanceString)?e.instanceString():null},de=function(e){return e!=null&&Xe(e)==gl},Ge=function(e){return e!=null&&Xe(e)===pl},Re=function(e){return!pt(e)&&(Array.isArray?Array.isArray(e):e!=null&&e instanceof Array)},Ce=function(e){return e!=null&&Xe(e)===so&&!Re(e)&&e.constructor===Object},ml=function(e){return e!=null&&Xe(e)===so},ie=function(e){return e!=null&&Xe(e)===Xe(1)&&!isNaN(e)},bl=function(e){return ie(e)&&Math.floor(e)===e},tn=function(e){if(yl!=="undefined")return e!=null&&e instanceof HTMLElement},pt=function(e){return Ta(e)||oo(e)},Ta=function(e){return xa(e)==="collection"&&e._private.single},oo=function(e){return xa(e)==="collection"&&!e._private.single},gi=function(e){return xa(e)==="core"},uo=function(e){return xa(e)==="stylesheet"},El=function(e){return xa(e)==="event"},jt=function(e){return e==null?!0:!!(e===""||e.match(/^\s+$/))},wl=function(e){return typeof HTMLElement>"u"?!1:e instanceof HTMLElement},xl=function(e){return Ce(e)&&ie(e.x1)&&ie(e.x2)&&ie(e.y1)&&ie(e.y2)},Tl=function(e){return ml(e)&&Ge(e.then)},Cl=function(){return Yi&&Yi.userAgent.match(/msie|trident|edge/i)},ha=function(e,r){r||(r=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var i=[],s=0;sr?1:0},Il=function(e,r){return-1*fo(e,r)},be=Object.assign!=null?Object.assign.bind(Object):function(t){for(var e=arguments,r=1;r1&&(g-=1),g<1/6?v+(p-v)*6*g:g<1/2?p:g<2/3?v+(p-v)*(2/3-g)*6:v}var h=new RegExp("^"+Ll+"$").exec(e);if(h){if(a=parseInt(h[1]),a<0?a=(360- -1*a%360)%360:a>360&&(a=a%360),a/=360,n=parseFloat(h[2]),n<0||n>100||(n=n/100,i=parseFloat(h[3]),i<0||i>100)||(i=i/100,s=h[4],s!==void 0&&(s=parseFloat(s),s<0||s>1)))return;if(n===0)o=u=l=Math.round(i*255);else{var d=i<.5?i*(1+n):i+n-i*n,c=2*i-d;o=Math.round(255*f(c,d,a+1/3)),u=Math.round(255*f(c,d,a)),l=Math.round(255*f(c,d,a-1/3))}r=[o,u,l,s]}return r},kl=function(e){var r,a=new RegExp("^"+Dl+"$").exec(e);if(a){r=[];for(var n=[],i=1;i<=3;i++){var s=a[i];if(s[s.length-1]==="%"&&(n[i]=!0),s=parseFloat(s),n[i]&&(s=s/100*255),s<0||s>255)return;r.push(Math.floor(s))}var o=n[1]||n[2]||n[3],u=n[1]&&n[2]&&n[3];if(o&&!u)return;var l=a[4];if(l!==void 0){if(l=parseFloat(l),l<0||l>1)return;r.push(l)}}return r},Pl=function(e){return Fl[e.toLowerCase()]},Bl=function(e){return(Re(e)?e:null)||Pl(e)||Ml(e)||kl(e)||Rl(e)},Fl={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ho=function(e){for(var r=e.map,a=e.keys,n=a.length,i=0;i=e||E<0||h&&w>=i}function y(){var S=Rn();if(g(S))return b(S);o=setTimeout(y,p(S))}function b(S){return o=void 0,d&&a?c(S):(a=n=void 0,s)}function m(){o!==void 0&&clearTimeout(o),l=0,a=u=n=o=void 0}function T(){return o===void 0?s:b(Rn())}function C(){var S=Rn(),E=g(S);if(a=arguments,n=this,u=S,E){if(o===void 0)return v(u);if(h)return clearTimeout(o),o=setTimeout(y,e),c(u)}return o===void 0&&(o=setTimeout(y,e)),s}return C.cancel=m,C.flush=T,C}var gn=xf,kn=Ye?Ye.performance:null,po=kn&&kn.now?function(){return kn.now()}:function(){return Date.now()},Tf=function(){if(Ye){if(Ye.requestAnimationFrame)return function(t){Ye.requestAnimationFrame(t)};if(Ye.mozRequestAnimationFrame)return function(t){Ye.mozRequestAnimationFrame(t)};if(Ye.webkitRequestAnimationFrame)return function(t){Ye.webkitRequestAnimationFrame(t)};if(Ye.msRequestAnimationFrame)return function(t){Ye.msRequestAnimationFrame(t)}}return function(t){t&&setTimeout(function(){t(po())},1e3/60)}}(),rn=function(e){return Tf(e)},$t=po,Nr=9261,yo=65599,ia=5381,mo=function(e){for(var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Nr,a=r,n;n=e.next(),!n.done;)a=a*yo+n.value|0;return a},ca=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Nr;return r*yo+e|0},va=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ia;return(r<<5)+r+e|0},Cf=function(e,r){return e*2097152+r},qt=function(e){return e[0]*2097152+e[1]},Ma=function(e,r){return[ca(e[0],r[0]),va(e[1],r[1])]},Df=function(e,r){var a={value:0,done:!1},n=0,i=e.length,s={next:function(){return n=0;n--)e[n]===r&&e.splice(n,1)},bi=function(e){e.splice(0,e.length)},Mf=function(e,r){for(var a=0;a"u"?"undefined":Xe(Set))!==kf?Set:Pf,pn=function(e,r){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(e===void 0||r===void 0||!gi(e)){ze("An element must have a core reference and parameters set");return}var n=r.group;if(n==null&&(r.data&&r.data.source!=null&&r.data.target!=null?n="edges":n="nodes"),n!=="nodes"&&n!=="edges"){ze("An element must be of type `nodes` or `edges`; you specified `"+n+"`");return}this.length=1,this[0]=this;var i=this._private={cy:e,single:!0,data:r.data||{},position:r.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:n,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!r.selected,selectable:r.selectable===void 0?!0:!!r.selectable,locked:!!r.locked,grabbed:!1,grabbable:r.grabbable===void 0?!0:!!r.grabbable,pannable:r.pannable===void 0?n==="edges":!!r.pannable,active:!1,classes:new Ur,animation:{current:[],queue:[]},rscratch:{},scratch:r.scratch||{},edges:[],children:[],parent:r.parent&&r.parent.isNode()?r.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(i.position.x==null&&(i.position.x=0),i.position.y==null&&(i.position.y=0),r.renderedPosition){var s=r.renderedPosition,o=e.pan(),u=e.zoom();i.position={x:(s.x-o.x)/u,y:(s.y-o.y)/u}}var l=[];Re(r.classes)?l=r.classes:de(r.classes)&&(l=r.classes.split(/\s+/));for(var f=0,h=l.length;fb?1:0},f=function(y,b,m,T,C){var S;if(m==null&&(m=0),C==null&&(C=a),m<0)throw new Error("lo must be non-negative");for(T==null&&(T=y.length);mD;0<=D?x++:x--)w.push(x);return w}).apply(this).reverse(),E=[],T=0,C=S.length;TL;0<=L?++w:--w)A.push(s(y,m));return A},p=function(y,b,m,T){var C,S,E;for(T==null&&(T=a),C=y[m];m>b;){if(E=m-1>>1,S=y[E],T(C,S)<0){y[m]=S,m=E;continue}break}return y[m]=C},g=function(y,b,m){var T,C,S,E,w;for(m==null&&(m=a),C=y.length,w=b,S=y[b],T=2*b+1;T0;){var S=b.pop(),E=g(S),w=S.id();if(d[w]=E,E!==1/0)for(var x=S.neighborhood().intersect(v),D=0;D0)for(P.unshift(k);h[z];){var G=h[z];P.unshift(G.edge),P.unshift(G.node),B=G.node,z=B.id()}return o.spawn(P)}}}},zf={kruskal:function(e){e=e||function(m){return 1};for(var r=this.byGroup(),a=r.nodes,n=r.edges,i=a.length,s=new Array(i),o=a,u=function(T){for(var C=0;C0;){if(C(),E++,T===f){for(var w=[],x=i,D=f,L=y[D];w.unshift(x),L!=null&&w.unshift(L),x=g[D],x!=null;)D=x.id(),L=y[D];return{found:!0,distance:h[T],path:this.spawn(w),steps:E}}c[T]=!0;for(var A=m._private.edges,N=0;NL&&(v[D]=L,b[D]=x,m[D]=C),!i){var A=x*f+w;!i&&v[A]>L&&(v[A]=L,b[A]=w,m[A]=C)}}}for(var N=0;N1&&arguments[1]!==void 0?arguments[1]:s,Ae=m(fe),xe=[],we=Ae;;){if(we==null)return r.spawn();var De=b(we),ee=De.edge,I=De.pred;if(xe.unshift(we[0]),we.same(pe)&&xe.length>0)break;ee!=null&&xe.unshift(ee),we=I}return u.spawn(xe)},S=0;S=0;f--){var h=l[f],d=h[1],c=h[2];(r[d]===o&&r[c]===u||r[d]===u&&r[c]===o)&&l.splice(f,1)}for(var v=0;vn;){var i=Math.floor(Math.random()*r.length);r=qf(i,e,r),a--}return r},Wf={kargerStein:function(){var e=this,r=this.byGroup(),a=r.nodes,n=r.edges;n.unmergeBy(function(P){return P.isLoop()});var i=a.length,s=n.length,o=Math.ceil(Math.pow(Math.log(i)/Math.LN2,2)),u=Math.floor(i/Xf);if(i<2){ze("At least 2 nodes are required for Karger-Stein algorithm");return}for(var l=[],f=0;f1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=1/0,i=r;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=-1/0,i=r;i1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=0,i=0,s=r;s1&&arguments[1]!==void 0?arguments[1]:0,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e.length,n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:!0;n?e=e.slice(r,a):(a0&&e.splice(0,r));for(var o=0,u=e.length-1;u>=0;u--){var l=e[u];s?isFinite(l)||(e[u]=-1/0,o++):e.splice(u,1)}i&&e.sort(function(d,c){return d-c});var f=e.length,h=Math.floor(f/2);return f%2!==0?e[h+1+o]:(e[h-1+o]+e[h+o])/2},eh=function(e){return Math.PI*e/180},Ra=function(e,r){return Math.atan2(r,e)-Math.PI/2},Ei=Math.log2||function(t){return Math.log(t)/Math.log(2)},Do=function(e){return e>0?1:e<0?-1:0},gr=function(e,r){return Math.sqrt(ur(e,r))},ur=function(e,r){var a=r.x-e.x,n=r.y-e.y;return a*a+n*n},th=function(e){for(var r=e.length,a=0,n=0;n=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(e.w!=null&&e.h!=null&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},ah=function(e){return{x1:e.x1,x2:e.x2,w:e.w,y1:e.y1,y2:e.y2,h:e.h}},nh=function(e){e.x1=1/0,e.y1=1/0,e.x2=-1/0,e.y2=-1/0,e.w=0,e.h=0},ih=function(e,r,a){return{x1:e.x1+r,x2:e.x2+r,y1:e.y1+a,y2:e.y2+a,w:e.w,h:e.h}},So=function(e,r){e.x1=Math.min(e.x1,r.x1),e.x2=Math.max(e.x2,r.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,r.y1),e.y2=Math.max(e.y2,r.y2),e.h=e.y2-e.y1},sh=function(e,r,a){e.x1=Math.min(e.x1,r),e.x2=Math.max(e.x2,r),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,a),e.y2=Math.max(e.y2,a),e.h=e.y2-e.y1},_a=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.x1-=r,e.x2+=r,e.y1-=r,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Ha=function(e){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0],a,n,i,s;if(r.length===1)a=n=i=s=r[0];else if(r.length===2)a=i=r[0],s=n=r[1];else if(r.length===4){var o=St(r,4);a=o[0],n=o[1],i=o[2],s=o[3]}return e.x1-=s,e.x2+=n,e.y1-=a,e.y2+=i,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},Qi=function(e,r){e.x1=r.x1,e.y1=r.y1,e.x2=r.x2,e.y2=r.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},wi=function(e,r){return!(e.x1>r.x2||r.x1>e.x2||e.x2r.y2||r.y1>e.y2)},Gr=function(e,r,a){return e.x1<=r&&r<=e.x2&&e.y1<=a&&a<=e.y2},oh=function(e,r){return Gr(e,r.x,r.y)},Lo=function(e,r){return Gr(e,r.x1,r.y1)&&Gr(e,r.x2,r.y2)},Ao=function(e,r,a,n,i,s,o){var u=arguments.length>7&&arguments[7]!==void 0?arguments[7]:"auto",l=u==="auto"?pr(i,s):u,f=i/2,h=s/2;l=Math.min(l,f,h);var d=l!==f,c=l!==h,v;if(d){var p=a-f+l-o,g=n-h-o,y=a+f-l+o,b=g;if(v=Zt(e,r,a,n,p,g,y,b,!1),v.length>0)return v}if(c){var m=a+f+o,T=n-h+l-o,C=m,S=n+h-l+o;if(v=Zt(e,r,a,n,m,T,C,S,!1),v.length>0)return v}if(d){var E=a-f+l-o,w=n+h+o,x=a+f-l+o,D=w;if(v=Zt(e,r,a,n,E,w,x,D,!1),v.length>0)return v}if(c){var L=a-f-o,A=n-h+l-o,N=L,O=n+h-l+o;if(v=Zt(e,r,a,n,L,A,N,O,!1),v.length>0)return v}var M;{var R=a-f+l,k=n-h+l;if(M=sa(e,r,a,n,R,k,l+o),M.length>0&&M[0]<=R&&M[1]<=k)return[M[0],M[1]]}{var P=a+f-l,B=n-h+l;if(M=sa(e,r,a,n,P,B,l+o),M.length>0&&M[0]>=P&&M[1]<=B)return[M[0],M[1]]}{var z=a+f-l,G=n+h-l;if(M=sa(e,r,a,n,z,G,l+o),M.length>0&&M[0]>=z&&M[1]>=G)return[M[0],M[1]]}{var F=a-f+l,U=n+h-l;if(M=sa(e,r,a,n,F,U,l+o),M.length>0&&M[0]<=F&&M[1]>=U)return[M[0],M[1]]}return[]},uh=function(e,r,a,n,i,s,o){var u=o,l=Math.min(a,i),f=Math.max(a,i),h=Math.min(n,s),d=Math.max(n,s);return l-u<=e&&e<=f+u&&h-u<=r&&r<=d+u},lh=function(e,r,a,n,i,s,o,u,l){var f={x1:Math.min(a,o,i)-l,x2:Math.max(a,o,i)+l,y1:Math.min(n,u,s)-l,y2:Math.max(n,u,s)+l};return!(ef.x2||rf.y2)},fh=function(e,r,a,n){a-=n;var i=r*r-4*e*a;if(i<0)return[];var s=Math.sqrt(i),o=2*e,u=(-r+s)/o,l=(-r-s)/o;return[u,l]},hh=function(e,r,a,n,i){var s=1e-5;e===0&&(e=s),r/=e,a/=e,n/=e;var o,u,l,f,h,d,c,v;if(u=(3*a-r*r)/9,l=-(27*n)+r*(9*a-2*(r*r)),l/=54,o=u*u*u+l*l,i[1]=0,c=r/3,o>0){h=l+Math.sqrt(o),h=h<0?-Math.pow(-h,1/3):Math.pow(h,1/3),d=l-Math.sqrt(o),d=d<0?-Math.pow(-d,1/3):Math.pow(d,1/3),i[0]=-c+h+d,c+=(h+d)/2,i[4]=i[2]=-c,c=Math.sqrt(3)*(-d+h)/2,i[3]=c,i[5]=-c;return}if(i[5]=i[3]=0,o===0){v=l<0?-Math.pow(-l,1/3):Math.pow(l,1/3),i[0]=-c+2*v,i[4]=i[2]=-(v+c);return}u=-u,f=u*u*u,f=Math.acos(l/Math.sqrt(f)),v=2*Math.sqrt(u),i[0]=-c+v*Math.cos(f/3),i[2]=-c+v*Math.cos((f+2*Math.PI)/3),i[4]=-c+v*Math.cos((f+4*Math.PI)/3)},ch=function(e,r,a,n,i,s,o,u){var l=1*a*a-4*a*i+2*a*o+4*i*i-4*i*o+o*o+n*n-4*n*s+2*n*u+4*s*s-4*s*u+u*u,f=1*9*a*i-3*a*a-3*a*o-6*i*i+3*i*o+9*n*s-3*n*n-3*n*u-6*s*s+3*s*u,h=1*3*a*a-6*a*i+a*o-a*e+2*i*i+2*i*e-o*e+3*n*n-6*n*s+n*u-n*r+2*s*s+2*s*r-u*r,d=1*a*i-a*a+a*e-i*e+n*s-n*n+n*r-s*r,c=[];hh(l,f,h,d,c);for(var v=1e-7,p=[],g=0;g<6;g+=2)Math.abs(c[g+1])=0&&c[g]<=1&&p.push(c[g]);p.push(1),p.push(0);for(var y=-1,b,m,T,C=0;C=0?Tl?(e-i)*(e-i)+(r-s)*(r-s):f-d},dt=function(e,r,a){for(var n,i,s,o,u,l=0,f=0;f=e&&e>=s||n<=e&&e<=s)u=(e-n)/(s-n)*(o-i)+i,u>r&&l++;else continue;return l%2!==0},Yt=function(e,r,a,n,i,s,o,u,l){var f=new Array(a.length),h;u[0]!=null?(h=Math.atan(u[1]/u[0]),u[0]<0?h=h+Math.PI/2:h=-h-Math.PI/2):h=u;for(var d=Math.cos(-h),c=Math.sin(-h),v=0;v0){var g=sn(f,-l);p=nn(g)}else p=f;return dt(e,r,p)},dh=function(e,r,a,n,i,s,o,u){for(var l=new Array(a.length*2),f=0;f=0&&g<=1&&b.push(g),y>=0&&y<=1&&b.push(y),b.length===0)return[];var m=b[0]*u[0]+e,T=b[0]*u[1]+r;if(b.length>1){if(b[0]==b[1])return[m,T];var C=b[1]*u[0]+e,S=b[1]*u[1]+r;return[m,T,C,S]}else return[m,T]},Bn=function(e,r,a){return r<=e&&e<=a||a<=e&&e<=r?e:e<=r&&r<=a||a<=r&&r<=e?r:a},Zt=function(e,r,a,n,i,s,o,u,l){var f=e-i,h=a-e,d=o-i,c=r-s,v=n-r,p=u-s,g=d*c-p*f,y=h*c-v*f,b=p*h-d*v;if(b!==0){var m=g/b,T=y/b,C=.001,S=0-C,E=1+C;return S<=m&&m<=E&&S<=T&&T<=E?[e+m*h,r+m*v]:l?[e+m*h,r+m*v]:[]}else return g===0||y===0?Bn(e,a,o)===o?[o,u]:Bn(e,a,i)===i?[i,s]:Bn(i,o,a)===a?[a,n]:[]:[]},pa=function(e,r,a,n,i,s,o,u){var l=[],f,h=new Array(a.length),d=!0;s==null&&(d=!1);var c;if(d){for(var v=0;v0){var p=sn(h,-u);c=nn(p)}else c=h}else c=a;for(var g,y,b,m,T=0;T2){for(var v=[f[0],f[1]],p=Math.pow(v[0]-e,2)+Math.pow(v[1]-r,2),g=1;gf&&(f=T)},get:function(m){return l[m]}},d=0;d0?R=M.edgesTo(O)[0]:R=O.edgesTo(M)[0];var k=n(R);O=O.id(),w[O]>w[A]+k&&(w[O]=w[A]+k,x.nodes.indexOf(O)<0?x.push(O):x.updateItem(O),E[O]=0,S[O]=[]),w[O]==w[A]+k&&(E[O]=E[O]+E[A],S[O].push(A))}else for(var P=0;P0;){for(var F=C.pop(),U=0;U0&&o.push(a[u]);o.length!==0&&i.push(n.collection(o))}return i},Nh=function(e,r){for(var a=0;a5&&arguments[5]!==void 0?arguments[5]:Rh,o=n,u,l,f=0;f=2?ea(e,r,a,0,rs,kh):ea(e,r,a,0,ts)},squaredEuclidean:function(e,r,a){return ea(e,r,a,0,rs)},manhattan:function(e,r,a){return ea(e,r,a,0,ts)},max:function(e,r,a){return ea(e,r,a,-1/0,Ph)}};zr["squared-euclidean"]=zr.squaredEuclidean;zr.squaredeuclidean=zr.squaredEuclidean;function mn(t,e,r,a,n,i){var s;return Ge(t)?s=t:s=zr[t]||zr.euclidean,e===0&&Ge(t)?s(n,i):s(e,r,a,n,i)}var Bh=tt({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),Ti=function(e){return Bh(e)},on=function(e,r,a,n,i){var s=i!=="kMedoids",o=s?function(h){return a[h]}:function(h){return n[h](a)},u=function(d){return n[d](r)},l=a,f=r;return mn(e,n.length,o,u,l,f)},Fn=function(e,r,a){for(var n=a.length,i=new Array(n),s=new Array(n),o=new Array(r),u=null,l=0;la)return!1}return!0},zh=function(e,r,a){for(var n=0;no&&(o=r[l][f],u=f);i[u].push(e[l])}for(var h=0;h=i.threshold||i.mode==="dendrogram"&&e.length===1)return!1;var v=r[s],p=r[n[s]],g;i.mode==="dendrogram"?g={left:v,right:p,key:v.key}:g={value:v.value.concat(p.value),key:v.key},e[v.index]=g,e.splice(p.index,1),r[v.key]=g;for(var y=0;ya[p.key][b.key]&&(u=a[p.key][b.key])):i.linkage==="max"?(u=a[v.key][b.key],a[v.key][b.key]0&&n.push(i);return n},us=function(e,r,a){for(var n=[],i=0;io&&(s=l,o=r[i*e+l])}s>0&&n.push(s)}for(var f=0;fl&&(u=f,l=h)}a[i]=s[u]}return n=us(e,r,a),n},ls=function(e){for(var r=this.cy(),a=this.nodes(),n=jh(e),i={},s=0;s=L?(A=L,L=O,N=M):O>A&&(A=O);for(var R=0;R0?1:0;E[x%n.minIterations*o+F]=U,G+=U}if(G>0&&(x>=n.minIterations-1||x==n.maxIterations-1)){for(var Y=0,W=0;W1||S>1)&&(o=!0),h[m]=[],b.outgoers().forEach(function(w){w.isEdge()&&h[m].push(w.id())})}else d[m]=[void 0,b.target().id()]}):s.forEach(function(b){var m=b.id();if(b.isNode()){var T=b.degree(!0);T%2&&(u?l?o=!0:l=m:u=m),h[m]=[],b.connectedEdges().forEach(function(C){return h[m].push(C.id())})}else d[m]=[b.source().id(),b.target().id()]});var c={found:!1,trail:void 0};if(o)return c;if(l&&u)if(i){if(f&&l!=f)return c;f=l}else{if(f&&l!=f&&u!=f)return c;f||(f=l)}else f||(f=s[0].id());var v=function(m){for(var T=m,C=[m],S,E,w;h[T].length;)S=h[T].shift(),E=d[S][0],w=d[S][1],T!=w?(h[w]=h[w].filter(function(x){return x!=S}),T=w):!i&&T!=E&&(h[E]=h[E].filter(function(x){return x!=S}),T=E),C.unshift(S),C.unshift(T);return C},p=[],g=[];for(g=v(f);g.length!=1;)h[g[0]].length==0?(p.unshift(s.getElementById(g.shift())),p.unshift(s.getElementById(g.shift()))):g=v(g.shift()).concat(g);p.unshift(s.getElementById(g.shift()));for(var y in h)if(h[y].length)return c;return c.found=!0,c.trail=this.spawn(p,!0),c}},Ba=function(){var e=this,r={},a=0,n=0,i=[],s=[],o={},u=function(d,c){for(var v=s.length-1,p=[],g=e.spawn();s[v].x!=d||s[v].y!=c;)p.push(s.pop().edge),v--;p.push(s.pop().edge),p.forEach(function(y){var b=y.connectedNodes().intersection(e);g.merge(y),b.forEach(function(m){var T=m.id(),C=m.connectedEdges().intersection(e);g.merge(m),r[T].cutVertex?g.merge(C.filter(function(S){return S.isLoop()})):g.merge(C)})}),i.push(g)},l=function h(d,c,v){d===v&&(n+=1),r[c]={id:a,low:a++,cutVertex:!1};var p=e.getElementById(c).connectedEdges().intersection(e);if(p.size()===0)i.push(e.spawn(e.getElementById(c)));else{var g,y,b,m;p.forEach(function(T){g=T.source().id(),y=T.target().id(),b=g===c?y:g,b!==v&&(m=T.id(),o[m]||(o[m]=!0,s.push({x:c,y:b,edge:T})),b in r?r[c].low=Math.min(r[c].low,r[b].id):(h(d,b,c),r[c].low=Math.min(r[c].low,r[b].low),r[c].id<=r[b].low&&(r[c].cutVertex=!0,u(c,b))))})}};e.forEach(function(h){if(h.isNode()){var d=h.id();d in r||(n=0,l(d,d),r[d].cutVertex=n>1)}});var f=Object.keys(r).filter(function(h){return r[h].cutVertex}).map(function(h){return e.getElementById(h)});return{cut:e.spawn(f),components:i}},oc={hopcroftTarjanBiconnected:Ba,htbc:Ba,htb:Ba,hopcroftTarjanBiconnectedComponents:Ba},Fa=function(){var e=this,r={},a=0,n=[],i=[],s=e.spawn(e),o=function u(l){i.push(l),r[l]={index:a,low:a++,explored:!1};var f=e.getElementById(l).connectedEdges().intersection(e);if(f.forEach(function(p){var g=p.target().id();g!==l&&(g in r||u(g),r[g].explored||(r[l].low=Math.min(r[l].low,r[g].low)))}),r[l].index===r[l].low){for(var h=e.spawn();;){var d=i.pop();if(h.merge(e.getElementById(d)),r[d].low=r[l].index,r[d].explored=!0,d===l)break}var c=h.edgesWith(h),v=h.merge(c);n.push(v),s=s.difference(v)}};return e.forEach(function(u){if(u.isNode()){var l=u.id();l in r||o(l)}}),{cut:s,components:n}},uc={tarjanStronglyConnected:Fa,tsc:Fa,tscc:Fa,tarjanStronglyConnectedComponents:Fa},Po={};[da,Gf,zf,Uf,Yf,Hf,Wf,bh,kr,Pr,Zn,Mh,Hh,Qh,nc,sc,oc,uc].forEach(function(t){be(Po,t)});/*! Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable diff --git a/assets/chunks/pieDiagram-bb1d19e5.CcIweH9R.js b/assets/chunks/pieDiagram-31d824a1.BcWock7l.js similarity index 89% rename from assets/chunks/pieDiagram-bb1d19e5.CcIweH9R.js rename to assets/chunks/pieDiagram-31d824a1.BcWock7l.js index 32dc54da..c84e335d 100644 --- a/assets/chunks/pieDiagram-bb1d19e5.CcIweH9R.js +++ b/assets/chunks/pieDiagram-31d824a1.BcWock7l.js @@ -1,9 +1,9 @@ -import{aI as Z,aJ as at,E as lt,F as ot,s as ct,g as ht,b as ut,a as yt,G as ft,d as pt,c as et,l as it,aK as gt,aH as dt,aL as mt,i as _t}from"../app.CbQoAe_D.js";import{a as tt}from"./arc.EE6MX9ab.js";import{o as xt}from"./ordinal.BYWQX77i.js";import{a as kt}from"./array.BKyUJesY.js";import{c as F}from"./path.CbwjOpE9.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./init.Gi6I4Gst.js";function vt(e,u){return ue?1:u>=e?0:NaN}function bt(e){return e}function St(){var e=bt,u=vt,$=null,p=F(0),g=F(Z),E=F(0);function y(a){var l,d=(a=kt(a)).length,m,I,T=0,_=new Array(d),v=new Array(d),c=+p.apply(this,arguments),A=Math.min(Z,Math.max(-Z,g.apply(this,arguments)-c)),O,w=Math.min(Math.abs(A)/d,E.apply(this,arguments)),b=w*(A<0?-1:1),t;for(l=0;l0&&(T+=t);for(u!=null?_.sort(function(i,n){return u(v[i],v[n])}):$!=null&&_.sort(function(i,n){return $(a[i],a[n])}),l=0,I=T?(A-d*b)/T:0;l0?t*I:0)+b,v[m]={data:a[m],index:l,value:t,startAngle:c,endAngle:O,padAngle:w};return v}return y.value=function(a){return arguments.length?(e=typeof a=="function"?a:F(+a),y):e},y.sortValues=function(a){return arguments.length?(u=a,$=null,y):u},y.sort=function(a){return arguments.length?($=a,u=null,y):$},y.startAngle=function(a){return arguments.length?(p=typeof a=="function"?a:F(+a),y):p},y.endAngle=function(a){return arguments.length?(g=typeof a=="function"?a:F(+a),y):g},y.padAngle=function(a){return arguments.length?(E=typeof a=="function"?a:F(+a),y):E},y}var q=function(){var e=function(b,t,i,n){for(i=i||{},n=b.length;n--;i[b[n]]=t);return i},u=[1,3],$=[1,4],p=[1,5],g=[1,6],E=[1,10,12,14,16,18,19,20,21,22],y=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],l=[20,21,22],d=[2,7],m=[1,12],I=[1,13],T=[1,14],_=[1,15],v=[1,16],c=[1,17],A={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,i,n,r,o,s,P){var x=s.length-1;switch(o){case 3:r.setShowData(!0);break;case 6:this.$=s[x-1];break;case 8:r.addSection(s[x-1],r.cleanupValue(s[x]));break;case 9:this.$=s[x].trim(),r.setDiagramTitle(this.$);break;case 10:this.$=s[x].trim(),r.setAccTitle(this.$);break;case 11:case 12:this.$=s[x].trim(),r.setAccDescription(this.$);break;case 13:r.addSection(s[x].substr(8)),this.$=s[x].substr(8);break}},table:[{3:1,4:2,5:u,20:$,21:p,22:g},{1:[3]},{3:7,4:2,5:u,20:$,21:p,22:g},e(E,y,{6:8,7:[1,9]}),e(a,[2,14]),e(a,[2,15]),e(a,[2,16]),{1:[2,1]},e(l,d,{8:10,9:11,1:[2,2],10:m,12:I,14:T,16:_,18:v,19:c}),e(E,y,{6:18}),e(E,[2,5]),{4:19,20:$,21:p,22:g},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},e(l,[2,12]),e(l,[2,13]),e(l,d,{8:10,9:11,1:[2,3],10:m,12:I,14:T,16:_,18:v,19:c}),e(E,[2,6]),e(l,[2,8]),e(l,[2,9]),e(l,[2,10]),e(l,[2,11])],defaultActions:{7:[2,1]},parseError:function(t,i){if(i.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=i,n}},parse:function(t){var i=this,n=[0],r=[],o=[null],s=[],P=this.table,x="",f=0,V=0,R=2,M=1,B=s.slice.call(arguments,1),h=Object.create(this.lexer),L={yy:{}};for(var Y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Y)&&(L.yy[Y]=this.yy[Y]);h.setInput(t,L.yy),L.yy.lexer=h,L.yy.parser=this,typeof h.yylloc>"u"&&(h.yylloc={});var H=h.yylloc;s.push(H);var st=h.options&&h.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function rt(){var C;return C=r.pop()||h.lex()||M,typeof C!="number"&&(C instanceof Array&&(r=C,C=r.pop()),C=i.symbols_[C]||C),C}for(var k,N,S,J,z={},j,D,X,W;;){if(N=n[n.length-1],this.defaultActions[N]?S=this.defaultActions[N]:((k===null||typeof k>"u")&&(k=rt()),S=P[N]&&P[N][k]),typeof S>"u"||!S.length||!S[0]){var K="";W=[];for(j in P[N])this.terminals_[j]&&j>R&&W.push("'"+this.terminals_[j]+"'");h.showPosition?K="Parse error on line "+(f+1)+`: +import{aI as Z,aJ as at,x as lt,y as ot,s as ct,g as ht,b as ut,a as yt,A as ft,d as pt,c as et,l as it,aK as gt,aH as dt,aL as mt,i as _t}from"../app.DRN3unl1.js";import{a as tt}from"./arc.CbQZFRTr.js";import{o as xt}from"./ordinal.BYWQX77i.js";import{a as kt}from"./array.BKyUJesY.js";import{c as F}from"./path.CbwjOpE9.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./init.Gi6I4Gst.js";function vt(e,u){return ue?1:u>=e?0:NaN}function bt(e){return e}function St(){var e=bt,u=vt,$=null,p=F(0),g=F(Z),A=F(0);function y(a){var l,d=(a=kt(a)).length,m,I,T=0,_=new Array(d),v=new Array(d),c=+p.apply(this,arguments),E=Math.min(Z,Math.max(-Z,g.apply(this,arguments)-c)),O,w=Math.min(Math.abs(E)/d,A.apply(this,arguments)),b=w*(E<0?-1:1),t;for(l=0;l0&&(T+=t);for(u!=null?_.sort(function(i,n){return u(v[i],v[n])}):$!=null&&_.sort(function(i,n){return $(a[i],a[n])}),l=0,I=T?(E-d*b)/T:0;l0?t*I:0)+b,v[m]={data:a[m],index:l,value:t,startAngle:c,endAngle:O,padAngle:w};return v}return y.value=function(a){return arguments.length?(e=typeof a=="function"?a:F(+a),y):e},y.sortValues=function(a){return arguments.length?(u=a,$=null,y):u},y.sort=function(a){return arguments.length?($=a,u=null,y):$},y.startAngle=function(a){return arguments.length?(p=typeof a=="function"?a:F(+a),y):p},y.endAngle=function(a){return arguments.length?(g=typeof a=="function"?a:F(+a),y):g},y.padAngle=function(a){return arguments.length?(A=typeof a=="function"?a:F(+a),y):A},y}var q=function(){var e=function(b,t,i,n){for(i=i||{},n=b.length;n--;i[b[n]]=t);return i},u=[1,3],$=[1,4],p=[1,5],g=[1,6],A=[1,10,12,14,16,18,19,20,21,22],y=[2,4],a=[1,5,10,12,14,16,18,19,20,21,22],l=[20,21,22],d=[2,7],m=[1,12],I=[1,13],T=[1,14],_=[1,15],v=[1,16],c=[1,17],E={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,PIE:5,document:6,showData:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,section:19,NEWLINE:20,";":21,EOF:22,$accept:0,$end:1},terminals_:{2:"error",5:"PIE",7:"showData",10:"txt",11:"value",12:"title",13:"title_value",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"section",20:"NEWLINE",21:";",22:"EOF"},productions_:[0,[3,2],[3,2],[3,3],[6,0],[6,2],[8,2],[9,0],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[4,1],[4,1],[4,1]],performAction:function(t,i,n,r,o,s,P){var x=s.length-1;switch(o){case 3:r.setShowData(!0);break;case 6:this.$=s[x-1];break;case 8:r.addSection(s[x-1],r.cleanupValue(s[x]));break;case 9:this.$=s[x].trim(),r.setDiagramTitle(this.$);break;case 10:this.$=s[x].trim(),r.setAccTitle(this.$);break;case 11:case 12:this.$=s[x].trim(),r.setAccDescription(this.$);break;case 13:r.addSection(s[x].substr(8)),this.$=s[x].substr(8);break}},table:[{3:1,4:2,5:u,20:$,21:p,22:g},{1:[3]},{3:7,4:2,5:u,20:$,21:p,22:g},e(A,y,{6:8,7:[1,9]}),e(a,[2,14]),e(a,[2,15]),e(a,[2,16]),{1:[2,1]},e(l,d,{8:10,9:11,1:[2,2],10:m,12:I,14:T,16:_,18:v,19:c}),e(A,y,{6:18}),e(A,[2,5]),{4:19,20:$,21:p,22:g},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},e(l,[2,12]),e(l,[2,13]),e(l,d,{8:10,9:11,1:[2,3],10:m,12:I,14:T,16:_,18:v,19:c}),e(A,[2,6]),e(l,[2,8]),e(l,[2,9]),e(l,[2,10]),e(l,[2,11])],defaultActions:{7:[2,1]},parseError:function(t,i){if(i.recoverable)this.trace(t);else{var n=new Error(t);throw n.hash=i,n}},parse:function(t){var i=this,n=[0],r=[],o=[null],s=[],P=this.table,x="",f=0,V=0,R=2,M=1,B=s.slice.call(arguments,1),h=Object.create(this.lexer),L={yy:{}};for(var Y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Y)&&(L.yy[Y]=this.yy[Y]);h.setInput(t,L.yy),L.yy.lexer=h,L.yy.parser=this,typeof h.yylloc>"u"&&(h.yylloc={});var H=h.yylloc;s.push(H);var st=h.options&&h.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function rt(){var C;return C=r.pop()||h.lex()||M,typeof C!="number"&&(C instanceof Array&&(r=C,C=r.pop()),C=i.symbols_[C]||C),C}for(var k,N,S,J,z={},j,D,X,W;;){if(N=n[n.length-1],this.defaultActions[N]?S=this.defaultActions[N]:((k===null||typeof k>"u")&&(k=rt()),S=P[N]&&P[N][k]),typeof S>"u"||!S.length||!S[0]){var K="";W=[];for(j in P[N])this.terminals_[j]&&j>R&&W.push("'"+this.terminals_[j]+"'");h.showPosition?K="Parse error on line "+(f+1)+`: `+h.showPosition()+` Expecting `+W.join(", ")+", got '"+(this.terminals_[k]||k)+"'":K="Parse error on line "+(f+1)+": Unexpected "+(k==M?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(K,{text:h.match,token:this.terminals_[k]||k,line:h.yylineno,loc:H,expected:W})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+N+", token: "+k);switch(S[0]){case 1:n.push(k),o.push(h.yytext),s.push(h.yylloc),n.push(S[1]),k=null,V=h.yyleng,x=h.yytext,f=h.yylineno,H=h.yylloc;break;case 2:if(D=this.productions_[S[1]][1],z.$=o[o.length-D],z._$={first_line:s[s.length-(D||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(D||1)].first_column,last_column:s[s.length-1].last_column},st&&(z._$.range=[s[s.length-(D||1)].range[0],s[s.length-1].range[1]]),J=this.performAction.apply(z,[x,V,f,L.yy,S[1],o,s].concat(B)),typeof J<"u")return J;D&&(n=n.slice(0,-1*D*2),o=o.slice(0,-1*D),s=s.slice(0,-1*D)),n.push(this.productions_[S[1]][0]),o.push(z.$),s.push(z._$),X=P[n[n.length-2]][n[n.length-1]],n.push(X);break;case 3:return!0}}return!0}},O=function(){var b={EOF:1,parseError:function(i,n){if(this.yy.parser)this.yy.parser.parseError(i,n);else throw new Error(i)},setInput:function(t,i){return this.yy=i||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t;var i=t.match(/(?:\r\n?|\n).*/g);return i?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var i=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),i=new Array(t.length+1).join("-");return t+this.upcomingInput()+` `+i+"^"},test_match:function(t,i){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),r=t[0].match(/(?:\r\n?|\n).*/g),r&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,i,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in o)this[s]=o[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,i,n,r;this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),s=0;si[0].length)){if(i=n,r=s,this.options.backtrack_lexer){if(t=this.test_match(n,o[s]),t!==!1)return t;if(this._backtrack){i=!1;continue}else return!1}else if(!this.options.flex)break}return i?(t=this.test_match(i,o[r]),t!==!1?t:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var i=this.next();return i||this.lex()},begin:function(i){this.conditionStack.push(i)},popState:function(){var i=this.conditionStack.length-1;return i>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(i){return i=this.conditionStack.length-1-Math.abs(i||0),i>=0?this.conditionStack[i]:"INITIAL"},pushState:function(i){this.begin(i)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(i,n,r,o){switch(r){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return b}();A.lexer=O;function w(){this.yy={}}return w.prototype=A,A.Parser=w,new w}();q.parser=q;const $t=q,nt=at.pie,G={sections:{},showData:!1,config:nt};let U=G.sections,Q=G.showData;const Et=structuredClone(nt),At=()=>structuredClone(Et),wt=()=>{U=structuredClone(G.sections),Q=G.showData,ft()},Tt=(e,u)=>{e=pt(e,et()),U[e]===void 0&&(U[e]=u,it.debug(`added new section: ${e}, with value: ${u}`))},It=()=>U,Dt=e=>(e.substring(0,1)===":"&&(e=e.substring(1).trim()),Number(e.trim())),Ct=e=>{Q=e},Ot=()=>Q,Pt={getConfig:At,clear:wt,setDiagramTitle:lt,getDiagramTitle:ot,setAccTitle:ct,getAccTitle:ht,setAccDescription:ut,getAccDescription:yt,addSection:Tt,getSections:It,cleanupValue:Dt,setShowData:Ct,getShowData:Ot},Vt=e=>` +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var i=this.next();return i||this.lex()},begin:function(i){this.conditionStack.push(i)},popState:function(){var i=this.conditionStack.length-1;return i>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(i){return i=this.conditionStack.length-1-Math.abs(i||0),i>=0?this.conditionStack[i]:"INITIAL"},pushState:function(i){this.begin(i)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(i,n,r,o){switch(r){case 0:break;case 1:break;case 2:return 20;case 3:break;case 4:break;case 5:return this.begin("title"),12;case 6:return this.popState(),"title_value";case 7:return this.begin("acc_title"),14;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),16;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"txt";case 17:return 5;case 18:return 7;case 19:return"value";case 20:return 22}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},title:{rules:[6],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,7,9,11,14,17,18,19,20],inclusive:!0}}};return b}();E.lexer=O;function w(){this.yy={}}return w.prototype=E,E.Parser=w,new w}();q.parser=q;const $t=q,nt=at.pie,G={sections:{},showData:!1,config:nt};let U=G.sections,Q=G.showData;const At=structuredClone(nt),Et=()=>structuredClone(At),wt=()=>{U=structuredClone(G.sections),Q=G.showData,ft()},Tt=(e,u)=>{e=pt(e,et()),U[e]===void 0&&(U[e]=u,it.debug(`added new section: ${e}, with value: ${u}`))},It=()=>U,Dt=e=>(e.substring(0,1)===":"&&(e=e.substring(1).trim()),Number(e.trim())),Ct=e=>{Q=e},Ot=()=>Q,Pt={getConfig:Et,clear:wt,setDiagramTitle:lt,getDiagramTitle:ot,setAccTitle:ct,getAccTitle:ht,setAccDescription:ut,getAccDescription:yt,addSection:Tt,getSections:It,cleanupValue:Dt,setShowData:Ct,getShowData:Ot},Vt=e=>` .pieCircle{ stroke: ${e.pieStrokeColor}; stroke-width : ${e.pieStrokeWidth}; @@ -32,4 +32,4 @@ Expecting `+W.join(", ")+", got '"+(this.terminals_[k]||k)+"'":K="Parse error on font-size: ${e.pieLegendTextSize}; } `,Lt=Vt,Nt=e=>{const u=Object.entries(e).map(p=>({label:p[0],value:p[1]})).sort((p,g)=>g.value-p.value);return St().value(p=>p.value)(u)},Ft=(e,u,$,p)=>{it.debug(`rendering pie chart -`+e);const g=p.db,E=et(),y=gt(g.getConfig(),E.pie),a=40,l=18,d=4,m=450,I=m,T=dt(u),_=T.append("g"),v=g.getSections();_.attr("transform","translate("+I/2+","+m/2+")");const{themeVariables:c}=E;let[A]=mt(c.pieOuterStrokeWidth);A??(A=2);const O=y.textPosition,w=Math.min(I,m)/2-a,b=tt().innerRadius(0).outerRadius(w),t=tt().innerRadius(w*O).outerRadius(w*O);_.append("circle").attr("cx",0).attr("cy",0).attr("r",w+A/2).attr("class","pieOuterCircle");const i=Nt(v),n=[c.pie1,c.pie2,c.pie3,c.pie4,c.pie5,c.pie6,c.pie7,c.pie8,c.pie9,c.pie10,c.pie11,c.pie12],r=xt(n);_.selectAll("mySlices").data(i).enter().append("path").attr("d",b).attr("fill",f=>r(f.data.label)).attr("class","pieCircle");let o=0;Object.keys(v).forEach(f=>{o+=v[f]}),_.selectAll("mySlices").data(i).enter().append("text").text(f=>(f.data.value/o*100).toFixed(0)+"%").attr("transform",f=>"translate("+t.centroid(f)+")").style("text-anchor","middle").attr("class","slice"),_.append("text").text(g.getDiagramTitle()).attr("x",0).attr("y",-(m-50)/2).attr("class","pieTitleText");const s=_.selectAll(".legend").data(r.domain()).enter().append("g").attr("class","legend").attr("transform",(f,V)=>{const R=l+d,M=R*r.domain().length/2,B=12*l,h=V*R-M;return"translate("+B+","+h+")"});s.append("rect").attr("width",l).attr("height",l).style("fill",r).style("stroke",r),s.data(i).append("text").attr("x",l+d).attr("y",l-d).text(f=>{const{label:V,value:R}=f.data;return g.getShowData()?`${V} [${R}]`:V});const P=Math.max(...s.selectAll("text").nodes().map(f=>(f==null?void 0:f.getBoundingClientRect().width)??0)),x=I+a+l+d+P;T.attr("viewBox",`0 0 ${x} ${m}`),_t(T,m,x,y.useMaxWidth)},Rt={draw:Ft},Ht={parser:$t,db:Pt,renderer:Rt,styles:Lt};export{Ht as diagram}; +`+e);const g=p.db,A=et(),y=gt(g.getConfig(),A.pie),a=40,l=18,d=4,m=450,I=m,T=dt(u),_=T.append("g"),v=g.getSections();_.attr("transform","translate("+I/2+","+m/2+")");const{themeVariables:c}=A;let[E]=mt(c.pieOuterStrokeWidth);E??(E=2);const O=y.textPosition,w=Math.min(I,m)/2-a,b=tt().innerRadius(0).outerRadius(w),t=tt().innerRadius(w*O).outerRadius(w*O);_.append("circle").attr("cx",0).attr("cy",0).attr("r",w+E/2).attr("class","pieOuterCircle");const i=Nt(v),n=[c.pie1,c.pie2,c.pie3,c.pie4,c.pie5,c.pie6,c.pie7,c.pie8,c.pie9,c.pie10,c.pie11,c.pie12],r=xt(n);_.selectAll("mySlices").data(i).enter().append("path").attr("d",b).attr("fill",f=>r(f.data.label)).attr("class","pieCircle");let o=0;Object.keys(v).forEach(f=>{o+=v[f]}),_.selectAll("mySlices").data(i).enter().append("text").text(f=>(f.data.value/o*100).toFixed(0)+"%").attr("transform",f=>"translate("+t.centroid(f)+")").style("text-anchor","middle").attr("class","slice"),_.append("text").text(g.getDiagramTitle()).attr("x",0).attr("y",-(m-50)/2).attr("class","pieTitleText");const s=_.selectAll(".legend").data(r.domain()).enter().append("g").attr("class","legend").attr("transform",(f,V)=>{const R=l+d,M=R*r.domain().length/2,B=12*l,h=V*R-M;return"translate("+B+","+h+")"});s.append("rect").attr("width",l).attr("height",l).style("fill",r).style("stroke",r),s.data(i).append("text").attr("x",l+d).attr("y",l-d).text(f=>{const{label:V,value:R}=f.data;return g.getShowData()?`${V} [${R}]`:V});const P=Math.max(...s.selectAll("text").nodes().map(f=>(f==null?void 0:f.getBoundingClientRect().width)??0)),x=I+a+l+d+P;T.attr("viewBox",`0 0 ${x} ${m}`),_t(T,m,x,y.useMaxWidth)},Rt={draw:Ft},Ht={parser:$t,db:Pt,renderer:Rt,styles:Lt};export{Ht as diagram}; diff --git a/assets/chunks/quadrantDiagram-c759a472.DrZVK_s3.js b/assets/chunks/quadrantDiagram-a712a7d9.CBHMGHp7.js similarity index 99% rename from assets/chunks/quadrantDiagram-c759a472.DrZVK_s3.js rename to assets/chunks/quadrantDiagram-a712a7d9.CBHMGHp7.js index ffafc9b8..86ec7d09 100644 --- a/assets/chunks/quadrantDiagram-c759a472.DrZVK_s3.js +++ b/assets/chunks/quadrantDiagram-a712a7d9.CBHMGHp7.js @@ -1,4 +1,4 @@ -import{aY as vt,c as yt,aJ as D,l as ot,s as Lt,g as Ct,E as zt,F as bt,a as Et,b as Dt,G as It,h as gt,i as Bt,d as wt}from"../app.CbQoAe_D.js";import{l as _t}from"./linear.CuaGw0Y_.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./init.Gi6I4Gst.js";var pt=function(){var e=function(K,n,r,l){for(r=r||{},l=K.length;l--;r[K[l]]=n);return r},s=[1,3],h=[1,4],x=[1,5],f=[1,6],d=[1,7],c=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],g=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],i=[32,33,34],y=[2,7],p=[1,13],B=[1,17],N=[1,18],V=[1,19],I=[1,20],b=[1,21],M=[1,22],X=[1,23],C=[1,24],it=[1,25],at=[1,26],nt=[1,27],U=[1,30],Q=[1,31],T=[1,32],_=[1,33],m=[1,34],t=[1,35],A=[1,36],S=[1,37],k=[1,38],F=[1,39],P=[1,40],v=[1,41],L=[1,42],O=[1,57],Y=[1,58],z=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(n,r,l,o,q,a,et){var u=a.length-1;switch(q){case 12:this.$=a[u].trim(),o.setDiagramTitle(this.$);break;case 13:this.$=a[u].trim(),o.setAccTitle(this.$);break;case 14:case 15:this.$=a[u].trim(),o.setAccDescription(this.$);break;case 16:o.addSection(a[u].substr(8)),this.$=a[u].substr(8);break;case 17:o.addPoint(a[u-3],a[u-1],a[u]);break;case 18:o.setXAxisLeftText(a[u-2]),o.setXAxisRightText(a[u]);break;case 19:a[u-1].text+=" ⟶ ",o.setXAxisLeftText(a[u-1]);break;case 20:o.setXAxisLeftText(a[u]);break;case 21:o.setYAxisBottomText(a[u-2]),o.setYAxisTopText(a[u]);break;case 22:a[u-1].text+=" ⟶ ",o.setYAxisBottomText(a[u-1]);break;case 23:o.setYAxisBottomText(a[u]);break;case 24:o.setQuadrant1Text(a[u]);break;case 25:o.setQuadrant2Text(a[u]);break;case 26:o.setQuadrant3Text(a[u]);break;case 27:o.setQuadrant4Text(a[u]);break;case 31:this.$={text:a[u],type:"text"};break;case 32:this.$={text:a[u-1].text+""+a[u],type:a[u-1].type};break;case 33:this.$={text:a[u],type:"text"};break;case 34:this.$={text:a[u],type:"markdown"};break;case 35:this.$=a[u];break;case 36:this.$=a[u-1]+""+a[u];break}},table:[{3:1,4:2,5:s,6:h,32:x,33:f,34:d},{1:[3]},{3:8,4:2,5:s,6:h,32:x,33:f,34:d},{3:9,4:2,5:s,6:h,32:x,33:f,34:d},e(c,[2,4],{7:10}),e(g,[2,28]),e(g,[2,29]),e(g,[2,30]),{1:[2,1]},{1:[2,2]},e(i,y,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(c,[2,5]),{4:43,32:x,33:f,34:d},e(i,y,{10:14,11:15,12:16,21:28,35:29,9:44,5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,9]),e(i,[2,10]),e(i,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},e(i,[2,15]),e(i,[2,16]),{21:48,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:49,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:50,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:51,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:52,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:53,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{5:O,22:[1,54],35:56,36:55,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y},e(z,[2,31]),e(z,[2,33]),e(z,[2,34]),e(z,[2,37]),e(z,[2,38]),e(z,[2,39]),e(z,[2,40]),e(z,[2,41]),e(z,[2,42]),e(z,[2,43]),e(z,[2,44]),e(z,[2,45]),e(z,[2,46]),e(z,[2,47]),e(c,[2,6]),e(i,[2,8]),e(i,[2,12]),e(i,[2,13]),e(i,[2,14]),e(i,[2,20],{36:55,35:56,5:O,26:[1,59],40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,23],{36:55,35:56,5:O,26:[1,60],40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,24],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,25],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,26],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,27],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),{23:[1,61]},e(z,[2,32]),e(z,[2,48]),e(z,[2,49]),e(z,[2,50]),e(i,[2,19],{35:29,21:62,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,22],{35:29,21:63,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),{24:[1,64]},e(i,[2,18],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,21],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(n,r){if(r.recoverable)this.trace(n);else{var l=new Error(n);throw l.hash=r,l}},parse:function(n){var r=this,l=[0],o=[],q=[null],a=[],et=this.table,u="",st=0,qt=0,St=2,Tt=1,kt=a.slice.call(arguments,1),E=Object.create(this.lexer),J={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(J.yy[dt]=this.yy[dt]);E.setInput(n,J.yy),J.yy.lexer=E,J.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var ut=E.yylloc;a.push(ut);var Ft=E.options&&E.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pt(){var j;return j=o.pop()||E.lex()||Tt,typeof j!="number"&&(j instanceof Array&&(o=j,j=o.pop()),j=r.symbols_[j]||j),j}for(var W,Z,H,xt,tt={},rt,$,mt,lt;;){if(Z=l[l.length-1],this.defaultActions[Z]?H=this.defaultActions[Z]:((W===null||typeof W>"u")&&(W=Pt()),H=et[Z]&&et[Z][W]),typeof H>"u"||!H.length||!H[0]){var ft="";lt=[];for(rt in et[Z])this.terminals_[rt]&&rt>St&<.push("'"+this.terminals_[rt]+"'");E.showPosition?ft="Parse error on line "+(st+1)+`: +import{aY as vt,c as yt,aJ as D,l as ot,s as Lt,g as Ct,x as zt,y as bt,a as Et,b as Dt,A as It,h as gt,i as Bt,d as wt}from"../app.DRN3unl1.js";import{l as _t}from"./linear.DG04O0I7.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./init.Gi6I4Gst.js";var pt=function(){var e=function(K,n,r,l){for(r=r||{},l=K.length;l--;r[K[l]]=n);return r},s=[1,3],h=[1,4],x=[1,5],f=[1,6],d=[1,7],c=[1,5,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],g=[1,5,6,13,15,17,19,20,25,27,28,29,30,31,32,33,34,37,38,40,41,42,43,44,45,46,47,48,49,50],i=[32,33,34],y=[2,7],p=[1,13],B=[1,17],N=[1,18],V=[1,19],I=[1,20],b=[1,21],M=[1,22],X=[1,23],C=[1,24],it=[1,25],at=[1,26],nt=[1,27],U=[1,30],Q=[1,31],T=[1,32],_=[1,33],m=[1,34],t=[1,35],A=[1,36],S=[1,37],k=[1,38],F=[1,39],P=[1,40],v=[1,41],L=[1,42],O=[1,57],Y=[1,58],z=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,SPACE:5,QUADRANT:6,document:7,line:8,statement:9,axisDetails:10,quadrantDetails:11,points:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,text:21,point_start:22,point_x:23,point_y:24,"X-AXIS":25,"AXIS-TEXT-DELIMITER":26,"Y-AXIS":27,QUADRANT_1:28,QUADRANT_2:29,QUADRANT_3:30,QUADRANT_4:31,NEWLINE:32,SEMI:33,EOF:34,alphaNumToken:35,textNoTagsToken:36,STR:37,MD_STR:38,alphaNum:39,PUNCTUATION:40,AMP:41,NUM:42,ALPHA:43,COMMA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,UNDERSCORE:50,MINUS:51,$accept:0,$end:1},terminals_:{2:"error",5:"SPACE",6:"QUADRANT",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",22:"point_start",23:"point_x",24:"point_y",25:"X-AXIS",26:"AXIS-TEXT-DELIMITER",27:"Y-AXIS",28:"QUADRANT_1",29:"QUADRANT_2",30:"QUADRANT_3",31:"QUADRANT_4",32:"NEWLINE",33:"SEMI",34:"EOF",37:"STR",38:"MD_STR",40:"PUNCTUATION",41:"AMP",42:"NUM",43:"ALPHA",44:"COMMA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"UNDERSCORE",51:"MINUS"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,1],[9,1],[9,1],[9,2],[9,2],[9,2],[9,1],[9,1],[12,4],[10,4],[10,3],[10,2],[10,4],[10,3],[10,2],[11,2],[11,2],[11,2],[11,2],[4,1],[4,1],[4,1],[21,1],[21,2],[21,1],[21,1],[39,1],[39,2],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[35,1],[36,1],[36,1],[36,1]],performAction:function(n,r,l,o,q,a,et){var u=a.length-1;switch(q){case 12:this.$=a[u].trim(),o.setDiagramTitle(this.$);break;case 13:this.$=a[u].trim(),o.setAccTitle(this.$);break;case 14:case 15:this.$=a[u].trim(),o.setAccDescription(this.$);break;case 16:o.addSection(a[u].substr(8)),this.$=a[u].substr(8);break;case 17:o.addPoint(a[u-3],a[u-1],a[u]);break;case 18:o.setXAxisLeftText(a[u-2]),o.setXAxisRightText(a[u]);break;case 19:a[u-1].text+=" ⟶ ",o.setXAxisLeftText(a[u-1]);break;case 20:o.setXAxisLeftText(a[u]);break;case 21:o.setYAxisBottomText(a[u-2]),o.setYAxisTopText(a[u]);break;case 22:a[u-1].text+=" ⟶ ",o.setYAxisBottomText(a[u-1]);break;case 23:o.setYAxisBottomText(a[u]);break;case 24:o.setQuadrant1Text(a[u]);break;case 25:o.setQuadrant2Text(a[u]);break;case 26:o.setQuadrant3Text(a[u]);break;case 27:o.setQuadrant4Text(a[u]);break;case 31:this.$={text:a[u],type:"text"};break;case 32:this.$={text:a[u-1].text+""+a[u],type:a[u-1].type};break;case 33:this.$={text:a[u],type:"text"};break;case 34:this.$={text:a[u],type:"markdown"};break;case 35:this.$=a[u];break;case 36:this.$=a[u-1]+""+a[u];break}},table:[{3:1,4:2,5:s,6:h,32:x,33:f,34:d},{1:[3]},{3:8,4:2,5:s,6:h,32:x,33:f,34:d},{3:9,4:2,5:s,6:h,32:x,33:f,34:d},e(c,[2,4],{7:10}),e(g,[2,28]),e(g,[2,29]),e(g,[2,30]),{1:[2,1]},{1:[2,2]},e(i,y,{8:11,9:12,10:14,11:15,12:16,21:28,35:29,1:[2,3],5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(c,[2,5]),{4:43,32:x,33:f,34:d},e(i,y,{10:14,11:15,12:16,21:28,35:29,9:44,5:p,13:B,15:N,17:V,19:I,20:b,25:M,27:X,28:C,29:it,30:at,31:nt,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,9]),e(i,[2,10]),e(i,[2,11]),{14:[1,45]},{16:[1,46]},{18:[1,47]},e(i,[2,15]),e(i,[2,16]),{21:48,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:49,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:50,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:51,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:52,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{21:53,35:29,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L},{5:O,22:[1,54],35:56,36:55,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y},e(z,[2,31]),e(z,[2,33]),e(z,[2,34]),e(z,[2,37]),e(z,[2,38]),e(z,[2,39]),e(z,[2,40]),e(z,[2,41]),e(z,[2,42]),e(z,[2,43]),e(z,[2,44]),e(z,[2,45]),e(z,[2,46]),e(z,[2,47]),e(c,[2,6]),e(i,[2,8]),e(i,[2,12]),e(i,[2,13]),e(i,[2,14]),e(i,[2,20],{36:55,35:56,5:O,26:[1,59],40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,23],{36:55,35:56,5:O,26:[1,60],40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,24],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,25],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,26],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,27],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),{23:[1,61]},e(z,[2,32]),e(z,[2,48]),e(z,[2,49]),e(z,[2,50]),e(i,[2,19],{35:29,21:62,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),e(i,[2,22],{35:29,21:63,37:U,38:Q,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L}),{24:[1,64]},e(i,[2,18],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,21],{36:55,35:56,5:O,40:T,41:_,42:m,43:t,44:A,45:S,46:k,47:F,48:P,49:v,50:L,51:Y}),e(i,[2,17])],defaultActions:{8:[2,1],9:[2,2]},parseError:function(n,r){if(r.recoverable)this.trace(n);else{var l=new Error(n);throw l.hash=r,l}},parse:function(n){var r=this,l=[0],o=[],q=[null],a=[],et=this.table,u="",st=0,qt=0,St=2,Tt=1,kt=a.slice.call(arguments,1),E=Object.create(this.lexer),J={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(J.yy[dt]=this.yy[dt]);E.setInput(n,J.yy),J.yy.lexer=E,J.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var ut=E.yylloc;a.push(ut);var Ft=E.options&&E.options.ranges;typeof J.yy.parseError=="function"?this.parseError=J.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Pt(){var j;return j=o.pop()||E.lex()||Tt,typeof j!="number"&&(j instanceof Array&&(o=j,j=o.pop()),j=r.symbols_[j]||j),j}for(var W,Z,H,xt,tt={},rt,$,mt,lt;;){if(Z=l[l.length-1],this.defaultActions[Z]?H=this.defaultActions[Z]:((W===null||typeof W>"u")&&(W=Pt()),H=et[Z]&&et[Z][W]),typeof H>"u"||!H.length||!H[0]){var ft="";lt=[];for(rt in et[Z])this.terminals_[rt]&&rt>St&<.push("'"+this.terminals_[rt]+"'");E.showPosition?ft="Parse error on line "+(st+1)+`: `+E.showPosition()+` Expecting `+lt.join(", ")+", got '"+(this.terminals_[W]||W)+"'":ft="Parse error on line "+(st+1)+": Unexpected "+(W==Tt?"end of input":"'"+(this.terminals_[W]||W)+"'"),this.parseError(ft,{text:E.match,token:this.terminals_[W]||W,line:E.yylineno,loc:ut,expected:lt})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+W);switch(H[0]){case 1:l.push(W),q.push(E.yytext),a.push(E.yylloc),l.push(H[1]),W=null,qt=E.yyleng,u=E.yytext,st=E.yylineno,ut=E.yylloc;break;case 2:if($=this.productions_[H[1]][1],tt.$=q[q.length-$],tt._$={first_line:a[a.length-($||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-($||1)].first_column,last_column:a[a.length-1].last_column},Ft&&(tt._$.range=[a[a.length-($||1)].range[0],a[a.length-1].range[1]]),xt=this.performAction.apply(tt,[u,qt,st,J.yy,H[1],q,a].concat(kt)),typeof xt<"u")return xt;$&&(l=l.slice(0,-1*$*2),q=q.slice(0,-1*$),a=a.slice(0,-1*$)),l.push(this.productions_[H[1]][0]),q.push(tt.$),a.push(tt._$),mt=et[l[l.length-2]][l[l.length-1]],l.push(mt);break;case 3:return!0}}return!0}},At=function(){var K={EOF:1,parseError:function(r,l){if(this.yy.parser)this.yy.parser.parseError(r,l);else throw new Error(r)},setInput:function(n,r){return this.yy=r||this.yy||{},this._input=n,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var n=this._input[0];this.yytext+=n,this.yyleng++,this.offset++,this.match+=n,this.matched+=n;var r=n.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),n},unput:function(n){var r=n.length,l=n.split(/(?:\r\n?|\n)/g);this._input=n+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var q=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===o.length?this.yylloc.first_column:0)+o[o.length-l.length].length-l[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[q[0],q[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(n){this.unput(this.match.slice(n))},pastInput:function(){var n=this.matched.substr(0,this.matched.length-this.match.length);return(n.length>20?"...":"")+n.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var n=this.match;return n.length<20&&(n+=this._input.substr(0,20-n.length)),(n.substr(0,20)+(n.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var n=this.pastInput(),r=new Array(n.length+1).join("-");return n+this.upcomingInput()+` diff --git a/assets/chunks/requirementDiagram-87253d64.DTGKGrWZ.js b/assets/chunks/requirementDiagram-eb878fee.DLnn6pB1.js similarity index 98% rename from assets/chunks/requirementDiagram-87253d64.DTGKGrWZ.js rename to assets/chunks/requirementDiagram-eb878fee.DLnn6pB1.js index d2200364..37477afd 100644 --- a/assets/chunks/requirementDiagram-87253d64.DTGKGrWZ.js +++ b/assets/chunks/requirementDiagram-eb878fee.DLnn6pB1.js @@ -1,4 +1,4 @@ -import{c as Te,s as Ce,g as Fe,b as Me,a as De,l as Ne,G as Pe,h as oe,i as Ye,j as ke}from"../app.CbQoAe_D.js";import{G as Ue}from"./graph.CwfrPCLx.js";import{l as Be}from"./layout.Ds1muZd1.js";import{l as Qe}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";var ce=function(){var e=function(V,i,n,a){for(n=n||{},a=V.length;a--;n[V[a]]=i);return n},t=[1,3],l=[1,4],c=[1,5],u=[1,6],d=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],p=[1,18],h=[2,7],o=[1,22],g=[1,23],R=[1,24],A=[1,25],T=[1,26],N=[1,27],v=[1,20],k=[1,28],x=[1,29],F=[62,63],de=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],pe=[1,47],fe=[1,48],ye=[1,49],_e=[1,50],ge=[1,51],Ee=[1,52],Re=[1,53],O=[53,54],M=[1,64],D=[1,60],P=[1,61],Y=[1,62],U=[1,63],B=[1,65],j=[1,69],z=[1,70],X=[1,67],J=[1,68],m=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],ie={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(i,n,a,r,f,s,W){var _=s.length-1;switch(f){case 4:this.$=s[_].trim(),r.setAccTitle(this.$);break;case 5:case 6:this.$=s[_].trim(),r.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:r.addRequirement(s[_-3],s[_-4]);break;case 14:r.setNewReqId(s[_-2]);break;case 15:r.setNewReqText(s[_-2]);break;case 16:r.setNewReqRisk(s[_-2]);break;case 17:r.setNewReqVerifyMethod(s[_-2]);break;case 20:this.$=r.RequirementType.REQUIREMENT;break;case 21:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=r.RiskLevel.LOW_RISK;break;case 27:this.$=r.RiskLevel.MED_RISK;break;case 28:this.$=r.RiskLevel.HIGH_RISK;break;case 29:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=r.VerifyType.VERIFY_TEST;break;case 33:r.addElement(s[_-3]);break;case 34:r.setNewElementType(s[_-2]);break;case 35:r.setNewElementDocRef(s[_-2]);break;case 38:r.addRelationship(s[_-2],s[_],s[_-4]);break;case 39:r.addRelationship(s[_-2],s[_-4],s[_]);break;case 40:this.$=r.Relationships.CONTAINS;break;case 41:this.$=r.Relationships.COPIES;break;case 42:this.$=r.Relationships.DERIVES;break;case 43:this.$=r.Relationships.SATISFIES;break;case 44:this.$=r.Relationships.VERIFIES;break;case 45:this.$=r.Relationships.REFINES;break;case 46:this.$=r.Relationships.TRACES;break}},table:[{3:1,4:2,6:t,9:l,11:c,13:u},{1:[3]},{3:8,4:2,5:[1,7],6:t,9:l,11:c,13:u},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(d,[2,6]),{3:12,4:2,6:t,9:l,11:c,13:u},{1:[2,2]},{4:17,5:p,7:13,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},e(d,[2,4]),e(d,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:p,7:31,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:32,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:33,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:34,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:35,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},e(F,[2,20]),e(F,[2,21]),e(F,[2,22]),e(F,[2,23]),e(F,[2,24]),e(F,[2,25]),e(de,[2,49]),e(de,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{52:54,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{5:[1,55]},{5:[1,56]},{53:[1,57]},e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),{54:[1,58]},{5:M,20:59,21:D,24:P,26:Y,28:U,30:B},{5:j,30:z,46:66,47:X,49:J},{23:71,62:k,63:x},{23:72,62:k,63:x},e(m,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:M,20:77,21:D,24:P,26:Y,28:U,30:B},e(m,[2,19]),e(m,[2,33]),{22:[1,78]},{22:[1,79]},{5:j,30:z,46:80,47:X,49:J},e(m,[2,37]),e(m,[2,38]),e(m,[2,39]),{23:81,62:k,63:x},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},e(m,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},e(m,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:M,20:106,21:D,24:P,26:Y,28:U,30:B},{5:M,20:107,21:D,24:P,26:Y,28:U,30:B},{5:M,20:108,21:D,24:P,26:Y,28:U,30:B},{5:M,20:109,21:D,24:P,26:Y,28:U,30:B},{5:j,30:z,46:110,47:X,49:J},{5:j,30:z,46:111,47:X,49:J},e(m,[2,14]),e(m,[2,15]),e(m,[2,16]),e(m,[2,17]),e(m,[2,34]),e(m,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(i,n){if(n.recoverable)this.trace(i);else{var a=new Error(i);throw a.hash=n,a}},parse:function(i){var n=this,a=[0],r=[],f=[null],s=[],W=this.table,_="",Z=0,me=0,Ve=2,Ie=1,qe=s.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var ne in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ne)&&(L.yy[ne]=this.yy[ne]);E.setInput(i,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var se=E.yylloc;s.push(se);var Oe=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Le(){var $;return $=r.pop()||E.lex()||Ie,typeof $!="number"&&($ instanceof Array&&(r=$,$=r.pop()),$=n.symbols_[$]||$),$}for(var I,C,S,ae,Q={},ee,w,be,te;;){if(C=a[a.length-1],this.defaultActions[C]?S=this.defaultActions[C]:((I===null||typeof I>"u")&&(I=Le()),S=W[C]&&W[C][I]),typeof S>"u"||!S.length||!S[0]){var le="";te=[];for(ee in W[C])this.terminals_[ee]&&ee>Ve&&te.push("'"+this.terminals_[ee]+"'");E.showPosition?le="Parse error on line "+(Z+1)+`: +import{c as Te,s as Ce,g as Fe,b as Me,a as De,l as Ne,A as Pe,h as oe,i as Ye,j as ke}from"../app.DRN3unl1.js";import{G as Ue}from"./graph.C4kgFXP1.js";import{l as Be}from"./layout.C5Nv6jKv.js";import{l as Qe}from"./line.DpDoeUQJ.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";var ce=function(){var e=function(V,i,n,a){for(n=n||{},a=V.length;a--;n[V[a]]=i);return n},t=[1,3],l=[1,4],c=[1,5],u=[1,6],d=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],p=[1,18],h=[2,7],o=[1,22],g=[1,23],R=[1,24],A=[1,25],T=[1,26],N=[1,27],v=[1,20],k=[1,28],x=[1,29],F=[62,63],de=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],pe=[1,47],fe=[1,48],ye=[1,49],_e=[1,50],ge=[1,51],Ee=[1,52],Re=[1,53],O=[53,54],M=[1,64],D=[1,60],P=[1,61],Y=[1,62],U=[1,63],B=[1,65],j=[1,69],z=[1,70],X=[1,67],J=[1,68],m=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],ie={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,requirementType:17,requirementName:18,STRUCT_START:19,requirementBody:20,ID:21,COLONSEP:22,id:23,TEXT:24,text:25,RISK:26,riskLevel:27,VERIFYMTHD:28,verifyType:29,STRUCT_STOP:30,REQUIREMENT:31,FUNCTIONAL_REQUIREMENT:32,INTERFACE_REQUIREMENT:33,PERFORMANCE_REQUIREMENT:34,PHYSICAL_REQUIREMENT:35,DESIGN_CONSTRAINT:36,LOW_RISK:37,MED_RISK:38,HIGH_RISK:39,VERIFY_ANALYSIS:40,VERIFY_DEMONSTRATION:41,VERIFY_INSPECTION:42,VERIFY_TEST:43,ELEMENT:44,elementName:45,elementBody:46,TYPE:47,type:48,DOCREF:49,ref:50,END_ARROW_L:51,relationship:52,LINE:53,END_ARROW_R:54,CONTAINS:55,COPIES:56,DERIVES:57,SATISFIES:58,VERIFIES:59,REFINES:60,TRACES:61,unqString:62,qString:63,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",19:"STRUCT_START",21:"ID",22:"COLONSEP",24:"TEXT",26:"RISK",28:"VERIFYMTHD",30:"STRUCT_STOP",31:"REQUIREMENT",32:"FUNCTIONAL_REQUIREMENT",33:"INTERFACE_REQUIREMENT",34:"PERFORMANCE_REQUIREMENT",35:"PHYSICAL_REQUIREMENT",36:"DESIGN_CONSTRAINT",37:"LOW_RISK",38:"MED_RISK",39:"HIGH_RISK",40:"VERIFY_ANALYSIS",41:"VERIFY_DEMONSTRATION",42:"VERIFY_INSPECTION",43:"VERIFY_TEST",44:"ELEMENT",47:"TYPE",49:"DOCREF",51:"END_ARROW_L",53:"LINE",54:"END_ARROW_R",55:"CONTAINS",56:"COPIES",57:"DERIVES",58:"SATISFIES",59:"VERIFIES",60:"REFINES",61:"TRACES",62:"unqString",63:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[14,5],[20,5],[20,5],[20,5],[20,5],[20,2],[20,1],[17,1],[17,1],[17,1],[17,1],[17,1],[17,1],[27,1],[27,1],[27,1],[29,1],[29,1],[29,1],[29,1],[15,5],[46,5],[46,5],[46,2],[46,1],[16,5],[16,5],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[52,1],[18,1],[18,1],[23,1],[23,1],[25,1],[25,1],[45,1],[45,1],[48,1],[48,1],[50,1],[50,1]],performAction:function(i,n,a,r,f,s,W){var _=s.length-1;switch(f){case 4:this.$=s[_].trim(),r.setAccTitle(this.$);break;case 5:case 6:this.$=s[_].trim(),r.setAccDescription(this.$);break;case 7:this.$=[];break;case 13:r.addRequirement(s[_-3],s[_-4]);break;case 14:r.setNewReqId(s[_-2]);break;case 15:r.setNewReqText(s[_-2]);break;case 16:r.setNewReqRisk(s[_-2]);break;case 17:r.setNewReqVerifyMethod(s[_-2]);break;case 20:this.$=r.RequirementType.REQUIREMENT;break;case 21:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 22:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 23:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 24:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 26:this.$=r.RiskLevel.LOW_RISK;break;case 27:this.$=r.RiskLevel.MED_RISK;break;case 28:this.$=r.RiskLevel.HIGH_RISK;break;case 29:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 30:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 31:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 32:this.$=r.VerifyType.VERIFY_TEST;break;case 33:r.addElement(s[_-3]);break;case 34:r.setNewElementType(s[_-2]);break;case 35:r.setNewElementDocRef(s[_-2]);break;case 38:r.addRelationship(s[_-2],s[_],s[_-4]);break;case 39:r.addRelationship(s[_-2],s[_-4],s[_]);break;case 40:this.$=r.Relationships.CONTAINS;break;case 41:this.$=r.Relationships.COPIES;break;case 42:this.$=r.Relationships.DERIVES;break;case 43:this.$=r.Relationships.SATISFIES;break;case 44:this.$=r.Relationships.VERIFIES;break;case 45:this.$=r.Relationships.REFINES;break;case 46:this.$=r.Relationships.TRACES;break}},table:[{3:1,4:2,6:t,9:l,11:c,13:u},{1:[3]},{3:8,4:2,5:[1,7],6:t,9:l,11:c,13:u},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(d,[2,6]),{3:12,4:2,6:t,9:l,11:c,13:u},{1:[2,2]},{4:17,5:p,7:13,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},e(d,[2,4]),e(d,[2,5]),{1:[2,1]},{8:[1,30]},{4:17,5:p,7:31,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:32,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:33,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:34,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{4:17,5:p,7:35,8:h,9:l,11:c,13:u,14:14,15:15,16:16,17:19,23:21,31:o,32:g,33:R,34:A,35:T,36:N,44:v,62:k,63:x},{18:36,62:[1,37],63:[1,38]},{45:39,62:[1,40],63:[1,41]},{51:[1,42],53:[1,43]},e(F,[2,20]),e(F,[2,21]),e(F,[2,22]),e(F,[2,23]),e(F,[2,24]),e(F,[2,25]),e(de,[2,49]),e(de,[2,50]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{19:[1,44]},{19:[2,47]},{19:[2,48]},{19:[1,45]},{19:[2,53]},{19:[2,54]},{52:46,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{52:54,55:pe,56:fe,57:ye,58:_e,59:ge,60:Ee,61:Re},{5:[1,55]},{5:[1,56]},{53:[1,57]},e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),{54:[1,58]},{5:M,20:59,21:D,24:P,26:Y,28:U,30:B},{5:j,30:z,46:66,47:X,49:J},{23:71,62:k,63:x},{23:72,62:k,63:x},e(m,[2,13]),{22:[1,73]},{22:[1,74]},{22:[1,75]},{22:[1,76]},{5:M,20:77,21:D,24:P,26:Y,28:U,30:B},e(m,[2,19]),e(m,[2,33]),{22:[1,78]},{22:[1,79]},{5:j,30:z,46:80,47:X,49:J},e(m,[2,37]),e(m,[2,38]),e(m,[2,39]),{23:81,62:k,63:x},{25:82,62:[1,83],63:[1,84]},{27:85,37:[1,86],38:[1,87],39:[1,88]},{29:89,40:[1,90],41:[1,91],42:[1,92],43:[1,93]},e(m,[2,18]),{48:94,62:[1,95],63:[1,96]},{50:97,62:[1,98],63:[1,99]},e(m,[2,36]),{5:[1,100]},{5:[1,101]},{5:[2,51]},{5:[2,52]},{5:[1,102]},{5:[2,26]},{5:[2,27]},{5:[2,28]},{5:[1,103]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[2,32]},{5:[1,104]},{5:[2,55]},{5:[2,56]},{5:[1,105]},{5:[2,57]},{5:[2,58]},{5:M,20:106,21:D,24:P,26:Y,28:U,30:B},{5:M,20:107,21:D,24:P,26:Y,28:U,30:B},{5:M,20:108,21:D,24:P,26:Y,28:U,30:B},{5:M,20:109,21:D,24:P,26:Y,28:U,30:B},{5:j,30:z,46:110,47:X,49:J},{5:j,30:z,46:111,47:X,49:J},e(m,[2,14]),e(m,[2,15]),e(m,[2,16]),e(m,[2,17]),e(m,[2,34]),e(m,[2,35])],defaultActions:{8:[2,2],12:[2,1],30:[2,3],31:[2,8],32:[2,9],33:[2,10],34:[2,11],35:[2,12],37:[2,47],38:[2,48],40:[2,53],41:[2,54],83:[2,51],84:[2,52],86:[2,26],87:[2,27],88:[2,28],90:[2,29],91:[2,30],92:[2,31],93:[2,32],95:[2,55],96:[2,56],98:[2,57],99:[2,58]},parseError:function(i,n){if(n.recoverable)this.trace(i);else{var a=new Error(i);throw a.hash=n,a}},parse:function(i){var n=this,a=[0],r=[],f=[null],s=[],W=this.table,_="",Z=0,me=0,Ve=2,Ie=1,qe=s.slice.call(arguments,1),E=Object.create(this.lexer),L={yy:{}};for(var ne in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ne)&&(L.yy[ne]=this.yy[ne]);E.setInput(i,L.yy),L.yy.lexer=E,L.yy.parser=this,typeof E.yylloc>"u"&&(E.yylloc={});var se=E.yylloc;s.push(se);var Oe=E.options&&E.options.ranges;typeof L.yy.parseError=="function"?this.parseError=L.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Le(){var $;return $=r.pop()||E.lex()||Ie,typeof $!="number"&&($ instanceof Array&&(r=$,$=r.pop()),$=n.symbols_[$]||$),$}for(var I,C,S,ae,Q={},ee,w,be,te;;){if(C=a[a.length-1],this.defaultActions[C]?S=this.defaultActions[C]:((I===null||typeof I>"u")&&(I=Le()),S=W[C]&&W[C][I]),typeof S>"u"||!S.length||!S[0]){var le="";te=[];for(ee in W[C])this.terminals_[ee]&&ee>Ve&&te.push("'"+this.terminals_[ee]+"'");E.showPosition?le="Parse error on line "+(Z+1)+`: `+E.showPosition()+` Expecting `+te.join(", ")+", got '"+(this.terminals_[I]||I)+"'":le="Parse error on line "+(Z+1)+": Unexpected "+(I==Ie?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(le,{text:E.match,token:this.terminals_[I]||I,line:E.yylineno,loc:se,expected:te})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+I);switch(S[0]){case 1:a.push(I),f.push(E.yytext),s.push(E.yylloc),a.push(S[1]),I=null,me=E.yyleng,_=E.yytext,Z=E.yylineno,se=E.yylloc;break;case 2:if(w=this.productions_[S[1]][1],Q.$=f[f.length-w],Q._$={first_line:s[s.length-(w||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(w||1)].first_column,last_column:s[s.length-1].last_column},Oe&&(Q._$.range=[s[s.length-(w||1)].range[0],s[s.length-1].range[1]]),ae=this.performAction.apply(Q,[_,me,Z,L.yy,S[1],f,s].concat(qe)),typeof ae<"u")return ae;w&&(a=a.slice(0,-1*w*2),f=f.slice(0,-1*w),s=s.slice(0,-1*w)),a.push(this.productions_[S[1]][0]),f.push(Q.$),s.push(Q._$),be=W[a[a.length-2]][a[a.length-1]],a.push(be);break;case 3:return!0}}return!0}},$e=function(){var V={EOF:1,parseError:function(n,a){if(this.yy.parser)this.yy.parser.parseError(n,a);else throw new Error(n)},setInput:function(i,n){return this.yy=n||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var n=i.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},unput:function(i){var n=i.length,a=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),a.length-1&&(this.yylineno-=a.length-1);var f=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:a?(a.length===r.length?this.yylloc.first_column:0)+r[r.length-a.length].length-a[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[f[0],f[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(i){this.unput(this.match.slice(i))},pastInput:function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var i=this.pastInput(),n=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/chunks/sankeyDiagram-707fac0f.BUCcUXDc.js b/assets/chunks/sankeyDiagram-c599f8ec.DnE5IYY2.js similarity index 95% rename from assets/chunks/sankeyDiagram-707fac0f.BUCcUXDc.js rename to assets/chunks/sankeyDiagram-c599f8ec.DnE5IYY2.js index 128bbc75..6513794e 100644 --- a/assets/chunks/sankeyDiagram-707fac0f.BUCcUXDc.js +++ b/assets/chunks/sankeyDiagram-c599f8ec.DnE5IYY2.js @@ -1,4 +1,4 @@ -import{c as rt,g as mt,s as kt,a as _t,b as xt,F as vt,E as bt,G as wt,j as St,D as Lt,h as G,t as Et}from"../app.CbQoAe_D.js";import{o as At}from"./ordinal.BYWQX77i.js";import{s as Tt}from"./Tableau10.B-NsZVaP.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./init.Gi6I4Gst.js";function ot(t,n){let s;if(n===void 0)for(const a of t)a!=null&&(s=a)&&(s=a);else{let a=-1;for(let u of t)(u=n(u,++a,t))!=null&&(s=u)&&(s=u)}return s}function yt(t,n){let s;if(n===void 0)for(const a of t)a!=null&&(s>a||s===void 0&&a>=a)&&(s=a);else{let a=-1;for(let u of t)(u=n(u,++a,t))!=null&&(s>u||s===void 0&&u>=u)&&(s=u)}return s}function Z(t,n){let s=0;if(n===void 0)for(let a of t)(a=+a)&&(s+=a);else{let a=-1;for(let u of t)(u=+n(u,++a,t))&&(s+=u)}return s}function Mt(t){return t.target.depth}function Nt(t){return t.depth}function Pt(t,n){return n-1-t.height}function dt(t,n){return t.sourceLinks.length?t.depth:n-1}function Ct(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?yt(t.sourceLinks,Mt)-1:0}function Y(t){return function(){return t}}function lt(t,n){return H(t.source,n.source)||t.index-n.index}function at(t,n){return H(t.target,n.target)||t.index-n.index}function H(t,n){return t.y0-n.y0}function J(t){return t.value}function It(t){return t.index}function $t(t){return t.nodes}function Ot(t){return t.links}function ct(t,n){const s=t.get(n);if(!s)throw new Error("missing: "+n);return s}function ut({nodes:t}){for(const n of t){let s=n.y0,a=s;for(const u of n.sourceLinks)u.y0=s+u.width/2,s+=u.width;for(const u of n.targetLinks)u.y1=a+u.width/2,a+=u.width}}function jt(){let t=0,n=0,s=1,a=1,u=24,_=8,g,p=It,i=dt,o,c,m=$t,b=Ot,y=6;function x(){const e={nodes:m.apply(null,arguments),links:b.apply(null,arguments)};return E(e),L(e),A(e),N(e),S(e),ut(e),e}x.update=function(e){return ut(e),e},x.nodeId=function(e){return arguments.length?(p=typeof e=="function"?e:Y(e),x):p},x.nodeAlign=function(e){return arguments.length?(i=typeof e=="function"?e:Y(e),x):i},x.nodeSort=function(e){return arguments.length?(o=e,x):o},x.nodeWidth=function(e){return arguments.length?(u=+e,x):u},x.nodePadding=function(e){return arguments.length?(_=g=+e,x):_},x.nodes=function(e){return arguments.length?(m=typeof e=="function"?e:Y(e),x):m},x.links=function(e){return arguments.length?(b=typeof e=="function"?e:Y(e),x):b},x.linkSort=function(e){return arguments.length?(c=e,x):c},x.size=function(e){return arguments.length?(t=n=0,s=+e[0],a=+e[1],x):[s-t,a-n]},x.extent=function(e){return arguments.length?(t=+e[0][0],s=+e[1][0],n=+e[0][1],a=+e[1][1],x):[[t,n],[s,a]]},x.iterations=function(e){return arguments.length?(y=+e,x):y};function E({nodes:e,links:f}){for(const[h,r]of e.entries())r.index=h,r.sourceLinks=[],r.targetLinks=[];const l=new Map(e.map((h,r)=>[p(h,r,e),h]));for(const[h,r]of f.entries()){r.index=h;let{source:k,target:v}=r;typeof k!="object"&&(k=r.source=ct(l,k)),typeof v!="object"&&(v=r.target=ct(l,v)),k.sourceLinks.push(r),v.targetLinks.push(r)}if(c!=null)for(const{sourceLinks:h,targetLinks:r}of e)h.sort(c),r.sort(c)}function L({nodes:e}){for(const f of e)f.value=f.fixedValue===void 0?Math.max(Z(f.sourceLinks,J),Z(f.targetLinks,J)):f.fixedValue}function A({nodes:e}){const f=e.length;let l=new Set(e),h=new Set,r=0;for(;l.size;){for(const k of l){k.depth=r;for(const{target:v}of k.sourceLinks)h.add(v)}if(++r>f)throw new Error("circular link");l=h,h=new Set}}function N({nodes:e}){const f=e.length;let l=new Set(e),h=new Set,r=0;for(;l.size;){for(const k of l){k.height=r;for(const{source:v}of k.targetLinks)h.add(v)}if(++r>f)throw new Error("circular link");l=h,h=new Set}}function I({nodes:e}){const f=ot(e,r=>r.depth)+1,l=(s-t-u)/(f-1),h=new Array(f);for(const r of e){const k=Math.max(0,Math.min(f-1,Math.floor(i.call(null,r,f))));r.layer=k,r.x0=t+k*l,r.x1=r.x0+u,h[k]?h[k].push(r):h[k]=[r]}if(o)for(const r of h)r.sort(o);return h}function j(e){const f=yt(e,l=>(a-n-(l.length-1)*g)/Z(l,J));for(const l of e){let h=n;for(const r of l){r.y0=h,r.y1=h+r.value*f,h=r.y1+g;for(const k of r.sourceLinks)k.width=k.value*f}h=(a-h+g)/(l.length+1);for(let r=0;rl.length)-1)),j(f);for(let l=0;l0))continue;let R=(F/z-v.y0)*f;v.y0+=R,v.y1+=R,w(v)}o===void 0&&k.sort(H),P(k,l)}}function O(e,f,l){for(let h=e.length,r=h-2;r>=0;--r){const k=e[r];for(const v of k){let F=0,z=0;for(const{target:U,value:K}of v.sourceLinks){let W=K*(U.layer-v.layer);F+=V(v,U)*W,z+=W}if(!(z>0))continue;let R=(F/z-v.y0)*f;v.y0+=R,v.y1+=R,w(v)}o===void 0&&k.sort(H),P(k,l)}}function P(e,f){const l=e.length>>1,h=e[l];d(e,h.y0-g,l-1,f),C(e,h.y1+g,l+1,f),d(e,a,e.length-1,f),C(e,n,0,f)}function C(e,f,l,h){for(;l1e-6&&(r.y0+=k,r.y1+=k),f=r.y1+g}}function d(e,f,l,h){for(;l>=0;--l){const r=e[l],k=(r.y1-f)*h;k>1e-6&&(r.y0-=k,r.y1-=k),f=r.y0-g}}function w({sourceLinks:e,targetLinks:f}){if(c===void 0){for(const{source:{sourceLinks:l}}of f)l.sort(at);for(const{target:{targetLinks:l}}of e)l.sort(lt)}}function $(e){if(c===void 0)for(const{sourceLinks:f,targetLinks:l}of e)f.sort(at),l.sort(lt)}function T(e,f){let l=e.y0-(e.sourceLinks.length-1)*g/2;for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;l+=r+g}for(const{source:h,width:r}of f.targetLinks){if(h===e)break;l-=r}return l}function V(e,f){let l=f.y0-(f.targetLinks.length-1)*g/2;for(const{source:h,width:r}of f.targetLinks){if(h===e)break;l+=r+g}for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;l-=r}return l}return x}var tt=Math.PI,et=2*tt,D=1e-6,zt=et-D;function nt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function gt(){return new nt}nt.prototype=gt.prototype={constructor:nt,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,s,a){this._+="Q"+ +t+","+ +n+","+(this._x1=+s)+","+(this._y1=+a)},bezierCurveTo:function(t,n,s,a,u,_){this._+="C"+ +t+","+ +n+","+ +s+","+ +a+","+(this._x1=+u)+","+(this._y1=+_)},arcTo:function(t,n,s,a,u){t=+t,n=+n,s=+s,a=+a,u=+u;var _=this._x1,g=this._y1,p=s-t,i=a-n,o=_-t,c=g-n,m=o*o+c*c;if(u<0)throw new Error("negative radius: "+u);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(m>D)if(!(Math.abs(c*p-i*o)>D)||!u)this._+="L"+(this._x1=t)+","+(this._y1=n);else{var b=s-_,y=a-g,x=p*p+i*i,E=b*b+y*y,L=Math.sqrt(x),A=Math.sqrt(m),N=u*Math.tan((tt-Math.acos((x+m-E)/(2*L*A)))/2),I=N/A,j=N/L;Math.abs(I-1)>D&&(this._+="L"+(t+I*o)+","+(n+I*c)),this._+="A"+u+","+u+",0,0,"+ +(c*b>o*y)+","+(this._x1=t+j*p)+","+(this._y1=n+j*i)}},arc:function(t,n,s,a,u,_){t=+t,n=+n,s=+s,_=!!_;var g=s*Math.cos(a),p=s*Math.sin(a),i=t+g,o=n+p,c=1^_,m=_?a-u:u-a;if(s<0)throw new Error("negative radius: "+s);this._x1===null?this._+="M"+i+","+o:(Math.abs(this._x1-i)>D||Math.abs(this._y1-o)>D)&&(this._+="L"+i+","+o),s&&(m<0&&(m=m%et+et),m>zt?this._+="A"+s+","+s+",0,1,"+c+","+(t-g)+","+(n-p)+"A"+s+","+s+",0,1,"+c+","+(this._x1=i)+","+(this._y1=o):m>D&&(this._+="A"+s+","+s+",0,"+ +(m>=tt)+","+c+","+(this._x1=t+s*Math.cos(u))+","+(this._y1=n+s*Math.sin(u))))},rect:function(t,n,s,a){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +s+"v"+ +a+"h"+-s+"Z"},toString:function(){return this._}};function ht(t){return function(){return t}}function Dt(t){return t[0]}function Bt(t){return t[1]}var Vt=Array.prototype.slice;function Ft(t){return t.source}function Rt(t){return t.target}function Ut(t){var n=Ft,s=Rt,a=Dt,u=Bt,_=null;function g(){var p,i=Vt.call(arguments),o=n.apply(this,i),c=s.apply(this,i);if(_||(_=p=gt()),t(_,+a.apply(this,(i[0]=o,i)),+u.apply(this,i),+a.apply(this,(i[0]=c,i)),+u.apply(this,i)),p)return _=null,p+""||null}return g.source=function(p){return arguments.length?(n=p,g):n},g.target=function(p){return arguments.length?(s=p,g):s},g.x=function(p){return arguments.length?(a=typeof p=="function"?p:ht(+p),g):a},g.y=function(p){return arguments.length?(u=typeof p=="function"?p:ht(+p),g):u},g.context=function(p){return arguments.length?(_=p??null,g):_},g}function Wt(t,n,s,a,u){t.moveTo(n,s),t.bezierCurveTo(n=(n+a)/2,s,n,u,a,u)}function Gt(){return Ut(Wt)}function Yt(t){return[t.source.x1,t.y0]}function Ht(t){return[t.target.x0,t.y1]}function Xt(){return Gt().source(Yt).target(Ht)}var it=function(){var t=function(p,i,o,c){for(o=o||{},c=p.length;c--;o[p[c]]=i);return o},n=[1,9],s=[1,10],a=[1,5,10,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(i,o,c,m,b,y,x){var E=y.length-1;switch(b){case 7:const L=m.findOrCreateNode(y[E-4].trim().replaceAll('""','"')),A=m.findOrCreateNode(y[E-2].trim().replaceAll('""','"')),N=parseFloat(y[E].trim());m.addLink(L,A,N);break;case 8:case 9:case 11:this.$=y[E];break;case 10:this.$=y[E-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:s},{1:[2,6],7:11,10:[1,12]},t(s,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(a,[2,8]),t(a,[2,9]),{19:[1,16]},t(a,[2,11]),{1:[2,1]},{1:[2,5]},t(s,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:s},{15:18,16:7,17:8,18:n,20:s},{18:[1,19]},t(s,[2,3]),{12:[1,20]},t(a,[2,10]),{15:21,16:7,17:8,18:n,20:s},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(i,o){if(o.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=o,c}},parse:function(i){var o=this,c=[0],m=[],b=[null],y=[],x=this.table,E="",L=0,A=0,N=2,I=1,j=y.slice.call(arguments,1),S=Object.create(this.lexer),M={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(M.yy[O]=this.yy[O]);S.setInput(i,M.yy),M.yy.lexer=S,M.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var P=S.yylloc;y.push(P);var C=S.options&&S.options.ranges;typeof M.yy.parseError=="function"?this.parseError=M.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function d(){var v;return v=m.pop()||S.lex()||I,typeof v!="number"&&(v instanceof Array&&(m=v,v=m.pop()),v=o.symbols_[v]||v),v}for(var w,$,T,V,e={},f,l,h,r;;){if($=c[c.length-1],this.defaultActions[$]?T=this.defaultActions[$]:((w===null||typeof w>"u")&&(w=d()),T=x[$]&&x[$][w]),typeof T>"u"||!T.length||!T[0]){var k="";r=[];for(f in x[$])this.terminals_[f]&&f>N&&r.push("'"+this.terminals_[f]+"'");S.showPosition?k="Parse error on line "+(L+1)+`: +import{c as rt,g as mt,s as kt,a as _t,b as xt,y as vt,x as bt,A as wt,j as St,v as Lt,h as G,t as Et}from"../app.DRN3unl1.js";import{o as At}from"./ordinal.BYWQX77i.js";import{s as Tt}from"./Tableau10.B-NsZVaP.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./init.Gi6I4Gst.js";function ot(t,n){let s;if(n===void 0)for(const a of t)a!=null&&(s=a)&&(s=a);else{let a=-1;for(let u of t)(u=n(u,++a,t))!=null&&(s=u)&&(s=u)}return s}function yt(t,n){let s;if(n===void 0)for(const a of t)a!=null&&(s>a||s===void 0&&a>=a)&&(s=a);else{let a=-1;for(let u of t)(u=n(u,++a,t))!=null&&(s>u||s===void 0&&u>=u)&&(s=u)}return s}function Z(t,n){let s=0;if(n===void 0)for(let a of t)(a=+a)&&(s+=a);else{let a=-1;for(let u of t)(u=+n(u,++a,t))&&(s+=u)}return s}function Mt(t){return t.target.depth}function Nt(t){return t.depth}function Pt(t,n){return n-1-t.height}function dt(t,n){return t.sourceLinks.length?t.depth:n-1}function Ct(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?yt(t.sourceLinks,Mt)-1:0}function Y(t){return function(){return t}}function lt(t,n){return H(t.source,n.source)||t.index-n.index}function at(t,n){return H(t.target,n.target)||t.index-n.index}function H(t,n){return t.y0-n.y0}function J(t){return t.value}function It(t){return t.index}function $t(t){return t.nodes}function Ot(t){return t.links}function ct(t,n){const s=t.get(n);if(!s)throw new Error("missing: "+n);return s}function ut({nodes:t}){for(const n of t){let s=n.y0,a=s;for(const u of n.sourceLinks)u.y0=s+u.width/2,s+=u.width;for(const u of n.targetLinks)u.y1=a+u.width/2,a+=u.width}}function jt(){let t=0,n=0,s=1,a=1,u=24,_=8,g,p=It,i=dt,o,c,m=$t,b=Ot,y=6;function x(){const e={nodes:m.apply(null,arguments),links:b.apply(null,arguments)};return E(e),L(e),A(e),N(e),S(e),ut(e),e}x.update=function(e){return ut(e),e},x.nodeId=function(e){return arguments.length?(p=typeof e=="function"?e:Y(e),x):p},x.nodeAlign=function(e){return arguments.length?(i=typeof e=="function"?e:Y(e),x):i},x.nodeSort=function(e){return arguments.length?(o=e,x):o},x.nodeWidth=function(e){return arguments.length?(u=+e,x):u},x.nodePadding=function(e){return arguments.length?(_=g=+e,x):_},x.nodes=function(e){return arguments.length?(m=typeof e=="function"?e:Y(e),x):m},x.links=function(e){return arguments.length?(b=typeof e=="function"?e:Y(e),x):b},x.linkSort=function(e){return arguments.length?(c=e,x):c},x.size=function(e){return arguments.length?(t=n=0,s=+e[0],a=+e[1],x):[s-t,a-n]},x.extent=function(e){return arguments.length?(t=+e[0][0],s=+e[1][0],n=+e[0][1],a=+e[1][1],x):[[t,n],[s,a]]},x.iterations=function(e){return arguments.length?(y=+e,x):y};function E({nodes:e,links:f}){for(const[h,r]of e.entries())r.index=h,r.sourceLinks=[],r.targetLinks=[];const l=new Map(e.map((h,r)=>[p(h,r,e),h]));for(const[h,r]of f.entries()){r.index=h;let{source:k,target:v}=r;typeof k!="object"&&(k=r.source=ct(l,k)),typeof v!="object"&&(v=r.target=ct(l,v)),k.sourceLinks.push(r),v.targetLinks.push(r)}if(c!=null)for(const{sourceLinks:h,targetLinks:r}of e)h.sort(c),r.sort(c)}function L({nodes:e}){for(const f of e)f.value=f.fixedValue===void 0?Math.max(Z(f.sourceLinks,J),Z(f.targetLinks,J)):f.fixedValue}function A({nodes:e}){const f=e.length;let l=new Set(e),h=new Set,r=0;for(;l.size;){for(const k of l){k.depth=r;for(const{target:v}of k.sourceLinks)h.add(v)}if(++r>f)throw new Error("circular link");l=h,h=new Set}}function N({nodes:e}){const f=e.length;let l=new Set(e),h=new Set,r=0;for(;l.size;){for(const k of l){k.height=r;for(const{source:v}of k.targetLinks)h.add(v)}if(++r>f)throw new Error("circular link");l=h,h=new Set}}function I({nodes:e}){const f=ot(e,r=>r.depth)+1,l=(s-t-u)/(f-1),h=new Array(f);for(const r of e){const k=Math.max(0,Math.min(f-1,Math.floor(i.call(null,r,f))));r.layer=k,r.x0=t+k*l,r.x1=r.x0+u,h[k]?h[k].push(r):h[k]=[r]}if(o)for(const r of h)r.sort(o);return h}function j(e){const f=yt(e,l=>(a-n-(l.length-1)*g)/Z(l,J));for(const l of e){let h=n;for(const r of l){r.y0=h,r.y1=h+r.value*f,h=r.y1+g;for(const k of r.sourceLinks)k.width=k.value*f}h=(a-h+g)/(l.length+1);for(let r=0;rl.length)-1)),j(f);for(let l=0;l0))continue;let U=(R/z-v.y0)*f;v.y0+=U,v.y1+=U,w(v)}o===void 0&&k.sort(H),P(k,l)}}function O(e,f,l){for(let h=e.length,r=h-2;r>=0;--r){const k=e[r];for(const v of k){let R=0,z=0;for(const{target:W,value:K}of v.sourceLinks){let F=K*(W.layer-v.layer);R+=V(v,W)*F,z+=F}if(!(z>0))continue;let U=(R/z-v.y0)*f;v.y0+=U,v.y1+=U,w(v)}o===void 0&&k.sort(H),P(k,l)}}function P(e,f){const l=e.length>>1,h=e[l];d(e,h.y0-g,l-1,f),C(e,h.y1+g,l+1,f),d(e,a,e.length-1,f),C(e,n,0,f)}function C(e,f,l,h){for(;l1e-6&&(r.y0+=k,r.y1+=k),f=r.y1+g}}function d(e,f,l,h){for(;l>=0;--l){const r=e[l],k=(r.y1-f)*h;k>1e-6&&(r.y0-=k,r.y1-=k),f=r.y0-g}}function w({sourceLinks:e,targetLinks:f}){if(c===void 0){for(const{source:{sourceLinks:l}}of f)l.sort(at);for(const{target:{targetLinks:l}}of e)l.sort(lt)}}function $(e){if(c===void 0)for(const{sourceLinks:f,targetLinks:l}of e)f.sort(at),l.sort(lt)}function T(e,f){let l=e.y0-(e.sourceLinks.length-1)*g/2;for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;l+=r+g}for(const{source:h,width:r}of f.targetLinks){if(h===e)break;l-=r}return l}function V(e,f){let l=f.y0-(f.targetLinks.length-1)*g/2;for(const{source:h,width:r}of f.targetLinks){if(h===e)break;l+=r+g}for(const{target:h,width:r}of e.sourceLinks){if(h===f)break;l-=r}return l}return x}var tt=Math.PI,et=2*tt,D=1e-6,zt=et-D;function nt(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function gt(){return new nt}nt.prototype=gt.prototype={constructor:nt,moveTo:function(t,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,n){this._+="L"+(this._x1=+t)+","+(this._y1=+n)},quadraticCurveTo:function(t,n,s,a){this._+="Q"+ +t+","+ +n+","+(this._x1=+s)+","+(this._y1=+a)},bezierCurveTo:function(t,n,s,a,u,_){this._+="C"+ +t+","+ +n+","+ +s+","+ +a+","+(this._x1=+u)+","+(this._y1=+_)},arcTo:function(t,n,s,a,u){t=+t,n=+n,s=+s,a=+a,u=+u;var _=this._x1,g=this._y1,p=s-t,i=a-n,o=_-t,c=g-n,m=o*o+c*c;if(u<0)throw new Error("negative radius: "+u);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=n);else if(m>D)if(!(Math.abs(c*p-i*o)>D)||!u)this._+="L"+(this._x1=t)+","+(this._y1=n);else{var b=s-_,y=a-g,x=p*p+i*i,E=b*b+y*y,L=Math.sqrt(x),A=Math.sqrt(m),N=u*Math.tan((tt-Math.acos((x+m-E)/(2*L*A)))/2),I=N/A,j=N/L;Math.abs(I-1)>D&&(this._+="L"+(t+I*o)+","+(n+I*c)),this._+="A"+u+","+u+",0,0,"+ +(c*b>o*y)+","+(this._x1=t+j*p)+","+(this._y1=n+j*i)}},arc:function(t,n,s,a,u,_){t=+t,n=+n,s=+s,_=!!_;var g=s*Math.cos(a),p=s*Math.sin(a),i=t+g,o=n+p,c=1^_,m=_?a-u:u-a;if(s<0)throw new Error("negative radius: "+s);this._x1===null?this._+="M"+i+","+o:(Math.abs(this._x1-i)>D||Math.abs(this._y1-o)>D)&&(this._+="L"+i+","+o),s&&(m<0&&(m=m%et+et),m>zt?this._+="A"+s+","+s+",0,1,"+c+","+(t-g)+","+(n-p)+"A"+s+","+s+",0,1,"+c+","+(this._x1=i)+","+(this._y1=o):m>D&&(this._+="A"+s+","+s+",0,"+ +(m>=tt)+","+c+","+(this._x1=t+s*Math.cos(u))+","+(this._y1=n+s*Math.sin(u))))},rect:function(t,n,s,a){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +s+"v"+ +a+"h"+-s+"Z"},toString:function(){return this._}};function ht(t){return function(){return t}}function Dt(t){return t[0]}function Bt(t){return t[1]}var Vt=Array.prototype.slice;function Rt(t){return t.source}function Ut(t){return t.target}function Wt(t){var n=Rt,s=Ut,a=Dt,u=Bt,_=null;function g(){var p,i=Vt.call(arguments),o=n.apply(this,i),c=s.apply(this,i);if(_||(_=p=gt()),t(_,+a.apply(this,(i[0]=o,i)),+u.apply(this,i),+a.apply(this,(i[0]=c,i)),+u.apply(this,i)),p)return _=null,p+""||null}return g.source=function(p){return arguments.length?(n=p,g):n},g.target=function(p){return arguments.length?(s=p,g):s},g.x=function(p){return arguments.length?(a=typeof p=="function"?p:ht(+p),g):a},g.y=function(p){return arguments.length?(u=typeof p=="function"?p:ht(+p),g):u},g.context=function(p){return arguments.length?(_=p??null,g):_},g}function Ft(t,n,s,a,u){t.moveTo(n,s),t.bezierCurveTo(n=(n+a)/2,s,n,u,a,u)}function Gt(){return Wt(Ft)}function Yt(t){return[t.source.x1,t.y0]}function Ht(t){return[t.target.x0,t.y1]}function Xt(){return Gt().source(Yt).target(Ht)}var it=function(){var t=function(p,i,o,c){for(o=o||{},c=p.length;c--;o[p[c]]=i);return o},n=[1,9],s=[1,10],a=[1,5,10,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:function(i,o,c,m,b,y,x){var E=y.length-1;switch(b){case 7:const L=m.findOrCreateNode(y[E-4].trim().replaceAll('""','"')),A=m.findOrCreateNode(y[E-2].trim().replaceAll('""','"')),N=parseFloat(y[E].trim());m.addLink(L,A,N);break;case 8:case 9:case 11:this.$=y[E];break;case 10:this.$=y[E-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:n,20:s},{1:[2,6],7:11,10:[1,12]},t(s,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(a,[2,8]),t(a,[2,9]),{19:[1,16]},t(a,[2,11]),{1:[2,1]},{1:[2,5]},t(s,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:n,20:s},{15:18,16:7,17:8,18:n,20:s},{18:[1,19]},t(s,[2,3]),{12:[1,20]},t(a,[2,10]),{15:21,16:7,17:8,18:n,20:s},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(i,o){if(o.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=o,c}},parse:function(i){var o=this,c=[0],m=[],b=[null],y=[],x=this.table,E="",L=0,A=0,N=2,I=1,j=y.slice.call(arguments,1),S=Object.create(this.lexer),M={yy:{}};for(var O in this.yy)Object.prototype.hasOwnProperty.call(this.yy,O)&&(M.yy[O]=this.yy[O]);S.setInput(i,M.yy),M.yy.lexer=S,M.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var P=S.yylloc;y.push(P);var C=S.options&&S.options.ranges;typeof M.yy.parseError=="function"?this.parseError=M.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function d(){var v;return v=m.pop()||S.lex()||I,typeof v!="number"&&(v instanceof Array&&(m=v,v=m.pop()),v=o.symbols_[v]||v),v}for(var w,$,T,V,e={},f,l,h,r;;){if($=c[c.length-1],this.defaultActions[$]?T=this.defaultActions[$]:((w===null||typeof w>"u")&&(w=d()),T=x[$]&&x[$][w]),typeof T>"u"||!T.length||!T[0]){var k="";r=[];for(f in x[$])this.terminals_[f]&&f>N&&r.push("'"+this.terminals_[f]+"'");S.showPosition?k="Parse error on line "+(L+1)+`: `+S.showPosition()+` Expecting `+r.join(", ")+", got '"+(this.terminals_[w]||w)+"'":k="Parse error on line "+(L+1)+": Unexpected "+(w==I?"end of input":"'"+(this.terminals_[w]||w)+"'"),this.parseError(k,{text:S.match,token:this.terminals_[w]||w,line:S.yylineno,loc:P,expected:r})}if(T[0]instanceof Array&&T.length>1)throw new Error("Parse Error: multiple actions possible at state: "+$+", token: "+w);switch(T[0]){case 1:c.push(w),b.push(S.yytext),y.push(S.yylloc),c.push(T[1]),w=null,A=S.yyleng,E=S.yytext,L=S.yylineno,P=S.yylloc;break;case 2:if(l=this.productions_[T[1]][1],e.$=b[b.length-l],e._$={first_line:y[y.length-(l||1)].first_line,last_line:y[y.length-1].last_line,first_column:y[y.length-(l||1)].first_column,last_column:y[y.length-1].last_column},C&&(e._$.range=[y[y.length-(l||1)].range[0],y[y.length-1].range[1]]),V=this.performAction.apply(e,[E,A,L,M.yy,T[1],b,y].concat(j)),typeof V<"u")return V;l&&(c=c.slice(0,-1*l*2),b=b.slice(0,-1*l),y=y.slice(0,-1*l)),c.push(this.productions_[T[1]][0]),b.push(e.$),y.push(e._$),h=x[c[c.length-2]][c[c.length-1]],c.push(h);break;case 3:return!0}}return!0}},_=function(){var p={EOF:1,parseError:function(o,c){if(this.yy.parser)this.yy.parser.parseError(o,c);else throw new Error(o)},setInput:function(i,o){return this.yy=o||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var o=i.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},unput:function(i){var o=i.length,c=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var m=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var b=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===m.length?this.yylloc.first_column:0)+m[m.length-c.length].length-c[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[b[0],b[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(i){this.unput(this.match.slice(i))},pastInput:function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var i=this.pastInput(),o=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/chunks/sequenceDiagram-6894f283.xh2cdXdg.js b/assets/chunks/sequenceDiagram-66748113.CycNJCqh.js similarity index 99% rename from assets/chunks/sequenceDiagram-6894f283.xh2cdXdg.js rename to assets/chunks/sequenceDiagram-66748113.CycNJCqh.js index 105b54e0..fd5787b3 100644 --- a/assets/chunks/sequenceDiagram-6894f283.xh2cdXdg.js +++ b/assets/chunks/sequenceDiagram-66748113.CycNJCqh.js @@ -1,4 +1,4 @@ -import{g as we,F as ve,E as _e,c as st,s as $t,b as ke,a as Pe,G as Le,l as X,d as At,j as v,e as Ie,h as Lt,i as Ae,A as B,a_ as nt,a$ as wt,m as te,r as ee,aZ as Bt,aL as se,b0 as Ne}from"../app.CbQoAe_D.js";import{d as Se,a as Me,g as Nt,b as zt,c as Re,e as Ce}from"./svgDrawCommon-5e1cfd1d.Cpp7qDwc.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";var Yt=function(){var t=function(dt,w,k,L){for(k=k||{},L=dt.length;L--;k[dt[L]]=w);return k},e=[1,2],c=[1,3],s=[1,4],i=[2,4],a=[1,9],o=[1,11],l=[1,13],p=[1,14],r=[1,16],x=[1,17],T=[1,18],u=[1,24],g=[1,25],m=[1,26],_=[1,27],I=[1,28],V=[1,29],S=[1,30],O=[1,31],R=[1,32],q=[1,33],z=[1,34],J=[1,35],$=[1,36],H=[1,37],U=[1,38],F=[1,39],W=[1,41],Z=[1,42],K=[1,43],Q=[1,44],tt=[1,45],N=[1,46],y=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],j=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],rt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],A=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Gt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],ht=[68,69,70],ot=[1,120],Mt={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(w,k,L,b,M,h,Et){var d=h.length-1;switch(M){case 3:return b.apply(h[d]),h[d];case 4:case 9:this.$=[];break;case 5:case 10:h[d-1].push(h[d]),this.$=h[d-1];break;case 6:case 7:case 11:case 12:this.$=h[d];break;case 8:case 13:this.$=[];break;case 15:h[d].type="createParticipant",this.$=h[d];break;case 16:h[d-1].unshift({type:"boxStart",boxData:b.parseBoxData(h[d-2])}),h[d-1].push({type:"boxEnd",boxText:h[d-2]}),this.$=h[d-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(h[d-2]),sequenceIndexStep:Number(h[d-1]),sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(h[d-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:b.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:b.LINETYPE.ACTIVE_START,actor:h[d-1]};break;case 23:this.$={type:"activeEnd",signalType:b.LINETYPE.ACTIVE_END,actor:h[d-1]};break;case 29:b.setDiagramTitle(h[d].substring(6)),this.$=h[d].substring(6);break;case 30:b.setDiagramTitle(h[d].substring(7)),this.$=h[d].substring(7);break;case 31:this.$=h[d].trim(),b.setAccTitle(this.$);break;case 32:case 33:this.$=h[d].trim(),b.setAccDescription(this.$);break;case 34:h[d-1].unshift({type:"loopStart",loopText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.LOOP_START}),h[d-1].push({type:"loopEnd",loopText:h[d-2],signalType:b.LINETYPE.LOOP_END}),this.$=h[d-1];break;case 35:h[d-1].unshift({type:"rectStart",color:b.parseMessage(h[d-2]),signalType:b.LINETYPE.RECT_START}),h[d-1].push({type:"rectEnd",color:b.parseMessage(h[d-2]),signalType:b.LINETYPE.RECT_END}),this.$=h[d-1];break;case 36:h[d-1].unshift({type:"optStart",optText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.OPT_START}),h[d-1].push({type:"optEnd",optText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.OPT_END}),this.$=h[d-1];break;case 37:h[d-1].unshift({type:"altStart",altText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.ALT_START}),h[d-1].push({type:"altEnd",signalType:b.LINETYPE.ALT_END}),this.$=h[d-1];break;case 38:h[d-1].unshift({type:"parStart",parText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.PAR_START}),h[d-1].push({type:"parEnd",signalType:b.LINETYPE.PAR_END}),this.$=h[d-1];break;case 39:h[d-1].unshift({type:"parStart",parText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.PAR_OVER_START}),h[d-1].push({type:"parEnd",signalType:b.LINETYPE.PAR_END}),this.$=h[d-1];break;case 40:h[d-1].unshift({type:"criticalStart",criticalText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.CRITICAL_START}),h[d-1].push({type:"criticalEnd",signalType:b.LINETYPE.CRITICAL_END}),this.$=h[d-1];break;case 41:h[d-1].unshift({type:"breakStart",breakText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.BREAK_START}),h[d-1].push({type:"breakEnd",optText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.BREAK_END}),this.$=h[d-1];break;case 43:this.$=h[d-3].concat([{type:"option",optionText:b.parseMessage(h[d-1]),signalType:b.LINETYPE.CRITICAL_OPTION},h[d]]);break;case 45:this.$=h[d-3].concat([{type:"and",parText:b.parseMessage(h[d-1]),signalType:b.LINETYPE.PAR_AND},h[d]]);break;case 47:this.$=h[d-3].concat([{type:"else",altText:b.parseMessage(h[d-1]),signalType:b.LINETYPE.ALT_ELSE},h[d]]);break;case 48:h[d-3].draw="participant",h[d-3].type="addParticipant",h[d-3].description=b.parseMessage(h[d-1]),this.$=h[d-3];break;case 49:h[d-1].draw="participant",h[d-1].type="addParticipant",this.$=h[d-1];break;case 50:h[d-3].draw="actor",h[d-3].type="addParticipant",h[d-3].description=b.parseMessage(h[d-1]),this.$=h[d-3];break;case 51:h[d-1].draw="actor",h[d-1].type="addParticipant",this.$=h[d-1];break;case 52:h[d-1].type="destroyParticipant",this.$=h[d-1];break;case 53:this.$=[h[d-1],{type:"addNote",placement:h[d-2],actor:h[d-1].actor,text:h[d]}];break;case 54:h[d-2]=[].concat(h[d-1],h[d-1]).slice(0,2),h[d-2][0]=h[d-2][0].actor,h[d-2][1]=h[d-2][1].actor,this.$=[h[d-1],{type:"addNote",placement:b.PLACEMENT.OVER,actor:h[d-2].slice(0,2),text:h[d]}];break;case 55:this.$=[h[d-1],{type:"addLinks",actor:h[d-1].actor,text:h[d]}];break;case 56:this.$=[h[d-1],{type:"addALink",actor:h[d-1].actor,text:h[d]}];break;case 57:this.$=[h[d-1],{type:"addProperties",actor:h[d-1].actor,text:h[d]}];break;case 58:this.$=[h[d-1],{type:"addDetails",actor:h[d-1].actor,text:h[d]}];break;case 61:this.$=[h[d-2],h[d]];break;case 62:this.$=h[d];break;case 63:this.$=b.PLACEMENT.LEFTOF;break;case 64:this.$=b.PLACEMENT.RIGHTOF;break;case 65:this.$=[h[d-4],h[d-1],{type:"addMessage",from:h[d-4].actor,to:h[d-1].actor,signalType:h[d-3],msg:h[d],activate:!0},{type:"activeStart",signalType:b.LINETYPE.ACTIVE_START,actor:h[d-1]}];break;case 66:this.$=[h[d-4],h[d-1],{type:"addMessage",from:h[d-4].actor,to:h[d-1].actor,signalType:h[d-3],msg:h[d]},{type:"activeEnd",signalType:b.LINETYPE.ACTIVE_END,actor:h[d-4]}];break;case 67:this.$=[h[d-3],h[d-1],{type:"addMessage",from:h[d-3].actor,to:h[d-1].actor,signalType:h[d-2],msg:h[d]}];break;case 68:this.$={type:"addParticipant",actor:h[d]};break;case 69:this.$=b.LINETYPE.SOLID_OPEN;break;case 70:this.$=b.LINETYPE.DOTTED_OPEN;break;case 71:this.$=b.LINETYPE.SOLID;break;case 72:this.$=b.LINETYPE.DOTTED;break;case 73:this.$=b.LINETYPE.SOLID_CROSS;break;case 74:this.$=b.LINETYPE.DOTTED_CROSS;break;case 75:this.$=b.LINETYPE.SOLID_POINT;break;case 76:this.$=b.LINETYPE.DOTTED_POINT;break;case 77:this.$=b.parseMessage(h[d].trim().substring(1));break}},table:[{3:1,4:e,5:c,6:s},{1:[3]},{3:5,4:e,5:c,6:s},{3:6,4:e,5:c,6:s},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:o,8:8,9:10,12:12,13:l,14:p,17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},t(y,[2,5]),{9:47,12:12,13:l,14:p,17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},t(y,[2,7]),t(y,[2,8]),t(y,[2,14]),{12:48,50:H,52:U,53:F},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:N},{22:55,70:N},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(y,[2,29]),t(y,[2,30]),{32:[1,61]},{34:[1,62]},t(y,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:N},{22:72,70:N},{22:73,70:N},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:N},{22:88,70:N},{22:89,70:N},{22:90,70:N},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(y,[2,6]),t(y,[2,15]),t(P,[2,9],{10:91}),t(y,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(y,[2,21]),{5:[1,95]},{5:[1,96]},t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(y,[2,31]),t(y,[2,32]),t(j,i,{7:97}),t(j,i,{7:98}),t(j,i,{7:99}),t(rt,i,{40:100,7:101}),t(A,i,{42:102,7:103}),t(A,i,{7:103,42:104}),t(Gt,i,{45:105,7:106}),t(j,i,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:N},t(ht,[2,69]),t(ht,[2,70]),t(ht,[2,71]),t(ht,[2,72]),t(ht,[2,73]),t(ht,[2,74]),t(ht,[2,75]),t(ht,[2,76]),{22:116,70:N},{22:118,58:117,70:N},{70:[2,63]},{70:[2,64]},{56:119,79:ot},{56:121,79:ot},{56:122,79:ot},{56:123,79:ot},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:H,52:U,53:F},{5:[1,129]},t(y,[2,19]),t(y,[2,20]),t(y,[2,22]),t(y,[2,23]),{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,130],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,131],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,132],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{16:[1,133]},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[2,46],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,49:[1,134],50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{16:[1,135]},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[2,44],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,48:[1,136],50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{16:[1,137]},{16:[1,138]},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[2,42],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,47:[1,139],50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,140],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{15:[1,141]},t(y,[2,49]),{15:[1,142]},t(y,[2,51]),t(y,[2,52]),{22:143,70:N},{22:144,70:N},{56:145,79:ot},{56:146,79:ot},{56:147,79:ot},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(y,[2,16]),t(P,[2,10]),{12:149,50:H,52:U,53:F},t(P,[2,12]),t(P,[2,13]),t(y,[2,18]),t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),{15:[1,150]},t(y,[2,38]),{15:[1,151]},t(y,[2,39]),t(y,[2,40]),{15:[1,152]},t(y,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:ot},{56:156,79:ot},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:N},t(P,[2,11]),t(rt,i,{7:101,40:158}),t(A,i,{7:103,42:159}),t(Gt,i,{7:106,45:160}),t(y,[2,48]),t(y,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(w,k){if(k.recoverable)this.trace(w);else{var L=new Error(w);throw L.hash=k,L}},parse:function(w){var k=this,L=[0],b=[],M=[null],h=[],Et=this.table,d="",_t=0,Xt=0,Te=2,Jt=1,be=h.slice.call(arguments,1),Y=Object.create(this.lexer),pt={yy:{}};for(var Ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ct)&&(pt.yy[Ct]=this.yy[Ct]);Y.setInput(w,pt.yy),pt.yy.lexer=Y,pt.yy.parser=this,typeof Y.yylloc>"u"&&(Y.yylloc={});var Dt=Y.yylloc;h.push(Dt);var Ee=Y.options&&Y.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function me(){var lt;return lt=b.pop()||Y.lex()||Jt,typeof lt!="number"&&(lt instanceof Array&&(b=lt,lt=b.pop()),lt=k.symbols_[lt]||lt),lt}for(var G,ut,et,Vt,yt={},kt,ct,Zt,Pt;;){if(ut=L[L.length-1],this.defaultActions[ut]?et=this.defaultActions[ut]:((G===null||typeof G>"u")&&(G=me()),et=Et[ut]&&Et[ut][G]),typeof et>"u"||!et.length||!et[0]){var Ot="";Pt=[];for(kt in Et[ut])this.terminals_[kt]&&kt>Te&&Pt.push("'"+this.terminals_[kt]+"'");Y.showPosition?Ot="Parse error on line "+(_t+1)+`: +import{g as we,y as ve,x as _e,c as st,s as $t,b as ke,a as Pe,A as Le,l as X,d as At,j as v,e as Ie,h as Lt,i as Ae,z as B,a_ as nt,a$ as wt,m as te,r as ee,aZ as Bt,aL as se,b0 as Ne}from"../app.DRN3unl1.js";import{d as Se,a as Me,g as Nt,b as zt,c as Re,e as Ce}from"./svgDrawCommon-9d162435.wUjoN1G-.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";var Yt=function(){var t=function(dt,w,k,L){for(k=k||{},L=dt.length;L--;k[dt[L]]=w);return k},e=[1,2],c=[1,3],s=[1,4],i=[2,4],a=[1,9],o=[1,11],l=[1,13],p=[1,14],r=[1,16],x=[1,17],T=[1,18],u=[1,24],g=[1,25],m=[1,26],_=[1,27],I=[1,28],V=[1,29],S=[1,30],O=[1,31],R=[1,32],q=[1,33],z=[1,34],J=[1,35],$=[1,36],H=[1,37],U=[1,38],F=[1,39],W=[1,41],Z=[1,42],K=[1,43],Q=[1,44],tt=[1,45],N=[1,46],y=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],P=[4,5,16,50,52,53],j=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],rt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],A=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Gt=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],ht=[68,69,70],ot=[1,120],Mt={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,DOTTED_ARROW:74,SOLID_CROSS:75,DOTTED_CROSS:76,SOLID_POINT:77,DOTTED_POINT:78,TXT:79,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"DOTTED_ARROW",75:"SOLID_CROSS",76:"DOTTED_CROSS",77:"SOLID_POINT",78:"DOTTED_POINT",79:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:function(w,k,L,b,M,h,Et){var d=h.length-1;switch(M){case 3:return b.apply(h[d]),h[d];case 4:case 9:this.$=[];break;case 5:case 10:h[d-1].push(h[d]),this.$=h[d-1];break;case 6:case 7:case 11:case 12:this.$=h[d];break;case 8:case 13:this.$=[];break;case 15:h[d].type="createParticipant",this.$=h[d];break;case 16:h[d-1].unshift({type:"boxStart",boxData:b.parseBoxData(h[d-2])}),h[d-1].push({type:"boxEnd",boxText:h[d-2]}),this.$=h[d-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(h[d-2]),sequenceIndexStep:Number(h[d-1]),sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(h[d-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:b.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:b.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:b.LINETYPE.ACTIVE_START,actor:h[d-1]};break;case 23:this.$={type:"activeEnd",signalType:b.LINETYPE.ACTIVE_END,actor:h[d-1]};break;case 29:b.setDiagramTitle(h[d].substring(6)),this.$=h[d].substring(6);break;case 30:b.setDiagramTitle(h[d].substring(7)),this.$=h[d].substring(7);break;case 31:this.$=h[d].trim(),b.setAccTitle(this.$);break;case 32:case 33:this.$=h[d].trim(),b.setAccDescription(this.$);break;case 34:h[d-1].unshift({type:"loopStart",loopText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.LOOP_START}),h[d-1].push({type:"loopEnd",loopText:h[d-2],signalType:b.LINETYPE.LOOP_END}),this.$=h[d-1];break;case 35:h[d-1].unshift({type:"rectStart",color:b.parseMessage(h[d-2]),signalType:b.LINETYPE.RECT_START}),h[d-1].push({type:"rectEnd",color:b.parseMessage(h[d-2]),signalType:b.LINETYPE.RECT_END}),this.$=h[d-1];break;case 36:h[d-1].unshift({type:"optStart",optText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.OPT_START}),h[d-1].push({type:"optEnd",optText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.OPT_END}),this.$=h[d-1];break;case 37:h[d-1].unshift({type:"altStart",altText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.ALT_START}),h[d-1].push({type:"altEnd",signalType:b.LINETYPE.ALT_END}),this.$=h[d-1];break;case 38:h[d-1].unshift({type:"parStart",parText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.PAR_START}),h[d-1].push({type:"parEnd",signalType:b.LINETYPE.PAR_END}),this.$=h[d-1];break;case 39:h[d-1].unshift({type:"parStart",parText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.PAR_OVER_START}),h[d-1].push({type:"parEnd",signalType:b.LINETYPE.PAR_END}),this.$=h[d-1];break;case 40:h[d-1].unshift({type:"criticalStart",criticalText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.CRITICAL_START}),h[d-1].push({type:"criticalEnd",signalType:b.LINETYPE.CRITICAL_END}),this.$=h[d-1];break;case 41:h[d-1].unshift({type:"breakStart",breakText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.BREAK_START}),h[d-1].push({type:"breakEnd",optText:b.parseMessage(h[d-2]),signalType:b.LINETYPE.BREAK_END}),this.$=h[d-1];break;case 43:this.$=h[d-3].concat([{type:"option",optionText:b.parseMessage(h[d-1]),signalType:b.LINETYPE.CRITICAL_OPTION},h[d]]);break;case 45:this.$=h[d-3].concat([{type:"and",parText:b.parseMessage(h[d-1]),signalType:b.LINETYPE.PAR_AND},h[d]]);break;case 47:this.$=h[d-3].concat([{type:"else",altText:b.parseMessage(h[d-1]),signalType:b.LINETYPE.ALT_ELSE},h[d]]);break;case 48:h[d-3].draw="participant",h[d-3].type="addParticipant",h[d-3].description=b.parseMessage(h[d-1]),this.$=h[d-3];break;case 49:h[d-1].draw="participant",h[d-1].type="addParticipant",this.$=h[d-1];break;case 50:h[d-3].draw="actor",h[d-3].type="addParticipant",h[d-3].description=b.parseMessage(h[d-1]),this.$=h[d-3];break;case 51:h[d-1].draw="actor",h[d-1].type="addParticipant",this.$=h[d-1];break;case 52:h[d-1].type="destroyParticipant",this.$=h[d-1];break;case 53:this.$=[h[d-1],{type:"addNote",placement:h[d-2],actor:h[d-1].actor,text:h[d]}];break;case 54:h[d-2]=[].concat(h[d-1],h[d-1]).slice(0,2),h[d-2][0]=h[d-2][0].actor,h[d-2][1]=h[d-2][1].actor,this.$=[h[d-1],{type:"addNote",placement:b.PLACEMENT.OVER,actor:h[d-2].slice(0,2),text:h[d]}];break;case 55:this.$=[h[d-1],{type:"addLinks",actor:h[d-1].actor,text:h[d]}];break;case 56:this.$=[h[d-1],{type:"addALink",actor:h[d-1].actor,text:h[d]}];break;case 57:this.$=[h[d-1],{type:"addProperties",actor:h[d-1].actor,text:h[d]}];break;case 58:this.$=[h[d-1],{type:"addDetails",actor:h[d-1].actor,text:h[d]}];break;case 61:this.$=[h[d-2],h[d]];break;case 62:this.$=h[d];break;case 63:this.$=b.PLACEMENT.LEFTOF;break;case 64:this.$=b.PLACEMENT.RIGHTOF;break;case 65:this.$=[h[d-4],h[d-1],{type:"addMessage",from:h[d-4].actor,to:h[d-1].actor,signalType:h[d-3],msg:h[d],activate:!0},{type:"activeStart",signalType:b.LINETYPE.ACTIVE_START,actor:h[d-1]}];break;case 66:this.$=[h[d-4],h[d-1],{type:"addMessage",from:h[d-4].actor,to:h[d-1].actor,signalType:h[d-3],msg:h[d]},{type:"activeEnd",signalType:b.LINETYPE.ACTIVE_END,actor:h[d-4]}];break;case 67:this.$=[h[d-3],h[d-1],{type:"addMessage",from:h[d-3].actor,to:h[d-1].actor,signalType:h[d-2],msg:h[d]}];break;case 68:this.$={type:"addParticipant",actor:h[d]};break;case 69:this.$=b.LINETYPE.SOLID_OPEN;break;case 70:this.$=b.LINETYPE.DOTTED_OPEN;break;case 71:this.$=b.LINETYPE.SOLID;break;case 72:this.$=b.LINETYPE.DOTTED;break;case 73:this.$=b.LINETYPE.SOLID_CROSS;break;case 74:this.$=b.LINETYPE.DOTTED_CROSS;break;case 75:this.$=b.LINETYPE.SOLID_POINT;break;case 76:this.$=b.LINETYPE.DOTTED_POINT;break;case 77:this.$=b.parseMessage(h[d].trim().substring(1));break}},table:[{3:1,4:e,5:c,6:s},{1:[3]},{3:5,4:e,5:c,6:s},{3:6,4:e,5:c,6:s},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:o,8:8,9:10,12:12,13:l,14:p,17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},t(y,[2,5]),{9:47,12:12,13:l,14:p,17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},t(y,[2,7]),t(y,[2,8]),t(y,[2,14]),{12:48,50:H,52:U,53:F},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:N},{22:55,70:N},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(y,[2,29]),t(y,[2,30]),{32:[1,61]},{34:[1,62]},t(y,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:N},{22:72,70:N},{22:73,70:N},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82]},{55:83,57:[1,84],65:[1,85],66:[1,86]},{22:87,70:N},{22:88,70:N},{22:89,70:N},{22:90,70:N},t([5,51,64,71,72,73,74,75,76,77,78,79],[2,68]),t(y,[2,6]),t(y,[2,15]),t(P,[2,9],{10:91}),t(y,[2,17]),{5:[1,93],19:[1,92]},{5:[1,94]},t(y,[2,21]),{5:[1,95]},{5:[1,96]},t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(y,[2,31]),t(y,[2,32]),t(j,i,{7:97}),t(j,i,{7:98}),t(j,i,{7:99}),t(rt,i,{40:100,7:101}),t(A,i,{42:102,7:103}),t(A,i,{7:103,42:104}),t(Gt,i,{45:105,7:106}),t(j,i,{7:107}),{5:[1,109],51:[1,108]},{5:[1,111],51:[1,110]},{5:[1,112]},{22:115,68:[1,113],69:[1,114],70:N},t(ht,[2,69]),t(ht,[2,70]),t(ht,[2,71]),t(ht,[2,72]),t(ht,[2,73]),t(ht,[2,74]),t(ht,[2,75]),t(ht,[2,76]),{22:116,70:N},{22:118,58:117,70:N},{70:[2,63]},{70:[2,64]},{56:119,79:ot},{56:121,79:ot},{56:122,79:ot},{56:123,79:ot},{4:[1,126],5:[1,128],11:125,12:127,16:[1,124],50:H,52:U,53:F},{5:[1,129]},t(y,[2,19]),t(y,[2,20]),t(y,[2,22]),t(y,[2,23]),{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,130],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,131],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,132],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{16:[1,133]},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[2,46],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,49:[1,134],50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{16:[1,135]},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[2,44],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,48:[1,136],50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{16:[1,137]},{16:[1,138]},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[2,42],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,47:[1,139],50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{4:a,5:o,8:8,9:10,12:12,13:l,14:p,16:[1,140],17:15,18:r,21:x,22:40,23:T,24:19,25:20,26:21,27:22,28:23,29:u,30:g,31:m,33:_,35:I,36:V,37:S,38:O,39:R,41:q,43:z,44:J,46:$,50:H,52:U,53:F,54:W,59:Z,60:K,61:Q,62:tt,70:N},{15:[1,141]},t(y,[2,49]),{15:[1,142]},t(y,[2,51]),t(y,[2,52]),{22:143,70:N},{22:144,70:N},{56:145,79:ot},{56:146,79:ot},{56:147,79:ot},{64:[1,148],79:[2,62]},{5:[2,55]},{5:[2,77]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(y,[2,16]),t(P,[2,10]),{12:149,50:H,52:U,53:F},t(P,[2,12]),t(P,[2,13]),t(y,[2,18]),t(y,[2,34]),t(y,[2,35]),t(y,[2,36]),t(y,[2,37]),{15:[1,150]},t(y,[2,38]),{15:[1,151]},t(y,[2,39]),t(y,[2,40]),{15:[1,152]},t(y,[2,41]),{5:[1,153]},{5:[1,154]},{56:155,79:ot},{56:156,79:ot},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:157,70:N},t(P,[2,11]),t(rt,i,{7:101,40:158}),t(A,i,{7:103,42:159}),t(Gt,i,{7:106,45:160}),t(y,[2,48]),t(y,[2,50]),{5:[2,65]},{5:[2,66]},{79:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],85:[2,63],86:[2,64],119:[2,55],120:[2,77],121:[2,56],122:[2,57],123:[2,58],145:[2,67],146:[2,53],147:[2,54],155:[2,65],156:[2,66],157:[2,61],158:[2,47],159:[2,45],160:[2,43]},parseError:function(w,k){if(k.recoverable)this.trace(w);else{var L=new Error(w);throw L.hash=k,L}},parse:function(w){var k=this,L=[0],b=[],M=[null],h=[],Et=this.table,d="",_t=0,Xt=0,Te=2,Jt=1,be=h.slice.call(arguments,1),Y=Object.create(this.lexer),pt={yy:{}};for(var Ct in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ct)&&(pt.yy[Ct]=this.yy[Ct]);Y.setInput(w,pt.yy),pt.yy.lexer=Y,pt.yy.parser=this,typeof Y.yylloc>"u"&&(Y.yylloc={});var Dt=Y.yylloc;h.push(Dt);var Ee=Y.options&&Y.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function me(){var lt;return lt=b.pop()||Y.lex()||Jt,typeof lt!="number"&&(lt instanceof Array&&(b=lt,lt=b.pop()),lt=k.symbols_[lt]||lt),lt}for(var G,ut,et,Vt,yt={},kt,ct,Zt,Pt;;){if(ut=L[L.length-1],this.defaultActions[ut]?et=this.defaultActions[ut]:((G===null||typeof G>"u")&&(G=me()),et=Et[ut]&&Et[ut][G]),typeof et>"u"||!et.length||!et[0]){var Ot="";Pt=[];for(kt in Et[ut])this.terminals_[kt]&&kt>Te&&Pt.push("'"+this.terminals_[kt]+"'");Y.showPosition?Ot="Parse error on line "+(_t+1)+`: `+Y.showPosition()+` Expecting `+Pt.join(", ")+", got '"+(this.terminals_[G]||G)+"'":Ot="Parse error on line "+(_t+1)+": Unexpected "+(G==Jt?"end of input":"'"+(this.terminals_[G]||G)+"'"),this.parseError(Ot,{text:Y.match,token:this.terminals_[G]||G,line:Y.yylineno,loc:Dt,expected:Pt})}if(et[0]instanceof Array&&et.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ut+", token: "+G);switch(et[0]){case 1:L.push(G),M.push(Y.yytext),h.push(Y.yylloc),L.push(et[1]),G=null,Xt=Y.yyleng,d=Y.yytext,_t=Y.yylineno,Dt=Y.yylloc;break;case 2:if(ct=this.productions_[et[1]][1],yt.$=M[M.length-ct],yt._$={first_line:h[h.length-(ct||1)].first_line,last_line:h[h.length-1].last_line,first_column:h[h.length-(ct||1)].first_column,last_column:h[h.length-1].last_column},Ee&&(yt._$.range=[h[h.length-(ct||1)].range[0],h[h.length-1].range[1]]),Vt=this.performAction.apply(yt,[d,Xt,_t,pt.yy,et[1],M,h].concat(be)),typeof Vt<"u")return Vt;ct&&(L=L.slice(0,-1*ct*2),M=M.slice(0,-1*ct),h=h.slice(0,-1*ct)),L.push(this.productions_[et[1]][0]),M.push(yt.$),h.push(yt._$),Zt=Et[L[L.length-2]][L[L.length-1]],L.push(Zt);break;case 3:return!0}}return!0}},ye=function(){var dt={EOF:1,parseError:function(k,L){if(this.yy.parser)this.yy.parser.parseError(k,L);else throw new Error(k)},setInput:function(w,k){return this.yy=k||this.yy||{},this._input=w,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var w=this._input[0];this.yytext+=w,this.yyleng++,this.offset++,this.match+=w,this.matched+=w;var k=w.match(/(?:\r\n?|\n).*/g);return k?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),w},unput:function(w){var k=w.length,L=w.split(/(?:\r\n?|\n)/g);this._input=w+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-k),this.offset-=k;var b=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),L.length-1&&(this.yylineno-=L.length-1);var M=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:L?(L.length===b.length?this.yylloc.first_column:0)+b[b.length-L.length].length-L[0].length:this.yylloc.first_column-k},this.options.ranges&&(this.yylloc.range=[M[0],M[0]+this.yyleng-k]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(w){this.unput(this.match.slice(w))},pastInput:function(){var w=this.matched.substr(0,this.matched.length-this.match.length);return(w.length>20?"...":"")+w.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var w=this.match;return w.length<20&&(w+=this._input.substr(0,20-w.length)),(w.substr(0,20)+(w.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var w=this.pastInput(),k=new Array(w.length+1).join("-");return w+this.upcomingInput()+` diff --git a/assets/chunks/stateDiagram-5dee940d.BBcnAHJj.js b/assets/chunks/stateDiagram-35d39939.CGFuH3-m.js similarity index 92% rename from assets/chunks/stateDiagram-5dee940d.BBcnAHJj.js rename to assets/chunks/stateDiagram-35d39939.CGFuH3-m.js index 3438a9e7..71d1b44e 100644 --- a/assets/chunks/stateDiagram-5dee940d.BBcnAHJj.js +++ b/assets/chunks/stateDiagram-35d39939.CGFuH3-m.js @@ -1 +1 @@ -import{p as P,d as N,s as W}from"./styles-0784dbeb.Dyb4k6WS.js";import{c as t,h as H,l as b,i as R,j as T,ap as v,A as U}from"../app.CbQoAe_D.js";import{G as C}from"./graph.CwfrPCLx.js";import{l as F}from"./layout.Ds1muZd1.js";import{l as $}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const O=e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),X=e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),J=(e,i)=>{const o=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),c=o.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c.width+2*t().state.padding).attr("height",c.height+2*t().state.padding).attr("rx",t().state.radius),o},Y=(e,i)=>{const o=function(l,m,w){const E=l.append("tspan").attr("x",2*t().state.padding).text(m);w||E.attr("dy",t().state.textHeight)},s=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),g=s.height,p=e.append("text").attr("x",t().state.padding).attr("y",g+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,r=!0;i.descriptions.forEach(function(l){a||(o(p,l,r),r=!1),a=!1});const y=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+g+t().state.dividerMargin/2).attr("y2",t().state.padding+g+t().state.dividerMargin/2).attr("class","descr-divider"),x=p.node().getBBox(),d=Math.max(x.width,s.width);return y.attr("x2",d+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",d+2*t().state.padding).attr("height",x.height+g+2*t().state.padding).attr("rx",t().state.radius),e},I=(e,i,o)=>{const c=t().state.padding,s=2*t().state.padding,g=e.node().getBBox(),p=g.width,a=g.x,r=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),x=r.node().getBBox().width+s;let d=Math.max(x,p);d===p&&(d=d+s);let l;const m=e.node().getBBox();i.doc,l=a-c,x>p&&(l=(p-d)/2+c),Math.abs(a-m.x)p&&(l=a-(x-p)/2);const w=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",l).attr("y",w).attr("class",o?"alt-composit":"composit").attr("width",d).attr("height",m.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),r.attr("x",l+c),x<=p&&r.attr("x",a+(d-s)/2-x/2+c),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",m.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},_=e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),q=(e,i)=>{let o=t().state.forkWidth,c=t().state.forkHeight;if(i.parentId){let s=o;o=c,c=s}return e.append("rect").style("stroke","black").style("fill","black").attr("width",o).attr("height",c).attr("x",t().state.padding).attr("y",t().state.padding)},Z=(e,i,o,c)=>{let s=0;const g=c.append("text");g.style("text-anchor","start"),g.attr("class","noteText");let p=e.replace(/\r\n/g,"
");p=p.replace(/\n/g,"
");const a=p.split(T.lineBreakRegex);let r=1.25*t().state.noteMargin;for(const y of a){const x=y.trim();if(x.length>0){const d=g.append("tspan");if(d.text(x),r===0){const l=d.node().getBBox();r+=l.height}s+=r,d.attr("x",i+t().state.noteMargin),d.attr("y",o+s+1.25*t().state.noteMargin)}}return{textWidth:g.node().getBBox().width,textHeight:s}},j=(e,i)=>{i.attr("class","state-note");const o=i.append("rect").attr("x",0).attr("y",t().state.padding),c=i.append("g"),{textWidth:s,textHeight:g}=Z(e,0,0,c);return o.attr("height",g+2*t().state.noteMargin),o.attr("width",s+t().state.noteMargin*2),o},L=function(e,i){const o=i.id,c={id:o,label:i.id,width:0,height:0},s=e.append("g").attr("id",o).attr("class","stateGroup");i.type==="start"&&O(s),i.type==="end"&&_(s),(i.type==="fork"||i.type==="join")&&q(s,i),i.type==="note"&&j(i.note.text,s),i.type==="divider"&&X(s),i.type==="default"&&i.descriptions.length===0&&J(s,i),i.type==="default"&&i.descriptions.length>0&&Y(s,i);const g=s.node().getBBox();return c.width=g.width+2*t().state.padding,c.height=g.height+2*t().state.padding,c};let A=0;const K=function(e,i,o){const c=function(r){switch(r){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}};i.points=i.points.filter(r=>!Number.isNaN(r.y));const s=i.points,g=$().x(function(r){return r.x}).y(function(r){return r.y}).curve(v),p=e.append("path").attr("d",g(s)).attr("id","edge"+A).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),p.attr("marker-end","url("+a+"#"+c(N.relationType.DEPENDENCY)+"End)"),o.title!==void 0){const r=e.append("g").attr("class","stateLabel"),{x:y,y:x}=U.calcLabelPosition(i.points),d=T.getRows(o.title);let l=0;const m=[];let w=0,E=0;for(let u=0;u<=d.length;u++){const h=r.append("text").attr("text-anchor","middle").text(d[u]).attr("x",y).attr("y",x+l),f=h.node().getBBox();w=Math.max(w,f.width),E=Math.min(E,f.x),b.info(f.x,y,x+l),l===0&&(l=h.node().getBBox().height,b.info("Title height",l,x)),m.push(h)}let k=l*d.length;if(d.length>1){const u=(d.length-1)*l*.5;m.forEach((h,f)=>h.attr("y",x+f*l-u)),k=l*d.length}const n=r.node().getBBox();r.insert("rect",":first-child").attr("class","box").attr("x",y-w/2-t().state.padding/2).attr("y",x-k/2-t().state.padding/2-3.5).attr("width",w+t().state.padding).attr("height",k+t().state.padding),b.info(n)}A++};let B;const z={},Q=function(){},V=function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},D=function(e,i,o,c){B=t().state;const s=t().securityLevel;let g;s==="sandbox"&&(g=H("#i"+i));const p=s==="sandbox"?H(g.nodes()[0].contentDocument.body):H("body"),a=s==="sandbox"?g.nodes()[0].contentDocument:document;b.debug("Rendering diagram "+e);const r=p.select(`[id='${i}']`);V(r);const y=c.db.getRootDoc();G(y,r,void 0,!1,p,a,c);const x=B.padding,d=r.node().getBBox(),l=d.width+x*2,m=d.height+x*2,w=l*1.75;R(r,m,w,B.useMaxWidth),r.attr("viewBox",`${d.x-B.padding} ${d.y-B.padding} `+l+" "+m)},tt=e=>e?e.length*B.fontSizeFactor:1,G=(e,i,o,c,s,g,p)=>{const a=new C({compound:!0,multigraph:!0});let r,y=!0;for(r=0;r{const f=h.parentElement;let S=0,M=0;f&&(f.parentElement&&(S=f.parentElement.getBBox().width),M=parseInt(f.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",S-M-8)})):b.debug("No Node "+n+": "+JSON.stringify(a.node(n)))});let E=w.getBBox();a.edges().forEach(function(n){n!==void 0&&a.edge(n)!==void 0&&(b.debug("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(a.edge(n))),K(i,a.edge(n),a.edge(n).relation))}),E=w.getBBox();const k={id:o||"root",label:o||"root",width:0,height:0};return k.width=E.width+2*B.padding,k.height=E.height+2*B.padding,b.debug("Doc rendered",k,a),k},et={setConf:Q,draw:D},gt={parser:P,db:N,renderer:et,styles:W,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,N.clear()}};export{gt as diagram}; +import{p as P,d as N,s as W}from"./styles-de3becd0.CAskXyHY.js";import{c as t,h as H,l as b,i as R,j as T,ao as v,z as U}from"../app.DRN3unl1.js";import{G as C}from"./graph.C4kgFXP1.js";import{l as F}from"./layout.C5Nv6jKv.js";import{l as $}from"./line.DpDoeUQJ.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const O=e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),X=e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),J=(e,i)=>{const o=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),c=o.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",c.width+2*t().state.padding).attr("height",c.height+2*t().state.padding).attr("rx",t().state.radius),o},Y=(e,i)=>{const o=function(l,m,w){const E=l.append("tspan").attr("x",2*t().state.padding).text(m);w||E.attr("dy",t().state.textHeight)},s=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.descriptions[0]).node().getBBox(),g=s.height,p=e.append("text").attr("x",t().state.padding).attr("y",g+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let a=!0,r=!0;i.descriptions.forEach(function(l){a||(o(p,l,r),r=!1),a=!1});const y=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+g+t().state.dividerMargin/2).attr("y2",t().state.padding+g+t().state.dividerMargin/2).attr("class","descr-divider"),x=p.node().getBBox(),d=Math.max(x.width,s.width);return y.attr("x2",d+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",d+2*t().state.padding).attr("height",x.height+g+2*t().state.padding).attr("rx",t().state.radius),e},I=(e,i,o)=>{const c=t().state.padding,s=2*t().state.padding,g=e.node().getBBox(),p=g.width,a=g.x,r=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(i.id),x=r.node().getBBox().width+s;let d=Math.max(x,p);d===p&&(d=d+s);let l;const m=e.node().getBBox();i.doc,l=a-c,x>p&&(l=(p-d)/2+c),Math.abs(a-m.x)p&&(l=a-(x-p)/2);const w=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",l).attr("y",w).attr("class",o?"alt-composit":"composit").attr("width",d).attr("height",m.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),r.attr("x",l+c),x<=p&&r.attr("x",a+(d-s)/2-x/2+c),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",l).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",d).attr("height",m.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},_=e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),q=(e,i)=>{let o=t().state.forkWidth,c=t().state.forkHeight;if(i.parentId){let s=o;o=c,c=s}return e.append("rect").style("stroke","black").style("fill","black").attr("width",o).attr("height",c).attr("x",t().state.padding).attr("y",t().state.padding)},Z=(e,i,o,c)=>{let s=0;const g=c.append("text");g.style("text-anchor","start"),g.attr("class","noteText");let p=e.replace(/\r\n/g,"
");p=p.replace(/\n/g,"
");const a=p.split(T.lineBreakRegex);let r=1.25*t().state.noteMargin;for(const y of a){const x=y.trim();if(x.length>0){const d=g.append("tspan");if(d.text(x),r===0){const l=d.node().getBBox();r+=l.height}s+=r,d.attr("x",i+t().state.noteMargin),d.attr("y",o+s+1.25*t().state.noteMargin)}}return{textWidth:g.node().getBBox().width,textHeight:s}},j=(e,i)=>{i.attr("class","state-note");const o=i.append("rect").attr("x",0).attr("y",t().state.padding),c=i.append("g"),{textWidth:s,textHeight:g}=Z(e,0,0,c);return o.attr("height",g+2*t().state.noteMargin),o.attr("width",s+t().state.noteMargin*2),o},L=function(e,i){const o=i.id,c={id:o,label:i.id,width:0,height:0},s=e.append("g").attr("id",o).attr("class","stateGroup");i.type==="start"&&O(s),i.type==="end"&&_(s),(i.type==="fork"||i.type==="join")&&q(s,i),i.type==="note"&&j(i.note.text,s),i.type==="divider"&&X(s),i.type==="default"&&i.descriptions.length===0&&J(s,i),i.type==="default"&&i.descriptions.length>0&&Y(s,i);const g=s.node().getBBox();return c.width=g.width+2*t().state.padding,c.height=g.height+2*t().state.padding,c};let G=0;const K=function(e,i,o){const c=function(r){switch(r){case N.relationType.AGGREGATION:return"aggregation";case N.relationType.EXTENSION:return"extension";case N.relationType.COMPOSITION:return"composition";case N.relationType.DEPENDENCY:return"dependency"}};i.points=i.points.filter(r=>!Number.isNaN(r.y));const s=i.points,g=$().x(function(r){return r.x}).y(function(r){return r.y}).curve(v),p=e.append("path").attr("d",g(s)).attr("id","edge"+G).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replace(/\(/g,"\\("),a=a.replace(/\)/g,"\\)")),p.attr("marker-end","url("+a+"#"+c(N.relationType.DEPENDENCY)+"End)"),o.title!==void 0){const r=e.append("g").attr("class","stateLabel"),{x:y,y:x}=U.calcLabelPosition(i.points),d=T.getRows(o.title);let l=0;const m=[];let w=0,E=0;for(let u=0;u<=d.length;u++){const h=r.append("text").attr("text-anchor","middle").text(d[u]).attr("x",y).attr("y",x+l),f=h.node().getBBox();w=Math.max(w,f.width),E=Math.min(E,f.x),b.info(f.x,y,x+l),l===0&&(l=h.node().getBBox().height,b.info("Title height",l,x)),m.push(h)}let k=l*d.length;if(d.length>1){const u=(d.length-1)*l*.5;m.forEach((h,f)=>h.attr("y",x+f*l-u)),k=l*d.length}const n=r.node().getBBox();r.insert("rect",":first-child").attr("class","box").attr("x",y-w/2-t().state.padding/2).attr("y",x-k/2-t().state.padding/2-3.5).attr("width",w+t().state.padding).attr("height",k+t().state.padding),b.info(n)}G++};let B;const z={},Q=function(){},V=function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},D=function(e,i,o,c){B=t().state;const s=t().securityLevel;let g;s==="sandbox"&&(g=H("#i"+i));const p=s==="sandbox"?H(g.nodes()[0].contentDocument.body):H("body"),a=s==="sandbox"?g.nodes()[0].contentDocument:document;b.debug("Rendering diagram "+e);const r=p.select(`[id='${i}']`);V(r);const y=c.db.getRootDoc();A(y,r,void 0,!1,p,a,c);const x=B.padding,d=r.node().getBBox(),l=d.width+x*2,m=d.height+x*2,w=l*1.75;R(r,m,w,B.useMaxWidth),r.attr("viewBox",`${d.x-B.padding} ${d.y-B.padding} `+l+" "+m)},tt=e=>e?e.length*B.fontSizeFactor:1,A=(e,i,o,c,s,g,p)=>{const a=new C({compound:!0,multigraph:!0});let r,y=!0;for(r=0;r{const f=h.parentElement;let S=0,M=0;f&&(f.parentElement&&(S=f.parentElement.getBBox().width),M=parseInt(f.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),h.setAttribute("x1",0-M+8),h.setAttribute("x2",S-M-8)})):b.debug("No Node "+n+": "+JSON.stringify(a.node(n)))});let E=w.getBBox();a.edges().forEach(function(n){n!==void 0&&a.edge(n)!==void 0&&(b.debug("Edge "+n.v+" -> "+n.w+": "+JSON.stringify(a.edge(n))),K(i,a.edge(n),a.edge(n).relation))}),E=w.getBBox();const k={id:o||"root",label:o||"root",width:0,height:0};return k.width=E.width+2*B.padding,k.height=E.height+2*B.padding,b.debug("Doc rendered",k,a),k},et={setConf:Q,draw:D},gt={parser:P,db:N,renderer:et,styles:W,init:e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute,N.clear()}};export{gt as diagram}; diff --git a/assets/chunks/stateDiagram-v2-1992cada.BStA_oNN.js b/assets/chunks/stateDiagram-v2-6c43c13a.on8Hb2_5.js similarity index 86% rename from assets/chunks/stateDiagram-v2-1992cada.BStA_oNN.js rename to assets/chunks/stateDiagram-v2-6c43c13a.on8Hb2_5.js index c8ad3e4a..8826da4f 100644 --- a/assets/chunks/stateDiagram-v2-1992cada.BStA_oNN.js +++ b/assets/chunks/stateDiagram-v2-6c43c13a.on8Hb2_5.js @@ -1 +1 @@ -import{p as J,d as B,s as Q,D as H,a as X,S as Z,b as F,c as I}from"./styles-0784dbeb.Dyb4k6WS.js";import{G as tt}from"./graph.CwfrPCLx.js";import{l as E,c as g,h as x,A as et,i as ot,j as w}from"../app.CbQoAe_D.js";import{r as st}from"./index-01f381cb.Dh9et-Tw.js";import"./layout.Ds1muZd1.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./clone.BumBiDEu.js";import"./edges-066a5561.CpbBxaaE.js";import"./createText-ca0c5216.5u9lbHcb.js";import"./line.Rvm4JnwS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const h="rect",C="rectWithTitle",nt="start",it="end",ct="divider",rt="roundedWithTitle",lt="note",at="noteGroup",_="statediagram",dt="state",Et=`${_}-${dt}`,U="transition",St="note",Tt="note-edge",pt=`${U} ${Tt}`,_t=`${_}-${St}`,ut="cluster",Dt=`${_}-${ut}`,bt="cluster-alt",ft=`${_}-${bt}`,V="parent",m="note",At="state",N="----",ht=`${N}${m}`,M=`${N}${V}`,Y="fill:none",W="fill: #333",z="c",j="text",q="normal";let y={},d=0;const yt=function(t){const n=Object.keys(t);for(const e of n)t[e]},gt=function(t,n){return n.db.extract(n.db.getRootDocV2()),n.db.getClasses()};function $t(t){return t==null?"":t.classes?t.classes.join(" "):""}function R(t="",n=0,e="",i=N){const c=e!==null&&e.length>0?`${i}${e}`:"";return`${At}-${t}${c}-${n}`}const A=(t,n,e,i,c,r)=>{const o=e.id,u=$t(i[o]);if(o!=="root"){let T=h;e.start===!0&&(T=nt),e.start===!1&&(T=it),e.type!==H&&(T=e.type),y[o]||(y[o]={id:o,shape:T,description:w.sanitizeText(o,g()),classes:`${u} ${Et}`});const s=y[o];e.description&&(Array.isArray(s.description)?(s.shape=C,s.description.push(e.description)):s.description.length>0?(s.shape=C,s.description===o?s.description=[e.description]:s.description=[s.description,e.description]):(s.shape=h,s.description=e.description),s.description=w.sanitizeTextOrArray(s.description,g())),s.description.length===1&&s.shape===C&&(s.shape=h),!s.type&&e.doc&&(E.info("Setting cluster for ",o,G(e)),s.type="group",s.dir=G(e),s.shape=e.type===X?ct:rt,s.classes=s.classes+" "+Dt+" "+(r?ft:""));const p={labelStyle:"",shape:s.shape,labelText:s.description,classes:s.classes,style:"",id:o,dir:s.dir,domId:R(o,d),type:s.type,padding:15};if(p.centerLabel=!0,e.note){const l={labelStyle:"",shape:lt,labelText:e.note.text,classes:_t,style:"",id:o+ht+"-"+d,domId:R(o,d,m),type:s.type,padding:15},a={labelStyle:"",shape:at,labelText:e.note.text,classes:s.classes,style:"",id:o+M,domId:R(o,d,V),type:"group",padding:0};d++;const D=o+M;t.setNode(D,a),t.setNode(l.id,l),t.setNode(o,p),t.setParent(o,D),t.setParent(l.id,D);let S=o,b=l.id;e.note.position==="left of"&&(S=l.id,b=o),t.setEdge(S,b,{arrowhead:"none",arrowType:"",style:Y,labelStyle:"",classes:pt,arrowheadStyle:W,labelpos:z,labelType:j,thickness:q})}else t.setNode(o,p)}n&&n.id!=="root"&&(E.trace("Setting node ",o," to be child of its parent ",n.id),t.setParent(o,n.id)),e.doc&&(E.trace("Adding nodes children "),xt(t,e,e.doc,i,c,!r))},xt=(t,n,e,i,c,r)=>{E.trace("items",e),e.forEach(o=>{switch(o.stmt){case F:A(t,n,o,i,c,r);break;case H:A(t,n,o,i,c,r);break;case Z:{A(t,n,o.state1,i,c,r),A(t,n,o.state2,i,c,r);const u={id:"edge"+d,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:Y,labelStyle:"",label:w.sanitizeText(o.description,g()),arrowheadStyle:W,labelpos:z,labelType:j,thickness:q,classes:U};t.setEdge(o.state1.id,o.state2.id,u,d),d++}break}})},G=(t,n=I)=>{let e=n;if(t.doc)for(let i=0;i{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,B.clear()}};export{mt as diagram}; +import{p as J,d as B,s as Q,D as H,a as X,S as Z,b as F,c as I}from"./styles-de3becd0.CAskXyHY.js";import{G as tt}from"./graph.C4kgFXP1.js";import{l as E,c as g,h as x,z as et,i as ot,j as w}from"../app.DRN3unl1.js";import{r as st}from"./index-9620d214.nAHig6oE.js";import"./layout.C5Nv6jKv.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./clone.Bnzwv1hF.js";import"./edges-5962ec63.BFgoqf-O.js";import"./createText-4a4f35c9.Cu3K6_Cl.js";import"./line.DpDoeUQJ.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";const h="rect",C="rectWithTitle",nt="start",it="end",ct="divider",rt="roundedWithTitle",lt="note",at="noteGroup",_="statediagram",dt="state",Et=`${_}-${dt}`,U="transition",St="note",Tt="note-edge",pt=`${U} ${Tt}`,_t=`${_}-${St}`,ut="cluster",Dt=`${_}-${ut}`,bt="cluster-alt",ft=`${_}-${bt}`,V="parent",m="note",At="state",N="----",ht=`${N}${m}`,M=`${N}${V}`,Y="fill:none",z="fill: #333",W="c",j="text",q="normal";let y={},d=0;const yt=function(t){const n=Object.keys(t);for(const e of n)t[e]},gt=function(t,n){return n.db.extract(n.db.getRootDocV2()),n.db.getClasses()};function $t(t){return t==null?"":t.classes?t.classes.join(" "):""}function R(t="",n=0,e="",i=N){const c=e!==null&&e.length>0?`${i}${e}`:"";return`${At}-${t}${c}-${n}`}const A=(t,n,e,i,c,r)=>{const o=e.id,u=$t(i[o]);if(o!=="root"){let T=h;e.start===!0&&(T=nt),e.start===!1&&(T=it),e.type!==H&&(T=e.type),y[o]||(y[o]={id:o,shape:T,description:w.sanitizeText(o,g()),classes:`${u} ${Et}`});const s=y[o];e.description&&(Array.isArray(s.description)?(s.shape=C,s.description.push(e.description)):s.description.length>0?(s.shape=C,s.description===o?s.description=[e.description]:s.description=[s.description,e.description]):(s.shape=h,s.description=e.description),s.description=w.sanitizeTextOrArray(s.description,g())),s.description.length===1&&s.shape===C&&(s.shape=h),!s.type&&e.doc&&(E.info("Setting cluster for ",o,G(e)),s.type="group",s.dir=G(e),s.shape=e.type===X?ct:rt,s.classes=s.classes+" "+Dt+" "+(r?ft:""));const p={labelStyle:"",shape:s.shape,labelText:s.description,classes:s.classes,style:"",id:o,dir:s.dir,domId:R(o,d),type:s.type,padding:15};if(p.centerLabel=!0,e.note){const l={labelStyle:"",shape:lt,labelText:e.note.text,classes:_t,style:"",id:o+ht+"-"+d,domId:R(o,d,m),type:s.type,padding:15},a={labelStyle:"",shape:at,labelText:e.note.text,classes:s.classes,style:"",id:o+M,domId:R(o,d,V),type:"group",padding:0};d++;const D=o+M;t.setNode(D,a),t.setNode(l.id,l),t.setNode(o,p),t.setParent(o,D),t.setParent(l.id,D);let S=o,b=l.id;e.note.position==="left of"&&(S=l.id,b=o),t.setEdge(S,b,{arrowhead:"none",arrowType:"",style:Y,labelStyle:"",classes:pt,arrowheadStyle:z,labelpos:W,labelType:j,thickness:q})}else t.setNode(o,p)}n&&n.id!=="root"&&(E.trace("Setting node ",o," to be child of its parent ",n.id),t.setParent(o,n.id)),e.doc&&(E.trace("Adding nodes children "),xt(t,e,e.doc,i,c,!r))},xt=(t,n,e,i,c,r)=>{E.trace("items",e),e.forEach(o=>{switch(o.stmt){case F:A(t,n,o,i,c,r);break;case H:A(t,n,o,i,c,r);break;case Z:{A(t,n,o.state1,i,c,r),A(t,n,o.state2,i,c,r);const u={id:"edge"+d,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:Y,labelStyle:"",label:w.sanitizeText(o.description,g()),arrowheadStyle:z,labelpos:W,labelType:j,thickness:q,classes:U};t.setEdge(o.state1.id,o.state2.id,u,d),d++}break}})},G=(t,n=I)=>{let e=n;if(t.doc)for(let i=0;i{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,B.clear()}};export{mt as diagram}; diff --git a/assets/chunks/styles-422bd1c9.CNvCrs-e.js b/assets/chunks/styles-422bd1c9.CNvCrs-e.js new file mode 100644 index 00000000..06d88b81 --- /dev/null +++ b/assets/chunks/styles-422bd1c9.CNvCrs-e.js @@ -0,0 +1,116 @@ +import{G as R}from"./graph.C4kgFXP1.js";import{ab as z,ac as F,ad as j,ae as U,a9 as H,o as A,l as g,p as K,c as S,j as G,r as q,q as E,n as L,h as C,z as W,t as X,af as J}from"../app.DRN3unl1.js";import{r as Q}from"./index-9620d214.nAHig6oE.js";import{c as Y}from"./channel.Bgp4IlJX.js";function Z(e){return typeof e=="string"?new z([document.querySelectorAll(e)],[document.documentElement]):new z([j(e)],F)}function pe(e,l){return!!e.children(l).length}function be(e){return N(e.v)+":"+N(e.w)+":"+N(e.name)}var O=/:/g;function N(e){return e?String(e).replace(O,"\\:"):""}function ee(e,l){l&&e.attr("style",l)}function fe(e,l,c){l&&e.attr("class",l).attr("class",c+" "+e.attr("class"))}function ue(e,l){var c=l.graph();if(U(c)){var a=c.transition;if(H(a))return a(e)}return e}function te(e,l){var c=e.append("foreignObject").attr("width","100000"),a=c.append("xhtml:div");a.attr("xmlns","http://www.w3.org/1999/xhtml");var i=l.label;switch(typeof i){case"function":a.insert(i);break;case"object":a.insert(function(){return i});break;default:a.html(i)}ee(a,l.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap");var d=a.node().getBoundingClientRect();return c.attr("width",d.width).attr("height",d.height),c}const P={},re=function(e){const l=Object.keys(e);for(const c of l)P[c]=e[c]},V=async function(e,l,c,a,i,d){const u=a.select(`[id="${c}"]`),n=Object.keys(e);for(const p of n){const r=e[p];let y="default";r.classes.length>0&&(y=r.classes.join(" ")),y=y+" flowchart-label";const w=A(r.styles);let t=r.text!==void 0?r.text:r.id,s;if(g.info("vertex",r,r.labelType),r.labelType==="markdown")g.info("vertex",r,r.labelType);else if(K(S().flowchart.htmlLabels))s=te(u,{label:t}).node(),s.parentNode.removeChild(s);else{const k=i.createElementNS("http://www.w3.org/2000/svg","text");k.setAttribute("style",w.labelStyle.replace("color:","fill:"));const _=t.split(G.lineBreakRegex);for(const $ of _){const v=i.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","1"),v.textContent=$,k.appendChild(v)}s=k}let b=0,o="";switch(r.type){case"round":b=5,o="rect";break;case"square":o="rect";break;case"diamond":o="question";break;case"hexagon":o="hexagon";break;case"odd":o="rect_left_inv_arrow";break;case"lean_right":o="lean_right";break;case"lean_left":o="lean_left";break;case"trapezoid":o="trapezoid";break;case"inv_trapezoid":o="inv_trapezoid";break;case"odd_right":o="rect_left_inv_arrow";break;case"circle":o="circle";break;case"ellipse":o="ellipse";break;case"stadium":o="stadium";break;case"subroutine":o="subroutine";break;case"cylinder":o="cylinder";break;case"group":o="rect";break;case"doublecircle":o="doublecircle";break;default:o="rect"}const T=await q(t,S());l.setNode(r.id,{labelStyle:w.labelStyle,shape:o,labelText:T,labelType:r.labelType,rx:b,ry:b,class:y,style:w.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:d.db.getTooltip(r.id)||"",domId:d.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:r.type==="group"?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:S().flowchart.padding}),g.info("setNode",{labelStyle:w.labelStyle,labelType:r.labelType,shape:o,labelText:T,rx:b,ry:b,class:y,style:w.style,id:r.id,domId:d.db.lookUpDomId(r.id),width:r.type==="group"?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:S().flowchart.padding})}},M=async function(e,l,c){g.info("abc78 edges = ",e);let a=0,i={},d,u;if(e.defaultStyle!==void 0){const n=A(e.defaultStyle);d=n.style,u=n.labelStyle}for(const n of e){a++;const p="L-"+n.start+"-"+n.end;i[p]===void 0?(i[p]=0,g.info("abc78 new entry",p,i[p])):(i[p]++,g.info("abc78 new entry",p,i[p]));let r=p+"-"+i[p];g.info("abc78 new link id to be used is",p,r,i[p]);const y="LS-"+n.start,w="LE-"+n.end,t={style:"",labelStyle:""};switch(t.minlen=n.length||1,n.type==="arrow_open"?t.arrowhead="none":t.arrowhead="normal",t.arrowTypeStart="arrow_open",t.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":t.arrowTypeStart="arrow_cross";case"arrow_cross":t.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":t.arrowTypeStart="arrow_point";case"arrow_point":t.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":t.arrowTypeStart="arrow_circle";case"arrow_circle":t.arrowTypeEnd="arrow_circle";break}let s="",b="";switch(n.stroke){case"normal":s="fill:none;",d!==void 0&&(s=d),u!==void 0&&(b=u),t.thickness="normal",t.pattern="solid";break;case"dotted":t.thickness="normal",t.pattern="dotted",t.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":t.thickness="thick",t.pattern="solid",t.style="stroke-width: 3.5px;fill:none;";break;case"invisible":t.thickness="invisible",t.pattern="solid",t.style="stroke-width: 0;fill:none;";break}if(n.style!==void 0){const o=A(n.style);s=o.style,b=o.labelStyle}t.style=t.style+=s,t.labelStyle=t.labelStyle+=b,n.interpolate!==void 0?t.curve=E(n.interpolate,L):e.defaultInterpolate!==void 0?t.curve=E(e.defaultInterpolate,L):t.curve=E(P.curve,L),n.text===void 0?n.style!==void 0&&(t.arrowheadStyle="fill: #333"):(t.arrowheadStyle="fill: #333",t.labelpos="c"),t.labelType=n.labelType,t.label=await q(n.text.replace(G.lineBreakRegex,` +`),S()),n.style===void 0&&(t.style=t.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),t.labelStyle=t.labelStyle.replace("color:","fill:"),t.id=r,t.classes="flowchart-link "+y+" "+w,l.setEdge(n.start,n.end,t,a)}},le=function(e,l){return l.db.getClasses()},ae=async function(e,l,c,a){g.info("Drawing flowchart");let i=a.db.getDirection();i===void 0&&(i="TD");const{securityLevel:d,flowchart:u}=S(),n=u.nodeSpacing||50,p=u.rankSpacing||50;let r;d==="sandbox"&&(r=C("#i"+l));const y=d==="sandbox"?C(r.nodes()[0].contentDocument.body):C("body"),w=d==="sandbox"?r.nodes()[0].contentDocument:document,t=new R({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:n,ranksep:p,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let s;const b=a.db.getSubGraphs();g.info("Subgraphs - ",b);for(let f=b.length-1;f>=0;f--)s=b[f],g.info("Subgraph - ",s),a.db.addVertex(s.id,{text:s.title,type:s.labelType},"group",void 0,s.classes,s.dir);const o=a.db.getVertices(),T=a.db.getEdges();g.info("Edges",T);let k=0;for(k=b.length-1;k>=0;k--){s=b[k],Z("cluster").append("text");for(let f=0;f{const c=Y,a=c(e,"r"),i=c(e,"g"),d=c(e,"b");return J(a,i,d,l)},ne=e=>`.label { + font-family: ${e.fontFamily}; + color: ${e.nodeTextColor||e.textColor}; + } + .cluster-label text { + fill: ${e.titleColor}; + } + .cluster-label span,p { + color: ${e.titleColor}; + } + + .label text,span,p { + fill: ${e.nodeTextColor||e.textColor}; + color: ${e.nodeTextColor||e.textColor}; + } + + .node rect, + .node circle, + .node ellipse, + .node polygon, + .node path { + fill: ${e.mainBkg}; + stroke: ${e.nodeBorder}; + stroke-width: 1px; + } + .flowchart-label text { + text-anchor: middle; + } + // .flowchart-label .text-outer-tspan { + // text-anchor: middle; + // } + // .flowchart-label .text-inner-tspan { + // text-anchor: start; + // } + + .node .katex path { + fill: #000; + stroke: #000; + stroke-width: 1px; + } + + .node .label { + text-align: center; + } + .node.clickable { + cursor: pointer; + } + + .arrowheadPath { + fill: ${e.arrowheadColor}; + } + + .edgePath .path { + stroke: ${e.lineColor}; + stroke-width: 2.0px; + } + + .flowchart-link { + stroke: ${e.lineColor}; + fill: none; + } + + .edgeLabel { + background-color: ${e.edgeLabelBackground}; + rect { + opacity: 0.5; + background-color: ${e.edgeLabelBackground}; + fill: ${e.edgeLabelBackground}; + } + text-align: center; + } + + /* For html labels only */ + .labelBkg { + background-color: ${oe(e.edgeLabelBackground,.5)}; + // background-color: + } + + .cluster rect { + fill: ${e.clusterBkg}; + stroke: ${e.clusterBorder}; + stroke-width: 1px; + } + + .cluster text { + fill: ${e.titleColor}; + } + + .cluster span,p { + color: ${e.titleColor}; + } + /* .cluster div { + color: ${e.titleColor}; + } */ + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + font-family: ${e.fontFamily}; + font-size: 12px; + background: ${e.tertiaryColor}; + border: 1px solid ${e.border2}; + border-radius: 2px; + pointer-events: none; + z-index: 100; + } + + .flowchartTitleText { + text-anchor: middle; + font-size: 18px; + fill: ${e.textColor}; + } +`,he=ne;export{ee as a,te as b,ue as c,fe as d,be as e,we as f,he as g,pe as i,Z as s}; diff --git a/assets/chunks/styles-483fbfea.CCXKtTy9.js b/assets/chunks/styles-483fbfea.CCXKtTy9.js deleted file mode 100644 index 4cad2e22..00000000 --- a/assets/chunks/styles-483fbfea.CCXKtTy9.js +++ /dev/null @@ -1,116 +0,0 @@ -import{G as R}from"./graph.CwfrPCLx.js";import{S as z,v as F,x as j,y as U,z as H,o as N,l as g,p as K,c as S,j as G,r as q,q as E,n as L,h as C,A as W,t as X,B as J}from"../app.CbQoAe_D.js";import{r as Q}from"./index-01f381cb.Dh9et-Tw.js";import{c as Y}from"./channel.Byw1PSvd.js";function Z(e){return typeof e=="string"?new z([document.querySelectorAll(e)],[document.documentElement]):new z([j(e)],F)}function pe(e,l){return!!e.children(l).length}function be(e){return A(e.v)+":"+A(e.w)+":"+A(e.name)}var O=/:/g;function A(e){return e?String(e).replace(O,"\\:"):""}function ee(e,l){l&&e.attr("style",l)}function fe(e,l,c){l&&e.attr("class",l).attr("class",c+" "+e.attr("class"))}function ue(e,l){var c=l.graph();if(U(c)){var a=c.transition;if(H(a))return a(e)}return e}function te(e,l){var c=e.append("foreignObject").attr("width","100000"),a=c.append("xhtml:div");a.attr("xmlns","http://www.w3.org/1999/xhtml");var i=l.label;switch(typeof i){case"function":a.insert(i);break;case"object":a.insert(function(){return i});break;default:a.html(i)}ee(a,l.labelStyle),a.style("display","inline-block"),a.style("white-space","nowrap");var d=a.node().getBoundingClientRect();return c.attr("width",d.width).attr("height",d.height),c}const P={},re=function(e){const l=Object.keys(e);for(const c of l)P[c]=e[c]},V=async function(e,l,c,a,i,d){const u=a.select(`[id="${c}"]`),n=Object.keys(e);for(const p of n){const r=e[p];let y="default";r.classes.length>0&&(y=r.classes.join(" ")),y=y+" flowchart-label";const w=N(r.styles);let t=r.text!==void 0?r.text:r.id,s;if(g.info("vertex",r,r.labelType),r.labelType==="markdown")g.info("vertex",r,r.labelType);else if(K(S().flowchart.htmlLabels))s=te(u,{label:t}).node(),s.parentNode.removeChild(s);else{const k=i.createElementNS("http://www.w3.org/2000/svg","text");k.setAttribute("style",w.labelStyle.replace("color:","fill:"));const _=t.split(G.lineBreakRegex);for(const $ of _){const v=i.createElementNS("http://www.w3.org/2000/svg","tspan");v.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),v.setAttribute("dy","1em"),v.setAttribute("x","1"),v.textContent=$,k.appendChild(v)}s=k}let b=0,o="";switch(r.type){case"round":b=5,o="rect";break;case"square":o="rect";break;case"diamond":o="question";break;case"hexagon":o="hexagon";break;case"odd":o="rect_left_inv_arrow";break;case"lean_right":o="lean_right";break;case"lean_left":o="lean_left";break;case"trapezoid":o="trapezoid";break;case"inv_trapezoid":o="inv_trapezoid";break;case"odd_right":o="rect_left_inv_arrow";break;case"circle":o="circle";break;case"ellipse":o="ellipse";break;case"stadium":o="stadium";break;case"subroutine":o="subroutine";break;case"cylinder":o="cylinder";break;case"group":o="rect";break;case"doublecircle":o="doublecircle";break;default:o="rect"}const T=await q(t,S());l.setNode(r.id,{labelStyle:w.labelStyle,shape:o,labelText:T,labelType:r.labelType,rx:b,ry:b,class:y,style:w.style,id:r.id,link:r.link,linkTarget:r.linkTarget,tooltip:d.db.getTooltip(r.id)||"",domId:d.db.lookUpDomId(r.id),haveCallback:r.haveCallback,width:r.type==="group"?500:void 0,dir:r.dir,type:r.type,props:r.props,padding:S().flowchart.padding}),g.info("setNode",{labelStyle:w.labelStyle,labelType:r.labelType,shape:o,labelText:T,rx:b,ry:b,class:y,style:w.style,id:r.id,domId:d.db.lookUpDomId(r.id),width:r.type==="group"?500:void 0,type:r.type,dir:r.dir,props:r.props,padding:S().flowchart.padding})}},M=async function(e,l,c){g.info("abc78 edges = ",e);let a=0,i={},d,u;if(e.defaultStyle!==void 0){const n=N(e.defaultStyle);d=n.style,u=n.labelStyle}for(const n of e){a++;const p="L-"+n.start+"-"+n.end;i[p]===void 0?(i[p]=0,g.info("abc78 new entry",p,i[p])):(i[p]++,g.info("abc78 new entry",p,i[p]));let r=p+"-"+i[p];g.info("abc78 new link id to be used is",p,r,i[p]);const y="LS-"+n.start,w="LE-"+n.end,t={style:"",labelStyle:""};switch(t.minlen=n.length||1,n.type==="arrow_open"?t.arrowhead="none":t.arrowhead="normal",t.arrowTypeStart="arrow_open",t.arrowTypeEnd="arrow_open",n.type){case"double_arrow_cross":t.arrowTypeStart="arrow_cross";case"arrow_cross":t.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":t.arrowTypeStart="arrow_point";case"arrow_point":t.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":t.arrowTypeStart="arrow_circle";case"arrow_circle":t.arrowTypeEnd="arrow_circle";break}let s="",b="";switch(n.stroke){case"normal":s="fill:none;",d!==void 0&&(s=d),u!==void 0&&(b=u),t.thickness="normal",t.pattern="solid";break;case"dotted":t.thickness="normal",t.pattern="dotted",t.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":t.thickness="thick",t.pattern="solid",t.style="stroke-width: 3.5px;fill:none;";break;case"invisible":t.thickness="invisible",t.pattern="solid",t.style="stroke-width: 0;fill:none;";break}if(n.style!==void 0){const o=N(n.style);s=o.style,b=o.labelStyle}t.style=t.style+=s,t.labelStyle=t.labelStyle+=b,n.interpolate!==void 0?t.curve=E(n.interpolate,L):e.defaultInterpolate!==void 0?t.curve=E(e.defaultInterpolate,L):t.curve=E(P.curve,L),n.text===void 0?n.style!==void 0&&(t.arrowheadStyle="fill: #333"):(t.arrowheadStyle="fill: #333",t.labelpos="c"),t.labelType=n.labelType,t.label=await q(n.text.replace(G.lineBreakRegex,` -`),S()),n.style===void 0&&(t.style=t.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),t.labelStyle=t.labelStyle.replace("color:","fill:"),t.id=r,t.classes="flowchart-link "+y+" "+w,l.setEdge(n.start,n.end,t,a)}},le=function(e,l){return l.db.getClasses()},ae=async function(e,l,c,a){g.info("Drawing flowchart");let i=a.db.getDirection();i===void 0&&(i="TD");const{securityLevel:d,flowchart:u}=S(),n=u.nodeSpacing||50,p=u.rankSpacing||50;let r;d==="sandbox"&&(r=C("#i"+l));const y=d==="sandbox"?C(r.nodes()[0].contentDocument.body):C("body"),w=d==="sandbox"?r.nodes()[0].contentDocument:document,t=new R({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:n,ranksep:p,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let s;const b=a.db.getSubGraphs();g.info("Subgraphs - ",b);for(let f=b.length-1;f>=0;f--)s=b[f],g.info("Subgraph - ",s),a.db.addVertex(s.id,{text:s.title,type:s.labelType},"group",void 0,s.classes,s.dir);const o=a.db.getVertices(),T=a.db.getEdges();g.info("Edges",T);let k=0;for(k=b.length-1;k>=0;k--){s=b[k],Z("cluster").append("text");for(let f=0;f{const c=Y,a=c(e,"r"),i=c(e,"g"),d=c(e,"b");return J(a,i,d,l)},ne=e=>`.label { - font-family: ${e.fontFamily}; - color: ${e.nodeTextColor||e.textColor}; - } - .cluster-label text { - fill: ${e.titleColor}; - } - .cluster-label span,p { - color: ${e.titleColor}; - } - - .label text,span,p { - fill: ${e.nodeTextColor||e.textColor}; - color: ${e.nodeTextColor||e.textColor}; - } - - .node rect, - .node circle, - .node ellipse, - .node polygon, - .node path { - fill: ${e.mainBkg}; - stroke: ${e.nodeBorder}; - stroke-width: 1px; - } - .flowchart-label text { - text-anchor: middle; - } - // .flowchart-label .text-outer-tspan { - // text-anchor: middle; - // } - // .flowchart-label .text-inner-tspan { - // text-anchor: start; - // } - - .node .katex path { - fill: #000; - stroke: #000; - stroke-width: 1px; - } - - .node .label { - text-align: center; - } - .node.clickable { - cursor: pointer; - } - - .arrowheadPath { - fill: ${e.arrowheadColor}; - } - - .edgePath .path { - stroke: ${e.lineColor}; - stroke-width: 2.0px; - } - - .flowchart-link { - stroke: ${e.lineColor}; - fill: none; - } - - .edgeLabel { - background-color: ${e.edgeLabelBackground}; - rect { - opacity: 0.5; - background-color: ${e.edgeLabelBackground}; - fill: ${e.edgeLabelBackground}; - } - text-align: center; - } - - /* For html labels only */ - .labelBkg { - background-color: ${oe(e.edgeLabelBackground,.5)}; - // background-color: - } - - .cluster rect { - fill: ${e.clusterBkg}; - stroke: ${e.clusterBorder}; - stroke-width: 1px; - } - - .cluster text { - fill: ${e.titleColor}; - } - - .cluster span,p { - color: ${e.titleColor}; - } - /* .cluster div { - color: ${e.titleColor}; - } */ - - div.mermaidTooltip { - position: absolute; - text-align: center; - max-width: 200px; - padding: 2px; - font-family: ${e.fontFamily}; - font-size: 12px; - background: ${e.tertiaryColor}; - border: 1px solid ${e.border2}; - border-radius: 2px; - pointer-events: none; - z-index: 100; - } - - .flowchartTitleText { - text-anchor: middle; - font-size: 18px; - fill: ${e.textColor}; - } -`,he=ne;export{ee as a,te as b,ue as c,fe as d,be as e,we as f,he as g,pe as i,Z as s}; diff --git a/assets/chunks/styles-0784dbeb.Dyb4k6WS.js b/assets/chunks/styles-de3becd0.CAskXyHY.js similarity index 95% rename from assets/chunks/styles-0784dbeb.Dyb4k6WS.js rename to assets/chunks/styles-de3becd0.CAskXyHY.js index 859e6816..01f125b3 100644 --- a/assets/chunks/styles-0784dbeb.Dyb4k6WS.js +++ b/assets/chunks/styles-de3becd0.CAskXyHY.js @@ -1,9 +1,9 @@ -import{c as Y,g as Ut,s as zt,a as Mt,b as Ht,E as Xt,F as Kt,l as D,j as ot,G as Wt,b1 as Jt}from"../app.CbQoAe_D.js";var gt=function(){var t=function(C,r,n,i){for(n=n||{},i=C.length;i--;n[C[i]]=r);return n},s=[1,2],a=[1,3],h=[1,4],f=[2,4],d=[1,9],y=[1,11],k=[1,15],u=[1,16],E=[1,17],T=[1,18],R=[1,30],G=[1,19],j=[1,20],U=[1,21],z=[1,22],M=[1,23],H=[1,25],X=[1,26],K=[1,27],W=[1,28],J=[1,29],q=[1,32],Q=[1,33],Z=[1,34],tt=[1,35],w=[1,31],c=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],et=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Dt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(r,n,i,o,p,e,$){var l=e.length-1;switch(p){case 3:return o.setRootDoc(e[l]),e[l];case 4:this.$=[];break;case 5:e[l]!="nl"&&(e[l-1].push(e[l]),this.$=e[l-1]);break;case 6:case 7:this.$=e[l];break;case 8:this.$="nl";break;case 11:this.$=e[l];break;case 12:const B=e[l-1];B.description=o.trimColon(e[l]),this.$=B;break;case 13:this.$={stmt:"relation",state1:e[l-2],state2:e[l]};break;case 14:const ft=o.trimColon(e[l]);this.$={stmt:"relation",state1:e[l-3],state2:e[l-1],description:ft};break;case 18:this.$={stmt:"state",id:e[l-3],type:"default",description:"",doc:e[l-1]};break;case 19:var v=e[l],O=e[l-2].trim();if(e[l].match(":")){var st=e[l].split(":");v=st[0],O=[O,st[1]]}this.$={stmt:"state",id:v,type:"default",description:O};break;case 20:this.$={stmt:"state",id:e[l-3],type:"default",description:e[l-5],doc:e[l-1]};break;case 21:this.$={stmt:"state",id:e[l],type:"fork"};break;case 22:this.$={stmt:"state",id:e[l],type:"join"};break;case 23:this.$={stmt:"state",id:e[l],type:"choice"};break;case 24:this.$={stmt:"state",id:o.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:e[l-1].trim(),note:{position:e[l-2].trim(),text:e[l].trim()}};break;case 28:this.$=e[l].trim(),o.setAccTitle(this.$);break;case 29:case 30:this.$=e[l].trim(),o.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:e[l-1].trim(),classes:e[l].trim()};break;case 33:this.$={stmt:"applyClass",id:e[l-1].trim(),styleClass:e[l].trim()};break;case 34:o.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:o.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:o.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:o.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:e[l].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:a,6:h},{1:[3]},{3:5,4:s,5:a,6:h},{3:6,4:s,5:a,6:h},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],f,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,5]),{9:36,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,7]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11],{13:[1,37],14:[1,38]}),t(c,[2,15]),{17:[1,39]},t(c,[2,17],{19:[1,40]}),{22:[1,41]},t(c,[2,21]),t(c,[2,22]),t(c,[2,23]),t(c,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(c,[2,27]),{33:[1,46]},{35:[1,47]},t(c,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(et,[2,40],{51:[1,51]}),t(et,[2,41],{51:[1,52]}),t(c,[2,34]),t(c,[2,35]),t(c,[2,36]),t(c,[2,37]),t(c,[2,6]),t(c,[2,12]),{12:53,23:R,50:w},t(c,[2,16]),t(Dt,f,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(c,[2,28]),t(c,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(c,[2,13],{13:[1,63]}),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,64],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(c,[2,31]),t(c,[2,32]),t(c,[2,33]),t(et,[2,42]),t(et,[2,43]),t(c,[2,14]),t(c,[2,18]),t(Dt,f,{7:68}),t(c,[2,25]),t(c,[2,26]),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,69],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(r,n){if(n.recoverable)this.trace(r);else{var i=new Error(r);throw i.hash=n,i}},parse:function(r){var n=this,i=[0],o=[],p=[null],e=[],$=this.table,l="",v=0,O=0,st=2,B=1,ft=e.slice.call(arguments,1),S=Object.create(this.lexer),A={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(A.yy[dt]=this.yy[dt]);S.setInput(r,A.yy),A.yy.lexer=S,A.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var yt=S.yylloc;e.push(yt);var Gt=S.options&&S.options.ranges;typeof A.yy.parseError=="function"?this.parseError=A.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function jt(){var x;return x=o.pop()||S.lex()||B,typeof x!="number"&&(x instanceof Array&&(o=x,x=o.pop()),x=n.symbols_[x]||x),x}for(var _,L,m,pt,N={},it,b,Ct,rt;;){if(L=i[i.length-1],this.defaultActions[L]?m=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=jt()),m=$[L]&&$[L][_]),typeof m>"u"||!m.length||!m[0]){var St="";rt=[];for(it in $[L])this.terminals_[it]&&it>st&&rt.push("'"+this.terminals_[it]+"'");S.showPosition?St="Parse error on line "+(v+1)+`: +import{c as Y,g as Ut,s as zt,a as Mt,b as Ht,x as Xt,y as Kt,l as D,j as ot,A as Wt,b1 as Jt}from"../app.DRN3unl1.js";var gt=function(){var t=function(C,r,n,i){for(n=n||{},i=C.length;i--;n[C[i]]=r);return n},s=[1,2],a=[1,3],h=[1,4],f=[2,4],d=[1,9],y=[1,11],k=[1,15],u=[1,16],E=[1,17],T=[1,18],R=[1,30],G=[1,19],j=[1,20],U=[1,21],z=[1,22],M=[1,23],H=[1,25],X=[1,26],K=[1,27],W=[1,28],J=[1,29],q=[1,32],Q=[1,33],Z=[1,34],tt=[1,35],w=[1,31],c=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],et=[1,4,5,13,14,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Dt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],ht={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,cssClassStatement:11,idStatement:12,DESCR:13,"-->":14,HIDE_EMPTY:15,scale:16,WIDTH:17,COMPOSIT_STATE:18,STRUCT_START:19,STRUCT_STOP:20,STATE_DESCR:21,AS:22,ID:23,FORK:24,JOIN:25,CHOICE:26,CONCURRENT:27,note:28,notePosition:29,NOTE_TEXT:30,direction:31,acc_title:32,acc_title_value:33,acc_descr:34,acc_descr_value:35,acc_descr_multiline_value:36,classDef:37,CLASSDEF_ID:38,CLASSDEF_STYLEOPTS:39,DEFAULT:40,class:41,CLASSENTITY_IDS:42,STYLECLASS:43,direction_tb:44,direction_bt:45,direction_rl:46,direction_lr:47,eol:48,";":49,EDGE_STATE:50,STYLE_SEPARATOR:51,left_of:52,right_of:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",13:"DESCR",14:"-->",15:"HIDE_EMPTY",16:"scale",17:"WIDTH",18:"COMPOSIT_STATE",19:"STRUCT_START",20:"STRUCT_STOP",21:"STATE_DESCR",22:"AS",23:"ID",24:"FORK",25:"JOIN",26:"CHOICE",27:"CONCURRENT",28:"note",30:"NOTE_TEXT",32:"acc_title",33:"acc_title_value",34:"acc_descr",35:"acc_descr_value",36:"acc_descr_multiline_value",37:"classDef",38:"CLASSDEF_ID",39:"CLASSDEF_STYLEOPTS",40:"DEFAULT",41:"class",42:"CLASSENTITY_IDS",43:"STYLECLASS",44:"direction_tb",45:"direction_bt",46:"direction_rl",47:"direction_lr",49:";",50:"EDGE_STATE",51:"STYLE_SEPARATOR",52:"left_of",53:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[10,3],[10,3],[11,3],[31,1],[31,1],[31,1],[31,1],[48,1],[48,1],[12,1],[12,1],[12,3],[12,3],[29,1],[29,1]],performAction:function(r,n,i,o,p,e,$){var l=e.length-1;switch(p){case 3:return o.setRootDoc(e[l]),e[l];case 4:this.$=[];break;case 5:e[l]!="nl"&&(e[l-1].push(e[l]),this.$=e[l-1]);break;case 6:case 7:this.$=e[l];break;case 8:this.$="nl";break;case 11:this.$=e[l];break;case 12:const B=e[l-1];B.description=o.trimColon(e[l]),this.$=B;break;case 13:this.$={stmt:"relation",state1:e[l-2],state2:e[l]};break;case 14:const ft=o.trimColon(e[l]);this.$={stmt:"relation",state1:e[l-3],state2:e[l-1],description:ft};break;case 18:this.$={stmt:"state",id:e[l-3],type:"default",description:"",doc:e[l-1]};break;case 19:var A=e[l],O=e[l-2].trim();if(e[l].match(":")){var st=e[l].split(":");A=st[0],O=[O,st[1]]}this.$={stmt:"state",id:A,type:"default",description:O};break;case 20:this.$={stmt:"state",id:e[l-3],type:"default",description:e[l-5],doc:e[l-1]};break;case 21:this.$={stmt:"state",id:e[l],type:"fork"};break;case 22:this.$={stmt:"state",id:e[l],type:"join"};break;case 23:this.$={stmt:"state",id:e[l],type:"choice"};break;case 24:this.$={stmt:"state",id:o.getDividerId(),type:"divider"};break;case 25:this.$={stmt:"state",id:e[l-1].trim(),note:{position:e[l-2].trim(),text:e[l].trim()}};break;case 28:this.$=e[l].trim(),o.setAccTitle(this.$);break;case 29:case 30:this.$=e[l].trim(),o.setAccDescription(this.$);break;case 31:case 32:this.$={stmt:"classDef",id:e[l-1].trim(),classes:e[l].trim()};break;case 33:this.$={stmt:"applyClass",id:e[l-1].trim(),styleClass:e[l].trim()};break;case 34:o.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 35:o.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 36:o.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 37:o.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 40:case 41:this.$={stmt:"state",id:e[l].trim(),type:"default",description:""};break;case 42:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break;case 43:this.$={stmt:"state",id:e[l-2].trim(),classes:[e[l].trim()],type:"default",description:""};break}},table:[{3:1,4:s,5:a,6:h},{1:[3]},{3:5,4:s,5:a,6:h},{3:6,4:s,5:a,6:h},t([1,4,5,15,16,18,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],f,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,5]),{9:36,10:12,11:13,12:14,15:k,16:u,18:E,21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,7]),t(c,[2,8]),t(c,[2,9]),t(c,[2,10]),t(c,[2,11],{13:[1,37],14:[1,38]}),t(c,[2,15]),{17:[1,39]},t(c,[2,17],{19:[1,40]}),{22:[1,41]},t(c,[2,21]),t(c,[2,22]),t(c,[2,23]),t(c,[2,24]),{29:42,30:[1,43],52:[1,44],53:[1,45]},t(c,[2,27]),{33:[1,46]},{35:[1,47]},t(c,[2,30]),{38:[1,48],40:[1,49]},{42:[1,50]},t(et,[2,40],{51:[1,51]}),t(et,[2,41],{51:[1,52]}),t(c,[2,34]),t(c,[2,35]),t(c,[2,36]),t(c,[2,37]),t(c,[2,6]),t(c,[2,12]),{12:53,23:R,50:w},t(c,[2,16]),t(Dt,f,{7:54}),{23:[1,55]},{23:[1,56]},{22:[1,57]},{23:[2,44]},{23:[2,45]},t(c,[2,28]),t(c,[2,29]),{39:[1,58]},{39:[1,59]},{43:[1,60]},{23:[1,61]},{23:[1,62]},t(c,[2,13],{13:[1,63]}),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,64],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,19],{19:[1,65]}),{30:[1,66]},{23:[1,67]},t(c,[2,31]),t(c,[2,32]),t(c,[2,33]),t(et,[2,42]),t(et,[2,43]),t(c,[2,14]),t(c,[2,18]),t(Dt,f,{7:68}),t(c,[2,25]),t(c,[2,26]),{4:d,5:y,8:8,9:10,10:12,11:13,12:14,15:k,16:u,18:E,20:[1,69],21:T,23:R,24:G,25:j,26:U,27:z,28:M,31:24,32:H,34:X,36:K,37:W,41:J,44:q,45:Q,46:Z,47:tt,50:w},t(c,[2,20])],defaultActions:{5:[2,1],6:[2,2],44:[2,44],45:[2,45]},parseError:function(r,n){if(n.recoverable)this.trace(r);else{var i=new Error(r);throw i.hash=n,i}},parse:function(r){var n=this,i=[0],o=[],p=[null],e=[],$=this.table,l="",A=0,O=0,st=2,B=1,ft=e.slice.call(arguments,1),S=Object.create(this.lexer),v={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(v.yy[dt]=this.yy[dt]);S.setInput(r,v.yy),v.yy.lexer=S,v.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var yt=S.yylloc;e.push(yt);var Gt=S.options&&S.options.ranges;typeof v.yy.parseError=="function"?this.parseError=v.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function jt(){var x;return x=o.pop()||S.lex()||B,typeof x!="number"&&(x instanceof Array&&(o=x,x=o.pop()),x=n.symbols_[x]||x),x}for(var _,L,m,pt,N={},it,b,Ct,rt;;){if(L=i[i.length-1],this.defaultActions[L]?m=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=jt()),m=$[L]&&$[L][_]),typeof m>"u"||!m.length||!m[0]){var St="";rt=[];for(it in $[L])this.terminals_[it]&&it>st&&rt.push("'"+this.terminals_[it]+"'");S.showPosition?St="Parse error on line "+(A+1)+`: `+S.showPosition()+` -Expecting `+rt.join(", ")+", got '"+(this.terminals_[_]||_)+"'":St="Parse error on line "+(v+1)+": Unexpected "+(_==B?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(St,{text:S.match,token:this.terminals_[_]||_,line:S.yylineno,loc:yt,expected:rt})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+_);switch(m[0]){case 1:i.push(_),p.push(S.yytext),e.push(S.yylloc),i.push(m[1]),_=null,O=S.yyleng,l=S.yytext,v=S.yylineno,yt=S.yylloc;break;case 2:if(b=this.productions_[m[1]][1],N.$=p[p.length-b],N._$={first_line:e[e.length-(b||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(b||1)].first_column,last_column:e[e.length-1].last_column},Gt&&(N._$.range=[e[e.length-(b||1)].range[0],e[e.length-1].range[1]]),pt=this.performAction.apply(N,[l,O,v,A.yy,m[1],p,e].concat(ft)),typeof pt<"u")return pt;b&&(i=i.slice(0,-1*b*2),p=p.slice(0,-1*b),e=e.slice(0,-1*b)),i.push(this.productions_[m[1]][0]),p.push(N.$),e.push(N._$),Ct=$[i[i.length-2]][i[i.length-1]],i.push(Ct);break;case 3:return!0}}return!0}},Yt=function(){var C={EOF:1,parseError:function(n,i){if(this.yy.parser)this.yy.parser.parseError(n,i);else throw new Error(n)},setInput:function(r,n){return this.yy=n||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var n=r.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var n=r.length,i=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===o.length?this.yylloc.first_column:0)+o[o.length-i.length].length-i[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). +Expecting `+rt.join(", ")+", got '"+(this.terminals_[_]||_)+"'":St="Parse error on line "+(A+1)+": Unexpected "+(_==B?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(St,{text:S.match,token:this.terminals_[_]||_,line:S.yylineno,loc:yt,expected:rt})}if(m[0]instanceof Array&&m.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+_);switch(m[0]){case 1:i.push(_),p.push(S.yytext),e.push(S.yylloc),i.push(m[1]),_=null,O=S.yyleng,l=S.yytext,A=S.yylineno,yt=S.yylloc;break;case 2:if(b=this.productions_[m[1]][1],N.$=p[p.length-b],N._$={first_line:e[e.length-(b||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(b||1)].first_column,last_column:e[e.length-1].last_column},Gt&&(N._$.range=[e[e.length-(b||1)].range[0],e[e.length-1].range[1]]),pt=this.performAction.apply(N,[l,O,A,v.yy,m[1],p,e].concat(ft)),typeof pt<"u")return pt;b&&(i=i.slice(0,-1*b*2),p=p.slice(0,-1*b),e=e.slice(0,-1*b)),i.push(this.productions_[m[1]][0]),p.push(N.$),e.push(N._$),Ct=$[i[i.length-2]][i[i.length-1]],i.push(Ct);break;case 3:return!0}}return!0}},Yt=function(){var C={EOF:1,parseError:function(n,i){if(this.yy.parser)this.yy.parser.parseError(n,i);else throw new Error(n)},setInput:function(r,n){return this.yy=n||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var n=r.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var n=r.length,i=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var o=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var p=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===o.length?this.yylloc.first_column:0)+o[o.length-i.length].length-i[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[p[0],p[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(r){this.unput(this.match.slice(r))},pastInput:function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var r=this.pastInput(),n=new Array(r.length+1).join("-");return r+this.upcomingInput()+` `+n+"^"},test_match:function(r,n){var i,o,p;if(this.options.backtrack_lexer&&(p={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(p.yylloc.range=this.yylloc.range.slice(0))),o=r[0].match(/(?:\r\n?|\n).*/g),o&&(this.yylineno+=o.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:o?o[o.length-1].length-o[o.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+r[0].length},this.yytext+=r[0],this.match+=r[0],this.matches=r,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(r[0].length),this.matched+=r[0],i=this.performAction.call(this,this.yy,this,n,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var e in p)this[e]=p[e];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var r,n,i,o;this._more||(this.yytext="",this.match="");for(var p=this._currentRules(),e=0;en[0].length)){if(n=i,o=e,this.options.backtrack_lexer){if(r=this.test_match(i,p[e]),r!==!1)return r;if(this._backtrack){n=!1;continue}else return!1}else if(!this.options.flex)break}return n?(r=this.test_match(n,p[o]),r!==!1?r:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text. -`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var n=this.next();return n||this.lex()},begin:function(n){this.conditionStack.push(n)},popState:function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},pushState:function(n){this.begin(n)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(n,i,o,p){switch(o){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),i.yytext=i.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),i.yytext=i.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),i.yytext=i.yytext.substr(2).trim(),30;case 64:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return i.yytext=i.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return C}();ht.lexer=Yt;function ut(){this.yy={}}return ut.prototype=ht,ht.Parser=ut,new ut}();gt.parser=gt;const De=gt,qt="LR",Ce="TB",_t="state",It="relation",Qt="classDef",Zt="applyClass",Et="default",te="divider",bt="[*]",Ot="start",Nt=bt,Rt="end",vt="color",At="fill",ee="bgFill",se=",";function wt(){return{}}let $t=qt,lt=[],P=wt();const Bt=()=>({relations:[],states:{},documents:{}});let ct={root:Bt()},g=ct.root,F=0,Lt=0;const ie={LINE:0,DOTTED_LINE:1},re={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},nt=t=>JSON.parse(JSON.stringify(t)),ne=t=>{D.info("Setting root doc",t),lt=t},ae=()=>lt,at=(t,s,a)=>{if(s.stmt===It)at(t,s.state1,!0),at(t,s.state2,!1);else if(s.stmt===_t&&(s.id==="[*]"?(s.id=a?t.id+"_start":t.id+"_end",s.start=a):s.id=s.id.trim()),s.doc){const h=[];let f=[],d;for(d=0;d0&&f.length>0){const y={stmt:_t,id:Jt(),type:"divider",doc:nt(f)};h.push(nt(y)),s.doc=h}s.doc.forEach(y=>at(s,y,!0))}},le=()=>(at({id:"root"},{id:"root",doc:lt},!0),{id:"root",doc:lt}),ce=t=>{let s;t.doc?s=t.doc:s=t,D.info(s),Pt(!0),D.info("Extract",s),s.forEach(a=>{switch(a.stmt){case _t:I(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case It:Ft(a.state1,a.state2,a.description);break;case Qt:Vt(a.id.trim(),a.classes);break;case Zt:xt(a.id.trim(),a.styleClass);break}})},I=function(t,s=Et,a=null,h=null,f=null,d=null,y=null,k=null){const u=t==null?void 0:t.trim();g.states[u]===void 0?(D.info("Adding state ",u,h),g.states[u]={id:u,descriptions:[],type:s,doc:a,note:f,classes:[],styles:[],textStyles:[]}):(g.states[u].doc||(g.states[u].doc=a),g.states[u].type||(g.states[u].type=s)),h&&(D.info("Setting state description",u,h),typeof h=="string"&&kt(u,h.trim()),typeof h=="object"&&h.forEach(E=>kt(u,E.trim()))),f&&(g.states[u].note=f,g.states[u].note.text=ot.sanitizeText(g.states[u].note.text,Y())),d&&(D.info("Setting state classes",u,d),(typeof d=="string"?[d]:d).forEach(T=>xt(u,T.trim()))),y&&(D.info("Setting state styles",u,y),(typeof y=="string"?[y]:y).forEach(T=>_e(u,T.trim()))),k&&(D.info("Setting state styles",u,y),(typeof k=="string"?[k]:k).forEach(T=>me(u,T.trim())))},Pt=function(t){ct={root:Bt()},g=ct.root,F=0,P=wt(),t||Wt()},V=function(t){return g.states[t]},oe=function(){return g.states},he=function(){D.info("Documents = ",ct)},ue=function(){return g.relations};function mt(t=""){let s=t;return t===bt&&(F++,s=`${Ot}${F}`),s}function Tt(t="",s=Et){return t===bt?Ot:s}function fe(t=""){let s=t;return t===Nt&&(F++,s=`${Rt}${F}`),s}function de(t="",s=Et){return t===Nt?Rt:s}function ye(t,s,a){let h=mt(t.id.trim()),f=Tt(t.id.trim(),t.type),d=mt(s.id.trim()),y=Tt(s.id.trim(),s.type);I(h,f,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),I(d,y,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles),g.relations.push({id1:h,id2:d,relationTitle:ot.sanitizeText(a,Y())})}const Ft=function(t,s,a){if(typeof t=="object")ye(t,s,a);else{const h=mt(t.trim()),f=Tt(t),d=fe(s.trim()),y=de(s);I(h,f),I(d,y),g.relations.push({id1:h,id2:d,title:ot.sanitizeText(a,Y())})}},kt=function(t,s){const a=g.states[t],h=s.startsWith(":")?s.replace(":","").trim():s;a.descriptions.push(ot.sanitizeText(h,Y()))},pe=function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},Se=()=>(Lt++,"divider-id-"+Lt),Vt=function(t,s=""){P[t]===void 0&&(P[t]={id:t,styles:[],textStyles:[]});const a=P[t];s!=null&&s.split(se).forEach(h=>{const f=h.replace(/([^;]*);/,"$1").trim();if(h.match(vt)){const y=f.replace(At,ee).replace(vt,At);a.textStyles.push(y)}a.styles.push(f)})},ge=function(){return P},xt=function(t,s){t.split(",").forEach(function(a){let h=V(a);if(h===void 0){const f=a.trim();I(f),h=V(f)}h.classes.push(s)})},_e=function(t,s){const a=V(t);a!==void 0&&a.textStyles.push(s)},me=function(t,s){const a=V(t);a!==void 0&&a.textStyles.push(s)},Te=()=>$t,ke=t=>{$t=t},Ee=t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),ve={getConfig:()=>Y().state,addState:I,clear:Pt,getState:V,getStates:oe,getRelations:ue,getClasses:ge,getDirection:Te,addRelation:Ft,getDividerId:Se,setDirection:ke,cleanupLabel:pe,lineType:ie,relationType:re,logDocuments:he,getRootDoc:ae,setRootDoc:ne,getRootDocV2:le,extract:ce,trimColon:Ee,getAccTitle:Ut,setAccTitle:zt,getAccDescription:Mt,setAccDescription:Ht,addStyleClass:Vt,setCssClass:xt,addDescription:kt,setDiagramTitle:Xt,getDiagramTitle:Kt},be=t=>` +`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var n=this.next();return n||this.lex()},begin:function(n){this.conditionStack.push(n)},popState:function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},pushState:function(n){this.begin(n)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(n,i,o,p){switch(o){case 0:return 40;case 1:return 44;case 2:return 45;case 3:return 46;case 4:return 47;case 5:break;case 6:break;case 7:return 5;case 8:break;case 9:break;case 10:break;case 11:break;case 12:return this.pushState("SCALE"),16;case 13:return 17;case 14:this.popState();break;case 15:return this.begin("acc_title"),32;case 16:return this.popState(),"acc_title_value";case 17:return this.begin("acc_descr"),34;case 18:return this.popState(),"acc_descr_value";case 19:this.begin("acc_descr_multiline");break;case 20:this.popState();break;case 21:return"acc_descr_multiline_value";case 22:return this.pushState("CLASSDEF"),37;case 23:return this.popState(),this.pushState("CLASSDEFID"),"DEFAULT_CLASSDEF_ID";case 24:return this.popState(),this.pushState("CLASSDEFID"),38;case 25:return this.popState(),39;case 26:return this.pushState("CLASS"),41;case 27:return this.popState(),this.pushState("CLASS_STYLE"),42;case 28:return this.popState(),43;case 29:return this.pushState("SCALE"),16;case 30:return 17;case 31:this.popState();break;case 32:this.pushState("STATE");break;case 33:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),i.yytext=i.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),i.yytext=i.yytext.slice(0,-10).trim(),26;case 39:return 44;case 40:return 45;case 41:return 46;case 42:return 47;case 43:this.pushState("STATE_STRING");break;case 44:return this.pushState("STATE_ID"),"AS";case 45:return this.popState(),"ID";case 46:this.popState();break;case 47:return"STATE_DESCR";case 48:return 18;case 49:this.popState();break;case 50:return this.popState(),this.pushState("struct"),19;case 51:break;case 52:return this.popState(),20;case 53:break;case 54:return this.begin("NOTE"),28;case 55:return this.popState(),this.pushState("NOTE_ID"),52;case 56:return this.popState(),this.pushState("NOTE_ID"),53;case 57:this.popState(),this.pushState("FLOATING_NOTE");break;case 58:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 59:break;case 60:return"NOTE_TEXT";case 61:return this.popState(),"ID";case 62:return this.popState(),this.pushState("NOTE_TEXT"),23;case 63:return this.popState(),i.yytext=i.yytext.substr(2).trim(),30;case 64:return this.popState(),i.yytext=i.yytext.slice(0,-8).trim(),30;case 65:return 6;case 66:return 6;case 67:return 15;case 68:return 50;case 69:return 23;case 70:return i.yytext=i.yytext.trim(),13;case 71:return 14;case 72:return 27;case 73:return 51;case 74:return 5;case 75:return"INVALID"}},rules:[/^(?:default\b)/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:classDef\s+)/i,/^(?:DEFAULT\s+)/i,/^(?:\w+\s+)/i,/^(?:[^\n]*)/i,/^(?:class\s+)/i,/^(?:(\w+)+((,\s*\w+)*))/i,/^(?:[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?::::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},struct:{rules:[9,10,22,26,32,39,40,41,42,51,52,53,54,68,69,70,71,72],inclusive:!1},FLOATING_NOTE_ID:{rules:[61],inclusive:!1},FLOATING_NOTE:{rules:[58,59,60],inclusive:!1},NOTE_TEXT:{rules:[63,64],inclusive:!1},NOTE_ID:{rules:[62],inclusive:!1},NOTE:{rules:[55,56,57],inclusive:!1},CLASS_STYLE:{rules:[28],inclusive:!1},CLASS:{rules:[27],inclusive:!1},CLASSDEFID:{rules:[25],inclusive:!1},CLASSDEF:{rules:[23,24],inclusive:!1},acc_descr_multiline:{rules:[20,21],inclusive:!1},acc_descr:{rules:[18],inclusive:!1},acc_title:{rules:[16],inclusive:!1},SCALE:{rules:[13,14,30,31],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[45],inclusive:!1},STATE_STRING:{rules:[46,47],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,33,34,35,36,37,38,43,44,48,49,50],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,10,11,12,15,17,19,22,26,29,32,50,54,65,66,67,68,69,70,71,73,74,75],inclusive:!0}}};return C}();ht.lexer=Yt;function ut(){this.yy={}}return ut.prototype=ht,ht.Parser=ut,new ut}();gt.parser=gt;const De=gt,qt="LR",Ce="TB",_t="state",It="relation",Qt="classDef",Zt="applyClass",Et="default",te="divider",bt="[*]",Ot="start",Nt=bt,Rt="end",At="color",vt="fill",ee="bgFill",se=",";function wt(){return{}}let $t=qt,lt=[],P=wt();const Bt=()=>({relations:[],states:{},documents:{}});let ct={root:Bt()},g=ct.root,F=0,Lt=0;const ie={LINE:0,DOTTED_LINE:1},re={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},nt=t=>JSON.parse(JSON.stringify(t)),ne=t=>{D.info("Setting root doc",t),lt=t},ae=()=>lt,at=(t,s,a)=>{if(s.stmt===It)at(t,s.state1,!0),at(t,s.state2,!1);else if(s.stmt===_t&&(s.id==="[*]"?(s.id=a?t.id+"_start":t.id+"_end",s.start=a):s.id=s.id.trim()),s.doc){const h=[];let f=[],d;for(d=0;d0&&f.length>0){const y={stmt:_t,id:Jt(),type:"divider",doc:nt(f)};h.push(nt(y)),s.doc=h}s.doc.forEach(y=>at(s,y,!0))}},le=()=>(at({id:"root"},{id:"root",doc:lt},!0),{id:"root",doc:lt}),ce=t=>{let s;t.doc?s=t.doc:s=t,D.info(s),Pt(!0),D.info("Extract",s),s.forEach(a=>{switch(a.stmt){case _t:I(a.id.trim(),a.type,a.doc,a.description,a.note,a.classes,a.styles,a.textStyles);break;case It:Ft(a.state1,a.state2,a.description);break;case Qt:Vt(a.id.trim(),a.classes);break;case Zt:xt(a.id.trim(),a.styleClass);break}})},I=function(t,s=Et,a=null,h=null,f=null,d=null,y=null,k=null){const u=t==null?void 0:t.trim();g.states[u]===void 0?(D.info("Adding state ",u,h),g.states[u]={id:u,descriptions:[],type:s,doc:a,note:f,classes:[],styles:[],textStyles:[]}):(g.states[u].doc||(g.states[u].doc=a),g.states[u].type||(g.states[u].type=s)),h&&(D.info("Setting state description",u,h),typeof h=="string"&&kt(u,h.trim()),typeof h=="object"&&h.forEach(E=>kt(u,E.trim()))),f&&(g.states[u].note=f,g.states[u].note.text=ot.sanitizeText(g.states[u].note.text,Y())),d&&(D.info("Setting state classes",u,d),(typeof d=="string"?[d]:d).forEach(T=>xt(u,T.trim()))),y&&(D.info("Setting state styles",u,y),(typeof y=="string"?[y]:y).forEach(T=>_e(u,T.trim()))),k&&(D.info("Setting state styles",u,y),(typeof k=="string"?[k]:k).forEach(T=>me(u,T.trim())))},Pt=function(t){ct={root:Bt()},g=ct.root,F=0,P=wt(),t||Wt()},V=function(t){return g.states[t]},oe=function(){return g.states},he=function(){D.info("Documents = ",ct)},ue=function(){return g.relations};function mt(t=""){let s=t;return t===bt&&(F++,s=`${Ot}${F}`),s}function Tt(t="",s=Et){return t===bt?Ot:s}function fe(t=""){let s=t;return t===Nt&&(F++,s=`${Rt}${F}`),s}function de(t="",s=Et){return t===Nt?Rt:s}function ye(t,s,a){let h=mt(t.id.trim()),f=Tt(t.id.trim(),t.type),d=mt(s.id.trim()),y=Tt(s.id.trim(),s.type);I(h,f,t.doc,t.description,t.note,t.classes,t.styles,t.textStyles),I(d,y,s.doc,s.description,s.note,s.classes,s.styles,s.textStyles),g.relations.push({id1:h,id2:d,relationTitle:ot.sanitizeText(a,Y())})}const Ft=function(t,s,a){if(typeof t=="object")ye(t,s,a);else{const h=mt(t.trim()),f=Tt(t),d=fe(s.trim()),y=de(s);I(h,f),I(d,y),g.relations.push({id1:h,id2:d,title:ot.sanitizeText(a,Y())})}},kt=function(t,s){const a=g.states[t],h=s.startsWith(":")?s.replace(":","").trim():s;a.descriptions.push(ot.sanitizeText(h,Y()))},pe=function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},Se=()=>(Lt++,"divider-id-"+Lt),Vt=function(t,s=""){P[t]===void 0&&(P[t]={id:t,styles:[],textStyles:[]});const a=P[t];s!=null&&s.split(se).forEach(h=>{const f=h.replace(/([^;]*);/,"$1").trim();if(h.match(At)){const y=f.replace(vt,ee).replace(At,vt);a.textStyles.push(y)}a.styles.push(f)})},ge=function(){return P},xt=function(t,s){t.split(",").forEach(function(a){let h=V(a);if(h===void 0){const f=a.trim();I(f),h=V(f)}h.classes.push(s)})},_e=function(t,s){const a=V(t);a!==void 0&&a.textStyles.push(s)},me=function(t,s){const a=V(t);a!==void 0&&a.textStyles.push(s)},Te=()=>$t,ke=t=>{$t=t},Ee=t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),Ae={getConfig:()=>Y().state,addState:I,clear:Pt,getState:V,getStates:oe,getRelations:ue,getClasses:ge,getDirection:Te,addRelation:Ft,getDividerId:Se,setDirection:ke,cleanupLabel:pe,lineType:ie,relationType:re,logDocuments:he,getRootDoc:ae,setRootDoc:ne,getRootDocV2:le,extract:ce,trimColon:Ee,getAccTitle:Ut,setAccTitle:zt,getAccDescription:Mt,setAccDescription:Ht,addStyleClass:Vt,setCssClass:xt,addDescription:kt,setDiagramTitle:Xt,getDiagramTitle:Kt},be=t=>` defs #statediagram-barbEnd { fill: ${t.transitionColor}; stroke: ${t.transitionColor}; @@ -204,4 +204,4 @@ g.stateGroup line { font-size: 18px; fill: ${t.textColor}; } -`,Ae=be;export{Et as D,It as S,te as a,_t as b,Ce as c,ve as d,De as p,Ae as s}; +`,ve=be;export{Et as D,It as S,te as a,_t as b,Ce as c,Ae as d,De as p,ve as s}; diff --git a/assets/chunks/styles-b83b31c9.DpjWbUrA.js b/assets/chunks/styles-e2b9d258.DqwhFH5o.js similarity index 99% rename from assets/chunks/styles-b83b31c9.DpjWbUrA.js rename to assets/chunks/styles-e2b9d258.DqwhFH5o.js index 0adc961b..2ea33132 100644 --- a/assets/chunks/styles-b83b31c9.DpjWbUrA.js +++ b/assets/chunks/styles-e2b9d258.DqwhFH5o.js @@ -1,4 +1,4 @@ -import{s as ut,g as rt,a as at,b as lt,c as F,E as ct,F as ot,j as v,G as ht,l as At,A as We,h as z,d as pt,ar as Re}from"../app.CbQoAe_D.js";var Ve=function(){var e=function(x,u,a,h){for(a=a||{},h=x.length;h--;a[x[h]]=u);return a},i=[1,17],r=[1,18],l=[1,19],o=[1,39],A=[1,40],g=[1,25],D=[1,23],B=[1,24],_=[1,31],fe=[1,32],de=[1,33],Ee=[1,34],Ce=[1,35],me=[1,36],be=[1,26],ge=[1,27],ke=[1,28],Te=[1,29],d=[1,43],Fe=[1,30],E=[1,42],C=[1,44],m=[1,41],k=[1,45],ye=[1,9],c=[1,8,9],Y=[1,56],j=[1,57],Q=[1,58],X=[1,59],H=[1,60],De=[1,61],Be=[1,62],W=[1,8,9,39],Ge=[1,74],M=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],q=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],J=[13,74,80,95,97,98],G=[13,64,65,74,80,95,97,98],Ue=[13,59,60,61,62,63,74,80,95,97,98],_e=[1,93],Z=[1,110],$=[1,108],ee=[1,102],te=[1,103],se=[1,104],ie=[1,105],ne=[1,106],ue=[1,107],re=[1,109],Se=[1,8,9,37,39,42],ae=[1,8,9,21],ze=[1,8,9,78],S=[1,8,9,21,73,74,78,80,81,82,83,84,85],Ne={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(u,a,h,n,f,t,U){var s=t.length-1;switch(f){case 8:this.$=t[s-1];break;case 9:case 11:case 12:this.$=t[s];break;case 10:case 13:this.$=t[s-1]+t[s];break;case 14:case 15:this.$=t[s-1]+"~"+t[s]+"~";break;case 16:n.addRelation(t[s]);break;case 17:t[s-1].title=n.cleanupLabel(t[s]),n.addRelation(t[s-1]);break;case 27:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(t[s-3],t[s-1]);break;case 31:n.addClassesToNamespace(t[s-4],t[s-1]);break;case 32:this.$=t[s],n.addNamespace(t[s]);break;case 33:this.$=[t[s]];break;case 34:this.$=[t[s-1]];break;case 35:t[s].unshift(t[s-2]),this.$=t[s];break;case 37:n.setCssClass(t[s-2],t[s]);break;case 38:n.addMembers(t[s-3],t[s-1]);break;case 39:n.setCssClass(t[s-5],t[s-3]),n.addMembers(t[s-5],t[s-1]);break;case 40:this.$=t[s],n.addClass(t[s]);break;case 41:this.$=t[s-1],n.addClass(t[s-1]),n.setClassLabel(t[s-1],t[s]);break;case 42:n.addAnnotation(t[s],t[s-2]);break;case 43:this.$=[t[s]];break;case 44:t[s].push(t[s-1]),this.$=t[s];break;case 45:break;case 46:n.addMember(t[s-1],n.cleanupLabel(t[s]));break;case 47:break;case 48:break;case 49:this.$={id1:t[s-2],id2:t[s],relation:t[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:t[s-3],id2:t[s],relation:t[s-1],relationTitle1:t[s-2],relationTitle2:"none"};break;case 51:this.$={id1:t[s-3],id2:t[s],relation:t[s-2],relationTitle1:"none",relationTitle2:t[s-1]};break;case 52:this.$={id1:t[s-4],id2:t[s],relation:t[s-2],relationTitle1:t[s-3],relationTitle2:t[s-1]};break;case 53:n.addNote(t[s],t[s-1]);break;case 54:n.addNote(t[s]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:t[s-2],type2:t[s],lineType:t[s-1]};break;case 60:this.$={type1:"none",type2:t[s],lineType:t[s-1]};break;case 61:this.$={type1:t[s-1],type2:"none",lineType:t[s]};break;case 62:this.$={type1:"none",type2:"none",lineType:t[s]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=t[s-2],n.setClickEvent(t[s-1],t[s]);break;case 71:case 77:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 72:this.$=t[s-2],n.setLink(t[s-1],t[s]);break;case 73:this.$=t[s-3],n.setLink(t[s-2],t[s-1],t[s]);break;case 74:this.$=t[s-3],n.setLink(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 75:this.$=t[s-4],n.setLink(t[s-3],t[s-2],t[s]),n.setTooltip(t[s-3],t[s-1]);break;case 78:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 79:this.$=t[s-4],n.setClickEvent(t[s-3],t[s-2],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 80:this.$=t[s-3],n.setLink(t[s-2],t[s]);break;case 81:this.$=t[s-4],n.setLink(t[s-3],t[s-1],t[s]);break;case 82:this.$=t[s-4],n.setLink(t[s-3],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 83:this.$=t[s-5],n.setLink(t[s-4],t[s-2],t[s]),n.setTooltip(t[s-4],t[s-1]);break;case 84:this.$=t[s-2],n.setCssStyle(t[s-1],t[s]);break;case 85:n.setCssClass(t[s-1],t[s]);break;case 86:this.$=[t[s]];break;case 87:t[s-2].push(t[s]),this.$=t[s-2];break;case 89:this.$=t[s-1]+t[s];break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:i,33:r,35:l,36:21,40:o,41:22,44:A,45:g,47:D,48:B,50:_,52:fe,53:de,54:Ee,55:Ce,56:me,66:be,67:ge,69:ke,73:Te,74:d,76:Fe,80:E,95:C,97:m,98:k},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(ye,[2,5],{8:[1,46]}),{8:[1,47]},e(c,[2,16],{21:[1,48]}),e(c,[2,18]),e(c,[2,19]),e(c,[2,20]),e(c,[2,21]),e(c,[2,22]),e(c,[2,23]),e(c,[2,24]),e(c,[2,25]),e(c,[2,26]),{32:[1,49]},{34:[1,50]},e(c,[2,29]),e(c,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:Y,60:j,61:Q,62:X,63:H,64:De,65:Be}),{37:[1,63]},e(W,[2,36],{37:[1,65],42:[1,64]}),e(c,[2,47]),e(c,[2,48]),{16:66,74:d,80:E,95:C,97:m},{16:37,17:67,18:38,74:d,80:E,95:C,97:m,98:k},{16:37,17:68,18:38,74:d,80:E,95:C,97:m,98:k},{16:37,17:69,18:38,74:d,80:E,95:C,97:m,98:k},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:d,80:E,95:C,97:m,98:k},{13:Ge,51:73},e(c,[2,55]),e(c,[2,56]),e(c,[2,57]),e(c,[2,58]),e(M,[2,11],{16:37,18:38,17:75,19:[1,76],74:d,80:E,95:C,97:m,98:k}),e(M,[2,12],{19:[1,77]}),{15:78,16:79,74:d,80:E,95:C,97:m},{16:37,17:80,18:38,74:d,80:E,95:C,97:m,98:k},e(q,[2,112]),e(q,[2,113]),e(q,[2,114]),e(q,[2,115]),e([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),e(ye,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:i,33:r,35:l,40:o,44:A,45:g,47:D,48:B,50:_,52:fe,53:de,54:Ee,55:Ce,56:me,66:be,67:ge,69:ke,73:Te,74:d,76:Fe,80:E,95:C,97:m,98:k}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:i,33:r,35:l,36:21,40:o,41:22,44:A,45:g,47:D,48:B,50:_,52:fe,53:de,54:Ee,55:Ce,56:me,66:be,67:ge,69:ke,73:Te,74:d,76:Fe,80:E,95:C,97:m,98:k},e(c,[2,17]),e(c,[2,27]),e(c,[2,28]),{13:[1,84],16:37,17:83,18:38,74:d,80:E,95:C,97:m,98:k},{49:85,57:54,58:55,59:Y,60:j,61:Q,62:X,63:H,64:De,65:Be},e(c,[2,46]),{58:86,64:De,65:Be},e(J,[2,62],{57:87,59:Y,60:j,61:Q,62:X,63:H}),e(G,[2,63]),e(G,[2,64]),e(G,[2,65]),e(G,[2,66]),e(G,[2,67]),e(Ue,[2,68]),e(Ue,[2,69]),{8:[1,89],23:90,38:88,41:22,44:A},{16:91,74:d,80:E,95:C,97:m},{43:92,47:_e},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:Z,73:$,74:ee,75:99,77:100,79:101,80:te,81:se,82:ie,83:ne,84:ue,85:re},{74:[1,111]},{13:Ge,51:112},e(c,[2,54]),e(c,[2,117]),e(M,[2,13]),e(M,[2,14]),e(M,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:d,80:E,95:C,97:m},e(Se,[2,40],{11:114,12:[1,115]}),e(ye,[2,7]),{9:[1,116]},e(ae,[2,49]),{16:37,17:117,18:38,74:d,80:E,95:C,97:m,98:k},{13:[1,119],16:37,17:118,18:38,74:d,80:E,95:C,97:m,98:k},e(J,[2,61],{57:120,59:Y,60:j,61:Q,62:X,63:H}),e(J,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:A},{8:[1,123],39:[2,33]},e(W,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:_e},{16:37,17:127,18:38,74:d,80:E,95:C,97:m,98:k},e(c,[2,70],{13:[1,128]}),e(c,[2,72],{13:[1,130],68:[1,129]}),e(c,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},e(c,[2,84],{78:[1,134]}),e(ze,[2,86],{79:135,21:Z,73:$,74:ee,80:te,81:se,82:ie,83:ne,84:ue,85:re}),e(S,[2,88]),e(S,[2,90]),e(S,[2,91]),e(S,[2,92]),e(S,[2,93]),e(S,[2,94]),e(S,[2,95]),e(S,[2,96]),e(S,[2,97]),e(S,[2,98]),e(c,[2,85]),e(c,[2,53]),{37:[2,10]},e(Se,[2,41]),{13:[1,136]},{1:[2,4]},e(ae,[2,51]),e(ae,[2,50]),{16:37,17:137,18:38,74:d,80:E,95:C,97:m,98:k},e(J,[2,59]),e(c,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:A},{43:140,47:_e},e(W,[2,38]),{39:[2,44]},e(c,[2,42]),e(c,[2,71]),e(c,[2,73]),e(c,[2,74],{68:[1,141]}),e(c,[2,77]),e(c,[2,78],{13:[1,142]}),e(c,[2,80],{13:[1,144],68:[1,143]}),{21:Z,73:$,74:ee,77:145,79:101,80:te,81:se,82:ie,83:ne,84:ue,85:re},e(S,[2,89]),{14:[1,146]},e(ae,[2,52]),e(c,[2,31]),{39:[2,35]},{39:[1,147]},e(c,[2,75]),e(c,[2,79]),e(c,[2,81]),e(c,[2,82],{68:[1,148]}),e(ze,[2,87],{79:135,21:Z,73:$,74:ee,80:te,81:se,82:ie,83:ne,84:ue,85:re}),e(Se,[2,8]),e(W,[2,39]),e(c,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(u,a){if(a.recoverable)this.trace(u);else{var h=new Error(u);throw h.hash=a,h}},parse:function(u){var a=this,h=[0],n=[],f=[null],t=[],U=this.table,s="",le=0,Ke=0,tt=2,Ye=1,st=t.slice.call(arguments,1),b=Object.create(this.lexer),I={yy:{}};for(var ve in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ve)&&(I.yy[ve]=this.yy[ve]);b.setInput(u,I.yy),I.yy.lexer=b,I.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var xe=b.yylloc;t.push(xe);var it=b.options&&b.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function nt(){var L;return L=n.pop()||b.lex()||Ye,typeof L!="number"&&(L instanceof Array&&(n=L,L=n.pop()),L=a.symbols_[L]||L),L}for(var T,R,y,Oe,P={},ce,N,je,oe;;){if(R=h[h.length-1],this.defaultActions[R]?y=this.defaultActions[R]:((T===null||typeof T>"u")&&(T=nt()),y=U[R]&&U[R][T]),typeof y>"u"||!y.length||!y[0]){var Ie="";oe=[];for(ce in U[R])this.terminals_[ce]&&ce>tt&&oe.push("'"+this.terminals_[ce]+"'");b.showPosition?Ie="Parse error on line "+(le+1)+`: +import{s as ut,g as rt,a as at,b as lt,c as F,x as ct,y as ot,j as v,A as ht,l as At,z as We,h as z,d as pt,ar as Re}from"../app.DRN3unl1.js";var Ve=function(){var e=function(x,u,a,h){for(a=a||{},h=x.length;h--;a[x[h]]=u);return a},i=[1,17],r=[1,18],l=[1,19],o=[1,39],A=[1,40],g=[1,25],D=[1,23],B=[1,24],_=[1,31],fe=[1,32],de=[1,33],Ee=[1,34],Ce=[1,35],me=[1,36],be=[1,26],ge=[1,27],ke=[1,28],Te=[1,29],d=[1,43],Fe=[1,30],E=[1,42],C=[1,44],m=[1,41],k=[1,45],ye=[1,9],c=[1,8,9],Y=[1,56],j=[1,57],Q=[1,58],X=[1,59],H=[1,60],De=[1,61],Be=[1,62],W=[1,8,9,39],Ge=[1,74],M=[1,8,9,12,13,21,37,39,42,59,60,61,62,63,64,65,70,72],q=[1,8,9,12,13,19,21,37,39,42,46,59,60,61,62,63,64,65,70,72,74,80,95,97,98],J=[13,74,80,95,97,98],G=[13,64,65,74,80,95,97,98],Ue=[13,59,60,61,62,63,74,80,95,97,98],_e=[1,93],Z=[1,110],$=[1,108],ee=[1,102],te=[1,103],se=[1,104],ie=[1,105],ne=[1,106],ue=[1,107],re=[1,109],Se=[1,8,9,37,39,42],ae=[1,8,9,21],ze=[1,8,9,78],S=[1,8,9,21,73,74,78,80,81,82,83,84,85],Ne={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,className:17,classLiteralName:18,GENERICTYPE:19,relationStatement:20,LABEL:21,namespaceStatement:22,classStatement:23,memberStatement:24,annotationStatement:25,clickStatement:26,styleStatement:27,cssClassStatement:28,noteStatement:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,namespaceIdentifier:36,STRUCT_START:37,classStatements:38,STRUCT_STOP:39,NAMESPACE:40,classIdentifier:41,STYLE_SEPARATOR:42,members:43,CLASS:44,ANNOTATION_START:45,ANNOTATION_END:46,MEMBER:47,SEPARATOR:48,relation:49,NOTE_FOR:50,noteText:51,NOTE:52,direction_tb:53,direction_bt:54,direction_rl:55,direction_lr:56,relationType:57,lineType:58,AGGREGATION:59,EXTENSION:60,COMPOSITION:61,DEPENDENCY:62,LOLLIPOP:63,LINE:64,DOTTED_LINE:65,CALLBACK:66,LINK:67,LINK_TARGET:68,CLICK:69,CALLBACK_NAME:70,CALLBACK_ARGS:71,HREF:72,STYLE:73,ALPHA:74,stylesOpt:75,CSSCLASS:76,style:77,COMMA:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,commentToken:86,textToken:87,graphCodeTokens:88,textNoTagsToken:89,TAGSTART:90,TAGEND:91,"==":92,"--":93,DEFAULT:94,MINUS:95,keywords:96,UNICODE_TEXT:97,BQUOTE_STR:98,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",19:"GENERICTYPE",21:"LABEL",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",37:"STRUCT_START",39:"STRUCT_STOP",40:"NAMESPACE",42:"STYLE_SEPARATOR",44:"CLASS",45:"ANNOTATION_START",46:"ANNOTATION_END",47:"MEMBER",48:"SEPARATOR",50:"NOTE_FOR",52:"NOTE",53:"direction_tb",54:"direction_bt",55:"direction_rl",56:"direction_lr",59:"AGGREGATION",60:"EXTENSION",61:"COMPOSITION",62:"DEPENDENCY",63:"LOLLIPOP",64:"LINE",65:"DOTTED_LINE",66:"CALLBACK",67:"LINK",68:"LINK_TARGET",69:"CLICK",70:"CALLBACK_NAME",71:"CALLBACK_ARGS",72:"HREF",73:"STYLE",74:"ALPHA",76:"CSSCLASS",78:"COMMA",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",88:"graphCodeTokens",90:"TAGSTART",91:"TAGEND",92:"==",93:"--",94:"DEFAULT",95:"MINUS",96:"keywords",97:"UNICODE_TEXT",98:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,2],[17,1],[17,1],[17,2],[17,2],[17,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[22,4],[22,5],[36,2],[38,1],[38,2],[38,3],[23,1],[23,3],[23,4],[23,6],[41,2],[41,3],[25,4],[43,1],[43,2],[24,1],[24,2],[24,1],[24,1],[20,3],[20,4],[20,4],[20,5],[29,3],[29,2],[30,1],[30,1],[30,1],[30,1],[49,3],[49,2],[49,2],[49,1],[57,1],[57,1],[57,1],[57,1],[57,1],[58,1],[58,1],[26,3],[26,4],[26,3],[26,4],[26,4],[26,5],[26,3],[26,4],[26,4],[26,5],[26,4],[26,5],[26,5],[26,6],[27,3],[28,3],[75,1],[75,3],[77,1],[77,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[86,1],[86,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[89,1],[89,1],[89,1],[89,1],[16,1],[16,1],[16,1],[16,1],[18,1],[51,1]],performAction:function(u,a,h,n,f,t,U){var s=t.length-1;switch(f){case 8:this.$=t[s-1];break;case 9:case 11:case 12:this.$=t[s];break;case 10:case 13:this.$=t[s-1]+t[s];break;case 14:case 15:this.$=t[s-1]+"~"+t[s]+"~";break;case 16:n.addRelation(t[s]);break;case 17:t[s-1].title=n.cleanupLabel(t[s]),n.addRelation(t[s-1]);break;case 27:this.$=t[s].trim(),n.setAccTitle(this.$);break;case 28:case 29:this.$=t[s].trim(),n.setAccDescription(this.$);break;case 30:n.addClassesToNamespace(t[s-3],t[s-1]);break;case 31:n.addClassesToNamespace(t[s-4],t[s-1]);break;case 32:this.$=t[s],n.addNamespace(t[s]);break;case 33:this.$=[t[s]];break;case 34:this.$=[t[s-1]];break;case 35:t[s].unshift(t[s-2]),this.$=t[s];break;case 37:n.setCssClass(t[s-2],t[s]);break;case 38:n.addMembers(t[s-3],t[s-1]);break;case 39:n.setCssClass(t[s-5],t[s-3]),n.addMembers(t[s-5],t[s-1]);break;case 40:this.$=t[s],n.addClass(t[s]);break;case 41:this.$=t[s-1],n.addClass(t[s-1]),n.setClassLabel(t[s-1],t[s]);break;case 42:n.addAnnotation(t[s],t[s-2]);break;case 43:this.$=[t[s]];break;case 44:t[s].push(t[s-1]),this.$=t[s];break;case 45:break;case 46:n.addMember(t[s-1],n.cleanupLabel(t[s]));break;case 47:break;case 48:break;case 49:this.$={id1:t[s-2],id2:t[s],relation:t[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 50:this.$={id1:t[s-3],id2:t[s],relation:t[s-1],relationTitle1:t[s-2],relationTitle2:"none"};break;case 51:this.$={id1:t[s-3],id2:t[s],relation:t[s-2],relationTitle1:"none",relationTitle2:t[s-1]};break;case 52:this.$={id1:t[s-4],id2:t[s],relation:t[s-2],relationTitle1:t[s-3],relationTitle2:t[s-1]};break;case 53:n.addNote(t[s],t[s-1]);break;case 54:n.addNote(t[s]);break;case 55:n.setDirection("TB");break;case 56:n.setDirection("BT");break;case 57:n.setDirection("RL");break;case 58:n.setDirection("LR");break;case 59:this.$={type1:t[s-2],type2:t[s],lineType:t[s-1]};break;case 60:this.$={type1:"none",type2:t[s],lineType:t[s-1]};break;case 61:this.$={type1:t[s-1],type2:"none",lineType:t[s]};break;case 62:this.$={type1:"none",type2:"none",lineType:t[s]};break;case 63:this.$=n.relationType.AGGREGATION;break;case 64:this.$=n.relationType.EXTENSION;break;case 65:this.$=n.relationType.COMPOSITION;break;case 66:this.$=n.relationType.DEPENDENCY;break;case 67:this.$=n.relationType.LOLLIPOP;break;case 68:this.$=n.lineType.LINE;break;case 69:this.$=n.lineType.DOTTED_LINE;break;case 70:case 76:this.$=t[s-2],n.setClickEvent(t[s-1],t[s]);break;case 71:case 77:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 72:this.$=t[s-2],n.setLink(t[s-1],t[s]);break;case 73:this.$=t[s-3],n.setLink(t[s-2],t[s-1],t[s]);break;case 74:this.$=t[s-3],n.setLink(t[s-2],t[s-1]),n.setTooltip(t[s-2],t[s]);break;case 75:this.$=t[s-4],n.setLink(t[s-3],t[s-2],t[s]),n.setTooltip(t[s-3],t[s-1]);break;case 78:this.$=t[s-3],n.setClickEvent(t[s-2],t[s-1],t[s]);break;case 79:this.$=t[s-4],n.setClickEvent(t[s-3],t[s-2],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 80:this.$=t[s-3],n.setLink(t[s-2],t[s]);break;case 81:this.$=t[s-4],n.setLink(t[s-3],t[s-1],t[s]);break;case 82:this.$=t[s-4],n.setLink(t[s-3],t[s-1]),n.setTooltip(t[s-3],t[s]);break;case 83:this.$=t[s-5],n.setLink(t[s-4],t[s-2],t[s]),n.setTooltip(t[s-4],t[s-1]);break;case 84:this.$=t[s-2],n.setCssStyle(t[s-1],t[s]);break;case 85:n.setCssClass(t[s-1],t[s]);break;case 86:this.$=[t[s]];break;case 87:t[s-2].push(t[s]),this.$=t[s-2];break;case 89:this.$=t[s-1]+t[s];break}},table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:i,33:r,35:l,36:21,40:o,41:22,44:A,45:g,47:D,48:B,50:_,52:fe,53:de,54:Ee,55:Ce,56:me,66:be,67:ge,69:ke,73:Te,74:d,76:Fe,80:E,95:C,97:m,98:k},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},e(ye,[2,5],{8:[1,46]}),{8:[1,47]},e(c,[2,16],{21:[1,48]}),e(c,[2,18]),e(c,[2,19]),e(c,[2,20]),e(c,[2,21]),e(c,[2,22]),e(c,[2,23]),e(c,[2,24]),e(c,[2,25]),e(c,[2,26]),{32:[1,49]},{34:[1,50]},e(c,[2,29]),e(c,[2,45],{49:51,57:54,58:55,13:[1,52],21:[1,53],59:Y,60:j,61:Q,62:X,63:H,64:De,65:Be}),{37:[1,63]},e(W,[2,36],{37:[1,65],42:[1,64]}),e(c,[2,47]),e(c,[2,48]),{16:66,74:d,80:E,95:C,97:m},{16:37,17:67,18:38,74:d,80:E,95:C,97:m,98:k},{16:37,17:68,18:38,74:d,80:E,95:C,97:m,98:k},{16:37,17:69,18:38,74:d,80:E,95:C,97:m,98:k},{74:[1,70]},{13:[1,71]},{16:37,17:72,18:38,74:d,80:E,95:C,97:m,98:k},{13:Ge,51:73},e(c,[2,55]),e(c,[2,56]),e(c,[2,57]),e(c,[2,58]),e(M,[2,11],{16:37,18:38,17:75,19:[1,76],74:d,80:E,95:C,97:m,98:k}),e(M,[2,12],{19:[1,77]}),{15:78,16:79,74:d,80:E,95:C,97:m},{16:37,17:80,18:38,74:d,80:E,95:C,97:m,98:k},e(q,[2,112]),e(q,[2,113]),e(q,[2,114]),e(q,[2,115]),e([1,8,9,12,13,19,21,37,39,42,59,60,61,62,63,64,65,70,72],[2,116]),e(ye,[2,6],{10:5,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,17:20,36:21,41:22,16:37,18:38,5:81,31:i,33:r,35:l,40:o,44:A,45:g,47:D,48:B,50:_,52:fe,53:de,54:Ee,55:Ce,56:me,66:be,67:ge,69:ke,73:Te,74:d,76:Fe,80:E,95:C,97:m,98:k}),{5:82,10:5,16:37,17:20,18:38,20:7,22:8,23:9,24:10,25:11,26:12,27:13,28:14,29:15,30:16,31:i,33:r,35:l,36:21,40:o,41:22,44:A,45:g,47:D,48:B,50:_,52:fe,53:de,54:Ee,55:Ce,56:me,66:be,67:ge,69:ke,73:Te,74:d,76:Fe,80:E,95:C,97:m,98:k},e(c,[2,17]),e(c,[2,27]),e(c,[2,28]),{13:[1,84],16:37,17:83,18:38,74:d,80:E,95:C,97:m,98:k},{49:85,57:54,58:55,59:Y,60:j,61:Q,62:X,63:H,64:De,65:Be},e(c,[2,46]),{58:86,64:De,65:Be},e(J,[2,62],{57:87,59:Y,60:j,61:Q,62:X,63:H}),e(G,[2,63]),e(G,[2,64]),e(G,[2,65]),e(G,[2,66]),e(G,[2,67]),e(Ue,[2,68]),e(Ue,[2,69]),{8:[1,89],23:90,38:88,41:22,44:A},{16:91,74:d,80:E,95:C,97:m},{43:92,47:_e},{46:[1,94]},{13:[1,95]},{13:[1,96]},{70:[1,97],72:[1,98]},{21:Z,73:$,74:ee,75:99,77:100,79:101,80:te,81:se,82:ie,83:ne,84:ue,85:re},{74:[1,111]},{13:Ge,51:112},e(c,[2,54]),e(c,[2,117]),e(M,[2,13]),e(M,[2,14]),e(M,[2,15]),{37:[2,32]},{15:113,16:79,37:[2,9],74:d,80:E,95:C,97:m},e(Se,[2,40],{11:114,12:[1,115]}),e(ye,[2,7]),{9:[1,116]},e(ae,[2,49]),{16:37,17:117,18:38,74:d,80:E,95:C,97:m,98:k},{13:[1,119],16:37,17:118,18:38,74:d,80:E,95:C,97:m,98:k},e(J,[2,61],{57:120,59:Y,60:j,61:Q,62:X,63:H}),e(J,[2,60]),{39:[1,121]},{23:90,38:122,41:22,44:A},{8:[1,123],39:[2,33]},e(W,[2,37],{37:[1,124]}),{39:[1,125]},{39:[2,43],43:126,47:_e},{16:37,17:127,18:38,74:d,80:E,95:C,97:m,98:k},e(c,[2,70],{13:[1,128]}),e(c,[2,72],{13:[1,130],68:[1,129]}),e(c,[2,76],{13:[1,131],71:[1,132]}),{13:[1,133]},e(c,[2,84],{78:[1,134]}),e(ze,[2,86],{79:135,21:Z,73:$,74:ee,80:te,81:se,82:ie,83:ne,84:ue,85:re}),e(S,[2,88]),e(S,[2,90]),e(S,[2,91]),e(S,[2,92]),e(S,[2,93]),e(S,[2,94]),e(S,[2,95]),e(S,[2,96]),e(S,[2,97]),e(S,[2,98]),e(c,[2,85]),e(c,[2,53]),{37:[2,10]},e(Se,[2,41]),{13:[1,136]},{1:[2,4]},e(ae,[2,51]),e(ae,[2,50]),{16:37,17:137,18:38,74:d,80:E,95:C,97:m,98:k},e(J,[2,59]),e(c,[2,30]),{39:[1,138]},{23:90,38:139,39:[2,34],41:22,44:A},{43:140,47:_e},e(W,[2,38]),{39:[2,44]},e(c,[2,42]),e(c,[2,71]),e(c,[2,73]),e(c,[2,74],{68:[1,141]}),e(c,[2,77]),e(c,[2,78],{13:[1,142]}),e(c,[2,80],{13:[1,144],68:[1,143]}),{21:Z,73:$,74:ee,77:145,79:101,80:te,81:se,82:ie,83:ne,84:ue,85:re},e(S,[2,89]),{14:[1,146]},e(ae,[2,52]),e(c,[2,31]),{39:[2,35]},{39:[1,147]},e(c,[2,75]),e(c,[2,79]),e(c,[2,81]),e(c,[2,82],{68:[1,148]}),e(ze,[2,87],{79:135,21:Z,73:$,74:ee,80:te,81:se,82:ie,83:ne,84:ue,85:re}),e(Se,[2,8]),e(W,[2,39]),e(c,[2,83])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],78:[2,32],113:[2,10],116:[2,4],126:[2,44],139:[2,35]},parseError:function(u,a){if(a.recoverable)this.trace(u);else{var h=new Error(u);throw h.hash=a,h}},parse:function(u){var a=this,h=[0],n=[],f=[null],t=[],U=this.table,s="",le=0,Ke=0,tt=2,Ye=1,st=t.slice.call(arguments,1),b=Object.create(this.lexer),I={yy:{}};for(var ve in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ve)&&(I.yy[ve]=this.yy[ve]);b.setInput(u,I.yy),I.yy.lexer=b,I.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var xe=b.yylloc;t.push(xe);var it=b.options&&b.options.ranges;typeof I.yy.parseError=="function"?this.parseError=I.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function nt(){var L;return L=n.pop()||b.lex()||Ye,typeof L!="number"&&(L instanceof Array&&(n=L,L=n.pop()),L=a.symbols_[L]||L),L}for(var T,R,y,Oe,P={},ce,N,je,oe;;){if(R=h[h.length-1],this.defaultActions[R]?y=this.defaultActions[R]:((T===null||typeof T>"u")&&(T=nt()),y=U[R]&&U[R][T]),typeof y>"u"||!y.length||!y[0]){var Ie="";oe=[];for(ce in U[R])this.terminals_[ce]&&ce>tt&&oe.push("'"+this.terminals_[ce]+"'");b.showPosition?Ie="Parse error on line "+(le+1)+`: `+b.showPosition()+` Expecting `+oe.join(", ")+", got '"+(this.terminals_[T]||T)+"'":Ie="Parse error on line "+(le+1)+": Unexpected "+(T==Ye?"end of input":"'"+(this.terminals_[T]||T)+"'"),this.parseError(Ie,{text:b.match,token:this.terminals_[T]||T,line:b.yylineno,loc:xe,expected:oe})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+R+", token: "+T);switch(y[0]){case 1:h.push(T),f.push(b.yytext),t.push(b.yylloc),h.push(y[1]),T=null,Ke=b.yyleng,s=b.yytext,le=b.yylineno,xe=b.yylloc;break;case 2:if(N=this.productions_[y[1]][1],P.$=f[f.length-N],P._$={first_line:t[t.length-(N||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(N||1)].first_column,last_column:t[t.length-1].last_column},it&&(P._$.range=[t[t.length-(N||1)].range[0],t[t.length-1].range[1]]),Oe=this.performAction.apply(P,[s,Ke,le,I.yy,y[1],f,t].concat(st)),typeof Oe<"u")return Oe;N&&(h=h.slice(0,-1*N*2),f=f.slice(0,-1*N),t=t.slice(0,-1*N)),h.push(this.productions_[y[1]][0]),f.push(P.$),t.push(P._$),je=U[h[h.length-2]][h[h.length-1]],h.push(je);break;case 3:return!0}}return!0}},et=function(){var x={EOF:1,parseError:function(a,h){if(this.yy.parser)this.yy.parser.parseError(a,h);else throw new Error(a)},setInput:function(u,a){return this.yy=a||this.yy||{},this._input=u,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var u=this._input[0];this.yytext+=u,this.yyleng++,this.offset++,this.match+=u,this.matched+=u;var a=u.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),u},unput:function(u){var a=u.length,h=u.split(/(?:\r\n?|\n)/g);this._input=u+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),h.length-1&&(this.yylineno-=h.length-1);var f=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:h?(h.length===n.length?this.yylloc.first_column:0)+n[n.length-h.length].length-h[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[f[0],f[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(u){this.unput(this.match.slice(u))},pastInput:function(){var u=this.matched.substr(0,this.matched.length-this.match.length);return(u.length>20?"...":"")+u.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var u=this.match;return u.length<20&&(u+=this._input.substr(0,20-u.length)),(u.substr(0,20)+(u.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var u=this.pastInput(),a=new Array(u.length+1).join("-");return u+this.upcomingInput()+` diff --git a/assets/chunks/svgDrawCommon-5e1cfd1d.Cpp7qDwc.js b/assets/chunks/svgDrawCommon-9d162435.wUjoN1G-.js similarity index 95% rename from assets/chunks/svgDrawCommon-5e1cfd1d.Cpp7qDwc.js rename to assets/chunks/svgDrawCommon-9d162435.wUjoN1G-.js index 98d425a8..8865d70d 100644 --- a/assets/chunks/svgDrawCommon-5e1cfd1d.Cpp7qDwc.js +++ b/assets/chunks/svgDrawCommon-9d162435.wUjoN1G-.js @@ -1 +1 @@ -import{C as o,m as i}from"../app.CbQoAe_D.js";const l=(s,t)=>{const e=s.append("rect");if(e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),t.name&&e.attr("name",t.name),t.rx!==void 0&&e.attr("rx",t.rx),t.ry!==void 0&&e.attr("ry",t.ry),t.attrs!==void 0)for(const r in t.attrs)e.attr(r,t.attrs[r]);return t.class!==void 0&&e.attr("class",t.class),e},x=(s,t)=>{const e={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};l(s,e).lower()},d=(s,t)=>{const e=t.text.replace(o," "),r=s.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),t.class!==void 0&&r.attr("class",t.class);const n=r.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(e),r},h=(s,t,e,r)=>{const n=s.append("image");n.attr("x",t),n.attr("y",e);const a=i.sanitizeUrl(r);n.attr("xlink:href",a)},y=(s,t,e,r)=>{const n=s.append("use");n.attr("x",t),n.attr("y",e);const a=i.sanitizeUrl(r);n.attr("xlink:href",`#${a}`)},g=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),m=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0});export{x as a,m as b,y as c,l as d,h as e,d as f,g}; +import{u as o,m as i}from"../app.DRN3unl1.js";const l=(s,t)=>{const e=s.append("rect");if(e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),t.name&&e.attr("name",t.name),t.rx!==void 0&&e.attr("rx",t.rx),t.ry!==void 0&&e.attr("ry",t.ry),t.attrs!==void 0)for(const r in t.attrs)e.attr(r,t.attrs[r]);return t.class!==void 0&&e.attr("class",t.class),e},x=(s,t)=>{const e={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};l(s,e).lower()},d=(s,t)=>{const e=t.text.replace(o," "),r=s.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),t.class!==void 0&&r.attr("class",t.class);const n=r.append("tspan");return n.attr("x",t.x+t.textMargin*2),n.text(e),r},h=(s,t,e,r)=>{const n=s.append("image");n.attr("x",t),n.attr("y",e);const a=i.sanitizeUrl(r);n.attr("xlink:href",a)},y=(s,t,e,r)=>{const n=s.append("use");n.attr("x",t),n.attr("y",e);const a=i.sanitizeUrl(r);n.attr("xlink:href",`#${a}`)},g=()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),m=()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0});export{x as a,m as b,y as c,l as d,h as e,d as f,g}; diff --git a/assets/chunks/theme.BlGa_csg.js b/assets/chunks/theme.BlGa_csg.js new file mode 100644 index 00000000..a0500b4e --- /dev/null +++ b/assets/chunks/theme.BlGa_csg.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPAlgoliaSearchBox.hP-Vp1-_.js","assets/chunks/framework.B49Yz1nR.js"])))=>i.map(i=>d[i]); +import{d as _,o as a,c,r as l,n as M,a as O,t as I,b as k,w as d,e as f,T as ve,_ as b,u as Ue,i as je,f as ze,g as pe,h as $,j as v,k as r,p as B,l as H,m as q,q as le,s as N,v as G,x as Z,y as R,z as x,A as he,B as Ke,C as qe,D as W,F as C,E,G as Pe,H as ee,I as m,J as F,K as Le,L as te,M as K,N as oe,O as Re,P as Ve,Q as We,R as Je,S as Se,U as ne,V as Xe,W as we,X as Ye,Y as Qe,Z as Te,$ as Ie,a0 as Ze,a1 as xe,a2 as et,a3 as tt,a4 as ot,a5 as nt}from"./framework.B49Yz1nR.js";const st=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:M(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[O(I(e.text),1)])],2))}}),at={key:0,class:"VPBackdrop"},rt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(ve,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",at)):f("",!0)]),_:1}))}}),it=b(rt,[["__scopeId","data-v-54a304ca"]]),V=Ue;function lt(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(je(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=V(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return pe(u)}function X({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=V(),u=$(()=>{var h,g;return{label:(h=e.value.locales[t.value])==null?void 0:h.label,link:((g=e.value.locales[t.value])==null?void 0:g.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:$(()=>Object.entries(e.value.locales).flatMap(([h,g])=>u.value.label===g.label?[]:{text:g.label,link:ct(g.link||(h==="root"?"/":`/${h}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function ct(o,e,t,s){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ut=o=>(B("data-v-6ff51ddd"),o=o(),H(),o),dt={class:"NotFound"},vt={class:"code"},pt={class:"title"},ht=ut(()=>v("div",{class:"divider"},null,-1)),ft={class:"quote"},_t={class:"action"},mt=["href","aria-label"],kt=_({__name:"NotFound",setup(o){const{theme:e}=V(),{currentLang:t}=X();return(s,n)=>{var i,u,p,h,g;return a(),c("div",dt,[v("p",vt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),v("h1",pt,I(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),ht,v("blockquote",ft,I(((p=r(e).notFound)==null?void 0:p.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",_t,[v("a",{class:"link",href:r(pe)(r(t).link),"aria-label":((h=r(e).notFound)==null?void 0:h.linkLabel)??"go to home"},I(((g=r(e).notFound)==null?void 0:g.linkText)??"Take me home"),9,mt)])])}}}),bt=b(kt,[["__scopeId","data-v-6ff51ddd"]]);function Ne(o,e){if(Array.isArray(o))return Y(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ce(n))),s=t?o[t]:[];return Array.isArray(s)?Y(s):Y(s.items,s.base)}function $t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function gt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):q(o,e.link)?!0:e.items?ue(o,e.items):!1}function Y(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=Y(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=V(),s=le("(min-width: 960px)"),n=N(!1),i=$(()=>{const A=t.value.sidebar,T=e.value.relativePath;return A?Ne(A,T):[]}),u=N(i.value);G(i,(A,T)=>{JSON.stringify(A)!==JSON.stringify(T)&&(u.value=i.value)});const p=$(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),h=$(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=$(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),w=$(()=>p.value&&s.value),y=$(()=>p.value?$t(u.value):[]);function P(){n.value=!0}function S(){n.value=!1}function L(){n.value?S():P()}return{isOpen:n,sidebar:u,sidebarGroups:y,hasSidebar:p,hasAside:g,leftAside:h,isSidebarEnabled:w,open:P,close:S,toggle:L}}function yt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",s)}),x(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function Pt(o){const{page:e,hash:t}=V(),s=N(!1),n=$(()=>o.value.collapsed!=null),i=$(()=>!!o.value.link),u=N(!1),p=()=>{u.value=q(e.value.relativePath,o.value.link)};G([e,o,t],p),R(p);const h=$(()=>u.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),g=$(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),he(()=>{(u.value||h.value)&&(s.value=!1)});function w(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:u,hasActiveLink:h,hasChildren:g,toggle:w}}function Lt(){const{hasSidebar:o}=U(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:$(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Me(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:Vt(t),link:"#"+t.id,level:s}});return St(e,o)}function Vt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function St(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return It(o,s,n)}function wt(o,e){const{isAsideEnabled:t}=Lt(),s=lt(i,100);let n=null;R(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{u(location.hash)}),x(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const p=window.scrollY,h=window.innerHeight,g=document.body.offsetHeight,w=Math.abs(p+h-g)<1,y=de.map(({element:S,link:L})=>({link:L,top:Tt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,L)=>S.top-L.top);if(!y.length){u(null);return}if(p<1){u(null);return}if(w){u(y[y.length-1].link);return}let P=null;for(const{link:S,top:L}of y){if(L>p+qe()+4)break;P=S}u(P)}function u(p){n&&n.classList.remove("active"),p==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(p)}"]`);const h=n;h?(h.classList.add("active"),e.value.style.top=h.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Tt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}function It(o,e,t){de.length=0;const s=[],n=[];return o.forEach(i=>{const u={...i,children:[]};let p=n[n.length-1];for(;p&&p.level>=u.level;)n.pop(),p=n[n.length-1];if(u.element.classList.contains("ignore-header")||p&&"shouldIgnore"in p){n.push({level:u.level,shouldIgnore:!0});return}u.level>t||u.level{const n=W("VPDocOutlineItem",!0);return a(),c("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(C,null,E(t.headers,({children:i,link:u,title:p})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:p},I(p),9,Nt),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ae=b(Mt,[["__scopeId","data-v-53c99d69"]]),At={class:"content"},Ct={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Bt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),s=Pe([]);ee(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=N(),i=N();return wt(n,i),(u,p)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[v("div",At,[v("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),v("div",Ct,I(r(Me)(r(t))),1),m(Ae,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Ht=b(Bt,[["__scopeId","data-v-f610f197"]]),Et={class:"VPDocAsideCarbonAds"},Ft=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Et,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Dt=o=>(B("data-v-cb998dce"),o=o(),H(),o),Ot={class:"VPDocAside"},Gt=Dt(()=>v("div",{class:"spacer"},null,-1)),Ut=_({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,s)=>(a(),c("div",Ot,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Ht),l(t.$slots,"aside-outline-after",{},void 0,!0),Gt,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(Ft,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),jt=b(Ut,[["__scopeId","data-v-cb998dce"]]);function zt(){const{theme:o,page:e}=V();return $(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function Kt(){const{page:o,theme:e,frontmatter:t}=V();return $(()=>{var g,w,y,P,S,L,A,T;const s=Ne(e.value.sidebar,o.value.relativePath),n=gt(s),i=qt(n,j=>j.link.replace(/[?#].*$/,"")),u=i.findIndex(j=>q(o.value.relativePath,j.link)),p=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,h=((w=e.value.docFooter)==null?void 0:w.next)===!1&&!t.value.next||t.value.next===!1;return{prev:p?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[u-1])==null?void 0:y.docFooterText)??((P=i[u-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[u-1])==null?void 0:S.link)},next:h?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((L=i[u+1])==null?void 0:L.docFooterText)??((A=i[u+1])==null?void 0:A.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((T=i[u+1])==null?void 0:T.link)}}})}function qt(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=$(()=>e.tag??(e.href?"a":"span")),s=$(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(F(t.value),{class:M(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:d(()=>[l(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Rt={class:"VPLastUpdated"},Wt=["datetime"],Jt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=V(),n=$(()=>new Date(t.value.lastUpdated)),i=$(()=>n.value.toISOString()),u=N("");return R(()=>{Z(()=>{var p,h,g;u.value=new Intl.DateTimeFormat((h=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&h.forceLocale?s.value:void 0,((g=e.value.lastUpdated)==null?void 0:g.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(p,h)=>{var g;return a(),c("p",Rt,[O(I(((g=r(e).lastUpdated)==null?void 0:g.text)||r(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:i.value},I(u.value),9,Wt)])}}}),Xt=b(Jt,[["__scopeId","data-v-1bb0c8a8"]]),Ce=o=>(B("data-v-1bcd8184"),o=o(),H(),o),Yt={key:0,class:"VPDocFooter"},Qt={key:0,class:"edit-info"},Zt={key:0,class:"edit-link"},xt=Ce(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),eo={key:1,class:"last-updated"},to={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},oo=Ce(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),no={class:"pager"},so=["innerHTML"],ao=["innerHTML"],ro={class:"pager"},io=["innerHTML"],lo=["innerHTML"],co=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=V(),n=zt(),i=Kt(),u=$(()=>e.value.editLink&&s.value.editLink!==!1),p=$(()=>t.value.lastUpdated),h=$(()=>u.value||p.value||i.value.prev||i.value.next);return(g,w)=>{var y,P,S,L;return h.value?(a(),c("footer",Yt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||p.value?(a(),c("div",Qt,[u.value?(a(),c("div",Zt,[m(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:d(()=>[xt,O(" "+I(r(n).text),1)]),_:1},8,["href"])])):f("",!0),p.value?(a(),c("div",eo,[m(Xt)])):f("",!0)])):f("",!0),(y=r(i).prev)!=null&&y.link||(P=r(i).next)!=null&&P.link?(a(),c("nav",to,[oo,v("div",no,[(S=r(i).prev)!=null&&S.link?(a(),k(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:d(()=>{var A;return[v("span",{class:"desc",innerHTML:((A=r(e).docFooter)==null?void 0:A.prev)||"Previous page"},null,8,so),v("span",{class:"title",innerHTML:r(i).prev.text},null,8,ao)]}),_:1},8,["href"])):f("",!0)]),v("div",ro,[(L=r(i).next)!=null&&L.link?(a(),k(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:d(()=>{var A;return[v("span",{class:"desc",innerHTML:((A=r(e).docFooter)==null?void 0:A.next)||"Next page"},null,8,io),v("span",{class:"title",innerHTML:r(i).next.text},null,8,lo)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),uo=b(co,[["__scopeId","data-v-1bcd8184"]]),vo=o=>(B("data-v-e6f2a212"),o=o(),H(),o),po={class:"container"},ho=vo(()=>v("div",{class:"aside-curtain"},null,-1)),fo={class:"aside-container"},_o={class:"aside-content"},mo={class:"content"},ko={class:"content-container"},bo={class:"main"},$o=_({__name:"VPDoc",setup(o){const{theme:e}=V(),t=te(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),u=$(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(p,h)=>{const g=W("Content");return a(),c("div",{class:M(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[l(p.$slots,"doc-top",{},void 0,!0),v("div",po,[r(n)?(a(),c("div",{key:0,class:M(["aside",{"left-aside":r(i)}])},[ho,v("div",fo,[v("div",_o,[m(jt,null,{"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",mo,[v("div",ko,[l(p.$slots,"doc-before",{},void 0,!0),v("main",bo,[m(g,{class:M(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(uo,null,{"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(p.$slots,"doc-after",{},void 0,!0)])])]),l(p.$slots,"doc-bottom",{},void 0,!0)],2)}}}),go=b($o,[["__scopeId","data-v-e6f2a212"]]),yo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=$(()=>e.href&&Le.test(e.href)),s=$(()=>e.tag||(e.href?"a":"button"));return(n,i)=>(a(),k(F(s.value),{class:M(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[O(I(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),Po=b(yo,[["__scopeId","data-v-93dc4167"]]),Lo=["src","alt"],Vo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),c(C,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",K({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Lo)):(a(),c(C,{key:1},[m(s,K({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(s,K({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Q=b(Vo,[["__scopeId","data-v-ab19afbb"]]),So=o=>(B("data-v-b10c5094"),o=o(),H(),o),wo={class:"container"},To={class:"main"},Io={key:0,class:"name"},No=["innerHTML"],Mo=["innerHTML"],Ao=["innerHTML"],Co={key:0,class:"actions"},Bo={key:0,class:"image"},Ho={class:"image-container"},Eo=So(()=>v("div",{class:"image-bg"},null,-1)),Fo=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=oe("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:M(["VPHero",{"has-image":t.image||r(e)}])},[v("div",wo,[v("div",To,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Io,[v("span",{innerHTML:t.name,class:"clip"},null,8,No)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,Mo)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Ao)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",Co,[(a(!0),c(C,null,E(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[m(Po,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",Bo,[v("div",Ho,[Eo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Do=b(Fo,[["__scopeId","data-v-b10c5094"]]),Oo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,s)=>r(e).hero?(a(),k(Do,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Go=o=>(B("data-v-bd37d1a2"),o=o(),H(),o),Uo={class:"box"},jo={key:0,class:"icon"},zo=["innerHTML"],Ko=["innerHTML"],qo=["innerHTML"],Ro={key:4,class:"link-text"},Wo={class:"link-text-value"},Jo=Go(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Xo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Uo,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",jo,[m(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,zo)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Ko),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,qo)):f("",!0),e.linkText?(a(),c("div",Ro,[v("p",Wo,[O(I(e.linkText)+" ",1),Jo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Yo=b(Xo,[["__scopeId","data-v-bd37d1a2"]]),Qo={key:0,class:"VPFeatures"},Zo={class:"container"},xo={class:"items"},en=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=$(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",Qo,[v("div",Zo,[v("div",xo,[(a(!0),c(C,null,E(s.features,i=>(a(),c("div",{key:i.title,class:M(["item",[t.value]])},[m(Yo,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),tn=b(en,[["__scopeId","data-v-b1eea84a"]]),on=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,s)=>r(e).features?(a(),k(tn,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),nn=_({__name:"VPHomeContent",setup(o){const{width:e}=Re({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),sn=b(nn,[["__scopeId","data-v-c141a4bd"]]),an={class:"VPHome"},rn=_({__name:"VPHome",setup(o){const{frontmatter:e}=V();return(t,s)=>{const n=W("Content");return a(),c("div",an,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Oo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(on),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(sn,{key:0},{default:d(()=>[m(n)]),_:1})):(a(),k(n,{key:1}))])}}}),ln=b(rn,[["__scopeId","data-v-07b1ad08"]]),cn={},un={class:"VPPage"};function dn(o,e){const t=W("Content");return a(),c("div",un,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const vn=b(cn,[["render",dn]]),pn=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(n,i)=>(a(),c("div",{class:M(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(n.$slots,"not-found",{key:0},()=>[m(bt)],!0):r(t).layout==="page"?(a(),k(vn,{key:1},{"page-top":d(()=>[l(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(ln,{key:2},{"home-hero-before":d(()=>[l(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(F(r(t).layout),{key:3})):(a(),k(go,{key:4},{"doc-top":d(()=>[l(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),hn=b(pn,[["__scopeId","data-v-9a6c75ad"]]),fn={class:"container"},_n=["innerHTML"],mn=["innerHTML"],kn=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:M(["VPFooter",{"has-sidebar":r(s)}])},[v("div",fn,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,_n)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,mn)):f("",!0)])],2)):f("",!0)}}),bn=b(kn,[["__scopeId","data-v-566314d4"]]);function $n(){const{theme:o,frontmatter:e}=V(),t=Pe([]),s=$(()=>t.value.length>0);return ee(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const gn=o=>(B("data-v-883964e0"),o=o(),H(),o),yn={class:"menu-text"},Pn=gn(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),Ln={class:"header"},Vn={class:"outline"},Sn=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),s=N(!1),n=N(0),i=N(),u=N();function p(y){var P;(P=i.value)!=null&&P.contains(y.target)||(s.value=!1)}G(s,y=>{if(y){document.addEventListener("click",p);return}document.removeEventListener("click",p)}),We("Escape",()=>{s.value=!1}),ee(()=>{s.value=!1});function h(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function g(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Je(()=>{s.value=!1}))}function w(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),c("button",{key:0,onClick:h,class:M({open:s.value})},[v("span",yn,I(r(Me)(r(t))),1),Pn],2)):(a(),c("button",{key:1,onClick:w},I(r(t).returnToTopLabel||"Return to top"),1)),m(ve,{name:"flyout"},{default:d(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:g},[v("div",Ln,[v("a",{class:"top-link",href:"#",onClick:w},I(r(t).returnToTopLabel||"Return to top"),1)]),v("div",Vn,[m(Ae,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),wn=b(Sn,[["__scopeId","data-v-883964e0"]]),Tn=o=>(B("data-v-2488c25a"),o=o(),H(),o),In={class:"container"},Nn=["aria-expanded"],Mn=Tn(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),An={class:"menu-text"},Cn=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U(),{headers:n}=$n(),{y:i}=Se(),u=N(0);R(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ee(()=>{n.value=_e(t.value.outline??e.value.outline)});const p=$(()=>n.value.length===0),h=$(()=>p.value&&!s.value),g=$(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:p.value,fixed:h.value}));return(w,y)=>r(t).layout!=="home"&&(!h.value||r(i)>=u.value)?(a(),c("div",{key:0,class:M(g.value)},[v("div",In,[r(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":w.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=P=>w.$emit("open-menu"))},[Mn,v("span",An,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Nn)):f("",!0),m(wn,{headers:r(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Bn=b(Cn,[["__scopeId","data-v-2488c25a"]]);function Hn(){const o=N(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=te();return G(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const En={},Fn={class:"VPSwitch",type:"button",role:"switch"},Dn={class:"check"},On={key:0,class:"icon"};function Gn(o,e){return a(),c("button",Fn,[v("span",Dn,[o.$slots.default?(a(),c("span",On,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Un=b(En,[["render",Gn],["__scopeId","data-v-b4ccac88"]]),Be=o=>(B("data-v-be9742d9"),o=o(),H(),o),jn=Be(()=>v("span",{class:"vpi-sun sun"},null,-1)),zn=Be(()=>v("span",{class:"vpi-moon moon"},null,-1)),Kn=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),s=oe("toggle-appearance",()=>{e.value=!e.value}),n=N("");return he(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,u)=>(a(),k(Un,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:d(()=>[jn,zn]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Kn,[["__scopeId","data-v-be9742d9"]]),qn={key:0,class:"VPNavBarAppearance"},Rn=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",qn,[m(me)])):f("",!0)}}),Wn=b(Rn,[["__scopeId","data-v-3f90c1a5"]]),ke=N();let He=!1,ie=0;function Jn(o){const e=N(!1);if(ne){!He&&Xn(),ie++;const t=G(ke,s=>{var n,i,u;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});x(()=>{t(),ie--,ie||Yn()})}return Xe(e)}function Xn(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function Yn(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Qn={class:"VPMenuLink"},Zn=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),c("div",Qn,[m(D,{class:M({active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[O(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=b(Zn,[["__scopeId","data-v-f51f088d"]]),xn={class:"VPMenuGroup"},es={key:0,class:"title"},ts=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",xn,[e.text?(a(),c("p",es,I(e.text),1)):f("",!0),(a(!0),c(C,null,E(e.items,s=>(a(),c(C,null,["link"in s?(a(),k(se,{key:0,item:s},null,8,["item"])):f("",!0)],64))),256))]))}}),os=b(ts,[["__scopeId","data-v-a6b0397c"]]),ns={class:"VPMenu"},ss={key:0,class:"items"},as=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",ns,[e.items?(a(),c("div",ss,[(a(!0),c(C,null,E(e.items,s=>(a(),c(C,{key:JSON.stringify(s)},["link"in s?(a(),k(se,{key:0,item:s},null,8,["item"])):"component"in s?(a(),k(F(s.component),we(K({key:1},s.props)),null,16)):(a(),k(os,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),rs=b(as,[["__scopeId","data-v-20ed86d6"]]),is=o=>(B("data-v-bfe7971f"),o=o(),H(),o),ls=["aria-expanded","aria-label"],cs={key:0,class:"text"},us=["innerHTML"],ds=is(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),vs={key:1,class:"vpi-more-horizontal icon"},ps={class:"menu"},hs=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=N(!1),t=N();Jn({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",cs,[n.icon?(a(),c("span",{key:0,class:M([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,us)):f("",!0),ds])):(a(),c("span",vs))],8,ls),v("div",ps,[m(rs,{items:n.items},{default:d(()=>[l(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(hs,[["__scopeId","data-v-bfe7971f"]]),fs=["href","aria-label","innerHTML"],_s=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=$(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),c("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,fs))}}),ms=b(_s,[["__scopeId","data-v-358b6670"]]),ks={class:"VPSocialLinks"},bs=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",ks,[(a(!0),c(C,null,E(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),k(ms,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(bs,[["__scopeId","data-v-e71e869c"]]),$s={key:0,class:"group translations"},gs={class:"trans-title"},ys={key:1,class:"group"},Ps={class:"item appearance"},Ls={class:"label"},Vs={class:"appearance-action"},Ss={key:2,class:"group"},ws={class:"item social-links"},Ts=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:n}=X({correspondingLink:!0}),i=$(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,p)=>i.value?(a(),k(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[r(s).length&&r(n).label?(a(),c("div",$s,[v("p",gs,I(r(n).label),1),(a(!0),c(C,null,E(r(s),h=>(a(),k(se,{key:h.link,item:h},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",ys,[v("div",Ps,[v("p",Ls,I(r(t).darkModeSwitchLabel||"Appearance"),1),v("div",Vs,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",Ss,[v("div",ws,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Is=b(Ts,[["__scopeId","data-v-f953d92f"]]),Ns=o=>(B("data-v-6bee1efd"),o=o(),H(),o),Ms=["aria-expanded"],As=Ns(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),Cs=[As],Bs=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},Cs,10,Ms))}}),Hs=b(Bs,[["__scopeId","data-v-6bee1efd"]]),Es=["innerHTML"],Fs=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),k(D,{class:M({VPNavBarMenuLink:!0,active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Es)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Ds=b(Fs,[["__scopeId","data-v-08fbf4b6"]]),Os=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),s=i=>"component"in i?!1:"link"in i?q(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=$(()=>s(e.item));return(i,u)=>(a(),k(be,{class:M({VPNavBarMenuGroup:!0,active:r(q)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Gs=o=>(B("data-v-afb2845e"),o=o(),H(),o),Us={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},js=Gs(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),zs=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),c("nav",Us,[js,(a(!0),c(C,null,E(r(e).nav,n=>(a(),c(C,{key:JSON.stringify(n)},["link"in n?(a(),k(Ds,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),we(K({key:1},n.props)),null,16)):(a(),k(Os,{key:2,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),Ks=b(zs,[["__scopeId","data-v-afb2845e"]]);function qs(o){const{localeIndex:e,theme:t}=V();function s(n){var L,A,T;const i=n.split("."),u=(L=t.value.search)==null?void 0:L.options,p=u&&typeof u=="object",h=p&&((T=(A=u.locales)==null?void 0:A[e.value])==null?void 0:T.translations)||null,g=p&&u.translations||null;let w=h,y=g,P=o;const S=i.pop();for(const j of i){let z=null;const J=P==null?void 0:P[j];J&&(z=P=J);const ae=y==null?void 0:y[j];ae&&(z=y=ae);const re=w==null?void 0:w[j];re&&(z=w=re),J||(P=z),ae||(y=z),re||(w=z)}return(w==null?void 0:w[S])??(y==null?void 0:y[S])??(P==null?void 0:P[S])??""}return s}const Rs=["aria-label"],Ws={class:"DocSearch-Button-Container"},Js=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Xs={class:"DocSearch-Button-Placeholder"},Ys=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=qs({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[v("span",Ws,[Js,v("span",Xs,I(r(t)("button.buttonText")),1)]),Ys],8,Rs))}}),Qs={class:"VPNavBarSearch"},Zs={id:"local-search"},xs={key:1,id:"docsearch"},ea=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=Ye(()=>Qe(()=>import("./VPAlgoliaSearchBox.hP-Vp1-_.js"),__vite__mapDeps([0,1]))),{theme:s}=V(),n=N(!1),i=N(!1),u=()=>{const P="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{var A;const L=document.createElement("link");L.id=P,L.rel="preconnect",L.href=`https://${(((A=s.value.search)==null?void 0:A.options)??s.value.algolia).appId}-dsn.algolia.net`,L.crossOrigin="",document.head.appendChild(L)})};R(()=>{u();const P=L=>{(L.key.toLowerCase()==="k"&&(L.metaKey||L.ctrlKey)||!g(L)&&L.key==="/")&&(L.preventDefault(),p(),S())},S=()=>{window.removeEventListener("keydown",P)};window.addEventListener("keydown",P),x(S)});function p(){n.value||(n.value=!0,setTimeout(h,16))}function h(){const P=new Event("keydown");P.key="k",P.metaKey=!0,window.dispatchEvent(P),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}function g(P){const S=P.target,L=S.tagName;return S.isContentEditable||L==="INPUT"||L==="SELECT"||L==="TEXTAREA"}const w=N(!1),y="algolia";return(P,S)=>{var L;return a(),c("div",Qs,[r(y)==="local"?(a(),c(C,{key:0},[w.value?(a(),k(r(e),{key:0,onClose:S[0]||(S[0]=A=>w.value=!1)})):f("",!0),v("div",Zs,[m(ge,{onClick:S[1]||(S[1]=A=>w.value=!0)})])],64)):r(y)==="algolia"?(a(),c(C,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((L=r(s).search)==null?void 0:L.options)??r(s).algolia,onVnodeBeforeMount:S[2]||(S[2]=A=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",xs,[m(ge,{onClick:p})]))],64)):f("",!0)])}}}),ta=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),oa=b(ta,[["__scopeId","data-v-ef6192dc"]]),na=["href","rel","target"],sa={key:1},aa={key:2},ra=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:s}=U(),{currentLang:n}=X(),i=$(()=>{var h;return typeof t.value.logoLink=="string"?t.value.logoLink:(h=t.value.logoLink)==null?void 0:h.link}),u=$(()=>{var h;return typeof t.value.logoLink=="string"||(h=t.value.logoLink)==null?void 0:h.rel}),p=$(()=>{var h;return typeof t.value.logoLink=="string"||(h=t.value.logoLink)==null?void 0:h.target});return(h,g)=>(a(),c("div",{class:M(["VPNavBarTitle",{"has-sidebar":r(s)}])},[v("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:u.value,target:p.value},[l(h.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",sa,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",aa,I(r(e).title),1)):f("",!0),l(h.$slots,"nav-bar-title-after",{},void 0,!0)],8,na)],2))}}),ia=b(ra,[["__scopeId","data-v-0ad69264"]]),la={class:"items"},ca={class:"title"},ua=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:s}=X({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),k(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",la,[v("p",ca,I(r(s).label),1),(a(!0),c(C,null,E(r(t),u=>(a(),k(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),da=b(ua,[["__scopeId","data-v-acee064b"]]),va=o=>(B("data-v-9fd4d1dd"),o=o(),H(),o),pa={class:"wrapper"},ha={class:"container"},fa={class:"title"},_a={class:"content"},ma={class:"content-body"},ka=va(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),ba=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=Se(),{hasSidebar:s}=U(),{frontmatter:n}=V(),i=N({});return he(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(u,p)=>(a(),c("div",{class:M(["VPNavBar",i.value])},[v("div",pa,[v("div",ha,[v("div",fa,[m(ia,null,{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",_a,[v("div",ma,[l(u.$slots,"nav-bar-content-before",{},void 0,!0),m(ea,{class:"search"}),m(Ks,{class:"menu"}),m(da,{class:"translations"}),m(Wn,{class:"appearance"}),m(oa,{class:"social-links"}),m(Is,{class:"extra"}),l(u.$slots,"nav-bar-content-after",{},void 0,!0),m(Hs,{class:"hamburger",active:u.isScreenOpen,onClick:p[0]||(p[0]=h=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),ka],2))}}),$a=b(ba,[["__scopeId","data-v-9fd4d1dd"]]),ga={key:0,class:"VPNavScreenAppearance"},ya={class:"text"},Pa=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",ga,[v("p",ya,I(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),La=b(Pa,[["__scopeId","data-v-a3e2920d"]]),Va=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Sa=b(Va,[["__scopeId","data-v-1a934d60"]]),wa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:d(()=>[O(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Fe=b(wa,[["__scopeId","data-v-aea78dd1"]]),Ta={class:"VPNavScreenMenuGroupSection"},Ia={key:0,class:"title"},Na=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Ta,[e.text?(a(),c("p",Ia,I(e.text),1)):f("",!0),(a(!0),c(C,null,E(e.items,s=>(a(),k(Fe,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Ma=b(Na,[["__scopeId","data-v-f60dbfa7"]]),Aa=o=>(B("data-v-d99bfeec"),o=o(),H(),o),Ca=["aria-controls","aria-expanded"],Ba=["innerHTML"],Ha=Aa(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ea=["id"],Fa={key:0,class:"item"},Da={key:1,class:"item"},Oa={key:2,class:"group"},Ga=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=N(!1),s=$(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[v("span",{class:"button-text",innerHTML:i.text},null,8,Ba),Ha],8,Ca),v("div",{id:s.value,class:"items"},[(a(!0),c(C,null,E(i.items,p=>(a(),c(C,{key:JSON.stringify(p)},["link"in p?(a(),c("div",Fa,[m(Fe,{item:p},null,8,["item"])])):"component"in p?(a(),c("div",Da,[(a(),k(F(p.component),K(p.props,{"screen-menu":""}),null,16))])):(a(),c("div",Oa,[m(Ma,{text:p.text,items:p.items},null,8,["text","items"])]))],64))),128))],8,Ea)],2))}}),Ua=b(Ga,[["__scopeId","data-v-d99bfeec"]]),ja={key:0,class:"VPNavScreenMenu"},za=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),c("nav",ja,[(a(!0),c(C,null,E(r(e).nav,n=>(a(),c(C,{key:JSON.stringify(n)},["link"in n?(a(),k(Sa,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),K({key:1},n.props,{"screen-menu":""}),null,16)):(a(),k(Ua,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Ka=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),De=o=>(B("data-v-516e4bc3"),o=o(),H(),o),qa=De(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Ra=De(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Wa={class:"list"},Ja=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),s=N(!1);function n(){s.value=!s.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:M(["VPNavScreenTranslations",{open:s.value}])},[v("button",{class:"title",onClick:n},[qa,O(" "+I(r(t).label)+" ",1),Ra]),v("ul",Wa,[(a(!0),c(C,null,E(r(e),p=>(a(),c("li",{key:p.link,class:"item"},[m(D,{class:"link",href:p.link},{default:d(()=>[O(I(p.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Xa=b(Ja,[["__scopeId","data-v-516e4bc3"]]),Ya={class:"container"},Qa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=N(null),t=Te(ne?document.body:null);return(s,n)=>(a(),k(ve,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:d(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",Ya,[l(s.$slots,"nav-screen-content-before",{},void 0,!0),m(za,{class:"menu"}),m(Xa,{class:"translations"}),m(La,{class:"appearance"}),m(Ka,{class:"social-links"}),l(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Za=b(Qa,[["__scopeId","data-v-2dd6d0c7"]]),xa={key:0,class:"VPNav"},er=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Hn(),{frontmatter:n}=V(),i=$(()=>n.value.navbar!==!1);return Ie("close-screen",t),Z(()=>{ne&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,p)=>i.value?(a(),c("header",xa,[m($a,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Za,{open:r(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),tr=b(er,[["__scopeId","data-v-7ad780c2"]]),Oe=o=>(B("data-v-edd2eed8"),o=o(),H(),o),or=["role","tabindex"],nr=Oe(()=>v("div",{class:"indicator"},null,-1)),sr=["onKeydown"],ar=Oe(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),rr=[ar],ir={key:1,class:"items"},lr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:u,hasChildren:p,toggle:h}=Pt($(()=>e.item)),g=$(()=>p.value?"section":"div"),w=$(()=>n.value?"a":"div"),y=$(()=>p.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=$(()=>n.value?void 0:"button"),S=$(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":u.value}]);function L(T){"key"in T&&T.key!=="Enter"||!e.item.link&&h()}function A(){e.item.link&&h()}return(T,j)=>{const z=W("VPSidebarItem",!0);return a(),k(F(g.value),{class:M(["VPSidebarItem",S.value])},{default:d(()=>[T.item.text?(a(),c("div",K({key:0,class:"item",role:P.value},Ze(T.item.items?{click:L,keydown:L}:{},!0),{tabindex:T.item.items&&0}),[nr,T.item.link?(a(),k(D,{key:0,tag:w.value,class:"link",href:T.item.link,rel:T.item.rel,target:T.item.target},{default:d(()=>[(a(),k(F(y.value),{class:"text",innerHTML:T.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(F(y.value),{key:1,class:"text",innerHTML:T.item.text},null,8,["innerHTML"])),T.item.collapsed!=null&&T.item.items&&T.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:xe(A,["enter"]),tabindex:"0"},rr,40,sr)):f("",!0)],16,or)):f("",!0),T.item.items&&T.item.items.length?(a(),c("div",ir,[T.depth<5?(a(!0),c(C,{key:0},E(T.item.items,J=>(a(),k(z,{key:J.text,item:J,depth:T.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),cr=b(lr,[["__scopeId","data-v-edd2eed8"]]),ur=_({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=N(!0);let t=null;return R(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),et(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),c(C,null,E(s.items,i=>(a(),c("div",{key:i.text,class:M(["group",{"no-transition":e.value}])},[m(cr,{item:i,depth:0},null,8,["item"])],2))),128))}}),dr=b(ur,[["__scopeId","data-v-51288d80"]]),Ge=o=>(B("data-v-42c4c606"),o=o(),H(),o),vr=Ge(()=>v("div",{class:"curtain"},null,-1)),pr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},hr=Ge(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),fr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const e=o,{sidebarGroups:t,hasSidebar:s}=U(),n=N(null),i=Te(ne?document.body:null);G([e,n],()=>{var p;e.open?(i.value=!0,(p=n.value)==null||p.focus()):i.value=!1},{immediate:!0,flush:"post"});const u=N(0);return G(t,()=>{u.value+=1},{deep:!0}),(p,h)=>r(s)?(a(),c("aside",{key:0,class:M(["VPSidebar",{open:p.open}]),ref_key:"navEl",ref:n,onClick:h[0]||(h[0]=tt(()=>{},["stop"]))},[vr,v("nav",pr,[hr,l(p.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k(dr,{items:r(t),key:u.value},null,8,["items"])),l(p.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),_r=b(fr,[["__scopeId","data-v-42c4c606"]]),mr=_({__name:"VPSkipLink",setup(o){const e=te(),t=N();G(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),c(C,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),kr=b(mr,[["__scopeId","data-v-c8291ffa"]]),br=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=te();G(()=>n.path,s),yt(e,s);const{frontmatter:i}=V(),u=ot(),p=$(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",p),(h,g)=>{const w=W("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:M(["Layout",r(i).pageClass])},[l(h.$slots,"layout-top",{},void 0,!0),m(kr),m(it,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),m(tr,null,{"nav-bar-title-before":d(()=>[l(h.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(h.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(h.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(h.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(h.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(h.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Bn,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(_r,{open:r(e)},{"sidebar-nav-before":d(()=>[l(h.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(h.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(hn,null,{"page-top":d(()=>[l(h.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(h.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(h.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(h.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(h.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(h.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(h.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(h.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(h.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(h.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(h.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(h.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(h.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(h.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(h.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(h.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(bn),l(h.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(w,{key:1}))}}}),$r=b(br,[["__scopeId","data-v-d8b57b2d"]]),ye={Layout:$r,enhanceApp:({app:o})=>{o.component("Badge",st)}},yr={extends:ye,Layout:()=>nt(ye.Layout,null,{}),enhanceApp({app:o,router:e,siteData:t}){}};export{yr as R,V as u}; diff --git a/assets/chunks/theme.BwHuVLnS.js b/assets/chunks/theme.BwHuVLnS.js deleted file mode 100644 index 6974b859..00000000 --- a/assets/chunks/theme.BwHuVLnS.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPAlgoliaSearchBox.Dx-SG-5N.js","assets/chunks/framework.01Cf-Wcw.js"])))=>i.map(i=>d[i]); -import{d as _,o as a,c,r as l,n as M,a as O,t as I,b as k,w as v,e as f,T as ve,_ as b,u as Ue,i as je,f as ze,g as pe,h as g,j as p,k as r,p as B,l as H,m as q,q as le,s as N,v as G,x as Z,y as R,z as x,A as he,B as Ke,C as qe,D as W,F as C,E,G as Pe,H as ee,I as m,J as F,K as Le,L as te,M as K,N as oe,O as Re,P as Ve,Q as We,R as Je,S as Se,U as ne,V as Xe,W as we,X as Ye,Y as Qe,Z as Te,$ as Ie,a0 as Ze,a1 as xe,a2 as et,a3 as tt,a4 as ot,a5 as nt}from"./framework.01Cf-Wcw.js";const st=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:M(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[O(I(e.text),1)])],2))}}),at={key:0,class:"VPBackdrop"},rt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),k(ve,{name:"fade"},{default:v(()=>[e.show?(a(),c("div",at)):f("",!0)]),_:1}))}}),it=b(rt,[["__scopeId","data-v-54a304ca"]]),V=Ue;function lt(o,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(o,e):(o(),(s=!0)&&setTimeout(()=>s=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:s,protocol:n}=new URL(o,"http://a.com");if(je(o)||o.startsWith("#")||!n.startsWith("http")||!ze(e))return o;const{site:i}=V(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return pe(u)}function X({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:s,theme:n,hash:i}=V(),u=g(()=>{var d,$;return{label:(d=e.value.locales[t.value])==null?void 0:d.label,link:(($=e.value.locales[t.value])==null?void 0:$.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:g(()=>Object.entries(e.value.locales).flatMap(([d,$])=>u.value.label===$.label?[]:{text:$.label,link:ct($.link||(d==="root"?"/":`/${d}/`),n.value.i18nRouting!==!1&&o,s.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function ct(o,e,t,s){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):o}const ut=o=>(B("data-v-6ff51ddd"),o=o(),H(),o),dt={class:"NotFound"},vt={class:"code"},pt={class:"title"},ht=ut(()=>p("div",{class:"divider"},null,-1)),ft={class:"quote"},_t={class:"action"},mt=["href","aria-label"],kt=_({__name:"NotFound",setup(o){const{theme:e}=V(),{currentLang:t}=X();return(s,n)=>{var i,u,h,d,$;return a(),c("div",dt,[p("p",vt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",pt,I(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),ht,p("blockquote",ft,I(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",_t,[p("a",{class:"link",href:r(pe)(r(t).link),"aria-label":((d=r(e).notFound)==null?void 0:d.linkLabel)??"go to home"},I((($=r(e).notFound)==null?void 0:$.linkText)??"Take me home"),9,mt)])])}}}),bt=b(kt,[["__scopeId","data-v-6ff51ddd"]]);function Ne(o,e){if(Array.isArray(o))return Y(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((n,i)=>i.split("/").length-n.split("/").length).find(n=>e.startsWith(ce(n))),s=t?o[t]:[];return Array.isArray(s)?Y(s):Y(s.items,s.base)}function $t(o){const e=[];let t=0;for(const s in o){const n=o[s];if(n.items){t=e.push(n);continue}e[t]||e.push({items:[]}),e[t].items.push(n)}return e}function gt(o){const e=[];function t(s){for(const n of s)n.text&&n.link&&e.push({text:n.text,link:n.link,docFooterText:n.docFooterText}),n.items&&t(n.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):q(o,e.link)?!0:e.items?ue(o,e.items):!1}function Y(o,e){return[...o].map(t=>{const s={...t},n=s.base||e;return n&&s.link&&(s.link=n+s.link),s.items&&(s.items=Y(s.items,n)),s})}function U(){const{frontmatter:o,page:e,theme:t}=V(),s=le("(min-width: 960px)"),n=N(!1),i=g(()=>{const A=t.value.sidebar,T=e.value.relativePath;return A?Ne(A,T):[]}),u=N(i.value);G(i,(A,T)=>{JSON.stringify(A)!==JSON.stringify(T)&&(u.value=i.value)});const h=g(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),d=g(()=>$?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),$=g(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),w=g(()=>h.value&&s.value),y=g(()=>h.value?$t(u.value):[]);function P(){n.value=!0}function S(){n.value=!1}function L(){n.value?S():P()}return{isOpen:n,sidebar:u,sidebarGroups:y,hasSidebar:h,hasAside:$,leftAside:d,isSidebarEnabled:w,open:P,close:S,toggle:L}}function yt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",s)}),x(()=>{window.removeEventListener("keyup",s)});function s(n){n.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function Pt(o){const{page:e,hash:t}=V(),s=N(!1),n=g(()=>o.value.collapsed!=null),i=g(()=>!!o.value.link),u=N(!1),h=()=>{u.value=q(e.value.relativePath,o.value.link)};G([e,o,t],h),R(h);const d=g(()=>u.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),$=g(()=>!!(o.value.items&&o.value.items.length));Z(()=>{s.value=!!(n.value&&o.value.collapsed)}),he(()=>{(u.value||d.value)&&(s.value=!1)});function w(){n.value&&(s.value=!s.value)}return{collapsed:s,collapsible:n,isLink:i,isActiveLink:u,hasActiveLink:d,hasChildren:$,toggle:w}}function Lt(){const{hasSidebar:o}=U(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:g(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Me(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:Vt(t),link:"#"+t.id,level:s}});return St(e,o)}function Vt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function St(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,n]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=s&&u.level<=n),de.length=0;for(const{element:u,link:h}of o)de.push({element:u,link:h});const i=[];e:for(let u=0;u=0;d--){const $=o[d];if($.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Ke(()=>{u(location.hash)}),x(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const h=window.scrollY,d=window.innerHeight,$=document.body.offsetHeight,w=Math.abs(h+d-$)<1,y=de.map(({element:S,link:L})=>({link:L,top:Tt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,L)=>S.top-L.top);if(!y.length){u(null);return}if(h<1){u(null);return}if(w){u(y[y.length-1].link);return}let P=null;for(const{link:S,top:L}of y){if(L>h+qe()+4)break;P=S}u(P)}function u(h){n&&n.classList.remove("active"),h==null?n=null:n=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const d=n;d?(d.classList.add("active"),e.value.style.top=d.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Tt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const It=["href","title"],Nt=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const s=t.href.split("#")[1],n=document.getElementById(decodeURIComponent(s));n==null||n.focus({preventScroll:!0})}return(t,s)=>{const n=W("VPDocOutlineItem",!0);return a(),c("ul",{class:M(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(C,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[p("a",{class:"outline-link",href:u,onClick:e,title:h},I(h),9,It),i!=null&&i.length?(a(),k(n,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Ae=b(Nt,[["__scopeId","data-v-53c99d69"]]),Mt={class:"content"},At={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ct=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=V(),s=Pe([]);ee(()=>{s.value=_e(e.value.outline??t.value.outline)});const n=N(),i=N();return wt(n,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:M(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:n},[p("div",Mt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",At,I(r(Me)(r(t))),1),m(Ae,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Bt=b(Ct,[["__scopeId","data-v-f610f197"]]),Ht={class:"VPDocAsideCarbonAds"},Et=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,s)=>(a(),c("div",Ht,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ft=o=>(B("data-v-cb998dce"),o=o(),H(),o),Dt={class:"VPDocAside"},Ot=Ft(()=>p("div",{class:"spacer"},null,-1)),Gt=_({__name:"VPDocAside",setup(o){const{theme:e}=V();return(t,s)=>(a(),c("div",Dt,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Bt),l(t.$slots,"aside-outline-after",{},void 0,!0),Ot,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),k(Et,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ut=b(Gt,[["__scopeId","data-v-cb998dce"]]);function jt(){const{theme:o,page:e}=V();return g(()=>{const{text:t="Edit this page",pattern:s=""}=o.value.editLink||{};let n;return typeof s=="function"?n=s(e.value):n=s.replace(/:path/g,e.value.filePath),{url:n,text:t}})}function zt(){const{page:o,theme:e,frontmatter:t}=V();return g(()=>{var $,w,y,P,S,L,A,T;const s=Ne(e.value.sidebar,o.value.relativePath),n=gt(s),i=Kt(n,j=>j.link.replace(/[?#].*$/,"")),u=i.findIndex(j=>q(o.value.relativePath,j.link)),h=(($=e.value.docFooter)==null?void 0:$.prev)===!1&&!t.value.prev||t.value.prev===!1,d=((w=e.value.docFooter)==null?void 0:w.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((y=i[u-1])==null?void 0:y.docFooterText)??((P=i[u-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[u-1])==null?void 0:S.link)},next:d?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((L=i[u+1])==null?void 0:L.docFooterText)??((A=i[u+1])==null?void 0:A.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((T=i[u+1])==null?void 0:T.link)}}})}function Kt(o,e){const t=new Set;return o.filter(s=>{const n=e(s);return t.has(n)?!1:t.add(n)})}const D=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.tag??(e.href?"a":"span")),s=g(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(n,i)=>(a(),k(F(t.value),{class:M(["VPLink",{link:n.href,"vp-external-link-icon":s.value,"no-icon":n.noIcon}]),href:n.href?r(fe)(n.href):void 0,target:n.target??(s.value?"_blank":void 0),rel:n.rel??(s.value?"noreferrer":void 0)},{default:v(()=>[l(n.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),qt={class:"VPLastUpdated"},Rt=["datetime"],Wt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,lang:s}=V(),n=g(()=>new Date(t.value.lastUpdated)),i=g(()=>n.value.toISOString()),u=N("");return R(()=>{Z(()=>{var h,d,$;u.value=new Intl.DateTimeFormat((d=(h=e.value.lastUpdated)==null?void 0:h.formatOptions)!=null&&d.forceLocale?s.value:void 0,(($=e.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(n.value)})}),(h,d)=>{var $;return a(),c("p",qt,[O(I((($=r(e).lastUpdated)==null?void 0:$.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},I(u.value),9,Rt)])}}}),Jt=b(Wt,[["__scopeId","data-v-1bb0c8a8"]]),Ce=o=>(B("data-v-1bcd8184"),o=o(),H(),o),Xt={key:0,class:"VPDocFooter"},Yt={key:0,class:"edit-info"},Qt={key:0,class:"edit-link"},Zt=Ce(()=>p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),xt={key:1,class:"last-updated"},eo={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},to=Ce(()=>p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),oo={class:"pager"},no=["innerHTML"],so=["innerHTML"],ao={class:"pager"},ro=["innerHTML"],io=["innerHTML"],lo=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:s}=V(),n=jt(),i=zt(),u=g(()=>e.value.editLink&&s.value.editLink!==!1),h=g(()=>t.value.lastUpdated),d=g(()=>u.value||h.value||i.value.prev||i.value.next);return($,w)=>{var y,P,S,L;return d.value?(a(),c("footer",Xt,[l($.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Yt,[u.value?(a(),c("div",Qt,[m(D,{class:"edit-link-button",href:r(n).url,"no-icon":!0},{default:v(()=>[Zt,O(" "+I(r(n).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",xt,[m(Jt)])):f("",!0)])):f("",!0),(y=r(i).prev)!=null&&y.link||(P=r(i).next)!=null&&P.link?(a(),c("nav",eo,[to,p("div",oo,[(S=r(i).prev)!=null&&S.link?(a(),k(D,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:v(()=>{var A;return[p("span",{class:"desc",innerHTML:((A=r(e).docFooter)==null?void 0:A.prev)||"Previous page"},null,8,no),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,so)]}),_:1},8,["href"])):f("",!0)]),p("div",ao,[(L=r(i).next)!=null&&L.link?(a(),k(D,{key:0,class:"pager-link next",href:r(i).next.link},{default:v(()=>{var A;return[p("span",{class:"desc",innerHTML:((A=r(e).docFooter)==null?void 0:A.next)||"Next page"},null,8,ro),p("span",{class:"title",innerHTML:r(i).next.text},null,8,io)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),co=b(lo,[["__scopeId","data-v-1bcd8184"]]),uo=o=>(B("data-v-e6f2a212"),o=o(),H(),o),vo={class:"container"},po=uo(()=>p("div",{class:"aside-curtain"},null,-1)),ho={class:"aside-container"},fo={class:"aside-content"},_o={class:"content"},mo={class:"content-container"},ko={class:"main"},bo=_({__name:"VPDoc",setup(o){const{theme:e}=V(),t=te(),{hasSidebar:s,hasAside:n,leftAside:i}=U(),u=g(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,d)=>{const $=W("Content");return a(),c("div",{class:M(["VPDoc",{"has-sidebar":r(s),"has-aside":r(n)}])},[l(h.$slots,"doc-top",{},void 0,!0),p("div",vo,[r(n)?(a(),c("div",{key:0,class:M(["aside",{"left-aside":r(i)}])},[po,p("div",ho,[p("div",fo,[m(Ut,null,{"aside-top":v(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),p("div",_o,[p("div",mo,[l(h.$slots,"doc-before",{},void 0,!0),p("main",ko,[m($,{class:M(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(co,null,{"doc-footer-before":v(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),$o=b(bo,[["__scopeId","data-v-e6f2a212"]]),go=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=g(()=>e.href&&Le.test(e.href)),s=g(()=>e.tag||e.href?"a":"button");return(n,i)=>(a(),k(F(s.value),{class:M(["VPButton",[n.size,n.theme]]),href:n.href?r(fe)(n.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:v(()=>[O(I(n.text),1)]),_:1},8,["class","href","target","rel"]))}}),yo=b(go,[["__scopeId","data-v-c9cf0e3c"]]),Po=["src","alt"],Lo=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),c(C,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",K({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,Po)):(a(),c(C,{key:1},[m(s,K({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(s,K({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),Q=b(Lo,[["__scopeId","data-v-ab19afbb"]]),Vo=o=>(B("data-v-b10c5094"),o=o(),H(),o),So={class:"container"},wo={class:"main"},To={key:0,class:"name"},Io=["innerHTML"],No=["innerHTML"],Mo=["innerHTML"],Ao={key:0,class:"actions"},Co={key:0,class:"image"},Bo={class:"image-container"},Ho=Vo(()=>p("div",{class:"image-bg"},null,-1)),Eo=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=oe("hero-image-slot-exists");return(t,s)=>(a(),c("div",{class:M(["VPHero",{"has-image":t.image||r(e)}])},[p("div",So,[p("div",wo,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",To,[p("span",{innerHTML:t.name,class:"clip"},null,8,Io)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,No)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Mo)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",Ao,[(a(!0),c(C,null,E(t.actions,n=>(a(),c("div",{key:n.link,class:"action"},[m(yo,{tag:"a",size:"medium",theme:n.theme,text:n.text,href:n.link,target:n.target,rel:n.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",Co,[p("div",Bo,[Ho,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),k(Q,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Fo=b(Eo,[["__scopeId","data-v-b10c5094"]]),Do=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=V();return(t,s)=>r(e).hero?(a(),k(Fo,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Oo=o=>(B("data-v-bd37d1a2"),o=o(),H(),o),Go={class:"box"},Uo={key:0,class:"icon"},jo=["innerHTML"],zo=["innerHTML"],Ko=["innerHTML"],qo={key:4,class:"link-text"},Ro={class:"link-text-value"},Wo=Oo(()=>p("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),Jo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),k(D,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[p("article",Go,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Uo,[m(Q,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),k(Q,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,jo)):f("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,zo),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Ko)):f("",!0),e.linkText?(a(),c("div",qo,[p("p",Ro,[O(I(e.linkText)+" ",1),Wo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Xo=b(Jo,[["__scopeId","data-v-bd37d1a2"]]),Yo={key:0,class:"VPFeatures"},Qo={class:"container"},Zo={class:"items"},xo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=g(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,n)=>s.features?(a(),c("div",Yo,[p("div",Qo,[p("div",Zo,[(a(!0),c(C,null,E(s.features,i=>(a(),c("div",{key:i.title,class:M(["item",[t.value]])},[m(Xo,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),en=b(xo,[["__scopeId","data-v-b1eea84a"]]),tn=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=V();return(t,s)=>r(e).features?(a(),k(en,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),on=_({__name:"VPHomeContent",setup(o){const{width:e}=Re({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),nn=b(on,[["__scopeId","data-v-c141a4bd"]]),sn={class:"VPHome"},an=_({__name:"VPHome",setup(o){const{frontmatter:e}=V();return(t,s)=>{const n=W("Content");return a(),c("div",sn,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Do,null,{"home-hero-info-before":v(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(tn),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),k(nn,{key:0},{default:v(()=>[m(n)]),_:1})):(a(),k(n,{key:1}))])}}}),rn=b(an,[["__scopeId","data-v-07b1ad08"]]),ln={},cn={class:"VPPage"};function un(o,e){const t=W("Content");return a(),c("div",cn,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const dn=b(ln,[["render",un]]),vn=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(n,i)=>(a(),c("div",{class:M(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(n.$slots,"not-found",{key:0},()=>[m(bt)],!0):r(t).layout==="page"?(a(),k(dn,{key:1},{"page-top":v(()=>[l(n.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(n.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),k(rn,{key:2},{"home-hero-before":v(()=>[l(n.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(n.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(n.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(n.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(n.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(n.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(n.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(n.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(n.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),k(F(r(t).layout),{key:3})):(a(),k($o,{key:4},{"doc-top":v(()=>[l(n.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(n.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[l(n.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(n.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(n.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[l(n.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[l(n.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(n.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(n.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(n.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[l(n.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),pn=b(vn,[["__scopeId","data-v-9a6c75ad"]]),hn={class:"container"},fn=["innerHTML"],_n=["innerHTML"],mn=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(n,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:M(["VPFooter",{"has-sidebar":r(s)}])},[p("div",hn,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,fn)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,_n)):f("",!0)])],2)):f("",!0)}}),kn=b(mn,[["__scopeId","data-v-566314d4"]]);function bn(){const{theme:o,frontmatter:e}=V(),t=Pe([]),s=g(()=>t.value.length>0);return ee(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:s}}const $n=o=>(B("data-v-883964e0"),o=o(),H(),o),gn={class:"menu-text"},yn=$n(()=>p("span",{class:"vpi-chevron-right icon"},null,-1)),Pn={class:"header"},Ln={class:"outline"},Vn=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=V(),s=N(!1),n=N(0),i=N(),u=N();function h(y){var P;(P=i.value)!=null&&P.contains(y.target)||(s.value=!1)}G(s,y=>{if(y){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),We("Escape",()=>{s.value=!1}),ee(()=>{s.value=!1});function d(){s.value=!s.value,n.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function $(y){y.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),Je(()=>{s.value=!1}))}function w(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(y,P)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":n.value+"px"}),ref_key:"main",ref:i},[y.headers.length>0?(a(),c("button",{key:0,onClick:d,class:M({open:s.value})},[p("span",gn,I(r(Me)(r(t))),1),yn],2)):(a(),c("button",{key:1,onClick:w},I(r(t).returnToTopLabel||"Return to top"),1)),m(ve,{name:"flyout"},{default:v(()=>[s.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:$},[p("div",Pn,[p("a",{class:"top-link",href:"#",onClick:w},I(r(t).returnToTopLabel||"Return to top"),1)]),p("div",Ln,[m(Ae,{headers:y.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),Sn=b(Vn,[["__scopeId","data-v-883964e0"]]),wn=o=>(B("data-v-2488c25a"),o=o(),H(),o),Tn={class:"container"},In=["aria-expanded"],Nn=wn(()=>p("span",{class:"vpi-align-left menu-icon"},null,-1)),Mn={class:"menu-text"},An=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U(),{headers:n}=bn(),{y:i}=Se(),u=N(0);R(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ee(()=>{n.value=_e(t.value.outline??e.value.outline)});const h=g(()=>n.value.length===0),d=g(()=>h.value&&!s.value),$=g(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:h.value,fixed:d.value}));return(w,y)=>r(t).layout!=="home"&&(!d.value||r(i)>=u.value)?(a(),c("div",{key:0,class:M($.value)},[p("div",Tn,[r(s)?(a(),c("button",{key:0,class:"menu","aria-expanded":w.open,"aria-controls":"VPSidebarNav",onClick:y[0]||(y[0]=P=>w.$emit("open-menu"))},[Nn,p("span",Mn,I(r(e).sidebarMenuLabel||"Menu"),1)],8,In)):f("",!0),m(Sn,{headers:r(n),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Cn=b(An,[["__scopeId","data-v-2488c25a"]]);function Bn(){const o=N(!1);function e(){o.value=!0,window.addEventListener("resize",n)}function t(){o.value=!1,window.removeEventListener("resize",n)}function s(){o.value?t():e()}function n(){window.outerWidth>=768&&t()}const i=te();return G(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:s}}const Hn={},En={class:"VPSwitch",type:"button",role:"switch"},Fn={class:"check"},Dn={key:0,class:"icon"};function On(o,e){return a(),c("button",En,[p("span",Fn,[o.$slots.default?(a(),c("span",Dn,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Gn=b(Hn,[["render",On],["__scopeId","data-v-b4ccac88"]]),Be=o=>(B("data-v-be9742d9"),o=o(),H(),o),Un=Be(()=>p("span",{class:"vpi-sun sun"},null,-1)),jn=Be(()=>p("span",{class:"vpi-moon moon"},null,-1)),zn=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=V(),s=oe("toggle-appearance",()=>{e.value=!e.value}),n=N("");return he(()=>{n.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,u)=>(a(),k(Gn,{title:n.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:v(()=>[Un,jn]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(zn,[["__scopeId","data-v-be9742d9"]]),Kn={key:0,class:"VPNavBarAppearance"},qn=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=V();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",Kn,[m(me)])):f("",!0)}}),Rn=b(qn,[["__scopeId","data-v-3f90c1a5"]]),ke=N();let He=!1,ie=0;function Wn(o){const e=N(!1);if(ne){!He&&Jn(),ie++;const t=G(ke,s=>{var n,i,u;s===o.el.value||(n=o.el.value)!=null&&n.contains(s)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});x(()=>{t(),ie--,ie||Xn()})}return Xe(e)}function Jn(){document.addEventListener("focusin",Ee),He=!0,ke.value=document.activeElement}function Xn(){document.removeEventListener("focusin",Ee)}function Ee(){ke.value=document.activeElement}const Yn={class:"VPMenuLink"},Qn=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),c("div",Yn,[m(D,{class:M({active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[O(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=b(Qn,[["__scopeId","data-v-f51f088d"]]),Zn={class:"VPMenuGroup"},xn={key:0,class:"title"},es=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Zn,[e.text?(a(),c("p",xn,I(e.text),1)):f("",!0),(a(!0),c(C,null,E(e.items,s=>(a(),c(C,null,["link"in s?(a(),k(se,{key:0,item:s},null,8,["item"])):f("",!0)],64))),256))]))}}),ts=b(es,[["__scopeId","data-v-a6b0397c"]]),os={class:"VPMenu"},ns={key:0,class:"items"},ss=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",os,[e.items?(a(),c("div",ns,[(a(!0),c(C,null,E(e.items,s=>(a(),c(C,{key:JSON.stringify(s)},["link"in s?(a(),k(se,{key:0,item:s},null,8,["item"])):"component"in s?(a(),k(F(s.component),we(K({key:1},s.props)),null,16)):(a(),k(ts,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),as=b(ss,[["__scopeId","data-v-20ed86d6"]]),rs=o=>(B("data-v-af5898d3"),o=o(),H(),o),is=["aria-expanded","aria-label"],ls={key:0,class:"text"},cs=["innerHTML"],us=rs(()=>p("span",{class:"vpi-chevron-down text-icon"},null,-1)),ds={key:1,class:"vpi-more-horizontal icon"},vs={class:"menu"},ps=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=N(!1),t=N();Wn({el:t,onBlur:s});function s(){e.value=!1}return(n,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":n.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[n.button||n.icon?(a(),c("span",ls,[n.icon?(a(),c("span",{key:0,class:M([n.icon,"option-icon"])},null,2)):f("",!0),n.button?(a(),c("span",{key:1,innerHTML:n.button},null,8,cs)):f("",!0),us])):(a(),c("span",ds))],8,is),p("div",vs,[m(as,{items:n.items},{default:v(()=>[l(n.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(ps,[["__scopeId","data-v-af5898d3"]]),hs=["href","aria-label","innerHTML"],fs=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=g(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,n)=>(a(),c("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,hs))}}),_s=b(fs,[["__scopeId","data-v-358b6670"]]),ms={class:"VPSocialLinks"},ks=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",ms,[(a(!0),c(C,null,E(e.links,({link:s,icon:n,ariaLabel:i})=>(a(),k(_s,{key:s,icon:n,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(ks,[["__scopeId","data-v-e71e869c"]]),bs={key:0,class:"group translations"},$s={class:"trans-title"},gs={key:1,class:"group"},ys={class:"item appearance"},Ps={class:"label"},Ls={class:"appearance-action"},Vs={key:2,class:"group"},Ss={class:"item social-links"},ws=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:n}=X({correspondingLink:!0}),i=g(()=>s.value.length&&n.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),k(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[r(s).length&&r(n).label?(a(),c("div",bs,[p("p",$s,I(r(n).label),1),(a(!0),c(C,null,E(r(s),d=>(a(),k(se,{key:d.link,item:d},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",gs,[p("div",ys,[p("p",Ps,I(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",Ls,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",Vs,[p("div",Ss,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ts=b(ws,[["__scopeId","data-v-f953d92f"]]),Is=o=>(B("data-v-6bee1efd"),o=o(),H(),o),Ns=["aria-expanded"],Ms=Is(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),As=[Ms],Cs=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:M(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},As,10,Ns))}}),Bs=b(Cs,[["__scopeId","data-v-6bee1efd"]]),Hs=["innerHTML"],Es=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=V();return(t,s)=>(a(),k(D,{class:M({VPNavBarMenuLink:!0,active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[p("span",{innerHTML:t.item.text},null,8,Hs)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Fs=b(Es,[["__scopeId","data-v-08fbf4b6"]]),Ds=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=V(),s=i=>"component"in i?!1:"link"in i?q(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),n=g(()=>s(e.item));return(i,u)=>(a(),k(be,{class:M({VPNavBarMenuGroup:!0,active:r(q)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||n.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Os=o=>(B("data-v-afb2845e"),o=o(),H(),o),Gs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Us=Os(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),js=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),c("nav",Gs,[Us,(a(!0),c(C,null,E(r(e).nav,n=>(a(),c(C,{key:JSON.stringify(n)},["link"in n?(a(),k(Fs,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),we(K({key:1},n.props)),null,16)):(a(),k(Ds,{key:2,item:n},null,8,["item"]))],64))),128))])):f("",!0)}}),zs=b(js,[["__scopeId","data-v-afb2845e"]]);function Ks(o){const{localeIndex:e,theme:t}=V();function s(n){var L,A,T;const i=n.split("."),u=(L=t.value.search)==null?void 0:L.options,h=u&&typeof u=="object",d=h&&((T=(A=u.locales)==null?void 0:A[e.value])==null?void 0:T.translations)||null,$=h&&u.translations||null;let w=d,y=$,P=o;const S=i.pop();for(const j of i){let z=null;const J=P==null?void 0:P[j];J&&(z=P=J);const ae=y==null?void 0:y[j];ae&&(z=y=ae);const re=w==null?void 0:w[j];re&&(z=w=re),J||(P=z),ae||(y=z),re||(w=z)}return(w==null?void 0:w[S])??(y==null?void 0:y[S])??(P==null?void 0:P[S])??""}return s}const qs=["aria-label"],Rs={class:"DocSearch-Button-Container"},Ws=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),Js={class:"DocSearch-Button-Placeholder"},Xs=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Ks({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,n)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",Rs,[Ws,p("span",Js,I(r(t)("button.buttonText")),1)]),Xs],8,qs))}}),Ys={class:"VPNavBarSearch"},Qs={id:"local-search"},Zs={key:1,id:"docsearch"},xs=_({__name:"VPNavBarSearch",setup(o){const e=()=>null,t=Ye(()=>Qe(()=>import("./VPAlgoliaSearchBox.Dx-SG-5N.js"),__vite__mapDeps([0,1]))),{theme:s}=V(),n=N(!1),i=N(!1),u=()=>{const P="VPAlgoliaPreconnect";(window.requestIdleCallback||setTimeout)(()=>{var A;const L=document.createElement("link");L.id=P,L.rel="preconnect",L.href=`https://${(((A=s.value.search)==null?void 0:A.options)??s.value.algolia).appId}-dsn.algolia.net`,L.crossOrigin="",document.head.appendChild(L)})};R(()=>{u();const P=L=>{(L.key.toLowerCase()==="k"&&(L.metaKey||L.ctrlKey)||!$(L)&&L.key==="/")&&(L.preventDefault(),h(),S())},S=()=>{window.removeEventListener("keydown",P)};window.addEventListener("keydown",P),x(S)});function h(){n.value||(n.value=!0,setTimeout(d,16))}function d(){const P=new Event("keydown");P.key="k",P.metaKey=!0,window.dispatchEvent(P),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function $(P){const S=P.target,L=S.tagName;return S.isContentEditable||L==="INPUT"||L==="SELECT"||L==="TEXTAREA"}const w=N(!1),y="algolia";return(P,S)=>{var L;return a(),c("div",Ys,[r(y)==="local"?(a(),c(C,{key:0},[w.value?(a(),k(r(e),{key:0,onClose:S[0]||(S[0]=A=>w.value=!1)})):f("",!0),p("div",Qs,[m(ge,{onClick:S[1]||(S[1]=A=>w.value=!0)})])],64)):r(y)==="algolia"?(a(),c(C,{key:1},[n.value?(a(),k(r(t),{key:0,algolia:((L=r(s).search)==null?void 0:L.options)??r(s).algolia,onVnodeBeforeMount:S[2]||(S[2]=A=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Zs,[m(ge,{onClick:h})]))],64)):f("",!0)])}}}),ea=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),ta=b(ea,[["__scopeId","data-v-ef6192dc"]]),oa=["href","rel","target"],na={key:1},sa={key:2},aa=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=V(),{hasSidebar:s}=U(),{currentLang:n}=X(),i=g(()=>{var d;return typeof t.value.logoLink=="string"?t.value.logoLink:(d=t.value.logoLink)==null?void 0:d.link}),u=g(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.rel}),h=g(()=>{var d;return typeof t.value.logoLink=="string"||(d=t.value.logoLink)==null?void 0:d.target});return(d,$)=>(a(),c("div",{class:M(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(fe)(r(n).link),rel:u.value,target:h.value},[l(d.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),k(Q,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",na,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",sa,I(r(e).title),1)):f("",!0),l(d.$slots,"nav-bar-title-after",{},void 0,!0)],8,oa)],2))}}),ra=b(aa,[["__scopeId","data-v-0ad69264"]]),ia={class:"items"},la={class:"title"},ca=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=V(),{localeLinks:t,currentLang:s}=X({correspondingLink:!0});return(n,i)=>r(t).length&&r(s).label?(a(),k(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:v(()=>[p("div",ia,[p("p",la,I(r(s).label),1),(a(!0),c(C,null,E(r(t),u=>(a(),k(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ua=b(ca,[["__scopeId","data-v-acee064b"]]),da=o=>(B("data-v-9fd4d1dd"),o=o(),H(),o),va={class:"wrapper"},pa={class:"container"},ha={class:"title"},fa={class:"content"},_a={class:"content-body"},ma=da(()=>p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1)),ka=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const e=o,{y:t}=Se(),{hasSidebar:s}=U(),{frontmatter:n}=V(),i=N({});return he(()=>{i.value={"has-sidebar":s.value,home:n.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(u,h)=>(a(),c("div",{class:M(["VPNavBar",i.value])},[p("div",va,[p("div",pa,[p("div",ha,[m(ra,null,{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",fa,[p("div",_a,[l(u.$slots,"nav-bar-content-before",{},void 0,!0),m(xs,{class:"search"}),m(zs,{class:"menu"}),m(ua,{class:"translations"}),m(Rn,{class:"appearance"}),m(ta,{class:"social-links"}),m(Ts,{class:"extra"}),l(u.$slots,"nav-bar-content-after",{},void 0,!0),m(Bs,{class:"hamburger",active:u.isScreenOpen,onClick:h[0]||(h[0]=d=>u.$emit("toggle-screen"))},null,8,["active"])])])])]),ma],2))}}),ba=b(ka,[["__scopeId","data-v-9fd4d1dd"]]),$a={key:0,class:"VPNavScreenAppearance"},ga={class:"text"},ya=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=V();return(s,n)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),c("div",$a,[p("p",ga,I(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),Pa=b(ya,[["__scopeId","data-v-a3e2920d"]]),La=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Va=b(La,[["__scopeId","data-v-1a934d60"]]),Sa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=oe("close-screen");return(t,s)=>(a(),k(D,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:v(()=>[O(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Fe=b(Sa,[["__scopeId","data-v-aea78dd1"]]),wa={class:"VPNavScreenMenuGroupSection"},Ta={key:0,class:"title"},Ia=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",wa,[e.text?(a(),c("p",Ta,I(e.text),1)):f("",!0),(a(!0),c(C,null,E(e.items,s=>(a(),k(Fe,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Na=b(Ia,[["__scopeId","data-v-f60dbfa7"]]),Ma=o=>(B("data-v-d99bfeec"),o=o(),H(),o),Aa=["aria-controls","aria-expanded"],Ca=["innerHTML"],Ba=Ma(()=>p("span",{class:"vpi-plus button-icon"},null,-1)),Ha=["id"],Ea={key:0,class:"item"},Fa={key:1,class:"item"},Da={key:2,class:"group"},Oa=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=N(!1),s=g(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function n(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:M(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:n},[p("span",{class:"button-text",innerHTML:i.text},null,8,Ca),Ba],8,Aa),p("div",{id:s.value,class:"items"},[(a(!0),c(C,null,E(i.items,h=>(a(),c(C,{key:JSON.stringify(h)},["link"in h?(a(),c("div",Ea,[m(Fe,{item:h},null,8,["item"])])):"component"in h?(a(),c("div",Fa,[(a(),k(F(h.component),K(h.props,{"screen-menu":""}),null,16))])):(a(),c("div",Da,[m(Na,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ha)],2))}}),Ga=b(Oa,[["__scopeId","data-v-d99bfeec"]]),Ua={key:0,class:"VPNavScreenMenu"},ja=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),c("nav",Ua,[(a(!0),c(C,null,E(r(e).nav,n=>(a(),c(C,{key:JSON.stringify(n)},["link"in n?(a(),k(Va,{key:0,item:n},null,8,["item"])):"component"in n?(a(),k(F(n.component),K({key:1},n.props,{"screen-menu":""}),null,16)):(a(),k(Ga,{key:2,text:n.text||"",items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),za=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),k($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),De=o=>(B("data-v-516e4bc3"),o=o(),H(),o),Ka=De(()=>p("span",{class:"vpi-languages icon lang"},null,-1)),qa=De(()=>p("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ra={class:"list"},Wa=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),s=N(!1);function n(){s.value=!s.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:M(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:n},[Ka,O(" "+I(r(t).label)+" ",1),qa]),p("ul",Ra,[(a(!0),c(C,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(D,{class:"link",href:h.link},{default:v(()=>[O(I(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),Ja=b(Wa,[["__scopeId","data-v-516e4bc3"]]),Xa={class:"container"},Ya=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=N(null),t=Te(ne?document.body:null);return(s,n)=>(a(),k(ve,{name:"fade",onEnter:n[0]||(n[0]=i=>t.value=!0),onAfterLeave:n[1]||(n[1]=i=>t.value=!1)},{default:v(()=>[s.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",Xa,[l(s.$slots,"nav-screen-content-before",{},void 0,!0),m(ja,{class:"menu"}),m(Ja,{class:"translations"}),m(Pa,{class:"appearance"}),m(za,{class:"social-links"}),l(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Qa=b(Ya,[["__scopeId","data-v-2dd6d0c7"]]),Za={key:0,class:"VPNav"},xa=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Bn(),{frontmatter:n}=V(),i=g(()=>n.value.navbar!==!1);return Ie("close-screen",t),Z(()=>{ne&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Za,[m(ba,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":v(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Qa,{open:r(e)},{"nav-screen-content-before":v(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),er=b(xa,[["__scopeId","data-v-7ad780c2"]]),Oe=o=>(B("data-v-edd2eed8"),o=o(),H(),o),tr=["role","tabindex"],or=Oe(()=>p("div",{class:"indicator"},null,-1)),nr=["onKeydown"],sr=Oe(()=>p("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ar=[sr],rr={key:1,class:"items"},ir=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:s,isLink:n,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:d}=Pt(g(()=>e.item)),$=g(()=>h.value?"section":"div"),w=g(()=>n.value?"a":"div"),y=g(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=g(()=>n.value?void 0:"button"),S=g(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":n.value},{"is-active":i.value},{"has-active":u.value}]);function L(T){"key"in T&&T.key!=="Enter"||!e.item.link&&d()}function A(){e.item.link&&d()}return(T,j)=>{const z=W("VPSidebarItem",!0);return a(),k(F($.value),{class:M(["VPSidebarItem",S.value])},{default:v(()=>[T.item.text?(a(),c("div",K({key:0,class:"item",role:P.value},Ze(T.item.items?{click:L,keydown:L}:{},!0),{tabindex:T.item.items&&0}),[or,T.item.link?(a(),k(D,{key:0,tag:w.value,class:"link",href:T.item.link,rel:T.item.rel,target:T.item.target},{default:v(()=>[(a(),k(F(y.value),{class:"text",innerHTML:T.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),k(F(y.value),{key:1,class:"text",innerHTML:T.item.text},null,8,["innerHTML"])),T.item.collapsed!=null&&T.item.items&&T.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:A,onKeydown:xe(A,["enter"]),tabindex:"0"},ar,40,nr)):f("",!0)],16,tr)):f("",!0),T.item.items&&T.item.items.length?(a(),c("div",rr,[T.depth<5?(a(!0),c(C,{key:0},E(T.item.items,J=>(a(),k(z,{key:J.text,item:J,depth:T.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),lr=b(ir,[["__scopeId","data-v-edd2eed8"]]),cr=_({__name:"VPSidebarGroup",props:{items:{}},setup(o){const e=N(!0);let t=null;return R(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),et(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,n)=>(a(!0),c(C,null,E(s.items,i=>(a(),c("div",{key:i.text,class:M(["group",{"no-transition":e.value}])},[m(lr,{item:i,depth:0},null,8,["item"])],2))),128))}}),ur=b(cr,[["__scopeId","data-v-51288d80"]]),Ge=o=>(B("data-v-42c4c606"),o=o(),H(),o),dr=Ge(()=>p("div",{class:"curtain"},null,-1)),vr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},pr=Ge(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),hr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const e=o,{sidebarGroups:t,hasSidebar:s}=U(),n=N(null),i=Te(ne?document.body:null);G([e,n],()=>{var h;e.open?(i.value=!0,(h=n.value)==null||h.focus()):i.value=!1},{immediate:!0,flush:"post"});const u=N(0);return G(t,()=>{u.value+=1},{deep:!0}),(h,d)=>r(s)?(a(),c("aside",{key:0,class:M(["VPSidebar",{open:h.open}]),ref_key:"navEl",ref:n,onClick:d[0]||(d[0]=tt(()=>{},["stop"]))},[dr,p("nav",vr,[pr,l(h.$slots,"sidebar-nav-before",{},void 0,!0),(a(),k(ur,{items:r(t),key:u.value},null,8,["items"])),l(h.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),fr=b(hr,[["__scopeId","data-v-42c4c606"]]),_r=_({__name:"VPSkipLink",setup(o){const e=te(),t=N();G(()=>e.path,()=>t.value.focus());function s({target:n}){const i=document.getElementById(decodeURIComponent(n.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(n,i)=>(a(),c(C,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),mr=b(_r,[["__scopeId","data-v-c8291ffa"]]),kr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:s}=U(),n=te();G(()=>n.path,s),yt(e,s);const{frontmatter:i}=V(),u=ot(),h=g(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(d,$)=>{const w=W("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:M(["Layout",r(i).pageClass])},[l(d.$slots,"layout-top",{},void 0,!0),m(mr),m(it,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),m(er,null,{"nav-bar-title-before":v(()=>[l(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[l(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[l(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[l(d.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[l(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[l(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Cn,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(fr,{open:r(e)},{"sidebar-nav-before":v(()=>[l(d.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[l(d.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(pn,null,{"page-top":v(()=>[l(d.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[l(d.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[l(d.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[l(d.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":v(()=>[l(d.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":v(()=>[l(d.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":v(()=>[l(d.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":v(()=>[l(d.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":v(()=>[l(d.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[l(d.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[l(d.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[l(d.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[l(d.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[l(d.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[l(d.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[l(d.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[l(d.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[l(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[l(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[l(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[l(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[l(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[l(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(kn),l(d.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),k(w,{key:1}))}}}),br=b(kr,[["__scopeId","data-v-d8b57b2d"]]),ye={Layout:br,enhanceApp:({app:o})=>{o.component("Badge",st)}},gr={extends:ye,Layout:()=>nt(ye.Layout,null,{}),enhanceApp({app:o,router:e,siteData:t}){}};export{gr as R,V as u}; diff --git a/assets/chunks/timeline-definition-bf702344.D5PATXbR.js b/assets/chunks/timeline-definition-6eaa3543.oX4ehz4e.js similarity index 98% rename from assets/chunks/timeline-definition-bf702344.D5PATXbR.js rename to assets/chunks/timeline-definition-6eaa3543.oX4ehz4e.js index af29841e..85e553a2 100644 --- a/assets/chunks/timeline-definition-bf702344.D5PATXbR.js +++ b/assets/chunks/timeline-definition-6eaa3543.oX4ehz4e.js @@ -1,4 +1,4 @@ -import{b4 as ft,G as gt,c as mt,l as E,h as G,t as xt,b5 as bt,b6 as _t,b7 as kt}from"../app.CbQoAe_D.js";import{a as D}from"./arc.EE6MX9ab.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./path.CbwjOpE9.js";var K=function(){var n=function(g,i,r,c){for(r=r||{},c=g.length;c--;r[g[c]]=i);return r},t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],a=[1,10],s=[1,11],h=[1,12],l=[1,13],p=[1,16],y=[1,17],f={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(i,r,c,d,u,o,$){var x=o.length-1;switch(u){case 1:return o[x-1];case 2:this.$=[];break;case 3:o[x-1].push(o[x]),this.$=o[x-1];break;case 4:case 5:this.$=o[x];break;case 6:case 7:this.$=[];break;case 8:d.getCommonDb().setDiagramTitle(o[x].substr(6)),this.$=o[x].substr(6);break;case 9:this.$=o[x].trim(),d.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[x].trim(),d.getCommonDb().setAccDescription(this.$);break;case 12:d.addSection(o[x].substr(8)),this.$=o[x].substr(8);break;case 15:d.addTask(o[x],0,""),this.$=o[x];break;case 16:d.addEvent(o[x].substr(2)),this.$=o[x];break}},table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:function(i,r){if(r.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=r,c}},parse:function(i){var r=this,c=[0],d=[],u=[null],o=[],$=this.table,x="",T=0,W=0,C=2,A=1,B=o.slice.call(arguments,1),k=Object.create(this.lexer),w={yy:{}};for(var v in this.yy)Object.prototype.hasOwnProperty.call(this.yy,v)&&(w.yy[v]=this.yy[v]);k.setInput(i,w.yy),w.yy.lexer=k,w.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var I=k.yylloc;o.push(I);var P=k.options&&k.options.ranges;typeof w.yy.parseError=="function"?this.parseError=w.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function z(){var M;return M=d.pop()||k.lex()||A,typeof M!="number"&&(M instanceof Array&&(d=M,M=d.pop()),M=r.symbols_[M]||M),M}for(var _,L,S,Z,R={},O,N,Y,j;;){if(L=c[c.length-1],this.defaultActions[L]?S=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=z()),S=$[L]&&$[L][_]),typeof S>"u"||!S.length||!S[0]){var J="";j=[];for(O in $[L])this.terminals_[O]&&O>C&&j.push("'"+this.terminals_[O]+"'");k.showPosition?J="Parse error on line "+(T+1)+`: +import{b4 as ft,A as gt,c as mt,l as E,h as G,t as xt,b5 as bt,b6 as _t,b7 as kt}from"../app.DRN3unl1.js";import{a as D}from"./arc.CbQZFRTr.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./path.CbwjOpE9.js";var K=function(){var n=function(g,i,r,c){for(r=r||{},c=g.length;c--;r[g[c]]=i);return r},t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],a=[1,10],s=[1,11],h=[1,12],l=[1,13],p=[1,16],y=[1,17],f={trace:function(){},yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:function(i,r,c,d,u,o,$){var x=o.length-1;switch(u){case 1:return o[x-1];case 2:this.$=[];break;case 3:o[x-1].push(o[x]),this.$=o[x-1];break;case 4:case 5:this.$=o[x];break;case 6:case 7:this.$=[];break;case 8:d.getCommonDb().setDiagramTitle(o[x].substr(6)),this.$=o[x].substr(6);break;case 9:this.$=o[x].trim(),d.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[x].trim(),d.getCommonDb().setAccDescription(this.$);break;case 12:d.addSection(o[x].substr(8)),this.$=o[x].substr(8);break;case 15:d.addTask(o[x],0,""),this.$=o[x];break;case 16:d.addEvent(o[x].substr(2)),this.$=o[x];break}},table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:a,14:s,16:h,17:l,18:14,19:15,20:p,21:y},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:function(i,r){if(r.recoverable)this.trace(i);else{var c=new Error(i);throw c.hash=r,c}},parse:function(i){var r=this,c=[0],d=[],u=[null],o=[],$=this.table,x="",T=0,W=0,C=2,A=1,B=o.slice.call(arguments,1),k=Object.create(this.lexer),w={yy:{}};for(var v in this.yy)Object.prototype.hasOwnProperty.call(this.yy,v)&&(w.yy[v]=this.yy[v]);k.setInput(i,w.yy),w.yy.lexer=k,w.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var I=k.yylloc;o.push(I);var P=k.options&&k.options.ranges;typeof w.yy.parseError=="function"?this.parseError=w.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function z(){var M;return M=d.pop()||k.lex()||A,typeof M!="number"&&(M instanceof Array&&(d=M,M=d.pop()),M=r.symbols_[M]||M),M}for(var _,L,S,Z,R={},O,N,Y,j;;){if(L=c[c.length-1],this.defaultActions[L]?S=this.defaultActions[L]:((_===null||typeof _>"u")&&(_=z()),S=$[L]&&$[L][_]),typeof S>"u"||!S.length||!S[0]){var J="";j=[];for(O in $[L])this.terminals_[O]&&O>C&&j.push("'"+this.terminals_[O]+"'");k.showPosition?J="Parse error on line "+(T+1)+`: `+k.showPosition()+` Expecting `+j.join(", ")+", got '"+(this.terminals_[_]||_)+"'":J="Parse error on line "+(T+1)+": Unexpected "+(_==A?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(J,{text:k.match,token:this.terminals_[_]||_,line:k.yylineno,loc:I,expected:j})}if(S[0]instanceof Array&&S.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+_);switch(S[0]){case 1:c.push(_),u.push(k.yytext),o.push(k.yylloc),c.push(S[1]),_=null,W=k.yyleng,x=k.yytext,T=k.yylineno,I=k.yylloc;break;case 2:if(N=this.productions_[S[1]][1],R.$=u[u.length-N],R._$={first_line:o[o.length-(N||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(N||1)].first_column,last_column:o[o.length-1].last_column},P&&(R._$.range=[o[o.length-(N||1)].range[0],o[o.length-1].range[1]]),Z=this.performAction.apply(R,[x,W,T,w.yy,S[1],u,o].concat(B)),typeof Z<"u")return Z;N&&(c=c.slice(0,-1*N*2),u=u.slice(0,-1*N),o=o.slice(0,-1*N)),c.push(this.productions_[S[1]][0]),u.push(R.$),o.push(R._$),Y=$[c[c.length-2]][c[c.length-1]],c.push(Y);break;case 3:return!0}}return!0}},b=function(){var g={EOF:1,parseError:function(r,c){if(this.yy.parser)this.yy.parser.parseError(r,c);else throw new Error(r)},setInput:function(i,r){return this.yy=r||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var r=i.match(/(?:\r\n?|\n).*/g);return r?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},unput:function(i){var r=i.length,c=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-r),this.offset-=r;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var u=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-r},this.options.ranges&&(this.yylloc.range=[u[0],u[0]+this.yyleng-r]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(i){this.unput(this.match.slice(i))},pastInput:function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var i=this.pastInput(),r=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/chunks/xychartDiagram-f11f50a6.Bqkbyp4J.js b/assets/chunks/xychartDiagram-4a8b8217.BboCrNzl.js similarity index 98% rename from assets/chunks/xychartDiagram-f11f50a6.Bqkbyp4J.js rename to assets/chunks/xychartDiagram-4a8b8217.BboCrNzl.js index 52bf0888..4f113be9 100644 --- a/assets/chunks/xychartDiagram-f11f50a6.Bqkbyp4J.js +++ b/assets/chunks/xychartDiagram-4a8b8217.BboCrNzl.js @@ -1,4 +1,4 @@ -import{aY as zt,aZ as ot,aK as wt,aJ as Ft,s as Nt,g as Xt,E as Yt,F as St,a as Ht,b as $t,G as Ut,l as Ct,aH as qt,i as jt,d as Gt}from"../app.CbQoAe_D.js";import{a as Qt}from"./createText-ca0c5216.5u9lbHcb.js";import{i as Kt}from"./init.Gi6I4Gst.js";import{o as Zt}from"./ordinal.BYWQX77i.js";import{l as ft}from"./linear.CuaGw0Y_.js";import{l as pt}from"./line.Rvm4JnwS.js";import"./framework.01Cf-Wcw.js";import"./theme.BwHuVLnS.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";function Jt(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s"u"&&(k.yylloc={});var tt=k.yylloc;a.push(tt);var Wt=k.options&&k.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var I;return I=g.pop()||k.lex()||xt,typeof I!="number"&&(I instanceof Array&&(g=I,I=g.pop()),I=l.symbols_[I]||I),I}for(var D,W,v,it,O={},q,M,dt,j;;){if(W=u[u.length-1],this.defaultActions[W]?v=this.defaultActions[W]:((D===null||typeof D>"u")&&(D=Ot()),v=F[W]&&F[W][D]),typeof v>"u"||!v.length||!v[0]){var et="";j=[];for(q in F[W])this.terminals_[q]&&q>Vt&&j.push("'"+this.terminals_[q]+"'");k.showPosition?et="Parse error on line "+(U+1)+`: +import{aY as zt,aZ as ot,aK as wt,aJ as Ft,s as Nt,g as Xt,x as Yt,y as St,a as Ht,b as $t,A as Ut,l as Ct,aH as qt,i as jt,d as Gt}from"../app.DRN3unl1.js";import{a as Qt}from"./createText-4a4f35c9.Cu3K6_Cl.js";import{i as Kt}from"./init.Gi6I4Gst.js";import{o as Zt}from"./ordinal.BYWQX77i.js";import{l as ft}from"./linear.DG04O0I7.js";import{l as pt}from"./line.DpDoeUQJ.js";import"./framework.B49Yz1nR.js";import"./theme.BlGa_csg.js";import"./array.BKyUJesY.js";import"./path.CbwjOpE9.js";function Jt(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s"u"&&(k.yylloc={});var tt=k.yylloc;a.push(tt);var Wt=k.options&&k.options.ranges;typeof B.yy.parseError=="function"?this.parseError=B.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ot(){var I;return I=g.pop()||k.lex()||xt,typeof I!="number"&&(I instanceof Array&&(g=I,I=g.pop()),I=l.symbols_[I]||I),I}for(var D,W,v,it,O={},q,M,dt,j;;){if(W=u[u.length-1],this.defaultActions[W]?v=this.defaultActions[W]:((D===null||typeof D>"u")&&(D=Ot()),v=F[W]&&F[W][D]),typeof v>"u"||!v.length||!v[0]){var et="";j=[];for(q in F[W])this.terminals_[q]&&q>Vt&&j.push("'"+this.terminals_[q]+"'");k.showPosition?et="Parse error on line "+(U+1)+`: `+k.showPosition()+` Expecting `+j.join(", ")+", got '"+(this.terminals_[D]||D)+"'":et="Parse error on line "+(U+1)+": Unexpected "+(D==xt?"end of input":"'"+(this.terminals_[D]||D)+"'"),this.parseError(et,{text:k.match,token:this.terminals_[D]||D,line:k.yylineno,loc:tt,expected:j})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+D);switch(v[0]){case 1:u.push(D),b.push(k.yytext),a.push(k.yylloc),u.push(v[1]),D=null,gt=k.yyleng,x=k.yytext,U=k.yylineno,tt=k.yylloc;break;case 2:if(M=this.productions_[v[1]][1],O.$=b[b.length-M],O._$={first_line:a[a.length-(M||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(M||1)].first_column,last_column:a[a.length-1].last_column},Wt&&(O._$.range=[a[a.length-(M||1)].range[0],a[a.length-1].range[1]]),it=this.performAction.apply(O,[x,gt,U,B.yy,v[1],b,a].concat(Bt)),typeof it<"u")return it;M&&(u=u.slice(0,-1*M*2),b=b.slice(0,-1*M),a=a.slice(0,-1*M)),u.push(this.productions_[v[1]][0]),b.push(O.$),a.push(O._$),dt=F[u[u.length-2]][u[u.length-1]],u.push(dt);break;case 3:return!0}}return!0}},It=function(){var V={EOF:1,parseError:function(l,u){if(this.yy.parser)this.yy.parser.parseError(l,u);else throw new Error(l)},setInput:function(r,l){return this.yy=l||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var l=r.match(/(?:\r\n?|\n).*/g);return l?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},unput:function(r){var l=r.length,u=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-l),this.offset-=l;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var b=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===g.length?this.yylloc.first_column:0)+g[g.length-u.length].length-u[0].length:this.yylloc.first_column-l},this.options.ranges&&(this.yylloc.range=[b[0],b[0]+this.yyleng-l]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(r){this.unput(this.match.slice(r))},pastInput:function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var r=this.pastInput(),l=new Array(r.length+1).join("-");return r+this.upcomingInput()+` diff --git a/assets/connectwise-automate-integration-setup.md.UrG_ePnE.js b/assets/connectwise-automate-integration-setup.md.BbRfz9pz.js similarity index 98% rename from assets/connectwise-automate-integration-setup.md.UrG_ePnE.js rename to assets/connectwise-automate-integration-setup.md.BbRfz9pz.js index 9451901b..212bc9fd 100644 --- a/assets/connectwise-automate-integration-setup.md.UrG_ePnE.js +++ b/assets/connectwise-automate-integration-setup.md.BbRfz9pz.js @@ -1 +1 @@ -import{_ as t,a as e,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as a,a as s}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as r,c as i,o as n,a6 as m}from"./chunks/framework.01Cf-Wcw.js";const l="/assets/2021-03-23-15-18-39.BnxF7E94.png",p="/assets/2021-03-23-16-14-24.DlHyhlev.png",c="/assets/2021-03-23-16-19-01.Dj_tWZLO.png",u="/assets/2021-03-23-16-30-41.YkbGnvJ4.png",g="/assets/2021-03-23-18-35-49.sNjkhiDI.png",d="/assets/2021-03-23-18-35-28.DVBY9oQA.png",h="/assets/2021-03-23-18-39-00.BLBXbXB_.png",_="/assets/2021-03-23-18-59-10.P-H_exTw.png",f="/assets/2021-03-23-19-00-04.BcyzoHgH.png",y="/assets/2021-03-23-18-59-44.PfGyhGQY.png",T=JSON.parse('{"title":"ConnectWise Automate","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-automate-integration-setup.md","filePath":"connectwise-automate-integration-setup.md"}'),b={name:"connectwise-automate-integration-setup.md"},A=m('

ConnectWise Automate

Setting up this integration allows you to

  1. Import customers from Automate
  2. Import computers from Automate
  3. Manage all computers in Automate without deploying the ImmyBot Agent
  4. Map customers from Manage to ImmyBot tenant based on existing Automate<->Manage relationship

Create ImmyBot Role

ImmyBot requires the following permissions in Automate

  • Core
    • Clients.Read
    • Clients.Show All
    • Computers.Show All
    • Computers.Edit (For moving existing computers to new locations
    • Computers.Delete (For retiring duplicate computers)
    • Groups.Show All
    • Locations.Show All
    • Patch Manager.Read (Required if you want Immy to apply approved Windows Updates)

Immy-CWA-User Class Manager-Permissions

Create ImmyBot User

Enable Google MFA for ImmyBot User

The integration requires Google for MFA. Duo is not supported as Duo does not expose the MFA token anywhere for us to use and doesn't appear to be the standard TOTP like Google uses. You will need to exclude the integration user from your Duo deployment if using Duo and configure the Google MFA plugin for Automate for this user.

image

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

',30),w=[A];function I(C,B,M,k,q,x){return n(),i("div",null,w)}const G=r(b,[["render",I]]);export{T as __pageData,G as default}; +import{_ as t,a as e,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as a,a as s}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as r,c as i,o as n,a6 as m}from"./chunks/framework.B49Yz1nR.js";const l="/assets/2021-03-23-15-18-39.BnxF7E94.png",p="/assets/2021-03-23-16-14-24.DlHyhlev.png",c="/assets/2021-03-23-16-19-01.Dj_tWZLO.png",u="/assets/2021-03-23-16-30-41.YkbGnvJ4.png",g="/assets/2021-03-23-18-35-49.sNjkhiDI.png",d="/assets/2021-03-23-18-35-28.DVBY9oQA.png",h="/assets/2021-03-23-18-39-00.BLBXbXB_.png",_="/assets/2021-03-23-18-59-10.P-H_exTw.png",f="/assets/2021-03-23-19-00-04.BcyzoHgH.png",y="/assets/2021-03-23-18-59-44.PfGyhGQY.png",T=JSON.parse('{"title":"ConnectWise Automate","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-automate-integration-setup.md","filePath":"connectwise-automate-integration-setup.md"}'),b={name:"connectwise-automate-integration-setup.md"},A=m('

ConnectWise Automate

Setting up this integration allows you to

  1. Import customers from Automate
  2. Import computers from Automate
  3. Manage all computers in Automate without deploying the ImmyBot Agent
  4. Map customers from Manage to ImmyBot tenant based on existing Automate<->Manage relationship

Create ImmyBot Role

ImmyBot requires the following permissions in Automate

  • Core
    • Clients.Read
    • Clients.Show All
    • Computers.Show All
    • Computers.Edit (For moving existing computers to new locations
    • Computers.Delete (For retiring duplicate computers)
    • Groups.Show All
    • Locations.Show All
    • Patch Manager.Read (Required if you want Immy to apply approved Windows Updates)

Immy-CWA-User Class Manager-Permissions

Create ImmyBot User

Enable Google MFA for ImmyBot User

The integration requires Google for MFA. Duo is not supported as Duo does not expose the MFA token anywhere for us to use and doesn't appear to be the standard TOTP like Google uses. You will need to exclude the integration user from your Duo deployment if using Duo and configure the Google MFA plugin for Automate for this user.

image

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

',30),w=[A];function I(C,B,M,k,q,x){return n(),i("div",null,w)}const G=r(b,[["render",I]]);export{T as __pageData,G as default}; diff --git a/assets/connectwise-automate-integration-setup.md.UrG_ePnE.lean.js b/assets/connectwise-automate-integration-setup.md.BbRfz9pz.lean.js similarity index 94% rename from assets/connectwise-automate-integration-setup.md.UrG_ePnE.lean.js rename to assets/connectwise-automate-integration-setup.md.BbRfz9pz.lean.js index 23742bb5..caf4a9e6 100644 --- a/assets/connectwise-automate-integration-setup.md.UrG_ePnE.lean.js +++ b/assets/connectwise-automate-integration-setup.md.BbRfz9pz.lean.js @@ -1 +1 @@ -import{_ as t,a as e,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as a,a as s}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as r,c as i,o as n,a6 as m}from"./chunks/framework.01Cf-Wcw.js";const l="/assets/2021-03-23-15-18-39.BnxF7E94.png",p="/assets/2021-03-23-16-14-24.DlHyhlev.png",c="/assets/2021-03-23-16-19-01.Dj_tWZLO.png",u="/assets/2021-03-23-16-30-41.YkbGnvJ4.png",g="/assets/2021-03-23-18-35-49.sNjkhiDI.png",d="/assets/2021-03-23-18-35-28.DVBY9oQA.png",h="/assets/2021-03-23-18-39-00.BLBXbXB_.png",_="/assets/2021-03-23-18-59-10.P-H_exTw.png",f="/assets/2021-03-23-19-00-04.BcyzoHgH.png",y="/assets/2021-03-23-18-59-44.PfGyhGQY.png",T=JSON.parse('{"title":"ConnectWise Automate","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-automate-integration-setup.md","filePath":"connectwise-automate-integration-setup.md"}'),b={name:"connectwise-automate-integration-setup.md"},A=m("",30),w=[A];function I(C,B,M,k,q,x){return n(),i("div",null,w)}const G=r(b,[["render",I]]);export{T as __pageData,G as default}; +import{_ as t,a as e,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as a,a as s}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as r,c as i,o as n,a6 as m}from"./chunks/framework.B49Yz1nR.js";const l="/assets/2021-03-23-15-18-39.BnxF7E94.png",p="/assets/2021-03-23-16-14-24.DlHyhlev.png",c="/assets/2021-03-23-16-19-01.Dj_tWZLO.png",u="/assets/2021-03-23-16-30-41.YkbGnvJ4.png",g="/assets/2021-03-23-18-35-49.sNjkhiDI.png",d="/assets/2021-03-23-18-35-28.DVBY9oQA.png",h="/assets/2021-03-23-18-39-00.BLBXbXB_.png",_="/assets/2021-03-23-18-59-10.P-H_exTw.png",f="/assets/2021-03-23-19-00-04.BcyzoHgH.png",y="/assets/2021-03-23-18-59-44.PfGyhGQY.png",T=JSON.parse('{"title":"ConnectWise Automate","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-automate-integration-setup.md","filePath":"connectwise-automate-integration-setup.md"}'),b={name:"connectwise-automate-integration-setup.md"},A=m("",30),w=[A];function I(C,B,M,k,q,x){return n(),i("div",null,w)}const G=r(b,[["render",I]]);export{T as __pageData,G as default}; diff --git a/assets/connectwise-control-integration-setup.md.BAIDwG2f.js b/assets/connectwise-control-integration-setup.md.BR0Z4rIs.js similarity index 99% rename from assets/connectwise-control-integration-setup.md.BAIDwG2f.js rename to assets/connectwise-control-integration-setup.md.BR0Z4rIs.js index 80579ee1..043a02e5 100644 --- a/assets/connectwise-control-integration-setup.md.BAIDwG2f.js +++ b/assets/connectwise-control-integration-setup.md.BR0Z4rIs.js @@ -1,4 +1,4 @@ -import{_ as s,a as e,b as t}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as i,c as a,o as n,a6 as o}from"./chunks/framework.01Cf-Wcw.js";const l="/assets/2021-03-23-19-12-34.CG7rfZXP.png",r="/assets/2021-03-23-19-13-56.CFFMqynk.png",h="/assets/2021-03-23-19-17-38.BmCAN_6B.png",p="/assets/2021-03-23-19-21-03.BYLLD4md.png",c="/assets/2021-03-23-19-24-06.Ce3piVsb.png",F=JSON.parse('{"title":"ConnectWise Control","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-control-integration-setup.md","filePath":"connectwise-control-integration-setup.md"}'),d={name:"connectwise-control-integration-setup.md"},k=o('

ConnectWise Control

Setting up this integration allows you to

  1. Import customers from Control
  2. Import computers from Control
  3. Manage all computers in Control without deploying the ImmyBot Agent
  4. Remote into computers from the ImmyBot interface using Control (Note: We default to requiring customer consent, you can disable this under Settings->Preferences)
  5. Fix the Automate agent using the Control agent (by creating a cross-tenant deployment for the Automate Agent and creating a schedule for your customers)

Install ImmyBot Extension for Control

imageimageimage

FAQ

What custom property do I use?

By default most ConnectWise Control instances you would select 1 for the ClientName CustomProperty field, this is the "Company" property in Control. Secondary group is any number between 1-8 that you would like to group from based on Control groups. You can find more infomation about Control custom propertys here; https://docs.connectwise.com/ConnectWise_Control_Documentation/Get_started/Administration_page/Appearance_page/Add_custom_properties_to_sessions

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

Troubleshooting

ConnectWise Control uses Sqlite under the hood, making it vulnerable to performance issues unless aggressive Database Maintenance Tasks are enabled.

While ImmyBot only uses Control (and other integrations) to spawn an out-of-band connection, over the course of time the database can grow as ImmyBot establishes this connection on each machine once every 24 hours to collect inventory.

Commands go into the SessionEvent table with EventType = 44 Responses go into SessionConnectionEvent with EventType = 70

Automatic Cleanup

Ensure you have the following maintenance actions: Access Sessions: Purge records of session activity older than 7 days for all events EXCEPT AddedNote

image

Access Sessions: Purge records of session connections older than 7 days for Host and Guest connections

image

Manual Cleanup

If you host Control yourself, you can restore performance by doing the following

Download and Install DB Browser for SQLite on your server Open C:\\Program Files (x86)\\ScreenConnect\\App_Data\\session.db Navigate to SQL Editor Paste in the following SQL

Soft delete all commands and responses (This usually solves the problem without kicking everyone out of Control)

sql
update SessionEvent set EventAttributes = 1 where EventType = 44;
+import{_ as s,a as e,b as t}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as i,c as a,o as n,a6 as o}from"./chunks/framework.B49Yz1nR.js";const l="/assets/2021-03-23-19-12-34.CG7rfZXP.png",r="/assets/2021-03-23-19-13-56.CFFMqynk.png",h="/assets/2021-03-23-19-17-38.BmCAN_6B.png",p="/assets/2021-03-23-19-21-03.BYLLD4md.png",c="/assets/2021-03-23-19-24-06.Ce3piVsb.png",F=JSON.parse('{"title":"ConnectWise Control","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-control-integration-setup.md","filePath":"connectwise-control-integration-setup.md"}'),d={name:"connectwise-control-integration-setup.md"},k=o('

ConnectWise Control

Setting up this integration allows you to

  1. Import customers from Control
  2. Import computers from Control
  3. Manage all computers in Control without deploying the ImmyBot Agent
  4. Remote into computers from the ImmyBot interface using Control (Note: We default to requiring customer consent, you can disable this under Settings->Preferences)
  5. Fix the Automate agent using the Control agent (by creating a cross-tenant deployment for the Automate Agent and creating a schedule for your customers)

Install ImmyBot Extension for Control

imageimageimage

FAQ

What custom property do I use?

By default most ConnectWise Control instances you would select 1 for the ClientName CustomProperty field, this is the "Company" property in Control. Secondary group is any number between 1-8 that you would like to group from based on Control groups. You can find more infomation about Control custom propertys here; https://docs.connectwise.com/ConnectWise_Control_Documentation/Get_started/Administration_page/Appearance_page/Add_custom_properties_to_sessions

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

Troubleshooting

ConnectWise Control uses Sqlite under the hood, making it vulnerable to performance issues unless aggressive Database Maintenance Tasks are enabled.

While ImmyBot only uses Control (and other integrations) to spawn an out-of-band connection, over the course of time the database can grow as ImmyBot establishes this connection on each machine once every 24 hours to collect inventory.

Commands go into the SessionEvent table with EventType = 44 Responses go into SessionConnectionEvent with EventType = 70

Automatic Cleanup

Ensure you have the following maintenance actions: Access Sessions: Purge records of session activity older than 7 days for all events EXCEPT AddedNote

image

Access Sessions: Purge records of session connections older than 7 days for Host and Guest connections

image

Manual Cleanup

If you host Control yourself, you can restore performance by doing the following

Download and Install DB Browser for SQLite on your server Open C:\\Program Files (x86)\\ScreenConnect\\App_Data\\session.db Navigate to SQL Editor Paste in the following SQL

Soft delete all commands and responses (This usually solves the problem without kicking everyone out of Control)

sql
update SessionEvent set EventAttributes = 1 where EventType = 44;
 update SessionConnectionEvent set EventAttributes = 1 where EventType = 70;

You will need to commit the changes in DB Browser. You can do this by clicking Write Changes at the top by clicking File->Save If you forget to tdo this it will prompt you to commit the changes, when you exit, click yes.

The reason this works is because the UI doesn't fetch soft-deleted items, so things become much snappier.

However, if it doesn't work, do you following

Delete commands and responses older than 7 days

sql
-- Delete queue commands in db older than 7 days
 DELETE
 FROM SessionEvent
diff --git a/assets/connectwise-control-integration-setup.md.BAIDwG2f.lean.js b/assets/connectwise-control-integration-setup.md.BR0Z4rIs.lean.js
similarity index 91%
rename from assets/connectwise-control-integration-setup.md.BAIDwG2f.lean.js
rename to assets/connectwise-control-integration-setup.md.BR0Z4rIs.lean.js
index 48fcfd3e..f0c20c98 100644
--- a/assets/connectwise-control-integration-setup.md.BAIDwG2f.lean.js
+++ b/assets/connectwise-control-integration-setup.md.BR0Z4rIs.lean.js
@@ -1 +1 @@
-import{_ as s,a as e,b as t}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as i,c as a,o as n,a6 as o}from"./chunks/framework.01Cf-Wcw.js";const l="/assets/2021-03-23-19-12-34.CG7rfZXP.png",r="/assets/2021-03-23-19-13-56.CFFMqynk.png",h="/assets/2021-03-23-19-17-38.BmCAN_6B.png",p="/assets/2021-03-23-19-21-03.BYLLD4md.png",c="/assets/2021-03-23-19-24-06.Ce3piVsb.png",F=JSON.parse('{"title":"ConnectWise Control","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-control-integration-setup.md","filePath":"connectwise-control-integration-setup.md"}'),d={name:"connectwise-control-integration-setup.md"},k=o("",39),m=[k];function u(g,y,E,f,b,C){return n(),a("div",null,m)}const D=i(d,[["render",u]]);export{F as __pageData,D as default};
+import{_ as s,a as e,b as t}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as i,c as a,o as n,a6 as o}from"./chunks/framework.B49Yz1nR.js";const l="/assets/2021-03-23-19-12-34.CG7rfZXP.png",r="/assets/2021-03-23-19-13-56.CFFMqynk.png",h="/assets/2021-03-23-19-17-38.BmCAN_6B.png",p="/assets/2021-03-23-19-21-03.BYLLD4md.png",c="/assets/2021-03-23-19-24-06.Ce3piVsb.png",F=JSON.parse('{"title":"ConnectWise Control","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-control-integration-setup.md","filePath":"connectwise-control-integration-setup.md"}'),d={name:"connectwise-control-integration-setup.md"},k=o("",39),m=[k];function u(g,y,E,f,b,C){return n(),a("div",null,m)}const D=i(d,[["render",u]]);export{F as __pageData,D as default};
diff --git a/assets/connectwise-manage-integration-setup.md.C3Jl0y3u.js b/assets/connectwise-manage-integration-setup.md.qxVZT16I.js
similarity index 96%
rename from assets/connectwise-manage-integration-setup.md.C3Jl0y3u.js
rename to assets/connectwise-manage-integration-setup.md.qxVZT16I.js
index f3748d81..585f851d 100644
--- a/assets/connectwise-manage-integration-setup.md.C3Jl0y3u.js
+++ b/assets/connectwise-manage-integration-setup.md.qxVZT16I.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a,a6 as n}from"./chunks/framework.01Cf-Wcw.js";const o="/assets/2021-03-23-14-26-14.BRGSzU09.png",i="/assets/2022-02-23_15-00-31.BRMrhO-R.png",s="/assets/2021-03-23-14-28-30.gtFlmE2Z.png",r="/assets/2021-03-23-14-43-35.D08wBTLi.png",m="/assets/2021-03-23-14-44-05.CuuaEq-d.png",w=JSON.parse('{"title":"ConnectWise Manage","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-manage-integration-setup.md","filePath":"connectwise-manage-integration-setup.md"}'),l={name:"connectwise-manage-integration-setup.md"},c=n('

ConnectWise Manage

Setting up this integration allows you to

  1. Deploy Software to machines covered by a certain agreement type
  • Example: Deploy Huntress to all customers with a Managed Security Agreement
  1. (Preferred) Deploy Software to machines covered by an Agreement with a specific Addition
  • Example: Deploy SentinelOne to all computers that have SentinelOne as an Addition on their agreement

If you use Automate, setup the Automate integration first and import your customers from there. Importing customers from Manage generally results in many unnecessary Tenants being created in ImmyBot. You can link Automate to Manage to leverage the existing mappings between Automate<->Manage instead of manually mapping your Manage customers

Create an ImmyBot Role with the following permissions

  • Company -> Company Maintenance -> Inquire Level (All)
  • Finance -> Agreements -> Inquire Level (All)
  • Procurement -> Product Catalog -> Inquire Level (All)
  • Procurement -> Product -> Inquire Level (All)
  • System -> API Reports -> Inquire Level (All)

Create an API Member

Go to System -> Members and create a new API Member

Create a new API key

Plugin the API Keys in ImmyBot

Create a new PSA Link and fill in the Provider Info

CW Manage Pod v1

Setting up this integration allows you to Look up the contact's email address in Immy and shows you their computers (Immy does User Computer Affinity behind the scenes so you don't have to do it manually). Technicians can jump into their computers or push software via the ticket.

image

Go to Show More -> Integrations

Add CW Manage Pod

Go to ConnectWise -> Setup Tables -> Manage Hosted API -> +

image

',26),p=[c];function g(u,h,d,y,_,f){return a(),t("div",null,p)}const P=e(l,[["render",g]]);export{w as __pageData,P as default}; +import{_ as e,c as t,o as a,a6 as n}from"./chunks/framework.B49Yz1nR.js";const o="/assets/2021-03-23-14-26-14.BRGSzU09.png",i="/assets/2022-02-23_15-00-31.BRMrhO-R.png",s="/assets/2021-03-23-14-28-30.gtFlmE2Z.png",r="/assets/2021-03-23-14-43-35.D08wBTLi.png",m="/assets/2021-03-23-14-44-05.CuuaEq-d.png",w=JSON.parse('{"title":"ConnectWise Manage","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-manage-integration-setup.md","filePath":"connectwise-manage-integration-setup.md"}'),l={name:"connectwise-manage-integration-setup.md"},c=n('

ConnectWise Manage

Setting up this integration allows you to

  1. Deploy Software to machines covered by a certain agreement type
  • Example: Deploy Huntress to all customers with a Managed Security Agreement
  1. (Preferred) Deploy Software to machines covered by an Agreement with a specific Addition
  • Example: Deploy SentinelOne to all computers that have SentinelOne as an Addition on their agreement

If you use Automate, setup the Automate integration first and import your customers from there. Importing customers from Manage generally results in many unnecessary Tenants being created in ImmyBot. You can link Automate to Manage to leverage the existing mappings between Automate<->Manage instead of manually mapping your Manage customers

Create an ImmyBot Role with the following permissions

  • Company -> Company Maintenance -> Inquire Level (All)
  • Finance -> Agreements -> Inquire Level (All)
  • Procurement -> Product Catalog -> Inquire Level (All)
  • Procurement -> Product -> Inquire Level (All)
  • System -> API Reports -> Inquire Level (All)

Create an API Member

Go to System -> Members and create a new API Member

Create a new API key

Plugin the API Keys in ImmyBot

Create a new PSA Link and fill in the Provider Info

CW Manage Pod v1

Setting up this integration allows you to Look up the contact's email address in Immy and shows you their computers (Immy does User Computer Affinity behind the scenes so you don't have to do it manually). Technicians can jump into their computers or push software via the ticket.

image

Go to Show More -> Integrations

Add CW Manage Pod

Go to ConnectWise -> Setup Tables -> Manage Hosted API -> +

image

',26),p=[c];function g(u,h,d,y,_,f){return a(),t("div",null,p)}const P=e(l,[["render",g]]);export{w as __pageData,P as default}; diff --git a/assets/connectwise-manage-integration-setup.md.C3Jl0y3u.lean.js b/assets/connectwise-manage-integration-setup.md.qxVZT16I.lean.js similarity index 81% rename from assets/connectwise-manage-integration-setup.md.C3Jl0y3u.lean.js rename to assets/connectwise-manage-integration-setup.md.qxVZT16I.lean.js index 28670e45..960969b4 100644 --- a/assets/connectwise-manage-integration-setup.md.C3Jl0y3u.lean.js +++ b/assets/connectwise-manage-integration-setup.md.qxVZT16I.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a6 as n}from"./chunks/framework.01Cf-Wcw.js";const o="/assets/2021-03-23-14-26-14.BRGSzU09.png",i="/assets/2022-02-23_15-00-31.BRMrhO-R.png",s="/assets/2021-03-23-14-28-30.gtFlmE2Z.png",r="/assets/2021-03-23-14-43-35.D08wBTLi.png",m="/assets/2021-03-23-14-44-05.CuuaEq-d.png",w=JSON.parse('{"title":"ConnectWise Manage","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-manage-integration-setup.md","filePath":"connectwise-manage-integration-setup.md"}'),l={name:"connectwise-manage-integration-setup.md"},c=n("",26),p=[c];function g(u,h,d,y,_,f){return a(),t("div",null,p)}const P=e(l,[["render",g]]);export{w as __pageData,P as default}; +import{_ as e,c as t,o as a,a6 as n}from"./chunks/framework.B49Yz1nR.js";const o="/assets/2021-03-23-14-26-14.BRGSzU09.png",i="/assets/2022-02-23_15-00-31.BRMrhO-R.png",s="/assets/2021-03-23-14-28-30.gtFlmE2Z.png",r="/assets/2021-03-23-14-43-35.D08wBTLi.png",m="/assets/2021-03-23-14-44-05.CuuaEq-d.png",w=JSON.parse('{"title":"ConnectWise Manage","description":"","frontmatter":{},"headers":[],"relativePath":"connectwise-manage-integration-setup.md","filePath":"connectwise-manage-integration-setup.md"}'),l={name:"connectwise-manage-integration-setup.md"},c=n("",26),p=[c];function g(u,h,d,y,_,f){return a(),t("div",null,p)}const P=e(l,[["render",g]]);export{w as __pageData,P as default}; diff --git a/assets/getting-started.md.sOwUjwTd.js b/assets/getting-started.md.R7bijnbI.js similarity index 98% rename from assets/getting-started.md.sOwUjwTd.js rename to assets/getting-started.md.R7bijnbI.js index 0c42f77d..cf7e66f0 100644 --- a/assets/getting-started.md.sOwUjwTd.js +++ b/assets/getting-started.md.R7bijnbI.js @@ -1 +1 @@ -import{_ as r,D as d,c as h,b as o,w as t,a7 as s,j as e,a,a6 as u,o as i,I as n}from"./chunks/framework.01Cf-Wcw.js";const B=JSON.parse('{"title":"Getting Started / Thinking with Immy","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md"}'),p={name:"getting-started.md"},c=e("h1",{id:"getting-started-thinking-with-immy",tabindex:"-1"},[a("Getting Started / Thinking with Immy "),e("a",{class:"header-anchor",href:"#getting-started-thinking-with-immy","aria-label":'Permalink to "Getting Started / Thinking with Immy"'},"​")],-1),m=e("p",null,[e("strong",null,"The goal of ImmyBot is to setup a computer knowing only the customer and the end user.")],-1),f=e("p",null,'Thinking with Immy means thinking in terms of how things "Should" be.',-1),g=e("p",null,'You teach Immy how things "should" be by creating Deployments.',-1),b=e("p",null,'How things "Should" be is often dependent on external factors. For example',-1),y=e("ul",null,[e("li",null,"Customer A should have SentinelOne because they pay for it"),e("li",null,"Person A should have Visio 365 because he has a license for it")],-1),_=e("p",null,"Luckily, deployments can be conditionally applied based on the result of scripts that reach out to external sources",-1),A=u('

This is out of the box functionality in ImmyBot. I'm just showing you how it works to illustrate the power of the rules engine.

Overview

ImmyBot deploys 2 things:

  1. Software
  2. Tasks

Tasks are for anything that isn’t software, think Bitlocker, Power Options, etc.

  • You can use Tasks to configure software by selecting a "Configuration Task" for the software
  • Configuration Tasks are useful for configuring the application (even if the application wasn't installed by ImmyBot)
  • Configuration Tasks run after Immy determines the software is installed
  • Configuration Task parameters are available in all scripts related to the software

ImmyBot tests everything it does before and after it does it.

  • Software
    • Version Detection - Runs before install to determine if installation is necessary, and after to verify the desired version is installed
      • DisplayName
        • Contains
        • Regex
        • Traditional (Wildcard *)
      • UpgradeCode (For MSI based installs)
      • Script
        • Must return a version or null
    • Test Script - If software is installed, the failure of this test (the test script returning $false) will trigger a "Repair" action (default Uninstall/Install) of the application
      • Example: Check to verify Foxit PDF Editor is the Preview handler extension is working in Windows Explorer, reinstalling the PDF Editor usually corrects this scenario
  • Tasks
    • Test script (When using separate scripts)
    • Combined script returns $false when $method is 'test'

Example: Adobe Reader

We find that most MSPs install Adobe Reader by default so ImmyBot includes a Recommended Deployment that states

  • "the latest version of Adobe Reader should be installed for all Workstations and Portable Devices"

When this rule applies (i.e. it isn't disabled or overridden by a more specific rule) ImmyBot will do the following:

  1. Find the latest available version of Adobe Reader by running the Adobe Reader "dynamic version" script that uses a public API to return the latest full version number of Adobe Reader, as well as the URL to download it, the latest patch version of Adobe Reader, and the URL to download it.
  2. Determine the installed version (if any) by looking for Adobe Reader in Add/Remove Programs on the machine
  3. Queue an Install or Upgrade task (depending on the previous step)
  4. Set Adobe Reader to be the default PDF handler by running the "configuration task" that verifies that Reader is the default handler for .PDF files for each user on the machine.
',13);function w(k,v,S,D,I,T){const l=d("Mermaid");return i(),h("div",null,[c,m,f,g,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-12",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Deployment%22%0A%20%20%20%20Input%5B%22Software%20or%20Task%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState%5B%22Desired%20State%22%5D%20--%3E%7Con%7C%20Group%5B%22One%20or%20More%20Computers%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-13",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Adobe%20Reader%22%0A%20%20%20%20Input1%5B%22Adobe%20Reader%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState1%5B%22Installed%22%5D%20--%3E%7Con%7C%20Group1%5B%22All%20Workstations%20and%20Portable%20Devices%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),b,y,_,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-32",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Deployment%20Apply%3F%22%0A%20%20%20%20Input%20--%3E%20Metascript%0A%20%20%20%20Metascript%20--%3E%20True%0A%20%20%20%20Metascript%20--%3E%20False%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-33",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Visio%20Install%3F%22%0A%20%20%20%20EndUser%5B%22Input%3A%20End%20User%22%5D%20--%3E%20Script%5B%22Graph%20API%20Script%3A%20Does%20End%20User%20have%20Visio%20License%3F%22%5D%0A%20%20%20%20Script%20--%3E%20True1%5BTrue%5D%0A%20%20%20%20Script%20--%3E%20False1%5BFalse%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),A])}const C=r(p,[["render",w]]);export{B as __pageData,C as default}; +import{_ as r,D as d,c as h,b as o,w as t,a7 as s,j as e,a,a6 as u,o as i,I as n}from"./chunks/framework.B49Yz1nR.js";const B=JSON.parse('{"title":"Getting Started / Thinking with Immy","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md"}'),p={name:"getting-started.md"},c=e("h1",{id:"getting-started-thinking-with-immy",tabindex:"-1"},[a("Getting Started / Thinking with Immy "),e("a",{class:"header-anchor",href:"#getting-started-thinking-with-immy","aria-label":'Permalink to "Getting Started / Thinking with Immy"'},"​")],-1),m=e("p",null,[e("strong",null,"The goal of ImmyBot is to setup a computer knowing only the customer and the end user.")],-1),f=e("p",null,'Thinking with Immy means thinking in terms of how things "Should" be.',-1),g=e("p",null,'You teach Immy how things "should" be by creating Deployments.',-1),b=e("p",null,'How things "Should" be is often dependent on external factors. For example',-1),y=e("ul",null,[e("li",null,"Customer A should have SentinelOne because they pay for it"),e("li",null,"Person A should have Visio 365 because he has a license for it")],-1),_=e("p",null,"Luckily, deployments can be conditionally applied based on the result of scripts that reach out to external sources",-1),A=u('

This is out of the box functionality in ImmyBot. I'm just showing you how it works to illustrate the power of the rules engine.

Overview

ImmyBot deploys 2 things:

  1. Software
  2. Tasks

Tasks are for anything that isn’t software, think Bitlocker, Power Options, etc.

  • You can use Tasks to configure software by selecting a "Configuration Task" for the software
  • Configuration Tasks are useful for configuring the application (even if the application wasn't installed by ImmyBot)
  • Configuration Tasks run after Immy determines the software is installed
  • Configuration Task parameters are available in all scripts related to the software

ImmyBot tests everything it does before and after it does it.

  • Software
    • Version Detection - Runs before install to determine if installation is necessary, and after to verify the desired version is installed
      • DisplayName
        • Contains
        • Regex
        • Traditional (Wildcard *)
      • UpgradeCode (For MSI based installs)
      • Script
        • Must return a version or null
    • Test Script - If software is installed, the failure of this test (the test script returning $false) will trigger a "Repair" action (default Uninstall/Install) of the application
      • Example: Check to verify Foxit PDF Editor is the Preview handler extension is working in Windows Explorer, reinstalling the PDF Editor usually corrects this scenario
  • Tasks
    • Test script (When using separate scripts)
    • Combined script returns $false when $method is 'test'

Example: Adobe Reader

We find that most MSPs install Adobe Reader by default so ImmyBot includes a Recommended Deployment that states

  • "the latest version of Adobe Reader should be installed for all Workstations and Portable Devices"

When this rule applies (i.e. it isn't disabled or overridden by a more specific rule) ImmyBot will do the following:

  1. Find the latest available version of Adobe Reader by running the Adobe Reader "dynamic version" script that uses a public API to return the latest full version number of Adobe Reader, as well as the URL to download it, the latest patch version of Adobe Reader, and the URL to download it.
  2. Determine the installed version (if any) by looking for Adobe Reader in Add/Remove Programs on the machine
  3. Queue an Install or Upgrade task (depending on the previous step)
  4. Set Adobe Reader to be the default PDF handler by running the "configuration task" that verifies that Reader is the default handler for .PDF files for each user on the machine.
',13);function w(k,v,S,D,I,T){const l=d("Mermaid");return i(),h("div",null,[c,m,f,g,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-12",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Deployment%22%0A%20%20%20%20Input%5B%22Software%20or%20Task%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState%5B%22Desired%20State%22%5D%20--%3E%7Con%7C%20Group%5B%22One%20or%20More%20Computers%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-13",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Adobe%20Reader%22%0A%20%20%20%20Input1%5B%22Adobe%20Reader%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState1%5B%22Installed%22%5D%20--%3E%7Con%7C%20Group1%5B%22All%20Workstations%20and%20Portable%20Devices%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),b,y,_,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-32",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Deployment%20Apply%3F%22%0A%20%20%20%20Input%20--%3E%20Metascript%0A%20%20%20%20Metascript%20--%3E%20True%0A%20%20%20%20Metascript%20--%3E%20False%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-33",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Visio%20Install%3F%22%0A%20%20%20%20EndUser%5B%22Input%3A%20End%20User%22%5D%20--%3E%20Script%5B%22Graph%20API%20Script%3A%20Does%20End%20User%20have%20Visio%20License%3F%22%5D%0A%20%20%20%20Script%20--%3E%20True1%5BTrue%5D%0A%20%20%20%20Script%20--%3E%20False1%5BFalse%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),A])}const C=r(p,[["render",w]]);export{B as __pageData,C as default}; diff --git a/assets/getting-started.md.sOwUjwTd.lean.js b/assets/getting-started.md.R7bijnbI.lean.js similarity index 97% rename from assets/getting-started.md.sOwUjwTd.lean.js rename to assets/getting-started.md.R7bijnbI.lean.js index 62292fdd..4f80fa87 100644 --- a/assets/getting-started.md.sOwUjwTd.lean.js +++ b/assets/getting-started.md.R7bijnbI.lean.js @@ -1 +1 @@ -import{_ as r,D as d,c as h,b as o,w as t,a7 as s,j as e,a,a6 as u,o as i,I as n}from"./chunks/framework.01Cf-Wcw.js";const B=JSON.parse('{"title":"Getting Started / Thinking with Immy","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md"}'),p={name:"getting-started.md"},c=e("h1",{id:"getting-started-thinking-with-immy",tabindex:"-1"},[a("Getting Started / Thinking with Immy "),e("a",{class:"header-anchor",href:"#getting-started-thinking-with-immy","aria-label":'Permalink to "Getting Started / Thinking with Immy"'},"​")],-1),m=e("p",null,[e("strong",null,"The goal of ImmyBot is to setup a computer knowing only the customer and the end user.")],-1),f=e("p",null,'Thinking with Immy means thinking in terms of how things "Should" be.',-1),g=e("p",null,'You teach Immy how things "should" be by creating Deployments.',-1),b=e("p",null,'How things "Should" be is often dependent on external factors. For example',-1),y=e("ul",null,[e("li",null,"Customer A should have SentinelOne because they pay for it"),e("li",null,"Person A should have Visio 365 because he has a license for it")],-1),_=e("p",null,"Luckily, deployments can be conditionally applied based on the result of scripts that reach out to external sources",-1),A=u("",13);function w(k,v,S,D,I,T){const l=d("Mermaid");return i(),h("div",null,[c,m,f,g,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-12",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Deployment%22%0A%20%20%20%20Input%5B%22Software%20or%20Task%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState%5B%22Desired%20State%22%5D%20--%3E%7Con%7C%20Group%5B%22One%20or%20More%20Computers%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-13",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Adobe%20Reader%22%0A%20%20%20%20Input1%5B%22Adobe%20Reader%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState1%5B%22Installed%22%5D%20--%3E%7Con%7C%20Group1%5B%22All%20Workstations%20and%20Portable%20Devices%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),b,y,_,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-32",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Deployment%20Apply%3F%22%0A%20%20%20%20Input%20--%3E%20Metascript%0A%20%20%20%20Metascript%20--%3E%20True%0A%20%20%20%20Metascript%20--%3E%20False%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-33",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Visio%20Install%3F%22%0A%20%20%20%20EndUser%5B%22Input%3A%20End%20User%22%5D%20--%3E%20Script%5B%22Graph%20API%20Script%3A%20Does%20End%20User%20have%20Visio%20License%3F%22%5D%0A%20%20%20%20Script%20--%3E%20True1%5BTrue%5D%0A%20%20%20%20Script%20--%3E%20False1%5BFalse%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),A])}const C=r(p,[["render",w]]);export{B as __pageData,C as default}; +import{_ as r,D as d,c as h,b as o,w as t,a7 as s,j as e,a,a6 as u,o as i,I as n}from"./chunks/framework.B49Yz1nR.js";const B=JSON.parse('{"title":"Getting Started / Thinking with Immy","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md"}'),p={name:"getting-started.md"},c=e("h1",{id:"getting-started-thinking-with-immy",tabindex:"-1"},[a("Getting Started / Thinking with Immy "),e("a",{class:"header-anchor",href:"#getting-started-thinking-with-immy","aria-label":'Permalink to "Getting Started / Thinking with Immy"'},"​")],-1),m=e("p",null,[e("strong",null,"The goal of ImmyBot is to setup a computer knowing only the customer and the end user.")],-1),f=e("p",null,'Thinking with Immy means thinking in terms of how things "Should" be.',-1),g=e("p",null,'You teach Immy how things "should" be by creating Deployments.',-1),b=e("p",null,'How things "Should" be is often dependent on external factors. For example',-1),y=e("ul",null,[e("li",null,"Customer A should have SentinelOne because they pay for it"),e("li",null,"Person A should have Visio 365 because he has a license for it")],-1),_=e("p",null,"Luckily, deployments can be conditionally applied based on the result of scripts that reach out to external sources",-1),A=u("",13);function w(k,v,S,D,I,T){const l=d("Mermaid");return i(),h("div",null,[c,m,f,g,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-12",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Deployment%22%0A%20%20%20%20Input%5B%22Software%20or%20Task%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState%5B%22Desired%20State%22%5D%20--%3E%7Con%7C%20Group%5B%22One%20or%20More%20Computers%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-13",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Adobe%20Reader%22%0A%20%20%20%20Input1%5B%22Adobe%20Reader%22%5D%20--%3E%7C%22Should%20Be%22%7C%20DesiredState1%5B%22Installed%22%5D%20--%3E%7Con%7C%20Group1%5B%22All%20Workstations%20and%20Portable%20Devices%22%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),b,y,_,(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-32",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Deployment%20Apply%3F%22%0A%20%20%20%20Input%20--%3E%20Metascript%0A%20%20%20%20Metascript%20--%3E%20True%0A%20%20%20%20Metascript%20--%3E%20False%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),(i(),o(s,null,{default:t(()=>[n(l,{id:"mermaid-33",class:"mermaid",graph:"graph%20LR%0Asubgraph%20%22Should%20Visio%20Install%3F%22%0A%20%20%20%20EndUser%5B%22Input%3A%20End%20User%22%5D%20--%3E%20Script%5B%22Graph%20API%20Script%3A%20Does%20End%20User%20have%20Visio%20License%3F%22%5D%0A%20%20%20%20Script%20--%3E%20True1%5BTrue%5D%0A%20%20%20%20Script%20--%3E%20False1%5BFalse%5D%0Aend%0A"})]),fallback:t(()=>[a(" Loading... ")]),_:1})),A])}const C=r(p,[["render",w]]);export{B as __pageData,C as default}; diff --git a/assets/halo-integration-setup.md.DmoZJrZZ.js b/assets/halo-integration-setup.md.Bn8P35Lb.js similarity index 96% rename from assets/halo-integration-setup.md.DmoZJrZZ.js rename to assets/halo-integration-setup.md.Bn8P35Lb.js index 856bcfd7..12cec594 100644 --- a/assets/halo-integration-setup.md.DmoZJrZZ.js +++ b/assets/halo-integration-setup.md.Bn8P35Lb.js @@ -1 +1 @@ -import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"HaloPSA","description":"","frontmatter":{},"headers":[],"relativePath":"halo-integration-setup.md","filePath":"halo-integration-setup.md"}'),n={name:"halo-integration-setup.md"},o=a('

HaloPSA

Setting up this integration allows you to

  1. Deploy Software to machines covered by a certain contract type
  • Example: Deploy Huntress to all customers with a Managed Security Contract
  1. (Preferred) Deploy Software to machines covered by an Contract with a specific recurring invoice item
  • Example: Deploy SentinelOne to all computers that have SentinelOne on a recurring invoice as a recurring invoice item on their contract

Create an ImmyBot Application under /config/integrations/api/applications

  • Under the details section, select the Client ID and Secret Authentication Method
  • Generate and copy the Client ID and Client Secret
  • The Login Type should be "Agent", and you should select an "Agent to log in as"

Permissions:

  • read:customers -> Yes
  • read:contracts -> Yes
  • read:items -> Yes
  • edit:items -> Yes (*should not be needed > 2.99, API bug will not allow listing items without edit rights)
  • read:invoices -> Yes
  • read:software -> Yes
  • read:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)
  • edit:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)

Plug in the Client ID and Client Secret in ImmyBot

Create a HaloPSA Integration Link and fill in the Integration Settings

image

Embedded Ticket Tab

HaloPSA version 2.125.5, introduced a new feature called Custom Tabs. You can configure these Custom Tabs to point to a web address, similar to an iframe.

Within HaloPSA, configure the tab as follows:

image

This tab will then show on all tickets in the system, like this:

image

',19),l=[o];function s(r,c,d,u,p,h){return i(),t("div",null,l)}const b=e(n,[["render",s]]);export{g as __pageData,b as default}; +import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"HaloPSA","description":"","frontmatter":{},"headers":[],"relativePath":"halo-integration-setup.md","filePath":"halo-integration-setup.md"}'),n={name:"halo-integration-setup.md"},o=a('

HaloPSA

Setting up this integration allows you to

  1. Deploy Software to machines covered by a certain contract type
  • Example: Deploy Huntress to all customers with a Managed Security Contract
  1. (Preferred) Deploy Software to machines covered by an Contract with a specific recurring invoice item
  • Example: Deploy SentinelOne to all computers that have SentinelOne on a recurring invoice as a recurring invoice item on their contract

Create an ImmyBot Application under /config/integrations/api/applications

  • Under the details section, select the Client ID and Secret Authentication Method
  • Generate and copy the Client ID and Client Secret
  • The Login Type should be "Agent", and you should select an "Agent to log in as"

Permissions:

  • read:customers -> Yes
  • read:contracts -> Yes
  • read:items -> Yes
  • edit:items -> Yes (*should not be needed > 2.99, API bug will not allow listing items without edit rights)
  • read:invoices -> Yes
  • read:software -> Yes
  • read:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)
  • edit:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)

Plug in the Client ID and Client Secret in ImmyBot

Create a HaloPSA Integration Link and fill in the Integration Settings

image

Embedded Ticket Tab

HaloPSA version 2.125.5, introduced a new feature called Custom Tabs. You can configure these Custom Tabs to point to a web address, similar to an iframe.

Within HaloPSA, configure the tab as follows:

image

This tab will then show on all tickets in the system, like this:

image

',19),l=[o];function s(r,c,d,u,p,h){return i(),t("div",null,l)}const b=e(n,[["render",s]]);export{g as __pageData,b as default}; diff --git a/assets/halo-integration-setup.md.DmoZJrZZ.lean.js b/assets/halo-integration-setup.md.Bn8P35Lb.lean.js similarity index 69% rename from assets/halo-integration-setup.md.DmoZJrZZ.lean.js rename to assets/halo-integration-setup.md.Bn8P35Lb.lean.js index 88ee7659..82d3afc2 100644 --- a/assets/halo-integration-setup.md.DmoZJrZZ.lean.js +++ b/assets/halo-integration-setup.md.Bn8P35Lb.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"HaloPSA","description":"","frontmatter":{},"headers":[],"relativePath":"halo-integration-setup.md","filePath":"halo-integration-setup.md"}'),n={name:"halo-integration-setup.md"},o=a("",19),l=[o];function s(r,c,d,u,p,h){return i(),t("div",null,l)}const b=e(n,[["render",s]]);export{g as __pageData,b as default}; +import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"HaloPSA","description":"","frontmatter":{},"headers":[],"relativePath":"halo-integration-setup.md","filePath":"halo-integration-setup.md"}'),n={name:"halo-integration-setup.md"},o=a("",19),l=[o];function s(r,c,d,u,p,h){return i(),t("div",null,l)}const b=e(n,[["render",s]]);export{g as __pageData,b as default}; diff --git a/assets/immy-commands.md.Bt-gtKAH.js b/assets/immy-commands.md.v4hM1wNE.js similarity index 99% rename from assets/immy-commands.md.Bt-gtKAH.js rename to assets/immy-commands.md.v4hM1wNE.js index 5e795d06..d5a6f1f4 100644 --- a/assets/immy-commands.md.Bt-gtKAH.js +++ b/assets/immy-commands.md.v4hM1wNE.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.01Cf-Wcw.js";const y=JSON.parse('{"title":"Metascripts / Cloud Scripts","description":"","frontmatter":{},"headers":[],"relativePath":"immy-commands.md","filePath":"immy-commands.md"}'),n={name:"immy-commands.md"},e=t(`

Metascripts / Cloud Scripts

A Metascript is a script that runs scripts. These scripts run in the backend of ImmyBot.

A Metascript can run a script on a computer using Invoke-ImmyCommand.

Example

powershell
$ServerPSVersionTable = $PSVersionTable
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.B49Yz1nR.js";const y=JSON.parse('{"title":"Metascripts / Cloud Scripts","description":"","frontmatter":{},"headers":[],"relativePath":"immy-commands.md","filePath":"immy-commands.md"}'),n={name:"immy-commands.md"},e=t(`

Metascripts / Cloud Scripts

A Metascript is a script that runs scripts. These scripts run in the backend of ImmyBot.

A Metascript can run a script on a computer using Invoke-ImmyCommand.

Example

powershell
$ServerPSVersionTable = $PSVersionTable
 $ComputerPSVersionTable = Invoke-ImmyCommand {
     $ServerPSVersionTable = $using:ServerPSVersionTable
     Write-Host "Running from $env:ComputerName but ImmyBot backend is running PowerShell $($ServerPSVersionTable.PSVersion)" -ForegroundColor Green
diff --git a/assets/immy-commands.md.Bt-gtKAH.lean.js b/assets/immy-commands.md.v4hM1wNE.lean.js
similarity index 68%
rename from assets/immy-commands.md.Bt-gtKAH.lean.js
rename to assets/immy-commands.md.v4hM1wNE.lean.js
index 779c6c81..05e01deb 100644
--- a/assets/immy-commands.md.Bt-gtKAH.lean.js
+++ b/assets/immy-commands.md.v4hM1wNE.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.01Cf-Wcw.js";const y=JSON.parse('{"title":"Metascripts / Cloud Scripts","description":"","frontmatter":{},"headers":[],"relativePath":"immy-commands.md","filePath":"immy-commands.md"}'),n={name:"immy-commands.md"},e=t("",93),h=[e];function l(p,k,r,d,E,o){return a(),i("div",null,h)}const c=s(n,[["render",l]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a6 as t}from"./chunks/framework.B49Yz1nR.js";const y=JSON.parse('{"title":"Metascripts / Cloud Scripts","description":"","frontmatter":{},"headers":[],"relativePath":"immy-commands.md","filePath":"immy-commands.md"}'),n={name:"immy-commands.md"},e=t("",93),h=[e];function l(p,k,r,d,E,o){return a(),i("div",null,h)}const c=s(n,[["render",l]]);export{y as __pageData,c as default};
diff --git a/assets/index.md.Bjqt4eZW.js b/assets/index.md.DZBl2ip8.js
similarity index 95%
rename from assets/index.md.Bjqt4eZW.js
rename to assets/index.md.DZBl2ip8.js
index ec2e27a1..49235118 100644
--- a/assets/index.md.Bjqt4eZW.js
+++ b/assets/index.md.DZBl2ip8.js
@@ -1 +1 @@
-import{_ as t,c as e,o as i}from"./chunks/framework.01Cf-Wcw.js";const u=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"immy.bot","text":"","tagline":"Documentation","image":{"src":"/logo-256x256.png","alt":"ImmyBot"},"actions":[{"theme":"brand","text":"Getting Started","link":"/getting-started"},{"theme":"alt","text":"What's New","link":"/releases"}]},"features":[{"title":"FAQ","details":"Frequently Asked questions","link":"/FAQ"},{"title":"Add Users","details":"How to add users","link":"/add-users"},{"title":"Computer Onboarding","details":"Setup a New Computer using ImmyBot","link":"/onboarding"},{"title":"Integrations","details":"Integrations that ImmyBot supports","link":"/build-your-own-integration"},{"title":"User Roles and Security","details":"Restrict access to ImmyBot features","link":"/user-roles"},{"title":"Scripting","details":"Understand the Metascript engine","link":"/scripts"},{"title":"Terminology","details":"ImmyBot Jargon","link":"/terminology"},{"title":"Troubleshooting","details":"What do?","link":"/troubleshooting"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}`),n={name:"index.md"};function o(s,a,r,l,d,m){return i(),e("div")}const g=t(n,[["render",o]]);export{u as __pageData,g as default};
+import{_ as t,c as e,o as i}from"./chunks/framework.B49Yz1nR.js";const u=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"immy.bot","text":"","tagline":"Documentation","image":{"src":"/logo-256x256.png","alt":"ImmyBot"},"actions":[{"theme":"brand","text":"Getting Started","link":"/getting-started"},{"theme":"alt","text":"What's New","link":"/releases"}]},"features":[{"title":"FAQ","details":"Frequently Asked questions","link":"/FAQ"},{"title":"Add Users","details":"How to add users","link":"/add-users"},{"title":"Computer Onboarding","details":"Setup a New Computer using ImmyBot","link":"/onboarding"},{"title":"Integrations","details":"Integrations that ImmyBot supports","link":"/build-your-own-integration"},{"title":"User Roles and Security","details":"Restrict access to ImmyBot features","link":"/user-roles"},{"title":"Scripting","details":"Understand the Metascript engine","link":"/scripts"},{"title":"Terminology","details":"ImmyBot Jargon","link":"/terminology"},{"title":"Troubleshooting","details":"What do?","link":"/troubleshooting"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}`),n={name:"index.md"};function o(s,a,r,l,d,m){return i(),e("div")}const g=t(n,[["render",o]]);export{u as __pageData,g as default};
diff --git a/assets/index.md.Bjqt4eZW.lean.js b/assets/index.md.DZBl2ip8.lean.js
similarity index 95%
rename from assets/index.md.Bjqt4eZW.lean.js
rename to assets/index.md.DZBl2ip8.lean.js
index ec2e27a1..49235118 100644
--- a/assets/index.md.Bjqt4eZW.lean.js
+++ b/assets/index.md.DZBl2ip8.lean.js
@@ -1 +1 @@
-import{_ as t,c as e,o as i}from"./chunks/framework.01Cf-Wcw.js";const u=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"immy.bot","text":"","tagline":"Documentation","image":{"src":"/logo-256x256.png","alt":"ImmyBot"},"actions":[{"theme":"brand","text":"Getting Started","link":"/getting-started"},{"theme":"alt","text":"What's New","link":"/releases"}]},"features":[{"title":"FAQ","details":"Frequently Asked questions","link":"/FAQ"},{"title":"Add Users","details":"How to add users","link":"/add-users"},{"title":"Computer Onboarding","details":"Setup a New Computer using ImmyBot","link":"/onboarding"},{"title":"Integrations","details":"Integrations that ImmyBot supports","link":"/build-your-own-integration"},{"title":"User Roles and Security","details":"Restrict access to ImmyBot features","link":"/user-roles"},{"title":"Scripting","details":"Understand the Metascript engine","link":"/scripts"},{"title":"Terminology","details":"ImmyBot Jargon","link":"/terminology"},{"title":"Troubleshooting","details":"What do?","link":"/troubleshooting"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}`),n={name:"index.md"};function o(s,a,r,l,d,m){return i(),e("div")}const g=t(n,[["render",o]]);export{u as __pageData,g as default};
+import{_ as t,c as e,o as i}from"./chunks/framework.B49Yz1nR.js";const u=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"immy.bot","text":"","tagline":"Documentation","image":{"src":"/logo-256x256.png","alt":"ImmyBot"},"actions":[{"theme":"brand","text":"Getting Started","link":"/getting-started"},{"theme":"alt","text":"What's New","link":"/releases"}]},"features":[{"title":"FAQ","details":"Frequently Asked questions","link":"/FAQ"},{"title":"Add Users","details":"How to add users","link":"/add-users"},{"title":"Computer Onboarding","details":"Setup a New Computer using ImmyBot","link":"/onboarding"},{"title":"Integrations","details":"Integrations that ImmyBot supports","link":"/build-your-own-integration"},{"title":"User Roles and Security","details":"Restrict access to ImmyBot features","link":"/user-roles"},{"title":"Scripting","details":"Understand the Metascript engine","link":"/scripts"},{"title":"Terminology","details":"ImmyBot Jargon","link":"/terminology"},{"title":"Troubleshooting","details":"What do?","link":"/troubleshooting"}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}`),n={name:"index.md"};function o(s,a,r,l,d,m){return i(),e("div")}const g=t(n,[["render",o]]);export{u as __pageData,g as default};
diff --git a/assets/markdown-examples.md.DU2o7HkU.js b/assets/markdown-examples.md.-m8imKgy.js
similarity index 97%
rename from assets/markdown-examples.md.DU2o7HkU.js
rename to assets/markdown-examples.md.-m8imKgy.js
index 522f526e..ff88c29a 100644
--- a/assets/markdown-examples.md.DU2o7HkU.js
+++ b/assets/markdown-examples.md.-m8imKgy.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,a6 as i}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"},t=i(`

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

\`\`\`js{4}
+import{_ as s,c as a,o as n,a6 as i}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"},t=i(`

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

\`\`\`js{4}
 export default {
   data () {
     return {
diff --git a/assets/markdown-examples.md.DU2o7HkU.lean.js b/assets/markdown-examples.md.-m8imKgy.lean.js
similarity index 69%
rename from assets/markdown-examples.md.DU2o7HkU.lean.js
rename to assets/markdown-examples.md.-m8imKgy.lean.js
index ba151572..e785a1a6 100644
--- a/assets/markdown-examples.md.DU2o7HkU.lean.js
+++ b/assets/markdown-examples.md.-m8imKgy.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,a6 as i}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"},t=i("",19),p=[t];function l(h,o,r,d,k,c){return n(),a("div",null,p)}const m=s(e,[["render",l]]);export{g as __pageData,m as default};
+import{_ as s,c as a,o as n,a6 as i}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md"}'),e={name:"markdown-examples.md"},t=i("",19),p=[t];function l(h,o,r,d,k,c){return n(),a("div",null,p)}const m=s(e,[["render",l]]);export{g as __pageData,m as default};
diff --git a/assets/ncentral-integration-setup.md.DZCt8ZGB.js b/assets/ncentral-integration-setup.md.CSRJTbb9.js
similarity index 99%
rename from assets/ncentral-integration-setup.md.DZCt8ZGB.js
rename to assets/ncentral-integration-setup.md.CSRJTbb9.js
index 7d9cb75c..affd39c8 100644
--- a/assets/ncentral-integration-setup.md.DZCt8ZGB.js
+++ b/assets/ncentral-integration-setup.md.CSRJTbb9.js
@@ -1 +1 @@
-import{_ as e}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as t,a as o,b as a}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.01Cf-Wcw.js";const u="/assets/new_add_user_guide_1.DO-u8TLs.png",m="/assets/add_automation_policy_1.B_n4837M.png",p="/assets/add_automation_policy_2.Bch8ChRu.png",d="/assets/add_automation_policy_3.CShFrdiy.png",h="/assets/add_integration_guide_new_1.C_klLG9j.png",S=JSON.parse('{"title":"N-Central REST API Dynamic Integration","description":"","frontmatter":{},"headers":[],"relativePath":"ncentral-integration-setup.md","filePath":"ncentral-integration-setup.md"}'),y={name:"ncentral-integration-setup.md"},g=c('

INFO

This page is now dedicated to the new N-Central integration, utilizing the new N-Central REST API & ImmyBot Dynamic Integrations.

This new integration should provide improved stability over our classic (and soon to be deprecated) integration.

Looking for the classic N-Central integration guide? We recommend against it, but here is the classic setup guide.

N-Central REST API Dynamic Integration

Setting up this integration allows you to:

  1. Import customers from N-Central
  2. Import computers from N-Central
  3. Manage all computers in N-Central without deploying the ImmyBot Agent

Create ImmyBot Role in N-Central

ImmyBot currently requires the following role permissions to operate correctly:

Devices

  • Devices View
    • All Devices -> Read Only
  • Scheduled Tasks
    • Scheduled Tasks -> Manage

Create an "ImmyBot" role in your N-Central instance using above roles.

Create an API-Only ImmyBot user in N-Central

N-Able themselves have an offical short guide for doing this we recommend following for this part, but here is a recap:

  1. Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.
  2. Under "API Access", ensure "Api-Only User" is checked. 2FA MUST be disabled for the API User!
  3. Save the new ImmyBot user, and press the "Generate JSON Web Token" button. Copy this value somewhere for later.

Add the necessary 'RunScript' Automation Policy

After completing the new API-Only user setup, it's time time add an Automation Policy to N-Central so Immybot can run scripts on the machines.

First, navigate to the "Script/Software Repository" under "Schedules Tasks" beneath the "Configuration" tab in N-Central. Once at the Script Repository page, select "Add" -> "Automation Policy".

Second, download the ImmyBot RunScript Automation Policy and upload it to your instance. Fill out the Name and Description how you see fit if required.

Last step is to ensure this new automation policy we have uploaded is able to be invoked by the Immybot API User. Find the automation by searching for "Immybot", then flipping the Enable API switch. Accept the confirmation modal, then copy the Repository ID for later use.

Make sure you copy YOUR Repository ID, as this identifier for the automation policy will be unique across every N-Central instance!

Add integration for N-Central

After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new N-Central v2 integration. Input a name you'd like for the integration, followed by your N-Central server URL, and the JWT you copied in the steps to make an "ImmyBot" API user. Then, input the RepositoryId gathered from the step before. Lastly, flip the Enable Integration switch.

If the Health Check reports an error after enabling the integration, ensure you have completed the above steps correctly. If you continue to have issues, reachout to the community or support for assistance.

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

Troubleshooting

My customers are showing up but no computers

Login to N-Central as the ImmyBot User and accept the EULA

',35),_=[g];function b(f,I,q,C,A,w){return l(),s("div",null,_)}const B=n(y,[["render",b]]);export{S as __pageData,B as default}; +import{_ as e}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as t,a as o,b as a}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.B49Yz1nR.js";const u="/assets/new_add_user_guide_1.DO-u8TLs.png",m="/assets/add_automation_policy_1.B_n4837M.png",p="/assets/add_automation_policy_2.Bch8ChRu.png",d="/assets/add_automation_policy_3.CShFrdiy.png",h="/assets/add_integration_guide_new_1.C_klLG9j.png",S=JSON.parse('{"title":"N-Central REST API Dynamic Integration","description":"","frontmatter":{},"headers":[],"relativePath":"ncentral-integration-setup.md","filePath":"ncentral-integration-setup.md"}'),y={name:"ncentral-integration-setup.md"},g=c('

INFO

This page is now dedicated to the new N-Central integration, utilizing the new N-Central REST API & ImmyBot Dynamic Integrations.

This new integration should provide improved stability over our classic (and soon to be deprecated) integration.

Looking for the classic N-Central integration guide? We recommend against it, but here is the classic setup guide.

N-Central REST API Dynamic Integration

Setting up this integration allows you to:

  1. Import customers from N-Central
  2. Import computers from N-Central
  3. Manage all computers in N-Central without deploying the ImmyBot Agent

Create ImmyBot Role in N-Central

ImmyBot currently requires the following role permissions to operate correctly:

Devices

  • Devices View
    • All Devices -> Read Only
  • Scheduled Tasks
    • Scheduled Tasks -> Manage

Create an "ImmyBot" role in your N-Central instance using above roles.

Create an API-Only ImmyBot user in N-Central

N-Able themselves have an offical short guide for doing this we recommend following for this part, but here is a recap:

  1. Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.
  2. Under "API Access", ensure "Api-Only User" is checked. 2FA MUST be disabled for the API User!
  3. Save the new ImmyBot user, and press the "Generate JSON Web Token" button. Copy this value somewhere for later.

Add the necessary 'RunScript' Automation Policy

After completing the new API-Only user setup, it's time time add an Automation Policy to N-Central so Immybot can run scripts on the machines.

First, navigate to the "Script/Software Repository" under "Schedules Tasks" beneath the "Configuration" tab in N-Central. Once at the Script Repository page, select "Add" -> "Automation Policy".

Second, download the ImmyBot RunScript Automation Policy and upload it to your instance. Fill out the Name and Description how you see fit if required.

Last step is to ensure this new automation policy we have uploaded is able to be invoked by the Immybot API User. Find the automation by searching for "Immybot", then flipping the Enable API switch. Accept the confirmation modal, then copy the Repository ID for later use.

Make sure you copy YOUR Repository ID, as this identifier for the automation policy will be unique across every N-Central instance!

Add integration for N-Central

After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new N-Central v2 integration. Input a name you'd like for the integration, followed by your N-Central server URL, and the JWT you copied in the steps to make an "ImmyBot" API user. Then, input the RepositoryId gathered from the step before. Lastly, flip the Enable Integration switch.

If the Health Check reports an error after enabling the integration, ensure you have completed the above steps correctly. If you continue to have issues, reachout to the community or support for assistance.

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

Troubleshooting

My customers are showing up but no computers

Login to N-Central as the ImmyBot User and accept the EULA

',35),_=[g];function b(f,I,q,C,A,w){return l(),s("div",null,_)}const B=n(y,[["render",b]]);export{S as __pageData,B as default}; diff --git a/assets/ncentral-integration-setup.md.DZCt8ZGB.lean.js b/assets/ncentral-integration-setup.md.CSRJTbb9.lean.js similarity index 92% rename from assets/ncentral-integration-setup.md.DZCt8ZGB.lean.js rename to assets/ncentral-integration-setup.md.CSRJTbb9.lean.js index fc4ad61b..4ea98230 100644 --- a/assets/ncentral-integration-setup.md.DZCt8ZGB.lean.js +++ b/assets/ncentral-integration-setup.md.CSRJTbb9.lean.js @@ -1 +1 @@ -import{_ as e}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as t,a as o,b as a}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.01Cf-Wcw.js";const u="/assets/new_add_user_guide_1.DO-u8TLs.png",m="/assets/add_automation_policy_1.B_n4837M.png",p="/assets/add_automation_policy_2.Bch8ChRu.png",d="/assets/add_automation_policy_3.CShFrdiy.png",h="/assets/add_integration_guide_new_1.C_klLG9j.png",S=JSON.parse('{"title":"N-Central REST API Dynamic Integration","description":"","frontmatter":{},"headers":[],"relativePath":"ncentral-integration-setup.md","filePath":"ncentral-integration-setup.md"}'),y={name:"ncentral-integration-setup.md"},g=c("",35),_=[g];function b(f,I,q,C,A,w){return l(),s("div",null,_)}const B=n(y,[["render",b]]);export{S as __pageData,B as default}; +import{_ as e}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as t,a as o,b as a}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.B49Yz1nR.js";const u="/assets/new_add_user_guide_1.DO-u8TLs.png",m="/assets/add_automation_policy_1.B_n4837M.png",p="/assets/add_automation_policy_2.Bch8ChRu.png",d="/assets/add_automation_policy_3.CShFrdiy.png",h="/assets/add_integration_guide_new_1.C_klLG9j.png",S=JSON.parse('{"title":"N-Central REST API Dynamic Integration","description":"","frontmatter":{},"headers":[],"relativePath":"ncentral-integration-setup.md","filePath":"ncentral-integration-setup.md"}'),y={name:"ncentral-integration-setup.md"},g=c("",35),_=[g];function b(f,I,q,C,A,w){return l(),s("div",null,_)}const B=n(y,[["render",b]]);export{S as __pageData,B as default}; diff --git a/assets/ninjarmm-integration-setup.md.DQh0drIy.js b/assets/ninjarmm-integration-setup.md.DQh0drIy.js new file mode 100644 index 00000000..cc425a7f --- /dev/null +++ b/assets/ninjarmm-integration-setup.md.DQh0drIy.js @@ -0,0 +1,10 @@ +import{_ as i,c as t,o as a,a6 as e}from"./chunks/framework.B49Yz1nR.js";const u=JSON.parse('{"title":"NinjaRMM Dynamic Integration","description":"","frontmatter":{},"headers":[],"relativePath":"ninjarmm-integration-setup.md","filePath":"ninjarmm-integration-setup.md"}'),n={name:"ninjarmm-integration-setup.md"},s=e(`

NinjaRMM Dynamic Integration

Setting up this integration allows you to:

  • Import customers from NinjaRMM
  • Import computers from NinjaRMM
  • Manage all computers in NinjaRMM without deploying the ImmyBot Agent
  • Create ImmyBot Role in NinjaRMM

Configure the following in general settings (Administration -> General -> Settings):

  • Ninja Agent uninstall prevention -> OFF
  • Advanced Installer Options -> ON

ImmyBot currently requires the following client app scopes to operate correctly:

  • Monitoring
  • Management
  • Control

As well as the following grant types:

  • Authorization Code
  • Refresh Token

Create a client app in your NinjaRMM instance using above permissions:

(Administration -> Apps -> Api -> Add)

image

WARNING

Note: Change the "instance" in the redirect uri to your ImmyBot subdomain

Copy the below script to NinjaRMM Automation library and name it ImmyBot:

(Administration -> Library -> Automation -> Add -> New Script)

powershell
Param(
+    [Parameter(Mandatory=$true)]
+    [string]$code
+)
+
+$bytes = [System.Convert]::FromBase64String($code)
+$DecodedCommand = [System.Text.Encoding]::UTF8.GetString($bytes)
+
+# Execute Script Content
+iex $DecodedCommand

Make a note of the script Id in the URL https://{region}.ninjarmm.com/#/editor/script/71 -> 71. It will be needed as one of the parameters in the integration setup to run scripts.

In ImmyBot, create a new dynamic integration with the NinjaRMM integration type:

(Show More -> Integrations -> Add Integration -> NinjaRMM)

Add the required parameters and authenticate the OAuthInfo parameter with a NinjaRMM user with sufficient privileges: image

WARNING

Note: Currently the OAuthInfo parameter button will not stay when you refresh the browser window. This will not kill your integration, so just leave it as is.

At this point, you should be able to map clients. Once clients are mapped, agents will start getting identified.

`,22),o=[s];function r(l,p,h,c,g,m){return a(),t("div",null,o)}const y=i(n,[["render",r]]);export{u as __pageData,y as default}; diff --git a/assets/ninjarmm-integration-setup.md.DQh0drIy.lean.js b/assets/ninjarmm-integration-setup.md.DQh0drIy.lean.js new file mode 100644 index 00000000..26d2c02b --- /dev/null +++ b/assets/ninjarmm-integration-setup.md.DQh0drIy.lean.js @@ -0,0 +1 @@ +import{_ as i,c as t,o as a,a6 as e}from"./chunks/framework.B49Yz1nR.js";const u=JSON.parse('{"title":"NinjaRMM Dynamic Integration","description":"","frontmatter":{},"headers":[],"relativePath":"ninjarmm-integration-setup.md","filePath":"ninjarmm-integration-setup.md"}'),n={name:"ninjarmm-integration-setup.md"},s=e("",22),o=[s];function r(l,p,h,c,g,m){return a(),t("div",null,o)}const y=i(n,[["render",r]]);export{u as __pageData,y as default}; diff --git a/assets/old-ncentral-integration-setup.md.CNK2HfXm.js b/assets/old-ncentral-integration-setup.md.9C3B6NVP.js similarity index 98% rename from assets/old-ncentral-integration-setup.md.CNK2HfXm.js rename to assets/old-ncentral-integration-setup.md.9C3B6NVP.js index 55743d75..256a4640 100644 --- a/assets/old-ncentral-integration-setup.md.CNK2HfXm.js +++ b/assets/old-ncentral-integration-setup.md.9C3B6NVP.js @@ -1 +1 @@ -import{_ as t}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as e,a,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.01Cf-Wcw.js";const m="/assets/add_user_guide_1.CElShkl1.png",u="/assets/add_userrole_guide_2.CRzq88vE.png",p="/assets/login_mfa_guide_1.BgxAiTly.png",d="/assets/add_integration_guide_1.CBen2lzm.png",h="/assets/add_integration_guide_2.SCqZAHxU.png",M=JSON.parse('{"title":"N-Central Integration","description":"","frontmatter":{},"headers":[],"relativePath":"old-ncentral-integration-setup.md","filePath":"old-ncentral-integration-setup.md"}'),g={name:"old-ncentral-integration-setup.md"},_=c('

WARNING

This classic N-Central integration is soon to be deprecated and not recommended for further use. It is unlikely to receive further updates.

Please migrate to the New N-Central REST API Integration

N-Central Integration

Setting up this integration allows you to

  1. Import customers from N-Central
  2. Import computers from N-Central
  3. Manage all computers in N-Central without deploying the ImmyBot Agent

Create ImmyBot Role in N-Central

ImmyBot currently requires the following role permissions to operate correctly:

Devices

  • Devices View
    • All Devices -> Read Only
  • Direct Support
    • Command Prompt -> Manage
    • File System -> Manage
  • Remote Control
    • Custom -> Manage
    • Take Control -> Manage
  • Network Devices
    • Add/Import Devices -> Manage
    • Edit Device Settings -> Manage

Create an "ImmyBot" role in your N-Central instance using above roles.

Create ImmyBot user in N-Central

Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.

Login to the new ImmyBot user to get MFA code and accept EULA

Once you have created the new ImmyBot user account, you must attempt to login so that you may retrieve the MFA key, and complete any initial setup. After entering the accounts email and password, there will be a MFA QR code displayed. You MUST press the "CAN'T SCAN IT?" button to get the Base32-encoded MFA key. After saving the key, use a site such as this to get the current token from the key, or temporarily scan the QR code on a device to complete sign-in.

TIP

Make sure you accept the EULA when you login, otherwise the computers will not import!

Add integration for N-Central

After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new "N-Central" integration. Input all the N-Central user account data to the fields on the right.

Press the "Verify Credentials" button, then, if completed successfully, press the button again to save the integration.

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

Troubleshooting

My customers are showing up but no computers

Login to N-Central as the ImmyBot User and accept the EULA

',29),y=[_];function f(b,C,q,I,N,A){return l(),s("div",null,y)}const P=n(g,[["render",f]]);export{M as __pageData,P as default}; +import{_ as t}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as e,a,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.B49Yz1nR.js";const m="/assets/add_user_guide_1.CElShkl1.png",u="/assets/add_userrole_guide_2.CRzq88vE.png",p="/assets/login_mfa_guide_1.BgxAiTly.png",d="/assets/add_integration_guide_1.CBen2lzm.png",h="/assets/add_integration_guide_2.SCqZAHxU.png",M=JSON.parse('{"title":"N-Central Integration","description":"","frontmatter":{},"headers":[],"relativePath":"old-ncentral-integration-setup.md","filePath":"old-ncentral-integration-setup.md"}'),g={name:"old-ncentral-integration-setup.md"},_=c('

WARNING

This classic N-Central integration is soon to be deprecated and not recommended for further use. It is unlikely to receive further updates.

Please migrate to the New N-Central REST API Integration

N-Central Integration

Setting up this integration allows you to

  1. Import customers from N-Central
  2. Import computers from N-Central
  3. Manage all computers in N-Central without deploying the ImmyBot Agent

Create ImmyBot Role in N-Central

ImmyBot currently requires the following role permissions to operate correctly:

Devices

  • Devices View
    • All Devices -> Read Only
  • Direct Support
    • Command Prompt -> Manage
    • File System -> Manage
  • Remote Control
    • Custom -> Manage
    • Take Control -> Manage
  • Network Devices
    • Add/Import Devices -> Manage
    • Edit Device Settings -> Manage

Create an "ImmyBot" role in your N-Central instance using above roles.

Create ImmyBot user in N-Central

Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.

Login to the new ImmyBot user to get MFA code and accept EULA

Once you have created the new ImmyBot user account, you must attempt to login so that you may retrieve the MFA key, and complete any initial setup. After entering the accounts email and password, there will be a MFA QR code displayed. You MUST press the "CAN'T SCAN IT?" button to get the Base32-encoded MFA key. After saving the key, use a site such as this to get the current token from the key, or temporarily scan the QR code on a device to complete sign-in.

TIP

Make sure you accept the EULA when you login, otherwise the computers will not import!

Add integration for N-Central

After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new "N-Central" integration. Input all the N-Central user account data to the fields on the right.

Press the "Verify Credentials" button, then, if completed successfully, press the button again to save the integration.

Import your customers

Alternatively, you can create/map only certain customers.

When you map a customer from an RMM, the computers will undergo Identification

Troubleshooting

My customers are showing up but no computers

Login to N-Central as the ImmyBot User and accept the EULA

',29),y=[_];function f(b,C,q,I,N,A){return l(),s("div",null,y)}const P=n(g,[["render",f]]);export{M as __pageData,P as default}; diff --git a/assets/old-ncentral-integration-setup.md.CNK2HfXm.lean.js b/assets/old-ncentral-integration-setup.md.9C3B6NVP.lean.js similarity index 92% rename from assets/old-ncentral-integration-setup.md.CNK2HfXm.lean.js rename to assets/old-ncentral-integration-setup.md.9C3B6NVP.lean.js index 5706d3ac..60df5051 100644 --- a/assets/old-ncentral-integration-setup.md.CNK2HfXm.lean.js +++ b/assets/old-ncentral-integration-setup.md.9C3B6NVP.lean.js @@ -1 +1 @@ -import{_ as t}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as e,a,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.01Cf-Wcw.js";const m="/assets/add_user_guide_1.CElShkl1.png",u="/assets/add_userrole_guide_2.CRzq88vE.png",p="/assets/login_mfa_guide_1.BgxAiTly.png",d="/assets/add_integration_guide_1.CBen2lzm.png",h="/assets/add_integration_guide_2.SCqZAHxU.png",M=JSON.parse('{"title":"N-Central Integration","description":"","frontmatter":{},"headers":[],"relativePath":"old-ncentral-integration-setup.md","filePath":"old-ncentral-integration-setup.md"}'),g={name:"old-ncentral-integration-setup.md"},_=c("",29),y=[_];function f(b,C,q,I,N,A){return l(),s("div",null,y)}const P=n(g,[["render",f]]);export{M as __pageData,P as default}; +import{_ as t}from"./chunks/add_userrole_guide_1.DhZMaPzh.js";import{_ as e,a,b as o}from"./chunks/2021-03-23-19-08-30.VBYdH6Lk.js";import{_ as r,a as i}from"./chunks/2021-03-23-19-06-55.FPJppjlQ.js";import{_ as n,c as s,o as l,a6 as c}from"./chunks/framework.B49Yz1nR.js";const m="/assets/add_user_guide_1.CElShkl1.png",u="/assets/add_userrole_guide_2.CRzq88vE.png",p="/assets/login_mfa_guide_1.BgxAiTly.png",d="/assets/add_integration_guide_1.CBen2lzm.png",h="/assets/add_integration_guide_2.SCqZAHxU.png",M=JSON.parse('{"title":"N-Central Integration","description":"","frontmatter":{},"headers":[],"relativePath":"old-ncentral-integration-setup.md","filePath":"old-ncentral-integration-setup.md"}'),g={name:"old-ncentral-integration-setup.md"},_=c("",29),y=[_];function f(b,C,q,I,N,A){return l(),s("div",null,y)}const P=n(g,[["render",f]]);export{M as __pageData,P as default}; diff --git a/assets/onboarding.md.SL0U_Gws.js b/assets/onboarding.md.DvY8VkVM.js similarity index 97% rename from assets/onboarding.md.SL0U_Gws.js rename to assets/onboarding.md.DvY8VkVM.js index 1be98827..85165939 100644 --- a/assets/onboarding.md.SL0U_Gws.js +++ b/assets/onboarding.md.DvY8VkVM.js @@ -1 +1 @@ -import{_ as e,c as t,o,a6 as r}from"./chunks/framework.01Cf-Wcw.js";const h=JSON.parse('{"title":"Setup your first Computer","description":"","frontmatter":{},"headers":[],"relativePath":"onboarding.md","filePath":"onboarding.md"}'),i={name:"onboarding.md"},s=r('

Setup your first Computer

When you first login to ImmyBot the Getting Started Wizard will be prompt you to create your ImmyBot flash drive, and plug it into the new computer.

THIS IS A ONE TIME PROCESS, YOU DO NOT NEED TO CREATE A FLASH DRIVE FOR EACH CLIENT. YOU WILL CHANGE THE CLIENT AFTER THE MACHINE IS IN IMMYBOT

image

We recommend unboxing a physical computer (Dell, HP, or Lenovo) so we can demonstrate applying the latest manufacturer BIOS and driver updates.

If you insist on testing on a virtual machine, do the following to receive the PPKG inside an ISO, then mount it to the VM, and press the Windows Key 5 times when you are at the Region Selection screen. If you are past the region selection screen, simply double click the PPKG from the mounted disk

image

image

Once the computer is identified, you will be directed to that computer to begin the Onboarding process:

image

ImmyBot needs:

  1. Customer
  2. Primary User (That will be using the computer, optional but recommended)

image

You only have one customer and one person right now, and it’s your MSP and you. That’s fine, we’ll pretend we’re setting up a computer for you and your MSP.

TIP

Customers can be imported from your RMM or PSA, or by setting up the Azure integration

TIP

People are imported from your customers' Azure AD via the Azure integration

An "Onboarding" session will be created for this computer, and ImmyBot will apply the "Recommended Deployments"

TIP

You can add your own Deployments and re-run this session as many times as you like until everything is to your liking.

',18),n=[s];function a(p,c,u,m,l,d){return o(),t("div",null,n)}const b=e(i,[["render",a]]);export{h as __pageData,b as default}; +import{_ as e,c as t,o,a6 as r}from"./chunks/framework.B49Yz1nR.js";const h=JSON.parse('{"title":"Setup your first Computer","description":"","frontmatter":{},"headers":[],"relativePath":"onboarding.md","filePath":"onboarding.md"}'),i={name:"onboarding.md"},s=r('

Setup your first Computer

When you first login to ImmyBot the Getting Started Wizard will be prompt you to create your ImmyBot flash drive, and plug it into the new computer.

THIS IS A ONE TIME PROCESS, YOU DO NOT NEED TO CREATE A FLASH DRIVE FOR EACH CLIENT. YOU WILL CHANGE THE CLIENT AFTER THE MACHINE IS IN IMMYBOT

image

We recommend unboxing a physical computer (Dell, HP, or Lenovo) so we can demonstrate applying the latest manufacturer BIOS and driver updates.

If you insist on testing on a virtual machine, do the following to receive the PPKG inside an ISO, then mount it to the VM, and press the Windows Key 5 times when you are at the Region Selection screen. If you are past the region selection screen, simply double click the PPKG from the mounted disk

image

image

Once the computer is identified, you will be directed to that computer to begin the Onboarding process:

image

ImmyBot needs:

  1. Customer
  2. Primary User (That will be using the computer, optional but recommended)

image

You only have one customer and one person right now, and it’s your MSP and you. That’s fine, we’ll pretend we’re setting up a computer for you and your MSP.

TIP

Customers can be imported from your RMM or PSA, or by setting up the Azure integration

TIP

People are imported from your customers' Azure AD via the Azure integration

An "Onboarding" session will be created for this computer, and ImmyBot will apply the "Recommended Deployments"

TIP

You can add your own Deployments and re-run this session as many times as you like until everything is to your liking.

',18),n=[s];function a(p,c,u,m,l,d){return o(),t("div",null,n)}const b=e(i,[["render",a]]);export{h as __pageData,b as default}; diff --git a/assets/onboarding.md.SL0U_Gws.lean.js b/assets/onboarding.md.DvY8VkVM.lean.js similarity index 83% rename from assets/onboarding.md.SL0U_Gws.lean.js rename to assets/onboarding.md.DvY8VkVM.lean.js index 2231d716..824e7999 100644 --- a/assets/onboarding.md.SL0U_Gws.lean.js +++ b/assets/onboarding.md.DvY8VkVM.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o,a6 as r}from"./chunks/framework.01Cf-Wcw.js";const h=JSON.parse('{"title":"Setup your first Computer","description":"","frontmatter":{},"headers":[],"relativePath":"onboarding.md","filePath":"onboarding.md"}'),i={name:"onboarding.md"},s=r("",18),n=[s];function a(p,c,u,m,l,d){return o(),t("div",null,n)}const b=e(i,[["render",a]]);export{h as __pageData,b as default}; +import{_ as e,c as t,o,a6 as r}from"./chunks/framework.B49Yz1nR.js";const h=JSON.parse('{"title":"Setup your first Computer","description":"","frontmatter":{},"headers":[],"relativePath":"onboarding.md","filePath":"onboarding.md"}'),i={name:"onboarding.md"},s=r("",18),n=[s];function a(p,c,u,m,l,d){return o(),t("div",null,n)}const b=e(i,[["render",a]]);export{h as __pageData,b as default}; diff --git a/assets/recommended-deployments.md.P_r5cshh.js b/assets/recommended-deployments.md.CsGVHl4O.js similarity index 98% rename from assets/recommended-deployments.md.P_r5cshh.js rename to assets/recommended-deployments.md.CsGVHl4O.js index b6fa33a9..680a50ee 100644 --- a/assets/recommended-deployments.md.P_r5cshh.js +++ b/assets/recommended-deployments.md.CsGVHl4O.js @@ -1 +1 @@ -import{_ as e,c as t,o,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const f=JSON.parse('{"title":"Recommended Deployments","description":"","frontmatter":{},"headers":[],"relativePath":"recommended-deployments.md","filePath":"recommended-deployments.md"}'),r={name:"recommended-deployments.md"},s=a('

Recommended Deployments

Create Profile for Primary User

This allows Immy to set default browser and pdf editors.

Remember how Microsoft made default PDF handler and default browser user level settings? These settings are stored in the profile of the user. Specifically in the user’s registry. But this is a new computer, and there is no user registry because the user hasn’t logged into the computer, and therefore a profile doesn’t exist for us to specify those settings. Rather than requiring you to ask the user for their password, we fetch their SID from AzureAD. If we find that the user is synced from Active Directory, we will use the SID from Active Directory. If the user is cloud only, we use their Azure AD SID. For the more discerning you may be wondering how we deal with the UserChoice hash, the anti-tamper mechanism preventing the automatic setting of these preferences.

Microsoft 365 Apps

Immy installs the apps the selected user is licensed for. Immy contains recommended deployments for

  • Apps for business
  • Apps for enterprise
  • Project
  • Visio

You may be tempted to disable these because you are afraid Immy will install all of these apps on every computer. These deployments are limited using a “Metascript” filter that reaches out to the Microsoft Graph API to determine whether the selected user has a license for the product in question.

Dell/Lenovo/HP Updates

ImmyBot will install the latest updates from Dell, HP, and Lenovo, including driver updates and BIOS updates.

You may be tempted to disable these Deployments as you don’t want HP updates applying to your Dell. This won’t happen. Each deployment uses a Filter script to ensure that these updates only apply to the appropriate machines

Adobe Reader

You may be tempted to disable this deployment because not all of your customers use Adobe Reader. You should instead leave it enabled and handle exceptions to the rule. See more under “Deployment Resolution”

Set Computer Name and Domain Join

This is one that I’d advise you to turn off, and instead customize for each customer. We leave it as a recommended deployment mostly to raise awareness that ImmyBot has the capability, but fully expect you to override it to suit your needs.

',15),i=[s];function n(d,l,m,p,h,c){return o(),t("div",null,i)}const y=e(r,[["render",n]]);export{f as __pageData,y as default}; +import{_ as e,c as t,o,a6 as a}from"./chunks/framework.B49Yz1nR.js";const f=JSON.parse('{"title":"Recommended Deployments","description":"","frontmatter":{},"headers":[],"relativePath":"recommended-deployments.md","filePath":"recommended-deployments.md"}'),r={name:"recommended-deployments.md"},s=a('

Recommended Deployments

Create Profile for Primary User

This allows Immy to set default browser and pdf editors.

Remember how Microsoft made default PDF handler and default browser user level settings? These settings are stored in the profile of the user. Specifically in the user’s registry. But this is a new computer, and there is no user registry because the user hasn’t logged into the computer, and therefore a profile doesn’t exist for us to specify those settings. Rather than requiring you to ask the user for their password, we fetch their SID from AzureAD. If we find that the user is synced from Active Directory, we will use the SID from Active Directory. If the user is cloud only, we use their Azure AD SID. For the more discerning you may be wondering how we deal with the UserChoice hash, the anti-tamper mechanism preventing the automatic setting of these preferences.

Microsoft 365 Apps

Immy installs the apps the selected user is licensed for. Immy contains recommended deployments for

  • Apps for business
  • Apps for enterprise
  • Project
  • Visio

You may be tempted to disable these because you are afraid Immy will install all of these apps on every computer. These deployments are limited using a “Metascript” filter that reaches out to the Microsoft Graph API to determine whether the selected user has a license for the product in question.

Dell/Lenovo/HP Updates

ImmyBot will install the latest updates from Dell, HP, and Lenovo, including driver updates and BIOS updates.

You may be tempted to disable these Deployments as you don’t want HP updates applying to your Dell. This won’t happen. Each deployment uses a Filter script to ensure that these updates only apply to the appropriate machines

Adobe Reader

You may be tempted to disable this deployment because not all of your customers use Adobe Reader. You should instead leave it enabled and handle exceptions to the rule. See more under “Deployment Resolution”

Set Computer Name and Domain Join

This is one that I’d advise you to turn off, and instead customize for each customer. We leave it as a recommended deployment mostly to raise awareness that ImmyBot has the capability, but fully expect you to override it to suit your needs.

',15),i=[s];function n(d,l,m,p,h,c){return o(),t("div",null,i)}const y=e(r,[["render",n]]);export{f as __pageData,y as default}; diff --git a/assets/recommended-deployments.md.P_r5cshh.lean.js b/assets/recommended-deployments.md.CsGVHl4O.lean.js similarity index 85% rename from assets/recommended-deployments.md.P_r5cshh.lean.js rename to assets/recommended-deployments.md.CsGVHl4O.lean.js index cac473d4..b70ea64b 100644 --- a/assets/recommended-deployments.md.P_r5cshh.lean.js +++ b/assets/recommended-deployments.md.CsGVHl4O.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const f=JSON.parse('{"title":"Recommended Deployments","description":"","frontmatter":{},"headers":[],"relativePath":"recommended-deployments.md","filePath":"recommended-deployments.md"}'),r={name:"recommended-deployments.md"},s=a("",15),i=[s];function n(d,l,m,p,h,c){return o(),t("div",null,i)}const y=e(r,[["render",n]]);export{f as __pageData,y as default}; +import{_ as e,c as t,o,a6 as a}from"./chunks/framework.B49Yz1nR.js";const f=JSON.parse('{"title":"Recommended Deployments","description":"","frontmatter":{},"headers":[],"relativePath":"recommended-deployments.md","filePath":"recommended-deployments.md"}'),r={name:"recommended-deployments.md"},s=a("",15),i=[s];function n(d,l,m,p,h,c){return o(),t("div",null,i)}const y=e(r,[["render",n]]);export{f as __pageData,y as default}; diff --git a/assets/releases-2020.md.D0keqcJE.js b/assets/releases-2020.md.DPH-1fDz.js similarity index 99% rename from assets/releases-2020.md.D0keqcJE.js rename to assets/releases-2020.md.DPH-1fDz.js index 09bf196f..61305a42 100644 --- a/assets/releases-2020.md.D0keqcJE.js +++ b/assets/releases-2020.md.DPH-1fDz.js @@ -1,3 +1,3 @@ -import{_ as e,c as i,o as a,a6 as t}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Releases in 2020","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2020.md","filePath":"releases-2020.md"}'),s={name:"releases-2020.md"},n=t(`

Releases in 2020

0.38.2

Released 2020-12-29

New Features

Updated the export default name to be meaningful.

image

image

Added a Uri datatype for maintenance task parameters.

image

This parameter is available as a Uri type in power shell for users to us inside of scripts.

image

Improvements

  • When creating new software versions, we will default the new version's settings to the previous version's settings. This is generally more reliable that using the analysis results by default. If there is no previous version, then we will still use the analysis results as default.

  • Adds the result message to the action column in the deployment excel export to help indicate success/failure.

  • Using the new Uri datatype no additional parsing will be needed to convert a string to a Uri inside of the script.

  • Made the system update page show current version release notes

  • Added current release update notes; Switched to using cards for displaying releases

  • Display computer provider type button for each RMM Link instead of type and hid disabled links

  • Updates the Schedules List to show the same Target fields that the Deployment List shows.

    • image

Bug Fixes

  • Fixed issue with saving global maintenance task with non-file parameters
  • Fixed an issue when uploading an installer Immy would not try and match it to an existing software.
  • Fixed a bug on the upload software version page where clicking the next button was not loading the next screen.
  • Fixed a bug when saving cross tenant deployments where we did not clear the tenant field if the deployment was previously for a specific tenant.
  • Fixed issues with the session list page not showing correct results when the time filter was applied.
  • Fixed an issue where we could show non IP addresses for a computer's external IP field when the External IP Inventory script runs
  • Fixed an issue where BITS Download would not fallback to basic download if the command timed out.
  • Fixed issue with showing the updated by and update by by person on the Schedules List page.
  • Hid the Download ImmyAgent link when ImmyAgent RMMLink is disabled.
  • When detecting software version after install a newer version than expected will no longer cause a failure for that action.
    • This fixes the case in where some software auto update themselves right after installation.

0.38.1

Released 2020-12-23

Bug Fixes

  • Corrected issue preventing Maintenance Tasks from being saved

0.38.0

Released 2020-12-21

New Features

Maintenance Tasks Files

image

  • Specify a default file if the user doesn't specify one
  • Include utilities with maintenance tasks by marking the parameter as hidden

image

Log Highlighting

image

  • Highlights the important logs for a software or task so they are more easily recognized.

Safely create Uris for REST APIs

image

Example
powershell
Add-UriQueryParameter -Uri 'https://my.thingwithqueryparams.com/items' -Parameter @{'Filter'='subject like "hello"'}
Output
https://my.thingwithqueryparams.com:443/items?Filter=subject+like+%22hello%22

Accessing Azure KeyVault

powershell
$Headers = Get-ImmyAzureAuthHeader -Endpoint Keyvault
+import{_ as e,c as i,o as a,a6 as t}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Releases in 2020","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2020.md","filePath":"releases-2020.md"}'),s={name:"releases-2020.md"},n=t(`

Releases in 2020

0.38.2

Released 2020-12-29

New Features

Updated the export default name to be meaningful.

image

image

Added a Uri datatype for maintenance task parameters.

image

This parameter is available as a Uri type in power shell for users to us inside of scripts.

image

Improvements

  • When creating new software versions, we will default the new version's settings to the previous version's settings. This is generally more reliable that using the analysis results by default. If there is no previous version, then we will still use the analysis results as default.

  • Adds the result message to the action column in the deployment excel export to help indicate success/failure.

  • Using the new Uri datatype no additional parsing will be needed to convert a string to a Uri inside of the script.

  • Made the system update page show current version release notes

  • Added current release update notes; Switched to using cards for displaying releases

  • Display computer provider type button for each RMM Link instead of type and hid disabled links

  • Updates the Schedules List to show the same Target fields that the Deployment List shows.

    • image

Bug Fixes

  • Fixed issue with saving global maintenance task with non-file parameters
  • Fixed an issue when uploading an installer Immy would not try and match it to an existing software.
  • Fixed a bug on the upload software version page where clicking the next button was not loading the next screen.
  • Fixed a bug when saving cross tenant deployments where we did not clear the tenant field if the deployment was previously for a specific tenant.
  • Fixed issues with the session list page not showing correct results when the time filter was applied.
  • Fixed an issue where we could show non IP addresses for a computer's external IP field when the External IP Inventory script runs
  • Fixed an issue where BITS Download would not fallback to basic download if the command timed out.
  • Fixed issue with showing the updated by and update by by person on the Schedules List page.
  • Hid the Download ImmyAgent link when ImmyAgent RMMLink is disabled.
  • When detecting software version after install a newer version than expected will no longer cause a failure for that action.
    • This fixes the case in where some software auto update themselves right after installation.

0.38.1

Released 2020-12-23

Bug Fixes

  • Corrected issue preventing Maintenance Tasks from being saved

0.38.0

Released 2020-12-21

New Features

Maintenance Tasks Files

image

  • Specify a default file if the user doesn't specify one
  • Include utilities with maintenance tasks by marking the parameter as hidden

image

Log Highlighting

image

  • Highlights the important logs for a software or task so they are more easily recognized.

Safely create Uris for REST APIs

image

Example
powershell
Add-UriQueryParameter -Uri 'https://my.thingwithqueryparams.com/items' -Parameter @{'Filter'='subject like "hello"'}
Output
https://my.thingwithqueryparams.com:443/items?Filter=subject+like+%22hello%22

Accessing Azure KeyVault

powershell
$Headers = Get-ImmyAzureAuthHeader -Endpoint Keyvault
 Invoke-RestMethod 'https://<yourvault>.vault.azure.net/secrets/secretname?api-version=7.1' -Header $Headers | Select -Expand Value

image

Access arbitrary Azure authenticated resource URIs

powershell
$Headers = Get-ImmyAzureAuthHeader -ResourceUri 'https://vault.azure.net'
 Invoke-RestMethod 'https://<yourvault>.vault.azure.net/secrets/secretname?api-version=7.1' -Header $Headers

Improvements

  • Added the capability for ImmyAgent Provisioning packages to be downloaded an ISO. image
  • Added date/time tooltips to session times to see specifically when a session started
  • Removed automatic software evaluation run from computer details page
  • Adds Open remote session buttons to the computer deployment list.
  • Adds a checkbox to include/exclude offline computers from the computer list page.
  • Configuration task parameters are now available in software test scripts.
  • Added OS Name and Manufacturer to the Computer Overview tab.
  • Added dependency badges to maintenance action items
  • Added default to maintenance action table to hide actions with No Action to reduce clutter.
  • Removed unnecessary show preview div from Computer Details->Software tab
  • Removed automatic software evaluation from Computer Details page
  • Added Remote Session button on Edit Deployment page
  • Added offline computer checkbox filter to computer list page
  • Fixed test script result parsing and added config task variables to it
  • Removed legacy TestResult syntax from SoftwareVersion scripts
  • Added date tooltips to sessions/actions times
  • Set JobArgs to Suppress reboots when running action from Computer Details; Needs Attention
  • Moved the drag handle for RMM Priority ordering to the left side
  • Start system required inventory in overwrite existing command
  • Added dependency badge to maintenance session action list item and action table
  • Refactored to keep GetAuthConnectionString() private and added -Endpoint KeyVault as an alias for the resourceUri
  • Added parametersetnames to Get-ImmyAzureAuthHeader to differentiate between orthogonal use cases
  • Default to hiding 'No Action' in the computer actions table
  • Removed string expansion from MetascriptHost to prevent need for backticks in Set-ComputerName Metascript
  • Decreased timeout for the pending reboot check as this could cause sessions to hang for an unnecessarily long period of time if the script doesn't respond

Bug Fixes

  • Fixed 'Rerun' button action not suppressing reboots.
  • Fixed maintenance action start and end time issues showing the wrong times
  • Fixed an issue where the computer would show online even though all agents were disabled.
  • Maintenance Task parameters and built in variables values are preserved and no longer string expanded in the Metascript context, allowing you to pass these values unaltered to scripts run via Invoke-ImmyCommand
  • Fixed UTC/local issues with action start and end time
  • Fixed online status for disabled RMMLinks

0.37.10

Released 2020-12-15

Bug Fixes

  • Fixes an issue on the computer software list where some fields were not immediately updating.
  • Reduces padding of each item in the software list
  • Fixed issue where scripts would occasionally fail to execute as the user even though the user is logged in
  • Invoke-ImmyCommand no longer returns System.Object instead of $null, making it easier to detect null results
  • $using variables no longer throw a null reference exception when the value is null in the parent context
  • $using variables will issue a warning when they are not present in the parent context, previously a NullReferenceException was thrown both when the variable was declared but had a null value and when the variable was not declared. (Sometimes null is a valid value)

0.37.9

Released 2020-12-14

Bug Fixes

  • Fixed regression in 0.37.8 that broke inventory for most machines

0.37.8

Released 2020-12-12

New Features

  • Adds a helpful alert letting the user know that user scripts with a user action trigger of Run once at login, Run at every login, and Active Setup at login will run immediately if the user is logged in.

Bug Fixes

  • Fixes an issue running some inventory scripts against computers running PowerShell 2.0 (And possibly other PS versions, causing inventory to fail and computer names to be displayed as GUIDs)
  • Un-reversed order of first and last names on edit deployment page
  • Adds missing maintenance task category to the maintenance task details page
  • Fixes an issue where we were not properly updating the maintenance action if the desired state was Update If Found and the software was not present\`
    • Now properly resolves the action result to Success, the Action Type to No Action, and the Action Reason to Software Missing.
  • Fixes issue where RunAsUser fails because user is not a local admin
  • Fixed issue where Immy was pre-selecting incorrect Software after analyzing non-MSI installers
  • Fixes error when using 'Update if Found' with ninite packages.

0.37.7

Released 2020-12-10

Enhancements

  • Allows for saving scripts while focused in the editor by pressing Ctrl S.
  • Adds an alert prompting to save changes when navigating away from a modified script

Bug Fixes

  • Fixes a permission issue when searching the computer list by primary user
  • Fixed object serialization issue from Windows Server 2003 machines

0.37.6

Released 2020-12-09

Bug Fixes

  • Fixes an issue where CW Control RMM Links were failing if the CW Control URL contained a specific route.
  • Fixes the excel export on the Deployment page's Affected Computers panel
  • Fixes a bug on script details form where the scripts timeout was not showing the correct value
  • Fixes a bug when viewing the script details in a modal, where the default timeout was not being supplied.
  • Resolves issue where Immy incorrectly reports "User is not logged in" when a user is logged in over RDP
  • Fixes a bug on the computer details page sessions tab where sessions for other computers show up if you change the time filter
  • Fixes a bug in the computer list page, if the computer name is missing, we now show the device id

Enhancements

  • If a provider fails to initialize, it will be automatically disabled to increase the overall health of Immy.

0.37.5

Released 2020-12-08

New Features

  • Function Scripts! Keep your code dry! You can now call scripts from other scripts. Simply create a new script with category Function, define your logic, and then call the function from another MetaScript.
  • Adds a new column to the session table called "Type" to indicate whether the session was "Scheduled" or "Manual".

Bug Fixes

  • Fixed duplicate persons issue. Syncing persons from azure users now checks if there is an existing person with the same user principal name (email) and will update that person instead of creating a new one.
  • Fixes an issue where the onboarding form's primary user selector was returning people outside of the selected tenant (Only an issue for MSP users).
  • Fixes a bug where the New and Copy as New buttons were missing from the script selector.
  • Fixed an issue with Immybot using the incorrect software version when deploying the "latest" version
  • You can now analyze a version without specifying the "Installer Executable Path" if the file is a zip file
  • Renamed metascript Get-RmmProvider to Get-RmmInfo and added the information required to retrieve EDFs for Clients and Computers from Automate
  • Addresses memory performance issues with the computer list page
  • Fixes some default properties when loading the maintenance task form in a modal. Fixes a bug in Invoke-ImmyCommand where providing the same $using variable with different capitalization threw a duplicate variable error.

Enhancements

  • Added logic to auto select an existing software by upgrade code on the software version upload page
  • Updates the deployment form's software, version, and configuration task "View" buttons

0.37.4

Released 2020-12-08

Bug Fixes

  • Fixed an issue with inventory scripts being retried every minute on devices that return exceptions

0.37.3

Released 2020-12-01

Bug Fixes

  • Fixed issue with terminal not rendering output when launched from Edit button on session logs
  • Fixes an issue where the suggested rmm link name conflicted with an existing name
  • Set the Hangfire Redis MaxStateHistoryLength to 5 to fix issues with uncontrolled memory leak

0.37.2

Released 2020-11-24

Hotfixes

  • Fixed several broken maintenance session links that were not bringing the user to the correct page.
  • Fixed an error in metascripts about the use of duplicate $__using variables.
  • Fixed an issue rendering the xterm terminal within the script editor modal.

0.37.1

Released 2020-11-23

Hotfixes

  • Fixed filter scripts to only return a single computer when run for a maintenance session. Not doing this was causing memory to balloon up unnecessarily.

0.37.0

Released 2020-11-23

Enhancements

Check out our new documentation site! https://docs.immy.bot/

Actionable Software Inventory
  • Updated the Software tab to now provide actionable buttons for software and maintenance tasks that are not compliant
Automatic Onboarding
  • Plug in the USB drive and setup begins automatically without having to login to Immy
    • Create a new Windows 10 Setup USB Package and enable the auto-onboarding option
  • Added a new tab called Sessions that allows a user to easily see computer sessions without leaving the computer details page
  • Added an Onboarding tab to the computer details page to allow easier changing of customer and primary user
Script Engine
  • Simplified Filter Script syntax, removed -TargetType and -TargetGroupFilter as these are selectable in the UI
  • Added xterm.js to the Script Editor for better handling of large return payloads
  • Write-Host output is no longer suppressed when run within Invoke-ImmyCommand
  • Write-Debug, Write-Verbose, Write-Warning, and Write-Error all work both within Metascripts, and scripts run via Invoke-ImmyCommand (Note: $DebugPreference and $VerbosePreference need to be set to 'Continue' as the PowerShell default will suppress the output from these cmdlets)
  • Write-Host in Metascripts and Cloudscripts supports -ForegroundColor, -BackgroundColor and -NoNewLine parameters
  • Terminal now formats Errors and many other objects according to the PowerShell 7 default
  • PowerShell 7 $ErrorView= 'ConciseView' is now supported
  • Exceptions thrown within scripts now show the script line instead of a backend stack trace
  • Added $AzureTenantId variable to all scripts

Stability

  • Fixed memory leak in the user affinity job that was causing instances to hang on an error page
  • Added availability health checks for some azure resources to help diagnose issues faster.

Hotfixes

  • Fixed an issue where renaming a computer did not immediately show the change in the browser
  • Fixed an issue with sending test emails from the smtp page. It would sometimes incorrectly throw an error about enabling authentication
  • Added Update If Found desired state for Ninite Software
  • Fixed selecting a software on the deployment page to auto select "Installed" and "Latest" as the default options
  • Fixed an issue where it was not possible to view global maintenance task scripts from within the Maintenance Task interface
  • ImmyAgent no longer executes Batch/CommandLine as PowerShell

Security

  • Get-ImmyComputer no longer returns computers from other tenants when run by a non-MSP user

0.36.4

Released 2020-11-19

Bug Fixes

  • Moved the pending reboot check from the beginning of the session to the beginning of the execution phase so computers do not reboot during detection. Computers usually run detection during the day and we do not want to reboot computers while they are being used.

0.36.3

Released 2020-11-13

Bug Fixes

  • Fixes bug where rebooting a computer would sometimes hang the maintenance session
  • Fixes a typo reading for onboarding -> ready for onboarding
  • Fixed issue preventing a computer from rebooting if necessary before it starts a maintenance session
  • Fixes an issue where an action would immediately fail if the computer failed to reboot
    • e.g. A software is supposed to be uninstalled and then reinstalled. After the uninstall, a reboot may be attempted. If it fails, we will now still attempt the reinstall anyway.
  • Fixes a critical bug that could allow a person to be incorrectly associated with another tenant.

0.36.2

Released 2020-11-04

Bug Fixes

  • Fixed an issue where the Update Now and Postpone buttons were missing on the maintenance email when they were set to be shown by its schedule.

0.36.1

Released 2020-11-02

Bug Fixes

  • Run Maintenance button at the top of the Computer Details Page now suppresses reboots by default
  • Edit PSALink page no longer throws exception when CWManage API returns duplicate companies
  • Updated task type and task category label names on the task form
  • Fixed a null reference exception when calling Get-ImmyComputer passing in InventoryKeys

0.36.0

Released 2020-10-26

Features

  • New and improved Computer Details Page that shows much more details
  • Added Inventory Task feature
  • Added a System Status Page that shows script execution metrics for enabled RMM Providers
  • Added a System Update Page that allows an administrator to update to newer versions of ImmyBot when they are released
  • Implemented Downgrade logic for software

Enhancements

  • Optimized script execution when using the CW Control RMM Provider
  • Optimized background job scheduling
  • Re-designed the Computer List Page
  • Merged the Onboarding and Pending Computer Pages into one page called New Computers
  • Made the ImmyAgent more scalable
  • Added a loading animation when filtering the Computer List Page
  • When a session expires and the page is reloaded, you will now be redirected back to the page you were on

Bug fixes

  • Fixed CW Control extension to work on latest version of CW Control (2020.11)
  • Fixed session failing with Ninite fails to download
  • Fixed a CORS issue when new instances are registered with uppercase characters
  • Fixed an edge case when scripts erroneously indicate they have been modified when pressing cancel
  • Removed validation requirement for username in SMTP settings
  • Fixed Automate Computers with UTC+0 (UK) do not sync due an issue with using DateTime.Subtract(0)
  • Fixed an error occurring on Windows 7/PS 2.0
  • Fixed an edge case where a server got caught in an endless reboot
  • Removed the WiFi SSID minimum length for PPKGs
  • Fixed a bug where license files did not download before running the Test script
  • Fixed an issue where User Context Scripts were returning 'gt' is not recognized
  • Fixed a bug where maintenance tasks were performed out of order when there was a software dependency
  • Fixed a bug on the Deployment Page where selecting a domain controller was causing an error
  • Fixed a bug in metascripts where Get-ImmyComputer -TargetType TenantDomainControllers was failing
  • Fixed bug where the Users List showed a System user
  • Fixed a bug where bulk software detection failed on PS 2.0 and PS 3.0 when using [Guid]::new
  • Fixed a bug where the CW Automate Provider was not leveraging the 301 command
  • Fixed a bug where the ImmyAgent did not start on VMware VMs due to lack of BoardSerialNumber
  • Fixed some edge cases where sessions kept getting stuck in the Created status
  • Fixed a bug where the ImmyAgent was defaulting to 10 seconds for the script execution
  • Fixed a bug where the software selector on the license form was showing parameters for linked maintenance tasks
  • Fixed a bug where maintenance task fields Hidden and Default Values were not saving on Create
  • Fixed a bug in the package analyzer where it was throwing Key Not Found for Inno version 6 installers
  • Fixed a bug with Deployments using a desired state of Uninstall/NotPresent that was causing failures due to missing required parameters
  • Fixed a bug with maintenance task parameters not being provided to software install scripts
  • Fixed a bug where users could not open the Maintenance Session Details Page for computers they onboarded
  • Fixed a bug where deployments for maintenance tasks with password parameter types were unable to be deployed
  • Fixed a bug where the Current User user action trigger was not available for scripts created on the software version form
  • Fixed a bug where the RMM to PSA auto client mapping failed when the RMM returns non-unique external ids
  • Fixed a bug where non-msp users could not access software or deploy the ImmyAgent

0.35.16

Released 2020-10-23

This is the first release in the release cycle

`,138),o=[n];function r(l,d,h,u,c,p){return a(),i("div",null,o)}const b=e(s,[["render",r]]);export{g as __pageData,b as default}; diff --git a/assets/releases-2020.md.D0keqcJE.lean.js b/assets/releases-2020.md.DPH-1fDz.lean.js similarity index 67% rename from assets/releases-2020.md.D0keqcJE.lean.js rename to assets/releases-2020.md.DPH-1fDz.lean.js index 9480a19d..9e8f7338 100644 --- a/assets/releases-2020.md.D0keqcJE.lean.js +++ b/assets/releases-2020.md.DPH-1fDz.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as a,a6 as t}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Releases in 2020","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2020.md","filePath":"releases-2020.md"}'),s={name:"releases-2020.md"},n=t("",138),o=[n];function r(l,d,h,u,c,p){return a(),i("div",null,o)}const b=e(s,[["render",r]]);export{g as __pageData,b as default}; +import{_ as e,c as i,o as a,a6 as t}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Releases in 2020","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2020.md","filePath":"releases-2020.md"}'),s={name:"releases-2020.md"},n=t("",138),o=[n];function r(l,d,h,u,c,p){return a(),i("div",null,o)}const b=e(s,[["render",r]]);export{g as __pageData,b as default}; diff --git a/assets/releases-2021.md.DilWLwmP.js b/assets/releases-2021.md.BS1iS6In.js similarity index 99% rename from assets/releases-2021.md.DilWLwmP.js rename to assets/releases-2021.md.BS1iS6In.js index daa2acbc..0ac0a08e 100644 --- a/assets/releases-2021.md.DilWLwmP.js +++ b/assets/releases-2021.md.BS1iS6In.js @@ -1,4 +1,4 @@ -import{_ as e,c as a,o as t,a6 as i}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Releases in 2021","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2021.md","filePath":"releases-2021.md"}'),o={name:"releases-2021.md"},n=i(`

Releases in 2021

0.48.7

Released 2021-12-10

Access Requests

Your users and the ImmyBot support team can now request access to your instance! When an unauthorized person authenticates, a "Request Access" button is available that will submit an access request. An MSP user can then grant or deny access from the user list page. An expiration of one hour, one day, or never can be set for the user.

The access request feature can be enabled/disabled on the preferences page.

image

Improvements

  • Made some small improvements to the User list page
  • Added auto refreshing to the new computers page
  • Made the session list on the computer details page reload when it is shown

Bug Fixes

  • Removed some extra whitespace showing on the tenant details page
  • Fixed a bug when using custom download scripts where the action would fail with An item with the same key has already been added
  • Changed "Triggered By" text from "Unknown" to "System - Automatic Onboarding" for maintenance sessions that onboard automatically
  • Changed parameter text from "override" to "specify" when a default valued is not specified
  • Fixed a bug where deployment parameter notes were not honoring line breaks
  • Changed the default target filter from No Filter to Workstations and Portable Devices
  • Fixed an error in metascripts, Tee-Output : Cannot bind argument..., that would occur if you ran the script $null, which should return null
  • Fixed a browser caching issue which would cause new features and bug fixes to not be immediately available when updating ImmyBot
  • Fixed an issue where the end time of the ImmyBot agent update action was not getting set, causing the time running to continually increase
  • Fixed an issue with the ImmyBot Chocolatey Feed app preference not updating when toggled

0.48.6

Released 2021-12-06

Bug Fixes

  • Fixed a bug where deployments targeting an integration were getting deleted when updating to a different target type

0.48.5

Released 2021-12-03

Bug Fixes

  • Fixed a bug where failed test scripts run after an install were not setting the action to non-compliant

0.48.4

Released 2021-12-03

Bug Fixes

  • Fixed an issue with some ImmyBot instances not being able to run scheduled jobs
  • Fixed a bug with basic downloads failing because paths were using forward slashes instead of backslashes. This was causing all license downloads to fail.

0.48.3

Released 2021-12-02

Improvements

  • Added logout and switch user buttons to the landing page when you are signed in as an unauthorized user

image

Bug Fixes

  • Fixed a bug where completed configuration tasks were incorrectly showing the message "Action interrupted"
  • Fixed a bug where providers failing to initialize were not getting disabled, causing them to continually throw exceptions

0.48.2

Released 2021-12-01

Bug Fixes

  • Fixed an issue with internal packages behaving incorrectly on the new Linux backend
  • Fixed a caching bug that was showing the previously viewed maintenance session details when switching to a different computer

0.48.1

Released 2021-11-30

Improvements

  • Ephemeral Agent now uses Win32API directly to invoke Powershell, replacing the WMI calls which suffered from System.PlatformNotSupportedException: The native library 'C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\wminet_utils.dll' does not have all required functions. Please, update the .NET Framework. errors on some specific machines.

Bug Fixes

  • Resolves issue with Ephemeral Agent sometimes launching PowerShell in 32-bit mode
  • Added additional error logging when maintenance task get/set/test fail
  • Fixed an issue with file paths containing "/" instead of ""
  • Added back missing metascript aliases
  • Resolved 'AmsiContext' warnings being spammed in frontend
    • image
  • Improved the readability of the Azure page
  • Added an alert to the user page about creating new users
  • Replaced references to "Immybot" with "ImmyBot"

0.48.0

Released 2021-11-29

IMPORTANT

The changes in this release will require reconsent at first login!

ⓘ If your Azure AD is configured to not allow non-Admin users to consent to new apps, you will need to login once as a user with sufficient privileges.

image

  • Consolidated backend and frontend into a single Enterprise Application (Service Principal)
  • Removed backend.subdomain.immy.bot and pointed all API calls to subdomain.immy.bot
    • This has the additional benefit of increasing performance as the browser no longer makes a CORS pre-flight check when hitting the API
      • Note: If you are using the ImmyBot API, you will need to remove backend. from your URI

0.47.12

Released 2021-11-29

Bug Fixes

  • Fixed a bug introduced in 0.47.11 where BITS downloads fail for files that do not specify an MD5 hash

0.47.11

Released 2021-11-24

Improvements

  • Files without MD5 hashes will now always get overwritten for better security.

Bug Fixes

  • Fixed Ephemeral Agent PowerShell execution failures on some machines
  • Fixed an issue with nested exceptions not showing the correct output

0.47.10

Released 2021-11-23

Improvements

  • Ephemeral Agent EXE respects global proxies for https:// even though it uses wss://

Bug Fixes

  • Fixed issue where Ephemeral Agent EXE failed to launch due to an extraction issue on Windows Server Core

0.47.9

Released 2021-11-22

Bug Fixes

  1. Fixed an issue with inventory and script-run cancellation logic causing high memory usage
  2. Fixed an issue with function scripts being used in metascripts causing heavy load on global database
  3. Switched to force Ephemeral Agent EXE to utilize System Proxy settings to alleviate connection refusal for some users
  4. Fixed an issue with PowerShell execution occasionally throwing an error that would crash ImmyBot

0.47.8

Released 2021-11-17

Features

Ephemeral Agent EXE

  1. The ephemeral agent now executes as an .exe instead of a PowerShell script.
  2. This allows us to use a WebSocket instead of polling, which improves performance and resiliency as we can immediately detect disconnections.
  3. Decreased initial connection time by attempting to connect using all RMMs simultaneously instead of in sequence.
  4. Substantially improved logging to help troubleshoot script execution issues

Note: You may have to exclude your instance's hostname in the firewall from SSL Inspection policies! SSL Inspection may interfere with the WebSocket connection from this new agent!

Note: You may also need to adjust your security software to allow the EXE to execute. We recommend adding an exclusion for the Immense Networks code signing certificate as it will be used to sign all ImmyBot PowerShell scripts and Executables.

The subject of the certificate is:

CN=Immense Networks, O=Immense Networks, L=Baton Rouge, S=Louisiana, C=US

Improvements

  • Inventory scripts now run in parallel
  • ImmyBot will always overwrite license files to prevent issues with software not activating because the previous license file is still in the ImmyBot download folder.
  • The script terminal on the computer details page is no longer cleared when swapping between tabs.
  • Updated the instance disabled text to specify that only an admin user can re-enable immy

Bug Fixes

  • The EXE ephemeral agent addresses intermittent ScriptTimeout exceptions that would occur for a variety of reasons
  • Implemented a "Script Execution Circuit Breaker" per computer to prevent RMM overload when retrying ephemeral connections (This can happen when security software blocks execution or firewalls prevent outbound connections)
  • Fixed several issues around script error handling. Line numbers now display correctly. Exceptions that occur before running a script are now caught and displayed properly.
  • Fixed an issue where inventory output with a value of null was being treated as successful and overwriting good results
  • Fixed a bug with session logs showing null references when a script was cancelled or timed out
  • Fixed a bug with quick deploy where the deployment resolution stage was unnecessarily reaching out to the computer to retrieve its software
  • Fixed a bug during maintenance sessions, Field at index '1' does not exist..., where retrieving the list of installed chocolatey software would fail
  • Resolved a potential issue around re-acquiring ephemeral agent sessions under concurrent script execution scenarios
  • Fixed a bug when re-authenticating to ImmyBot where you wouldn't be redirected to the page you were previously on due to the URL not including query parameters

0.47.0

Released 2021-10-28

Maintenance Execution Order

You can now specify the order in which maintenance items are executed by navigating to "/deployments/ordering" or by clicking the "Ordering" link in the side nav bar under "Deployments".

Maintenance Execution Order

Other Improvements

  • Made the software, maintenance task, script, and media list pages default to showing "All" for convenience. Additionally made small changes to these pages to make them more consistent in their appearance.
  • Configuration tasks are now executed immediately after their compliant software.
  • Refactored some code to be platform agnostic in preparation for hosting ImmyBot in Linux instead of Windows
  • Made some internal improvements to how we store core PowerShell code that will make development and script signing easier
  • Allowed dynamic version software to use the "Update If Found" desired state
  • Allowed inventory to use metascripts
  • Parallelized inventory to run up to 4 scripts in parallel for faster execution
  • When creating scripts from a software or maintenance task, the script name will now have a default value. E.g. If creating a new installation script the default name will be " Installation Script" made in this MR for use in release notes
  • Added a maintenance item column to the schedule list page
  • Simplified the "Getting Started Wizard"
  • Removed unnecessary padding in the "Getting Started Wizard"
  • New instances will now automatically approve all recommended target assignments

Bug Fixes

  • Fixed a bug with adding the CW Automate integration where it would throw an error if the list of clients being imported was extremely large
  • Fixed command-line scripts so uninstall logic works as expected
  • Updated the target assignment resolution to exclude assignments that are tied to disabled provider links
  • Fixed a bug where the test script on a software was not getting called if the software was detected
  • Fixed a bug with maintenance item ordering where the preferred initial order of recommended items was not being set
  • Fixed an issue that was causing a memory leak that scaled with the number of ImmyBot agent installers

0.46.9

Released 2021-10-04

Bug Fixes

  • Fixed a bug where configuration tasks were failing with "Parameter '<parameter name>' is marked required for Maintenance Task...and no value has been set" when the parameter value was actually set

0.46.8

Released 2021-09-30

Bug Fixes

  • Fixed a bug with maintenance tasks where the default parameter value was being used instead of the overridden value
  • Fixed a bug where deploying tenant maintenance tasks would incorrectly show the computer target options instead of the tenant target options on the deployment form

0.46.7

Released 2021-09-27

Bug Fixes

  • Added code to help certain scripts honor the system web proxy on a computer
  • Fixed a bug where the ephemeral agent was not honoring the correct polling interval, causing scripts to execute much slower than expected

0.46.6

Released 2021-09-24

Improvements

  • Updated the help text at the top of the Branding list page to indicate what the blue and red stars are for
  • Inventory running for a computer now updates the computer details page in real-time after each inventory script
  • Clicking the re-inventory button now runs detection after the inventory scripts

Bug Fixes

  • Added missing preference to select the default branding
  • Fixed a bug with the "Bulk Create Tenants" buttons on the provider details page where it would throw an erorr
  • Fixed a bug with running user context scripts where an error was being swallowed and the scripts would inevitably time out
  • Fixed an issue with updating the "Installer Executable Path / Installer File" field on the software version form where it would revert to the previous value
  • Fixed a bug where software marked as "Download Only" would attempt to run its configuration task. Software that is set to download only no longer adds an action for its configuration task.
  • Fixed an issue that was causing the azure user sync to stop running. When it encounters an issue syncing a specific tenant, it will now log some details that will help the immy team determine why it is failing and then continue attempting to sync other tenants.
  • Fixed a bug with running Get-AgentInstallScript where it would return the error Tenant # is not linked to a client for the specified provider
  • Fixed a bug saving the onboarding form where we were not disabling the onboarding save buttons while the page was still loading. Attempting to to save before the page was loaded was causing an error to be thrown
  • Fixed a bug where the branding list was showing brandings as "Expired" when they actually weren't
  • Fixed a bug where updating brandings with no selected tenant would cause the branding to get deleted instead
  • Fixed a bug where using the "Re-inventory" button on the computer details page would often time out and show an error
  • Fixed a bug where the edit deployment page always showed the desired version: latest

0.46.5

Released 2021-09-22

Improvements

  • A session that resolves to 0 maintenance actions now results in a successful session.
  • Added the detected version to the dynamic versions script
  • Renamed the description text for safelisting the ephemeral agent script execution paths on the preferences page
  • Added computer name-change propagation to the frontend when using Refresh-ComputerSystemInfo metascript

Bug Fixes

  • Found a bug where updating a computer on the onboarding form would cause problems if the computer has an active maintenance session. We now prevent saving the onboarding form if the computer has an active maintenance session.
  • Fixed potential issues with scripts not getting ran by prefixing our scripts with, [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
  • Removed "Powered by Immense Networks" from the footer of maintenance emails
  • Fixed a bug where after uploading and analyzing software, the analyzed upgrade code was not executing the search to see if it was found on existing machines
  • Fixed a bug on the computer list page where a computer's online status was considering disabled links. Since a disabled link can result in stale data, we no longer use them to determine the online status of a computer.
  • Fixed a bug with clicking the "Delete Offline Agent" button on the computer agents tab
  • Fixed a bug where default configuration task parameters were missing when deploying from the computer software tab
  • Fixed a null reference exception that was occurring when attempting to run a script against an offline computer
  • Fixed an issue with saving computers from the onboarding screen where it would fail when the computer had an automate agent
  • Fixed script reference counts for dynamic version scripts, download installer scripts, and all default software scripts
  • Fixed a bug with assigning a local download installer script to a local software

0.46.4

Released 2021-09-16

Improvements

  • Updated sandbox identification to preserve maintenance session data instead of deleting old data since that data could still be useful for debugging

Bug Fixes

  • Fixed a bug in deserializing data that resulted in The requested operation requires an element of type 'Number', but the target element has type 'String'.
  • Fixed a potential null reference exception when retrieving bulk software
  • Fixed a bug with session logs not showing the correct end date time

0.46.3

Released 2021-09-16

Bug Fixes

  • Fixed a bug that prevented Immy instances from receiving new Immy Agent releases

0.46.2

Released 2021-09-15

Improvements

  • Changed ImmyAgent to use callbacks internally to response to Ephemeral Agent script start events. This should improve issues where the Ephemeral Agent doesn't start when using the ImmyAgent
  • Added a new switch parameter to Invoke-ImmyCommand called -IncludeLocals, which will automatically include all variables from the metascript runspace. When using -IncludeLocals you no longer need to specify $using variables.

Bug Fixes

  • Fixed an issue where system scripts timeouts were not being honored
  • Fixed backwards-compatibility of Get-RmmInfoand Get-RmmComputer metascripts
  • Fixed an issue with automate groups not loading on deployment form
  • Fixed a null reference bug when calculating MD5 hashes
  • Fixed a bug with Invoke-ImmyCommand where $using variables were throwing a warning: WARNING: Parameter '__using_command' already exists with value "some-value"
  • Fixed a regression where Get-RmmInstallScript was renamed to Get-AgentInstallscript. Get-RmmInstallScript is now an alias for Get-AgentInstallScript

0.46.1

Released 2021-09-14

Bug Fixes

Fix ImmyAgent bug which would cause Temp PS1 path to not be created.

0.46.0

Released 2021-09-14

Ephemeral Agent Script Execution

ImmyBot now uses "Ephemeral Agents" for script execution.

This new method will normalize the time it takes to run scripts across all RMM Providers. The initial payload to start the ephemeral agent will be sent through the RMM, but then all subsequent scripts will communicate directly with the ephemeral agent.

An Ephemeral Agent is a lightweight PowerShell script that establishes a direct connection with the ImmyBot backend via Polling or SSE (Server-Sent Events) to receive script payloads to execute. Script output is then sent through an Azure Service Bus for high throughput handling. The ImmyBot backend manages the lifetime of ephemeral agents and is able to re-use them efficiently.

Script Path Preference

It is now easier to whitelist ImmyBot in your Antivirus. The Ephemeral Agent will use a script path containing a hash unique to your instance that you can rekey yourself.

image

Default Software Scripts

You can now specify install, uninstall, post-install, post-uninstall, upgrade, and test scripts directly on the software.

This reduces duplication for software where the versions use the same exact scripts while also making software easier to manage.

Considerations

  1. If the software has a script and the desired version has a script, then the script on the version takes precedence. (e.g. the version's install script will be used instead of the software's install script if both are present)
  2. If the version does not have a script, then we will attempt to use the one on the software if the script is present.

Custom Download Script

You can now assign a "Download Installer" script to software that will be used instead of the core Immy download installer logic. This is valuable when downloading 3rd party installers from URLs that require authentication or specific headers.

Other Improvements

  • Combined RMM Links and PSA Links into a single Integrations page under Settings
  • Improved Tarma InstallMate package analyzer detection
  • Added documentation for Ephemeral Agent & ServiceBus Script-Result handler info tiles in System Status page to better explain what they mean, and how to discern specific pieces of information from them
  • Fixed an issue where password parameters with $ characters were getting stripped ServiceBus Script-Result handling & Ephemeral Agent sessions are enabled by default for new Instances
  • Integration type capabilities are now listed on the New Integration page
  • ServiceBus Script-Result handling can now process results at a much higher throughput & more reliably than before.
  • ServiceBus Result latency has been improved to around ~100ms under normal load conditions from ~3s.
  • Implemented caching for tenant preferences to reduce database calls during maintenance sessions
  • Reduced some complexity in how we structure RMM Links and PSA Links (now known as integrations)
  • Reworded script-start-failed log to not include integration link name since the integration is not responsible for starting the scripts
  • Added basic logging of inventory script names and any errors to session logs

Bug Fixes

  • Fixed an issue with pages not loading when there are a large number of tenants
  • Fixed a bug causing configuration tasks to fail if you were deploying software with the desired state of "Any Version"
  • Fixed an issue with CW Control Secondary Grouping property causing exceptions when used in Deployment.
  • Fixed a bug where script parameters were being duplicated due to case-sensitivity
  • Fixed a few potential ImmyAgent Installation issues that may occur on very old systems missing .NET standard assembly 2.x. Additionally Lowered .NET framework dependency down to 4.6.1 from 4.7.2
  • Fixed a bug where full maintenance sessions were attempting to resolve assignments that definitely should not be resolved
  • Fixed an issue the computer table counts showing incorrect numbers
  • Patched a number of ServiceBus Result-Handling bugs that could cause instability & unexpected output when in use.

0.45.8

Released 2021-08-25

Bug Fixes & Improvements

  • Fixed a bug where reboots were not being suppressed for maintenance triggered in the batch action on the main computer list page
  • Fixed issues with running global or MSP-created meta scripts that use commands such as Invoke-CWARestMethod or Get-RmmInfo
  • Fixed issues with the sidebar not allowing you to select dropdown items when the scrollbar was showing
  • Fixed a bug on the media uploader that prevents users from dragging and dropping files to upload
  • Added the missing "Reboot Preference" label on the schedule details page

0.45.7

Released 2021-08-23

Bug Fixes & Improvements

  • Fixed an issue where the Get-RmmInfo command was not being found in metascripts during auto onboarding sessions
  • Fixed an issue that was preventing users from deleting tenants. The error received was "An error occurred while deleting tenants".
  • Fixed an issue where saving a script on the script details page would inconveniently scroll you back to the top of the page

0.45.6

Released 2021-08-20

Bug Fixes

  • Fixed a bug where configuration task file parameters were not getting downloaded to the computer before the software action ran
  • Fixed a bug where running a deployment with a configuration task that did not have any scripts enabled was causing the software scripts to not include the configuration task parameters

0.45.5

Released 2021-08-18

Bug Fixes

  • Fixed a bug that surfaced in 0.45.4 where computers were not running the onboarding stage during maintenance sessions

0.45.4

Released 2021-08-18

Bug Fixes and Improvements

  • Fixed an issue with schedules that were targeting (+ offset) timezones, e.g. (UTC +10:00) where the schedule was not getting scheduled at the correct time
  • Fixed an issue where linking a tenant to an RMM client was incorrectly pushing the synced computers to Needs Onboarding. Computers synced by linking a tenant are automatically marked as onboarding since it is the initial sync.
  • Fixed an issue with creating deployments where the maintenance item search was not returning maintenance tasks with the Tenant Category
  • Added a session log to warn users when you attempt to run a cloud script (tenants only) against a computer. This shouldn't be possible, but there is a bug on the deployment form that is allowing you to save an invalid deployment. This bug will be fixed in an upcoming release
  • Updated the Azure CSP Preconsent instructions on https://docs.immy.bot/guide/csp-preconsent-instructions.html to reflect the latest UI.
  • Fixed an issue with global maintenance task file parameters where we were not downloading the files to the computer

0.45.3

Released 2021-08-18

Bug Fixes and Improvements

  • Fixed an issue that could prevent Immy from starting up properly where the database as referencing computer ids for computers that no longer exist
  • Fixed an issue on the Deployment List page where global software / maintenance tasks were getting incorrectly linked to local software / maintenance tasks
  • Fixed a rare exception getting thrown if an instance was started and stopped very quickly
  • Fixed an asset caching bug that would cause new features to be unavailable until the user performed a hard refresh in the browser
  • You will now receive a notification when new frontend updates are available to prompt you to reload the page
  • Fixed a bug where starting sessions for computers that are actively having maintenance scheduled by ImmyBot could cause the schedule to stop scheduling sessions

0.45.2

Released 2021-08-04

Bug Fixes

  • Fixed an issue introduced in 0.45.0 that prevented users from creating deployments for installing Chocolatey and Ninite software
  • Fixed an issue with new computers getting stuck under failed with the specific error message "duplicate key value violates unique constraint "ix_computers_device_id"

0.45.1

Skipped

0.45.0

Released 2021-08-03

New Deployment Targets

CW Automate Groups

You can now deploy software to CW Automate Groups and to CW Control Sessions sharing the same custom property values*

image

CW Control Custom Groups

Requires CW Control ImmyBot extension to version 0.1.7 -- Awaiting ConnectWise Control Marketplace Approval

image

You can define which custom property number you want to use for the client name and secondary grouping property on the RMM Link details page.

image

Improvements

  • Invoke-ImmyCommand can now run on multiple computers in parallel, using the -Parallel switch
  • MSP Admin users can now set a flag Allow Access To MSP Resources on schedules that will allow all scripts run by the schedule to have access to MSP resources. An example would be allowing the metascript Get-ImmyAzureAuthHeader to use the flag -UseMSPTenant to retrieve the msp tenant's access token.
  • You can now connect to Azure AD as the MSP Tenant from scripts run on client devices by passing -UseMSPTenant to the Connect-ImmyAzureAD metascript
  • Added a new tag image for computers to indicate it is a sandbox
  • You can now delete computers from the "New Computers" page.
  • You can now use MSP KeyVault secrets in customer scripts. This is useful if, for example, you'd like to access your IT Glue API keys while running a metascript against a customer computer. Provide -UseMSPTenant to Get-ImmyAzureAuthHeader
  • Write-Progress can now be used inside Invoke-ImmyCommand blocks
  • Added a preference to set the default timezone that gets selected on the schedule and deployment pages
  • Agent installer modal now defaults Auto Onboard to false to avoid accidental auto onboarding
  • Reduced the local admin username minimum length from 3 characters to 2 characters. Allows for two-character naming such as "MC" or "LA"
  • Users now have the ability to specify the 'ClientName' CustomProperty index in the CW Control RMM Link, in the rare case it isn't the default.
  • Switched to using service bus for Invoke-ImmyCommand usage in metascripts when service bus is enabled for script results
  • Made some refactoring changes around how computers get identified
  • Refactored the "Needs a Manual Decision" tab to be more useful

Bug Fixes

  • Fixed an issue where scripts that were run from the script editor page were not able to be cancelled
  • Fixed an issue with sessions getting stuck while attempting to update the immy agent provider
  • Fixed issue with deployments targeting a specific version where it would revert to latest when reloading the page
  • Fixed issue with creating maintenance tasks and them not showing up on the deployment page when you click "Deploy"
  • Fixed issue with the person select box not showing the person name and email
  • Fixed issue where task audits were not running during preview
  • Fixed an issue where task audits would always return compliant even if they were non-complaint
  • When uploading an installer or providing one through a URL, the package type must now be selected in order to continue
  • CW Control Extension now inserts events from ImmyBot with correct eventAttributes which will alleviate some script failure issues.

0.44.7

Released 2021-07-21

Bug Fixes

  • Fixed a permission issue with managing individual target assignments
  • Fixed an issue where permission messages were always defaulting to "Permission Check Failed", instead of showing a more detailed message.

0.44.6

Released 2021-07-19

Improvements

  • Added ability to delete computers from ImmyBot on the main computer list page and on the computer details page
  • Added permissions to only allow an admin to create, update and delete schedules
  • Added a "Triggered By" column to the maintenance session list page to indicate who manually started a session
  • Added text to the maintenance details page indicating who manually started the session
  • Configuration Tasks are now grouped together with their corresponding software action on the maintenance session details page. This should be more convenient than having all configuration tasks grouped at the end of the page.

image

  • Session table now shows the execution date for pending scheduled sessions. Hovering over the text will show the exact date time.

image

  • Session details page now shows the execution date for pending scheduled sessions

image

  • Updated the text description for enforce, audit, and monitor modes on the deployment details page
  • Changed the text of "Hide Successful Deploys" to "Hide Compliant Deployments" for consistency
  • The getting started wizard will now suggest you enter wireless information and remind the user to connect the Ethernet if they don't configure a wireless profile
  • When creating a tenant or updating an existing tenant's name, an error will now be thrown if the name already exists.
  • MSP non-admin users can no longer see cross-tenant deployments
  • Configuration tasks that have a test script will now run the test script during detection if the software is detected on the machine.
  • Updated the logs for showing why a test script errored and cannot continue.

image

  • Updated the maintenance action result reason with the message as well

image

  • Clicking "Show/Hide no-action results" on the deployment page no longer hides maintenance task audit and monitor.

Bug Fixes

  • Fixed an issue with device-cached inventory scripts not being executed on devices that use PowerShell 2.0
  • Fixed an issue with Immy Agent running on 32-bit systems not being able to execute scripts
  • Fixed an issue with PowerShell errors not being stored when they occur during inventory scripts
  • Fixed an issue with domain joining failing when the domain controller is 2008 R2/PowerShell 2.0
  • Fixed issues with the computer deployment excel export
  • Fixed an issue with restoring scheduled jobs when Redis goes down for maintenance
  • Added missing detection email options to the computer deployment page. Show Postpone Button on Detection Email and Show Update Now Button on Detection Email
  • Deployments with the desired state "Update If Found", will no longer add a configuration task if the software is not found on the computer
  • Fixed an issue with some session logs not getting persisted due to invalid characters in PowerShell responses
  • Fixed issue where the edit global script button was showing for non-immense users
  • Fixed issues with the resolution only and detection only tags showing incorrectly on the session details page
  • Fixed an issue with the package analyzer throwing an error when analyzing from a URL.
  • Fixed an issue with devices with UUID 03000200-0400-0500-0006-000700080009 causing computers to always need to go through rmm-computer-resolution in order to be fully identified

0.44.5

Released 2021-07-12

Improvements

  • Updated computer deployment preview/deploy result for maintenance task audit to say either "Audit returned false" (highlighted red) or "Audit returned true" (highlighted green)
  • Removed computer deployment preview/deploy result field when running a maintenance task monitor since a monitor does not currently show compliance

Bug Fixes

  • Fixed an issue where specific tenant onboarding deployments were not overriding cross tenant onboarding deployments
  • Fixed an error that was occurring when saving software with prerequisites
  • Fixed an issue with the package analyzer where it would unexpectedly fail

0.44.4

Released 2021-07-12

Improvements

  • Added multi-selection to the computer list and onboarding computer list
  • Added software references to the maintenance task page.
  • Added option to schedules for Show Maintenance Actions In Emails that controls whether the maintenance action table is shown in the maintenance emails
  • Added TenantId to the list of available script parameters
  • Immybot now sends smaller payloads over RMMs when running inventory scripts
  • Configuration tasks now have access to the software and desired software version script parameters

Bug Fixes

  • Fixed some usability issues with selecting persons and tenants on the Download Rmm Installer form
  • Fixed an issue with the Getting Started wizard not showing up by default for new Immy customers
  • Fixed issue with the SMTP page not showing the form
  • Fixed an issue where the selected tenant would disappear after saving a CWA-location-targetted deployment
  • Fixed a null reference error when requesting a chocolatey version that does not exist
  • Fixed issue with displaying the Azure Prinicipal Id on the person details page
  • Added missing icon to maintenance tasks on the session details page
  • Fixed an issue where workstations were incorrectly resolving to domain controller specific deployments

0.44.3

Released 2021-07-06

Bug Fixes

  • Resolved an issue with creating software versions from the software version upload form

0.44.2

Released 2021-07-01

Bug Fixes

  • Fixed a serialization bug introduced in 0.44.1

0.44.1

Released 2021-07-01

Tenant Details Page Improvements

  1. Added a cloud / computer type selector to the sessions and actions tabs.
  2. Replaced the tasks tab with an actions tab
  3. Added a schedules tab

The actions tab shows the latest actions performed against a computer or tenant. This table can be used to help identify issues with software and maintenance tasks.

Example 1: Find all computers that have a large number of failing actions

Filter the status column to non-compliant and then group by the computer.

image

Example 2: Find software and maintenance tasks that are failing across many computers

image

Dashboard - Load Top 10 Non-Compliant Items

A new button was added to the dashboard, Load Top 10 Non-Compliant Items, that will show up when you have selected a tenant scoped target. This can be used as a quick way to identify issues for devices.

image

Bug Fixes And Other Improvements

  • Fixed issue with computer list not being able to filter by serial number
  • Added a configuration task tag to configuration task maintenance actions on the session details page

0.44.0

Released 2021-06-28

Quick Deploy

Deploying software for a specific computer is now easier. Located at the top of the Software tab on the computer details page. Tell your techs to use this form if they need to deploy software to a specific computer.

image

After selecting a software / maintenance task that you want to deploy, a session will be kicked off to determine if the computer has any applicable deployments. If a deployment is found, then you'll be presented actions for that deployment.

image

If a deployment is not found, then you are asked if you would like to create one.

image

If the selected item requires configuration task parameter values or a license, then you still need to create the deployment from the traditional deployment page. We plan on expanding on this to allow supplying a license and parameters directly on this form.

image

Computer List Search Improvements

Searching for computers is now much faster after some internal refactoring of how the data was stored. We removed the need to select a filter so you can now search by any of the available fields specified in the placeholder.

image

  • Added Onboarding as a support Target Type for convience.
  • Made device inventory storage processes more efficient and started caching some often-accessed computer data (like computer names)

Download ImmyBot Agent Installer Improvements

Updated the interface for downloading an immy agent installer. You can now assign default behavior to any of the installation methods. The Deploy tab will now automatically update when your computer shows up in ImmyBot.

image

image

Inventory Results over Service Bus (Beta)

Inventory scripts sent over any Rmm Provider connection will have their results sent over an Azure ServiceBus connection. This allows us to stream results in real-time, eliminating message size constraints. Since this is a new feature, you must manually enable this functionality under preferences. In a later release, we will extend the service bus script result handling to all scripts ran through Immy

image

Bug Fixes And Other Improvements

  • Added some automated testing to the package analyzer for stability
  • Made the package analyzer partially download files for analysis. This will allow large installers to be analyzed more efficiently
  • Fixed issue where the default install/uninstall scripts were not being selected after uploading and analyzing an installer
  • Fixed an issue where the onboarding reboot preference was not being honored
  • Fixed a bug running maintenance tasks where the maintenance task parameters specified from the deployment were not getting passed down to the running script
  • Fixed an issue that was causing Invoke-ImmyCommand run from cloud scripts to not actually execute
  • Added a brand new test suite to the frontend code to help fight against regressions
  • Fixed AppPref SB Bug where SB Subscriptions weren't being torn down and recreated
  • Fixed Powershell 2.0 compatibility issues with ServiceBus usage
  • Fixed issue with the software analyzer where it was not properly returning the install executable path for .zip files
  • Added more computer columns to the maintenance session list that can be toggled from the column chooser

0.43.7

Released 2021-06-17

Bug Fixes

  • Fixed issue with ImmyBot Agent online/offline states not syncing properly
  • Fixed issue with Get-ImmyComputer not setting many properties on the computer response objects

0.43.6

Released 2021-06-16

Improvements

  • Decreased the load time of maintenance session details
  • If retrieving bulk software during maintenance fails, we now display any errors that occurred
  • Moved the computer reboot logic to a global function script called Restart-ComputerAndWait. A computer that needs a reboot during a maintenance session will now utilize this global function script. This script can be overridden by a local function script with the same name, Restart-ComputerAndWait.

Bug Fixes

  • Fixed issue on the deployment list where azure groups and automate location deployments were showing under cross tenant instead of single tenant
  • Fixed some common exceptions that were occurring for CW Control online/offline events

0.43.3

Released 2021-06-07

Improvements

  • Chocolatey installation script no longer uses iex which was potentially flagging some AV
  • Moved Chocolatey installation script to global so that it can be quickly updated if necessary
  • Detection only sessions now show actions as either compliant or non-compliant
  • Added missing software and maintenance task icons to the computer's software tab

Bug Fixes

  • Fixed issues with saving configuration tasks for software
  • Fixed some regressions with populating data on the deployment form and deployment list
  • Fixed issue with software version test scripts not detecting the boolean result at the end of the output

0.43.2

Released 2021-06-04

New fields on Windows 10 Setup USB Package

  1. You can now set the reboot preference when you enable automatic onboarding.
  2. You can now specify additional persons
  3. Send Follow-up Email has been added here and also on the computer onboarding form to send an email when the onboarding session finishes.

image

General Improvements

  • Added a test email button to the branding form so you can preview how the maintenance emails will look
  • Progress session logs no longer show the activity id when id is 0
  • Onboarding sessions now run perform a full inventory of the computer
  • Increased the size of the row details icon in the logs panel to make it easier to see/click
  • Session logs are now now auto expanded when you click the row details icon
  • The primary log result is no longer truncated by default
  • On the script details form, the timeout field now specifies (seconds) as the unit
  • Updated the package type options on the software upload form to be "None, Zip file, Single file installer"
  • Added a description for zip files on the software upload form
  • Updated the action reference table to include the computer's online status
  • Added a refresh button to the dashboard table. This is useful if you have running sessions and you want to refresh the results of the table
  • Licensing can now be marked as 'Optional' on Software. This is useful for software that installs in trial mode when no license is specified
  • Added a DEPLOY button to the maintenance task form
  • Added maintenance action references to the maintenance task form
  • Added a "Missing Install Script" alert message to software version form when the version does not have an installation script
  • Updated maintenance action messages and session logs to indicate when a software is being installed without an installation script

Bug Fixes

  • Follow-up emails now send correctly in sessions that have an agent update action
  • Disabled syntax highlighting for script output in session logs
  • Fixed an issue with being unable to delete an offline agent
  • Fixed an issue where onboarding computers were not able to apply metascript targets that depended on inventoried software since inventory had not run yet
  • Fixed issue with metascript deployments where we converting the entire result to a boolean instead of checking whether the result ends with a boolean
  • Resolves issue with software failing to install when it was marked as 'Licensed' but no license was specified on the deployment. For these cases, you can now select 'Optional' on the Software to install it without a license
  • Fixed some issues with showing session and action dates
  • Fixed some issues with the agent update stage

0.43.0

Released 2021-06-01

Agent Updating

The Immy Agent now gets updated during full maintenance sessions. You can also manually trigger an update by going to the computer's details page and under the Agents tab.

image

Assignment Override

As part of a refactor of the computer software tab, we added the ability to override assignments. This is useful when resolving one off computers that do not need to be part of a larger assignment.

image

Getting Started Wizard

A new 'Getting Started' feature is available, which guides the user through first-time ImmyBot setup and installation of the ImmyAgent on a device using PPKG. You can access this feature by clicking the "show Getting Started Wizard" link under your user email dropdown in the top right.

image

A recommended deployment is a global deployment that is accessible to all ImmyBot users. Recommended deployments represent common scenarios that most companies use. You can approve / dismiss recommended deployments. Approving a deployment will allow it to be considered as a valid deployment when running maintenance. Dismissing a deployment will disallow it from being considered during maintenance.

When a new recommended deployment is added, you will receive a notification, "You have new recommended deployments". Clicking this link will prompt you to approve / disapprove the deployment.

You can manage the approval of all recommended deployments from the main Deployment List page by clicking the "View Recommended Deployments" button at the top.

image

Improvements

  • In an effort to make script execution more reliable in the presence of Antivirus, we discontinued the use of Invoke-Expression when running scripts in the System context.
  • Made some primary buttons secondary where they weren't the primary action
  • Refactored the agents tab
  • Set max widths in inputs
  • Changed script selector and task selector buttons to links.
  • Moved configuration task actions to the execution phase of maintenance. Configuration tasks do nothing during detection.

Bug Fixes

  • Fixed issue on the software assignment reference table where the target and desired software state columns were missing text
  • Fixed sorting computer column on the deployment page
  • Fixed issue with dates showing as 0001-01-01
  • Set maintenance sessions table time filter default to 7 days
  • Moved the maintenance task link directly under software in the nav menu
  • Set "Include Offline" default to false on the Ready For Onboarding tab on the New Computers page
  • Updated the actions needing attention section to only consider actions from the last week
  • Fixed an issue where software only linked to Ninite or Chocolatey were unable to perform upgrades
  • Fixed an issue where we were appending "/qn" to uninstall strings that were not using MsiExec.exe
  • Fixed issue where configuration task scripts were getting run when its software action failed

0.42.3

Released 2021-05-06

PPKG Primary User

You can now specify the primary user as part of the provisioning package configuration.

image

Maintenance Task Icons

Maintenance Tasks can now have icons!

image

Deployment: Multiple Action Results

The deployment page can now show multiple action results. This is useful when a software has a configuration task or dependencies.

When there are 2 actions:

image

When there are more than 2 actions:

image

Showing extra actions:

image

Improvements

  • Added license for Entity Framework Extensions
  • Updated the descriptions for Windows Updates on the Schedule Page. We now hide the windows updates checkbox when it is not available.
    • image
  • The error alert at the top of a page now indicates that the requested resource could not be found if the api call resulted in a 404.
    • image

Bug Fixes

  • Fixed issue with merging tenants where some users were receiving the following error: Configured execution strategy SqlServerRetryingExecutionStrategy does not support user initiated transactions
  • Fixed issues with determining winning deployments. A tenant filter script now has priority over a cross tenant filter script. Ordering has also been added to the target group filter. E.g. A deployment targeting primary domain controllers will now take priority over a deployment targeting servers.
  • Fixed issue where multiple actions returned on the edit deployment screen would overwrite each other when previewing or deploying
  • Fixed extra spacing between items on the computer software list
  • Fixed issue where some null dates were showing as Jan 01 0001 - They now show as n/a.
  • Fixed issue with creating, updating, and deleting deployments where the request would hang and eventually timeout
  • Fixed issue with the deployment details page slug having duplicate text

0.42.2

Improvements

  • Added ability to merge and delete tenants
  • Reduced agent install MSI from 41MB to 14MB
  • ImmyAgent can now be installed without an internet connection
    • The Provisioning Package now embeds the MSI instead of downloading it, preventing the need for an internet
  • ImmyAgent Service is now a single exe file
  • ImmyAgent gracefully shuts down quickly preventing connection errors on service restart because the previous process is still running
  • Better online/offline tracking: ImmyAgent now sends messages to the backend to indicate when it connects and disconnects. The prevents issues where a restart may not be noticed on machines that reboot quickly because the IoTHub filters out connection events that happen quickly.
  • When joining the domain from the Onboarding screen, the logs indicate what domain controller is being used to fetch the offline domain join token
  • When scripts are running in the Metascript context, we say execution is happening in the ImmyBot Backend instead of 'Server' as it could be confused with a server managed by ImmyBot

Bug Fixes

  • Fixed Offline Domain join
    • This also fixed an issue where Invoke-ImmyCommand would not respect the Computer argument
  • Fixed issue where license values werent being provided during Onboarding sessions
  • Fixed issue where PPKG would fail to apply if wireless was specified and the machine doesn't have a wireless adapter
  • Fixed an issue with upgrades failing for global softwares that use choco provider
  • Fixed an issue where cloud scripts were not able to be debugged with the correct script parameters from tenant session details
  • Fixed issue causing deployments to fail when global software is linked to Ninite and Ninite integration is not enabled.
  • Fixed an issue where rekeyed agents never show up in Immy.
  • Fixed an issue with rerunning script from tenant session trying to run against a computer
  • Fixed an issue that could cause the first instance of a schedule to not run if the schedule was created between your timezone's offset and midnight. (I.E Between 6PM CDT and Midnight CDT)

0.42.1

Improvements and Bug Fixes

  • Fixed an issue on the deployment form when invalid text would incorrectly show up when a chocolatey or ninite software was selected
  • Fixed an issue that was preventing successful installs of ninite and chocolatey software

0.42.0

Tenant Details Page

Added a tenant details page similar to the computer details page. The tenant list page link has been moved out from Settings -> Tenants to the top level in the navbar.

  1. Maintenance sessions run directly against a tenant can be viewed in the Sessions tab.
  2. Assigned Tenant Maintenance Tasks can be viewed in the Tasks tab.
  3. The Terminal tab is auto scoped to run meta scripts for a particular tenant.
  4. The Mappings tab allows you to link/un-link a tenant from RMM Providers.
  5. The edit tab allows you to change the name of the tenant.

image

Software Providers

What is a Software Provider?

A Software Provider tells ImmyBot how to install/uninstall a software. Currently, Local, Global, Chocolatey and Ninite are supported as providers. You can assign the available providers to a software on the software's edit page. A local/global software will inherently be a Local/Global Provider if there are software versions present.

image

The provider that is used during a maintenance session can be specified on the deployment. For example, if the Chocolatey provider is added on a software and is selected on a deployment, then Immy will always attempt to install/uninstall the software through Chocolatey.

image

If a specific provider is not selected, then the software will be installed/uninstalled using the following logic:

  1. If the deployment is set to install the latest version or update if found, then the provider that contains the latest software version will be used.
    • e.g. If chocolatey has a newer software version then global, then chocolatey will be used.
  2. For any other desired state, the local/global provider will be used (normal behavior).

If the Ninite integration is enabled and Ninite is set as an alternate provider, then Ninite will take priority over Local/Global and Chocolatey.

Detection Outdated

Added a flag to computers to indicate that a deployment for the computer has been updated and that detection should be re-run to ensure the computer is up to date.

image

Computer Software Page Updates

Added more tabs to filter the computer's software list

image

Unassignable

The unassignable tab lists all software that exist on the computer but does not exist in ImmyBot as managed Software.

Assignable

The assignable tab now has two potential actions: Quick Assign and Assign. Quick Assign will immediately create a deployment targeting the primary person (if present) or the computer. A detection only session will also start immediately to determine the current state of the software. Assign will open the New Deployment Page and allow you to create a new assignment for the software. Quick assign is currently only available for software that do not have a configuration task or a license.

image

Assigned

The assigned tab now provides 3 potential actions: Action to take (Install, Update, Enforce, etc), Re-run detection (refresh icon), and Manage (edit deployment)"

image

Improvements and Bug Fixes

  • Added ability to bulk delete tenants and associated data from the tenant list page
  • Added a new system preference "Allow Non-Admin Users To Manage Deployments". This is enabled by default.
  • Removed company column from dashboard table and excel export if the target is a single company
  • Updated the dashboard excel export file name to <company> Computers - <date>.xslx when the target is a single company
  • Added result reason to dashboard table and excel export
  • Reworded Action Success to Compliant, Failed, to Non-Compliant, and Missing to Not Found
  • Allowed schedules to target tenant maintenance tasks
  • Allowed the dashboard to target tenant maintenance tasks
  • Uninstalls using the vendor's uninstall string now check to ensure that the uninstall string is using /X and not /I and appends /qn (quiet) if it is missing.
  • Fixed a bug in metascripts where write-warning "some text" was not outputing anything to the console
  • Improved performance of running multiple maintenance sessions at the same time
  • Fixed a bug where uninstalling by MSI uninstall string was failing if the semantic version stored in the registry was not a valid semantic version
  • Fixed a bug with the primary person dropdown where it was limiting results to 1 and including people from any tenant.
  • Fixed a bug when running cloud scripts where it would fail because "the computer is not online"
  • Fixed an issue with repairs not triggering the configuration task or software dependencies
  • Fixed issues with being unable to cancel old maintenance sessions
  • Several other small QOL improvements throughout the codebase
  • Fixed bug where ImmyAgent Service stops immediately when stop is requested from the Windows Services

0.41.13

Released 2021-04-13

Bug Fixes and Improvements

  • Fixed issue where non-strings weren't being passed into $using variables with Invoke-ImmyCommand { }
  • Fixed a null reference exception that could occur when performing an action for a maintenance task on the computer software table.

0.41.12

Released 2021-04-12

Bug Fixes and Improvements

  • Improved the performance of a poor performing SQL query that populates the "Needs Attention" section of the computer details page

0.41.11

Released 2021-04-09

Bug Fixes and Improvements

  • Improved performance of loading computers on the Deployment Details page
  • A schedule can now specify whether it will "Apply Windows Updates". Note If the schedule is limited to a specific software or maintenance task, then windows updates will not be applied.
  • Made minor improvements to BITS transfers
  • Fixed issue with Chocolatey latest version allowing prereleases
  • Fixed a bug causing maintenance task files to fail downloading

0.41.10

  • Skipped

0.41.9

Released 2021-04-08

Bug Fixes and Improvements

  • Now auto preselects MSP tenant when creating a new person and the user is an MSP user
  • Auto navigate back to Person List when creating/updating a person
  • Added a link to Microsoft documentation on how to obtain a user's Object ID
  • Added filtering to Stages column on the maintenance session table image
  • String variables passed into a remote runspace now get expanded automatically just like running normal scripts, preventing the need to run ExpandString on variables containing paths like $InstallerFile and $InstallerFolder
    • powershell
      Invoke-ImmyCommand {
      +import{_ as e,c as a,o as t,a6 as i}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Releases in 2021","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2021.md","filePath":"releases-2021.md"}'),o={name:"releases-2021.md"},n=i(`

      Releases in 2021

      0.48.7

      Released 2021-12-10

      Access Requests

      Your users and the ImmyBot support team can now request access to your instance! When an unauthorized person authenticates, a "Request Access" button is available that will submit an access request. An MSP user can then grant or deny access from the user list page. An expiration of one hour, one day, or never can be set for the user.

      The access request feature can be enabled/disabled on the preferences page.

      image

      Improvements

      • Made some small improvements to the User list page
      • Added auto refreshing to the new computers page
      • Made the session list on the computer details page reload when it is shown

      Bug Fixes

      • Removed some extra whitespace showing on the tenant details page
      • Fixed a bug when using custom download scripts where the action would fail with An item with the same key has already been added
      • Changed "Triggered By" text from "Unknown" to "System - Automatic Onboarding" for maintenance sessions that onboard automatically
      • Changed parameter text from "override" to "specify" when a default valued is not specified
      • Fixed a bug where deployment parameter notes were not honoring line breaks
      • Changed the default target filter from No Filter to Workstations and Portable Devices
      • Fixed an error in metascripts, Tee-Output : Cannot bind argument..., that would occur if you ran the script $null, which should return null
      • Fixed a browser caching issue which would cause new features and bug fixes to not be immediately available when updating ImmyBot
      • Fixed an issue where the end time of the ImmyBot agent update action was not getting set, causing the time running to continually increase
      • Fixed an issue with the ImmyBot Chocolatey Feed app preference not updating when toggled

      0.48.6

      Released 2021-12-06

      Bug Fixes

      • Fixed a bug where deployments targeting an integration were getting deleted when updating to a different target type

      0.48.5

      Released 2021-12-03

      Bug Fixes

      • Fixed a bug where failed test scripts run after an install were not setting the action to non-compliant

      0.48.4

      Released 2021-12-03

      Bug Fixes

      • Fixed an issue with some ImmyBot instances not being able to run scheduled jobs
      • Fixed a bug with basic downloads failing because paths were using forward slashes instead of backslashes. This was causing all license downloads to fail.

      0.48.3

      Released 2021-12-02

      Improvements

      • Added logout and switch user buttons to the landing page when you are signed in as an unauthorized user

      image

      Bug Fixes

      • Fixed a bug where completed configuration tasks were incorrectly showing the message "Action interrupted"
      • Fixed a bug where providers failing to initialize were not getting disabled, causing them to continually throw exceptions

      0.48.2

      Released 2021-12-01

      Bug Fixes

      • Fixed an issue with internal packages behaving incorrectly on the new Linux backend
      • Fixed a caching bug that was showing the previously viewed maintenance session details when switching to a different computer

      0.48.1

      Released 2021-11-30

      Improvements

      • Ephemeral Agent now uses Win32API directly to invoke Powershell, replacing the WMI calls which suffered from System.PlatformNotSupportedException: The native library 'C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\wminet_utils.dll' does not have all required functions. Please, update the .NET Framework. errors on some specific machines.

      Bug Fixes

      • Resolves issue with Ephemeral Agent sometimes launching PowerShell in 32-bit mode
      • Added additional error logging when maintenance task get/set/test fail
      • Fixed an issue with file paths containing "/" instead of ""
      • Added back missing metascript aliases
      • Resolved 'AmsiContext' warnings being spammed in frontend
        • image
      • Improved the readability of the Azure page
      • Added an alert to the user page about creating new users
      • Replaced references to "Immybot" with "ImmyBot"

      0.48.0

      Released 2021-11-29

      IMPORTANT

      The changes in this release will require reconsent at first login!

      ⓘ If your Azure AD is configured to not allow non-Admin users to consent to new apps, you will need to login once as a user with sufficient privileges.

      image

      • Consolidated backend and frontend into a single Enterprise Application (Service Principal)
      • Removed backend.subdomain.immy.bot and pointed all API calls to subdomain.immy.bot
        • This has the additional benefit of increasing performance as the browser no longer makes a CORS pre-flight check when hitting the API
          • Note: If you are using the ImmyBot API, you will need to remove backend. from your URI

      0.47.12

      Released 2021-11-29

      Bug Fixes

      • Fixed a bug introduced in 0.47.11 where BITS downloads fail for files that do not specify an MD5 hash

      0.47.11

      Released 2021-11-24

      Improvements

      • Files without MD5 hashes will now always get overwritten for better security.

      Bug Fixes

      • Fixed Ephemeral Agent PowerShell execution failures on some machines
      • Fixed an issue with nested exceptions not showing the correct output

      0.47.10

      Released 2021-11-23

      Improvements

      • Ephemeral Agent EXE respects global proxies for https:// even though it uses wss://

      Bug Fixes

      • Fixed issue where Ephemeral Agent EXE failed to launch due to an extraction issue on Windows Server Core

      0.47.9

      Released 2021-11-22

      Bug Fixes

      1. Fixed an issue with inventory and script-run cancellation logic causing high memory usage
      2. Fixed an issue with function scripts being used in metascripts causing heavy load on global database
      3. Switched to force Ephemeral Agent EXE to utilize System Proxy settings to alleviate connection refusal for some users
      4. Fixed an issue with PowerShell execution occasionally throwing an error that would crash ImmyBot

      0.47.8

      Released 2021-11-17

      Features

      Ephemeral Agent EXE

      1. The ephemeral agent now executes as an .exe instead of a PowerShell script.
      2. This allows us to use a WebSocket instead of polling, which improves performance and resiliency as we can immediately detect disconnections.
      3. Decreased initial connection time by attempting to connect using all RMMs simultaneously instead of in sequence.
      4. Substantially improved logging to help troubleshoot script execution issues

      Note: You may have to exclude your instance's hostname in the firewall from SSL Inspection policies! SSL Inspection may interfere with the WebSocket connection from this new agent!

      Note: You may also need to adjust your security software to allow the EXE to execute. We recommend adding an exclusion for the Immense Networks code signing certificate as it will be used to sign all ImmyBot PowerShell scripts and Executables.

      The subject of the certificate is:

      CN=Immense Networks, O=Immense Networks, L=Baton Rouge, S=Louisiana, C=US

      Improvements

      • Inventory scripts now run in parallel
      • ImmyBot will always overwrite license files to prevent issues with software not activating because the previous license file is still in the ImmyBot download folder.
      • The script terminal on the computer details page is no longer cleared when swapping between tabs.
      • Updated the instance disabled text to specify that only an admin user can re-enable immy

      Bug Fixes

      • The EXE ephemeral agent addresses intermittent ScriptTimeout exceptions that would occur for a variety of reasons
      • Implemented a "Script Execution Circuit Breaker" per computer to prevent RMM overload when retrying ephemeral connections (This can happen when security software blocks execution or firewalls prevent outbound connections)
      • Fixed several issues around script error handling. Line numbers now display correctly. Exceptions that occur before running a script are now caught and displayed properly.
      • Fixed an issue where inventory output with a value of null was being treated as successful and overwriting good results
      • Fixed a bug with session logs showing null references when a script was cancelled or timed out
      • Fixed a bug with quick deploy where the deployment resolution stage was unnecessarily reaching out to the computer to retrieve its software
      • Fixed a bug during maintenance sessions, Field at index '1' does not exist..., where retrieving the list of installed chocolatey software would fail
      • Resolved a potential issue around re-acquiring ephemeral agent sessions under concurrent script execution scenarios
      • Fixed a bug when re-authenticating to ImmyBot where you wouldn't be redirected to the page you were previously on due to the URL not including query parameters

      0.47.0

      Released 2021-10-28

      Maintenance Execution Order

      You can now specify the order in which maintenance items are executed by navigating to "/deployments/ordering" or by clicking the "Ordering" link in the side nav bar under "Deployments".

      Maintenance Execution Order

      Other Improvements

      • Made the software, maintenance task, script, and media list pages default to showing "All" for convenience. Additionally made small changes to these pages to make them more consistent in their appearance.
      • Configuration tasks are now executed immediately after their compliant software.
      • Refactored some code to be platform agnostic in preparation for hosting ImmyBot in Linux instead of Windows
      • Made some internal improvements to how we store core PowerShell code that will make development and script signing easier
      • Allowed dynamic version software to use the "Update If Found" desired state
      • Allowed inventory to use metascripts
      • Parallelized inventory to run up to 4 scripts in parallel for faster execution
      • When creating scripts from a software or maintenance task, the script name will now have a default value. E.g. If creating a new installation script the default name will be " Installation Script" made in this MR for use in release notes
      • Added a maintenance item column to the schedule list page
      • Simplified the "Getting Started Wizard"
      • Removed unnecessary padding in the "Getting Started Wizard"
      • New instances will now automatically approve all recommended target assignments

      Bug Fixes

      • Fixed a bug with adding the CW Automate integration where it would throw an error if the list of clients being imported was extremely large
      • Fixed command-line scripts so uninstall logic works as expected
      • Updated the target assignment resolution to exclude assignments that are tied to disabled provider links
      • Fixed a bug where the test script on a software was not getting called if the software was detected
      • Fixed a bug with maintenance item ordering where the preferred initial order of recommended items was not being set
      • Fixed an issue that was causing a memory leak that scaled with the number of ImmyBot agent installers

      0.46.9

      Released 2021-10-04

      Bug Fixes

      • Fixed a bug where configuration tasks were failing with "Parameter '<parameter name>' is marked required for Maintenance Task...and no value has been set" when the parameter value was actually set

      0.46.8

      Released 2021-09-30

      Bug Fixes

      • Fixed a bug with maintenance tasks where the default parameter value was being used instead of the overridden value
      • Fixed a bug where deploying tenant maintenance tasks would incorrectly show the computer target options instead of the tenant target options on the deployment form

      0.46.7

      Released 2021-09-27

      Bug Fixes

      • Added code to help certain scripts honor the system web proxy on a computer
      • Fixed a bug where the ephemeral agent was not honoring the correct polling interval, causing scripts to execute much slower than expected

      0.46.6

      Released 2021-09-24

      Improvements

      • Updated the help text at the top of the Branding list page to indicate what the blue and red stars are for
      • Inventory running for a computer now updates the computer details page in real-time after each inventory script
      • Clicking the re-inventory button now runs detection after the inventory scripts

      Bug Fixes

      • Added missing preference to select the default branding
      • Fixed a bug with the "Bulk Create Tenants" buttons on the provider details page where it would throw an erorr
      • Fixed a bug with running user context scripts where an error was being swallowed and the scripts would inevitably time out
      • Fixed an issue with updating the "Installer Executable Path / Installer File" field on the software version form where it would revert to the previous value
      • Fixed a bug where software marked as "Download Only" would attempt to run its configuration task. Software that is set to download only no longer adds an action for its configuration task.
      • Fixed an issue that was causing the azure user sync to stop running. When it encounters an issue syncing a specific tenant, it will now log some details that will help the immy team determine why it is failing and then continue attempting to sync other tenants.
      • Fixed a bug with running Get-AgentInstallScript where it would return the error Tenant # is not linked to a client for the specified provider
      • Fixed a bug saving the onboarding form where we were not disabling the onboarding save buttons while the page was still loading. Attempting to to save before the page was loaded was causing an error to be thrown
      • Fixed a bug where the branding list was showing brandings as "Expired" when they actually weren't
      • Fixed a bug where updating brandings with no selected tenant would cause the branding to get deleted instead
      • Fixed a bug where using the "Re-inventory" button on the computer details page would often time out and show an error
      • Fixed a bug where the edit deployment page always showed the desired version: latest

      0.46.5

      Released 2021-09-22

      Improvements

      • A session that resolves to 0 maintenance actions now results in a successful session.
      • Added the detected version to the dynamic versions script
      • Renamed the description text for safelisting the ephemeral agent script execution paths on the preferences page
      • Added computer name-change propagation to the frontend when using Refresh-ComputerSystemInfo metascript

      Bug Fixes

      • Found a bug where updating a computer on the onboarding form would cause problems if the computer has an active maintenance session. We now prevent saving the onboarding form if the computer has an active maintenance session.
      • Fixed potential issues with scripts not getting ran by prefixing our scripts with, [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
      • Removed "Powered by Immense Networks" from the footer of maintenance emails
      • Fixed a bug where after uploading and analyzing software, the analyzed upgrade code was not executing the search to see if it was found on existing machines
      • Fixed a bug on the computer list page where a computer's online status was considering disabled links. Since a disabled link can result in stale data, we no longer use them to determine the online status of a computer.
      • Fixed a bug with clicking the "Delete Offline Agent" button on the computer agents tab
      • Fixed a bug where default configuration task parameters were missing when deploying from the computer software tab
      • Fixed a null reference exception that was occurring when attempting to run a script against an offline computer
      • Fixed an issue with saving computers from the onboarding screen where it would fail when the computer had an automate agent
      • Fixed script reference counts for dynamic version scripts, download installer scripts, and all default software scripts
      • Fixed a bug with assigning a local download installer script to a local software

      0.46.4

      Released 2021-09-16

      Improvements

      • Updated sandbox identification to preserve maintenance session data instead of deleting old data since that data could still be useful for debugging

      Bug Fixes

      • Fixed a bug in deserializing data that resulted in The requested operation requires an element of type 'Number', but the target element has type 'String'.
      • Fixed a potential null reference exception when retrieving bulk software
      • Fixed a bug with session logs not showing the correct end date time

      0.46.3

      Released 2021-09-16

      Bug Fixes

      • Fixed a bug that prevented Immy instances from receiving new Immy Agent releases

      0.46.2

      Released 2021-09-15

      Improvements

      • Changed ImmyAgent to use callbacks internally to response to Ephemeral Agent script start events. This should improve issues where the Ephemeral Agent doesn't start when using the ImmyAgent
      • Added a new switch parameter to Invoke-ImmyCommand called -IncludeLocals, which will automatically include all variables from the metascript runspace. When using -IncludeLocals you no longer need to specify $using variables.

      Bug Fixes

      • Fixed an issue where system scripts timeouts were not being honored
      • Fixed backwards-compatibility of Get-RmmInfoand Get-RmmComputer metascripts
      • Fixed an issue with automate groups not loading on deployment form
      • Fixed a null reference bug when calculating MD5 hashes
      • Fixed a bug with Invoke-ImmyCommand where $using variables were throwing a warning: WARNING: Parameter '__using_command' already exists with value "some-value"
      • Fixed a regression where Get-RmmInstallScript was renamed to Get-AgentInstallscript. Get-RmmInstallScript is now an alias for Get-AgentInstallScript

      0.46.1

      Released 2021-09-14

      Bug Fixes

      Fix ImmyAgent bug which would cause Temp PS1 path to not be created.

      0.46.0

      Released 2021-09-14

      Ephemeral Agent Script Execution

      ImmyBot now uses "Ephemeral Agents" for script execution.

      This new method will normalize the time it takes to run scripts across all RMM Providers. The initial payload to start the ephemeral agent will be sent through the RMM, but then all subsequent scripts will communicate directly with the ephemeral agent.

      An Ephemeral Agent is a lightweight PowerShell script that establishes a direct connection with the ImmyBot backend via Polling or SSE (Server-Sent Events) to receive script payloads to execute. Script output is then sent through an Azure Service Bus for high throughput handling. The ImmyBot backend manages the lifetime of ephemeral agents and is able to re-use them efficiently.

      Script Path Preference

      It is now easier to whitelist ImmyBot in your Antivirus. The Ephemeral Agent will use a script path containing a hash unique to your instance that you can rekey yourself.

      image

      Default Software Scripts

      You can now specify install, uninstall, post-install, post-uninstall, upgrade, and test scripts directly on the software.

      This reduces duplication for software where the versions use the same exact scripts while also making software easier to manage.

      Considerations

      1. If the software has a script and the desired version has a script, then the script on the version takes precedence. (e.g. the version's install script will be used instead of the software's install script if both are present)
      2. If the version does not have a script, then we will attempt to use the one on the software if the script is present.

      Custom Download Script

      You can now assign a "Download Installer" script to software that will be used instead of the core Immy download installer logic. This is valuable when downloading 3rd party installers from URLs that require authentication or specific headers.

      Other Improvements

      • Combined RMM Links and PSA Links into a single Integrations page under Settings
      • Improved Tarma InstallMate package analyzer detection
      • Added documentation for Ephemeral Agent & ServiceBus Script-Result handler info tiles in System Status page to better explain what they mean, and how to discern specific pieces of information from them
      • Fixed an issue where password parameters with $ characters were getting stripped ServiceBus Script-Result handling & Ephemeral Agent sessions are enabled by default for new Instances
      • Integration type capabilities are now listed on the New Integration page
      • ServiceBus Script-Result handling can now process results at a much higher throughput & more reliably than before.
      • ServiceBus Result latency has been improved to around ~100ms under normal load conditions from ~3s.
      • Implemented caching for tenant preferences to reduce database calls during maintenance sessions
      • Reduced some complexity in how we structure RMM Links and PSA Links (now known as integrations)
      • Reworded script-start-failed log to not include integration link name since the integration is not responsible for starting the scripts
      • Added basic logging of inventory script names and any errors to session logs

      Bug Fixes

      • Fixed an issue with pages not loading when there are a large number of tenants
      • Fixed a bug causing configuration tasks to fail if you were deploying software with the desired state of "Any Version"
      • Fixed an issue with CW Control Secondary Grouping property causing exceptions when used in Deployment.
      • Fixed a bug where script parameters were being duplicated due to case-sensitivity
      • Fixed a few potential ImmyAgent Installation issues that may occur on very old systems missing .NET standard assembly 2.x. Additionally Lowered .NET framework dependency down to 4.6.1 from 4.7.2
      • Fixed a bug where full maintenance sessions were attempting to resolve assignments that definitely should not be resolved
      • Fixed an issue the computer table counts showing incorrect numbers
      • Patched a number of ServiceBus Result-Handling bugs that could cause instability & unexpected output when in use.

      0.45.8

      Released 2021-08-25

      Bug Fixes & Improvements

      • Fixed a bug where reboots were not being suppressed for maintenance triggered in the batch action on the main computer list page
      • Fixed issues with running global or MSP-created meta scripts that use commands such as Invoke-CWARestMethod or Get-RmmInfo
      • Fixed issues with the sidebar not allowing you to select dropdown items when the scrollbar was showing
      • Fixed a bug on the media uploader that prevents users from dragging and dropping files to upload
      • Added the missing "Reboot Preference" label on the schedule details page

      0.45.7

      Released 2021-08-23

      Bug Fixes & Improvements

      • Fixed an issue where the Get-RmmInfo command was not being found in metascripts during auto onboarding sessions
      • Fixed an issue that was preventing users from deleting tenants. The error received was "An error occurred while deleting tenants".
      • Fixed an issue where saving a script on the script details page would inconveniently scroll you back to the top of the page

      0.45.6

      Released 2021-08-20

      Bug Fixes

      • Fixed a bug where configuration task file parameters were not getting downloaded to the computer before the software action ran
      • Fixed a bug where running a deployment with a configuration task that did not have any scripts enabled was causing the software scripts to not include the configuration task parameters

      0.45.5

      Released 2021-08-18

      Bug Fixes

      • Fixed a bug that surfaced in 0.45.4 where computers were not running the onboarding stage during maintenance sessions

      0.45.4

      Released 2021-08-18

      Bug Fixes and Improvements

      • Fixed an issue with schedules that were targeting (+ offset) timezones, e.g. (UTC +10:00) where the schedule was not getting scheduled at the correct time
      • Fixed an issue where linking a tenant to an RMM client was incorrectly pushing the synced computers to Needs Onboarding. Computers synced by linking a tenant are automatically marked as onboarding since it is the initial sync.
      • Fixed an issue with creating deployments where the maintenance item search was not returning maintenance tasks with the Tenant Category
      • Added a session log to warn users when you attempt to run a cloud script (tenants only) against a computer. This shouldn't be possible, but there is a bug on the deployment form that is allowing you to save an invalid deployment. This bug will be fixed in an upcoming release
      • Updated the Azure CSP Preconsent instructions on https://docs.immy.bot/guide/csp-preconsent-instructions.html to reflect the latest UI.
      • Fixed an issue with global maintenance task file parameters where we were not downloading the files to the computer

      0.45.3

      Released 2021-08-18

      Bug Fixes and Improvements

      • Fixed an issue that could prevent Immy from starting up properly where the database as referencing computer ids for computers that no longer exist
      • Fixed an issue on the Deployment List page where global software / maintenance tasks were getting incorrectly linked to local software / maintenance tasks
      • Fixed a rare exception getting thrown if an instance was started and stopped very quickly
      • Fixed an asset caching bug that would cause new features to be unavailable until the user performed a hard refresh in the browser
      • You will now receive a notification when new frontend updates are available to prompt you to reload the page
      • Fixed a bug where starting sessions for computers that are actively having maintenance scheduled by ImmyBot could cause the schedule to stop scheduling sessions

      0.45.2

      Released 2021-08-04

      Bug Fixes

      • Fixed an issue introduced in 0.45.0 that prevented users from creating deployments for installing Chocolatey and Ninite software
      • Fixed an issue with new computers getting stuck under failed with the specific error message "duplicate key value violates unique constraint "ix_computers_device_id"

      0.45.1

      Skipped

      0.45.0

      Released 2021-08-03

      New Deployment Targets

      CW Automate Groups

      You can now deploy software to CW Automate Groups and to CW Control Sessions sharing the same custom property values*

      image

      CW Control Custom Groups

      Requires CW Control ImmyBot extension to version 0.1.7 -- Awaiting ConnectWise Control Marketplace Approval

      image

      You can define which custom property number you want to use for the client name and secondary grouping property on the RMM Link details page.

      image

      Improvements

      • Invoke-ImmyCommand can now run on multiple computers in parallel, using the -Parallel switch
      • MSP Admin users can now set a flag Allow Access To MSP Resources on schedules that will allow all scripts run by the schedule to have access to MSP resources. An example would be allowing the metascript Get-ImmyAzureAuthHeader to use the flag -UseMSPTenant to retrieve the msp tenant's access token.
      • You can now connect to Azure AD as the MSP Tenant from scripts run on client devices by passing -UseMSPTenant to the Connect-ImmyAzureAD metascript
      • Added a new tag image for computers to indicate it is a sandbox
      • You can now delete computers from the "New Computers" page.
      • You can now use MSP KeyVault secrets in customer scripts. This is useful if, for example, you'd like to access your IT Glue API keys while running a metascript against a customer computer. Provide -UseMSPTenant to Get-ImmyAzureAuthHeader
      • Write-Progress can now be used inside Invoke-ImmyCommand blocks
      • Added a preference to set the default timezone that gets selected on the schedule and deployment pages
      • Agent installer modal now defaults Auto Onboard to false to avoid accidental auto onboarding
      • Reduced the local admin username minimum length from 3 characters to 2 characters. Allows for two-character naming such as "MC" or "LA"
      • Users now have the ability to specify the 'ClientName' CustomProperty index in the CW Control RMM Link, in the rare case it isn't the default.
      • Switched to using service bus for Invoke-ImmyCommand usage in metascripts when service bus is enabled for script results
      • Made some refactoring changes around how computers get identified
      • Refactored the "Needs a Manual Decision" tab to be more useful

      Bug Fixes

      • Fixed an issue where scripts that were run from the script editor page were not able to be cancelled
      • Fixed an issue with sessions getting stuck while attempting to update the immy agent provider
      • Fixed issue with deployments targeting a specific version where it would revert to latest when reloading the page
      • Fixed issue with creating maintenance tasks and them not showing up on the deployment page when you click "Deploy"
      • Fixed issue with the person select box not showing the person name and email
      • Fixed issue where task audits were not running during preview
      • Fixed an issue where task audits would always return compliant even if they were non-complaint
      • When uploading an installer or providing one through a URL, the package type must now be selected in order to continue
      • CW Control Extension now inserts events from ImmyBot with correct eventAttributes which will alleviate some script failure issues.

      0.44.7

      Released 2021-07-21

      Bug Fixes

      • Fixed a permission issue with managing individual target assignments
      • Fixed an issue where permission messages were always defaulting to "Permission Check Failed", instead of showing a more detailed message.

      0.44.6

      Released 2021-07-19

      Improvements

      • Added ability to delete computers from ImmyBot on the main computer list page and on the computer details page
      • Added permissions to only allow an admin to create, update and delete schedules
      • Added a "Triggered By" column to the maintenance session list page to indicate who manually started a session
      • Added text to the maintenance details page indicating who manually started the session
      • Configuration Tasks are now grouped together with their corresponding software action on the maintenance session details page. This should be more convenient than having all configuration tasks grouped at the end of the page.

      image

      • Session table now shows the execution date for pending scheduled sessions. Hovering over the text will show the exact date time.

      image

      • Session details page now shows the execution date for pending scheduled sessions

      image

      • Updated the text description for enforce, audit, and monitor modes on the deployment details page
      • Changed the text of "Hide Successful Deploys" to "Hide Compliant Deployments" for consistency
      • The getting started wizard will now suggest you enter wireless information and remind the user to connect the Ethernet if they don't configure a wireless profile
      • When creating a tenant or updating an existing tenant's name, an error will now be thrown if the name already exists.
      • MSP non-admin users can no longer see cross-tenant deployments
      • Configuration tasks that have a test script will now run the test script during detection if the software is detected on the machine.
      • Updated the logs for showing why a test script errored and cannot continue.

      image

      • Updated the maintenance action result reason with the message as well

      image

      • Clicking "Show/Hide no-action results" on the deployment page no longer hides maintenance task audit and monitor.

      Bug Fixes

      • Fixed an issue with device-cached inventory scripts not being executed on devices that use PowerShell 2.0
      • Fixed an issue with Immy Agent running on 32-bit systems not being able to execute scripts
      • Fixed an issue with PowerShell errors not being stored when they occur during inventory scripts
      • Fixed an issue with domain joining failing when the domain controller is 2008 R2/PowerShell 2.0
      • Fixed issues with the computer deployment excel export
      • Fixed an issue with restoring scheduled jobs when Redis goes down for maintenance
      • Added missing detection email options to the computer deployment page. Show Postpone Button on Detection Email and Show Update Now Button on Detection Email
      • Deployments with the desired state "Update If Found", will no longer add a configuration task if the software is not found on the computer
      • Fixed an issue with some session logs not getting persisted due to invalid characters in PowerShell responses
      • Fixed issue where the edit global script button was showing for non-immense users
      • Fixed issues with the resolution only and detection only tags showing incorrectly on the session details page
      • Fixed an issue with the package analyzer throwing an error when analyzing from a URL.
      • Fixed an issue with devices with UUID 03000200-0400-0500-0006-000700080009 causing computers to always need to go through rmm-computer-resolution in order to be fully identified

      0.44.5

      Released 2021-07-12

      Improvements

      • Updated computer deployment preview/deploy result for maintenance task audit to say either "Audit returned false" (highlighted red) or "Audit returned true" (highlighted green)
      • Removed computer deployment preview/deploy result field when running a maintenance task monitor since a monitor does not currently show compliance

      Bug Fixes

      • Fixed an issue where specific tenant onboarding deployments were not overriding cross tenant onboarding deployments
      • Fixed an error that was occurring when saving software with prerequisites
      • Fixed an issue with the package analyzer where it would unexpectedly fail

      0.44.4

      Released 2021-07-12

      Improvements

      • Added multi-selection to the computer list and onboarding computer list
      • Added software references to the maintenance task page.
      • Added option to schedules for Show Maintenance Actions In Emails that controls whether the maintenance action table is shown in the maintenance emails
      • Added TenantId to the list of available script parameters
      • Immybot now sends smaller payloads over RMMs when running inventory scripts
      • Configuration tasks now have access to the software and desired software version script parameters

      Bug Fixes

      • Fixed some usability issues with selecting persons and tenants on the Download Rmm Installer form
      • Fixed an issue with the Getting Started wizard not showing up by default for new Immy customers
      • Fixed issue with the SMTP page not showing the form
      • Fixed an issue where the selected tenant would disappear after saving a CWA-location-targetted deployment
      • Fixed a null reference error when requesting a chocolatey version that does not exist
      • Fixed issue with displaying the Azure Prinicipal Id on the person details page
      • Added missing icon to maintenance tasks on the session details page
      • Fixed an issue where workstations were incorrectly resolving to domain controller specific deployments

      0.44.3

      Released 2021-07-06

      Bug Fixes

      • Resolved an issue with creating software versions from the software version upload form

      0.44.2

      Released 2021-07-01

      Bug Fixes

      • Fixed a serialization bug introduced in 0.44.1

      0.44.1

      Released 2021-07-01

      Tenant Details Page Improvements

      1. Added a cloud / computer type selector to the sessions and actions tabs.
      2. Replaced the tasks tab with an actions tab
      3. Added a schedules tab

      The actions tab shows the latest actions performed against a computer or tenant. This table can be used to help identify issues with software and maintenance tasks.

      Example 1: Find all computers that have a large number of failing actions

      Filter the status column to non-compliant and then group by the computer.

      image

      Example 2: Find software and maintenance tasks that are failing across many computers

      image

      Dashboard - Load Top 10 Non-Compliant Items

      A new button was added to the dashboard, Load Top 10 Non-Compliant Items, that will show up when you have selected a tenant scoped target. This can be used as a quick way to identify issues for devices.

      image

      Bug Fixes And Other Improvements

      • Fixed issue with computer list not being able to filter by serial number
      • Added a configuration task tag to configuration task maintenance actions on the session details page

      0.44.0

      Released 2021-06-28

      Quick Deploy

      Deploying software for a specific computer is now easier. Located at the top of the Software tab on the computer details page. Tell your techs to use this form if they need to deploy software to a specific computer.

      image

      After selecting a software / maintenance task that you want to deploy, a session will be kicked off to determine if the computer has any applicable deployments. If a deployment is found, then you'll be presented actions for that deployment.

      image

      If a deployment is not found, then you are asked if you would like to create one.

      image

      If the selected item requires configuration task parameter values or a license, then you still need to create the deployment from the traditional deployment page. We plan on expanding on this to allow supplying a license and parameters directly on this form.

      image

      Computer List Search Improvements

      Searching for computers is now much faster after some internal refactoring of how the data was stored. We removed the need to select a filter so you can now search by any of the available fields specified in the placeholder.

      image

      • Added Onboarding as a support Target Type for convience.
      • Made device inventory storage processes more efficient and started caching some often-accessed computer data (like computer names)

      Download ImmyBot Agent Installer Improvements

      Updated the interface for downloading an immy agent installer. You can now assign default behavior to any of the installation methods. The Deploy tab will now automatically update when your computer shows up in ImmyBot.

      image

      image

      Inventory Results over Service Bus (Beta)

      Inventory scripts sent over any Rmm Provider connection will have their results sent over an Azure ServiceBus connection. This allows us to stream results in real-time, eliminating message size constraints. Since this is a new feature, you must manually enable this functionality under preferences. In a later release, we will extend the service bus script result handling to all scripts ran through Immy

      image

      Bug Fixes And Other Improvements

      • Added some automated testing to the package analyzer for stability
      • Made the package analyzer partially download files for analysis. This will allow large installers to be analyzed more efficiently
      • Fixed issue where the default install/uninstall scripts were not being selected after uploading and analyzing an installer
      • Fixed an issue where the onboarding reboot preference was not being honored
      • Fixed a bug running maintenance tasks where the maintenance task parameters specified from the deployment were not getting passed down to the running script
      • Fixed an issue that was causing Invoke-ImmyCommand run from cloud scripts to not actually execute
      • Added a brand new test suite to the frontend code to help fight against regressions
      • Fixed AppPref SB Bug where SB Subscriptions weren't being torn down and recreated
      • Fixed Powershell 2.0 compatibility issues with ServiceBus usage
      • Fixed issue with the software analyzer where it was not properly returning the install executable path for .zip files
      • Added more computer columns to the maintenance session list that can be toggled from the column chooser

      0.43.7

      Released 2021-06-17

      Bug Fixes

      • Fixed issue with ImmyBot Agent online/offline states not syncing properly
      • Fixed issue with Get-ImmyComputer not setting many properties on the computer response objects

      0.43.6

      Released 2021-06-16

      Improvements

      • Decreased the load time of maintenance session details
      • If retrieving bulk software during maintenance fails, we now display any errors that occurred
      • Moved the computer reboot logic to a global function script called Restart-ComputerAndWait. A computer that needs a reboot during a maintenance session will now utilize this global function script. This script can be overridden by a local function script with the same name, Restart-ComputerAndWait.

      Bug Fixes

      • Fixed issue on the deployment list where azure groups and automate location deployments were showing under cross tenant instead of single tenant
      • Fixed some common exceptions that were occurring for CW Control online/offline events

      0.43.3

      Released 2021-06-07

      Improvements

      • Chocolatey installation script no longer uses iex which was potentially flagging some AV
      • Moved Chocolatey installation script to global so that it can be quickly updated if necessary
      • Detection only sessions now show actions as either compliant or non-compliant
      • Added missing software and maintenance task icons to the computer's software tab

      Bug Fixes

      • Fixed issues with saving configuration tasks for software
      • Fixed some regressions with populating data on the deployment form and deployment list
      • Fixed issue with software version test scripts not detecting the boolean result at the end of the output

      0.43.2

      Released 2021-06-04

      New fields on Windows 10 Setup USB Package

      1. You can now set the reboot preference when you enable automatic onboarding.
      2. You can now specify additional persons
      3. Send Follow-up Email has been added here and also on the computer onboarding form to send an email when the onboarding session finishes.

      image

      General Improvements

      • Added a test email button to the branding form so you can preview how the maintenance emails will look
      • Progress session logs no longer show the activity id when id is 0
      • Onboarding sessions now run perform a full inventory of the computer
      • Increased the size of the row details icon in the logs panel to make it easier to see/click
      • Session logs are now now auto expanded when you click the row details icon
      • The primary log result is no longer truncated by default
      • On the script details form, the timeout field now specifies (seconds) as the unit
      • Updated the package type options on the software upload form to be "None, Zip file, Single file installer"
      • Added a description for zip files on the software upload form
      • Updated the action reference table to include the computer's online status
      • Added a refresh button to the dashboard table. This is useful if you have running sessions and you want to refresh the results of the table
      • Licensing can now be marked as 'Optional' on Software. This is useful for software that installs in trial mode when no license is specified
      • Added a DEPLOY button to the maintenance task form
      • Added maintenance action references to the maintenance task form
      • Added a "Missing Install Script" alert message to software version form when the version does not have an installation script
      • Updated maintenance action messages and session logs to indicate when a software is being installed without an installation script

      Bug Fixes

      • Follow-up emails now send correctly in sessions that have an agent update action
      • Disabled syntax highlighting for script output in session logs
      • Fixed an issue with being unable to delete an offline agent
      • Fixed an issue where onboarding computers were not able to apply metascript targets that depended on inventoried software since inventory had not run yet
      • Fixed issue with metascript deployments where we converting the entire result to a boolean instead of checking whether the result ends with a boolean
      • Resolves issue with software failing to install when it was marked as 'Licensed' but no license was specified on the deployment. For these cases, you can now select 'Optional' on the Software to install it without a license
      • Fixed some issues with showing session and action dates
      • Fixed some issues with the agent update stage

      0.43.0

      Released 2021-06-01

      Agent Updating

      The Immy Agent now gets updated during full maintenance sessions. You can also manually trigger an update by going to the computer's details page and under the Agents tab.

      image

      Assignment Override

      As part of a refactor of the computer software tab, we added the ability to override assignments. This is useful when resolving one off computers that do not need to be part of a larger assignment.

      image

      Getting Started Wizard

      A new 'Getting Started' feature is available, which guides the user through first-time ImmyBot setup and installation of the ImmyAgent on a device using PPKG. You can access this feature by clicking the "show Getting Started Wizard" link under your user email dropdown in the top right.

      image

      A recommended deployment is a global deployment that is accessible to all ImmyBot users. Recommended deployments represent common scenarios that most companies use. You can approve / dismiss recommended deployments. Approving a deployment will allow it to be considered as a valid deployment when running maintenance. Dismissing a deployment will disallow it from being considered during maintenance.

      When a new recommended deployment is added, you will receive a notification, "You have new recommended deployments". Clicking this link will prompt you to approve / disapprove the deployment.

      You can manage the approval of all recommended deployments from the main Deployment List page by clicking the "View Recommended Deployments" button at the top.

      image

      Improvements

      • In an effort to make script execution more reliable in the presence of Antivirus, we discontinued the use of Invoke-Expression when running scripts in the System context.
      • Made some primary buttons secondary where they weren't the primary action
      • Refactored the agents tab
      • Set max widths in inputs
      • Changed script selector and task selector buttons to links.
      • Moved configuration task actions to the execution phase of maintenance. Configuration tasks do nothing during detection.

      Bug Fixes

      • Fixed issue on the software assignment reference table where the target and desired software state columns were missing text
      • Fixed sorting computer column on the deployment page
      • Fixed issue with dates showing as 0001-01-01
      • Set maintenance sessions table time filter default to 7 days
      • Moved the maintenance task link directly under software in the nav menu
      • Set "Include Offline" default to false on the Ready For Onboarding tab on the New Computers page
      • Updated the actions needing attention section to only consider actions from the last week
      • Fixed an issue where software only linked to Ninite or Chocolatey were unable to perform upgrades
      • Fixed an issue where we were appending "/qn" to uninstall strings that were not using MsiExec.exe
      • Fixed issue where configuration task scripts were getting run when its software action failed

      0.42.3

      Released 2021-05-06

      PPKG Primary User

      You can now specify the primary user as part of the provisioning package configuration.

      image

      Maintenance Task Icons

      Maintenance Tasks can now have icons!

      image

      Deployment: Multiple Action Results

      The deployment page can now show multiple action results. This is useful when a software has a configuration task or dependencies.

      When there are 2 actions:

      image

      When there are more than 2 actions:

      image

      Showing extra actions:

      image

      Improvements

      • Added license for Entity Framework Extensions
      • Updated the descriptions for Windows Updates on the Schedule Page. We now hide the windows updates checkbox when it is not available.
        • image
      • The error alert at the top of a page now indicates that the requested resource could not be found if the api call resulted in a 404.
        • image

      Bug Fixes

      • Fixed issue with merging tenants where some users were receiving the following error: Configured execution strategy SqlServerRetryingExecutionStrategy does not support user initiated transactions
      • Fixed issues with determining winning deployments. A tenant filter script now has priority over a cross tenant filter script. Ordering has also been added to the target group filter. E.g. A deployment targeting primary domain controllers will now take priority over a deployment targeting servers.
      • Fixed issue where multiple actions returned on the edit deployment screen would overwrite each other when previewing or deploying
      • Fixed extra spacing between items on the computer software list
      • Fixed issue where some null dates were showing as Jan 01 0001 - They now show as n/a.
      • Fixed issue with creating, updating, and deleting deployments where the request would hang and eventually timeout
      • Fixed issue with the deployment details page slug having duplicate text

      0.42.2

      Improvements

      • Added ability to merge and delete tenants
      • Reduced agent install MSI from 41MB to 14MB
      • ImmyAgent can now be installed without an internet connection
        • The Provisioning Package now embeds the MSI instead of downloading it, preventing the need for an internet
      • ImmyAgent Service is now a single exe file
      • ImmyAgent gracefully shuts down quickly preventing connection errors on service restart because the previous process is still running
      • Better online/offline tracking: ImmyAgent now sends messages to the backend to indicate when it connects and disconnects. The prevents issues where a restart may not be noticed on machines that reboot quickly because the IoTHub filters out connection events that happen quickly.
      • When joining the domain from the Onboarding screen, the logs indicate what domain controller is being used to fetch the offline domain join token
      • When scripts are running in the Metascript context, we say execution is happening in the ImmyBot Backend instead of 'Server' as it could be confused with a server managed by ImmyBot

      Bug Fixes

      • Fixed Offline Domain join
        • This also fixed an issue where Invoke-ImmyCommand would not respect the Computer argument
      • Fixed issue where license values werent being provided during Onboarding sessions
      • Fixed issue where PPKG would fail to apply if wireless was specified and the machine doesn't have a wireless adapter
      • Fixed an issue with upgrades failing for global softwares that use choco provider
      • Fixed an issue where cloud scripts were not able to be debugged with the correct script parameters from tenant session details
      • Fixed issue causing deployments to fail when global software is linked to Ninite and Ninite integration is not enabled.
      • Fixed an issue where rekeyed agents never show up in Immy.
      • Fixed an issue with rerunning script from tenant session trying to run against a computer
      • Fixed an issue that could cause the first instance of a schedule to not run if the schedule was created between your timezone's offset and midnight. (I.E Between 6PM CDT and Midnight CDT)

      0.42.1

      Improvements and Bug Fixes

      • Fixed an issue on the deployment form when invalid text would incorrectly show up when a chocolatey or ninite software was selected
      • Fixed an issue that was preventing successful installs of ninite and chocolatey software

      0.42.0

      Tenant Details Page

      Added a tenant details page similar to the computer details page. The tenant list page link has been moved out from Settings -> Tenants to the top level in the navbar.

      1. Maintenance sessions run directly against a tenant can be viewed in the Sessions tab.
      2. Assigned Tenant Maintenance Tasks can be viewed in the Tasks tab.
      3. The Terminal tab is auto scoped to run meta scripts for a particular tenant.
      4. The Mappings tab allows you to link/un-link a tenant from RMM Providers.
      5. The edit tab allows you to change the name of the tenant.

      image

      Software Providers

      What is a Software Provider?

      A Software Provider tells ImmyBot how to install/uninstall a software. Currently, Local, Global, Chocolatey and Ninite are supported as providers. You can assign the available providers to a software on the software's edit page. A local/global software will inherently be a Local/Global Provider if there are software versions present.

      image

      The provider that is used during a maintenance session can be specified on the deployment. For example, if the Chocolatey provider is added on a software and is selected on a deployment, then Immy will always attempt to install/uninstall the software through Chocolatey.

      image

      If a specific provider is not selected, then the software will be installed/uninstalled using the following logic:

      1. If the deployment is set to install the latest version or update if found, then the provider that contains the latest software version will be used.
        • e.g. If chocolatey has a newer software version then global, then chocolatey will be used.
      2. For any other desired state, the local/global provider will be used (normal behavior).

      If the Ninite integration is enabled and Ninite is set as an alternate provider, then Ninite will take priority over Local/Global and Chocolatey.

      Detection Outdated

      Added a flag to computers to indicate that a deployment for the computer has been updated and that detection should be re-run to ensure the computer is up to date.

      image

      Computer Software Page Updates

      Added more tabs to filter the computer's software list

      image

      Unassignable

      The unassignable tab lists all software that exist on the computer but does not exist in ImmyBot as managed Software.

      Assignable

      The assignable tab now has two potential actions: Quick Assign and Assign. Quick Assign will immediately create a deployment targeting the primary person (if present) or the computer. A detection only session will also start immediately to determine the current state of the software. Assign will open the New Deployment Page and allow you to create a new assignment for the software. Quick assign is currently only available for software that do not have a configuration task or a license.

      image

      Assigned

      The assigned tab now provides 3 potential actions: Action to take (Install, Update, Enforce, etc), Re-run detection (refresh icon), and Manage (edit deployment)"

      image

      Improvements and Bug Fixes

      • Added ability to bulk delete tenants and associated data from the tenant list page
      • Added a new system preference "Allow Non-Admin Users To Manage Deployments". This is enabled by default.
      • Removed company column from dashboard table and excel export if the target is a single company
      • Updated the dashboard excel export file name to <company> Computers - <date>.xslx when the target is a single company
      • Added result reason to dashboard table and excel export
      • Reworded Action Success to Compliant, Failed, to Non-Compliant, and Missing to Not Found
      • Allowed schedules to target tenant maintenance tasks
      • Allowed the dashboard to target tenant maintenance tasks
      • Uninstalls using the vendor's uninstall string now check to ensure that the uninstall string is using /X and not /I and appends /qn (quiet) if it is missing.
      • Fixed a bug in metascripts where write-warning "some text" was not outputing anything to the console
      • Improved performance of running multiple maintenance sessions at the same time
      • Fixed a bug where uninstalling by MSI uninstall string was failing if the semantic version stored in the registry was not a valid semantic version
      • Fixed a bug with the primary person dropdown where it was limiting results to 1 and including people from any tenant.
      • Fixed a bug when running cloud scripts where it would fail because "the computer is not online"
      • Fixed an issue with repairs not triggering the configuration task or software dependencies
      • Fixed issues with being unable to cancel old maintenance sessions
      • Several other small QOL improvements throughout the codebase
      • Fixed bug where ImmyAgent Service stops immediately when stop is requested from the Windows Services

      0.41.13

      Released 2021-04-13

      Bug Fixes and Improvements

      • Fixed issue where non-strings weren't being passed into $using variables with Invoke-ImmyCommand { }
      • Fixed a null reference exception that could occur when performing an action for a maintenance task on the computer software table.

      0.41.12

      Released 2021-04-12

      Bug Fixes and Improvements

      • Improved the performance of a poor performing SQL query that populates the "Needs Attention" section of the computer details page

      0.41.11

      Released 2021-04-09

      Bug Fixes and Improvements

      • Improved performance of loading computers on the Deployment Details page
      • A schedule can now specify whether it will "Apply Windows Updates". Note If the schedule is limited to a specific software or maintenance task, then windows updates will not be applied.
      • Made minor improvements to BITS transfers
      • Fixed issue with Chocolatey latest version allowing prereleases
      • Fixed a bug causing maintenance task files to fail downloading

      0.41.10

      • Skipped

      0.41.9

      Released 2021-04-08

      Bug Fixes and Improvements

      • Now auto preselects MSP tenant when creating a new person and the user is an MSP user
      • Auto navigate back to Person List when creating/updating a person
      • Added a link to Microsoft documentation on how to obtain a user's Object ID
      • Added filtering to Stages column on the maintenance session table image
      • String variables passed into a remote runspace now get expanded automatically just like running normal scripts, preventing the need to run ExpandString on variables containing paths like $InstallerFile and $InstallerFolder
        • powershell
          Invoke-ImmyCommand {
               # This is no longer necessary
               $InstallerFile = $ExecutionContext.InvokeCommand.ExpandString($using:InstallerFile)
               # You can now use $using:InstallerFile directly
          diff --git a/assets/releases-2021.md.DilWLwmP.lean.js b/assets/releases-2021.md.BS1iS6In.lean.js
          similarity index 67%
          rename from assets/releases-2021.md.DilWLwmP.lean.js
          rename to assets/releases-2021.md.BS1iS6In.lean.js
          index 15839a71..663d5ac4 100644
          --- a/assets/releases-2021.md.DilWLwmP.lean.js
          +++ b/assets/releases-2021.md.BS1iS6In.lean.js
          @@ -1 +1 @@
          -import{_ as e,c as a,o as t,a6 as i}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Releases in 2021","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2021.md","filePath":"releases-2021.md"}'),o={name:"releases-2021.md"},n=i("",674),s=[n];function r(l,d,h,c,u,m){return t(),a("div",null,s)}const b=e(o,[["render",r]]);export{g as __pageData,b as default};
          +import{_ as e,c as a,o as t,a6 as i}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Releases in 2021","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2021.md","filePath":"releases-2021.md"}'),o={name:"releases-2021.md"},n=i("",674),s=[n];function r(l,d,h,c,u,m){return t(),a("div",null,s)}const b=e(o,[["render",r]]);export{g as __pageData,b as default};
          diff --git a/assets/releases-2022.md.CEQr6RBa.js b/assets/releases-2022.md.HDb-adly.js
          similarity index 99%
          rename from assets/releases-2022.md.CEQr6RBa.js
          rename to assets/releases-2022.md.HDb-adly.js
          index 4ee8d87f..a521a4c0 100644
          --- a/assets/releases-2022.md.CEQr6RBa.js
          +++ b/assets/releases-2022.md.HDb-adly.js
          @@ -1 +1 @@
          -import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Releases in 2022","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2022.md","filePath":"releases-2022.md"}'),n={name:"releases-2022.md"},o=a('

          Releases in 2022

          0.54.7

          Released 2023-01-04

          Improvements

          • Improved error messages when the error is coming from an integration's API, such as the CW Automate API, CW Manage API, or CW Control ImmyBot extension API.
          • Added manufacturer to duplicate agent table
          • Added Device ID to the computer overview details

          Bug Fixes

          • Fixed a potential issue where a computer architecture could not be found while trying to resolve a dynamic software version
          • Fixed a transient issue that was causing detection to fail when it could have continued
          • Fixed an issue where pending connectivity sessions would not be triggered for a computer that came online due to a manual resolution for a conflicting agent
          • Fixed an issue during identification where the device id of "00000000-0000-0000-0000-000000000000" was allowed as a valid GUID. It is not valid, and new devices with this GUID will be assigned a new one.

          0.54.6

          Released 2022-12-27

          Improvements

          • Only MSP Admins have access to the Tenant Mappings tab now

          Bug Fixes

          • Fixed an issue where schedules with an invalid cron expression were allowed to be saved
          • Existing invalid cron expressions will be converted to a valid cron expression when possible, using NCronTab validation functions.
          • Fixed an issue where system and user scripts could possibly timeout before an ephemeral agent was ever established
          • Fixed an issue with downloading the immy agent installer as an .iso file
          • Fixed an issue preventing computers from being deleted
          • Mitigated an issue with N-Central which eventually resulted in N-Central hangs and crashes
          • Fixed a transient issue related to starting Ephemeral Agents on some N-Central devices the first time

          0.54.5

          Released 2022-12-22

          Bug Fixes

          • Fixed an issue with deleting actions that caused sessions to fail
          • Fixed an issue saving some database calls due to issues from the migration to flex database servers
          • Fixed an issue with saving scripts that incorrectly fail with a message that the name is not unique

          0.54.4

          Released 2022-12-19

          Improvements

          • Added bulk cancel and bulk rerun buttons to the maintenance session list page Added Split-Path cmdlet as well as $ActionId, $SessionId and $SessionGroupId to the included variables
          • Improved Ephemeral Agent connection speed
          • Discontinued use of WMI CreateProcess which flags AV, specifically Windows Defender for Endpoint
          • Made modifications to the light color theme to improve readability

          Bug Fixes

          • Fixed several issues with the NCentral integration. Should be more stable overall.
          • Fixed an issue where preview/deploy from the dashboard table header were not getting enqueued and would crash instances by running too many sessions as once.
          • Fixed an issue with saving local software versions where it would respond with an error about certain fields being required when they shouldn't be
          • Fixed an issue with the Stop-ImmySession cmdlet where it was not setting the session or stage status to Cancelled
          • Fixed issues with our BITS download where it could get potentially stuck trying to download when an ephemeral agent could not be established
          • Fixed an issue with computers getting set to needs onboarding incorrectly when an agent gets assigned to an existing computer that is not new
          • Centered the text in the "Session #xxx in progress" button
          • Fixed an issue with saving the SMTP form
          • Fixed an issue where session logs could repeat "Reboots have been suppressed during business hours" over and over

          0.54.3

          Released 2022-11-23

          Improvements

          • Improved enqueueing of maintenance sessions based on priority. Adhoc > Onboarding > Scheduled maintenance
          • Removed service bus form options for CW Control as the service bus is now always used
          • Added a health check to the CW Control integration to report unhealthy when the extension is not up to date
          • Updated the connected indicator on the computer details page to have a yellow lightning bolt when the ephemeral agent is connected
          • Scripts are now allowed to run for computers that have an ephemeral agent connected even if the agents all report disconnected
          • Updated the batch actions on the tenant list page to include tenant preferences. e.g. You can now update tenant business hours in bulk
          • Clicking "Attempt Identification Again" or "Rety x failed agents" on the identification tab now immediately triggers identification where before it would take up to 60 seconds

          Bug Fixes

          • Made computer feature usage calculator no longer count computers that have zero agents
          • Fixed a race condition in the Ephemeral Agent that would cause scripts to hang and sessions to timeout

          0.54.2

          Released 2022-11-17

          Improvements

          • Improved our identification de-dupe logic to automatically associate re-installed agents to the correct computers
          • Added more identification logs for some edge case scenarios to help with debugging
          • Added onboarding text to dashboard underneath onboarding computers
          • Slightly improved performance of preview/deploy functionality on the dashboard page
          • Increased the width of the tag selector in the ImmyBot Installer form and on the computer details page

          Bug Fixes

          • Fixed some issues where newly identified agents would always skip onboarding
          • Fixed an issue where non-msp admins could not view tag deployments limited to their tenant
          • Added missing times to the time dropdown for scheduling adhoc deployments
          • Fixed descriptions on the maintenance task get/set/test script dropdowns
          • Fixed some mobile styling issues with the navigation bar and on computer list page

          0.54.1

          Released 2022-11-14

          Bug Fixes

          • Fixed an issue with CW Control syncs causing CW Control agents to re-sync into ImmyBot unnecessarily

          0.54.0

          Released 2022-11-11

          CW Control Updates

          We added support for the breaking changes introduced in CW Control 22.9. We addressed stability issues with Control crashing due to the ImmyBot extension. On the Control integration form, make sure you check off the new options for using the Service Bus for better performance.

          Pending Identification Updates

          Agent identification now has logging to help you find root causes for why some agents fail to have scripts run against them. View them in Computers -> Pending Identification -> Show Identification Logs

          You can also see the identification logs for successfully identified agents under the Computer -> Agents tab.

          We now utilize the serial numbers for devices that come from trusted manufacturers (currently Lenovo, Dell, and HP). If a computer already exists in ImmyBot for a trusted manufacturer, any additional agents with that computer's serial number will skip identification and automatically be associated.

          Improvements

          • Fixed issue where Intellisense would throw null reference exception when completing variables
          • Updated CW Control integration to support CW Control 22.9 (extension version 0.3.0)
          • Added immy subscription information to billing details page
          • Made subscription portal show within immy frontend instead of a link to chargebee
          • Updated the default combined maintenance task script to leverage the latest function scripts in Immy. The new script is Get-WindowsRegistryValue -Path "HKLM:\\Software\\Wow6432Node\\MySoftwareVendor\\MySoftware" -Name EnableFeature | Registry-ShouldBe -Value 1
          • License files are now downloaded before running a configuration task's test script during detection in case the script relies on the presence of the license file
          • Added a new tenant preference "Exclude from Cross-Tenant Deployments and Schedules". When a tenant is excluded, all cross-tenant deployments and schedules targeting the tenant or its computers will not be applied when full maintenance is ran. This is particularly useful for Co-Managed IT situations that don't don't want your cross-tenant schedules or deployments.
          • Improved startup time of instances in situations where there was a large number of recently added agents
          • Added "Change Tenant" in batch actions for the computers table

          0.53.12

          Released 2022-11-09

          Bug Fixes

          • Removed the ImmyBot Agent from the Tenant -> Mappings table
          • Reduced metric reporter frequency to 30 minutes

          0.53.11

          Released 2022-10-20

          Bug Fixes

          • Fixed a null reference exception that was occurring when sending the maintenance session follow-up email
          • Fixed a potential exception that could occur in the N-Central API
          • Fixed an exception that occurred when trying to retrieve the online agents for a computer
          • Fixed an uncommon issue where some dynamic version scripts were throwing a null reference exception
          • Fixed an uncommon exception with ImmyBot Agent connection events that caused the event to not get saved
          • Fixed an issue with syncing devices from CW Automate where it would potentially take a few minutes and block other requests
          • Fixed an issue where some CW Control and N-Central agents were not automatically onboarding when they should
          • Fixed issue where Get-ImmyComputer -InventoryKeys metascript was not auto populating the available keys
          • Fixed an issue with incorrect breadcrumbs sometimes showing on the computer list page
          • Added a missing debug log that indicates when an ImmyBot agent fails to provide inventory data
          • Fixed a bug where we were dropping both dedupe markers over the same agent instead of different agents
          • Fixed an issue with maintenance sessions reporting failed after re-running an action successfully
          • Fixed an issue where loading the deployments list would throw a ArgumentNullException
          • Fixed an issue with some Chocolatey and Ninite logs not showing up under a maintenance action's phases

          0.53.10

          Released 2022-10-05

          Bug Fixes

          • Fixed an issue with displaying large software icon sizes on the Library -> Ordering page

          0.53.9

          Released 2022-10-05

          Improvements

          • SVGs now render correctly when uploaded as software icons
          • Increased some low timeout values on the ephemeral agent that were causing devices with slow network connections to fail
          • Changed the Pending Identification tab to default sort descending by Date Added since the most recent machines are the ones we are usually looking for.

          Bug Fixes

          • Fixed an issue with the ImmyBot Agent connected/disconnected events not propagating for pc reboots and pending connectivity sessions
          • Reduced likelyhood of Output CircularBuffer has already over-run requested index error in scripts
          • Ephemeral Agent reconnection is now prevented upon receiving a 500 status code. This was previously causing agents to stay running indefinitely.
          • Fixed an issue on the system update page where the new releases dropdown was not stretching the width like the current release dropdown

          0.53.8

          Released 2022-9-22

          Improvements

          • The "Suppress Reboots During Business Hours" flag no longer relies on offline behavior. If you are suppressing reboots during business hours and you run a session during business hours, then Immy will suppress reboots. Business hours are now checked on every script execution, and the RebootPreference variable passed to scripts will also be updated to Suppress if it was not already set. We did this so that scripts that handle reboots can safely rely on this variable.
          • The customer list on the Azure page no longer shows the MSP tenant as a selectable option in the Linked Tenant dropdown since the MSP tenant is mapped by default
          • Refactored how we handle ImmyBot agent connected and disconnected events. Instances that heavily utilize the ImmyBot agent will have significantly improved performance.
          • The Enable Automatic Onboarding field on the PPKG form is now disabled and shows an alert if the onboarding preference is globally disabled or disabled for the selected tenant.

          Bug Fixes

          • Fixed an issue with loading the AzureAD module for metascripts. This issue was causing all scripts that relied on AzureAD commands to fail.
          • Fixed an issue where syncing the connected state of large numbers of ImmyBot agents would prevent other system jobs from being performed
          • Fixed an issue where configuration tasks for already compliant software were executing at the very end of a maintenance session instead of in the expected order
          • Fixed an issue where the default upgrade strategy was set to none instead of install over
          • Fixed a permission issue where non-admins could not refresh the connectivity status of a computer
          • Fixed an issue with downloading the ImmyAgent installer as an .iso file where the extension was incorrectly set to .ppkg
          • Fixed an issue where software set to perform an update would incorrectly report compliant when the software did not specify an upgrade strategy and the upgrade was never performed. The action will now fail and report "Upgrade failed: No Upgrade Strategy specified on the software."
          • Fixed an issue with maintenance action execution ordering. If the currently executing action has dependencies, it will now immediately execute the dependencies instead of waiting until the end of the session.
          • Fixed an issue with selecting a license on the deployment details page where the selected license was not shown upon refreshing

          0.53.7

          Released 2022-09-14

          Improvements

          • Increased the timeout of the Ephemeral Agent's Ping RPC method from 1 second to 5 seconds. 1 second was too short and was unnecessarily causing scripts to fail on machines with high network latency.
          • Added a warning message whenever the Ephemeral Agent's Ping RPC method takes over 1 second to respond to help identify machines with high network latency

          Bug Fixes

          • Fixed an issue with schedules where updating a schedule from a single tenant to cross tenant would delete the schedule. This was happening due to a bug in a database constraint between schedules and tenants.
          • Fixed an issue where the connectivity status button on the computer details page was not actually refreshing the agent's connectivity status
          • Fixed an issue where repairing a software would trigger full maintenance

          0.53.6

          Released 2022-09-12

          Improvements

          • Added Set-ImmyDeviceId cmdlet to be used during Inventory to keep the UUID of the machine up to date and prevent new computers from getting created when the UUID of the machine has changed due to a feature update.

          Bug Fixes

          • Fixed an issue where the "Determine Desired Version" phase was running before the "Detect Installed Version" phase. "Detect Installed Version" needs to run first so we can pass the detected version to scripts that may rely on it when determining the desired version.
          • Fixed an issue where dynamic versions were not properly installing dependent versions

          0.53.5

          Released 2022-09-09

          Bug Fixes

          • Fixed an issue from 0.53.4 where some code changes were unintentionally included in the release which caused downloading the PPKG to fail

          0.53.4

          Released 2022-09-08

          Improvements

          • For maintenance task test scripts, we made Immy tolerant of non-Boolean values by displaying a warning when non-Booleans are found on the pipeline along with helper text for preventing output pollution.
          • Updated the ImmyBot Agent to support installing beta versions

          Bug Fixes

          • Fixed a scripting error that caused Immy to indicate there was no output when there was definitely output

          0.53.3

          Released 2022-08-30

          Software Test Script Changes

          We now execute the software test script during the detection stage for software that have updates available.

          Before, if a software needed to be upgraded, we would not run the software's test script in detection. We would perform the upgrade and then run the test script afterwards. However, if the test failed, the action would fail without any remediation.

          Now, if a software needs to be upgraded, and it has a test script, the test script will run in detection. If the test script fails, then the repair strategy will be performed instead of the upgrade strategy. The test script will still be run after the upgrade as it did before.

          General Improvements

          • Updated the error text for schedule cron expressions to indicate that a schedule can run at most once per day.
          • The ImmyBot Agent service sometimes throws an exception about a missing file CliWrap.dll, which causes the agent to bork. When we encounter this exception, we now auto restart the service to resolve the issue.
          • Improved the session log message "Detection stage failed: Software Action Id is not specified on the provided configuration task action" to include more information to help diagnose the issue. It is usually because the deployment contains out-of-date data and needs to be updated.
          • Improved the performance of loading the main computer list when sorting by computer name
          • Test methods containing multiple outputs now return the result of ANDing those outputs together to compute the overall result.
          • Updated Quick Deploy to allow you to choose a desired state. e.g. "Install, Uninstall, Update If Found, Ignore" or "Enforce, Monitor, Audit"
          • Added detection of stuck/non-responsive jobs such as the agent identification job, which can initiate a self-restart of backend.
          • Added reboot preference dropdown to quick deploy and override forms
          • Moved several action columns on tables to the left side for consistency and best compatibility with mobile views.
          • Added an option to schedules and adhoc-deplyoments to send detection emails even when all actions are compliant. This is to allow users whose computers are already up to date to still receive a maintenance email.
          • Updated the script list page and session log component to use the Monaco script editor
          • Added the CW Automate icon to the main computer list. Clicking the icon opens up the computer in CW Automate.
          • Added "Date Added" to the computer list and made it sortable
          • Added a simple "new" tag on the computer list for computers that have been added to ImmyBot within the last 24 hours
          • Added an 'X' button to easily remove linked tenants from integrations

          Bug Fixes

          • After a task is created, the Runs Against property is now disabled. Changing this value after it is created can cause issues for deployments that are referencing it.
          • Fixed an issue with Ephemeral Agent resilient script output logic that would fail to re-connect if the script had never had any output prior to connection loss. (Ex. SonicWall VPN installer script)
          • Added missing triggered by text on the session details page when the session was triggered by a schedule or automatic onboarding
          • Fixed a width issue on some dropdown buttons
          • Fixed an issue with the integration client list re-sorting after you link/unlink a tenant

          0.53.2

          Released 2022-08-19

          Bug Fixes

          • Fixed an error that showed on the schedules list when a schedule existed that did not specify a time zone
          • Fixed issue introduced in 0.53.1 where the current immy version stopped displaying in the sidebar
          • Fixed issue introduced in 0.53.1 where the maintenance item ordering page broke
          • Fixed issue introduced in 0.53.1 where showing/adding parameters on the maintenance task page broke
          • Fixed an issue where monitor results were only showing the last line of output instead of all output
          • Fixed an issue where monitor results were overflowing into other components
          • Fixed an issue where re-running actions while showing action details would not displaying logs as they came in
          • Fixed an issue introduced for instances that signed up after the release of 0.53.0 where identification would fail due to some missing database configurations

          0.53.1 (un-published)

          Released 2022-08-18

          Improvements

          • Added a Trigger Now button to the Azure User Sync preference on the preferences page
          • Added a description to the PPKG reset windows checkbox - "Will perform a reset of windows with the remove user data option"

          Bug Fixes

          • Fixed an issue with agent identification where users were seeing the following error - Failed attempt to differentiate existing agent and pending agent: 42883: procedure sp_create_computer_from_agent(integer, uuid, boolean, text, text, text, unknown, boolean) does not exist POSITION: 6
          • Updated the alert of the person list page to match the available actions
          • Fixed an issue where the software configuration task edit link was missing
          • Fixed an issue where the branding logo alt text was still hardcoded to "Immense Networks" instead of the value provided by the branding
          • Fixed an issue with cancelling a detection only session from the computer details page -> software tab.

          0.53.0

          Released 2022-08-16

          UI Improvements

          Dark Mode

          image

          Deploy Software from Dashboard

          image

          Session Details

          imageimage

          Moved commonly used Main Menu items to the top, moved less commonly used items under sub-menus

          image

          Integrations - New look and feel

          image

          Integrations - Embedded Documentation

          image

          Script Editor

          Moved Script items into the left pane

          image

          New Integration - HaloPSA

          Deploy software/tasks to customers with specified recurring invoice items

          New Parameter Type - KeyValuePair

          image

          image

          Improvements

          • ImmyAgent now detects 'dirty' shutdown events of the ImmyAgent with a shutdown.dirty file.
          • Added a description to /schedules "Show Postpone Button" checkbox
          • Improved the integration details page by embedding the integration's documentation
          • Added a button that triggers an immediate Azure AD Sync and a note about automatic Azure AD Sync
          • Started improving the dashboard page. Added the ability to trigger actions for items in the dashboard
          • Added cmdlets Expand-String and New-LiteralString cmdlets to help deal with strings that should or should not be expanded before being sent to a remote machine.
          • Upgraded Intellisense Engine and Monaco Editor to latest versions
          • Moved live chat button to the header navbar so it doesn't potentially block buttons on the page
          • Added 8 new Ephemeral Agent Timeline events
          • Added "Script Bytes Received" metric to system status page
          • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
          • Made minor improvements to the getting started wizard
          • Moved script details into script editor sidebar for convenience

          Bug Fixes

          • ImmyAgent now sends 'online' events when we reconnect to IoTHub from an ungraceful network loss to prevent session hangs after the computer restarts
          • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches
          • ImmyAgent now handles exceptions returned from an instance during registration, and will continually retry instead of shutting down.
          • Fixed a typo in the SMTP port placeholder text
          • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
          • Fixed an issue with checking online/offline status of agents during a session
          • Fixed an issue where a deployment referenced a specific version even when the desired state did not require one. This was causing actions to fail
          • Fixed an issue with displaying the account dropdown on mobile
          • Fixed incorrect tooltip on install Immy agent icon in the computer list
          • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches.
          • Fixed issue where piping to Format-Table would result in an error or no output
          • Remove disabling of Cortana from PPKG builder output, as it is no-longer supported & may break newer OOBE installs.
          • Fixed issue with version restriction selector on License Edit page
          • Fixed issue with licenses deleting when saving a license with no tenant selected
          • Fixed issue displaying Customers on Azure Sync page
          • Fixed an issue with runnable script editor not including the user's tenantId in readonly cloud script editors
          • Fixed agent bug that prevents 'online' event on IoTHub reconnection
          • Fixed agent bug that would cause the agent to not retry transient registration failures
          • Only show Postpone and Update if "start immediately" not checked

          0.52.7

          Released 2022-07-11

          Improvements

          • The script list page now persists your filters after refreshing or leaving the page.
          • Fixed width issues in the maintenance item column on the deployment list page
          • Reduced required permissions for N-Central integration. See the new N-Central integration docs for details
          • Added a new PowerShell cmdlet Stop-ImmySession that will cancel the maintenance session it is currently running in

          Bug Fixes

          • Fixed some potential issues around agent connected/disconnected events
          • Fixed potential N-Central exception with re-sending messages
          • Fixed potential issue with 'missing' devices from N-Central due to possible filter contamination in N-Central

          0.52.6

          Released 2022-06-27

          Improvements

          • Set the default install script for new software to the "Manual Install Script" and the upgrade strategy to "Install Over" whenever we don't have another specific install script to provide
          • Set the default software installer type to "Installer File"
          • Updated the example New-DynamicVersion script
          • We now show a confirmation modal when choosing the "Wiped" option for resolving an agent identification conflict.
          • You can now see Cloud Sessions from the main Sessions list!
          • Added warnings when the ephemeral agent is failing to establish a connection to help users identify causes for failing script execution
          • Fixed an issue with the detection stage stuck running when it fails to execute scripts in the beginning of the stage
          • Improved timeline connected/disconnected events. There were edge cases that would show multiple connects/disconnects back to back.
          • Removed timeline computer online/offline events to avoid confusion. These events were never actually based on a computer coming online or going offline. We simply emitted "online" when an agent connected and happened to be the only online agent. Similarly for "offline" events, we only emitted the event when an agent disconnected and all agents were offline. ImmyBot does not actively check whether a machine is online or offline. It only checks whether it has any connected agents to use. This concept will be further improved upon to help resolve issues with agents incorrectly reporting connected/disconnected.
          • Removed link to software/task on deployment list since people are clicking it thinking it is the edit deployment link
          • Moved the software/task selector back above the target selector on the deployment edit page
          • Removed the media nav item since it's not actually useful

          Bug Fixes

          • Moved "Update If Found" from underneath "Installed" to the same level as "Installed" for clarity. A software can be "installed, uninstalled, ignored, or updated if found"
          • Fixed an issue with cloud task previews failing with "device offline"
          • Fixed an issue where the ImmyBot agent update action would not run when the agent was offline
          • Fixed an issue with the agent updates stage, onboarding stage, and resolution stage not honoring pending connectivity
          • Fixed an issue where the resume and cancel session buttons were incorrectly showing for postponed sessions
          • Fixed an issue with CW Control and CW Automate health error messages excluding important details that can help diagnose the problem
          • Fixed an issue where we were not checking if a configuration task is actually marked as a configuration task. This resulted in tasks getting run when they should not have.

          0.52.5

          Released 2022-06-13

          N-Central Beta Updates

          • Fixed an issue with exceptions that may occur inside the N-Central device-sync job causing memory to bloat
          • You can now get registration tokens from the NCentral integration via new PSCmdlet Get-NCentralRegistrationToken

          image

          Other Improvements

          • Under "Preferences", the description of the User Affinity Sync feature says it will run every 4 hours; this is incorrect. Verbiage was changed to indicate it will run every 24 hours.
          • On the integration details page, a confirmation modal has been added when clicking the "Bulk create tenants..." button to prepare users that this will cause code execution for linked clients.
          • Added more improvements to online/offline agent handling during maintenance sessions
          • Updated the online/offline event receiver for CW Control to return immediately in an effort to close requests faster

          0.52.4

          Released 2022-05-31

          Improvements

          • Removed unnecessary checkboxes from the Computers table on the "Edit Schedule" page
          • Immy live chat now supports screenshare! Immy support can now request access to view your screen to help resolve issues faster.

          Bug Fixes

          • Fixed an issue with the maintenance email actions requiring authentication

          0.52.3

          Released 2022-05-27

          Improvements

          • ImmyAgents no longer need to see a valid board serial number in order to complete registration or rekey. Instead, ImmyAgent may fall back on and rely on an 'ImmyHWID' (Immy hardware id), when a board serial is not available. ImmyHWIDs are derived from CPU, BIOS, MOBO, GPU, and TPM information where available.
          • Updated maintenance sessions to listen on agent connected/disconnected events instead of computer online/offline events which have faster responses and higher success rates
          • When a new agent comes into ImmyBot, we now kick off the identification job immediately if it isn't already running in an effort to speed up identification
          • Added session logs for dependencies indicating what they are for. e.g. Software A depends on Software B → If not installed then install.
          • The actions in the maintenance email (Reboot Now, Update Now, and Postpone), now link to a form on the ImmyBot instance instead of linking directly to the backend api. The reason for this is because some spam filters will automatically follow links in an email, which has accidentally caused computer reboots. Moving the link to a form allows spam filters to no longer be able to trigger the action automatically.

          Bug Fixes

          • Fixed an issue causing the computer details page to sometimes not load
          • Fixed an issue with the ImmyAgent rekey request not being received
          • Fixed an issue where Get-ImmyComputer was incorrectly reporting offline
          • Fixed an issue where configuration file parameters were not being downloaded when the configuration task did not have any enabled scripts
          • Fixed an issue with displaying the dependency badges on maintenance actions
          • Fixed an issue with the schedule's day of week selector cutting off the last characters of "Wednesday"
          • Fixed an issue with the CompareTo-ImmyBotVersion metascript
          • Fixed an issue with some maintenance action start times showing "2021 years ago" instead of "Unavailable" when the action never started
          • Bump Azure IoTHub packages to resolve some connection issues with the ImmyAgent

          0.52.2

          Released 2022-05-25

          Ephemeral Agent and Identification Improvements

          • ALL scripts now run through the ephemeral agent, even during identification and computer de-dupe logic 🎉
          • Additional exception information is now visible in Identification Failed tab, and in session output. This furthers insight for users to understand and fix potential reasons why the providers may have failed to run our agent. image
          • Fixed an issue where the date was not being set correctly when adding a AgentIdentificationFailure log, leading the user to think this issue happened at the beginning of time!

          Other Improvements

          • Added computer batch actions button on the tenants -> tenant details -> computers tab
          • You can no longer create a schedule that executes within one hour of detection. This is a safety measure to help prevent reboots during business hours
          • Added a checked to the schedules page for "Execute maintenance immediately after detection" to make it easier for those that do actually want to run execution after detection. When checked, you cannot set the execution time.
          • The schedule list "Next Run" column now sorts correctly and also shows the browser's local "Next Run" time
          • Added clarity to session logs when we are checking if an agent is online
          • Quick deploy actions now use Offline Behavior: Apply on Connect
          • Auto onboarding sessions now use Offline Behavior: Apply on Connect
          • Computer list batch actions - Run Maintenance now uses Offline Behavior: Apply on Connect
          • On the schedule details page, renamed "Target Category" to "Runs Against", and changed the options to "Computers" or "Cloud"

          Bug Fixes

          • Fixed an issue with the primary user not being found when sending emails after an onboarding session
          • Fixed an issue with checking off "Send follow-up email" on the onboarding form where it would not actually send the email
          • Fixed an issue with unhealthy integration messages not showing the real error message
          • Fixed an issue with unhealthy integration agents showing on the computer onboarding form
          • Added missing script parameter $LicenseFilePath to detection scripts and configuration tasks
          • Removed maintenance tasks from accidentally showing in the software prerequisite dropdown
          • Updated the computer batch actions sidebar to have better clarity
          • Fixed an issue with loading the deployment list when a deployment existed for a computer or person that no longer existed
          • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was failing if the Tenant didn't have an Azure mapping
          • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was returning an access token for the Tenant instead of the MSP
          • Fixed an issue where some failed sessions were getting marked as pending connectivity
          • Fixed some more issues around offline/online agent detection during sessions
          • Implemented a HTTP Concurrency limit for requests to N-Central to prevent issues with too many requests hitting their backend
          • Fixed an issue with not being able to skip onboarding
          • Fixed an issue with the "Retry X failed computers" where it was re-attempting to identify all failed computers
          • Fixed an issue with "Analyze Installer" not returning any data
          • Fixed an issue with script output in session logs not being truncated to the last 5 lines
          • Fixed an issue with the Immy Agent installation request not reporting whether the integration is disabled or unhealthy

          0.52.1

          Released 2022-05-18

          Bug Fixes

          • Fixed an issue where tag deployments were not resolving during full maintenance
          • Fixed an issue where cloud deployments were not resolving during full maintenance

          0.52.0

          Released 2022-05-18

          Tags

          You can now add tags to computers, and deploy software to tags! Manage tags under the settings link on the sidebar. Tags help in scenarios where workstations are shared by a variety of users and there is otherwise not a common property to target with a filter script.

          Tags can be added to computers as a batch action on the computer list page.

          image

          Tags can also be added to a computer on the details page.

          image

          Tags can be deployed as a cross-tenant target scope.

          image

          Tags can also be deployed as a single-tenant target scope.

          image

          Tags can be added to an ImmyBot installer to automatically set tags for new computers

          image

          Exclude Computer From Maintenance

          You can now specify that a computer be excluded from maintenance. Excluded computers will not be allowed to run any type of maintenance session.

          Settings -> Preferences -> Company Preferences -> Computers Excluded From Maintenance

          or

          Tenants -> Select a tenant -> Preferences tab -> Computers Excluded From Maintenance

          image

          Immy Chat Integration

          Added in 0.51.5

          We added LiveChat to Immy to make it easier for you to get support

          Session Script Execution Improvements

          Before executing a script on a device, we now check if it is online. If it is not online, we verify whether any of its agents are incorrectly reporting online and refresh the status appropriately. If it is still not online, we will wait up to 30 minutes for it come back online. If it is still not online, then we will mark the session as Pending Connectivity (only for Apply On Connect) or cancel the session due to the computer being offline.

          Other Improvements

          • On Immy startup, we now sync the online/offline state of all ImmyBot agents
          • Added an hourly job to pull the latest online/offline state of all ImmyBot agents
          • Updated parts of the frontend codebase with typescript to prevent accidental bugs
          • Improved performance of loading certain pages that relied on fetching clients from a provider
          • On the deployment details page, deploying to over 10 computers will now prompt to confirm this is the action you want to take
          • Active Ephemeral Agents will now prevent Windows from going to sleep to keep sessions from halting
          • A new preference has been added to aid in development of Ephemeral agent, as-well as diagnosing of bugs
          • Added Offline Behavior selector to the computer onboarding form and set the default option to "Apply On Connect"
          • The Run Maintenance button on the computer details page now defaults Offline Behavior to "Apply On Connect"
          • The Run Maintenance button on the computer details and list pages now provide a dropdown for the reboot preference
          • The Run Maintenance button on the computer details and list pages now have a confirmation modal
          • Azure groups now include devices as long as you grant ImmyBot the Device.Read.All permission
          • Azure groups now include all sub groups
          • Improved the action logs and result message for failed dependencies
          • Added a Preferences tab to the Tenant details page
          • Updated PowerShell Editor Services from 3.1.5 to 3.3.5

          Bug Fixes

          • Fixed an issue in the ephemeral agent that prevented the agent from exiting when finished running PowerShell
          • Fixed an issue with uninstall strings in the registry not containing quotes around paths with spaces
          • Fixed an issue where devices with unknown operating systems (non windows) were coming into Immy
          • Fixed an issue where dependencies for software set to update if found would run even if the software was not found
          • Fixed an issue where command line uninstall scripts with spaces in the path were not being wrapped in quotes
          • Fixed an issue where the access request button was not visible when access requests were disabled
          • Fixed an issue where failed dependencies were being removed instead of failed
          • Fixed an issue with the branding preview and test email not showing the mascot name

          0.51.5

          Released 2022-05-06

          Chat with ImmyBot

          • Added a live chat button to ImmyBot as another option for support requests

          Bug Fixes

          • COMMAND LINE WORKS AGAIN! Fixed an issue where Command Line (non-PowerShell) scripts would not run correctly, resulting in software uninstalls not working as expected
          • Fixed an issue where maintenance actions with a prerequisite dependency would not execute after the dependency finished successfully
          • Fixed an issue where Immy support would be unable to regain access after expiration
          • Fixed an issue with the "Show Details" link on the computer software tab not opening
          • Increased the timeout for the ImmyBot Agent to connect from 20 seconds to 60 seconds since setting up the ephemeral agent on some machines may take longer
          • Fixed an issue with configuration tasks not displaying underneath the software action
          • Fixed an issue with configuration tasks not running when using quick deploy

          0.51.4

          Released 2022-04-27

          Deployment List Improvements

          • Removed the button "Show Recommended Deployments"
          • Recommended deployments and the ability to "Approve/Dismiss" them now show up in the list
          • Updated the group by filter and added two new filters.

          image

          Session Log Improvements

          • Made several logs more concise
          • Added action name and stage name to the top level logs
            • image
          • Checking the box to the left of actions do a better job of filtering to the relevant logs for that action
            • image

          Bug Fixes

          • Fixed a performance issue with a timeline events database query
          • Fixed an issue that was causing the Ephemeral Agent to not extract on machines running Windows PowerShell 4 or below
          • Fixed issue where ImmyBot would not verify dependencies for software that is already compliant

          0.51.3

          Released 2022-04-21

          Bug fixes

          • Fixed an issue with upgrading to 0.51.3 where the instance would fail to start if you had a branding that did not specify a from address (which is now required)

          0.51.2

          Released 2022-04-21

          Branding Updates

          • Added color picker for Text Color and Table Header Text Color
          • Branding Logo and Mascot images are now optional
          • Added live branding preview

          image

          Other Improvements

          • Added more details such as the reboot preference to the session details page. Also added a snazzier stage indicator.
            • image
          • Changed access request default options to Three Days and Admin
          • Maintenance Tasks now have the "Ignore" option just like software and will take precedence over other deployments for the same task and target group.
          • Added desired software state "Any" as an available option for software that use dynamic versions
          • Maintenance emails no longer show software actions that have a desired state of "Update If Found" and no detected version.

          Bug Fixes

          • Fixed an issue with saving a tenant's default time zone
          • Fixed an issue with the software/task selector not correctly selecting tasks on the schedule and dashboard page
          • Fixed an issue with chocolatey items not showing in the software/task selector
          • Removed ability to use metascripts to define schedule targets (since metascripts do not resolve to list of computers)
          • Fixed an issue with configuration task file parameters not getting downloaded before the software's action runs
          • Fixed an issue where the Cloud Script execution context was not selected by default when creating a new dynamic version script from a software
          • Handled some common application initialization failures more gracefully
          • Fixed an issue with metascripts being able to override certain variables that were automatically provided.

          0.51.1

          Released 2022-04-12

          Integration Health

          Integrations can now have a health status of Healthy, Degraded, Unhealthly, or Disabled.

          • Healthy: All is well
          • Degraded: Started experiencing issues in the last few minutes
          • Unhealthy: Consistently experiencing issues (integration is no longer usable)
          • Disabled: Integration has been explicitly turned off by a user

          Unhealthy integrations will return to healthy automatically when transient issues subside.

          An alert with the latest message is shown on the integration details page.

          image

          A badge has been added to the integration list and on the computer details -> agents tab.

          image

          image

          The "Download ImmyBot Agent Installer" dropdown will now be disabled if the integration is unhealthy or disabled.

          image

          Other Improvements

          • Schedules can no longer be created with cron expressions using a * , - or / in the minute or hour position to help prevent to frequent scheduling.
          • Important: Schedules that are currently using a * , - or / in the minute or hour position will be automatically disabled in this version.
          • Software items in emails show "Up to Date" after successfully updating instead of "Update Available" which causes confusion whether the software has actually updated
          • Quick Assign and Assign actions are no longer disabled when the computer is already running a maintenance session
          • Added OS version after the OS name in the computer details overview info
          • MSP non-admins can now see the recommended deployments on the list page to know that they exist
          • Added detected version to items in the software tab
          • Removed the integration priority table and details since they are no longer applicable
          • When a maintenance session is manually resumed, the name of the user that resumed it now shows up in the logs. Or if it was resumed from an email, then it will indicate that a user clicked the "Update Now" button in the email.
          • Added field for maintenance task notes.

          Bug Fixes

          • Fixed an issue where the dynamic version response was incorrectly cached when the script was shared for multiple software and required different output for each software
          • Fixed an issue where the software detection radio options were disabled and unable to be changed
          • Fixed an issue where the "Skip x onboarding computers" button would disable even if you had computers selected
          • Undid the change that disabled the onboarding tab since it was a bad decision
          • Fixed an issue with slug not saving when creating a tenant

          0.51.0

          Released 2022-04-08

          Onboarding Form: Maintenance Task Parameter Override

          • New checkbox added to maintenance task parameters on the deployment details page: 'Allow override from computer onboarding'

            image

          • The checked parameters will show on the computer onboarding form, allowing the user to override the value just for the onboarding session

            image

          Other Improvements

          • Implemented a Get-Hash cmdlet in the Metascript engine useful for interacting with APIs like NinjaRMM and Mimecast that require HMACSHA1 signatures

          • We moved the Target Selector above the Software / Task Selector on the deployment page since it felt more natural to answer "Who am I creating a deployment for?" before answering "What am I creating a deployment for?"

          • Software Display Name Regex detection now supports capture groups to pull the version

            image

          • Added Azure ID column to the User List page

          • Improved handling of integration API routes

          • Added a "Do not remember" option when overriding an "Update If Found" deployment, and added more options for overriding certain desired states.

            image

          • Added Tenant Slug. $TenantSlug is now exposed for all scripts executed against a computer. You can also conveniently edit the tenant slug directly in the Tenant List.

            image

          • Hid the maintenance item selector behind a checkbox on the schedule details page since it was causing some confusion

            image

          Bug Fixes

          • Fixed an issue where dynamic versions that throw a terminating exception were not displaying the exception message under the maintenance action
          • Fixed an issue with the "New Version" notice not showing up
          • Fixed an issue preventing the Getting Started Wizard modal from showing
          • Fixed an issue with configuration tasks running before the software was deemed compliant
          • Fixed an issue with non-msp users not being able to create configuration tasks from the software details page
          • Fixed various issues with deploying Ninite software
          • Fixed issue with software repair not re-installing software
          • [Global Software Only] Fixed an issue with saving a custom download installer script to a global software
          • Removed double base64 encoding that triggered alerts in BitDefender and Arctic Wolf
          • Fixed the script documentation link
          • Fixed issues with Invoke-ImmyCommand forcing terminating errors instead of honoring the error action preference set by the script
          • Fixed an issue with configuration task parameters not being provided to the test script when run during detection
          • Fixed an issue with loading deployments when you have multiple of the same provider type enabled
          • Fixed issues with loading CW Control, Automate, and Manage target groups on the deployment details page
          • Fixed some exceptions that were occurring when sending emails
          • Removed duplicate "Should not be present" text showing in the maintenance actions list

          0.50.13

          Released 2022-04-1

          Capture Version from DisplayName with Regex

          For software that puts its version in the DisplayName instead of the DisplayVersion field like this:

          image

          You can now use a capture group to capture the version from the DisplayName

          Example

          HexCmp 2.34.1 can be captured with

          regex
          HexCmp (\\d+\\.\\d+)

          Script Editor Improvements

          Within filter scripts, Get-ImmyComputer -InventoryKeys now shows valid InventoryKeys

          image

          0.50.12

          Released 2022-03-29

          Improvements

          • Made the software override options more similar to the quick deploy options
          • The ImmyBot Agent no longer writes and executes scripts from C:\\Windows\\Temp\\ImmyBot.
          • You can now add a Tenant Slug under the "Edit" tab on the Tenant Details page. This value is exposed as the variable $TenantSlug for scripts that run against this tenant's computers.

          Bug Fixes

          • Fixed an issue preventing the 'Getting Started Wizard' from showing
          • Fixed an issue with non-MSP users not being able to create configuration tasks from the software details page
          • Fixed an issue with the 'New Version' notice not showing up
          • Fixed an issue with configuration tasks running before the software was deemed compliant
          • Fixed an issue where dynamic versions that threw a terminating exception were not displaying the exception message under the maintenance action

          0.50.11

          Released 2022-03-21

          Improvements

          • Added ability to choose "install" when overriding "update if found" deployments on the quick deploy form

          Bug Fixes

          • Fixed an issue where deployments with the same target type were resolving "update if found" as a higher priority than "latest version"
          • Fixed an issue where scripts run in Control were visible in the Commands tab
          • Fixed an issue where registry manipulation scripts would fail with ProviderNotFound: Microsoft.PowerShell.Core\\Registry

          0.50.10

          Released 2022-03-14

          Intellisense Improvements

          Intellisense no longer restarts when syntax error is detected.

          Quickfix Actions work

          image

          image

          No more duplicate definition on hover

          image

          Bug Fixes

          • Fixed an issue with downloading ImmyBot Agent EXEs which would intermittently fail
          • Fixed an issue where an unreachable integration could cause ImmyBot background jobs to not start up correctly
          • Fixed a null reference that could occur when re-running a maintenance action
          • Refactored some ephemeral agent PowerShell code for easier testing

          0.50.9

          Released 2022-03-08

          Bug Fixes

          • Fixed a bug that was causing new instances of Immybot to crash when starting up

          0.50.8

          Released 2022-03-04

          Onboarding Deployments

          The Onboarding target type has been moved to a separate checkbox so that you can limit deployments to onboarding only AND use the target type filters.

          ImmyAgent Improvements

          Updated internal infrastructure to utilize our new extended verification code-signing certificate.

          We currently sign:

          1. ImmyAgent executable & MSI/EXE/PPKG Installers
          2. Ephemeral Agent executable
          3. Static PoSH run on computers

          In addition to being more secure, this ensures our software is no-longer flagged by SmartScreen.

          IMPORTANT NOTE

          Customers utilizing software such as ThreatLocker MUST ensure our new certificate is whitelisted, as our new EV cert required "LLC" to be present on our CN and O.

          image

          Bug Fixes

          • Improved exception handling during maintenance sessions
          • Fixed an issue with re-running cloud scripts from a session log where it would throw an exception
          • Fixed some performance issues and improved caching of function scripts

          0.50.7

          Released 2022-02-25

          Maintenance Task Serial Execution

          A maintenance task now has the option to "Execute Serially".

          When checked, this maintenance task is guaranteed to only have one instance active at a time.

          e.g. If three maintenance sessions have an action for a maintenance task that executes serially, then one session will execute the maintenance task while the other two wait for it to complete. Once the first completes, the second will execute. Once the second completes, the third will execute.

          This is useful for maintenance tasks that rely on the state of subsequent executions.

          Other Improvements

          • Added a Status and Types column to the CW Manage client list on the integration details page so you can easily filter your list to clients you want to create tenants for. Also made the Linked Tenants column filterable to "Linked" or "Not linked". The Bulk create tenants for unassigned clients is now Bulk create tenants for filtered unassigned clients and will only bulk create tenants for those visible rows matching the table filters.
          • Added checks to ensure that the identification job is running properly

          Bug Fixes

          • Fixed an error that was preventing the computer overview page from loading
          • Fixed an issue with scripts running multiple times if you opened, closed, and re-opened a script editor
          • Fixed issues with the CW Control integration not updating the device name, os name, and serial number of the agent

          0.50.6

          Skipped

          0.50.5

          Released 2022-02-18

          Improvements

          • Updated ImmyBot from dotnet 5 to dotnet 6
          • Non-existent items on the deployment ordering page are now automatically removed
          • Added description below the "Suppress reboots during business hours" checkbox to indicate that it is only applied for maintenance sessions that resume after a device comes back online
          • Deployments can now be disabled which will exclude them from being applied during full maintenance sessions. This can be useful if you want to stop a deployment from happening without deleting it.
          • ImmyAgent PPKG's should now work on Windows Home editions
          • Improved the load time of the maintenance session list for instances that have 1+ million sessions

          Bug Fixes

          • Removed unnecessary device online check when running metascripts through the script editor
          • Fixed issue with parameters not getting provided to scripts that are re-run from maintenance session logs
          • Fixed a format exception that occurred when attempting to schedule adhoc deployments to run after midnight
          • Fixed a null reference exception thrown when using the "Limited" option on the "Software Access Level" field
          • Fixed issue with the "Last logged on user" fields not showing on the computer overview tab
          • Updated the error text of user scripts to indicate whether or not there is currently a logged in user
          • Fixed an argument exception that occurred when trying to uninstall a software by product code
          • Fixed an internal issue with migrating items to global
          • Fixed an issue with maintenance action timeline events that was preventing them from showing in the list
          • Fixed a bug where cancelling scripts from the editor would not close the PowerShell stream reader
          • Updated broken links to https://docs.immy.bot
          • Fixed a poor performing query with instances that have millions of maintenance sessions
          • Fixed issue allowing you to click the install Immy agent button on computers that did not have an online agent to install it with
          • Fixed issue where local accounts created by the PPKG were not being hidden
          • Fixed potential issue where local accounts created by the PPKG were not being added to the local administrators group if the local administrators group name wasn't called 'Administrators'

          0.50.4

          Skipped

          0.50.3

          Released 2022-02-11

          ImmyBot Agent Updates

          • Fixed a bug where agent installers that were created before 0.50.0 were failing to register on new devices
          • Increased the verbosity of logging during agent installation for easier debugging
          • Fixed a null reference issue occurring on startup
          • Updated the MSI uninstallation to remove the config.json and registration.json files located under C:\\ProgramData\\ImmyBotAgentService.

          Improvements

          • Increased the Ephemeral Agent named-pipe connection timeout from 10s -> 60s to allow computers with extremely poor PowerShell initialization time likely due to system issues to still run scripts
          • Added software / task descriptions to deployment details page and license details page. The descriptions are accessible by clicking the the question mark button

          Bug Fixes

          • Fixed an issue where filter scripts and software auto update scripts were not showing any output in the script editor
          • Fixed a label issue on tenant category schedules and tenant category deployments
          • Fixed an issue on the schedule details page where the maintenance item selector would should a blank selection by default image
          • Removed unnecessary code that fetched software twice during detection
          • Fixed an issue where the selected computers on the new computers page would de-select automatically
          • Put in an update to the CW Control ImmyBot extension to work on CW Control 21.15+. CW Control 21.15 introduced a breaking change to the API.
          • Fixed an issue where cross tenant device group target types were taking precedence over tenant specific target types

          0.50.2

          Released 2022-02-09

          Bug Fixes

          • Fixed an issue with azure sync job creating duplicate users in the MSP tenant
          • Fixed an issue where a disabled integration could not be deleted

          0.50.1

          Released 2022-02-08

          Improvements

          • When ImmyBot restarts, it will now attempt to restart any maintenance session that was active when it shutdown. Before, it would only attempt to restart scheduled sessions
          • Restarting maintenance sessions should now be idempotent. If an action was running when the backend rebooted, then it will be restarted.
          • Removed some thread blocking code to improve performance

          Bug Fixes

          • Fixed issue with Microsoft.PowerShell.Security functions not found in metascripts
          • Fixed an issue with "Uninstall By Package Info" failing to uninstall via product code
          • Fixed an issue where pending connectivity sessions were not triggering for computers that had exactly one agent

          0.50.0

          Released 2022-02-07

          Intellisense (beta)

          Intellisense can be enabled on the application preferences page (disabled by default). Having intellisense inside the script editor is going to make your life much easier when it comes to writing ImmyBot scripts.

          This feature is considered beta and there may be a few bugs present that will be get patched over the next few releases.

          image

          image

          image

          image

          Other Improvements

          • Added navigation link for tenant on the computer overview tab and the maintenance session list
          • Improved performance of filtering maintenance action table and dashboard results
          • Improved performance for instances that have a large number of ImmyBot agents by optimizing some database calls
          • Added compression support for JavaScript and CSS assets to decrease the initial page load time

          Bug Fixes

          • Fixed an issue with some deployments not resolving to computers that are auto-onboarding
          • Fixed an issue where clicking Include Offline in the Onboarding computer list would be de-selected after 5 seconds
          • Fixed an error that showed on the tenant details page for ImmyWorkbench instances that do not have schedules enabled

          0.49.9

          Released 2022-02-02

          Improvements

          • Inventory during a maintenance session now runs before resolving deployments since a deployment may rely on inventory data. e.g. Filter Scripts

          0.49.8

          Released 2022-01-27

          Bug Fixes

          • Fixed a bug with quick deploy where maintenance actions were failing due to Parameter <X> is marked required... and no value has been set

          0.49.7

          Released 2022-01-26

          Improvements

          • General cleanup/refactoring to improve performance
          • Added an index that improves some maintenance session queries

          Bug Fixes

          • Fixed an issue with uploading licenses and software installers with users who have names that contain non-Latin1 characters
          • Fixed an issue where failed audit tasks were showing as compliant
          • Fixed an issue where the maintenance item selector was not showing correct results for the Tenant target category
          • Fixed an issue uploading an MSI where the Uninstall MSI By ProductCode script was being used on the software instead of the correct Uninstall MSI By UpgradeCode. The Uninstall MSI By ProductCode is now set on the software version. The software upgrade strategy is also defaulted to install/over instead of none.
          • Fixed several issues around script timeouts and memory management
          • Fixed an issue with some slow computer list queries
          • Fixed an issue with software test scripts causing detection to fail due to missing required maintenance task parameters

          0.49.4

          Released 2022-01-19

          Improvements

          • Significantly improved performance of re-initializing maintenance sessions upon the server starting up
          • Immy will now wait for one or more of a device's agents to reconnect when the device goes offline while attempting to run a script

          Bug Fixes

          • Fixed an issue with application restarts taking a long time to re-enqueue pending maintenance sessions
          • Fixed an issue with some exceptions that occur in maintenance sessions causing the sessions to be stuck in the "Created" status

          0.49.3

          Released 2022-01-18

          Improvements

          • Reduced the number of concurrent inventory jobs that can run to preserve performance until it can be refactored
          • Delivery of Ephemeral Agents on computers that don't support TLS v1.2 no longer spit out scary looking error. Instead, it now shows a warning that it will fallback to TLS v1.0.

          image

          • Monitor maintenance tasks now run during execution except for previews which still run during detection

          Bug Fixes

          • Fixed an issue with maintenance item specific schedules causing sessions to get stuck in created
          • Fixed an issue with ephemeral agents not working correctly on Win7 x64-era machines
          • Fixed issue with immy version not showing in footer

          0.49.2

          Released 2022-01-18

          Bug Fixes

          • Fixed an issue where scripts run from the editor could throw the error: An item with the same key has already been added. DebugPreference

          0.49.1

          Released 2022-01-17

          Improvements

          • The $VerbosePreference and $DebugPreference in a metascript now get passed down to the computer
          • The top navbar on smaller screen sizes is now accessible from a collapsible button
          • Added docs nav icon linking to https://docs.immy.bot
          • Standardized task verbiage in the UI
          • Added an additional task type filter on the task list page for "All, Computer, Cloud, Configuration"
          • Write-Progress now appends to the session log output
          • Added a health check for when the Hangfire server crashes and fails to restart
          • Changed chocolatey actions to no longer use a hardcoded path C:\\ProgramData\\chocolatey\\bin\\choco.exe. We now retrieve the path by using Get-Command choco -ErrorAction Stop | select -expand Source. This ensures we can run chocolatey when it is not in installed in the default location (Looking at you SyncroRMM).
          • Deployment filter scripts can now utilize function scripts
          • Added license description field
          • Improved performance of resolving azure group deployments

          Bug Fixes

          • Resolved issue where computers running non-English version of Windows could not run any scripts. This issue also prevented successful identification for those computers.
          • Resolved parameters not being passed to user-context scripts
          • Fixed an issue with boolean deployment parameters not honoring false
          • Fixed an issue with adhoc deployments not using the parameters specified on the page
          • Fixed an issue with sessions showing passed when it should show partial passed
          • Fixed issue where duplicating deployments did not copy over the parameter values
          • Fixed issue with [ctrl-s] saving scripts from the editor
          • Fixed a bug where software from deleted deployments were still showing in the assigned software tab
          • Fixed a bug where the ephemeral agent retry logic was being ignored
          • Fixed an issue with the logs panel failing to stay scrolled to the bottom
          • Fixed an issue where inventory session logs were not showing up correctly
          • Fixed an issue where needs attention actions were showing "unavailable" for the date time
          • Fixed word wrapping on maintenance task parameter text
          • Fixed a bug where deployments targeting "All computers / No Filter" would show "Workstations and portable devices" instead
          • Fixed a bug where uploading files for global maintenance tasks would fail
          • Fixed a bug where schedule and deployment provider specific target data was not loading properly

          0.49.0

          Released 2022-01-11

          Improved Performance

          In this release, codenamed "Cheetah" we achieved a 20x improvement in script execution performance through the use of WebSockets, Named Pipes, and removing code that is no longer necessary since the introduction of the Ephemeral Agent.

          We also made restarting machines faster by using the new event driven Wait-ImmyComputer cmdlet when waiting for computers to reconnect after a reboot.

          Apply on Connect

          Problem to solve

          Computers that are offline never receive maintenance. These computers need a way to update when they miss their maintenance window.

          Solution

          You can now specify the offline behavior for computers on schedules and ad-hoc deployments.

          image

          When offline behavior is set to Apply On Connect, a session will get marked as image when the device is offline. When the device comes online, the session will resume.

          image

          Since devices can come online at anytime, the option to Suppress Reboots During Business Hours is checked by default.

          If a device is offline before the detection stage, then it will run the detection stage when it comes online.

          If a device is offline before the execution stage, then it will only run the execution stage when it comes online. It will not re-run detection.

          Maintenance emails are only sent out once regardless if the device goes offline.

          Timeline

          On the computer details overview tab, there is now a section called Timeline that shows particular events that have occurred for the computer.

          image

          The events we are currently showing are:

          1. Agent disconnected
          2. Agent connected
          3. Maintenance action started (only shows if the action required execution)
          4. Maintenance action completed (only shows if the action required execution)

          More events will be added in the future.

          Other Improvements

          • Improved performance of determining desired state of deployments during maintenance
          • Improved performance of some update queries
          • Added a new metascript cmdlet Wait-ImmyComputer that returns as soon as a computer has connectivity
          • Added & Updated Ephemeral Agent connection statistics in 'System Status' page to report data/data-rate metrics about the underlying Ephemeral Agent connection to the backend

          Bug Fixes

          • Fixed an issue where software download scripts were timing out after 60 seconds if the script didn't specify its own timeout
          • Fixed an issue where changes made to a configuration task parameters from the software page were not saving
          • Fixed issues displaying incorrect text in the target type column on the deployment and schedule list pages
          • Fixed a bug where you could not remove a software download script
          • Fixed a bug with Add-UriQueryParameter where it did not accept array values or parse existing parameters
          • Fixed an issue with Ephemeral Agent "end-of-stream" response exceptions resulting in termination of stage
          • Fixed various issues with agent connection events and improved performance
          • Fixed an issue where immy agent registrations could cause resource depletion in the backend's IoT service
          • Fixed the timezone selector to show the region to differentiate the options
          • Fixed a bug where dynamic versions could depend on itself and cause an infinite loop

          Releases in 2021

          Go to 2021 releases

          ',441),s=[o];function r(l,d,h,c,u,m){return i(),t("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Releases in 2022","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2022.md","filePath":"releases-2022.md"}'),n={name:"releases-2022.md"},o=a('

          Releases in 2022

          0.54.7

          Released 2023-01-04

          Improvements

          • Improved error messages when the error is coming from an integration's API, such as the CW Automate API, CW Manage API, or CW Control ImmyBot extension API.
          • Added manufacturer to duplicate agent table
          • Added Device ID to the computer overview details

          Bug Fixes

          • Fixed a potential issue where a computer architecture could not be found while trying to resolve a dynamic software version
          • Fixed a transient issue that was causing detection to fail when it could have continued
          • Fixed an issue where pending connectivity sessions would not be triggered for a computer that came online due to a manual resolution for a conflicting agent
          • Fixed an issue during identification where the device id of "00000000-0000-0000-0000-000000000000" was allowed as a valid GUID. It is not valid, and new devices with this GUID will be assigned a new one.

          0.54.6

          Released 2022-12-27

          Improvements

          • Only MSP Admins have access to the Tenant Mappings tab now

          Bug Fixes

          • Fixed an issue where schedules with an invalid cron expression were allowed to be saved
          • Existing invalid cron expressions will be converted to a valid cron expression when possible, using NCronTab validation functions.
          • Fixed an issue where system and user scripts could possibly timeout before an ephemeral agent was ever established
          • Fixed an issue with downloading the immy agent installer as an .iso file
          • Fixed an issue preventing computers from being deleted
          • Mitigated an issue with N-Central which eventually resulted in N-Central hangs and crashes
          • Fixed a transient issue related to starting Ephemeral Agents on some N-Central devices the first time

          0.54.5

          Released 2022-12-22

          Bug Fixes

          • Fixed an issue with deleting actions that caused sessions to fail
          • Fixed an issue saving some database calls due to issues from the migration to flex database servers
          • Fixed an issue with saving scripts that incorrectly fail with a message that the name is not unique

          0.54.4

          Released 2022-12-19

          Improvements

          • Added bulk cancel and bulk rerun buttons to the maintenance session list page Added Split-Path cmdlet as well as $ActionId, $SessionId and $SessionGroupId to the included variables
          • Improved Ephemeral Agent connection speed
          • Discontinued use of WMI CreateProcess which flags AV, specifically Windows Defender for Endpoint
          • Made modifications to the light color theme to improve readability

          Bug Fixes

          • Fixed several issues with the NCentral integration. Should be more stable overall.
          • Fixed an issue where preview/deploy from the dashboard table header were not getting enqueued and would crash instances by running too many sessions as once.
          • Fixed an issue with saving local software versions where it would respond with an error about certain fields being required when they shouldn't be
          • Fixed an issue with the Stop-ImmySession cmdlet where it was not setting the session or stage status to Cancelled
          • Fixed issues with our BITS download where it could get potentially stuck trying to download when an ephemeral agent could not be established
          • Fixed an issue with computers getting set to needs onboarding incorrectly when an agent gets assigned to an existing computer that is not new
          • Centered the text in the "Session #xxx in progress" button
          • Fixed an issue with saving the SMTP form
          • Fixed an issue where session logs could repeat "Reboots have been suppressed during business hours" over and over

          0.54.3

          Released 2022-11-23

          Improvements

          • Improved enqueueing of maintenance sessions based on priority. Adhoc > Onboarding > Scheduled maintenance
          • Removed service bus form options for CW Control as the service bus is now always used
          • Added a health check to the CW Control integration to report unhealthy when the extension is not up to date
          • Updated the connected indicator on the computer details page to have a yellow lightning bolt when the ephemeral agent is connected
          • Scripts are now allowed to run for computers that have an ephemeral agent connected even if the agents all report disconnected
          • Updated the batch actions on the tenant list page to include tenant preferences. e.g. You can now update tenant business hours in bulk
          • Clicking "Attempt Identification Again" or "Rety x failed agents" on the identification tab now immediately triggers identification where before it would take up to 60 seconds

          Bug Fixes

          • Made computer feature usage calculator no longer count computers that have zero agents
          • Fixed a race condition in the Ephemeral Agent that would cause scripts to hang and sessions to timeout

          0.54.2

          Released 2022-11-17

          Improvements

          • Improved our identification de-dupe logic to automatically associate re-installed agents to the correct computers
          • Added more identification logs for some edge case scenarios to help with debugging
          • Added onboarding text to dashboard underneath onboarding computers
          • Slightly improved performance of preview/deploy functionality on the dashboard page
          • Increased the width of the tag selector in the ImmyBot Installer form and on the computer details page

          Bug Fixes

          • Fixed some issues where newly identified agents would always skip onboarding
          • Fixed an issue where non-msp admins could not view tag deployments limited to their tenant
          • Added missing times to the time dropdown for scheduling adhoc deployments
          • Fixed descriptions on the maintenance task get/set/test script dropdowns
          • Fixed some mobile styling issues with the navigation bar and on computer list page

          0.54.1

          Released 2022-11-14

          Bug Fixes

          • Fixed an issue with CW Control syncs causing CW Control agents to re-sync into ImmyBot unnecessarily

          0.54.0

          Released 2022-11-11

          CW Control Updates

          We added support for the breaking changes introduced in CW Control 22.9. We addressed stability issues with Control crashing due to the ImmyBot extension. On the Control integration form, make sure you check off the new options for using the Service Bus for better performance.

          Pending Identification Updates

          Agent identification now has logging to help you find root causes for why some agents fail to have scripts run against them. View them in Computers -> Pending Identification -> Show Identification Logs

          You can also see the identification logs for successfully identified agents under the Computer -> Agents tab.

          We now utilize the serial numbers for devices that come from trusted manufacturers (currently Lenovo, Dell, and HP). If a computer already exists in ImmyBot for a trusted manufacturer, any additional agents with that computer's serial number will skip identification and automatically be associated.

          Improvements

          • Fixed issue where Intellisense would throw null reference exception when completing variables
          • Updated CW Control integration to support CW Control 22.9 (extension version 0.3.0)
          • Added immy subscription information to billing details page
          • Made subscription portal show within immy frontend instead of a link to chargebee
          • Updated the default combined maintenance task script to leverage the latest function scripts in Immy. The new script is Get-WindowsRegistryValue -Path "HKLM:\\Software\\Wow6432Node\\MySoftwareVendor\\MySoftware" -Name EnableFeature | Registry-ShouldBe -Value 1
          • License files are now downloaded before running a configuration task's test script during detection in case the script relies on the presence of the license file
          • Added a new tenant preference "Exclude from Cross-Tenant Deployments and Schedules". When a tenant is excluded, all cross-tenant deployments and schedules targeting the tenant or its computers will not be applied when full maintenance is ran. This is particularly useful for Co-Managed IT situations that don't don't want your cross-tenant schedules or deployments.
          • Improved startup time of instances in situations where there was a large number of recently added agents
          • Added "Change Tenant" in batch actions for the computers table

          0.53.12

          Released 2022-11-09

          Bug Fixes

          • Removed the ImmyBot Agent from the Tenant -> Mappings table
          • Reduced metric reporter frequency to 30 minutes

          0.53.11

          Released 2022-10-20

          Bug Fixes

          • Fixed a null reference exception that was occurring when sending the maintenance session follow-up email
          • Fixed a potential exception that could occur in the N-Central API
          • Fixed an exception that occurred when trying to retrieve the online agents for a computer
          • Fixed an uncommon issue where some dynamic version scripts were throwing a null reference exception
          • Fixed an uncommon exception with ImmyBot Agent connection events that caused the event to not get saved
          • Fixed an issue with syncing devices from CW Automate where it would potentially take a few minutes and block other requests
          • Fixed an issue where some CW Control and N-Central agents were not automatically onboarding when they should
          • Fixed issue where Get-ImmyComputer -InventoryKeys metascript was not auto populating the available keys
          • Fixed an issue with incorrect breadcrumbs sometimes showing on the computer list page
          • Added a missing debug log that indicates when an ImmyBot agent fails to provide inventory data
          • Fixed a bug where we were dropping both dedupe markers over the same agent instead of different agents
          • Fixed an issue with maintenance sessions reporting failed after re-running an action successfully
          • Fixed an issue where loading the deployments list would throw a ArgumentNullException
          • Fixed an issue with some Chocolatey and Ninite logs not showing up under a maintenance action's phases

          0.53.10

          Released 2022-10-05

          Bug Fixes

          • Fixed an issue with displaying large software icon sizes on the Library -> Ordering page

          0.53.9

          Released 2022-10-05

          Improvements

          • SVGs now render correctly when uploaded as software icons
          • Increased some low timeout values on the ephemeral agent that were causing devices with slow network connections to fail
          • Changed the Pending Identification tab to default sort descending by Date Added since the most recent machines are the ones we are usually looking for.

          Bug Fixes

          • Fixed an issue with the ImmyBot Agent connected/disconnected events not propagating for pc reboots and pending connectivity sessions
          • Reduced likelyhood of Output CircularBuffer has already over-run requested index error in scripts
          • Ephemeral Agent reconnection is now prevented upon receiving a 500 status code. This was previously causing agents to stay running indefinitely.
          • Fixed an issue on the system update page where the new releases dropdown was not stretching the width like the current release dropdown

          0.53.8

          Released 2022-9-22

          Improvements

          • The "Suppress Reboots During Business Hours" flag no longer relies on offline behavior. If you are suppressing reboots during business hours and you run a session during business hours, then Immy will suppress reboots. Business hours are now checked on every script execution, and the RebootPreference variable passed to scripts will also be updated to Suppress if it was not already set. We did this so that scripts that handle reboots can safely rely on this variable.
          • The customer list on the Azure page no longer shows the MSP tenant as a selectable option in the Linked Tenant dropdown since the MSP tenant is mapped by default
          • Refactored how we handle ImmyBot agent connected and disconnected events. Instances that heavily utilize the ImmyBot agent will have significantly improved performance.
          • The Enable Automatic Onboarding field on the PPKG form is now disabled and shows an alert if the onboarding preference is globally disabled or disabled for the selected tenant.

          Bug Fixes

          • Fixed an issue with loading the AzureAD module for metascripts. This issue was causing all scripts that relied on AzureAD commands to fail.
          • Fixed an issue where syncing the connected state of large numbers of ImmyBot agents would prevent other system jobs from being performed
          • Fixed an issue where configuration tasks for already compliant software were executing at the very end of a maintenance session instead of in the expected order
          • Fixed an issue where the default upgrade strategy was set to none instead of install over
          • Fixed a permission issue where non-admins could not refresh the connectivity status of a computer
          • Fixed an issue with downloading the ImmyAgent installer as an .iso file where the extension was incorrectly set to .ppkg
          • Fixed an issue where software set to perform an update would incorrectly report compliant when the software did not specify an upgrade strategy and the upgrade was never performed. The action will now fail and report "Upgrade failed: No Upgrade Strategy specified on the software."
          • Fixed an issue with maintenance action execution ordering. If the currently executing action has dependencies, it will now immediately execute the dependencies instead of waiting until the end of the session.
          • Fixed an issue with selecting a license on the deployment details page where the selected license was not shown upon refreshing

          0.53.7

          Released 2022-09-14

          Improvements

          • Increased the timeout of the Ephemeral Agent's Ping RPC method from 1 second to 5 seconds. 1 second was too short and was unnecessarily causing scripts to fail on machines with high network latency.
          • Added a warning message whenever the Ephemeral Agent's Ping RPC method takes over 1 second to respond to help identify machines with high network latency

          Bug Fixes

          • Fixed an issue with schedules where updating a schedule from a single tenant to cross tenant would delete the schedule. This was happening due to a bug in a database constraint between schedules and tenants.
          • Fixed an issue where the connectivity status button on the computer details page was not actually refreshing the agent's connectivity status
          • Fixed an issue where repairing a software would trigger full maintenance

          0.53.6

          Released 2022-09-12

          Improvements

          • Added Set-ImmyDeviceId cmdlet to be used during Inventory to keep the UUID of the machine up to date and prevent new computers from getting created when the UUID of the machine has changed due to a feature update.

          Bug Fixes

          • Fixed an issue where the "Determine Desired Version" phase was running before the "Detect Installed Version" phase. "Detect Installed Version" needs to run first so we can pass the detected version to scripts that may rely on it when determining the desired version.
          • Fixed an issue where dynamic versions were not properly installing dependent versions

          0.53.5

          Released 2022-09-09

          Bug Fixes

          • Fixed an issue from 0.53.4 where some code changes were unintentionally included in the release which caused downloading the PPKG to fail

          0.53.4

          Released 2022-09-08

          Improvements

          • For maintenance task test scripts, we made Immy tolerant of non-Boolean values by displaying a warning when non-Booleans are found on the pipeline along with helper text for preventing output pollution.
          • Updated the ImmyBot Agent to support installing beta versions

          Bug Fixes

          • Fixed a scripting error that caused Immy to indicate there was no output when there was definitely output

          0.53.3

          Released 2022-08-30

          Software Test Script Changes

          We now execute the software test script during the detection stage for software that have updates available.

          Before, if a software needed to be upgraded, we would not run the software's test script in detection. We would perform the upgrade and then run the test script afterwards. However, if the test failed, the action would fail without any remediation.

          Now, if a software needs to be upgraded, and it has a test script, the test script will run in detection. If the test script fails, then the repair strategy will be performed instead of the upgrade strategy. The test script will still be run after the upgrade as it did before.

          General Improvements

          • Updated the error text for schedule cron expressions to indicate that a schedule can run at most once per day.
          • The ImmyBot Agent service sometimes throws an exception about a missing file CliWrap.dll, which causes the agent to bork. When we encounter this exception, we now auto restart the service to resolve the issue.
          • Improved the session log message "Detection stage failed: Software Action Id is not specified on the provided configuration task action" to include more information to help diagnose the issue. It is usually because the deployment contains out-of-date data and needs to be updated.
          • Improved the performance of loading the main computer list when sorting by computer name
          • Test methods containing multiple outputs now return the result of ANDing those outputs together to compute the overall result.
          • Updated Quick Deploy to allow you to choose a desired state. e.g. "Install, Uninstall, Update If Found, Ignore" or "Enforce, Monitor, Audit"
          • Added detection of stuck/non-responsive jobs such as the agent identification job, which can initiate a self-restart of backend.
          • Added reboot preference dropdown to quick deploy and override forms
          • Moved several action columns on tables to the left side for consistency and best compatibility with mobile views.
          • Added an option to schedules and adhoc-deplyoments to send detection emails even when all actions are compliant. This is to allow users whose computers are already up to date to still receive a maintenance email.
          • Updated the script list page and session log component to use the Monaco script editor
          • Added the CW Automate icon to the main computer list. Clicking the icon opens up the computer in CW Automate.
          • Added "Date Added" to the computer list and made it sortable
          • Added a simple "new" tag on the computer list for computers that have been added to ImmyBot within the last 24 hours
          • Added an 'X' button to easily remove linked tenants from integrations

          Bug Fixes

          • After a task is created, the Runs Against property is now disabled. Changing this value after it is created can cause issues for deployments that are referencing it.
          • Fixed an issue with Ephemeral Agent resilient script output logic that would fail to re-connect if the script had never had any output prior to connection loss. (Ex. SonicWall VPN installer script)
          • Added missing triggered by text on the session details page when the session was triggered by a schedule or automatic onboarding
          • Fixed a width issue on some dropdown buttons
          • Fixed an issue with the integration client list re-sorting after you link/unlink a tenant

          0.53.2

          Released 2022-08-19

          Bug Fixes

          • Fixed an error that showed on the schedules list when a schedule existed that did not specify a time zone
          • Fixed issue introduced in 0.53.1 where the current immy version stopped displaying in the sidebar
          • Fixed issue introduced in 0.53.1 where the maintenance item ordering page broke
          • Fixed issue introduced in 0.53.1 where showing/adding parameters on the maintenance task page broke
          • Fixed an issue where monitor results were only showing the last line of output instead of all output
          • Fixed an issue where monitor results were overflowing into other components
          • Fixed an issue where re-running actions while showing action details would not displaying logs as they came in
          • Fixed an issue introduced for instances that signed up after the release of 0.53.0 where identification would fail due to some missing database configurations

          0.53.1 (un-published)

          Released 2022-08-18

          Improvements

          • Added a Trigger Now button to the Azure User Sync preference on the preferences page
          • Added a description to the PPKG reset windows checkbox - "Will perform a reset of windows with the remove user data option"

          Bug Fixes

          • Fixed an issue with agent identification where users were seeing the following error - Failed attempt to differentiate existing agent and pending agent: 42883: procedure sp_create_computer_from_agent(integer, uuid, boolean, text, text, text, unknown, boolean) does not exist POSITION: 6
          • Updated the alert of the person list page to match the available actions
          • Fixed an issue where the software configuration task edit link was missing
          • Fixed an issue where the branding logo alt text was still hardcoded to "Immense Networks" instead of the value provided by the branding
          • Fixed an issue with cancelling a detection only session from the computer details page -> software tab.

          0.53.0

          Released 2022-08-16

          UI Improvements

          Dark Mode

          image

          Deploy Software from Dashboard

          image

          Session Details

          imageimage

          Moved commonly used Main Menu items to the top, moved less commonly used items under sub-menus

          image

          Integrations - New look and feel

          image

          Integrations - Embedded Documentation

          image

          Script Editor

          Moved Script items into the left pane

          image

          New Integration - HaloPSA

          Deploy software/tasks to customers with specified recurring invoice items

          New Parameter Type - KeyValuePair

          image

          image

          Improvements

          • ImmyAgent now detects 'dirty' shutdown events of the ImmyAgent with a shutdown.dirty file.
          • Added a description to /schedules "Show Postpone Button" checkbox
          • Improved the integration details page by embedding the integration's documentation
          • Added a button that triggers an immediate Azure AD Sync and a note about automatic Azure AD Sync
          • Started improving the dashboard page. Added the ability to trigger actions for items in the dashboard
          • Added cmdlets Expand-String and New-LiteralString cmdlets to help deal with strings that should or should not be expanded before being sent to a remote machine.
          • Upgraded Intellisense Engine and Monaco Editor to latest versions
          • Moved live chat button to the header navbar so it doesn't potentially block buttons on the page
          • Added 8 new Ephemeral Agent Timeline events
          • Added "Script Bytes Received" metric to system status page
          • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
          • Made minor improvements to the getting started wizard
          • Moved script details into script editor sidebar for convenience

          Bug Fixes

          • ImmyAgent now sends 'online' events when we reconnect to IoTHub from an ungraceful network loss to prevent session hangs after the computer restarts
          • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches
          • ImmyAgent now handles exceptions returned from an instance during registration, and will continually retry instead of shutting down.
          • Fixed a typo in the SMTP port placeholder text
          • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
          • Fixed an issue with checking online/offline status of agents during a session
          • Fixed an issue where a deployment referenced a specific version even when the desired state did not require one. This was causing actions to fail
          • Fixed an issue with displaying the account dropdown on mobile
          • Fixed incorrect tooltip on install Immy agent icon in the computer list
          • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches.
          • Fixed issue where piping to Format-Table would result in an error or no output
          • Remove disabling of Cortana from PPKG builder output, as it is no-longer supported & may break newer OOBE installs.
          • Fixed issue with version restriction selector on License Edit page
          • Fixed issue with licenses deleting when saving a license with no tenant selected
          • Fixed issue displaying Customers on Azure Sync page
          • Fixed an issue with runnable script editor not including the user's tenantId in readonly cloud script editors
          • Fixed agent bug that prevents 'online' event on IoTHub reconnection
          • Fixed agent bug that would cause the agent to not retry transient registration failures
          • Only show Postpone and Update if "start immediately" not checked

          0.52.7

          Released 2022-07-11

          Improvements

          • The script list page now persists your filters after refreshing or leaving the page.
          • Fixed width issues in the maintenance item column on the deployment list page
          • Reduced required permissions for N-Central integration. See the new N-Central integration docs for details
          • Added a new PowerShell cmdlet Stop-ImmySession that will cancel the maintenance session it is currently running in

          Bug Fixes

          • Fixed some potential issues around agent connected/disconnected events
          • Fixed potential N-Central exception with re-sending messages
          • Fixed potential issue with 'missing' devices from N-Central due to possible filter contamination in N-Central

          0.52.6

          Released 2022-06-27

          Improvements

          • Set the default install script for new software to the "Manual Install Script" and the upgrade strategy to "Install Over" whenever we don't have another specific install script to provide
          • Set the default software installer type to "Installer File"
          • Updated the example New-DynamicVersion script
          • We now show a confirmation modal when choosing the "Wiped" option for resolving an agent identification conflict.
          • You can now see Cloud Sessions from the main Sessions list!
          • Added warnings when the ephemeral agent is failing to establish a connection to help users identify causes for failing script execution
          • Fixed an issue with the detection stage stuck running when it fails to execute scripts in the beginning of the stage
          • Improved timeline connected/disconnected events. There were edge cases that would show multiple connects/disconnects back to back.
          • Removed timeline computer online/offline events to avoid confusion. These events were never actually based on a computer coming online or going offline. We simply emitted "online" when an agent connected and happened to be the only online agent. Similarly for "offline" events, we only emitted the event when an agent disconnected and all agents were offline. ImmyBot does not actively check whether a machine is online or offline. It only checks whether it has any connected agents to use. This concept will be further improved upon to help resolve issues with agents incorrectly reporting connected/disconnected.
          • Removed link to software/task on deployment list since people are clicking it thinking it is the edit deployment link
          • Moved the software/task selector back above the target selector on the deployment edit page
          • Removed the media nav item since it's not actually useful

          Bug Fixes

          • Moved "Update If Found" from underneath "Installed" to the same level as "Installed" for clarity. A software can be "installed, uninstalled, ignored, or updated if found"
          • Fixed an issue with cloud task previews failing with "device offline"
          • Fixed an issue where the ImmyBot agent update action would not run when the agent was offline
          • Fixed an issue with the agent updates stage, onboarding stage, and resolution stage not honoring pending connectivity
          • Fixed an issue where the resume and cancel session buttons were incorrectly showing for postponed sessions
          • Fixed an issue with CW Control and CW Automate health error messages excluding important details that can help diagnose the problem
          • Fixed an issue where we were not checking if a configuration task is actually marked as a configuration task. This resulted in tasks getting run when they should not have.

          0.52.5

          Released 2022-06-13

          N-Central Beta Updates

          • Fixed an issue with exceptions that may occur inside the N-Central device-sync job causing memory to bloat
          • You can now get registration tokens from the NCentral integration via new PSCmdlet Get-NCentralRegistrationToken

          image

          Other Improvements

          • Under "Preferences", the description of the User Affinity Sync feature says it will run every 4 hours; this is incorrect. Verbiage was changed to indicate it will run every 24 hours.
          • On the integration details page, a confirmation modal has been added when clicking the "Bulk create tenants..." button to prepare users that this will cause code execution for linked clients.
          • Added more improvements to online/offline agent handling during maintenance sessions
          • Updated the online/offline event receiver for CW Control to return immediately in an effort to close requests faster

          0.52.4

          Released 2022-05-31

          Improvements

          • Removed unnecessary checkboxes from the Computers table on the "Edit Schedule" page
          • Immy live chat now supports screenshare! Immy support can now request access to view your screen to help resolve issues faster.

          Bug Fixes

          • Fixed an issue with the maintenance email actions requiring authentication

          0.52.3

          Released 2022-05-27

          Improvements

          • ImmyAgents no longer need to see a valid board serial number in order to complete registration or rekey. Instead, ImmyAgent may fall back on and rely on an 'ImmyHWID' (Immy hardware id), when a board serial is not available. ImmyHWIDs are derived from CPU, BIOS, MOBO, GPU, and TPM information where available.
          • Updated maintenance sessions to listen on agent connected/disconnected events instead of computer online/offline events which have faster responses and higher success rates
          • When a new agent comes into ImmyBot, we now kick off the identification job immediately if it isn't already running in an effort to speed up identification
          • Added session logs for dependencies indicating what they are for. e.g. Software A depends on Software B → If not installed then install.
          • The actions in the maintenance email (Reboot Now, Update Now, and Postpone), now link to a form on the ImmyBot instance instead of linking directly to the backend api. The reason for this is because some spam filters will automatically follow links in an email, which has accidentally caused computer reboots. Moving the link to a form allows spam filters to no longer be able to trigger the action automatically.

          Bug Fixes

          • Fixed an issue causing the computer details page to sometimes not load
          • Fixed an issue with the ImmyAgent rekey request not being received
          • Fixed an issue where Get-ImmyComputer was incorrectly reporting offline
          • Fixed an issue where configuration file parameters were not being downloaded when the configuration task did not have any enabled scripts
          • Fixed an issue with displaying the dependency badges on maintenance actions
          • Fixed an issue with the schedule's day of week selector cutting off the last characters of "Wednesday"
          • Fixed an issue with the CompareTo-ImmyBotVersion metascript
          • Fixed an issue with some maintenance action start times showing "2021 years ago" instead of "Unavailable" when the action never started
          • Bump Azure IoTHub packages to resolve some connection issues with the ImmyAgent

          0.52.2

          Released 2022-05-25

          Ephemeral Agent and Identification Improvements

          • ALL scripts now run through the ephemeral agent, even during identification and computer de-dupe logic 🎉
          • Additional exception information is now visible in Identification Failed tab, and in session output. This furthers insight for users to understand and fix potential reasons why the providers may have failed to run our agent. image
          • Fixed an issue where the date was not being set correctly when adding a AgentIdentificationFailure log, leading the user to think this issue happened at the beginning of time!

          Other Improvements

          • Added computer batch actions button on the tenants -> tenant details -> computers tab
          • You can no longer create a schedule that executes within one hour of detection. This is a safety measure to help prevent reboots during business hours
          • Added a checked to the schedules page for "Execute maintenance immediately after detection" to make it easier for those that do actually want to run execution after detection. When checked, you cannot set the execution time.
          • The schedule list "Next Run" column now sorts correctly and also shows the browser's local "Next Run" time
          • Added clarity to session logs when we are checking if an agent is online
          • Quick deploy actions now use Offline Behavior: Apply on Connect
          • Auto onboarding sessions now use Offline Behavior: Apply on Connect
          • Computer list batch actions - Run Maintenance now uses Offline Behavior: Apply on Connect
          • On the schedule details page, renamed "Target Category" to "Runs Against", and changed the options to "Computers" or "Cloud"

          Bug Fixes

          • Fixed an issue with the primary user not being found when sending emails after an onboarding session
          • Fixed an issue with checking off "Send follow-up email" on the onboarding form where it would not actually send the email
          • Fixed an issue with unhealthy integration messages not showing the real error message
          • Fixed an issue with unhealthy integration agents showing on the computer onboarding form
          • Added missing script parameter $LicenseFilePath to detection scripts and configuration tasks
          • Removed maintenance tasks from accidentally showing in the software prerequisite dropdown
          • Updated the computer batch actions sidebar to have better clarity
          • Fixed an issue with loading the deployment list when a deployment existed for a computer or person that no longer existed
          • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was failing if the Tenant didn't have an Azure mapping
          • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was returning an access token for the Tenant instead of the MSP
          • Fixed an issue where some failed sessions were getting marked as pending connectivity
          • Fixed some more issues around offline/online agent detection during sessions
          • Implemented a HTTP Concurrency limit for requests to N-Central to prevent issues with too many requests hitting their backend
          • Fixed an issue with not being able to skip onboarding
          • Fixed an issue with the "Retry X failed computers" where it was re-attempting to identify all failed computers
          • Fixed an issue with "Analyze Installer" not returning any data
          • Fixed an issue with script output in session logs not being truncated to the last 5 lines
          • Fixed an issue with the Immy Agent installation request not reporting whether the integration is disabled or unhealthy

          0.52.1

          Released 2022-05-18

          Bug Fixes

          • Fixed an issue where tag deployments were not resolving during full maintenance
          • Fixed an issue where cloud deployments were not resolving during full maintenance

          0.52.0

          Released 2022-05-18

          Tags

          You can now add tags to computers, and deploy software to tags! Manage tags under the settings link on the sidebar. Tags help in scenarios where workstations are shared by a variety of users and there is otherwise not a common property to target with a filter script.

          Tags can be added to computers as a batch action on the computer list page.

          image

          Tags can also be added to a computer on the details page.

          image

          Tags can be deployed as a cross-tenant target scope.

          image

          Tags can also be deployed as a single-tenant target scope.

          image

          Tags can be added to an ImmyBot installer to automatically set tags for new computers

          image

          Exclude Computer From Maintenance

          You can now specify that a computer be excluded from maintenance. Excluded computers will not be allowed to run any type of maintenance session.

          Settings -> Preferences -> Company Preferences -> Computers Excluded From Maintenance

          or

          Tenants -> Select a tenant -> Preferences tab -> Computers Excluded From Maintenance

          image

          Immy Chat Integration

          Added in 0.51.5

          We added LiveChat to Immy to make it easier for you to get support

          Session Script Execution Improvements

          Before executing a script on a device, we now check if it is online. If it is not online, we verify whether any of its agents are incorrectly reporting online and refresh the status appropriately. If it is still not online, we will wait up to 30 minutes for it come back online. If it is still not online, then we will mark the session as Pending Connectivity (only for Apply On Connect) or cancel the session due to the computer being offline.

          Other Improvements

          • On Immy startup, we now sync the online/offline state of all ImmyBot agents
          • Added an hourly job to pull the latest online/offline state of all ImmyBot agents
          • Updated parts of the frontend codebase with typescript to prevent accidental bugs
          • Improved performance of loading certain pages that relied on fetching clients from a provider
          • On the deployment details page, deploying to over 10 computers will now prompt to confirm this is the action you want to take
          • Active Ephemeral Agents will now prevent Windows from going to sleep to keep sessions from halting
          • A new preference has been added to aid in development of Ephemeral agent, as-well as diagnosing of bugs
          • Added Offline Behavior selector to the computer onboarding form and set the default option to "Apply On Connect"
          • The Run Maintenance button on the computer details page now defaults Offline Behavior to "Apply On Connect"
          • The Run Maintenance button on the computer details and list pages now provide a dropdown for the reboot preference
          • The Run Maintenance button on the computer details and list pages now have a confirmation modal
          • Azure groups now include devices as long as you grant ImmyBot the Device.Read.All permission
          • Azure groups now include all sub groups
          • Improved the action logs and result message for failed dependencies
          • Added a Preferences tab to the Tenant details page
          • Updated PowerShell Editor Services from 3.1.5 to 3.3.5

          Bug Fixes

          • Fixed an issue in the ephemeral agent that prevented the agent from exiting when finished running PowerShell
          • Fixed an issue with uninstall strings in the registry not containing quotes around paths with spaces
          • Fixed an issue where devices with unknown operating systems (non windows) were coming into Immy
          • Fixed an issue where dependencies for software set to update if found would run even if the software was not found
          • Fixed an issue where command line uninstall scripts with spaces in the path were not being wrapped in quotes
          • Fixed an issue where the access request button was not visible when access requests were disabled
          • Fixed an issue where failed dependencies were being removed instead of failed
          • Fixed an issue with the branding preview and test email not showing the mascot name

          0.51.5

          Released 2022-05-06

          Chat with ImmyBot

          • Added a live chat button to ImmyBot as another option for support requests

          Bug Fixes

          • COMMAND LINE WORKS AGAIN! Fixed an issue where Command Line (non-PowerShell) scripts would not run correctly, resulting in software uninstalls not working as expected
          • Fixed an issue where maintenance actions with a prerequisite dependency would not execute after the dependency finished successfully
          • Fixed an issue where Immy support would be unable to regain access after expiration
          • Fixed an issue with the "Show Details" link on the computer software tab not opening
          • Increased the timeout for the ImmyBot Agent to connect from 20 seconds to 60 seconds since setting up the ephemeral agent on some machines may take longer
          • Fixed an issue with configuration tasks not displaying underneath the software action
          • Fixed an issue with configuration tasks not running when using quick deploy

          0.51.4

          Released 2022-04-27

          Deployment List Improvements

          • Removed the button "Show Recommended Deployments"
          • Recommended deployments and the ability to "Approve/Dismiss" them now show up in the list
          • Updated the group by filter and added two new filters.

          image

          Session Log Improvements

          • Made several logs more concise
          • Added action name and stage name to the top level logs
            • image
          • Checking the box to the left of actions do a better job of filtering to the relevant logs for that action
            • image

          Bug Fixes

          • Fixed a performance issue with a timeline events database query
          • Fixed an issue that was causing the Ephemeral Agent to not extract on machines running Windows PowerShell 4 or below
          • Fixed issue where ImmyBot would not verify dependencies for software that is already compliant

          0.51.3

          Released 2022-04-21

          Bug fixes

          • Fixed an issue with upgrading to 0.51.3 where the instance would fail to start if you had a branding that did not specify a from address (which is now required)

          0.51.2

          Released 2022-04-21

          Branding Updates

          • Added color picker for Text Color and Table Header Text Color
          • Branding Logo and Mascot images are now optional
          • Added live branding preview

          image

          Other Improvements

          • Added more details such as the reboot preference to the session details page. Also added a snazzier stage indicator.
            • image
          • Changed access request default options to Three Days and Admin
          • Maintenance Tasks now have the "Ignore" option just like software and will take precedence over other deployments for the same task and target group.
          • Added desired software state "Any" as an available option for software that use dynamic versions
          • Maintenance emails no longer show software actions that have a desired state of "Update If Found" and no detected version.

          Bug Fixes

          • Fixed an issue with saving a tenant's default time zone
          • Fixed an issue with the software/task selector not correctly selecting tasks on the schedule and dashboard page
          • Fixed an issue with chocolatey items not showing in the software/task selector
          • Removed ability to use metascripts to define schedule targets (since metascripts do not resolve to list of computers)
          • Fixed an issue with configuration task file parameters not getting downloaded before the software's action runs
          • Fixed an issue where the Cloud Script execution context was not selected by default when creating a new dynamic version script from a software
          • Handled some common application initialization failures more gracefully
          • Fixed an issue with metascripts being able to override certain variables that were automatically provided.

          0.51.1

          Released 2022-04-12

          Integration Health

          Integrations can now have a health status of Healthy, Degraded, Unhealthly, or Disabled.

          • Healthy: All is well
          • Degraded: Started experiencing issues in the last few minutes
          • Unhealthy: Consistently experiencing issues (integration is no longer usable)
          • Disabled: Integration has been explicitly turned off by a user

          Unhealthy integrations will return to healthy automatically when transient issues subside.

          An alert with the latest message is shown on the integration details page.

          image

          A badge has been added to the integration list and on the computer details -> agents tab.

          image

          image

          The "Download ImmyBot Agent Installer" dropdown will now be disabled if the integration is unhealthy or disabled.

          image

          Other Improvements

          • Schedules can no longer be created with cron expressions using a * , - or / in the minute or hour position to help prevent to frequent scheduling.
          • Important: Schedules that are currently using a * , - or / in the minute or hour position will be automatically disabled in this version.
          • Software items in emails show "Up to Date" after successfully updating instead of "Update Available" which causes confusion whether the software has actually updated
          • Quick Assign and Assign actions are no longer disabled when the computer is already running a maintenance session
          • Added OS version after the OS name in the computer details overview info
          • MSP non-admins can now see the recommended deployments on the list page to know that they exist
          • Added detected version to items in the software tab
          • Removed the integration priority table and details since they are no longer applicable
          • When a maintenance session is manually resumed, the name of the user that resumed it now shows up in the logs. Or if it was resumed from an email, then it will indicate that a user clicked the "Update Now" button in the email.
          • Added field for maintenance task notes.

          Bug Fixes

          • Fixed an issue where the dynamic version response was incorrectly cached when the script was shared for multiple software and required different output for each software
          • Fixed an issue where the software detection radio options were disabled and unable to be changed
          • Fixed an issue where the "Skip x onboarding computers" button would disable even if you had computers selected
          • Undid the change that disabled the onboarding tab since it was a bad decision
          • Fixed an issue with slug not saving when creating a tenant

          0.51.0

          Released 2022-04-08

          Onboarding Form: Maintenance Task Parameter Override

          • New checkbox added to maintenance task parameters on the deployment details page: 'Allow override from computer onboarding'

            image

          • The checked parameters will show on the computer onboarding form, allowing the user to override the value just for the onboarding session

            image

          Other Improvements

          • Implemented a Get-Hash cmdlet in the Metascript engine useful for interacting with APIs like NinjaRMM and Mimecast that require HMACSHA1 signatures

          • We moved the Target Selector above the Software / Task Selector on the deployment page since it felt more natural to answer "Who am I creating a deployment for?" before answering "What am I creating a deployment for?"

          • Software Display Name Regex detection now supports capture groups to pull the version

            image

          • Added Azure ID column to the User List page

          • Improved handling of integration API routes

          • Added a "Do not remember" option when overriding an "Update If Found" deployment, and added more options for overriding certain desired states.

            image

          • Added Tenant Slug. $TenantSlug is now exposed for all scripts executed against a computer. You can also conveniently edit the tenant slug directly in the Tenant List.

            image

          • Hid the maintenance item selector behind a checkbox on the schedule details page since it was causing some confusion

            image

          Bug Fixes

          • Fixed an issue where dynamic versions that throw a terminating exception were not displaying the exception message under the maintenance action
          • Fixed an issue with the "New Version" notice not showing up
          • Fixed an issue preventing the Getting Started Wizard modal from showing
          • Fixed an issue with configuration tasks running before the software was deemed compliant
          • Fixed an issue with non-msp users not being able to create configuration tasks from the software details page
          • Fixed various issues with deploying Ninite software
          • Fixed issue with software repair not re-installing software
          • [Global Software Only] Fixed an issue with saving a custom download installer script to a global software
          • Removed double base64 encoding that triggered alerts in BitDefender and Arctic Wolf
          • Fixed the script documentation link
          • Fixed issues with Invoke-ImmyCommand forcing terminating errors instead of honoring the error action preference set by the script
          • Fixed an issue with configuration task parameters not being provided to the test script when run during detection
          • Fixed an issue with loading deployments when you have multiple of the same provider type enabled
          • Fixed issues with loading CW Control, Automate, and Manage target groups on the deployment details page
          • Fixed some exceptions that were occurring when sending emails
          • Removed duplicate "Should not be present" text showing in the maintenance actions list

          0.50.13

          Released 2022-04-1

          Capture Version from DisplayName with Regex

          For software that puts its version in the DisplayName instead of the DisplayVersion field like this:

          image

          You can now use a capture group to capture the version from the DisplayName

          Example

          HexCmp 2.34.1 can be captured with

          regex
          HexCmp (\\d+\\.\\d+)

          Script Editor Improvements

          Within filter scripts, Get-ImmyComputer -InventoryKeys now shows valid InventoryKeys

          image

          0.50.12

          Released 2022-03-29

          Improvements

          • Made the software override options more similar to the quick deploy options
          • The ImmyBot Agent no longer writes and executes scripts from C:\\Windows\\Temp\\ImmyBot.
          • You can now add a Tenant Slug under the "Edit" tab on the Tenant Details page. This value is exposed as the variable $TenantSlug for scripts that run against this tenant's computers.

          Bug Fixes

          • Fixed an issue preventing the 'Getting Started Wizard' from showing
          • Fixed an issue with non-MSP users not being able to create configuration tasks from the software details page
          • Fixed an issue with the 'New Version' notice not showing up
          • Fixed an issue with configuration tasks running before the software was deemed compliant
          • Fixed an issue where dynamic versions that threw a terminating exception were not displaying the exception message under the maintenance action

          0.50.11

          Released 2022-03-21

          Improvements

          • Added ability to choose "install" when overriding "update if found" deployments on the quick deploy form

          Bug Fixes

          • Fixed an issue where deployments with the same target type were resolving "update if found" as a higher priority than "latest version"
          • Fixed an issue where scripts run in Control were visible in the Commands tab
          • Fixed an issue where registry manipulation scripts would fail with ProviderNotFound: Microsoft.PowerShell.Core\\Registry

          0.50.10

          Released 2022-03-14

          Intellisense Improvements

          Intellisense no longer restarts when syntax error is detected.

          Quickfix Actions work

          image

          image

          No more duplicate definition on hover

          image

          Bug Fixes

          • Fixed an issue with downloading ImmyBot Agent EXEs which would intermittently fail
          • Fixed an issue where an unreachable integration could cause ImmyBot background jobs to not start up correctly
          • Fixed a null reference that could occur when re-running a maintenance action
          • Refactored some ephemeral agent PowerShell code for easier testing

          0.50.9

          Released 2022-03-08

          Bug Fixes

          • Fixed a bug that was causing new instances of Immybot to crash when starting up

          0.50.8

          Released 2022-03-04

          Onboarding Deployments

          The Onboarding target type has been moved to a separate checkbox so that you can limit deployments to onboarding only AND use the target type filters.

          ImmyAgent Improvements

          Updated internal infrastructure to utilize our new extended verification code-signing certificate.

          We currently sign:

          1. ImmyAgent executable & MSI/EXE/PPKG Installers
          2. Ephemeral Agent executable
          3. Static PoSH run on computers

          In addition to being more secure, this ensures our software is no-longer flagged by SmartScreen.

          IMPORTANT NOTE

          Customers utilizing software such as ThreatLocker MUST ensure our new certificate is whitelisted, as our new EV cert required "LLC" to be present on our CN and O.

          image

          Bug Fixes

          • Improved exception handling during maintenance sessions
          • Fixed an issue with re-running cloud scripts from a session log where it would throw an exception
          • Fixed some performance issues and improved caching of function scripts

          0.50.7

          Released 2022-02-25

          Maintenance Task Serial Execution

          A maintenance task now has the option to "Execute Serially".

          When checked, this maintenance task is guaranteed to only have one instance active at a time.

          e.g. If three maintenance sessions have an action for a maintenance task that executes serially, then one session will execute the maintenance task while the other two wait for it to complete. Once the first completes, the second will execute. Once the second completes, the third will execute.

          This is useful for maintenance tasks that rely on the state of subsequent executions.

          Other Improvements

          • Added a Status and Types column to the CW Manage client list on the integration details page so you can easily filter your list to clients you want to create tenants for. Also made the Linked Tenants column filterable to "Linked" or "Not linked". The Bulk create tenants for unassigned clients is now Bulk create tenants for filtered unassigned clients and will only bulk create tenants for those visible rows matching the table filters.
          • Added checks to ensure that the identification job is running properly

          Bug Fixes

          • Fixed an error that was preventing the computer overview page from loading
          • Fixed an issue with scripts running multiple times if you opened, closed, and re-opened a script editor
          • Fixed issues with the CW Control integration not updating the device name, os name, and serial number of the agent

          0.50.6

          Skipped

          0.50.5

          Released 2022-02-18

          Improvements

          • Updated ImmyBot from dotnet 5 to dotnet 6
          • Non-existent items on the deployment ordering page are now automatically removed
          • Added description below the "Suppress reboots during business hours" checkbox to indicate that it is only applied for maintenance sessions that resume after a device comes back online
          • Deployments can now be disabled which will exclude them from being applied during full maintenance sessions. This can be useful if you want to stop a deployment from happening without deleting it.
          • ImmyAgent PPKG's should now work on Windows Home editions
          • Improved the load time of the maintenance session list for instances that have 1+ million sessions

          Bug Fixes

          • Removed unnecessary device online check when running metascripts through the script editor
          • Fixed issue with parameters not getting provided to scripts that are re-run from maintenance session logs
          • Fixed a format exception that occurred when attempting to schedule adhoc deployments to run after midnight
          • Fixed a null reference exception thrown when using the "Limited" option on the "Software Access Level" field
          • Fixed issue with the "Last logged on user" fields not showing on the computer overview tab
          • Updated the error text of user scripts to indicate whether or not there is currently a logged in user
          • Fixed an argument exception that occurred when trying to uninstall a software by product code
          • Fixed an internal issue with migrating items to global
          • Fixed an issue with maintenance action timeline events that was preventing them from showing in the list
          • Fixed a bug where cancelling scripts from the editor would not close the PowerShell stream reader
          • Updated broken links to https://docs.immy.bot
          • Fixed a poor performing query with instances that have millions of maintenance sessions
          • Fixed issue allowing you to click the install Immy agent button on computers that did not have an online agent to install it with
          • Fixed issue where local accounts created by the PPKG were not being hidden
          • Fixed potential issue where local accounts created by the PPKG were not being added to the local administrators group if the local administrators group name wasn't called 'Administrators'

          0.50.4

          Skipped

          0.50.3

          Released 2022-02-11

          ImmyBot Agent Updates

          • Fixed a bug where agent installers that were created before 0.50.0 were failing to register on new devices
          • Increased the verbosity of logging during agent installation for easier debugging
          • Fixed a null reference issue occurring on startup
          • Updated the MSI uninstallation to remove the config.json and registration.json files located under C:\\ProgramData\\ImmyBotAgentService.

          Improvements

          • Increased the Ephemeral Agent named-pipe connection timeout from 10s -> 60s to allow computers with extremely poor PowerShell initialization time likely due to system issues to still run scripts
          • Added software / task descriptions to deployment details page and license details page. The descriptions are accessible by clicking the the question mark button

          Bug Fixes

          • Fixed an issue where filter scripts and software auto update scripts were not showing any output in the script editor
          • Fixed a label issue on tenant category schedules and tenant category deployments
          • Fixed an issue on the schedule details page where the maintenance item selector would should a blank selection by default image
          • Removed unnecessary code that fetched software twice during detection
          • Fixed an issue where the selected computers on the new computers page would de-select automatically
          • Put in an update to the CW Control ImmyBot extension to work on CW Control 21.15+. CW Control 21.15 introduced a breaking change to the API.
          • Fixed an issue where cross tenant device group target types were taking precedence over tenant specific target types

          0.50.2

          Released 2022-02-09

          Bug Fixes

          • Fixed an issue with azure sync job creating duplicate users in the MSP tenant
          • Fixed an issue where a disabled integration could not be deleted

          0.50.1

          Released 2022-02-08

          Improvements

          • When ImmyBot restarts, it will now attempt to restart any maintenance session that was active when it shutdown. Before, it would only attempt to restart scheduled sessions
          • Restarting maintenance sessions should now be idempotent. If an action was running when the backend rebooted, then it will be restarted.
          • Removed some thread blocking code to improve performance

          Bug Fixes

          • Fixed issue with Microsoft.PowerShell.Security functions not found in metascripts
          • Fixed an issue with "Uninstall By Package Info" failing to uninstall via product code
          • Fixed an issue where pending connectivity sessions were not triggering for computers that had exactly one agent

          0.50.0

          Released 2022-02-07

          Intellisense (beta)

          Intellisense can be enabled on the application preferences page (disabled by default). Having intellisense inside the script editor is going to make your life much easier when it comes to writing ImmyBot scripts.

          This feature is considered beta and there may be a few bugs present that will be get patched over the next few releases.

          image

          image

          image

          image

          Other Improvements

          • Added navigation link for tenant on the computer overview tab and the maintenance session list
          • Improved performance of filtering maintenance action table and dashboard results
          • Improved performance for instances that have a large number of ImmyBot agents by optimizing some database calls
          • Added compression support for JavaScript and CSS assets to decrease the initial page load time

          Bug Fixes

          • Fixed an issue with some deployments not resolving to computers that are auto-onboarding
          • Fixed an issue where clicking Include Offline in the Onboarding computer list would be de-selected after 5 seconds
          • Fixed an error that showed on the tenant details page for ImmyWorkbench instances that do not have schedules enabled

          0.49.9

          Released 2022-02-02

          Improvements

          • Inventory during a maintenance session now runs before resolving deployments since a deployment may rely on inventory data. e.g. Filter Scripts

          0.49.8

          Released 2022-01-27

          Bug Fixes

          • Fixed a bug with quick deploy where maintenance actions were failing due to Parameter <X> is marked required... and no value has been set

          0.49.7

          Released 2022-01-26

          Improvements

          • General cleanup/refactoring to improve performance
          • Added an index that improves some maintenance session queries

          Bug Fixes

          • Fixed an issue with uploading licenses and software installers with users who have names that contain non-Latin1 characters
          • Fixed an issue where failed audit tasks were showing as compliant
          • Fixed an issue where the maintenance item selector was not showing correct results for the Tenant target category
          • Fixed an issue uploading an MSI where the Uninstall MSI By ProductCode script was being used on the software instead of the correct Uninstall MSI By UpgradeCode. The Uninstall MSI By ProductCode is now set on the software version. The software upgrade strategy is also defaulted to install/over instead of none.
          • Fixed several issues around script timeouts and memory management
          • Fixed an issue with some slow computer list queries
          • Fixed an issue with software test scripts causing detection to fail due to missing required maintenance task parameters

          0.49.4

          Released 2022-01-19

          Improvements

          • Significantly improved performance of re-initializing maintenance sessions upon the server starting up
          • Immy will now wait for one or more of a device's agents to reconnect when the device goes offline while attempting to run a script

          Bug Fixes

          • Fixed an issue with application restarts taking a long time to re-enqueue pending maintenance sessions
          • Fixed an issue with some exceptions that occur in maintenance sessions causing the sessions to be stuck in the "Created" status

          0.49.3

          Released 2022-01-18

          Improvements

          • Reduced the number of concurrent inventory jobs that can run to preserve performance until it can be refactored
          • Delivery of Ephemeral Agents on computers that don't support TLS v1.2 no longer spit out scary looking error. Instead, it now shows a warning that it will fallback to TLS v1.0.

          image

          • Monitor maintenance tasks now run during execution except for previews which still run during detection

          Bug Fixes

          • Fixed an issue with maintenance item specific schedules causing sessions to get stuck in created
          • Fixed an issue with ephemeral agents not working correctly on Win7 x64-era machines
          • Fixed issue with immy version not showing in footer

          0.49.2

          Released 2022-01-18

          Bug Fixes

          • Fixed an issue where scripts run from the editor could throw the error: An item with the same key has already been added. DebugPreference

          0.49.1

          Released 2022-01-17

          Improvements

          • The $VerbosePreference and $DebugPreference in a metascript now get passed down to the computer
          • The top navbar on smaller screen sizes is now accessible from a collapsible button
          • Added docs nav icon linking to https://docs.immy.bot
          • Standardized task verbiage in the UI
          • Added an additional task type filter on the task list page for "All, Computer, Cloud, Configuration"
          • Write-Progress now appends to the session log output
          • Added a health check for when the Hangfire server crashes and fails to restart
          • Changed chocolatey actions to no longer use a hardcoded path C:\\ProgramData\\chocolatey\\bin\\choco.exe. We now retrieve the path by using Get-Command choco -ErrorAction Stop | select -expand Source. This ensures we can run chocolatey when it is not in installed in the default location (Looking at you SyncroRMM).
          • Deployment filter scripts can now utilize function scripts
          • Added license description field
          • Improved performance of resolving azure group deployments

          Bug Fixes

          • Resolved issue where computers running non-English version of Windows could not run any scripts. This issue also prevented successful identification for those computers.
          • Resolved parameters not being passed to user-context scripts
          • Fixed an issue with boolean deployment parameters not honoring false
          • Fixed an issue with adhoc deployments not using the parameters specified on the page
          • Fixed an issue with sessions showing passed when it should show partial passed
          • Fixed issue where duplicating deployments did not copy over the parameter values
          • Fixed issue with [ctrl-s] saving scripts from the editor
          • Fixed a bug where software from deleted deployments were still showing in the assigned software tab
          • Fixed a bug where the ephemeral agent retry logic was being ignored
          • Fixed an issue with the logs panel failing to stay scrolled to the bottom
          • Fixed an issue where inventory session logs were not showing up correctly
          • Fixed an issue where needs attention actions were showing "unavailable" for the date time
          • Fixed word wrapping on maintenance task parameter text
          • Fixed a bug where deployments targeting "All computers / No Filter" would show "Workstations and portable devices" instead
          • Fixed a bug where uploading files for global maintenance tasks would fail
          • Fixed a bug where schedule and deployment provider specific target data was not loading properly

          0.49.0

          Released 2022-01-11

          Improved Performance

          In this release, codenamed "Cheetah" we achieved a 20x improvement in script execution performance through the use of WebSockets, Named Pipes, and removing code that is no longer necessary since the introduction of the Ephemeral Agent.

          We also made restarting machines faster by using the new event driven Wait-ImmyComputer cmdlet when waiting for computers to reconnect after a reboot.

          Apply on Connect

          Problem to solve

          Computers that are offline never receive maintenance. These computers need a way to update when they miss their maintenance window.

          Solution

          You can now specify the offline behavior for computers on schedules and ad-hoc deployments.

          image

          When offline behavior is set to Apply On Connect, a session will get marked as image when the device is offline. When the device comes online, the session will resume.

          image

          Since devices can come online at anytime, the option to Suppress Reboots During Business Hours is checked by default.

          If a device is offline before the detection stage, then it will run the detection stage when it comes online.

          If a device is offline before the execution stage, then it will only run the execution stage when it comes online. It will not re-run detection.

          Maintenance emails are only sent out once regardless if the device goes offline.

          Timeline

          On the computer details overview tab, there is now a section called Timeline that shows particular events that have occurred for the computer.

          image

          The events we are currently showing are:

          1. Agent disconnected
          2. Agent connected
          3. Maintenance action started (only shows if the action required execution)
          4. Maintenance action completed (only shows if the action required execution)

          More events will be added in the future.

          Other Improvements

          • Improved performance of determining desired state of deployments during maintenance
          • Improved performance of some update queries
          • Added a new metascript cmdlet Wait-ImmyComputer that returns as soon as a computer has connectivity
          • Added & Updated Ephemeral Agent connection statistics in 'System Status' page to report data/data-rate metrics about the underlying Ephemeral Agent connection to the backend

          Bug Fixes

          • Fixed an issue where software download scripts were timing out after 60 seconds if the script didn't specify its own timeout
          • Fixed an issue where changes made to a configuration task parameters from the software page were not saving
          • Fixed issues displaying incorrect text in the target type column on the deployment and schedule list pages
          • Fixed a bug where you could not remove a software download script
          • Fixed a bug with Add-UriQueryParameter where it did not accept array values or parse existing parameters
          • Fixed an issue with Ephemeral Agent "end-of-stream" response exceptions resulting in termination of stage
          • Fixed various issues with agent connection events and improved performance
          • Fixed an issue where immy agent registrations could cause resource depletion in the backend's IoT service
          • Fixed the timezone selector to show the region to differentiate the options
          • Fixed a bug where dynamic versions could depend on itself and cause an infinite loop

          Releases in 2021

          Go to 2021 releases

          ',441),s=[o];function r(l,d,h,c,u,m){return i(),t("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; diff --git a/assets/releases-2022.md.CEQr6RBa.lean.js b/assets/releases-2022.md.HDb-adly.lean.js similarity index 67% rename from assets/releases-2022.md.CEQr6RBa.lean.js rename to assets/releases-2022.md.HDb-adly.lean.js index bf5ca608..88ffe009 100644 --- a/assets/releases-2022.md.CEQr6RBa.lean.js +++ b/assets/releases-2022.md.HDb-adly.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Releases in 2022","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2022.md","filePath":"releases-2022.md"}'),n={name:"releases-2022.md"},o=a("",441),s=[o];function r(l,d,h,c,u,m){return i(),t("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,c as t,o as i,a6 as a}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Releases in 2022","description":"","frontmatter":{},"headers":[],"relativePath":"releases-2022.md","filePath":"releases-2022.md"}'),n={name:"releases-2022.md"},o=a("",441),s=[o];function r(l,d,h,c,u,m){return i(),t("div",null,s)}const f=e(n,[["render",r]]);export{g as __pageData,f as default}; diff --git a/assets/releases.md.VbIXcsif.js b/assets/releases.md.D4RyUjFl.js similarity index 99% rename from assets/releases.md.VbIXcsif.js rename to assets/releases.md.D4RyUjFl.js index c2f6067d..d47846d6 100644 --- a/assets/releases.md.VbIXcsif.js +++ b/assets/releases.md.D4RyUjFl.js @@ -1,4 +1,4 @@ -import{_ as a,c as n,o as s,a6 as i,j as e,a as t}from"./chunks/framework.01Cf-Wcw.js";const R=JSON.parse('{"title":"Releases","description":"","frontmatter":{},"headers":[],"relativePath":"releases.md","filePath":"releases.md"}'),o={name:"releases.md"},r=i(`

          ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

          .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

          Please see the FAQ section for more details

          Releases

          0.65.5

          Released 07/21/24

          Bug Fixes

          • Fixed an issue where recommended deployments were not resolving for maintenance sessions

          0.65.4

          Released 07/30/24

          Improvements

          • You can now change the User Override for all parameters of an onboarding Deployment with a single click
          • More excludable capabilities have been added to the integration details page
          • The properties "Manufacturer" and "Model" have been added to the Computers Report
          • OAuth tokens are now refreshed every 24 hours instead of 89 days.
          • The function script cache is now busted automatically when you interactively run a script from the debugger. The cache is also busted when you interactively run a maintenance session.

          Bug Fixes

          • Fixed an issue where software install prerequisites would fail because the parent's parameters were incorrectly being passed to its prerequisites.
          • Fixed an issue with ConnectWise ScreenConnect 24.2 not being able to open remote sessions.
          • Fixed an issue where some devices arriving in Immy with no Win32_ComputerSystemProduct in the registry will fail to identify, resulting in an JsonReaderException: Unexpected character encountered while parsing value: {. Path 'DeviceId' error.
          • Fixed some potential slow memory leaks that cause high memory after several days of uptime
          • Fixed an issue where debugging scripts for software linked to an integration would throw the error "An integration is not linked to this script..."

          0.65.3

          Released 07/15/24

          Bug Fixes

          • Fixed an issue where variables such as $TenantId were not available from within a dynamicparam block
          • Fixed an issue where calls to Connect-ImmyAzureAD would fail because the base command Connect-AzureAD was not recognized
          • Fixed an issue where dropdown parameters that used Hashtable or PSObject values would not work correctly from within a session
          • Fixed an issue where clicking "Clear Output" in the script editor would not always clear the first line of output
          • Fixed an issue with the Configure Directory and Directory Migration tasks where they would get stuck parsing the parameters at runtime.

          0.65.2

          Released 07/08/24

          Bug Fixes

          • Fixed an issue with utilizing the Azure cmdlets from within a dynamic param block where it would fail with the error message "No tenant was specified for this script".

          0.65.1

          Released 07/05/24

          Bug Fixes

          • Fixed an issue with some onboarding tasks not showing all of the parameters on the onboarding form unless you manually hit the refresh button
          • Fixed an issue with CW Automate where agents were not being synced

          0.65.0

          Released 07/02/24

          Metascript Improvements

          Fixed a bug where dropdown attributes, e.g. [Dropdown({@{Option1=1; Option2=2}})], were incorrectly stripping the leading and trailing braces {...}

          powershell
          param(
          +import{_ as a,c as n,o as s,a6 as i,j as e,a as t}from"./chunks/framework.B49Yz1nR.js";const R=JSON.parse('{"title":"Releases","description":"","frontmatter":{},"headers":[],"relativePath":"releases.md","filePath":"releases.md"}'),o={name:"releases.md"},r=i(`

          ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

          .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

          Please see the FAQ section for more details

          Releases

          0.65.5

          Released 07/21/24

          Bug Fixes

          • Fixed an issue where recommended deployments were not resolving for maintenance sessions

          0.65.4

          Released 07/30/24

          Improvements

          • You can now change the User Override for all parameters of an onboarding Deployment with a single click
          • More excludable capabilities have been added to the integration details page
          • The properties "Manufacturer" and "Model" have been added to the Computers Report
          • OAuth tokens are now refreshed every 24 hours instead of 89 days.
          • The function script cache is now busted automatically when you interactively run a script from the debugger. The cache is also busted when you interactively run a maintenance session.

          Bug Fixes

          • Fixed an issue where software install prerequisites would fail because the parent's parameters were incorrectly being passed to its prerequisites.
          • Fixed an issue with ConnectWise ScreenConnect 24.2 not being able to open remote sessions.
          • Fixed an issue where some devices arriving in Immy with no Win32_ComputerSystemProduct in the registry will fail to identify, resulting in an JsonReaderException: Unexpected character encountered while parsing value: {. Path 'DeviceId' error.
          • Fixed some potential slow memory leaks that cause high memory after several days of uptime
          • Fixed an issue where debugging scripts for software linked to an integration would throw the error "An integration is not linked to this script..."

          0.65.3

          Released 07/15/24

          Bug Fixes

          • Fixed an issue where variables such as $TenantId were not available from within a dynamicparam block
          • Fixed an issue where calls to Connect-ImmyAzureAD would fail because the base command Connect-AzureAD was not recognized
          • Fixed an issue where dropdown parameters that used Hashtable or PSObject values would not work correctly from within a session
          • Fixed an issue where clicking "Clear Output" in the script editor would not always clear the first line of output
          • Fixed an issue with the Configure Directory and Directory Migration tasks where they would get stuck parsing the parameters at runtime.

          0.65.2

          Released 07/08/24

          Bug Fixes

          • Fixed an issue with utilizing the Azure cmdlets from within a dynamic param block where it would fail with the error message "No tenant was specified for this script".

          0.65.1

          Released 07/05/24

          Bug Fixes

          • Fixed an issue with some onboarding tasks not showing all of the parameters on the onboarding form unless you manually hit the refresh button
          • Fixed an issue with CW Automate where agents were not being synced

          0.65.0

          Released 07/02/24

          Metascript Improvements

          Fixed a bug where dropdown attributes, e.g. [Dropdown({@{Option1=1; Option2=2}})], were incorrectly stripping the leading and trailing braces {...}

          powershell
          param(
             [Dropdown({@{Option1=1; Option2=2}})]
             $DropdownParam
            )

          would not work but the following would

          powershell
          param(
          diff --git a/assets/releases.md.VbIXcsif.lean.js b/assets/releases.md.D4RyUjFl.lean.js
          similarity index 98%
          rename from assets/releases.md.VbIXcsif.lean.js
          rename to assets/releases.md.D4RyUjFl.lean.js
          index 33048245..f26bca8a 100644
          --- a/assets/releases.md.VbIXcsif.lean.js
          +++ b/assets/releases.md.D4RyUjFl.lean.js
          @@ -1 +1 @@
          -import{_ as a,c as n,o as s,a6 as i,j as e,a as t}from"./chunks/framework.01Cf-Wcw.js";const R=JSON.parse('{"title":"Releases","description":"","frontmatter":{},"headers":[],"relativePath":"releases.md","filePath":"releases.md"}'),o={name:"releases.md"},r=i("",117),l=e("ul",null,[e("li",null,"Fixed an issue where the user affinity job was assigning a primary person to a computer, even when the person was from a different tenant than the computer"),e("li",null,"Fixed an issue where an action's duration would continue to increment when a session was completed while the action was still running"),e("li",null,"Fixed an issue where the spinner icon in the Deployment Detection button was broken"),e("li",null,'Fixed an issue where loading a computer detail page would sometimes throw "InvalidOperationException: Sequence contains no elements"'),e("li",null,"Fixed an issue where schedules targeting CW Control secondary groups become could become borked when a CW Control company was renamed"),e("li",null,`Fixed an edge case issue where a scheduled job that's in "Pending Connectivity" status could run concurrently with a newly-created onboarding task of the agent is reinstalled with "automatic onboarding" enabled.`),e("li",null,"Fixed an issue where a software could incorrectly have a prereq on itself"),e("li",null,[t("Fixed a bug where it was possible to encounter a "),e("code",null,"Pipe is broken"),t(" exception while trying to execute scripts on a machine due to a possibility of the agent attempting to use a Powershell host that has faulted/exited recently before we could detect it.")]),e("li",null,[t("Fixed a bug that lead to User-context scripts to incorrectly use the System-context Environment variables (such as "),e("code",null,"TEMP"),t(", "),e("code",null,"USERPROFILE"),t(")")]),e("li",null,'Fixed an issue where the "show more" sidebar dropdown would collapse when selecting the notifications link'),e("li",{prompt:""},"Scripts no longer appends unwanted prompt query param values to your new-OAuthConsent -ExtraQueryParams @"),e("li",null,"Fixed an issue with re-ran actions incorrectly failing due to missing required parameters when they were present in a deployment"),e("li",null,"Fixed an issue where msp non-admins could not view cross-tenant deployments"),e("li",null,"Fixed an issue where msp non-admins could see access request notifications when it should have been admin only"),e("li",null,"Fixed an issue with incorrect breadcrumbs showing on the schedules list page"),e("li",null,'"User Action Trigger" dropdown have been removed in the Script Editor')],-1),d=i("",137),h=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/f30cb597-3a97-49d9-b26a-7018b1dd5605","max-width":"100%"},null,-1),c=e("h3",{id:"oauth-parameters",tabindex:"-1"},[t("OAuth Parameters "),e("a",{class:"header-anchor",href:"#oauth-parameters","aria-label":'Permalink to "OAuth Parameters"'},"​")],-1),u=e("p",null,"Added the ability to create and select auto-refreshing OAuth tokens as script parameters",-1),p=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/85259b64-917e-4676-9f44-8cde043e6fa6","max-width":"100%"},null,-1),m=e("hr",null,null,-1),g=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/ec13e684-8bd3-479c-9c94-69ee21103dfc","max-width":"100%"},null,-1),w=e("hr",null,null,-1),b=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/94275c46-2c78-4739-a0fb-43260f210f88","max-width":"100%"},null,-1),f=e("hr",null,null,-1),y=e("p",null,"Added a button to the Azure Partner Settings page to pre-consent customers to the default or custom app registration via the Partner Center API",-1),x=e("p",null,"This removes the need to provide consent for each customer manually using an admin account from the customer",-1),k=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/8a3c312d-b8d4-4b94-8f1a-5c2c1cb13d65","max-width":"100%"},null,-1),v=e("hr",null,null,-1),q=e("p",null,"Added an OAuth Token Acquisition mechanism to allow Partner admins to give ImmyBot consent to use the Partner Center API",-1),F=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/1d78a586-637b-49b5-9ec4-5a349a8c77b4","max-width":"100%"},null,-1),A=i("",319),P=[r,l,d,h,c,u,p,m,g,w,b,f,y,x,k,v,q,F,A];function I(E,C,S,B,T,_){return s(),n("div",null,P)}const M=a(o,[["render",I]]);export{R as __pageData,M as default};
          +import{_ as a,c as n,o as s,a6 as i,j as e,a as t}from"./chunks/framework.B49Yz1nR.js";const R=JSON.parse('{"title":"Releases","description":"","frontmatter":{},"headers":[],"relativePath":"releases.md","filePath":"releases.md"}'),o={name:"releases.md"},r=i("",117),l=e("ul",null,[e("li",null,"Fixed an issue where the user affinity job was assigning a primary person to a computer, even when the person was from a different tenant than the computer"),e("li",null,"Fixed an issue where an action's duration would continue to increment when a session was completed while the action was still running"),e("li",null,"Fixed an issue where the spinner icon in the Deployment Detection button was broken"),e("li",null,'Fixed an issue where loading a computer detail page would sometimes throw "InvalidOperationException: Sequence contains no elements"'),e("li",null,"Fixed an issue where schedules targeting CW Control secondary groups become could become borked when a CW Control company was renamed"),e("li",null,`Fixed an edge case issue where a scheduled job that's in "Pending Connectivity" status could run concurrently with a newly-created onboarding task of the agent is reinstalled with "automatic onboarding" enabled.`),e("li",null,"Fixed an issue where a software could incorrectly have a prereq on itself"),e("li",null,[t("Fixed a bug where it was possible to encounter a "),e("code",null,"Pipe is broken"),t(" exception while trying to execute scripts on a machine due to a possibility of the agent attempting to use a Powershell host that has faulted/exited recently before we could detect it.")]),e("li",null,[t("Fixed a bug that lead to User-context scripts to incorrectly use the System-context Environment variables (such as "),e("code",null,"TEMP"),t(", "),e("code",null,"USERPROFILE"),t(")")]),e("li",null,'Fixed an issue where the "show more" sidebar dropdown would collapse when selecting the notifications link'),e("li",{prompt:""},"Scripts no longer appends unwanted prompt query param values to your new-OAuthConsent -ExtraQueryParams @"),e("li",null,"Fixed an issue with re-ran actions incorrectly failing due to missing required parameters when they were present in a deployment"),e("li",null,"Fixed an issue where msp non-admins could not view cross-tenant deployments"),e("li",null,"Fixed an issue where msp non-admins could see access request notifications when it should have been admin only"),e("li",null,"Fixed an issue with incorrect breadcrumbs showing on the schedules list page"),e("li",null,'"User Action Trigger" dropdown have been removed in the Script Editor')],-1),d=i("",137),h=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/f30cb597-3a97-49d9-b26a-7018b1dd5605","max-width":"100%"},null,-1),c=e("h3",{id:"oauth-parameters",tabindex:"-1"},[t("OAuth Parameters "),e("a",{class:"header-anchor",href:"#oauth-parameters","aria-label":'Permalink to "OAuth Parameters"'},"​")],-1),u=e("p",null,"Added the ability to create and select auto-refreshing OAuth tokens as script parameters",-1),p=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/85259b64-917e-4676-9f44-8cde043e6fa6","max-width":"100%"},null,-1),m=e("hr",null,null,-1),g=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/ec13e684-8bd3-479c-9c94-69ee21103dfc","max-width":"100%"},null,-1),w=e("hr",null,null,-1),b=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/94275c46-2c78-4739-a0fb-43260f210f88","max-width":"100%"},null,-1),f=e("hr",null,null,-1),y=e("p",null,"Added a button to the Azure Partner Settings page to pre-consent customers to the default or custom app registration via the Partner Center API",-1),x=e("p",null,"This removes the need to provide consent for each customer manually using an admin account from the customer",-1),k=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/8a3c312d-b8d4-4b94-8f1a-5c2c1cb13d65","max-width":"100%"},null,-1),v=e("hr",null,null,-1),q=e("p",null,"Added an OAuth Token Acquisition mechanism to allow Partner admins to give ImmyBot consent to use the Partner Center API",-1),F=e("img",{src:"https://immybot.blob.core.windows.net/media-qa/1d78a586-637b-49b5-9ec4-5a349a8c77b4","max-width":"100%"},null,-1),A=i("",319),P=[r,l,d,h,c,u,p,m,g,w,b,f,y,x,k,v,q,F,A];function I(E,C,S,B,T,_){return s(),n("div",null,P)}const M=a(o,[["render",I]]);export{R as __pageData,M as default};
          diff --git a/assets/scripts.md.DmWdNvqE.js b/assets/scripts.md.C-uxU55o.js
          similarity index 99%
          rename from assets/scripts.md.DmWdNvqE.js
          rename to assets/scripts.md.C-uxU55o.js
          index a2949833..ad5dc4ab 100644
          --- a/assets/scripts.md.DmWdNvqE.js
          +++ b/assets/scripts.md.C-uxU55o.js
          @@ -1,4 +1,4 @@
          -import{_ as i,c as s,o as a,a6 as e}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Scripting Guide","description":"","frontmatter":{},"headers":[],"relativePath":"scripts.md","filePath":"scripts.md"}'),t={name:"scripts.md"},n=e(`

          Scripting Guide

          Best Practices

          • Use Ctrl+Shift+F or Ctrl+P in our script editor to find scripts that already do what you want. There is a lot of good logic in the built in function scripts
          • Have a machine you can test on
          • Have a separate machine to test your sanity if you bork your first machine
          • Test by clicking Open Debugger in the logs
            • This gives you all available parameters on the left so you can test the script in its natural context
            • You can quickly revise the script here until it works as expected
            • Saving the script here saves it permanently
          • Don’t hardcode paths to installer or license files, instead rely on $InstallerFile and $LicenseFilePath
          • Don’t hardcode license values or other sensitive information, instead utilize $LicenseValue or a custom parameter
          • Avoid (where possible) installers that have client specfic licenses or customizations built in
            • If a generic installer isn't available (BitDefender) use Dynamic Versions (and potentially a URL parameter) to specify the download URL per customer or perhaps use an API to find the URL for the given customer
            • If the URL requires authentication, use a custom Download script to perform the authenticated download (CrowdStrike/SentinelOne)
          • Don’t repeat yourself. Leverage function scripts to reuse code
          • Include code to verify that the script did what it intended to do
            • For Tasks, implement a “test” script
            • For Software, make sure your Detection method works, and optionally implement a Test script to verify things are in working order
              • When a software Test script returns $false, ImmyBot will re-install the software.
          • Use Metascripts, especially if your script needs to restart the machine or access APIs like IT Glue and therefore will contain sensitive data like API keys
          • Use throw “The bad thing that happened, what user should do” to prevent cascading failure. That message will be shown to the user in a prominent location so they can take corrective action
          • Tasks have a “test” mechanism that should return $true or $false to indicate compliance

          While it may be cumbersome to write additional logic to verify your work, the reward of knowing exactly how many machines are or are not compliant with your desired state is worth it. Without it, you are flying blind. With it, you know exactly how many machines require additional attention, giving you the opportunity to write better code that handles more edge cases. See the Helper Function section to see how we make your life easier.

          Script Types

          • Software Detection
          • Software Action (Install/Uninstall/Update)
          • Maintenance Task Setter
          • Metascript (Deployment Target)
          • Filter Script (Deployment Target)
          • Device Inventory
          • Function
          • Dynamic Version
          • Download Installer
          • Module
          • Preflight
          • Integration

          Software Detection

          Software Detection scripts are used to determine whether an existing software is present and what version it may be.

          Avoid custom detection scripts where possible. Software with a custom detection script can't be matched to pre-existing inventory data on the machine, making it difficult to report on how many machines have the software already. Further, the "Assignable" software tab won't work since that matches the detection method to existing inventory data. However if your software doesn't create an entry in Add/Remove Programs, you may have no choice but to use a custom detection script. It is important to note that a lot of software creates hidden entries under Add/Remove Programs, ImmyBot inventories these hidden entries, further reducing the need for custom detection scripts.

          When you write your custom detection script, your best bet is to find a exe or dll file under Program Files<software name> or ProgramData<softwarename> that shows the version when you right click on it and go to Properties. To retrieve this version use a script similar to the following:

          powershell
          Get-Command "C:\\Program Files*\\<softwarename>\\mysoftware.exe" -ErrorAction SilentlyContinue | %{ $_.Version.ToString() }

          If there is no exe or dll file containing the version, perhaps there is a .ini, .config, .json or .xml file that contains the installed version.

          If all else fails, you can simply return "1.0" if a file associated to the software exists.

          These scripts must return a string that will cast to a valid System.Version. Returning an actual System.Version will fail. (Although we may correct this in the future) For example

          $version = [String]"1.2.3"
          +import{_ as i,c as s,o as a,a6 as e}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Scripting Guide","description":"","frontmatter":{},"headers":[],"relativePath":"scripts.md","filePath":"scripts.md"}'),t={name:"scripts.md"},n=e(`

          Scripting Guide

          Best Practices

          • Use Ctrl+Shift+F or Ctrl+P in our script editor to find scripts that already do what you want. There is a lot of good logic in the built in function scripts
          • Have a machine you can test on
          • Have a separate machine to test your sanity if you bork your first machine
          • Test by clicking Open Debugger in the logs
            • This gives you all available parameters on the left so you can test the script in its natural context
            • You can quickly revise the script here until it works as expected
            • Saving the script here saves it permanently
          • Don’t hardcode paths to installer or license files, instead rely on $InstallerFile and $LicenseFilePath
          • Don’t hardcode license values or other sensitive information, instead utilize $LicenseValue or a custom parameter
          • Avoid (where possible) installers that have client specfic licenses or customizations built in
            • If a generic installer isn't available (BitDefender) use Dynamic Versions (and potentially a URL parameter) to specify the download URL per customer or perhaps use an API to find the URL for the given customer
            • If the URL requires authentication, use a custom Download script to perform the authenticated download (CrowdStrike/SentinelOne)
          • Don’t repeat yourself. Leverage function scripts to reuse code
          • Include code to verify that the script did what it intended to do
            • For Tasks, implement a “test” script
            • For Software, make sure your Detection method works, and optionally implement a Test script to verify things are in working order
              • When a software Test script returns $false, ImmyBot will re-install the software.
          • Use Metascripts, especially if your script needs to restart the machine or access APIs like IT Glue and therefore will contain sensitive data like API keys
          • Use throw “The bad thing that happened, what user should do” to prevent cascading failure. That message will be shown to the user in a prominent location so they can take corrective action
          • Tasks have a “test” mechanism that should return $true or $false to indicate compliance

          While it may be cumbersome to write additional logic to verify your work, the reward of knowing exactly how many machines are or are not compliant with your desired state is worth it. Without it, you are flying blind. With it, you know exactly how many machines require additional attention, giving you the opportunity to write better code that handles more edge cases. See the Helper Function section to see how we make your life easier.

          Script Types

          • Software Detection
          • Software Action (Install/Uninstall/Update)
          • Maintenance Task Setter
          • Metascript (Deployment Target)
          • Filter Script (Deployment Target)
          • Device Inventory
          • Function
          • Dynamic Version
          • Download Installer
          • Module
          • Preflight
          • Integration

          Software Detection

          Software Detection scripts are used to determine whether an existing software is present and what version it may be.

          Avoid custom detection scripts where possible. Software with a custom detection script can't be matched to pre-existing inventory data on the machine, making it difficult to report on how many machines have the software already. Further, the "Assignable" software tab won't work since that matches the detection method to existing inventory data. However if your software doesn't create an entry in Add/Remove Programs, you may have no choice but to use a custom detection script. It is important to note that a lot of software creates hidden entries under Add/Remove Programs, ImmyBot inventories these hidden entries, further reducing the need for custom detection scripts.

          When you write your custom detection script, your best bet is to find a exe or dll file under Program Files<software name> or ProgramData<softwarename> that shows the version when you right click on it and go to Properties. To retrieve this version use a script similar to the following:

          powershell
          Get-Command "C:\\Program Files*\\<softwarename>\\mysoftware.exe" -ErrorAction SilentlyContinue | %{ $_.Version.ToString() }

          If there is no exe or dll file containing the version, perhaps there is a .ini, .config, .json or .xml file that contains the installed version.

          If all else fails, you can simply return "1.0" if a file associated to the software exists.

          These scripts must return a string that will cast to a valid System.Version. Returning an actual System.Version will fail. (Although we may correct this in the future) For example

          $version = [String]"1.2.3"
           return $version

          will work, but currently

          $version = [System.Version]"1.2.3"
           return $version

          will fail.

          Software Auto Update (Deprecated, use dynamic versions instead)

          These scripts are useful for automatically adding new versions for a software. Script should return a $SoftwareVersion object.

          $SoftwareVersion = @{}
           $SoftwareVersion.url = $LatestPackage.OriginFile.OriginUri
          diff --git a/assets/scripts.md.DmWdNvqE.lean.js b/assets/scripts.md.C-uxU55o.lean.js
          similarity index 66%
          rename from assets/scripts.md.DmWdNvqE.lean.js
          rename to assets/scripts.md.C-uxU55o.lean.js
          index 522f0ece..bf37075a 100644
          --- a/assets/scripts.md.DmWdNvqE.lean.js
          +++ b/assets/scripts.md.C-uxU55o.lean.js
          @@ -1 +1 @@
          -import{_ as i,c as s,o as a,a6 as e}from"./chunks/framework.01Cf-Wcw.js";const g=JSON.parse('{"title":"Scripting Guide","description":"","frontmatter":{},"headers":[],"relativePath":"scripts.md","filePath":"scripts.md"}'),t={name:"scripts.md"},n=e("",191),l=[n];function h(r,o,p,k,d,c){return a(),s("div",null,l)}const y=i(t,[["render",h]]);export{g as __pageData,y as default};
          +import{_ as i,c as s,o as a,a6 as e}from"./chunks/framework.B49Yz1nR.js";const g=JSON.parse('{"title":"Scripting Guide","description":"","frontmatter":{},"headers":[],"relativePath":"scripts.md","filePath":"scripts.md"}'),t={name:"scripts.md"},n=e("",191),l=[n];function h(r,o,p,k,d,c){return a(),s("div",null,l)}const y=i(t,[["render",h]]);export{g as __pageData,y as default};
          diff --git a/assets/style.DwWv9iRe.css b/assets/style.CyaMcyxm.css
          similarity index 98%
          rename from assets/style.DwWv9iRe.css
          rename to assets/style.CyaMcyxm.css
          index 4ca56e9c..7441dd6e 100644
          --- a/assets/style.DwWv9iRe.css
          +++ b/assets/style.CyaMcyxm.css
          @@ -1 +1 @@
          -@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-54a304ca]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}.NotFound[data-v-6ff51ddd]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-6ff51ddd]{padding:96px 32px 168px}}.code[data-v-6ff51ddd]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-6ff51ddd]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-6ff51ddd]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-6ff51ddd]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-6ff51ddd]{padding-top:20px}.link[data-v-6ff51ddd]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-6ff51ddd]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-53c99d69]{position:relative;z-index:1}.nested[data-v-53c99d69]{padding-right:16px;padding-left:16px}.outline-link[data-v-53c99d69]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-53c99d69]:hover,.outline-link.active[data-v-53c99d69]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-53c99d69]{padding-left:13px}.VPDocAsideOutline[data-v-f610f197]{display:none}.VPDocAsideOutline.has-outline[data-v-f610f197]{display:block}.content[data-v-f610f197]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-f610f197]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-f610f197]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-1bb0c8a8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-1bb0c8a8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-1bcd8184]{margin-top:64px}.edit-info[data-v-1bcd8184]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-1bcd8184]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-1bcd8184]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-1bcd8184]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-1bcd8184]{margin-right:8px}.prev-next[data-v-1bcd8184]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-1bcd8184]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-1bcd8184]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-1bcd8184]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-1bcd8184]{margin-left:auto;text-align:right}.desc[data-v-1bcd8184]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-1bcd8184]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-e6f2a212]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-e6f2a212]{display:flex;justify-content:center}.VPDoc .aside[data-v-e6f2a212]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{max-width:1104px}}.container[data-v-e6f2a212]{margin:0 auto;width:100%}.aside[data-v-e6f2a212]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-e6f2a212]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-e6f2a212]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-e6f2a212]::-webkit-scrollbar{display:none}.aside-curtain[data-v-e6f2a212]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-e6f2a212]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-e6f2a212]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-e6f2a212]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-e6f2a212]{order:1;margin:0;min-width:640px}}.content-container[data-v-e6f2a212]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-e6f2a212]{max-width:688px}.VPButton[data-v-c9cf0e3c]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-c9cf0e3c]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-c9cf0e3c]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-c9cf0e3c]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-c9cf0e3c]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-c9cf0e3c]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-c9cf0e3c]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-c9cf0e3c]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-c9cf0e3c]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-c9cf0e3c]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-c9cf0e3c]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-c9cf0e3c]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-c9cf0e3c]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-ab19afbb]{display:none}.dark .VPImage.light[data-v-ab19afbb]{display:none}.VPHero[data-v-b10c5094]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-b10c5094]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-b10c5094]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-b10c5094]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-b10c5094]{flex-direction:row}}.main[data-v-b10c5094]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-b10c5094]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-b10c5094]{text-align:left}}@media (min-width: 960px){.main[data-v-b10c5094]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-b10c5094]{max-width:592px}}.name[data-v-b10c5094],.text[data-v-b10c5094]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-b10c5094],.VPHero.has-image .text[data-v-b10c5094]{margin:0 auto}.name[data-v-b10c5094]{color:var(--vp-home-hero-name-color)}.clip[data-v-b10c5094]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-b10c5094],.text[data-v-b10c5094]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-b10c5094],.text[data-v-b10c5094]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-b10c5094],.VPHero.has-image .text[data-v-b10c5094]{margin:0}}.tagline[data-v-b10c5094]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-b10c5094]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-b10c5094]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-b10c5094]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-b10c5094]{margin:0}}.actions[data-v-b10c5094]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-b10c5094]{justify-content:center}@media (min-width: 640px){.actions[data-v-b10c5094]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-b10c5094]{justify-content:flex-start}}.action[data-v-b10c5094]{flex-shrink:0;padding:6px}.image[data-v-b10c5094]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-b10c5094]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-b10c5094]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-b10c5094]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-b10c5094]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-b10c5094]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-b10c5094]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-b10c5094]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-b10c5094]{width:320px;height:320px}}[data-v-b10c5094] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-b10c5094] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-b10c5094] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-bd37d1a2]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-bd37d1a2]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-bd37d1a2]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-bd37d1a2]>.VPImage{margin-bottom:20px}.icon[data-v-bd37d1a2]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-bd37d1a2]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-bd37d1a2]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-bd37d1a2]{padding-top:8px}.link-text-value[data-v-bd37d1a2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-bd37d1a2]{margin-left:6px}.VPFeatures[data-v-b1eea84a]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-b1eea84a]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-b1eea84a]{padding:0 64px}}.container[data-v-b1eea84a]{margin:0 auto;max-width:1152px}.items[data-v-b1eea84a]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-b1eea84a]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a]{width:50%}.item.grid-3[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-b1eea84a]{width:25%}}.container[data-v-c141a4bd]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-c141a4bd]{padding:0 48px}}@media (min-width: 960px){.container[data-v-c141a4bd]{width:100%;padding:0 64px}}.vp-doc[data-v-c141a4bd] .VPHomeSponsors,.vp-doc[data-v-c141a4bd] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-c141a4bd] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-c141a4bd] .VPHomeSponsors a,.vp-doc[data-v-c141a4bd] .VPTeamPage a{text-decoration:none}.VPHome[data-v-07b1ad08]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-07b1ad08]{margin-bottom:128px}}.VPContent[data-v-9a6c75ad]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-9a6c75ad]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-9a6c75ad]{margin:0}@media (min-width: 960px){.VPContent[data-v-9a6c75ad]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-9a6c75ad]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-9a6c75ad]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-566314d4]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-566314d4]{display:none}.VPFooter[data-v-566314d4] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-566314d4] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-566314d4]{padding:32px}}.container[data-v-566314d4]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-566314d4],.copyright[data-v-566314d4]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-883964e0]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-883964e0]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-883964e0]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-883964e0]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-883964e0]{color:var(--vp-c-text-1)}.icon[data-v-883964e0]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-883964e0]{font-size:14px}.icon[data-v-883964e0]{font-size:16px}}.open>.icon[data-v-883964e0]{transform:rotate(90deg)}.items[data-v-883964e0]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-883964e0]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-883964e0]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-883964e0]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-883964e0]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-883964e0]{transition:all .2s ease-out}.flyout-leave-active[data-v-883964e0]{transition:all .15s ease-in}.flyout-enter-from[data-v-883964e0],.flyout-leave-to[data-v-883964e0]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-2488c25a]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-2488c25a]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-2488c25a]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-2488c25a]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-2488c25a]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-2488c25a]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-2488c25a]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-2488c25a]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-2488c25a]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-2488c25a]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-2488c25a]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-2488c25a]{display:none}}.menu-icon[data-v-2488c25a]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-2488c25a]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-2488c25a]{padding:12px 32px 11px}}.VPSwitch[data-v-b4ccac88]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-b4ccac88]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-b4ccac88]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-b4ccac88]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-b4ccac88] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-b4ccac88] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-be9742d9]{opacity:1}.moon[data-v-be9742d9],.dark .sun[data-v-be9742d9]{opacity:0}.dark .moon[data-v-be9742d9]{opacity:1}.dark .VPSwitchAppearance[data-v-be9742d9] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-3f90c1a5]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-3f90c1a5]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f51f088d]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f51f088d]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-f51f088d]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f51f088d]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-20ed86d6]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-20ed86d6] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-20ed86d6] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-20ed86d6] .group:last-child{padding-bottom:0}.VPMenu[data-v-20ed86d6] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-20ed86d6] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-20ed86d6] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-20ed86d6] .action{padding-left:24px}.VPFlyout[data-v-af5898d3]{position:relative}.VPFlyout[data-v-af5898d3]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-af5898d3]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-af5898d3]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-af5898d3]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-af5898d3]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-af5898d3],.button[aria-expanded=true]+.menu[data-v-af5898d3]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-af5898d3]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-af5898d3]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-af5898d3]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-af5898d3]{margin-right:0;font-size:16px}.text-icon[data-v-af5898d3]{margin-left:4px;font-size:14px}.icon[data-v-af5898d3]{font-size:20px;transition:fill .25s}.menu[data-v-af5898d3]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-358b6670]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-358b6670]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-358b6670]>svg,.VPSocialLink[data-v-358b6670]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e71e869c]{display:flex;justify-content:center}.VPNavBarExtra[data-v-f953d92f]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-f953d92f]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-f953d92f]{display:none}}.trans-title[data-v-f953d92f]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-f953d92f],.item.social-links[data-v-f953d92f]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-f953d92f]{min-width:176px}.appearance-action[data-v-f953d92f]{margin-right:-2px}.social-links-list[data-v-f953d92f]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-08fbf4b6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-08fbf4b6],.VPNavBarMenuLink[data-v-08fbf4b6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-afb2845e]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-afb2845e]{display:flex}}/*! @docsearch/css 3.6.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.title[data-v-0ad69264]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-0ad69264]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-0ad69264]{border-bottom-color:var(--vp-c-divider)}}[data-v-0ad69264] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-acee064b]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-acee064b]{display:flex;align-items:center}}.title[data-v-acee064b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-9fd4d1dd]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-9fd4d1dd]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-9fd4d1dd]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-9fd4d1dd]:not(.home){background-color:transparent}.VPNavBar[data-v-9fd4d1dd]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-9fd4d1dd]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-9fd4d1dd]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-9fd4d1dd]{padding:0}}.container[data-v-9fd4d1dd]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-9fd4d1dd],.container>.content[data-v-9fd4d1dd]{pointer-events:none}.container[data-v-9fd4d1dd] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-9fd4d1dd]{max-width:100%}}.title[data-v-9fd4d1dd]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-9fd4d1dd]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-9fd4d1dd]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-9fd4d1dd]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-9fd4d1dd]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-9fd4d1dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-9fd4d1dd]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-9fd4d1dd]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-9fd4d1dd]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-9fd4d1dd]{column-gap:.5rem}}.menu+.translations[data-v-9fd4d1dd]:before,.menu+.appearance[data-v-9fd4d1dd]:before,.menu+.social-links[data-v-9fd4d1dd]:before,.translations+.appearance[data-v-9fd4d1dd]:before,.appearance+.social-links[data-v-9fd4d1dd]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-9fd4d1dd]:before,.translations+.appearance[data-v-9fd4d1dd]:before{margin-right:16px}.appearance+.social-links[data-v-9fd4d1dd]:before{margin-left:16px}.social-links[data-v-9fd4d1dd]{margin-right:-8px}.divider[data-v-9fd4d1dd]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-9fd4d1dd]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-9fd4d1dd]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-9fd4d1dd]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-a3e2920d]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-a3e2920d]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-1a934d60]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-1a934d60]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-aea78dd1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-aea78dd1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-f60dbfa7]{display:block}.title[data-v-f60dbfa7]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-d99bfeec]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-d99bfeec]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-d99bfeec]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-d99bfeec]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-d99bfeec]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-d99bfeec]{transform:rotate(45deg)}.button[data-v-d99bfeec]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-d99bfeec]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-d99bfeec]{transition:transform .25s}.group[data-v-d99bfeec]:first-child{padding-top:0}.group+.group[data-v-d99bfeec],.group+.item[data-v-d99bfeec]{padding-top:4px}.VPNavScreenTranslations[data-v-516e4bc3]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-516e4bc3]{height:auto}.title[data-v-516e4bc3]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-516e4bc3]{font-size:16px}.icon.lang[data-v-516e4bc3]{margin-right:8px}.icon.chevron[data-v-516e4bc3]{margin-left:4px}.list[data-v-516e4bc3]{padding:4px 0 0 24px}.link[data-v-516e4bc3]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-2dd6d0c7]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-2dd6d0c7],.VPNavScreen.fade-leave-active[data-v-2dd6d0c7]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-2dd6d0c7],.VPNavScreen.fade-leave-active .container[data-v-2dd6d0c7]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-2dd6d0c7],.VPNavScreen.fade-leave-to[data-v-2dd6d0c7]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-2dd6d0c7],.VPNavScreen.fade-leave-to .container[data-v-2dd6d0c7]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-2dd6d0c7]{display:none}}.container[data-v-2dd6d0c7]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-2dd6d0c7],.menu+.appearance[data-v-2dd6d0c7],.translations+.appearance[data-v-2dd6d0c7]{margin-top:24px}.menu+.social-links[data-v-2dd6d0c7]{margin-top:16px}.appearance+.social-links[data-v-2dd6d0c7]{margin-top:16px}.VPNav[data-v-7ad780c2]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7ad780c2]{position:fixed}}.VPSidebarItem.level-0[data-v-edd2eed8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-edd2eed8]{padding-bottom:10px}.item[data-v-edd2eed8]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-edd2eed8]{cursor:pointer}.indicator[data-v-edd2eed8]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-edd2eed8]{background-color:var(--vp-c-brand-1)}.link[data-v-edd2eed8]{display:flex;align-items:center;flex-grow:1}.text[data-v-edd2eed8]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-edd2eed8]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-edd2eed8],.VPSidebarItem.level-2 .text[data-v-edd2eed8],.VPSidebarItem.level-3 .text[data-v-edd2eed8],.VPSidebarItem.level-4 .text[data-v-edd2eed8],.VPSidebarItem.level-5 .text[data-v-edd2eed8]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-edd2eed8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-edd2eed8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-edd2eed8]{color:var(--vp-c-brand-1)}.caret[data-v-edd2eed8]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-edd2eed8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-edd2eed8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-edd2eed8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-edd2eed8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-edd2eed8],.VPSidebarItem.level-2 .items[data-v-edd2eed8],.VPSidebarItem.level-3 .items[data-v-edd2eed8],.VPSidebarItem.level-4 .items[data-v-edd2eed8],.VPSidebarItem.level-5 .items[data-v-edd2eed8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-edd2eed8]{display:none}.no-transition[data-v-51288d80] .caret-icon{transition:none}.group+.group[data-v-51288d80]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-51288d80]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-42c4c606]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-42c4c606]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-42c4c606]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-42c4c606]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-42c4c606]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-42c4c606]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-42c4c606]{outline:0}.VPSkipLink[data-v-c8291ffa]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c8291ffa]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c8291ffa]{top:14px;left:16px}}.Layout[data-v-d8b57b2d]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3dc26e1d]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3dc26e1d]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3dc26e1d]{margin:128px 0}}.VPHomeSponsors[data-v-3dc26e1d]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3dc26e1d]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3dc26e1d]{padding:0 64px}}.container[data-v-3dc26e1d]{margin:0 auto;max-width:1152px}.love[data-v-3dc26e1d]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3dc26e1d]{display:inline-block}.message[data-v-3dc26e1d]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3dc26e1d]{padding-top:32px}.action[data-v-3dc26e1d]{padding-top:40px;text-align:center}.VPTeamPage[data-v-a5329171]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-a5329171]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-a5329171-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-a5329171-s],.VPTeamMembers+.VPTeamPageSection[data-v-a5329171-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-a5329171-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-a5329171-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-a5329171-s],.VPTeamMembers+.VPTeamPageSection[data-v-a5329171-s]{margin-top:96px}}.VPTeamMembers[data-v-a5329171-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-a5329171-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-a5329171-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-3bf2e850]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-acff304e]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-acff304e]{padding:32px}.VPTeamMembersItem.small .data[data-v-acff304e]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-acff304e]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-acff304e]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-acff304e]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-acff304e]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-acff304e]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-acff304e]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-acff304e]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-acff304e]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-acff304e]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-acff304e]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-acff304e]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-acff304e]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-acff304e]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-acff304e]{text-align:center}.avatar[data-v-acff304e]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-acff304e]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-acff304e]{margin:0;font-weight:600}.affiliation[data-v-acff304e]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-acff304e]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-acff304e]:hover{color:var(--vp-c-brand-1)}.desc[data-v-acff304e]{margin:0 auto}.desc[data-v-acff304e] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-acff304e]{display:flex;justify-content:center;height:56px}.sp-link[data-v-acff304e]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-acff304e]:hover,.sp .sp-link.link[data-v-acff304e]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-acff304e]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-bf782009]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-bf782009]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-bf782009]{max-width:876px}.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-bf782009]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-bf782009]{max-width:760px}.container[data-v-bf782009]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-home-hero-name-background: var(--vp-c-text-1);--vp-home-hero-image-background-image: none}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: var(--vp-c-text-1);--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}html.dark{--vp-home-hero-name-background: var(--vp-c-text-1)}
          +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-54a304ca]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}.NotFound[data-v-6ff51ddd]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-6ff51ddd]{padding:96px 32px 168px}}.code[data-v-6ff51ddd]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-6ff51ddd]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-6ff51ddd]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-6ff51ddd]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-6ff51ddd]{padding-top:20px}.link[data-v-6ff51ddd]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-6ff51ddd]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-53c99d69]{position:relative;z-index:1}.nested[data-v-53c99d69]{padding-right:16px;padding-left:16px}.outline-link[data-v-53c99d69]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-53c99d69]:hover,.outline-link.active[data-v-53c99d69]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-53c99d69]{padding-left:13px}.VPDocAsideOutline[data-v-f610f197]{display:none}.VPDocAsideOutline.has-outline[data-v-f610f197]{display:block}.content[data-v-f610f197]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-f610f197]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-f610f197]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-1bb0c8a8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-1bb0c8a8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-1bcd8184]{margin-top:64px}.edit-info[data-v-1bcd8184]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-1bcd8184]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-1bcd8184]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-1bcd8184]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-1bcd8184]{margin-right:8px}.prev-next[data-v-1bcd8184]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-1bcd8184]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-1bcd8184]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-1bcd8184]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-1bcd8184]{margin-left:auto;text-align:right}.desc[data-v-1bcd8184]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-1bcd8184]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-e6f2a212]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-e6f2a212]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-e6f2a212]{display:flex;justify-content:center}.VPDoc .aside[data-v-e6f2a212]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-e6f2a212]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-e6f2a212]{max-width:1104px}}.container[data-v-e6f2a212]{margin:0 auto;width:100%}.aside[data-v-e6f2a212]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-e6f2a212]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-e6f2a212]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-e6f2a212]::-webkit-scrollbar{display:none}.aside-curtain[data-v-e6f2a212]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-e6f2a212]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-e6f2a212]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-e6f2a212]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-e6f2a212]{order:1;margin:0;min-width:640px}}.content-container[data-v-e6f2a212]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-e6f2a212]{max-width:688px}.VPButton[data-v-93dc4167]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-93dc4167]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-93dc4167]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-93dc4167]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-93dc4167]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-93dc4167]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-93dc4167]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-93dc4167]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-93dc4167]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-93dc4167]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-93dc4167]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-93dc4167]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-93dc4167]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-ab19afbb]{display:none}.dark .VPImage.light[data-v-ab19afbb]{display:none}.VPHero[data-v-b10c5094]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-b10c5094]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-b10c5094]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-b10c5094]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-b10c5094]{flex-direction:row}}.main[data-v-b10c5094]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-b10c5094]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-b10c5094]{text-align:left}}@media (min-width: 960px){.main[data-v-b10c5094]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-b10c5094]{max-width:592px}}.name[data-v-b10c5094],.text[data-v-b10c5094]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-b10c5094],.VPHero.has-image .text[data-v-b10c5094]{margin:0 auto}.name[data-v-b10c5094]{color:var(--vp-home-hero-name-color)}.clip[data-v-b10c5094]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-b10c5094],.text[data-v-b10c5094]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-b10c5094],.text[data-v-b10c5094]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-b10c5094],.VPHero.has-image .text[data-v-b10c5094]{margin:0}}.tagline[data-v-b10c5094]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-b10c5094]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-b10c5094]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-b10c5094]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-b10c5094]{margin:0}}.actions[data-v-b10c5094]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-b10c5094]{justify-content:center}@media (min-width: 640px){.actions[data-v-b10c5094]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-b10c5094]{justify-content:flex-start}}.action[data-v-b10c5094]{flex-shrink:0;padding:6px}.image[data-v-b10c5094]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-b10c5094]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-b10c5094]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-b10c5094]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-b10c5094]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-b10c5094]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-b10c5094]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-b10c5094]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-b10c5094]{width:320px;height:320px}}[data-v-b10c5094] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-b10c5094] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-b10c5094] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-bd37d1a2]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-bd37d1a2]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-bd37d1a2]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-bd37d1a2]>.VPImage{margin-bottom:20px}.icon[data-v-bd37d1a2]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-bd37d1a2]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-bd37d1a2]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-bd37d1a2]{padding-top:8px}.link-text-value[data-v-bd37d1a2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-bd37d1a2]{margin-left:6px}.VPFeatures[data-v-b1eea84a]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-b1eea84a]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-b1eea84a]{padding:0 64px}}.container[data-v-b1eea84a]{margin:0 auto;max-width:1152px}.items[data-v-b1eea84a]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-b1eea84a]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-b1eea84a],.item.grid-4[data-v-b1eea84a]{width:50%}.item.grid-3[data-v-b1eea84a],.item.grid-6[data-v-b1eea84a]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-b1eea84a]{width:25%}}.container[data-v-c141a4bd]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-c141a4bd]{padding:0 48px}}@media (min-width: 960px){.container[data-v-c141a4bd]{width:100%;padding:0 64px}}.vp-doc[data-v-c141a4bd] .VPHomeSponsors,.vp-doc[data-v-c141a4bd] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-c141a4bd] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-c141a4bd] .VPHomeSponsors a,.vp-doc[data-v-c141a4bd] .VPTeamPage a{text-decoration:none}.VPHome[data-v-07b1ad08]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-07b1ad08]{margin-bottom:128px}}.VPContent[data-v-9a6c75ad]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-9a6c75ad]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-9a6c75ad]{margin:0}@media (min-width: 960px){.VPContent[data-v-9a6c75ad]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-9a6c75ad]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-9a6c75ad]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-566314d4]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-566314d4]{display:none}.VPFooter[data-v-566314d4] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-566314d4] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-566314d4]{padding:32px}}.container[data-v-566314d4]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-566314d4],.copyright[data-v-566314d4]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-883964e0]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-883964e0]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-883964e0]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-883964e0]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-883964e0]{color:var(--vp-c-text-1)}.icon[data-v-883964e0]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-883964e0]{font-size:14px}.icon[data-v-883964e0]{font-size:16px}}.open>.icon[data-v-883964e0]{transform:rotate(90deg)}.items[data-v-883964e0]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-883964e0]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-883964e0]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-883964e0]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-883964e0]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-883964e0]{transition:all .2s ease-out}.flyout-leave-active[data-v-883964e0]{transition:all .15s ease-in}.flyout-enter-from[data-v-883964e0],.flyout-leave-to[data-v-883964e0]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-2488c25a]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-2488c25a]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-2488c25a]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-2488c25a]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-2488c25a]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-2488c25a]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-2488c25a]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-2488c25a]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-2488c25a]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-2488c25a]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-2488c25a]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-2488c25a]{display:none}}.menu-icon[data-v-2488c25a]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-2488c25a]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-2488c25a]{padding:12px 32px 11px}}.VPSwitch[data-v-b4ccac88]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-b4ccac88]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-b4ccac88]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-b4ccac88]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-b4ccac88] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-b4ccac88] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-be9742d9]{opacity:1}.moon[data-v-be9742d9],.dark .sun[data-v-be9742d9]{opacity:0}.dark .moon[data-v-be9742d9]{opacity:1}.dark .VPSwitchAppearance[data-v-be9742d9] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-3f90c1a5]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-3f90c1a5]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-f51f088d]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-f51f088d]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-f51f088d]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-f51f088d]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-20ed86d6]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-20ed86d6] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-20ed86d6] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-20ed86d6] .group:last-child{padding-bottom:0}.VPMenu[data-v-20ed86d6] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-20ed86d6] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-20ed86d6] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-20ed86d6] .action{padding-left:24px}.VPFlyout[data-v-bfe7971f]{position:relative}.VPFlyout[data-v-bfe7971f]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-bfe7971f]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-bfe7971f]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-bfe7971f]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-bfe7971f]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-bfe7971f]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-bfe7971f],.button[aria-expanded=true]+.menu[data-v-bfe7971f]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-bfe7971f]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-bfe7971f]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-bfe7971f]{margin-right:0;font-size:16px}.text-icon[data-v-bfe7971f]{margin-left:4px;font-size:14px}.icon[data-v-bfe7971f]{font-size:20px;transition:fill .25s}.menu[data-v-bfe7971f]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-358b6670]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-358b6670]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-358b6670]>svg,.VPSocialLink[data-v-358b6670]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e71e869c]{display:flex;justify-content:center}.VPNavBarExtra[data-v-f953d92f]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-f953d92f]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-f953d92f]{display:none}}.trans-title[data-v-f953d92f]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-f953d92f],.item.social-links[data-v-f953d92f]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-f953d92f]{min-width:176px}.appearance-action[data-v-f953d92f]{margin-right:-2px}.social-links-list[data-v-f953d92f]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-08fbf4b6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-08fbf4b6],.VPNavBarMenuLink[data-v-08fbf4b6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-afb2845e]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-afb2845e]{display:flex}}/*! @docsearch/css 3.6.2 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.title[data-v-0ad69264]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-0ad69264]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-0ad69264]{border-bottom-color:var(--vp-c-divider)}}[data-v-0ad69264] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-acee064b]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-acee064b]{display:flex;align-items:center}}.title[data-v-acee064b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-9fd4d1dd]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-9fd4d1dd]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-9fd4d1dd]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-9fd4d1dd]:not(.home){background-color:transparent}.VPNavBar[data-v-9fd4d1dd]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-9fd4d1dd]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-9fd4d1dd]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-9fd4d1dd]{padding:0}}.container[data-v-9fd4d1dd]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-9fd4d1dd],.container>.content[data-v-9fd4d1dd]{pointer-events:none}.container[data-v-9fd4d1dd] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-9fd4d1dd]{max-width:100%}}.title[data-v-9fd4d1dd]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-9fd4d1dd]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-9fd4d1dd]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-9fd4d1dd]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-9fd4d1dd]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-9fd4d1dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-9fd4d1dd]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-9fd4d1dd]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-9fd4d1dd]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-9fd4d1dd]{column-gap:.5rem}}.menu+.translations[data-v-9fd4d1dd]:before,.menu+.appearance[data-v-9fd4d1dd]:before,.menu+.social-links[data-v-9fd4d1dd]:before,.translations+.appearance[data-v-9fd4d1dd]:before,.appearance+.social-links[data-v-9fd4d1dd]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-9fd4d1dd]:before,.translations+.appearance[data-v-9fd4d1dd]:before{margin-right:16px}.appearance+.social-links[data-v-9fd4d1dd]:before{margin-left:16px}.social-links[data-v-9fd4d1dd]{margin-right:-8px}.divider[data-v-9fd4d1dd]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-9fd4d1dd]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-9fd4d1dd]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-9fd4d1dd]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-9fd4d1dd]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-a3e2920d]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-a3e2920d]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-1a934d60]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-1a934d60]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-aea78dd1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-aea78dd1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-f60dbfa7]{display:block}.title[data-v-f60dbfa7]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-d99bfeec]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-d99bfeec]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-d99bfeec]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-d99bfeec]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-d99bfeec]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-d99bfeec]{transform:rotate(45deg)}.button[data-v-d99bfeec]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-d99bfeec]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-d99bfeec]{transition:transform .25s}.group[data-v-d99bfeec]:first-child{padding-top:0}.group+.group[data-v-d99bfeec],.group+.item[data-v-d99bfeec]{padding-top:4px}.VPNavScreenTranslations[data-v-516e4bc3]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-516e4bc3]{height:auto}.title[data-v-516e4bc3]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-516e4bc3]{font-size:16px}.icon.lang[data-v-516e4bc3]{margin-right:8px}.icon.chevron[data-v-516e4bc3]{margin-left:4px}.list[data-v-516e4bc3]{padding:4px 0 0 24px}.link[data-v-516e4bc3]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-2dd6d0c7]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-2dd6d0c7],.VPNavScreen.fade-leave-active[data-v-2dd6d0c7]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-2dd6d0c7],.VPNavScreen.fade-leave-active .container[data-v-2dd6d0c7]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-2dd6d0c7],.VPNavScreen.fade-leave-to[data-v-2dd6d0c7]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-2dd6d0c7],.VPNavScreen.fade-leave-to .container[data-v-2dd6d0c7]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-2dd6d0c7]{display:none}}.container[data-v-2dd6d0c7]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-2dd6d0c7],.menu+.appearance[data-v-2dd6d0c7],.translations+.appearance[data-v-2dd6d0c7]{margin-top:24px}.menu+.social-links[data-v-2dd6d0c7]{margin-top:16px}.appearance+.social-links[data-v-2dd6d0c7]{margin-top:16px}.VPNav[data-v-7ad780c2]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-7ad780c2]{position:fixed}}.VPSidebarItem.level-0[data-v-edd2eed8]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-edd2eed8]{padding-bottom:10px}.item[data-v-edd2eed8]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-edd2eed8]{cursor:pointer}.indicator[data-v-edd2eed8]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-edd2eed8],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-edd2eed8]{background-color:var(--vp-c-brand-1)}.link[data-v-edd2eed8]{display:flex;align-items:center;flex-grow:1}.text[data-v-edd2eed8]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-edd2eed8]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-edd2eed8],.VPSidebarItem.level-2 .text[data-v-edd2eed8],.VPSidebarItem.level-3 .text[data-v-edd2eed8],.VPSidebarItem.level-4 .text[data-v-edd2eed8],.VPSidebarItem.level-5 .text[data-v-edd2eed8]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-edd2eed8],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-edd2eed8]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-1.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-2.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-3.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-4.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-5.has-active>.item>.text[data-v-edd2eed8],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-edd2eed8],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-edd2eed8]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-edd2eed8],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-edd2eed8]{color:var(--vp-c-brand-1)}.caret[data-v-edd2eed8]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-edd2eed8]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-edd2eed8]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-edd2eed8]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-edd2eed8]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-edd2eed8],.VPSidebarItem.level-2 .items[data-v-edd2eed8],.VPSidebarItem.level-3 .items[data-v-edd2eed8],.VPSidebarItem.level-4 .items[data-v-edd2eed8],.VPSidebarItem.level-5 .items[data-v-edd2eed8]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-edd2eed8]{display:none}.no-transition[data-v-51288d80] .caret-icon{transition:none}.group+.group[data-v-51288d80]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-51288d80]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-42c4c606]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-42c4c606]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-42c4c606]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-42c4c606]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-42c4c606]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-42c4c606]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-42c4c606]{outline:0}.VPSkipLink[data-v-c8291ffa]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c8291ffa]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c8291ffa]{top:14px;left:16px}}.Layout[data-v-d8b57b2d]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3dc26e1d]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3dc26e1d]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3dc26e1d]{margin:128px 0}}.VPHomeSponsors[data-v-3dc26e1d]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3dc26e1d]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3dc26e1d]{padding:0 64px}}.container[data-v-3dc26e1d]{margin:0 auto;max-width:1152px}.love[data-v-3dc26e1d]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3dc26e1d]{display:inline-block}.message[data-v-3dc26e1d]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3dc26e1d]{padding-top:32px}.action[data-v-3dc26e1d]{padding-top:40px;text-align:center}.VPTeamPage[data-v-a5329171]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-a5329171]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-a5329171-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-a5329171-s],.VPTeamMembers+.VPTeamPageSection[data-v-a5329171-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-a5329171-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-a5329171-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-a5329171-s],.VPTeamMembers+.VPTeamPageSection[data-v-a5329171-s]{margin-top:96px}}.VPTeamMembers[data-v-a5329171-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-a5329171-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-a5329171-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-3bf2e850]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-acff304e]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-acff304e]{padding:32px}.VPTeamMembersItem.small .data[data-v-acff304e]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-acff304e]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-acff304e]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-acff304e]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-acff304e]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-acff304e]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-acff304e]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-acff304e]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-acff304e]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-acff304e]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-acff304e]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-acff304e]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-acff304e]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-acff304e]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-acff304e]{text-align:center}.avatar[data-v-acff304e]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-acff304e]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-acff304e]{margin:0;font-weight:600}.affiliation[data-v-acff304e]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-acff304e]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-acff304e]:hover{color:var(--vp-c-brand-1)}.desc[data-v-acff304e]{margin:0 auto}.desc[data-v-acff304e] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-acff304e]{display:flex;justify-content:center;height:56px}.sp-link[data-v-acff304e]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-acff304e]:hover,.sp .sp-link.link[data-v-acff304e]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-acff304e]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-bf782009]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-bf782009]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-bf782009]{max-width:876px}.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-bf782009]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-bf782009]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-bf782009]{max-width:760px}.container[data-v-bf782009]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-home-hero-name-background: var(--vp-c-text-1);--vp-home-hero-image-background-image: none}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: var(--vp-c-text-1);--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}html.dark{--vp-home-hero-name-background: var(--vp-c-text-1)}
          diff --git a/assets/terminology.md.DDvZWsL6.js b/assets/terminology.md.Wz1ZetDt.js
          similarity index 99%
          rename from assets/terminology.md.DDvZWsL6.js
          rename to assets/terminology.md.Wz1ZetDt.js
          index 25d7472e..09ebe610 100644
          --- a/assets/terminology.md.DDvZWsL6.js
          +++ b/assets/terminology.md.Wz1ZetDt.js
          @@ -1 +1 @@
          -import{_ as c,D as h,c as u,b as o,w as e,a7 as i,a6 as l,j as r,a,o as t,I as s}from"./chunks/framework.01Cf-Wcw.js";const d="/assets/2021-03-01-08-42-41.BdO1eeEs.png",p="/assets/2021-03-01-08-44-19.DxWpnxPw.png",m="/assets/2021-03-01-08-51-38.CHkYjk4h.png",f="/assets/2021-02-23-08-47-36.RQcrcNyf.png",g="/assets/2021-02-23-08-46-09.B9VWyRBz.png",y="/assets/2021-02-23-09-44-51.B5SaGcGw.png",b="/assets/2021-02-23-06-14-05.BkVlffY-.png",w="/assets/2021-02-23-09-18-04.BXIdr31W.png",q="/assets/2021-02-23-09-15-27.DlRPwHUk.png",A="/assets/2021-03-01-14-17-29.Ui23ea9E.png",k="/assets/2021-02-23-06-18-23.BGlqLMwh.png",C="/assets/2021-02-23-06-34-22.DUk9lR_9.png",T="/assets/2021-02-23-06-44-25.XILbubUc.png",_="/assets/2021-02-23-06-45-47.7M8JsL7z.png",Y=JSON.parse('{"title":"Terminology","description":"","frontmatter":{},"headers":[],"relativePath":"terminology.md","filePath":"terminology.md"}'),S={name:"terminology.md"},I=l('

          Terminology

          Tenants

          These are your Customers. We recommend syncing Tenants from CW Automate or Azure.

          User Computer Affinity

          ImmyBot periodically runs whoami /upn on all computers and keeps a rolling list of the last 10 UPNs. It assigns the Primary User of the computer to the "Person" (Synced from Azure) with the matching UPN.

          For environments without AzureAD, ImmyBot will lookup the UPN of the Person from a Domain Controller in the computer's Tenant

          Deployment

          Deployments were originally called "Assignments" and are still called Assignments under the hood.

          Note: You won't see the word "Assignment" in the user interface anywhere, but we plan to re-rename "Deployment" back to "Assignment" it in a future release.

          A deployment is a rule that assigns Software or Tasks (Collectively known as "Maintenance Items") to a Target.

          Deployments are conceptually similar to Group Policies in that they assign settings to a group of users or computers.

          DO NOT BE AFRAID TO SAVE YOUR DEPLOYMENTS. THEY DO NOT APPLY AUTOMATICALLY.

          If you DO want your Deployments to be applied automatically, you need to create a Schedule.

          Deployment Resolution

          Also known as

          • Creating Exceptions
          • "Winning" Deployments
          • Dealing with Snowflakes

          Like Group Policies have a "Winning Policy", ImmyBot must have a "Winning Deployment" for a given Maintenance Item on a computer.

          Let's say you have a customer "Contoso" that uses Adobe Acrobat instead of Adobe Reader, and you would like that to be installed instead.

          First, create a Deployment that sets the desired state of Adobe Reader to Uninstalled for Contoso

          Then, create a Deployment that Installs Adobe Acrobat for their computers

          Target

          A "Target" is a grouping of computers (or Tenants in the case of "Cloud Tasks")

          ImmyBot's ability to resolve Targets to a group of computers is perhaps its most powerful feature.

          For example, you can select a Group of users from AzureAD (which includes on-prem synced groups, and Teams) and ImmyBot will automatically resolve that to the list of computers in use by the people in that group.

          If you enable PSA integration, a Target could be all computers covered under a certain type of Agreement, or computers covered by an Agreement that includes a certain product.

          This is particularly useful for security software, help desk portals, or anything else in your stack that you may only want to be installed for customers that are paying you for it.

          Offboarding

          Conversely, you could create Deployments that remove your stack for customers you are offboarding.

          • Create an "Offboarding" product in your PSA
          • Create a deployment for each of the pieces of software you would like removed setting the desired state to Uninstalled
          • Target all customers with the "Offboarding" product on their agreement

          Note: ImmyBot even honors the date range on additions, making scheduled offboarding easier if say the customer wants your software removed on the last day of the month.

          Maintenance Session

          A Maintenance Session is conceptually similar to running gpupdate /force

          In other systems, different types of maintenance happen on their own schedule. Windows Updates may run on Tuesday night, but Third Party updates may run on Wednesday night, and auto-fix tasks may run whenever an alert is fired for a failed monitor, which has its own polling interval.

          By forcing all automation to happen in a sequential set of actions we call a Maintenance Session, we can deliver predictability not only as to what changes will be made, but also when.

          This also provides a cohesive mechanism for setting up a new computer. At best in traditional RMMs you can assign Monitors that detect the absence of required software and run Install scripts when they are missing, but this doesn't scale as pre-requisites and exclusions are required.

          Imagine if Group Policy could reliably deploy any type of software, and gpupdate /force worked reliably off-net, and when you ran it, it gave you real-time feedback about exactly what it was doing. Also imagine that it could optionally notify the end user before and after with a branded email telling them exactly what is being done, that optionally lets them cancel.

          That's a Maintenance Session.

          You can view Maintenance Sessions for all computers under Computers->Sessions

          Or, you can view Maintenance Sessions for a specific Computer under the Sessions tab for that Computer

          Maintenance Session Stages

          Detection Stage

          During the Detection Stage, ImmyBot "Detects" which Maintenance Actions are necessary to bring the computer into compliance. These Actions are added to the Maintenance Session.

          This is a read-only process, and typically done while the user is active. This is so ImmyBot can notify the user of changes that will occur later during the Execution Stage. By doing this during the day, and scheduling Execution for later, we are giving the end user the best possible chance to be aware of the upcoming maintenance, Postponing if you allow. The Postpone feature is very popular among engineers that do may need to leave renderings and analysis tasks running overnight.

          Execution Stage

          Maintenance Action

          ',51),P=l('

          A Maintenance Session has one or more Maintenance Actions. A Maintenance Action could be to install software, apply a Windows Update, or run a Task.

          The image below depicts a typical Maintenance Session with many Maintenance Actions

          Software

          Software, in the context of ImmyBot refers to Software objects in My Software or Global Software.

          My Software - Initially empty. When you upload your own software to ImmyBot, it goes into My Software

          Global Software - Read-Only, managed by the ImmyBot team.

          At the bare minimum, Software requires a Detection Method. Software can have many Software Versions.

          ',8),M=l('

          Pre-Requisities

          This is a VERY powerful, and critically underrated feature in ImmyBot. ImmyBot resolves dependencies recursively, with built-in circular reference detection.

          Common uses for Pre-Requisites include

          • Ensuring a piece of software is installed before installing another
            • C++ Redistributables before 3CX Client
            • Office is installed before an Outlook Add-in
          • Ensuring a piece of software is uninstalled before install another
            • Removing Adobe Acrobat Reader before installing Adobe Acrobat Professional

          Install required dependencies

          Ordering Maintenance Actions

          Detection Method

          A Detection Method is required in order to know whether or not a piece of Software is installed on a machine.

          For Software, the detection method must returns the version of the software installed on the machine, if any.

          For Tasks, the Detection Method is the "test" mechanism, which must return true or false to indicate whether or not the machine is in compliance.

          Software Version

          ',13),v=r("h2",{id:"task",tabindex:"-1"},[a("Task "),r("a",{class:"header-anchor",href:"#task","aria-label":'Permalink to "Task"'},"​")],-1),D=r("p",null,"A Task (aka Mainenance Task) is a catch-all for anything that isn't software.",-1),x=r("p",null,"or",-1),B=l('

          Task Modes

          Enforce

          Runs the "test" script, if the test returns false, runs "set", then runs "test" again to verify.

          Audit

          Runs the "test" script which should return true or false. It can output whatever it wants, but the last output should be boolean.

          Monitor

          Runs the "get" script, which can return anything. Useful for collecting data like Bitlocker Keys, Quickbooks Licenses, or any other piece of information you are interested in.

          Scripts

          From the above diagrams, you can see that scripts are the building blocks for higher level objects like Software and Tasks.

          Execution Context

          System

          Run as a service on the machine

          User

          Will attempt to run as the logged on user

          Metascript

          Runs in the ImmyBot backend, and can spawn code on the system by using Invoke-ImmyCommand

          Cloud Script

          Runs in the ImmyBot backend, but intended to be run against a Tenant (perhaps for the purpose of getting or setting some setting in 365/Azure or some other system with an API). These are used exclusively in Tasks targetting "Tenants".

          Schedules

          Used to run maintenance periodically on machines. Can optionally be limited to a single Maintenance Item.

          NOTE You must also have a Deployment for the Maintenance Item to set the desired state. Imagine a scenario where you need to ensure a single piece of software is up-to-date on all computers except for a CNC machine. Create 2 deployments, the first setting the desired state to Installed->Latest for all computers, then a second stating that the desired state is Ignored for the CNC machine. When you create the schedule, the software will be ignored for the CNC machine.

          Integrations

          To ImmyBot, an RMM is a system that provides a list of computers, and a mechanism to run PowerShell scripts on them.

          To avoid having to deploy the ImmyAgent to existing machines, ImmyBot optionally integrates with RMMs like ConnectWise Automate and ConnectWise Control and uses their agents instead. These systems are not as performant as the ImmyAgent, but can suppliment ImmyBot functionality.

          For example, if you add an RMM Link for ConnectWise Control, you can open a remote session to the computer directly within ImmyBot:

          If you add an RMM integration for ConnectWise Automate, Scheduled Maintenance Sessions will apply all Approved Windows Updates using the ConnectWise Automate API based on your Approval Policies in Automate Patch Manager.

          You can even add multiple RMMs of the same type, which is often useful in merger and acquisition scenarios. You may choose to use ImmyBot as your single pane of glass to manage both, or simply let ImmyBot be a neutral third party for facilitating the consolidation of RMM agents to the parent company's RMM.

          Identification

          Because the same computer often exists in multiple RMMs (Like how CW Automate typically installs CW Control Automatically), ImmyBot prevents duplicates by identifying the computer by a unique id. We DO NOT use MAC Address! This unique id persists even if you wipe and reload the machine.

          When a new machine is detected, it first goes to New Computers->Actively Identifying

          It uses the following script to collect the UUID from the machine:

          gwmi Win32_ComputerSystemProduct | select -expand UUID

          This value is static even if you wipe and reload the machine, although we have VERY rarely seen this value change following a BIOS upgrade or due to a mainboard fault. We chose this value instead of Mac Address or Hard Drive serial number because of issues other systems have with USB Ethernet cables and hard drive replacement. We did not use serialnumber because we learned that many computers do not have serial numbers.

          In practice, this value works almost too well. Machines you just wiped and expect to find in New Computers, are often associated to their pre-wiped computer objects. To find them, you often have to search for the serial number of the computer in the Computer List. In 0.40.1 we began using the Windows OfflineInstallationID value to identify when an existing computer has been wiped so we can set its status to "Needs Onboarding" which causes it to show up under New Computers as expected.

          If it is a machine ImmyBot has seen before, it will be associated to the existing Computer, and you will find a new entry under the Computer's Agents tab. Under the hood we call these entries "RmmComputers".

          Computers can have one or more RmmComputers(Agents). You can think of these as logical "pathways" to the computer. We only need one to be online to function.

          ',40);function E(R,N,U,W,O,V){const n=h("Mermaid");return t(),u("div",null,[I,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-181",class:"mermaid",graph:"flowchart%20TD%0A%20SoftwareInstall%20--%3E%20Detect%7BSoftware%20Installed%3F%7D%0A%20Detect%20--%3E%20%7CNo%7C%20Install%0A%20Detect%20--%3E%20%7CYes%7C%20HasConfigurationTask%7BHas%20Configuration%20Task%3F%7D%0A%20Install%20--%3E%20PostInstallDetect%7BSoftware%20Installed%3F%7D%0A%20PostInstallDetect%20--%3E%20%7CYes%7CHasConfigurationTask%0A%20HasConfigurationTask%20--%3E%20%7CYes%7C%20MaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20RunSetScript(Run%20Set%20Script)%0A%20RunSetScript%20--%3E%20PostMaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20Non-Compliant%0A%20PostInstallDetect%20--%3E%20%7CNo%7C%20Non-Compliant%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),P,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-206",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%5D%20--%3E%20D%5BCustom%20Detection%20Script%5D%0A%20%20%20%20C%20--%3EE%5BDefault%20Uninstall%20Script%5D%0A%20%20%20%20C%20--%3E%20F%5BAuto-Update%20Script%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),M,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-274",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%20Version%5D%20--%3E%20Install%0A%20%20%20%20C%20--%3E%20Uninstall%0A%20%20%20%20C%20--%3E%20Upgrade%0A%20%20%20%20C%20--%3E%20Repair%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),v,D,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-281",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20Get%0A%20%20%20%20C%20--%3E%20Set%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),x,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-285",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20S%5BCombined%20Script%20with%20%24method%20parameter%20containing%20'get'%2C'set'%2C%20or%20'test'%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),B])}const F=c(S,[["render",E]]);export{Y as __pageData,F as default}; +import{_ as c,D as h,c as u,b as o,w as e,a7 as i,a6 as l,j as r,a,o as t,I as s}from"./chunks/framework.B49Yz1nR.js";const d="/assets/2021-03-01-08-42-41.BdO1eeEs.png",p="/assets/2021-03-01-08-44-19.DxWpnxPw.png",m="/assets/2021-03-01-08-51-38.CHkYjk4h.png",f="/assets/2021-02-23-08-47-36.RQcrcNyf.png",g="/assets/2021-02-23-08-46-09.B9VWyRBz.png",y="/assets/2021-02-23-09-44-51.B5SaGcGw.png",b="/assets/2021-02-23-06-14-05.BkVlffY-.png",w="/assets/2021-02-23-09-18-04.BXIdr31W.png",q="/assets/2021-02-23-09-15-27.DlRPwHUk.png",A="/assets/2021-03-01-14-17-29.Ui23ea9E.png",k="/assets/2021-02-23-06-18-23.BGlqLMwh.png",C="/assets/2021-02-23-06-34-22.DUk9lR_9.png",T="/assets/2021-02-23-06-44-25.XILbubUc.png",_="/assets/2021-02-23-06-45-47.7M8JsL7z.png",Y=JSON.parse('{"title":"Terminology","description":"","frontmatter":{},"headers":[],"relativePath":"terminology.md","filePath":"terminology.md"}'),S={name:"terminology.md"},I=l('

          Terminology

          Tenants

          These are your Customers. We recommend syncing Tenants from CW Automate or Azure.

          User Computer Affinity

          ImmyBot periodically runs whoami /upn on all computers and keeps a rolling list of the last 10 UPNs. It assigns the Primary User of the computer to the "Person" (Synced from Azure) with the matching UPN.

          For environments without AzureAD, ImmyBot will lookup the UPN of the Person from a Domain Controller in the computer's Tenant

          Deployment

          Deployments were originally called "Assignments" and are still called Assignments under the hood.

          Note: You won't see the word "Assignment" in the user interface anywhere, but we plan to re-rename "Deployment" back to "Assignment" it in a future release.

          A deployment is a rule that assigns Software or Tasks (Collectively known as "Maintenance Items") to a Target.

          Deployments are conceptually similar to Group Policies in that they assign settings to a group of users or computers.

          DO NOT BE AFRAID TO SAVE YOUR DEPLOYMENTS. THEY DO NOT APPLY AUTOMATICALLY.

          If you DO want your Deployments to be applied automatically, you need to create a Schedule.

          Deployment Resolution

          Also known as

          • Creating Exceptions
          • "Winning" Deployments
          • Dealing with Snowflakes

          Like Group Policies have a "Winning Policy", ImmyBot must have a "Winning Deployment" for a given Maintenance Item on a computer.

          Let's say you have a customer "Contoso" that uses Adobe Acrobat instead of Adobe Reader, and you would like that to be installed instead.

          First, create a Deployment that sets the desired state of Adobe Reader to Uninstalled for Contoso

          Then, create a Deployment that Installs Adobe Acrobat for their computers

          Target

          A "Target" is a grouping of computers (or Tenants in the case of "Cloud Tasks")

          ImmyBot's ability to resolve Targets to a group of computers is perhaps its most powerful feature.

          For example, you can select a Group of users from AzureAD (which includes on-prem synced groups, and Teams) and ImmyBot will automatically resolve that to the list of computers in use by the people in that group.

          If you enable PSA integration, a Target could be all computers covered under a certain type of Agreement, or computers covered by an Agreement that includes a certain product.

          This is particularly useful for security software, help desk portals, or anything else in your stack that you may only want to be installed for customers that are paying you for it.

          Offboarding

          Conversely, you could create Deployments that remove your stack for customers you are offboarding.

          • Create an "Offboarding" product in your PSA
          • Create a deployment for each of the pieces of software you would like removed setting the desired state to Uninstalled
          • Target all customers with the "Offboarding" product on their agreement

          Note: ImmyBot even honors the date range on additions, making scheduled offboarding easier if say the customer wants your software removed on the last day of the month.

          Maintenance Session

          A Maintenance Session is conceptually similar to running gpupdate /force

          In other systems, different types of maintenance happen on their own schedule. Windows Updates may run on Tuesday night, but Third Party updates may run on Wednesday night, and auto-fix tasks may run whenever an alert is fired for a failed monitor, which has its own polling interval.

          By forcing all automation to happen in a sequential set of actions we call a Maintenance Session, we can deliver predictability not only as to what changes will be made, but also when.

          This also provides a cohesive mechanism for setting up a new computer. At best in traditional RMMs you can assign Monitors that detect the absence of required software and run Install scripts when they are missing, but this doesn't scale as pre-requisites and exclusions are required.

          Imagine if Group Policy could reliably deploy any type of software, and gpupdate /force worked reliably off-net, and when you ran it, it gave you real-time feedback about exactly what it was doing. Also imagine that it could optionally notify the end user before and after with a branded email telling them exactly what is being done, that optionally lets them cancel.

          That's a Maintenance Session.

          You can view Maintenance Sessions for all computers under Computers->Sessions

          Or, you can view Maintenance Sessions for a specific Computer under the Sessions tab for that Computer

          Maintenance Session Stages

          Detection Stage

          During the Detection Stage, ImmyBot "Detects" which Maintenance Actions are necessary to bring the computer into compliance. These Actions are added to the Maintenance Session.

          This is a read-only process, and typically done while the user is active. This is so ImmyBot can notify the user of changes that will occur later during the Execution Stage. By doing this during the day, and scheduling Execution for later, we are giving the end user the best possible chance to be aware of the upcoming maintenance, Postponing if you allow. The Postpone feature is very popular among engineers that do may need to leave renderings and analysis tasks running overnight.

          Execution Stage

          Maintenance Action

          ',51),P=l('

          A Maintenance Session has one or more Maintenance Actions. A Maintenance Action could be to install software, apply a Windows Update, or run a Task.

          The image below depicts a typical Maintenance Session with many Maintenance Actions

          Software

          Software, in the context of ImmyBot refers to Software objects in My Software or Global Software.

          My Software - Initially empty. When you upload your own software to ImmyBot, it goes into My Software

          Global Software - Read-Only, managed by the ImmyBot team.

          At the bare minimum, Software requires a Detection Method. Software can have many Software Versions.

          ',8),M=l('

          Pre-Requisities

          This is a VERY powerful, and critically underrated feature in ImmyBot. ImmyBot resolves dependencies recursively, with built-in circular reference detection.

          Common uses for Pre-Requisites include

          • Ensuring a piece of software is installed before installing another
            • C++ Redistributables before 3CX Client
            • Office is installed before an Outlook Add-in
          • Ensuring a piece of software is uninstalled before install another
            • Removing Adobe Acrobat Reader before installing Adobe Acrobat Professional

          Install required dependencies

          Ordering Maintenance Actions

          Detection Method

          A Detection Method is required in order to know whether or not a piece of Software is installed on a machine.

          For Software, the detection method must returns the version of the software installed on the machine, if any.

          For Tasks, the Detection Method is the "test" mechanism, which must return true or false to indicate whether or not the machine is in compliance.

          Software Version

          ',13),v=r("h2",{id:"task",tabindex:"-1"},[a("Task "),r("a",{class:"header-anchor",href:"#task","aria-label":'Permalink to "Task"'},"​")],-1),D=r("p",null,"A Task (aka Mainenance Task) is a catch-all for anything that isn't software.",-1),x=r("p",null,"or",-1),B=l('

          Task Modes

          Enforce

          Runs the "test" script, if the test returns false, runs "set", then runs "test" again to verify.

          Audit

          Runs the "test" script which should return true or false. It can output whatever it wants, but the last output should be boolean.

          Monitor

          Runs the "get" script, which can return anything. Useful for collecting data like Bitlocker Keys, Quickbooks Licenses, or any other piece of information you are interested in.

          Scripts

          From the above diagrams, you can see that scripts are the building blocks for higher level objects like Software and Tasks.

          Execution Context

          System

          Run as a service on the machine

          User

          Will attempt to run as the logged on user

          Metascript

          Runs in the ImmyBot backend, and can spawn code on the system by using Invoke-ImmyCommand

          Cloud Script

          Runs in the ImmyBot backend, but intended to be run against a Tenant (perhaps for the purpose of getting or setting some setting in 365/Azure or some other system with an API). These are used exclusively in Tasks targetting "Tenants".

          Schedules

          Used to run maintenance periodically on machines. Can optionally be limited to a single Maintenance Item.

          NOTE You must also have a Deployment for the Maintenance Item to set the desired state. Imagine a scenario where you need to ensure a single piece of software is up-to-date on all computers except for a CNC machine. Create 2 deployments, the first setting the desired state to Installed->Latest for all computers, then a second stating that the desired state is Ignored for the CNC machine. When you create the schedule, the software will be ignored for the CNC machine.

          Integrations

          To ImmyBot, an RMM is a system that provides a list of computers, and a mechanism to run PowerShell scripts on them.

          To avoid having to deploy the ImmyAgent to existing machines, ImmyBot optionally integrates with RMMs like ConnectWise Automate and ConnectWise Control and uses their agents instead. These systems are not as performant as the ImmyAgent, but can suppliment ImmyBot functionality.

          For example, if you add an RMM Link for ConnectWise Control, you can open a remote session to the computer directly within ImmyBot:

          If you add an RMM integration for ConnectWise Automate, Scheduled Maintenance Sessions will apply all Approved Windows Updates using the ConnectWise Automate API based on your Approval Policies in Automate Patch Manager.

          You can even add multiple RMMs of the same type, which is often useful in merger and acquisition scenarios. You may choose to use ImmyBot as your single pane of glass to manage both, or simply let ImmyBot be a neutral third party for facilitating the consolidation of RMM agents to the parent company's RMM.

          Identification

          Because the same computer often exists in multiple RMMs (Like how CW Automate typically installs CW Control Automatically), ImmyBot prevents duplicates by identifying the computer by a unique id. We DO NOT use MAC Address! This unique id persists even if you wipe and reload the machine.

          When a new machine is detected, it first goes to New Computers->Actively Identifying

          It uses the following script to collect the UUID from the machine:

          gwmi Win32_ComputerSystemProduct | select -expand UUID

          This value is static even if you wipe and reload the machine, although we have VERY rarely seen this value change following a BIOS upgrade or due to a mainboard fault. We chose this value instead of Mac Address or Hard Drive serial number because of issues other systems have with USB Ethernet cables and hard drive replacement. We did not use serialnumber because we learned that many computers do not have serial numbers.

          In practice, this value works almost too well. Machines you just wiped and expect to find in New Computers, are often associated to their pre-wiped computer objects. To find them, you often have to search for the serial number of the computer in the Computer List. In 0.40.1 we began using the Windows OfflineInstallationID value to identify when an existing computer has been wiped so we can set its status to "Needs Onboarding" which causes it to show up under New Computers as expected.

          If it is a machine ImmyBot has seen before, it will be associated to the existing Computer, and you will find a new entry under the Computer's Agents tab. Under the hood we call these entries "RmmComputers".

          Computers can have one or more RmmComputers(Agents). You can think of these as logical "pathways" to the computer. We only need one to be online to function.

          ',40);function E(R,N,U,W,O,V){const n=h("Mermaid");return t(),u("div",null,[I,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-181",class:"mermaid",graph:"flowchart%20TD%0A%20SoftwareInstall%20--%3E%20Detect%7BSoftware%20Installed%3F%7D%0A%20Detect%20--%3E%20%7CNo%7C%20Install%0A%20Detect%20--%3E%20%7CYes%7C%20HasConfigurationTask%7BHas%20Configuration%20Task%3F%7D%0A%20Install%20--%3E%20PostInstallDetect%7BSoftware%20Installed%3F%7D%0A%20PostInstallDetect%20--%3E%20%7CYes%7CHasConfigurationTask%0A%20HasConfigurationTask%20--%3E%20%7CYes%7C%20MaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20RunSetScript(Run%20Set%20Script)%0A%20RunSetScript%20--%3E%20PostMaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20Non-Compliant%0A%20PostInstallDetect%20--%3E%20%7CNo%7C%20Non-Compliant%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),P,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-206",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%5D%20--%3E%20D%5BCustom%20Detection%20Script%5D%0A%20%20%20%20C%20--%3EE%5BDefault%20Uninstall%20Script%5D%0A%20%20%20%20C%20--%3E%20F%5BAuto-Update%20Script%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),M,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-274",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%20Version%5D%20--%3E%20Install%0A%20%20%20%20C%20--%3E%20Uninstall%0A%20%20%20%20C%20--%3E%20Upgrade%0A%20%20%20%20C%20--%3E%20Repair%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),v,D,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-281",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20Get%0A%20%20%20%20C%20--%3E%20Set%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),x,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-285",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20S%5BCombined%20Script%20with%20%24method%20parameter%20containing%20'get'%2C'set'%2C%20or%20'test'%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),B])}const F=c(S,[["render",E]]);export{Y as __pageData,F as default}; diff --git a/assets/terminology.md.DDvZWsL6.lean.js b/assets/terminology.md.Wz1ZetDt.lean.js similarity index 98% rename from assets/terminology.md.DDvZWsL6.lean.js rename to assets/terminology.md.Wz1ZetDt.lean.js index b3af1099..1d1deb6a 100644 --- a/assets/terminology.md.DDvZWsL6.lean.js +++ b/assets/terminology.md.Wz1ZetDt.lean.js @@ -1 +1 @@ -import{_ as c,D as h,c as u,b as o,w as e,a7 as i,a6 as l,j as r,a,o as t,I as s}from"./chunks/framework.01Cf-Wcw.js";const d="/assets/2021-03-01-08-42-41.BdO1eeEs.png",p="/assets/2021-03-01-08-44-19.DxWpnxPw.png",m="/assets/2021-03-01-08-51-38.CHkYjk4h.png",f="/assets/2021-02-23-08-47-36.RQcrcNyf.png",g="/assets/2021-02-23-08-46-09.B9VWyRBz.png",y="/assets/2021-02-23-09-44-51.B5SaGcGw.png",b="/assets/2021-02-23-06-14-05.BkVlffY-.png",w="/assets/2021-02-23-09-18-04.BXIdr31W.png",q="/assets/2021-02-23-09-15-27.DlRPwHUk.png",A="/assets/2021-03-01-14-17-29.Ui23ea9E.png",k="/assets/2021-02-23-06-18-23.BGlqLMwh.png",C="/assets/2021-02-23-06-34-22.DUk9lR_9.png",T="/assets/2021-02-23-06-44-25.XILbubUc.png",_="/assets/2021-02-23-06-45-47.7M8JsL7z.png",Y=JSON.parse('{"title":"Terminology","description":"","frontmatter":{},"headers":[],"relativePath":"terminology.md","filePath":"terminology.md"}'),S={name:"terminology.md"},I=l("",51),P=l("",8),M=l("",13),v=r("h2",{id:"task",tabindex:"-1"},[a("Task "),r("a",{class:"header-anchor",href:"#task","aria-label":'Permalink to "Task"'},"​")],-1),D=r("p",null,"A Task (aka Mainenance Task) is a catch-all for anything that isn't software.",-1),x=r("p",null,"or",-1),B=l("",40);function E(R,N,U,W,O,V){const n=h("Mermaid");return t(),u("div",null,[I,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-181",class:"mermaid",graph:"flowchart%20TD%0A%20SoftwareInstall%20--%3E%20Detect%7BSoftware%20Installed%3F%7D%0A%20Detect%20--%3E%20%7CNo%7C%20Install%0A%20Detect%20--%3E%20%7CYes%7C%20HasConfigurationTask%7BHas%20Configuration%20Task%3F%7D%0A%20Install%20--%3E%20PostInstallDetect%7BSoftware%20Installed%3F%7D%0A%20PostInstallDetect%20--%3E%20%7CYes%7CHasConfigurationTask%0A%20HasConfigurationTask%20--%3E%20%7CYes%7C%20MaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20RunSetScript(Run%20Set%20Script)%0A%20RunSetScript%20--%3E%20PostMaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20Non-Compliant%0A%20PostInstallDetect%20--%3E%20%7CNo%7C%20Non-Compliant%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),P,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-206",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%5D%20--%3E%20D%5BCustom%20Detection%20Script%5D%0A%20%20%20%20C%20--%3EE%5BDefault%20Uninstall%20Script%5D%0A%20%20%20%20C%20--%3E%20F%5BAuto-Update%20Script%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),M,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-274",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%20Version%5D%20--%3E%20Install%0A%20%20%20%20C%20--%3E%20Uninstall%0A%20%20%20%20C%20--%3E%20Upgrade%0A%20%20%20%20C%20--%3E%20Repair%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),v,D,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-281",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20Get%0A%20%20%20%20C%20--%3E%20Set%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),x,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-285",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20S%5BCombined%20Script%20with%20%24method%20parameter%20containing%20'get'%2C'set'%2C%20or%20'test'%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),B])}const F=c(S,[["render",E]]);export{Y as __pageData,F as default}; +import{_ as c,D as h,c as u,b as o,w as e,a7 as i,a6 as l,j as r,a,o as t,I as s}from"./chunks/framework.B49Yz1nR.js";const d="/assets/2021-03-01-08-42-41.BdO1eeEs.png",p="/assets/2021-03-01-08-44-19.DxWpnxPw.png",m="/assets/2021-03-01-08-51-38.CHkYjk4h.png",f="/assets/2021-02-23-08-47-36.RQcrcNyf.png",g="/assets/2021-02-23-08-46-09.B9VWyRBz.png",y="/assets/2021-02-23-09-44-51.B5SaGcGw.png",b="/assets/2021-02-23-06-14-05.BkVlffY-.png",w="/assets/2021-02-23-09-18-04.BXIdr31W.png",q="/assets/2021-02-23-09-15-27.DlRPwHUk.png",A="/assets/2021-03-01-14-17-29.Ui23ea9E.png",k="/assets/2021-02-23-06-18-23.BGlqLMwh.png",C="/assets/2021-02-23-06-34-22.DUk9lR_9.png",T="/assets/2021-02-23-06-44-25.XILbubUc.png",_="/assets/2021-02-23-06-45-47.7M8JsL7z.png",Y=JSON.parse('{"title":"Terminology","description":"","frontmatter":{},"headers":[],"relativePath":"terminology.md","filePath":"terminology.md"}'),S={name:"terminology.md"},I=l("",51),P=l("",8),M=l("",13),v=r("h2",{id:"task",tabindex:"-1"},[a("Task "),r("a",{class:"header-anchor",href:"#task","aria-label":'Permalink to "Task"'},"​")],-1),D=r("p",null,"A Task (aka Mainenance Task) is a catch-all for anything that isn't software.",-1),x=r("p",null,"or",-1),B=l("",40);function E(R,N,U,W,O,V){const n=h("Mermaid");return t(),u("div",null,[I,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-181",class:"mermaid",graph:"flowchart%20TD%0A%20SoftwareInstall%20--%3E%20Detect%7BSoftware%20Installed%3F%7D%0A%20Detect%20--%3E%20%7CNo%7C%20Install%0A%20Detect%20--%3E%20%7CYes%7C%20HasConfigurationTask%7BHas%20Configuration%20Task%3F%7D%0A%20Install%20--%3E%20PostInstallDetect%7BSoftware%20Installed%3F%7D%0A%20PostInstallDetect%20--%3E%20%7CYes%7CHasConfigurationTask%0A%20HasConfigurationTask%20--%3E%20%7CYes%7C%20MaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20MaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20RunSetScript(Run%20Set%20Script)%0A%20RunSetScript%20--%3E%20PostMaintenanceTaskTest%7BRun%20Test%20Script%7D%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24true%7C%20Compliant%0A%20PostMaintenanceTaskTest%20--%3E%20%7Creturn%20%24false%7C%20Non-Compliant%0A%20PostInstallDetect%20--%3E%20%7CNo%7C%20Non-Compliant%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),P,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-206",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%5D%20--%3E%20D%5BCustom%20Detection%20Script%5D%0A%20%20%20%20C%20--%3EE%5BDefault%20Uninstall%20Script%5D%0A%20%20%20%20C%20--%3E%20F%5BAuto-Update%20Script%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),M,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-274",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BSoftware%20Version%5D%20--%3E%20Install%0A%20%20%20%20C%20--%3E%20Uninstall%0A%20%20%20%20C%20--%3E%20Upgrade%0A%20%20%20%20C%20--%3E%20Repair%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),v,D,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-281",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20Get%0A%20%20%20%20C%20--%3E%20Set%0A%20%20%20%20C%20--%3E%20Test%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),x,(t(),o(i,null,{default:e(()=>[s(n,{id:"mermaid-285",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20C%5BTask%5D%0A%20%20%20%20C%20--%3E%20S%5BCombined%20Script%20with%20%24method%20parameter%20containing%20'get'%2C'set'%2C%20or%20'test'%5D%0A"})]),fallback:e(()=>[a(" Loading... ")]),_:1})),B])}const F=c(S,[["render",E]]);export{Y as __pageData,F as default}; diff --git a/assets/troubleshooting.md.BULOapdN.js b/assets/troubleshooting.md._hAa0pQ-.js similarity index 99% rename from assets/troubleshooting.md.BULOapdN.js rename to assets/troubleshooting.md._hAa0pQ-.js index 7d5f3f99..e0197fc8 100644 --- a/assets/troubleshooting.md.BULOapdN.js +++ b/assets/troubleshooting.md._hAa0pQ-.js @@ -1,4 +1,4 @@ -import{_ as c,D as p,c as d,b as s,w as t,a7 as o,a6 as r,j as e,o as a,I as i,a as l}from"./chunks/framework.01Cf-Wcw.js";const D=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md"}'),u={name:"troubleshooting.md"},h=r('

          ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

          .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

          Please see the FAQ section for more details

          Troubleshooting

          Identification Failures

          Needs a Manual Decision

          Generally you will click "Agent Re-installed"

          Often when an RMM Agent gets re-installed, it will get a new id in the RMM (ComputerId in Automate, SessionID in Control). ImmyBot will recognize that it is the same computer, but due to the fact that virtualization technologies and hard drive cloning can lead to the same scenario, we require you to tell us whether we should overwrite the existing RmmComputer, or keep both. 99% of the time you will click "Overwrite Existing". If the machine was in fact cloned, you would click Keep Both, in which case Immy shims the duplicate UUID with its own to prevent collisions.

          Pending Computers

          Computers in the pending status have yet to be identified.

          Computers may get stuck here if we are unable to run our Ephemeral Agent

          ',9),m=e("p",null,"Top 3 reasons for Identification Failures",-1),g=e("ol",null,[e("li",null,"SSL Inspection blocking our websocket"),e("li",null,"Security Software blocking PowerShell"),e("li",null,"Incorrect time is preventing SSL/TLS connection")],-1),f=e("p",null,"To understand the various reasons identification can fail, it helps to understand how ImmyBot executions PowerShell",-1),b=e("ol",null,[e("li",null,"RMM or ImmyAgent runs Immybot.Agent.Ephemeral.exe"),e("li",null,"Immybot.Agent.Ephemeral.exe establishes a secure websocket to wss://subdomain.immy.bot and runs Invoke-PSPipeHost.ps1"),e("li",null,"Immybot.Agent.Ephemeral.exe feeds Invoke-PSPipeHost.ps1 PowerShell over a pipe from the websocket session")],-1),y=r(`

          The most common cause of identification failure is security software.

          To know if this is the case, pull the logs from C:\\ProgramData\\ImmyBotAgentService*.log

          image

          Normal Immybot Agent logs look like this:

          2022-06-14 00:02:25.560 -05:00 [DBG] Hosting starting
          +import{_ as c,D as p,c as d,b as s,w as t,a7 as o,a6 as r,j as e,o as a,I as i,a as l}from"./chunks/framework.B49Yz1nR.js";const D=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md"}'),u={name:"troubleshooting.md"},h=r('

          ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

          .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

          Please see the FAQ section for more details

          Troubleshooting

          Identification Failures

          Needs a Manual Decision

          Generally you will click "Agent Re-installed"

          Often when an RMM Agent gets re-installed, it will get a new id in the RMM (ComputerId in Automate, SessionID in Control). ImmyBot will recognize that it is the same computer, but due to the fact that virtualization technologies and hard drive cloning can lead to the same scenario, we require you to tell us whether we should overwrite the existing RmmComputer, or keep both. 99% of the time you will click "Overwrite Existing". If the machine was in fact cloned, you would click Keep Both, in which case Immy shims the duplicate UUID with its own to prevent collisions.

          Pending Computers

          Computers in the pending status have yet to be identified.

          Computers may get stuck here if we are unable to run our Ephemeral Agent

          ',9),m=e("p",null,"Top 3 reasons for Identification Failures",-1),g=e("ol",null,[e("li",null,"SSL Inspection blocking our websocket"),e("li",null,"Security Software blocking PowerShell"),e("li",null,"Incorrect time is preventing SSL/TLS connection")],-1),f=e("p",null,"To understand the various reasons identification can fail, it helps to understand how ImmyBot executions PowerShell",-1),b=e("ol",null,[e("li",null,"RMM or ImmyAgent runs Immybot.Agent.Ephemeral.exe"),e("li",null,"Immybot.Agent.Ephemeral.exe establishes a secure websocket to wss://subdomain.immy.bot and runs Invoke-PSPipeHost.ps1"),e("li",null,"Immybot.Agent.Ephemeral.exe feeds Invoke-PSPipeHost.ps1 PowerShell over a pipe from the websocket session")],-1),y=r(`

          The most common cause of identification failure is security software.

          To know if this is the case, pull the logs from C:\\ProgramData\\ImmyBotAgentService*.log

          image

          Normal Immybot Agent logs look like this:

          2022-06-14 00:02:25.560 -05:00 [DBG] Hosting starting
           2022-06-14 00:02:25.799 -05:00 [INF] Starting Immybot Agent
           2022-06-14 00:02:25.943 -05:00 [INF] Using configuration file stored at: C:\\ProgramData\\ImmyBotAgentService\\config.json
           2022-06-14 00:02:26.875 -05:00 [DBG] Initializing IoT Hub connection
          diff --git a/assets/troubleshooting.md.BULOapdN.lean.js b/assets/troubleshooting.md._hAa0pQ-.lean.js
          similarity index 98%
          rename from assets/troubleshooting.md.BULOapdN.lean.js
          rename to assets/troubleshooting.md._hAa0pQ-.lean.js
          index 6fe70ad2..3c8febec 100644
          --- a/assets/troubleshooting.md.BULOapdN.lean.js
          +++ b/assets/troubleshooting.md._hAa0pQ-.lean.js
          @@ -1 +1 @@
          -import{_ as c,D as p,c as d,b as s,w as t,a7 as o,a6 as r,j as e,o as a,I as i,a as l}from"./chunks/framework.01Cf-Wcw.js";const D=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md"}'),u={name:"troubleshooting.md"},h=r("",9),m=e("p",null,"Top 3 reasons for Identification Failures",-1),g=e("ol",null,[e("li",null,"SSL Inspection blocking our websocket"),e("li",null,"Security Software blocking PowerShell"),e("li",null,"Incorrect time is preventing SSL/TLS connection")],-1),f=e("p",null,"To understand the various reasons identification can fail, it helps to understand how ImmyBot executions PowerShell",-1),b=e("ol",null,[e("li",null,"RMM or ImmyAgent runs Immybot.Agent.Ephemeral.exe"),e("li",null,"Immybot.Agent.Ephemeral.exe establishes a secure websocket to wss://subdomain.immy.bot and runs Invoke-PSPipeHost.ps1"),e("li",null,"Immybot.Agent.Ephemeral.exe feeds Invoke-PSPipeHost.ps1 PowerShell over a pipe from the websocket session")],-1),y=r("",54);function w(C,S,k,I,A,v){const n=p("Mermaid");return a(),d("div",null,[h,(a(),s(o,null,{default:t(()=>[i(n,{id:"mermaid-32",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20CheckImmyAgentLogs%5BCheck%20ImmyAgent%20Logs%20in%20C%3A%5CProgramData%5CImmyBot%5CLogs%5D%20--%3E%20DidEphemeralAgentStart%5BImmybot.Agent.Ephemeral.exe%20start%3F%5D%0A%20%20%20%20DidEphemeralAgentStart%20--%3E%20%7CYes%7CCheckEphemeralAgentLogs%5BCheck%20Ephemeral%20Agent%20logs%20in%20C%3A%5CProgramData%5CImmyBot%5CScripts%5C*%5C*.log%5D%0A%20%20%20%20DidEphemeralAgentStart%20--%3E%20%7CNo%7CBlockedBySecuritySoftware%5BExclude%20Script%20Path%20from%20Security%20Software%5D%0A%20%20%20%20CheckEphemeralAgentLogs%20--%3E%20EphemeralAgentConnect%5BDid%20Ephemeral%20Agent%20Websocket%20Connect%3F%5D%0A%20%20%20%20EphemeralAgentConnect%20--%3E%7CYes%7CDidSuccessfullyIdentifyAfterFix%0A%20%20%20%20EphemeralAgentConnect%20--%3E%20%7CNo%7CTryNoSSLInspect%5BPut%20on%20network%20without%20SSL%20Inspection%5D%0A%20%20%20%20TryNoSSLInspect%20--%3E%20DidSuccessfullyIdentifyAfterFix%5BEphemeral%20Agent%20Connect%20After%20Fix%3F%5D%0A%20%20%20%20DidSuccessfullyIdentifyAfterFix%5BMachine%20Identify%20Successfully%3F%5D%20--%3E%20%7CNo%7CEmailSupport%0A%20%20%20%20DidSuccessfullyIdentifyAfterFix%5BMachine%20Identify%20Successfully%3F%5D%20--%3E%20%7CYes%7CDone%0A%20%20%20%20EmailSupport%5B%22Email%20logs%20from%20C%3A%5CProgramData%5CImmyBot%5CLogs%20and%20C%3A%5CProgramData%5CImmyBot%5CScripts%5C*%5C*.logs%20to%20support%40immy.bot%22%5D%0A"})]),fallback:t(()=>[l(" Loading... ")]),_:1})),m,g,f,b,(a(),s(o,null,{default:t(()=>[i(n,{id:"mermaid-73",class:"mermaid",graph:"graph%20LR%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CAutomate%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20Automate%5D%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CControl%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20Control%5D%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CImmyAgent%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20ImmyAgent%5D%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CN-Central%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20N-Central%5D%0A%20%20%20%20Automate%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20Control%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20ImmyAgent%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20N-Central%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20Immybot.Agent.Ephemeral.exe%20--%3E%20cmd.exe%20--%3E%20powershell.exe%20--%3E%20Invoke-PSPipeHost.ps1%0A"})]),fallback:t(()=>[l(" Loading... ")]),_:1})),y])}const E=c(u,[["render",w]]);export{D as __pageData,E as default};
          +import{_ as c,D as p,c as d,b as s,w as t,a7 as o,a6 as r,j as e,o as a,I as i,a as l}from"./chunks/framework.B49Yz1nR.js";const D=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md"}'),u={name:"troubleshooting.md"},h=r("",9),m=e("p",null,"Top 3 reasons for Identification Failures",-1),g=e("ol",null,[e("li",null,"SSL Inspection blocking our websocket"),e("li",null,"Security Software blocking PowerShell"),e("li",null,"Incorrect time is preventing SSL/TLS connection")],-1),f=e("p",null,"To understand the various reasons identification can fail, it helps to understand how ImmyBot executions PowerShell",-1),b=e("ol",null,[e("li",null,"RMM or ImmyAgent runs Immybot.Agent.Ephemeral.exe"),e("li",null,"Immybot.Agent.Ephemeral.exe establishes a secure websocket to wss://subdomain.immy.bot and runs Invoke-PSPipeHost.ps1"),e("li",null,"Immybot.Agent.Ephemeral.exe feeds Invoke-PSPipeHost.ps1 PowerShell over a pipe from the websocket session")],-1),y=r("",54);function w(C,S,k,I,A,v){const n=p("Mermaid");return a(),d("div",null,[h,(a(),s(o,null,{default:t(()=>[i(n,{id:"mermaid-32",class:"mermaid",graph:"graph%20TD%0A%20%20%20%20CheckImmyAgentLogs%5BCheck%20ImmyAgent%20Logs%20in%20C%3A%5CProgramData%5CImmyBot%5CLogs%5D%20--%3E%20DidEphemeralAgentStart%5BImmybot.Agent.Ephemeral.exe%20start%3F%5D%0A%20%20%20%20DidEphemeralAgentStart%20--%3E%20%7CYes%7CCheckEphemeralAgentLogs%5BCheck%20Ephemeral%20Agent%20logs%20in%20C%3A%5CProgramData%5CImmyBot%5CScripts%5C*%5C*.log%5D%0A%20%20%20%20DidEphemeralAgentStart%20--%3E%20%7CNo%7CBlockedBySecuritySoftware%5BExclude%20Script%20Path%20from%20Security%20Software%5D%0A%20%20%20%20CheckEphemeralAgentLogs%20--%3E%20EphemeralAgentConnect%5BDid%20Ephemeral%20Agent%20Websocket%20Connect%3F%5D%0A%20%20%20%20EphemeralAgentConnect%20--%3E%7CYes%7CDidSuccessfullyIdentifyAfterFix%0A%20%20%20%20EphemeralAgentConnect%20--%3E%20%7CNo%7CTryNoSSLInspect%5BPut%20on%20network%20without%20SSL%20Inspection%5D%0A%20%20%20%20TryNoSSLInspect%20--%3E%20DidSuccessfullyIdentifyAfterFix%5BEphemeral%20Agent%20Connect%20After%20Fix%3F%5D%0A%20%20%20%20DidSuccessfullyIdentifyAfterFix%5BMachine%20Identify%20Successfully%3F%5D%20--%3E%20%7CNo%7CEmailSupport%0A%20%20%20%20DidSuccessfullyIdentifyAfterFix%5BMachine%20Identify%20Successfully%3F%5D%20--%3E%20%7CYes%7CDone%0A%20%20%20%20EmailSupport%5B%22Email%20logs%20from%20C%3A%5CProgramData%5CImmyBot%5CLogs%20and%20C%3A%5CProgramData%5CImmyBot%5CScripts%5C*%5C*.logs%20to%20support%40immy.bot%22%5D%0A"})]),fallback:t(()=>[l(" Loading... ")]),_:1})),m,g,f,b,(a(),s(o,null,{default:t(()=>[i(n,{id:"mermaid-73",class:"mermaid",graph:"graph%20LR%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CAutomate%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20Automate%5D%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CControl%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20Control%5D%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CImmyAgent%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20ImmyAgent%5D%0A%20%20%20%20ImmyBot%20--%3E%20%7CParallel%7CN-Central%5BRun%20script%20to%20download%20and%20run%20Ephemeral%20Agent%20via%20N-Central%5D%0A%20%20%20%20Automate%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20Control%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20ImmyAgent%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20N-Central%20--%3E%20Immybot.Agent.Ephemeral.exe%0A%20%20%20%20Immybot.Agent.Ephemeral.exe%20--%3E%20cmd.exe%20--%3E%20powershell.exe%20--%3E%20Invoke-PSPipeHost.ps1%0A"})]),fallback:t(()=>[l(" Loading... ")]),_:1})),y])}const E=c(u,[["render",w]]);export{D as __pageData,E as default};
          diff --git a/assets/user-roles.md.DuUr6iiw.js b/assets/user-roles.md.CJ8-YXJu.js
          similarity index 94%
          rename from assets/user-roles.md.DuUr6iiw.js
          rename to assets/user-roles.md.CJ8-YXJu.js
          index 1acd1666..755644a0 100644
          --- a/assets/user-roles.md.DuUr6iiw.js
          +++ b/assets/user-roles.md.CJ8-YXJu.js
          @@ -1 +1 @@
          -import{_ as e,c as t,o as n,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const _=JSON.parse('{"title":"User Roles","description":"","frontmatter":{},"headers":[],"relativePath":"user-roles.md","filePath":"user-roles.md"}'),i={name:"user-roles.md"},s=a('

          User Roles

          MSP Admin

          • Full Access, no restrictions

          MSP Non-Admin

          • Cannot create/edit/delete Schedules
          • Cannot create/edit/delete Users
          • Cannot create/edit/delete Cross Tenant Deployments
          • Can create/edit/delete Single-Tenant and Individual Deployments
            • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admin Users to Manage Deployments" setting
          • Can access terminal on all machines and edit scripts
            • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admins and Non-MSP Users to Use Terminal and Edit Scripts"
              • Disabling this prevents these users from being able to run arbitrary code on devices

          Customer (Tenant) Admin

          • Can view/edit Computers, Licenses and Deployments for their Tenant
          • Can create users in their tenant
          • Software they upload is owned by their tenant and are not visible to other tenants
          • Licenses they create are owned by their tenant and are not visible to other tenants

          Customer (Tenant) Non-Admin

          • Cannot create Schedules
          • Cannot create Cross Tenant Deployments
          • Cannot create Users
          • Can create Deployments scoped to individual Computers and People
          ',9),l=[s];function o(r,d,c,m,u,h){return n(),t("div",null,l)}const C=e(i,[["render",o]]);export{_ as __pageData,C as default}; +import{_ as e,c as t,o as n,a6 as a}from"./chunks/framework.B49Yz1nR.js";const _=JSON.parse('{"title":"User Roles","description":"","frontmatter":{},"headers":[],"relativePath":"user-roles.md","filePath":"user-roles.md"}'),i={name:"user-roles.md"},s=a('

          User Roles

          MSP Admin

          • Full Access, no restrictions

          MSP Non-Admin

          • Cannot create/edit/delete Schedules
          • Cannot create/edit/delete Users
          • Cannot create/edit/delete Cross Tenant Deployments
          • Can create/edit/delete Single-Tenant and Individual Deployments
            • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admin Users to Manage Deployments" setting
          • Can access terminal on all machines and edit scripts
            • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admins and Non-MSP Users to Use Terminal and Edit Scripts"
              • Disabling this prevents these users from being able to run arbitrary code on devices

          Customer (Tenant) Admin

          • Can view/edit Computers, Licenses and Deployments for their Tenant
          • Can create users in their tenant
          • Software they upload is owned by their tenant and are not visible to other tenants
          • Licenses they create are owned by their tenant and are not visible to other tenants

          Customer (Tenant) Non-Admin

          • Cannot create Schedules
          • Cannot create Cross Tenant Deployments
          • Cannot create Users
          • Can create Deployments scoped to individual Computers and People
          ',9),l=[s];function o(r,d,c,m,u,h){return n(),t("div",null,l)}const C=e(i,[["render",o]]);export{_ as __pageData,C as default}; diff --git a/assets/user-roles.md.DuUr6iiw.lean.js b/assets/user-roles.md.CJ8-YXJu.lean.js similarity index 66% rename from assets/user-roles.md.DuUr6iiw.lean.js rename to assets/user-roles.md.CJ8-YXJu.lean.js index fd3467a2..1e536ba2 100644 --- a/assets/user-roles.md.DuUr6iiw.lean.js +++ b/assets/user-roles.md.CJ8-YXJu.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as n,a6 as a}from"./chunks/framework.01Cf-Wcw.js";const _=JSON.parse('{"title":"User Roles","description":"","frontmatter":{},"headers":[],"relativePath":"user-roles.md","filePath":"user-roles.md"}'),i={name:"user-roles.md"},s=a("",9),l=[s];function o(r,d,c,m,u,h){return n(),t("div",null,l)}const C=e(i,[["render",o]]);export{_ as __pageData,C as default}; +import{_ as e,c as t,o as n,a6 as a}from"./chunks/framework.B49Yz1nR.js";const _=JSON.parse('{"title":"User Roles","description":"","frontmatter":{},"headers":[],"relativePath":"user-roles.md","filePath":"user-roles.md"}'),i={name:"user-roles.md"},s=a("",9),l=[s];function o(r,d,c,m,u,h){return n(),t("div",null,l)}const C=e(i,[["render",o]]);export{_ as __pageData,C as default}; diff --git a/assets/windows-sandbox.md.d3YI4PLI.js b/assets/windows-sandbox.md.c7d4kCuI.js similarity index 95% rename from assets/windows-sandbox.md.d3YI4PLI.js rename to assets/windows-sandbox.md.c7d4kCuI.js index f8c2172d..9f5a7472 100644 --- a/assets/windows-sandbox.md.d3YI4PLI.js +++ b/assets/windows-sandbox.md.c7d4kCuI.js @@ -1 +1 @@ -import{_ as s,c as a,o as i,a6 as t}from"./chunks/framework.01Cf-Wcw.js";const n="/assets/2021-03-15-08-29-07.BdFD1zRT.png",e="/assets/2021-03-15-08-29-35.BUp-D2PC.png",o="/assets/2021-03-15-08-29-41.B7TpTpoA.png",l="/assets/2021-03-15-08-30-29.zuwA3BiM.png",d="/assets/2021-03-15-08-47-28.THpYN72B.png",p="/assets/2021-03-15-08-37-50.3CeA6zWR.png",x=JSON.parse('{"title":"Testing with Windows Sandbox","description":"","frontmatter":{},"headers":[],"relativePath":"windows-sandbox.md","filePath":"windows-sandbox.md"}'),r={name:"windows-sandbox.md"},h=t('

          Testing with Windows Sandbox

          Windows Sandbox is a fast loading disposable container in Windows that loses all settings when shutdown or restarted. It is very convenient for testing software deployments. It should be noted that not all software is compatible with Windows Sandbox, particular software that installs drivers or requires restarts.

          If you haven't used Windows Sandbox before, you can enable it by opening Windows PowerShell as Admin and running the following command:

          powershell
          Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online -NoRestart

          Download Windows Sandbox file (.wsb)

          Wait for ImmyBot Agent to install

          Onboard the Sandbox

          This will create an "Onboarding" Session (sessions are like running gpupdate) that will apply all applicable Deployments (deployments are like Group Policies)

          ',12),c=[h];function w(g,b,k,_,m,u){return i(),a("div",null,c)}const y=s(r,[["render",w]]);export{x as __pageData,y as default}; +import{_ as s,c as a,o as i,a6 as t}from"./chunks/framework.B49Yz1nR.js";const n="/assets/2021-03-15-08-29-07.BdFD1zRT.png",e="/assets/2021-03-15-08-29-35.BUp-D2PC.png",o="/assets/2021-03-15-08-29-41.B7TpTpoA.png",l="/assets/2021-03-15-08-30-29.zuwA3BiM.png",d="/assets/2021-03-15-08-47-28.THpYN72B.png",p="/assets/2021-03-15-08-37-50.3CeA6zWR.png",x=JSON.parse('{"title":"Testing with Windows Sandbox","description":"","frontmatter":{},"headers":[],"relativePath":"windows-sandbox.md","filePath":"windows-sandbox.md"}'),r={name:"windows-sandbox.md"},h=t('

          Testing with Windows Sandbox

          Windows Sandbox is a fast loading disposable container in Windows that loses all settings when shutdown or restarted. It is very convenient for testing software deployments. It should be noted that not all software is compatible with Windows Sandbox, particular software that installs drivers or requires restarts.

          If you haven't used Windows Sandbox before, you can enable it by opening Windows PowerShell as Admin and running the following command:

          powershell
          Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online -NoRestart

          Download Windows Sandbox file (.wsb)

          Wait for ImmyBot Agent to install

          Onboard the Sandbox

          This will create an "Onboarding" Session (sessions are like running gpupdate) that will apply all applicable Deployments (deployments are like Group Policies)

          ',12),c=[h];function w(g,b,k,_,m,u){return i(),a("div",null,c)}const y=s(r,[["render",w]]);export{x as __pageData,y as default}; diff --git a/assets/windows-sandbox.md.d3YI4PLI.lean.js b/assets/windows-sandbox.md.c7d4kCuI.lean.js similarity index 81% rename from assets/windows-sandbox.md.d3YI4PLI.lean.js rename to assets/windows-sandbox.md.c7d4kCuI.lean.js index 9ddd65e8..35daf7ee 100644 --- a/assets/windows-sandbox.md.d3YI4PLI.lean.js +++ b/assets/windows-sandbox.md.c7d4kCuI.lean.js @@ -1 +1 @@ -import{_ as s,c as a,o as i,a6 as t}from"./chunks/framework.01Cf-Wcw.js";const n="/assets/2021-03-15-08-29-07.BdFD1zRT.png",e="/assets/2021-03-15-08-29-35.BUp-D2PC.png",o="/assets/2021-03-15-08-29-41.B7TpTpoA.png",l="/assets/2021-03-15-08-30-29.zuwA3BiM.png",d="/assets/2021-03-15-08-47-28.THpYN72B.png",p="/assets/2021-03-15-08-37-50.3CeA6zWR.png",x=JSON.parse('{"title":"Testing with Windows Sandbox","description":"","frontmatter":{},"headers":[],"relativePath":"windows-sandbox.md","filePath":"windows-sandbox.md"}'),r={name:"windows-sandbox.md"},h=t("",12),c=[h];function w(g,b,k,_,m,u){return i(),a("div",null,c)}const y=s(r,[["render",w]]);export{x as __pageData,y as default}; +import{_ as s,c as a,o as i,a6 as t}from"./chunks/framework.B49Yz1nR.js";const n="/assets/2021-03-15-08-29-07.BdFD1zRT.png",e="/assets/2021-03-15-08-29-35.BUp-D2PC.png",o="/assets/2021-03-15-08-29-41.B7TpTpoA.png",l="/assets/2021-03-15-08-30-29.zuwA3BiM.png",d="/assets/2021-03-15-08-47-28.THpYN72B.png",p="/assets/2021-03-15-08-37-50.3CeA6zWR.png",x=JSON.parse('{"title":"Testing with Windows Sandbox","description":"","frontmatter":{},"headers":[],"relativePath":"windows-sandbox.md","filePath":"windows-sandbox.md"}'),r={name:"windows-sandbox.md"},h=t("",12),c=[h];function w(g,b,k,_,m,u){return i(),a("div",null,c)}const y=s(r,[["render",w]]);export{x as __pageData,y as default}; diff --git a/azure-graph-permissions-setup.html b/azure-graph-permissions-setup.html index 260dac92..02e067f7 100644 --- a/azure-graph-permissions-setup.html +++ b/azure-graph-permissions-setup.html @@ -5,46 +5,46 @@ AzureAD/365 Graph Permissions | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          AzureAD/365 Graph Permissions

          Your first ImmyBot tenant will be automatically linked to the Azure tenant that you signed up for ImmyBot with. You can link other ImmyBot tenants to Azure from the tenant Azure tab.

          Linking to an Azure Tenant

          After creating an ImmyBot tenant, link it to an Azure tenant by navigating to the Azure tab in ImmyBot and entering the Azure tenant's principal id or domain and clicking Save.

          Azure Permission Level

          Once your ImmyBot tenant has been linked to Azure, you can set the Azure Permission Level from the tenant Azure tab. This allows ImmyBot to:

          1. Sync all users from the Azure tenant
          2. Sync all users from your GDAP customers (please see GDAP Customers)
          3. Install the 365 applications a user is licensed for
            • Apps for business/Apps for entrprise/Project/Visio
          4. Deploy software to Teams, On-Premises Security Groups
            • Ex. Everyone in the Engineering Team gets AutoCAD 2022

          The Azure Permission Level has two modes: Default and Custom

          NB: In both the Default and Custom modes, consent must be provided for each customer you want to sync. Please see GDAP Customers for requirements

          Default

          In this mode, you don't need to create an app registration. You consent as an administrator, allowing ImmyBot access users in your tenant and your customers tenants. Please see GDAP Customers if you want ImmyBot to access your customers' users.

          Custom

          In this mode, you create an App Registration and provide its Application (client) Id and Secret to ImmyBot, allowing you to customize the permissions Immy has to you and your customer's environments.

          Create an App Registration

          Navigate to: https://aad.portal.azure.com/

          Important! Your app registration must have a Web redirect uri of https://<your-domain>.immy.bot/consent-callback, replacing <your-domain> appropriately

          Grant Permissions

          See the screenshots below for the minimum permissions.

          image

          image

          Create Client Secret

          Please see GDAP Customers if you want ImmyBot to access your customers' data.

          Copy the Application (client) ID and Client Secret Value into the form in ImmyBot.

          GDAP Customers

          To sync users from GDAP customers of your Azure Partner, permission must be granted in the customer tenants to Immy's app registration (Default or Custom). This can be achieved either by clicking on the Consent button for each customer individually ("Manual consent") or by using the Pre-consent button ("Pre-consent").

          This can be done by clicking on the Consent or Reconsent button for the customer on either the Azure Settings page or ont he Azure tab of the ImmyBot tenat linked to the customer.

          NB: When manually consenting to an Azure customer, you must authenticate using an administrator account from that customer!

          Immy can automatically grant consent to your GDAP customers using the Partner Center API, removing the need to consent to each customer individually. To do this, you must authenticate to the Partner Center API with a user in the partner tenant that meets these requirements:

          1. Is a member of the AdminAgents security group
          2. Is given the Application administrator and Privileged role administrator Entra roles at the customer through the GDAP relationship

          Example: GDAP Role Assignments

          Here is an example GDAP relationship configuration that will work with Immy's pre-consent functionality:

          1. Create security group in the partner tenant named Application Administrators
          2. Create security group in the partner tenant named Privileged Role Administrators
          3. Assign the Application administrator Entra role to the Application Administrators security group on the customer's admin relationship
          4. Assign the Privileged role administrator Entra role to the Privileged Role Administrators security group on the customer's admin relationship
          5. Add the partner user that you wish to sign-in to the Partner Center API with to AdminAgents, Application Administrators and Privileged Role Administrators security groups

          For more information, see these Azure docs:

          Common Issues

          AADSTS500113: No reply address is registered for the application

          This error occurs when the redirect uri is not set correctly on the custom app registration. Please follow these steps to set the redirect uri correctly:

          1. Navigate to the Azure Portal
          2. Navigate to the Microsoft Entra ID blade
          3. Navigate to the App Registrations blade
          4. Select the app registration you created for ImmyBot
            • You may need to change the filter to "All Applications"
            • You can paste the Application (client) ID of your custom app registration into the search box to find it image
          5. Navigate to the Authentication blade
            • Select "Add a platform"
            • Select "Web" as the type image
            • Enter https://<your-domain>.immy.bot/consent-callback as the redirect uri, replacing <your-domain> appropriately
            • Click "Configure" image
          - +
          Skip to content

          AzureAD/365 Graph Permissions

          Your first ImmyBot tenant will be automatically linked to the Azure tenant that you signed up for ImmyBot with. You can link other ImmyBot tenants to Azure from the tenant Azure tab.

          Linking to an Azure Tenant

          After creating an ImmyBot tenant, link it to an Azure tenant by navigating to the Azure tab in ImmyBot and entering the Azure tenant's principal id or domain and clicking Save.

          Azure Permission Level

          Once your ImmyBot tenant has been linked to Azure, you can set the Azure Permission Level from the tenant Azure tab. This allows ImmyBot to:

          1. Sync all users from the Azure tenant
          2. Sync all users from your GDAP customers (please see GDAP Customers)
          3. Install the 365 applications a user is licensed for
            • Apps for business/Apps for entrprise/Project/Visio
          4. Deploy software to Teams, On-Premises Security Groups
            • Ex. Everyone in the Engineering Team gets AutoCAD 2022

          The Azure Permission Level has two modes: Default and Custom

          NB: In both the Default and Custom modes, consent must be provided for each customer you want to sync. Please see GDAP Customers for requirements

          Default

          In this mode, you don't need to create an app registration. You consent as an administrator, allowing ImmyBot access users in your tenant and your customers tenants. Please see GDAP Customers if you want ImmyBot to access your customers' users.

          Custom

          In this mode, you create an App Registration and provide its Application (client) Id and Secret to ImmyBot, allowing you to customize the permissions Immy has to you and your customer's environments.

          Create an App Registration

          Navigate to: https://aad.portal.azure.com/

          Important! Your app registration must have a Web redirect uri of https://<your-domain>.immy.bot/consent-callback, replacing <your-domain> appropriately

          Grant Permissions

          See the screenshots below for the minimum permissions.

          image

          image

          Create Client Secret

          Please see GDAP Customers if you want ImmyBot to access your customers' data.

          Copy the Application (client) ID and Client Secret Value into the form in ImmyBot.

          GDAP Customers

          To sync users from GDAP customers of your Azure Partner, permission must be granted in the customer tenants to Immy's app registration (Default or Custom). This can be achieved either by clicking on the Consent button for each customer individually ("Manual consent") or by using the Pre-consent button ("Pre-consent").

          This can be done by clicking on the Consent or Reconsent button for the customer on either the Azure Settings page or ont he Azure tab of the ImmyBot tenat linked to the customer.

          NB: When manually consenting to an Azure customer, you must authenticate using an administrator account from that customer!

          Immy can automatically grant consent to your GDAP customers using the Partner Center API, removing the need to consent to each customer individually. To do this, you must authenticate to the Partner Center API with a user in the partner tenant that meets these requirements:

          1. Is a member of the AdminAgents security group
          2. Is given the Application administrator and Privileged role administrator Entra roles at the customer through the GDAP relationship

          Example: GDAP Role Assignments

          Here is an example GDAP relationship configuration that will work with Immy's pre-consent functionality:

          1. Create security group in the partner tenant named Application Administrators
          2. Create security group in the partner tenant named Privileged Role Administrators
          3. Assign the Application administrator Entra role to the Application Administrators security group on the customer's admin relationship
          4. Assign the Privileged role administrator Entra role to the Privileged Role Administrators security group on the customer's admin relationship
          5. Add the partner user that you wish to sign-in to the Partner Center API with to AdminAgents, Application Administrators and Privileged Role Administrators security groups

          For more information, see these Azure docs:

          Common Issues

          AADSTS500113: No reply address is registered for the application

          This error occurs when the redirect uri is not set correctly on the custom app registration. Please follow these steps to set the redirect uri correctly:

          1. Navigate to the Azure Portal
          2. Navigate to the Microsoft Entra ID blade
          3. Navigate to the App Registrations blade
          4. Select the app registration you created for ImmyBot
            • You may need to change the filter to "All Applications"
            • You can paste the Application (client) ID of your custom app registration into the search box to find it image
          5. Navigate to the Authentication blade
            • Select "Add a platform"
            • Select "Web" as the type image
            • Enter https://<your-domain>.immy.bot/consent-callback as the redirect uri, replacing <your-domain> appropriately
            • Click "Configure" image
          + \ No newline at end of file diff --git a/build-your-own-integration.html b/build-your-own-integration.html index 769b3954..66933546 100644 --- a/build-your-own-integration.html +++ b/build-your-own-integration.html @@ -5,45 +5,45 @@ immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Build Your Own Integrations

          Inbound vs Outbound Integrations

          An inbound integration uses the ImmyBot REST API from an external service.

          An outbound integration is defined in PowerShell within ImmyBot and typically consumes another service's API.

          Inbound Integrations

          Example - Install Software on a Computer

          The following example will prompt you to select a piece of software, then select one or more computers to install that software on

          1. Create a brand new App Registration in https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/CreateApplicationBlade/quickStartType~/null/isMSAApp~/false, leave it completely unmodified, don’t change any defaults.
          2. Copy the Client (Application) ID into the $ClientID variable below
          3. Create a secret under Certificates and Secrets and copy the secret VALUE (NOT THE ID!!!!!!!1) into the $Secret variable below
          4. Plug one of your domains into the $AzureDomain variable below
          5. Navigate to the Enterprise App that was created in your Azure AD (You can do this by clicking the Managed Application link on the bottom right of the App Registration) and copy the object id of the Enterprise App
          6. Go into Immy->Show More->People->New and paste the Enterprise App's object id into the AD External ID field
          7. Make that person a user by navigating back to the People list and clicking Create User on the user you just created
          8. Make the user an admin by going to Show More->Users, clicking Edit, and checking the Admin box and clicking Update
          9. Run The code below
          10. Find the API endpoints by going to <yourinstance.immy.bot/swagger/index.html or by using the network tab in your browser as our frontend consumes those APIs.
          11. Modify the code below to suit your needs
          powershell
          $AzureDomain = '' # contoso.com
          +    
          Skip to content

          Build Your Own Integrations

          Inbound vs Outbound Integrations

          An inbound integration uses the ImmyBot REST API from an external service.

          An outbound integration is defined in PowerShell within ImmyBot and typically consumes another service's API.

          Inbound Integrations

          Example - Install Software on a Computer

          The following example will prompt you to select a piece of software, then select one or more computers to install that software on

          1. Create a brand new App Registration in https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/CreateApplicationBlade/quickStartType~/null/isMSAApp~/false, leave it completely unmodified, don’t change any defaults.
          2. Copy the Client (Application) ID into the $ClientID variable below
          3. Create a secret under Certificates and Secrets and copy the secret VALUE (NOT THE ID!!!!!!!1) into the $Secret variable below
          4. Plug one of your domains into the $AzureDomain variable below
          5. Navigate to the Enterprise App that was created in your Azure AD (You can do this by clicking the Managed Application link on the bottom right of the App Registration) and copy the object id of the Enterprise App
          6. Go into Immy->Show More->People->New and paste the Enterprise App's object id into the AD External ID field
          7. Make that person a user by navigating back to the People list and clicking Create User on the user you just created
          8. Make the user an admin by going to Show More->Users, clicking Edit, and checking the Admin box and clicking Update
          9. Run The code below
          10. Find the API endpoints by going to <yourinstance.immy.bot/swagger/index.html or by using the network tab in your browser as our frontend consumes those APIs.
          11. Modify the code below to suit your needs
          powershell
          $AzureDomain = '' # contoso.com
           $ClientID = '' # From the steps above
           $Secret = '' # From the steps above
           $InstanceSubdomain = '' # myinstance (don't include .immy.bot)
          @@ -566,7 +566,7 @@
           }
           
           $Integration
          image
          - + \ No newline at end of file diff --git a/connectwise-automate-integration-setup.html b/connectwise-automate-integration-setup.html index 12f79a22..357f9027 100644 --- a/connectwise-automate-integration-setup.html +++ b/connectwise-automate-integration-setup.html @@ -5,48 +5,48 @@ ConnectWise Automate | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          ConnectWise Automate

          Setting up this integration allows you to

          1. Import customers from Automate
          2. Import computers from Automate
          3. Manage all computers in Automate without deploying the ImmyBot Agent
          4. Map customers from Manage to ImmyBot tenant based on existing Automate<->Manage relationship

          Create ImmyBot Role

          ImmyBot requires the following permissions in Automate

          • Core
            • Clients.Read
            • Clients.Show All
            • Computers.Show All
            • Computers.Edit (For moving existing computers to new locations
            • Computers.Delete (For retiring duplicate computers)
            • Groups.Show All
            • Locations.Show All
            • Patch Manager.Read (Required if you want Immy to apply approved Windows Updates)

          Immy-CWA-User Class Manager-Permissions

          Create ImmyBot User

          Enable Google MFA for ImmyBot User

          The integration requires Google for MFA. Duo is not supported as Duo does not expose the MFA token anywhere for us to use and doesn't appear to be the standard TOTP like Google uses. You will need to exclude the integration user from your Duo deployment if using Duo and configure the Google MFA plugin for Automate for this user.

          image

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          - +
          Skip to content

          ConnectWise Automate

          Setting up this integration allows you to

          1. Import customers from Automate
          2. Import computers from Automate
          3. Manage all computers in Automate without deploying the ImmyBot Agent
          4. Map customers from Manage to ImmyBot tenant based on existing Automate<->Manage relationship

          Create ImmyBot Role

          ImmyBot requires the following permissions in Automate

          • Core
            • Clients.Read
            • Clients.Show All
            • Computers.Show All
            • Computers.Edit (For moving existing computers to new locations
            • Computers.Delete (For retiring duplicate computers)
            • Groups.Show All
            • Locations.Show All
            • Patch Manager.Read (Required if you want Immy to apply approved Windows Updates)

          Immy-CWA-User Class Manager-Permissions

          Create ImmyBot User

          Enable Google MFA for ImmyBot User

          The integration requires Google for MFA. Duo is not supported as Duo does not expose the MFA token anywhere for us to use and doesn't appear to be the standard TOTP like Google uses. You will need to exclude the integration user from your Duo deployment if using Duo and configure the Google MFA plugin for Automate for this user.

          image

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          + \ No newline at end of file diff --git a/connectwise-control-integration-setup.html b/connectwise-control-integration-setup.html index 0e83aa97..ec99fec6 100644 --- a/connectwise-control-integration-setup.html +++ b/connectwise-control-integration-setup.html @@ -5,46 +5,46 @@ ConnectWise Control | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          ConnectWise Control

          Setting up this integration allows you to

          1. Import customers from Control
          2. Import computers from Control
          3. Manage all computers in Control without deploying the ImmyBot Agent
          4. Remote into computers from the ImmyBot interface using Control (Note: We default to requiring customer consent, you can disable this under Settings->Preferences)
          5. Fix the Automate agent using the Control agent (by creating a cross-tenant deployment for the Automate Agent and creating a schedule for your customers)

          Install ImmyBot Extension for Control

          imageimageimage

          FAQ

          What custom property do I use?

          By default most ConnectWise Control instances you would select 1 for the ClientName CustomProperty field, this is the "Company" property in Control. Secondary group is any number between 1-8 that you would like to group from based on Control groups. You can find more infomation about Control custom propertys here; https://docs.connectwise.com/ConnectWise_Control_Documentation/Get_started/Administration_page/Appearance_page/Add_custom_properties_to_sessions

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          Troubleshooting

          ConnectWise Control uses Sqlite under the hood, making it vulnerable to performance issues unless aggressive Database Maintenance Tasks are enabled.

          While ImmyBot only uses Control (and other integrations) to spawn an out-of-band connection, over the course of time the database can grow as ImmyBot establishes this connection on each machine once every 24 hours to collect inventory.

          Commands go into the SessionEvent table with EventType = 44 Responses go into SessionConnectionEvent with EventType = 70

          Automatic Cleanup

          Ensure you have the following maintenance actions: Access Sessions: Purge records of session activity older than 7 days for all events EXCEPT AddedNote

          image

          Access Sessions: Purge records of session connections older than 7 days for Host and Guest connections

          image

          Manual Cleanup

          If you host Control yourself, you can restore performance by doing the following

          Download and Install DB Browser for SQLite on your server Open C:\Program Files (x86)\ScreenConnect\App_Data\session.db Navigate to SQL Editor Paste in the following SQL

          Soft delete all commands and responses (This usually solves the problem without kicking everyone out of Control)

          sql
          update SessionEvent set EventAttributes = 1 where EventType = 44;
          +    
          Skip to content

          ConnectWise Control

          Setting up this integration allows you to

          1. Import customers from Control
          2. Import computers from Control
          3. Manage all computers in Control without deploying the ImmyBot Agent
          4. Remote into computers from the ImmyBot interface using Control (Note: We default to requiring customer consent, you can disable this under Settings->Preferences)
          5. Fix the Automate agent using the Control agent (by creating a cross-tenant deployment for the Automate Agent and creating a schedule for your customers)

          Install ImmyBot Extension for Control

          imageimageimage

          FAQ

          What custom property do I use?

          By default most ConnectWise Control instances you would select 1 for the ClientName CustomProperty field, this is the "Company" property in Control. Secondary group is any number between 1-8 that you would like to group from based on Control groups. You can find more infomation about Control custom propertys here; https://docs.connectwise.com/ConnectWise_Control_Documentation/Get_started/Administration_page/Appearance_page/Add_custom_properties_to_sessions

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          Troubleshooting

          ConnectWise Control uses Sqlite under the hood, making it vulnerable to performance issues unless aggressive Database Maintenance Tasks are enabled.

          While ImmyBot only uses Control (and other integrations) to spawn an out-of-band connection, over the course of time the database can grow as ImmyBot establishes this connection on each machine once every 24 hours to collect inventory.

          Commands go into the SessionEvent table with EventType = 44 Responses go into SessionConnectionEvent with EventType = 70

          Automatic Cleanup

          Ensure you have the following maintenance actions: Access Sessions: Purge records of session activity older than 7 days for all events EXCEPT AddedNote

          image

          Access Sessions: Purge records of session connections older than 7 days for Host and Guest connections

          image

          Manual Cleanup

          If you host Control yourself, you can restore performance by doing the following

          Download and Install DB Browser for SQLite on your server Open C:\Program Files (x86)\ScreenConnect\App_Data\session.db Navigate to SQL Editor Paste in the following SQL

          Soft delete all commands and responses (This usually solves the problem without kicking everyone out of Control)

          sql
          update SessionEvent set EventAttributes = 1 where EventType = 44;
           update SessionConnectionEvent set EventAttributes = 1 where EventType = 70;

          You will need to commit the changes in DB Browser. You can do this by clicking Write Changes at the top by clicking File->Save If you forget to tdo this it will prompt you to commit the changes, when you exit, click yes.

          The reason this works is because the UI doesn't fetch soft-deleted items, so things become much snappier.

          However, if it doesn't work, do you following

          Delete commands and responses older than 7 days

          sql
          -- Delete queue commands in db older than 7 days
           DELETE
           FROM SessionEvent
          @@ -54,7 +54,7 @@
           DELETE
           FROM SessionConnectionEvent
           WHERE (EventType = 70) AND (Time < DATETIME('now', '-7 day'))
          - + \ No newline at end of file diff --git a/connectwise-manage-integration-setup.html b/connectwise-manage-integration-setup.html index 09e5e568..e11b125c 100644 --- a/connectwise-manage-integration-setup.html +++ b/connectwise-manage-integration-setup.html @@ -5,46 +5,46 @@ ConnectWise Manage | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          ConnectWise Manage

          Setting up this integration allows you to

          1. Deploy Software to machines covered by a certain agreement type
          • Example: Deploy Huntress to all customers with a Managed Security Agreement
          1. (Preferred) Deploy Software to machines covered by an Agreement with a specific Addition
          • Example: Deploy SentinelOne to all computers that have SentinelOne as an Addition on their agreement

          If you use Automate, setup the Automate integration first and import your customers from there. Importing customers from Manage generally results in many unnecessary Tenants being created in ImmyBot. You can link Automate to Manage to leverage the existing mappings between Automate<->Manage instead of manually mapping your Manage customers

          Create an ImmyBot Role with the following permissions

          • Company -> Company Maintenance -> Inquire Level (All)
          • Finance -> Agreements -> Inquire Level (All)
          • Procurement -> Product Catalog -> Inquire Level (All)
          • Procurement -> Product -> Inquire Level (All)
          • System -> API Reports -> Inquire Level (All)

          Create an API Member

          Go to System -> Members and create a new API Member

          Create a new API key

          Plugin the API Keys in ImmyBot

          Create a new PSA Link and fill in the Provider Info

          CW Manage Pod v1

          Setting up this integration allows you to Look up the contact's email address in Immy and shows you their computers (Immy does User Computer Affinity behind the scenes so you don't have to do it manually). Technicians can jump into their computers or push software via the ticket.

          image

          Go to Show More -> Integrations

          Add CW Manage Pod

          Go to ConnectWise -> Setup Tables -> Manage Hosted API -> +

          image

          - +
          Skip to content

          ConnectWise Manage

          Setting up this integration allows you to

          1. Deploy Software to machines covered by a certain agreement type
          • Example: Deploy Huntress to all customers with a Managed Security Agreement
          1. (Preferred) Deploy Software to machines covered by an Agreement with a specific Addition
          • Example: Deploy SentinelOne to all computers that have SentinelOne as an Addition on their agreement

          If you use Automate, setup the Automate integration first and import your customers from there. Importing customers from Manage generally results in many unnecessary Tenants being created in ImmyBot. You can link Automate to Manage to leverage the existing mappings between Automate<->Manage instead of manually mapping your Manage customers

          Create an ImmyBot Role with the following permissions

          • Company -> Company Maintenance -> Inquire Level (All)
          • Finance -> Agreements -> Inquire Level (All)
          • Procurement -> Product Catalog -> Inquire Level (All)
          • Procurement -> Product -> Inquire Level (All)
          • System -> API Reports -> Inquire Level (All)

          Create an API Member

          Go to System -> Members and create a new API Member

          Create a new API key

          Plugin the API Keys in ImmyBot

          Create a new PSA Link and fill in the Provider Info

          CW Manage Pod v1

          Setting up this integration allows you to Look up the contact's email address in Immy and shows you their computers (Immy does User Computer Affinity behind the scenes so you don't have to do it manually). Technicians can jump into their computers or push software via the ticket.

          image

          Go to Show More -> Integrations

          Add CW Manage Pod

          Go to ConnectWise -> Setup Tables -> Manage Hosted API -> +

          image

          + \ No newline at end of file diff --git a/getting-started.html b/getting-started.html index 245e0365..b9da1791 100644 --- a/getting-started.html +++ b/getting-started.html @@ -5,46 +5,46 @@ Getting Started / Thinking with Immy | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Getting Started / Thinking with Immy

          The goal of ImmyBot is to setup a computer knowing only the customer and the end user.

          Thinking with Immy means thinking in terms of how things "Should" be.

          You teach Immy how things "should" be by creating Deployments.

          null
          null

          How things "Should" be is often dependent on external factors. For example

          • Customer A should have SentinelOne because they pay for it
          • Person A should have Visio 365 because he has a license for it

          Luckily, deployments can be conditionally applied based on the result of scripts that reach out to external sources

          null
          null

          This is out of the box functionality in ImmyBot. I'm just showing you how it works to illustrate the power of the rules engine.

          Overview

          ImmyBot deploys 2 things:

          1. Software
          2. Tasks

          Tasks are for anything that isn’t software, think Bitlocker, Power Options, etc.

          • You can use Tasks to configure software by selecting a "Configuration Task" for the software
          • Configuration Tasks are useful for configuring the application (even if the application wasn't installed by ImmyBot)
          • Configuration Tasks run after Immy determines the software is installed
          • Configuration Task parameters are available in all scripts related to the software

          ImmyBot tests everything it does before and after it does it.

          • Software
            • Version Detection - Runs before install to determine if installation is necessary, and after to verify the desired version is installed
              • DisplayName
                • Contains
                • Regex
                • Traditional (Wildcard *)
              • UpgradeCode (For MSI based installs)
              • Script
                • Must return a version or null
            • Test Script - If software is installed, the failure of this test (the test script returning $false) will trigger a "Repair" action (default Uninstall/Install) of the application
              • Example: Check to verify Foxit PDF Editor is the Preview handler extension is working in Windows Explorer, reinstalling the PDF Editor usually corrects this scenario
          • Tasks
            • Test script (When using separate scripts)
            • Combined script returns $false when $method is 'test'

          Example: Adobe Reader

          We find that most MSPs install Adobe Reader by default so ImmyBot includes a Recommended Deployment that states

          • "the latest version of Adobe Reader should be installed for all Workstations and Portable Devices"

          When this rule applies (i.e. it isn't disabled or overridden by a more specific rule) ImmyBot will do the following:

          1. Find the latest available version of Adobe Reader by running the Adobe Reader "dynamic version" script that uses a public API to return the latest full version number of Adobe Reader, as well as the URL to download it, the latest patch version of Adobe Reader, and the URL to download it.
          2. Determine the installed version (if any) by looking for Adobe Reader in Add/Remove Programs on the machine
          3. Queue an Install or Upgrade task (depending on the previous step)
          4. Set Adobe Reader to be the default PDF handler by running the "configuration task" that verifies that Reader is the default handler for .PDF files for each user on the machine.
          - +
          Skip to content

          Getting Started / Thinking with Immy

          The goal of ImmyBot is to setup a computer knowing only the customer and the end user.

          Thinking with Immy means thinking in terms of how things "Should" be.

          You teach Immy how things "should" be by creating Deployments.

          null
          null

          How things "Should" be is often dependent on external factors. For example

          • Customer A should have SentinelOne because they pay for it
          • Person A should have Visio 365 because he has a license for it

          Luckily, deployments can be conditionally applied based on the result of scripts that reach out to external sources

          null
          null

          This is out of the box functionality in ImmyBot. I'm just showing you how it works to illustrate the power of the rules engine.

          Overview

          ImmyBot deploys 2 things:

          1. Software
          2. Tasks

          Tasks are for anything that isn’t software, think Bitlocker, Power Options, etc.

          • You can use Tasks to configure software by selecting a "Configuration Task" for the software
          • Configuration Tasks are useful for configuring the application (even if the application wasn't installed by ImmyBot)
          • Configuration Tasks run after Immy determines the software is installed
          • Configuration Task parameters are available in all scripts related to the software

          ImmyBot tests everything it does before and after it does it.

          • Software
            • Version Detection - Runs before install to determine if installation is necessary, and after to verify the desired version is installed
              • DisplayName
                • Contains
                • Regex
                • Traditional (Wildcard *)
              • UpgradeCode (For MSI based installs)
              • Script
                • Must return a version or null
            • Test Script - If software is installed, the failure of this test (the test script returning $false) will trigger a "Repair" action (default Uninstall/Install) of the application
              • Example: Check to verify Foxit PDF Editor is the Preview handler extension is working in Windows Explorer, reinstalling the PDF Editor usually corrects this scenario
          • Tasks
            • Test script (When using separate scripts)
            • Combined script returns $false when $method is 'test'

          Example: Adobe Reader

          We find that most MSPs install Adobe Reader by default so ImmyBot includes a Recommended Deployment that states

          • "the latest version of Adobe Reader should be installed for all Workstations and Portable Devices"

          When this rule applies (i.e. it isn't disabled or overridden by a more specific rule) ImmyBot will do the following:

          1. Find the latest available version of Adobe Reader by running the Adobe Reader "dynamic version" script that uses a public API to return the latest full version number of Adobe Reader, as well as the URL to download it, the latest patch version of Adobe Reader, and the URL to download it.
          2. Determine the installed version (if any) by looking for Adobe Reader in Add/Remove Programs on the machine
          3. Queue an Install or Upgrade task (depending on the previous step)
          4. Set Adobe Reader to be the default PDF handler by running the "configuration task" that verifies that Reader is the default handler for .PDF files for each user on the machine.
          + \ No newline at end of file diff --git a/halo-integration-setup.html b/halo-integration-setup.html index bfaab706..952d656b 100644 --- a/halo-integration-setup.html +++ b/halo-integration-setup.html @@ -5,46 +5,46 @@ HaloPSA | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          HaloPSA

          Setting up this integration allows you to

          1. Deploy Software to machines covered by a certain contract type
          • Example: Deploy Huntress to all customers with a Managed Security Contract
          1. (Preferred) Deploy Software to machines covered by an Contract with a specific recurring invoice item
          • Example: Deploy SentinelOne to all computers that have SentinelOne on a recurring invoice as a recurring invoice item on their contract

          Create an ImmyBot Application under /config/integrations/api/applications

          • Under the details section, select the Client ID and Secret Authentication Method
          • Generate and copy the Client ID and Client Secret
          • The Login Type should be "Agent", and you should select an "Agent to log in as"

          Permissions:

          • read:customers -> Yes
          • read:contracts -> Yes
          • read:items -> Yes
          • edit:items -> Yes (*should not be needed > 2.99, API bug will not allow listing items without edit rights)
          • read:invoices -> Yes
          • read:software -> Yes
          • read:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)
          • edit:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)

          Plug in the Client ID and Client Secret in ImmyBot

          Create a HaloPSA Integration Link and fill in the Integration Settings

          image

          Embedded Ticket Tab

          HaloPSA version 2.125.5, introduced a new feature called Custom Tabs. You can configure these Custom Tabs to point to a web address, similar to an iframe.

          Within HaloPSA, configure the tab as follows:

          image

          This tab will then show on all tickets in the system, like this:

          image

          - +
          Skip to content

          HaloPSA

          Setting up this integration allows you to

          1. Deploy Software to machines covered by a certain contract type
          • Example: Deploy Huntress to all customers with a Managed Security Contract
          1. (Preferred) Deploy Software to machines covered by an Contract with a specific recurring invoice item
          • Example: Deploy SentinelOne to all computers that have SentinelOne on a recurring invoice as a recurring invoice item on their contract

          Create an ImmyBot Application under /config/integrations/api/applications

          • Under the details section, select the Client ID and Secret Authentication Method
          • Generate and copy the Client ID and Client Secret
          • The Login Type should be "Agent", and you should select an "Agent to log in as"

          Permissions:

          • read:customers -> Yes
          • read:contracts -> Yes
          • read:items -> Yes
          • edit:items -> Yes (*should not be needed > 2.99, API bug will not allow listing items without edit rights)
          • read:invoices -> Yes
          • read:software -> Yes
          • read:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)
          • edit:assets -> Yes (*future feature of the integration will include asset population, not currently necessary)

          Plug in the Client ID and Client Secret in ImmyBot

          Create a HaloPSA Integration Link and fill in the Integration Settings

          image

          Embedded Ticket Tab

          HaloPSA version 2.125.5, introduced a new feature called Custom Tabs. You can configure these Custom Tabs to point to a web address, similar to an iframe.

          Within HaloPSA, configure the tab as follows:

          image

          This tab will then show on all tickets in the system, like this:

          image

          + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index a709be44..9515f755 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"add-users.md":"DK9Iwms8","azure-graph-permissions-setup.md":"COlBgxzm","build-your-own-integration.md":"v8AUrf4X","connectwise-automate-integration-setup.md":"UrG_ePnE","connectwise-control-integration-setup.md":"BAIDwG2f","connectwise-manage-integration-setup.md":"C3Jl0y3u","faq.md":"CC1cvv3i","getting-started.md":"sOwUjwTd","halo-integration-setup.md":"DmoZJrZZ","immy-commands.md":"Bt-gtKAH","index.md":"Bjqt4eZW","markdown-examples.md":"DU2o7HkU","ncentral-integration-setup.md":"DZCt8ZGB","old-ncentral-integration-setup.md":"CNK2HfXm","onboarding.md":"SL0U_Gws","readme.md":"CLL6q4qu","recommended-deployments.md":"P_r5cshh","releases-2020.md":"D0keqcJE","releases-2021.md":"DilWLwmP","releases-2022.md":"CEQr6RBa","releases.md":"VbIXcsif","scripts.md":"DmWdNvqE","terminology.md":"DDvZWsL6","troubleshooting.md":"BULOapdN","user-roles.md":"DuUr6iiw","windows-sandbox.md":"d3YI4PLI"} +{"add-users.md":"OaI5tNlY","azure-graph-permissions-setup.md":"CQS9UkSF","build-your-own-integration.md":"CbdX9QBf","connectwise-automate-integration-setup.md":"BbRfz9pz","connectwise-control-integration-setup.md":"BR0Z4rIs","connectwise-manage-integration-setup.md":"qxVZT16I","faq.md":"B36G0pkM","getting-started.md":"R7bijnbI","halo-integration-setup.md":"Bn8P35Lb","immy-commands.md":"v4hM1wNE","index.md":"DZBl2ip8","markdown-examples.md":"-m8imKgy","ncentral-integration-setup.md":"CSRJTbb9","ninjarmm-integration-setup.md":"DQh0drIy","old-ncentral-integration-setup.md":"9C3B6NVP","onboarding.md":"DvY8VkVM","readme.md":"D38tZSjJ","recommended-deployments.md":"CsGVHl4O","releases-2020.md":"DPH-1fDz","releases-2021.md":"BS1iS6In","releases-2022.md":"HDb-adly","releases.md":"D4RyUjFl","scripts.md":"C-uxU55o","terminology.md":"Wz1ZetDt","troubleshooting.md":"_hAa0pQ-","user-roles.md":"CJ8-YXJu","windows-sandbox.md":"c7d4kCuI"} diff --git a/immy-commands.html b/immy-commands.html index b6dc77a4..4acad1c0 100644 --- a/immy-commands.html +++ b/immy-commands.html @@ -5,45 +5,45 @@ Metascripts / Cloud Scripts | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Metascripts / Cloud Scripts

          A Metascript is a script that runs scripts. These scripts run in the backend of ImmyBot.

          A Metascript can run a script on a computer using Invoke-ImmyCommand.

          Example

          powershell
          $ServerPSVersionTable = $PSVersionTable
          +    
          Skip to content

          Metascripts / Cloud Scripts

          A Metascript is a script that runs scripts. These scripts run in the backend of ImmyBot.

          A Metascript can run a script on a computer using Invoke-ImmyCommand.

          Example

          powershell
          $ServerPSVersionTable = $PSVersionTable
           $ComputerPSVersionTable = Invoke-ImmyCommand {
               $ServerPSVersionTable = $using:ServerPSVersionTable
               Write-Host "Running from $env:ComputerName but ImmyBot backend is running PowerShell $($ServerPSVersionTable.PSVersion)" -ForegroundColor Green
          @@ -121,7 +121,7 @@
           $versionString = $url -split '/' | select -Last 1 -Skip 1
           $latestVersion = $SoftwareVersions | sort SemanticVersion | select -last 1
           $createdVersion = Add-SoftwareVersion -SoftwareVersion $latestVersion -SemanticVersion  $versionString -Url $url

          Get-AllLocalScripts

          Coming Soon

          Get-AllGlobalScripts

          Coming Soon

          CW Automate Commands

          Invoke-CWAQuery

          Coming Soon

          Invoke-CWARestMethod

          Coming Soon

          Get-CWARestPages

          Coming Soon

          - + \ No newline at end of file diff --git a/index.html b/index.html index 0eb4aed9..caef358c 100644 --- a/index.html +++ b/index.html @@ -5,46 +5,46 @@ immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - - + + \ No newline at end of file diff --git a/markdown-examples.html b/markdown-examples.html index e77e1f54..7bb6307a 100644 --- a/markdown-examples.html +++ b/markdown-examples.html @@ -5,45 +5,45 @@ Markdown Extension Examples | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Markdown Extension Examples

          This page demonstrates some of the built-in markdown extensions provided by VitePress.

          Syntax Highlighting

          VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

          Input

          ```js{4}
          +    
          Skip to content

          Markdown Extension Examples

          This page demonstrates some of the built-in markdown extensions provided by VitePress.

          Syntax Highlighting

          VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

          Input

          ```js{4}
           export default {
             data () {
               return {
          @@ -76,7 +76,7 @@
           ::: details
           This is a details block.
           :::

          Output

          INFO

          This is an info box.

          TIP

          This is a tip.

          WARNING

          This is a warning.

          DANGER

          This is a dangerous warning.

          Details

          This is a details block.

          More

          Check out the documentation for the full list of markdown extensions.

          - + \ No newline at end of file diff --git a/ncentral-integration-setup.html b/ncentral-integration-setup.html index c2c7b138..39b46bed 100644 --- a/ncentral-integration-setup.html +++ b/ncentral-integration-setup.html @@ -5,49 +5,49 @@ N-Central REST API Dynamic Integration | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          INFO

          This page is now dedicated to the new N-Central integration, utilizing the new N-Central REST API & ImmyBot Dynamic Integrations.

          This new integration should provide improved stability over our classic (and soon to be deprecated) integration.

          Looking for the classic N-Central integration guide? We recommend against it, but here is the classic setup guide.

          N-Central REST API Dynamic Integration

          Setting up this integration allows you to:

          1. Import customers from N-Central
          2. Import computers from N-Central
          3. Manage all computers in N-Central without deploying the ImmyBot Agent

          Create ImmyBot Role in N-Central

          ImmyBot currently requires the following role permissions to operate correctly:

          Devices

          • Devices View
            • All Devices -> Read Only
          • Scheduled Tasks
            • Scheduled Tasks -> Manage

          Create an "ImmyBot" role in your N-Central instance using above roles.

          Create an API-Only ImmyBot user in N-Central

          N-Able themselves have an offical short guide for doing this we recommend following for this part, but here is a recap:

          1. Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.
          2. Under "API Access", ensure "Api-Only User" is checked. 2FA MUST be disabled for the API User!
          3. Save the new ImmyBot user, and press the "Generate JSON Web Token" button. Copy this value somewhere for later.

          Add the necessary 'RunScript' Automation Policy

          After completing the new API-Only user setup, it's time time add an Automation Policy to N-Central so Immybot can run scripts on the machines.

          First, navigate to the "Script/Software Repository" under "Schedules Tasks" beneath the "Configuration" tab in N-Central. Once at the Script Repository page, select "Add" -> "Automation Policy".

          Second, download the ImmyBot RunScript Automation Policy and upload it to your instance. Fill out the Name and Description how you see fit if required.

          Last step is to ensure this new automation policy we have uploaded is able to be invoked by the Immybot API User. Find the automation by searching for "Immybot", then flipping the Enable API switch. Accept the confirmation modal, then copy the Repository ID for later use.

          Make sure you copy YOUR Repository ID, as this identifier for the automation policy will be unique across every N-Central instance!

          Add integration for N-Central

          After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new N-Central v2 integration. Input a name you'd like for the integration, followed by your N-Central server URL, and the JWT you copied in the steps to make an "ImmyBot" API user. Then, input the RepositoryId gathered from the step before. Lastly, flip the Enable Integration switch.

          If the Health Check reports an error after enabling the integration, ensure you have completed the above steps correctly. If you continue to have issues, reachout to the community or support for assistance.

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          Troubleshooting

          My customers are showing up but no computers

          Login to N-Central as the ImmyBot User and accept the EULA

          - +
          Skip to content

          INFO

          This page is now dedicated to the new N-Central integration, utilizing the new N-Central REST API & ImmyBot Dynamic Integrations.

          This new integration should provide improved stability over our classic (and soon to be deprecated) integration.

          Looking for the classic N-Central integration guide? We recommend against it, but here is the classic setup guide.

          N-Central REST API Dynamic Integration

          Setting up this integration allows you to:

          1. Import customers from N-Central
          2. Import computers from N-Central
          3. Manage all computers in N-Central without deploying the ImmyBot Agent

          Create ImmyBot Role in N-Central

          ImmyBot currently requires the following role permissions to operate correctly:

          Devices

          • Devices View
            • All Devices -> Read Only
          • Scheduled Tasks
            • Scheduled Tasks -> Manage

          Create an "ImmyBot" role in your N-Central instance using above roles.

          Create an API-Only ImmyBot user in N-Central

          N-Able themselves have an offical short guide for doing this we recommend following for this part, but here is a recap:

          1. Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.
          2. Under "API Access", ensure "Api-Only User" is checked. 2FA MUST be disabled for the API User!
          3. Save the new ImmyBot user, and press the "Generate JSON Web Token" button. Copy this value somewhere for later.

          Add the necessary 'RunScript' Automation Policy

          After completing the new API-Only user setup, it's time time add an Automation Policy to N-Central so Immybot can run scripts on the machines.

          First, navigate to the "Script/Software Repository" under "Schedules Tasks" beneath the "Configuration" tab in N-Central. Once at the Script Repository page, select "Add" -> "Automation Policy".

          Second, download the ImmyBot RunScript Automation Policy and upload it to your instance. Fill out the Name and Description how you see fit if required.

          Last step is to ensure this new automation policy we have uploaded is able to be invoked by the Immybot API User. Find the automation by searching for "Immybot", then flipping the Enable API switch. Accept the confirmation modal, then copy the Repository ID for later use.

          Make sure you copy YOUR Repository ID, as this identifier for the automation policy will be unique across every N-Central instance!

          Add integration for N-Central

          After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new N-Central v2 integration. Input a name you'd like for the integration, followed by your N-Central server URL, and the JWT you copied in the steps to make an "ImmyBot" API user. Then, input the RepositoryId gathered from the step before. Lastly, flip the Enable Integration switch.

          If the Health Check reports an error after enabling the integration, ensure you have completed the above steps correctly. If you continue to have issues, reachout to the community or support for assistance.

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          Troubleshooting

          My customers are showing up but no computers

          Login to N-Central as the ImmyBot User and accept the EULA

          + \ No newline at end of file diff --git a/ninjarmm-integration-setup.html b/ninjarmm-integration-setup.html new file mode 100644 index 00000000..3383e5f5 --- /dev/null +++ b/ninjarmm-integration-setup.html @@ -0,0 +1,59 @@ + + + + + + NinjaRMM Dynamic Integration | immy.bot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          Skip to content

          NinjaRMM Dynamic Integration

          Setting up this integration allows you to:

          • Import customers from NinjaRMM
          • Import computers from NinjaRMM
          • Manage all computers in NinjaRMM without deploying the ImmyBot Agent
          • Create ImmyBot Role in NinjaRMM

          Configure the following in general settings (Administration -> General -> Settings):

          • Ninja Agent uninstall prevention -> OFF
          • Advanced Installer Options -> ON

          ImmyBot currently requires the following client app scopes to operate correctly:

          • Monitoring
          • Management
          • Control

          As well as the following grant types:

          • Authorization Code
          • Refresh Token

          Create a client app in your NinjaRMM instance using above permissions:

          (Administration -> Apps -> Api -> Add)

          image

          WARNING

          Note: Change the "instance" in the redirect uri to your ImmyBot subdomain

          Copy the below script to NinjaRMM Automation library and name it ImmyBot:

          (Administration -> Library -> Automation -> Add -> New Script)

          powershell
          Param(
          +    [Parameter(Mandatory=$true)]
          +    [string]$code
          +)
          +
          +$bytes = [System.Convert]::FromBase64String($code)
          +$DecodedCommand = [System.Text.Encoding]::UTF8.GetString($bytes)
          +
          +# Execute Script Content
          +iex $DecodedCommand

          Make a note of the script Id in the URL https://{region}.ninjarmm.com/#/editor/script/71 -> 71. It will be needed as one of the parameters in the integration setup to run scripts.

          In ImmyBot, create a new dynamic integration with the NinjaRMM integration type:

          (Show More -> Integrations -> Add Integration -> NinjaRMM)

          Add the required parameters and authenticate the OAuthInfo parameter with a NinjaRMM user with sufficient privileges: image

          WARNING

          Note: Currently the OAuthInfo parameter button will not stay when you refresh the browser window. This will not kill your integration, so just leave it as is.

          At this point, you should be able to map clients. Once clients are mapped, agents will start getting identified.

          + + + + \ No newline at end of file diff --git a/old-ncentral-integration-setup.html b/old-ncentral-integration-setup.html index a2a6af21..0f24fae7 100644 --- a/old-ncentral-integration-setup.html +++ b/old-ncentral-integration-setup.html @@ -5,49 +5,49 @@ N-Central Integration | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          WARNING

          This classic N-Central integration is soon to be deprecated and not recommended for further use. It is unlikely to receive further updates.

          Please migrate to the New N-Central REST API Integration

          N-Central Integration

          Setting up this integration allows you to

          1. Import customers from N-Central
          2. Import computers from N-Central
          3. Manage all computers in N-Central without deploying the ImmyBot Agent

          Create ImmyBot Role in N-Central

          ImmyBot currently requires the following role permissions to operate correctly:

          Devices

          • Devices View
            • All Devices -> Read Only
          • Direct Support
            • Command Prompt -> Manage
            • File System -> Manage
          • Remote Control
            • Custom -> Manage
            • Take Control -> Manage
          • Network Devices
            • Add/Import Devices -> Manage
            • Edit Device Settings -> Manage

          Create an "ImmyBot" role in your N-Central instance using above roles.

          Create ImmyBot user in N-Central

          Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.

          Login to the new ImmyBot user to get MFA code and accept EULA

          Once you have created the new ImmyBot user account, you must attempt to login so that you may retrieve the MFA key, and complete any initial setup. After entering the accounts email and password, there will be a MFA QR code displayed. You MUST press the "CAN'T SCAN IT?" button to get the Base32-encoded MFA key. After saving the key, use a site such as this to get the current token from the key, or temporarily scan the QR code on a device to complete sign-in.

          TIP

          Make sure you accept the EULA when you login, otherwise the computers will not import!

          Add integration for N-Central

          After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new "N-Central" integration. Input all the N-Central user account data to the fields on the right.

          Press the "Verify Credentials" button, then, if completed successfully, press the button again to save the integration.

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          Troubleshooting

          My customers are showing up but no computers

          Login to N-Central as the ImmyBot User and accept the EULA

          - +
          Skip to content

          WARNING

          This classic N-Central integration is soon to be deprecated and not recommended for further use. It is unlikely to receive further updates.

          Please migrate to the New N-Central REST API Integration

          N-Central Integration

          Setting up this integration allows you to

          1. Import customers from N-Central
          2. Import computers from N-Central
          3. Manage all computers in N-Central without deploying the ImmyBot Agent

          Create ImmyBot Role in N-Central

          ImmyBot currently requires the following role permissions to operate correctly:

          Devices

          • Devices View
            • All Devices -> Read Only
          • Direct Support
            • Command Prompt -> Manage
            • File System -> Manage
          • Remote Control
            • Custom -> Manage
            • Take Control -> Manage
          • Network Devices
            • Add/Import Devices -> Manage
            • Edit Device Settings -> Manage

          Create an "ImmyBot" role in your N-Central instance using above roles.

          Create ImmyBot user in N-Central

          Create a new "ImmyBot" user in the instance with the "ImmyBot" role applied.

          Login to the new ImmyBot user to get MFA code and accept EULA

          Once you have created the new ImmyBot user account, you must attempt to login so that you may retrieve the MFA key, and complete any initial setup. After entering the accounts email and password, there will be a MFA QR code displayed. You MUST press the "CAN'T SCAN IT?" button to get the Base32-encoded MFA key. After saving the key, use a site such as this to get the current token from the key, or temporarily scan the QR code on a device to complete sign-in.

          TIP

          Make sure you accept the EULA when you login, otherwise the computers will not import!

          Add integration for N-Central

          After completing setup in N-Central, it's time to add the integration to ImmyBot. Navigate to the "Integrations" page in ImmyBot, and create a new "N-Central" integration. Input all the N-Central user account data to the fields on the right.

          Press the "Verify Credentials" button, then, if completed successfully, press the button again to save the integration.

          Import your customers

          Alternatively, you can create/map only certain customers.

          When you map a customer from an RMM, the computers will undergo Identification

          Troubleshooting

          My customers are showing up but no computers

          Login to N-Central as the ImmyBot User and accept the EULA

          + \ No newline at end of file diff --git a/onboarding.html b/onboarding.html index bdb1c283..3f3bf3f4 100644 --- a/onboarding.html +++ b/onboarding.html @@ -5,46 +5,46 @@ Setup your first Computer | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Setup your first Computer

          When you first login to ImmyBot the Getting Started Wizard will be prompt you to create your ImmyBot flash drive, and plug it into the new computer.

          THIS IS A ONE TIME PROCESS, YOU DO NOT NEED TO CREATE A FLASH DRIVE FOR EACH CLIENT. YOU WILL CHANGE THE CLIENT AFTER THE MACHINE IS IN IMMYBOT

          image

          We recommend unboxing a physical computer (Dell, HP, or Lenovo) so we can demonstrate applying the latest manufacturer BIOS and driver updates.

          If you insist on testing on a virtual machine, do the following to receive the PPKG inside an ISO, then mount it to the VM, and press the Windows Key 5 times when you are at the Region Selection screen. If you are past the region selection screen, simply double click the PPKG from the mounted disk

          image

          image

          Once the computer is identified, you will be directed to that computer to begin the Onboarding process:

          image

          ImmyBot needs:

          1. Customer
          2. Primary User (That will be using the computer, optional but recommended)

          image

          You only have one customer and one person right now, and it’s your MSP and you. That’s fine, we’ll pretend we’re setting up a computer for you and your MSP.

          TIP

          Customers can be imported from your RMM or PSA, or by setting up the Azure integration

          TIP

          People are imported from your customers' Azure AD via the Azure integration

          An "Onboarding" session will be created for this computer, and ImmyBot will apply the "Recommended Deployments"

          TIP

          You can add your own Deployments and re-run this session as many times as you like until everything is to your liking.

          - +
          Skip to content

          Setup your first Computer

          When you first login to ImmyBot the Getting Started Wizard will be prompt you to create your ImmyBot flash drive, and plug it into the new computer.

          THIS IS A ONE TIME PROCESS, YOU DO NOT NEED TO CREATE A FLASH DRIVE FOR EACH CLIENT. YOU WILL CHANGE THE CLIENT AFTER THE MACHINE IS IN IMMYBOT

          image

          We recommend unboxing a physical computer (Dell, HP, or Lenovo) so we can demonstrate applying the latest manufacturer BIOS and driver updates.

          If you insist on testing on a virtual machine, do the following to receive the PPKG inside an ISO, then mount it to the VM, and press the Windows Key 5 times when you are at the Region Selection screen. If you are past the region selection screen, simply double click the PPKG from the mounted disk

          image

          image

          Once the computer is identified, you will be directed to that computer to begin the Onboarding process:

          image

          ImmyBot needs:

          1. Customer
          2. Primary User (That will be using the computer, optional but recommended)

          image

          You only have one customer and one person right now, and it’s your MSP and you. That’s fine, we’ll pretend we’re setting up a computer for you and your MSP.

          TIP

          Customers can be imported from your RMM or PSA, or by setting up the Azure integration

          TIP

          People are imported from your customers' Azure AD via the Azure integration

          An "Onboarding" session will be created for this computer, and ImmyBot will apply the "Recommended Deployments"

          TIP

          You can add your own Deployments and re-run this session as many times as you like until everything is to your liking.

          + \ No newline at end of file diff --git a/recommended-deployments.html b/recommended-deployments.html index bcfb4a59..f77aab69 100644 --- a/recommended-deployments.html +++ b/recommended-deployments.html @@ -5,46 +5,46 @@ Recommended Deployments | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content
          - +
          Skip to content
          + \ No newline at end of file diff --git a/releases-2020.html b/releases-2020.html index 55738a96..2f31e170 100644 --- a/releases-2020.html +++ b/releases-2020.html @@ -5,48 +5,48 @@ Releases in 2020 | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Releases in 2020

          0.38.2

          Released 2020-12-29

          New Features

          Updated the export default name to be meaningful.

          image

          image

          Added a Uri datatype for maintenance task parameters.

          image

          This parameter is available as a Uri type in power shell for users to us inside of scripts.

          image

          Improvements

          • When creating new software versions, we will default the new version's settings to the previous version's settings. This is generally more reliable that using the analysis results by default. If there is no previous version, then we will still use the analysis results as default.

          • Adds the result message to the action column in the deployment excel export to help indicate success/failure.

          • Using the new Uri datatype no additional parsing will be needed to convert a string to a Uri inside of the script.

          • Made the system update page show current version release notes

          • Added current release update notes; Switched to using cards for displaying releases

          • Display computer provider type button for each RMM Link instead of type and hid disabled links

          • Updates the Schedules List to show the same Target fields that the Deployment List shows.

            • image

          Bug Fixes

          • Fixed issue with saving global maintenance task with non-file parameters
          • Fixed an issue when uploading an installer Immy would not try and match it to an existing software.
          • Fixed a bug on the upload software version page where clicking the next button was not loading the next screen.
          • Fixed a bug when saving cross tenant deployments where we did not clear the tenant field if the deployment was previously for a specific tenant.
          • Fixed issues with the session list page not showing correct results when the time filter was applied.
          • Fixed an issue where we could show non IP addresses for a computer's external IP field when the External IP Inventory script runs
          • Fixed an issue where BITS Download would not fallback to basic download if the command timed out.
          • Fixed issue with showing the updated by and update by by person on the Schedules List page.
          • Hid the Download ImmyAgent link when ImmyAgent RMMLink is disabled.
          • When detecting software version after install a newer version than expected will no longer cause a failure for that action.
            • This fixes the case in where some software auto update themselves right after installation.

          0.38.1

          Released 2020-12-23

          Bug Fixes

          • Corrected issue preventing Maintenance Tasks from being saved

          0.38.0

          Released 2020-12-21

          New Features

          Maintenance Tasks Files

          image

          • Specify a default file if the user doesn't specify one
          • Include utilities with maintenance tasks by marking the parameter as hidden

          image

          Log Highlighting

          image

          • Highlights the important logs for a software or task so they are more easily recognized.

          Safely create Uris for REST APIs

          image

          Example
          powershell
          Add-UriQueryParameter -Uri 'https://my.thingwithqueryparams.com/items' -Parameter @{'Filter'='subject like "hello"'}
          Output
          https://my.thingwithqueryparams.com:443/items?Filter=subject+like+%22hello%22

          Accessing Azure KeyVault

          powershell
          $Headers = Get-ImmyAzureAuthHeader -Endpoint Keyvault
          +    
          Skip to content

          Releases in 2020

          0.38.2

          Released 2020-12-29

          New Features

          Updated the export default name to be meaningful.

          image

          image

          Added a Uri datatype for maintenance task parameters.

          image

          This parameter is available as a Uri type in power shell for users to us inside of scripts.

          image

          Improvements

          • When creating new software versions, we will default the new version's settings to the previous version's settings. This is generally more reliable that using the analysis results by default. If there is no previous version, then we will still use the analysis results as default.

          • Adds the result message to the action column in the deployment excel export to help indicate success/failure.

          • Using the new Uri datatype no additional parsing will be needed to convert a string to a Uri inside of the script.

          • Made the system update page show current version release notes

          • Added current release update notes; Switched to using cards for displaying releases

          • Display computer provider type button for each RMM Link instead of type and hid disabled links

          • Updates the Schedules List to show the same Target fields that the Deployment List shows.

            • image

          Bug Fixes

          • Fixed issue with saving global maintenance task with non-file parameters
          • Fixed an issue when uploading an installer Immy would not try and match it to an existing software.
          • Fixed a bug on the upload software version page where clicking the next button was not loading the next screen.
          • Fixed a bug when saving cross tenant deployments where we did not clear the tenant field if the deployment was previously for a specific tenant.
          • Fixed issues with the session list page not showing correct results when the time filter was applied.
          • Fixed an issue where we could show non IP addresses for a computer's external IP field when the External IP Inventory script runs
          • Fixed an issue where BITS Download would not fallback to basic download if the command timed out.
          • Fixed issue with showing the updated by and update by by person on the Schedules List page.
          • Hid the Download ImmyAgent link when ImmyAgent RMMLink is disabled.
          • When detecting software version after install a newer version than expected will no longer cause a failure for that action.
            • This fixes the case in where some software auto update themselves right after installation.

          0.38.1

          Released 2020-12-23

          Bug Fixes

          • Corrected issue preventing Maintenance Tasks from being saved

          0.38.0

          Released 2020-12-21

          New Features

          Maintenance Tasks Files

          image

          • Specify a default file if the user doesn't specify one
          • Include utilities with maintenance tasks by marking the parameter as hidden

          image

          Log Highlighting

          image

          • Highlights the important logs for a software or task so they are more easily recognized.

          Safely create Uris for REST APIs

          image

          Example
          powershell
          Add-UriQueryParameter -Uri 'https://my.thingwithqueryparams.com/items' -Parameter @{'Filter'='subject like "hello"'}
          Output
          https://my.thingwithqueryparams.com:443/items?Filter=subject+like+%22hello%22

          Accessing Azure KeyVault

          powershell
          $Headers = Get-ImmyAzureAuthHeader -Endpoint Keyvault
           Invoke-RestMethod 'https://<yourvault>.vault.azure.net/secrets/secretname?api-version=7.1' -Header $Headers | Select -Expand Value

          image

          Access arbitrary Azure authenticated resource URIs

          powershell
          $Headers = Get-ImmyAzureAuthHeader -ResourceUri 'https://vault.azure.net'
           Invoke-RestMethod 'https://<yourvault>.vault.azure.net/secrets/secretname?api-version=7.1' -Header $Headers

          Improvements

          • Added the capability for ImmyAgent Provisioning packages to be downloaded an ISO. image
          • Added date/time tooltips to session times to see specifically when a session started
          • Removed automatic software evaluation run from computer details page
          • Adds Open remote session buttons to the computer deployment list.
          • Adds a checkbox to include/exclude offline computers from the computer list page.
          • Configuration task parameters are now available in software test scripts.
          • Added OS Name and Manufacturer to the Computer Overview tab.
          • Added dependency badges to maintenance action items
          • Added default to maintenance action table to hide actions with No Action to reduce clutter.
          • Removed unnecessary show preview div from Computer Details->Software tab
          • Removed automatic software evaluation from Computer Details page
          • Added Remote Session button on Edit Deployment page
          • Added offline computer checkbox filter to computer list page
          • Fixed test script result parsing and added config task variables to it
          • Removed legacy TestResult syntax from SoftwareVersion scripts
          • Added date tooltips to sessions/actions times
          • Set JobArgs to Suppress reboots when running action from Computer Details; Needs Attention
          • Moved the drag handle for RMM Priority ordering to the left side
          • Start system required inventory in overwrite existing command
          • Added dependency badge to maintenance session action list item and action table
          • Refactored to keep GetAuthConnectionString() private and added -Endpoint KeyVault as an alias for the resourceUri
          • Added parametersetnames to Get-ImmyAzureAuthHeader to differentiate between orthogonal use cases
          • Default to hiding 'No Action' in the computer actions table
          • Removed string expansion from MetascriptHost to prevent need for backticks in Set-ComputerName Metascript
          • Decreased timeout for the pending reboot check as this could cause sessions to hang for an unnecessarily long period of time if the script doesn't respond

          Bug Fixes

          • Fixed 'Rerun' button action not suppressing reboots.
          • Fixed maintenance action start and end time issues showing the wrong times
          • Fixed an issue where the computer would show online even though all agents were disabled.
          • Maintenance Task parameters and built in variables values are preserved and no longer string expanded in the Metascript context, allowing you to pass these values unaltered to scripts run via Invoke-ImmyCommand
          • Fixed UTC/local issues with action start and end time
          • Fixed online status for disabled RMMLinks

          0.37.10

          Released 2020-12-15

          Bug Fixes

          • Fixes an issue on the computer software list where some fields were not immediately updating.
          • Reduces padding of each item in the software list
          • Fixed issue where scripts would occasionally fail to execute as the user even though the user is logged in
          • Invoke-ImmyCommand no longer returns System.Object instead of $null, making it easier to detect null results
          • $using variables no longer throw a null reference exception when the value is null in the parent context
          • $using variables will issue a warning when they are not present in the parent context, previously a NullReferenceException was thrown both when the variable was declared but had a null value and when the variable was not declared. (Sometimes null is a valid value)

          0.37.9

          Released 2020-12-14

          Bug Fixes

          • Fixed regression in 0.37.8 that broke inventory for most machines

          0.37.8

          Released 2020-12-12

          New Features

          • Adds a helpful alert letting the user know that user scripts with a user action trigger of Run once at login, Run at every login, and Active Setup at login will run immediately if the user is logged in.

          Bug Fixes

          • Fixes an issue running some inventory scripts against computers running PowerShell 2.0 (And possibly other PS versions, causing inventory to fail and computer names to be displayed as GUIDs)
          • Un-reversed order of first and last names on edit deployment page
          • Adds missing maintenance task category to the maintenance task details page
          • Fixes an issue where we were not properly updating the maintenance action if the desired state was Update If Found and the software was not present`
            • Now properly resolves the action result to Success, the Action Type to No Action, and the Action Reason to Software Missing.
          • Fixes issue where RunAsUser fails because user is not a local admin
          • Fixed issue where Immy was pre-selecting incorrect Software after analyzing non-MSI installers
          • Fixes error when using 'Update if Found' with ninite packages.

          0.37.7

          Released 2020-12-10

          Enhancements

          • Allows for saving scripts while focused in the editor by pressing Ctrl S.
          • Adds an alert prompting to save changes when navigating away from a modified script

          Bug Fixes

          • Fixes a permission issue when searching the computer list by primary user
          • Fixed object serialization issue from Windows Server 2003 machines

          0.37.6

          Released 2020-12-09

          Bug Fixes

          • Fixes an issue where CW Control RMM Links were failing if the CW Control URL contained a specific route.
          • Fixes the excel export on the Deployment page's Affected Computers panel
          • Fixes a bug on script details form where the scripts timeout was not showing the correct value
          • Fixes a bug when viewing the script details in a modal, where the default timeout was not being supplied.
          • Resolves issue where Immy incorrectly reports "User is not logged in" when a user is logged in over RDP
          • Fixes a bug on the computer details page sessions tab where sessions for other computers show up if you change the time filter
          • Fixes a bug in the computer list page, if the computer name is missing, we now show the device id

          Enhancements

          • If a provider fails to initialize, it will be automatically disabled to increase the overall health of Immy.

          0.37.5

          Released 2020-12-08

          New Features

          • Function Scripts! Keep your code dry! You can now call scripts from other scripts. Simply create a new script with category Function, define your logic, and then call the function from another MetaScript.
          • Adds a new column to the session table called "Type" to indicate whether the session was "Scheduled" or "Manual".

          Bug Fixes

          • Fixed duplicate persons issue. Syncing persons from azure users now checks if there is an existing person with the same user principal name (email) and will update that person instead of creating a new one.
          • Fixes an issue where the onboarding form's primary user selector was returning people outside of the selected tenant (Only an issue for MSP users).
          • Fixes a bug where the New and Copy as New buttons were missing from the script selector.
          • Fixed an issue with Immybot using the incorrect software version when deploying the "latest" version
          • You can now analyze a version without specifying the "Installer Executable Path" if the file is a zip file
          • Renamed metascript Get-RmmProvider to Get-RmmInfo and added the information required to retrieve EDFs for Clients and Computers from Automate
          • Addresses memory performance issues with the computer list page
          • Fixes some default properties when loading the maintenance task form in a modal. Fixes a bug in Invoke-ImmyCommand where providing the same $using variable with different capitalization threw a duplicate variable error.

          Enhancements

          • Added logic to auto select an existing software by upgrade code on the software version upload page
          • Updates the deployment form's software, version, and configuration task "View" buttons

          0.37.4

          Released 2020-12-08

          Bug Fixes

          • Fixed an issue with inventory scripts being retried every minute on devices that return exceptions

          0.37.3

          Released 2020-12-01

          Bug Fixes

          • Fixed issue with terminal not rendering output when launched from Edit button on session logs
          • Fixes an issue where the suggested rmm link name conflicted with an existing name
          • Set the Hangfire Redis MaxStateHistoryLength to 5 to fix issues with uncontrolled memory leak

          0.37.2

          Released 2020-11-24

          Hotfixes

          • Fixed several broken maintenance session links that were not bringing the user to the correct page.
          • Fixed an error in metascripts about the use of duplicate $__using variables.
          • Fixed an issue rendering the xterm terminal within the script editor modal.

          0.37.1

          Released 2020-11-23

          Hotfixes

          • Fixed filter scripts to only return a single computer when run for a maintenance session. Not doing this was causing memory to balloon up unnecessarily.

          0.37.0

          Released 2020-11-23

          Enhancements

          Check out our new documentation site! https://docs.immy.bot/

          Actionable Software Inventory
          • Updated the Software tab to now provide actionable buttons for software and maintenance tasks that are not compliant
          Automatic Onboarding
          • Plug in the USB drive and setup begins automatically without having to login to Immy
            • Create a new Windows 10 Setup USB Package and enable the auto-onboarding option
          • Added a new tab called Sessions that allows a user to easily see computer sessions without leaving the computer details page
          • Added an Onboarding tab to the computer details page to allow easier changing of customer and primary user
          Script Engine
          • Simplified Filter Script syntax, removed -TargetType and -TargetGroupFilter as these are selectable in the UI
          • Added xterm.js to the Script Editor for better handling of large return payloads
          • Write-Host output is no longer suppressed when run within Invoke-ImmyCommand
          • Write-Debug, Write-Verbose, Write-Warning, and Write-Error all work both within Metascripts, and scripts run via Invoke-ImmyCommand (Note: $DebugPreference and $VerbosePreference need to be set to 'Continue' as the PowerShell default will suppress the output from these cmdlets)
          • Write-Host in Metascripts and Cloudscripts supports -ForegroundColor, -BackgroundColor and -NoNewLine parameters
          • Terminal now formats Errors and many other objects according to the PowerShell 7 default
          • PowerShell 7 $ErrorView= 'ConciseView' is now supported
          • Exceptions thrown within scripts now show the script line instead of a backend stack trace
          • Added $AzureTenantId variable to all scripts

          Stability

          • Fixed memory leak in the user affinity job that was causing instances to hang on an error page
          • Added availability health checks for some azure resources to help diagnose issues faster.

          Hotfixes

          • Fixed an issue where renaming a computer did not immediately show the change in the browser
          • Fixed an issue with sending test emails from the smtp page. It would sometimes incorrectly throw an error about enabling authentication
          • Added Update If Found desired state for Ninite Software
          • Fixed selecting a software on the deployment page to auto select "Installed" and "Latest" as the default options
          • Fixed an issue where it was not possible to view global maintenance task scripts from within the Maintenance Task interface
          • ImmyAgent no longer executes Batch/CommandLine as PowerShell

          Security

          • Get-ImmyComputer no longer returns computers from other tenants when run by a non-MSP user

          0.36.4

          Released 2020-11-19

          Bug Fixes

          • Moved the pending reboot check from the beginning of the session to the beginning of the execution phase so computers do not reboot during detection. Computers usually run detection during the day and we do not want to reboot computers while they are being used.

          0.36.3

          Released 2020-11-13

          Bug Fixes

          • Fixes bug where rebooting a computer would sometimes hang the maintenance session
          • Fixes a typo reading for onboarding -> ready for onboarding
          • Fixed issue preventing a computer from rebooting if necessary before it starts a maintenance session
          • Fixes an issue where an action would immediately fail if the computer failed to reboot
            • e.g. A software is supposed to be uninstalled and then reinstalled. After the uninstall, a reboot may be attempted. If it fails, we will now still attempt the reinstall anyway.
          • Fixes a critical bug that could allow a person to be incorrectly associated with another tenant.

          0.36.2

          Released 2020-11-04

          Bug Fixes

          • Fixed an issue where the Update Now and Postpone buttons were missing on the maintenance email when they were set to be shown by its schedule.

          0.36.1

          Released 2020-11-02

          Bug Fixes

          • Run Maintenance button at the top of the Computer Details Page now suppresses reboots by default
          • Edit PSALink page no longer throws exception when CWManage API returns duplicate companies
          • Updated task type and task category label names on the task form
          • Fixed a null reference exception when calling Get-ImmyComputer passing in InventoryKeys

          0.36.0

          Released 2020-10-26

          Features

          • New and improved Computer Details Page that shows much more details
          • Added Inventory Task feature
          • Added a System Status Page that shows script execution metrics for enabled RMM Providers
          • Added a System Update Page that allows an administrator to update to newer versions of ImmyBot when they are released
          • Implemented Downgrade logic for software

          Enhancements

          • Optimized script execution when using the CW Control RMM Provider
          • Optimized background job scheduling
          • Re-designed the Computer List Page
          • Merged the Onboarding and Pending Computer Pages into one page called New Computers
          • Made the ImmyAgent more scalable
          • Added a loading animation when filtering the Computer List Page
          • When a session expires and the page is reloaded, you will now be redirected back to the page you were on

          Bug fixes

          • Fixed CW Control extension to work on latest version of CW Control (2020.11)
          • Fixed session failing with Ninite fails to download
          • Fixed a CORS issue when new instances are registered with uppercase characters
          • Fixed an edge case when scripts erroneously indicate they have been modified when pressing cancel
          • Removed validation requirement for username in SMTP settings
          • Fixed Automate Computers with UTC+0 (UK) do not sync due an issue with using DateTime.Subtract(0)
          • Fixed an error occurring on Windows 7/PS 2.0
          • Fixed an edge case where a server got caught in an endless reboot
          • Removed the WiFi SSID minimum length for PPKGs
          • Fixed a bug where license files did not download before running the Test script
          • Fixed an issue where User Context Scripts were returning 'gt' is not recognized
          • Fixed a bug where maintenance tasks were performed out of order when there was a software dependency
          • Fixed a bug on the Deployment Page where selecting a domain controller was causing an error
          • Fixed a bug in metascripts where Get-ImmyComputer -TargetType TenantDomainControllers was failing
          • Fixed bug where the Users List showed a System user
          • Fixed a bug where bulk software detection failed on PS 2.0 and PS 3.0 when using [Guid]::new
          • Fixed a bug where the CW Automate Provider was not leveraging the 301 command
          • Fixed a bug where the ImmyAgent did not start on VMware VMs due to lack of BoardSerialNumber
          • Fixed some edge cases where sessions kept getting stuck in the Created status
          • Fixed a bug where the ImmyAgent was defaulting to 10 seconds for the script execution
          • Fixed a bug where the software selector on the license form was showing parameters for linked maintenance tasks
          • Fixed a bug where maintenance task fields Hidden and Default Values were not saving on Create
          • Fixed a bug in the package analyzer where it was throwing Key Not Found for Inno version 6 installers
          • Fixed a bug with Deployments using a desired state of Uninstall/NotPresent that was causing failures due to missing required parameters
          • Fixed a bug with maintenance task parameters not being provided to software install scripts
          • Fixed a bug where users could not open the Maintenance Session Details Page for computers they onboarded
          • Fixed a bug where deployments for maintenance tasks with password parameter types were unable to be deployed
          • Fixed a bug where the Current User user action trigger was not available for scripts created on the software version form
          • Fixed a bug where the RMM to PSA auto client mapping failed when the RMM returns non-unique external ids
          • Fixed a bug where non-msp users could not access software or deploy the ImmyAgent

          0.35.16

          Released 2020-10-23

          This is the first release in the release cycle

          - + \ No newline at end of file diff --git a/releases-2021.html b/releases-2021.html index 20687dfa..bb5cdc40 100644 --- a/releases-2021.html +++ b/releases-2021.html @@ -5,45 +5,45 @@ Releases in 2021 | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
          Skip to content

          Releases in 2021

          0.48.7

          Released 2021-12-10

          Access Requests

          Your users and the ImmyBot support team can now request access to your instance! When an unauthorized person authenticates, a "Request Access" button is available that will submit an access request. An MSP user can then grant or deny access from the user list page. An expiration of one hour, one day, or never can be set for the user.

          The access request feature can be enabled/disabled on the preferences page.

          image

          Improvements

          • Made some small improvements to the User list page
          • Added auto refreshing to the new computers page
          • Made the session list on the computer details page reload when it is shown

          Bug Fixes

          • Removed some extra whitespace showing on the tenant details page
          • Fixed a bug when using custom download scripts where the action would fail with An item with the same key has already been added
          • Changed "Triggered By" text from "Unknown" to "System - Automatic Onboarding" for maintenance sessions that onboard automatically
          • Changed parameter text from "override" to "specify" when a default valued is not specified
          • Fixed a bug where deployment parameter notes were not honoring line breaks
          • Changed the default target filter from No Filter to Workstations and Portable Devices
          • Fixed an error in metascripts, Tee-Output : Cannot bind argument..., that would occur if you ran the script $null, which should return null
          • Fixed a browser caching issue which would cause new features and bug fixes to not be immediately available when updating ImmyBot
          • Fixed an issue where the end time of the ImmyBot agent update action was not getting set, causing the time running to continually increase
          • Fixed an issue with the ImmyBot Chocolatey Feed app preference not updating when toggled

          0.48.6

          Released 2021-12-06

          Bug Fixes

          • Fixed a bug where deployments targeting an integration were getting deleted when updating to a different target type

          0.48.5

          Released 2021-12-03

          Bug Fixes

          • Fixed a bug where failed test scripts run after an install were not setting the action to non-compliant

          0.48.4

          Released 2021-12-03

          Bug Fixes

          • Fixed an issue with some ImmyBot instances not being able to run scheduled jobs
          • Fixed a bug with basic downloads failing because paths were using forward slashes instead of backslashes. This was causing all license downloads to fail.

          0.48.3

          Released 2021-12-02

          Improvements

          • Added logout and switch user buttons to the landing page when you are signed in as an unauthorized user

          image

          Bug Fixes

          • Fixed a bug where completed configuration tasks were incorrectly showing the message "Action interrupted"
          • Fixed a bug where providers failing to initialize were not getting disabled, causing them to continually throw exceptions

          0.48.2

          Released 2021-12-01

          Bug Fixes

          • Fixed an issue with internal packages behaving incorrectly on the new Linux backend
          • Fixed a caching bug that was showing the previously viewed maintenance session details when switching to a different computer

          0.48.1

          Released 2021-11-30

          Improvements

          • Ephemeral Agent now uses Win32API directly to invoke Powershell, replacing the WMI calls which suffered from System.PlatformNotSupportedException: The native library 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\wminet_utils.dll' does not have all required functions. Please, update the .NET Framework. errors on some specific machines.

          Bug Fixes

          • Resolves issue with Ephemeral Agent sometimes launching PowerShell in 32-bit mode
          • Added additional error logging when maintenance task get/set/test fail
          • Fixed an issue with file paths containing "/" instead of ""
          • Added back missing metascript aliases
          • Resolved 'AmsiContext' warnings being spammed in frontend
            • image
          • Improved the readability of the Azure page
          • Added an alert to the user page about creating new users
          • Replaced references to "Immybot" with "ImmyBot"

          0.48.0

          Released 2021-11-29

          IMPORTANT

          The changes in this release will require reconsent at first login!

          ⓘ If your Azure AD is configured to not allow non-Admin users to consent to new apps, you will need to login once as a user with sufficient privileges.

          image

          • Consolidated backend and frontend into a single Enterprise Application (Service Principal)
          • Removed backend.subdomain.immy.bot and pointed all API calls to subdomain.immy.bot
            • This has the additional benefit of increasing performance as the browser no longer makes a CORS pre-flight check when hitting the API
              • Note: If you are using the ImmyBot API, you will need to remove backend. from your URI

          0.47.12

          Released 2021-11-29

          Bug Fixes

          • Fixed a bug introduced in 0.47.11 where BITS downloads fail for files that do not specify an MD5 hash

          0.47.11

          Released 2021-11-24

          Improvements

          • Files without MD5 hashes will now always get overwritten for better security.

          Bug Fixes

          • Fixed Ephemeral Agent PowerShell execution failures on some machines
          • Fixed an issue with nested exceptions not showing the correct output

          0.47.10

          Released 2021-11-23

          Improvements

          • Ephemeral Agent EXE respects global proxies for https:// even though it uses wss://

          Bug Fixes

          • Fixed issue where Ephemeral Agent EXE failed to launch due to an extraction issue on Windows Server Core

          0.47.9

          Released 2021-11-22

          Bug Fixes

          1. Fixed an issue with inventory and script-run cancellation logic causing high memory usage
          2. Fixed an issue with function scripts being used in metascripts causing heavy load on global database
          3. Switched to force Ephemeral Agent EXE to utilize System Proxy settings to alleviate connection refusal for some users
          4. Fixed an issue with PowerShell execution occasionally throwing an error that would crash ImmyBot

          0.47.8

          Released 2021-11-17

          Features

          Ephemeral Agent EXE

          1. The ephemeral agent now executes as an .exe instead of a PowerShell script.
          2. This allows us to use a WebSocket instead of polling, which improves performance and resiliency as we can immediately detect disconnections.
          3. Decreased initial connection time by attempting to connect using all RMMs simultaneously instead of in sequence.
          4. Substantially improved logging to help troubleshoot script execution issues

          Note: You may have to exclude your instance's hostname in the firewall from SSL Inspection policies! SSL Inspection may interfere with the WebSocket connection from this new agent!

          Note: You may also need to adjust your security software to allow the EXE to execute. We recommend adding an exclusion for the Immense Networks code signing certificate as it will be used to sign all ImmyBot PowerShell scripts and Executables.

          The subject of the certificate is:

          CN=Immense Networks, O=Immense Networks, L=Baton Rouge, S=Louisiana, C=US

          Improvements

          • Inventory scripts now run in parallel
          • ImmyBot will always overwrite license files to prevent issues with software not activating because the previous license file is still in the ImmyBot download folder.
          • The script terminal on the computer details page is no longer cleared when swapping between tabs.
          • Updated the instance disabled text to specify that only an admin user can re-enable immy

          Bug Fixes

          • The EXE ephemeral agent addresses intermittent ScriptTimeout exceptions that would occur for a variety of reasons
          • Implemented a "Script Execution Circuit Breaker" per computer to prevent RMM overload when retrying ephemeral connections (This can happen when security software blocks execution or firewalls prevent outbound connections)
          • Fixed several issues around script error handling. Line numbers now display correctly. Exceptions that occur before running a script are now caught and displayed properly.
          • Fixed an issue where inventory output with a value of null was being treated as successful and overwriting good results
          • Fixed a bug with session logs showing null references when a script was cancelled or timed out
          • Fixed a bug with quick deploy where the deployment resolution stage was unnecessarily reaching out to the computer to retrieve its software
          • Fixed a bug during maintenance sessions, Field at index '1' does not exist..., where retrieving the list of installed chocolatey software would fail
          • Resolved a potential issue around re-acquiring ephemeral agent sessions under concurrent script execution scenarios
          • Fixed a bug when re-authenticating to ImmyBot where you wouldn't be redirected to the page you were previously on due to the URL not including query parameters

          0.47.0

          Released 2021-10-28

          Maintenance Execution Order

          You can now specify the order in which maintenance items are executed by navigating to "/deployments/ordering" or by clicking the "Ordering" link in the side nav bar under "Deployments".

          Maintenance Execution Order

          Other Improvements

          • Made the software, maintenance task, script, and media list pages default to showing "All" for convenience. Additionally made small changes to these pages to make them more consistent in their appearance.
          • Configuration tasks are now executed immediately after their compliant software.
          • Refactored some code to be platform agnostic in preparation for hosting ImmyBot in Linux instead of Windows
          • Made some internal improvements to how we store core PowerShell code that will make development and script signing easier
          • Allowed dynamic version software to use the "Update If Found" desired state
          • Allowed inventory to use metascripts
          • Parallelized inventory to run up to 4 scripts in parallel for faster execution
          • When creating scripts from a software or maintenance task, the script name will now have a default value. E.g. If creating a new installation script the default name will be " Installation Script" made in this MR for use in release notes
          • Added a maintenance item column to the schedule list page
          • Simplified the "Getting Started Wizard"
          • Removed unnecessary padding in the "Getting Started Wizard"
          • New instances will now automatically approve all recommended target assignments

          Bug Fixes

          • Fixed a bug with adding the CW Automate integration where it would throw an error if the list of clients being imported was extremely large
          • Fixed command-line scripts so uninstall logic works as expected
          • Updated the target assignment resolution to exclude assignments that are tied to disabled provider links
          • Fixed a bug where the test script on a software was not getting called if the software was detected
          • Fixed a bug with maintenance item ordering where the preferred initial order of recommended items was not being set
          • Fixed an issue that was causing a memory leak that scaled with the number of ImmyBot agent installers

          0.46.9

          Released 2021-10-04

          Bug Fixes

          • Fixed a bug where configuration tasks were failing with "Parameter '<parameter name>' is marked required for Maintenance Task...and no value has been set" when the parameter value was actually set

          0.46.8

          Released 2021-09-30

          Bug Fixes

          • Fixed a bug with maintenance tasks where the default parameter value was being used instead of the overridden value
          • Fixed a bug where deploying tenant maintenance tasks would incorrectly show the computer target options instead of the tenant target options on the deployment form

          0.46.7

          Released 2021-09-27

          Bug Fixes

          • Added code to help certain scripts honor the system web proxy on a computer
          • Fixed a bug where the ephemeral agent was not honoring the correct polling interval, causing scripts to execute much slower than expected

          0.46.6

          Released 2021-09-24

          Improvements

          • Updated the help text at the top of the Branding list page to indicate what the blue and red stars are for
          • Inventory running for a computer now updates the computer details page in real-time after each inventory script
          • Clicking the re-inventory button now runs detection after the inventory scripts

          Bug Fixes

          • Added missing preference to select the default branding
          • Fixed a bug with the "Bulk Create Tenants" buttons on the provider details page where it would throw an erorr
          • Fixed a bug with running user context scripts where an error was being swallowed and the scripts would inevitably time out
          • Fixed an issue with updating the "Installer Executable Path / Installer File" field on the software version form where it would revert to the previous value
          • Fixed a bug where software marked as "Download Only" would attempt to run its configuration task. Software that is set to download only no longer adds an action for its configuration task.
          • Fixed an issue that was causing the azure user sync to stop running. When it encounters an issue syncing a specific tenant, it will now log some details that will help the immy team determine why it is failing and then continue attempting to sync other tenants.
          • Fixed a bug with running Get-AgentInstallScript where it would return the error Tenant # is not linked to a client for the specified provider
          • Fixed a bug saving the onboarding form where we were not disabling the onboarding save buttons while the page was still loading. Attempting to to save before the page was loaded was causing an error to be thrown
          • Fixed a bug where the branding list was showing brandings as "Expired" when they actually weren't
          • Fixed a bug where updating brandings with no selected tenant would cause the branding to get deleted instead
          • Fixed a bug where using the "Re-inventory" button on the computer details page would often time out and show an error
          • Fixed a bug where the edit deployment page always showed the desired version: latest

          0.46.5

          Released 2021-09-22

          Improvements

          • A session that resolves to 0 maintenance actions now results in a successful session.
          • Added the detected version to the dynamic versions script
          • Renamed the description text for safelisting the ephemeral agent script execution paths on the preferences page
          • Added computer name-change propagation to the frontend when using Refresh-ComputerSystemInfo metascript

          Bug Fixes

          • Found a bug where updating a computer on the onboarding form would cause problems if the computer has an active maintenance session. We now prevent saving the onboarding form if the computer has an active maintenance session.
          • Fixed potential issues with scripts not getting ran by prefixing our scripts with, [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
          • Removed "Powered by Immense Networks" from the footer of maintenance emails
          • Fixed a bug where after uploading and analyzing software, the analyzed upgrade code was not executing the search to see if it was found on existing machines
          • Fixed a bug on the computer list page where a computer's online status was considering disabled links. Since a disabled link can result in stale data, we no longer use them to determine the online status of a computer.
          • Fixed a bug with clicking the "Delete Offline Agent" button on the computer agents tab
          • Fixed a bug where default configuration task parameters were missing when deploying from the computer software tab
          • Fixed a null reference exception that was occurring when attempting to run a script against an offline computer
          • Fixed an issue with saving computers from the onboarding screen where it would fail when the computer had an automate agent
          • Fixed script reference counts for dynamic version scripts, download installer scripts, and all default software scripts
          • Fixed a bug with assigning a local download installer script to a local software

          0.46.4

          Released 2021-09-16

          Improvements

          • Updated sandbox identification to preserve maintenance session data instead of deleting old data since that data could still be useful for debugging

          Bug Fixes

          • Fixed a bug in deserializing data that resulted in The requested operation requires an element of type 'Number', but the target element has type 'String'.
          • Fixed a potential null reference exception when retrieving bulk software
          • Fixed a bug with session logs not showing the correct end date time

          0.46.3

          Released 2021-09-16

          Bug Fixes

          • Fixed a bug that prevented Immy instances from receiving new Immy Agent releases

          0.46.2

          Released 2021-09-15

          Improvements

          • Changed ImmyAgent to use callbacks internally to response to Ephemeral Agent script start events. This should improve issues where the Ephemeral Agent doesn't start when using the ImmyAgent
          • Added a new switch parameter to Invoke-ImmyCommand called -IncludeLocals, which will automatically include all variables from the metascript runspace. When using -IncludeLocals you no longer need to specify $using variables.

          Bug Fixes

          • Fixed an issue where system scripts timeouts were not being honored
          • Fixed backwards-compatibility of Get-RmmInfoand Get-RmmComputer metascripts
          • Fixed an issue with automate groups not loading on deployment form
          • Fixed a null reference bug when calculating MD5 hashes
          • Fixed a bug with Invoke-ImmyCommand where $using variables were throwing a warning: WARNING: Parameter '__using_command' already exists with value "some-value"
          • Fixed a regression where Get-RmmInstallScript was renamed to Get-AgentInstallscript. Get-RmmInstallScript is now an alias for Get-AgentInstallScript

          0.46.1

          Released 2021-09-14

          Bug Fixes

          Fix ImmyAgent bug which would cause Temp PS1 path to not be created.

          0.46.0

          Released 2021-09-14

          Ephemeral Agent Script Execution

          ImmyBot now uses "Ephemeral Agents" for script execution.

          This new method will normalize the time it takes to run scripts across all RMM Providers. The initial payload to start the ephemeral agent will be sent through the RMM, but then all subsequent scripts will communicate directly with the ephemeral agent.

          An Ephemeral Agent is a lightweight PowerShell script that establishes a direct connection with the ImmyBot backend via Polling or SSE (Server-Sent Events) to receive script payloads to execute. Script output is then sent through an Azure Service Bus for high throughput handling. The ImmyBot backend manages the lifetime of ephemeral agents and is able to re-use them efficiently.

          Script Path Preference

          It is now easier to whitelist ImmyBot in your Antivirus. The Ephemeral Agent will use a script path containing a hash unique to your instance that you can rekey yourself.

          image

          Default Software Scripts

          You can now specify install, uninstall, post-install, post-uninstall, upgrade, and test scripts directly on the software.

          This reduces duplication for software where the versions use the same exact scripts while also making software easier to manage.

          Considerations

          1. If the software has a script and the desired version has a script, then the script on the version takes precedence. (e.g. the version's install script will be used instead of the software's install script if both are present)
          2. If the version does not have a script, then we will attempt to use the one on the software if the script is present.

          Custom Download Script

          You can now assign a "Download Installer" script to software that will be used instead of the core Immy download installer logic. This is valuable when downloading 3rd party installers from URLs that require authentication or specific headers.

          Other Improvements

          • Combined RMM Links and PSA Links into a single Integrations page under Settings
          • Improved Tarma InstallMate package analyzer detection
          • Added documentation for Ephemeral Agent & ServiceBus Script-Result handler info tiles in System Status page to better explain what they mean, and how to discern specific pieces of information from them
          • Fixed an issue where password parameters with $ characters were getting stripped ServiceBus Script-Result handling & Ephemeral Agent sessions are enabled by default for new Instances
          • Integration type capabilities are now listed on the New Integration page
          • ServiceBus Script-Result handling can now process results at a much higher throughput & more reliably than before.
          • ServiceBus Result latency has been improved to around ~100ms under normal load conditions from ~3s.
          • Implemented caching for tenant preferences to reduce database calls during maintenance sessions
          • Reduced some complexity in how we structure RMM Links and PSA Links (now known as integrations)
          • Reworded script-start-failed log to not include integration link name since the integration is not responsible for starting the scripts
          • Added basic logging of inventory script names and any errors to session logs

          Bug Fixes

          • Fixed an issue with pages not loading when there are a large number of tenants
          • Fixed a bug causing configuration tasks to fail if you were deploying software with the desired state of "Any Version"
          • Fixed an issue with CW Control Secondary Grouping property causing exceptions when used in Deployment.
          • Fixed a bug where script parameters were being duplicated due to case-sensitivity
          • Fixed a few potential ImmyAgent Installation issues that may occur on very old systems missing .NET standard assembly 2.x. Additionally Lowered .NET framework dependency down to 4.6.1 from 4.7.2
          • Fixed a bug where full maintenance sessions were attempting to resolve assignments that definitely should not be resolved
          • Fixed an issue the computer table counts showing incorrect numbers
          • Patched a number of ServiceBus Result-Handling bugs that could cause instability & unexpected output when in use.

          0.45.8

          Released 2021-08-25

          Bug Fixes & Improvements

          • Fixed a bug where reboots were not being suppressed for maintenance triggered in the batch action on the main computer list page
          • Fixed issues with running global or MSP-created meta scripts that use commands such as Invoke-CWARestMethod or Get-RmmInfo
          • Fixed issues with the sidebar not allowing you to select dropdown items when the scrollbar was showing
          • Fixed a bug on the media uploader that prevents users from dragging and dropping files to upload
          • Added the missing "Reboot Preference" label on the schedule details page

          0.45.7

          Released 2021-08-23

          Bug Fixes & Improvements

          • Fixed an issue where the Get-RmmInfo command was not being found in metascripts during auto onboarding sessions
          • Fixed an issue that was preventing users from deleting tenants. The error received was "An error occurred while deleting tenants".
          • Fixed an issue where saving a script on the script details page would inconveniently scroll you back to the top of the page

          0.45.6

          Released 2021-08-20

          Bug Fixes

          • Fixed a bug where configuration task file parameters were not getting downloaded to the computer before the software action ran
          • Fixed a bug where running a deployment with a configuration task that did not have any scripts enabled was causing the software scripts to not include the configuration task parameters

          0.45.5

          Released 2021-08-18

          Bug Fixes

          • Fixed a bug that surfaced in 0.45.4 where computers were not running the onboarding stage during maintenance sessions

          0.45.4

          Released 2021-08-18

          Bug Fixes and Improvements

          • Fixed an issue with schedules that were targeting (+ offset) timezones, e.g. (UTC +10:00) where the schedule was not getting scheduled at the correct time
          • Fixed an issue where linking a tenant to an RMM client was incorrectly pushing the synced computers to Needs Onboarding. Computers synced by linking a tenant are automatically marked as onboarding since it is the initial sync.
          • Fixed an issue with creating deployments where the maintenance item search was not returning maintenance tasks with the Tenant Category
          • Added a session log to warn users when you attempt to run a cloud script (tenants only) against a computer. This shouldn't be possible, but there is a bug on the deployment form that is allowing you to save an invalid deployment. This bug will be fixed in an upcoming release
          • Updated the Azure CSP Preconsent instructions on https://docs.immy.bot/guide/csp-preconsent-instructions.html to reflect the latest UI.
          • Fixed an issue with global maintenance task file parameters where we were not downloading the files to the computer

          0.45.3

          Released 2021-08-18

          Bug Fixes and Improvements

          • Fixed an issue that could prevent Immy from starting up properly where the database as referencing computer ids for computers that no longer exist
          • Fixed an issue on the Deployment List page where global software / maintenance tasks were getting incorrectly linked to local software / maintenance tasks
          • Fixed a rare exception getting thrown if an instance was started and stopped very quickly
          • Fixed an asset caching bug that would cause new features to be unavailable until the user performed a hard refresh in the browser
          • You will now receive a notification when new frontend updates are available to prompt you to reload the page
          • Fixed a bug where starting sessions for computers that are actively having maintenance scheduled by ImmyBot could cause the schedule to stop scheduling sessions

          0.45.2

          Released 2021-08-04

          Bug Fixes

          • Fixed an issue introduced in 0.45.0 that prevented users from creating deployments for installing Chocolatey and Ninite software
          • Fixed an issue with new computers getting stuck under failed with the specific error message "duplicate key value violates unique constraint "ix_computers_device_id"

          0.45.1

          Skipped

          0.45.0

          Released 2021-08-03

          New Deployment Targets

          CW Automate Groups

          You can now deploy software to CW Automate Groups and to CW Control Sessions sharing the same custom property values*

          image

          CW Control Custom Groups

          Requires CW Control ImmyBot extension to version 0.1.7 -- Awaiting ConnectWise Control Marketplace Approval

          image

          You can define which custom property number you want to use for the client name and secondary grouping property on the RMM Link details page.

          image

          Improvements

          • Invoke-ImmyCommand can now run on multiple computers in parallel, using the -Parallel switch
          • MSP Admin users can now set a flag Allow Access To MSP Resources on schedules that will allow all scripts run by the schedule to have access to MSP resources. An example would be allowing the metascript Get-ImmyAzureAuthHeader to use the flag -UseMSPTenant to retrieve the msp tenant's access token.
          • You can now connect to Azure AD as the MSP Tenant from scripts run on client devices by passing -UseMSPTenant to the Connect-ImmyAzureAD metascript
          • Added a new tag image for computers to indicate it is a sandbox
          • You can now delete computers from the "New Computers" page.
          • You can now use MSP KeyVault secrets in customer scripts. This is useful if, for example, you'd like to access your IT Glue API keys while running a metascript against a customer computer. Provide -UseMSPTenant to Get-ImmyAzureAuthHeader
          • Write-Progress can now be used inside Invoke-ImmyCommand blocks
          • Added a preference to set the default timezone that gets selected on the schedule and deployment pages
          • Agent installer modal now defaults Auto Onboard to false to avoid accidental auto onboarding
          • Reduced the local admin username minimum length from 3 characters to 2 characters. Allows for two-character naming such as "MC" or "LA"
          • Users now have the ability to specify the 'ClientName' CustomProperty index in the CW Control RMM Link, in the rare case it isn't the default.
          • Switched to using service bus for Invoke-ImmyCommand usage in metascripts when service bus is enabled for script results
          • Made some refactoring changes around how computers get identified
          • Refactored the "Needs a Manual Decision" tab to be more useful

          Bug Fixes

          • Fixed an issue where scripts that were run from the script editor page were not able to be cancelled
          • Fixed an issue with sessions getting stuck while attempting to update the immy agent provider
          • Fixed issue with deployments targeting a specific version where it would revert to latest when reloading the page
          • Fixed issue with creating maintenance tasks and them not showing up on the deployment page when you click "Deploy"
          • Fixed issue with the person select box not showing the person name and email
          • Fixed issue where task audits were not running during preview
          • Fixed an issue where task audits would always return compliant even if they were non-complaint
          • When uploading an installer or providing one through a URL, the package type must now be selected in order to continue
          • CW Control Extension now inserts events from ImmyBot with correct eventAttributes which will alleviate some script failure issues.

          0.44.7

          Released 2021-07-21

          Bug Fixes

          • Fixed a permission issue with managing individual target assignments
          • Fixed an issue where permission messages were always defaulting to "Permission Check Failed", instead of showing a more detailed message.

          0.44.6

          Released 2021-07-19

          Improvements

          • Added ability to delete computers from ImmyBot on the main computer list page and on the computer details page
          • Added permissions to only allow an admin to create, update and delete schedules
          • Added a "Triggered By" column to the maintenance session list page to indicate who manually started a session
          • Added text to the maintenance details page indicating who manually started the session
          • Configuration Tasks are now grouped together with their corresponding software action on the maintenance session details page. This should be more convenient than having all configuration tasks grouped at the end of the page.

          image

          • Session table now shows the execution date for pending scheduled sessions. Hovering over the text will show the exact date time.

          image

          • Session details page now shows the execution date for pending scheduled sessions

          image

          • Updated the text description for enforce, audit, and monitor modes on the deployment details page
          • Changed the text of "Hide Successful Deploys" to "Hide Compliant Deployments" for consistency
          • The getting started wizard will now suggest you enter wireless information and remind the user to connect the Ethernet if they don't configure a wireless profile
          • When creating a tenant or updating an existing tenant's name, an error will now be thrown if the name already exists.
          • MSP non-admin users can no longer see cross-tenant deployments
          • Configuration tasks that have a test script will now run the test script during detection if the software is detected on the machine.
          • Updated the logs for showing why a test script errored and cannot continue.

          image

          • Updated the maintenance action result reason with the message as well

          image

          • Clicking "Show/Hide no-action results" on the deployment page no longer hides maintenance task audit and monitor.

          Bug Fixes

          • Fixed an issue with device-cached inventory scripts not being executed on devices that use PowerShell 2.0
          • Fixed an issue with Immy Agent running on 32-bit systems not being able to execute scripts
          • Fixed an issue with PowerShell errors not being stored when they occur during inventory scripts
          • Fixed an issue with domain joining failing when the domain controller is 2008 R2/PowerShell 2.0
          • Fixed issues with the computer deployment excel export
          • Fixed an issue with restoring scheduled jobs when Redis goes down for maintenance
          • Added missing detection email options to the computer deployment page. Show Postpone Button on Detection Email and Show Update Now Button on Detection Email
          • Deployments with the desired state "Update If Found", will no longer add a configuration task if the software is not found on the computer
          • Fixed an issue with some session logs not getting persisted due to invalid characters in PowerShell responses
          • Fixed issue where the edit global script button was showing for non-immense users
          • Fixed issues with the resolution only and detection only tags showing incorrectly on the session details page
          • Fixed an issue with the package analyzer throwing an error when analyzing from a URL.
          • Fixed an issue with devices with UUID 03000200-0400-0500-0006-000700080009 causing computers to always need to go through rmm-computer-resolution in order to be fully identified

          0.44.5

          Released 2021-07-12

          Improvements

          • Updated computer deployment preview/deploy result for maintenance task audit to say either "Audit returned false" (highlighted red) or "Audit returned true" (highlighted green)
          • Removed computer deployment preview/deploy result field when running a maintenance task monitor since a monitor does not currently show compliance

          Bug Fixes

          • Fixed an issue where specific tenant onboarding deployments were not overriding cross tenant onboarding deployments
          • Fixed an error that was occurring when saving software with prerequisites
          • Fixed an issue with the package analyzer where it would unexpectedly fail

          0.44.4

          Released 2021-07-12

          Improvements

          • Added multi-selection to the computer list and onboarding computer list
          • Added software references to the maintenance task page.
          • Added option to schedules for Show Maintenance Actions In Emails that controls whether the maintenance action table is shown in the maintenance emails
          • Added TenantId to the list of available script parameters
          • Immybot now sends smaller payloads over RMMs when running inventory scripts
          • Configuration tasks now have access to the software and desired software version script parameters

          Bug Fixes

          • Fixed some usability issues with selecting persons and tenants on the Download Rmm Installer form
          • Fixed an issue with the Getting Started wizard not showing up by default for new Immy customers
          • Fixed issue with the SMTP page not showing the form
          • Fixed an issue where the selected tenant would disappear after saving a CWA-location-targetted deployment
          • Fixed a null reference error when requesting a chocolatey version that does not exist
          • Fixed issue with displaying the Azure Prinicipal Id on the person details page
          • Added missing icon to maintenance tasks on the session details page
          • Fixed an issue where workstations were incorrectly resolving to domain controller specific deployments

          0.44.3

          Released 2021-07-06

          Bug Fixes

          • Resolved an issue with creating software versions from the software version upload form

          0.44.2

          Released 2021-07-01

          Bug Fixes

          • Fixed a serialization bug introduced in 0.44.1

          0.44.1

          Released 2021-07-01

          Tenant Details Page Improvements

          1. Added a cloud / computer type selector to the sessions and actions tabs.
          2. Replaced the tasks tab with an actions tab
          3. Added a schedules tab

          The actions tab shows the latest actions performed against a computer or tenant. This table can be used to help identify issues with software and maintenance tasks.

          Example 1: Find all computers that have a large number of failing actions

          Filter the status column to non-compliant and then group by the computer.

          image

          Example 2: Find software and maintenance tasks that are failing across many computers

          image

          Dashboard - Load Top 10 Non-Compliant Items

          A new button was added to the dashboard, Load Top 10 Non-Compliant Items, that will show up when you have selected a tenant scoped target. This can be used as a quick way to identify issues for devices.

          image

          Bug Fixes And Other Improvements

          • Fixed issue with computer list not being able to filter by serial number
          • Added a configuration task tag to configuration task maintenance actions on the session details page

          0.44.0

          Released 2021-06-28

          Quick Deploy

          Deploying software for a specific computer is now easier. Located at the top of the Software tab on the computer details page. Tell your techs to use this form if they need to deploy software to a specific computer.

          image

          After selecting a software / maintenance task that you want to deploy, a session will be kicked off to determine if the computer has any applicable deployments. If a deployment is found, then you'll be presented actions for that deployment.

          image

          If a deployment is not found, then you are asked if you would like to create one.

          image

          If the selected item requires configuration task parameter values or a license, then you still need to create the deployment from the traditional deployment page. We plan on expanding on this to allow supplying a license and parameters directly on this form.

          image

          Computer List Search Improvements

          Searching for computers is now much faster after some internal refactoring of how the data was stored. We removed the need to select a filter so you can now search by any of the available fields specified in the placeholder.

          image

          • Added Onboarding as a support Target Type for convience.
          • Made device inventory storage processes more efficient and started caching some often-accessed computer data (like computer names)

          Download ImmyBot Agent Installer Improvements

          Updated the interface for downloading an immy agent installer. You can now assign default behavior to any of the installation methods. The Deploy tab will now automatically update when your computer shows up in ImmyBot.

          image

          image

          Inventory Results over Service Bus (Beta)

          Inventory scripts sent over any Rmm Provider connection will have their results sent over an Azure ServiceBus connection. This allows us to stream results in real-time, eliminating message size constraints. Since this is a new feature, you must manually enable this functionality under preferences. In a later release, we will extend the service bus script result handling to all scripts ran through Immy

          image

          Bug Fixes And Other Improvements

          • Added some automated testing to the package analyzer for stability
          • Made the package analyzer partially download files for analysis. This will allow large installers to be analyzed more efficiently
          • Fixed issue where the default install/uninstall scripts were not being selected after uploading and analyzing an installer
          • Fixed an issue where the onboarding reboot preference was not being honored
          • Fixed a bug running maintenance tasks where the maintenance task parameters specified from the deployment were not getting passed down to the running script
          • Fixed an issue that was causing Invoke-ImmyCommand run from cloud scripts to not actually execute
          • Added a brand new test suite to the frontend code to help fight against regressions
          • Fixed AppPref SB Bug where SB Subscriptions weren't being torn down and recreated
          • Fixed Powershell 2.0 compatibility issues with ServiceBus usage
          • Fixed issue with the software analyzer where it was not properly returning the install executable path for .zip files
          • Added more computer columns to the maintenance session list that can be toggled from the column chooser

          0.43.7

          Released 2021-06-17

          Bug Fixes

          • Fixed issue with ImmyBot Agent online/offline states not syncing properly
          • Fixed issue with Get-ImmyComputer not setting many properties on the computer response objects

          0.43.6

          Released 2021-06-16

          Improvements

          • Decreased the load time of maintenance session details
          • If retrieving bulk software during maintenance fails, we now display any errors that occurred
          • Moved the computer reboot logic to a global function script called Restart-ComputerAndWait. A computer that needs a reboot during a maintenance session will now utilize this global function script. This script can be overridden by a local function script with the same name, Restart-ComputerAndWait.

          Bug Fixes

          • Fixed issue on the deployment list where azure groups and automate location deployments were showing under cross tenant instead of single tenant
          • Fixed some common exceptions that were occurring for CW Control online/offline events

          0.43.3

          Released 2021-06-07

          Improvements

          • Chocolatey installation script no longer uses iex which was potentially flagging some AV
          • Moved Chocolatey installation script to global so that it can be quickly updated if necessary
          • Detection only sessions now show actions as either compliant or non-compliant
          • Added missing software and maintenance task icons to the computer's software tab

          Bug Fixes

          • Fixed issues with saving configuration tasks for software
          • Fixed some regressions with populating data on the deployment form and deployment list
          • Fixed issue with software version test scripts not detecting the boolean result at the end of the output

          0.43.2

          Released 2021-06-04

          New fields on Windows 10 Setup USB Package

          1. You can now set the reboot preference when you enable automatic onboarding.
          2. You can now specify additional persons
          3. Send Follow-up Email has been added here and also on the computer onboarding form to send an email when the onboarding session finishes.

          image

          General Improvements

          • Added a test email button to the branding form so you can preview how the maintenance emails will look
          • Progress session logs no longer show the activity id when id is 0
          • Onboarding sessions now run perform a full inventory of the computer
          • Increased the size of the row details icon in the logs panel to make it easier to see/click
          • Session logs are now now auto expanded when you click the row details icon
          • The primary log result is no longer truncated by default
          • On the script details form, the timeout field now specifies (seconds) as the unit
          • Updated the package type options on the software upload form to be "None, Zip file, Single file installer"
          • Added a description for zip files on the software upload form
          • Updated the action reference table to include the computer's online status
          • Added a refresh button to the dashboard table. This is useful if you have running sessions and you want to refresh the results of the table
          • Licensing can now be marked as 'Optional' on Software. This is useful for software that installs in trial mode when no license is specified
          • Added a DEPLOY button to the maintenance task form
          • Added maintenance action references to the maintenance task form
          • Added a "Missing Install Script" alert message to software version form when the version does not have an installation script
          • Updated maintenance action messages and session logs to indicate when a software is being installed without an installation script

          Bug Fixes

          • Follow-up emails now send correctly in sessions that have an agent update action
          • Disabled syntax highlighting for script output in session logs
          • Fixed an issue with being unable to delete an offline agent
          • Fixed an issue where onboarding computers were not able to apply metascript targets that depended on inventoried software since inventory had not run yet
          • Fixed issue with metascript deployments where we converting the entire result to a boolean instead of checking whether the result ends with a boolean
          • Resolves issue with software failing to install when it was marked as 'Licensed' but no license was specified on the deployment. For these cases, you can now select 'Optional' on the Software to install it without a license
          • Fixed some issues with showing session and action dates
          • Fixed some issues with the agent update stage

          0.43.0

          Released 2021-06-01

          Agent Updating

          The Immy Agent now gets updated during full maintenance sessions. You can also manually trigger an update by going to the computer's details page and under the Agents tab.

          image

          Assignment Override

          As part of a refactor of the computer software tab, we added the ability to override assignments. This is useful when resolving one off computers that do not need to be part of a larger assignment.

          image

          Getting Started Wizard

          A new 'Getting Started' feature is available, which guides the user through first-time ImmyBot setup and installation of the ImmyAgent on a device using PPKG. You can access this feature by clicking the "show Getting Started Wizard" link under your user email dropdown in the top right.

          image

          A recommended deployment is a global deployment that is accessible to all ImmyBot users. Recommended deployments represent common scenarios that most companies use. You can approve / dismiss recommended deployments. Approving a deployment will allow it to be considered as a valid deployment when running maintenance. Dismissing a deployment will disallow it from being considered during maintenance.

          When a new recommended deployment is added, you will receive a notification, "You have new recommended deployments". Clicking this link will prompt you to approve / disapprove the deployment.

          You can manage the approval of all recommended deployments from the main Deployment List page by clicking the "View Recommended Deployments" button at the top.

          image

          Improvements

          • In an effort to make script execution more reliable in the presence of Antivirus, we discontinued the use of Invoke-Expression when running scripts in the System context.
          • Made some primary buttons secondary where they weren't the primary action
          • Refactored the agents tab
          • Set max widths in inputs
          • Changed script selector and task selector buttons to links.
          • Moved configuration task actions to the execution phase of maintenance. Configuration tasks do nothing during detection.

          Bug Fixes

          • Fixed issue on the software assignment reference table where the target and desired software state columns were missing text
          • Fixed sorting computer column on the deployment page
          • Fixed issue with dates showing as 0001-01-01
          • Set maintenance sessions table time filter default to 7 days
          • Moved the maintenance task link directly under software in the nav menu
          • Set "Include Offline" default to false on the Ready For Onboarding tab on the New Computers page
          • Updated the actions needing attention section to only consider actions from the last week
          • Fixed an issue where software only linked to Ninite or Chocolatey were unable to perform upgrades
          • Fixed an issue where we were appending "/qn" to uninstall strings that were not using MsiExec.exe
          • Fixed issue where configuration task scripts were getting run when its software action failed

          0.42.3

          Released 2021-05-06

          PPKG Primary User

          You can now specify the primary user as part of the provisioning package configuration.

          image

          Maintenance Task Icons

          Maintenance Tasks can now have icons!

          image

          Deployment: Multiple Action Results

          The deployment page can now show multiple action results. This is useful when a software has a configuration task or dependencies.

          When there are 2 actions:

          image

          When there are more than 2 actions:

          image

          Showing extra actions:

          image

          Improvements

          • Added license for Entity Framework Extensions
          • Updated the descriptions for Windows Updates on the Schedule Page. We now hide the windows updates checkbox when it is not available.
            • image
          • The error alert at the top of a page now indicates that the requested resource could not be found if the api call resulted in a 404.
            • image

          Bug Fixes

          • Fixed issue with merging tenants where some users were receiving the following error: Configured execution strategy SqlServerRetryingExecutionStrategy does not support user initiated transactions
          • Fixed issues with determining winning deployments. A tenant filter script now has priority over a cross tenant filter script. Ordering has also been added to the target group filter. E.g. A deployment targeting primary domain controllers will now take priority over a deployment targeting servers.
          • Fixed issue where multiple actions returned on the edit deployment screen would overwrite each other when previewing or deploying
          • Fixed extra spacing between items on the computer software list
          • Fixed issue where some null dates were showing as Jan 01 0001 - They now show as n/a.
          • Fixed issue with creating, updating, and deleting deployments where the request would hang and eventually timeout
          • Fixed issue with the deployment details page slug having duplicate text

          0.42.2

          Improvements

          • Added ability to merge and delete tenants
          • Reduced agent install MSI from 41MB to 14MB
          • ImmyAgent can now be installed without an internet connection
            • The Provisioning Package now embeds the MSI instead of downloading it, preventing the need for an internet
          • ImmyAgent Service is now a single exe file
          • ImmyAgent gracefully shuts down quickly preventing connection errors on service restart because the previous process is still running
          • Better online/offline tracking: ImmyAgent now sends messages to the backend to indicate when it connects and disconnects. The prevents issues where a restart may not be noticed on machines that reboot quickly because the IoTHub filters out connection events that happen quickly.
          • When joining the domain from the Onboarding screen, the logs indicate what domain controller is being used to fetch the offline domain join token
          • When scripts are running in the Metascript context, we say execution is happening in the ImmyBot Backend instead of 'Server' as it could be confused with a server managed by ImmyBot

          Bug Fixes

          • Fixed Offline Domain join
            • This also fixed an issue where Invoke-ImmyCommand would not respect the Computer argument
          • Fixed issue where license values werent being provided during Onboarding sessions
          • Fixed issue where PPKG would fail to apply if wireless was specified and the machine doesn't have a wireless adapter
          • Fixed an issue with upgrades failing for global softwares that use choco provider
          • Fixed an issue where cloud scripts were not able to be debugged with the correct script parameters from tenant session details
          • Fixed issue causing deployments to fail when global software is linked to Ninite and Ninite integration is not enabled.
          • Fixed an issue where rekeyed agents never show up in Immy.
          • Fixed an issue with rerunning script from tenant session trying to run against a computer
          • Fixed an issue that could cause the first instance of a schedule to not run if the schedule was created between your timezone's offset and midnight. (I.E Between 6PM CDT and Midnight CDT)

          0.42.1

          Improvements and Bug Fixes

          • Fixed an issue on the deployment form when invalid text would incorrectly show up when a chocolatey or ninite software was selected
          • Fixed an issue that was preventing successful installs of ninite and chocolatey software

          0.42.0

          Tenant Details Page

          Added a tenant details page similar to the computer details page. The tenant list page link has been moved out from Settings -> Tenants to the top level in the navbar.

          1. Maintenance sessions run directly against a tenant can be viewed in the Sessions tab.
          2. Assigned Tenant Maintenance Tasks can be viewed in the Tasks tab.
          3. The Terminal tab is auto scoped to run meta scripts for a particular tenant.
          4. The Mappings tab allows you to link/un-link a tenant from RMM Providers.
          5. The edit tab allows you to change the name of the tenant.

          image

          Software Providers

          What is a Software Provider?

          A Software Provider tells ImmyBot how to install/uninstall a software. Currently, Local, Global, Chocolatey and Ninite are supported as providers. You can assign the available providers to a software on the software's edit page. A local/global software will inherently be a Local/Global Provider if there are software versions present.

          image

          The provider that is used during a maintenance session can be specified on the deployment. For example, if the Chocolatey provider is added on a software and is selected on a deployment, then Immy will always attempt to install/uninstall the software through Chocolatey.

          image

          If a specific provider is not selected, then the software will be installed/uninstalled using the following logic:

          1. If the deployment is set to install the latest version or update if found, then the provider that contains the latest software version will be used.
            • e.g. If chocolatey has a newer software version then global, then chocolatey will be used.
          2. For any other desired state, the local/global provider will be used (normal behavior).

          If the Ninite integration is enabled and Ninite is set as an alternate provider, then Ninite will take priority over Local/Global and Chocolatey.

          Detection Outdated

          Added a flag to computers to indicate that a deployment for the computer has been updated and that detection should be re-run to ensure the computer is up to date.

          image

          Computer Software Page Updates

          Added more tabs to filter the computer's software list

          image

          Unassignable

          The unassignable tab lists all software that exist on the computer but does not exist in ImmyBot as managed Software.

          Assignable

          The assignable tab now has two potential actions: Quick Assign and Assign. Quick Assign will immediately create a deployment targeting the primary person (if present) or the computer. A detection only session will also start immediately to determine the current state of the software. Assign will open the New Deployment Page and allow you to create a new assignment for the software. Quick assign is currently only available for software that do not have a configuration task or a license.

          image

          Assigned

          The assigned tab now provides 3 potential actions: Action to take (Install, Update, Enforce, etc), Re-run detection (refresh icon), and Manage (edit deployment)"

          image

          Improvements and Bug Fixes

          • Added ability to bulk delete tenants and associated data from the tenant list page
          • Added a new system preference "Allow Non-Admin Users To Manage Deployments". This is enabled by default.
          • Removed company column from dashboard table and excel export if the target is a single company
          • Updated the dashboard excel export file name to <company> Computers - <date>.xslx when the target is a single company
          • Added result reason to dashboard table and excel export
          • Reworded Action Success to Compliant, Failed, to Non-Compliant, and Missing to Not Found
          • Allowed schedules to target tenant maintenance tasks
          • Allowed the dashboard to target tenant maintenance tasks
          • Uninstalls using the vendor's uninstall string now check to ensure that the uninstall string is using /X and not /I and appends /qn (quiet) if it is missing.
          • Fixed a bug in metascripts where write-warning "some text" was not outputing anything to the console
          • Improved performance of running multiple maintenance sessions at the same time
          • Fixed a bug where uninstalling by MSI uninstall string was failing if the semantic version stored in the registry was not a valid semantic version
          • Fixed a bug with the primary person dropdown where it was limiting results to 1 and including people from any tenant.
          • Fixed a bug when running cloud scripts where it would fail because "the computer is not online"
          • Fixed an issue with repairs not triggering the configuration task or software dependencies
          • Fixed issues with being unable to cancel old maintenance sessions
          • Several other small QOL improvements throughout the codebase
          • Fixed bug where ImmyAgent Service stops immediately when stop is requested from the Windows Services

          0.41.13

          Released 2021-04-13

          Bug Fixes and Improvements

          • Fixed issue where non-strings weren't being passed into $using variables with Invoke-ImmyCommand { }
          • Fixed a null reference exception that could occur when performing an action for a maintenance task on the computer software table.

          0.41.12

          Released 2021-04-12

          Bug Fixes and Improvements

          • Improved the performance of a poor performing SQL query that populates the "Needs Attention" section of the computer details page

          0.41.11

          Released 2021-04-09

          Bug Fixes and Improvements

          • Improved performance of loading computers on the Deployment Details page
          • A schedule can now specify whether it will "Apply Windows Updates". Note If the schedule is limited to a specific software or maintenance task, then windows updates will not be applied.
          • Made minor improvements to BITS transfers
          • Fixed issue with Chocolatey latest version allowing prereleases
          • Fixed a bug causing maintenance task files to fail downloading

          0.41.10

          • Skipped

          0.41.9

          Released 2021-04-08

          Bug Fixes and Improvements

          • Now auto preselects MSP tenant when creating a new person and the user is an MSP user
          • Auto navigate back to Person List when creating/updating a person
          • Added a link to Microsoft documentation on how to obtain a user's Object ID
          • Added filtering to Stages column on the maintenance session table image
          • String variables passed into a remote runspace now get expanded automatically just like running normal scripts, preventing the need to run ExpandString on variables containing paths like $InstallerFile and $InstallerFolder
            • powershell
              Invoke-ImmyCommand {
              +    
              Skip to content

              Releases in 2021

              0.48.7

              Released 2021-12-10

              Access Requests

              Your users and the ImmyBot support team can now request access to your instance! When an unauthorized person authenticates, a "Request Access" button is available that will submit an access request. An MSP user can then grant or deny access from the user list page. An expiration of one hour, one day, or never can be set for the user.

              The access request feature can be enabled/disabled on the preferences page.

              image

              Improvements

              • Made some small improvements to the User list page
              • Added auto refreshing to the new computers page
              • Made the session list on the computer details page reload when it is shown

              Bug Fixes

              • Removed some extra whitespace showing on the tenant details page
              • Fixed a bug when using custom download scripts where the action would fail with An item with the same key has already been added
              • Changed "Triggered By" text from "Unknown" to "System - Automatic Onboarding" for maintenance sessions that onboard automatically
              • Changed parameter text from "override" to "specify" when a default valued is not specified
              • Fixed a bug where deployment parameter notes were not honoring line breaks
              • Changed the default target filter from No Filter to Workstations and Portable Devices
              • Fixed an error in metascripts, Tee-Output : Cannot bind argument..., that would occur if you ran the script $null, which should return null
              • Fixed a browser caching issue which would cause new features and bug fixes to not be immediately available when updating ImmyBot
              • Fixed an issue where the end time of the ImmyBot agent update action was not getting set, causing the time running to continually increase
              • Fixed an issue with the ImmyBot Chocolatey Feed app preference not updating when toggled

              0.48.6

              Released 2021-12-06

              Bug Fixes

              • Fixed a bug where deployments targeting an integration were getting deleted when updating to a different target type

              0.48.5

              Released 2021-12-03

              Bug Fixes

              • Fixed a bug where failed test scripts run after an install were not setting the action to non-compliant

              0.48.4

              Released 2021-12-03

              Bug Fixes

              • Fixed an issue with some ImmyBot instances not being able to run scheduled jobs
              • Fixed a bug with basic downloads failing because paths were using forward slashes instead of backslashes. This was causing all license downloads to fail.

              0.48.3

              Released 2021-12-02

              Improvements

              • Added logout and switch user buttons to the landing page when you are signed in as an unauthorized user

              image

              Bug Fixes

              • Fixed a bug where completed configuration tasks were incorrectly showing the message "Action interrupted"
              • Fixed a bug where providers failing to initialize were not getting disabled, causing them to continually throw exceptions

              0.48.2

              Released 2021-12-01

              Bug Fixes

              • Fixed an issue with internal packages behaving incorrectly on the new Linux backend
              • Fixed a caching bug that was showing the previously viewed maintenance session details when switching to a different computer

              0.48.1

              Released 2021-11-30

              Improvements

              • Ephemeral Agent now uses Win32API directly to invoke Powershell, replacing the WMI calls which suffered from System.PlatformNotSupportedException: The native library 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\wminet_utils.dll' does not have all required functions. Please, update the .NET Framework. errors on some specific machines.

              Bug Fixes

              • Resolves issue with Ephemeral Agent sometimes launching PowerShell in 32-bit mode
              • Added additional error logging when maintenance task get/set/test fail
              • Fixed an issue with file paths containing "/" instead of ""
              • Added back missing metascript aliases
              • Resolved 'AmsiContext' warnings being spammed in frontend
                • image
              • Improved the readability of the Azure page
              • Added an alert to the user page about creating new users
              • Replaced references to "Immybot" with "ImmyBot"

              0.48.0

              Released 2021-11-29

              IMPORTANT

              The changes in this release will require reconsent at first login!

              ⓘ If your Azure AD is configured to not allow non-Admin users to consent to new apps, you will need to login once as a user with sufficient privileges.

              image

              • Consolidated backend and frontend into a single Enterprise Application (Service Principal)
              • Removed backend.subdomain.immy.bot and pointed all API calls to subdomain.immy.bot
                • This has the additional benefit of increasing performance as the browser no longer makes a CORS pre-flight check when hitting the API
                  • Note: If you are using the ImmyBot API, you will need to remove backend. from your URI

              0.47.12

              Released 2021-11-29

              Bug Fixes

              • Fixed a bug introduced in 0.47.11 where BITS downloads fail for files that do not specify an MD5 hash

              0.47.11

              Released 2021-11-24

              Improvements

              • Files without MD5 hashes will now always get overwritten for better security.

              Bug Fixes

              • Fixed Ephemeral Agent PowerShell execution failures on some machines
              • Fixed an issue with nested exceptions not showing the correct output

              0.47.10

              Released 2021-11-23

              Improvements

              • Ephemeral Agent EXE respects global proxies for https:// even though it uses wss://

              Bug Fixes

              • Fixed issue where Ephemeral Agent EXE failed to launch due to an extraction issue on Windows Server Core

              0.47.9

              Released 2021-11-22

              Bug Fixes

              1. Fixed an issue with inventory and script-run cancellation logic causing high memory usage
              2. Fixed an issue with function scripts being used in metascripts causing heavy load on global database
              3. Switched to force Ephemeral Agent EXE to utilize System Proxy settings to alleviate connection refusal for some users
              4. Fixed an issue with PowerShell execution occasionally throwing an error that would crash ImmyBot

              0.47.8

              Released 2021-11-17

              Features

              Ephemeral Agent EXE

              1. The ephemeral agent now executes as an .exe instead of a PowerShell script.
              2. This allows us to use a WebSocket instead of polling, which improves performance and resiliency as we can immediately detect disconnections.
              3. Decreased initial connection time by attempting to connect using all RMMs simultaneously instead of in sequence.
              4. Substantially improved logging to help troubleshoot script execution issues

              Note: You may have to exclude your instance's hostname in the firewall from SSL Inspection policies! SSL Inspection may interfere with the WebSocket connection from this new agent!

              Note: You may also need to adjust your security software to allow the EXE to execute. We recommend adding an exclusion for the Immense Networks code signing certificate as it will be used to sign all ImmyBot PowerShell scripts and Executables.

              The subject of the certificate is:

              CN=Immense Networks, O=Immense Networks, L=Baton Rouge, S=Louisiana, C=US

              Improvements

              • Inventory scripts now run in parallel
              • ImmyBot will always overwrite license files to prevent issues with software not activating because the previous license file is still in the ImmyBot download folder.
              • The script terminal on the computer details page is no longer cleared when swapping between tabs.
              • Updated the instance disabled text to specify that only an admin user can re-enable immy

              Bug Fixes

              • The EXE ephemeral agent addresses intermittent ScriptTimeout exceptions that would occur for a variety of reasons
              • Implemented a "Script Execution Circuit Breaker" per computer to prevent RMM overload when retrying ephemeral connections (This can happen when security software blocks execution or firewalls prevent outbound connections)
              • Fixed several issues around script error handling. Line numbers now display correctly. Exceptions that occur before running a script are now caught and displayed properly.
              • Fixed an issue where inventory output with a value of null was being treated as successful and overwriting good results
              • Fixed a bug with session logs showing null references when a script was cancelled or timed out
              • Fixed a bug with quick deploy where the deployment resolution stage was unnecessarily reaching out to the computer to retrieve its software
              • Fixed a bug during maintenance sessions, Field at index '1' does not exist..., where retrieving the list of installed chocolatey software would fail
              • Resolved a potential issue around re-acquiring ephemeral agent sessions under concurrent script execution scenarios
              • Fixed a bug when re-authenticating to ImmyBot where you wouldn't be redirected to the page you were previously on due to the URL not including query parameters

              0.47.0

              Released 2021-10-28

              Maintenance Execution Order

              You can now specify the order in which maintenance items are executed by navigating to "/deployments/ordering" or by clicking the "Ordering" link in the side nav bar under "Deployments".

              Maintenance Execution Order

              Other Improvements

              • Made the software, maintenance task, script, and media list pages default to showing "All" for convenience. Additionally made small changes to these pages to make them more consistent in their appearance.
              • Configuration tasks are now executed immediately after their compliant software.
              • Refactored some code to be platform agnostic in preparation for hosting ImmyBot in Linux instead of Windows
              • Made some internal improvements to how we store core PowerShell code that will make development and script signing easier
              • Allowed dynamic version software to use the "Update If Found" desired state
              • Allowed inventory to use metascripts
              • Parallelized inventory to run up to 4 scripts in parallel for faster execution
              • When creating scripts from a software or maintenance task, the script name will now have a default value. E.g. If creating a new installation script the default name will be " Installation Script" made in this MR for use in release notes
              • Added a maintenance item column to the schedule list page
              • Simplified the "Getting Started Wizard"
              • Removed unnecessary padding in the "Getting Started Wizard"
              • New instances will now automatically approve all recommended target assignments

              Bug Fixes

              • Fixed a bug with adding the CW Automate integration where it would throw an error if the list of clients being imported was extremely large
              • Fixed command-line scripts so uninstall logic works as expected
              • Updated the target assignment resolution to exclude assignments that are tied to disabled provider links
              • Fixed a bug where the test script on a software was not getting called if the software was detected
              • Fixed a bug with maintenance item ordering where the preferred initial order of recommended items was not being set
              • Fixed an issue that was causing a memory leak that scaled with the number of ImmyBot agent installers

              0.46.9

              Released 2021-10-04

              Bug Fixes

              • Fixed a bug where configuration tasks were failing with "Parameter '<parameter name>' is marked required for Maintenance Task...and no value has been set" when the parameter value was actually set

              0.46.8

              Released 2021-09-30

              Bug Fixes

              • Fixed a bug with maintenance tasks where the default parameter value was being used instead of the overridden value
              • Fixed a bug where deploying tenant maintenance tasks would incorrectly show the computer target options instead of the tenant target options on the deployment form

              0.46.7

              Released 2021-09-27

              Bug Fixes

              • Added code to help certain scripts honor the system web proxy on a computer
              • Fixed a bug where the ephemeral agent was not honoring the correct polling interval, causing scripts to execute much slower than expected

              0.46.6

              Released 2021-09-24

              Improvements

              • Updated the help text at the top of the Branding list page to indicate what the blue and red stars are for
              • Inventory running for a computer now updates the computer details page in real-time after each inventory script
              • Clicking the re-inventory button now runs detection after the inventory scripts

              Bug Fixes

              • Added missing preference to select the default branding
              • Fixed a bug with the "Bulk Create Tenants" buttons on the provider details page where it would throw an erorr
              • Fixed a bug with running user context scripts where an error was being swallowed and the scripts would inevitably time out
              • Fixed an issue with updating the "Installer Executable Path / Installer File" field on the software version form where it would revert to the previous value
              • Fixed a bug where software marked as "Download Only" would attempt to run its configuration task. Software that is set to download only no longer adds an action for its configuration task.
              • Fixed an issue that was causing the azure user sync to stop running. When it encounters an issue syncing a specific tenant, it will now log some details that will help the immy team determine why it is failing and then continue attempting to sync other tenants.
              • Fixed a bug with running Get-AgentInstallScript where it would return the error Tenant # is not linked to a client for the specified provider
              • Fixed a bug saving the onboarding form where we were not disabling the onboarding save buttons while the page was still loading. Attempting to to save before the page was loaded was causing an error to be thrown
              • Fixed a bug where the branding list was showing brandings as "Expired" when they actually weren't
              • Fixed a bug where updating brandings with no selected tenant would cause the branding to get deleted instead
              • Fixed a bug where using the "Re-inventory" button on the computer details page would often time out and show an error
              • Fixed a bug where the edit deployment page always showed the desired version: latest

              0.46.5

              Released 2021-09-22

              Improvements

              • A session that resolves to 0 maintenance actions now results in a successful session.
              • Added the detected version to the dynamic versions script
              • Renamed the description text for safelisting the ephemeral agent script execution paths on the preferences page
              • Added computer name-change propagation to the frontend when using Refresh-ComputerSystemInfo metascript

              Bug Fixes

              • Found a bug where updating a computer on the onboarding form would cause problems if the computer has an active maintenance session. We now prevent saving the onboarding form if the computer has an active maintenance session.
              • Fixed potential issues with scripts not getting ran by prefixing our scripts with, [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;
              • Removed "Powered by Immense Networks" from the footer of maintenance emails
              • Fixed a bug where after uploading and analyzing software, the analyzed upgrade code was not executing the search to see if it was found on existing machines
              • Fixed a bug on the computer list page where a computer's online status was considering disabled links. Since a disabled link can result in stale data, we no longer use them to determine the online status of a computer.
              • Fixed a bug with clicking the "Delete Offline Agent" button on the computer agents tab
              • Fixed a bug where default configuration task parameters were missing when deploying from the computer software tab
              • Fixed a null reference exception that was occurring when attempting to run a script against an offline computer
              • Fixed an issue with saving computers from the onboarding screen where it would fail when the computer had an automate agent
              • Fixed script reference counts for dynamic version scripts, download installer scripts, and all default software scripts
              • Fixed a bug with assigning a local download installer script to a local software

              0.46.4

              Released 2021-09-16

              Improvements

              • Updated sandbox identification to preserve maintenance session data instead of deleting old data since that data could still be useful for debugging

              Bug Fixes

              • Fixed a bug in deserializing data that resulted in The requested operation requires an element of type 'Number', but the target element has type 'String'.
              • Fixed a potential null reference exception when retrieving bulk software
              • Fixed a bug with session logs not showing the correct end date time

              0.46.3

              Released 2021-09-16

              Bug Fixes

              • Fixed a bug that prevented Immy instances from receiving new Immy Agent releases

              0.46.2

              Released 2021-09-15

              Improvements

              • Changed ImmyAgent to use callbacks internally to response to Ephemeral Agent script start events. This should improve issues where the Ephemeral Agent doesn't start when using the ImmyAgent
              • Added a new switch parameter to Invoke-ImmyCommand called -IncludeLocals, which will automatically include all variables from the metascript runspace. When using -IncludeLocals you no longer need to specify $using variables.

              Bug Fixes

              • Fixed an issue where system scripts timeouts were not being honored
              • Fixed backwards-compatibility of Get-RmmInfoand Get-RmmComputer metascripts
              • Fixed an issue with automate groups not loading on deployment form
              • Fixed a null reference bug when calculating MD5 hashes
              • Fixed a bug with Invoke-ImmyCommand where $using variables were throwing a warning: WARNING: Parameter '__using_command' already exists with value "some-value"
              • Fixed a regression where Get-RmmInstallScript was renamed to Get-AgentInstallscript. Get-RmmInstallScript is now an alias for Get-AgentInstallScript

              0.46.1

              Released 2021-09-14

              Bug Fixes

              Fix ImmyAgent bug which would cause Temp PS1 path to not be created.

              0.46.0

              Released 2021-09-14

              Ephemeral Agent Script Execution

              ImmyBot now uses "Ephemeral Agents" for script execution.

              This new method will normalize the time it takes to run scripts across all RMM Providers. The initial payload to start the ephemeral agent will be sent through the RMM, but then all subsequent scripts will communicate directly with the ephemeral agent.

              An Ephemeral Agent is a lightweight PowerShell script that establishes a direct connection with the ImmyBot backend via Polling or SSE (Server-Sent Events) to receive script payloads to execute. Script output is then sent through an Azure Service Bus for high throughput handling. The ImmyBot backend manages the lifetime of ephemeral agents and is able to re-use them efficiently.

              Script Path Preference

              It is now easier to whitelist ImmyBot in your Antivirus. The Ephemeral Agent will use a script path containing a hash unique to your instance that you can rekey yourself.

              image

              Default Software Scripts

              You can now specify install, uninstall, post-install, post-uninstall, upgrade, and test scripts directly on the software.

              This reduces duplication for software where the versions use the same exact scripts while also making software easier to manage.

              Considerations

              1. If the software has a script and the desired version has a script, then the script on the version takes precedence. (e.g. the version's install script will be used instead of the software's install script if both are present)
              2. If the version does not have a script, then we will attempt to use the one on the software if the script is present.

              Custom Download Script

              You can now assign a "Download Installer" script to software that will be used instead of the core Immy download installer logic. This is valuable when downloading 3rd party installers from URLs that require authentication or specific headers.

              Other Improvements

              • Combined RMM Links and PSA Links into a single Integrations page under Settings
              • Improved Tarma InstallMate package analyzer detection
              • Added documentation for Ephemeral Agent & ServiceBus Script-Result handler info tiles in System Status page to better explain what they mean, and how to discern specific pieces of information from them
              • Fixed an issue where password parameters with $ characters were getting stripped ServiceBus Script-Result handling & Ephemeral Agent sessions are enabled by default for new Instances
              • Integration type capabilities are now listed on the New Integration page
              • ServiceBus Script-Result handling can now process results at a much higher throughput & more reliably than before.
              • ServiceBus Result latency has been improved to around ~100ms under normal load conditions from ~3s.
              • Implemented caching for tenant preferences to reduce database calls during maintenance sessions
              • Reduced some complexity in how we structure RMM Links and PSA Links (now known as integrations)
              • Reworded script-start-failed log to not include integration link name since the integration is not responsible for starting the scripts
              • Added basic logging of inventory script names and any errors to session logs

              Bug Fixes

              • Fixed an issue with pages not loading when there are a large number of tenants
              • Fixed a bug causing configuration tasks to fail if you were deploying software with the desired state of "Any Version"
              • Fixed an issue with CW Control Secondary Grouping property causing exceptions when used in Deployment.
              • Fixed a bug where script parameters were being duplicated due to case-sensitivity
              • Fixed a few potential ImmyAgent Installation issues that may occur on very old systems missing .NET standard assembly 2.x. Additionally Lowered .NET framework dependency down to 4.6.1 from 4.7.2
              • Fixed a bug where full maintenance sessions were attempting to resolve assignments that definitely should not be resolved
              • Fixed an issue the computer table counts showing incorrect numbers
              • Patched a number of ServiceBus Result-Handling bugs that could cause instability & unexpected output when in use.

              0.45.8

              Released 2021-08-25

              Bug Fixes & Improvements

              • Fixed a bug where reboots were not being suppressed for maintenance triggered in the batch action on the main computer list page
              • Fixed issues with running global or MSP-created meta scripts that use commands such as Invoke-CWARestMethod or Get-RmmInfo
              • Fixed issues with the sidebar not allowing you to select dropdown items when the scrollbar was showing
              • Fixed a bug on the media uploader that prevents users from dragging and dropping files to upload
              • Added the missing "Reboot Preference" label on the schedule details page

              0.45.7

              Released 2021-08-23

              Bug Fixes & Improvements

              • Fixed an issue where the Get-RmmInfo command was not being found in metascripts during auto onboarding sessions
              • Fixed an issue that was preventing users from deleting tenants. The error received was "An error occurred while deleting tenants".
              • Fixed an issue where saving a script on the script details page would inconveniently scroll you back to the top of the page

              0.45.6

              Released 2021-08-20

              Bug Fixes

              • Fixed a bug where configuration task file parameters were not getting downloaded to the computer before the software action ran
              • Fixed a bug where running a deployment with a configuration task that did not have any scripts enabled was causing the software scripts to not include the configuration task parameters

              0.45.5

              Released 2021-08-18

              Bug Fixes

              • Fixed a bug that surfaced in 0.45.4 where computers were not running the onboarding stage during maintenance sessions

              0.45.4

              Released 2021-08-18

              Bug Fixes and Improvements

              • Fixed an issue with schedules that were targeting (+ offset) timezones, e.g. (UTC +10:00) where the schedule was not getting scheduled at the correct time
              • Fixed an issue where linking a tenant to an RMM client was incorrectly pushing the synced computers to Needs Onboarding. Computers synced by linking a tenant are automatically marked as onboarding since it is the initial sync.
              • Fixed an issue with creating deployments where the maintenance item search was not returning maintenance tasks with the Tenant Category
              • Added a session log to warn users when you attempt to run a cloud script (tenants only) against a computer. This shouldn't be possible, but there is a bug on the deployment form that is allowing you to save an invalid deployment. This bug will be fixed in an upcoming release
              • Updated the Azure CSP Preconsent instructions on https://docs.immy.bot/guide/csp-preconsent-instructions.html to reflect the latest UI.
              • Fixed an issue with global maintenance task file parameters where we were not downloading the files to the computer

              0.45.3

              Released 2021-08-18

              Bug Fixes and Improvements

              • Fixed an issue that could prevent Immy from starting up properly where the database as referencing computer ids for computers that no longer exist
              • Fixed an issue on the Deployment List page where global software / maintenance tasks were getting incorrectly linked to local software / maintenance tasks
              • Fixed a rare exception getting thrown if an instance was started and stopped very quickly
              • Fixed an asset caching bug that would cause new features to be unavailable until the user performed a hard refresh in the browser
              • You will now receive a notification when new frontend updates are available to prompt you to reload the page
              • Fixed a bug where starting sessions for computers that are actively having maintenance scheduled by ImmyBot could cause the schedule to stop scheduling sessions

              0.45.2

              Released 2021-08-04

              Bug Fixes

              • Fixed an issue introduced in 0.45.0 that prevented users from creating deployments for installing Chocolatey and Ninite software
              • Fixed an issue with new computers getting stuck under failed with the specific error message "duplicate key value violates unique constraint "ix_computers_device_id"

              0.45.1

              Skipped

              0.45.0

              Released 2021-08-03

              New Deployment Targets

              CW Automate Groups

              You can now deploy software to CW Automate Groups and to CW Control Sessions sharing the same custom property values*

              image

              CW Control Custom Groups

              Requires CW Control ImmyBot extension to version 0.1.7 -- Awaiting ConnectWise Control Marketplace Approval

              image

              You can define which custom property number you want to use for the client name and secondary grouping property on the RMM Link details page.

              image

              Improvements

              • Invoke-ImmyCommand can now run on multiple computers in parallel, using the -Parallel switch
              • MSP Admin users can now set a flag Allow Access To MSP Resources on schedules that will allow all scripts run by the schedule to have access to MSP resources. An example would be allowing the metascript Get-ImmyAzureAuthHeader to use the flag -UseMSPTenant to retrieve the msp tenant's access token.
              • You can now connect to Azure AD as the MSP Tenant from scripts run on client devices by passing -UseMSPTenant to the Connect-ImmyAzureAD metascript
              • Added a new tag image for computers to indicate it is a sandbox
              • You can now delete computers from the "New Computers" page.
              • You can now use MSP KeyVault secrets in customer scripts. This is useful if, for example, you'd like to access your IT Glue API keys while running a metascript against a customer computer. Provide -UseMSPTenant to Get-ImmyAzureAuthHeader
              • Write-Progress can now be used inside Invoke-ImmyCommand blocks
              • Added a preference to set the default timezone that gets selected on the schedule and deployment pages
              • Agent installer modal now defaults Auto Onboard to false to avoid accidental auto onboarding
              • Reduced the local admin username minimum length from 3 characters to 2 characters. Allows for two-character naming such as "MC" or "LA"
              • Users now have the ability to specify the 'ClientName' CustomProperty index in the CW Control RMM Link, in the rare case it isn't the default.
              • Switched to using service bus for Invoke-ImmyCommand usage in metascripts when service bus is enabled for script results
              • Made some refactoring changes around how computers get identified
              • Refactored the "Needs a Manual Decision" tab to be more useful

              Bug Fixes

              • Fixed an issue where scripts that were run from the script editor page were not able to be cancelled
              • Fixed an issue with sessions getting stuck while attempting to update the immy agent provider
              • Fixed issue with deployments targeting a specific version where it would revert to latest when reloading the page
              • Fixed issue with creating maintenance tasks and them not showing up on the deployment page when you click "Deploy"
              • Fixed issue with the person select box not showing the person name and email
              • Fixed issue where task audits were not running during preview
              • Fixed an issue where task audits would always return compliant even if they were non-complaint
              • When uploading an installer or providing one through a URL, the package type must now be selected in order to continue
              • CW Control Extension now inserts events from ImmyBot with correct eventAttributes which will alleviate some script failure issues.

              0.44.7

              Released 2021-07-21

              Bug Fixes

              • Fixed a permission issue with managing individual target assignments
              • Fixed an issue where permission messages were always defaulting to "Permission Check Failed", instead of showing a more detailed message.

              0.44.6

              Released 2021-07-19

              Improvements

              • Added ability to delete computers from ImmyBot on the main computer list page and on the computer details page
              • Added permissions to only allow an admin to create, update and delete schedules
              • Added a "Triggered By" column to the maintenance session list page to indicate who manually started a session
              • Added text to the maintenance details page indicating who manually started the session
              • Configuration Tasks are now grouped together with their corresponding software action on the maintenance session details page. This should be more convenient than having all configuration tasks grouped at the end of the page.

              image

              • Session table now shows the execution date for pending scheduled sessions. Hovering over the text will show the exact date time.

              image

              • Session details page now shows the execution date for pending scheduled sessions

              image

              • Updated the text description for enforce, audit, and monitor modes on the deployment details page
              • Changed the text of "Hide Successful Deploys" to "Hide Compliant Deployments" for consistency
              • The getting started wizard will now suggest you enter wireless information and remind the user to connect the Ethernet if they don't configure a wireless profile
              • When creating a tenant or updating an existing tenant's name, an error will now be thrown if the name already exists.
              • MSP non-admin users can no longer see cross-tenant deployments
              • Configuration tasks that have a test script will now run the test script during detection if the software is detected on the machine.
              • Updated the logs for showing why a test script errored and cannot continue.

              image

              • Updated the maintenance action result reason with the message as well

              image

              • Clicking "Show/Hide no-action results" on the deployment page no longer hides maintenance task audit and monitor.

              Bug Fixes

              • Fixed an issue with device-cached inventory scripts not being executed on devices that use PowerShell 2.0
              • Fixed an issue with Immy Agent running on 32-bit systems not being able to execute scripts
              • Fixed an issue with PowerShell errors not being stored when they occur during inventory scripts
              • Fixed an issue with domain joining failing when the domain controller is 2008 R2/PowerShell 2.0
              • Fixed issues with the computer deployment excel export
              • Fixed an issue with restoring scheduled jobs when Redis goes down for maintenance
              • Added missing detection email options to the computer deployment page. Show Postpone Button on Detection Email and Show Update Now Button on Detection Email
              • Deployments with the desired state "Update If Found", will no longer add a configuration task if the software is not found on the computer
              • Fixed an issue with some session logs not getting persisted due to invalid characters in PowerShell responses
              • Fixed issue where the edit global script button was showing for non-immense users
              • Fixed issues with the resolution only and detection only tags showing incorrectly on the session details page
              • Fixed an issue with the package analyzer throwing an error when analyzing from a URL.
              • Fixed an issue with devices with UUID 03000200-0400-0500-0006-000700080009 causing computers to always need to go through rmm-computer-resolution in order to be fully identified

              0.44.5

              Released 2021-07-12

              Improvements

              • Updated computer deployment preview/deploy result for maintenance task audit to say either "Audit returned false" (highlighted red) or "Audit returned true" (highlighted green)
              • Removed computer deployment preview/deploy result field when running a maintenance task monitor since a monitor does not currently show compliance

              Bug Fixes

              • Fixed an issue where specific tenant onboarding deployments were not overriding cross tenant onboarding deployments
              • Fixed an error that was occurring when saving software with prerequisites
              • Fixed an issue with the package analyzer where it would unexpectedly fail

              0.44.4

              Released 2021-07-12

              Improvements

              • Added multi-selection to the computer list and onboarding computer list
              • Added software references to the maintenance task page.
              • Added option to schedules for Show Maintenance Actions In Emails that controls whether the maintenance action table is shown in the maintenance emails
              • Added TenantId to the list of available script parameters
              • Immybot now sends smaller payloads over RMMs when running inventory scripts
              • Configuration tasks now have access to the software and desired software version script parameters

              Bug Fixes

              • Fixed some usability issues with selecting persons and tenants on the Download Rmm Installer form
              • Fixed an issue with the Getting Started wizard not showing up by default for new Immy customers
              • Fixed issue with the SMTP page not showing the form
              • Fixed an issue where the selected tenant would disappear after saving a CWA-location-targetted deployment
              • Fixed a null reference error when requesting a chocolatey version that does not exist
              • Fixed issue with displaying the Azure Prinicipal Id on the person details page
              • Added missing icon to maintenance tasks on the session details page
              • Fixed an issue where workstations were incorrectly resolving to domain controller specific deployments

              0.44.3

              Released 2021-07-06

              Bug Fixes

              • Resolved an issue with creating software versions from the software version upload form

              0.44.2

              Released 2021-07-01

              Bug Fixes

              • Fixed a serialization bug introduced in 0.44.1

              0.44.1

              Released 2021-07-01

              Tenant Details Page Improvements

              1. Added a cloud / computer type selector to the sessions and actions tabs.
              2. Replaced the tasks tab with an actions tab
              3. Added a schedules tab

              The actions tab shows the latest actions performed against a computer or tenant. This table can be used to help identify issues with software and maintenance tasks.

              Example 1: Find all computers that have a large number of failing actions

              Filter the status column to non-compliant and then group by the computer.

              image

              Example 2: Find software and maintenance tasks that are failing across many computers

              image

              Dashboard - Load Top 10 Non-Compliant Items

              A new button was added to the dashboard, Load Top 10 Non-Compliant Items, that will show up when you have selected a tenant scoped target. This can be used as a quick way to identify issues for devices.

              image

              Bug Fixes And Other Improvements

              • Fixed issue with computer list not being able to filter by serial number
              • Added a configuration task tag to configuration task maintenance actions on the session details page

              0.44.0

              Released 2021-06-28

              Quick Deploy

              Deploying software for a specific computer is now easier. Located at the top of the Software tab on the computer details page. Tell your techs to use this form if they need to deploy software to a specific computer.

              image

              After selecting a software / maintenance task that you want to deploy, a session will be kicked off to determine if the computer has any applicable deployments. If a deployment is found, then you'll be presented actions for that deployment.

              image

              If a deployment is not found, then you are asked if you would like to create one.

              image

              If the selected item requires configuration task parameter values or a license, then you still need to create the deployment from the traditional deployment page. We plan on expanding on this to allow supplying a license and parameters directly on this form.

              image

              Computer List Search Improvements

              Searching for computers is now much faster after some internal refactoring of how the data was stored. We removed the need to select a filter so you can now search by any of the available fields specified in the placeholder.

              image

              • Added Onboarding as a support Target Type for convience.
              • Made device inventory storage processes more efficient and started caching some often-accessed computer data (like computer names)

              Download ImmyBot Agent Installer Improvements

              Updated the interface for downloading an immy agent installer. You can now assign default behavior to any of the installation methods. The Deploy tab will now automatically update when your computer shows up in ImmyBot.

              image

              image

              Inventory Results over Service Bus (Beta)

              Inventory scripts sent over any Rmm Provider connection will have their results sent over an Azure ServiceBus connection. This allows us to stream results in real-time, eliminating message size constraints. Since this is a new feature, you must manually enable this functionality under preferences. In a later release, we will extend the service bus script result handling to all scripts ran through Immy

              image

              Bug Fixes And Other Improvements

              • Added some automated testing to the package analyzer for stability
              • Made the package analyzer partially download files for analysis. This will allow large installers to be analyzed more efficiently
              • Fixed issue where the default install/uninstall scripts were not being selected after uploading and analyzing an installer
              • Fixed an issue where the onboarding reboot preference was not being honored
              • Fixed a bug running maintenance tasks where the maintenance task parameters specified from the deployment were not getting passed down to the running script
              • Fixed an issue that was causing Invoke-ImmyCommand run from cloud scripts to not actually execute
              • Added a brand new test suite to the frontend code to help fight against regressions
              • Fixed AppPref SB Bug where SB Subscriptions weren't being torn down and recreated
              • Fixed Powershell 2.0 compatibility issues with ServiceBus usage
              • Fixed issue with the software analyzer where it was not properly returning the install executable path for .zip files
              • Added more computer columns to the maintenance session list that can be toggled from the column chooser

              0.43.7

              Released 2021-06-17

              Bug Fixes

              • Fixed issue with ImmyBot Agent online/offline states not syncing properly
              • Fixed issue with Get-ImmyComputer not setting many properties on the computer response objects

              0.43.6

              Released 2021-06-16

              Improvements

              • Decreased the load time of maintenance session details
              • If retrieving bulk software during maintenance fails, we now display any errors that occurred
              • Moved the computer reboot logic to a global function script called Restart-ComputerAndWait. A computer that needs a reboot during a maintenance session will now utilize this global function script. This script can be overridden by a local function script with the same name, Restart-ComputerAndWait.

              Bug Fixes

              • Fixed issue on the deployment list where azure groups and automate location deployments were showing under cross tenant instead of single tenant
              • Fixed some common exceptions that were occurring for CW Control online/offline events

              0.43.3

              Released 2021-06-07

              Improvements

              • Chocolatey installation script no longer uses iex which was potentially flagging some AV
              • Moved Chocolatey installation script to global so that it can be quickly updated if necessary
              • Detection only sessions now show actions as either compliant or non-compliant
              • Added missing software and maintenance task icons to the computer's software tab

              Bug Fixes

              • Fixed issues with saving configuration tasks for software
              • Fixed some regressions with populating data on the deployment form and deployment list
              • Fixed issue with software version test scripts not detecting the boolean result at the end of the output

              0.43.2

              Released 2021-06-04

              New fields on Windows 10 Setup USB Package

              1. You can now set the reboot preference when you enable automatic onboarding.
              2. You can now specify additional persons
              3. Send Follow-up Email has been added here and also on the computer onboarding form to send an email when the onboarding session finishes.

              image

              General Improvements

              • Added a test email button to the branding form so you can preview how the maintenance emails will look
              • Progress session logs no longer show the activity id when id is 0
              • Onboarding sessions now run perform a full inventory of the computer
              • Increased the size of the row details icon in the logs panel to make it easier to see/click
              • Session logs are now now auto expanded when you click the row details icon
              • The primary log result is no longer truncated by default
              • On the script details form, the timeout field now specifies (seconds) as the unit
              • Updated the package type options on the software upload form to be "None, Zip file, Single file installer"
              • Added a description for zip files on the software upload form
              • Updated the action reference table to include the computer's online status
              • Added a refresh button to the dashboard table. This is useful if you have running sessions and you want to refresh the results of the table
              • Licensing can now be marked as 'Optional' on Software. This is useful for software that installs in trial mode when no license is specified
              • Added a DEPLOY button to the maintenance task form
              • Added maintenance action references to the maintenance task form
              • Added a "Missing Install Script" alert message to software version form when the version does not have an installation script
              • Updated maintenance action messages and session logs to indicate when a software is being installed without an installation script

              Bug Fixes

              • Follow-up emails now send correctly in sessions that have an agent update action
              • Disabled syntax highlighting for script output in session logs
              • Fixed an issue with being unable to delete an offline agent
              • Fixed an issue where onboarding computers were not able to apply metascript targets that depended on inventoried software since inventory had not run yet
              • Fixed issue with metascript deployments where we converting the entire result to a boolean instead of checking whether the result ends with a boolean
              • Resolves issue with software failing to install when it was marked as 'Licensed' but no license was specified on the deployment. For these cases, you can now select 'Optional' on the Software to install it without a license
              • Fixed some issues with showing session and action dates
              • Fixed some issues with the agent update stage

              0.43.0

              Released 2021-06-01

              Agent Updating

              The Immy Agent now gets updated during full maintenance sessions. You can also manually trigger an update by going to the computer's details page and under the Agents tab.

              image

              Assignment Override

              As part of a refactor of the computer software tab, we added the ability to override assignments. This is useful when resolving one off computers that do not need to be part of a larger assignment.

              image

              Getting Started Wizard

              A new 'Getting Started' feature is available, which guides the user through first-time ImmyBot setup and installation of the ImmyAgent on a device using PPKG. You can access this feature by clicking the "show Getting Started Wizard" link under your user email dropdown in the top right.

              image

              A recommended deployment is a global deployment that is accessible to all ImmyBot users. Recommended deployments represent common scenarios that most companies use. You can approve / dismiss recommended deployments. Approving a deployment will allow it to be considered as a valid deployment when running maintenance. Dismissing a deployment will disallow it from being considered during maintenance.

              When a new recommended deployment is added, you will receive a notification, "You have new recommended deployments". Clicking this link will prompt you to approve / disapprove the deployment.

              You can manage the approval of all recommended deployments from the main Deployment List page by clicking the "View Recommended Deployments" button at the top.

              image

              Improvements

              • In an effort to make script execution more reliable in the presence of Antivirus, we discontinued the use of Invoke-Expression when running scripts in the System context.
              • Made some primary buttons secondary where they weren't the primary action
              • Refactored the agents tab
              • Set max widths in inputs
              • Changed script selector and task selector buttons to links.
              • Moved configuration task actions to the execution phase of maintenance. Configuration tasks do nothing during detection.

              Bug Fixes

              • Fixed issue on the software assignment reference table where the target and desired software state columns were missing text
              • Fixed sorting computer column on the deployment page
              • Fixed issue with dates showing as 0001-01-01
              • Set maintenance sessions table time filter default to 7 days
              • Moved the maintenance task link directly under software in the nav menu
              • Set "Include Offline" default to false on the Ready For Onboarding tab on the New Computers page
              • Updated the actions needing attention section to only consider actions from the last week
              • Fixed an issue where software only linked to Ninite or Chocolatey were unable to perform upgrades
              • Fixed an issue where we were appending "/qn" to uninstall strings that were not using MsiExec.exe
              • Fixed issue where configuration task scripts were getting run when its software action failed

              0.42.3

              Released 2021-05-06

              PPKG Primary User

              You can now specify the primary user as part of the provisioning package configuration.

              image

              Maintenance Task Icons

              Maintenance Tasks can now have icons!

              image

              Deployment: Multiple Action Results

              The deployment page can now show multiple action results. This is useful when a software has a configuration task or dependencies.

              When there are 2 actions:

              image

              When there are more than 2 actions:

              image

              Showing extra actions:

              image

              Improvements

              • Added license for Entity Framework Extensions
              • Updated the descriptions for Windows Updates on the Schedule Page. We now hide the windows updates checkbox when it is not available.
                • image
              • The error alert at the top of a page now indicates that the requested resource could not be found if the api call resulted in a 404.
                • image

              Bug Fixes

              • Fixed issue with merging tenants where some users were receiving the following error: Configured execution strategy SqlServerRetryingExecutionStrategy does not support user initiated transactions
              • Fixed issues with determining winning deployments. A tenant filter script now has priority over a cross tenant filter script. Ordering has also been added to the target group filter. E.g. A deployment targeting primary domain controllers will now take priority over a deployment targeting servers.
              • Fixed issue where multiple actions returned on the edit deployment screen would overwrite each other when previewing or deploying
              • Fixed extra spacing between items on the computer software list
              • Fixed issue where some null dates were showing as Jan 01 0001 - They now show as n/a.
              • Fixed issue with creating, updating, and deleting deployments where the request would hang and eventually timeout
              • Fixed issue with the deployment details page slug having duplicate text

              0.42.2

              Improvements

              • Added ability to merge and delete tenants
              • Reduced agent install MSI from 41MB to 14MB
              • ImmyAgent can now be installed without an internet connection
                • The Provisioning Package now embeds the MSI instead of downloading it, preventing the need for an internet
              • ImmyAgent Service is now a single exe file
              • ImmyAgent gracefully shuts down quickly preventing connection errors on service restart because the previous process is still running
              • Better online/offline tracking: ImmyAgent now sends messages to the backend to indicate when it connects and disconnects. The prevents issues where a restart may not be noticed on machines that reboot quickly because the IoTHub filters out connection events that happen quickly.
              • When joining the domain from the Onboarding screen, the logs indicate what domain controller is being used to fetch the offline domain join token
              • When scripts are running in the Metascript context, we say execution is happening in the ImmyBot Backend instead of 'Server' as it could be confused with a server managed by ImmyBot

              Bug Fixes

              • Fixed Offline Domain join
                • This also fixed an issue where Invoke-ImmyCommand would not respect the Computer argument
              • Fixed issue where license values werent being provided during Onboarding sessions
              • Fixed issue where PPKG would fail to apply if wireless was specified and the machine doesn't have a wireless adapter
              • Fixed an issue with upgrades failing for global softwares that use choco provider
              • Fixed an issue where cloud scripts were not able to be debugged with the correct script parameters from tenant session details
              • Fixed issue causing deployments to fail when global software is linked to Ninite and Ninite integration is not enabled.
              • Fixed an issue where rekeyed agents never show up in Immy.
              • Fixed an issue with rerunning script from tenant session trying to run against a computer
              • Fixed an issue that could cause the first instance of a schedule to not run if the schedule was created between your timezone's offset and midnight. (I.E Between 6PM CDT and Midnight CDT)

              0.42.1

              Improvements and Bug Fixes

              • Fixed an issue on the deployment form when invalid text would incorrectly show up when a chocolatey or ninite software was selected
              • Fixed an issue that was preventing successful installs of ninite and chocolatey software

              0.42.0

              Tenant Details Page

              Added a tenant details page similar to the computer details page. The tenant list page link has been moved out from Settings -> Tenants to the top level in the navbar.

              1. Maintenance sessions run directly against a tenant can be viewed in the Sessions tab.
              2. Assigned Tenant Maintenance Tasks can be viewed in the Tasks tab.
              3. The Terminal tab is auto scoped to run meta scripts for a particular tenant.
              4. The Mappings tab allows you to link/un-link a tenant from RMM Providers.
              5. The edit tab allows you to change the name of the tenant.

              image

              Software Providers

              What is a Software Provider?

              A Software Provider tells ImmyBot how to install/uninstall a software. Currently, Local, Global, Chocolatey and Ninite are supported as providers. You can assign the available providers to a software on the software's edit page. A local/global software will inherently be a Local/Global Provider if there are software versions present.

              image

              The provider that is used during a maintenance session can be specified on the deployment. For example, if the Chocolatey provider is added on a software and is selected on a deployment, then Immy will always attempt to install/uninstall the software through Chocolatey.

              image

              If a specific provider is not selected, then the software will be installed/uninstalled using the following logic:

              1. If the deployment is set to install the latest version or update if found, then the provider that contains the latest software version will be used.
                • e.g. If chocolatey has a newer software version then global, then chocolatey will be used.
              2. For any other desired state, the local/global provider will be used (normal behavior).

              If the Ninite integration is enabled and Ninite is set as an alternate provider, then Ninite will take priority over Local/Global and Chocolatey.

              Detection Outdated

              Added a flag to computers to indicate that a deployment for the computer has been updated and that detection should be re-run to ensure the computer is up to date.

              image

              Computer Software Page Updates

              Added more tabs to filter the computer's software list

              image

              Unassignable

              The unassignable tab lists all software that exist on the computer but does not exist in ImmyBot as managed Software.

              Assignable

              The assignable tab now has two potential actions: Quick Assign and Assign. Quick Assign will immediately create a deployment targeting the primary person (if present) or the computer. A detection only session will also start immediately to determine the current state of the software. Assign will open the New Deployment Page and allow you to create a new assignment for the software. Quick assign is currently only available for software that do not have a configuration task or a license.

              image

              Assigned

              The assigned tab now provides 3 potential actions: Action to take (Install, Update, Enforce, etc), Re-run detection (refresh icon), and Manage (edit deployment)"

              image

              Improvements and Bug Fixes

              • Added ability to bulk delete tenants and associated data from the tenant list page
              • Added a new system preference "Allow Non-Admin Users To Manage Deployments". This is enabled by default.
              • Removed company column from dashboard table and excel export if the target is a single company
              • Updated the dashboard excel export file name to <company> Computers - <date>.xslx when the target is a single company
              • Added result reason to dashboard table and excel export
              • Reworded Action Success to Compliant, Failed, to Non-Compliant, and Missing to Not Found
              • Allowed schedules to target tenant maintenance tasks
              • Allowed the dashboard to target tenant maintenance tasks
              • Uninstalls using the vendor's uninstall string now check to ensure that the uninstall string is using /X and not /I and appends /qn (quiet) if it is missing.
              • Fixed a bug in metascripts where write-warning "some text" was not outputing anything to the console
              • Improved performance of running multiple maintenance sessions at the same time
              • Fixed a bug where uninstalling by MSI uninstall string was failing if the semantic version stored in the registry was not a valid semantic version
              • Fixed a bug with the primary person dropdown where it was limiting results to 1 and including people from any tenant.
              • Fixed a bug when running cloud scripts where it would fail because "the computer is not online"
              • Fixed an issue with repairs not triggering the configuration task or software dependencies
              • Fixed issues with being unable to cancel old maintenance sessions
              • Several other small QOL improvements throughout the codebase
              • Fixed bug where ImmyAgent Service stops immediately when stop is requested from the Windows Services

              0.41.13

              Released 2021-04-13

              Bug Fixes and Improvements

              • Fixed issue where non-strings weren't being passed into $using variables with Invoke-ImmyCommand { }
              • Fixed a null reference exception that could occur when performing an action for a maintenance task on the computer software table.

              0.41.12

              Released 2021-04-12

              Bug Fixes and Improvements

              • Improved the performance of a poor performing SQL query that populates the "Needs Attention" section of the computer details page

              0.41.11

              Released 2021-04-09

              Bug Fixes and Improvements

              • Improved performance of loading computers on the Deployment Details page
              • A schedule can now specify whether it will "Apply Windows Updates". Note If the schedule is limited to a specific software or maintenance task, then windows updates will not be applied.
              • Made minor improvements to BITS transfers
              • Fixed issue with Chocolatey latest version allowing prereleases
              • Fixed a bug causing maintenance task files to fail downloading

              0.41.10

              • Skipped

              0.41.9

              Released 2021-04-08

              Bug Fixes and Improvements

              • Now auto preselects MSP tenant when creating a new person and the user is an MSP user
              • Auto navigate back to Person List when creating/updating a person
              • Added a link to Microsoft documentation on how to obtain a user's Object ID
              • Added filtering to Stages column on the maintenance session table image
              • String variables passed into a remote runspace now get expanded automatically just like running normal scripts, preventing the need to run ExpandString on variables containing paths like $InstallerFile and $InstallerFolder
                • powershell
                  Invoke-ImmyCommand {
                       # This is no longer necessary
                       $InstallerFile = $ExecutionContext.InvokeCommand.ExpandString($using:InstallerFile)
                       # You can now use $using:InstallerFile directly
                  @@ -60,7 +60,7 @@
                       $Parameters = $using:Parameters
                       $Parameters.ComputerName
                   }

                  Timezone Support for Schedules

                  • Schedules now have the ability to specify a timezone. The detection and execution time are then relative to the selected timezone. If you use a custom cron expression, then it will also be relative to the selected timezone. The default option will be UTC to match the previous functionality.

                  image

                  • The deployment options on the deployment page also provide you the ability to select which timezone to use when selecting the "later" option.

                  image

                  My Customers (CSP Preconsent)

                  image

                  • If you are on the My Customers Azure Level, we made assigning Azure customers to tenants and syncing people easier. Matching an azure customer to a tenant will now save and sync automatically.
                  • If you are on the Customer Azure Level, we made assigning Azure customers to tenants and syncing people easier. Selecting a tenant will now automatically save and sync.

                  Software List Type Filter

                  • Added software type filter to the software list page fore easier filtering based on type

                  image

                  Bug Fixes

                  • Metascript and Filterscript dropdowns now show recent scripts immediately
                  • Fixes a bug where maintenance task file parameters were not getting downloaded to the computer
                  • Fixes a bug where uploading .zip maintenance task files threw an error.
                  • Fixed issue where it was impossible to upload zip files as parameters to maintenance tasks
                  • Fixed a bug where we were overwriting computer details when an error occurred.
                  • Rerunning a configuration task now properly contains the task's parameter values
                  • Fixed an issue with errors being shown in session logs when ImmyBot stops

                  0.38.4

                  Released 2021-01-15

                  Improvements

                  • Invoke-CWARestMethod now supports all verbs Automate accepts, including PUT and DELETE
                  • Invoke-CWARestMethod no longer requires that the body is an array, and no longer errors when the API returns a non-array

                  Bug Fixes

                  • Fixes a bug where the script modal would close when you hit save even if the script had an error. It now stays open until it is successfully saved.
                  • Fixes a bug where the Ready for Onboarding count was not matching the number of items in the table.
                  • Fixes a bug where click Overwrite existing computer on the New Computers page threw an error about not being able to find the existing computer
                  • Fixes a bug with URI type parameter values where if no scheme is provided it would fail. It now defaults to https://.
                  • Fixes a potential issue where a tenant filter script could get run for a different tenant.
                  • Fixes a bug where the path to the file that was downloaded was incorrect for maintenance task file parameters.
                  • Corrects an issue where the Agent Install fails to get the serialnumber of the machine because we are referencing the incorrect WMI class.

                  0.38.3

                  Released 2021-01-04

                  Improvements

                  Computer Software list loads instantly

                  • Computer->Software tab loads instantly allowing you to perform actions immediately instead of waiting 1-2 minutes. Keep an eye out in 0.39 for major functionality on this page!
                  • Added indications on to the Computer-Software tab about whether or not Immy installed the software, and if so whether it was a one-off 'adhoc' deployment or part of a saved Deployment.

                  image

                  Parameter Ordering

                  • Added parameter ordering on the maintenance task form, and made the deployment form use that ordering when listing maintenance task parameters
                  • image

                  Bug Fixes

                  • Fixed an issue with not being able to re-enable a disabled psa link
                  • Fixed an issue with Immy attempting to sync psa clients for a disabled psa link
                  • Computers without system inventory would not appear in the computer list. They now appear in the list and can be filtered on their Immybot device_id instead of computer name as computer name is not present.
                  • Fixed an issue where the entire maintenance session would fail if an assignment had invalid parameters
                  • Fixed a bug introduced in 0.38.2 that would cause BITS downloads to fail and the basic download to be used.
                  • Fixed a bug where we were not clearing certain fields when a file upload was removed from the uploader.
                  • Fixed a permission issue with returning script data for non-msp users.
                  • Pressing Deploy on the Edit Deployment page no longer auto expands the logs, making it easier to Deploy to multiple individual computers
                  • Fixed a bug where you could not edit or view a disabled PSA Link
                  • Invoke-CWARestMethod and other cmdlets used for interacting with the CWA API now contain error information returned by the API itself instead of being stripped down to a generic server error.

                  Releases in 2020

                  Go to 2020 releases

              - + \ No newline at end of file diff --git a/releases-2022.html b/releases-2022.html index 0b94a412..1baa4a59 100644 --- a/releases-2022.html +++ b/releases-2022.html @@ -5,46 +5,46 @@ Releases in 2022 | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              Releases in 2022

              0.54.7

              Released 2023-01-04

              Improvements

              • Improved error messages when the error is coming from an integration's API, such as the CW Automate API, CW Manage API, or CW Control ImmyBot extension API.
              • Added manufacturer to duplicate agent table
              • Added Device ID to the computer overview details

              Bug Fixes

              • Fixed a potential issue where a computer architecture could not be found while trying to resolve a dynamic software version
              • Fixed a transient issue that was causing detection to fail when it could have continued
              • Fixed an issue where pending connectivity sessions would not be triggered for a computer that came online due to a manual resolution for a conflicting agent
              • Fixed an issue during identification where the device id of "00000000-0000-0000-0000-000000000000" was allowed as a valid GUID. It is not valid, and new devices with this GUID will be assigned a new one.

              0.54.6

              Released 2022-12-27

              Improvements

              • Only MSP Admins have access to the Tenant Mappings tab now

              Bug Fixes

              • Fixed an issue where schedules with an invalid cron expression were allowed to be saved
              • Existing invalid cron expressions will be converted to a valid cron expression when possible, using NCronTab validation functions.
              • Fixed an issue where system and user scripts could possibly timeout before an ephemeral agent was ever established
              • Fixed an issue with downloading the immy agent installer as an .iso file
              • Fixed an issue preventing computers from being deleted
              • Mitigated an issue with N-Central which eventually resulted in N-Central hangs and crashes
              • Fixed a transient issue related to starting Ephemeral Agents on some N-Central devices the first time

              0.54.5

              Released 2022-12-22

              Bug Fixes

              • Fixed an issue with deleting actions that caused sessions to fail
              • Fixed an issue saving some database calls due to issues from the migration to flex database servers
              • Fixed an issue with saving scripts that incorrectly fail with a message that the name is not unique

              0.54.4

              Released 2022-12-19

              Improvements

              • Added bulk cancel and bulk rerun buttons to the maintenance session list page Added Split-Path cmdlet as well as $ActionId, $SessionId and $SessionGroupId to the included variables
              • Improved Ephemeral Agent connection speed
              • Discontinued use of WMI CreateProcess which flags AV, specifically Windows Defender for Endpoint
              • Made modifications to the light color theme to improve readability

              Bug Fixes

              • Fixed several issues with the NCentral integration. Should be more stable overall.
              • Fixed an issue where preview/deploy from the dashboard table header were not getting enqueued and would crash instances by running too many sessions as once.
              • Fixed an issue with saving local software versions where it would respond with an error about certain fields being required when they shouldn't be
              • Fixed an issue with the Stop-ImmySession cmdlet where it was not setting the session or stage status to Cancelled
              • Fixed issues with our BITS download where it could get potentially stuck trying to download when an ephemeral agent could not be established
              • Fixed an issue with computers getting set to needs onboarding incorrectly when an agent gets assigned to an existing computer that is not new
              • Centered the text in the "Session #xxx in progress" button
              • Fixed an issue with saving the SMTP form
              • Fixed an issue where session logs could repeat "Reboots have been suppressed during business hours" over and over

              0.54.3

              Released 2022-11-23

              Improvements

              • Improved enqueueing of maintenance sessions based on priority. Adhoc > Onboarding > Scheduled maintenance
              • Removed service bus form options for CW Control as the service bus is now always used
              • Added a health check to the CW Control integration to report unhealthy when the extension is not up to date
              • Updated the connected indicator on the computer details page to have a yellow lightning bolt when the ephemeral agent is connected
              • Scripts are now allowed to run for computers that have an ephemeral agent connected even if the agents all report disconnected
              • Updated the batch actions on the tenant list page to include tenant preferences. e.g. You can now update tenant business hours in bulk
              • Clicking "Attempt Identification Again" or "Rety x failed agents" on the identification tab now immediately triggers identification where before it would take up to 60 seconds

              Bug Fixes

              • Made computer feature usage calculator no longer count computers that have zero agents
              • Fixed a race condition in the Ephemeral Agent that would cause scripts to hang and sessions to timeout

              0.54.2

              Released 2022-11-17

              Improvements

              • Improved our identification de-dupe logic to automatically associate re-installed agents to the correct computers
              • Added more identification logs for some edge case scenarios to help with debugging
              • Added onboarding text to dashboard underneath onboarding computers
              • Slightly improved performance of preview/deploy functionality on the dashboard page
              • Increased the width of the tag selector in the ImmyBot Installer form and on the computer details page

              Bug Fixes

              • Fixed some issues where newly identified agents would always skip onboarding
              • Fixed an issue where non-msp admins could not view tag deployments limited to their tenant
              • Added missing times to the time dropdown for scheduling adhoc deployments
              • Fixed descriptions on the maintenance task get/set/test script dropdowns
              • Fixed some mobile styling issues with the navigation bar and on computer list page

              0.54.1

              Released 2022-11-14

              Bug Fixes

              • Fixed an issue with CW Control syncs causing CW Control agents to re-sync into ImmyBot unnecessarily

              0.54.0

              Released 2022-11-11

              CW Control Updates

              We added support for the breaking changes introduced in CW Control 22.9. We addressed stability issues with Control crashing due to the ImmyBot extension. On the Control integration form, make sure you check off the new options for using the Service Bus for better performance.

              Pending Identification Updates

              Agent identification now has logging to help you find root causes for why some agents fail to have scripts run against them. View them in Computers -> Pending Identification -> Show Identification Logs

              You can also see the identification logs for successfully identified agents under the Computer -> Agents tab.

              We now utilize the serial numbers for devices that come from trusted manufacturers (currently Lenovo, Dell, and HP). If a computer already exists in ImmyBot for a trusted manufacturer, any additional agents with that computer's serial number will skip identification and automatically be associated.

              Improvements

              • Fixed issue where Intellisense would throw null reference exception when completing variables
              • Updated CW Control integration to support CW Control 22.9 (extension version 0.3.0)
              • Added immy subscription information to billing details page
              • Made subscription portal show within immy frontend instead of a link to chargebee
              • Updated the default combined maintenance task script to leverage the latest function scripts in Immy. The new script is Get-WindowsRegistryValue -Path "HKLM:\Software\Wow6432Node\MySoftwareVendor\MySoftware" -Name EnableFeature | Registry-ShouldBe -Value 1
              • License files are now downloaded before running a configuration task's test script during detection in case the script relies on the presence of the license file
              • Added a new tenant preference "Exclude from Cross-Tenant Deployments and Schedules". When a tenant is excluded, all cross-tenant deployments and schedules targeting the tenant or its computers will not be applied when full maintenance is ran. This is particularly useful for Co-Managed IT situations that don't don't want your cross-tenant schedules or deployments.
              • Improved startup time of instances in situations where there was a large number of recently added agents
              • Added "Change Tenant" in batch actions for the computers table

              0.53.12

              Released 2022-11-09

              Bug Fixes

              • Removed the ImmyBot Agent from the Tenant -> Mappings table
              • Reduced metric reporter frequency to 30 minutes

              0.53.11

              Released 2022-10-20

              Bug Fixes

              • Fixed a null reference exception that was occurring when sending the maintenance session follow-up email
              • Fixed a potential exception that could occur in the N-Central API
              • Fixed an exception that occurred when trying to retrieve the online agents for a computer
              • Fixed an uncommon issue where some dynamic version scripts were throwing a null reference exception
              • Fixed an uncommon exception with ImmyBot Agent connection events that caused the event to not get saved
              • Fixed an issue with syncing devices from CW Automate where it would potentially take a few minutes and block other requests
              • Fixed an issue where some CW Control and N-Central agents were not automatically onboarding when they should
              • Fixed issue where Get-ImmyComputer -InventoryKeys metascript was not auto populating the available keys
              • Fixed an issue with incorrect breadcrumbs sometimes showing on the computer list page
              • Added a missing debug log that indicates when an ImmyBot agent fails to provide inventory data
              • Fixed a bug where we were dropping both dedupe markers over the same agent instead of different agents
              • Fixed an issue with maintenance sessions reporting failed after re-running an action successfully
              • Fixed an issue where loading the deployments list would throw a ArgumentNullException
              • Fixed an issue with some Chocolatey and Ninite logs not showing up under a maintenance action's phases

              0.53.10

              Released 2022-10-05

              Bug Fixes

              • Fixed an issue with displaying large software icon sizes on the Library -> Ordering page

              0.53.9

              Released 2022-10-05

              Improvements

              • SVGs now render correctly when uploaded as software icons
              • Increased some low timeout values on the ephemeral agent that were causing devices with slow network connections to fail
              • Changed the Pending Identification tab to default sort descending by Date Added since the most recent machines are the ones we are usually looking for.

              Bug Fixes

              • Fixed an issue with the ImmyBot Agent connected/disconnected events not propagating for pc reboots and pending connectivity sessions
              • Reduced likelyhood of Output CircularBuffer has already over-run requested index error in scripts
              • Ephemeral Agent reconnection is now prevented upon receiving a 500 status code. This was previously causing agents to stay running indefinitely.
              • Fixed an issue on the system update page where the new releases dropdown was not stretching the width like the current release dropdown

              0.53.8

              Released 2022-9-22

              Improvements

              • The "Suppress Reboots During Business Hours" flag no longer relies on offline behavior. If you are suppressing reboots during business hours and you run a session during business hours, then Immy will suppress reboots. Business hours are now checked on every script execution, and the RebootPreference variable passed to scripts will also be updated to Suppress if it was not already set. We did this so that scripts that handle reboots can safely rely on this variable.
              • The customer list on the Azure page no longer shows the MSP tenant as a selectable option in the Linked Tenant dropdown since the MSP tenant is mapped by default
              • Refactored how we handle ImmyBot agent connected and disconnected events. Instances that heavily utilize the ImmyBot agent will have significantly improved performance.
              • The Enable Automatic Onboarding field on the PPKG form is now disabled and shows an alert if the onboarding preference is globally disabled or disabled for the selected tenant.

              Bug Fixes

              • Fixed an issue with loading the AzureAD module for metascripts. This issue was causing all scripts that relied on AzureAD commands to fail.
              • Fixed an issue where syncing the connected state of large numbers of ImmyBot agents would prevent other system jobs from being performed
              • Fixed an issue where configuration tasks for already compliant software were executing at the very end of a maintenance session instead of in the expected order
              • Fixed an issue where the default upgrade strategy was set to none instead of install over
              • Fixed a permission issue where non-admins could not refresh the connectivity status of a computer
              • Fixed an issue with downloading the ImmyAgent installer as an .iso file where the extension was incorrectly set to .ppkg
              • Fixed an issue where software set to perform an update would incorrectly report compliant when the software did not specify an upgrade strategy and the upgrade was never performed. The action will now fail and report "Upgrade failed: No Upgrade Strategy specified on the software."
              • Fixed an issue with maintenance action execution ordering. If the currently executing action has dependencies, it will now immediately execute the dependencies instead of waiting until the end of the session.
              • Fixed an issue with selecting a license on the deployment details page where the selected license was not shown upon refreshing

              0.53.7

              Released 2022-09-14

              Improvements

              • Increased the timeout of the Ephemeral Agent's Ping RPC method from 1 second to 5 seconds. 1 second was too short and was unnecessarily causing scripts to fail on machines with high network latency.
              • Added a warning message whenever the Ephemeral Agent's Ping RPC method takes over 1 second to respond to help identify machines with high network latency

              Bug Fixes

              • Fixed an issue with schedules where updating a schedule from a single tenant to cross tenant would delete the schedule. This was happening due to a bug in a database constraint between schedules and tenants.
              • Fixed an issue where the connectivity status button on the computer details page was not actually refreshing the agent's connectivity status
              • Fixed an issue where repairing a software would trigger full maintenance

              0.53.6

              Released 2022-09-12

              Improvements

              • Added Set-ImmyDeviceId cmdlet to be used during Inventory to keep the UUID of the machine up to date and prevent new computers from getting created when the UUID of the machine has changed due to a feature update.

              Bug Fixes

              • Fixed an issue where the "Determine Desired Version" phase was running before the "Detect Installed Version" phase. "Detect Installed Version" needs to run first so we can pass the detected version to scripts that may rely on it when determining the desired version.
              • Fixed an issue where dynamic versions were not properly installing dependent versions

              0.53.5

              Released 2022-09-09

              Bug Fixes

              • Fixed an issue from 0.53.4 where some code changes were unintentionally included in the release which caused downloading the PPKG to fail

              0.53.4

              Released 2022-09-08

              Improvements

              • For maintenance task test scripts, we made Immy tolerant of non-Boolean values by displaying a warning when non-Booleans are found on the pipeline along with helper text for preventing output pollution.
              • Updated the ImmyBot Agent to support installing beta versions

              Bug Fixes

              • Fixed a scripting error that caused Immy to indicate there was no output when there was definitely output

              0.53.3

              Released 2022-08-30

              Software Test Script Changes

              We now execute the software test script during the detection stage for software that have updates available.

              Before, if a software needed to be upgraded, we would not run the software's test script in detection. We would perform the upgrade and then run the test script afterwards. However, if the test failed, the action would fail without any remediation.

              Now, if a software needs to be upgraded, and it has a test script, the test script will run in detection. If the test script fails, then the repair strategy will be performed instead of the upgrade strategy. The test script will still be run after the upgrade as it did before.

              General Improvements

              • Updated the error text for schedule cron expressions to indicate that a schedule can run at most once per day.
              • The ImmyBot Agent service sometimes throws an exception about a missing file CliWrap.dll, which causes the agent to bork. When we encounter this exception, we now auto restart the service to resolve the issue.
              • Improved the session log message "Detection stage failed: Software Action Id is not specified on the provided configuration task action" to include more information to help diagnose the issue. It is usually because the deployment contains out-of-date data and needs to be updated.
              • Improved the performance of loading the main computer list when sorting by computer name
              • Test methods containing multiple outputs now return the result of ANDing those outputs together to compute the overall result.
              • Updated Quick Deploy to allow you to choose a desired state. e.g. "Install, Uninstall, Update If Found, Ignore" or "Enforce, Monitor, Audit"
              • Added detection of stuck/non-responsive jobs such as the agent identification job, which can initiate a self-restart of backend.
              • Added reboot preference dropdown to quick deploy and override forms
              • Moved several action columns on tables to the left side for consistency and best compatibility with mobile views.
              • Added an option to schedules and adhoc-deplyoments to send detection emails even when all actions are compliant. This is to allow users whose computers are already up to date to still receive a maintenance email.
              • Updated the script list page and session log component to use the Monaco script editor
              • Added the CW Automate icon to the main computer list. Clicking the icon opens up the computer in CW Automate.
              • Added "Date Added" to the computer list and made it sortable
              • Added a simple "new" tag on the computer list for computers that have been added to ImmyBot within the last 24 hours
              • Added an 'X' button to easily remove linked tenants from integrations

              Bug Fixes

              • After a task is created, the Runs Against property is now disabled. Changing this value after it is created can cause issues for deployments that are referencing it.
              • Fixed an issue with Ephemeral Agent resilient script output logic that would fail to re-connect if the script had never had any output prior to connection loss. (Ex. SonicWall VPN installer script)
              • Added missing triggered by text on the session details page when the session was triggered by a schedule or automatic onboarding
              • Fixed a width issue on some dropdown buttons
              • Fixed an issue with the integration client list re-sorting after you link/unlink a tenant

              0.53.2

              Released 2022-08-19

              Bug Fixes

              • Fixed an error that showed on the schedules list when a schedule existed that did not specify a time zone
              • Fixed issue introduced in 0.53.1 where the current immy version stopped displaying in the sidebar
              • Fixed issue introduced in 0.53.1 where the maintenance item ordering page broke
              • Fixed issue introduced in 0.53.1 where showing/adding parameters on the maintenance task page broke
              • Fixed an issue where monitor results were only showing the last line of output instead of all output
              • Fixed an issue where monitor results were overflowing into other components
              • Fixed an issue where re-running actions while showing action details would not displaying logs as they came in
              • Fixed an issue introduced for instances that signed up after the release of 0.53.0 where identification would fail due to some missing database configurations

              0.53.1 (un-published)

              Released 2022-08-18

              Improvements

              • Added a Trigger Now button to the Azure User Sync preference on the preferences page
              • Added a description to the PPKG reset windows checkbox - "Will perform a reset of windows with the remove user data option"

              Bug Fixes

              • Fixed an issue with agent identification where users were seeing the following error - Failed attempt to differentiate existing agent and pending agent: 42883: procedure sp_create_computer_from_agent(integer, uuid, boolean, text, text, text, unknown, boolean) does not exist POSITION: 6
              • Updated the alert of the person list page to match the available actions
              • Fixed an issue where the software configuration task edit link was missing
              • Fixed an issue where the branding logo alt text was still hardcoded to "Immense Networks" instead of the value provided by the branding
              • Fixed an issue with cancelling a detection only session from the computer details page -> software tab.

              0.53.0

              Released 2022-08-16

              UI Improvements

              Dark Mode

              image

              Deploy Software from Dashboard

              image

              Session Details

              imageimage

              Moved commonly used Main Menu items to the top, moved less commonly used items under sub-menus

              image

              Integrations - New look and feel

              image

              Integrations - Embedded Documentation

              image

              Script Editor

              Moved Script items into the left pane

              image

              New Integration - HaloPSA

              Deploy software/tasks to customers with specified recurring invoice items

              New Parameter Type - KeyValuePair

              image

              image

              Improvements

              • ImmyAgent now detects 'dirty' shutdown events of the ImmyAgent with a shutdown.dirty file.
              • Added a description to /schedules "Show Postpone Button" checkbox
              • Improved the integration details page by embedding the integration's documentation
              • Added a button that triggers an immediate Azure AD Sync and a note about automatic Azure AD Sync
              • Started improving the dashboard page. Added the ability to trigger actions for items in the dashboard
              • Added cmdlets Expand-String and New-LiteralString cmdlets to help deal with strings that should or should not be expanded before being sent to a remote machine.
              • Upgraded Intellisense Engine and Monaco Editor to latest versions
              • Moved live chat button to the header navbar so it doesn't potentially block buttons on the page
              • Added 8 new Ephemeral Agent Timeline events
              • Added "Script Bytes Received" metric to system status page
              • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
              • Made minor improvements to the getting started wizard
              • Moved script details into script editor sidebar for convenience

              Bug Fixes

              • ImmyAgent now sends 'online' events when we reconnect to IoTHub from an ungraceful network loss to prevent session hangs after the computer restarts
              • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches
              • ImmyAgent now handles exceptions returned from an instance during registration, and will continually retry instead of shutting down.
              • Fixed a typo in the SMTP port placeholder text
              • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
              • Fixed an issue with checking online/offline status of agents during a session
              • Fixed an issue where a deployment referenced a specific version even when the desired state did not require one. This was causing actions to fail
              • Fixed an issue with displaying the account dropdown on mobile
              • Fixed incorrect tooltip on install Immy agent icon in the computer list
              • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches.
              • Fixed issue where piping to Format-Table would result in an error or no output
              • Remove disabling of Cortana from PPKG builder output, as it is no-longer supported & may break newer OOBE installs.
              • Fixed issue with version restriction selector on License Edit page
              • Fixed issue with licenses deleting when saving a license with no tenant selected
              • Fixed issue displaying Customers on Azure Sync page
              • Fixed an issue with runnable script editor not including the user's tenantId in readonly cloud script editors
              • Fixed agent bug that prevents 'online' event on IoTHub reconnection
              • Fixed agent bug that would cause the agent to not retry transient registration failures
              • Only show Postpone and Update if "start immediately" not checked

              0.52.7

              Released 2022-07-11

              Improvements

              • The script list page now persists your filters after refreshing or leaving the page.
              • Fixed width issues in the maintenance item column on the deployment list page
              • Reduced required permissions for N-Central integration. See the new N-Central integration docs for details
              • Added a new PowerShell cmdlet Stop-ImmySession that will cancel the maintenance session it is currently running in

              Bug Fixes

              • Fixed some potential issues around agent connected/disconnected events
              • Fixed potential N-Central exception with re-sending messages
              • Fixed potential issue with 'missing' devices from N-Central due to possible filter contamination in N-Central

              0.52.6

              Released 2022-06-27

              Improvements

              • Set the default install script for new software to the "Manual Install Script" and the upgrade strategy to "Install Over" whenever we don't have another specific install script to provide
              • Set the default software installer type to "Installer File"
              • Updated the example New-DynamicVersion script
              • We now show a confirmation modal when choosing the "Wiped" option for resolving an agent identification conflict.
              • You can now see Cloud Sessions from the main Sessions list!
              • Added warnings when the ephemeral agent is failing to establish a connection to help users identify causes for failing script execution
              • Fixed an issue with the detection stage stuck running when it fails to execute scripts in the beginning of the stage
              • Improved timeline connected/disconnected events. There were edge cases that would show multiple connects/disconnects back to back.
              • Removed timeline computer online/offline events to avoid confusion. These events were never actually based on a computer coming online or going offline. We simply emitted "online" when an agent connected and happened to be the only online agent. Similarly for "offline" events, we only emitted the event when an agent disconnected and all agents were offline. ImmyBot does not actively check whether a machine is online or offline. It only checks whether it has any connected agents to use. This concept will be further improved upon to help resolve issues with agents incorrectly reporting connected/disconnected.
              • Removed link to software/task on deployment list since people are clicking it thinking it is the edit deployment link
              • Moved the software/task selector back above the target selector on the deployment edit page
              • Removed the media nav item since it's not actually useful

              Bug Fixes

              • Moved "Update If Found" from underneath "Installed" to the same level as "Installed" for clarity. A software can be "installed, uninstalled, ignored, or updated if found"
              • Fixed an issue with cloud task previews failing with "device offline"
              • Fixed an issue where the ImmyBot agent update action would not run when the agent was offline
              • Fixed an issue with the agent updates stage, onboarding stage, and resolution stage not honoring pending connectivity
              • Fixed an issue where the resume and cancel session buttons were incorrectly showing for postponed sessions
              • Fixed an issue with CW Control and CW Automate health error messages excluding important details that can help diagnose the problem
              • Fixed an issue where we were not checking if a configuration task is actually marked as a configuration task. This resulted in tasks getting run when they should not have.

              0.52.5

              Released 2022-06-13

              N-Central Beta Updates

              • Fixed an issue with exceptions that may occur inside the N-Central device-sync job causing memory to bloat
              • You can now get registration tokens from the NCentral integration via new PSCmdlet Get-NCentralRegistrationToken

              image

              Other Improvements

              • Under "Preferences", the description of the User Affinity Sync feature says it will run every 4 hours; this is incorrect. Verbiage was changed to indicate it will run every 24 hours.
              • On the integration details page, a confirmation modal has been added when clicking the "Bulk create tenants..." button to prepare users that this will cause code execution for linked clients.
              • Added more improvements to online/offline agent handling during maintenance sessions
              • Updated the online/offline event receiver for CW Control to return immediately in an effort to close requests faster

              0.52.4

              Released 2022-05-31

              Improvements

              • Removed unnecessary checkboxes from the Computers table on the "Edit Schedule" page
              • Immy live chat now supports screenshare! Immy support can now request access to view your screen to help resolve issues faster.

              Bug Fixes

              • Fixed an issue with the maintenance email actions requiring authentication

              0.52.3

              Released 2022-05-27

              Improvements

              • ImmyAgents no longer need to see a valid board serial number in order to complete registration or rekey. Instead, ImmyAgent may fall back on and rely on an 'ImmyHWID' (Immy hardware id), when a board serial is not available. ImmyHWIDs are derived from CPU, BIOS, MOBO, GPU, and TPM information where available.
              • Updated maintenance sessions to listen on agent connected/disconnected events instead of computer online/offline events which have faster responses and higher success rates
              • When a new agent comes into ImmyBot, we now kick off the identification job immediately if it isn't already running in an effort to speed up identification
              • Added session logs for dependencies indicating what they are for. e.g. Software A depends on Software B → If not installed then install.
              • The actions in the maintenance email (Reboot Now, Update Now, and Postpone), now link to a form on the ImmyBot instance instead of linking directly to the backend api. The reason for this is because some spam filters will automatically follow links in an email, which has accidentally caused computer reboots. Moving the link to a form allows spam filters to no longer be able to trigger the action automatically.

              Bug Fixes

              • Fixed an issue causing the computer details page to sometimes not load
              • Fixed an issue with the ImmyAgent rekey request not being received
              • Fixed an issue where Get-ImmyComputer was incorrectly reporting offline
              • Fixed an issue where configuration file parameters were not being downloaded when the configuration task did not have any enabled scripts
              • Fixed an issue with displaying the dependency badges on maintenance actions
              • Fixed an issue with the schedule's day of week selector cutting off the last characters of "Wednesday"
              • Fixed an issue with the CompareTo-ImmyBotVersion metascript
              • Fixed an issue with some maintenance action start times showing "2021 years ago" instead of "Unavailable" when the action never started
              • Bump Azure IoTHub packages to resolve some connection issues with the ImmyAgent

              0.52.2

              Released 2022-05-25

              Ephemeral Agent and Identification Improvements

              • ALL scripts now run through the ephemeral agent, even during identification and computer de-dupe logic 🎉
              • Additional exception information is now visible in Identification Failed tab, and in session output. This furthers insight for users to understand and fix potential reasons why the providers may have failed to run our agent. image
              • Fixed an issue where the date was not being set correctly when adding a AgentIdentificationFailure log, leading the user to think this issue happened at the beginning of time!

              Other Improvements

              • Added computer batch actions button on the tenants -> tenant details -> computers tab
              • You can no longer create a schedule that executes within one hour of detection. This is a safety measure to help prevent reboots during business hours
              • Added a checked to the schedules page for "Execute maintenance immediately after detection" to make it easier for those that do actually want to run execution after detection. When checked, you cannot set the execution time.
              • The schedule list "Next Run" column now sorts correctly and also shows the browser's local "Next Run" time
              • Added clarity to session logs when we are checking if an agent is online
              • Quick deploy actions now use Offline Behavior: Apply on Connect
              • Auto onboarding sessions now use Offline Behavior: Apply on Connect
              • Computer list batch actions - Run Maintenance now uses Offline Behavior: Apply on Connect
              • On the schedule details page, renamed "Target Category" to "Runs Against", and changed the options to "Computers" or "Cloud"

              Bug Fixes

              • Fixed an issue with the primary user not being found when sending emails after an onboarding session
              • Fixed an issue with checking off "Send follow-up email" on the onboarding form where it would not actually send the email
              • Fixed an issue with unhealthy integration messages not showing the real error message
              • Fixed an issue with unhealthy integration agents showing on the computer onboarding form
              • Added missing script parameter $LicenseFilePath to detection scripts and configuration tasks
              • Removed maintenance tasks from accidentally showing in the software prerequisite dropdown
              • Updated the computer batch actions sidebar to have better clarity
              • Fixed an issue with loading the deployment list when a deployment existed for a computer or person that no longer existed
              • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was failing if the Tenant didn't have an Azure mapping
              • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was returning an access token for the Tenant instead of the MSP
              • Fixed an issue where some failed sessions were getting marked as pending connectivity
              • Fixed some more issues around offline/online agent detection during sessions
              • Implemented a HTTP Concurrency limit for requests to N-Central to prevent issues with too many requests hitting their backend
              • Fixed an issue with not being able to skip onboarding
              • Fixed an issue with the "Retry X failed computers" where it was re-attempting to identify all failed computers
              • Fixed an issue with "Analyze Installer" not returning any data
              • Fixed an issue with script output in session logs not being truncated to the last 5 lines
              • Fixed an issue with the Immy Agent installation request not reporting whether the integration is disabled or unhealthy

              0.52.1

              Released 2022-05-18

              Bug Fixes

              • Fixed an issue where tag deployments were not resolving during full maintenance
              • Fixed an issue where cloud deployments were not resolving during full maintenance

              0.52.0

              Released 2022-05-18

              Tags

              You can now add tags to computers, and deploy software to tags! Manage tags under the settings link on the sidebar. Tags help in scenarios where workstations are shared by a variety of users and there is otherwise not a common property to target with a filter script.

              Tags can be added to computers as a batch action on the computer list page.

              image

              Tags can also be added to a computer on the details page.

              image

              Tags can be deployed as a cross-tenant target scope.

              image

              Tags can also be deployed as a single-tenant target scope.

              image

              Tags can be added to an ImmyBot installer to automatically set tags for new computers

              image

              Exclude Computer From Maintenance

              You can now specify that a computer be excluded from maintenance. Excluded computers will not be allowed to run any type of maintenance session.

              Settings -> Preferences -> Company Preferences -> Computers Excluded From Maintenance

              or

              Tenants -> Select a tenant -> Preferences tab -> Computers Excluded From Maintenance

              image

              Immy Chat Integration

              Added in 0.51.5

              We added LiveChat to Immy to make it easier for you to get support

              Session Script Execution Improvements

              Before executing a script on a device, we now check if it is online. If it is not online, we verify whether any of its agents are incorrectly reporting online and refresh the status appropriately. If it is still not online, we will wait up to 30 minutes for it come back online. If it is still not online, then we will mark the session as Pending Connectivity (only for Apply On Connect) or cancel the session due to the computer being offline.

              Other Improvements

              • On Immy startup, we now sync the online/offline state of all ImmyBot agents
              • Added an hourly job to pull the latest online/offline state of all ImmyBot agents
              • Updated parts of the frontend codebase with typescript to prevent accidental bugs
              • Improved performance of loading certain pages that relied on fetching clients from a provider
              • On the deployment details page, deploying to over 10 computers will now prompt to confirm this is the action you want to take
              • Active Ephemeral Agents will now prevent Windows from going to sleep to keep sessions from halting
              • A new preference has been added to aid in development of Ephemeral agent, as-well as diagnosing of bugs
              • Added Offline Behavior selector to the computer onboarding form and set the default option to "Apply On Connect"
              • The Run Maintenance button on the computer details page now defaults Offline Behavior to "Apply On Connect"
              • The Run Maintenance button on the computer details and list pages now provide a dropdown for the reboot preference
              • The Run Maintenance button on the computer details and list pages now have a confirmation modal
              • Azure groups now include devices as long as you grant ImmyBot the Device.Read.All permission
              • Azure groups now include all sub groups
              • Improved the action logs and result message for failed dependencies
              • Added a Preferences tab to the Tenant details page
              • Updated PowerShell Editor Services from 3.1.5 to 3.3.5

              Bug Fixes

              • Fixed an issue in the ephemeral agent that prevented the agent from exiting when finished running PowerShell
              • Fixed an issue with uninstall strings in the registry not containing quotes around paths with spaces
              • Fixed an issue where devices with unknown operating systems (non windows) were coming into Immy
              • Fixed an issue where dependencies for software set to update if found would run even if the software was not found
              • Fixed an issue where command line uninstall scripts with spaces in the path were not being wrapped in quotes
              • Fixed an issue where the access request button was not visible when access requests were disabled
              • Fixed an issue where failed dependencies were being removed instead of failed
              • Fixed an issue with the branding preview and test email not showing the mascot name

              0.51.5

              Released 2022-05-06

              Chat with ImmyBot

              • Added a live chat button to ImmyBot as another option for support requests

              Bug Fixes

              • COMMAND LINE WORKS AGAIN! Fixed an issue where Command Line (non-PowerShell) scripts would not run correctly, resulting in software uninstalls not working as expected
              • Fixed an issue where maintenance actions with a prerequisite dependency would not execute after the dependency finished successfully
              • Fixed an issue where Immy support would be unable to regain access after expiration
              • Fixed an issue with the "Show Details" link on the computer software tab not opening
              • Increased the timeout for the ImmyBot Agent to connect from 20 seconds to 60 seconds since setting up the ephemeral agent on some machines may take longer
              • Fixed an issue with configuration tasks not displaying underneath the software action
              • Fixed an issue with configuration tasks not running when using quick deploy

              0.51.4

              Released 2022-04-27

              Deployment List Improvements

              • Removed the button "Show Recommended Deployments"
              • Recommended deployments and the ability to "Approve/Dismiss" them now show up in the list
              • Updated the group by filter and added two new filters.

              image

              Session Log Improvements

              • Made several logs more concise
              • Added action name and stage name to the top level logs
                • image
              • Checking the box to the left of actions do a better job of filtering to the relevant logs for that action
                • image

              Bug Fixes

              • Fixed a performance issue with a timeline events database query
              • Fixed an issue that was causing the Ephemeral Agent to not extract on machines running Windows PowerShell 4 or below
              • Fixed issue where ImmyBot would not verify dependencies for software that is already compliant

              0.51.3

              Released 2022-04-21

              Bug fixes

              • Fixed an issue with upgrading to 0.51.3 where the instance would fail to start if you had a branding that did not specify a from address (which is now required)

              0.51.2

              Released 2022-04-21

              Branding Updates

              • Added color picker for Text Color and Table Header Text Color
              • Branding Logo and Mascot images are now optional
              • Added live branding preview

              image

              Other Improvements

              • Added more details such as the reboot preference to the session details page. Also added a snazzier stage indicator.
                • image
              • Changed access request default options to Three Days and Admin
              • Maintenance Tasks now have the "Ignore" option just like software and will take precedence over other deployments for the same task and target group.
              • Added desired software state "Any" as an available option for software that use dynamic versions
              • Maintenance emails no longer show software actions that have a desired state of "Update If Found" and no detected version.

              Bug Fixes

              • Fixed an issue with saving a tenant's default time zone
              • Fixed an issue with the software/task selector not correctly selecting tasks on the schedule and dashboard page
              • Fixed an issue with chocolatey items not showing in the software/task selector
              • Removed ability to use metascripts to define schedule targets (since metascripts do not resolve to list of computers)
              • Fixed an issue with configuration task file parameters not getting downloaded before the software's action runs
              • Fixed an issue where the Cloud Script execution context was not selected by default when creating a new dynamic version script from a software
              • Handled some common application initialization failures more gracefully
              • Fixed an issue with metascripts being able to override certain variables that were automatically provided.

              0.51.1

              Released 2022-04-12

              Integration Health

              Integrations can now have a health status of Healthy, Degraded, Unhealthly, or Disabled.

              • Healthy: All is well
              • Degraded: Started experiencing issues in the last few minutes
              • Unhealthy: Consistently experiencing issues (integration is no longer usable)
              • Disabled: Integration has been explicitly turned off by a user

              Unhealthy integrations will return to healthy automatically when transient issues subside.

              An alert with the latest message is shown on the integration details page.

              image

              A badge has been added to the integration list and on the computer details -> agents tab.

              image

              image

              The "Download ImmyBot Agent Installer" dropdown will now be disabled if the integration is unhealthy or disabled.

              image

              Other Improvements

              • Schedules can no longer be created with cron expressions using a * , - or / in the minute or hour position to help prevent to frequent scheduling.
              • Important: Schedules that are currently using a * , - or / in the minute or hour position will be automatically disabled in this version.
              • Software items in emails show "Up to Date" after successfully updating instead of "Update Available" which causes confusion whether the software has actually updated
              • Quick Assign and Assign actions are no longer disabled when the computer is already running a maintenance session
              • Added OS version after the OS name in the computer details overview info
              • MSP non-admins can now see the recommended deployments on the list page to know that they exist
              • Added detected version to items in the software tab
              • Removed the integration priority table and details since they are no longer applicable
              • When a maintenance session is manually resumed, the name of the user that resumed it now shows up in the logs. Or if it was resumed from an email, then it will indicate that a user clicked the "Update Now" button in the email.
              • Added field for maintenance task notes.

              Bug Fixes

              • Fixed an issue where the dynamic version response was incorrectly cached when the script was shared for multiple software and required different output for each software
              • Fixed an issue where the software detection radio options were disabled and unable to be changed
              • Fixed an issue where the "Skip x onboarding computers" button would disable even if you had computers selected
              • Undid the change that disabled the onboarding tab since it was a bad decision
              • Fixed an issue with slug not saving when creating a tenant

              0.51.0

              Released 2022-04-08

              Onboarding Form: Maintenance Task Parameter Override

              • New checkbox added to maintenance task parameters on the deployment details page: 'Allow override from computer onboarding'

                image

              • The checked parameters will show on the computer onboarding form, allowing the user to override the value just for the onboarding session

                image

              Other Improvements

              • Implemented a Get-Hash cmdlet in the Metascript engine useful for interacting with APIs like NinjaRMM and Mimecast that require HMACSHA1 signatures

              • We moved the Target Selector above the Software / Task Selector on the deployment page since it felt more natural to answer "Who am I creating a deployment for?" before answering "What am I creating a deployment for?"

              • Software Display Name Regex detection now supports capture groups to pull the version

                image

              • Added Azure ID column to the User List page

              • Improved handling of integration API routes

              • Added a "Do not remember" option when overriding an "Update If Found" deployment, and added more options for overriding certain desired states.

                image

              • Added Tenant Slug. $TenantSlug is now exposed for all scripts executed against a computer. You can also conveniently edit the tenant slug directly in the Tenant List.

                image

              • Hid the maintenance item selector behind a checkbox on the schedule details page since it was causing some confusion

                image

              Bug Fixes

              • Fixed an issue where dynamic versions that throw a terminating exception were not displaying the exception message under the maintenance action
              • Fixed an issue with the "New Version" notice not showing up
              • Fixed an issue preventing the Getting Started Wizard modal from showing
              • Fixed an issue with configuration tasks running before the software was deemed compliant
              • Fixed an issue with non-msp users not being able to create configuration tasks from the software details page
              • Fixed various issues with deploying Ninite software
              • Fixed issue with software repair not re-installing software
              • [Global Software Only] Fixed an issue with saving a custom download installer script to a global software
              • Removed double base64 encoding that triggered alerts in BitDefender and Arctic Wolf
              • Fixed the script documentation link
              • Fixed issues with Invoke-ImmyCommand forcing terminating errors instead of honoring the error action preference set by the script
              • Fixed an issue with configuration task parameters not being provided to the test script when run during detection
              • Fixed an issue with loading deployments when you have multiple of the same provider type enabled
              • Fixed issues with loading CW Control, Automate, and Manage target groups on the deployment details page
              • Fixed some exceptions that were occurring when sending emails
              • Removed duplicate "Should not be present" text showing in the maintenance actions list

              0.50.13

              Released 2022-04-1

              Capture Version from DisplayName with Regex

              For software that puts its version in the DisplayName instead of the DisplayVersion field like this:

              image

              You can now use a capture group to capture the version from the DisplayName

              Example

              HexCmp 2.34.1 can be captured with

              regex
              HexCmp (\d+\.\d+)

              Script Editor Improvements

              Within filter scripts, Get-ImmyComputer -InventoryKeys now shows valid InventoryKeys

              image

              0.50.12

              Released 2022-03-29

              Improvements

              • Made the software override options more similar to the quick deploy options
              • The ImmyBot Agent no longer writes and executes scripts from C:\Windows\Temp\ImmyBot.
              • You can now add a Tenant Slug under the "Edit" tab on the Tenant Details page. This value is exposed as the variable $TenantSlug for scripts that run against this tenant's computers.

              Bug Fixes

              • Fixed an issue preventing the 'Getting Started Wizard' from showing
              • Fixed an issue with non-MSP users not being able to create configuration tasks from the software details page
              • Fixed an issue with the 'New Version' notice not showing up
              • Fixed an issue with configuration tasks running before the software was deemed compliant
              • Fixed an issue where dynamic versions that threw a terminating exception were not displaying the exception message under the maintenance action

              0.50.11

              Released 2022-03-21

              Improvements

              • Added ability to choose "install" when overriding "update if found" deployments on the quick deploy form

              Bug Fixes

              • Fixed an issue where deployments with the same target type were resolving "update if found" as a higher priority than "latest version"
              • Fixed an issue where scripts run in Control were visible in the Commands tab
              • Fixed an issue where registry manipulation scripts would fail with ProviderNotFound: Microsoft.PowerShell.Core\Registry

              0.50.10

              Released 2022-03-14

              Intellisense Improvements

              Intellisense no longer restarts when syntax error is detected.

              Quickfix Actions work

              image

              image

              No more duplicate definition on hover

              image

              Bug Fixes

              • Fixed an issue with downloading ImmyBot Agent EXEs which would intermittently fail
              • Fixed an issue where an unreachable integration could cause ImmyBot background jobs to not start up correctly
              • Fixed a null reference that could occur when re-running a maintenance action
              • Refactored some ephemeral agent PowerShell code for easier testing

              0.50.9

              Released 2022-03-08

              Bug Fixes

              • Fixed a bug that was causing new instances of Immybot to crash when starting up

              0.50.8

              Released 2022-03-04

              Onboarding Deployments

              The Onboarding target type has been moved to a separate checkbox so that you can limit deployments to onboarding only AND use the target type filters.

              ImmyAgent Improvements

              Updated internal infrastructure to utilize our new extended verification code-signing certificate.

              We currently sign:

              1. ImmyAgent executable & MSI/EXE/PPKG Installers
              2. Ephemeral Agent executable
              3. Static PoSH run on computers

              In addition to being more secure, this ensures our software is no-longer flagged by SmartScreen.

              IMPORTANT NOTE

              Customers utilizing software such as ThreatLocker MUST ensure our new certificate is whitelisted, as our new EV cert required "LLC" to be present on our CN and O.

              image

              Bug Fixes

              • Improved exception handling during maintenance sessions
              • Fixed an issue with re-running cloud scripts from a session log where it would throw an exception
              • Fixed some performance issues and improved caching of function scripts

              0.50.7

              Released 2022-02-25

              Maintenance Task Serial Execution

              A maintenance task now has the option to "Execute Serially".

              When checked, this maintenance task is guaranteed to only have one instance active at a time.

              e.g. If three maintenance sessions have an action for a maintenance task that executes serially, then one session will execute the maintenance task while the other two wait for it to complete. Once the first completes, the second will execute. Once the second completes, the third will execute.

              This is useful for maintenance tasks that rely on the state of subsequent executions.

              Other Improvements

              • Added a Status and Types column to the CW Manage client list on the integration details page so you can easily filter your list to clients you want to create tenants for. Also made the Linked Tenants column filterable to "Linked" or "Not linked". The Bulk create tenants for unassigned clients is now Bulk create tenants for filtered unassigned clients and will only bulk create tenants for those visible rows matching the table filters.
              • Added checks to ensure that the identification job is running properly

              Bug Fixes

              • Fixed an error that was preventing the computer overview page from loading
              • Fixed an issue with scripts running multiple times if you opened, closed, and re-opened a script editor
              • Fixed issues with the CW Control integration not updating the device name, os name, and serial number of the agent

              0.50.6

              Skipped

              0.50.5

              Released 2022-02-18

              Improvements

              • Updated ImmyBot from dotnet 5 to dotnet 6
              • Non-existent items on the deployment ordering page are now automatically removed
              • Added description below the "Suppress reboots during business hours" checkbox to indicate that it is only applied for maintenance sessions that resume after a device comes back online
              • Deployments can now be disabled which will exclude them from being applied during full maintenance sessions. This can be useful if you want to stop a deployment from happening without deleting it.
              • ImmyAgent PPKG's should now work on Windows Home editions
              • Improved the load time of the maintenance session list for instances that have 1+ million sessions

              Bug Fixes

              • Removed unnecessary device online check when running metascripts through the script editor
              • Fixed issue with parameters not getting provided to scripts that are re-run from maintenance session logs
              • Fixed a format exception that occurred when attempting to schedule adhoc deployments to run after midnight
              • Fixed a null reference exception thrown when using the "Limited" option on the "Software Access Level" field
              • Fixed issue with the "Last logged on user" fields not showing on the computer overview tab
              • Updated the error text of user scripts to indicate whether or not there is currently a logged in user
              • Fixed an argument exception that occurred when trying to uninstall a software by product code
              • Fixed an internal issue with migrating items to global
              • Fixed an issue with maintenance action timeline events that was preventing them from showing in the list
              • Fixed a bug where cancelling scripts from the editor would not close the PowerShell stream reader
              • Updated broken links to https://docs.immy.bot
              • Fixed a poor performing query with instances that have millions of maintenance sessions
              • Fixed issue allowing you to click the install Immy agent button on computers that did not have an online agent to install it with
              • Fixed issue where local accounts created by the PPKG were not being hidden
              • Fixed potential issue where local accounts created by the PPKG were not being added to the local administrators group if the local administrators group name wasn't called 'Administrators'

              0.50.4

              Skipped

              0.50.3

              Released 2022-02-11

              ImmyBot Agent Updates

              • Fixed a bug where agent installers that were created before 0.50.0 were failing to register on new devices
              • Increased the verbosity of logging during agent installation for easier debugging
              • Fixed a null reference issue occurring on startup
              • Updated the MSI uninstallation to remove the config.json and registration.json files located under C:\ProgramData\ImmyBotAgentService.

              Improvements

              • Increased the Ephemeral Agent named-pipe connection timeout from 10s -> 60s to allow computers with extremely poor PowerShell initialization time likely due to system issues to still run scripts
              • Added software / task descriptions to deployment details page and license details page. The descriptions are accessible by clicking the the question mark button

              Bug Fixes

              • Fixed an issue where filter scripts and software auto update scripts were not showing any output in the script editor
              • Fixed a label issue on tenant category schedules and tenant category deployments
              • Fixed an issue on the schedule details page where the maintenance item selector would should a blank selection by default image
              • Removed unnecessary code that fetched software twice during detection
              • Fixed an issue where the selected computers on the new computers page would de-select automatically
              • Put in an update to the CW Control ImmyBot extension to work on CW Control 21.15+. CW Control 21.15 introduced a breaking change to the API.
              • Fixed an issue where cross tenant device group target types were taking precedence over tenant specific target types

              0.50.2

              Released 2022-02-09

              Bug Fixes

              • Fixed an issue with azure sync job creating duplicate users in the MSP tenant
              • Fixed an issue where a disabled integration could not be deleted

              0.50.1

              Released 2022-02-08

              Improvements

              • When ImmyBot restarts, it will now attempt to restart any maintenance session that was active when it shutdown. Before, it would only attempt to restart scheduled sessions
              • Restarting maintenance sessions should now be idempotent. If an action was running when the backend rebooted, then it will be restarted.
              • Removed some thread blocking code to improve performance

              Bug Fixes

              • Fixed issue with Microsoft.PowerShell.Security functions not found in metascripts
              • Fixed an issue with "Uninstall By Package Info" failing to uninstall via product code
              • Fixed an issue where pending connectivity sessions were not triggering for computers that had exactly one agent

              0.50.0

              Released 2022-02-07

              Intellisense (beta)

              Intellisense can be enabled on the application preferences page (disabled by default). Having intellisense inside the script editor is going to make your life much easier when it comes to writing ImmyBot scripts.

              This feature is considered beta and there may be a few bugs present that will be get patched over the next few releases.

              image

              image

              image

              image

              Other Improvements

              • Added navigation link for tenant on the computer overview tab and the maintenance session list
              • Improved performance of filtering maintenance action table and dashboard results
              • Improved performance for instances that have a large number of ImmyBot agents by optimizing some database calls
              • Added compression support for JavaScript and CSS assets to decrease the initial page load time

              Bug Fixes

              • Fixed an issue with some deployments not resolving to computers that are auto-onboarding
              • Fixed an issue where clicking Include Offline in the Onboarding computer list would be de-selected after 5 seconds
              • Fixed an error that showed on the tenant details page for ImmyWorkbench instances that do not have schedules enabled

              0.49.9

              Released 2022-02-02

              Improvements

              • Inventory during a maintenance session now runs before resolving deployments since a deployment may rely on inventory data. e.g. Filter Scripts

              0.49.8

              Released 2022-01-27

              Bug Fixes

              • Fixed a bug with quick deploy where maintenance actions were failing due to Parameter <X> is marked required... and no value has been set

              0.49.7

              Released 2022-01-26

              Improvements

              • General cleanup/refactoring to improve performance
              • Added an index that improves some maintenance session queries

              Bug Fixes

              • Fixed an issue with uploading licenses and software installers with users who have names that contain non-Latin1 characters
              • Fixed an issue where failed audit tasks were showing as compliant
              • Fixed an issue where the maintenance item selector was not showing correct results for the Tenant target category
              • Fixed an issue uploading an MSI where the Uninstall MSI By ProductCode script was being used on the software instead of the correct Uninstall MSI By UpgradeCode. The Uninstall MSI By ProductCode is now set on the software version. The software upgrade strategy is also defaulted to install/over instead of none.
              • Fixed several issues around script timeouts and memory management
              • Fixed an issue with some slow computer list queries
              • Fixed an issue with software test scripts causing detection to fail due to missing required maintenance task parameters

              0.49.4

              Released 2022-01-19

              Improvements

              • Significantly improved performance of re-initializing maintenance sessions upon the server starting up
              • Immy will now wait for one or more of a device's agents to reconnect when the device goes offline while attempting to run a script

              Bug Fixes

              • Fixed an issue with application restarts taking a long time to re-enqueue pending maintenance sessions
              • Fixed an issue with some exceptions that occur in maintenance sessions causing the sessions to be stuck in the "Created" status

              0.49.3

              Released 2022-01-18

              Improvements

              • Reduced the number of concurrent inventory jobs that can run to preserve performance until it can be refactored
              • Delivery of Ephemeral Agents on computers that don't support TLS v1.2 no longer spit out scary looking error. Instead, it now shows a warning that it will fallback to TLS v1.0.

              image

              • Monitor maintenance tasks now run during execution except for previews which still run during detection

              Bug Fixes

              • Fixed an issue with maintenance item specific schedules causing sessions to get stuck in created
              • Fixed an issue with ephemeral agents not working correctly on Win7 x64-era machines
              • Fixed issue with immy version not showing in footer

              0.49.2

              Released 2022-01-18

              Bug Fixes

              • Fixed an issue where scripts run from the editor could throw the error: An item with the same key has already been added. DebugPreference

              0.49.1

              Released 2022-01-17

              Improvements

              • The $VerbosePreference and $DebugPreference in a metascript now get passed down to the computer
              • The top navbar on smaller screen sizes is now accessible from a collapsible button
              • Added docs nav icon linking to https://docs.immy.bot
              • Standardized task verbiage in the UI
              • Added an additional task type filter on the task list page for "All, Computer, Cloud, Configuration"
              • Write-Progress now appends to the session log output
              • Added a health check for when the Hangfire server crashes and fails to restart
              • Changed chocolatey actions to no longer use a hardcoded path C:\ProgramData\chocolatey\bin\choco.exe. We now retrieve the path by using Get-Command choco -ErrorAction Stop | select -expand Source. This ensures we can run chocolatey when it is not in installed in the default location (Looking at you SyncroRMM).
              • Deployment filter scripts can now utilize function scripts
              • Added license description field
              • Improved performance of resolving azure group deployments

              Bug Fixes

              • Resolved issue where computers running non-English version of Windows could not run any scripts. This issue also prevented successful identification for those computers.
              • Resolved parameters not being passed to user-context scripts
              • Fixed an issue with boolean deployment parameters not honoring false
              • Fixed an issue with adhoc deployments not using the parameters specified on the page
              • Fixed an issue with sessions showing passed when it should show partial passed
              • Fixed issue where duplicating deployments did not copy over the parameter values
              • Fixed issue with [ctrl-s] saving scripts from the editor
              • Fixed a bug where software from deleted deployments were still showing in the assigned software tab
              • Fixed a bug where the ephemeral agent retry logic was being ignored
              • Fixed an issue with the logs panel failing to stay scrolled to the bottom
              • Fixed an issue where inventory session logs were not showing up correctly
              • Fixed an issue where needs attention actions were showing "unavailable" for the date time
              • Fixed word wrapping on maintenance task parameter text
              • Fixed a bug where deployments targeting "All computers / No Filter" would show "Workstations and portable devices" instead
              • Fixed a bug where uploading files for global maintenance tasks would fail
              • Fixed a bug where schedule and deployment provider specific target data was not loading properly

              0.49.0

              Released 2022-01-11

              Improved Performance

              In this release, codenamed "Cheetah" we achieved a 20x improvement in script execution performance through the use of WebSockets, Named Pipes, and removing code that is no longer necessary since the introduction of the Ephemeral Agent.

              We also made restarting machines faster by using the new event driven Wait-ImmyComputer cmdlet when waiting for computers to reconnect after a reboot.

              Apply on Connect

              Problem to solve

              Computers that are offline never receive maintenance. These computers need a way to update when they miss their maintenance window.

              Solution

              You can now specify the offline behavior for computers on schedules and ad-hoc deployments.

              image

              When offline behavior is set to Apply On Connect, a session will get marked as image when the device is offline. When the device comes online, the session will resume.

              image

              Since devices can come online at anytime, the option to Suppress Reboots During Business Hours is checked by default.

              If a device is offline before the detection stage, then it will run the detection stage when it comes online.

              If a device is offline before the execution stage, then it will only run the execution stage when it comes online. It will not re-run detection.

              Maintenance emails are only sent out once regardless if the device goes offline.

              Timeline

              On the computer details overview tab, there is now a section called Timeline that shows particular events that have occurred for the computer.

              image

              The events we are currently showing are:

              1. Agent disconnected
              2. Agent connected
              3. Maintenance action started (only shows if the action required execution)
              4. Maintenance action completed (only shows if the action required execution)

              More events will be added in the future.

              Other Improvements

              • Improved performance of determining desired state of deployments during maintenance
              • Improved performance of some update queries
              • Added a new metascript cmdlet Wait-ImmyComputer that returns as soon as a computer has connectivity
              • Added & Updated Ephemeral Agent connection statistics in 'System Status' page to report data/data-rate metrics about the underlying Ephemeral Agent connection to the backend

              Bug Fixes

              • Fixed an issue where software download scripts were timing out after 60 seconds if the script didn't specify its own timeout
              • Fixed an issue where changes made to a configuration task parameters from the software page were not saving
              • Fixed issues displaying incorrect text in the target type column on the deployment and schedule list pages
              • Fixed a bug where you could not remove a software download script
              • Fixed a bug with Add-UriQueryParameter where it did not accept array values or parse existing parameters
              • Fixed an issue with Ephemeral Agent "end-of-stream" response exceptions resulting in termination of stage
              • Fixed various issues with agent connection events and improved performance
              • Fixed an issue where immy agent registrations could cause resource depletion in the backend's IoT service
              • Fixed the timezone selector to show the region to differentiate the options
              • Fixed a bug where dynamic versions could depend on itself and cause an infinite loop

              Releases in 2021

              Go to 2021 releases

              - +
              Skip to content

              Releases in 2022

              0.54.7

              Released 2023-01-04

              Improvements

              • Improved error messages when the error is coming from an integration's API, such as the CW Automate API, CW Manage API, or CW Control ImmyBot extension API.
              • Added manufacturer to duplicate agent table
              • Added Device ID to the computer overview details

              Bug Fixes

              • Fixed a potential issue where a computer architecture could not be found while trying to resolve a dynamic software version
              • Fixed a transient issue that was causing detection to fail when it could have continued
              • Fixed an issue where pending connectivity sessions would not be triggered for a computer that came online due to a manual resolution for a conflicting agent
              • Fixed an issue during identification where the device id of "00000000-0000-0000-0000-000000000000" was allowed as a valid GUID. It is not valid, and new devices with this GUID will be assigned a new one.

              0.54.6

              Released 2022-12-27

              Improvements

              • Only MSP Admins have access to the Tenant Mappings tab now

              Bug Fixes

              • Fixed an issue where schedules with an invalid cron expression were allowed to be saved
              • Existing invalid cron expressions will be converted to a valid cron expression when possible, using NCronTab validation functions.
              • Fixed an issue where system and user scripts could possibly timeout before an ephemeral agent was ever established
              • Fixed an issue with downloading the immy agent installer as an .iso file
              • Fixed an issue preventing computers from being deleted
              • Mitigated an issue with N-Central which eventually resulted in N-Central hangs and crashes
              • Fixed a transient issue related to starting Ephemeral Agents on some N-Central devices the first time

              0.54.5

              Released 2022-12-22

              Bug Fixes

              • Fixed an issue with deleting actions that caused sessions to fail
              • Fixed an issue saving some database calls due to issues from the migration to flex database servers
              • Fixed an issue with saving scripts that incorrectly fail with a message that the name is not unique

              0.54.4

              Released 2022-12-19

              Improvements

              • Added bulk cancel and bulk rerun buttons to the maintenance session list page Added Split-Path cmdlet as well as $ActionId, $SessionId and $SessionGroupId to the included variables
              • Improved Ephemeral Agent connection speed
              • Discontinued use of WMI CreateProcess which flags AV, specifically Windows Defender for Endpoint
              • Made modifications to the light color theme to improve readability

              Bug Fixes

              • Fixed several issues with the NCentral integration. Should be more stable overall.
              • Fixed an issue where preview/deploy from the dashboard table header were not getting enqueued and would crash instances by running too many sessions as once.
              • Fixed an issue with saving local software versions where it would respond with an error about certain fields being required when they shouldn't be
              • Fixed an issue with the Stop-ImmySession cmdlet where it was not setting the session or stage status to Cancelled
              • Fixed issues with our BITS download where it could get potentially stuck trying to download when an ephemeral agent could not be established
              • Fixed an issue with computers getting set to needs onboarding incorrectly when an agent gets assigned to an existing computer that is not new
              • Centered the text in the "Session #xxx in progress" button
              • Fixed an issue with saving the SMTP form
              • Fixed an issue where session logs could repeat "Reboots have been suppressed during business hours" over and over

              0.54.3

              Released 2022-11-23

              Improvements

              • Improved enqueueing of maintenance sessions based on priority. Adhoc > Onboarding > Scheduled maintenance
              • Removed service bus form options for CW Control as the service bus is now always used
              • Added a health check to the CW Control integration to report unhealthy when the extension is not up to date
              • Updated the connected indicator on the computer details page to have a yellow lightning bolt when the ephemeral agent is connected
              • Scripts are now allowed to run for computers that have an ephemeral agent connected even if the agents all report disconnected
              • Updated the batch actions on the tenant list page to include tenant preferences. e.g. You can now update tenant business hours in bulk
              • Clicking "Attempt Identification Again" or "Rety x failed agents" on the identification tab now immediately triggers identification where before it would take up to 60 seconds

              Bug Fixes

              • Made computer feature usage calculator no longer count computers that have zero agents
              • Fixed a race condition in the Ephemeral Agent that would cause scripts to hang and sessions to timeout

              0.54.2

              Released 2022-11-17

              Improvements

              • Improved our identification de-dupe logic to automatically associate re-installed agents to the correct computers
              • Added more identification logs for some edge case scenarios to help with debugging
              • Added onboarding text to dashboard underneath onboarding computers
              • Slightly improved performance of preview/deploy functionality on the dashboard page
              • Increased the width of the tag selector in the ImmyBot Installer form and on the computer details page

              Bug Fixes

              • Fixed some issues where newly identified agents would always skip onboarding
              • Fixed an issue where non-msp admins could not view tag deployments limited to their tenant
              • Added missing times to the time dropdown for scheduling adhoc deployments
              • Fixed descriptions on the maintenance task get/set/test script dropdowns
              • Fixed some mobile styling issues with the navigation bar and on computer list page

              0.54.1

              Released 2022-11-14

              Bug Fixes

              • Fixed an issue with CW Control syncs causing CW Control agents to re-sync into ImmyBot unnecessarily

              0.54.0

              Released 2022-11-11

              CW Control Updates

              We added support for the breaking changes introduced in CW Control 22.9. We addressed stability issues with Control crashing due to the ImmyBot extension. On the Control integration form, make sure you check off the new options for using the Service Bus for better performance.

              Pending Identification Updates

              Agent identification now has logging to help you find root causes for why some agents fail to have scripts run against them. View them in Computers -> Pending Identification -> Show Identification Logs

              You can also see the identification logs for successfully identified agents under the Computer -> Agents tab.

              We now utilize the serial numbers for devices that come from trusted manufacturers (currently Lenovo, Dell, and HP). If a computer already exists in ImmyBot for a trusted manufacturer, any additional agents with that computer's serial number will skip identification and automatically be associated.

              Improvements

              • Fixed issue where Intellisense would throw null reference exception when completing variables
              • Updated CW Control integration to support CW Control 22.9 (extension version 0.3.0)
              • Added immy subscription information to billing details page
              • Made subscription portal show within immy frontend instead of a link to chargebee
              • Updated the default combined maintenance task script to leverage the latest function scripts in Immy. The new script is Get-WindowsRegistryValue -Path "HKLM:\Software\Wow6432Node\MySoftwareVendor\MySoftware" -Name EnableFeature | Registry-ShouldBe -Value 1
              • License files are now downloaded before running a configuration task's test script during detection in case the script relies on the presence of the license file
              • Added a new tenant preference "Exclude from Cross-Tenant Deployments and Schedules". When a tenant is excluded, all cross-tenant deployments and schedules targeting the tenant or its computers will not be applied when full maintenance is ran. This is particularly useful for Co-Managed IT situations that don't don't want your cross-tenant schedules or deployments.
              • Improved startup time of instances in situations where there was a large number of recently added agents
              • Added "Change Tenant" in batch actions for the computers table

              0.53.12

              Released 2022-11-09

              Bug Fixes

              • Removed the ImmyBot Agent from the Tenant -> Mappings table
              • Reduced metric reporter frequency to 30 minutes

              0.53.11

              Released 2022-10-20

              Bug Fixes

              • Fixed a null reference exception that was occurring when sending the maintenance session follow-up email
              • Fixed a potential exception that could occur in the N-Central API
              • Fixed an exception that occurred when trying to retrieve the online agents for a computer
              • Fixed an uncommon issue where some dynamic version scripts were throwing a null reference exception
              • Fixed an uncommon exception with ImmyBot Agent connection events that caused the event to not get saved
              • Fixed an issue with syncing devices from CW Automate where it would potentially take a few minutes and block other requests
              • Fixed an issue where some CW Control and N-Central agents were not automatically onboarding when they should
              • Fixed issue where Get-ImmyComputer -InventoryKeys metascript was not auto populating the available keys
              • Fixed an issue with incorrect breadcrumbs sometimes showing on the computer list page
              • Added a missing debug log that indicates when an ImmyBot agent fails to provide inventory data
              • Fixed a bug where we were dropping both dedupe markers over the same agent instead of different agents
              • Fixed an issue with maintenance sessions reporting failed after re-running an action successfully
              • Fixed an issue where loading the deployments list would throw a ArgumentNullException
              • Fixed an issue with some Chocolatey and Ninite logs not showing up under a maintenance action's phases

              0.53.10

              Released 2022-10-05

              Bug Fixes

              • Fixed an issue with displaying large software icon sizes on the Library -> Ordering page

              0.53.9

              Released 2022-10-05

              Improvements

              • SVGs now render correctly when uploaded as software icons
              • Increased some low timeout values on the ephemeral agent that were causing devices with slow network connections to fail
              • Changed the Pending Identification tab to default sort descending by Date Added since the most recent machines are the ones we are usually looking for.

              Bug Fixes

              • Fixed an issue with the ImmyBot Agent connected/disconnected events not propagating for pc reboots and pending connectivity sessions
              • Reduced likelyhood of Output CircularBuffer has already over-run requested index error in scripts
              • Ephemeral Agent reconnection is now prevented upon receiving a 500 status code. This was previously causing agents to stay running indefinitely.
              • Fixed an issue on the system update page where the new releases dropdown was not stretching the width like the current release dropdown

              0.53.8

              Released 2022-9-22

              Improvements

              • The "Suppress Reboots During Business Hours" flag no longer relies on offline behavior. If you are suppressing reboots during business hours and you run a session during business hours, then Immy will suppress reboots. Business hours are now checked on every script execution, and the RebootPreference variable passed to scripts will also be updated to Suppress if it was not already set. We did this so that scripts that handle reboots can safely rely on this variable.
              • The customer list on the Azure page no longer shows the MSP tenant as a selectable option in the Linked Tenant dropdown since the MSP tenant is mapped by default
              • Refactored how we handle ImmyBot agent connected and disconnected events. Instances that heavily utilize the ImmyBot agent will have significantly improved performance.
              • The Enable Automatic Onboarding field on the PPKG form is now disabled and shows an alert if the onboarding preference is globally disabled or disabled for the selected tenant.

              Bug Fixes

              • Fixed an issue with loading the AzureAD module for metascripts. This issue was causing all scripts that relied on AzureAD commands to fail.
              • Fixed an issue where syncing the connected state of large numbers of ImmyBot agents would prevent other system jobs from being performed
              • Fixed an issue where configuration tasks for already compliant software were executing at the very end of a maintenance session instead of in the expected order
              • Fixed an issue where the default upgrade strategy was set to none instead of install over
              • Fixed a permission issue where non-admins could not refresh the connectivity status of a computer
              • Fixed an issue with downloading the ImmyAgent installer as an .iso file where the extension was incorrectly set to .ppkg
              • Fixed an issue where software set to perform an update would incorrectly report compliant when the software did not specify an upgrade strategy and the upgrade was never performed. The action will now fail and report "Upgrade failed: No Upgrade Strategy specified on the software."
              • Fixed an issue with maintenance action execution ordering. If the currently executing action has dependencies, it will now immediately execute the dependencies instead of waiting until the end of the session.
              • Fixed an issue with selecting a license on the deployment details page where the selected license was not shown upon refreshing

              0.53.7

              Released 2022-09-14

              Improvements

              • Increased the timeout of the Ephemeral Agent's Ping RPC method from 1 second to 5 seconds. 1 second was too short and was unnecessarily causing scripts to fail on machines with high network latency.
              • Added a warning message whenever the Ephemeral Agent's Ping RPC method takes over 1 second to respond to help identify machines with high network latency

              Bug Fixes

              • Fixed an issue with schedules where updating a schedule from a single tenant to cross tenant would delete the schedule. This was happening due to a bug in a database constraint between schedules and tenants.
              • Fixed an issue where the connectivity status button on the computer details page was not actually refreshing the agent's connectivity status
              • Fixed an issue where repairing a software would trigger full maintenance

              0.53.6

              Released 2022-09-12

              Improvements

              • Added Set-ImmyDeviceId cmdlet to be used during Inventory to keep the UUID of the machine up to date and prevent new computers from getting created when the UUID of the machine has changed due to a feature update.

              Bug Fixes

              • Fixed an issue where the "Determine Desired Version" phase was running before the "Detect Installed Version" phase. "Detect Installed Version" needs to run first so we can pass the detected version to scripts that may rely on it when determining the desired version.
              • Fixed an issue where dynamic versions were not properly installing dependent versions

              0.53.5

              Released 2022-09-09

              Bug Fixes

              • Fixed an issue from 0.53.4 where some code changes were unintentionally included in the release which caused downloading the PPKG to fail

              0.53.4

              Released 2022-09-08

              Improvements

              • For maintenance task test scripts, we made Immy tolerant of non-Boolean values by displaying a warning when non-Booleans are found on the pipeline along with helper text for preventing output pollution.
              • Updated the ImmyBot Agent to support installing beta versions

              Bug Fixes

              • Fixed a scripting error that caused Immy to indicate there was no output when there was definitely output

              0.53.3

              Released 2022-08-30

              Software Test Script Changes

              We now execute the software test script during the detection stage for software that have updates available.

              Before, if a software needed to be upgraded, we would not run the software's test script in detection. We would perform the upgrade and then run the test script afterwards. However, if the test failed, the action would fail without any remediation.

              Now, if a software needs to be upgraded, and it has a test script, the test script will run in detection. If the test script fails, then the repair strategy will be performed instead of the upgrade strategy. The test script will still be run after the upgrade as it did before.

              General Improvements

              • Updated the error text for schedule cron expressions to indicate that a schedule can run at most once per day.
              • The ImmyBot Agent service sometimes throws an exception about a missing file CliWrap.dll, which causes the agent to bork. When we encounter this exception, we now auto restart the service to resolve the issue.
              • Improved the session log message "Detection stage failed: Software Action Id is not specified on the provided configuration task action" to include more information to help diagnose the issue. It is usually because the deployment contains out-of-date data and needs to be updated.
              • Improved the performance of loading the main computer list when sorting by computer name
              • Test methods containing multiple outputs now return the result of ANDing those outputs together to compute the overall result.
              • Updated Quick Deploy to allow you to choose a desired state. e.g. "Install, Uninstall, Update If Found, Ignore" or "Enforce, Monitor, Audit"
              • Added detection of stuck/non-responsive jobs such as the agent identification job, which can initiate a self-restart of backend.
              • Added reboot preference dropdown to quick deploy and override forms
              • Moved several action columns on tables to the left side for consistency and best compatibility with mobile views.
              • Added an option to schedules and adhoc-deplyoments to send detection emails even when all actions are compliant. This is to allow users whose computers are already up to date to still receive a maintenance email.
              • Updated the script list page and session log component to use the Monaco script editor
              • Added the CW Automate icon to the main computer list. Clicking the icon opens up the computer in CW Automate.
              • Added "Date Added" to the computer list and made it sortable
              • Added a simple "new" tag on the computer list for computers that have been added to ImmyBot within the last 24 hours
              • Added an 'X' button to easily remove linked tenants from integrations

              Bug Fixes

              • After a task is created, the Runs Against property is now disabled. Changing this value after it is created can cause issues for deployments that are referencing it.
              • Fixed an issue with Ephemeral Agent resilient script output logic that would fail to re-connect if the script had never had any output prior to connection loss. (Ex. SonicWall VPN installer script)
              • Added missing triggered by text on the session details page when the session was triggered by a schedule or automatic onboarding
              • Fixed a width issue on some dropdown buttons
              • Fixed an issue with the integration client list re-sorting after you link/unlink a tenant

              0.53.2

              Released 2022-08-19

              Bug Fixes

              • Fixed an error that showed on the schedules list when a schedule existed that did not specify a time zone
              • Fixed issue introduced in 0.53.1 where the current immy version stopped displaying in the sidebar
              • Fixed issue introduced in 0.53.1 where the maintenance item ordering page broke
              • Fixed issue introduced in 0.53.1 where showing/adding parameters on the maintenance task page broke
              • Fixed an issue where monitor results were only showing the last line of output instead of all output
              • Fixed an issue where monitor results were overflowing into other components
              • Fixed an issue where re-running actions while showing action details would not displaying logs as they came in
              • Fixed an issue introduced for instances that signed up after the release of 0.53.0 where identification would fail due to some missing database configurations

              0.53.1 (un-published)

              Released 2022-08-18

              Improvements

              • Added a Trigger Now button to the Azure User Sync preference on the preferences page
              • Added a description to the PPKG reset windows checkbox - "Will perform a reset of windows with the remove user data option"

              Bug Fixes

              • Fixed an issue with agent identification where users were seeing the following error - Failed attempt to differentiate existing agent and pending agent: 42883: procedure sp_create_computer_from_agent(integer, uuid, boolean, text, text, text, unknown, boolean) does not exist POSITION: 6
              • Updated the alert of the person list page to match the available actions
              • Fixed an issue where the software configuration task edit link was missing
              • Fixed an issue where the branding logo alt text was still hardcoded to "Immense Networks" instead of the value provided by the branding
              • Fixed an issue with cancelling a detection only session from the computer details page -> software tab.

              0.53.0

              Released 2022-08-16

              UI Improvements

              Dark Mode

              image

              Deploy Software from Dashboard

              image

              Session Details

              imageimage

              Moved commonly used Main Menu items to the top, moved less commonly used items under sub-menus

              image

              Integrations - New look and feel

              image

              Integrations - Embedded Documentation

              image

              Script Editor

              Moved Script items into the left pane

              image

              New Integration - HaloPSA

              Deploy software/tasks to customers with specified recurring invoice items

              New Parameter Type - KeyValuePair

              image

              image

              Improvements

              • ImmyAgent now detects 'dirty' shutdown events of the ImmyAgent with a shutdown.dirty file.
              • Added a description to /schedules "Show Postpone Button" checkbox
              • Improved the integration details page by embedding the integration's documentation
              • Added a button that triggers an immediate Azure AD Sync and a note about automatic Azure AD Sync
              • Started improving the dashboard page. Added the ability to trigger actions for items in the dashboard
              • Added cmdlets Expand-String and New-LiteralString cmdlets to help deal with strings that should or should not be expanded before being sent to a remote machine.
              • Upgraded Intellisense Engine and Monaco Editor to latest versions
              • Moved live chat button to the header navbar so it doesn't potentially block buttons on the page
              • Added 8 new Ephemeral Agent Timeline events
              • Added "Script Bytes Received" metric to system status page
              • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
              • Made minor improvements to the getting started wizard
              • Moved script details into script editor sidebar for convenience

              Bug Fixes

              • ImmyAgent now sends 'online' events when we reconnect to IoTHub from an ungraceful network loss to prevent session hangs after the computer restarts
              • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches
              • ImmyAgent now handles exceptions returned from an instance during registration, and will continually retry instead of shutting down.
              • Fixed a typo in the SMTP port placeholder text
              • Fixed an issue with quick assign not setting the correct desired state when running the detection only session
              • Fixed an issue with checking online/offline status of agents during a session
              • Fixed an issue where a deployment referenced a specific version even when the desired state did not require one. This was causing actions to fail
              • Fixed an issue with displaying the account dropdown on mobile
              • Fixed incorrect tooltip on install Immy agent icon in the computer list
              • Fixed an issue with the Automate integration where we were unable to retrieve more than 50 Windows patches.
              • Fixed issue where piping to Format-Table would result in an error or no output
              • Remove disabling of Cortana from PPKG builder output, as it is no-longer supported & may break newer OOBE installs.
              • Fixed issue with version restriction selector on License Edit page
              • Fixed issue with licenses deleting when saving a license with no tenant selected
              • Fixed issue displaying Customers on Azure Sync page
              • Fixed an issue with runnable script editor not including the user's tenantId in readonly cloud script editors
              • Fixed agent bug that prevents 'online' event on IoTHub reconnection
              • Fixed agent bug that would cause the agent to not retry transient registration failures
              • Only show Postpone and Update if "start immediately" not checked

              0.52.7

              Released 2022-07-11

              Improvements

              • The script list page now persists your filters after refreshing or leaving the page.
              • Fixed width issues in the maintenance item column on the deployment list page
              • Reduced required permissions for N-Central integration. See the new N-Central integration docs for details
              • Added a new PowerShell cmdlet Stop-ImmySession that will cancel the maintenance session it is currently running in

              Bug Fixes

              • Fixed some potential issues around agent connected/disconnected events
              • Fixed potential N-Central exception with re-sending messages
              • Fixed potential issue with 'missing' devices from N-Central due to possible filter contamination in N-Central

              0.52.6

              Released 2022-06-27

              Improvements

              • Set the default install script for new software to the "Manual Install Script" and the upgrade strategy to "Install Over" whenever we don't have another specific install script to provide
              • Set the default software installer type to "Installer File"
              • Updated the example New-DynamicVersion script
              • We now show a confirmation modal when choosing the "Wiped" option for resolving an agent identification conflict.
              • You can now see Cloud Sessions from the main Sessions list!
              • Added warnings when the ephemeral agent is failing to establish a connection to help users identify causes for failing script execution
              • Fixed an issue with the detection stage stuck running when it fails to execute scripts in the beginning of the stage
              • Improved timeline connected/disconnected events. There were edge cases that would show multiple connects/disconnects back to back.
              • Removed timeline computer online/offline events to avoid confusion. These events were never actually based on a computer coming online or going offline. We simply emitted "online" when an agent connected and happened to be the only online agent. Similarly for "offline" events, we only emitted the event when an agent disconnected and all agents were offline. ImmyBot does not actively check whether a machine is online or offline. It only checks whether it has any connected agents to use. This concept will be further improved upon to help resolve issues with agents incorrectly reporting connected/disconnected.
              • Removed link to software/task on deployment list since people are clicking it thinking it is the edit deployment link
              • Moved the software/task selector back above the target selector on the deployment edit page
              • Removed the media nav item since it's not actually useful

              Bug Fixes

              • Moved "Update If Found" from underneath "Installed" to the same level as "Installed" for clarity. A software can be "installed, uninstalled, ignored, or updated if found"
              • Fixed an issue with cloud task previews failing with "device offline"
              • Fixed an issue where the ImmyBot agent update action would not run when the agent was offline
              • Fixed an issue with the agent updates stage, onboarding stage, and resolution stage not honoring pending connectivity
              • Fixed an issue where the resume and cancel session buttons were incorrectly showing for postponed sessions
              • Fixed an issue with CW Control and CW Automate health error messages excluding important details that can help diagnose the problem
              • Fixed an issue where we were not checking if a configuration task is actually marked as a configuration task. This resulted in tasks getting run when they should not have.

              0.52.5

              Released 2022-06-13

              N-Central Beta Updates

              • Fixed an issue with exceptions that may occur inside the N-Central device-sync job causing memory to bloat
              • You can now get registration tokens from the NCentral integration via new PSCmdlet Get-NCentralRegistrationToken

              image

              Other Improvements

              • Under "Preferences", the description of the User Affinity Sync feature says it will run every 4 hours; this is incorrect. Verbiage was changed to indicate it will run every 24 hours.
              • On the integration details page, a confirmation modal has been added when clicking the "Bulk create tenants..." button to prepare users that this will cause code execution for linked clients.
              • Added more improvements to online/offline agent handling during maintenance sessions
              • Updated the online/offline event receiver for CW Control to return immediately in an effort to close requests faster

              0.52.4

              Released 2022-05-31

              Improvements

              • Removed unnecessary checkboxes from the Computers table on the "Edit Schedule" page
              • Immy live chat now supports screenshare! Immy support can now request access to view your screen to help resolve issues faster.

              Bug Fixes

              • Fixed an issue with the maintenance email actions requiring authentication

              0.52.3

              Released 2022-05-27

              Improvements

              • ImmyAgents no longer need to see a valid board serial number in order to complete registration or rekey. Instead, ImmyAgent may fall back on and rely on an 'ImmyHWID' (Immy hardware id), when a board serial is not available. ImmyHWIDs are derived from CPU, BIOS, MOBO, GPU, and TPM information where available.
              • Updated maintenance sessions to listen on agent connected/disconnected events instead of computer online/offline events which have faster responses and higher success rates
              • When a new agent comes into ImmyBot, we now kick off the identification job immediately if it isn't already running in an effort to speed up identification
              • Added session logs for dependencies indicating what they are for. e.g. Software A depends on Software B → If not installed then install.
              • The actions in the maintenance email (Reboot Now, Update Now, and Postpone), now link to a form on the ImmyBot instance instead of linking directly to the backend api. The reason for this is because some spam filters will automatically follow links in an email, which has accidentally caused computer reboots. Moving the link to a form allows spam filters to no longer be able to trigger the action automatically.

              Bug Fixes

              • Fixed an issue causing the computer details page to sometimes not load
              • Fixed an issue with the ImmyAgent rekey request not being received
              • Fixed an issue where Get-ImmyComputer was incorrectly reporting offline
              • Fixed an issue where configuration file parameters were not being downloaded when the configuration task did not have any enabled scripts
              • Fixed an issue with displaying the dependency badges on maintenance actions
              • Fixed an issue with the schedule's day of week selector cutting off the last characters of "Wednesday"
              • Fixed an issue with the CompareTo-ImmyBotVersion metascript
              • Fixed an issue with some maintenance action start times showing "2021 years ago" instead of "Unavailable" when the action never started
              • Bump Azure IoTHub packages to resolve some connection issues with the ImmyAgent

              0.52.2

              Released 2022-05-25

              Ephemeral Agent and Identification Improvements

              • ALL scripts now run through the ephemeral agent, even during identification and computer de-dupe logic 🎉
              • Additional exception information is now visible in Identification Failed tab, and in session output. This furthers insight for users to understand and fix potential reasons why the providers may have failed to run our agent. image
              • Fixed an issue where the date was not being set correctly when adding a AgentIdentificationFailure log, leading the user to think this issue happened at the beginning of time!

              Other Improvements

              • Added computer batch actions button on the tenants -> tenant details -> computers tab
              • You can no longer create a schedule that executes within one hour of detection. This is a safety measure to help prevent reboots during business hours
              • Added a checked to the schedules page for "Execute maintenance immediately after detection" to make it easier for those that do actually want to run execution after detection. When checked, you cannot set the execution time.
              • The schedule list "Next Run" column now sorts correctly and also shows the browser's local "Next Run" time
              • Added clarity to session logs when we are checking if an agent is online
              • Quick deploy actions now use Offline Behavior: Apply on Connect
              • Auto onboarding sessions now use Offline Behavior: Apply on Connect
              • Computer list batch actions - Run Maintenance now uses Offline Behavior: Apply on Connect
              • On the schedule details page, renamed "Target Category" to "Runs Against", and changed the options to "Computers" or "Cloud"

              Bug Fixes

              • Fixed an issue with the primary user not being found when sending emails after an onboarding session
              • Fixed an issue with checking off "Send follow-up email" on the onboarding form where it would not actually send the email
              • Fixed an issue with unhealthy integration messages not showing the real error message
              • Fixed an issue with unhealthy integration agents showing on the computer onboarding form
              • Added missing script parameter $LicenseFilePath to detection scripts and configuration tasks
              • Removed maintenance tasks from accidentally showing in the software prerequisite dropdown
              • Updated the computer batch actions sidebar to have better clarity
              • Fixed an issue with loading the deployment list when a deployment existed for a computer or person that no longer existed
              • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was failing if the Tenant didn't have an Azure mapping
              • Fixed an issue where Get-ImmyAzureAuthHeader -UseMspTenant was returning an access token for the Tenant instead of the MSP
              • Fixed an issue where some failed sessions were getting marked as pending connectivity
              • Fixed some more issues around offline/online agent detection during sessions
              • Implemented a HTTP Concurrency limit for requests to N-Central to prevent issues with too many requests hitting their backend
              • Fixed an issue with not being able to skip onboarding
              • Fixed an issue with the "Retry X failed computers" where it was re-attempting to identify all failed computers
              • Fixed an issue with "Analyze Installer" not returning any data
              • Fixed an issue with script output in session logs not being truncated to the last 5 lines
              • Fixed an issue with the Immy Agent installation request not reporting whether the integration is disabled or unhealthy

              0.52.1

              Released 2022-05-18

              Bug Fixes

              • Fixed an issue where tag deployments were not resolving during full maintenance
              • Fixed an issue where cloud deployments were not resolving during full maintenance

              0.52.0

              Released 2022-05-18

              Tags

              You can now add tags to computers, and deploy software to tags! Manage tags under the settings link on the sidebar. Tags help in scenarios where workstations are shared by a variety of users and there is otherwise not a common property to target with a filter script.

              Tags can be added to computers as a batch action on the computer list page.

              image

              Tags can also be added to a computer on the details page.

              image

              Tags can be deployed as a cross-tenant target scope.

              image

              Tags can also be deployed as a single-tenant target scope.

              image

              Tags can be added to an ImmyBot installer to automatically set tags for new computers

              image

              Exclude Computer From Maintenance

              You can now specify that a computer be excluded from maintenance. Excluded computers will not be allowed to run any type of maintenance session.

              Settings -> Preferences -> Company Preferences -> Computers Excluded From Maintenance

              or

              Tenants -> Select a tenant -> Preferences tab -> Computers Excluded From Maintenance

              image

              Immy Chat Integration

              Added in 0.51.5

              We added LiveChat to Immy to make it easier for you to get support

              Session Script Execution Improvements

              Before executing a script on a device, we now check if it is online. If it is not online, we verify whether any of its agents are incorrectly reporting online and refresh the status appropriately. If it is still not online, we will wait up to 30 minutes for it come back online. If it is still not online, then we will mark the session as Pending Connectivity (only for Apply On Connect) or cancel the session due to the computer being offline.

              Other Improvements

              • On Immy startup, we now sync the online/offline state of all ImmyBot agents
              • Added an hourly job to pull the latest online/offline state of all ImmyBot agents
              • Updated parts of the frontend codebase with typescript to prevent accidental bugs
              • Improved performance of loading certain pages that relied on fetching clients from a provider
              • On the deployment details page, deploying to over 10 computers will now prompt to confirm this is the action you want to take
              • Active Ephemeral Agents will now prevent Windows from going to sleep to keep sessions from halting
              • A new preference has been added to aid in development of Ephemeral agent, as-well as diagnosing of bugs
              • Added Offline Behavior selector to the computer onboarding form and set the default option to "Apply On Connect"
              • The Run Maintenance button on the computer details page now defaults Offline Behavior to "Apply On Connect"
              • The Run Maintenance button on the computer details and list pages now provide a dropdown for the reboot preference
              • The Run Maintenance button on the computer details and list pages now have a confirmation modal
              • Azure groups now include devices as long as you grant ImmyBot the Device.Read.All permission
              • Azure groups now include all sub groups
              • Improved the action logs and result message for failed dependencies
              • Added a Preferences tab to the Tenant details page
              • Updated PowerShell Editor Services from 3.1.5 to 3.3.5

              Bug Fixes

              • Fixed an issue in the ephemeral agent that prevented the agent from exiting when finished running PowerShell
              • Fixed an issue with uninstall strings in the registry not containing quotes around paths with spaces
              • Fixed an issue where devices with unknown operating systems (non windows) were coming into Immy
              • Fixed an issue where dependencies for software set to update if found would run even if the software was not found
              • Fixed an issue where command line uninstall scripts with spaces in the path were not being wrapped in quotes
              • Fixed an issue where the access request button was not visible when access requests were disabled
              • Fixed an issue where failed dependencies were being removed instead of failed
              • Fixed an issue with the branding preview and test email not showing the mascot name

              0.51.5

              Released 2022-05-06

              Chat with ImmyBot

              • Added a live chat button to ImmyBot as another option for support requests

              Bug Fixes

              • COMMAND LINE WORKS AGAIN! Fixed an issue where Command Line (non-PowerShell) scripts would not run correctly, resulting in software uninstalls not working as expected
              • Fixed an issue where maintenance actions with a prerequisite dependency would not execute after the dependency finished successfully
              • Fixed an issue where Immy support would be unable to regain access after expiration
              • Fixed an issue with the "Show Details" link on the computer software tab not opening
              • Increased the timeout for the ImmyBot Agent to connect from 20 seconds to 60 seconds since setting up the ephemeral agent on some machines may take longer
              • Fixed an issue with configuration tasks not displaying underneath the software action
              • Fixed an issue with configuration tasks not running when using quick deploy

              0.51.4

              Released 2022-04-27

              Deployment List Improvements

              • Removed the button "Show Recommended Deployments"
              • Recommended deployments and the ability to "Approve/Dismiss" them now show up in the list
              • Updated the group by filter and added two new filters.

              image

              Session Log Improvements

              • Made several logs more concise
              • Added action name and stage name to the top level logs
                • image
              • Checking the box to the left of actions do a better job of filtering to the relevant logs for that action
                • image

              Bug Fixes

              • Fixed a performance issue with a timeline events database query
              • Fixed an issue that was causing the Ephemeral Agent to not extract on machines running Windows PowerShell 4 or below
              • Fixed issue where ImmyBot would not verify dependencies for software that is already compliant

              0.51.3

              Released 2022-04-21

              Bug fixes

              • Fixed an issue with upgrading to 0.51.3 where the instance would fail to start if you had a branding that did not specify a from address (which is now required)

              0.51.2

              Released 2022-04-21

              Branding Updates

              • Added color picker for Text Color and Table Header Text Color
              • Branding Logo and Mascot images are now optional
              • Added live branding preview

              image

              Other Improvements

              • Added more details such as the reboot preference to the session details page. Also added a snazzier stage indicator.
                • image
              • Changed access request default options to Three Days and Admin
              • Maintenance Tasks now have the "Ignore" option just like software and will take precedence over other deployments for the same task and target group.
              • Added desired software state "Any" as an available option for software that use dynamic versions
              • Maintenance emails no longer show software actions that have a desired state of "Update If Found" and no detected version.

              Bug Fixes

              • Fixed an issue with saving a tenant's default time zone
              • Fixed an issue with the software/task selector not correctly selecting tasks on the schedule and dashboard page
              • Fixed an issue with chocolatey items not showing in the software/task selector
              • Removed ability to use metascripts to define schedule targets (since metascripts do not resolve to list of computers)
              • Fixed an issue with configuration task file parameters not getting downloaded before the software's action runs
              • Fixed an issue where the Cloud Script execution context was not selected by default when creating a new dynamic version script from a software
              • Handled some common application initialization failures more gracefully
              • Fixed an issue with metascripts being able to override certain variables that were automatically provided.

              0.51.1

              Released 2022-04-12

              Integration Health

              Integrations can now have a health status of Healthy, Degraded, Unhealthly, or Disabled.

              • Healthy: All is well
              • Degraded: Started experiencing issues in the last few minutes
              • Unhealthy: Consistently experiencing issues (integration is no longer usable)
              • Disabled: Integration has been explicitly turned off by a user

              Unhealthy integrations will return to healthy automatically when transient issues subside.

              An alert with the latest message is shown on the integration details page.

              image

              A badge has been added to the integration list and on the computer details -> agents tab.

              image

              image

              The "Download ImmyBot Agent Installer" dropdown will now be disabled if the integration is unhealthy or disabled.

              image

              Other Improvements

              • Schedules can no longer be created with cron expressions using a * , - or / in the minute or hour position to help prevent to frequent scheduling.
              • Important: Schedules that are currently using a * , - or / in the minute or hour position will be automatically disabled in this version.
              • Software items in emails show "Up to Date" after successfully updating instead of "Update Available" which causes confusion whether the software has actually updated
              • Quick Assign and Assign actions are no longer disabled when the computer is already running a maintenance session
              • Added OS version after the OS name in the computer details overview info
              • MSP non-admins can now see the recommended deployments on the list page to know that they exist
              • Added detected version to items in the software tab
              • Removed the integration priority table and details since they are no longer applicable
              • When a maintenance session is manually resumed, the name of the user that resumed it now shows up in the logs. Or if it was resumed from an email, then it will indicate that a user clicked the "Update Now" button in the email.
              • Added field for maintenance task notes.

              Bug Fixes

              • Fixed an issue where the dynamic version response was incorrectly cached when the script was shared for multiple software and required different output for each software
              • Fixed an issue where the software detection radio options were disabled and unable to be changed
              • Fixed an issue where the "Skip x onboarding computers" button would disable even if you had computers selected
              • Undid the change that disabled the onboarding tab since it was a bad decision
              • Fixed an issue with slug not saving when creating a tenant

              0.51.0

              Released 2022-04-08

              Onboarding Form: Maintenance Task Parameter Override

              • New checkbox added to maintenance task parameters on the deployment details page: 'Allow override from computer onboarding'

                image

              • The checked parameters will show on the computer onboarding form, allowing the user to override the value just for the onboarding session

                image

              Other Improvements

              • Implemented a Get-Hash cmdlet in the Metascript engine useful for interacting with APIs like NinjaRMM and Mimecast that require HMACSHA1 signatures

              • We moved the Target Selector above the Software / Task Selector on the deployment page since it felt more natural to answer "Who am I creating a deployment for?" before answering "What am I creating a deployment for?"

              • Software Display Name Regex detection now supports capture groups to pull the version

                image

              • Added Azure ID column to the User List page

              • Improved handling of integration API routes

              • Added a "Do not remember" option when overriding an "Update If Found" deployment, and added more options for overriding certain desired states.

                image

              • Added Tenant Slug. $TenantSlug is now exposed for all scripts executed against a computer. You can also conveniently edit the tenant slug directly in the Tenant List.

                image

              • Hid the maintenance item selector behind a checkbox on the schedule details page since it was causing some confusion

                image

              Bug Fixes

              • Fixed an issue where dynamic versions that throw a terminating exception were not displaying the exception message under the maintenance action
              • Fixed an issue with the "New Version" notice not showing up
              • Fixed an issue preventing the Getting Started Wizard modal from showing
              • Fixed an issue with configuration tasks running before the software was deemed compliant
              • Fixed an issue with non-msp users not being able to create configuration tasks from the software details page
              • Fixed various issues with deploying Ninite software
              • Fixed issue with software repair not re-installing software
              • [Global Software Only] Fixed an issue with saving a custom download installer script to a global software
              • Removed double base64 encoding that triggered alerts in BitDefender and Arctic Wolf
              • Fixed the script documentation link
              • Fixed issues with Invoke-ImmyCommand forcing terminating errors instead of honoring the error action preference set by the script
              • Fixed an issue with configuration task parameters not being provided to the test script when run during detection
              • Fixed an issue with loading deployments when you have multiple of the same provider type enabled
              • Fixed issues with loading CW Control, Automate, and Manage target groups on the deployment details page
              • Fixed some exceptions that were occurring when sending emails
              • Removed duplicate "Should not be present" text showing in the maintenance actions list

              0.50.13

              Released 2022-04-1

              Capture Version from DisplayName with Regex

              For software that puts its version in the DisplayName instead of the DisplayVersion field like this:

              image

              You can now use a capture group to capture the version from the DisplayName

              Example

              HexCmp 2.34.1 can be captured with

              regex
              HexCmp (\d+\.\d+)

              Script Editor Improvements

              Within filter scripts, Get-ImmyComputer -InventoryKeys now shows valid InventoryKeys

              image

              0.50.12

              Released 2022-03-29

              Improvements

              • Made the software override options more similar to the quick deploy options
              • The ImmyBot Agent no longer writes and executes scripts from C:\Windows\Temp\ImmyBot.
              • You can now add a Tenant Slug under the "Edit" tab on the Tenant Details page. This value is exposed as the variable $TenantSlug for scripts that run against this tenant's computers.

              Bug Fixes

              • Fixed an issue preventing the 'Getting Started Wizard' from showing
              • Fixed an issue with non-MSP users not being able to create configuration tasks from the software details page
              • Fixed an issue with the 'New Version' notice not showing up
              • Fixed an issue with configuration tasks running before the software was deemed compliant
              • Fixed an issue where dynamic versions that threw a terminating exception were not displaying the exception message under the maintenance action

              0.50.11

              Released 2022-03-21

              Improvements

              • Added ability to choose "install" when overriding "update if found" deployments on the quick deploy form

              Bug Fixes

              • Fixed an issue where deployments with the same target type were resolving "update if found" as a higher priority than "latest version"
              • Fixed an issue where scripts run in Control were visible in the Commands tab
              • Fixed an issue where registry manipulation scripts would fail with ProviderNotFound: Microsoft.PowerShell.Core\Registry

              0.50.10

              Released 2022-03-14

              Intellisense Improvements

              Intellisense no longer restarts when syntax error is detected.

              Quickfix Actions work

              image

              image

              No more duplicate definition on hover

              image

              Bug Fixes

              • Fixed an issue with downloading ImmyBot Agent EXEs which would intermittently fail
              • Fixed an issue where an unreachable integration could cause ImmyBot background jobs to not start up correctly
              • Fixed a null reference that could occur when re-running a maintenance action
              • Refactored some ephemeral agent PowerShell code for easier testing

              0.50.9

              Released 2022-03-08

              Bug Fixes

              • Fixed a bug that was causing new instances of Immybot to crash when starting up

              0.50.8

              Released 2022-03-04

              Onboarding Deployments

              The Onboarding target type has been moved to a separate checkbox so that you can limit deployments to onboarding only AND use the target type filters.

              ImmyAgent Improvements

              Updated internal infrastructure to utilize our new extended verification code-signing certificate.

              We currently sign:

              1. ImmyAgent executable & MSI/EXE/PPKG Installers
              2. Ephemeral Agent executable
              3. Static PoSH run on computers

              In addition to being more secure, this ensures our software is no-longer flagged by SmartScreen.

              IMPORTANT NOTE

              Customers utilizing software such as ThreatLocker MUST ensure our new certificate is whitelisted, as our new EV cert required "LLC" to be present on our CN and O.

              image

              Bug Fixes

              • Improved exception handling during maintenance sessions
              • Fixed an issue with re-running cloud scripts from a session log where it would throw an exception
              • Fixed some performance issues and improved caching of function scripts

              0.50.7

              Released 2022-02-25

              Maintenance Task Serial Execution

              A maintenance task now has the option to "Execute Serially".

              When checked, this maintenance task is guaranteed to only have one instance active at a time.

              e.g. If three maintenance sessions have an action for a maintenance task that executes serially, then one session will execute the maintenance task while the other two wait for it to complete. Once the first completes, the second will execute. Once the second completes, the third will execute.

              This is useful for maintenance tasks that rely on the state of subsequent executions.

              Other Improvements

              • Added a Status and Types column to the CW Manage client list on the integration details page so you can easily filter your list to clients you want to create tenants for. Also made the Linked Tenants column filterable to "Linked" or "Not linked". The Bulk create tenants for unassigned clients is now Bulk create tenants for filtered unassigned clients and will only bulk create tenants for those visible rows matching the table filters.
              • Added checks to ensure that the identification job is running properly

              Bug Fixes

              • Fixed an error that was preventing the computer overview page from loading
              • Fixed an issue with scripts running multiple times if you opened, closed, and re-opened a script editor
              • Fixed issues with the CW Control integration not updating the device name, os name, and serial number of the agent

              0.50.6

              Skipped

              0.50.5

              Released 2022-02-18

              Improvements

              • Updated ImmyBot from dotnet 5 to dotnet 6
              • Non-existent items on the deployment ordering page are now automatically removed
              • Added description below the "Suppress reboots during business hours" checkbox to indicate that it is only applied for maintenance sessions that resume after a device comes back online
              • Deployments can now be disabled which will exclude them from being applied during full maintenance sessions. This can be useful if you want to stop a deployment from happening without deleting it.
              • ImmyAgent PPKG's should now work on Windows Home editions
              • Improved the load time of the maintenance session list for instances that have 1+ million sessions

              Bug Fixes

              • Removed unnecessary device online check when running metascripts through the script editor
              • Fixed issue with parameters not getting provided to scripts that are re-run from maintenance session logs
              • Fixed a format exception that occurred when attempting to schedule adhoc deployments to run after midnight
              • Fixed a null reference exception thrown when using the "Limited" option on the "Software Access Level" field
              • Fixed issue with the "Last logged on user" fields not showing on the computer overview tab
              • Updated the error text of user scripts to indicate whether or not there is currently a logged in user
              • Fixed an argument exception that occurred when trying to uninstall a software by product code
              • Fixed an internal issue with migrating items to global
              • Fixed an issue with maintenance action timeline events that was preventing them from showing in the list
              • Fixed a bug where cancelling scripts from the editor would not close the PowerShell stream reader
              • Updated broken links to https://docs.immy.bot
              • Fixed a poor performing query with instances that have millions of maintenance sessions
              • Fixed issue allowing you to click the install Immy agent button on computers that did not have an online agent to install it with
              • Fixed issue where local accounts created by the PPKG were not being hidden
              • Fixed potential issue where local accounts created by the PPKG were not being added to the local administrators group if the local administrators group name wasn't called 'Administrators'

              0.50.4

              Skipped

              0.50.3

              Released 2022-02-11

              ImmyBot Agent Updates

              • Fixed a bug where agent installers that were created before 0.50.0 were failing to register on new devices
              • Increased the verbosity of logging during agent installation for easier debugging
              • Fixed a null reference issue occurring on startup
              • Updated the MSI uninstallation to remove the config.json and registration.json files located under C:\ProgramData\ImmyBotAgentService.

              Improvements

              • Increased the Ephemeral Agent named-pipe connection timeout from 10s -> 60s to allow computers with extremely poor PowerShell initialization time likely due to system issues to still run scripts
              • Added software / task descriptions to deployment details page and license details page. The descriptions are accessible by clicking the the question mark button

              Bug Fixes

              • Fixed an issue where filter scripts and software auto update scripts were not showing any output in the script editor
              • Fixed a label issue on tenant category schedules and tenant category deployments
              • Fixed an issue on the schedule details page where the maintenance item selector would should a blank selection by default image
              • Removed unnecessary code that fetched software twice during detection
              • Fixed an issue where the selected computers on the new computers page would de-select automatically
              • Put in an update to the CW Control ImmyBot extension to work on CW Control 21.15+. CW Control 21.15 introduced a breaking change to the API.
              • Fixed an issue where cross tenant device group target types were taking precedence over tenant specific target types

              0.50.2

              Released 2022-02-09

              Bug Fixes

              • Fixed an issue with azure sync job creating duplicate users in the MSP tenant
              • Fixed an issue where a disabled integration could not be deleted

              0.50.1

              Released 2022-02-08

              Improvements

              • When ImmyBot restarts, it will now attempt to restart any maintenance session that was active when it shutdown. Before, it would only attempt to restart scheduled sessions
              • Restarting maintenance sessions should now be idempotent. If an action was running when the backend rebooted, then it will be restarted.
              • Removed some thread blocking code to improve performance

              Bug Fixes

              • Fixed issue with Microsoft.PowerShell.Security functions not found in metascripts
              • Fixed an issue with "Uninstall By Package Info" failing to uninstall via product code
              • Fixed an issue where pending connectivity sessions were not triggering for computers that had exactly one agent

              0.50.0

              Released 2022-02-07

              Intellisense (beta)

              Intellisense can be enabled on the application preferences page (disabled by default). Having intellisense inside the script editor is going to make your life much easier when it comes to writing ImmyBot scripts.

              This feature is considered beta and there may be a few bugs present that will be get patched over the next few releases.

              image

              image

              image

              image

              Other Improvements

              • Added navigation link for tenant on the computer overview tab and the maintenance session list
              • Improved performance of filtering maintenance action table and dashboard results
              • Improved performance for instances that have a large number of ImmyBot agents by optimizing some database calls
              • Added compression support for JavaScript and CSS assets to decrease the initial page load time

              Bug Fixes

              • Fixed an issue with some deployments not resolving to computers that are auto-onboarding
              • Fixed an issue where clicking Include Offline in the Onboarding computer list would be de-selected after 5 seconds
              • Fixed an error that showed on the tenant details page for ImmyWorkbench instances that do not have schedules enabled

              0.49.9

              Released 2022-02-02

              Improvements

              • Inventory during a maintenance session now runs before resolving deployments since a deployment may rely on inventory data. e.g. Filter Scripts

              0.49.8

              Released 2022-01-27

              Bug Fixes

              • Fixed a bug with quick deploy where maintenance actions were failing due to Parameter <X> is marked required... and no value has been set

              0.49.7

              Released 2022-01-26

              Improvements

              • General cleanup/refactoring to improve performance
              • Added an index that improves some maintenance session queries

              Bug Fixes

              • Fixed an issue with uploading licenses and software installers with users who have names that contain non-Latin1 characters
              • Fixed an issue where failed audit tasks were showing as compliant
              • Fixed an issue where the maintenance item selector was not showing correct results for the Tenant target category
              • Fixed an issue uploading an MSI where the Uninstall MSI By ProductCode script was being used on the software instead of the correct Uninstall MSI By UpgradeCode. The Uninstall MSI By ProductCode is now set on the software version. The software upgrade strategy is also defaulted to install/over instead of none.
              • Fixed several issues around script timeouts and memory management
              • Fixed an issue with some slow computer list queries
              • Fixed an issue with software test scripts causing detection to fail due to missing required maintenance task parameters

              0.49.4

              Released 2022-01-19

              Improvements

              • Significantly improved performance of re-initializing maintenance sessions upon the server starting up
              • Immy will now wait for one or more of a device's agents to reconnect when the device goes offline while attempting to run a script

              Bug Fixes

              • Fixed an issue with application restarts taking a long time to re-enqueue pending maintenance sessions
              • Fixed an issue with some exceptions that occur in maintenance sessions causing the sessions to be stuck in the "Created" status

              0.49.3

              Released 2022-01-18

              Improvements

              • Reduced the number of concurrent inventory jobs that can run to preserve performance until it can be refactored
              • Delivery of Ephemeral Agents on computers that don't support TLS v1.2 no longer spit out scary looking error. Instead, it now shows a warning that it will fallback to TLS v1.0.

              image

              • Monitor maintenance tasks now run during execution except for previews which still run during detection

              Bug Fixes

              • Fixed an issue with maintenance item specific schedules causing sessions to get stuck in created
              • Fixed an issue with ephemeral agents not working correctly on Win7 x64-era machines
              • Fixed issue with immy version not showing in footer

              0.49.2

              Released 2022-01-18

              Bug Fixes

              • Fixed an issue where scripts run from the editor could throw the error: An item with the same key has already been added. DebugPreference

              0.49.1

              Released 2022-01-17

              Improvements

              • The $VerbosePreference and $DebugPreference in a metascript now get passed down to the computer
              • The top navbar on smaller screen sizes is now accessible from a collapsible button
              • Added docs nav icon linking to https://docs.immy.bot
              • Standardized task verbiage in the UI
              • Added an additional task type filter on the task list page for "All, Computer, Cloud, Configuration"
              • Write-Progress now appends to the session log output
              • Added a health check for when the Hangfire server crashes and fails to restart
              • Changed chocolatey actions to no longer use a hardcoded path C:\ProgramData\chocolatey\bin\choco.exe. We now retrieve the path by using Get-Command choco -ErrorAction Stop | select -expand Source. This ensures we can run chocolatey when it is not in installed in the default location (Looking at you SyncroRMM).
              • Deployment filter scripts can now utilize function scripts
              • Added license description field
              • Improved performance of resolving azure group deployments

              Bug Fixes

              • Resolved issue where computers running non-English version of Windows could not run any scripts. This issue also prevented successful identification for those computers.
              • Resolved parameters not being passed to user-context scripts
              • Fixed an issue with boolean deployment parameters not honoring false
              • Fixed an issue with adhoc deployments not using the parameters specified on the page
              • Fixed an issue with sessions showing passed when it should show partial passed
              • Fixed issue where duplicating deployments did not copy over the parameter values
              • Fixed issue with [ctrl-s] saving scripts from the editor
              • Fixed a bug where software from deleted deployments were still showing in the assigned software tab
              • Fixed a bug where the ephemeral agent retry logic was being ignored
              • Fixed an issue with the logs panel failing to stay scrolled to the bottom
              • Fixed an issue where inventory session logs were not showing up correctly
              • Fixed an issue where needs attention actions were showing "unavailable" for the date time
              • Fixed word wrapping on maintenance task parameter text
              • Fixed a bug where deployments targeting "All computers / No Filter" would show "Workstations and portable devices" instead
              • Fixed a bug where uploading files for global maintenance tasks would fail
              • Fixed a bug where schedule and deployment provider specific target data was not loading properly

              0.49.0

              Released 2022-01-11

              Improved Performance

              In this release, codenamed "Cheetah" we achieved a 20x improvement in script execution performance through the use of WebSockets, Named Pipes, and removing code that is no longer necessary since the introduction of the Ephemeral Agent.

              We also made restarting machines faster by using the new event driven Wait-ImmyComputer cmdlet when waiting for computers to reconnect after a reboot.

              Apply on Connect

              Problem to solve

              Computers that are offline never receive maintenance. These computers need a way to update when they miss their maintenance window.

              Solution

              You can now specify the offline behavior for computers on schedules and ad-hoc deployments.

              image

              When offline behavior is set to Apply On Connect, a session will get marked as image when the device is offline. When the device comes online, the session will resume.

              image

              Since devices can come online at anytime, the option to Suppress Reboots During Business Hours is checked by default.

              If a device is offline before the detection stage, then it will run the detection stage when it comes online.

              If a device is offline before the execution stage, then it will only run the execution stage when it comes online. It will not re-run detection.

              Maintenance emails are only sent out once regardless if the device goes offline.

              Timeline

              On the computer details overview tab, there is now a section called Timeline that shows particular events that have occurred for the computer.

              image

              The events we are currently showing are:

              1. Agent disconnected
              2. Agent connected
              3. Maintenance action started (only shows if the action required execution)
              4. Maintenance action completed (only shows if the action required execution)

              More events will be added in the future.

              Other Improvements

              • Improved performance of determining desired state of deployments during maintenance
              • Improved performance of some update queries
              • Added a new metascript cmdlet Wait-ImmyComputer that returns as soon as a computer has connectivity
              • Added & Updated Ephemeral Agent connection statistics in 'System Status' page to report data/data-rate metrics about the underlying Ephemeral Agent connection to the backend

              Bug Fixes

              • Fixed an issue where software download scripts were timing out after 60 seconds if the script didn't specify its own timeout
              • Fixed an issue where changes made to a configuration task parameters from the software page were not saving
              • Fixed issues displaying incorrect text in the target type column on the deployment and schedule list pages
              • Fixed a bug where you could not remove a software download script
              • Fixed a bug with Add-UriQueryParameter where it did not accept array values or parse existing parameters
              • Fixed an issue with Ephemeral Agent "end-of-stream" response exceptions resulting in termination of stage
              • Fixed various issues with agent connection events and improved performance
              • Fixed an issue where immy agent registrations could cause resource depletion in the backend's IoT service
              • Fixed the timezone selector to show the region to differentiate the options
              • Fixed a bug where dynamic versions could depend on itself and cause an infinite loop

              Releases in 2021

              Go to 2021 releases

              + \ No newline at end of file diff --git a/releases.html b/releases.html index 9f6a5532..652022ba 100644 --- a/releases.html +++ b/releases.html @@ -5,45 +5,45 @@ Releases | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

              .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

              Please see the FAQ section for more details

              Releases

              0.65.5

              Released 07/21/24

              Bug Fixes

              • Fixed an issue where recommended deployments were not resolving for maintenance sessions

              0.65.4

              Released 07/30/24

              Improvements

              • You can now change the User Override for all parameters of an onboarding Deployment with a single click
              • More excludable capabilities have been added to the integration details page
              • The properties "Manufacturer" and "Model" have been added to the Computers Report
              • OAuth tokens are now refreshed every 24 hours instead of 89 days.
              • The function script cache is now busted automatically when you interactively run a script from the debugger. The cache is also busted when you interactively run a maintenance session.

              Bug Fixes

              • Fixed an issue where software install prerequisites would fail because the parent's parameters were incorrectly being passed to its prerequisites.
              • Fixed an issue with ConnectWise ScreenConnect 24.2 not being able to open remote sessions.
              • Fixed an issue where some devices arriving in Immy with no Win32_ComputerSystemProduct in the registry will fail to identify, resulting in an JsonReaderException: Unexpected character encountered while parsing value: {. Path 'DeviceId' error.
              • Fixed some potential slow memory leaks that cause high memory after several days of uptime
              • Fixed an issue where debugging scripts for software linked to an integration would throw the error "An integration is not linked to this script..."

              0.65.3

              Released 07/15/24

              Bug Fixes

              • Fixed an issue where variables such as $TenantId were not available from within a dynamicparam block
              • Fixed an issue where calls to Connect-ImmyAzureAD would fail because the base command Connect-AzureAD was not recognized
              • Fixed an issue where dropdown parameters that used Hashtable or PSObject values would not work correctly from within a session
              • Fixed an issue where clicking "Clear Output" in the script editor would not always clear the first line of output
              • Fixed an issue with the Configure Directory and Directory Migration tasks where they would get stuck parsing the parameters at runtime.

              0.65.2

              Released 07/08/24

              Bug Fixes

              • Fixed an issue with utilizing the Azure cmdlets from within a dynamic param block where it would fail with the error message "No tenant was specified for this script".

              0.65.1

              Released 07/05/24

              Bug Fixes

              • Fixed an issue with some onboarding tasks not showing all of the parameters on the onboarding form unless you manually hit the refresh button
              • Fixed an issue with CW Automate where agents were not being synced

              0.65.0

              Released 07/02/24

              Metascript Improvements

              Fixed a bug where dropdown attributes, e.g. [Dropdown({@{Option1=1; Option2=2}})], were incorrectly stripping the leading and trailing braces {...}

              powershell
              param(
              +    
              Skip to content

              ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

              .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

              Please see the FAQ section for more details

              Releases

              0.65.5

              Released 07/21/24

              Bug Fixes

              • Fixed an issue where recommended deployments were not resolving for maintenance sessions

              0.65.4

              Released 07/30/24

              Improvements

              • You can now change the User Override for all parameters of an onboarding Deployment with a single click
              • More excludable capabilities have been added to the integration details page
              • The properties "Manufacturer" and "Model" have been added to the Computers Report
              • OAuth tokens are now refreshed every 24 hours instead of 89 days.
              • The function script cache is now busted automatically when you interactively run a script from the debugger. The cache is also busted when you interactively run a maintenance session.

              Bug Fixes

              • Fixed an issue where software install prerequisites would fail because the parent's parameters were incorrectly being passed to its prerequisites.
              • Fixed an issue with ConnectWise ScreenConnect 24.2 not being able to open remote sessions.
              • Fixed an issue where some devices arriving in Immy with no Win32_ComputerSystemProduct in the registry will fail to identify, resulting in an JsonReaderException: Unexpected character encountered while parsing value: {. Path 'DeviceId' error.
              • Fixed some potential slow memory leaks that cause high memory after several days of uptime
              • Fixed an issue where debugging scripts for software linked to an integration would throw the error "An integration is not linked to this script..."

              0.65.3

              Released 07/15/24

              Bug Fixes

              • Fixed an issue where variables such as $TenantId were not available from within a dynamicparam block
              • Fixed an issue where calls to Connect-ImmyAzureAD would fail because the base command Connect-AzureAD was not recognized
              • Fixed an issue where dropdown parameters that used Hashtable or PSObject values would not work correctly from within a session
              • Fixed an issue where clicking "Clear Output" in the script editor would not always clear the first line of output
              • Fixed an issue with the Configure Directory and Directory Migration tasks where they would get stuck parsing the parameters at runtime.

              0.65.2

              Released 07/08/24

              Bug Fixes

              • Fixed an issue with utilizing the Azure cmdlets from within a dynamic param block where it would fail with the error message "No tenant was specified for this script".

              0.65.1

              Released 07/05/24

              Bug Fixes

              • Fixed an issue with some onboarding tasks not showing all of the parameters on the onboarding form unless you manually hit the refresh button
              • Fixed an issue with CW Automate where agents were not being synced

              0.65.0

              Released 07/02/24

              Metascript Improvements

              Fixed a bug where dropdown attributes, e.g. [Dropdown({@{Option1=1; Option2=2}})], were incorrectly stripping the leading and trailing braces {...}

              powershell
              param(
                 [Dropdown({@{Option1=1; Option2=2}})]
                 $DropdownParam
                )

              would not work but the following would

              powershell
              param(
              @@ -102,7 +102,7 @@
               Write-Host "Waiting for Hook"
               $Hook | Wait-ImmyWebHook
               Write-Host "Got WebHook!"

              Atomic and Cache Cmdlets

              Added 3 new Cmdlets, Set-CacheKeyExpiration , Invoke-CommandCached, and Invoke-AtomicCommand

              image

              image

              image

              Other Improvements

              • Error text for deployment parameters now show as markdown
              • Added Completion for Attribute parameters
              • Immy-specific core types no longer tab complete to lowercase
              • Immy-specific Attributes like DropdownAttribute and OAuthConsentAttribute no longer tab-complete to include "Attribute"
              • Remote control can now automatically reconnect after logging off a Windows user or rebooting the computer.
              • Improved performance of loading maintenance sessions with hundreds of actions
              • Added a background service that periodically checks for online computers that have pending connectivity sessions and runs them
              • Get-Hash cmdlet now supports an additional AsHex switch to get a hexadecimal output.
              • Prevented recurring inventory jobs from retrying to connect an ephemeral agent more than once so we can quickly move on to the next computer needing inventory
              • You can now target provider client groups (e.g. CW Manage Agreement Products) with cloud tasks
              • Reduced memory footprint of some session related data
              • Added an Agents tab to the Integration Details Page if the integration supports listing agents.
              • Saving a script in the script editor now shows a loading icon in the tab and disables the buttons to prevent multiple requests
              • You can now link ImmyBot tenants to Azure tenants (including partner tenants) from the Tenant Edit page
              • You can now have multiple MSP tenants
              • ImmyBot tenants can be upgraded to MSP tenants from the Tenant Edit page
              • The software dropdown on the license details page is now limited to software that support licenses
              • Added text to the maintenance ordering page that explains that onboarding actions will always be executed at the beginning of the session in the order that they are listed.
              • Added a log interceptor that can be used for dynamic and built-in integrations to log method calls
              • Implemented ISupportsAgentUninstallToken and Get-IntegrationAgentUninstallToken (for SentinelOne) and removed the need for specifying the clientid

              Bug Fixes

              • Fixed issue where Computers running ImmyAgent < 0.51.0 and no other agents failed to establish an Ephemeral connection.
              • Fixed an issue where a session would fail with "Uncaught exception running maintenance session. Computer does not have any enabled agents that support running scripts"
              • Fixed an issue where updating a schedule would bring you back to the computer list page
              • Added some additional logging around the Immy Agent when attempting to establish an ephemeral agent connection
              • Fixed possible errors that could occur after an IoT Hub has been removed
              • Fixed an issue where exporting to Excel from dashboard would fail if there are multiple maintenance items with the same name
              • Fixed a bug where GDAP Customer would incorrectly show up as a warning in certain circumstances, causing confusion consenting as GDAP Azure Customers
              • Fixed an issue where Automate patches were being performed on action reruns
              • Fixed an issue where Automate patches were not being performed during manual onboarding
              • Fixed an issue where there was one non-dismissible notification for a recommended deployment
              • Fixed an issue where the Provider Audit table would cause an IAsyncEnumerableReader error to be thrown.
              • Fixed a potential script deadlock issue when using Invoke-CommandCached
              • Fixed an issue where the ExtraData property from an IProvider was inaccessible.
              • Fixed an issue where some dynamic form bind errors were not showing in the script editor
              • Fixed an issue with persons selected to be notified on onboarding screen not showing up
              • Fixed an issue updating tenant slugs on the tenant list page
              • Fixed an issue where licenses were failing to be updated
              • Fixed an issue where versions listed on the software details page were not sorting by version correctly
              • Fixed an issue with ImmyAgent EXE installers being corrupted during download.
              • Fixed an issue where integrations would sometimes become unhealthy on startup with "The JSON value could not be converted to System.Boolean...`
              • The "More Actions" link on global software is now hidden for non-immybot-core users since no actions can be taken
              • Fixed an issue on the dashboard table where the company column was not sorting or filtering
              • Fixed an issue where users could update/delete the ImmyAgent integration which could potentially cause issues
              • Fixed an ordering issue on the deployment page where the cross-tenant tag target type was showing a lower priority than integration target types
              • Fixed a wrapping issue with the new integration page
              • Fixed an issue where non-msp users could not see their tenant's filter script deployments
              • Made Get-ImmyAzureAuthHeader cmdlet respect the app registration that the customer was consented with
              • Fixed an issue where computers show licensed even when they haven't had maint in the current usage period

              0.57.6

              Released 08-10-23

              Improvements

              • Implemented new Get-CwControlFields cmdlet

                image

              • Added a new Get-OTP cmdlet, capable of creating TOTP & HOTP codes.

                image

              • The script that downloads and starts the ephemeral agent script now uses an absolute path for PowerShell. %systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe

              • Optimized the code responsible for syncing agents from integrations

              Bug Fixes

              • Fixed an issue where array values specified in the script editor parameters pane were not getting passed to the script
              • Fixed an issue where reran actions may have contained incorrect information from another action
              • Fixed an issue where rerunning a session after rerunning an action would cause the new session to only perform the reran action
              • Fixed an issue where ImmyBot would show offline when you did not have access to login

              0.57.5

              Released 08-08-23

              Bug Fixes

              • Fixed a bug introduced in 0.57.4 where the default value for CW Control's Custom Property Client Name and Secondary Index fields had the wrong values
              • Fixed an issue with new instances having a disabled / non-working ImmyBot integration

              0.57.4

              Released 08-07-23

              Improvements

              • Started work on improving performance of computer and tenant deletions. More improvements to come.
              • In the global script editor, scripts with param blocks will now only have the parameters auto-binded when the script has been newly opened instead of when it was focused.
              • Fixed a bug where undefined would sometimes show up as an error in the global script editor output.
              • Eliminated 2-step Verify/Create on Integrations
              • Updated the error message you get when you attempt to create a deployment for software that does not have a version to deploy. "There are no available versions for this software. The software must have a static version, a dynamic version script, or be linked to software from an alternate provider such as Ninite or Chocolatey in order to be installed."
              • Made New-Parameter -Position nullable and not default to 0 to prevent parameter binding error "Cannot bind positional parameters because no names were given."
              • The ephemeral agent exe now has the correct version where before it would always have 0.0.1
              • Moved Remote Control feature to the top of the Preference Page for better visibility
              • Package Analyzer will fallback to use FileVersion if ProductVersion is missing on EXE installers.
              • Package Analyzer will now return relative path to installer nested multiple directories inside of a ZIP archive. For example, a package bundled like (MyInstallerPackage.zip) => [MyInstallerPackage] -> [InnerFolder] -> Setup.exe will return InnerFolder\Setup.exe as the FileName instead of Setup.exe
              • Package Analyzer will now fallback to a list of known-good DNS servers for downloading binary. This should help alleviate issues for a few customers where Azure's default DNS fails to resolve the address. Errors stemming from downloading issues will additionally contain a DNS Audit trail. Package Analyzer download speed has been improved by up to 50%, reducing time waiting for analysis.

              Bug Fixes

              • Fixed a NullReferenceException when no response was received from InvokeCWARestMethod
              • Fixes an issue where the computer was not showing the active session tag for all computers that had one
              • Fixed an issue where Cloud Tasks were failing because pre-flight script were trying to run
              • Remote Control: Fixed an issue where some special characters would cause "Type Clipboard" function to fail.
              • Fixed a bug with Package Analyzer which caused it to fail to analyze some installers where the server inappropriately returned a quoted filename.
              • Fixed an issue with Package Analyzer failing to extrapolate filename (if one wasn't provided) from the download URL if the server didn't return a content-disposition header.

              0.57.3

              Released 07-14-23

              Improvements

              • Optimized the load time of the Computer List page

              Bug Fixes

              • Fixed an issue where an ephemeral agent would disconnect after attempting to run a user script without a logged-on user

              0.57.2

              Released 07-11-23

              Bug Fixes

              • Limited Support Technician access to members of the Immense Entra ID with the Immy Support Technician role

              0.57.1

              Released 06-30-23

              Fixed an issue for new instances deployed without an IoTHub being unable to install Immy Agents.

              0.57.0

              Released 06-29-23

              Agent Delivery - Whitelist cdn.immy.bot

              Make sure to whitelist cdn.immy.bot in your endpoint protection tools.

              The ImmyBot Agent and the Ephemeral Agent are now served from a Cloudflare CDN at https://cdn.immy.bot

              ImmyBot Remote Control (Remotely) - BETA

              Initial support for remote control is here!

              The newest version of the ImmyBot Agent will support the ability to establish remote control sessions.

              Remote control can be established by clicking the "Open Remote Session" dropdown and then clicking the "ImmyBot Agent" option.

              image

              You can also select the initial Windows session within which to start remote control.

              Task Deprecation & Supersedence

              Old tasks can now be deprecated in favor of newer tasks.

              You can deprecate a task by supply a "Superseded By" task on the task form. You can additionally supply a parameter migration script that will migrate the parameters specified by the deprecated deployment to the parameters of the superseding one.

              image

              Schedule using the computer's timezone and Active Hours

              The schedule details page has been cleaned up and re-organized for easier understanding.

              We are introducing two new ways to schedule execution against a computer.

              1. Use the computer's timezone for execution

                A common complaint is that it is hard to schedule maintenance for a group of computers that are all in different timezones. Another complaint is that scheduling maintenance against laptops for people who travel is difficult because they are constantly changing timezones.

                You now have the option to schedule maintenance at a particular time according to the timezone specified by the computer.

              2. Start execution after active hours if available

                For computers that are running Windows 10+, you can opt into using the Active Hours specified by the computer instead of executing at the specified time on the schedule.

                For now, if active hours are used, execution will be scheduled in the middle of non-active hours. e.g. If active hours ends at 1pm and starts again at 10pm, we will schedule execution at 5pm.

              Active Hours as Business Hours

              When active hours are used to schedule maintenance for a computer, checks against business hours will resolve to active hours. This is necessary because we don't want to accidentally reboot the computer when in use, when "Suppress Reboots During Business Hours" is checked on the schedule.

              Both "Use computer's timezone for execution", and "Start execution after active hours if available" are available for use on the deployment details page as well.

              Pending Ephemeral Agent Session Status

              A new session status has been added called Pending Ephemeral Agent Session.

              Anytime during a maintenance session, if we fail to establish an ephemeral agent, the session will go into Pending Ephemeral Agent Session. The action it was performing when the failure occurred will not be failed so that it can resume when the ephemeral agent is finally connected. A background service will continually attempt to establish an ephemeral agent on sessions that are marked with this status.

              With this change, we were able to remove the Script Execution Circuit Breaker that has not proved to be very useful.

              Terminating Exceptions

              System scripts will now throw terminating exceptions if we fail to establish an ephemeral agent or an actual terminating exception was thrown in the script.

              Metascripts will also now throw terminating exceptions when an ephemeral agent fails to establish when using Invoke-ImmyCommand. You must now explicitly use a try/catch in order to prevent the terminating exception from ending the script.

              This behavior will prevent software and tasks from continuing script execution in the event of a terminating exception, which will prevent false-positive results and report better errors.

              User Script Terminating Exceptions

              When running Invoke-ImmyCommand -Context "User", an additional parameter will be available called TerminateFromNoLoggedOnUser. When set, the script with throw a terminating exception when there is no logged on user. By default, user scripts will not throw a terminating exception when there is no logged on user.

              Made pending-connectivity session triggering more robust

              • Removed some event handling from pending connectivity service since the session finished event is not emitted in all circumstances
              • Reduced different entrypoints to starting a session to improve consistency and reliability
              • Added logic to check for and start the first pending connectivity session in the queue when any session finishes (both pass and fail) directly from the Immy Service Job

              Session Preflight Scripts

              A new script category has been added called "Preflight". Preflight scripts run after an ephemeral agent is established and before we attempt to run any other script against a computer. If the preflight scripts do not return any exceptions, then preflight is consider "passed" and scripts can be executed as normal. Otherwise, if any preflight script fails, script execution will not be allowed against a computer.

              The major reason we added preflight scripts was to detect whether a computer is currently applying windows updates. Agents can report online and connected while windows updates are applying. However, it's possible that certain actions will not perform successfully while the computer is applying those updates. If we attempt to start or resume a session while windows updates are applying, we run the risk of rebooting the computer during an update and potentially bricking it.

              The first global preflight script that has been added will check if the computer is currently applying windows updates and will throw an exception if it is, preventing script execution on the computer until windows updates are completed.

              Pending Preflight Session Status

              A new session status has been added called "Pending Preflight". When a preflight script fails during a session, the session will go into "Pending Preflight". The action that was actively being performed when the preflight script failed will not failed so that it can be resumed when the computer passes preflight. A background service will continually attempt to run preflight against a computer until it passes. Once preflight passes, the session will continue.

              Built-In ImmyBot Agent Software

              Before 0.57.0, we had hardcoded an action to perform the ImmyBot Agent update, which resulted in a lot of failures.

              The built-in agent update now utilizes the ImmyBot Agent software located in the global repository.

              Before

              image

              After

              image

              Prepared removal of Azure IotHub for the ImmyBot Agent

              The 0.57.0 ImmyBot agent introduces a new method of establishing a connection to the backend using WebSockets.

              With this approach, we will be able to remove dependency upon the Azure IoT Hub and provide a more reliable connection to devices.

              Other Improvements

              • Added license icons on computers to indicate which ones are actively being counted towards the license count for the month.
              • For instances on Immy Standard, we added a checkbox on the computer list page that allows you to filter to only computers that are licensed
              • Added fallback for tls when using Download-FileToFolder
              • The .dlls extracted from the ImmyBot Agent and Ephemeral Agent executable are now signed, which should make whitelisting by our certificate in A/V tools easier.
              • Improved the readability of the billing page
              • Renamed Get-Hash to Get-KeyedHash as it only supported keyed hashes like HMACMD5, HMACSHA1, HMACSHA256, HMACSHA384, and HMACSHA512
              • Implemented Get-Hash for non-Keyed algorithms like MD5, SHA1, SHA256, SHA384, and SHA512
              • The "Update agent on device" button under the Agents Tab -> ImmyBot agent is clickable even when the computer is offline. It will put the session in pending connectivity and update when the computer comes back online.
              • For ImmyBot Agents version 0.57.0 and above, the version is now displayed on the Agents tab.
              • C:\Program Files (x86)\ImmyBot\Immybot.Agent.exe now contains the correct file version
              • ImmyBot Remote Control and Require Consent For External Session Provider tenant preferences now have a tri-state value. They can be enabled, disabled, or use the application default value.
              • Actions can now be sorted by the date/time execution started
              • ImmyAgent binaries now show correct version
              • Added a tenant preference to enable/disable the User Affinity Sync

              Bug Fixes

              • Fixed an issue where commands and output from the computer terminal and the script editor were showing up in both
              • Fixed an issue where creating a new filter script or metascript from the deployment page was selecting the wrong execution context
              • Fixed another issue that was causing the azure user sync to sometimes fail
              • Fixed an issue with schedules not being able to update when they are using a deleted filter script
              • Fixed an issue where failing to refresh an agent's online status could cause detection to fail
              • Fixed a potential bug that could occur when script-output recovery would happen, that would cause a false Recovery is not possible error to be thrown.
              • Fixed issue where running a User-context script w/o a logged on user would cause throw $args[0]; # If you can see this, report it to the ImmyBot Dev Team. to be displayed in powershell output.
              • Fixed an issue with Update If Found deployments for software with a test script incorrectly running the test script even when the software was not found
              • Fixed some theme color issues with table column choosers and filters
              • Cleaned up action error messages when a test or get script failed.
              • Fixed an issue where the session would not go to pending connectivity when the AgentsOfflineException would be thrown but a provider agent is incorrectly reporting online still.
              • Fixed an exception that was occurring when duplicating some global maintenance tasks
              • Fixed an issue preventing the azure sync from running
              • Fixed an issue with PowerShell returning System.Type arrays causing out of memeory exceptions
              • Fixed instance of inventory json parsing exceptions causing sessions to fail hard
              • Fixed an issue with publishing the agent as a single file

              0.56.5

              Released 2023-05-11

              Improvements

              • Made it more obvious when actions are skipped because reboots are suppressed and the action's software requires a reboot
              • Removed the hardcoded "Uninstall by Package Info" logic from software uninstall steps since it could cause unexpected reboots
              • Updated the description of the tenant Onboarding Patching preference to indicate that it currently only applies to CW Automate
              • Added PowerShell Version to computer overview tab

              Bug Fixes

              • Added missing logs around reboot checks
              • Fixed a XSS vulnerability found in param block descriptions
              • Fixed an issue where GDAP customers that need consent would show up as consented when they had previously been synced as a non-GDAP customer
              • Fixed an issue with quick deploy where it would sometimes not kick off the session
              • Fixed an issue where dynamic form errors were not clearing upon refresh
              • Fixed issue where the url in a cloud session's support request was incorrect

              0.56.4

              Released 2023-05-08

              Bug Fixes

              • Fixed an issue where duplicating a task would not copy over all data
              • Fixed an issue that sometimes prevented the onboarding task forms from loading
              • Fixed an issue where scripts with the category "Filter Script Deployment Target" and "Metascript Deployment Target" were not automatically selecting the correct execution context
              • Fixed an issue where some actions would have incorrect parameters or variables when multiple sessions executed the script at the same time

              0.56.3

              Released 2023-05-04

              Improvements

              • Added a note to the ImmyBot Agent installer modal indicating that there's an issue on Windows 11 22h2 builds that prevent the PPKG from working and added notes on how to resolve it.

              Bug Fixes

              • Added missed user auditing to certain software, task, and deployment operations
              • Fixed an issue with assigning tags while creating a new tenant
              • Fixed an issue where schedules targeting a specific maintenance item were picking up onboarding only deployments
              • Fixed an issue where some macOS agents were not being excluded
              • Fixed an issue where navigating to a computer that did not exist threw a non-404 unexpected error
              • Fixed an issue with schedules targeting CW Control groups not being limited to the specified tenant on the schedule
              • Fixed an issue with sessions failing when attempting to retrieve bulk software and the bulk software response contains text that is not representable as valid UTF-8

              0.56.2

              Released 2023-04-27

              Improvements

              • Updated the alert on the schedule details page when targeting a specific item to state, "Metascript deployment targets are not supported when the schedule is limited to a specific maintenance item because it would require executing a script against every computer in the system."
              • Azure User Sync now excludes external users
              • Renamed the "All" tab to "Active" on the computer list page to avoid confusion. "All" implies it should contain "Pending" agents, which it does not.

              Bug Fixes

              • Fixed an issue where new instances would not be able to use immy agent provider
              • Fixed an issue where some business hours were not being computed correctly and the session incorrectly reported that we were within business hours
              • Fixed an issue with the computer terminal not maintaining execution when toggling between tabs
              • Fixed bug where exceptions that occur while resolving Cw Control remote screen share URLs caused the maintenance session page to not load any data
              • Software Post Uninstall phase is now only shown when the software or version has a post uninstall script

              0.56.1

              Released 2023-04-24

              Improvements

              • When an agent is identified to a computer that already exists in ImmyBot, we will now automatically select the "Wiped" option if the computer name and OS install date reported by the agent are different than what is reported by the existing computer.
              • The ephemeral agent no longer extracts to c:/windows/temp. This alleviates issues around A/V blocking .dlls coming from the temp directory, and also alleviates issues around windows randomly removing required .dlls for the ephemeral agent to run.
              • Updated the identification log text that explains why a manual decision is required
              • Added the manufacturer name and serial number of an agent in the agent identification logs when resolving a trusted manufacturer
              • Added ability to group by target on the deployment list

              Bug Fixes

              • Fixed issue with tenant tags not resolving deployments
              • Fixed issue where cancelling sessions would sometimes cause session to retry some number of times
              • Fixed an issue causing new instances immy agent integration to not be properly initialized
              • Fixed a bug where alternate providers were not getting disabled when dynamic versions are selected
              • Fixed an internal issue where Immy Support Technicians were not allowed access due to existing expired access requests
              • Fixed an issue where a pending agent that has the same trusted manufacturer and serial number as an existing computer would sometimes require a manual decision instead of automatically replacing the existing agent

              0.56.0

              Released 2023-04-17

              Tenant and Person tags

              Support has been added for Person and Tenant tags.

              A tag no longer has a "type". A tag can be assigned to any person, computer, or tenant.

              Deploying a software or maintenance task with a tag target type now resolves computers for the following:

              1. computers that have the tag
              2. computers for tenants that have the tag
              3. primary computers for people who have the tag

              Deploying a cloud task can now target tags assigned to tenants, as well as integrations that support client groups.

              Now that tags can target tenants, you can create a schedule that targets tags to run a single schedule across multiple tenants.

              Tags for tenants can be assigned on the tenant list and tenant details pages.

              Tags for persons can be assigned on the person list and person details pages.

              ImmyBot Session Support Requests

              You can now request support from Immy technicians from maintenance sessions. When requesting support, you can:

              • Add details about the issue you are experiencing
              • Select whether an Immy technician should be allowed to access your instance
                • If selected, there is no need to approve an access request for the Immy tech to log into your instance
                • You can disable Immy technician access at any time from the Application Preferences page
              • Select whether the session's logs and computer timeline events should be available in the support ticket
                • The logs / timeline events are formatted as a text file and stored in your instance's blob storage account, and a link to download this file is added to the support ticket
                • You can also download this file before submitting the ticket

              Global Script Editor

              Below are some of the new features in the script editor!

              • General VS Code "vibe"
              • Open/Close multiple scripts(tabs)
              • Go To Definition support for function scripts
              • Script Search and Directory Views with result highlighting
              • Variable preview based on script execution context, category, and a selected target (computer, tenant, task, software).
              • Parameter Form for scripts with param blocks, selected software that have configuration tasks, and selected maintenance tasks that have parameters
              • Closing a script tab with unsaved changes alerts you
              • Function name/definition view that shows the results of Get-Help {functionName} -Detailed | Out-String
              • Basic hotkey support

              image

              image

              image

              image

              You can access the script editor from the top navbar or in the sidebar under Library -> Script Editor

              image

              image

              Parameter Value View

              Sometimes deployment parameters result in an exception when performing the binding. This can happens when the parameter types have been updated but the values have not.

              You can now toggle the parameter form to a value view that provides you the ability to remove/reset values that may be causing issues.

              image

              Tenant Software

              The Tenant Details Page now has a Software tab that displays a grid of software that was detected on endpoint machines and could be matched to software in the global database. The result set is grouped by global software name/ID and sorted descending by total installs (i.e. number of devices that have it installed). Each group has a Deploy button, which will open a new deployment for the software that targets all computers under that tenant.

              image

              Other Improvements

              • On the Deployment List Page, tenants with missing or deleted tenants will show Tenant no-longer exists under tenant column and the entire row will be highlighted red.
              • The current ImmyBot agent version is now shown on the frontend in the installer modal and in the sidebar's ImmyBot Agent Download box.
              • Added the ImmyBot version in a session log at the start of a session. This will be useful when debugging session-related issues since we can correlate the problems to the version ImmyBot was on when the session ran.
              • You can now install the ImmyBot Script Editor as a progressive web app.
              • Cleaned up some of the error messages returned by integrations
              • Fixed issues with tag deployments not getting applied during an onboarding session
              • System scripts that use param blocks will now through an error letting users known that param blocks are only available in metascript and cloudscript contexts.
              • Maintenance tasks can now specify function scripts
              • Added a session log when attempting to apply a windows patch since there are currently none
              • Added a check for whether the computer is online before attempting to apply windows patches
              • Get-Hash now supports HMACMD5, HMACSHA256, HMACSHA384, and HMACSHA512
              • Added back session list "Completed" count and filter and removed "All"
              • Added internal auditing tables for scripts, software, tasks, and deployments. The future plan is to expose an audit trail for these objects so you can see who made changes and when they were made, with the ability to revert changes.
              • Moved the tenant tag selector to the edit tab. The tags now show inline next to the tenant's name
              • Made session log database handler more efficient by breaking large updates into smaller queries
              • Reduced likelihood of CW Control Integration failing to sync devices.
              • The deployment page no longer hangs when attempting to preview/deploy to a large number of computers
              • Improved Package Analyzer to handle improper/malformed content-disposition header returned from some file servers, which resulted in a failure to analyze a package.
              • Expired users can now be un-expired from the edit user form
              • Wait-ImmyComputer (and therefor Restart-ComputerAndWait) has been improved with a new RebootWithPollingFallback option that should help alleviate issues with ImmyBot not detecting when a machine has been rebooted and now back online. This option will periodically poll providers/integrations about machine connectivity status if they haven't reported target machine as online after an expected WaitForEventTimeout period.
              • You can now define multiple functions in a Module script and import them into other scripts using Import-Module
              • Maintenance task get/test can now create child actions during detection using the new cmdlet Add-ImmyMaintenanceActionChild

              Bug Fixes

              • Fixed an exception in the Sync Azure Users Job that was preventing some person entities from being deleted
              • Fixed a bug where integrations would all become unhealthy until ImmyBot restarts when one provider failed to initialize in a timely fashion
              • Fixed an issue where a specific unrecoverable ephemeral agent exception was being suppressed
              • Fixed an issue with postpone button from scheduled maintenance emails not actually postponing the session in some circumstances
              • Fixed unnecessary logging of an exception when an Ephemeral Agent Session was disposed correctly
              • Fixed an internal exception with ephemeral agent sessions where we were failing to dispose of the connection timeout callback
              • Fixed issue with instances that have large session logs tables having poor database performance and dropping session logs
              • Fixed issue with logs displayed on maintenance sessions occasionally showing up unsorted-by-timestamp
              • Fixed an issue that was allowing a device to sleep when the ephemeral is connected
              • Potentially fixed an issue where sessions would get stuck in the running status after the backend restarted
              • Fixed an issue where tasks marked to be ignored would show as compliant instead of ignored on the maintenance session's action list
              • Resolve potential bug with ImmyAgent causing IoTHub issues
              • Fixed browser warnings about using variable names starting with $ or _ in setup()
              • Restart-ComputerAndWait now will show agent timeline events in correct order
              • Fixed issue with gdap customers not showing up when azure permission level is reset from custom to default and custom didn't have correct permissions
              • Fixed an issue with media missing the base url
              • Fixed an issue where software deployments don't report download failures correctly and will continue on.
              • Fixed an issue where quick deploying software would not also deploy the configuration task if it had one
              • Fixed $using variables on single line scripts
              • Fixed an issue where the cross tenant deployment grooup was not sorted at the top of the deployment list page
              • Delete existing UserAffinities when new user is set to prevent reverting to old user

              0.55.13

              Released 2023-04-03

              Bug Fixes

              • Fixed a regression in 0.55.12 where some business hours checks would report within business hours but the computer would still be rebooted

              0.55.12

              Released 2023-03-31

              Improvements

              • Added timespan parameter -AgentConnectionWaitTimeout to Invoke-ImmyCommand so you can override the default 5 minute wait time.

              Bug Fixes

              • Fixed an issue where some session logs were failing to save due to issues sanitizing a script's param block
              • Fixed an issue where deployments targeting an Azure Group were not applying when the computer's primary user was set during the onboarding stage
              • Fixed an issue where executing quick deployments against computers needing onboarding would incorrectly trigger the onboarding stage
              • Fixed an issue with the onboarding form's assignment links not bringing users to the specified assignment
              • Fixed an issue where reboots were occurring during business hours than spanned over to the following day. e.g 9am - 4am
              • Fixed an issue where the Primary User task was running after Set Computer Name and Domain Join. This was causing computers to not get the correct name when the computer is named after the primary user.
              • Fixed a long-standing issue where Immy PPKGs wouldn't reliably disable sleep/hibernation when the option was checked on some computers. This has been improved.

              0.55.11

              Released 2023-03-22

              Bug Fixes

              • Fixed issues with the websocket connection randomly disconnecting when adhoc deploying to a large number of computers
              • Fixed an issue with PowerShell Editor Services continually starting and stopping

              0.55.10

              Released 2023-03-21

              Bug Fixes

              • Fixed an issue where adhoc deployed sessions would go over the session limit and cause performance issues
              • Fixed an issue in the ImmyBot Agent that would cause devices to rapidly send connected messages to the IoTHub, depleting the quota and preventing new devices from registering

              0.55.9

              Released 2023-03-16

              Improvements

              • Using the [Person()] attribute on param block parameters now takes into account the selected tenant on the deployment form and only shows people belonging to the selected tenant.
              • The computer list page now supports the following query parameters: filter and includeDisconnected. This can be used to filter the computer list e.g demo.immy.bot/computers?filter=desktop-R2D2&includeDisconnected=true

              Bug Fixes

              • Fixed an issue with hashtable parameter values not working when provided from the deployment
              • Fixed an issue with the CW Control device sync

              0.55.8

              Released 2023-03-15

              Improvements

              • Improved performance of syncing devices from all integrations. Automate in particular was failing to sync device updates (online/offline statuses).

              Bug Fixes

              • Fixed a WebSocket exception where we were attempting to close the WebSocket after it was already closed

              0.55.7

              Released 2023-03-14

              Improvements

              • Parameters for "Not Present" deployments now show up on the deployment edit page.
              • Removed 100 and 1000 page sizes from all tables for performance reasons

              Bug Fixes

              • Fixed an issue in the azure sync users job that was causing it to fail
              • Fixed more issues with the ephemeral agent getting locked up
              • Fixed an issue where agent disconnect events would show duplicated in the timeline events table
              • Fixed an issue where computers would be moved to needs-onboarding after a new agent connects for an existing online computer
              • Fixed issue where newly-installed immy agents would not result in new computers in ImmyBot under some circumstances

              0.55.6

              Released 2023-03-08

              Improvements

              • Improved performance of searching the main computer list
              • Added a button near maintenance task parameters to copy the parameters as a script param block string. Useful in converting a task to use a script param block

              Bug Fixes

              • Fixed an issue where identification logs would sometimes not be sorted by date.
              • Fixed an issue where we were not considering case-insensitive serial numbers for trusted manufacturers
              • Made non-admins able to delete their tenant's computers
              • Made non-admins able to add and remove tags from their tenant's computers
              • Fixed an exception that was occurring where the azure sync was trying to delete people who existed as an Immy user.
              • Fix issue with PowerShell formatting of System.Version

              0.55.5

              Released 2023-02-28

              Improvements

              • Improved performance of session counts on session list page

              Bug Fixes

              • Fixed an exception that was occurring frequently when the ephemeral agent established a websocket connection
              • Fixed an internal error that occurred when we add function scripts to the PowerShell InitialSessionState

              0.55.4

              Released 2023-02-24

              Improvements

              • A new application preference has been added: "Allow Non-Admins and Non-MSP Users to Use Terminal and Edit Scripts"
                • Default: disabled (by default, only MSP Admins will be able to use terminals or edit scripts)
              • Added ephemeral agent details under the Computer Details Page -> Agents tab with the ability to kill the active ephemeral agent

              Bug Fixes

              • The ImmyStarter plan no longer allows maintenance to be run against computers that were added into Immy over 7 days ago.
              • Added "Tags" to the default display set returned from Get-ImmyComputer

              0.55.3

              Released 2023-02-21

              Improvements

              • Syncing azure users now deletes people in Immy that no longer exist in Azure (if the person in Immy has the Azure Object Id set).
              • You can now upload .msp, .appx, .appxbundle, .msix, and .msixbundle installer files!

              Bug Fixes

              • Fixed an issue related to N-Central providers executing scripts on machines

              0.55.2

              Released 2023-02-14

              Improvements

              • Increased the font-weight of heading text in the light theme for better contrast
              • Fixed an issue where some global software and tasks were incorrectly failing due to permission issues.
              • Updated dynamic version scripts to show logs even when it is already cached
              • Removed maintenance task parameter description from onboarding form unless the parameter is being specified
              • Made onboarding task/assignment title bar visible when scrolling down on dynamic parameter panels
              • Added ability to manually refresh dynamic parameters on onboarding form

              Bug Fixes

              • Fixed an issue with loading deployments that targeted people where the deployment wouldn't allow saving
              • Fixed an issue where rerunning a session that contained reran actions would fail unexpectedly
              • Fixed an issue with binding malformed uri parameters

              0.55.1

              Released 2023-02-09

              Improvements

              • Added batch action to maintenance session list to cancel all incomplete sessions.
                • image
              • Improved the performance of the integration client's table. Instances with thousands of clients and tenants should now be able to use this page without running into performance issues.
              • Updated the ImmyBot backend from .net 6 to .net 7

              Bug Fixes

              • Fixed an issue that prevented the maintenance email's reboot now button from rebooting the computer
              • Fixed an issue where some assignments using tags would not be resolved to a computer due to using data from a stale cache
              • Fixed an issue CW Control integration where it was not forcing https:// on the url

              0.55.0

              Released 2023-02-07

              Stale Computers

              A new "Stale" tab has been added to the Computers List page showing devices that have not had a recent agent connection event. By default, the staleness threshold is 30 days. This value can be configured from the System Preferences page.

              image

              This feature can be used to cleanup old computers when you are coming close to the maximum limit for computers.

              Dynamic Maintenance Task Parameters (PowerShell Param Blocks)

              Maintenance task parameters can now be defined dynamically using a script's param() and dynamicparam{} block.

              image

              PowerShell has a robust parameter definition and validation engine. By leveraging it, we give ourselves features like:

              • Parameter Sets
              • Regex Validation
              • Conditional/Dynamic Parameters
              • Dynamic Values
              • Type enforcement

              When deploying Onboarding tasks, you can define which parameters should be visible to the technician, while hiding others or setting their defaults in the Deployment. image

              GDAP Support

              "GDAP Customer Syncing" option has been added to the Azure settings page. Enabling this option does the following:

              • Adds the DelegatedAdminRelationship.Read.All permission to ImmyBot's default app registration, to allow retrieval of your GDAP customers
              • Enables ImmyBot to offer a consent link for each GDAP customer to be synced by ImmyBot

              Please see the GDAP Customer Syncing documentation for usage details.

              Important! If you are using a custom app registration (also known as the CSP App Registration), your app registration must have a Web redirect URI of https://<your-domain>.immy.bot/consent-callback, replacing <your-domain> appropriately. Please see the updated custom app registration docs for details on how to add the redirect URI

              Other Improvements

              • Onboarding only maintenance tasks now have an option to "Ignore during automatic onboarding". This is useful if you have an installer set to automatically onboard the computer and the task requires data that wasn't able to be provided.
              • Improved code around establishing Ephemeral Agent connection & eliminated possible race condition.
              • Prepend an "[ImmyBot User]" tag for the username that displays for remote session started from a supported provider. This makes it clear at a glance who is connected to a machine initiated from an ImmyBot user.
              • Removed the need for executing suspicious-looking encoded powershell for N-Central integration which would trigger some AV alerts while also moderately decreasing latency to start ephemeral agent.
              • When the Immy Agent fails to update during a maintenance session, it will now retry up to 3 times in case it failed due to a transient error
              • You can now assign tags to a computer from its Onboarding form
                • image
              • When we run a script and to establish an ephemeral agent and detect that there are no online agents, we only wait 5 minutes instead of 30 minutes. For integrations like Automate and N-Central and don't support connectivity changed events, a machine would potentially restart so fast the RMM was unaware, therefore we would wait 30 minutes before realizing the machine was actually online.
              • Removed execute and verify progress bars when action is a task monitor, and changed the "detect" progress text to "monitor".
              • Added the ability to change a computer's primary user from the overview page.
              • Improved performance of computer list page when sorting by Date Created
              • Added -IncludeTags switch parameter to Get-ImmyComputer that includes an array of tags containing the tag id and the tag name
              • Added a date input to the dashboard page to optionally return actions that were executed on or after the specified date
              • Added basic health check functionality to all integrations that were missing health checks
              • Added a test suite for the NCentral integration to run in our build pipeline to help reduce bugs
              • Made the main scripts table use server-side pagination to decrease the amount of data initially transferred to the page. Global scripts are now showing over 3MB combined.
              • Added better error messages when we fail to sync users due to permissions issues
              • Improved and simplified some internal logic related to permissions in our Metascript cmdlets

              Bug Fixes

              • Fixed an issue with tag acccess levels not saving the limited tenants selected
              • Fixed an issue with metacript exception handling where any error with the category OperationStopped was being treated as terminating exception
              • Fixed an issue with Uri parameter values being inserted into scripts with type string instead of type Uri
              • Fixed an issue where the software upload analysis result description had the wrong color making it impossible to read
              • Fixed issue on the computer list -> pending tab where massive exceptions were not limited to a reasonable height
              • Fixed issues with SQL queries timing out early than intended Fixed a bug that would prevent users from actually using the N-Central integration with servers that are hosted on a non-standard port.
              • Fixed an issue where the tenant link on a computer's overview page had a bunch of whitespace that could be accidentally clicked.

              0.54.8

              Released 2023-01-17

              Bug Fixes

              • Fixed a potential deadlock that could cause the ephemeral agent to never connect. Potentially isolated to just devices using CW Automate
              • Fixed a potential deadlock in the N-Central integration that could cause Immy to hang up
              • Fixed some frontend issues where a maintenance action's status and reason would not show correctly for certain values
              • Fixed an issue where a terminating exception in a custom download script would get swallowed and allow the install to continue anyway

              Releases in 2022

              Go to 2022 releases

              - + \ No newline at end of file diff --git a/scripts.html b/scripts.html index d4593d60..9cb5ea44 100644 --- a/scripts.html +++ b/scripts.html @@ -5,45 +5,45 @@ Scripting Guide | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              Scripting Guide

              Best Practices

              • Use Ctrl+Shift+F or Ctrl+P in our script editor to find scripts that already do what you want. There is a lot of good logic in the built in function scripts
              • Have a machine you can test on
              • Have a separate machine to test your sanity if you bork your first machine
              • Test by clicking Open Debugger in the logs
                • This gives you all available parameters on the left so you can test the script in its natural context
                • You can quickly revise the script here until it works as expected
                • Saving the script here saves it permanently
              • Don’t hardcode paths to installer or license files, instead rely on $InstallerFile and $LicenseFilePath
              • Don’t hardcode license values or other sensitive information, instead utilize $LicenseValue or a custom parameter
              • Avoid (where possible) installers that have client specfic licenses or customizations built in
                • If a generic installer isn't available (BitDefender) use Dynamic Versions (and potentially a URL parameter) to specify the download URL per customer or perhaps use an API to find the URL for the given customer
                • If the URL requires authentication, use a custom Download script to perform the authenticated download (CrowdStrike/SentinelOne)
              • Don’t repeat yourself. Leverage function scripts to reuse code
              • Include code to verify that the script did what it intended to do
                • For Tasks, implement a “test” script
                • For Software, make sure your Detection method works, and optionally implement a Test script to verify things are in working order
                  • When a software Test script returns $false, ImmyBot will re-install the software.
              • Use Metascripts, especially if your script needs to restart the machine or access APIs like IT Glue and therefore will contain sensitive data like API keys
              • Use throw “The bad thing that happened, what user should do” to prevent cascading failure. That message will be shown to the user in a prominent location so they can take corrective action
              • Tasks have a “test” mechanism that should return $true or $false to indicate compliance

              While it may be cumbersome to write additional logic to verify your work, the reward of knowing exactly how many machines are or are not compliant with your desired state is worth it. Without it, you are flying blind. With it, you know exactly how many machines require additional attention, giving you the opportunity to write better code that handles more edge cases. See the Helper Function section to see how we make your life easier.

              Script Types

              • Software Detection
              • Software Action (Install/Uninstall/Update)
              • Maintenance Task Setter
              • Metascript (Deployment Target)
              • Filter Script (Deployment Target)
              • Device Inventory
              • Function
              • Dynamic Version
              • Download Installer
              • Module
              • Preflight
              • Integration

              Software Detection

              Software Detection scripts are used to determine whether an existing software is present and what version it may be.

              Avoid custom detection scripts where possible. Software with a custom detection script can't be matched to pre-existing inventory data on the machine, making it difficult to report on how many machines have the software already. Further, the "Assignable" software tab won't work since that matches the detection method to existing inventory data. However if your software doesn't create an entry in Add/Remove Programs, you may have no choice but to use a custom detection script. It is important to note that a lot of software creates hidden entries under Add/Remove Programs, ImmyBot inventories these hidden entries, further reducing the need for custom detection scripts.

              When you write your custom detection script, your best bet is to find a exe or dll file under Program Files<software name> or ProgramData<softwarename> that shows the version when you right click on it and go to Properties. To retrieve this version use a script similar to the following:

              powershell
              Get-Command "C:\Program Files*\<softwarename>\mysoftware.exe" -ErrorAction SilentlyContinue | %{ $_.Version.ToString() }

              If there is no exe or dll file containing the version, perhaps there is a .ini, .config, .json or .xml file that contains the installed version.

              If all else fails, you can simply return "1.0" if a file associated to the software exists.

              These scripts must return a string that will cast to a valid System.Version. Returning an actual System.Version will fail. (Although we may correct this in the future) For example

              $version = [String]"1.2.3"
              +    
              Skip to content

              Scripting Guide

              Best Practices

              • Use Ctrl+Shift+F or Ctrl+P in our script editor to find scripts that already do what you want. There is a lot of good logic in the built in function scripts
              • Have a machine you can test on
              • Have a separate machine to test your sanity if you bork your first machine
              • Test by clicking Open Debugger in the logs
                • This gives you all available parameters on the left so you can test the script in its natural context
                • You can quickly revise the script here until it works as expected
                • Saving the script here saves it permanently
              • Don’t hardcode paths to installer or license files, instead rely on $InstallerFile and $LicenseFilePath
              • Don’t hardcode license values or other sensitive information, instead utilize $LicenseValue or a custom parameter
              • Avoid (where possible) installers that have client specfic licenses or customizations built in
                • If a generic installer isn't available (BitDefender) use Dynamic Versions (and potentially a URL parameter) to specify the download URL per customer or perhaps use an API to find the URL for the given customer
                • If the URL requires authentication, use a custom Download script to perform the authenticated download (CrowdStrike/SentinelOne)
              • Don’t repeat yourself. Leverage function scripts to reuse code
              • Include code to verify that the script did what it intended to do
                • For Tasks, implement a “test” script
                • For Software, make sure your Detection method works, and optionally implement a Test script to verify things are in working order
                  • When a software Test script returns $false, ImmyBot will re-install the software.
              • Use Metascripts, especially if your script needs to restart the machine or access APIs like IT Glue and therefore will contain sensitive data like API keys
              • Use throw “The bad thing that happened, what user should do” to prevent cascading failure. That message will be shown to the user in a prominent location so they can take corrective action
              • Tasks have a “test” mechanism that should return $true or $false to indicate compliance

              While it may be cumbersome to write additional logic to verify your work, the reward of knowing exactly how many machines are or are not compliant with your desired state is worth it. Without it, you are flying blind. With it, you know exactly how many machines require additional attention, giving you the opportunity to write better code that handles more edge cases. See the Helper Function section to see how we make your life easier.

              Script Types

              • Software Detection
              • Software Action (Install/Uninstall/Update)
              • Maintenance Task Setter
              • Metascript (Deployment Target)
              • Filter Script (Deployment Target)
              • Device Inventory
              • Function
              • Dynamic Version
              • Download Installer
              • Module
              • Preflight
              • Integration

              Software Detection

              Software Detection scripts are used to determine whether an existing software is present and what version it may be.

              Avoid custom detection scripts where possible. Software with a custom detection script can't be matched to pre-existing inventory data on the machine, making it difficult to report on how many machines have the software already. Further, the "Assignable" software tab won't work since that matches the detection method to existing inventory data. However if your software doesn't create an entry in Add/Remove Programs, you may have no choice but to use a custom detection script. It is important to note that a lot of software creates hidden entries under Add/Remove Programs, ImmyBot inventories these hidden entries, further reducing the need for custom detection scripts.

              When you write your custom detection script, your best bet is to find a exe or dll file under Program Files<software name> or ProgramData<softwarename> that shows the version when you right click on it and go to Properties. To retrieve this version use a script similar to the following:

              powershell
              Get-Command "C:\Program Files*\<softwarename>\mysoftware.exe" -ErrorAction SilentlyContinue | %{ $_.Version.ToString() }

              If there is no exe or dll file containing the version, perhaps there is a .ini, .config, .json or .xml file that contains the installed version.

              If all else fails, you can simply return "1.0" if a file associated to the software exists.

              These scripts must return a string that will cast to a valid System.Version. Returning an actual System.Version will fail. (Although we may correct this in the future) For example

              $version = [String]"1.2.3"
               return $version

              will work, but currently

              $version = [System.Version]"1.2.3"
               return $version

              will fail.

              Software Auto Update (Deprecated, use dynamic versions instead)

              These scripts are useful for automatically adding new versions for a software. Script should return a $SoftwareVersion object.

              $SoftwareVersion = @{}
               $SoftwareVersion.url = $LatestPackage.OriginFile.OriginUri
              @@ -85,7 +85,7 @@
                       extraQueryParameters = $null)]
                   $OAuthInfo
               )
              - + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 6f4cbac1..263a5de7 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.immy.bot/FAQ.htmlhttps://docs.immy.bot/README.htmlhttps://docs.immy.bot/add-users.htmlhttps://docs.immy.bot/azure-graph-permissions-setup.htmlhttps://docs.immy.bot/build-your-own-integration.htmlhttps://docs.immy.bot/connectwise-automate-integration-setup.htmlhttps://docs.immy.bot/connectwise-control-integration-setup.htmlhttps://docs.immy.bot/connectwise-manage-integration-setup.htmlhttps://docs.immy.bot/getting-started.htmlhttps://docs.immy.bot/halo-integration-setup.htmlhttps://docs.immy.bot/immy-commands.htmlhttps://docs.immy.bot/https://docs.immy.bot/markdown-examples.htmlhttps://docs.immy.bot/ncentral-integration-setup.htmlhttps://docs.immy.bot/old-ncentral-integration-setup.htmlhttps://docs.immy.bot/onboarding.htmlhttps://docs.immy.bot/recommended-deployments.htmlhttps://docs.immy.bot/releases-2020.htmlhttps://docs.immy.bot/releases-2021.htmlhttps://docs.immy.bot/releases-2022.htmlhttps://docs.immy.bot/releases.htmlhttps://docs.immy.bot/scripts.htmlhttps://docs.immy.bot/terminology.htmlhttps://docs.immy.bot/troubleshooting.htmlhttps://docs.immy.bot/user-roles.htmlhttps://docs.immy.bot/windows-sandbox.html \ No newline at end of file +https://docs.immy.bot/FAQ.htmlhttps://docs.immy.bot/README.htmlhttps://docs.immy.bot/add-users.htmlhttps://docs.immy.bot/azure-graph-permissions-setup.htmlhttps://docs.immy.bot/build-your-own-integration.htmlhttps://docs.immy.bot/connectwise-automate-integration-setup.htmlhttps://docs.immy.bot/connectwise-control-integration-setup.htmlhttps://docs.immy.bot/connectwise-manage-integration-setup.htmlhttps://docs.immy.bot/getting-started.htmlhttps://docs.immy.bot/halo-integration-setup.htmlhttps://docs.immy.bot/immy-commands.htmlhttps://docs.immy.bot/https://docs.immy.bot/markdown-examples.htmlhttps://docs.immy.bot/ncentral-integration-setup.htmlhttps://docs.immy.bot/ninjarmm-integration-setup.htmlhttps://docs.immy.bot/old-ncentral-integration-setup.htmlhttps://docs.immy.bot/onboarding.htmlhttps://docs.immy.bot/recommended-deployments.htmlhttps://docs.immy.bot/releases-2020.htmlhttps://docs.immy.bot/releases-2021.htmlhttps://docs.immy.bot/releases-2022.htmlhttps://docs.immy.bot/releases.htmlhttps://docs.immy.bot/scripts.htmlhttps://docs.immy.bot/terminology.htmlhttps://docs.immy.bot/troubleshooting.htmlhttps://docs.immy.bot/user-roles.htmlhttps://docs.immy.bot/windows-sandbox.html \ No newline at end of file diff --git a/terminology.html b/terminology.html index 2359d214..07933490 100644 --- a/terminology.html +++ b/terminology.html @@ -5,46 +5,46 @@ Terminology | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              Terminology

              Tenants

              These are your Customers. We recommend syncing Tenants from CW Automate or Azure.

              User Computer Affinity

              ImmyBot periodically runs whoami /upn on all computers and keeps a rolling list of the last 10 UPNs. It assigns the Primary User of the computer to the "Person" (Synced from Azure) with the matching UPN.

              For environments without AzureAD, ImmyBot will lookup the UPN of the Person from a Domain Controller in the computer's Tenant

              Deployment

              Deployments were originally called "Assignments" and are still called Assignments under the hood.

              Note: You won't see the word "Assignment" in the user interface anywhere, but we plan to re-rename "Deployment" back to "Assignment" it in a future release.

              A deployment is a rule that assigns Software or Tasks (Collectively known as "Maintenance Items") to a Target.

              Deployments are conceptually similar to Group Policies in that they assign settings to a group of users or computers.

              DO NOT BE AFRAID TO SAVE YOUR DEPLOYMENTS. THEY DO NOT APPLY AUTOMATICALLY.

              If you DO want your Deployments to be applied automatically, you need to create a Schedule.

              Deployment Resolution

              Also known as

              • Creating Exceptions
              • "Winning" Deployments
              • Dealing with Snowflakes

              Like Group Policies have a "Winning Policy", ImmyBot must have a "Winning Deployment" for a given Maintenance Item on a computer.

              Let's say you have a customer "Contoso" that uses Adobe Acrobat instead of Adobe Reader, and you would like that to be installed instead.

              First, create a Deployment that sets the desired state of Adobe Reader to Uninstalled for Contoso

              Then, create a Deployment that Installs Adobe Acrobat for their computers

              Target

              A "Target" is a grouping of computers (or Tenants in the case of "Cloud Tasks")

              ImmyBot's ability to resolve Targets to a group of computers is perhaps its most powerful feature.

              For example, you can select a Group of users from AzureAD (which includes on-prem synced groups, and Teams) and ImmyBot will automatically resolve that to the list of computers in use by the people in that group.

              If you enable PSA integration, a Target could be all computers covered under a certain type of Agreement, or computers covered by an Agreement that includes a certain product.

              This is particularly useful for security software, help desk portals, or anything else in your stack that you may only want to be installed for customers that are paying you for it.

              Offboarding

              Conversely, you could create Deployments that remove your stack for customers you are offboarding.

              • Create an "Offboarding" product in your PSA
              • Create a deployment for each of the pieces of software you would like removed setting the desired state to Uninstalled
              • Target all customers with the "Offboarding" product on their agreement

              Note: ImmyBot even honors the date range on additions, making scheduled offboarding easier if say the customer wants your software removed on the last day of the month.

              Maintenance Session

              A Maintenance Session is conceptually similar to running gpupdate /force

              In other systems, different types of maintenance happen on their own schedule. Windows Updates may run on Tuesday night, but Third Party updates may run on Wednesday night, and auto-fix tasks may run whenever an alert is fired for a failed monitor, which has its own polling interval.

              By forcing all automation to happen in a sequential set of actions we call a Maintenance Session, we can deliver predictability not only as to what changes will be made, but also when.

              This also provides a cohesive mechanism for setting up a new computer. At best in traditional RMMs you can assign Monitors that detect the absence of required software and run Install scripts when they are missing, but this doesn't scale as pre-requisites and exclusions are required.

              Imagine if Group Policy could reliably deploy any type of software, and gpupdate /force worked reliably off-net, and when you ran it, it gave you real-time feedback about exactly what it was doing. Also imagine that it could optionally notify the end user before and after with a branded email telling them exactly what is being done, that optionally lets them cancel.

              That's a Maintenance Session.

              You can view Maintenance Sessions for all computers under Computers->Sessions

              Or, you can view Maintenance Sessions for a specific Computer under the Sessions tab for that Computer

              Maintenance Session Stages

              Detection Stage

              During the Detection Stage, ImmyBot "Detects" which Maintenance Actions are necessary to bring the computer into compliance. These Actions are added to the Maintenance Session.

              This is a read-only process, and typically done while the user is active. This is so ImmyBot can notify the user of changes that will occur later during the Execution Stage. By doing this during the day, and scheduling Execution for later, we are giving the end user the best possible chance to be aware of the upcoming maintenance, Postponing if you allow. The Postpone feature is very popular among engineers that do may need to leave renderings and analysis tasks running overnight.

              Execution Stage

              Maintenance Action

              null

              A Maintenance Session has one or more Maintenance Actions. A Maintenance Action could be to install software, apply a Windows Update, or run a Task.

              The image below depicts a typical Maintenance Session with many Maintenance Actions

              Software

              Software, in the context of ImmyBot refers to Software objects in My Software or Global Software.

              My Software - Initially empty. When you upload your own software to ImmyBot, it goes into My Software

              Global Software - Read-Only, managed by the ImmyBot team.

              At the bare minimum, Software requires a Detection Method. Software can have many Software Versions.

              null

              Pre-Requisities

              This is a VERY powerful, and critically underrated feature in ImmyBot. ImmyBot resolves dependencies recursively, with built-in circular reference detection.

              Common uses for Pre-Requisites include

              • Ensuring a piece of software is installed before installing another
                • C++ Redistributables before 3CX Client
                • Office is installed before an Outlook Add-in
              • Ensuring a piece of software is uninstalled before install another
                • Removing Adobe Acrobat Reader before installing Adobe Acrobat Professional

              Install required dependencies

              Ordering Maintenance Actions

              Detection Method

              A Detection Method is required in order to know whether or not a piece of Software is installed on a machine.

              For Software, the detection method must returns the version of the software installed on the machine, if any.

              For Tasks, the Detection Method is the "test" mechanism, which must return true or false to indicate whether or not the machine is in compliance.

              Software Version

              null

              Task

              A Task (aka Mainenance Task) is a catch-all for anything that isn't software.

              null

              or

              null

              Task Modes

              Enforce

              Runs the "test" script, if the test returns false, runs "set", then runs "test" again to verify.

              Audit

              Runs the "test" script which should return true or false. It can output whatever it wants, but the last output should be boolean.

              Monitor

              Runs the "get" script, which can return anything. Useful for collecting data like Bitlocker Keys, Quickbooks Licenses, or any other piece of information you are interested in.

              Scripts

              From the above diagrams, you can see that scripts are the building blocks for higher level objects like Software and Tasks.

              Execution Context

              System

              Run as a service on the machine

              User

              Will attempt to run as the logged on user

              Metascript

              Runs in the ImmyBot backend, and can spawn code on the system by using Invoke-ImmyCommand

              Cloud Script

              Runs in the ImmyBot backend, but intended to be run against a Tenant (perhaps for the purpose of getting or setting some setting in 365/Azure or some other system with an API). These are used exclusively in Tasks targetting "Tenants".

              Schedules

              Used to run maintenance periodically on machines. Can optionally be limited to a single Maintenance Item.

              NOTE You must also have a Deployment for the Maintenance Item to set the desired state. Imagine a scenario where you need to ensure a single piece of software is up-to-date on all computers except for a CNC machine. Create 2 deployments, the first setting the desired state to Installed->Latest for all computers, then a second stating that the desired state is Ignored for the CNC machine. When you create the schedule, the software will be ignored for the CNC machine.

              Integrations

              To ImmyBot, an RMM is a system that provides a list of computers, and a mechanism to run PowerShell scripts on them.

              To avoid having to deploy the ImmyAgent to existing machines, ImmyBot optionally integrates with RMMs like ConnectWise Automate and ConnectWise Control and uses their agents instead. These systems are not as performant as the ImmyAgent, but can suppliment ImmyBot functionality.

              For example, if you add an RMM Link for ConnectWise Control, you can open a remote session to the computer directly within ImmyBot:

              If you add an RMM integration for ConnectWise Automate, Scheduled Maintenance Sessions will apply all Approved Windows Updates using the ConnectWise Automate API based on your Approval Policies in Automate Patch Manager.

              You can even add multiple RMMs of the same type, which is often useful in merger and acquisition scenarios. You may choose to use ImmyBot as your single pane of glass to manage both, or simply let ImmyBot be a neutral third party for facilitating the consolidation of RMM agents to the parent company's RMM.

              Identification

              Because the same computer often exists in multiple RMMs (Like how CW Automate typically installs CW Control Automatically), ImmyBot prevents duplicates by identifying the computer by a unique id. We DO NOT use MAC Address! This unique id persists even if you wipe and reload the machine.

              When a new machine is detected, it first goes to New Computers->Actively Identifying

              It uses the following script to collect the UUID from the machine:

              gwmi Win32_ComputerSystemProduct | select -expand UUID

              This value is static even if you wipe and reload the machine, although we have VERY rarely seen this value change following a BIOS upgrade or due to a mainboard fault. We chose this value instead of Mac Address or Hard Drive serial number because of issues other systems have with USB Ethernet cables and hard drive replacement. We did not use serialnumber because we learned that many computers do not have serial numbers.

              In practice, this value works almost too well. Machines you just wiped and expect to find in New Computers, are often associated to their pre-wiped computer objects. To find them, you often have to search for the serial number of the computer in the Computer List. In 0.40.1 we began using the Windows OfflineInstallationID value to identify when an existing computer has been wiped so we can set its status to "Needs Onboarding" which causes it to show up under New Computers as expected.

              If it is a machine ImmyBot has seen before, it will be associated to the existing Computer, and you will find a new entry under the Computer's Agents tab. Under the hood we call these entries "RmmComputers".

              Computers can have one or more RmmComputers(Agents). You can think of these as logical "pathways" to the computer. We only need one to be online to function.

              - +
              Skip to content

              Terminology

              Tenants

              These are your Customers. We recommend syncing Tenants from CW Automate or Azure.

              User Computer Affinity

              ImmyBot periodically runs whoami /upn on all computers and keeps a rolling list of the last 10 UPNs. It assigns the Primary User of the computer to the "Person" (Synced from Azure) with the matching UPN.

              For environments without AzureAD, ImmyBot will lookup the UPN of the Person from a Domain Controller in the computer's Tenant

              Deployment

              Deployments were originally called "Assignments" and are still called Assignments under the hood.

              Note: You won't see the word "Assignment" in the user interface anywhere, but we plan to re-rename "Deployment" back to "Assignment" it in a future release.

              A deployment is a rule that assigns Software or Tasks (Collectively known as "Maintenance Items") to a Target.

              Deployments are conceptually similar to Group Policies in that they assign settings to a group of users or computers.

              DO NOT BE AFRAID TO SAVE YOUR DEPLOYMENTS. THEY DO NOT APPLY AUTOMATICALLY.

              If you DO want your Deployments to be applied automatically, you need to create a Schedule.

              Deployment Resolution

              Also known as

              • Creating Exceptions
              • "Winning" Deployments
              • Dealing with Snowflakes

              Like Group Policies have a "Winning Policy", ImmyBot must have a "Winning Deployment" for a given Maintenance Item on a computer.

              Let's say you have a customer "Contoso" that uses Adobe Acrobat instead of Adobe Reader, and you would like that to be installed instead.

              First, create a Deployment that sets the desired state of Adobe Reader to Uninstalled for Contoso

              Then, create a Deployment that Installs Adobe Acrobat for their computers

              Target

              A "Target" is a grouping of computers (or Tenants in the case of "Cloud Tasks")

              ImmyBot's ability to resolve Targets to a group of computers is perhaps its most powerful feature.

              For example, you can select a Group of users from AzureAD (which includes on-prem synced groups, and Teams) and ImmyBot will automatically resolve that to the list of computers in use by the people in that group.

              If you enable PSA integration, a Target could be all computers covered under a certain type of Agreement, or computers covered by an Agreement that includes a certain product.

              This is particularly useful for security software, help desk portals, or anything else in your stack that you may only want to be installed for customers that are paying you for it.

              Offboarding

              Conversely, you could create Deployments that remove your stack for customers you are offboarding.

              • Create an "Offboarding" product in your PSA
              • Create a deployment for each of the pieces of software you would like removed setting the desired state to Uninstalled
              • Target all customers with the "Offboarding" product on their agreement

              Note: ImmyBot even honors the date range on additions, making scheduled offboarding easier if say the customer wants your software removed on the last day of the month.

              Maintenance Session

              A Maintenance Session is conceptually similar to running gpupdate /force

              In other systems, different types of maintenance happen on their own schedule. Windows Updates may run on Tuesday night, but Third Party updates may run on Wednesday night, and auto-fix tasks may run whenever an alert is fired for a failed monitor, which has its own polling interval.

              By forcing all automation to happen in a sequential set of actions we call a Maintenance Session, we can deliver predictability not only as to what changes will be made, but also when.

              This also provides a cohesive mechanism for setting up a new computer. At best in traditional RMMs you can assign Monitors that detect the absence of required software and run Install scripts when they are missing, but this doesn't scale as pre-requisites and exclusions are required.

              Imagine if Group Policy could reliably deploy any type of software, and gpupdate /force worked reliably off-net, and when you ran it, it gave you real-time feedback about exactly what it was doing. Also imagine that it could optionally notify the end user before and after with a branded email telling them exactly what is being done, that optionally lets them cancel.

              That's a Maintenance Session.

              You can view Maintenance Sessions for all computers under Computers->Sessions

              Or, you can view Maintenance Sessions for a specific Computer under the Sessions tab for that Computer

              Maintenance Session Stages

              Detection Stage

              During the Detection Stage, ImmyBot "Detects" which Maintenance Actions are necessary to bring the computer into compliance. These Actions are added to the Maintenance Session.

              This is a read-only process, and typically done while the user is active. This is so ImmyBot can notify the user of changes that will occur later during the Execution Stage. By doing this during the day, and scheduling Execution for later, we are giving the end user the best possible chance to be aware of the upcoming maintenance, Postponing if you allow. The Postpone feature is very popular among engineers that do may need to leave renderings and analysis tasks running overnight.

              Execution Stage

              Maintenance Action

              null

              A Maintenance Session has one or more Maintenance Actions. A Maintenance Action could be to install software, apply a Windows Update, or run a Task.

              The image below depicts a typical Maintenance Session with many Maintenance Actions

              Software

              Software, in the context of ImmyBot refers to Software objects in My Software or Global Software.

              My Software - Initially empty. When you upload your own software to ImmyBot, it goes into My Software

              Global Software - Read-Only, managed by the ImmyBot team.

              At the bare minimum, Software requires a Detection Method. Software can have many Software Versions.

              null

              Pre-Requisities

              This is a VERY powerful, and critically underrated feature in ImmyBot. ImmyBot resolves dependencies recursively, with built-in circular reference detection.

              Common uses for Pre-Requisites include

              • Ensuring a piece of software is installed before installing another
                • C++ Redistributables before 3CX Client
                • Office is installed before an Outlook Add-in
              • Ensuring a piece of software is uninstalled before install another
                • Removing Adobe Acrobat Reader before installing Adobe Acrobat Professional

              Install required dependencies

              Ordering Maintenance Actions

              Detection Method

              A Detection Method is required in order to know whether or not a piece of Software is installed on a machine.

              For Software, the detection method must returns the version of the software installed on the machine, if any.

              For Tasks, the Detection Method is the "test" mechanism, which must return true or false to indicate whether or not the machine is in compliance.

              Software Version

              null

              Task

              A Task (aka Mainenance Task) is a catch-all for anything that isn't software.

              null

              or

              null

              Task Modes

              Enforce

              Runs the "test" script, if the test returns false, runs "set", then runs "test" again to verify.

              Audit

              Runs the "test" script which should return true or false. It can output whatever it wants, but the last output should be boolean.

              Monitor

              Runs the "get" script, which can return anything. Useful for collecting data like Bitlocker Keys, Quickbooks Licenses, or any other piece of information you are interested in.

              Scripts

              From the above diagrams, you can see that scripts are the building blocks for higher level objects like Software and Tasks.

              Execution Context

              System

              Run as a service on the machine

              User

              Will attempt to run as the logged on user

              Metascript

              Runs in the ImmyBot backend, and can spawn code on the system by using Invoke-ImmyCommand

              Cloud Script

              Runs in the ImmyBot backend, but intended to be run against a Tenant (perhaps for the purpose of getting or setting some setting in 365/Azure or some other system with an API). These are used exclusively in Tasks targetting "Tenants".

              Schedules

              Used to run maintenance periodically on machines. Can optionally be limited to a single Maintenance Item.

              NOTE You must also have a Deployment for the Maintenance Item to set the desired state. Imagine a scenario where you need to ensure a single piece of software is up-to-date on all computers except for a CNC machine. Create 2 deployments, the first setting the desired state to Installed->Latest for all computers, then a second stating that the desired state is Ignored for the CNC machine. When you create the schedule, the software will be ignored for the CNC machine.

              Integrations

              To ImmyBot, an RMM is a system that provides a list of computers, and a mechanism to run PowerShell scripts on them.

              To avoid having to deploy the ImmyAgent to existing machines, ImmyBot optionally integrates with RMMs like ConnectWise Automate and ConnectWise Control and uses their agents instead. These systems are not as performant as the ImmyAgent, but can suppliment ImmyBot functionality.

              For example, if you add an RMM Link for ConnectWise Control, you can open a remote session to the computer directly within ImmyBot:

              If you add an RMM integration for ConnectWise Automate, Scheduled Maintenance Sessions will apply all Approved Windows Updates using the ConnectWise Automate API based on your Approval Policies in Automate Patch Manager.

              You can even add multiple RMMs of the same type, which is often useful in merger and acquisition scenarios. You may choose to use ImmyBot as your single pane of glass to manage both, or simply let ImmyBot be a neutral third party for facilitating the consolidation of RMM agents to the parent company's RMM.

              Identification

              Because the same computer often exists in multiple RMMs (Like how CW Automate typically installs CW Control Automatically), ImmyBot prevents duplicates by identifying the computer by a unique id. We DO NOT use MAC Address! This unique id persists even if you wipe and reload the machine.

              When a new machine is detected, it first goes to New Computers->Actively Identifying

              It uses the following script to collect the UUID from the machine:

              gwmi Win32_ComputerSystemProduct | select -expand UUID

              This value is static even if you wipe and reload the machine, although we have VERY rarely seen this value change following a BIOS upgrade or due to a mainboard fault. We chose this value instead of Mac Address or Hard Drive serial number because of issues other systems have with USB Ethernet cables and hard drive replacement. We did not use serialnumber because we learned that many computers do not have serial numbers.

              In practice, this value works almost too well. Machines you just wiped and expect to find in New Computers, are often associated to their pre-wiped computer objects. To find them, you often have to search for the serial number of the computer in the Computer List. In 0.40.1 we began using the Windows OfflineInstallationID value to identify when an existing computer has been wiped so we can set its status to "Needs Onboarding" which causes it to show up under New Computers as expected.

              If it is a machine ImmyBot has seen before, it will be associated to the existing Computer, and you will find a new entry under the Computer's Agents tab. Under the hood we call these entries "RmmComputers".

              Computers can have one or more RmmComputers(Agents). You can think of these as logical "pathways" to the computer. We only need one to be online to function.

              + \ No newline at end of file diff --git a/troubleshooting.html b/troubleshooting.html index 1fa8040f..8594ae3a 100644 --- a/troubleshooting.html +++ b/troubleshooting.html @@ -5,45 +5,45 @@ Troubleshooting | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

              .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

              Please see the FAQ section for more details

              Troubleshooting

              Identification Failures

              Needs a Manual Decision

              Generally you will click "Agent Re-installed"

              Often when an RMM Agent gets re-installed, it will get a new id in the RMM (ComputerId in Automate, SessionID in Control). ImmyBot will recognize that it is the same computer, but due to the fact that virtualization technologies and hard drive cloning can lead to the same scenario, we require you to tell us whether we should overwrite the existing RmmComputer, or keep both. 99% of the time you will click "Overwrite Existing". If the machine was in fact cloned, you would click Keep Both, in which case Immy shims the duplicate UUID with its own to prevent collisions.

              Pending Computers

              Computers in the pending status have yet to be identified.

              Computers may get stuck here if we are unable to run our Ephemeral Agent

              null

              Top 3 reasons for Identification Failures

              1. SSL Inspection blocking our websocket
              2. Security Software blocking PowerShell
              3. Incorrect time is preventing SSL/TLS connection

              To understand the various reasons identification can fail, it helps to understand how ImmyBot executions PowerShell

              1. RMM or ImmyAgent runs Immybot.Agent.Ephemeral.exe
              2. Immybot.Agent.Ephemeral.exe establishes a secure websocket to wss://subdomain.immy.bot and runs Invoke-PSPipeHost.ps1
              3. Immybot.Agent.Ephemeral.exe feeds Invoke-PSPipeHost.ps1 PowerShell over a pipe from the websocket session
              null

              The most common cause of identification failure is security software.

              To know if this is the case, pull the logs from C:\ProgramData\ImmyBotAgentService*.log

              image

              Normal Immybot Agent logs look like this:

              2022-06-14 00:02:25.560 -05:00 [DBG] Hosting starting
              +    
              Skip to content

              ImmyBot will no longer support Windows 7, Server 2008 (or Server 2012 w/o ESUs) machines after May 14th, 2024

              .NET 7 support is ending May 14th, and as a result we will be transitioning the Agent to .NET 8 at that time period. We will not be offering support for these machines after May 14th.

              Please see the FAQ section for more details

              Troubleshooting

              Identification Failures

              Needs a Manual Decision

              Generally you will click "Agent Re-installed"

              Often when an RMM Agent gets re-installed, it will get a new id in the RMM (ComputerId in Automate, SessionID in Control). ImmyBot will recognize that it is the same computer, but due to the fact that virtualization technologies and hard drive cloning can lead to the same scenario, we require you to tell us whether we should overwrite the existing RmmComputer, or keep both. 99% of the time you will click "Overwrite Existing". If the machine was in fact cloned, you would click Keep Both, in which case Immy shims the duplicate UUID with its own to prevent collisions.

              Pending Computers

              Computers in the pending status have yet to be identified.

              Computers may get stuck here if we are unable to run our Ephemeral Agent

              null

              Top 3 reasons for Identification Failures

              1. SSL Inspection blocking our websocket
              2. Security Software blocking PowerShell
              3. Incorrect time is preventing SSL/TLS connection

              To understand the various reasons identification can fail, it helps to understand how ImmyBot executions PowerShell

              1. RMM or ImmyAgent runs Immybot.Agent.Ephemeral.exe
              2. Immybot.Agent.Ephemeral.exe establishes a secure websocket to wss://subdomain.immy.bot and runs Invoke-PSPipeHost.ps1
              3. Immybot.Agent.Ephemeral.exe feeds Invoke-PSPipeHost.ps1 PowerShell over a pipe from the websocket session
              null

              The most common cause of identification failure is security software.

              To know if this is the case, pull the logs from C:\ProgramData\ImmyBotAgentService*.log

              image

              Normal Immybot Agent logs look like this:

              2022-06-14 00:02:25.560 -05:00 [DBG] Hosting starting
               2022-06-14 00:02:25.799 -05:00 [INF] Starting Immybot Agent
               2022-06-14 00:02:25.943 -05:00 [INF] Using configuration file stored at: C:\ProgramData\ImmyBotAgentService\config.json
               2022-06-14 00:02:26.875 -05:00 [DBG] Initializing IoT Hub connection
              @@ -74,7 +74,7 @@
               2022-09-21 12:24:50.171 -04:00 [ERR] Application shutting down (App lifetime token cancelled)
               System.IO.IOException: Cannot access a closed stream.
               at System.Net.Http.HttpConnection.RawConnectionStream.WriteAsync(ReadOnlyMemory`1 buffer, CancellationToken cancellationToken)

              To correct it, you need to bypass SSL Inspection for your instances hostnames/IPs, which are found under Show more > integrations > Fetch IP Address and Hostnames

              SentinelOne

              Sentinel requires BOTH your instance's Script path and the ImmyBot Agent process excluded. With only the script path excluded, devices will regularly have issues running the ImmyBot Agent to download the ephemeral agent. This is apparent in two cases:

              1. Importing devices - The new agent can't download the ephemeral agent to start running inventory.
              2. Updating ImmyBot Agents - The new agent can't download the corresponding new ephemeral agent when attempting to run deployments or scripts.

              You can also set your Exclusion Mode to "Interoperability - Extended".

              DNSFilter

              There have been reports indicating that DNSFilter, along with potentially other DNS filtering tools, is not directly blocking subdomain.immy.bot but has failed to resolve some DNS queries.

              Specifically, in the case of DNSFilter, it was confirmed that ImmyBot was not being blocked. However, the failure in DNS resolution meant that connection attempts to the backend were unsuccessful.

              Explicitly allowing the DNS for subdomain.immy.bot (replacing "subdomain" with your specific ImmyBot instance subdomain) was verified to resolve the issue of failed DNS resolutions.

              For guidance on managing allow and block lists, please refer to: https://help.dnsfilter.com/hc/en-us/articles/1500008111381-Allow-and-Block-Lists

              Group Policy Objects

              Computer Configuration | Policies | Administrative Templates | Windows Components | Windows PowerShell | Turn on Script Execution (Enabled)

              User Configuration | Policies | Administrative Templates | Windows Components | Windows PowerShell | Turn on Script Execution (Enabled)

              These GPOs have been known to cause issues with running scripts.

              - + \ No newline at end of file diff --git a/user-roles.html b/user-roles.html index 737e648d..a841cf06 100644 --- a/user-roles.html +++ b/user-roles.html @@ -5,46 +5,46 @@ User Roles | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              User Roles

              MSP Admin

              • Full Access, no restrictions

              MSP Non-Admin

              • Cannot create/edit/delete Schedules
              • Cannot create/edit/delete Users
              • Cannot create/edit/delete Cross Tenant Deployments
              • Can create/edit/delete Single-Tenant and Individual Deployments
                • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admin Users to Manage Deployments" setting
              • Can access terminal on all machines and edit scripts
                • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admins and Non-MSP Users to Use Terminal and Edit Scripts"
                  • Disabling this prevents these users from being able to run arbitrary code on devices

              Customer (Tenant) Admin

              • Can view/edit Computers, Licenses and Deployments for their Tenant
              • Can create users in their tenant
              • Software they upload is owned by their tenant and are not visible to other tenants
              • Licenses they create are owned by their tenant and are not visible to other tenants

              Customer (Tenant) Non-Admin

              • Cannot create Schedules
              • Cannot create Cross Tenant Deployments
              • Cannot create Users
              • Can create Deployments scoped to individual Computers and People
              - +
              Skip to content

              User Roles

              MSP Admin

              • Full Access, no restrictions

              MSP Non-Admin

              • Cannot create/edit/delete Schedules
              • Cannot create/edit/delete Users
              • Cannot create/edit/delete Cross Tenant Deployments
              • Can create/edit/delete Single-Tenant and Individual Deployments
                • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admin Users to Manage Deployments" setting
              • Can access terminal on all machines and edit scripts
                • NOTE: You can disable this in Settings->Preferences with the "Allow Non-Admins and Non-MSP Users to Use Terminal and Edit Scripts"
                  • Disabling this prevents these users from being able to run arbitrary code on devices

              Customer (Tenant) Admin

              • Can view/edit Computers, Licenses and Deployments for their Tenant
              • Can create users in their tenant
              • Software they upload is owned by their tenant and are not visible to other tenants
              • Licenses they create are owned by their tenant and are not visible to other tenants

              Customer (Tenant) Non-Admin

              • Cannot create Schedules
              • Cannot create Cross Tenant Deployments
              • Cannot create Users
              • Can create Deployments scoped to individual Computers and People
              + \ No newline at end of file diff --git a/windows-sandbox.html b/windows-sandbox.html index 979dc8aa..b823c42b 100644 --- a/windows-sandbox.html +++ b/windows-sandbox.html @@ -5,46 +5,46 @@ Testing with Windows Sandbox | immy.bot - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + -
              Skip to content

              Testing with Windows Sandbox

              Windows Sandbox is a fast loading disposable container in Windows that loses all settings when shutdown or restarted. It is very convenient for testing software deployments. It should be noted that not all software is compatible with Windows Sandbox, particular software that installs drivers or requires restarts.

              If you haven't used Windows Sandbox before, you can enable it by opening Windows PowerShell as Admin and running the following command:

              powershell
              Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online -NoRestart

              Download Windows Sandbox file (.wsb)

              Wait for ImmyBot Agent to install

              Onboard the Sandbox

              This will create an "Onboarding" Session (sessions are like running gpupdate) that will apply all applicable Deployments (deployments are like Group Policies)

              - +
              Skip to content

              Testing with Windows Sandbox

              Windows Sandbox is a fast loading disposable container in Windows that loses all settings when shutdown or restarted. It is very convenient for testing software deployments. It should be noted that not all software is compatible with Windows Sandbox, particular software that installs drivers or requires restarts.

              If you haven't used Windows Sandbox before, you can enable it by opening Windows PowerShell as Admin and running the following command:

              powershell
              Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online -NoRestart

              Download Windows Sandbox file (.wsb)

              Wait for ImmyBot Agent to install

              Onboard the Sandbox

              This will create an "Onboarding" Session (sessions are like running gpupdate) that will apply all applicable Deployments (deployments are like Group Policies)

              + \ No newline at end of file