wiki/guides/nextcloud/nextcloud-serverinstallation.html

5066 lines
4.1 MiB
HTML
Raw Normal View History

<!--
title: Nextcloud Serverinstallation auf Almalinux 9.x und Debian 12
description:
published: true
date: 2024-02-09T19:02:13.024Z
tags:
editor: code
dateCreated: 2024-02-09T19:02:13.024Z
-->
<html>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<style>@font-face {
font-family: KaTeX_AMS;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Caligraphic;
font-style: normal;
font-weight: 700;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Caligraphic;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,d09GMgABAAAAABr8AA4AAAAAMFAAABqnAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAARAgsCZwMEQgKswioXgE2AiQDfAtAAAQgBYkwB2gMgScb9ilFhbBxAEHgXHWC/y8HnMgQOkOZ9yIilmjBiFGLB6Wgda61ylHEir4Wxxl7sNM+3bmMN1fXoyprq19rVad70JFv/v5lBwS+IQMHi/FMses8tgwwh+l1phGSzA7Qzf9T13Vdurx0S2uIU3OrBqEBeMQepL09Ah/CrLK1mX3U7hCbqq29l20kFm3E5LVySCKKiCjUEL93mcoNoKQrZZQJst9uSnPZNG0516JJlXzrA9gAKw1QB9evdWcsjwfwHOpMXce7VbacB3TQeWBWrBKMhGs7Z33GEqBjMZXJUm95+Lja+103UARhs9plrcjOkiQS0HWYNon2QWCbLITEv7q47Y6lQKlnrSBu+v2mYP+zXcb3qvxYyiY2sbB1FbKH7xIWuHSWfy20ySGE0lXjcdP89G5Ri9oVEnCfmUOXI/cxC63DfdNe6cxKv63RR65Jd2OpvAISgEPIaq74Zla/SHKR7lx097vORS69obzwUpt7YXYAbJgGwAAYxk1QUADksbFUB65sghRP22evsfU/eJmMcgi9AcL7kVcAQMNf96lZCRT7J8Dc13cH/7Kqk7unTwLkB65/37nAzEHdqleK5AC2/5PejBjqGyUhLM8p1aEfJJf7C42xQFjddY6qecaYdcrNN+pgNCXq9Zed37yUEwypO66JUG8w/Da/bhhKvd5z9wMwAFeuFqKFM6BnbQHoxRuHoHEY7vyAYt4toBDOMWlTtT7vamMA3AEgVx2git5mAAGqPMgAgQ2bDDCoPYSHLilbgk/y3iZoqLRJlyMgbu4TCA+IZWiBnO53kHP0Ft6NGwYQy46dDG3cIEBk2/F1sPSWAZy6PelE6iwDshgcIaQjswqi0sSb1dQSzq8Cyd50Bu1m3a+BbjkDOMj6WzeV07HQkEmJgaOEsEvm2++EkqiHFoZPJanBlEUsGnA+RwOKQ5Ue4OwNoVQEl6gQCIm9yMwpAAUQ7AM4dwAOdmz0io5KuaTyIJxxpa94ljOaVEXaIACjSCIgdxEispUMNFBNQEJoCXSuOtC9BeatNkYAljOgeTcEMUv0qqVJFLev46AXDzd3HbSSGbp5UqQ+9mtMluYAJFtzflWHdXEsRgiOC0ei4Sn59GMZ6ACDEx3g8AYsz/CWCcDxuACoOgBYi0EvtSoDFPQabPbPEKmSoQYcZZka+Wr4JRwdo0dY23HDIGBuziifMJaAke0USPDqgqipUJv1EBhHZhGocTgyFwMOoF/Z2hfWPAG0ywhsdQ1siix3yOqSXD10YqPZyLjJwEGC3BZq8HoGLtoSROBwfiavk3kr4Erx3HJpA14EbnZOSGeI1KKmAh49xUqTZhD4hCQWNl1C6pXcBavB+wbw+9fcwsYh0KY5/CkFSMAAtyqkWANgxYIXJbYMCjZxjshdBWDKBDgckvK4JJBg45DZr3NLhufLMl+rAeTxwjkv4LAHrvfMLaC2LVieNgHC9xVAAlj5AVVPd0wIlQBXbzqQ3lINtrdgeYBlS/5UMjIk/XJBrLVAgOCCAVaSoC1iThy/IxlESEASM4ilAkGiIJAqGLwUAjJFA7lCQaHooFQYqBRjrj+Yhu8FWl7YdEw5wKdFY+quAZPaRO7rM41tevftQ6OgwInp9gOsHB9IbJYmeqOhGg01aKhFQx0a6tHQBw0NaOiLhn5ofSZQwVwwL+EhKVPpi5TYUjWKqXR7LYDSCHPpeMgKot7WSW1wmOQGv+2KokEAW3HfSOyWrcL7IVhLiaZJ7e5Lsn5gnrZdtS8I9CSBOcFQYi9brl8eYAyJxhtA+gfcreF+wZMpSJOUP5QQUEG9NGIALKZ+RaHIrxQZ7J/UAbI/d4owJEjSQDn1APhFMzwXh3Y8ywK5Xd19L8Lbzq6aXBzPEA4A6Ze4Bkh4FqafOBGyASYn9qLJExXR7p4jIqJ8FxNQo6xVJVT2llUdZ+4QsTHTIsvGxsR23CZOihrNmBtf9si6Fd/1it+cvgOhbxk0hnYz3SBoEt/xtqibBKalk2TchEnNwNkACu+Cs6N6WgsLZkA8Kq9PCwE041UgmTcqMCxKHXUTl4OSIRISJnMGLRMxF5MjbVERcLVK48k6kdkdrVKIqgi4MR5z6XIq2OhpB6HwupCJARrU3eZ+hCmiudWiL5Emnvu7xgTUTdzEf6ezxdjLWGcOMOVgGn5iMd2qXhdHheTJokMT0LNjX7yuV/fuNLHNmm/aBYRHy3k3EBEjtVOpHWO0f7IYUOawLEJcBKRl6mcEzA8gvM0BMXV5poJynnSTxiPhK2I/3dHc/lv0iplSo3726oIntSmbGUbChYS5wEIEhxNVs88wvKGkNssFJvlJ/YcdsNArF+z2kNILSR5OQQK0GyCU6qlA2FvSwNxwiymnJmoqoIXpYHaAtN5iUIlO2M6oVIDWQKNCrCruKEcCvAYGFYtHHArChMkJyKOAxQmp6kpVU6iuUEMh0zVuqUUr2Bp4VMhVxV31SMCngb8Ky26Hh27HQbfjotvx0O34WDgBup0QCydC96IYCUUiaRNpAFndFC3Jsl8YEAZyJKwKRQt2yhYM1SwUZRxrNwobN8pv3yFAhxil29PVHwQCj1dbNE5uNM5uNC5uNK5uNG5uNO5uNB5tMXi6MXi5MXi7Mfi4Mfi6Mfi5MX0/fowfcHP7UdmFQcq59xqjjRQ5/aHWnmDtduBL+3uMCgTmKI47reJHD8tiRwB+INoJEzaDCKRdemkBEdrmh3spgLSc077F04tNbkFDboJ+eqm1IC69tDHPvhPmmpKamDQmkj+E5d/4Tu6TA+FTshgqVN9jzhRQ8O9kvoJEnvuSBd0hmRUcqhM7QaUFWdtZkVnAf+3elkL9O63dwgMl4cY0C+Ga9QI6vGoo0KlCTsxGp28fSBlXcrNYcXiCmhQkHRUqPgVbYif8w1QLTj42Axp4Arkz5ARj4MXIUlrr0xSADOXlJqjRQMS/ycacPJS5iTu1EzN4cOwHlQho8hqNGqhQ3c9likzihFJs24Ayg/Rmdgy85r+/WknFkCKr+Pm+sNKpKVjSUmZKTvW4ZJlYzt4sUFTD7mPcR6BHYjp4LIdxDk9Oah8Xw3j4JFK6tBhysk8Di/Z1Ad0iFzCGeNSU1SsEoqRgqBl3UAYuy3u2kkVPCHBDYsXgERRFq7OP01h30cfqn5M0CfsB74e1Wm2WXMPyrG8YcYkUzGCW+IIyDYFqll45oEr9jptVdGS4XsHIPcp2tjR3FS82e+uui2RDSP5Tmg/hnByYp6kyhacU1MlUEwoO9mMb74D5qAuGP2L0nwYYgxeR4fn30xrpv/ByV2XyIw573p8UsbOvQ5TJnOQ8iseoF6Ln4Sg947thepyBXBWLalVaTlLzUOYAciwA+yeO2laJBLD/p+RGJikw1JuG2+p4DAUHC/4NocgOee3JA5Quj2oairoKy7DJNYYerONfC1Zo3tgIqnNF23Awhhf2D7cborglVYaqt35v7YXn8rb4hVSyaLWal547QfmF60CnGk4ZOJDV61yXy81HneOmx1olgQtbosSGg7q5dCUnUVEmp7H8UDT3fOSz6a05ieI9r15OV1icCmM1+50eX6fYpAXKskfunq8mk2xae0rPpwzbx4kI+cxSLl7j1lv6i7jCXFErDljKyvcDKjRwjyodC76gbZt5cpeaUNEpcgljGaa5fII6nhpsIpAntjLbZO3gvqbg23gz44+QAHcklfdHwB4tnDQrAqb8UuCuYJvHxszjgFFOu+t+3iu9qpqX5SffMMk5nGyUfSimdfGgqI74v2beFqNOKtx78sUUsUM13t6fZML60vi3JxyKl2jTJBxY00jTtJ/Pqo+ygk9ZvbxMU4XmaU1U7ZlPdT+qajiiQESACtzticug79z/CNBHrUdmUhRGnI5jZdd06X8LTT5OPkzSlDVvwPtl5MbbfPf152HUgU1g4x0mgHpYYMO2Yfb/fXxpDireE
}
@font-face {
font-family: KaTeX_Fraktur;
font-style: normal;
font-weight: 700;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Fraktur;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Main;
font-style: normal;
font-weight: 700;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Main;
font-style: italic;
font-weight: 700;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Main;
font-style: italic;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Main;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Math;
font-style: italic;
font-weight: 700;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Math;
font-style: italic;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: "KaTeX_SansSerif";
font-style: normal;
font-weight: 700;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: "KaTeX_SansSerif";
font-style: italic;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: "KaTeX_SansSerif";
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,d09GMgABAAAAAChoAA4AAAAATGAAACgQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAggQIWgmcDBEICuJgyx4BNgIkA4NuC4F6AAQgBYkgB4MBDIEyG6o+ZYeMdTuQiBT6EiIqOJNm//9tuSEy0D9Q3apYdiQSbLYVmGRUN42nt6fpYI1BGXWvUHwSJrFYooNGxfXM91KzeKLOTDSfbnuipS04dZWtzGSLSj9S8Ce9rzoQ9LbDMppGSDLbDs9v8//cC1wuKYiEjYWiqIDYU9KgL5GKSlg1dS7TReZ/q6cr96K2vYpFuld7f52Ha9lMdpKlLMEx7xWYXfvg1NWZf7a1pkQfY6977wXRAwoXyZYdq0x0jI5zKYKvEe34Ctn+5Afv73+Acdhm+fvlENPMhNyXbFOxiMm9L9NDU9JV2v8BRDj/L6f/3rGTwty4ONLYYXzAIHCe2+P+kxLt3lZq2XNOV7LkMP+XBwiRNIHCEhcbsn9V1WnDVBpSDvmZrAemNBemgaSUdFpp+KmARWuYNczYpgPdLVjXTg4nRPthJGDFAkjtvNdi7DJtul0tLen0rPRhP2U9Chk58hCpATYzMhy1tDrN7N7XrnTnX0kOCv+2tJ9uV+ekc9LdfUgROYQg7X3UJ50cQkLGRmY2YTaALiOXATGAZtgoBwCQCfRrWQ6KQXfd0ybksopK8/j12k/7dHOtkuYliIsiIizNPvf+yqMAcFZnCQIAP9cwABaQW4Z+kwQGr8eeCjyYc/cveH2wx7IQUOCvxOL4g/HWfa8VWHyPAwD6UkMA4OtTOA54xKxCpB/ew1gBPr1zPMVKVKk13mRb7HHI8Ugqv87Ud3W5rvWKXtPre1Nv6e29q/euhPxIfuwHom9bCTkff6Gz/qbO1cW62suPuLP3rAR8Hj/mv2PuTzeNuOGqU66YNab1v/Df+te96IUuCiz66IN33npTcKSMvAHIq8bb2uooAC+T9osYoMYQIyLIbF6GgQ+lLPPn4DY48v3guZz0V4xVJZESHKFT4MMJ0C8/UFz/ClxYZfcxLpEfH8g8nWqiybeF7BprCR6CWtoRINmP3hHBalk6MogV66gAw74yd3nNNwyIGH1hc40vrV6S8dsKlEbGJg2ki9XIenoYPWvdm5ZiH+35M9s3sdvEj0GalTsSAhb2dIxTT2WEbEowYkCmJ7GSWbXBAH70pPxr7KZxdouOYjdYZc51/jug3eQX5c3Fb75jIlw5Tl95VJRlKg3sWiXFejQTGYh8NMESeVbtxOCxEFW6MI50iSyZUXWsAplTckGwBoI+4TYPG0vLzvJxOnFlwSx5wuWr6pCUGKwoT7QKxhSvjhzoQPI0xKTKPmDSPDWMGWvHM8VRmJohCauoLY8MbKpm6o5fJlkJKfKmbTx1Ile/fqQoWb+T8k6IvUlzDaJWwZ3rgMJgotRjZ44qqHMyAmxjojXVzQsI8UiJrLUktk2qzRDXAUULbC5OSL6icJo7RbOjsV3tycCoT8h+59et1xCz2Is0KSCGIVKS5DGbkRsVBkNHINoas1hd5Y6xTCre1dryF8XiNdi8ANDmhtjYmOr3rTFRdvtgjVhdt44OCuvZ5XdNytFFcAB0+J7bv1rmlW4KrKrrKuKxLWCQveCE5FtuVPQYkb+MWZPIXn18+BYKdVq9R6srq4IEU3bCh693hrFBCsYPUSCc38P+XECsPL3Q5ljMfXHuwXUjLgioeB+K6Zwk93mmVabcppW/hM6aYRHmT4HHrNLhzDPjF1qxVHvst98C4KK1RBJKfzGlh5ctwloB734L9M2jo22elpEVj3icLp0RTy6K9157ElZNrEo4FHyP1bvqGKMAOxwTpkhSykiOKiRPiRQoJ0UqSImqpEw1UqH6eQMI9q4U5cO3IKiIry2F+XmHGV1jz8dxR13bns87rIo1zoaOU4jV4R0ui3SDGvChDgoNUGiCQgsU2qDQAYUuKPRAoQ+aGQO1t5KJPTItaOSsNvZkzFoYrnqGWzjCA9N0nAKYwZFpSRvSqbefKYzmZC64Txd7YDfYOuK0WXia78ID1VCdN81ssDMLwFOlz13E2nIhu/ISxFCjTVoaOP/wWtC+lI2ykOb1vEOWgBoz1U2CmpjPLqO6Wi+LtZKPMRP9oxVWUZjEjgozQlJLyb7Ls337WAlh1/S4nTA/rqQ0f2ndcQ0EznfiDfJvII9ZpJxLmpzs5bEBdV6BE1hvQCVKpyhCQHYSb/1JxZ3LsE96Qc0+5Qsr6nvZaQaRG2BTppEWyFgVsacLjkgliHEQcqaB/CcjGRSxl2sVHksCZZMs07Rhgs3glMyXgISVRmyELLmIPHKK3FNqNUeclGtAnSuz0oteTc4F6riBA4fQyPPSlHqj3nUzSoMVngJWiA6ctEUPNCSIMiuOYA8VarGm7k5ApXrKNIRn872btwQt2GagK44S5u+Ttl8Q+dAjixusluU2ZF9zB6JBBFnae8LQm7kG1FqVLM1NOsffPf3c9AvfK9Zu8A3eB9eisqYH4Hrk6h3DaxXzSj4bBStmanIYBU5oahl1M1Hegs3Gp7CMT0UlG6KTRyiGjnszx/35CzELYNQH+7Br1rJhbKg0WlWRHJ8HRYEIP8nYvdHKFjUpaj6cauyYj4zQusMXpW5LzZNylj1HAehkcBlTF+DqQi53B5xdQYVpblRIRa7gzQYvd9s1RlICdQKDIjFlAItG2GzQqINL4soAHo3dxz4BSQ4CCUnYAyCSImIIBU1oNKXRjCZyeaDQAteklAEqGlGzQacNLkkrA3Ro1K5KIEs9uNQHWRrApSFcGsGlMVyawGdNUWjDeuosZZD3njkIYmHwwArE8LIKAF5brUFQ12wvCGIzmRiBsPUwsPMw2n4FIjkAgPccQfCcQCTnycSKgouHhauHhZuHhbuSSR5ekKcX/AVdOXh7OPh4OPh6OPgpS/L3ggydeTHzjl9zVtuEYnWknu3QQayxqn5CrUtlq18N1C4uDkCgwYccr/JE/KUhB5vTHwAI3wHLYzAA3C6YCm/PPA4BDjQvTADmOFu00nC0tpYeGJftYylfioC6pL2FFg1QFeUUdby4E8S9tPcgkiTlKzrVdALfCw48V0q5q0oi14/CzrYtp8M0bJrWKKZBxi95k9YDzy04ft/3bLMnKY61dlAKPaddL9hbRjM3rZVTTQtp6OTdLLqWq+4aF1N6CZIcDYq+E9ux4y5U8n6vPHSLRKHqUhyGZNvR0bRomqphFZEnal1LkdX0tX1rWtL6fkSl6xzzMc/AKDXtFYIAawlkNIKQJggzGq0a5jbF8+FTNkdBVrmHIqtYS8xKOgeWr2kWYtZiDqXxXHm5LhQhx2gGlvx9zLjElqZpX3K6luBY1F1VRQ33M26QRZw81aqFIKDYONqQBc1S3x2iEARVJMEgoe4pE1N5qytEfRZWdumEvQAPdTUDwMcfExbSAp/mmTs0YywQ+/x93aWZeA6sSyj4eFU3sQuHOhQ+lzn/qUmae/9uhxv+lnxTwnV9T5352ROq+uyU6txgPrX2WtjapbK87dsLQ7BAfibuRau+pAfiPpemxz1SpnBbDn1s2E0U24X1Y3uBZppzMLhW4febpou8ZGhkJibYBFgPa7IoTOSzwW/NJryW/Y2u0MajM4aKDcFvtHrK0/Y0CkU3vGXEpKKZXiFYzDlyZLTmpdHJxDTVSHQOvuSmVFNzDOroevz4WO0r1ZU2jxGepBKJZcksiDja5aIFlk6bJAbp7E88zGZjCCXb/9OL2Fanax9AN0LsVybNbms+T669tDUbXs2615KwbiEtz3PMQyggSGzqsCsHGPmBHVI/rGGtrVyaKE4mTmfHDe0NM/O9reb984tti+ZsgElCuGkTJTZ6ddfrrj8m3KOZLRPNjVPEvc/fm8JDFMHaTrD2TOy4qQR6+NVINdSyn3CMIFCgpICYsj3qiG/qMGahKcC0DddVrr7S7IBFaTQGFCzkt5tj13vB8o9cCa5TxJvnXJkNfiKO5un4Fs34msUcLjhfNFjk6l7t9Tu+M07dcwxS1zGZecXYFd91n92Y5NfXzztS+
}
@font-face {
font-family: KaTeX_Script;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Size1;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Size2;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Size3;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmfttwI4mBo1EG15fxJhUiCLbiiyCf/ZA6MFAhg3pGIZGdGIVjtPn6UcMk9A/UUr9PhoNsCENw1APAq0gpH73e+M+0ueyHbabc3vkbcdtzcf/fiy+NxQEjf9ud/ELBHAXJ0nk4z+MXH2Ev/kWyV4k7SkvpPc9Qr38F6RPWnM9cN6DJ0AdD1BhtgABtmoRoFCvPsBAumNm6soZG2Gk5GyVTo2sJncSyp0jQTYoR6WDvTwaaEcHsxHfvuWhHA3a6bN7twRKtcGok6NsCi7jYRrM2jExsUFMxMQYuJbMhuWNOumEJy9hi29Dmg5zMp/A5+hhPG19j1vBrq8JTLr8ki5VLPmG/PynJHVul440bxg5xuymHUFPBshC+nA9I1FmwbRBTNHAcik3Oae0cxKoI3MOriM42UrPe51nsaGxJ+WfXubAsP84aabUlQSJ1IiE0iPETLUU4CATgfXSCSpuRFRmCGbO+wSpAnzaeaCYW1VNEysRtuXCEL1kUFUbbtMv3Tilt/1c11jt3Q5bbMa84cpWipp8Elw3MZhOHsOlwwVUQM3lAR35JiFQbaYCRnMF2lxAWoOg2gyoIV4PouX8HytNIfLhqpJtXB4vjiViUI8IJ7bkC4ikkQvKksnOTKICwnqWSZ9YS5f0WCxmpgjbIq7EJcM4aI2nmhLNY2JIUgOjXZFWBHb+x5oh6cwb0Tv1ackHdKi0I9OO2wE9aogIOn540CCCziyhN+IaejtgAONKznHlHyutPrHGwCx9S6B8kfS4Mfi4Eyv7OU730bT1SCBjt834cXsf43zVjPUqqJjgrjeGnBxSG4aYAKFuVbeCfkDIjAqMb6yLNIbCuvXhMH2/+k2vkNpkORhR59N1CkzoOENvneIosjYmuTxlhUzaGEJQ/iWqx4dmwpmKjrwTiTGTCVozNAYqk/zXOndWxuWSmJkQpJw3pK5KX6QrLt5LATMqpmPAQhkhK6PUjzHUn7E0gHE0kPE0iKkolgkUx9SZmVAdDgpffdyJKg3k7VmzYGCwVXGz/tXmkOIp+vcWs+EMuhhvN0h9uhfzWJziBQmCREGSIFmQIkgVpAnSBRmC//6hkLZwaVhwxlrJSOdqlFtOYxlau9F2QN5Y98xmIAsiM1HVp2VFX+DHHGg6Ecjh3vmqtidX3qHI2qycTk/iwxSt5UzTmEP92ZBnEWTk4Mx8Mpl78ZDokxg/KWb+Q0QkvdKVmq3TMW+RXEgrsziSAfNXFMhDc60N5N9jQzjfO0kBKpUZl0ZmwJ41j/B9Hz6wmRaJB84niNmQrzp9eSlQCDDzazGDdVi3P36VZQ+Jy4f9UBNp+3zTjqI4abaFAm+GShVaXlsGdF3FYzZcDI6cori4kMxUECl9IjJZpzkvitAoxKue+90pDMvcKRxLl53TmOKCmV/xRolNKSqqUxc6LStOETmFOiLZZptlZepcKiAzteG8PEdpnQpbOMNcMsR4RR2Bs0cKFEvSmIjAFcnarqwUL4lDhHmnVkwu1IwshbiCcgvOheZuYyOteufZZwlcTlLgnZ3o/WcYdzZHW/WGaqaVfmTZ1aWCceJjkbZqsfbkOtcFlUZM/jy+hXHDbaUobWqqXaeWobbLO99yG5N3U4wxco0rQGGcOLASFMXeJoham8M+/x6O2WywK2l4HGbq1CoUyC/IZikQhdq3SiuNrvAEj0AVu9x2x3lp/xWzahaxidezFVtdcb5uEnzyl0ZmYiuKI0exvCd4Xc9CV1KB0db00z92wDPde0kukbvZIWN6jUWFTmPIC/Y4UPCm8UfDTFZpZNon1qLFTkBhxzB+FjQRA2Q/YRJT8pQigslMaUpFyAG8TMlXigiqmAZX4xgijKjRlGpLE0GdplRfCaJo0JQaSxNBk6ZmMzcya0FmrcisDdn0Q3HI2sWSppYigmlM1XT/kLQZSNpMJG0WkjYbSZuDpM1F0uYhFc1HxU4m1QJjDK6iL0S5uSj5rgXc3RejEigtcRBtqYPQsiTskmO5vosV+q4VGIKbOkDg0jtRrq+Em1YloaTFar3EGr1EUC8R0kus1Uus00usL97ABr2BjXoDm/QGNhuWtMVBKOwg/i78lT7hBsAvDmwHc/ao3vmUbBmhjeYySZNWvGkfZAgISDSaDo1SVpzGDsAEkF8B+gEapViUoZgUWXcRIGFZNm6gWbAKk0bp0k1MHG9fLYtV4iS2SmLEQFARzRcnf9PUS0LVn05/J9MiRRBU3v2IrvW974v4N00L7ZMk0wXP1409CHo/an8zTRHD3eSJ6m8D4YMkZNl3M79sqeuAsr/m3f+8/yl7A50aiAEJgeBeMWzu7ui9UfUBCe2TIqZIoOd/3/udRBOQidQZUERzb2/VwZN1H/Sju82ew2H2Wfr6qvfVf3hqwDvAIpkQVFy4B9Pe9e4/XvPeceu7h3dvO56iJPf0+A6cqA2ip18ER+iFgggiuOkvj24bby0N9j2UHIkgqIt+sVgfodC4YghLSMjSZbH0VR/6dMDrYJeKHilKTemt6v6kvzvn3/RrdWtr0GoN/xL+Sex/cPYLUpepx9cz/D46UPU5KXgAQa+NDps1v6J3xP1i2HtaDB0M9aX2deA7SYff//+gUCovMmIK/qfsFcOk+4Y5ZN97XlG6zebqtMbKgeRFi51vnxTQYBUik2rS/Cn6PC8ADR8FGxsRPB82dzfND90gIcshOcYUkfjherBz53odpm6TP8txlwOZ71xmfHHOvq053qFF/MRlS3jP0ELudrf2OeN8DHvp6ZceLe8qKYvWz/7yp0u4dKPfli3CYq0O13Ih71mylJ80tOi10On8wi+F4+LWgDPeJ30msSQt9/vkmHq9/Lvo2b461mP801v3W4xTcs6CbvF9UDdrSt+A8OUbpSh55qAUFXWznBBfdeJ8a4d7ugT5tvxUza3h9m4H7ptTqiG4z0g5dc0X29OcGlhpGFMpQo9ytTS+NViZpNdvU4kWx+LKxNY10kQ1yqGXrhe4/1nvP7E+nd5A92TtaRplbHSqoIdOqtRWti+fkB5/n1+/VvCmz12pG1kpQWsfi1ftlBobm0bpngs16CHkbIwdLnParxtTV3QYRlfJ0KFskH7pdN/YDn+yRuSd7sNH3aO0DYPggk6uWuXrfOc+fa3VTxFVvKaNxHsiHmsXyCLIE5yuOeN3/Jdf8HBL/5M6shjyhxHx9BjB1O0+4NLOnjLLSxwO7ukN4jMbOIcD879KLSi6Pk61Oqm2377n8079PXEEQ7cy7OKEC9nbpet118fxweTafpt69x/Bt8UqGzNQt7aelpc44dn5cqhwf71+qKp/Zf/+a0zcizOUWpl/iBcSXip0pplkatCchoH5c5aUM8I7/dWxAej8WicPL1URFZ9BDJelUwEwTkGqUhgSlydVes95YdXvhh9Gfz/aeFWvgVb4tuLbcv4+wLdutVZv/cUonwBD/6eDlE0aSiKK/uoH3+J1wDE/jMVqY2ysGufN84oIXB0sPzy8ollX/LegY74DgJXJR57sn+VGza0x3DnuIgABFM15LmajjjsNlYj+JEZGbuRYcAMOWxFkPN2w6Wd46xo4gVWQR/X4l
}
@font-face {
font-family: KaTeX_Size4;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
@font-face {
font-family: KaTeX_Typewriter;
font-style: normal;
font-weight: 400;
src: url(data:font/woff2;base64,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
}
.katex {
text-rendering: auto;
font: normal 1.21em KaTeX_Main,Times New Roman,serif;
line-height: 1.2;
text-indent: 0;
}
.katex * {
-ms-high-contrast-adjust: none!important;
border-color: currentColor;
}
.katex .katex-version:after {
content: "0.16.9";
}
.katex .katex-mathml {
clip: rect(1px,1px,1px,1px);
border: 0;
height: 1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.katex .katex-html>.newline {
display: block;
}
.katex .base {
position: relative;
white-space: nowrap;
width: -webkit-min-content;
width: -moz-min-content;
width: min-content;
}
.katex .base,
.katex .strut {
display: inline-block;
}
.katex .textbf {
font-weight: 700;
}
.katex .textit {
font-style: italic;
}
.katex .textrm {
font-family: KaTeX_Main;
}
.katex .textsf {
font-family: KaTeX_SansSerif;
}
.katex .texttt {
font-family: KaTeX_Typewriter;
}
.katex .mathnormal {
font-family: KaTeX_Math;
font-style: italic;
}
.katex .mathit {
font-family: KaTeX_Main;
font-style: italic;
}
.katex .mathrm {
font-style: normal;
}
.katex .mathbf {
font-family: KaTeX_Main;
font-weight: 700;
}
.katex .boldsymbol {
font-family: KaTeX_Math;
font-style: italic;
font-weight: 700;
}
.katex .amsrm,
.katex .mathbb,
.katex .textbb {
font-family: KaTeX_AMS;
}
.katex .mathcal {
font-family: KaTeX_Caligraphic;
}
.katex .mathfrak,
.katex .textfrak {
font-family: KaTeX_Fraktur;
}
.katex .mathboldfrak,
.katex .textboldfrak {
font-family: KaTeX_Fraktur;
font-weight: 700;
}
.katex .mathtt {
font-family: KaTeX_Typewriter;
}
.katex .mathscr,
.katex .textscr {
font-family: KaTeX_Script;
}
.katex .mathsf,
.katex .textsf {
font-family: KaTeX_SansSerif;
}
.katex .mathboldsf,
.katex .textboldsf {
font-family: KaTeX_SansSerif;
font-weight: 700;
}
.katex .mathitsf,
.katex .textitsf {
font-family: KaTeX_SansSerif;
font-style: italic;
}
.katex .mainrm {
font-family: KaTeX_Main;
font-style: normal;
}
.katex .vlist-t {
border-collapse: collapse;
display: inline-table;
table-layout: fixed;
}
.katex .vlist-r {
display: table-row;
}
.katex .vlist {
display: table-cell;
position: relative;
vertical-align: bottom;
}
.katex .vlist>span {
display: block;
height: 0;
position: relative;
}
.katex .vlist>span>span {
display: inline-block;
}
.katex .vlist>span>.pstrut {
overflow: hidden;
width: 0;
}
.katex .vlist-t2 {
margin-right: -2px;
}
.katex .vlist-s {
display: table-cell;
font-size: 1px;
min-width: 2px;
vertical-align: bottom;
width: 2px;
}
.katex .vbox {
align-items: baseline;
display: inline-flex;
flex-direction: column;
}
.katex .hbox {
width: 100%;
}
.katex .hbox,
.katex .thinbox {
display: inline-flex;
flex-direction: row;
}
.katex .thinbox {
max-width: 0;
width: 0;
}
.katex .msupsub {
text-align: left;
}
.katex .mfrac>span>span {
text-align: center;
}
.katex .mfrac .frac-line {
border-bottom-style: solid;
display: inline-block;
width: 100%;
}
.katex .hdashline,
.katex .hline,
.katex .mfrac .frac-line,
.katex .overline .overline-line,
.katex .rule,
.katex .underline .underline-line {
min-height: 1px;
}
.katex .mspace {
display: inline-block;
}
.katex .clap,
.katex .llap,
.katex .rlap {
position: relative;
width: 0;
}
.katex .clap>.inner,
.katex .llap>.inner,
.katex .rlap>.inner {
position: absolute;
}
.katex .clap>.fix,
.katex .llap>.fix,
.katex .rlap>.fix {
display: inline-block;
}
.katex .llap>.inner {
right: 0;
}
.katex .clap>.inner,
.katex .rlap>.inner {
left: 0;
}
.katex .clap>.inner>span {
margin-left: -50%;
margin-right: 50%;
}
.katex .rule {
border: 0 solid;
display: inline-block;
position: relative;
}
.katex .hline,
.katex .overline .overline-line,
.katex .underline .underline-line {
border-bottom-style: solid;
display: inline-block;
width: 100%;
}
.katex .hdashline {
border-bottom-style: dashed;
display: inline-block;
width: 100%;
}
.katex .sqrt>.root {
margin-left: .27777778em;
margin-right: -.55555556em;
}
.katex .fontsize-ensurer.reset-size1.size1,
.katex .sizing.reset-size1.size1 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size1.size2,
.katex .sizing.reset-size1.size2 {
font-size: 1.2em;
}
.katex .fontsize-ensurer.reset-size1.size3,
.katex .sizing.reset-size1.size3 {
font-size: 1.4em;
}
.katex .fontsize-ensurer.reset-size1.size4,
.katex .sizing.reset-size1.size4 {
font-size: 1.6em;
}
.katex .fontsize-ensurer.reset-size1.size5,
.katex .sizing.reset-size1.size5 {
font-size: 1.8em;
}
.katex .fontsize-ensurer.reset-size1.size6,
.katex .sizing.reset-size1.size6 {
font-size: 2em;
}
.katex .fontsize-ensurer.reset-size1.size7,
.katex .sizing.reset-size1.size7 {
font-size: 2.4em;
}
.katex .fontsize-ensurer.reset-size1.size8,
.katex .sizing.reset-size1.size8 {
font-size: 2.88em;
}
.katex .fontsize-ensurer.reset-size1.size9,
.katex .sizing.reset-size1.size9 {
font-size: 3.456em;
}
.katex .fontsize-ensurer.reset-size1.size10,
.katex .sizing.reset-size1.size10 {
font-size: 4.148em;
}
.katex .fontsize-ensurer.reset-size1.size11,
.katex .sizing.reset-size1.size11 {
font-size: 4.976em;
}
.katex .fontsize-ensurer.reset-size2.size1,
.katex .sizing.reset-size2.size1 {
font-size: .83333333em;
}
.katex .fontsize-ensurer.reset-size2.size2,
.katex .sizing.reset-size2.size2 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size2.size3,
.katex .sizing.reset-size2.size3 {
font-size: 1.16666667em;
}
.katex .fontsize-ensurer.reset-size2.size4,
.katex .sizing.reset-size2.size4 {
font-size: 1.33333333em;
}
.katex .fontsize-ensurer.reset-size2.size5,
.katex .sizing.reset-size2.size5 {
font-size: 1.5em;
}
.katex .fontsize-ensurer.reset-size2.size6,
.katex .sizing.reset-size2.size6 {
font-size: 1.66666667em;
}
.katex .fontsize-ensurer.reset-size2.size7,
.katex .sizing.reset-size2.size7 {
font-size: 2em;
}
.katex .fontsize-ensurer.reset-size2.size8,
.katex .sizing.reset-size2.size8 {
font-size: 2.4em;
}
.katex .fontsize-ensurer.reset-size2.size9,
.katex .sizing.reset-size2.size9 {
font-size: 2.88em;
}
.katex .fontsize-ensurer.reset-size2.size10,
.katex .sizing.reset-size2.size10 {
font-size: 3.45666667em;
}
.katex .fontsize-ensurer.reset-size2.size11,
.katex .sizing.reset-size2.size11 {
font-size: 4.14666667em;
}
.katex .fontsize-ensurer.reset-size3.size1,
.katex .sizing.reset-size3.size1 {
font-size: .71428571em;
}
.katex .fontsize-ensurer.reset-size3.size2,
.katex .sizing.reset-size3.size2 {
font-size: .85714286em;
}
.katex .fontsize-ensurer.reset-size3.size3,
.katex .sizing.reset-size3.size3 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size3.size4,
.katex .sizing.reset-size3.size4 {
font-size: 1.14285714em;
}
.katex .fontsize-ensurer.reset-size3.size5,
.katex .sizing.reset-size3.size5 {
font-size: 1.28571429em;
}
.katex .fontsize-ensurer.reset-size3.size6,
.katex .sizing.reset-size3.size6 {
font-size: 1.42857143em;
}
.katex .fontsize-ensurer.reset-size3.size7,
.katex .sizing.reset-size3.size7 {
font-size: 1.71428571em;
}
.katex .fontsize-ensurer.reset-size3.size8,
.katex .sizing.reset-size3.size8 {
font-size: 2.05714286em;
}
.katex .fontsize-ensurer.reset-size3.size9,
.katex .sizing.reset-size3.size9 {
font-size: 2.46857143em;
}
.katex .fontsize-ensurer.reset-size3.size10,
.katex .sizing.reset-size3.size10 {
font-size: 2.96285714em;
}
.katex .fontsize-ensurer.reset-size3.size11,
.katex .sizing.reset-size3.size11 {
font-size: 3.55428571em;
}
.katex .fontsize-ensurer.reset-size4.size1,
.katex .sizing.reset-size4.size1 {
font-size: .625em;
}
.katex .fontsize-ensurer.reset-size4.size2,
.katex .sizing.reset-size4.size2 {
font-size: .75em;
}
.katex .fontsize-ensurer.reset-size4.size3,
.katex .sizing.reset-size4.size3 {
font-size: .875em;
}
.katex .fontsize-ensurer.reset-size4.size4,
.katex .sizing.reset-size4.size4 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size4.size5,
.katex .sizing.reset-size4.size5 {
font-size: 1.125em;
}
.katex .fontsize-ensurer.reset-size4.size6,
.katex .sizing.reset-size4.size6 {
font-size: 1.25em;
}
.katex .fontsize-ensurer.reset-size4.size7,
.katex .sizing.reset-size4.size7 {
font-size: 1.5em;
}
.katex .fontsize-ensurer.reset-size4.size8,
.katex .sizing.reset-size4.size8 {
font-size: 1.8em;
}
.katex .fontsize-ensurer.reset-size4.size9,
.katex .sizing.reset-size4.size9 {
font-size: 2.16em;
}
.katex .fontsize-ensurer.reset-size4.size10,
.katex .sizing.reset-size4.size10 {
font-size: 2.5925em;
}
.katex .fontsize-ensurer.reset-size4.size11,
.katex .sizing.reset-size4.size11 {
font-size: 3.11em;
}
.katex .fontsize-ensurer.reset-size5.size1,
.katex .sizing.reset-size5.size1 {
font-size: .55555556em;
}
.katex .fontsize-ensurer.reset-size5.size2,
.katex .sizing.reset-size5.size2 {
font-size: .66666667em;
}
.katex .fontsize-ensurer.reset-size5.size3,
.katex .sizing.reset-size5.size3 {
font-size: .77777778em;
}
.katex .fontsize-ensurer.reset-size5.size4,
.katex .sizing.reset-size5.size4 {
font-size: .88888889em;
}
.katex .fontsize-ensurer.reset-size5.size5,
.katex .sizing.reset-size5.size5 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size5.size6,
.katex .sizing.reset-size5.size6 {
font-size: 1.11111111em;
}
.katex .fontsize-ensurer.reset-size5.size7,
.katex .sizing.reset-size5.size7 {
font-size: 1.33333333em;
}
.katex .fontsize-ensurer.reset-size5.size8,
.katex .sizing.reset-size5.size8 {
font-size: 1.6em;
}
.katex .fontsize-ensurer.reset-size5.size9,
.katex .sizing.reset-size5.size9 {
font-size: 1.92em;
}
.katex .fontsize-ensurer.reset-size5.size10,
.katex .sizing.reset-size5.size10 {
font-size: 2.30444444em;
}
.katex .fontsize-ensurer.reset-size5.size11,
.katex .sizing.reset-size5.size11 {
font-size: 2.76444444em;
}
.katex .fontsize-ensurer.reset-size6.size1,
.katex .sizing.reset-size6.size1 {
font-size: .5em;
}
.katex .fontsize-ensurer.reset-size6.size2,
.katex .sizing.reset-size6.size2 {
font-size: .6em;
}
.katex .fontsize-ensurer.reset-size6.size3,
.katex .sizing.reset-size6.size3 {
font-size: .7em;
}
.katex .fontsize-ensurer.reset-size6.size4,
.katex .sizing.reset-size6.size4 {
font-size: .8em;
}
.katex .fontsize-ensurer.reset-size6.size5,
.katex .sizing.reset-size6.size5 {
font-size: .9em;
}
.katex .fontsize-ensurer.reset-size6.size6,
.katex .sizing.reset-size6.size6 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size6.size7,
.katex .sizing.reset-size6.size7 {
font-size: 1.2em;
}
.katex .fontsize-ensurer.reset-size6.size8,
.katex .sizing.reset-size6.size8 {
font-size: 1.44em;
}
.katex .fontsize-ensurer.reset-size6.size9,
.katex .sizing.reset-size6.size9 {
font-size: 1.728em;
}
.katex .fontsize-ensurer.reset-size6.size10,
.katex .sizing.reset-size6.size10 {
font-size: 2.074em;
}
.katex .fontsize-ensurer.reset-size6.size11,
.katex .sizing.reset-size6.size11 {
font-size: 2.488em;
}
.katex .fontsize-ensurer.reset-size7.size1,
.katex .sizing.reset-size7.size1 {
font-size: .41666667em;
}
.katex .fontsize-ensurer.reset-size7.size2,
.katex .sizing.reset-size7.size2 {
font-size: .5em;
}
.katex .fontsize-ensurer.reset-size7.size3,
.katex .sizing.reset-size7.size3 {
font-size: .58333333em;
}
.katex .fontsize-ensurer.reset-size7.size4,
.katex .sizing.reset-size7.size4 {
font-size: .66666667em;
}
.katex .fontsize-ensurer.reset-size7.size5,
.katex .sizing.reset-size7.size5 {
font-size: .75em;
}
.katex .fontsize-ensurer.reset-size7.size6,
.katex .sizing.reset-size7.size6 {
font-size: .83333333em;
}
.katex .fontsize-ensurer.reset-size7.size7,
.katex .sizing.reset-size7.size7 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size7.size8,
.katex .sizing.reset-size7.size8 {
font-size: 1.2em;
}
.katex .fontsize-ensurer.reset-size7.size9,
.katex .sizing.reset-size7.size9 {
font-size: 1.44em;
}
.katex .fontsize-ensurer.reset-size7.size10,
.katex .sizing.reset-size7.size10 {
font-size: 1.72833333em;
}
.katex .fontsize-ensurer.reset-size7.size11,
.katex .sizing.reset-size7.size11 {
font-size: 2.07333333em;
}
.katex .fontsize-ensurer.reset-size8.size1,
.katex .sizing.reset-size8.size1 {
font-size: .34722222em;
}
.katex .fontsize-ensurer.reset-size8.size2,
.katex .sizing.reset-size8.size2 {
font-size: .41666667em;
}
.katex .fontsize-ensurer.reset-size8.size3,
.katex .sizing.reset-size8.size3 {
font-size: .48611111em;
}
.katex .fontsize-ensurer.reset-size8.size4,
.katex .sizing.reset-size8.size4 {
font-size: .55555556em;
}
.katex .fontsize-ensurer.reset-size8.size5,
.katex .sizing.reset-size8.size5 {
font-size: .625em;
}
.katex .fontsize-ensurer.reset-size8.size6,
.katex .sizing.reset-size8.size6 {
font-size: .69444444em;
}
.katex .fontsize-ensurer.reset-size8.size7,
.katex .sizing.reset-size8.size7 {
font-size: .83333333em;
}
.katex .fontsize-ensurer.reset-size8.size8,
.katex .sizing.reset-size8.size8 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size8.size9,
.katex .sizing.reset-size8.size9 {
font-size: 1.2em;
}
.katex .fontsize-ensurer.reset-size8.size10,
.katex .sizing.reset-size8.size10 {
font-size: 1.44027778em;
}
.katex .fontsize-ensurer.reset-size8.size11,
.katex .sizing.reset-size8.size11 {
font-size: 1.72777778em;
}
.katex .fontsize-ensurer.reset-size9.size1,
.katex .sizing.reset-size9.size1 {
font-size: .28935185em;
}
.katex .fontsize-ensurer.reset-size9.size2,
.katex .sizing.reset-size9.size2 {
font-size: .34722222em;
}
.katex .fontsize-ensurer.reset-size9.size3,
.katex .sizing.reset-size9.size3 {
font-size: .40509259em;
}
.katex .fontsize-ensurer.reset-size9.size4,
.katex .sizing.reset-size9.size4 {
font-size: .46296296em;
}
.katex .fontsize-ensurer.reset-size9.size5,
.katex .sizing.reset-size9.size5 {
font-size: .52083333em;
}
.katex .fontsize-ensurer.reset-size9.size6,
.katex .sizing.reset-size9.size6 {
font-size: .5787037em;
}
.katex .fontsize-ensurer.reset-size9.size7,
.katex .sizing.reset-size9.size7 {
font-size: .69444444em;
}
.katex .fontsize-ensurer.reset-size9.size8,
.katex .sizing.reset-size9.size8 {
font-size: .83333333em;
}
.katex .fontsize-ensurer.reset-size9.size9,
.katex .sizing.reset-size9.size9 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size9.size10,
.katex .sizing.reset-size9.size10 {
font-size: 1.20023148em;
}
.katex .fontsize-ensurer.reset-size9.size11,
.katex .sizing.reset-size9.size11 {
font-size: 1.43981481em;
}
.katex .fontsize-ensurer.reset-size10.size1,
.katex .sizing.reset-size10.size1 {
font-size: .24108004em;
}
.katex .fontsize-ensurer.reset-size10.size2,
.katex .sizing.reset-size10.size2 {
font-size: .28929605em;
}
.katex .fontsize-ensurer.reset-size10.size3,
.katex .sizing.reset-size10.size3 {
font-size: .33751205em;
}
.katex .fontsize-ensurer.reset-size10.size4,
.katex .sizing.reset-size10.size4 {
font-size: .38572806em;
}
.katex .fontsize-ensurer.reset-size10.size5,
.katex .sizing.reset-size10.size5 {
font-size: .43394407em;
}
.katex .fontsize-ensurer.reset-size10.size6,
.katex .sizing.reset-size10.size6 {
font-size: .48216008em;
}
.katex .fontsize-ensurer.reset-size10.size7,
.katex .sizing.reset-size10.size7 {
font-size: .57859209em;
}
.katex .fontsize-ensurer.reset-size10.size8,
.katex .sizing.reset-size10.size8 {
font-size: .69431051em;
}
.katex .fontsize-ensurer.reset-size10.size9,
.katex .sizing.reset-size10.size9 {
font-size: .83317261em;
}
.katex .fontsize-ensurer.reset-size10.size10,
.katex .sizing.reset-size10.size10 {
font-size: 1em;
}
.katex .fontsize-ensurer.reset-size10.size11,
.katex .sizing.reset-size10.size11 {
font-size: 1.19961427em;
}
.katex .fontsize-ensurer.reset-size11.size1,
.katex .sizing.reset-size11.size1 {
font-size: .20096463em;
}
.katex .fontsize-ensurer.reset-size11.size2,
.katex .sizing.reset-size11.size2 {
font-size: .24115756em;
}
.katex .fontsize-ensurer.reset-size11.size3,
.katex .sizing.reset-size11.size3 {
font-size: .28135048em;
}
.katex .fontsize-ensurer.reset-size11.size4,
.katex .sizing.reset-size11.size4 {
font-size: .32154341em;
}
.katex .fontsize-ensurer.reset-size11.size5,
.katex .sizing.reset-size11.size5 {
font-size: .36173633em;
}
.katex .fontsize-ensurer.reset-size11.size6,
.katex .sizing.reset-size11.size6 {
font-size: .40192926em;
}
.katex .fontsize-ensurer.reset-size11.size7,
.katex .sizing.reset-size11.size7 {
font-size: .48231511em;
}
.katex .fontsize-ensurer.reset-size11.size8,
.katex .sizing.reset-size11.size8 {
font-size: .57877814em;
}
.katex .fontsize-ensurer.reset-size11.size9,
.katex .sizing.reset-size11.size9 {
font-size: .69453376em;
}
.katex .fontsize-ensurer.reset-size11.size10,
.katex .sizing.reset-size11.size10 {
font-size: .83360129em;
}
.katex .fontsize-ensurer.reset-size11.size11,
.katex .sizing.reset-size11.size11 {
font-size: 1em;
}
.katex .delimsizing.size1 {
font-family: KaTeX_Size1;
}
.katex .delimsizing.size2 {
font-family: KaTeX_Size2;
}
.katex .delimsizing.size3 {
font-family: KaTeX_Size3;
}
.katex .delimsizing.size4 {
font-family: KaTeX_Size4;
}
.katex .delimsizing.mult .delim-size1>span {
font-family: KaTeX_Size1;
}
.katex .delimsizing.mult .delim-size4>span {
font-family: KaTeX_Size4;
}
.katex .nulldelimiter {
display: inline-block;
width: .12em;
}
.katex .delimcenter,
.katex .op-symbol {
position: relative;
}
.katex .op-symbol.small-op {
font-family: KaTeX_Size1;
}
.katex .op-symbol.large-op {
font-family: KaTeX_Size2;
}
.katex .accent>.vlist-t,
.katex .op-limits>.vlist-t {
text-align: center;
}
.katex .accent .accent-body {
position: relative;
}
.katex .accent .accent-body:not(.accent-full) {
width: 0;
}
.katex .overlay {
display: block;
}
.katex .mtable .vertical-separator {
display: inline-block;
min-width: 1px;
}
.katex .mtable .arraycolsep {
display: inline-block;
}
.katex .mtable .col-align-c>.vlist-t {
text-align: center;
}
.katex .mtable .col-align-l>.vlist-t {
text-align: left;
}
.katex .mtable .col-align-r>.vlist-t {
text-align: right;
}
.katex .svg-align {
text-align: left;
}
.katex svg {
fill: currentColor;
stroke: currentColor;
fill-rule: nonzero;
fill-opacity: 1;
stroke-width: 1;
stroke-linecap: butt;
stroke-linejoin: miter;
stroke-miterlimit: 4;
stroke-dasharray: none;
stroke-dashoffset: 0;
stroke-opacity: 1;
display: block;
height: inherit;
position: absolute;
width: 100%;
}
.katex svg path {
stroke: none;
}
.katex img {
border-style: none;
max-height: none;
max-width: none;
min-height: 0;
min-width: 0;
}
.katex .stretchy {
display: block;
overflow: hidden;
position: relative;
width: 100%;
}
.katex .stretchy:after,
.katex .stretchy:before {
content: "";
}
.katex .hide-tail {
overflow: hidden;
position: relative;
width: 100%;
}
.katex .halfarrow-left {
left: 0;
overflow: hidden;
position: absolute;
width: 50.2%;
}
.katex .halfarrow-right {
overflow: hidden;
position: absolute;
right: 0;
width: 50.2%;
}
.katex .brace-left {
left: 0;
overflow: hidden;
position: absolute;
width: 25.1%;
}
.katex .brace-center {
left: 25%;
overflow: hidden;
position: absolute;
width: 50%;
}
.katex .brace-right {
overflow: hidden;
position: absolute;
right: 0;
width: 25.1%;
}
.katex .x-arrow-pad {
padding: 0 .5em;
}
.katex .cd-arrow-pad {
padding: 0 .55556em 0 .27778em;
}
.katex .mover,
.katex .munder,
.katex .x-arrow {
text-align: center;
}
.katex .boxpad {
padding: 0 .3em;
}
.katex .fbox,
.katex .fcolorbox {
border: .04em solid;
box-sizing: border-box;
}
.katex .cancel-pad {
padding: 0 .2em;
}
.katex .cancel-lap {
margin-left: -.2em;
margin-right: -.2em;
}
.katex .sout {
border-bottom-style: solid;
border-bottom-width: .08em;
}
.katex .angl {
border-right: .049em solid;
border-top: .049em solid;
box-sizing: border-box;
margin-right: .03889em;
}
.katex .anglpad {
padding: 0 .03889em;
}
.katex .eqn-num:before {
content: "(" counter(katexEqnNo) ")";
counter-increment: katexEqnNo;
}
.katex .mml-eqn-num:before {
content: "(" counter(mmlEqnNo) ")";
counter-increment: mmlEqnNo;
}
.katex .mtr-glue {
width: 50%;
}
.katex .cd-vert-arrow {
display: inline-block;
position: relative;
}
.katex .cd-label-left {
display: inline-block;
position: absolute;
right: calc(50% + .3em);
text-align: left;
}
.katex .cd-label-right {
display: inline-block;
left: calc(50% + .3em);
position: absolute;
text-align: right;
}
.katex-display {
display: block;
margin: 1em 0;
text-align: center;
}
.katex-display>.katex {
display: block;
text-align: center;
white-space: nowrap;
}
.katex-display>.katex>.katex-html {
display: block;
position: relative;
}
.katex-display>.katex>.katex-html>.tag {
position: absolute;
right: 0;
}
.katex-display.leqno>.katex>.katex-html>.tag {
left: 0;
right: auto;
}
.katex-display.fleqn>.katex {
padding-left: 2em;
text-align: left;
}
body {
counter-reset: katexEqnNo mmlEqnNo;
}</style><script>(function(wA,d0){typeof exports=="object"&&typeof module<"u"?module.exports=d0():typeof define=="function"&&define.amd?define(d0):(wA=typeof globalThis<"u"?globalThis:wA||self,wA.mermaid=d0())})(this,function(){"use strict";function wA(i){for(var a=[],f=1;f<arguments.length;f++)a[f-1]=arguments[f];var p=Array.from(typeof i=="string"?[i]:i);p[p.length-1]=p[p.length-1].replace(/\r?\n([\t ]*)$/,"");var v=p.reduce(function(E,_){var L=_.match(/\n([\t ]+|(?!\s).)/g);return L?E.concat(L.map(function(N){var B,j;return(j=(B=N.match(/[\t ]/g))===null||B===void 0?void 0:B.length)!==null&&j!==void 0?j:0})):E},[]);if(v.length){var m=new RegExp(`
[ ]{`+Math.min.apply(Math,v)+"}","g");p=p.map(function(E){return E.replace(m,`
`)})}p[0]=p[0].replace(/^\r?\n/,"");var b=p[0];return a.forEach(function(E,_){var L=b.match(/(?:^|\n)( *)$/),N=L?L[1]:"",B=E;typeof E=="string"&&E.includes(`
`)&&(B=String(E).split(`
`).map(function(j,R){return R===0?j:""+N+j}).join(`
`)),b+=B+p[_+1]}),b}var d0=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function B7(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var ILt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f=1e3,p=6e4,v=36e5,m="millisecond",b="second",E="minute",_="hour",L="day",N="week",B="month",j="quarter",R="year",z="date",K="Invalid Date",it=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,st=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,ut={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(nt){var Ot=["th","st","nd","rd"],Nt=nt%100;return"["+nt+(Ot[(Nt-20)%10]||Ot[Nt]||Ot[0])+"]"}},bt=function(nt,Ot,Nt){var qt=String(nt);return!qt||qt.length>=Ot?nt:""+Array(Ot+1-qt.length).join(Nt)+nt},mt={s:bt,z:function(nt){var Ot=-nt.utcOffset(),Nt=Math.abs(Ot),qt=Math.floor(Nt/60),Ct=Nt%60;return(Ot<=0?"+":"-")+bt(qt,2,"0")+":"+bt(Ct,2,"0")},m:function nt(Ot,Nt){if(Ot.date()<Nt.date())return-nt(Nt,Ot);var qt=12*(Nt.year()-Ot.year())+(Nt.month()-Ot.month()),Ct=Ot.clone().add(qt,B),Z=Nt-Ct<0,Tt=Ot.clone().add(qt+(Z?-1:1),B);return+(-(qt+(Nt-Ct)/(Z?Ct-Tt:Tt-Ct))||0)},a:function(nt){return nt<0?Math.ceil(nt)||0:Math.floor(nt)},p:function(nt){return{M:B,y:R,w:N,d:L,D:z,h:_,m:E,s:b,ms:m,Q:j}[nt]||String(nt||"").toLowerCase().replace(/s$/,"")},u:function(nt){return nt===void 0}},yt="en",dt={};dt[yt]=ut;var ht=function(nt){return nt instanceof U},wt=function nt(Ot,Nt,qt){var Ct;if(!Ot)return yt;if(typeof Ot=="string"){var Z=Ot.toLowerCase();dt[Z]&&(Ct=Z),Nt&&(dt[Z]=Nt,Ct=Z);var Tt=Ot.split("-");if(!Ct&&Tt.length>1)return nt(Tt[0])}else{var Ht=Ot.name;dt[Ht]=Ot,Ct=Ht}return!qt&&Ct&&(yt=Ct),Ct||!qt&&yt},X=function(nt,Ot){if(ht(nt))return nt.clone();var Nt=typeof Ot=="object"?Ot:{};return Nt.date=nt,Nt.args=arguments,new U(Nt)},pt=mt;pt.l=wt,pt.i=ht,pt.w=function(nt,Ot){return X(nt,{locale:Ot.$L,utc:Ot.$u,x:Ot.$x,$offset:Ot.$offset})};var U=function(){function nt(Nt){this.$L=wt(Nt.locale,null,!0),this.parse(Nt)}var Ot=nt.prototype;return Ot.parse=function(Nt){this.$d=function(qt){var Ct=qt.date,Z=qt.utc;if(Ct===null)return new Date(NaN);if(pt.u(Ct))return new Date;if(Ct instanceof Date)return new Date(Ct);if(typeof Ct=="string"&&!/Z$/i.test(Ct)){var Tt=Ct.match(it);if(Tt){var Ht=Tt[2]-1||0,It=(Tt[7]||"0").substring(0,3);return Z?new Date(Date.UTC(Tt[1],Ht,Tt[3]||1,Tt[4]||0,Tt[5]||0,Tt[6]||0,It)):new Date(Tt[1],Ht,Tt[3]||1,Tt[4]||0,Tt[5]||0,Tt[6]||0,It)}}return new Date(Ct)}(Nt),this.$x=Nt.x||{},this.init()},Ot.init=function(){var Nt=this.$d;this.$y=Nt.getFullYear(),this.$M=Nt.getMonth(),this.$D=Nt.getDate(),this.$W=Nt.getDay(),this.$H=Nt.getHours(),this.$m=Nt.getMinutes(),this.$s=Nt.getSeconds(),this.$ms=Nt.getMilliseconds()},Ot.$utils=function(){return pt},Ot.isValid=function(){return this.$d.toString()!==K},Ot.isSame=function(Nt,qt){var Ct=X(Nt);return this.startOf(qt)<=Ct&&Ct<=this.endOf(qt)},Ot.isAfter=function(Nt,qt){return X(Nt)<this.startOf(qt)},Ot.isBefore=function(Nt,qt){return this.endOf(qt)<X(Nt)},Ot.$g=function(Nt,qt,Ct){return pt.u(Nt)?this[qt]:this.set(Ct,Nt)},Ot.unix=function(){return Math.floor(this.valueOf()/1e3)},Ot.valueOf=function(){return this.$d.getTime()},Ot.startOf=function(Nt,qt){var Ct=this,Z=!!pt.u(qt)||qt,Tt=pt.p(Nt),Ht=function(Ke,we){var _e=pt.w(Ct.$u?Date.UTC(Ct.$y,we,Ke):new Date(Ct.$y,we,Ke),Ct);return Z?_e:_e.endOf(L)},It=function(Ke,we){return pt.w(Ct.toDate()[Ke].apply(Ct.toDate("s"),(Z?[0,0,0,0]:[23,59,59,999]).slice(we)),Ct)},Ft=this.$W,ke=this.$M,pn=this.$D,Me="set"+(this.$u?"UTC":"");switch(Tt){case R:return Z?Ht(1,0):Ht(31,11);case B:return Z?Ht(1,ke):Ht(0,ke+1);case N:var ve=this.$locale().weekStart||0,Ge=(Ft<ve?Ft+7:Ft)-ve;return Ht(Z?pn-Ge:pn+(6-Ge),ke);case L:case z:return It(Me+"Hours",0);case _:return It(Me+"Minutes",1);case E:return It(M
`+Oc),_e&&(Oc=Qw(Oc,U," "),Oc=Qw(Oc,xt," "),Oc=Qw(Oc,nt," ")),bt&&Ne?bt.createHTML(Oc):Oc},a.setConfig=function(Bi){Uu(Bi),re=!0},a.clearConfig=function(){Lu=null,re=!1},a.isValidAttribute=function(Bi,on,kr){Lu||Uu({});const Ei=$s(Bi),Jo=$s(on);return Fd(Ei,Jo,kr)},a.addHook=function(Bi,on){typeof on=="function"&&(pt[Bi]=pt[Bi]||[],RN(pt[Bi],on))},a.removeHook=function(Bi){if(pt[Bi])return jIt(pt[Bi])},a.removeHooks=function(Bi){pt[Bi]&&(pt[Bi]=[])},a.removeAllHooks=function(){pt={}},a}var eW=WIt();const $N=/<br\s*\/?>/gi,CTe=i=>i?XIt(i).replace(/\\n/g,"#br#").split("#br#"):[""],KIt=i=>eW.sanitize(i),YIt=(i,a)=>{var f;if(((f=a.flowchart)==null?void 0:f.htmlLabels)!==!1){const p=a.securityLevel;p==="antiscript"||p==="strict"?i=KIt(i):p!=="loose"&&(i=XIt(i),i=i.replace(/</g,"&lt;").replace(/>/g,"&gt;"),i=i.replace(/=/g,"&equals;"),i=LTe(i))}return i},Dd=(i,a)=>i&&(a.dompurifyConfig?i=eW.sanitize(YIt(i,a),a.dompurifyConfig).toString():i=eW.sanitize(YIt(i,a),{FORBID_TAGS:["style"]}).toString(),i),_Te=(i,a)=>typeof i=="string"?Dd(i,a):i.flat().map(f=>Dd(f,a)),STe=i=>$N.test(i),ATe=i=>i.split($N),LTe=i=>i.replace(/#br#/g,"<br/>"),XIt=i=>i.replace($N,"#br#"),MTe=i=>{let a="";return i&&(a=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,a=a.replaceAll(/\(/g,"\\("),a=a.replaceAll(/\)/g,"\\)")),a},s1=i=>!(i===!1||["false","null","0"].includes(String(i).trim().toLowerCase())),ITe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.max(...a)},DTe=function(...i){const a=i.filter(f=>!isNaN(f));return Math.min(...a)},zN=function(i){const a=i.split(/(,)/),f=[];for(let p=0;p<a.length;p++){let v=a[p];if(v===","&&p>0&&p+1<a.length){const m=a[p-1],b=a[p+1];OTe(m,b)&&(v=m+","+b,p++,f.pop())}f.push(NTe(v))}return f.join("")},V1t=(i,a)=>Math.max(0,i.split(a).length-1),OTe=(i,a)=>{const f=V1t(i,"~"),p=V1t(a,"~");return f===1&&p===1},NTe=i=>{const a=V1t(i,"~");let f=!1;if(a<=1)return i;a%2!==0&&i.startsWith("~")&&(i=i.substring(1),f=!0);const p=[...i];let v=p.indexOf("~"),m=p.lastIndexOf("~");for(;v!==-1&&m!==-1&&v!==m;)p[v]="<",p[m]=">",v=p.indexOf("~"),m=p.lastIndexOf("~");return f&&p.unshift("~"),p.join("")},Yr={getRows:CTe,sanitizeText:Dd,sanitizeTextOrArray:_Te,hasBreaks:STe,splitBreaks:ATe,lineBreakRegex:$N,removeScript:KIt,getUrl:MTe,evaluate:s1,getMax:ITe,getMin:DTe},nW={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:i=>i>=255?255:i<0?0:i,g:i=>i>=255?255:i<0?0:i,b:i=>i>=255?255:i<0?0:i,h:i=>i%360,s:i=>i>=100?100:i<0?0:i,l:i=>i>=100?100:i<0?0:i,a:i=>i>=1?1:i<0?0:i},toLinear:i=>{const a=i/255;return i>.03928?Math.pow((a+.055)/1.055,2.4):a/12.92},hue2rgb:(i,a,f)=>(f<0&&(f+=1),f>1&&(f-=1),f<1/6?i+(a-i)*6*f:f<1/2?a:f<2/3?i+(a-i)*(2/3-f)*6:i),hsl2rgb:({h:i,s:a,l:f},p)=>{if(!a)return f*2.55;i/=360,a/=100,f/=100;const v=f<.5?f*(1+a):f+a-f*a,m=2*f-v;switch(p){case"r":return nW.hue2rgb(m,v,i+1/3)*255;case"g":return nW.hue2rgb(m,v,i)*255;case"b":return nW.hue2rgb(m,v,i-1/3)*255}},rgb2hsl:({r:i,g:a,b:f},p)=>{i/=255,a/=255,f/=255;const v=Math.max(i,a,f),m=Math.min(i,a,f),b=(v+m)/2;if(p==="l")return b*100;if(v===m)return 0;const E=v-m,_=b>.5?E/(2-v-m):E/(v+m);if(p==="s")return _*100;switch(v){case i:return((a-f)/E+(a<f?6:0))*60;case a:return((f-i)/E+2)*60;case f:return((i-a)/E+4)*60;default:return-1}}},fa={channel:nW,lang:{clamp:(i,a,f)=>a>f?Math.min(a,Math.max(f,i)):Math.min(f,Math.max(a,i)),round:i=>Math.round(i*1e10)/1e10},unit:{dec2hex:i=>{const a=Math.round(i).toString(16);return a.length>1?a:`0${a}`}}},J6={};for(let i=0;i<=255;i++)J6[i]=fa.unit.dec2hex(i);const w0={ALL:0,RGB:1,HSL:2};class PTe{constructor(){this.type=w0.ALL}get(){return this.type}set(a){if(this.type&&this.type!==a)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=a}reset(){this.type=w0.ALL}is(a){return this.type===a}}const FTe=PTe;class BTe{constructor(a,f){this.color=f,this.changed=!1,this.data=a,this.type=new FTe}set(a,f){return this.color=f,this.changed=!1,this.data=a,this.type.type=w0.ALL,this}_ensureHSL(){const a=this.data,{h:f,s:p,l:v}=a;f===vo
`);for(const[f,{detector:p}]of Object.entries(DA))if(p(i,a))return f;throw new aDt(`No diagram type detected matching given configuration for text: ${i}`)},oDt=(...i)=>{for(const{id:a,detector:f,loader:p}of i)cDt(a,f,p)},cDt=(i,a,f)=>{DA[i]?Ut.error(`Detector with key ${i} already exists`):DA[i]={detector:a,loader:f},Ut.debug(`Detector with key ${i} added${f?" with loader":""}`)},t9e=i=>DA[i].loader,U1t=(i,a,{depth:f=2,clobber:p=!1}={})=>{const v={depth:f,clobber:p};return Array.isArray(a)&&!Array.isArray(i)?(a.forEach(m=>U1t(i,m,v)),i):Array.isArray(a)&&Array.isArray(i)?(a.forEach(m=>{i.includes(m)||i.push(m)}),i):i===void 0||f<=0?i!=null&&typeof i=="object"&&typeof a=="object"?Object.assign(i,a):a:(a!==void 0&&typeof i=="object"&&typeof a=="object"&&Object.keys(a).forEach(m=>{typeof a[m]=="object"&&(i[m]===void 0||typeof i[m]=="object")?(i[m]===void 0&&(i[m]=Array.isArray(a[m])?[]:{}),i[m]=U1t(i[m],a[m],{depth:f-1,clobber:p})):(p||typeof i[m]!="object"&&typeof a[m]!="object")&&(i[m]=a[m])}),i)},Y1=U1t;var e9e=typeof global=="object"&&global&&global.Object===Object&&global;const uDt=e9e;var n9e=typeof self=="object"&&self&&self.Object===Object&&self,r9e=uDt||n9e||Function("return this")();const Jw=r9e;var i9e=Jw.Symbol;const Y2=i9e;var lDt=Object.prototype,s9e=lDt.hasOwnProperty,a9e=lDt.toString,GN=Y2?Y2.toStringTag:void 0;function o9e(i){var a=s9e.call(i,GN),f=i[GN];try{i[GN]=void 0;var p=!0}catch{}var v=a9e.call(i);return p&&(a?i[GN]=f:delete i[GN]),v}var c9e=Object.prototype,u9e=c9e.toString;function l9e(i){return u9e.call(i)}var h9e="[object Null]",f9e="[object Undefined]",hDt=Y2?Y2.toStringTag:void 0;function tT(i){return i==null?i===void 0?f9e:h9e:hDt&&hDt in Object(i)?o9e(i):l9e(i)}function Ib(i){var a=typeof i;return i!=null&&(a=="object"||a=="function")}var d9e="[object AsyncFunction]",g9e="[object Function]",p9e="[object GeneratorFunction]",b9e="[object Proxy]";function OA(i){if(!Ib(i))return!1;var a=tT(i);return a==g9e||a==p9e||a==d9e||a==b9e}var v9e=Jw["__core-js_shared__"];const W1t=v9e;var fDt=function(){var i=/[^.]+$/.exec(W1t&&W1t.keys&&W1t.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""}();function w9e(i){return!!fDt&&fDt in i}var m9e=Function.prototype,y9e=m9e.toString;function eT(i){if(i!=null){try{return y9e.call(i)}catch{}try{return i+""}catch{}}return""}var x9e=/[\\^$.*+?()[\]{}|]/g,k9e=/^\[object .+?Constructor\]$/,E9e=Function.prototype,T9e=Object.prototype,C9e=E9e.toString,_9e=T9e.hasOwnProperty,S9e=RegExp("^"+C9e.call(_9e).replace(x9e,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function A9e(i){if(!Ib(i)||w9e(i))return!1;var a=OA(i)?S9e:k9e;return a.test(eT(i))}function L9e(i,a){return i==null?void 0:i[a]}function nT(i,a){var f=L9e(i,a);return A9e(f)?f:void 0}var M9e=nT(Object,"create");const VN=M9e;function I9e(){this.__data__=VN?VN(null):{},this.size=0}function D9e(i){var a=this.has(i)&&delete this.__data__[i];return this.size-=a?1:0,a}var O9e="__lodash_hash_undefined__",N9e=Object.prototype,P9e=N9e.hasOwnProperty;function F9e(i){var a=this.__data__;if(VN){var f=a[i];return f===O9e?void 0:f}return P9e.call(a,i)?a[i]:void 0}var B9e=Object.prototype,R9e=B9e.hasOwnProperty;function j9e(i){var a=this.__data__;return VN?a[i]!==void 0:R9e.call(a,i)}var $9e="__lodash_hash_undefined__";function z9e(i,a){var f=this.__data__;return this.size+=this.has(i)?0:1,f[i]=VN&&a===void 0?$9e:a,this}function rT(i){var a=-1,f=i==null?0:i.length;for(this.clear();++a<f;){var p=i[a];this.set(p[0],p[1])}}rT.prototype.clear=I9e,rT.prototype.delete=D9e,rT.prototype.get=F9e,rT.prototype.has=j9e,rT.prototype.set=z9e;function q9e(){this.__data__=[],this.size=0}function NA(i,a){return i===a||i!==i&&a!==a}function fW(i,a){for(var f=i.length;f--;)if(NA(i[f][0],a))return f;return-1}var H9e=Array.prototype,G9e=H9e.splice;function V9e(i){var a=this.__data__,f=fW(a,i);if(f<0)return!1;var p=a.length-1;return f==p?a.pop():G9e.call(a,f,1),--this.size,!0}function U9e(i){var a=this.__data__,f=fW(a,i);return f<0?void 0:a[f][1]}function W9e(i){return fW(this.__data__,i)>-1}function K9e(i,a){v
`,"ig");i=i.trim().replace(f,"").replace(/'/gm,'"'),Ut.debug(`Detecting diagram directive${a!==null?" type:"+a:""} based on the text:${i}`);let p;const v=[];for(;(p=HN.exec(i))!==null;)if(p.index===HN.lastIndex&&HN.lastIndex++,p&&!a||a&&p[1]&&p[1].match(a)||a&&p[2]&&p[2].match(a)){const m=p[1]?p[1]:p[2],b=p[3]?p[3].trim():p[4]?JSON.parse(p[4].trim()):null;v.push({type:m,args:b})}return v.length===0?{type:i,args:null}:v.length===1?v[0]:v}catch(f){return Ut.error(`ERROR: ${f.message} - Unable to parse directive type: '${a}' based on the text: '${i}'`),{type:void 0,args:null}}},O_e=function(i){return i.replace(HN,"")},N_e=function(i,a){for(const[f,p]of a.entries())if(p.match(i))return f;return-1};function X2(i,a){if(!i)return a;const f=`curve${i.charAt(0).toUpperCase()+i.slice(1)}`;return M_e[f]??a}function P_e(i,a){const f=i.trim();if(f)return a.securityLevel!=="loose"?Q6(f):f}const F_e=(i,...a)=>{const f=i.split("."),p=f.length-1,v=f[p];let m=window;for(let b=0;b<p;b++)if(m=m[f[b]],!m){Ut.error(`Function name: ${i} not found in window`);return}m[v](...a)};function $Dt(i,a){return!i||!a?0:Math.sqrt(Math.pow(a.x-i.x,2)+Math.pow(a.y-i.y,2))}function B_e(i){let a,f=0;i.forEach(v=>{f+=$Dt(v,a),a=v});const p=f/2;return edt(i,p)}function R_e(i){return i.length===1?i[0]:B_e(i)}const zDt=(i,a=2)=>{const f=Math.pow(10,a);return Math.round(i*f)/f},edt=(i,a)=>{let f,p=a;for(const v of i){if(f){const m=$Dt(v,f);if(m<p)p-=m;else{const b=p/m;if(b<=0)return f;if(b>=1)return{x:v.x,y:v.y};if(b>0&&b<1)return{x:zDt((1-b)*f.x+b*v.x,5),y:zDt((1-b)*f.y+b*v.y,5)}}}f=v}throw new Error("Could not find a suitable point for the given distance")},j_e=(i,a,f)=>{Ut.info(`our points ${JSON.stringify(a)}`),a[0]!==f&&(a=a.reverse());const v=edt(a,25),m=i?10:5,b=Math.atan2(a[0].y-v.y,a[0].x-v.x),E={x:0,y:0};return E.x=Math.sin(b)*m+(a[0].x+v.x)/2,E.y=-Math.cos(b)*m+(a[0].y+v.y)/2,E};function $_e(i,a,f){const p=structuredClone(f);Ut.info("our points",p),a!=="start_left"&&a!=="start_right"&&p.reverse();const v=25+i,m=edt(p,v),b=10+i*.5,E=Math.atan2(p[0].y-m.y,p[0].x-m.x),_={x:0,y:0};return a==="start_left"?(_.x=Math.sin(E+Math.PI)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E+Math.PI)*b+(p[0].y+m.y)/2):a==="end_right"?(_.x=Math.sin(E-Math.PI)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E-Math.PI)*b+(p[0].y+m.y)/2-5):a==="end_left"?(_.x=Math.sin(E)*b+(p[0].x+m.x)/2-5,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2-5):(_.x=Math.sin(E)*b+(p[0].x+m.x)/2,_.y=-Math.cos(E)*b+(p[0].y+m.y)/2),_}function em(i){let a="",f="";for(const p of i)p!==void 0&&(p.startsWith("color:")||p.startsWith("text-align:")?f=f+p+";":a=a+p+";");return{style:a,labelStyle:f}}let qDt=0;const HDt=()=>(qDt++,"id-"+Math.random().toString(36).substr(2,12)+"-"+qDt);function z_e(i){let a="";const f="0123456789abcdef",p=f.length;for(let v=0;v<i;v++)a+=f.charAt(Math.floor(Math.random()*p));return a}const GDt=i=>z_e(i.length),q_e=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:""}},H_e=function(i,a){const f=a.text.replace(Yr.lineBreakRegex," "),[,p]=$A(a.fontSize),v=i.append("text");v.attr("x",a.x),v.attr("y",a.y),v.style("text-anchor",a.anchor),v.style("font-family",a.fontFamily),v.style("font-size",p),v.style("font-weight",a.fontWeight),v.attr("fill",a.fill),a.class!==void 0&&v.attr("class",a.class);const m=v.append("tspan");return m.attr("x",a.x+a.textMargin*2),m.attr("fill",a.fill),m.text(f),v},VDt=PA((i,a,f)=>{if(!i||(f=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},f),Yr.lineBreakRegex.test(i)))return i;const p=i.split(" "),v=[];let m="";return p.forEach((b,E)=>{const _=h3(`${b} `,f),L=h3(m,f);if(_>a){const{hyphenatedStrings:j,remainingWord:R}=G_e(b,a,"-",f);v.push(m,...j),m=R}else L+_>=a?(v.push(m),m=b):m=[m,b].filter(Boolean).join(" ");E+1===p.length&&v.push(m)}),v.filter(b=>b!=="").join(f.joinWith)},(i,a,f)=>`${i}${a}${f.fontSize}${f.fontWeight}${f.fontFamily}${f.joinWith}`),G_e=PA((i,a,f="-",p)=>{p=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},p);const v=[...i],m=[];let b="";return v.forEac
`);const p=fdt(a);p.attr("viewBox","0 0 2412 512"),og(p,100,512,!0);const v=p.append("g");v.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"),v.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"),v.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"),v.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"),v.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"),v.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"),v.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"),v.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${f}`)}},OSe=TOt,NSe={db:{},renderer:TOt,parser:{parser:{yy:{}},parse:()=>{}}},COt="flowchart-elk",PSe={id:COt,detector:(i,a)=>{var f;return!!(/^\s*flowchart-elk/.test(i)||/^\s*flowchart|graph/.test(i)&&((f=a==null?void 0:a.flowchart)==null?void 0:f.defaultRenderer)==="elk")},loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>kUe);return{id:COt,diagram:i}}},_Ot="timeline",FSe={id:_Ot,detector:i=>/^\s*timeline/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>zUe);return{id:_Ot,diagram:i}}},SOt="mindmap",BSe={id:SOt,detector:i=>/^\s*mindmap/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>vWe);return{id:SOt,diagram:i}}},AOt="sankey",RSe={id:AOt,detector:i=>/^\s*sankey-beta/.test(i),loader:async()=>{const{diagram:i}=await Promise.resolve().then(()=>WWe);return{id:AOt,diagram:i}}},DW={},jSe=(i,a,f)=>{let p="";return i in DW&&DW[i]?p=DW[i](f):Ut.warn(`No theme found for ${i}`),` & {
font-family: ${f.fontFamily};
font-size: ${f.fontSize};
fill: ${f.textColor}
}
/* Classes common for multiple diagrams */
& .error-icon {
fill: ${f.errorBkgColor};
}
& .error-text {
fill: ${f.errorTextColor};
stroke: ${f.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: ${f.lineColor};
stroke: ${f.lineColor};
}
& .marker.cross {
stroke: ${f.lineColor};
}
& svg {
font-family: ${f.fontFamily};
font-size: ${f.fontSize};
}
${p}
${a}
`},$Se=(i,a)=>{a!==void 0&&(DW[i]=a)},zSe=jSe;let ddt="",gdt="",pdt="";const bdt=i=>Dd(i,Le()),ap=()=>{ddt="",pdt="",gdt=""},cg=i=>{ddt=bdt(i).replace(/^\s+/g,"")},op=()=>ddt,cp=i=>{pdt=bdt(i).replace(/\n\s+/g,`
`)},up=()=>pdt,Z2=i=>{gdt=bdt(i)},Db=()=>gdt,LOt=Object.freeze(Object.defineProperty({__proto__:null,clear:ap,getAccDescription:up,getAccTitle:op,getDiagramTitle:Db,setAccDescription:cp,setAccTitle:cg,setDiagramTitle:Z2},Symbol.toStringTag,{value:"Module"})),qSe=Ut,HSe=jft,JN=Le,GSe=i=>Dd(i,JN()),MOt=cT,VSe=()=>LOt,OW={},NW=(i,a,f)=>{var p;if(OW[i])throw new Error(`Diagram ${i} already registered.`);OW[i]=a,f&&cDt(i,f),$Se(i,a.styles),(p=a.injectUtils)==null||p.call(a,qSe,HSe,JN,GSe,MOt,VSe(),()=>{})},vdt=i=>{if(i in OW)return OW[i];throw new USe(i)};class USe extends Error{constructor(a){super(`Diagram ${a} not found.`)}}let IOt=!1;const wdt=()=>{IOt||(IOt=!0,NW("error",NSe,i=>i.toLowerCase().trim()==="error"),NW("---",{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},i=>i.toLowerCase().trimStart().startsWith("---")),oDt(pSe,SSe,_Se,wSe,ySe,xSe,kSe,TSe,CSe,PSe,vSe,bSe,BSe,FSe,mSe,LSe,ASe,MSe,ESe,RSe))};class DOt{constructor(a,f={}){this.text=a,this.metadata=f,this.type="graph",this.text+=`
`;const p=Le();try{this.type=hW(a,p)}catch(m){this.type="error",this.detectError=m}const v=vdt(this.type);Ut.debug("Type "+this.type),this.db=v.db,this.renderer=v.renderer,this.parser=v.parser,this.parser.parser.yy=this.db,this.init=v.init,this.parse()}parse(){var f,p,v,m,b;if(this.detectError)throw this.detectError;(p=(f=this.db).clear)==null||p.call(f);const a=Le();(v=this.init)==null||v.call(this,a),this.metadata.title&&((b=(m=this.db).setDiagramTitle)==null||b.call(m,this.metadata.title)),this.parser.parse(this.text)}async render(a,f){await this.renderer.draw(this.text,a,f,this)}getParser(){return this.parser}getType(){return this.type}}const mdt=async(i,a={})=>{const f=hW(i,Le());try{vdt(f)}catch{const v=t9e(f);if(!v)throw new aDt(`Diagram ${f} not found.`);const{id:m,diagram:b}=await v();NW(m,b)}return new DOt(i,a)};let ydt=[];const WSe=i=>{ydt.push(i)},KSe=()=>{ydt.forEach(i=>{i()}),ydt=[]};var YSe=xDt(Object.keys,Object);const XSe=YSe;var QSe=Object.prototype,ZSe=QSe.hasOwnProperty;function OOt(i){if(!vW(i))return XSe(i);var a=[];for(var f in Object(i))ZSe.call(i,f)&&f!="constructor"&&a.push(f);return a}var JSe=nT(Jw,"DataView");const xdt=JSe;var tAe=nT(Jw,"Promise");const kdt=tAe;var eAe=nT(Jw,"Set");const GA=eAe;var nAe=nT(Jw,"WeakMap");const Edt=nAe;var NOt="[object Map]",rAe="[object Object]",POt="[object Promise]",FOt="[object Set]",BOt="[object WeakMap]",ROt="[object DataView]",iAe=eT(xdt),sAe=eT(UN),aAe=eT(kdt),oAe=eT(GA),cAe=eT(Edt),uT=tT;(xdt&&uT(new xdt(new ArrayBuffer(1)))!=ROt||UN&&uT(new UN)!=NOt||kdt&&uT(kdt.resolve())!=POt||GA&&uT(new GA)!=FOt||Edt&&uT(new Edt)!=BOt)&&(uT=function(i){var a=tT(i),f=a==rAe?i.constructor:void 0,p=f?eT(f):"";if(p)switch(p){case iAe:return ROt;case sAe:return NOt;case aAe:return POt;case oAe:return FOt;case cAe:return BOt}return a});const VA=uT;var uAe="[object Map]",lAe="[object Set]",hAe=Object.prototype,fAe=hAe.hasOwnProperty;function tP(i){if(i==null)return!0;if(ek(i)&&(Mf(i)||typeof i=="string"||typeof i.splice=="function"||BA(i)||mW(i)||FA(i)))return!i.length;var a=VA(i);if(a==uAe||a==lAe)return!i.size;if(vW(i))return!OOt(i).length;for(var f in i)if(fAe.call(i,f))return!1;return!0}const dAe="graphics-document document";function gAe(i,a){i.attr("role",dAe),a!==""&&i.attr("aria-roledescription",a)}function pAe(i,a,f,p){if(i.insert!==void 0){if(f){const v=`chart-desc-${p}`;i.attr("aria-describedby",v),i.insert("desc",":first-child").attr("id",v).text(f)}if(a){const v=`chart-title-${p}`;i.attr("aria-labelledby",v),i.insert("title",":first-child").attr("id",v).text(a)}}}const bAe=i=>i.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function jOt(i){return typeof i>"u"||i===null}function vAe(i){return typeof i=="object"&&i!==null}function wAe(i){return Array.isArray(i)?i:jOt(i)?[]:[i]}function mAe(i,a){var f,p,v,m;if(a)for(m=Object.keys(a),f=0,p=m.length;f<p;f+=1)v=m[f],i[v]=a[v];return i}function yAe(i,a){var f="",p;for(p=0;p<a;p+=1)f+=i;return f}function xAe(i){return i===0&&Number.NEGATIVE_INFINITY===1/i}var kAe=jOt,EAe=vAe,TAe=wAe,CAe=yAe,_Ae=xAe,SAe=mAe,ug={isNothing:kAe,isObject:EAe,toArray:TAe,repeat:CAe,isNegativeZero:_Ae,extend:SAe};function $Ot(i,a){var f="",p=i.reason||"(unknown reason)";return i.mark?(i.mark.name&&(f+='in "'+i.mark.name+'" '),f+="("+(i.mark.line+1)+":"+(i.mark.column+1)+")",!a&&i.mark.snippet&&(f+=`
`+i.mark.snippet),p+" "+f):p}function eP(i,a){Error.call(this),this.name="YAMLException",this.reason=i,this.mark=a,this.message=$Ot(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}eP.prototype=Object.create(Error.prototype),eP.prototype.constructor=eP,eP.prototype.toString=function(a){return this.name+": "+$Ot(this,a)};var x5=eP;function Tdt(i,a,f,p,v){var m="",b="",E=Math.floor(v/2)-1;return p-a>E&&(m=" ... ",a=p-E+m.length),f-p>E&&(b=" ...",f=p+E-b.length),{str:m+i.slice(a,f).replace(/\t/g,"→")+b,pos:p-a+m.length}}function Cdt(i,a){return ug.repeat(" ",a-i.length)+i}function AAe(i,a){if(a=Object.create(a||null),!i.buffer)return null;a.maxLength||(a.maxLength=79),typeof a.indent!="number"&&(a.indent=1),typeof a.linesBefore!="number"&&(a.linesBefore=3),typeof a.linesAfter!="number"&&(a.linesAfter=2);for(var f=/\r?\n|\r|\0/g,p=[0],v=[],m,b=-1;m=f.exec(i.buffer);)v.push(m.index),p.push(m.index+m[0].length),i.position<=m.index&&b<0&&(b=p.length-2);b<0&&(b=p.length-1);var E="",_,L,N=Math.min(i.line+a.linesAfter,v.length).toString().length,B=a.maxLength-(a.indent+N+3);for(_=1;_<=a.linesBefore&&!(b-_<0);_++)L=Tdt(i.buffer,p[b-_],v[b-_],i.position-(p[b]-p[b-_]),B),E=ug.repeat(" ",a.indent)+Cdt((i.line-_+1).toString(),N)+" | "+L.str+`
`+E;for(L=Tdt(i.buffer,p[b],v[b],i.position,B),E+=ug.repeat(" ",a.indent)+Cdt((i.line+1).toString(),N)+" | "+L.str+`
`,E+=ug.repeat("-",a.indent+N+3+L.pos)+`^
`,_=1;_<=a.linesAfter&&!(b+_>=v.length);_++)L=Tdt(i.buffer,p[b+_],v[b+_],i.position-(p[b]-p[b+_]),B),E+=ug.repeat(" ",a.indent)+Cdt((i.line+_+1).toString(),N)+" | "+L.str+`
`;return E.replace(/\n$/,"")}var LAe=AAe,MAe=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],IAe=["scalar","sequence","mapping"];function DAe(i){var a={};return i!==null&&Object.keys(i).forEach(function(f){i[f].forEach(function(p){a[String(p)]=f})}),a}function OAe(i,a){if(a=a||{},Object.keys(a).forEach(function(f){if(MAe.indexOf(f)===-1)throw new x5('Unknown option "'+f+'" is met in definition of "'+i+'" YAML type.')}),this.options=a,this.tag=i,this.kind=a.kind||null,this.resolve=a.resolve||function(){return!0},this.construct=a.construct||function(f){return f},this.instanceOf=a.instanceOf||null,this.predicate=a.predicate||null,this.represent=a.represent||null,this.representName=a.representName||null,this.defaultStyle=a.defaultStyle||null,this.multi=a.multi||!1,this.styleAliases=DAe(a.styleAliases||null),IAe.indexOf(this.kind)===-1)throw new x5('Unknown kind "'+this.kind+'" is specified for "'+i+'" YAML type.')}var m0=OAe;function zOt(i,a){var f=[];return i[a].forEach(function(p){var v=f.length;f.forEach(function(m,b){m.tag===p.tag&&m.kind===p.kind&&m.multi===p.multi&&(v=b)}),f[v]=p}),f}function NAe(){var i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},a,f;function p(v){v.multi?(i.multi[v.kind].push(v),i.multi.fallback.push(v)):i[v.kind][v.tag]=i.fallback[v.tag]=v}for(a=0,f=arguments.length;a<f;a+=1)arguments[a].forEach(p);return i}function _dt(i){return this.extend(i)}_dt.prototype.extend=function(a){var f=[],p=[];if(a instanceof m0)p.push(a);else if(Array.isArray(a))p=p.concat(a);else if(a&&(Array.isArray(a.implicit)||Array.isArray(a.explicit)))a.implicit&&(f=f.concat(a.implicit)),a.explicit&&(p=p.concat(a.explicit));else throw new x5("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");f.forEach(function(m){if(!(m instanceof m0))throw new x5("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(m.loadKind&&m.loadKind!=="scalar")throw new x5("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(m.multi)throw new x5("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),p.forEach(function(m){if(!(m instanceof m0))throw new x5("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var v=Object.create(_dt.prototype);return v.implicit=(this.implicit||[]).concat(f),v.explicit=(this.explicit||[]).concat(p),v.compiledImplicit=zOt(v,"implicit"),v.compiledExplicit=zOt(v,"explicit"),v.compiledTypeMap=NAe(v.compiledImplicit,v.compiledExplicit),v};var PAe=_dt,FAe=new m0("tag:yaml.org,2002:str",{kind:"scalar",construct:function(i){return i!==null?i:""}}),BAe=new m0("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(i){return i!==null?i:[]}}),RAe=new m0("tag:yaml.org,2002:map",{kind:"mapping",construct:function(i){return i!==null?i:{}}}),jAe=new PAe({explicit:[FAe,BAe,RAe]});function $Ae(i){if(i===null)return!0;var a=i.length;return a===1&&i==="~"||a===4&&(i==="null"||i==="Null"||i==="NULL")}function zAe(){return null}function qAe(i){return i===null}var HAe=new m0("tag:yaml.org,2002:null",{kind:"scalar",resolve:$Ae,construct:zAe,predicate:qAe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function GAe(i){if(i===null)return!1;var a=i.length;return a===4&&(i==="true"||i==="True"||i==="TRUE")||a===5&&(i==="false"||i==="False"||i==="FALSE")}function VAe(i){return i==="true"||i==="True"||i==="TRUE"}function UAe(i){return Object.prototype.toString.call(i)==="[object Boolean]"}var WAe=new m0("tag:yaml.org,2002:bool",{kind:"scalar",resolve:GAe,construct:VAe,predicate:UAe,represent:{lowercase:function(i){return i?"true":"false"},uppercase:function(i){return i?"TRUE":"FALSE"},camelcase:function(i){return i?"True":"F
\r`;function pLe(i){if(i===null)return!1;var a,f,p=0,v=i.length,m=Sdt;for(f=0;f<v;f++)if(a=m.indexOf(i.charAt(f)),!(a>64)){if(a<0)return!1;p+=6}return p%8===0}function bLe(i){var a,f,p=i.replace(/[\r\n=]/g,""),v=p.length,m=Sdt,b=0,E=[];for(a=0;a<v;a++)a%4===0&&a&&(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)),b=b<<6|m.indexOf(p.charAt(a));return f=v%4*6,f===0?(E.push(b>>16&255),E.push(b>>8&255),E.push(b&255)):f===18?(E.push(b>>10&255),E.push(b>>2&255)):f===12&&E.push(b>>4&255),new Uint8Array(E)}function vLe(i){var a="",f=0,p,v,m=i.length,b=Sdt;for(p=0;p<m;p++)p%3===0&&p&&(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]),f=(f<<8)+i[p];return v=m%3,v===0?(a+=b[f>>18&63],a+=b[f>>12&63],a+=b[f>>6&63],a+=b[f&63]):v===2?(a+=b[f>>10&63],a+=b[f>>4&63],a+=b[f<<2&63],a+=b[64]):v===1&&(a+=b[f>>2&63],a+=b[f<<4&63],a+=b[64],a+=b[64]),a}function wLe(i){return Object.prototype.toString.call(i)==="[object Uint8Array]"}var mLe=new m0("tag:yaml.org,2002:binary",{kind:"scalar",resolve:pLe,construct:bLe,predicate:wLe,represent:vLe}),yLe=Object.prototype.hasOwnProperty,xLe=Object.prototype.toString;function kLe(i){if(i===null)return!0;var a=[],f,p,v,m,b,E=i;for(f=0,p=E.length;f<p;f+=1){if(v=E[f],b=!1,xLe.call(v)!=="[object Object]")return!1;for(m in v)if(yLe.call(v,m))if(!b)b=!0;else return!1;if(!b)return!1;if(a.indexOf(m)===-1)a.push(m);else return!1}return!0}function ELe(i){return i!==null?i:[]}var TLe=new m0("tag:yaml.org,2002:omap",{kind:"sequence",resolve:kLe,construct:ELe}),CLe=Object.prototype.toString;function _Le(i){if(i===null)return!0;var a,f,p,v,m,b=i;for(m=new Array(b.length),a=0,f=b.length;a<f;a+=1){if(p=b[a],CLe.call(p)!=="[object Object]"||(v=Object.keys(p),v.length!==1))return!1;m[a]=[v[0],p[v[0]]]}return!0}function SLe(i){if(i===null)return[];var a,f,p,v,m,b=i;for(m=new Array(b.length),a=0,f=b.length;a<f;a+=1)p=b[a],v=Object.keys(p),m[a]=[v[0],p[v[0]]];return m}var ALe=new m0("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:_Le,construct:SLe}),LLe=Object.prototype.hasOwnProperty;function MLe(i){if(i===null)return!0;var a,f=i;for(a in f)if(LLe.call(f,a)&&f[a]!==null)return!1;return!0}function ILe(i){return i!==null?i:{}}var DLe=new m0("tag:yaml.org,2002:set",{kind:"mapping",resolve:MLe,construct:ILe}),OLe=cLe.extend({implicit:[fLe,gLe],explicit:[mLe,TLe,ALe,DLe]}),rk=Object.prototype.hasOwnProperty,PW=1,VOt=2,UOt=3,FW=4,Adt=1,NLe=2,WOt=3,PLe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,FLe=/[\x85\u2028\u2029]/,BLe=/[,\[\]\{\}]/,KOt=/^(?:!|!!|![a-z\-]+!)$/i,YOt=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function XOt(i){return Object.prototype.toString.call(i)}function f3(i){return i===10||i===13}function lT(i){return i===9||i===32}function lp(i){return i===9||i===32||i===10||i===13}function UA(i){return i===44||i===91||i===93||i===123||i===125}function RLe(i){var a;return 48<=i&&i<=57?i-48:(a=i|32,97<=a&&a<=102?a-97+10:-1)}function jLe(i){return i===120?2:i===117?4:i===85?8:0}function $Le(i){return 48<=i&&i<=57?i-48:-1}function QOt(i){return i===48?"\0":i===97?"\x07":i===98?"\b":i===116||i===9?" ":i===110?`
`:i===118?"\v":i===102?"\f":i===114?"\r":i===101?"\x1B":i===32?" ":i===34?'"':i===47?"/":i===92?"\\":i===78?"…":i===95?" ":i===76?"\u2028":i===80?"\u2029":""}function zLe(i){return i<=65535?String.fromCharCode(i):String.fromCharCode((i-65536>>10)+55296,(i-65536&1023)+56320)}for(var ZOt=new Array(256),JOt=new Array(256),WA=0;WA<256;WA++)ZOt[WA]=QOt(WA)?1:0,JOt[WA]=QOt(WA);function qLe(i,a){this.input=i,this.filename=a.filename||null,this.schema=a.schema||OLe,this.onWarning=a.onWarning||null,this.legacy=a.legacy||!1,this.json=a.json||!1,this.listener=a.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=i.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function tNt(i,a){var f={name:i.filename,buffer:i.input.slice(0,-1),position:i.position,line:i.line,column:i.position-i.lineStart};return f.snippet=LAe(f),new x5(a,f)}function _s(i,a){throw tNt(i,a)}function BW(i,a){i.onWarning&&i.onWarning.call(null,tNt(i,a))}var eNt={YAML:function(a,f,p){var v,m,b;a.version!==null&&_s(a,"duplication of %YAML directive"),p.length!==1&&_s(a,"YAML directive accepts exactly one argument"),v=/^([0-9]+)\.([0-9]+)$/.exec(p[0]),v===null&&_s(a,"ill-formed argument of the YAML directive"),m=parseInt(v[1],10),b=parseInt(v[2],10),m!==1&&_s(a,"unacceptable YAML version of the document"),a.version=p[0],a.checkLineBreaks=b<2,b!==1&&b!==2&&BW(a,"unsupported YAML version of the document")},TAG:function(a,f,p){var v,m;p.length!==2&&_s(a,"TAG directive accepts exactly two arguments"),v=p[0],m=p[1],KOt.test(v)||_s(a,"ill-formed tag handle (first argument) of the TAG directive"),rk.call(a.tagMap,v)&&_s(a,'there is a previously declared suffix for "'+v+'" tag handle'),YOt.test(m)||_s(a,"ill-formed tag prefix (second argument) of the TAG directive");try{m=decodeURIComponent(m)}catch{_s(a,"tag prefix is malformed: "+m)}a.tagMap[v]=m}};function ik(i,a,f,p){var v,m,b,E;if(a<f){if(E=i.input.slice(a,f),p)for(v=0,m=E.length;v<m;v+=1)b=E.charCodeAt(v),b===9||32<=b&&b<=1114111||_s(i,"expected valid JSON character");else PLe.test(E)&&_s(i,"the stream contains non-printable characters");i.result+=E}}function nNt(i,a,f,p){var v,m,b,E;for(ug.isObject(f)||_s(i,"cannot merge mappings; the provided source object is unacceptable"),v=Object.keys(f),b=0,E=v.length;b<E;b+=1)m=v[b],rk.call(a,m)||(a[m]=f[m],p[m]=!0)}function KA(i,a,f,p,v,m,b,E,_){var L,N;if(Array.isArray(v))for(v=Array.prototype.slice.call(v),L=0,N=v.length;L<N;L+=1)Array.isArray(v[L])&&_s(i,"nested arrays are not supported inside keys"),typeof v=="object"&&XOt(v[L])==="[object Object]"&&(v[L]="[object Object]");if(typeof v=="object"&&XOt(v)==="[object Object]"&&(v="[object Object]"),v=String(v),a===null&&(a={}),p==="tag:yaml.org,2002:merge")if(Array.isArray(m))for(L=0,N=m.length;L<N;L+=1)nNt(i,a,m[L],f);else nNt(i,a,m,f);else!i.json&&!rk.call(f,v)&&rk.call(a,v)&&(i.line=b||i.line,i.lineStart=E||i.lineStart,i.position=_||i.position,_s(i,"duplicated mapping key")),v==="__proto__"?Object.defineProperty(a,v,{configurable:!0,enumerable:!0,writable:!0,value:m}):a[v]=m,delete f[v];return a}function Ldt(i){var a;a=i.input.charCodeAt(i.position),a===10?i.position++:a===13?(i.position++,i.input.charCodeAt(i.position)===10&&i.position++):_s(i,"a line break is expected"),i.line+=1,i.lineStart=i.position,i.firstTabInLine=-1}function Df(i,a,f){for(var p=0,v=i.input.charCodeAt(i.position);v!==0;){for(;lT(v);)v===9&&i.firstTabInLine===-1&&(i.firstTabInLine=i.position),v=i.input.charCodeAt(++i.position);if(a&&v===35)do v=i.input.charCodeAt(++i.position);while(v!==10&&v!==13&&v!==0);if(f3(v))for(Ldt(i),v=i.input.charCodeAt(i.position),p++,i.lineIndent=0;v===32;)i.lineIndent++,v=i.input.charCodeAt(++i.position);else break}return f!==-1&&p!==0&&i.lineIndent<f&&BW(i,"deficient indentation"),p}function RW(i){var a=i.position,f;return f=i.input.charCodeAt(a),!!((f===45||f===46)&&f===i.input.charCodeAt(a+1)&&f===i.input.charCodeAt(a+2)&&(a+=3,f=i.input.charCodeAt(a),f===0||lp(f)))}function Mdt(i,a){a===1?i.resul
`,a-1))}function HLe(i,a,f){var p,v,m,b,E,_,L,N,B=i.kind,j=i.result,R;if(R=i.input.charCodeAt(i.position),lp(R)||UA(R)||R===35||R===38||R===42||R===33||R===124||R===62||R===39||R===34||R===37||R===64||R===96||(R===63||R===45)&&(v=i.input.charCodeAt(i.position+1),lp(v)||f&&UA(v)))return!1;for(i.kind="scalar",i.result="",m=b=i.position,E=!1;R!==0;){if(R===58){if(v=i.input.charCodeAt(i.position+1),lp(v)||f&&UA(v))break}else if(R===35){if(p=i.input.charCodeAt(i.position-1),lp(p))break}else{if(i.position===i.lineStart&&RW(i)||f&&UA(R))break;if(f3(R))if(_=i.line,L=i.lineStart,N=i.lineIndent,Df(i,!1,-1),i.lineIndent>=a){E=!0,R=i.input.charCodeAt(i.position);continue}else{i.position=b,i.line=_,i.lineStart=L,i.lineIndent=N;break}}E&&(ik(i,m,b,!1),Mdt(i,i.line-_),m=b=i.position,E=!1),lT(R)||(b=i.position+1),R=i.input.charCodeAt(++i.position)}return ik(i,m,b,!1),i.result?!0:(i.kind=B,i.result=j,!1)}function GLe(i,a){var f,p,v;if(f=i.input.charCodeAt(i.position),f!==39)return!1;for(i.kind="scalar",i.result="",i.position++,p=v=i.position;(f=i.input.charCodeAt(i.position))!==0;)if(f===39)if(ik(i,p,i.position,!0),f=i.input.charCodeAt(++i.position),f===39)p=i.position,i.position++,v=i.position;else return!0;else f3(f)?(ik(i,p,v,!0),Mdt(i,Df(i,!1,a)),p=v=i.position):i.position===i.lineStart&&RW(i)?_s(i,"unexpected end of the document within a single quoted scalar"):(i.position++,v=i.position);_s(i,"unexpected end of the stream within a single quoted scalar")}function VLe(i,a){var f,p,v,m,b,E;if(E=i.input.charCodeAt(i.position),E!==34)return!1;for(i.kind="scalar",i.result="",i.position++,f=p=i.position;(E=i.input.charCodeAt(i.position))!==0;){if(E===34)return ik(i,f,i.position,!0),i.position++,!0;if(E===92){if(ik(i,f,i.position,!0),E=i.input.charCodeAt(++i.position),f3(E))Df(i,!1,a);else if(E<256&&ZOt[E])i.result+=JOt[E],i.position++;else if((b=jLe(E))>0){for(v=b,m=0;v>0;v--)E=i.input.charCodeAt(++i.position),(b=RLe(E))>=0?m=(m<<4)+b:_s(i,"expected hexadecimal character");i.result+=zLe(m),i.position++}else _s(i,"unknown escape sequence");f=p=i.position}else f3(E)?(ik(i,f,p,!0),Mdt(i,Df(i,!1,a)),f=p=i.position):i.position===i.lineStart&&RW(i)?_s(i,"unexpected end of the document within a double quoted scalar"):(i.position++,p=i.position)}_s(i,"unexpected end of the stream within a double quoted scalar")}function ULe(i,a){var f=!0,p,v,m,b=i.tag,E,_=i.anchor,L,N,B,j,R,z=Object.create(null),K,it,st,ut;if(ut=i.input.charCodeAt(i.position),ut===91)N=93,R=!1,E=[];else if(ut===123)N=125,R=!0,E={};else return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=E),ut=i.input.charCodeAt(++i.position);ut!==0;){if(Df(i,!0,a),ut=i.input.charCodeAt(i.position),ut===N)return i.position++,i.tag=b,i.anchor=_,i.kind=R?"mapping":"sequence",i.result=E,!0;f?ut===44&&_s(i,"expected the node content, but found ','"):_s(i,"missed comma between flow collection entries"),it=K=st=null,B=j=!1,ut===63&&(L=i.input.charCodeAt(i.position+1),lp(L)&&(B=j=!0,i.position++,Df(i,!0,a))),p=i.line,v=i.lineStart,m=i.position,YA(i,a,PW,!1,!0),it=i.tag,K=i.result,Df(i,!0,a),ut=i.input.charCodeAt(i.position),(j||i.line===p)&&ut===58&&(B=!0,ut=i.input.charCodeAt(++i.position),Df(i,!0,a),YA(i,a,PW,!1,!0),st=i.result),R?KA(i,E,z,it,K,st,p,v,m):B?E.push(KA(i,null,z,it,K,st,p,v,m)):E.push(K),Df(i,!0,a),ut=i.input.charCodeAt(i.position),ut===44?(f=!0,ut=i.input.charCodeAt(++i.position)):f=!1}_s(i,"unexpected end of the stream within a flow collection")}function WLe(i,a){var f,p,v=Adt,m=!1,b=!1,E=a,_=0,L=!1,N,B;if(B=i.input.charCodeAt(i.position),B===124)p=!1;else if(B===62)p=!0;else return!1;for(i.kind="scalar",i.result="";B!==0;)if(B=i.input.charCodeAt(++i.position),B===43||B===45)Adt===v?v=B===43?WOt:NLe:_s(i,"repeat of a chomping mode identifier");else if((N=$Le(B))>=0)N===0?_s(i,"bad explicit indentation width of a block scalar; it cannot be less than one"):b?_s(i,"repeat of an indentation width identifier"):(E=a+N-1,b=!0);else break;if(lT(B)){do B=i.input.charCodeAt(++i.position);while(lT(B));if(B===35)do B=i.input.charCodeAt(++i.position);while(!f3(B)&&B!==0)}for(;B!==0;){for(Ldt(i),i.li
`,m?1+_:_):v===Adt&&m&&(i.result+=`
`);break}for(p?lT(B)?(L=!0,i.result+=ug.repeat(`
`,m?1+_:_)):L?(L=!1,i.result+=ug.repeat(`
`,_+1)):_===0?m&&(i.result+=" "):i.result+=ug.repeat(`
`,_):i.result+=ug.repeat(`
`,m?1+_:_),m=!0,b=!0,_=0,f=i.position;!f3(B)&&B!==0;)B=i.input.charCodeAt(++i.position);ik(i,f,i.position,!1)}return!0}function rNt(i,a){var f,p=i.tag,v=i.anchor,m=[],b,E=!1,_;if(i.firstTabInLine!==-1)return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=m),_=i.input.charCodeAt(i.position);_!==0&&(i.firstTabInLine!==-1&&(i.position=i.firstTabInLine,_s(i,"tab characters must not be used in indentation")),!(_!==45||(b=i.input.charCodeAt(i.position+1),!lp(b))));){if(E=!0,i.position++,Df(i,!0,-1)&&i.lineIndent<=a){m.push(null),_=i.input.charCodeAt(i.position);continue}if(f=i.line,YA(i,a,UOt,!1,!0),m.push(i.result),Df(i,!0,-1),_=i.input.charCodeAt(i.position),(i.line===f||i.lineIndent>a)&&_!==0)_s(i,"bad indentation of a sequence entry");else if(i.lineIndent<a)break}return E?(i.tag=p,i.anchor=v,i.kind="sequence",i.result=m,!0):!1}function KLe(i,a,f){var p,v,m,b,E,_,L=i.tag,N=i.anchor,B={},j=Object.create(null),R=null,z=null,K=null,it=!1,st=!1,ut;if(i.firstTabInLine!==-1)return!1;for(i.anchor!==null&&(i.anchorMap[i.anchor]=B),ut=i.input.charCodeAt(i.position);ut!==0;){if(!it&&i.firstTabInLine!==-1&&(i.position=i.firstTabInLine,_s(i,"tab characters must not be used in indentation")),p=i.input.charCodeAt(i.position+1),m=i.line,(ut===63||ut===58)&&lp(p))ut===63?(it&&(KA(i,B,j,R,z,null,b,E,_),R=z=K=null),st=!0,it=!0,v=!0):it?(it=!1,v=!0):_s(i,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),i.position+=1,ut=p;else{if(b=i.line,E=i.lineStart,_=i.position,!YA(i,f,VOt,!1,!0))break;if(i.line===m){for(ut=i.input.charCodeAt(i.position);lT(ut);)ut=i.input.charCodeAt(++i.position);if(ut===58)ut=i.input.charCodeAt(++i.position),lp(ut)||_s(i,"a whitespace character is expected after the key-value separator within a block mapping"),it&&(KA(i,B,j,R,z,null,b,E,_),R=z=K=null),st=!0,it=!1,v=!1,R=i.tag,z=i.result;else if(st)_s(i,"can not read an implicit mapping pair; a colon is missed");else return i.tag=L,i.anchor=N,!0}else if(st)_s(i,"can not read a block mapping entry; a multiline key may not be an implicit key");else return i.tag=L,i.anchor=N,!0}if((i.line===m||i.lineIndent>a)&&(it&&(b=i.line,E=i.lineStart,_=i.position),YA(i,a,FW,!0,v)&&(it?z=i.result:K=i.result),it||(KA(i,B,j,R,z,K,b,E,_),R=z=K=null),Df(i,!0,-1),ut=i.input.charCodeAt(i.position)),(i.line===m||i.lineIndent>a)&&ut!==0)_s(i,"bad indentation of a mapping entry");else if(i.lineIndent<a)break}return it&&KA(i,B,j,R,z,null,b,E,_),st&&(i.tag=L,i.anchor=N,i.kind="mapping",i.result=B),st}function YLe(i){var a,f=!1,p=!1,v,m,b;if(b=i.input.charCodeAt(i.position),b!==33)return!1;if(i.tag!==null&&_s(i,"duplication of a tag property"),b=i.input.charCodeAt(++i.position),b===60?(f=!0,b=i.input.charCodeAt(++i.position)):b===33?(p=!0,v="!!",b=i.input.charCodeAt(++i.position)):v="!",a=i.position,f){do b=i.input.charCodeAt(++i.position);while(b!==0&&b!==62);i.position<i.length?(m=i.input.slice(a,i.position),b=i.input.charCodeAt(++i.position)):_s(i,"unexpected end of the stream within a verbatim tag")}else{for(;b!==0&&!lp(b);)b===33&&(p?_s(i,"tag suffix cannot contain exclamation marks"):(v=i.input.slice(a-1,i.position+1),KOt.test(v)||_s(i,"named tag handle cannot contain such characters"),p=!0,a=i.position+1)),b=i.input.charCodeAt(++i.position);m=i.input.slice(a,i.position),BLe.test(m)&&_s(i,"tag suffix cannot contain flow indicator characters")}m&&!YOt.test(m)&&_s(i,"tag name cannot contain such characters: "+m);try{m=decodeURIComponent(m)}catch{_s(i,"tag name is malformed: "+m)}return f?i.tag=m:rk.call(i.tagMap,v)?i.tag=i.tagMap[v]+m:v==="!"?i.tag="!"+m:v==="!!"?i.tag="tag:yaml.org,2002:"+m:_s(i,'undeclared tag handle "'+v+'"'),!0}function XLe(i){var a,f;if(f=i.input.charCodeAt(i.position),f!==38)return!1;for(i.anchor!==null&&_s(i,"duplication of an anchor property"),f=i.input.charCodeAt(++i.position),a=i.position;f!==0&&!lp(f)&&!UA(f);)f=i.input.charCodeAt(++i.position);return i.position===a&&_s(i,"name of an anchor node must contain at least one character"),i.anchor=i.input.slice(a,i.position),!0}function QLe(i){var a,f,p;if(p=i.input.charCo
`),i.charCodeAt(0)===65279&&(i=i.slice(1)));var f=new qLe(i,a),p=i.indexOf("\0");for(p!==-1&&(f.position=p,_s(f,"null byte is not allowed in input")),f.input+="\0";f.input.charCodeAt(f.position)===32;)f.lineIndent+=1,f.position+=1;for(;f.position<f.length-1;)ZLe(f);return f.documents}function JLe(i,a,f){a!==null&&typeof a=="object"&&typeof f>"u"&&(f=a,a=null);var p=iNt(i,f);if(typeof a!="function")return p;for(var v=0,m=p.length;v<m;v+=1)a(p[v])}function tMe(i,a){var f=iNt(i,a);if(f.length!==0){if(f.length===1)return f[0];throw new x5("expected a single document in the stream, but found more")}}var eMe=JLe,nMe=tMe,rMe={loadAll:eMe,load:nMe},iMe=qOt,sMe=rMe.load;function aMe(i){const a=i.match(sDt);if(!a)return{text:i,metadata:{}};let f=sMe(a[1],{schema:iMe})??{};f=typeof f=="object"&&!Array.isArray(f)?f:{};const p={};return f.displayMode&&(p.displayMode=f.displayMode.toString()),f.title&&(p.title=f.title.toString()),f.config&&(p.config=f.config),{text:i.slice(a[0].length),metadata:p}}const oMe=i=>i.replace(/\r\n?/g,`
`).replace(/<(\w+)([^>]*)>/g,(a,f,p)=>"<"+f+p.replace(/="([^"]*)"/g,"='$1'")+">"),cMe=i=>{const{text:a,metadata:f}=aMe(i),{displayMode:p,title:v,config:m={}}=f;return p&&(m.gantt||(m.gantt={}),m.gantt.displayMode=p),{title:v,config:m,text:a}},uMe=i=>{const a=$a.detectInit(i)??{},f=$a.detectDirective(i,"wrap");return Array.isArray(f)?a.wrap=f.some(({type:p})=>{}):(f==null?void 0:f.type)==="wrap"&&(a.wrap=!0),{text:O_e(i),directive:a}};function lMe(i){const a=oMe(i),f=cMe(a),p=uMe(f.text),v=idt(f.config,p.directive);return i=bAe(p.text),{code:i,title:f.title,config:v}}const hMe=5e4,fMe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",dMe="sandbox",gMe="loose",pMe="http://www.w3.org/2000/svg",bMe="http://www.w3.org/1999/xlink",vMe="http://www.w3.org/1999/xhtml",wMe="100%",mMe="100%",yMe="border:0;margin:0;",xMe="margin:0",kMe="allow-top-navigation-by-user-activation allow-popups",EMe='The "iframe" tag is not supported by your browser.',TMe=["foreignobject"],CMe=["dominant-baseline"];function sNt(i){const a=lMe(i);return IW(),fSe(a.config??{}),a}async function _Me(i,a){wdt(),i=sNt(i).code;try{await mdt(i)}catch(f){if(a!=null&&a.suppressErrors)return!1;throw f}return!0}const SMe=function(i){let a=i;return a=a.replace(/style.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/classDef.*:\S*#.*;/g,function(f){return f.substring(0,f.length-1)}),a=a.replace(/#\w+;/g,function(f){const p=f.substring(1,f.length-1);return/^\+?\d+$/.test(p)?"fl°°"+p+"¶ß":"fl°"+p+"¶ß"}),a},nP=function(i){return i.replace(/fl°°/g,"&#").replace(/fl°/g,"&").replace(/¶ß/g,";")},aNt=(i,a,f=[])=>`
.${i} ${a} { ${f.join(" !important; ")} !important; }`,AMe=(i,a={})=>{var p;let f="";if(i.themeCSS!==void 0&&(f+=`
${i.themeCSS}`),i.fontFamily!==void 0&&(f+=`
:root { --mermaid-font-family: ${i.fontFamily}}`),i.altFontFamily!==void 0&&(f+=`
:root { --mermaid-alt-font-family: ${i.altFontFamily}}`),!tP(a)){const E=i.htmlLabels||((p=i.flowchart)==null?void 0:p.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const _ in a){const L=a[_];tP(L.styles)||E.forEach(N=>{f+=aNt(L.id,N,L.styles)}),tP(L.textStyles)||(f+=aNt(L.id,"tspan",L.textStyles))}}return f},LMe=(i,a,f,p)=>{const v=AMe(i,f),m=zSe(a,v,i.themeVariables);return hdt(aSe(`${p}{${m}}`),cSe)},MMe=(i="",a,f)=>{let p=i;return!f&&!a&&(p=p.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),p=nP(p),p=p.replace(/<br>/g,"<br/>"),p},IMe=(i="",a)=>{var v,m;const f=(m=(v=a==null?void 0:a.viewBox)==null?void 0:v.baseVal)!=null&&m.height?a.viewBox.baseVal.height+"px":mMe,p=btoa('<body style="'+xMe+'">'+i+"</body>");return`<iframe style="width:${wMe};height:${f};${yMe}" src="data:text/html;base64,${p}" sandbox="${kMe}">
${EMe}
</iframe>`},oNt=(i,a,f,p,v)=>{const m=i.append("div");m.attr("id",f),p&&m.attr("style",p);const b=m.append("svg").attr("id",a).attr("width","100%").attr("xmlns",pMe);return v&&b.attr("xmlns:xlink",v),b.append("g"),i};function cNt(i,a){return i.append("iframe").attr("id",a).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const DMe=(i,a,f,p)=>{var v,m,b;(v=i.getElementById(a))==null||v.remove(),(m=i.getElementById(f))==null||m.remove(),(b=i.getElementById(p))==null||b.remove()},OMe=async function(i,a,f){var nt,Ot,Nt,qt,Ct,Z;wdt();const p=sNt(a);a=p.code;const v=Le();Ut.debug(v),a.length>((v==null?void 0:v.maxTextSize)??hMe)&&(a=fMe);const m="#"+i,b="i"+i,E="#"+b,_="d"+i,L="#"+_;let N=yr("body");const B=v.securityLevel===dMe,j=v.securityLevel===gMe,R=v.fontFamily;if(f!==void 0){if(f&&(f.innerHTML=""),B){const Tt=cNt(yr(f),b);N=yr(Tt.nodes()[0].contentDocument.body),N.node().style.margin=0}else N=yr(f);oNt(N,i,_,`font-family: ${R}`,bMe)}else{if(DMe(document,i,_,b),B){const Tt=cNt(yr("body"),b);N=yr(Tt.nodes()[0].contentDocument.body),N.node().style.margin=0}else N=yr("body");oNt(N,i,_)}a=SMe(a);let z,K;try{z=await mdt(a,{title:p.title})}catch(Tt){z=new DOt("error"),K=Tt}const it=N.select(L).node(),st=z.type,ut=it.firstChild,bt=ut.firstChild,mt=(Ot=(nt=z.renderer).getClasses)==null?void 0:Ot.call(nt,a,z),yt=LMe(v,st,mt,m),dt=document.createElement("style");dt.innerHTML=yt,ut.insertBefore(dt,bt);try{await z.renderer.draw(a,i,eOt,z)}catch(Tt){throw OSe.draw(a,i,eOt),Tt}const ht=N.select(`${L} svg`),wt=(qt=(Nt=z.db).getAccTitle)==null?void 0:qt.call(Nt),X=(Z=(Ct=z.db).getAccDescription)==null?void 0:Z.call(Ct);PMe(st,ht,wt,X),N.select(`[id="${i}"]`).selectAll("foreignobject > *").attr("xmlns",vMe);let pt=N.select(L).node().innerHTML;if(Ut.debug("config.arrowMarkerAbsolute",v.arrowMarkerAbsolute),pt=MMe(pt,B,s1(v.arrowMarkerAbsolute)),B){const Tt=N.select(L+" svg").node();pt=IMe(pt,Tt)}else j||(pt=eW.sanitize(pt,{ADD_TAGS:TMe,ADD_ATTR:CMe}));if(KSe(),K)throw K;const xt=yr(B?E:L).node();return xt&&"remove"in xt&&xt.remove(),{svg:pt,bindFunctions:z.db.bindFunctions}};function NMe(i={}){var f;i!=null&&i.fontFamily&&!((f=i.themeVariables)!=null&&f.fontFamily)&&(i.themeVariables||(i.themeVariables={}),i.themeVariables.fontFamily=i.fontFamily),lSe(i),i!=null&&i.theme&&i.theme in w5?i.themeVariables=w5[i.theme].getThemeVariables(i.themeVariables):i&&(i.themeVariables=w5.default.getThemeVariables(i.themeVariables));const a=typeof i=="object"?uSe(i):rOt();jft(a.logLevel),wdt()}function PMe(i,a,f,p){gAe(a,i),pAe(a,f,p,a.attr("id"))}const hT=Object.freeze({render:OMe,parse:_Me,getDiagramFromText:mdt,initialize:NMe,getConfig:Le,setConfig:iOt,getSiteConfig:rOt,updateSiteConfig:hSe,reset:()=>{IW()},globalReset:()=>{IW(oT)},defaultConfig:oT});jft(Le().logLevel),IW(Le());const FMe=async()=>{Ut.debug("Loading registered diagrams");const a=(await Promise.allSettled(Object.entries(DA).map(async([f,{detector:p,loader:v}])=>{if(v)try{vdt(f)}catch{try{const{diagram:b,id:E}=await v();NW(E,b,p)}catch(b){throw Ut.error(`Failed to load external diagram with key ${f}. Removing from detectors.`),delete DA[f],b}}}))).filter(f=>f.status==="rejected");if(a.length>0){Ut.error(`Failed to load ${a.length} external diagrams`);for(const f of a)Ut.error(f);throw new Error(`Failed to load ${a.length} external diagrams`)}},BMe=(i,a,f)=>{Ut.warn(i),UDt(i)?(f&&f(i.str,i.hash),a.push({...i,message:i.str,error:i})):(f&&f(i),i instanceof Error&&a.push({str:i.message,message:i.message,hash:i.name,error:i}))},uNt=async function(i={querySelector:".mermaid"}){try{await RMe(i)}catch(a){if(UDt(a)&&Ut.error(a.str),Ob.parseError&&Ob.parseError(a),!i.suppressErrors)throw Ut.error("Use the suppressErrors option to suppress these errors"),a}},RMe=async function({postRenderCallback:i,querySelector:a,nodes:f}={querySelector:".mermaid"}){const p=hT.getConfig();Ut.debug(`${i?"":"No "}Callback function found`);let v;if(f)v=f;else if(a)v=document.querySelectorAll(a);else throw new Error("Nodes and querySelector are both undefined");Ut.debug(`Found ${v.length} diagrams`),(p==
* Wait for document loaded before starting the execution
*/window.addEventListener("load",hNt,!1)}const zMe=function(i){Ob.parseError=i},jW=[];let Idt=!1;const fNt=async()=>{if(!Idt){for(Idt=!0;jW.length>0;){const i=jW.shift();if(i)try{await i()}catch(a){Ut.error("Error executing queue",a)}}Idt=!1}},qMe=async(i,a)=>new Promise((f,p)=>{const v=()=>new Promise((m,b)=>{hT.parse(i,a).then(E=>{m(E),f(E)},E=>{var _;Ut.error("Error parsing",E),(_=Ob.parseError)==null||_.call(Ob,E),b(E),p(E)})});jW.push(v),fNt().catch(p)}),dNt=(i,a,f)=>new Promise((p,v)=>{const m=()=>new Promise((b,E)=>{hT.render(i,a,f).then(_=>{b(_),p(_)},_=>{var L;Ut.error("Error parsing",_),(L=Ob.parseError)==null||L.call(Ob,_),E(_),v(_)})});jW.push(m),fNt().catch(v)}),Ob={startOnLoad:!0,mermaidAPI:hT,parse:qMe,render:dNt,init:jMe,run:uNt,registerExternalDiagrams:$Me,initialize:lNt,parseError:void 0,contentLoaded:hNt,setParseErrorHandler:zMe,detectType:hW};var $W=function(){var i=function(ds,Dr,nr,di){for(nr=nr||{},di=ds.length;di--;nr[ds[di]]=Dr);return nr},a=[1,24],f=[1,25],p=[1,26],v=[1,27],m=[1,28],b=[1,63],E=[1,64],_=[1,65],L=[1,66],N=[1,67],B=[1,68],j=[1,69],R=[1,29],z=[1,30],K=[1,31],it=[1,32],st=[1,33],ut=[1,34],bt=[1,35],mt=[1,36],yt=[1,37],dt=[1,38],ht=[1,39],wt=[1,40],X=[1,41],pt=[1,42],U=[1,43],xt=[1,44],nt=[1,45],Ot=[1,46],Nt=[1,47],qt=[1,48],Ct=[1,50],Z=[1,51],Tt=[1,52],Ht=[1,53],It=[1,54],Ft=[1,55],ke=[1,56],pn=[1,57],Me=[1,58],ve=[1,59],Ge=[1,60],Ke=[14,42],we=[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],_e=[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],$t=[1,82],re=[1,83],ie=[1,84],Oe=[1,85],oe=[12,14,42],Ne=[12,14,33,42],me=[12,14,33,42,76,77,79,80],cn=[12,33],li=[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],ya={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:
`+vs.showPosition()+`
Expecting `+Ma.join(", ")+", got '"+(this.terminals_[Uu]||Uu)+"'":Ha="Parse error on line "+(ks+1)+": Unexpected "+(Uu==Gs?"end of input":"'"+(this.terminals_[Uu]||Uu)+"'"),this.parseError(Ha,{text:vs.match,token:this.terminals_[Uu]||Uu,line:vs.yylineno,loc:Lu,expected:Ma})}if(Pa[0]instanceof Array&&Pa.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Zl+", token: "+Uu);switch(Pa[0]){case 1:di.push(Uu),Yn.push(vs.yytext),He.push(vs.yylloc),di.push(Pa[1]),Uu=null,qa=vs.yyleng,gn=vs.yytext,ks=vs.yylineno,Lu=vs.yylloc;break;case 2:if(Cc=this.productions_[Pa[1]][1],ua.$=Yn[Yn.length-Cc],ua._$={first_line:He[He.length-(Cc||1)].first_line,last_line:He[He.length-1].last_line,first_column:He[He.length-(Cc||1)].first_column,last_column:He[He.length-1].last_column},fm&&(ua._$.range=[He[He.length-(Cc||1)].range[0],He[He.length-1].range[1]]),Al=this.performAction.apply(ua,[gn,qa,ks,nu.yy,Pa[1],Yn,He].concat(No)),typeof Al<"u")return Al;Cc&&(di=di.slice(0,-1*Cc*2),Yn=Yn.slice(0,-1*Cc),He=He.slice(0,-1*Cc)),di.push(this.productions_[Pa[1]][0]),Yn.push(ua.$),He.push(ua._$),ga=Ti[di[di.length-2]][di[di.length-1]],di.push(ga);break;case 3:return!0}}return!0}},da=function(){var ds={EOF:1,parseError:function(nr,di){if(this.yy.parser)this.yy.parser.parseError(nr,di);else throw new Error(nr)},setInput:function(Dr,nr){return this.yy=nr||this.yy||{},this._input=Dr,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 Dr=this._input[0];this.yytext+=Dr,this.yyleng++,this.offset++,this.match+=Dr,this.matched+=Dr;var nr=Dr.match(/(?:\r\n?|\n).*/g);return nr?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Dr},unput:function(Dr){var nr=Dr.length,di=Dr.split(/(?:\r\n?|\n)/g);this._input=Dr+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nr),this.offset-=nr;var Ee=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),di.length-1&&(this.yylineno-=di.length-1);var Yn=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:di?(di.length===Ee.length?this.yylloc.first_column:0)+Ee[Ee.length-di.length].length-di[0].length:this.yylloc.first_column-nr},this.options.ranges&&(this.yylloc.range=[Yn[0],Yn[0]+this.yyleng-nr]),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(Dr){this.unput(this.match.slice(Dr))},pastInput:function(){var Dr=this.matched.substr(0,this.matched.length-this.match.length);return(Dr.length>20?"...":"")+Dr.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Dr=this.match;return Dr.length<20&&(Dr+=this._input.substr(0,20-Dr.length)),(Dr.substr(0,20)+(Dr.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Dr=this.pastInput(),nr=new Array(Dr.length+1).join("-");return Dr+this.upcomingInput()+`
`+nr+"^"},test_match:function(Dr,nr){var di,Ee,Yn;if(this.options.backtrack_lexer&&(Yn={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&&(Yn.yylloc.range=this.yylloc.range.slice(0))),Ee=Dr[0].match(/(?:\r\n?|\n).*/g),Ee&&(this.yylineno+=Ee.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Ee?Ee[Ee.length-1].length-Ee[Ee.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Dr[0].length},this.yytext+=Dr[0],this.match+=Dr[0],this.matches=Dr,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(Dr[0].length),this.matched+=Dr[0],di=this.performAction.call(this,this.yy,this,nr,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),di)return di;if(this._backtrack){for(var He in Yn)this[He]=Yn[He];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Dr,nr,di,Ee;this._more||(this.yytext="",this.match="");for(var Yn=this._currentRules(),He=0;He<Yn.length;He++)if(di=this._input.match(this.rules[Yn[He]]),di&&(!nr||di[0].length>nr[0].length)){if(nr=di,Ee=He,this.options.backtrack_lexer){if(Dr=this.test_match(di,Yn[He]),Dr!==!1)return Dr;if(this._backtrack){nr=!1;continue}else return!1}else if(!this.options.flex)break}return nr?(Dr=this.test_match(nr,Yn[Ee]),Dr!==!1?Dr:!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 nr=this.next();return nr||this.lex()},begin:function(nr){this.conditionStack.push(nr)},popState:function(){var nr=this.conditionStack.length-1;return nr>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(nr){return nr=this.conditionStack.length-1-Math.abs(nr||0),nr>=0?this.conditionStack[nr]:"INITIAL"},pushState:function(nr){this.begin(nr)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(nr,di,Ee,Yn){switch(Ee){case 0:return 6;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 22;case 5:return 23;case 6:return this.begin("acc_title"),24;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),26;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:break;case 14:c;break;case 15:return 12;case 16:break;case 17:return 11;case 18:return 15;case 19:return 16;case 20:return 17;case 21:return 18;case 22:return this.begin("person_ext"),45;case 23:return this.begin("person"),44;case 24:return this.begin("system_ext_queue"),51;case 25:return this.begin("system_ext_db"),50;case 26:return this.begin("system_ext"),49;case 27:return this.begin("system_queue"),48;case 28:return this.begin("system_db"),47;case 29:return this.begin("system"),46;case 30:return this.begin("boundary"),37;case 31:return this.begin("enterprise_boundary"),34;case 32:return this.begin("system_boundary"),36;case 33:return this.begin("container_ext_queue"),57;case 34:return this.begin("container_ext_db"),56;case 35:return this.begin("container_ext"),55;case 36:return this.begin("container_queue"),54;case 37:return this.begin("container_db"),53;case 38:return this.begin("container"),52;case 39:return this.begin("container_boundary"),38;case 40:return this.begin("component_ext_queue"),63;case 41:return this.begin("component_ext_db"),62;case 42:return this.begin("component_ext"),61;case 43:return this.begin("component_queue"),60;case 44:return this.begin("component_db"),59;case 45:return this.begin("component"),58;case 46:return this.begin("node"),39;case 47:return this.begin("node"),39;case 48:return this.begin("node_l"),40;case 49:return this.begin("node_r"),41;case 50:return this.begin("rel"),64;case 51:return this.begin("birel"),65;case 52:return this.begin("rel_u"),66;case 53:return this.begin("rel_u"),66;case 54:return this.begin("rel_d"),67;case 55:return this.begin("rel_d"),67;case 56:return this.begin("rel_l"),68;case 57:return this.begin("rel_l"),68;case 58:return this.begin("rel_r"),69;case 59:return this.begin("rel_r"),69;case 60:return this.begin("rel_b"),70;case 61:return this.begin("rel_index"),71;case 62:return this.begin("update_el_style"),72;case 63:return this.begin("update_rel_style"),73;case 64:return this.begin("update_layout_config"),74;case 65:return"EOF_IN_STRUCT";case 66:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 67:this.begin("attribute");break;case 68:this.popState(),this.popState();break;case 69:return 80;case 70:break;case 71:return 80;case 72:this.begin("string");break;case 73:this.popState();break;case 74:return"STR";case 75:this.begin("string_kv");break;case 76:return this.begin("string_kv_key"),"STR_KEY";case 77:this.popState(),this.begin("string_kv_value");break;case 78:return"STR_VALUE";case 79:this.popState(),this.popState();break;case 80:return"STR";case 81:return"LBRACE";case 82:return"RBRACE";case 83:return"SPACE";case 84:return"EOL";case 85:return 14}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/
stroke: ${i.personBorder};
fill: ${i.personBkg};
}
`,init:({c4:i,wrap:a})=>{TNt.setConf(i),Ndt.setWrap(a)}}},Symbol.toStringTag,{value:"Module"}));var jdt=function(){var i=function(nf,Xi,Es,xa){for(Es=Es||{},xa=nf.length;xa--;Es[nf[xa]]=Xi);return Es},a=[1,4],f=[1,3],p=[1,5],v=[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],m=[2,2],b=[1,13],E=[1,14],_=[1,15],L=[1,16],N=[1,23],B=[1,25],j=[1,26],R=[1,27],z=[1,49],K=[1,48],it=[1,29],st=[1,30],ut=[1,31],bt=[1,32],mt=[1,33],yt=[1,44],dt=[1,46],ht=[1,42],wt=[1,47],X=[1,43],pt=[1,50],U=[1,45],xt=[1,51],nt=[1,52],Ot=[1,34],Nt=[1,35],qt=[1,36],Ct=[1,37],Z=[1,57],Tt=[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],Ht=[1,61],It=[1,60],Ft=[1,62],ke=[8,9,11,73,75],pn=[1,88],Me=[1,93],ve=[1,92],Ge=[1,89],Ke=[1,85],we=[1,91],_e=[1,87],$t=[1,94],re=[1,90],ie=[1,95],Oe=[1,86],oe=[8,9,10,11,73,75],Ne=[8,9,10,11,44,73,75],me=[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],cn=[8,9,11,42,58,73,75,86,99,102,103,106,108,111,112,113],li=[42,58,86,99,102,103,106,108,111,112,113],ya=[1,121],da=[1,120],Oo=[1,128],ds=[1,142],Dr=[1,143],nr=[1,144],di=[1,145],Ee=[1,130],Yn=[1,132],He=[1,136],Ti=[1,137],gn=[1,138],ks=[1,139],qa=[1,140],La=[1,141],Gs=[1,146],No=[1,147],vs=[1,126],nu=[1,127],$s=[1,134],Lu=[1,129],fm=[1,133],av=[1,131],Uu=[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],Zl=[1,149],Pa=[8,9,11],Al=[8,9,10,11,14,42,58,86,102,103,106,108,111,112,113],ua=[1,169],bc=[1,165],Cc=[1,166],ga=[1,170],Ma=[1,167],Ha=[1,168],Ll=[75,113,116],_c=[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],ov=[10,103],Jl=[31,47,49,51,53,55,60,62,64,65,67,69,113,114,115],Z1=[1,235],Fd=[1,233],J1=[1,237],Bd=[1,231],E0=[1,232],Bi=[1,234],on=[1,236],kr=[1,238],Ei=[1,255],Jo=[8,9,11,103],vc=[8,9,10,11,58,81,102,103,106,107,108,109],tf={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,FirstStmtSeperator:15,ending:16,endToken:17,spaceList:18,spaceListNewline:19,verticeStatement: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
`+Ml.showPosition()+`
Expecting `+k3.join(", ")+", got '"+(this.terminals_[l1]||l1)+"'":gm="Parse error on line "+(Ff+1)+": Unexpected "+(l1==pk?"end of input":"'"+(this.terminals_[l1]||l1)+"'"),this.parseError(gm,{text:Ml.match,token:this.terminals_[l1]||l1,line:Ml.yylineno,loc:F5,expected:k3})}if(ed[0]instanceof Array&&ed.length>1)throw new Error("Parse Error: multiple actions possible at state: "+td+", token: "+l1);switch(ed[0]){case 1:xa.push(l1),Wc.push(Ml.yytext),Ce.push(Ml.yylloc),xa.push(ed[1]),l1=null,dg=Ml.yyleng,Be=Ml.yytext,Ff=Ml.yylineno,F5=Ml.yylloc;break;case 2:if(pp=this.productions_[ed[1]][1],uv.$=Wc[Wc.length-pp],uv._$={first_line:Ce[Ce.length-(pp||1)].first_line,last_line:Ce[Ce.length-1].last_line,first_column:Ce[Ce.length-(pp||1)].first_column,last_column:Ce[Ce.length-1].last_column},jb&&(uv._$.range=[Ce[Ce.length-(pp||1)].range[0],Ce[Ce.length-1].range[1]]),R5=this.performAction.apply(uv,[Be,dg,Ff,T0.yy,ed[1],Wc,Ce].concat(x3)),typeof R5<"u")return R5;pp&&(xa=xa.slice(0,-1*pp*2),Wc=Wc.slice(0,-1*pp),Ce=Ce.slice(0,-1*pp)),xa.push(this.productions_[ed[1]][0]),Wc.push(uv.$),Ce.push(uv._$),$5=gp[xa[xa.length-2]][xa[xa.length-1]],xa.push($5);break;case 3:return!0}}return!0}},Oc=function(){var nf={EOF:1,parseError:function(Es,xa){if(this.yy.parser)this.yy.parser.parseError(Es,xa);else throw new Error(Es)},setInput:function(Xi,Es){return this.yy=Es||this.yy||{},this._input=Xi,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 Xi=this._input[0];this.yytext+=Xi,this.yyleng++,this.offset++,this.match+=Xi,this.matched+=Xi;var Es=Xi.match(/(?:\r\n?|\n).*/g);return Es?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Xi},unput:function(Xi){var Es=Xi.length,xa=Xi.split(/(?:\r\n?|\n)/g);this._input=Xi+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Es),this.offset-=Es;var xi=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),xa.length-1&&(this.yylineno-=xa.length-1);var Wc=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:xa?(xa.length===xi.length?this.yylloc.first_column:0)+xi[xi.length-xa.length].length-xa[0].length:this.yylloc.first_column-Es},this.options.ranges&&(this.yylloc.range=[Wc[0],Wc[0]+this.yyleng-Es]),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(Xi){this.unput(this.match.slice(Xi))},pastInput:function(){var Xi=this.matched.substr(0,this.matched.length-this.match.length);return(Xi.length>20?"...":"")+Xi.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Xi=this.match;return Xi.length<20&&(Xi+=this._input.substr(0,20-Xi.length)),(Xi.substr(0,20)+(Xi.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Xi=this.pastInput(),Es=new Array(Xi.length+1).join("-");return Xi+this.upcomingInput()+`
`+Es+"^"},test_match:function(Xi,Es){var xa,xi,Wc;if(this.options.backtrack_lexer&&(Wc={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&&(Wc.yylloc.range=this.yylloc.range.slice(0))),xi=Xi[0].match(/(?:\r\n?|\n).*/g),xi&&(this.yylineno+=xi.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xi?xi[xi.length-1].length-xi[xi.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Xi[0].length},this.yytext+=Xi[0],this.match+=Xi[0],this.matches=Xi,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(Xi[0].length),this.matched+=Xi[0],xa=this.performAction.call(this,this.yy,this,Es,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),xa)return xa;if(this._backtrack){for(var Ce in Wc)this[Ce]=Wc[Ce];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Xi,Es,xa,xi;this._more||(this.yytext="",this.match="");for(var Wc=this._currentRules(),Ce=0;Ce<Wc.length;Ce++)if(xa=this._input.match(this.rules[Wc[Ce]]),xa&&(!Es||xa[0].length>Es[0].length)){if(Es=xa,xi=Ce,this.options.backtrack_lexer){if(Xi=this.test_match(xa,Wc[Ce]),Xi!==!1)return Xi;if(this._backtrack){Es=!1;continue}else return!1}else if(!this.options.flex)break}return Es?(Xi=this.test_match(Es,Wc[xi]),Xi!==!1?Xi:!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 Es=this.next();return Es||this.lex()},begin:function(Es){this.conditionStack.push(Es)},popState:function(){var Es=this.conditionStack.length-1;return Es>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(Es){return Es=this.conditionStack.length-1-Math.abs(Es||0),Es>=0?this.conditionStack[Es]:"INITIAL"},pushState:function(Es){this.begin(Es)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Es,xa,xi,Wc){switch(xi){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 Es.lex.firstGraph()&&this.begin("dir"),12;case 30:return Es.lex.firstGraph()&&this.begin("dir"),12;case 31:return Es.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
`),v=0;v<p.length;v++)f.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(p[v]);return p3(f,a.labelStyle),f}function hBe(i){for(var a="",f=!1,p,v=0;v<i.length;++v)if(p=i[v],f){switch(p){case"n":a+=`
`;break;default:a+=p}f=!1}else p==="\\"?f=!0:a+=p;return a}function g0t(i,a,f){var p=a.label,v=i.append("g");a.labelType==="svg"?uBe(v,a):typeof p!="string"||a.labelType==="html"?d0t(v,a):lBe(v,a);var m=v.node().getBBox(),b;switch(f){case"top":b=-a.height/2;break;case"bottom":b=a.height/2-m.height;break;default:b=-m.height/2}return v.attr("transform","translate("+-m.width/2+","+b+")"),v}var p0t=function(i,a){var f=a.nodes().filter(function(m){return lFt(a,m)}),p=i.selectAll("g.cluster").data(f,function(m){return m});am(p.exit(),a).style("opacity",0).remove();var v=p.enter().append("g").attr("class","cluster").attr("id",function(m){var b=a.node(m);return b.id}).style("opacity",0).each(function(m){var b=a.node(m),E=yr(this);yr(this).append("rect");var _=E.append("g").attr("class","label");g0t(_,b,b.clusterLabelPos)});return p=p.merge(v),p=am(p,a).style("opacity",1),p.selectAll("rect").each(function(m){var b=a.node(m),E=yr(this);p3(E,b.style)}),p};function fBe(i){p0t=i}let b0t=function(i,a){var f=i.selectAll("g.edgeLabel").data(a.edges(),function(v){return hFt(v)}).classed("update",!0);f.exit().remove(),f.enter().append("g").classed("edgeLabel",!0).style("opacity",0),f=i.selectAll("g.edgeLabel"),f.each(function(v){var m=yr(this);m.select(".label").remove();var b=a.edge(v),E=g0t(m,a.edge(v),0).classed("label",!0),_=E.node().getBBox();b.labelId&&E.attr("id",b.labelId),za(b,"width")||(b.width=_.width),za(b,"height")||(b.height=_.height)});var p;return f.exit?p=f.exit():p=f.selectAll(null),am(p,a).style("opacity",0).remove(),f};function dBe(i){b0t=i}function dFt(i,a){return i.intersect(a)}var v0t=function(i,a,f){var p=i.selectAll("g.edgePath").data(a.edges(),function(b){return hFt(b)}).classed("update",!0),v=wBe(p,a);mBe(p,a);var m=p.merge!==void 0?p.merge(v):p;return am(m,a).style("opacity",1),m.each(function(b){var E=yr(this),_=a.edge(b);_.elem=this,_.id&&E.attr("id",_.id),fFt(E,_.class,(E.classed("update")?"update ":"")+"edgePath")}),m.selectAll("path.path").each(function(b){var E=a.edge(b);E.arrowheadId=cK("arrowhead");var _=yr(this).attr("marker-end",function(){return"url("+pBe(location.href,E.arrowheadId)+")"}).style("fill","none");am(_,a).attr("d",function(L){return bBe(a,L)}),p3(_,E.style)}),m.selectAll("defs *").remove(),m.selectAll("defs").each(function(b){var E=a.edge(b),_=f[E.arrowhead];_(yr(this),E.arrowheadId,E,"arrowhead")}),m};function gBe(i){v0t=i}function pBe(i,a){var f=i.split("#")[0];return f+"#"+a}function bBe(i,a){var f=i.edge(a),p=i.node(a.v),v=i.node(a.w),m=f.points.slice(1,f.points.length-1);return m.unshift(dFt(p,m[0])),m.push(dFt(v,m[m.length-1])),gFt(f,m)}function gFt(i,a){var f=(Z7||K8e.line)().x(function(p){return p.x}).y(function(p){return p.y});return(f.curve||f.interpolate)(i.curve),f(a)}function vBe(i){var a=i.getBBox(),f=i.ownerSVGElement.getScreenCTM().inverse().multiply(i.getScreenCTM()).translate(a.width/2,a.height/2);return{x:f.e,y:f.f}}function wBe(i,a){var f=i.enter().append("g").attr("class","edgePath").style("opacity",0);return f.append("path").attr("class","path").attr("d",function(p){var v=a.edge(p),m=a.node(p.v).elem,b=vT(v.points.length).map(function(){return vBe(m)});return gFt(v,b)}),f.append("defs"),f}function mBe(i,a){var f=i.exit();am(f,a).style("opacity",0).remove()}var w0t=function(i,a,f){var p=a.nodes().filter(function(b){return!lFt(a,b)}),v=i.selectAll("g.node").data(p,function(b){return b}).classed("update",!0);v.exit().remove(),v.enter().append("g").attr("class","node").style("opacity",0),v=i.selectAll("g.node"),v.each(function(b){var E=a.node(b),_=yr(this);fFt(_,E.class,(_.classed("update")?"update ":"")+"node"),_.select("g.label").remove();var L=_.append("g").attr("class","label"),N=g0t(L,E),B=f[E.shape],j=hP(N.node().getBBox(),"width","height");E.elem=this,E.id&&_.attr("id",E.id),E.labelId&&L.attr("id",E.labelId),za(E,"width")&&(j.width=E.width),za(E,"height")&&(j.height=E.height),j.width+=E.paddingLeft+E.paddingRight,j.height+=E.paddingTop+E.paddingBottom,L.attr("transform","translate("+(E.paddingLeft-E.paddingRight)/2+","+(E.paddingTop-E.paddingBottom)/2+")");var R
`),b.style===void 0&&(N.style=N.style||"stroke: #333; stroke-width: 1.5px;fill:none"),N.labelStyle=N.labelStyle.replace("color:","fill:"))),N.id=E,N.class=_+" "+L,N.minlen=b.length||1,a.setEdge(f.db.lookUpDomId(b.start),f.db.lookUpDomId(b.end),N,p)})},$Be={setConf:jBe,addVertices:LFt,addEdges:MFt,getClasses:function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},draw:function(i,a,f,p){Ut.info("Drawing flowchart");const{securityLevel:v,flowchart:m}=Le();let b;v==="sandbox"&&(b=yr("#i"+a));const E=yr(v==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=v==="sandbox"?b.nodes()[0].contentDocument:document;let L=p.db.getDirection();L===void 0&&(L="TD");const N=m.nodeSpacing||50,B=m.rankSpacing||50,j=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:L,nodesep:N,ranksep:B,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();for(let dt=z.length-1;dt>=0;dt--)R=z[dt],p.db.addVertex(R.id,R.title,"group",void 0,R.classes);const K=p.db.getVertices();Ut.warn("Get vertices",K);const it=p.db.getEdges();let st=0;for(st=z.length-1;st>=0;st--){R=z[st],ZLt("cluster").append("text");for(let dt=0;dt<R.nodes.length;dt++)Ut.warn("Setting subgraph",R.nodes[dt],p.db.lookUpDomId(R.nodes[dt]),p.db.lookUpDomId(R.id)),j.setParent(p.db.lookUpDomId(R.nodes[dt]),p.db.lookUpDomId(R.id))}LFt(K,j,a,E,_,p),MFt(it,j,p);const ut=new IBe;RBe.addToRender(ut),ut.arrows().none=function(ht,wt,X,pt){const xt=ht.append("marker").attr("id",wt).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 0 0 L 0 0 z");p3(xt,X[pt+"Style"])},ut.arrows().normal=function(ht,wt){ht.append("marker").attr("id",wt).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};const bt=E.select(`[id="${a}"]`),mt=E.select("#"+a+" g");for(ut(mt,j),mt.selectAll("g.node").attr("title",function(){return p.db.getTooltip(this.id)}),p.db.indexNodes("subGraph"+st),st=0;st<z.length;st++)if(R=z[st],R.title!=="undefined"){const dt=_.querySelectorAll("#"+a+' [id="'+p.db.lookUpDomId(R.id)+'"] rect'),ht=_.querySelectorAll("#"+a+' [id="'+p.db.lookUpDomId(R.id)+'"]'),wt=dt[0].x.baseVal.value,X=dt[0].y.baseVal.value,pt=dt[0].width.baseVal.value,xt=yr(ht[0]).select(".label");xt.attr("transform",`translate(${wt+pt/2}, ${X+14})`),xt.attr("id",a+"Text");for(let nt=0;nt<R.classes.length;nt++)ht[0].classList.add(R.classes[nt])}if(!m.htmlLabels){const dt=_.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const ht of dt){const wt=ht.getBBox(),X=_.createElementNS("http://www.w3.org/2000/svg","rect");X.setAttribute("rx",0),X.setAttribute("ry",0),X.setAttribute("width",wt.width),X.setAttribute("height",wt.height),ht.insertBefore(X,ht.firstChild)}}cT(j,bt,m.diagramPadding,m.useMaxWidth),Object.keys(K).forEach(function(dt){const ht=K[dt];if(ht.link){const wt=E.select("#"+a+' [id="'+p.db.lookUpDomId(dt)+'"]');if(wt){const X=_.createElementNS("http://www.w3.org/2000/svg","a");X.setAttributeNS("http://www.w3.org/2000/svg","class",ht.classes.join(" ")),X.setAttributeNS("http://www.w3.org/2000/svg","href",ht.link),X.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),v==="sandbox"?X.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):ht.linkTarget&&X.setAttributeNS("http://www.w3.org/2000/svg","target",ht.linkTarget);const pt=wt.insert(function(){return X},":first-child"),U=wt.select(".label-container");U&&pt.append(function(){return U.node()});const xt=wt.select(".label");xt&&pt.append(function(){return xt.node()})}}})}};function S5(i){var a={options:{directed:i.isDirected(),multigraph:i.isMultigraph(),compound:i.isCompound()},nodes:zBe(i),edges:qBe(i)};return Xh(i.graph())||(a.value=POe(i.graph())),a}function zBe(i){return Of(i.nodes(),function(a){var f=i.node(
`;break}case-3:{b=`\r
`;break}case-2:{b=a?" ":" ";break}case-1:{if(!a&&v)continue;b=" ";break}default:b=String.fromCharCode(m)}v=m===-2,p.push(b)}return p.join("")}const Sje={[42]:fp,[43]:fp,[45]:fp,[48]:fp,[49]:fp,[50]:fp,[51]:fp,[52]:fp,[53]:fp,[54]:fp,[55]:fp,[56]:fp,[57]:fp,[62]:jFt},Aje={[91]:IRe},Lje={[-2]:_0t,[-1]:_0t,[32]:_0t},Mje=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:{null:[42,95]},contentInitial:Aje,disable:{null:[]},document:Sje,flow:{[35]:BRe,[42]:hK,[45]:[YFt,hK],[60]:zRe,[61]:YFt,[95]:hK,[96]:HFt,[126]:HFt},flowInitial:Lje,insideSpan:{null:[T0t,yje]},string:{[38]:qFt,[92]:$Ft},text:{[-5]:A0t,[-4]:A0t,[-3]:A0t,[33]:rje,[38]:qFt,[42]:T0t,[60]:[uRe,URe],[91]:sje,[92]:[PRe,$Ft],[93]:S0t,[95]:T0t,[96]:xRe}},Symbol.toStringTag,{value:"Module"}));function Ije(i={}){const a=KBe([Mje].concat(i.extensions||[])),f={defined:[],lazy:{},constructs:a,content:p(nRe),document:p(iRe),flow:p(wje),string:p(xje),text:p(kje)};return f;function p(v){return m;function m(b){return Tje(f,v,b)}}}const ZFt=/[\0\t\n\r]/g;function Dje(){let i=1,a="",f=!0,p;return v;function v(m,b,E){const _=[];let L,N,B,j,R;for(m=a+m.toString(b),B=0,a="",f&&(m.charCodeAt(0)===65279&&B++,f=void 0);B<m.length;){if(ZFt.lastIndex=B,L=ZFt.exec(m),j=L&&L.index!==void 0?L.index:m.length,R=m.charCodeAt(j),!L){a=m.slice(B);break}if(R===10&&B===j&&p)_.push(-3),p=void 0;else switch(p&&(_.push(-5),p=void 0),B<j&&(_.push(m.slice(B,j)),i+=j-B),R){case 0:{_.push(65533),i++;break}case 9:{for(N=Math.ceil(i/4)*4,_.push(-2);i++<N;)_.push(-1);break}case 10:{_.push(-4),i=1;break}default:p=!0,i=1}B=j+1}return E&&(p&&_.push(-5),a&&_.push(a),_.push(null)),_}}function Oje(i){for(;!GFt(i););return i}function JFt(i,a){const f=Number.parseInt(i,a);return f<9||f===11||f>13&&f<32||f>126&&f<160||f>55295&&f<57344||f>64975&&f<65008||(f&65535)===65535||(f&65535)===65534||f>1114111?"<22>":String.fromCharCode(f)}const Nje=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function Pje(i){return i.replace(Nje,Fje)}function Fje(i,a,f){if(a)return a;if(f.charCodeAt(0)===35){const v=f.charCodeAt(1),m=v===120||v===88;return JFt(f.slice(m?2:1),m?16:10)}return C0t(f)||i}function fK(i){return!i||typeof i!="object"?"":"position"in i||"type"in i?tBt(i.position):"start"in i||"end"in i?tBt(i):"line"in i||"column"in i?L0t(i):""}function L0t(i){return eBt(i&&i.line)+":"+eBt(i&&i.column)}function tBt(i){return L0t(i&&i.start)+"-"+L0t(i&&i.end)}function eBt(i){return i&&typeof i=="number"?i:1}const nBt={}.hasOwnProperty,rBt=function(i,a,f){return typeof a!="string"&&(f=a,a=void 0),Bje(f)(Oje(Ije(f).document().write(Dje()(i,a,!0))))};function Bje(i){const a={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:E(ya),autolinkProtocol:U,autolinkEmail:U,atxHeading:E(Ne),blockQuote:E($t),characterEscape:U,characterReference:U,codeFenced:E(re),codeFencedFenceInfo:_,codeFencedFenceMeta:_,codeIndented:E(re,_),codeText:E(ie,_),codeTextData:U,data:U,codeFlowValue:U,definition:E(Oe),definitionDestinationString:_,definitionLabelString:_,definitionTitleString:_,emphasis:E(oe),hardBreakEscape:E(me),hardBreakTrailing:E(me),htmlFlow:E(cn,_),htmlFlowData:U,htmlText:E(cn,_),htmlTextData:U,image:E(li),label:_,link:E(ya),listItem:E(Oo),listItemValue:z,listOrdered:E(da,R),listUnordered:E(da),paragraph:E(ds),reference:Me,referenceString:_,resourceDestinationString:_,resourceTitleString:_,setextHeading:E(Ne),strong:E(Dr),thematicBreak:E(di)},exit:{atxHeading:N(),atxHeadingSequence:ht,autolink:N(),autolinkEmail:_e,autolinkProtocol:we,blockQuote:N(),characterEscapeValue:xt,characterReferenceMarkerHexadecimal:Ge,characterReferenceMarkerNumeric:Ge,characterReferenceValue:Ke,codeFenced:N(ut),codeFencedFence:st,codeFencedFenceInfo:K,codeFencedFenceMeta:it,codeFlowValue:xt,codeIndented:N(bt),codeText:N(Ct),codeTextData:xt,data:xt,definition:N(),definitionDestinationString:dt,definitionLabelString:mt,definitionTitleString:yt,emphasis:N(),hardBreakEscape:N(Ot),hardBreakTrailing:N(Ot),htmlFlow:N(Nt),htmlFlowData:xt,htmlText:N(qt),htmlTextData:xt,image:N(Tt),label:I
`);return wA(a)}function $je(i){const a=jje(i),{children:f}=rBt(a),p=[[]];let v=0;function m(b,E="normal"){b.type==="text"?b.value.split(`
`).forEach((L,N)=>{N!==0&&(v++,p.push([])),L.split(" ").forEach(B=>{B&&p[v].push({content:B,type:E})})}):(b.type==="strong"||b.type==="emphasis")&&b.children.forEach(_=>{m(_,b.type)})}return f.forEach(b=>{b.type==="paragraph"&&b.children.forEach(E=>{m(E)})}),p}function zje(i){const{children:a}=rBt(i);function f(p){return p.type==="text"?p.value.replace(/\n/g,"<br/>"):p.type==="strong"?`<strong>${p.children.map(f).join("")}</strong>`:p.type==="emphasis"?`<em>${p.children.map(f).join("")}</em>`:p.type==="paragraph"?`<p>${p.children.map(f).join("")}</p>`:`Unsupported markdown: ${p.type}`}return a.map(f).join("")}function qje(i){return Intl.Segmenter?[...new Intl.Segmenter().segment(i)].map(a=>a.segment):[...i]}function Hje(i,a){const f=qje(a.content);return aBt(i,[],f,a.type)}function aBt(i,a,f,p){if(f.length===0)return[{content:a.join(""),type:p},{content:"",type:p}];const[v,...m]=f,b=[...a,v];return i([{content:b.join(""),type:p}])?aBt(i,b,m,p):(a.length===0&&v&&(a.push(v),f.shift()),[{content:a.join(""),type:p},{content:f.join(""),type:p}])}function Gje(i,a){if(i.some(({content:f})=>f.includes(`
`)))throw new Error("splitLineToFitWidth does not support newlines in the line");return M0t(i,a)}function M0t(i,a,f=[],p=[]){if(i.length===0)return p.length>0&&f.push(p),f.length>0?f:[];let v="";i[0].content===" "&&(v=" ",i.shift());const m=i.shift()??{content:" ",type:"normal"},b=[...p];if(v!==""&&b.push({content:v,type:"normal"}),b.push(m),a(b))return M0t(i,a,f,b);if(p.length>0)f.push(p),i.unshift(m);else if(m.content){const[E,_]=Hje(a,m);f.push([E]),_.content&&i.unshift(_)}return M0t(i,a,f)}function Vje(i,a){a&&i.attr("style",a)}function Uje(i,a,f,p,v=!1){const m=i.append("foreignObject"),b=m.append("xhtml:div"),E=a.label,_=a.isNode?"nodeLabel":"edgeLabel";b.html(`
<span class="${_} ${p}" `+(a.labelStyle?'style="'+a.labelStyle+'"':"")+">"+E+"</span>"),Vje(b,a.labelStyle),b.style("display","table-cell"),b.style("white-space","nowrap"),b.style("max-width",f+"px"),b.attr("xmlns","http://www.w3.org/1999/xhtml"),v&&b.attr("class","labelBkg");let L=b.node().getBoundingClientRect();return L.width===f&&(b.style("display","table"),b.style("white-space","break-spaces"),b.style("width",f+"px"),L=b.node().getBoundingClientRect()),m.style("width",L.width),m.style("height",L.height),m.node()}function oBt(i,a,f){return i.append("tspan").attr("class","text-outer-tspan").attr("x",0).attr("y",a*f-.1+"em").attr("dy",f+"em")}function Wje(i,a,f){const p=i.append("text"),v=oBt(p,1,a);cBt(v,f);const m=v.node().getComputedTextLength();return p.remove(),m}function Kje(i,a,f,p=!1){const m=a.append("g"),b=m.insert("rect").attr("class","background"),E=m.append("text").attr("y","-10.1");let _=0;for(const L of f){const N=j=>Wje(m,1.1,j)<=i,B=N(L)?[L]:Gje(L,N);for(const j of B){const R=oBt(E,_,1.1);cBt(R,j),_++}}if(p){const L=E.node().getBBox(),N=2;return b.attr("x",-N).attr("y",-N).attr("width",L.width+2*N).attr("height",L.height+2*N),m.node()}else return E.node()}function cBt(i,a){i.text(""),a.forEach((f,p)=>{const v=i.append("tspan").attr("font-style",f.type==="emphasis"?"italic":"normal").attr("class","text-inner-tspan").attr("font-weight",f.type==="strong"?"bold":"normal");p===0?v.text(f.content):v.text(" "+f.content)})}const dK=(i,a="",{style:f="",isTitle:p=!1,classes:v="",useHtmlLabels:m=!0,isNode:b=!0,width:E=200,addSvgBackground:_=!1}={})=>{if(Ut.info("createText",a,f,p,v,m,b,_),m){const L=zje(a),N={isNode:b,label:nP(L).replace(/fa[blrs]?:fa-[\w-]+/g,j=>`<i class='${j.replace(":"," ")}'></i>`),labelStyle:f.replace("fill:","color:")};return Uje(i,N,E,v,_)}else{const L=$je(a);return Kje(E,i,L,_)}},Od=async(i,a,f,p)=>{let v;const m=a.useHtmlLabels||s1(Le().flowchart.htmlLabels);f?v=f:v="node default";const b=i.insert("g").attr("class",v).attr("id",a.domId||a.id),E=b.insert("g").attr("class","label").attr("style",a.labelStyle);let _;a.labelText===void 0?_="":_=typeof a.labelText=="string"?a.labelText:a.labelText[0];const L=E.node();let N;a.labelType==="markdown"?N=dK(E,Dd(nP(_),Le()),{useHtmlLabels:m,width:a.width||Le().flowchart.wrappingWidth,classes:"markdown-node-label"}):N=L.appendChild(hp(Dd(nP(_),Le()),a.labelStyle,!1,p));let B=N.getBBox();const j=a.padding/2;if(s1(Le().flowchart.htmlLabels)){const R=N.children[0],z=yr(N),K=R.getElementsByTagName("img");if(K){const it=_.replace(/<img[^>]*>/g,"").trim()==="";await Promise.all([...K].map(st=>new Promise(ut=>{function bt(){if(st.style.display="flex",st.style.flexDirection="column",it){const mt=Le().fontSize?Le().fontSize:window.getComputedStyle(document.body).fontSize,yt=5;st.style.width=parseInt(mt,10)*yt+"px"}else st.style.width="100%";ut(st)}setTimeout(()=>{st.complete&&bt()}),st.addEventListener("error",bt),st.addEventListener("load",bt)})))}B=R.getBoundingClientRect(),z.attr("width",B.width),z.attr("height",B.height)}return m?E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"):E.attr("transform","translate(0, "+-B.height/2+")"),a.centerLabel&&E.attr("transform","translate("+-B.width/2+", "+-B.height/2+")"),E.insert("rect",":first-child"),{shapeSvg:b,bbox:B,halfPadding:j,label:E}},Qh=(i,a)=>{const f=a.node().getBBox();i.width=f.width,i.height=f.height};function A5(i,a,f,p){return i.insert("polygon",":first-child").attr("points",p.map(function(v){return v.x+","+v.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-a/2+","+f/2+")")}let Ho={},cm={},uBt={};const Yje=()=>{cm={},uBt={},Ho={}},gK=(i,a)=>(Ut.trace("In isDecendant",a," ",i," = ",cm[a].includes(i)),!!cm[a].includes(i)),Xje=(i,a)=>(Ut.info("Decendants of ",a," is ",cm[a]),Ut.info("Edge is ",i),i.v===a||i.w===a?!1:cm[a]?cm[a].includes(i.v)||gK(i.v,a)||gK(i.w,a)||cm[a].includes(i.w):(Ut.debug("Tilt, ",a,",not in decendants"),!1)),lBt=(i,a,f,p)=>{Ut.warn("Copying children of ",i,"root",p,"data",a.node(i),p);const v=a.children(i)||[];i!==p&&v.push(i),Ut.w
outsidePoint: ${JSON.stringify(a)}
insidePoint : ${JSON.stringify(f)}
node : x:${i.x} y:${i.y} w:${i.width} h:${i.height}`);const p=i.x,v=i.y,m=Math.abs(p-f.x),b=i.width/2;let E=f.x<a.x?b-m:b+m;const _=i.height/2,L=Math.abs(a.y-f.y),N=Math.abs(a.x-f.x);if(Math.abs(v-a.y)*b>Math.abs(p-a.x)*_){let B=f.y<a.y?a.y-_-v:v-_-a.y;E=N*B/L;const j={x:f.x<a.x?f.x+E:f.x-N+E,y:f.y<a.y?f.y+L-B:f.y-L+B};return E===0&&(j.x=a.x,j.y=a.y),N===0&&(j.x=a.x),L===0&&(j.y=a.y),Ut.warn(`abc89 topp/bott calc, Q ${L}, q ${B}, R ${N}, r ${E}`,j),j}else{f.x<a.x?E=a.x-b-p:E=p-b-a.x;let B=L*E/N,j=f.x<a.x?f.x+N-E:f.x-N+E,R=f.y<a.y?f.y+B:f.y-B;return Ut.warn(`sides calc abc89, Q ${L}, q ${B}, R ${N}, r ${E}`,{_x:j,_y:R}),E===0&&(j=a.x,R=a.y),N===0&&(j=a.x),L===0&&(R=a.y),{x:j,y:R}}},_Bt=(i,a)=>{Ut.warn("abc88 cutPathAtIntersect",i,a);let f=[],p=i[0],v=!1;return i.forEach(m=>{if(Ut.info("abc88 checking point",m,a),!A$e(a,m)&&!v){const b=L$e(a,p,m);Ut.warn("abc88 inside",m,p,b),Ut.warn("abc88 intersection",b);let E=!1;f.forEach(_=>{E=E||_.x===b.x&&_.y===b.y}),f.some(_=>_.x===b.x&&_.y===b.y)?Ut.warn("abc88 no intersect",b,f):f.push(b),v=!0}else Ut.warn("abc88 outside",m,p),p=m,v||f.push(m)}),Ut.warn("abc88 returning points",f),f},M$e=function(i,a,f,p,v,m,b){let E=f.points,_=!1;const L=m.node(a.v);var N=m.node(a.w);Ut.info("abc88 InsertEdge: ",f),N.intersect&&L.intersect&&(E=E.slice(1,f.points.length-1),E.unshift(L.intersect(E[0])),Ut.info("Last point",E[E.length-1],N,N.intersect(E[E.length-1])),E.push(N.intersect(E[E.length-1]))),f.toCluster&&(Ut.info("to cluster abc88",p[f.toCluster]),E=_Bt(f.points,p[f.toCluster].node),_=!0),f.fromCluster&&(Ut.info("from cluster abc88",p[f.fromCluster]),E=_Bt(E.reverse(),p[f.fromCluster].node).reverse(),_=!0);const B=E.filter(mt=>!Number.isNaN(mt.y));let j=FN;f.curve&&(v==="graph"||v==="flowchart")&&(j=f.curve);const{x:R,y:z}=TBt(f),K=Z7().x(R).y(z).curve(j);let it;switch(f.thickness){case"normal":it="edge-thickness-normal";break;case"thick":it="edge-thickness-thick";break;case"invisible":it="edge-thickness-thick";break;default:it=""}switch(f.pattern){case"solid":it+=" edge-pattern-solid";break;case"dotted":it+=" edge-pattern-dotted";break;case"dashed":it+=" edge-pattern-dashed";break}const st=i.append("path").attr("d",K(B)).attr("id",f.id).attr("class"," "+it+(f.classes?" "+f.classes:"")).attr("style",f.style);let ut="";switch((Le().flowchart.arrowMarkerAbsolute||Le().state.arrowMarkerAbsolute)&&(ut=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,ut=ut.replace(/\(/g,"\\("),ut=ut.replace(/\)/g,"\\)")),Ut.info("arrowTypeStart",f.arrowTypeStart),Ut.info("arrowTypeEnd",f.arrowTypeEnd),f.arrowTypeStart){case"arrow_cross":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-crossStart)");break;case"arrow_point":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-pointStart)");break;case"arrow_barb":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-barbStart)");break;case"arrow_circle":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-circleStart)");break;case"aggregation":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-aggregationStart)");break;case"extension":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-extensionStart)");break;case"composition":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-compositionStart)");break;case"dependency":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-dependencyStart)");break;case"lollipop":st.attr("marker-start","url("+ut+"#"+b+"_"+v+"-lollipopStart)");break}switch(f.arrowTypeEnd){case"arrow_cross":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-crossEnd)");break;case"arrow_point":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-pointEnd)");break;case"arrow_barb":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-barbEnd)");break;case"arrow_circle":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-circleEnd)");break;case"aggregation":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-aggregationEnd)");break;case"extension":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-extensionEnd)");break;case"composition":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-compositionEnd)");break;case"dependency":st.attr("marker-end","url("+ut+"#"+b+"_"+v+"-dependency
`),E.style===void 0&&(j.style=j.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),j.labelStyle=j.labelStyle.replace("color:","fill:"),j.id=L,j.classes="flowchart-link "+N+" "+B,a.setEdge(E.start,E.end,j,p)})},D0t={setConf:I$e,addVertices:LBt,addEdges:MBt,getClasses:function(i,a){return a.db.getClasses()},draw:async function(i,a,f,p){Ut.info("Drawing flowchart");let v=p.db.getDirection();v===void 0&&(v="TD");const{securityLevel:m,flowchart:b}=Le(),E=b.nodeSpacing||50,_=b.rankSpacing||50;let L;m==="sandbox"&&(L=yr("#i"+a));const N=yr(m==="sandbox"?L.nodes()[0].contentDocument.body:"body"),B=m==="sandbox"?L.nodes()[0].contentDocument:document,j=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:v,nodesep:E,ranksep:_,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let R;const z=p.db.getSubGraphs();Ut.info("Subgraphs - ",z);for(let yt=z.length-1;yt>=0;yt--)R=z[yt],Ut.info("Subgraph - ",R),p.db.addVertex(R.id,{text:R.title,type:R.labelType},"group",void 0,R.classes,R.dir);const K=p.db.getVertices(),it=p.db.getEdges();Ut.info("Edges",it);let st=0;for(st=z.length-1;st>=0;st--){R=z[st],ZLt("cluster").append("text");for(let yt=0;yt<R.nodes.length;yt++)Ut.info("Setting up subgraphs",R.nodes[yt],R.id),j.setParent(R.nodes[yt],R.id)}LBt(K,j,a,N,B,p),MBt(it,j);const ut=N.select(`[id="${a}"]`),bt=N.select("#"+a+" g");if(await I0t(bt,j,["point","circle","cross"],"flowchart",a),$a.insertTitle(ut,"flowchartTitleText",b.titleTopMargin,p.db.getDiagramTitle()),cT(j,ut,b.diagramPadding,b.useMaxWidth),p.db.indexNodes("subGraph"+st),!b.htmlLabels){const yt=B.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const dt of yt){const ht=dt.getBBox(),wt=B.createElementNS("http://www.w3.org/2000/svg","rect");wt.setAttribute("rx",0),wt.setAttribute("ry",0),wt.setAttribute("width",ht.width),wt.setAttribute("height",ht.height),dt.insertBefore(wt,dt.firstChild)}}Object.keys(K).forEach(function(yt){const dt=K[yt];if(dt.link){const ht=yr("#"+a+' [id="'+yt+'"]');if(ht){const wt=B.createElementNS("http://www.w3.org/2000/svg","a");wt.setAttributeNS("http://www.w3.org/2000/svg","class",dt.classes.join(" ")),wt.setAttributeNS("http://www.w3.org/2000/svg","href",dt.link),wt.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),m==="sandbox"?wt.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):dt.linkTarget&&wt.setAttributeNS("http://www.w3.org/2000/svg","target",dt.linkTarget);const X=ht.insert(function(){return wt},":first-child"),pt=ht.select(".label-container");pt&&X.append(function(){return pt.node()});const U=ht.select(".label");U&&X.append(function(){return U.node()})}}})}},D$e=(i,a)=>{const f=jTe,p=f(i,"r"),v=f(i,"g"),m=f(i,"b");return IA(p,v,m,a)},IBt=i=>`.label {
font-family: ${i.fontFamily};
color: ${i.nodeTextColor||i.textColor};
}
.cluster-label text {
fill: ${i.titleColor};
}
.cluster-label span,p {
color: ${i.titleColor};
}
.label text,span,p {
fill: ${i.nodeTextColor||i.textColor};
color: ${i.nodeTextColor||i.textColor};
}
.node rect,
.node circle,
.node ellipse,
.node polygon,
.node path {
fill: ${i.mainBkg};
stroke: ${i.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 .label {
text-align: center;
}
.node.clickable {
cursor: pointer;
}
.arrowheadPath {
fill: ${i.arrowheadColor};
}
.edgePath .path {
stroke: ${i.lineColor};
stroke-width: 2.0px;
}
.flowchart-link {
stroke: ${i.lineColor};
fill: none;
}
.edgeLabel {
background-color: ${i.edgeLabelBackground};
rect {
opacity: 0.5;
background-color: ${i.edgeLabelBackground};
fill: ${i.edgeLabelBackground};
}
text-align: center;
}
/* For html labels only */
.labelBkg {
background-color: ${D$e(i.edgeLabelBackground,.5)};
// background-color:
}
.cluster rect {
fill: ${i.clusterBkg};
stroke: ${i.clusterBorder};
stroke-width: 1px;
}
.cluster text {
fill: ${i.titleColor};
}
.cluster span,p {
color: ${i.titleColor};
}
/* .cluster div {
color: ${i.titleColor};
} */
div.mermaidTooltip {
position: absolute;
text-align: center;
max-width: 200px;
padding: 2px;
font-family: ${i.fontFamily};
font-size: 12px;
background: ${i.tertiaryColor};
border: 1px solid ${i.border2};
border-radius: 2px;
pointer-events: none;
z-index: 100;
}
.flowchartTitleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor};
}
`,O$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$dt,db:gT,renderer:D0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,$Be.setConf(i.flowchart),gT.clear(),gT.setGen("gen-1")}}},Symbol.toStringTag,{value:"Module"})),N$e=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:$dt,db:gT,renderer:D0t,styles:IBt,init:i=>{i.flowchart||(i.flowchart={}),i.flowchart.arrowMarkerAbsolute=i.arrowMarkerAbsolute,iOt({flowchart:{arrowMarkerAbsolute:i.arrowMarkerAbsolute}}),D0t.setConf(i.flowchart),gT.clear(),gT.setGen("gen-2")}}},Symbol.toStringTag,{value:"Module"}));var O0t=function(){var i=function(wt,X,pt,U){for(pt=pt||{},U=wt.length;U--;pt[wt[U]]=X);return pt},a=[6,8,10,20,22,24,26,27,28],f=[1,10],p=[1,11],v=[1,12],m=[1,13],b=[1,14],E=[1,15],_=[1,21],L=[1,22],N=[1,23],B=[1,24],j=[1,25],R=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],z=[1,34],K=[27,28,46,47],it=[41,42,43,44,45],st=[17,34],ut=[1,54],bt=[1,53],mt=[17,34,36,38],yt={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(X,pt,U,xt,nt,Ot,Nt){var qt=Ot.length-1;switch(nt){case 1:break;case 2:this.$=[];break;case 3:Ot[qt-1].push(Ot[qt]),this.$=Ot[qt-1];break;case 4:case 5:this.$=Ot[qt];break;case 6:case 7:this.$=[];break;case 8:xt.addEntity(Ot[qt-4]),xt.addEntity(Ot[qt-2]),xt.addRelationship(Ot[qt-4],Ot[qt],Ot[qt-2],Ot[qt-3]);break;case 9:xt.addEntity(Ot[qt-3]),xt.addAttributes(Ot[qt-3],Ot[qt-1]);break;case 10:xt.addEntity(Ot[qt-2]);break;case 11:xt.addEntity(Ot[qt]);break;case 12:xt.addEntity(Ot[qt-6],Ot[qt-4]),xt.addAttributes(Ot[qt-6],Ot[qt-1]);break;case 13:xt.addEntity(Ot[qt-5],Ot[qt-3]);break;case 14:xt.addEntity(Ot[qt-3],Ot[qt-1]);break;case 15:case 16:this.$=Ot[qt].trim(),xt.setAccTitle(this.$);break;case 17:case 18:this.$=Ot[qt].trim(),xt.setAccDescription(this.$);break;case 19:case 43:this.$=Ot[qt];break;case 20:case 41:case 42:this.$=Ot[qt].replace(/"/g,"");break;case 21:case 29:this.$=[Ot[qt]];break;case 22:Ot[qt].push(Ot[qt-1]),this.$=Ot[qt];break;case 23:this.$={attributeType:Ot[qt-1],attributeName:Ot[qt]};break;case 24:this.$={attributeType:Ot[qt-2],attributeName:Ot[qt-1],attributeKeyTypeList:Ot[qt]};break;case 25:this.$={attributeType:Ot[qt-2],attributeName:Ot[qt-1],attributeComment:Ot[qt]};break;case 26:this.$={attributeType:Ot[qt-3],attributeName:Ot[qt-2],attributeKeyTypeList:Ot[qt-1],attributeComment:Ot[qt]};break;case 27:case 28:case 31:this.$=Ot[qt];break;case 30:Ot[qt-2].push(Ot[qt]),this.$=Ot[qt-2];break;case 32:this.$=Ot[qt].replace(/"/g,"");break;case 33:this.$={cardA:Ot[qt],relType:Ot[qt-1],cardB:Ot[qt-2]};break;case 34:this.$=xt.Cardinality.Z
`+Ft.showPosition()+`
Expecting `+Ne.join(", ")+", got '"+(this.terminals_[Ke]||Ke)+"'":me="Parse error on line "+(Ct+1)+": Unexpected "+(Ke==Ht?"end of input":"'"+(this.terminals_[Ke]||Ke)+"'"),this.parseError(me,{text:Ft.match,token:this.terminals_[Ke]||Ke,line:Ft.yylineno,loc:Me,expected:Ne})}if(_e[0]instanceof Array&&_e.length>1)throw new Error("Parse Error: multiple actions possible at state: "+we+", token: "+Ke);switch(_e[0]){case 1:U.push(Ke),nt.push(Ft.yytext),Ot.push(Ft.yylloc),U.push(_e[1]),Ke=null,Z=Ft.yyleng,qt=Ft.yytext,Ct=Ft.yylineno,Me=Ft.yylloc;break;case 2:if(Oe=this.productions_[_e[1]][1],re.$=nt[nt.length-Oe],re._$={first_line:Ot[Ot.length-(Oe||1)].first_line,last_line:Ot[Ot.length-1].last_line,first_column:Ot[Ot.length-(Oe||1)].first_column,last_column:Ot[Ot.length-1].last_column},ve&&(re._$.range=[Ot[Ot.length-(Oe||1)].range[0],Ot[Ot.length-1].range[1]]),$t=this.performAction.apply(re,[qt,Z,Ct,ke.yy,_e[1],nt,Ot].concat(It)),typeof $t<"u")return $t;Oe&&(U=U.slice(0,-1*Oe*2),nt=nt.slice(0,-1*Oe),Ot=Ot.slice(0,-1*Oe)),U.push(this.productions_[_e[1]][0]),nt.push(re.$),Ot.push(re._$),oe=Nt[U[U.length-2]][U[U.length-1]],U.push(oe);break;case 3:return!0}}return!0}},dt=function(){var wt={EOF:1,parseError:function(pt,U){if(this.yy.parser)this.yy.parser.parseError(pt,U);else throw new Error(pt)},setInput:function(X,pt){return this.yy=pt||this.yy||{},this._input=X,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 X=this._input[0];this.yytext+=X,this.yyleng++,this.offset++,this.match+=X,this.matched+=X;var pt=X.match(/(?:\r\n?|\n).*/g);return pt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),X},unput:function(X){var pt=X.length,U=X.split(/(?:\r\n?|\n)/g);this._input=X+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-pt),this.offset-=pt;var xt=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 nt=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===xt.length?this.yylloc.first_column:0)+xt[xt.length-U.length].length-U[0].length:this.yylloc.first_column-pt},this.options.ranges&&(this.yylloc.range=[nt[0],nt[0]+this.yyleng-pt]),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(X){this.unput(this.match.slice(X))},pastInput:function(){var X=this.matched.substr(0,this.matched.length-this.match.length);return(X.length>20?"...":"")+X.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var X=this.match;return X.length<20&&(X+=this._input.substr(0,20-X.length)),(X.substr(0,20)+(X.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var X=this.pastInput(),pt=new Array(X.length+1).join("-");return X+this.upcomingInput()+`
`+pt+"^"},test_match:function(X,pt){var U,xt,nt;if(this.options.backtrack_lexer&&(nt={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&&(nt.yylloc.range=this.yylloc.range.slice(0))),xt=X[0].match(/(?:\r\n?|\n).*/g),xt&&(this.yylineno+=xt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:xt?xt[xt.length-1].length-xt[xt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+X[0].length},this.yytext+=X[0],this.match+=X[0],this.matches=X,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(X[0].length),this.matched+=X[0],U=this.performAction.call(this,this.yy,this,pt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),U)return U;if(this._backtrack){for(var Ot in nt)this[Ot]=nt[Ot];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var X,pt,U,xt;this._more||(this.yytext="",this.match="");for(var nt=this._currentRules(),Ot=0;Ot<nt.length;Ot++)if(U=this._input.match(this.rules[nt[Ot]]),U&&(!pt||U[0].length>pt[0].length)){if(pt=U,xt=Ot,this.options.backtrack_lexer){if(X=this.test_match(U,nt[Ot]),X!==!1)return X;if(this._backtrack){pt=!1;continue}else return!1}else if(!this.options.flex)break}return pt?(X=this.test_match(pt,nt[xt]),X!==!1?X:!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 pt=this.next();return pt||this.lex()},begin:function(pt){this.conditionStack.push(pt)},popState:function(){var pt=this.conditionStack.length-1;return pt>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(pt){return pt=this.conditionStack.length-1-Math.abs(pt||0),pt>=0?this.conditionStack[pt]:"INITIAL"},pushState:function(pt){this.begin(pt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(pt,U,xt,nt){switch(xt){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 U.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 U.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 wt}();yt.lexer=dt;function ht(){this.yy={}}return ht.prototype=yt,yt.Parser=ht,new ht}();O0t.parser=O0t;const P$e=O0t;let hk={},N0t=[];const F$e={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"},B$e={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},DBt=function(i,a=void 0){return hk[i]===void 0?(hk[i]={attributes:[],alias:a},Ut.info("Added new entity :",i)):hk[i]&&!hk[i].alias&&a&&(hk[i].alias=a,Ut.info(`Add alias '${a}' to entity '${i}'`)),hk[i]},R$e={Cardinality:F$e,Identification:B$e,getConfig:()=>Le().er,addEntity:DBt,addAttributes:function(i,a){let f=DBt(i),p;for(p=a.length-1;p>=0;p--)f.attributes.push(a[p]),Ut.debug("Added attribute ",a[p].attributeName)},getEntitie
.entityBox {
fill: ${i.mainBkg};
stroke: ${i.nodeBorder};
}
.attributeBoxOdd {
fill: ${i.attributeBackgroundColorOdd};
stroke: ${i.nodeBorder};
}
.attributeBoxEven {
fill: ${i.attributeBackgroundColorEven};
stroke: ${i.nodeBorder};
}
.relationshipLabelBox {
fill: ${i.tertiaryColor};
opacity: 0.7;
background-color: ${i.tertiaryColor};
rect {
opacity: 0.5;
}
}
.relationshipLine {
stroke: ${i.lineColor};
}
.entityTitleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor};
}
#MD_PARENT_START {
fill: #f5f5f5 !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#MD_PARENT_END {
fill: #f5f5f5 !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
`}},Symbol.toStringTag,{value:"Module"}));var F0t=function(){var i=function(yt,dt,ht,wt){for(ht=ht||{},wt=yt.length;wt--;ht[yt[wt]]=dt);return ht},a=[1,3],f=[1,6],p=[1,4],v=[1,5],m=[2,5],b=[1,12],E=[5,7,13,19,21,23,24,26,28,31,36,39,46],_=[7,13,19,21,23,24,26,28,31,36,39],L=[7,12,13,19,21,23,24,26,28,31,36,39],N=[7,13,46],B=[1,42],j=[1,41],R=[7,13,29,32,34,37,46],z=[1,55],K=[1,56],it=[1,57],st=[7,13,32,34,41,46],ut={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,COMMIT_TAG:34,EMPTYSTR:35,MERGE:36,COMMIT_TYPE:37,commitType:38,COMMIT:39,commit_arg:40,COMMIT_MSG:41,NORMAL:42,REVERSE:43,HIGHLIGHT:44,ID:45,";":46,$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:"COMMIT_TAG",35:"EMPTYSTR",36:"MERGE",37:"COMMIT_TYPE",39:"COMMIT",41:"COMMIT_MSG",42:"NORMAL",43:"REVERSE",44:"HIGHLIGHT",45:"ID",46:";"},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,5],[18,5],[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],[40,0],[40,1],[38,1],[38,1],[38,1],[27,1],[27,1],[4,1],[4,1],[4,1]],performAction:function(dt,ht,wt,X,pt,U,xt){var nt=U.length-1;switch(pt){case 2:return U[nt];case 3:return U[nt-1];case 4:return X.setDirection(U[nt-3]),U[nt-1];case 6:X.setOptions(U[nt-1]),this.$=U[nt];break;case 7:U[nt-1]+=U[nt],this.$=U[nt-1];break;case 9:this.$=[];break;case 10:U[nt-1].push(U[nt]),this.$=U[nt-1];break;case 11:this.$=U[nt-1];break;case 16:this.$=U[nt].trim(),X.setAccTitle(this.$);break;case 17:case 18:this.$=U[nt].trim(),X.setAccDescription(this.$);break;case 19:X.addSection(U[nt].substr(8)),this.$=U[nt].substr(8);break;case 21:X.checkout(U[nt]);break;case 22:X.branch(U[nt]);break;case 23:X.branch(U[nt-2],U[nt]);break;case 24:X.cherryPick(U[nt],"",void 0);break;case 25:X.cherryPick(U[nt-2],"",U[nt]);break;case 26:case 28:X.cherryPick(U[nt-2],"","");break;case 27:X.cherryPick(U[nt],"",U[nt-2]);break;case 29:X.merge(U[nt],"","","");break;case 30:X.merge(U[nt-2],U[nt],"","");break;case 31:X.merge(U[nt-2],"",U[nt],"");break;case 32:X.merge(U[nt-2],"","",U[nt]);break;case 33:X.merge(U[nt-4],U[nt],"",U[nt-2]);break;case 34:X.merge(U[nt-4],"",U[nt],U[nt-2]);break;case 35:X.merge(U[nt-4],"",U[nt-2],U[nt]);break;case 36:X.merge(U[nt-4],U[nt-2],U[nt],"");break;case 37:X.merge(U[nt-4],U[nt-2],"",U[nt]);break;case 38:X.merge(U[nt-4],U[nt],U[nt-2],"");break;case 39:X.merge(U[nt-6],U[nt-4],U[nt-2],U[nt]);break;case 40:X.merge(U[nt-6],U[nt],U[nt-4],U[nt-2]);break;case 41:X.merge(U[nt-6],U[nt-4],U[nt],U[nt-2]);break;case 42:X.merge(U[nt-6],U[nt-2],U[nt-4],U[nt]);break;case 43:X.merge(U[nt-6],U[nt],U[nt-2],U[nt-4]);break;case 44:X.merge(U[nt-6],U[nt-2],U[nt],U[nt-4]);break;case 45:X.commit(U[nt]);break;case 46:X.commit("","",X.commitType.NORMAL,U[nt]);break;case 47:X.commit("","",U[nt],"");break;case 48:X.commit("","",U[nt],U[nt-2]);break;case 49:X.commit("","",U[nt-2],U[nt]);break;case 50:X.commit("",U[nt],X.comm
`+Tt.showPosition()+`
Expecting `+ie.join(", ")+", got '"+(this.terminals_[Me]||Me)+"'":Oe="Parse error on line "+(Ot+1)+": Unexpected "+(Me==Ct?"end of input":"'"+(this.terminals_[Me]||Me)+"'"),this.parseError(Oe,{text:Tt.match,token:this.terminals_[Me]||Me,line:Tt.yylineno,loc:Ft,expected:ie})}if(Ge[0]instanceof Array&&Ge.length>1)throw new Error("Parse Error: multiple actions possible at state: "+ve+", token: "+Me);switch(Ge[0]){case 1:wt.push(Me),pt.push(Tt.yytext),U.push(Tt.yylloc),wt.push(Ge[1]),Me=null,Nt=Tt.yyleng,nt=Tt.yytext,Ot=Tt.yylineno,Ft=Tt.yylloc;break;case 2:if($t=this.productions_[Ge[1]][1],we.$=pt[pt.length-$t],we._$={first_line:U[U.length-($t||1)].first_line,last_line:U[U.length-1].last_line,first_column:U[U.length-($t||1)].first_column,last_column:U[U.length-1].last_column},ke&&(we._$.range=[U[U.length-($t||1)].range[0],U[U.length-1].range[1]]),Ke=this.performAction.apply(we,[nt,Nt,Ot,Ht.yy,Ge[1],pt,U].concat(Z)),typeof Ke<"u")return Ke;$t&&(wt=wt.slice(0,-1*$t*2),pt=pt.slice(0,-1*$t),U=U.slice(0,-1*$t)),wt.push(this.productions_[Ge[1]][0]),pt.push(we.$),U.push(we._$),re=xt[wt[wt.length-2]][wt[wt.length-1]],wt.push(re);break;case 3:return!0}}return!0}},bt=function(){var yt={EOF:1,parseError:function(ht,wt){if(this.yy.parser)this.yy.parser.parseError(ht,wt);else throw new Error(ht)},setInput:function(dt,ht){return this.yy=ht||this.yy||{},this._input=dt,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 dt=this._input[0];this.yytext+=dt,this.yyleng++,this.offset++,this.match+=dt,this.matched+=dt;var ht=dt.match(/(?:\r\n?|\n).*/g);return ht?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),dt},unput:function(dt){var ht=dt.length,wt=dt.split(/(?:\r\n?|\n)/g);this._input=dt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ht),this.offset-=ht;var X=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),wt.length-1&&(this.yylineno-=wt.length-1);var pt=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:wt?(wt.length===X.length?this.yylloc.first_column:0)+X[X.length-wt.length].length-wt[0].length:this.yylloc.first_column-ht},this.options.ranges&&(this.yylloc.range=[pt[0],pt[0]+this.yyleng-ht]),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(dt){this.unput(this.match.slice(dt))},pastInput:function(){var dt=this.matched.substr(0,this.matched.length-this.match.length);return(dt.length>20?"...":"")+dt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var dt=this.match;return dt.length<20&&(dt+=this._input.substr(0,20-dt.length)),(dt.substr(0,20)+(dt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var dt=this.pastInput(),ht=new Array(dt.length+1).join("-");return dt+this.upcomingInput()+`
`+ht+"^"},test_match:function(dt,ht){var wt,X,pt;if(this.options.backtrack_lexer&&(pt={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&&(pt.yylloc.range=this.yylloc.range.slice(0))),X=dt[0].match(/(?:\r\n?|\n).*/g),X&&(this.yylineno+=X.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:X?X[X.length-1].length-X[X.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+dt[0].length},this.yytext+=dt[0],this.match+=dt[0],this.matches=dt,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(dt[0].length),this.matched+=dt[0],wt=this.performAction.call(this,this.yy,this,ht,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),wt)return wt;if(this._backtrack){for(var U in pt)this[U]=pt[U];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var dt,ht,wt,X;this._more||(this.yytext="",this.match="");for(var pt=this._currentRules(),U=0;U<pt.length;U++)if(wt=this._input.match(this.rules[pt[U]]),wt&&(!ht||wt[0].length>ht[0].length)){if(ht=wt,X=U,this.options.backtrack_lexer){if(dt=this.test_match(wt,pt[U]),dt!==!1)return dt;if(this._backtrack){ht=!1;continue}else return!1}else if(!this.options.flex)break}return ht?(dt=this.test_match(ht,pt[X]),dt!==!1?dt:!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 ht=this.next();return ht||this.lex()},begin:function(ht){this.conditionStack.push(ht)},popState:function(){var ht=this.conditionStack.length-1;return ht>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(ht){return ht=this.conditionStack.length-1-Math.abs(ht||0),ht>=0?this.conditionStack[ht]:"INITIAL"},pushState:function(ht){this.begin(ht)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(ht,wt,X,pt){switch(X){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 39;case 12:return 32;case 13:return 37;case 14:return 41;case 15:return 42;case 16:return 43;case 17:return 44;case 18:return 34;case 19:return 28;case 20:return 29;case 21:return 36;case 22:return 31;case 23:return 26;case 24:return 9;case 25:return 9;case 26:return 8;case 27:return"CARET";case 28:this.begin("options");break;case 29:this.popState();break;case 30:return 12;case 31:return 35;case 32:this.begin("string");break;case 33:this.popState();break;case 34:return 33;case 35:return 30;case 36:return 45;case 37: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,/^(?: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:[29,30],inclusive:!1},string:{rules:[33,34],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,31,32,35,36,37,38],inclusive:!0}}};return yt}();ut.lexer=bt;function mt(){this.yy={}}return mt.prototype=ut,ut.Parser=mt,new mt}();F0t.parser=F0t;const oze=F0t;let yK=Le().gitGraph.mainBranchName,cze=Le().gitGraph.mainBranchOrder,c1={},hg=null,xP={};xP[yK]={name:yK,order:cze};let Pf={};Pf[yK]=hg;let X1=yK,FBt="LR",yT=0;function B0t(){return GDt({length:7})}function uze(i,a){const f=Object.create(null);return i.reduce((p,v)=>{const m=a(v);return f[m]||(f[m]=!0,p.push(v)),p},[])}const lze=function(i){FBt=i};let BBt={};const hze=function(i){Ut.debug("options str",i),i=i&&i.trim(),i=i||"{}";try{BBt=JSON.parse(i)}catch(a){Ut.error("error while parsing gitGraph options",a.message)}},fze=function(){return BBt},dze=function(i,a,f,p){Ut.debug("Entering commit:",i,a,f,p),a=Yr.sanitizeText(a,Le()),i=Yr.sanitizeText(i,Le()),p=Yr.sanitizeText(p,Le());const v={id:a||yT+"-"+B0t(),message:i,seq:yT++,type:f||kP.NORMAL,tag:p||"",parents:hg==null?[]:[hg.id],branch:X1};hg=v,c1[v.id]=v,Pf[X1]=v.id,Ut.debug("in pushCommit "+v.id)},gze=function(i,a){if(i=Yr.sanitizeText(i,Le()),Pf[i]===void 0)Pf[i]=hg!=null?hg.id:null,xP[i]={name:i,order:a?parseInt(a,10):null},RBt(i),Ut.debug("in createBranch");else{let f=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 '+i+'")');throw f.hash={text:"branch "+i,token:"branch "
${b-ut.width/2-4/2},${mt+2}
${b-ut.width/2-4/2},${mt-2}
${b+10-ut.width/2-4},${mt-bt-2}
${b+10+ut.width/2+4},${mt-bt-2}
${b+10+ut.width/2+4},${mt+bt+2}
${b+10-ut.width/2-4},${mt+bt+2}`),it.attr("cx",b-ut.width/2+4/2).attr("cy",mt).attr("r",1.5).attr("class","tag-hole"),y0==="TB"&&(K.attr("class","tag-label-bkg").attr("points",`
${j},${b+2}
${j},${b-2}
${j+10},${b-bt-2}
${j+10+ut.width+4},${b-bt-2}
${j+10+ut.width+4},${b+bt+2}
${j+10},${b+bt+2}`).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),it.attr("cx",j+4/2).attr("cy",b).attr("transform","translate(12,12) rotate(45, "+j+","+b+")"),st.attr("x",j+5).attr("y",b+3).attr("transform","translate(14,14) rotate(45, "+j+","+b+")"))}}b+=50,b>CP&&(CP=b)})},Sze=(i,a,f)=>Object.keys(f).filter(m=>f[m].branch===a.branch&&f[m].seq>i.seq&&f[m].seq<a.seq).length>0,_P=(i,a,f=0)=>{const p=i+Math.abs(i-a)/2;if(f>5)return p;if(xK.every(b=>Math.abs(b-p)>=10))return xK.push(p),p;const m=Math.abs(i-a);return _P(i,a-m/5,f+1)},Aze=(i,a,f,p)=>{const v=TP[a.id],m=TP[f.id],b=Sze(a,f,p);let E="",_="",L=0,N=0,B=Q1[f.branch].index,j;if(b){E="A 10 10, 0, 0, 0,",_="A 10 10, 0, 0, 1,",L=10,N=10,B=Q1[f.branch].index;const R=v.y<m.y?_P(v.y,m.y):_P(m.y,v.y),z=v.x<m.x?_P(v.x,m.x):_P(m.x,v.x);y0==="TB"?v.x<m.x?j=`M ${v.x} ${v.y} L ${z-L} ${v.y} ${_} ${z} ${v.y+N} L ${z} ${m.y-L} ${E} ${z+N} ${m.y} L ${m.x} ${m.y}`:j=`M ${v.x} ${v.y} L ${z+L} ${v.y} ${E} ${z} ${v.y+N} L ${z} ${m.y-L} ${_} ${z-N} ${m.y} L ${m.x} ${m.y}`:v.y<m.y?j=`M ${v.x} ${v.y} L ${v.x} ${R-L} ${E} ${v.x+N} ${R} L ${m.x-L} ${R} ${_} ${m.x} ${R+N} L ${m.x} ${m.y}`:j=`M ${v.x} ${v.y} L ${v.x} ${R+L} ${_} ${v.x+N} ${R} L ${m.x-L} ${R} ${E} ${m.x} ${R-N} L ${m.x} ${m.y}`}else y0==="TB"?(v.x<m.x&&(E="A 20 20, 0, 0, 0,",_="A 20 20, 0, 0, 1,",L=20,N=20,B=Q1[f.branch].index,j=`M ${v.x} ${v.y} L ${m.x-L} ${v.y} ${_} ${m.x} ${v.y+N} L ${m.x} ${m.y}`),v.x>m.x&&(E="A 20 20, 0, 0, 0,",_="A 20 20, 0, 0, 1,",L=20,N=20,B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${_} ${v.x-N} ${m.y} L ${m.x} ${m.y}`),v.x===m.x&&(B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x+L} ${v.y} ${E} ${v.x+N} ${m.y+L} L ${m.x} ${m.y}`)):(v.y<m.y&&(E="A 20 20, 0, 0, 0,",L=20,N=20,B=Q1[f.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${E} ${v.x+N} ${m.y} L ${m.x} ${m.y}`),v.y>m.y&&(E="A 20 20, 0, 0, 0,",L=20,N=20,B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${m.x-L} ${v.y} ${E} ${m.x} ${v.y-N} L ${m.x} ${m.y}`),v.y===m.y&&(B=Q1[a.branch].index,j=`M ${v.x} ${v.y} L ${v.x} ${m.y-L} ${E} ${v.x+N} ${m.y} L ${m.x} ${m.y}`));i.append("path").attr("d",j).attr("class","arrow arrow"+B%xT)},Lze=(i,a)=>{const f=i.append("g").attr("class","commit-arrows");Object.keys(a).forEach(p=>{const v=a[p];v.parents&&v.parents.length>0&&v.parents.forEach(m=>{Aze(f,a[m],v,a)})})},Mze=(i,a)=>{const f=JN().gitGraph,p=i.append("g");a.forEach((v,m)=>{const b=m%xT,E=Q1[v.name].pos,_=p.append("line");_.attr("x1",0),_.attr("y1",E),_.attr("x2",CP),_.attr("y2",E),_.attr("class","branch branch"+b),y0==="TB"&&(_.attr("y1",30),_.attr("x1",E),_.attr("y2",CP),_.attr("x2",E)),xK.push(E);let L=v.name;const N=qBt(L),B=p.insert("rect"),R=p.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+b);R.node().appendChild(N);let z=N.getBBox();B.attr("class","branchLabelBkg label"+b).attr("rx",4).attr("ry",4).attr("x",-z.width-4-(f.rotateCommitLabel===!0?30:0)).attr("y",-z.height/2+8).attr("width",z.width+18).attr("height",z.height+4),R.attr("transform","translate("+(-z.width-14-(f.rotateCommitLabel===!0?30:0))+", "+(E-z.height/2-1)+")"),y0==="TB"&&(B.attr("x",E-z.width/2-10).attr("y",0),R.attr("transform","translate("+(E-z.width/2-5)+", 0)")),y0!=="TB"&&B.attr("transform","translate(-19, "+(E-z.height/2)+")")})},Ize=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:oze,db:Cze,renderer:{draw:function(i,a,f,p){_ze();const v=JN(),m=v.gitGraph;Ut.debug("in gitgraph renderer",i+`
`,"id:",a,f),EP=p.db.getCommits();const b=p.db.getBranchesAsObjArray();y0=p.db.getDirection();const E=yr(`[id="${a}"]`);let _=0;b.forEach((L,N)=>{const B=qBt(L.name),j=E.append("g"),R=j.insert("g").attr("class","branchLabel"),z=R.insert("g").attr("class","label branch-label");z.node().appendChild(B);let K=B.getBBox();Q1[L.name]={pos:_,index:N},_+=50+(m.rotateCommitLabel?40:0)+(y0==="TB"?K.width/2:0),z.remove(),R.remove(),j.remove()}),HBt(E,EP,!1),m.showBranches&&Mze(E,b),Lze(E,EP),HBt(E,EP,!0),$a.insertTitle(E,"gitTitleText",m.titleTopMargin,p.db.getDiagramTitle()),MOt(void 0,E,m.diagramPadding,m.useMaxWidth??v.useMaxWidth)}},styles:i=>`
.commit-id,
.commit-msg,
.branch-label {
fill: lightgrey;
color: lightgrey;
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
}
${[0,1,2,3,4,5,6,7].map(a=>`
.branch-label${a} { fill: ${i["gitBranchLabel"+a]}; }
.commit${a} { stroke: ${i["git"+a]}; fill: ${i["git"+a]}; }
.commit-highlight${a} { stroke: ${i["gitInv"+a]}; fill: ${i["gitInv"+a]}; }
.label${a} { fill: ${i["git"+a]}; }
.arrow${a} { stroke: ${i["git"+a]}; }
`).join(`
`)}
.branch {
stroke-width: 1;
stroke: ${i.lineColor};
stroke-dasharray: 2;
}
.commit-label { font-size: ${i.commitLabelFontSize}; fill: ${i.commitLabelColor};}
.commit-label-bkg { font-size: ${i.commitLabelFontSize}; fill: ${i.commitLabelBackground}; opacity: 0.5; }
.tag-label { font-size: ${i.tagLabelFontSize}; fill: ${i.tagLabelColor};}
.tag-label-bkg { fill: ${i.tagLabelBackground}; stroke: ${i.tagLabelBorder}; }
.tag-hole { fill: ${i.textColor}; }
.commit-merge {
stroke: ${i.primaryColor};
fill: ${i.primaryColor};
}
.commit-reverse {
stroke: ${i.primaryColor};
fill: ${i.primaryColor};
stroke-width: 3;
}
.commit-highlight-outer {
}
.commit-highlight-inner {
stroke: ${i.primaryColor};
fill: ${i.primaryColor};
}
.arrow { stroke-width: 8; stroke-linecap: round; fill: none}
.gitTitleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor};
}
`}},Symbol.toStringTag,{value:"Module"}));var R0t=function(){var i=function(U,xt,nt,Ot){for(nt=nt||{},Ot=U.length;Ot--;nt[U[Ot]]=xt);return nt},a=[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],f=[1,25],p=[1,26],v=[1,27],m=[1,28],b=[1,29],E=[1,30],_=[1,31],L=[1,9],N=[1,10],B=[1,11],j=[1,12],R=[1,13],z=[1,14],K=[1,15],it=[1,16],st=[1,18],ut=[1,19],bt=[1,20],mt=[1,21],yt=[1,22],dt=[1,24],ht=[1,32],wt={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(xt,nt,Ot,Nt,qt,Ct,Z){var Tt=Ct.length-1;switch(qt){case 1:return Ct[Tt-1];case 2:this.$=[];break;case 3:Ct[Tt-1].push(Ct[Tt]),this.$=Ct[Tt-1];break;case 4:case 5:this.$=Ct[Tt];break;case 6:case 7:this.$=[];break;case 8:Nt.setWeekday("monday");break;case 9:Nt.setWeekday("tuesday");break;case 10:Nt.setWeekday("wednesday");break;case 11:Nt.setWeekday("thursday");break;case 12:Nt.setWeekday("friday");break;case 13:Nt.setWeekday("saturday");break;case 14:Nt.setWeekday("sunday");break;case 15:Nt.setDateFormat(Ct[Tt].substr(11)),this.$=Ct[Tt].substr(11);break;case 16:Nt.enableInclusiveEndDates(),this.$=Ct[Tt].substr(18);break;case 17:Nt.TopAxis(),this.$=Ct[Tt].substr(8);break;case 18:Nt.setAxisFormat(Ct[Tt].substr(11)),this.$=Ct[Tt].substr(11);break;case 19:Nt.setTickInterval(Ct[Tt].substr(13)),this.$=Ct[Tt].substr(13);break;case 20:Nt.setExcludes(Ct[Tt].substr(9)),this.$=Ct[Tt].substr(9);break;case 21:Nt.setIncludes(Ct[Tt].substr(9)),this.$=Ct[Tt].substr(9);break;case 22:Nt.setTodayMarker(Ct[Tt].substr(12)),this.$=Ct[Tt].substr(12);break;case 24:Nt.setDiagramTitle(Ct[Tt].substr(6)),this.$=Ct[Tt].substr(6);break;case 25:this.$=Ct[Tt].trim(),Nt.setAccTitle(this.$);break;case 26:case 27:this.$=Ct[Tt].trim(),Nt.setAccDescription(this.$);break;case 28:Nt.addSection(Ct[Tt].substr(8)),this.$=Ct[Tt].substr(8);break;case 30:Nt.addTask(Ct[Tt-1],Ct[Tt]),this.$="task";break;case 31:this.$=Ct[Tt-1],Nt.setClickEvent(Ct[Tt-1],Ct[Tt],null);break;case 32:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt-1],Ct[Tt]);break;case 33:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt-1],null),Nt.setLink(Ct[Tt-2],Ct[Tt]);break;case 34:this.$=Ct[Tt-3],Nt.setClickEvent(Ct[Tt-3],Ct[Tt-2],Ct[Tt-1]),Nt.setLink(Ct[Tt-3],Ct[Tt]);break;case 35:this.$=Ct[Tt-2],Nt.setClickEvent(Ct[Tt-2],Ct[Tt],null),Nt.setLink(Ct[Tt-2],Ct[Tt-1]);break;case 36:this.$=Ct[Tt-3],Nt.setClickEvent(Ct[Tt-3],Ct[Tt-1],Ct[Tt]),Nt.setLink(Ct[Tt-3],Ct[Tt-2]);break;case 37:this.$=Ct[Tt-1],Nt.setLink(Ct[Tt-1],Ct[Tt]);break;case 38:case 44:this.$=Ct[Tt-1]+" "+Ct[Tt];break;case 39:case 40:case 42:this.$=Ct[Tt-2]+" "+Ct[Tt-1]+" "+Ct[Tt];break;case 41:case 43:this.$=Ct[Tt-3]+" "+Ct[Tt-2]+" "+Ct[Tt-1]+" "+Ct[Tt];break}}
`+Me.showPosition()+`
Expecting `+li.join(", ")+", got '"+(this.terminals_[$t]||$t)+"'":ya="Parse error on line "+(Ht+1)+": Unexpected "+($t==ke?"end of input":"'"+(this.terminals_[$t]||$t)+"'"),this.parseError(ya,{text:Me.match,token:this.terminals_[$t]||$t,line:Me.yylineno,loc:Ke,expected:li})}if(ie[0]instanceof Array&&ie.length>1)throw new Error("Parse Error: multiple actions possible at state: "+re+", token: "+$t);switch(ie[0]){case 1:Ot.push($t),qt.push(Me.yytext),Ct.push(Me.yylloc),Ot.push(ie[1]),$t=null,It=Me.yyleng,Tt=Me.yytext,Ht=Me.yylineno,Ke=Me.yylloc;break;case 2:if(me=this.productions_[ie[1]][1],oe.$=qt[qt.length-me],oe._$={first_line:Ct[Ct.length-(me||1)].first_line,last_line:Ct[Ct.length-1].last_line,first_column:Ct[Ct.length-(me||1)].first_column,last_column:Ct[Ct.length-1].last_column},we&&(oe._$.range=[Ct[Ct.length-(me||1)].range[0],Ct[Ct.length-1].range[1]]),Oe=this.performAction.apply(oe,[Tt,It,Ht,ve.yy,ie[1],qt,Ct].concat(pn)),typeof Oe<"u")return Oe;me&&(Ot=Ot.slice(0,-1*me*2),qt=qt.slice(0,-1*me),Ct=Ct.slice(0,-1*me)),Ot.push(this.productions_[ie[1]][0]),qt.push(oe.$),Ct.push(oe._$),cn=Z[Ot[Ot.length-2]][Ot[Ot.length-1]],Ot.push(cn);break;case 3:return!0}}return!0}},X=function(){var U={EOF:1,parseError:function(nt,Ot){if(this.yy.parser)this.yy.parser.parseError(nt,Ot);else throw new Error(nt)},setInput:function(xt,nt){return this.yy=nt||this.yy||{},this._input=xt,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 xt=this._input[0];this.yytext+=xt,this.yyleng++,this.offset++,this.match+=xt,this.matched+=xt;var nt=xt.match(/(?:\r\n?|\n).*/g);return nt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),xt},unput:function(xt){var nt=xt.length,Ot=xt.split(/(?:\r\n?|\n)/g);this._input=xt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-nt),this.offset-=nt;var Nt=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),Ot.length-1&&(this.yylineno-=Ot.length-1);var qt=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:Ot?(Ot.length===Nt.length?this.yylloc.first_column:0)+Nt[Nt.length-Ot.length].length-Ot[0].length:this.yylloc.first_column-nt},this.options.ranges&&(this.yylloc.range=[qt[0],qt[0]+this.yyleng-nt]),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(xt){this.unput(this.match.slice(xt))},pastInput:function(){var xt=this.matched.substr(0,this.matched.length-this.match.length);return(xt.length>20?"...":"")+xt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var xt=this.match;return xt.length<20&&(xt+=this._input.substr(0,20-xt.length)),(xt.substr(0,20)+(xt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var xt=this.pastInput(),nt=new Array(xt.length+1).join("-");return xt+this.upcomingInput()+`
`+nt+"^"},test_match:function(xt,nt){var Ot,Nt,qt;if(this.options.backtrack_lexer&&(qt={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&&(qt.yylloc.range=this.yylloc.range.slice(0))),Nt=xt[0].match(/(?:\r\n?|\n).*/g),Nt&&(this.yylineno+=Nt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Nt?Nt[Nt.length-1].length-Nt[Nt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+xt[0].length},this.yytext+=xt[0],this.match+=xt[0],this.matches=xt,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(xt[0].length),this.matched+=xt[0],Ot=this.performAction.call(this,this.yy,this,nt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ot)return Ot;if(this._backtrack){for(var Ct in qt)this[Ct]=qt[Ct];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var xt,nt,Ot,Nt;this._more||(this.yytext="",this.match="");for(var qt=this._currentRules(),Ct=0;Ct<qt.length;Ct++)if(Ot=this._input.match(this.rules[qt[Ct]]),Ot&&(!nt||Ot[0].length>nt[0].length)){if(nt=Ot,Nt=Ct,this.options.backtrack_lexer){if(xt=this.test_match(Ot,qt[Ct]),xt!==!1)return xt;if(this._backtrack){nt=!1;continue}else return!1}else if(!this.options.flex)break}return nt?(xt=this.test_match(nt,qt[Nt]),xt!==!1?xt:!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 nt=this.next();return nt||this.lex()},begin:function(nt){this.conditionStack.push(nt)},popState:function(){var nt=this.conditionStack.length-1;return nt>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(nt){return nt=this.conditionStack.length-1-Math.abs(nt||0),nt>=0?this.conditionStack[nt]:"INITIAL"},pushState:function(nt){this.begin(nt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(nt,Ot,Nt,qt){switch(Nt){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:break;case 15:this.begin("href");break;case 16:this.popState();break;case 17:return 40;case 18:this.begin("callbackname");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callbackargs");break;case 21:return 38;case 22:this.popState();break;case 23:return 39;case 24:this.begin("click");break;case 25:this.popState();break;case 26:return 37;case 27:return 4;case 28:return 19;case 29:return 20;case 30:return 21;case 31:return 22;case 32:return 23;case 33:return 25;case 34:return 24;case 35:return 26;case 36:return 12;case 37:return 13;case 38:return 14;case 39:return 15;case 40:return 16;case 41:return 17;case 42:return 18;case 43:return"date";case 44:return 27;case 45:return"accDescription";case 46:return 33;case 47:return 35;case 48:return 36;case 49:return":";case 50:return 6;case 51: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,/^(?:%[^\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:[22,23],inclusive:!1},callbackname:{rules:[19,20,21],inclusive:!1},href:{rules:[16,17],inclusive:!1},click:{rules:[25,26],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,18,24,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],inclusive:!0}}};return U}();wt.lexer=X;function pt(){this.yy={}}return pt.prototype=wt,wt.Parser=pt,new pt}();R0t.parser=R0t;const Dze=R0t;var GBt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){var f="day";return function(p,v,m){var b=function(L){return L.add(4-L.isoWeekday(),f)},E=v.prototype;E.isoWeekYear=function(){return b(this).year()},E.isoWeek=function(L){if(!this.$utils().u(L))return this.add(7*(L-this.isoWeek()),f);var N,B,j,R,z=b(this),K=(N=this.isoWeekYear(),B=this.
.mermaid-main-font {
font-family: "trebuchet ms", verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
}
.exclude-range {
fill: ${i.excludeBkgColor};
}
.section {
stroke: none;
opacity: 0.2;
}
.section0 {
fill: ${i.sectionBkgColor};
}
.section2 {
fill: ${i.sectionBkgColor2};
}
.section1,
.section3 {
fill: ${i.altSectionBkgColor};
opacity: 0.2;
}
.sectionTitle0 {
fill: ${i.titleColor};
}
.sectionTitle1 {
fill: ${i.titleColor};
}
.sectionTitle2 {
fill: ${i.titleColor};
}
.sectionTitle3 {
fill: ${i.titleColor};
}
.sectionTitle {
text-anchor: start;
// font-size: ${i.ganttFontSize};
// text-height: 14px;
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
}
/* Grid and axis */
.grid .tick {
stroke: ${i.gridColor};
opacity: 0.8;
shape-rendering: crispEdges;
text {
font-family: ${i.fontFamily};
fill: ${i.textColor};
}
}
.grid path {
stroke-width: 0;
}
/* Today line */
.today {
fill: none;
stroke: ${i.todayLineColor};
stroke-width: 2px;
}
/* Task styling */
/* Default task */
.task {
stroke-width: 2;
}
.taskText {
text-anchor: middle;
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
}
// .taskText:not([font-size]) {
// font-size: ${i.ganttFontSize};
// }
.taskTextOutsideRight {
fill: ${i.taskTextDarkColor};
text-anchor: start;
// font-size: ${i.ganttFontSize};
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
}
.taskTextOutsideLeft {
fill: ${i.taskTextDarkColor};
text-anchor: end;
// font-size: ${i.ganttFontSize};
}
/* Special case clickable */
.task.clickable {
cursor: pointer;
}
.taskText.clickable {
cursor: pointer;
fill: ${i.taskTextClickableColor} !important;
font-weight: bold;
}
.taskTextOutsideLeft.clickable {
cursor: pointer;
fill: ${i.taskTextClickableColor} !important;
font-weight: bold;
}
.taskTextOutsideRight.clickable {
cursor: pointer;
fill: ${i.taskTextClickableColor} !important;
font-weight: bold;
}
/* Specific task settings for the sections*/
.taskText0,
.taskText1,
.taskText2,
.taskText3 {
fill: ${i.taskTextColor};
}
.task0,
.task1,
.task2,
.task3 {
fill: ${i.taskBkgColor};
stroke: ${i.taskBorderColor};
}
.taskTextOutside0,
.taskTextOutside2
{
fill: ${i.taskTextOutsideColor};
}
.taskTextOutside1,
.taskTextOutside3 {
fill: ${i.taskTextOutsideColor};
}
/* Active task */
.active0,
.active1,
.active2,
.active3 {
fill: ${i.activeTaskBkgColor};
stroke: ${i.activeTaskBorderColor};
}
.activeText0,
.activeText1,
.activeText2,
.activeText3 {
fill: ${i.taskTextDarkColor} !important;
}
/* Completed task */
.done0,
.done1,
.done2,
.done3 {
stroke: ${i.doneTaskBorderColor};
fill: ${i.doneTaskBkgColor};
stroke-width: 2;
}
.doneText0,
.doneText1,
.doneText2,
.doneText3 {
fill: ${i.taskTextDarkColor} !important;
}
/* Tasks on the critical line */
.crit0,
.crit1,
.crit2,
.crit3 {
stroke: ${i.critBorderColor};
fill: ${i.critBkgColor};
stroke-width: 2;
}
.activeCrit0,
.activeCrit1,
.activeCrit2,
.activeCrit3 {
stroke: ${i.critBorderColor};
fill: ${i.activeTaskBkgColor};
stroke-width: 2;
}
.doneCrit0,
.doneCrit1,
.doneCrit2,
.doneCrit3 {
stroke: ${i.critBorderColor};
fill: ${i.doneTaskBkgColor};
stroke-width: 2;
cursor: pointer;
shape-rendering: crispEdges;
}
.milestone {
transform: rotate(45deg) scale(0.8,0.8);
}
.milestoneText {
font-style: italic;
}
.doneCritText0,
.doneCritText1,
.doneCritText2,
.doneCritText3 {
fill: ${i.taskTextDarkColor} !important;
}
.activeCritText0,
.activeCritText1,
.activeCritText2,
.activeCritText3 {
fill: ${i.taskTextDarkColor} !important;
}
.titleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor} ;
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
}
`}},Symbol.toStringTag,{value:"Module"}));var Q0t=function(){var i=function(m,b,E,_){for(E=E||{},_=m.length;_--;E[m[_]]=b);return E},a=[6,9,10],f={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(b,E,_,L,N,B,j){switch(B.length-1,N){case 1:return L;case 4:break;case 6:L.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},i(a,[2,3]),i(a,[2,4]),i(a,[2,5]),i(a,[2,6])],defaultActions:{4:[2,1]},parseError:function(b,E){if(E.recoverable)this.trace(b);else{var _=new Error(b);throw _.hash=E,_}},parse:function(b){var E=this,_=[0],L=[],N=[null],B=[],j=this.table,R="",z=0,K=0,it=2,st=1,ut=B.slice.call(arguments,1),bt=Object.create(this.lexer),mt={yy:{}};for(var yt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,yt)&&(mt.yy[yt]=this.yy[yt]);bt.setInput(b,mt.yy),mt.yy.lexer=bt,mt.yy.parser=this,typeof bt.yylloc>"u"&&(bt.yylloc={});var dt=bt.yylloc;B.push(dt);var ht=bt.options&&bt.options.ranges;typeof mt.yy.parseError=="function"?this.parseError=mt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function wt(){var Tt;return Tt=L.pop()||bt.lex()||st,typeof Tt!="number"&&(Tt instanceof Array&&(L=Tt,Tt=L.pop()),Tt=E.symbols_[Tt]||Tt),Tt}for(var X,pt,U,xt,nt={},Ot,Nt,qt,Ct;;){if(pt=_[_.length-1],this.defaultActions[pt]?U=this.defaultActions[pt]:((X===null||typeof X>"u")&&(X=wt()),U=j[pt]&&j[pt][X]),typeof U>"u"||!U.length||!U[0]){var Z="";Ct=[];for(Ot in j[pt])this.terminals_[Ot]&&Ot>it&&Ct.push("'"+this.terminals_[Ot]+"'");bt.showPosition?Z="Parse error on line "+(z+1)+`:
`+bt.showPosition()+`
Expecting `+Ct.join(", ")+", got '"+(this.terminals_[X]||X)+"'":Z="Parse error on line "+(z+1)+": Unexpected "+(X==st?"end of input":"'"+(this.terminals_[X]||X)+"'"),this.parseError(Z,{text:bt.match,token:this.terminals_[X]||X,line:bt.yylineno,loc:dt,expected:Ct})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+X);switch(U[0]){case 1:_.push(X),N.push(bt.yytext),B.push(bt.yylloc),_.push(U[1]),X=null,K=bt.yyleng,R=bt.yytext,z=bt.yylineno,dt=bt.yylloc;break;case 2:if(Nt=this.productions_[U[1]][1],nt.$=N[N.length-Nt],nt._$={first_line:B[B.length-(Nt||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(Nt||1)].first_column,last_column:B[B.length-1].last_column},ht&&(nt._$.range=[B[B.length-(Nt||1)].range[0],B[B.length-1].range[1]]),xt=this.performAction.apply(nt,[R,K,z,mt.yy,U[1],N,B].concat(ut)),typeof xt<"u")return xt;Nt&&(_=_.slice(0,-1*Nt*2),N=N.slice(0,-1*Nt),B=B.slice(0,-1*Nt)),_.push(this.productions_[U[1]][0]),N.push(nt.$),B.push(nt._$),qt=j[_[_.length-2]][_[_.length-1]],_.push(qt);break;case 3:return!0}}return!0}},p=function(){var m={EOF:1,parseError:function(E,_){if(this.yy.parser)this.yy.parser.parseError(E,_);else throw new Error(E)},setInput:function(b,E){return this.yy=E||this.yy||{},this._input=b,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 b=this._input[0];this.yytext+=b,this.yyleng++,this.offset++,this.match+=b,this.matched+=b;var E=b.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),b},unput:function(b){var E=b.length,_=b.split(/(?:\r\n?|\n)/g);this._input=b+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-E),this.offset-=E;var L=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),_.length-1&&(this.yylineno-=_.length-1);var N=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:_?(_.length===L.length?this.yylloc.first_column:0)+L[L.length-_.length].length-_[0].length:this.yylloc.first_column-E},this.options.ranges&&(this.yylloc.range=[N[0],N[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(b){this.unput(this.match.slice(b))},pastInput:function(){var b=this.matched.substr(0,this.matched.length-this.match.length);return(b.length>20?"...":"")+b.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var b=this.match;return b.length<20&&(b+=this._input.substr(0,20-b.length)),(b.substr(0,20)+(b.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var b=this.pastInput(),E=new Array(b.length+1).join("-");return b+this.upcomingInput()+`
`+E+"^"},test_match:function(b,E){var _,L,N;if(this.options.backtrack_lexer&&(N={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&&(N.yylloc.range=this.yylloc.range.slice(0))),L=b[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,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(b[0].length),this.matched+=b[0],_=this.performAction.call(this,this.yy,this,E,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),_)return _;if(this._backtrack){for(var B in N)this[B]=N[B];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var b,E,_,L;this._more||(this.yytext="",this.match="");for(var N=this._currentRules(),B=0;B<N.length;B++)if(_=this._input.match(this.rules[N[B]]),_&&(!E||_[0].length>E[0].length)){if(E=_,L=B,this.options.backtrack_lexer){if(b=this.test_match(_,N[B]),b!==!1)return b;if(this._backtrack){E=!1;continue}else return!1}else if(!this.options.flex)break}return E?(b=this.test_match(E,N[L]),b!==!1?b:!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 E=this.next();return E||this.lex()},begin:function(E){this.conditionStack.push(E)},popState:function(){var E=this.conditionStack.length-1;return E>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(E){return E=this.conditionStack.length-1-Math.abs(E||0),E>=0?this.conditionStack[E]:"INITIAL"},pushState:function(E){this.begin(E)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(E,_,L,N){switch(L){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return m}();f.lexer=p;function v(){this.yy={}}return v.prototype=f,f.Parser=v,new v}();Q0t.parser=Q0t;const xqe=Q0t,iRt={info:!1};let Z0t=iRt.info;const kqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:xqe,db:{clear:()=>{Z0t=iRt.info},setInfo:i=>{Z0t=i},getInfo:()=>Z0t},renderer:{draw:(i,a,f)=>{Ut.debug(`rendering info diagram
`+i);const p=fdt(a);og(p,100,400,!0),p.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${f}`)}}}},Symbol.toStringTag,{value:"Module"}));var J0t=function(){var i=function(bt,mt,yt,dt){for(yt=yt||{},dt=bt.length;dt--;yt[bt[dt]]=mt);return yt},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[1,10,12,14,16,18,19,20,21,22],b=[2,4],E=[1,5,10,12,14,16,18,19,20,21,22],_=[20,21,22],L=[2,7],N=[1,12],B=[1,13],j=[1,14],R=[1,15],z=[1,16],K=[1,17],it={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(mt,yt,dt,ht,wt,X,pt){var U=X.length-1;switch(wt){case 3:ht.setShowData(!0);break;case 6:this.$=X[U-1];break;case 8:ht.addSection(X[U-1],ht.cleanupValue(X[U]));break;case 9:this.$=X[U].trim(),ht.setDiagramTitle(this.$);break;case 10:this.$=X[U].trim(),ht.setAccTitle(this.$);break;case 11:case 12:this.$=X[U].trim(),ht.setAccDescription(this.$);break;case 13:ht.addSection(X[U].substr(8)),this.$=X[U].substr(8);break}},table:[{3:1,4:2,5:a,20:f,21:p,22:v},{1:[3]},{3:7,4:2,5:a,20:f,21:p,22:v},i(m,b,{6:8,7:[1,9]}),i(E,[2,14]),i(E,[2,15]),i(E,[2,16]),{1:[2,1]},i(_,L,{8:10,9:11,1:[2,2],10:N,12:B,14:j,16:R,18:z,19:K}),i(m,b,{6:18}),i(m,[2,5]),{4:19,20:f,21:p,22:v},{11:[1,20]},{13:[1,21]},{15:[1,22]},{17:[1,23]},i(_,[2,12]),i(_,[2,13]),i(_,L,{8:10,9:11,1:[2,3],10:N,12:B,14:j,16:R,18:z,19:K}),i(m,[2,6]),i(_,[2,8]),i(_,[2,9]),i(_,[2,10]),i(_,[2,11])],defaultActions:{7:[2,1]},parseError:function(mt,yt){if(yt.recoverable)this.trace(mt);else{var dt=new Error(mt);throw dt.hash=yt,dt}},parse:function(mt){var yt=this,dt=[0],ht=[],wt=[null],X=[],pt=this.table,U="",xt=0,nt=0,Ot=2,Nt=1,qt=X.slice.call(arguments,1),Ct=Object.create(this.lexer),Z={yy:{}};for(var Tt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Tt)&&(Z.yy[Tt]=this.yy[Tt]);Ct.setInput(mt,Z.yy),Z.yy.lexer=Ct,Z.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var Ht=Ct.yylloc;X.push(Ht);var It=Ct.options&&Ct.options.ranges;typeof Z.yy.parseError=="function"?this.parseError=Z.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ft(){var ie;return ie=ht.pop()||Ct.lex()||Nt,typeof ie!="number"&&(ie instanceof Array&&(ht=ie,ie=ht.pop()),ie=yt.symbols_[ie]||ie),ie}for(var ke,pn,Me,ve,Ge={},Ke,we,_e,$t;;){if(pn=dt[dt.length-1],this.defaultActions[pn]?Me=this.defaultActions[pn]:((ke===null||typeof ke>"u")&&(ke=Ft()),Me=pt[pn]&&pt[pn][ke]),typeof Me>"u"||!Me.length||!Me[0]){var re="";$t=[];for(Ke in pt[pn])this.terminals_[Ke]&&Ke>Ot&&$t.push("'"+this.terminals_[Ke]+"'");Ct.showPosition?re="Parse error on line "+(xt+1)+`:
`+Ct.showPosition()+`
Expecting `+$t.join(", ")+", got '"+(this.terminals_[ke]||ke)+"'":re="Parse error on line "+(xt+1)+": Unexpected "+(ke==Nt?"end of input":"'"+(this.terminals_[ke]||ke)+"'"),this.parseError(re,{text:Ct.match,token:this.terminals_[ke]||ke,line:Ct.yylineno,loc:Ht,expected:$t})}if(Me[0]instanceof Array&&Me.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pn+", token: "+ke);switch(Me[0]){case 1:dt.push(ke),wt.push(Ct.yytext),X.push(Ct.yylloc),dt.push(Me[1]),ke=null,nt=Ct.yyleng,U=Ct.yytext,xt=Ct.yylineno,Ht=Ct.yylloc;break;case 2:if(we=this.productions_[Me[1]][1],Ge.$=wt[wt.length-we],Ge._$={first_line:X[X.length-(we||1)].first_line,last_line:X[X.length-1].last_line,first_column:X[X.length-(we||1)].first_column,last_column:X[X.length-1].last_column},It&&(Ge._$.range=[X[X.length-(we||1)].range[0],X[X.length-1].range[1]]),ve=this.performAction.apply(Ge,[U,nt,xt,Z.yy,Me[1],wt,X].concat(qt)),typeof ve<"u")return ve;we&&(dt=dt.slice(0,-1*we*2),wt=wt.slice(0,-1*we),X=X.slice(0,-1*we)),dt.push(this.productions_[Me[1]][0]),wt.push(Ge.$),X.push(Ge._$),_e=pt[dt[dt.length-2]][dt[dt.length-1]],dt.push(_e);break;case 3:return!0}}return!0}},st=function(){var bt={EOF:1,parseError:function(yt,dt){if(this.yy.parser)this.yy.parser.parseError(yt,dt);else throw new Error(yt)},setInput:function(mt,yt){return this.yy=yt||this.yy||{},this._input=mt,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 mt=this._input[0];this.yytext+=mt,this.yyleng++,this.offset++,this.match+=mt,this.matched+=mt;var yt=mt.match(/(?:\r\n?|\n).*/g);return yt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),mt},unput:function(mt){var yt=mt.length,dt=mt.split(/(?:\r\n?|\n)/g);this._input=mt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-yt),this.offset-=yt;var ht=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),dt.length-1&&(this.yylineno-=dt.length-1);var wt=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:dt?(dt.length===ht.length?this.yylloc.first_column:0)+ht[ht.length-dt.length].length-dt[0].length:this.yylloc.first_column-yt},this.options.ranges&&(this.yylloc.range=[wt[0],wt[0]+this.yyleng-yt]),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(mt){this.unput(this.match.slice(mt))},pastInput:function(){var mt=this.matched.substr(0,this.matched.length-this.match.length);return(mt.length>20?"...":"")+mt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var mt=this.match;return mt.length<20&&(mt+=this._input.substr(0,20-mt.length)),(mt.substr(0,20)+(mt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var mt=this.pastInput(),yt=new Array(mt.length+1).join("-");return mt+this.upcomingInput()+`
`+yt+"^"},test_match:function(mt,yt){var dt,ht,wt;if(this.options.backtrack_lexer&&(wt={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&&(wt.yylloc.range=this.yylloc.range.slice(0))),ht=mt[0].match(/(?:\r\n?|\n).*/g),ht&&(this.yylineno+=ht.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ht?ht[ht.length-1].length-ht[ht.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+mt[0].length},this.yytext+=mt[0],this.match+=mt[0],this.matches=mt,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(mt[0].length),this.matched+=mt[0],dt=this.performAction.call(this,this.yy,this,yt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),dt)return dt;if(this._backtrack){for(var X in wt)this[X]=wt[X];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var mt,yt,dt,ht;this._more||(this.yytext="",this.match="");for(var wt=this._currentRules(),X=0;X<wt.length;X++)if(dt=this._input.match(this.rules[wt[X]]),dt&&(!yt||dt[0].length>yt[0].length)){if(yt=dt,ht=X,this.options.backtrack_lexer){if(mt=this.test_match(dt,wt[X]),mt!==!1)return mt;if(this._backtrack){yt=!1;continue}else return!1}else if(!this.options.flex)break}return yt?(mt=this.test_match(yt,wt[ht]),mt!==!1?mt:!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 yt=this.next();return yt||this.lex()},begin:function(yt){this.conditionStack.push(yt)},popState:function(){var yt=this.conditionStack.length-1;return yt>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(yt){return yt=this.conditionStack.length-1-Math.abs(yt||0),yt>=0?this.conditionStack[yt]:"INITIAL"},pushState:function(yt){this.begin(yt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(yt,dt,ht,wt){switch(ht){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 bt}();it.lexer=st;function ut(){this.yy={}}return ut.prototype=it,it.Parser=ut,new ut}();J0t.parser=J0t;const Eqe=J0t,sRt=Lf.pie,CK={sections:{},showData:!1,config:sRt};let _K=CK.sections,tgt=CK.showData;const Tqe=structuredClone(sRt),Cqe={getConfig:()=>structuredClone(Tqe),clear:()=>{_K=structuredClone(CK.sections),tgt=CK.showData,ap()},setDiagramTitle:Z2,getDiagramTitle:Db,setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addSection:(i,a)=>{i=Dd(i,Le()),_K[i]===void 0&&(_K[i]=a,Ut.debug(`added new section: ${i}, with value: ${a}`))},getSections:()=>_K,cleanupValue:i=>(i.substring(0,1)===":"&&(i=i.substring(1).trim()),Number(i.trim())),setShowData:i=>{tgt=i},getShowData:()=>tgt},_qe=i=>`
.pieCircle{
stroke: ${i.pieStrokeColor};
stroke-width : ${i.pieStrokeWidth};
opacity : ${i.pieOpacity};
}
.pieOuterCircle{
stroke: ${i.pieOuterStrokeColor};
stroke-width: ${i.pieOuterStrokeWidth};
fill: none;
}
.pieTitleText {
text-anchor: middle;
font-size: ${i.pieTitleTextSize};
fill: ${i.pieTitleTextColor};
font-family: ${i.fontFamily};
}
.slice {
font-family: ${i.fontFamily};
fill: ${i.pieSectionTextColor};
font-size:${i.pieSectionTextSize};
// fill: white;
}
.legend text {
fill: ${i.pieLegendTextColor};
font-family: ${i.fontFamily};
font-size: ${i.pieLegendTextSize};
}
`,Sqe=i=>{const a=Object.entries(i).map(p=>({label:p[0],value:p[1]})).sort((p,v)=>v.value-p.value);return $7e().value(p=>p.value)(a)},Aqe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Eqe,db:Cqe,renderer:{draw:(i,a,f,p)=>{var pt,U;Ut.debug(`rendering pie chart
`+i);const v=p.db,m=Le(),b=idt(v.getConfig(),m.pie),E=450,_=((U=(pt=document.getElementById(a))==null?void 0:pt.parentElement)==null?void 0:U.offsetWidth)??b.useWidth,L=fdt(a);L.attr("viewBox",`0 0 ${_} ${E}`),og(L,E,_,b.useMaxWidth);const N=40,B=18,j=4,R=L.append("g");R.attr("transform","translate("+_/2+","+E/2+")");const{themeVariables:z}=m;let[K]=$A(z.pieOuterStrokeWidth);K??(K=2);const it=b.textPosition,st=Math.min(_,E)/2-N,ut=LA().innerRadius(0).outerRadius(st),bt=LA().innerRadius(st*it).outerRadius(st*it);R.append("circle").attr("cx",0).attr("cy",0).attr("r",st+K/2).attr("class","pieOuterCircle");const mt=v.getSections(),yt=Sqe(mt),dt=[z.pie1,z.pie2,z.pie3,z.pie4,z.pie5,z.pie6,z.pie7,z.pie8,z.pie9,z.pie10,z.pie11,z.pie12],ht=x1t(dt);R.selectAll("mySlices").data(yt).enter().append("path").attr("d",ut).attr("fill",xt=>ht(xt.data.label)).attr("class","pieCircle");let wt=0;Object.keys(mt).forEach(xt=>{wt+=mt[xt]}),R.selectAll("mySlices").data(yt).enter().append("text").text(xt=>(xt.data.value/wt*100).toFixed(0)+"%").attr("transform",xt=>"translate("+bt.centroid(xt)+")").style("text-anchor","middle").attr("class","slice"),R.append("text").text(v.getDiagramTitle()).attr("x",0).attr("y",-(E-50)/2).attr("class","pieTitleText");const X=R.selectAll(".legend").data(ht.domain()).enter().append("g").attr("class","legend").attr("transform",(xt,nt)=>{const Ot=B+j,Nt=Ot*ht.domain().length/2,qt=12*B,Ct=nt*Ot-Nt;return"translate("+qt+","+Ct+")"});X.append("rect").attr("width",B).attr("height",B).style("fill",ht).style("stroke",ht),X.data(yt).append("text").attr("x",B+j).attr("y",B-j).text(xt=>{const{label:nt,value:Ot}=xt.data;return v.getShowData()?`${nt} [${Ot}]`:nt})}},styles:_qe}},Symbol.toStringTag,{value:"Module"}));var egt=function(){var i=function(Me,ve,Ge,Ke){for(Ge=Ge||{},Ke=Me.length;Ke--;Ge[Me[Ke]]=ve);return Ge},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[1,7],b=[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],E=[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],_=[32,33,34],L=[2,7],N=[1,13],B=[1,17],j=[1,18],R=[1,19],z=[1,20],K=[1,21],it=[1,22],st=[1,23],ut=[1,24],bt=[1,25],mt=[1,26],yt=[1,27],dt=[1,30],ht=[1,31],wt=[1,32],X=[1,33],pt=[1,34],U=[1,35],xt=[1,36],nt=[1,37],Ot=[1,38],Nt=[1,39],qt=[1,40],Ct=[1,41],Z=[1,42],Tt=[1,57],Ht=[1,58],It=[5,22,26,32,33,34,40,41,42,43,44,45,46,47,48,49,50,51],Ft={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(ve,Ge,Ke,we,_e,$t,re){var ie=$t.length-1;switch(_e){case 12:this.$=$t[ie].trim(),we.setDiagramTitle(this.$);break;case 13:this.$=$t[ie
`+li.showPosition()+`
Expecting `+qa.join(", ")+", got '"+(this.terminals_[nr]||nr)+"'":La="Parse error on line "+(Oe+1)+": Unexpected "+(nr==me?"end of input":"'"+(this.terminals_[nr]||nr)+"'"),this.parseError(La,{text:li.match,token:this.terminals_[nr]||nr,line:li.yylineno,loc:Oo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+nr);switch(Ee[0]){case 1:Ke.push(nr),_e.push(li.yytext),$t.push(li.yylloc),Ke.push(Ee[1]),nr=null,oe=li.yyleng,ie=li.yytext,Oe=li.yylineno,Oo=li.yylloc;break;case 2:if(gn=this.productions_[Ee[1]][1],He.$=_e[_e.length-gn],He._$={first_line:$t[$t.length-(gn||1)].first_line,last_line:$t[$t.length-1].last_line,first_column:$t[$t.length-(gn||1)].first_column,last_column:$t[$t.length-1].last_column},ds&&(He._$.range=[$t[$t.length-(gn||1)].range[0],$t[$t.length-1].range[1]]),Yn=this.performAction.apply(He,[ie,oe,Oe,ya.yy,Ee[1],_e,$t].concat(cn)),typeof Yn<"u")return Yn;gn&&(Ke=Ke.slice(0,-1*gn*2),_e=_e.slice(0,-1*gn),$t=$t.slice(0,-1*gn)),Ke.push(this.productions_[Ee[1]][0]),_e.push(He.$),$t.push(He._$),ks=re[Ke[Ke.length-2]][Ke[Ke.length-1]],Ke.push(ks);break;case 3:return!0}}return!0}},ke=function(){var Me={EOF:1,parseError:function(Ge,Ke){if(this.yy.parser)this.yy.parser.parseError(Ge,Ke);else throw new Error(Ge)},setInput:function(ve,Ge){return this.yy=Ge||this.yy||{},this._input=ve,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 ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Ge=ve.match(/(?:\r\n?|\n).*/g);return Ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},unput:function(ve){var Ge=ve.length,Ke=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ge),this.offset-=Ge;var we=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),Ke.length-1&&(this.yylineno-=Ke.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:Ke?(Ke.length===we.length?this.yylloc.first_column:0)+we[we.length-Ke.length].length-Ke[0].length:this.yylloc.first_column-Ge},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-Ge]),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(ve){this.unput(this.match.slice(ve))},pastInput:function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ve=this.pastInput(),Ge=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+`
`+Ge+"^"},test_match:function(ve,Ge){var Ke,we,_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))),we=ve[0].match(/(?:\r\n?|\n).*/g),we&&(this.yylineno+=we.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:we?we[we.length-1].length-we[we.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,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(ve[0].length),this.matched+=ve[0],Ke=this.performAction.call(this,this.yy,this,Ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ke)return Ke;if(this._backtrack){for(var $t in _e)this[$t]=_e[$t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Ge,Ke,we;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),$t=0;$t<_e.length;$t++)if(Ke=this._input.match(this.rules[_e[$t]]),Ke&&(!Ge||Ke[0].length>Ge[0].length)){if(Ge=Ke,we=$t,this.options.backtrack_lexer){if(ve=this.test_match(Ke,_e[$t]),ve!==!1)return ve;if(this._backtrack){Ge=!1;continue}else return!1}else if(!this.options.flex)break}return Ge?(ve=this.test_match(Ge,_e[we]),ve!==!1?ve:!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 Ge=this.next();return Ge||this.lex()},begin:function(Ge){this.conditionStack.push(Ge)},popState:function(){var Ge=this.conditionStack.length-1;return Ge>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(Ge){return Ge=this.conditionStack.length-1-Math.abs(Ge||0),Ge>=0?this.conditionStack[Ge]:"INITIAL"},pushState:function(Ge){this.begin(Ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ge,Ke,we,_e){switch(we){case 0:break;case 1:break;case 2:return 32;case 3:break;case 4:return this.begin("title"),13;case 5:return this.popState(),"title_value";case 6:return this.begin("acc_title"),15;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),17;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 25;case 14:return 27;case 15:return 26;case 16:return 28;case 17:return 29;case 18:return 30;case 19:return 31;case 20:this.begin("md_string");break;case 21:return"MD_STR";case 22:this.popState();break;case 23:this.begin("string");break;case 24:this.popState();break;case 25:return"STR";case 26:return this.begin("point_start"),22;case 27:return this.begin("point_x"),23;case 28:this.popState();break;case 29:this.popState(),this.begin("point_y");break;case 30:return this.popState(),24;case 31:return 6;case 32:return 43;case 33:return"COLON";case 34:return 45;case 35:return 44;case 36:return 46;case 37:return 46;case 38:return 47;case 39:return 49;case 40:return 50;case 41:return 48;case 42:return 41;case 43:return 51;case 44:return 42;case 45:return 5;case 46:return 33;case 47:return 40;case 48:return 34}},rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/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,/^(?: *x-axis *)/i,/^(?: *y-axis *)/i,/^(?: *--+> *)/i,/^(?: *quadrant-1 *)/i,/^(?: *quadrant-2 *)/i,/^(?: *quadrant-3 *)/i,/^(?: *quadrant-4 *)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:\s*:\s*\[\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?:\s*\] *)/i,/^(?:\s*,\s*)/i,/^(?:(1)|(0(.\d+)?))/i,/^(?: *quadrantChart *)/i,/^(?:[A-Za-z]+)/i,/^(?::)/i,/^(?:\+)/i,/^(?:,)/i,/^(?:=)/i,/^(?:=)/i,/^(?:\*)/i,/^(?:#)/i,/^(?:[\_])/i,/^(?:\.)/i,/^(?:&)/i,/^(?:-)/i,/^(?:[0-9]+)/i,/^(?:\s)/i,/^(?:;)/i,/^(?:[!"#$%&'*+,-.`?\\_/])/i,/^(?:$)/i],conditions:{point_y:{rules:[30],inclusive:!1},point_x:{rules:[29],inclusive:!1},point_start:{rules:[27,28],inclusive:!1},acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},title:{rules:[5],inclusive:!1},md_string:{rules:[21,22],inclusive:!1},string:{rules:[24,25],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,6,8,10,13,14,15,16,17,18,19,20,23,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};return Me}();Ft.lexer=ke;function pn(){this.yy={}}return pn.prototype=Ft,Ft.Parser=pn,new pn}();egt.parser=egt;const Lqe=egt,fg=nDt();class Mqe{constructor(){this.config=this.getDefaultConfig(),this.themeConfig=this.getDefaultThemeConfig(),this.data=this.getDefaultData()}getDefaultData(){return{titleText:"",quadrant1Text:"",quadrant2Text:"",quadrant3Text:"",quadrant4Text:"",xAxisLeftText:"",xAxisRightText:"",yAxisBottomText:"",yAxisTopText:"",points:[]}}getDefaultConfig(){var a,f,p,v,m,b,E,_,L,N,B,j,R,z,K,it,st,ut;return{showXAxis:!0,showYAxis:!0,showTitle:!0,chartHeight:((a=Lf.quadrantChart)==null?void 0:a.chartWidth)||500,chartWidth:((f=Lf.quadrantChart)==null?void 0:f.chartHeight)||500,titlePadding:(
`+i);const _=E.securityLevel;let L;_==="sandbox"&&(L=yr("#i"+a));const B=yr(_==="sandbox"?L.nodes()[0].contentDocument.body:"body").select(`[id="${a}"]`),j=B.append("g").attr("class","main"),R=((wt=E.quadrantChart)==null?void 0:wt.chartWidth)||500,z=((X=E.quadrantChart)==null?void 0:X.chartHeight)||500;og(B,z,R,((pt=E.quadrantChart)==null?void 0:pt.useMaxWidth)||!0),B.attr("viewBox","0 0 "+R+" "+z),p.db.setHeight(z),p.db.setWidth(R);const K=p.db.getQuadrantData(),it=j.append("g").attr("class","quadrants"),st=j.append("g").attr("class","border"),ut=j.append("g").attr("class","data-points"),bt=j.append("g").attr("class","labels"),mt=j.append("g").attr("class","title");K.title&&mt.append("text").attr("x",0).attr("y",0).attr("fill",K.title.fill).attr("font-size",K.title.fontSize).attr("dominant-baseline",v(K.title.horizontalPos)).attr("text-anchor",m(K.title.verticalPos)).attr("transform",b(K.title)).text(K.title.text),K.borderLines&&st.selectAll("line").data(K.borderLines).enter().append("line").attr("x1",U=>U.x1).attr("y1",U=>U.y1).attr("x2",U=>U.x2).attr("y2",U=>U.y2).style("stroke",U=>U.strokeFill).style("stroke-width",U=>U.strokeWidth);const yt=it.selectAll("g.quadrant").data(K.quadrants).enter().append("g").attr("class","quadrant");yt.append("rect").attr("x",U=>U.x).attr("y",U=>U.y).attr("width",U=>U.width).attr("height",U=>U.height).attr("fill",U=>U.fill),yt.append("text").attr("x",0).attr("y",0).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>v(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text)).text(U=>U.text.text),bt.selectAll("g.label").data(K.axisLabels).enter().append("g").attr("class","label").append("text").attr("x",0).attr("y",0).text(U=>U.text).attr("fill",U=>U.fill).attr("font-size",U=>U.fontSize).attr("dominant-baseline",U=>v(U.horizontalPos)).attr("text-anchor",U=>m(U.verticalPos)).attr("transform",U=>b(U));const ht=ut.selectAll("g.data-point").data(K.points).enter().append("g").attr("class","data-point");ht.append("circle").attr("cx",U=>U.x).attr("cy",U=>U.y).attr("r",U=>U.radius).attr("fill",U=>U.fill),ht.append("text").attr("x",0).attr("y",0).text(U=>U.text.text).attr("fill",U=>U.text.fill).attr("font-size",U=>U.text.fontSize).attr("dominant-baseline",U=>v(U.text.horizontalPos)).attr("text-anchor",U=>m(U.text.verticalPos)).attr("transform",U=>b(U.text))}},styles:()=>""}},Symbol.toStringTag,{value:"Module"}));var ngt=function(){var i=function(Me,ve,Ge,Ke){for(Ge=Ge||{},Ke=Me.length;Ke--;Ge[Me[Ke]]=ve);return Ge},a=[1,3],f=[1,4],p=[1,5],v=[1,6],m=[5,6,8,9,11,13,31,32,33,34,35,36,44,62,63],b=[1,18],E=[2,7],_=[1,22],L=[1,23],N=[1,24],B=[1,25],j=[1,26],R=[1,27],z=[1,20],K=[1,28],it=[1,29],st=[62,63],ut=[5,8,9,11,13,31,32,33,34,35,36,44,51,53,62,63],bt=[1,47],mt=[1,48],yt=[1,49],dt=[1,50],ht=[1,51],wt=[1,52],X=[1,53],pt=[53,54],U=[1,64],xt=[1,60],nt=[1,61],Ot=[1,62],Nt=[1,63],qt=[1,65],Ct=[1,69],Z=[1,70],Tt=[1,67],Ht=[1,68],It=[5,8,9,11,13,31,32,33,34,35,36,44,62,63],Ft={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
`+li.showPosition()+`
Expecting `+qa.join(", ")+", got '"+(this.terminals_[nr]||nr)+"'":La="Parse error on line "+(Oe+1)+": Unexpected "+(nr==me?"end of input":"'"+(this.terminals_[nr]||nr)+"'"),this.parseError(La,{text:li.match,token:this.terminals_[nr]||nr,line:li.yylineno,loc:Oo,expected:qa})}if(Ee[0]instanceof Array&&Ee.length>1)throw new Error("Parse Error: multiple actions possible at state: "+di+", token: "+nr);switch(Ee[0]){case 1:Ke.push(nr),_e.push(li.yytext),$t.push(li.yylloc),Ke.push(Ee[1]),nr=null,oe=li.yyleng,ie=li.yytext,Oe=li.yylineno,Oo=li.yylloc;break;case 2:if(gn=this.productions_[Ee[1]][1],He.$=_e[_e.length-gn],He._$={first_line:$t[$t.length-(gn||1)].first_line,last_line:$t[$t.length-1].last_line,first_column:$t[$t.length-(gn||1)].first_column,last_column:$t[$t.length-1].last_column},ds&&(He._$.range=[$t[$t.length-(gn||1)].range[0],$t[$t.length-1].range[1]]),Yn=this.performAction.apply(He,[ie,oe,Oe,ya.yy,Ee[1],_e,$t].concat(cn)),typeof Yn<"u")return Yn;gn&&(Ke=Ke.slice(0,-1*gn*2),_e=_e.slice(0,-1*gn),$t=$t.slice(0,-1*gn)),Ke.push(this.productions_[Ee[1]][0]),_e.push(He.$),$t.push(He._$),ks=re[Ke[Ke.length-2]][Ke[Ke.length-1]],Ke.push(ks);break;case 3:return!0}}return!0}},ke=function(){var Me={EOF:1,parseError:function(Ge,Ke){if(this.yy.parser)this.yy.parser.parseError(Ge,Ke);else throw new Error(Ge)},setInput:function(ve,Ge){return this.yy=Ge||this.yy||{},this._input=ve,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 ve=this._input[0];this.yytext+=ve,this.yyleng++,this.offset++,this.match+=ve,this.matched+=ve;var Ge=ve.match(/(?:\r\n?|\n).*/g);return Ge?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ve},unput:function(ve){var Ge=ve.length,Ke=ve.split(/(?:\r\n?|\n)/g);this._input=ve+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Ge),this.offset-=Ge;var we=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),Ke.length-1&&(this.yylineno-=Ke.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:Ke?(Ke.length===we.length?this.yylloc.first_column:0)+we[we.length-Ke.length].length-Ke[0].length:this.yylloc.first_column-Ge},this.options.ranges&&(this.yylloc.range=[_e[0],_e[0]+this.yyleng-Ge]),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(ve){this.unput(this.match.slice(ve))},pastInput:function(){var ve=this.matched.substr(0,this.matched.length-this.match.length);return(ve.length>20?"...":"")+ve.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var ve=this.match;return ve.length<20&&(ve+=this._input.substr(0,20-ve.length)),(ve.substr(0,20)+(ve.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var ve=this.pastInput(),Ge=new Array(ve.length+1).join("-");return ve+this.upcomingInput()+`
`+Ge+"^"},test_match:function(ve,Ge){var Ke,we,_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))),we=ve[0].match(/(?:\r\n?|\n).*/g),we&&(this.yylineno+=we.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:we?we[we.length-1].length-we[we.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+ve[0].length},this.yytext+=ve[0],this.match+=ve[0],this.matches=ve,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(ve[0].length),this.matched+=ve[0],Ke=this.performAction.call(this,this.yy,this,Ge,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ke)return Ke;if(this._backtrack){for(var $t in _e)this[$t]=_e[$t];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var ve,Ge,Ke,we;this._more||(this.yytext="",this.match="");for(var _e=this._currentRules(),$t=0;$t<_e.length;$t++)if(Ke=this._input.match(this.rules[_e[$t]]),Ke&&(!Ge||Ke[0].length>Ge[0].length)){if(Ge=Ke,we=$t,this.options.backtrack_lexer){if(ve=this.test_match(Ke,_e[$t]),ve!==!1)return ve;if(this._backtrack){Ge=!1;continue}else return!1}else if(!this.options.flex)break}return Ge?(ve=this.test_match(Ge,_e[we]),ve!==!1?ve:!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 Ge=this.next();return Ge||this.lex()},begin:function(Ge){this.conditionStack.push(Ge)},popState:function(){var Ge=this.conditionStack.length-1;return Ge>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(Ge){return Ge=this.conditionStack.length-1-Math.abs(Ge||0),Ge>=0?this.conditionStack[Ge]:"INITIAL"},pushState:function(Ge){this.begin(Ge)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Ge,Ke,we,_e){switch(we){case 0:return"title";case 1:return this.begin("acc_title"),9;case 2:return this.popState(),"acc_title_value";case 3:return this.begin("acc_descr"),11;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:return 5;case 9:break;case 10:break;case 11:break;case 12:return 8;case 13:return 6;case 14:return 19;case 15:return 30;case 16:return 22;case 17:return 21;case 18:return 24;case 19:return 26;case 20:return 28;case 21:return 31;case 22:return 32;case 23:return 33;case 24:return 34;case 25:return 35;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:return 40;case 31:return 41;case 32:return 42;case 33:return 43;case 34:return 44;case 35:return 55;case 36:return 56;case 37:return 57;case 38:return 58;case 39:return 59;case 40:return 60;case 41:return 61;case 42:return 47;case 43:return 49;case 44:return 51;case 45:return 54;case 46:return 53;case 47:this.begin("string");break;case 48:this.popState();break;case 49:return"qString";case 50:return Ke.yytext=Ke.yytext.trim(),62}},rules:[/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[6,7],inclusive:!1},acc_descr:{rules:[4],inclusive:!1},acc_title:{rules:[2],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[48,49],inclusive:!1},INITIAL:{rules:[0,1,3,5,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,50],inclusive:!0}}};return Me}();Ft.lexer=ke;function pn(){this.yy={}}return pn.prototype=Ft,Ft.Parser=pn,new pn}();ngt.parser=ngt;const Vqe=ngt;let rgt=[],dp={},MP={},fk={},IP={};const Uqe={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},getConfig:()=>Le().req,addRequireme
marker {
fill: ${i.relationColor};
stroke: ${i.relationColor};
}
marker.cross {
stroke: ${i.lineColor};
}
svg {
font-family: ${i.fontFamily};
font-size: ${i.fontSize};
}
.reqBox {
fill: ${i.requirementBackground};
fill-opacity: 1.0;
stroke: ${i.requirementBorderColor};
stroke-width: ${i.requirementBorderSize};
}
.reqTitle, .reqLabel{
fill: ${i.requirementTextColor};
}
.reqLabelBox {
fill: ${i.relationLabelBackground};
fill-opacity: 1.0;
}
.req-title-line {
stroke: ${i.requirementBorderColor};
stroke-width: ${i.requirementBorderSize};
}
.relationshipLine {
stroke: ${i.relationColor};
stroke-width: 1;
}
.relationshipLabel {
fill: ${i.relationLabelColor};
}
`,igt={CONTAINS:"contains",ARROW:"arrow"},aRt={ReqMarkers:igt,insertLineEndings:(i,a)=>{let f=i.append("defs").append("marker").attr("id",igt.CONTAINS+"_line_ending").attr("refX",0).attr("refY",a.line_height/2).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("g");f.append("circle").attr("cx",a.line_height/2).attr("cy",a.line_height/2).attr("r",a.line_height/2).attr("fill","none"),f.append("line").attr("x1",0).attr("x2",a.line_height).attr("y1",a.line_height/2).attr("y2",a.line_height/2).attr("stroke-width",1),f.append("line").attr("y1",0).attr("y2",a.line_height).attr("x1",a.line_height/2).attr("x2",a.line_height/2).attr("stroke-width",1),i.append("defs").append("marker").attr("id",igt.ARROW+"_line_ending").attr("refX",a.line_height).attr("refY",.5*a.line_height).attr("markerWidth",a.line_height).attr("markerHeight",a.line_height).attr("orient","auto").append("path").attr("d",`M0,0
L${a.line_height},${a.line_height/2}
M${a.line_height},${a.line_height/2}
L0,${a.line_height}`).attr("stroke-width",1)}};let xh={},oRt=0;const cRt=(i,a)=>i.insert("rect","#"+a).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",xh.rect_min_width+"px").attr("height",xh.rect_min_height+"px"),uRt=(i,a,f)=>{let p=xh.rect_min_width/2,v=i.append("text").attr("class","req reqLabel reqTitle").attr("id",a).attr("x",p).attr("y",xh.rect_padding).attr("dominant-baseline","hanging"),m=0;f.forEach(L=>{m==0?v.append("tspan").attr("text-anchor","middle").attr("x",xh.rect_min_width/2).attr("dy",0).text(L):v.append("tspan").attr("text-anchor","middle").attr("x",xh.rect_min_width/2).attr("dy",xh.line_height*.75).text(L),m++});let b=1.5*xh.rect_padding,E=m*xh.line_height*.75,_=b+E;return i.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",xh.rect_min_width).attr("y1",_).attr("y2",_),{titleNode:v,y:_}},lRt=(i,a,f,p)=>{let v=i.append("text").attr("class","req reqLabel").attr("id",a).attr("x",xh.rect_padding).attr("y",p).attr("dominant-baseline","hanging"),m=0;const b=30;let E=[];return f.forEach(_=>{let L=_.length;for(;L>b&&m<3;){let N=_.substring(0,b);_=_.substring(b,_.length),L=_.length,E[E.length]=N,m++}if(m==3){let N=E[E.length-1];E[E.length-1]=N.substring(0,N.length-4)+"..."}else E[E.length]=_;m=0}),E.forEach(_=>{v.append("tspan").attr("x",xh.rect_padding).attr("dy",xh.line_height).text(_)}),v},Kqe=(i,a,f,p)=>{const v=a.node().getTotalLength(),m=a.node().getPointAtLength(v*.5),b="rel"+oRt;oRt++;const _=i.append("text").attr("class","req relationshipLabel").attr("id",b).attr("x",m.x).attr("y",m.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(p).node().getBBox();i.insert("rect","#"+b).attr("class","req reqLabelBox").attr("x",m.x-_.width/2).attr("y",m.y-_.height/2).attr("width",_.width).attr("height",_.height).attr("fill","white").attr("fill-opacity","85%")},Yqe=function(i,a,f,p,v){const m=f.edge(oL(a.src),oL(a.dst)),b=Z7().x(function(_){return _.x}).y(function(_){return _.y}),E=i.insert("path","#"+p).attr("class","er relationshipLine").attr("d",b(m.points)).attr("fill","none");a.type==v.db.Relationships.CONTAINS?E.attr("marker-start","url("+Yr.getUrl(xh.arrowMarkerAbsolute)+"#"+a.type+"_line_ending)"):(E.attr("stroke-dasharray","10,7"),E.attr("marker-end","url("+Yr.getUrl(xh.arrowMarkerAbsolute)+"#"+aRt.ReqMarkers.ARROW+"_line_ending)")),Kqe(i,E,xh,`<<${a.type}>>`)},Xqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];p=oL(p),Ut.info("Added new requirement: ",p);const m=f.append("g").attr("id",p),b="req-"+p,E=cRt(m,b);let _=uRt(m,p+"_title",[`<<${v.type}>>`,`${v.name}`]);lRt(m,p+"_body",[`Id: ${v.id}`,`Text: ${v.text}`,`Risk: ${v.risk}`,`Verification: ${v.verifyMethod}`],_.y);const L=E.node().getBBox();a.setNode(p,{width:L.width,height:L.height,shape:"rect",id:p})})},Qqe=(i,a,f)=>{Object.keys(i).forEach(p=>{let v=i[p];const m=oL(p),b=f.append("g").attr("id",m),E="element-"+m,_=cRt(b,E);let L=uRt(b,E+"_title",["<<Element>>",`${p}`]);lRt(b,E+"_body",[`Type: ${v.type||"Not Specified"}`,`Doc Ref: ${v.docRef||"None"}`],L.y);const N=_.node().getBBox();a.setNode(m,{width:N.width,height:N.height,shape:"rect",id:m})})},Zqe=(i,a)=>(i.forEach(function(f){let p=oL(f.src),v=oL(f.dst);a.setEdge(p,v,{relationship:f})}),i),Jqe=function(i,a){a.nodes().forEach(function(f){f!==void 0&&a.node(f)!==void 0&&(i.select("#"+f),i.select("#"+f).attr("transform","translate("+(a.node(f).x-a.node(f).width/2)+","+(a.node(f).y-a.node(f).height/2)+" )"))})},oL=i=>i.replace(/\s/g,"").replace(/\./g,"_"),tHe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:Vqe,db:Uqe,renderer:{draw:(i,a,f,p)=>{xh=Le().requirement;const v=xh.securityLevel;let m;v==="sandbox"&&(m=yr("#i"+a));const E=yr(v==="sandbox"?m.nodes()[0].contentDocument.body:"body").select(`[id='${a}']`);aRt.insertLineEndings(E,xh);const _=new a1({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:xh.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let L=p.db.getRequirements(),N=p.db.getElements(),B=p.db.getRelationships();Xqe(L,_,E),Q
`+ds.showPosition()+`
Expecting `+vs.join(", ")+", got '"+(this.terminals_[He]||He)+"'":nu="Parse error on line "+(cn+1)+": Unexpected "+(He==da?"end of input":"'"+(this.terminals_[He]||He)+"'"),this.parseError(nu,{text:ds.match,token:this.terminals_[He]||He,line:ds.yylineno,loc:di,expected:vs})}if(gn[0]instanceof Array&&gn.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ti+", token: "+He);switch(gn[0]){case 1:re.push(He),Oe.push(ds.yytext),oe.push(ds.yylloc),re.push(gn[1]),He=null,li=ds.yyleng,me=ds.yytext,cn=ds.yylineno,di=ds.yylloc;break;case 2:if(Gs=this.productions_[gn[1]][1],qa.$=Oe[Oe.length-Gs],qa._$={first_line:oe[oe.length-(Gs||1)].first_line,last_line:oe[oe.length-1].last_line,first_column:oe[oe.length-(Gs||1)].first_column,last_column:oe[oe.length-1].last_column},Ee&&(qa._$.range=[oe[oe.length-(Gs||1)].range[0],oe[oe.length-1].range[1]]),ks=this.performAction.apply(qa,[me,li,cn,Dr.yy,gn[1],Oe,oe].concat(Oo)),typeof ks<"u")return ks;Gs&&(re=re.slice(0,-1*Gs*2),Oe=Oe.slice(0,-1*Gs),oe=oe.slice(0,-1*Gs)),re.push(this.productions_[gn[1]][0]),Oe.push(qa.$),oe.push(qa._$),No=Ne[re[re.length-2]][re[re.length-1]],re.push(No);break;case 3:return!0}}return!0}},Ge=function(){var we={EOF:1,parseError:function($t,re){if(this.yy.parser)this.yy.parser.parseError($t,re);else throw new Error($t)},setInput:function(_e,$t){return this.yy=$t||this.yy||{},this._input=_e,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 _e=this._input[0];this.yytext+=_e,this.yyleng++,this.offset++,this.match+=_e,this.matched+=_e;var $t=_e.match(/(?:\r\n?|\n).*/g);return $t?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_e},unput:function(_e){var $t=_e.length,re=_e.split(/(?:\r\n?|\n)/g);this._input=_e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-$t),this.offset-=$t;var ie=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),re.length-1&&(this.yylineno-=re.length-1);var Oe=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:re?(re.length===ie.length?this.yylloc.first_column:0)+ie[ie.length-re.length].length-re[0].length:this.yylloc.first_column-$t},this.options.ranges&&(this.yylloc.range=[Oe[0],Oe[0]+this.yyleng-$t]),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(_e){this.unput(this.match.slice(_e))},pastInput:function(){var _e=this.matched.substr(0,this.matched.length-this.match.length);return(_e.length>20?"...":"")+_e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var _e=this.match;return _e.length<20&&(_e+=this._input.substr(0,20-_e.length)),(_e.substr(0,20)+(_e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var _e=this.pastInput(),$t=new Array(_e.length+1).join("-");return _e+this.upcomingInput()+`
`+$t+"^"},test_match:function(_e,$t){var re,ie,Oe;if(this.options.backtrack_lexer&&(Oe={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&&(Oe.yylloc.range=this.yylloc.range.slice(0))),ie=_e[0].match(/(?:\r\n?|\n).*/g),ie&&(this.yylineno+=ie.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:ie?ie[ie.length-1].length-ie[ie.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_e[0].length},this.yytext+=_e[0],this.match+=_e[0],this.matches=_e,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(_e[0].length),this.matched+=_e[0],re=this.performAction.call(this,this.yy,this,$t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),re)return re;if(this._backtrack){for(var oe in Oe)this[oe]=Oe[oe];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _e,$t,re,ie;this._more||(this.yytext="",this.match="");for(var Oe=this._currentRules(),oe=0;oe<Oe.length;oe++)if(re=this._input.match(this.rules[Oe[oe]]),re&&(!$t||re[0].length>$t[0].length)){if($t=re,ie=oe,this.options.backtrack_lexer){if(_e=this.test_match(re,Oe[oe]),_e!==!1)return _e;if(this._backtrack){$t=!1;continue}else return!1}else if(!this.options.flex)break}return $t?(_e=this.test_match($t,Oe[ie]),_e!==!1?_e:!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 $t=this.next();return $t||this.lex()},begin:function($t){this.conditionStack.push($t)},popState:function(){var $t=this.conditionStack.length-1;return $t>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($t){return $t=this.conditionStack.length-1-Math.abs($t||0),$t>=0?this.conditionStack[$t]:"INITIAL"},pushState:function($t){this.begin($t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function($t,re,ie,Oe){switch(ie){case 0:return 5;case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:return 19;case 7:return this.begin("LINE"),14;case 8:return this.begin("ID"),50;case 9:return this.begin("ID"),52;case 10:return 13;case 11:return this.begin("ID"),53;case 12:return re.yytext=re.yytext.trim(),this.begin("ALIAS"),70;case 13:return this.popState(),this.popState(),this.begin("LINE"),51;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),36;case 16:return this.begin("LINE"),37;case 17:return this.begin("LINE"),38;case 18:return this.begin("LINE"),39;case 19:return this.begin("LINE"),49;case 20:return this.begin("LINE"),41;case 21:return this.begin("LINE"),43;case 22:return this.begin("LINE"),48;case 23:return this.begin("LINE"),44;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),46;case 26:return this.popState(),15;case 27:return 16;case 28:return 65;case 29:return 66;case 30:return 59;case 31:return 60;case 32:return 61;case 33:return 62;case 34:return 57;case 35:return 54;case 36:return this.begin("ID"),21;case 37:return this.begin("ID"),23;case 38:return 29;case 39:return 30;case 40:return this.begin("acc_title"),31;case 41:return this.popState(),"acc_title_value";case 42:return this.begin("acc_descr"),33;case 43:return this.popState(),"acc_descr_value";case 44:this.begin("acc_descr_multiline");break;case 45:this.popState();break;case 46:return"acc_descr_multiline_value";case 47:return 6;case 48:return 18;case 49:return 20;case 50:return 64;case 51:return 5;case 52:return re.yytext=re.yytext.trim(),70;case 53:return 73;case 54:return 74;case 55:return 71;case 56:return 72;case 57:return 75;case 58:return 76;case 59:return 77;case 60:return 78;case 61:return 79;case 62:return 68;case 63:return 69;case 64:return 5;case 65:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:box\b)/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:create\b)/i,/^(?:destroy\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:par_over\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/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,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[45,46],inclusive:!1},acc_descr:{rules:[43],inclusive:!1},acc_title:{rules:[41],inclusive:!1},ID:{rules:[2,3,12],inclusive:!1},ALIAS:{rules:[2,3,13,14],inclusive:!1},LINE:{rules:[2
stroke: ${i.actorBorder};
fill: ${i.actorBkg};
}
text.actor > tspan {
fill: ${i.actorTextColor};
stroke: none;
}
.actor-line {
stroke: ${i.actorLineColor};
}
.messageLine0 {
stroke-width: 1.5;
stroke-dasharray: none;
stroke: ${i.signalColor};
}
.messageLine1 {
stroke-width: 1.5;
stroke-dasharray: 2, 2;
stroke: ${i.signalColor};
}
#arrowhead path {
fill: ${i.signalColor};
stroke: ${i.signalColor};
}
.sequenceNumber {
fill: ${i.sequenceNumberColor};
}
#sequencenumber {
fill: ${i.signalColor};
}
#crosshead path {
fill: ${i.signalColor};
stroke: ${i.signalColor};
}
.messageText {
fill: ${i.signalTextColor};
stroke: none;
}
.labelBox {
stroke: ${i.labelBoxBorderColor};
fill: ${i.labelBoxBkgColor};
}
.labelText, .labelText > tspan {
fill: ${i.labelTextColor};
stroke: none;
}
.loopText, .loopText > tspan {
fill: ${i.loopTextColor};
stroke: none;
}
.loopLine {
stroke-width: 2px;
stroke-dasharray: 2, 2;
stroke: ${i.labelBoxBorderColor};
fill: ${i.labelBoxBorderColor};
}
.note {
//stroke: #decc93;
stroke: ${i.noteBorderColor};
fill: ${i.noteBkgColor};
}
.noteText, .noteText > tspan {
fill: ${i.noteTextColor};
stroke: none;
}
.activation0 {
fill: ${i.activationBkgColor};
stroke: ${i.activationBorderColor};
}
.activation1 {
fill: ${i.activationBkgColor};
stroke: ${i.activationBorderColor};
}
.activation2 {
fill: ${i.activationBkgColor};
stroke: ${i.activationBorderColor};
}
.actorPopupMenu {
position: absolute;
}
.actorPopupMenuPanel {
position: absolute;
fill: ${i.actorBkg};
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
}
.actor-man line {
stroke: ${i.actorBorder};
fill: ${i.actorBkg};
}
.actor-man circle, line {
stroke: ${i.actorBorder};
fill: ${i.actorBkg};
stroke-width: 2px;
}
`,ET=18*2,hgt=function(i,a){return HW(i,a)},wRt=(i,a)=>{WSe(()=>{const f=document.querySelectorAll(i);f.length!==0&&(f[0].addEventListener("mouseover",function(){LHe("actor"+a+"_popup")}),f[0].addEventListener("mouseout",function(){MHe("actor"+a+"_popup")}))})},_He=function(i,a,f,p,v){if(a.links===void 0||a.links===null||Object.keys(a.links).length===0)return{height:0,width:0};const m=a.links,b=a.actorCnt,E=a.rectData;var _="none";v&&(_="block !important");const L=i.append("g");L.attr("id","actor"+b+"_popup"),L.attr("class","actorPopupMenu"),L.attr("display",_),wRt("#actor"+b+"_popup",b);var N="";E.class!==void 0&&(N=" "+E.class);let B=E.width>f?E.width:f;const j=L.append("rect");if(j.attr("class","actorPopupMenuPanel"+N),j.attr("x",E.x),j.attr("y",E.height),j.attr("fill",E.fill),j.attr("stroke",E.stroke),j.attr("width",B),j.attr("height",E.height),j.attr("rx",E.rx),j.attr("ry",E.ry),m!=null){var R=20;for(let it in m){var z=L.append("a"),K=Q6(m[it]);z.attr("xlink:href",K),z.attr("target","_blank"),UHe(p)(it,z,E.x+10,E.height+R,B,20,{class:"actor"},p),R+=30}}return j.attr("height",R),{height:E.height+R,width:B}},SHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'block'; }"},AHe=function(i){return"var pu = document.getElementById('"+i+"'); if (pu != null) { pu.style.display = 'none'; }"},LHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="block")},MHe=function(i){var a=document.getElementById(i);a!=null&&(a.style.display="none")},lL=function(i,a){let f=0,p=0;const v=a.text.split(Yr.lineBreakRegex),[m,b]=$A(a.fontSize);let E=[],_=0,L=()=>a.y;if(a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0)switch(a.valign){case"top":case"start":L=()=>Math.round(a.y+a.textMargin);break;case"middle":case"center":L=()=>Math.round(a.y+(f+p+a.textMargin)/2);break;case"bottom":case"end":L=()=>Math.round(a.y+(f+p+2*a.textMargin)-a.textMargin);break}if(a.anchor!==void 0&&a.textMargin!==void 0&&a.width!==void 0)switch(a.anchor){case"left":case"start":a.x=Math.round(a.x+a.textMargin),a.anchor="start",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"middle":case"center":a.x=Math.round(a.x+a.width/2),a.anchor="middle",a.dominantBaseline="middle",a.alignmentBaseline="middle";break;case"right":case"end":a.x=Math.round(a.x+a.width-a.textMargin),a.anchor="end",a.dominantBaseline="middle",a.alignmentBaseline="middle";break}for(let[N,B]of v.entries()){a.textMargin!==void 0&&a.textMargin===0&&m!==void 0&&(_=N*m);const j=i.append("text");j.attr("x",a.x),j.attr("y",L()),a.anchor!==void 0&&j.attr("text-anchor",a.anchor).attr("dominant-baseline",a.dominantBaseline).attr("alignment-baseline",a.alignmentBaseline),a.fontFamily!==void 0&&j.style("font-family",a.fontFamily),b!==void 0&&j.style("font-size",b),a.fontWeight!==void 0&&j.style("font-weight",a.fontWeight),a.fill!==void 0&&j.attr("fill",a.fill),a.class!==void 0&&j.attr("class",a.class),a.dy!==void 0?j.attr("dy",a.dy):_!==0&&j.attr("dy",_);const R=B||RDt;if(a.tspan){const z=j.append("tspan");z.attr("x",a.x),a.fill!==void 0&&z.attr("fill",a.fill),z.text(R)}else j.text(R);a.valign!==void 0&&a.textMargin!==void 0&&a.textMargin>0&&(p+=(j._groups||j)[0][0].getBBox().height,f=p),E.push(j)}return E},mRt=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");return p.attr("points",f(a.x,a.y,a.width,a.height,7)),p.attr("class","labelBox"),a.y=a.y+a.height/2,lL(i,a),p};let hm=-1;const yRt=(i,a,f,p)=>{i.select&&f.forEach(v=>{const m=a[v],b=i.select("#actor"+m.actorCnt);!p.mirrorActors&&m.stopy?b.attr("y2",m.stopy+m.height/2):p.mirrorActors&&b.attr("y2",m.stopy)})},IHe=function(i,a,f,p){const v=p?a.stopy:a.starty,m=a.x+a.width/2,b=v+5,E=i.append("g").lower();var _=E;p||(hm++,_.append("line").attr("id","actor"+hm).attr("x1",m).attr("y1",b).attr("x2",m).attr("y2",2e3).attr("class","actor-line").attr("class","200").attr("stroke-width","0.5px").attr("stroke","#999"),_=E.append("g"),a.actorCnt=hm,a.links!=null&&(_.att
`+Dr.showPosition()+`
Expecting `+nu.join(", ")+", got '"+(this.terminals_[Ti]||Ti)+"'":$s="Parse error on line "+(li+1)+": Unexpected "+(Ti==Oo?"end of input":"'"+(this.terminals_[Ti]||Ti)+"'"),this.parseError($s,{text:Dr.match,token:this.terminals_[Ti]||Ti,line:Dr.yylineno,loc:Ee,expected:nu})}if(ks[0]instanceof Array&&ks.length>1)throw new Error("Parse Error: multiple actions possible at state: "+gn+", token: "+Ti);switch(ks[0]){case 1:ie.push(Ti),oe.push(Dr.yytext),Ne.push(Dr.yylloc),ie.push(ks[1]),Ti=null,ya=Dr.yyleng,cn=Dr.yytext,li=Dr.yylineno,Ee=Dr.yylloc;break;case 2:if(No=this.productions_[ks[1]][1],La.$=oe[oe.length-No],La._$={first_line:Ne[Ne.length-(No||1)].first_line,last_line:Ne[Ne.length-1].last_line,first_column:Ne[Ne.length-(No||1)].first_column,last_column:Ne[Ne.length-1].last_column},Yn&&(La._$.range=[Ne[Ne.length-(No||1)].range[0],Ne[Ne.length-1].range[1]]),qa=this.performAction.apply(La,[cn,ya,li,nr.yy,ks[1],oe,Ne].concat(ds)),typeof qa<"u")return qa;No&&(ie=ie.slice(0,-1*No*2),oe=oe.slice(0,-1*No),Ne=Ne.slice(0,-1*No)),ie.push(this.productions_[ks[1]][0]),oe.push(La.$),Ne.push(La._$),vs=me[ie[ie.length-2]][ie[ie.length-1]],ie.push(vs);break;case 3:return!0}}return!0}},Ke=function(){var _e={EOF:1,parseError:function(re,ie){if(this.yy.parser)this.yy.parser.parseError(re,ie);else throw new Error(re)},setInput:function($t,re){return this.yy=re||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 re=$t.match(/(?:\r\n?|\n).*/g);return re?(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 re=$t.length,ie=$t.split(/(?:\r\n?|\n)/g);this._input=$t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-re),this.offset-=re;var Oe=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),ie.length-1&&(this.yylineno-=ie.length-1);var oe=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:ie?(ie.length===Oe.length?this.yylloc.first_column:0)+Oe[Oe.length-ie.length].length-ie[0].length:this.yylloc.first_column-re},this.options.ranges&&(this.yylloc.range=[oe[0],oe[0]+this.yyleng-re]),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(),re=new Array($t.length+1).join("-");return $t+this.upcomingInput()+`
`+re+"^"},test_match:function($t,re){var ie,Oe,oe;if(this.options.backtrack_lexer&&(oe={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&&(oe.yylloc.range=this.yylloc.range.slice(0))),Oe=$t[0].match(/(?:\r\n?|\n).*/g),Oe&&(this.yylineno+=Oe.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Oe?Oe[Oe.length-1].length-Oe[Oe.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],ie=this.performAction.call(this,this.yy,this,re,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ie)return ie;if(this._backtrack){for(var Ne in oe)this[Ne]=oe[Ne];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var $t,re,ie,Oe;this._more||(this.yytext="",this.match="");for(var oe=this._currentRules(),Ne=0;Ne<oe.length;Ne++)if(ie=this._input.match(this.rules[oe[Ne]]),ie&&(!re||ie[0].length>re[0].length)){if(re=ie,Oe=Ne,this.options.backtrack_lexer){if($t=this.test_match(ie,oe[Ne]),$t!==!1)return $t;if(this._backtrack){re=!1;continue}else return!1}else if(!this.options.flex)break}return re?($t=this.test_match(re,oe[Oe]),$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 re=this.next();return re||this.lex()},begin:function(re){this.conditionStack.push(re)},popState:function(){var re=this.conditionStack.length-1;return re>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(re){return re=this.conditionStack.length-1-Math.abs(re||0),re>=0?this.conditionStack[re]:"INITIAL"},pushState:function(re){this.begin(re)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(re,ie,Oe,oe){switch(Oe){case 0:return 52;case 1:return 53;case 2:return 54;case 3:return 55;case 4:break;case 5:break;case 6:return this.begin("acc_title"),30;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),32;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 8;case 14:break;case 15:return 7;case 16:return 7;case 17:return"EDGE_STATE";case 18:this.begin("callback_name");break;case 19:this.popState();break;case 20:this.popState(),this.begin("callback_args");break;case 21:return 69;case 22:this.popState();break;case 23:return 70;case 24:this.popState();break;case 25:return"STR";case 26:this.begin("string");break;case 27:return this.begin("namespace"),39;case 28:return this.popState(),8;case 29:break;case 30:return this.begin("namespace-body"),36;case 31:return this.popState(),38;case 32:return"EOF_IN_STRUCT";case 33:return 8;case 34:break;case 35:return"EDGE_STATE";case 36:return this.begin("class"),43;case 37:return this.popState(),8;case 38:break;case 39:return this.popState(),this.popState(),38;case 40:return this.begin("class-body"),36;case 41:return this.popState(),38;case 42:return"EOF_IN_STRUCT";case 43:return"EDGE_STATE";case 44:return"OPEN_IN_STRUCT";case 45:break;case 46:return"MEMBER";case 47:return 72;case 48:return 65;case 49:return 66;case 50:return 68;case 51:return 49;case 52:return 51;case 53:return 44;case 54:return 45;case 55:return 71;case 56:this.popState();break;case 57:return"GENERICTYPE";case 58:this.begin("generic");break;case 59:this.popState();break;case 60:return"BQUOTE_STR";case 61:this.begin("bqstring");break;case 62:return 67;case 63:return 67;case 64:return 67;case 65:return 67;case 66:return 59;case 67:return 59;case 68:return 61;case 69:return 61;case 70:return 60;case 71:return 58;case 72:return 62;case 73:return 63;case 74:return 64;case 75:return 21;case 76:return 41;case 77:return 84;case 78:return"DOT";case 79:return"PLUS";case 80:return 81;case 81:return"EQUALS";case 82:return"EQUALS";case 83:return 88;case 84:return 12;case 85:return 14;case 86:return"PUNCTUATION";case 87:return 87;case 88:return 86;case 89:return 83;case 90:return 9}},rules:[/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:\[\*\])/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:["])/,/^(?:[^"]*)/,/^(?:["])/,/^(?:namespace\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:\[\*\])/,/^(?:class\b)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:[}])/,/^(?:[{])/,/^(?:[}])/,/^(?:$)/,/^(?:\[\*\])/,/^(?:[{])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:note for\b)/,/^(?:note\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:href\b)/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:~)/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:[`])/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(
fill: ${i.nodeBorder};
fill: ${i.classText};
stroke: none;
font-family: ${i.fontFamily};
font-size: 10px;
.title {
font-weight: bolder;
}
}
.nodeLabel, .edgeLabel {
color: ${i.classText};
}
.edgeLabel .label rect {
fill: ${i.mainBkg};
}
.label text {
fill: ${i.classText};
}
.edgeLabel .label span {
background: ${i.mainBkg};
}
.classTitle {
font-weight: bolder;
}
.node rect,
.node circle,
.node ellipse,
.node polygon,
.node path {
fill: ${i.mainBkg};
stroke: ${i.nodeBorder};
stroke-width: 1px;
}
.divider {
stroke: ${i.nodeBorder};
stroke-width: 1;
}
g.clickable {
cursor: pointer;
}
g.classGroup rect {
fill: ${i.mainBkg};
stroke: ${i.nodeBorder};
}
g.classGroup line {
stroke: ${i.nodeBorder};
stroke-width: 1;
}
.classLabel .box {
stroke: none;
stroke-width: 0;
fill: ${i.mainBkg};
opacity: 0.5;
}
.classLabel .label {
fill: ${i.nodeBorder};
font-size: 10px;
}
.relation {
stroke: ${i.lineColor};
stroke-width: 1;
fill: none;
}
.dashed-line{
stroke-dasharray: 3;
}
.dotted-line{
stroke-dasharray: 1 2;
}
#compositionStart, .composition {
fill: ${i.lineColor} !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#compositionEnd, .composition {
fill: ${i.lineColor} !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#dependencyStart, .dependency {
fill: ${i.lineColor} !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#dependencyStart, .dependency {
fill: ${i.lineColor} !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#extensionStart, .extension {
fill: transparent !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#extensionEnd, .extension {
fill: transparent !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#aggregationStart, .aggregation {
fill: transparent !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#aggregationEnd, .aggregation {
fill: transparent !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#lollipopStart, .lollipop {
fill: ${i.mainBkg} !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
#lollipopEnd, .lollipop {
fill: ${i.mainBkg} !important;
stroke: ${i.lineColor} !important;
stroke-width: 1;
}
.edgeTerminals {
font-size: 11px;
}
.classTitleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor};
}
`;let PRt=0;const CGe=function(i,a,f,p,v){const m=function(ut){switch(ut){case v.db.relationType.AGGREGATION:return"aggregation";case v.db.relationType.EXTENSION:return"extension";case v.db.relationType.COMPOSITION:return"composition";case v.db.relationType.DEPENDENCY:return"dependency";case v.db.relationType.LOLLIPOP:return"lollipop"}};a.points=a.points.filter(ut=>!Number.isNaN(ut.y));const b=a.points,E=Z7().x(function(ut){return ut.x}).y(function(ut){return ut.y}).curve(FN),_=i.append("path").attr("d",E(b)).attr("id","edge"+PRt).attr("class","relation");let L="";p.arrowMarkerAbsolute&&(L=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,L=L.replace(/\(/g,"\\("),L=L.replace(/\)/g,"\\)")),f.relation.lineType==1&&_.attr("class","relation dashed-line"),f.relation.lineType==10&&_.attr("class","relation dotted-line"),f.relation.type1!=="none"&&_.attr("marker-start","url("+L+"#"+m(f.relation.type1)+"Start)"),f.relation.type2!=="none"&&_.attr("marker-end","url("+L+"#"+m(f.relation.type2)+"End)");let N,B;const j=a.points.length;let R=$a.calcLabelPosition(a.points);N=R.x,B=R.y;let z,K,it,st;if(j%2!==0&&j>1){let ut=$a.calcCardinalityPosition(f.relation.type1!=="none",a.points,a.points[0]),bt=$a.calcCardinalityPosition(f.relation.type2!=="none",a.points,a.points[j-1]);Ut.debug("cardinality_1_point "+JSON.stringify(ut)),Ut.debug("cardinality_2_point "+JSON.stringify(bt)),z=ut.x,K=ut.y,it=bt.x,st=bt.y}if(f.title!==void 0){const ut=i.append("g").attr("class","classLabel"),bt=ut.append("text").attr("class","label").attr("x",N).attr("y",B).attr("fill","red").attr("text-anchor","middle").text(f.title);window.label=bt;const mt=bt.node().getBBox();ut.insert("rect",":first-child").attr("class","box").attr("x",mt.x-p.padding/2).attr("y",mt.y-p.padding/2).attr("width",mt.width+p.padding).attr("height",mt.height+p.padding)}Ut.info("Rendering relation "+JSON.stringify(f)),f.relationTitle1!==void 0&&f.relationTitle1!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",z).attr("y",K).attr("fill","black").attr("font-size","6").text(f.relationTitle1),f.relationTitle2!==void 0&&f.relationTitle2!=="none"&&i.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",it).attr("y",st).attr("fill","black").attr("font-size","6").text(f.relationTitle2),PRt++},_Ge=function(i,a,f,p){Ut.debug("Rendering class ",a,f);const v=a.id,m={id:v,label:a.id,width:0,height:0},b=i.append("g").attr("id",p.db.lookUpDomId(v)).attr("class","classGroup");let E;a.link?E=b.append("svg:a").attr("xlink:href",a.link).attr("target",a.linkTarget).append("text").attr("y",f.textHeight+f.padding).attr("x",0):E=b.append("text").attr("y",f.textHeight+f.padding).attr("x",0);let _=!0;a.annotations.forEach(function(bt){const mt=E.append("tspan").text("«"+bt+"»");_||mt.attr("dy",f.textHeight),_=!1});let L=FRt(a);const N=E.append("tspan").text(L).attr("class","title");_||N.attr("dy",f.textHeight);const B=E.node().getBBox().height;let j,R,z;if(a.members.length>0){j=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin/2).attr("y2",f.padding+B+f.dividerMargin/2);const bt=b.append("text").attr("x",f.padding).attr("y",B+f.dividerMargin+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.members.forEach(function(mt){BRt(bt,mt,_,f),_=!1}),R=bt.node().getBBox()}if(a.methods.length>0){z=b.append("line").attr("x1",0).attr("y1",f.padding+B+f.dividerMargin+R.height).attr("y2",f.padding+B+f.dividerMargin+R.height);const bt=b.append("text").attr("x",f.padding).attr("y",B+2*f.dividerMargin+R.height+f.textHeight).attr("fill","white").attr("class","classText");_=!0,a.methods.forEach(function(mt){BRt(bt,mt,_,f),_=!1})}const K=b.node().getBBox();var it=" ";a.cssClasses.length>0&&(it=it+a.cssClasses.join(" "));const ut=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",K.width+2*f.padding).attr("height",K.height+f.padding+.5*f.dividerMargin).attr("class",it).node().getBBox().width;return E.node().childNodes.forEach(function(bt){bt.setAttribu
`);_.forEach(function(j){Ut.debug(`Adding line: ${j}`),E.append("tspan").text(j).attr("class","title").attr("dy",f.textHeight)});const L=b.node().getBBox(),B=b.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",L.width+2*f.padding).attr("height",L.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin).node().getBBox().width;return E.node().childNodes.forEach(function(j){j.setAttribute("x",(B-j.getBBox().width)/2)}),m.width=B,m.height=L.height+_.length*f.textHeight+f.padding+.5*f.dividerMargin,m},BRt=function(i,a,f,p){const{displayText:v,cssStyle:m}=a.getDisplayDetails(),b=i.append("tspan").attr("x",p.padding).text(v);m!==""&&b.attr("style",a.cssStyle),f||b.attr("dy",p.textHeight)},mgt={getClassTitleString:FRt,drawClass:_Ge,drawEdge:CGe,drawNote:SGe};let OK={};const NK=20,BP=function(i){const a=Object.entries(OK).find(f=>f[1].label===i);if(a)return a[0]},AGe=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")},LGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_Rt,db:DK,renderer:{draw:function(i,a,f,p){const v=Le().class;OK={},Ut.info("Rendering diagram "+i);const m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const E=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body"),_=E.select(`[id='${a}']`);AGe(_);const L=new a1({multigraph:!0});L.setGraph({isMultiGraph:!0}),L.setDefaultEdgeLabel(function(){return{}});const N=p.db.getClasses(),B=Object.keys(N);for(const ut of B){const bt=N[ut],mt=mgt.drawClass(_,bt,v,p);OK[mt.id]=mt,L.setNode(mt.id,mt),Ut.info("Org height: "+mt.height)}p.db.getRelations().forEach(function(ut){Ut.info("tjoho"+BP(ut.id1)+BP(ut.id2)+JSON.stringify(ut)),L.setEdge(BP(ut.id1),BP(ut.id2),{relation:ut},ut.title||"DEFAULT")}),p.db.getNotes().forEach(function(ut){Ut.debug(`Adding note: ${JSON.stringify(ut)}`);const bt=mgt.drawNote(_,ut,v,p);OK[bt.id]=bt,L.setNode(bt.id,bt),ut.class&&ut.class in N&&L.setEdge(ut.id,BP(ut.class),{relation:{id1:ut.id,id2:ut.class,relation:{type1:"none",type2:"none",lineType:10}}},"DEFAULT")}),eL(L),L.nodes().forEach(function(ut){ut!==void 0&&L.node(ut)!==void 0&&(Ut.debug("Node "+ut+": "+JSON.stringify(L.node(ut))),E.select("#"+(p.db.lookUpDomId(ut)||ut)).attr("transform","translate("+(L.node(ut).x-L.node(ut).width/2)+","+(L.node(ut).y-L.node(ut).height/2)+" )"))}),L.edges().forEach(funct
`),v.style===void 0&&(m.style=m.style||"stroke: #333; stroke-width: 1.5px;fill:none"),m.labelStyle=m.labelStyle.replace("color:","fill:"))),a.setEdge(v.id1,v.id2,m,p)})},OGe=function(i){xgt={...xgt,...i}},NGe=async function(i,a,f,p){Ut.info("Drawing class - ",a);const v=Le().flowchart??Le().class,m=Le().securityLevel;Ut.info("config:",v);const b=(v==null?void 0:v.nodeSpacing)??50,E=(v==null?void 0:v.rankSpacing)??50,_=new a1({multigraph:!0,compound:!0}).setGraph({rankdir:p.db.getDirection(),nodesep:b,ranksep:E,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),L=p.db.getNamespaces(),N=p.db.getClasses(),B=p.db.getRelations(),j=p.db.getNotes();Ut.info(B),MGe(L,_,a,p),RRt(N,_,a,p),DGe(B,_),IGe(j,_,B.length+1,N);let R;m==="sandbox"&&(R=yr("#i"+a));const z=yr(m==="sandbox"?R.nodes()[0].contentDocument.body:"body"),K=z.select(`[id="${a}"]`),it=z.select("#"+a+" g");if(await I0t(it,_,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",a),$a.insertTitle(K,"classTitleText",(v==null?void 0:v.titleTopMargin)??5,p.db.getDiagramTitle()),cT(_,K,v==null?void 0:v.diagramPadding,v==null?void 0:v.useMaxWidth),!(v!=null&&v.htmlLabels)){const st=m==="sandbox"?R.nodes()[0].contentDocument:document,ut=st.querySelectorAll('[id="'+a+'"] .edgeLabel .label');for(const bt of ut){const mt=bt.getBBox(),yt=st.createElementNS("http://www.w3.org/2000/svg","rect");yt.setAttribute("rx",0),yt.setAttribute("ry",0),yt.setAttribute("width",mt.width),yt.setAttribute("height",mt.height),bt.insertBefore(yt,bt.firstChild)}}};function jRt(i){let a;switch(i){case 0:a="aggregation";break;case 1:a="extension";break;case 2:a="composition";break;case 3:a="dependency";break;case 4:a="lollipop";break;default:a="none"}return a}const PGe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:_Rt,db:DK,renderer:{setConf:OGe,draw:NGe},styles:NRt,init:i=>{i.class||(i.class={}),i.class.arrowMarkerAbsolute=i.arrowMarkerAbsolute,DK.clear()}}},Symbol.toStringTag,{value:"Module"}));var kgt=function(){var i=function(Ct,Z,Tt,Ht){for(Tt=Tt||{},Ht=Ct.length;Ht--;Tt[Ct[Ht]]=Z);return Tt},a=[1,2],f=[1,3],p=[1,4],v=[2,4],m=[1,9],b=[1,11],E=[1,15],_=[1,16],L=[1,17],N=[1,18],B=[1,30],j=[1,19],R=[1,20],z=[1,21],K=[1,22],it=[1,23],st=[1,25],ut=[1,26],bt=[1,27],mt=[1,28],yt=[1,29],dt=[1,32],ht=[1,33],wt=[1,34],X=[1,35],pt=[1,31],U=[1,4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],xt=[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],nt=[4,5,15,16,18,20,21,23,24,25,26,27,28,32,34,36,37,41,44,45,46,47,50],Ot={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],
`+$t.showPosition()+`
Expecting `+nr.join(", ")+", got '"+(this.terminals_[me]||me)+"'":di="Parse error on line "+(ve+1)+": Unexpected "+(me==we?"end of input":"'"+(this.terminals_[me]||me)+"'"),this.parseError(di,{text:$t.match,token:this.terminals_[me]||me,line:$t.yylineno,loc:Oe,expected:nr})}if(li[0]instanceof Array&&li.length>1)throw new Error("Parse Error: multiple actions possible at state: "+cn+", token: "+me);switch(li[0]){case 1:Ht.push(me),Ft.push($t.yytext),ke.push($t.yylloc),Ht.push(li[1]),me=null,Ge=$t.yyleng,Me=$t.yytext,ve=$t.yylineno,Oe=$t.yylloc;break;case 2:if(ds=this.productions_[li[1]][1],da.$=Ft[Ft.length-ds],da._$={first_line:ke[ke.length-(ds||1)].first_line,last_line:ke[ke.length-1].last_line,first_column:ke[ke.length-(ds||1)].first_column,last_column:ke[ke.length-1].last_column},oe&&(da._$.range=[ke[ke.length-(ds||1)].range[0],ke[ke.length-1].range[1]]),ya=this.performAction.apply(da,[Me,Ge,ve,re.yy,li[1],Ft,ke].concat(_e)),typeof ya<"u")return ya;ds&&(Ht=Ht.slice(0,-1*ds*2),Ft=Ft.slice(0,-1*ds),ke=ke.slice(0,-1*ds)),Ht.push(this.productions_[li[1]][0]),Ft.push(da.$),ke.push(da._$),Dr=pn[Ht[Ht.length-2]][Ht[Ht.length-1]],Ht.push(Dr);break;case 3:return!0}}return!0}},Nt=function(){var Ct={EOF:1,parseError:function(Tt,Ht){if(this.yy.parser)this.yy.parser.parseError(Tt,Ht);else throw new Error(Tt)},setInput:function(Z,Tt){return this.yy=Tt||this.yy||{},this._input=Z,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 Z=this._input[0];this.yytext+=Z,this.yyleng++,this.offset++,this.match+=Z,this.matched+=Z;var Tt=Z.match(/(?:\r\n?|\n).*/g);return Tt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Z},unput:function(Z){var Tt=Z.length,Ht=Z.split(/(?:\r\n?|\n)/g);this._input=Z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Tt),this.offset-=Tt;var It=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),Ht.length-1&&(this.yylineno-=Ht.length-1);var Ft=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:Ht?(Ht.length===It.length?this.yylloc.first_column:0)+It[It.length-Ht.length].length-Ht[0].length:this.yylloc.first_column-Tt},this.options.ranges&&(this.yylloc.range=[Ft[0],Ft[0]+this.yyleng-Tt]),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(Z){this.unput(this.match.slice(Z))},pastInput:function(){var Z=this.matched.substr(0,this.matched.length-this.match.length);return(Z.length>20?"...":"")+Z.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Z=this.match;return Z.length<20&&(Z+=this._input.substr(0,20-Z.length)),(Z.substr(0,20)+(Z.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Z=this.pastInput(),Tt=new Array(Z.length+1).join("-");return Z+this.upcomingInput()+`
`+Tt+"^"},test_match:function(Z,Tt){var Ht,It,Ft;if(this.options.backtrack_lexer&&(Ft={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&&(Ft.yylloc.range=this.yylloc.range.slice(0))),It=Z[0].match(/(?:\r\n?|\n).*/g),It&&(this.yylineno+=It.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:It?It[It.length-1].length-It[It.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Z[0].length},this.yytext+=Z[0],this.match+=Z[0],this.matches=Z,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(Z[0].length),this.matched+=Z[0],Ht=this.performAction.call(this,this.yy,this,Tt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Ht)return Ht;if(this._backtrack){for(var ke in Ft)this[ke]=Ft[ke];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Z,Tt,Ht,It;this._more||(this.yytext="",this.match="");for(var Ft=this._currentRules(),ke=0;ke<Ft.length;ke++)if(Ht=this._input.match(this.rules[Ft[ke]]),Ht&&(!Tt||Ht[0].length>Tt[0].length)){if(Tt=Ht,It=ke,this.options.backtrack_lexer){if(Z=this.test_match(Ht,Ft[ke]),Z!==!1)return Z;if(this._backtrack){Tt=!1;continue}else return!1}else if(!this.options.flex)break}return Tt?(Z=this.test_match(Tt,Ft[It]),Z!==!1?Z:!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 Tt=this.next();return Tt||this.lex()},begin:function(Tt){this.conditionStack.push(Tt)},popState:function(){var Tt=this.conditionStack.length-1;return Tt>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(Tt){return Tt=this.conditionStack.length-1-Math.abs(Tt||0),Tt>=0?this.conditionStack[Tt]:"INITIAL"},pushState:function(Tt){this.begin(Tt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Tt,Ht,It,Ft){switch(It){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(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),24;case 34:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),25;case 35:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-10).trim(),26;case 36:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),24;case 37:return this.popState(),Ht.yytext=Ht.yytext.slice(0,-8).trim(),25;case 38:return this.popState(),Ht.yytext=Ht.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(),Ht.yytext=Ht.yytext.substr(2).trim(),30;case 64:return this.popState(),Ht.yytext=Ht.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 Ht.yytext=Ht.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,/^(?:
defs #statediagram-barbEnd {
fill: ${i.transitionColor};
stroke: ${i.transitionColor};
}
g.stateGroup text {
fill: ${i.nodeBorder};
stroke: none;
font-size: 10px;
}
g.stateGroup text {
fill: ${i.textColor};
stroke: none;
font-size: 10px;
}
g.stateGroup .state-title {
font-weight: bolder;
fill: ${i.stateLabelColor};
}
g.stateGroup rect {
fill: ${i.mainBkg};
stroke: ${i.nodeBorder};
}
g.stateGroup line {
stroke: ${i.lineColor};
stroke-width: 1;
}
.transition {
stroke: ${i.transitionColor};
stroke-width: 1;
fill: none;
}
.stateGroup .composit {
fill: ${i.background};
border-bottom: 1px
}
.stateGroup .alt-composit {
fill: #e0e0e0;
border-bottom: 1px
}
.state-note {
stroke: ${i.noteBorderColor};
fill: ${i.noteBkgColor};
text {
fill: ${i.noteTextColor};
stroke: none;
font-size: 10px;
}
}
.stateLabel .box {
stroke: none;
stroke-width: 0;
fill: ${i.mainBkg};
opacity: 0.5;
}
.edgeLabel .label rect {
fill: ${i.labelBackgroundColor};
opacity: 0.5;
}
.edgeLabel .label text {
fill: ${i.transitionLabelColor||i.tertiaryTextColor};
}
.label div .edgeLabel {
color: ${i.transitionLabelColor||i.tertiaryTextColor};
}
.stateLabel text {
fill: ${i.stateLabelColor};
font-size: 10px;
font-weight: bold;
}
.node circle.state-start {
fill: ${i.specialStateColor};
stroke: ${i.specialStateColor};
}
.node .fork-join {
fill: ${i.specialStateColor};
stroke: ${i.specialStateColor};
}
.node circle.state-end {
fill: ${i.innerEndBackground};
stroke: ${i.background};
stroke-width: 1.5
}
.end-state-inner {
fill: ${i.compositeBackground||i.background};
// stroke: ${i.background};
stroke-width: 1.5
}
.node rect {
fill: ${i.stateBkg||i.mainBkg};
stroke: ${i.stateBorder||i.nodeBorder};
stroke-width: 1px;
}
.node polygon {
fill: ${i.mainBkg};
stroke: ${i.stateBorder||i.nodeBorder};;
stroke-width: 1px;
}
#statediagram-barbEnd {
fill: ${i.lineColor};
}
.statediagram-cluster rect {
fill: ${i.compositeTitleBackground};
stroke: ${i.stateBorder||i.nodeBorder};
stroke-width: 1px;
}
.cluster-label, .nodeLabel {
color: ${i.stateLabelColor};
}
.statediagram-cluster rect.outer {
rx: 5px;
ry: 5px;
}
.statediagram-state .divider {
stroke: ${i.stateBorder||i.nodeBorder};
}
.statediagram-state .title-state {
rx: 5px;
ry: 5px;
}
.statediagram-cluster.statediagram-cluster .inner {
fill: ${i.compositeBackground||i.background};
}
.statediagram-cluster.statediagram-cluster-alt .inner {
fill: ${i.altBackground?i.altBackground:"#efefef"};
}
.statediagram-cluster .inner {
rx:0;
ry:0;
}
.statediagram-state rect.basic {
rx: 5px;
ry: 5px;
}
.statediagram-state rect.divider {
stroke-dasharray: 10,10;
fill: ${i.altBackground?i.altBackground:"#efefef"};
}
.note-edge {
stroke-dasharray: 5;
}
.statediagram-note rect {
fill: ${i.noteBkgColor};
stroke: ${i.noteBorderColor};
stroke-width: 1px;
rx: 0;
ry: 0;
}
.statediagram-note rect {
fill: ${i.noteBkgColor};
stroke: ${i.noteBorderColor};
stroke-width: 1px;
rx: 0;
ry: 0;
}
.statediagram-note text {
fill: ${i.noteTextColor};
}
.statediagram-note .nodeLabel {
color: ${i.noteTextColor};
}
.statediagram .edgeLabel {
color: red; // ${i.noteTextColor};
}
#dependencyStart, #dependencyEnd {
fill: ${i.lineColor};
stroke: ${i.lineColor};
stroke-width: 1;
}
.statediagramTitleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor};
}
`,Lgt={},sVe=(i,a)=>{Lgt[i]=a},aVe=i=>Lgt[i],ejt=()=>Object.keys(Lgt),oVe={get:aVe,set:sVe,keys:ejt,size:()=>ejt().length},cVe=i=>i.append("circle").attr("class","start-state").attr("r",Le().state.sizeUnit).attr("cx",Le().state.padding+Le().state.sizeUnit).attr("cy",Le().state.padding+Le().state.sizeUnit),uVe=i=>i.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",Le().state.textHeight).attr("class","divider").attr("x2",Le().state.textHeight*2).attr("y1",0).attr("y2",0),lVe=(i,a)=>{const f=i.append("text").attr("x",2*Le().state.padding).attr("y",Le().state.textHeight+2*Le().state.padding).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.id),p=f.node().getBBox();return i.insert("rect",":first-child").attr("x",Le().state.padding).attr("y",Le().state.padding).attr("width",p.width+2*Le().state.padding).attr("height",p.height+2*Le().state.padding).attr("rx",Le().state.radius),f},hVe=(i,a)=>{const f=function(j,R,z){const K=j.append("tspan").attr("x",2*Le().state.padding).text(R);z||K.attr("dy",Le().state.textHeight)},v=i.append("text").attr("x",2*Le().state.padding).attr("y",Le().state.textHeight+1.3*Le().state.padding).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.descriptions[0]).node().getBBox(),m=v.height,b=i.append("text").attr("x",Le().state.padding).attr("y",m+Le().state.padding*.4+Le().state.dividerMargin+Le().state.textHeight).attr("class","state-description");let E=!0,_=!0;a.descriptions.forEach(function(j){E||(f(b,j,_),_=!1),E=!1});const L=i.append("line").attr("x1",Le().state.padding).attr("y1",Le().state.padding+m+Le().state.dividerMargin/2).attr("y2",Le().state.padding+m+Le().state.dividerMargin/2).attr("class","descr-divider"),N=b.node().getBBox(),B=Math.max(N.width,v.width);return L.attr("x2",B+3*Le().state.padding),i.insert("rect",":first-child").attr("x",Le().state.padding).attr("y",Le().state.padding).attr("width",B+2*Le().state.padding).attr("height",N.height+m+2*Le().state.padding).attr("rx",Le().state.radius),i},fVe=(i,a,f)=>{const p=Le().state.padding,v=2*Le().state.padding,m=i.node().getBBox(),b=m.width,E=m.x,_=i.append("text").attr("x",0).attr("y",Le().state.titleShift).attr("font-size",Le().state.fontSize).attr("class","state-title").text(a.id),N=_.node().getBBox().width+v;let B=Math.max(N,b);B===b&&(B=B+v);let j;const R=i.node().getBBox();a.doc,j=E-p,N>b&&(j=(b-B)/2+p),Math.abs(E-R.x)<p&&N>b&&(j=E-(N-b)/2);const z=1-Le().state.textHeight;return i.insert("rect",":first-child").attr("x",j).attr("y",z).attr("class",f?"alt-composit":"composit").attr("width",B).attr("height",R.height+Le().state.textHeight+Le().state.titleShift+1).attr("rx","0"),_.attr("x",j+p),N<=b&&_.attr("x",E+(B-v)/2-N/2+p),i.insert("rect",":first-child").attr("x",j).attr("y",Le().state.titleShift-Le().state.textHeight-Le().state.padding).attr("width",B).attr("height",Le().state.textHeight*3).attr("rx",Le().state.radius),i.insert("rect",":first-child").attr("x",j).attr("y",Le().state.titleShift-Le().state.textHeight-Le().state.padding).attr("width",B).attr("height",R.height+3+2*Le().state.textHeight).attr("rx",Le().state.radius),i},dVe=i=>(i.append("circle").attr("class","end-state-outer").attr("r",Le().state.sizeUnit+Le().state.miniPadding).attr("cx",Le().state.padding+Le().state.sizeUnit+Le().state.miniPadding).attr("cy",Le().state.padding+Le().state.sizeUnit+Le().state.miniPadding),i.append("circle").attr("class","end-state-inner").attr("r",Le().state.sizeUnit).attr("cx",Le().state.padding+Le().state.sizeUnit+2).attr("cy",Le().state.padding+Le().state.sizeUnit+2)),gVe=(i,a)=>{let f=Le().state.forkWidth,p=Le().state.forkHeight;if(a.parentId){let v=f;f=p,p=v}return i.append("rect").style("stroke","black").style("fill","black").attr("width",f).attr("height",p).attr("x",Le().state.padding).attr("y",Le().state.padding)},pVe=(i,a,f,p)=>{let v=0;const m=p.append("text");m.style("text-anchor","start"),m.attr("class","noteText");let b=i.replace(/\r\n/g,"<br/>");b=b.replace(/\n/g,"<br/>");const E=b.split(Yr.lineBreakRegex);let _=1.25*Le().state.noteMargin;for(const
`+X.showPosition()+`
Expecting `+ke.join(", ")+", got '"+(this.terminals_[Nt]||Nt)+"'":pn="Parse error on line "+(mt+1)+": Unexpected "+(Nt==ht?"end of input":"'"+(this.terminals_[Nt]||Nt)+"'"),this.parseError(pn,{text:X.match,token:this.terminals_[Nt]||Nt,line:X.yylineno,loc:xt,expected:ke})}if(Ct[0]instanceof Array&&Ct.length>1)throw new Error("Parse Error: multiple actions possible at state: "+qt+", token: "+Nt);switch(Ct[0]){case 1:z.push(Nt),it.push(X.yytext),st.push(X.yylloc),z.push(Ct[1]),Nt=null,yt=X.yyleng,bt=X.yytext,mt=X.yylineno,xt=X.yylloc;break;case 2:if(It=this.productions_[Ct[1]][1],Tt.$=it[it.length-It],Tt._$={first_line:st[st.length-(It||1)].first_line,last_line:st[st.length-1].last_line,first_column:st[st.length-(It||1)].first_column,last_column:st[st.length-1].last_column},nt&&(Tt._$.range=[st[st.length-(It||1)].range[0],st[st.length-1].range[1]]),Z=this.performAction.apply(Tt,[bt,yt,mt,pt.yy,Ct[1],it,st].concat(wt)),typeof Z<"u")return Z;It&&(z=z.slice(0,-1*It*2),it=it.slice(0,-1*It),st=st.slice(0,-1*It)),z.push(this.productions_[Ct[1]][0]),it.push(Tt.$),st.push(Tt._$),Ft=ut[z[z.length-2]][z[z.length-1]],z.push(Ft);break;case 3:return!0}}return!0}},L=function(){var B={EOF:1,parseError:function(R,z){if(this.yy.parser)this.yy.parser.parseError(R,z);else throw new Error(R)},setInput:function(j,R){return this.yy=R||this.yy||{},this._input=j,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 j=this._input[0];this.yytext+=j,this.yyleng++,this.offset++,this.match+=j,this.matched+=j;var R=j.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),j},unput:function(j){var R=j.length,z=j.split(/(?:\r\n?|\n)/g);this._input=j+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-R),this.offset-=R;var K=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),z.length-1&&(this.yylineno-=z.length-1);var it=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:z?(z.length===K.length?this.yylloc.first_column:0)+K[K.length-z.length].length-z[0].length:this.yylloc.first_column-R},this.options.ranges&&(this.yylloc.range=[it[0],it[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(j){this.unput(this.match.slice(j))},pastInput:function(){var j=this.matched.substr(0,this.matched.length-this.match.length);return(j.length>20?"...":"")+j.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var j=this.match;return j.length<20&&(j+=this._input.substr(0,20-j.length)),(j.substr(0,20)+(j.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var j=this.pastInput(),R=new Array(j.length+1).join("-");return j+this.upcomingInput()+`
`+R+"^"},test_match:function(j,R){var z,K,it;if(this.options.backtrack_lexer&&(it={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&&(it.yylloc.range=this.yylloc.range.slice(0))),K=j[0].match(/(?:\r\n?|\n).*/g),K&&(this.yylineno+=K.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:K?K[K.length-1].length-K[K.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+j[0].length},this.yytext+=j[0],this.match+=j[0],this.matches=j,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(j[0].length),this.matched+=j[0],z=this.performAction.call(this,this.yy,this,R,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),z)return z;if(this._backtrack){for(var st in it)this[st]=it[st];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var j,R,z,K;this._more||(this.yytext="",this.match="");for(var it=this._currentRules(),st=0;st<it.length;st++)if(z=this._input.match(this.rules[it[st]]),z&&(!R||z[0].length>R[0].length)){if(R=z,K=st,this.options.backtrack_lexer){if(j=this.test_match(z,it[st]),j!==!1)return j;if(this._backtrack){R=!1;continue}else return!1}else if(!this.options.flex)break}return R?(j=this.test_match(R,it[K]),j!==!1?j:!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,z,K,it){switch(K){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 B}();_.lexer=L;function N(){this.yy={}}return N.prototype=_,_.Parser=N,new N}();Pgt.parser=Pgt;const qVe=Pgt;let gL="";const Fgt=[],HP=[],GP=[],HVe=function(){Fgt.length=0,HP.length=0,gL="",GP.length=0,ap()},GVe=function(i){gL=i,Fgt.push(i)},VVe=function(){return Fgt},UVe=function(){let i=gjt();const a=100;let f=0;for(;!i&&f<a;)i=gjt(),f++;return HP.push(...GP),HP},WVe=function(){const i=[];return HP.forEach(f=>{f.people&&i.push(...f.people)}),[...new Set(i)].sort()},KVe=function(i,a){const f=a.substr(1).split(":");let p=0,v=[];f.length===1?(p=Number(f[0]),v=[]):(p=Number(f[0]),v=f[1].split(","));const m=v.map(E=>E.trim()),b={section:gL,type:gL,people:m,task:i,score:p};GP.push(b)},YVe=function(i){const a={section:gL,type:gL,description:i,task:i,classes:[]};HP.push(a)},gjt=function(){const i=function(f){return GP[f].processed};let a=!0;for(const[f,p]of GP.entries())i(f),a=a&&p.processed;return a},pjt={getConfig:()=>Le().journey,clear:HVe,setDiagramTitle:Z2,getDiagramTitle:Db,setAccTitle:cg,getAccTitle:op,setAccDescription:cp,getAccDescription:up,addSection:GVe,getSections:VVe,getTasks:UVe,addTask:KVe,addTaskOrg:YVe,getActors:function(){return WVe()}},XVe=i=>`.label {
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
color: ${i.textColor};
}
.mouth {
stroke: #666;
}
line {
stroke: ${i.textColor}
}
.legend {
fill: ${i.textColor};
}
.label text {
fill: #333;
}
.label {
color: ${i.textColor}
}
.face {
${i.faceColor?`fill: ${i.faceColor}`:"fill: #FFF8DC"};
stroke: #999;
}
.node rect,
.node circle,
.node ellipse,
.node polygon,
.node path {
fill: ${i.mainBkg};
stroke: ${i.nodeBorder};
stroke-width: 1px;
}
.node .label {
text-align: center;
}
.node.clickable {
cursor: pointer;
}
.arrowheadPath {
fill: ${i.arrowheadColor};
}
.edgePath .path {
stroke: ${i.lineColor};
stroke-width: 1.5px;
}
.flowchart-link {
stroke: ${i.lineColor};
fill: none;
}
.edgeLabel {
background-color: ${i.edgeLabelBackground};
rect {
opacity: 0.5;
}
text-align: center;
}
.cluster rect {
}
.cluster text {
fill: ${i.titleColor};
}
div.mermaidTooltip {
position: absolute;
text-align: center;
max-width: 200px;
padding: 2px;
font-family: 'trebuchet ms', verdana, arial, sans-serif;
font-family: var(--mermaid-font-family);
font-size: 12px;
background: ${i.tertiaryColor};
border: 1px solid ${i.border2};
border-radius: 2px;
pointer-events: none;
z-index: 100;
}
.task-type-0, .section-type-0 {
${i.fillType0?`fill: ${i.fillType0}`:""};
}
.task-type-1, .section-type-1 {
${i.fillType0?`fill: ${i.fillType1}`:""};
}
.task-type-2, .section-type-2 {
${i.fillType0?`fill: ${i.fillType2}`:""};
}
.task-type-3, .section-type-3 {
${i.fillType0?`fill: ${i.fillType3}`:""};
}
.task-type-4, .section-type-4 {
${i.fillType0?`fill: ${i.fillType4}`:""};
}
.task-type-5, .section-type-5 {
${i.fillType0?`fill: ${i.fillType5}`:""};
}
.task-type-6, .section-type-6 {
${i.fillType0?`fill: ${i.fillType6}`:""};
}
.task-type-7, .section-type-7 {
${i.fillType0?`fill: ${i.fillType7}`:""};
}
.actor-0 {
${i.actor0?`fill: ${i.actor0}`:""};
}
.actor-1 {
${i.actor1?`fill: ${i.actor1}`:""};
}
.actor-2 {
${i.actor2?`fill: ${i.actor2}`:""};
}
.actor-3 {
${i.actor3?`fill: ${i.actor3}`:""};
}
.actor-4 {
${i.actor4?`fill: ${i.actor4}`:""};
}
.actor-5 {
${i.actor5?`fill: ${i.actor5}`:""};
}
`,Bgt=function(i,a){return HW(i,a)},QVe=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const L=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const L=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+7)+")")}function E(_){_.append("line").attr("class","mouth").attr("stroke",2).attr("x1",a.cx-5).attr("y1",a.cy+7).attr("x2",a.cx+5).attr("y2",a.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return a.score>3?m(v):a.score<3?b(v):E(v),p},bjt=function(i,a){const f=i.append("circle");return f.attr("cx",a.cx),f.attr("cy",a.cy),f.attr("class","actor-"+a.pos),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("r",a.r),f.class!==void 0&&f.attr("class",f.class),a.title!==void 0&&f.append("title").text(a.title),f},vjt=function(i,a){return dIe(i,a)},ZVe=function(i,a){function f(v,m,b,E,_){return v+","+m+" "+(v+b)+","+m+" "+(v+b)+","+(m+E-_)+" "+(v+b-_*1.2)+","+(m+E)+" "+v+","+(m+E)}const p=i.append("polygon");p.attr("points",f(a.x,a.y,50,20,7)),p.attr("class","labelBox"),a.y=a.y+a.labelMargin,a.x=a.x+.5*a.labelMargin,vjt(i,a)},JVe=function(i,a,f){const p=i.append("g"),v=fT();v.x=a.x,v.y=a.y,v.fill=a.fill,v.width=f.width*a.taskCount+f.diagramMarginX*(a.taskCount-1),v.height=f.height,v.class="journey-section section-type-"+a.num,v.rx=3,v.ry=3,Bgt(p,v),mjt(f)(a.text,p,v.x,v.y,v.width,v.height,{class:"journey-section section-type-"+a.num},f,a.colour)};let wjt=-1;const tUe=function(i,a,f){const p=a.x+f.width/2,v=i.append("g");wjt++;const m=300+5*30;v.append("line").attr("id","task"+wjt).attr("x1",p).attr("y1",a.y).attr("x2",p).attr("y2",m).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),QVe(v,{cx:p,cy:300+(5-a.score)*30,score:a.score});const b=fT();b.x=a.x,b.y=a.y,b.fill=a.fill,b.width=f.width,b.height=f.height,b.class="task task-type-"+a.num,b.rx=3,b.ry=3,Bgt(v,b);let E=a.x+14;a.people.forEach(_=>{const L=a.actors[_].color,N={cx:E,cy:a.y,r:7,fill:L,stroke:"#000",title:_,pos:a.actors[_].position};bjt(v,N),E+=10}),mjt(f)(a.task,v,b.x,b.y,b.width,b.height,{class:"task"},f,a.colour)},eUe=function(i,a){bNt(i,a)},mjt=function(){function i(v,m,b,E,_,L,N,B){const j=m.append("text").attr("x",b+_/2).attr("y",E+L/2+5).style("font-color",B).style("text-anchor","middle").text(v);p(j,N)}function a(v,m,b,E,_,L,N,B,j){const{taskFontSize:R,taskFontFamily:z}=B,K=v.split(/<br\s*\/?>/gi);for(let it=0;it<K.length;it++){const st=it*R-R*(K.length-1)/2,ut=m.append("text").attr("x",b+_/2).attr("y",E).attr("fill",j).style("text-anchor","middle").style("font-size",R).style("font-family",z);ut.append("tspan").attr("x",b+_/2).attr("dy",st).text(K[it]),ut.attr("y",E+L/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),p(ut,N)}}function f(v,m,b,E,_,L,N,B){const j=m.append("switch"),z=j.append("foreignObject").attr("x",b).attr("y",E).attr("width",_).attr("height",L).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");z.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(v),a(v,j,b,E,_,L,N,B),p(z,N)}function p(v,m){for(const b in m)b in m&&v.attr(b,m[b])}return function(v){return v.textPlacement==="fo"?f:v.textPlacement==="old"?i:a}}(),VP={drawRect:Bgt,drawCircle:bjt,drawSection:JVe,drawTex
`,Eu(ba(t,e[0])))>=0;)++e[0]}function kI(t,e){this.e=e,this.a=Fne(t),this.a<54?this.f=Vv(t):this.c=KI(t)}function Gte(t,e,n,r){gi(),vv.call(this,26),this.c=t,this.a=e,this.d=n,this.b=r}function Xd(t,e,n){var r,s;for(r=10,s=0;s<n-1;s++)e<r&&(t.a+="0"),r*=10;t.a+=e}function Ian(t,e){var n;for(n=0;t.e!=t.i.gc();)Ctn(e,dr(t),de(n)),n!=vi&&++n}function Fmt(t,e){var n;for(++t.d,++t.c[e],n=e+1;n<t.a.length;)++t.a[n],n+=n&-n}function Dan(t,e){var n,r,s;s=e.c.i,n=u(Jn(t.f,s),57),r=n.d.c-n.e.c,ayt(e.a,r,0)}function EI(t){var e,n;return e=t+128,n=(YKt(),nEt)[e],!n&&(n=nEt[e]=new Itt(t)),n}function Ur(t,e){var n;return On(e),n=t[":"+e],Ban(!!n,ct(ot(Xn,1),Ie,1,5,[e])),n}function Oan(t){var e,n;if(t.b){n=null;do e=t.b,t.b=null,n=zae(e,n);while(t.b);t.b=n}}function Nan(t){var e,n;if(t.a){n=null;do e=t.a,t.a=null,n=zae(e,n);while(t.a);t.a=n}}function Vte(t){var e;for(++t.a,e=t.c.a.length;t.a<e;++t.a)if(t.c.b[t.a])return}function Pan(t,e){var n,r;for(r=e.c,n=r+1;n<=e.f;n++)t.a[n]>t.a[r]&&(r=n);return r}function Fan(t,e){var n;return n=rw(t.e.c,e.e.c),n==0?Ls(t.e.d,e.e.d):n}function J3(t,e){return e.e==0||t.e==0?QE:(bE(),Zst(t,e))}function Ban(t,e){if(!t)throw rt(new Pn($2n("Enum constant undefined: %s",e)))}function $C(){$C=Z,Abe=new gg,Lbe=new k3,_be=new QK,Sbe=new $b,Mbe=new ZK}function $$(){$$=Z,PEt=new _bt("BY_SIZE",0),Dut=new _bt("BY_SIZE_AND_SHAPE",1)}function z$(){z$=Z,Hut=new Sbt("EADES",0),rG=new Sbt("FRUCHTERMAN_REINGOLD",1)}function TI(){TI=Z,NG=new Ibt("READING_DIRECTION",0),LTt=new Ibt("ROTATION",1)}function Ute(){Ute=Z,f2e=Wr((v2(),ct(ot(ATt,1),ae,335,0,[mlt,STt,ylt,pS,gS])))}function Wte(){Wte=Z,Hwe=Wr((a_(),ct(ot(LCt,1),ae,315,0,[ACt,lht,hht,AS,LS])))}function Kte(){Kte=Z,e2e=Wr((g4(),ct(ot(t2e,1),ae,363,0,[LG,IG,DG,MG,AG])))}function Yte(){Yte=Z,C2e=Wr((hh(),ct(ot(s9t,1),ae,163,0,[CO,yS,fb,xS,Fy])))}function Xte(){Xte=Z,l3e=Wr((iD(),ct(ot(J_t,1),ae,316,0,[X_t,Vht,Z_t,Uht,Q_t])))}function Qte(){Qte=Z,O3e=Wr((Xf(),ct(ot(Qg,1),ae,175,0,[qn,Js,Id,$2,Xg])))}function Zte(){Zte=Z,i3e=Wr((yE(),ct(ot(r3e,1),ae,355,0,[n5,R6,qS,zS,HS])))}function Jte(){Jte=Z,ybe=Wr((Wa(),ct(ot(C7t,1),ae,356,0,[Ad,lb,ou,qc,Io])))}function tee(){tee=Z,r4e=Wr((ao(),ct(ot(WS,1),ae,103,0,[c0,kf,jh,Q0,Z0])))}function eee(){eee=Z,f4e=Wr((c4(),ct(ot(QS,1),ae,249,0,[mb,JO,CAt,XS,_At])))}function nee(){nee=Z,p4e=Wr((be(),ct(ot(Xa,1),xc,61,0,[Zo,Nn,Hn,mr,Bn])))}function Zrt(t,e){var n;return n=u(Jn(t.a,e),134),n||(n=new xa,ki(t.a,e,n)),n}function ree(t){var e;return e=u(Q(t,(se(),Lw)),305),e?e.a==t:!1}function iee(t){var e;return e=u(Q(t,(se(),Lw)),305),e?e.i==t:!1}function see(t,e){return On(e),nwt(t),t.d.Ob()?(e.td(t.d.Pb()),!0):!1}function q$(t){return yc(t,vi)>0?vi:yc(t,_a)<0?_a:Sr(t)}function Qm(t){return t<3?(Bl(t,Jhe),t+1):t<A_?ps(t/.75+1):vi}function yn(t,e){var n;return n=(t.i==null&&pd(t),t.i),e>=0&&e<n.length?n[e]:null}function Wf(t,e,n){var r;if(e==null)throw rt(new L9);return r=D0(t,e),ssn(t,e,n),r}function aee(t){return t.a>=-.01&&t.a<=P1&&(t.a=0),t.b>=-.01&&t.b<=P1&&(t.b=0),t}function oee(t,e){return e==(vnt(),vnt(),Ige)?t.toLocaleLowerCase():t.toLowerCase()}function Bmt(t){return(t.i&2?"interface ":t.i&1?"":"class ")+(L0(t),t.o)}function To(t){var e,n;n=(e=new Wtt,e),Mr((!t.q&&(t.q=new he(Vh,t,11,10)),t.q),n)}function Ran(t,e){var n;return n=e>0?e-1:e,rHt(ZKe(Dee(Pvt(new Yk,n),t.n),t.j),t.k)}function jan(t,e,n,r){var s;t.j=-1,a5t(t,$4t(t,e,n),(to(),s=u(e,66).Mj(),s.Ok(r)))}function cee(t){this.g=t,this.f=new le,this.a=b.Math.min(this.g.c.c,this.g.d.c)}function uee(t){this.b=new le,this.a=new le,this.c=new le,this.d=new le,this.e=t}function lee(t,e){this.a=new Cr,this.e=new Cr,this.b=(YC(),uV),this.c=t,this.b=e}function hee(t,e,n){xj.call(this),Rmt(this),this.a=t,this.c=n,this.b=e.d,this.f=e.e}function fee(t){this.d=t,this.c=t.c.vc().Kc(),this.b=null,this.a=null,this.e=(dR(),mut)}function Kv(t){if(t<0)throw rt(new Pn("Illegal Capacity: "+t));this.g=this.ri(t)}function $an(t,e){if(0>t||t>e)throw rt(new Qpt("fromIndex: 0, toIndex: "+t+jxt+e))}function zan(t){var e;if(t.a==t.b.a)throw rt(new lc);return e=t.a,t.c=e,t.a=t.a.e,e}function H$(t){var
`)}return e&&(e.stack||n(t[jat]))}function b3t(t){Gm();var e;switch(e=t.Pc(),e.length){case 0:return vut;case 1:return new Snt(Ar(e[0]));default:return new ort(oln(e))}}function iw(t,e){switch(e.g){case 1:return Ox(t.j,(Bu(),D7t));case 2:return Ox(t.j,(Bu(),N7t));default:return vn(),vn(),io}}function v3t(t,e){switch(e){case 3:Xv(t,0);return;case 4:Qv(t,0);return;case 5:yu(t,0);return;case 6:xu(t,0);return}Vyt(t,e)}function Vit(){Vit=Z,DR(),oV=(Te(),Bw),jwe=_1(ct(ot(Qht,1),Nkt,146,0,[AO,xf,B6,Fw,Gy,tht,m7,y7,eht,_S,Q4,R2,Z4]))}function cie(t){var e,n;e=t.d==(i6(),a7),n=b4t(t),e&&!n||!e&&n?Jt(t.a,(Te(),Ld),(Qd(),zO)):Jt(t.a,(Te(),Ld),(Qd(),$O))}function $ln(t,e){var n;return n=u(Pl(t,i2(new _e,new we,new nr,ct(ot(ll,1),ae,132,0,[(I1(),Gl)]))),15),n.Qc(DKt(n.gc()))}function Az(){Az=Z,wft=new QR("SIMPLE",0),MAt=new QR("GROUP_DEC",1),DAt=new QR("GROUP_MIXED",2),IAt=new QR("GROUP_INC",3)}function Uit(){Uit=Z,Aft=new eB,eLt=new nB,nLt=new rB,rLt=new Ak,iLt=new iB,sLt=new sB,aLt=new KZ,oLt=new Lk,cLt=new Mk}function uie(t,e,n){vee(),uqt.call(this),this.a=Xb(Xge,[te,Kxt],[595,212],0,[QH,Nut],2),this.c=new Ax,this.g=t,this.f=e,this.d=n}function w3t(t,e){this.n=Xb(Lb,[te,aot],[364,25],14,[e,ps(b.Math.ceil(t/32))],2),this.o=t,this.p=e,this.j=t-1>>1,this.k=e-1>>1}function zln(t,e){wr(e,"End label post-processing",1),us(Ri(Wo(new Tn(null,new _n(t.b,16)),new hY),new fY),new dY),or(e)}function qln(t,e,n){var r,s;return r=Xt(t.p[e.i.p])+Xt(t.d[e.i.p])+e.n.b+e.a.b,s=Xt(t.p[n.i.p])+Xt(t.d[n.i.p])+n.n.b+n.a.b,s-r}function Hln(t,e,n){var r,s;for(r=Ps(n,co),s=0;yc(r,0)!=0&&s<e;s++)r=Oa(r,Ps(t[s],co)),t[s]=Sr(r),r=Fp(r,32);return Sr(r)}function Lz(t){var e,n,r,s;for(s=0,n=0,r=t.length;n<r;n++)e=(Rr(n,t.length),t.charCodeAt(n)),e<64&&(s=C1(s,M0(1,e)));return s}function Gln(t){var e;return t==null?null:new Np((e=$c(t,!0),e.length>0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function Vln(t){var e;return t==null?null:new Np((e=$c(t,!0),e.length>0&&(Rr(0,e.length),e.charCodeAt(0)==43)?e.substr(1):e))}function m3t(t,e){var n;return t.i>0&&(e.length<t.i&&(n=CI(sl(e).c,t.i),e=n),Ic(t.g,0,e,0,t.i)),e.length>t.i&&Ji(e,t.i,null),e}function Qc(t,e,n){var r,s,o;return t.ej()?(r=t.i,o=t.fj(),zI(t,r,e),s=t.Zi(3,null,e,r,o),n?n.Ei(s):n=s):zI(t,t.i,e),n}function Uln(t,e,n){var r,s;return r=new F0(t.e,4,10,(s=e.c,Et(s,88)?u(s,26):(dn(),Wh)),null,Fg(t,e),!1),n?n.Ei(r):n=r,n}function Wln(t,e,n){var r,s;return r=new F0(t.e,3,10,null,(s=e.c,Et(s,88)?u(s,26):(dn(),Wh)),Fg(t,e),!1),n?n.Ei(r):n=r,n}function lie(t){Bm();var e;return e=new yo(u(t.e.We((ci(),a5)),8)),t.B.Hc((cl(),M7))&&(e.a<=0&&(e.a=20),e.b<=0&&(e.b=20)),e}function hie(t){sy();var e;return(t.q?t.q:(vn(),vn(),a0))._b((Te(),Nw))?e=u(Q(t,Nw),197):e=u(Q(Fa(t),CS),197),e}function iy(t,e){var n,r;return r=null,Vs(t,(Te(),sV))&&(n=u(Q(t,sV),94),n.Xe(e)&&(r=n.We(e))),r==null&&(r=Q(Fa(t),e)),r}function fie(t,e){var n,r,s;return Et(e,42)?(n=u(e,42),r=n.cd(),s=ny(t.Rc(),r),fd(s,n.dd())&&(s!=null||t.Rc()._b(r))):!1}function Wit(t,e){var n,r,s;return t.f>0?(t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=fce(t,s,r,e),n!=-1):!1}function Yf(t,e){var n,r,s;return t.f>0&&(t.qj(),r=e==null?0:Hi(e),s=(r&vi)%t.d.length,n=r5t(t,s,r,e),n)?n.dd():null}function VI(t,e){var n,r,s,o;for(o=au(t.e.Tg(),e),n=u(t.g,119),s=0;s<t.i;++s)if(r=n[s],o.rl(r.ak()))return!1;return!0}function die(t){if(t.b==null){for(;t.a.Ob();)if(t.b=t.a.Pb(),!u(t.b,49).Zg())return!0;return t.b=null,!1}else return!0}function gie(t,e){t.mj();try{t.d.Vc(t.e++,e),t.f=t.d.j,t.g=-1}catch(n){throw n=Wi(n),Et(n,73)?rt(new eh):rt(n)}}function Mz(t,e){o2t();var n,r;return n=zM((bR(),bR(),sS)),r=null,e==n&&(r=u(Fc(Q8t,t),615)),r||(r=new ZYt(t),e==n&&xo(Q8t,t,r)),r}function pie(t,e){var n,r;t.a=Oa(t.a,1),t.c=b.Math.min(t.c,e),t.b=b.Math.max(t.b,e),t.d+=e,n=e-t.f,r=t.e+n,t.f=r-t.e-n,t.e=r}function Kln(t,e){var n;t.c=e,t.a=Iln(e),t.a<54&&(t.f=(n=e.d>1?C1(M0(e.a[1],32),Ps(e.a[0],co)):Ps(e.a[0],co),Vv(Ca(e.e,n))))}function UI(t,e){var n;return Bo(t)&&Bo(e)&&(n=t%e,DD<n&&n<x2)?n:Vp((dxt(Bo(t)?Sh(t):t,Bo(e)?Sh(e):e,!0),ob))}function n_(t,e){var n;g4n(e),n=u(Q(t,(T
`;return n.substring(0,r.length)==r&&(n=n.substring(r.length)),n.split(`
`)}return[]}function Ffn(t){var e;return e=(qee(),kge),e[t>>>28]|e[t>>24&15]<<4|e[t>>20&15]<<8|e[t>>16&15]<<12|e[t>>12&15]<<16|e[t>>8&15]<<20|e[t>>4&15]<<24|e[t&15]<<28}function Ase(t){var e,n,r;t.b==t.c&&(r=t.a.length,n=Tyt(b.Math.max(8,r))<<1,t.b!=0?(e=uf(t.a,n),Xee(t,e,r),t.a=e,t.b=0):Yzt(t.a,n),t.c=r)}function Bfn(t,e){var n;return n=t.b,n.Xe((ci(),hl))?n.Hf()==(be(),Bn)?-n.rf().a-Xt(ye(n.We(hl))):e+Xt(ye(n.We(hl))):n.Hf()==(be(),Bn)?-n.rf().a:e}function ZI(t){var e;return t.b.c.length!=0&&u(Fe(t.b,0),70).a?u(Fe(t.b,0),70).a:(e=rrt(t),e??""+(t.c?Ro(t.c.a,t,0):-1))}function Wz(t){var e;return t.f.c.length!=0&&u(Fe(t.f,0),70).a?u(Fe(t.f,0),70).a:(e=rrt(t),e??""+(t.i?Ro(t.i.j,t,0):-1))}function Rfn(t,e){var n,r;if(e<0||e>=t.gc())return null;for(n=e;n<t.gc();++n)if(r=u(t.Xb(n),128),n==t.gc()-1||!r.o)return new la(de(n),r);return null}function jfn(t,e,n){var r,s,o,h,d;for(o=t.c,d=n?e:t,r=n?t:e,s=d.p+1;s<r.p;++s)if(h=u(Fe(o.a,s),10),!(h.k==(Gn(),j1)||d1n(h)))return!1;return!0}function G3t(t){var e,n,r,s,o;for(o=0,s=Ts,r=0,n=new S(t.a);n.a<n.c.c.length;)e=u(J(n),187),o+=e.r+(r>0?t.c:0),s=b.Math.max(s,e.d),++r;t.e=o,t.b=s}function $fn(t){var e,n;if(!t.b)for(t.b=y$(u(t.f,118).Ag().i),n=new er(u(t.f,118).Ag());n.e!=n.i.gc();)e=u(dr(n),137),ue(t.b,new net(e));return t.b}function zfn(t,e){var n,r,s;if(e.dc())return f8(),f8(),lN;for(n=new IWt(t,e.gc()),s=new er(t);s.e!=s.i.gc();)r=dr(s),e.Hc(r)&&Mr(n,r);return n}function V3t(t,e,n,r){return e==0?r?(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),t.o):(!t.o&&(t.o=new Tl((Zc(),Eb),$w,t,0)),fI(t.o)):jz(t,e,n,r)}function mst(t){var e,n;if(t.rb)for(e=0,n=t.rb.i;e<n;++e)FM(St(t.rb,e));if(t.vb)for(e=0,n=t.vb.i;e<n;++e)FM(St(t.vb,e));kC((Ru(),ma),t),t.Bb|=1}function Fi(t,e,n,r,s,o,h,d,w,k,C,M,F,H){return ioe(t,e,r,null,s,o,h,d,w,k,F,!0,H),e3t(t,C),Et(t.Cb,88)&&hy(rl(u(t.Cb,88)),2),n&&eyt(t,n),n3t(t,M),t}function qfn(t){var e,n;if(t==null)return null;n=0;try{n=$l(t,_a,vi)&ms}catch(r){if(r=Wi(r),Et(r,127))e=R$(t),n=e[0];else throw rt(r)}return DI(n)}function Hfn(t){var e,n;if(t==null)return null;n=0;try{n=$l(t,_a,vi)&ms}catch(r){if(r=Wi(r),Et(r,127))e=R$(t),n=e[0];else throw rt(r)}return DI(n)}function Gfn(t,e){var n,r,s;return s=t.h-e.h,s<0||(n=t.l-e.l,r=t.m-e.m+(n>>22),s+=r>>22,s<0)?!1:(t.l=n&ul,t.m=r&ul,t.h=s&W0,!0)}function Vfn(t,e,n,r,s,o,h){var d,w;return!(e.Ae()&&(w=t.a.ue(n,r),w<0||!s&&w==0)||e.Be()&&(d=t.a.ue(n,o),d>0||!h&&d==0))}function Ufn(t,e){J8();var n;if(n=t.j.g-e.j.g,n!=0)return 0;switch(t.j.g){case 2:return qit(e,mTt)-qit(t,mTt);case 4:return qit(t,wTt)-qit(e,wTt)}return 0}function Wfn(t){switch(t.g){case 0:return klt;case 1:return Elt;case 2:return Tlt;case 3:return Clt;case 4:return PG;case 5:return _lt;default:return null}}function Co(t,e,n){var r,s;return r=(s=new Ktt,f2(s,e),Xc(s,n),Mr((!t.c&&(t.c=new he(zw,t,12,10)),t.c),s),s),Ig(r,0),ty(r,1),Pg(r,!0),Ng(r,!0),r}function r6(t,e){var n,r;if(e>=t.i)throw rt(new Vet(e,t.i));return++t.j,n=t.g[e],r=t.i-e-1,r>0&&Ic(t.g,e+1,t.g,e,r),Ji(t.g,--t.i,null),t.fi(e,n),t.ci(),n}function Lse(t,e){var n,r;return t.Db>>16==17?t.Cb.ih(t,21,Gh,e):(r=no(u(yn((n=u(In(t,16),26),n||t.zh()),t.Db>>16),18)),t.Cb.ih(t,r.n,r.f,e))}function Kfn(t){var e,n,r,s;for(vn(),Xs(t.c,t.a),s=new S(t.c);s.a<s.c.c.length;)for(r=J(s),n=new S(t.b);n.a<n.c.c.length;)e=u(J(n),679),e.Ke(r)}function Yfn(t){var e,n,r,s;for(vn(),Xs(t.c,t.a),s=new S(t.c);s.a<s.c.c.length;)for(r=J(s),n=new S(t.b);n.a<n.c.c.length;)e=u(J(n),369),e.Ke(r)}function Xfn(t){var e,n,r,s,o;for(s=vi,o=null,r=new S(t.d);r.a<r.c.c.length;)n=u(J(r),213),n.d.j^n.e.j&&(e=n.e.e-n.d.e-n.a,e<s&&(s=e,o=n));return o}function U3t(){U3t=Z,ube=new mn(h6t,(Fn(),!1)),abe=new mn(f6t,100),v7t=(jC(),Wut),obe=new mn(d6t,v7t),cbe=new mn(g6t,yd),lbe=new mn(p6t,de(vi))}function Mse(t,e,n){var r,s,o,h,d,w,k,C;for(k=0,s=t.a[e],o=0,h=s.length;o<h;++o)for(r=s[o],C=QC(r,n),w=C.Kc();w.Ob();)d=u(w.Pb(),11),ki(t.f,d,de(k++))}function Qfn(t,e,n){var r,s,o,h;if(n)for(s=n.a.length,r=new Qb(s),h=(r.b-r.a)*r.c<0?(Ip(),Ab):new Pp(r);h.Ob();)o=u(h.Pb(),19),ln(t,e,s6(Xm(n,o.a)))}function Zfn(t,e,n){var r,s,o,h;if(n)for(s=n.a.length,r=new Q
\r\f]+`);try{rA=ct(ot(kxn,1),Ie,2015,0,[new oM((o2t(),Mz("yyyy-MM-dd'T'HH:mm:ss'.'SSSZ",zM((bR(),bR(),sS))))),new oM(Mz("yyyy-MM-dd'T'HH:mm:ss'.'SSS",zM(sS))),new oM(Mz("yyyy-MM-dd'T'HH:mm:ss",zM(sS))),new oM(Mz("yyyy-MM-dd'T'HH:mm",zM(sS))),new oM(Mz("yyyy-MM-dd",zM(sS)))])}catch(t){if(t=Wi(t),!Et(t,78))throw rt(t)}}function iyn(t){var e,n,r,s;if(r=Dat((!t.c&&(t.c=jI(t.f)),t.c),0),t.e==0||t.a==0&&t.f!=-1&&t.e<0)return r;if(e=Umt(t)<0?1:0,n=t.e,s=(r.length+1+b.Math.abs(ps(t.e)),new Lm),e==1&&(s.a+="-"),t.e>0)if(n-=r.length-e,n>=0){for(s.a+="0.";n>D2.length;n-=D2.length)tYt(s,D2);FWt(s,D2,ps(n)),Vr(s,r.substr(e))}else n=e-n,Vr(s,Dl(r,e,ps(n))),s.a+=".",Vr(s,OM(r,ps(n)));else{for(Vr(s,r.substr(e));n<-D2.length;n+=D2.length)tYt(s,D2);FWt(s,D2,ps(-n))}return s.a}function cxt(t,e,n,r){var s,o,h,d,w,k,C,M,F;return w=na(new $e(n.a,n.b),t),k=w.a*e.b-w.b*e.a,C=e.a*r.b-e.b*r.a,M=(w.a*r.b-w.b*r.a)/C,F=k/C,C==0?k==0?(s=Li(new $e(n.a,n.b),ud(new $e(r.a,r.b),.5)),o=Hp(t,s),h=Hp(Li(new $e(t.a,t.b),e),s),d=b.Math.sqrt(r.a*r.a+r.b*r.b)*.5,o<h&&o<=d?new $e(t.a,t.b):h<=d?Li(new $e(t.a,t.b),e):null):null:M>=0&&M<=1&&F>=0&&F<=1?Li(new $e(t.a,t.b),ud(new $e(e.a,e.b),M)):null}function syn(t,e,n){var r,s,o,h,d;if(r=u(Q(t,(Te(),Hlt)),21),n.a>e.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),VO))?t.c.b+=(n.b-e.b)/2:r.Hc(GO)&&(t.c.b+=n.b-e.b)),u(Q(t,(se(),Gc)),21).Hc((oo(),bh))&&(n.a>e.a||n.b>e.b))for(d=new S(t.a);d.a<d.c.c.length;)h=u(J(d),10),h.k==(Gn(),xs)&&(s=u(Q(h,oc),61),s==(be(),Hn)?h.n.a+=n.a-e.a:s==mr&&(h.n.b+=n.b-e.b));o=t.d,t.f.a=n.a-o.b-o.c,t.f.b=n.b-o.d-o.a}function ayn(t,e,n){var r,s,o,h,d;if(r=u(Q(t,(Te(),Hlt)),21),n.a>e.a&&(r.Hc((cy(),qO))?t.c.a+=(n.a-e.a)/2:r.Hc(HO)&&(t.c.a+=n.a-e.a)),n.b>e.b&&(r.Hc((cy(),VO))?t.c.b+=(n.b-e.b)/2:r.Hc(GO)&&(t.c.b+=n.b-e.b)),u(Q(t,(se(),Gc)),21).Hc((oo(),bh))&&(n.a>e.a||n.b>e.b))for(h=new S(t.a);h.a<h.c.c.length;)o=u(J(h),10),o.k==(Gn(),xs)&&(s=u(Q(o,oc),61),s==(be(),Hn)?o.n.a+=n.a-e.a:s==mr&&(o.n.b+=n.b-e.b));d=t.d,t.f.a=n.a-d.b-d.c,t.f.b=n.b-d.d-d.a}function oyn(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(e=zoe(t),C=(d=new Tm(e).a.vc().Kc(),new rM(d));C.a.Ob();){for(k=(s=u(C.a.Pb(),42),u(s.cd(),10)),M=0,F=0,M=k.d.d,F=k.o.b+k.d.a,t.d[k.p]=0,n=k;(o=t.a[n.p])!=k;)r=mhn(n,o),w=0,t.c==(dd(),Kg)?w=r.d.n.b+r.d.a.b-r.c.n.b-r.c.a.b:w=r.c.n.b+r.c.a.b-r.d.n.b-r.d.a.b,h=Xt(t.d[n.p])+w,t.d[o.p]=h,M=b.Math.max(M,o.d.d-h),F=b.Math.max(F,h+o.o.b+o.d.a),n=o;n=k;do t.d[n.p]=Xt(t.d[n.p])+M,n=t.a[n.p];while(n!=k);t.b[k.p]=M+F}}function bat(t){var e,n,r,s,o,h,d,w,k,C,M,F;for(t.b=!1,M=ss,w=Ts,F=ss,k=Ts,r=t.e.a.ec().Kc();r.Ob();)for(n=u(r.Pb(),266),s=n.a,M=b.Math.min(M,s.c),w=b.Math.max(w,s.c+s.b),F=b.Math.min(F,s.d),k=b.Math.max(k,s.d+s.a),h=new S(n.c);h.a<h.c.c.length;)o=u(J(h),395),e=o.a,e.a?(C=s.d+o.b.b,d=C+o.c,F=b.Math.min(F,C),k=b.Math.max(k,d)):(C=s.c+o.b.a,d=C+o.c,M=b.Math.min(M,C),w=b.Math.max(w,d));t.a=new $e(w-M,k-F),t.c=new $e(M+t.d.a,F+t.d.b)}function cyn(t,e,n){var r,s,o,h,d,w,k,C,M;for(M=new le,C=new Vwt(0,n),o=0,Y$(C,new xit(0,0,C,n)),s=0,k=new er(t);k.e!=k.i.gc();)w=u(dr(k),33),r=u(Fe(C.a,C.a.c.length-1),187),d=s+w.g+(u(Fe(C.a,0),187).b.c.length==0?0:n),d>e&&(s=0,o+=C.b+n,M.c[M.c.length]=C,C=new Vwt(o,n),r=new xit(0,C.f,C,n),Y$(C,r),s=0),r.b.c.length==0||w.f>=r.o&&w.f<=r.f||r.a*.5<=w.f&&r.a*1.5>=w.f?i3t(r,w):(h=new xit(r.s+r.r+n,C.f,C,n),Y$(C,h),i3t(h,w)),s=w.i+w.g;return M.c[M.c.length]=C,M}function k4(t){var e,n,r,s,o,h,d,w;if(!t.a){if(t.o=null,w=new Mzt(t),e=new mp,n=aA,d=n.a.zc(t,n),d==null){for(h=new er(So(t));h.e!=h.i.gc();)o=u(dr(h),26),rs(w,k4(o));n.a.Bc(t)!=null,n.a.gc()==0}for(s=(!t.s&&(t.s=new he(Au,t,21,17)),new er(t.s));s.e!=s.i.gc();)r=u(dr(s),170),Et(r,322)&&Mr(e,u(r,34));ey(e),t.k=new NKt(t,(u(St(Wt((jp(),Ln).o),7),18),e.i),e.g),rs(w,t.k),ey(w),t.a=new q3((u(St(Wt(Ln.o),4),18),w.i),w.g),rl(t).b&=-2}return t.a}function uyn(t,e,n,r,s,o,h){var d,w,k,C,M,F;return M=!1,w=Mce(n.q,e.f+e.b-n.q.f),F=s-(n.q.e+w-h),F<r.g||(k=o==t.c.length-1&&F>=(An(o,t.c.length),u(t.c[o],200)).e,C=(d=E_(r,F,!1),d.a),C>e.b&&!k)?!1:((k||C<=e.b)&&(k&&C>e.b?(n.d=C,dI(n,Nae(n,C))):(Jse(n.
\r\r `),xo(h5,cut,r),xo(D7,cut,by(r)),r=new Nl(4),WI(r,ege),xo(h5,iS,r),xo(D7,iS,by(r)),r=new Nl(4),WI(r,ege),xo(h5,iS,r),xo(D7,iS,by(r)),r=new Nl(4),WI(r,nge),vy(r,u(Fc(h5,iS),117)),xo(h5,out,r),xo(D7,out,by(r)),r=new Nl(4),WI(r,"-.0:AZ__az··ÀÖØöøıĴľŁňŊžƀǃǍǰǴǵǺȗɐʨʻˁːˑ̀͠͡ͅΆΊΌΌΎΡΣώϐϖϚϚϜϜϞϞϠϠϢϳЁЌЎяёќўҁ҃҆ҐӄӇӈӋӌӐӫӮӵӸӹԱՖՙՙաֆֹֻֽֿֿׁׂ֑֣֡ׄׄאתװײءغـْ٠٩ٰڷںھۀێېۓە۪ۭۨ۰۹ँअह़्॑॔क़ॣ९ঁঃঅঌএঐওনপরললশহ়়াৄেৈো্ৗৗড়ঢ়য়ৣৱਂਂਅਊਏਐਓਨਪਰਲਲ਼ਵਸ਼ਸਹ਼਼ਾੂੇੈੋ੍ਖ਼ੜਫ਼ਫ਼ੴઁઅઋઍઍએઑઓનપરલળવહ઼ૅેૉો્ૠૠ૯ଁଅଌଏଐଓନପରଲଳଶହ଼ୃେୈୋ୍ୖୗଡ଼ଢ଼ୟୡ୯ஂஃஅஊஎஐஒகஙசஜஜஞடணதநபமவஷஹாூெைொ்ௗௗ௧௯ఁఃఅఌఎఐఒనపళవహాౄెైొ్ౕౖౠౡಃಅಌಎಐಒನಪಳವಹಾೄೆೈೊ್ೕೖೞೞೠೡഃഅഌഎഐഒനപഹാൃെൈൊ്ൗൗൠൡ൯กฮะฺเ๎๙ກຂຄຄງຈຊຊຍຍດທນຟມຣລລວວສຫອຮະູົຽເໄໆໆ່ໍ໙༘༙༠༩༹༹༵༵༷༷༾ཇཉཀྵ྄ཱ྆ྋྐྕྗྗྙྭྱྷྐྵྐྵႠჅაჶᄀᄀᄂᄃᄅᄇᄉᄉᄋᄌᄎᄒᄼᄼᄾᄾᅀᅀᅌᅌᅎᅎᅐᅐᅔᅕᅙᅙᅡᅣᅣᅥᅥᅧᅧᅩᅩᅭᅮᅲᅳᅵᅵᆞᆞᆨᆨᆫᆫᆮᆯᆷᆸᆺᆺᆼᇂᇫᇫᇰᇰᇹᇹḀẛẠỹἀἕἘἝἠὅὈὍὐὗὙὙὛὛὝὝὟώᾀᾴᾶᾼῂῄῆῌῐΐῖΊῠῬῲῴῶῼ⃐⃜⃡⃡ΩΩↀↂ々々〡〯〱〵ぁゔ゙゚ゝゞァヺーヾㄅㄬ一龥가힣"),xo(h5,uut,r),xo(D7,uut,by(r)),r=new Nl(4),WI(r,nge),jc(r,95,95),jc(r,58,58),xo(h5,lut,r),xo(D7,lut,by(r))),n=u(Fc(e?h5:D7,t),136),n}function G5n(t){Ir(t.a,Kr,ct(ot(Ae,1),te,2,6,[oi,"anySimpleType"])),Ir(t.b,Kr,ct(ot(Ae,1),te,2,6,[oi,"anyType",Nh,ZD])),Ir(u(St(Wt(t.b),0),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,nut,oi,":mixed"])),Ir(u(St(Wt(t.b),1),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,nut,B8t,iut,oi,":1",z0e,"lax"])),Ir(u(St(Wt(t.b),2),34),Kr,ct(ot(Ae,1),te,2,6,[Nh,B0e,B8t,iut,oi,":2",z0e,"lax"])),Ir(t.c,Kr,ct(ot(Ae,1),te,2,6,[oi,"anyURI",Fh,t1])),Ir(t.d,Kr,ct(ot(Ae,1),te,2,6,[oi,"base64Binary",Fh,t1])),Ir(t.e,Kr,ct(ot(Ae,1),te,2,6,[oi,u6,Fh,t1])),Ir(t.f,Kr,ct(ot(Ae,1),te,2,6,[oi,"boolean:Object",Sa,u6])),Ir(t.g,Kr,ct(ot(Ae,1),te,2,6,[oi,Q_])),Ir(t.i,Kr,ct(ot(Ae,1),te,2,6,[oi,"byte:Object",Sa,Q_])),Ir(t.j,Kr,ct(ot(Ae,1),te,2,6,[oi,"date",Fh,t1])),Ir(t.k,Kr,ct(ot(Ae,1),te,2,6,[oi,"dateTime",Fh,t1])),Ir(t.n,Kr,ct(ot(Ae,1),te,2,6,[oi,"decimal",Fh,t1])),Ir(t.o,Kr,ct(ot(Ae,1),te,2,6,[oi,Z_,Fh,t1])),Ir(t.p,Kr,ct(ot(Ae,1),te,2,6,[oi,"double:Object",Sa,Z_])),Ir(t.q,Kr,ct(ot(Ae,1),te,2,6,[oi,"duration",Fh,t1])),Ir(t.s,Kr,ct(ot(Ae,1),te,2,6,[oi,"ENTITIES",Sa,q0e,R8t,"1"])),Ir(t.r,Kr,ct(ot(Ae,1),te,2,6,[oi,q0e,rut,j8t])),Ir(t.t,Kr,ct(ot(Ae,1),te,2,6,[oi,j8t,Sa,PH])),Ir(t.u,Kr,ct(ot(Ae,1),te,2,6,[oi,J_,Fh,t1])),Ir(t.v,Kr,ct(ot(Ae,1),te,2,6,[oi,"float:Object",Sa,J_])),Ir(t.w,Kr,ct(ot(Ae,1),te,2,6,[oi,"gDay",Fh,t1])),Ir(t.B,Kr,ct(ot(Ae,1),te,2,6,[oi,"gMonth",Fh,t1])),Ir(t.A,Kr,ct(ot(Ae,1),te,2,6,[oi,"gMonthDay",Fh,t1])),Ir(t.C,Kr,ct(ot(Ae,1),te,2,6,[oi,"gYear",Fh,t1])),Ir(t.D,Kr,ct(ot(Ae,1),te,2,6,[oi,"gYearMonth",Fh,t1])),Ir(t.F,Kr,ct(ot(Ae,1),te,2,6,[oi,"hexBinary",Fh,t1])),Ir(t.G,Kr,ct(ot(Ae,1),te,2,6,[oi,"ID",Sa,PH])),Ir(t.H,Kr,ct(ot(Ae,1),te,2,6,[oi,"IDREF",Sa,PH])),Ir(t.J,Kr,ct(ot(Ae,1),te,2,6,[oi,"IDREFS",Sa,H0e,R8t,"1"])),Ir(t.I,Kr,ct(ot(Ae,1),te,2,6,[oi,H0e,rut,"IDREF"])),Ir(t.K,Kr,ct(ot(Ae,1),te,2,6,[oi,tS])),Ir(t.M,Kr,ct(ot(Ae,1),te,2,6,[oi,$8t])),Ir(t.L,Kr,ct(ot(Ae,1),te,2,6,[oi,"int:Object",Sa,tS])),Ir(t.P,Kr,ct(ot(Ae,1),te,2,6,[oi,"language",Sa,sut,aut,G0e])),Ir(t.Q,Kr,ct(ot(Ae,1),te,2,6,[oi,eS])),Ir(t.R,Kr,ct(ot(Ae,1),te,2,6,[oi,"long:Object",Sa,eS])),Ir(t.S,Kr,ct(ot(Ae,1),te,2,6,[oi,"Name",Sa,sut,aut,z8t])),Ir(t.T,Kr,ct(ot(Ae,1),te,2,6,[oi,PH,Sa,"Name
`,Xfe=`)]}"' \r
`,Qfe="The given string contains parts that cannot be parsed as numbers.",qD="org.eclipse.elk.core.math",Zfe={3:1,4:1,142:1,207:1,414:1},Jfe={3:1,4:1,116:1,207:1,414:1},Vn="org.eclipse.elk.layered",qg="org.eclipse.elk.alg.layered.graph.transform",t1e="ElkGraphImporter",e1e="ElkGraphImporter/lambda$0$Type",n1e="ElkGraphImporter/lambda$1$Type",r1e="ElkGraphImporter/lambda$2$Type",i1e="ElkGraphImporter/lambda$4$Type",s1e="Node margin calculation",$n="org.eclipse.elk.alg.layered.intermediate",a1e="ONE_SIDED_GREEDY_SWITCH",o1e="TWO_SIDED_GREEDY_SWITCH",Bot="No implementation is available for the layout processor ",v6t="IntermediateProcessorStrategy",Rot="Node '",c1e="FIRST_SEPARATE",u1e="LAST_SEPARATE",l1e="Odd port side processing",Cs="org.eclipse.elk.alg.layered.intermediate.compaction",R_="org.eclipse.elk.alg.layered.intermediate.greedyswitch",s0="org.eclipse.elk.alg.layered.p3order.counting",HD={225:1},y6="org.eclipse.elk.alg.layered.intermediate.loops",Hl="org.eclipse.elk.alg.layered.intermediate.loops.ordering",ib="org.eclipse.elk.alg.layered.intermediate.loops.routing",j_="org.eclipse.elk.alg.layered.intermediate.preserveorder",kd="org.eclipse.elk.alg.layered.intermediate.wrapping",kc="org.eclipse.elk.alg.layered.options",jot="INTERACTIVE",h1e="DEPTH_FIRST",f1e="EDGE_LENGTH",d1e="SELF_LOOPS",g1e="firstTryWithInitialOrder",w6t="org.eclipse.elk.layered.directionCongruency",m6t="org.eclipse.elk.layered.feedbackEdges",Kq="org.eclipse.elk.layered.interactiveReferencePoint",y6t="org.eclipse.elk.layered.mergeEdges",x6t="org.eclipse.elk.layered.mergeHierarchyEdges",k6t="org.eclipse.elk.layered.allowNonFlowPortsToSwitchSides",E6t="org.eclipse.elk.layered.portSortingStrategy",T6t="org.eclipse.elk.layered.thoroughness",C6t="org.eclipse.elk.layered.unnecessaryBendpoints",_6t="org.eclipse.elk.layered.generatePositionAndLayerIds",$ot="org.eclipse.elk.layered.cycleBreaking.strategy",GD="org.eclipse.elk.layered.layering.strategy",S6t="org.eclipse.elk.layered.layering.layerConstraint",A6t="org.eclipse.elk.layered.layering.layerChoiceConstraint",L6t="org.eclipse.elk.layered.layering.layerId",zot="org.eclipse.elk.layered.layering.minWidth.upperBoundOnWidth",qot="org.eclipse.elk.layered.layering.minWidth.upperLayerEstimationScalingFactor",Hot="org.eclipse.elk.layered.layering.nodePromotion.strategy",Got="org.eclipse.elk.layered.layering.nodePromotion.maxIterations",Vot="org.eclipse.elk.layered.layering.coffmanGraham.layerBound",$_="org.eclipse.elk.layered.crossingMinimization.strategy",M6t="org.eclipse.elk.layered.crossingMinimization.forceNodeModelOrder",Uot="org.eclipse.elk.layered.crossingMinimization.hierarchicalSweepiness",Wot="org.eclipse.elk.layered.crossingMinimization.semiInteractive",I6t="org.eclipse.elk.layered.crossingMinimization.positionChoiceConstraint",D6t="org.eclipse.elk.layered.crossingMinimization.positionId",O6t="org.eclipse.elk.layered.crossingMinimization.greedySwitch.activationThreshold",Kot="org.eclipse.elk.layered.crossingMinimization.greedySwitch.type",Yq="org.eclipse.elk.layered.crossingMinimization.greedySwitchHierarchical.type",M4="org.eclipse.elk.layered.nodePlacement.strategy",Xq="org.eclipse.elk.layered.nodePlacement.favorStraightEdges",Yot="org.eclipse.elk.layered.nodePlacement.bk.edgeStraightening",Xot="org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment",Qot="org.eclipse.elk.layered.nodePlacement.linearSegments.deflectionDampening",Zot="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility",Jot="org.eclipse.elk.layered.nodePlacement.networkSimplex.nodeFlexibility.default",N6t="org.eclipse.elk.layered.edgeRouting.selfLoopDistribution",P6t="org.eclipse.elk.layered.edgeRouting.selfLoopOrdering",Qq="org.eclipse.elk.layered.edgeRouting.splines.mode",Zq="org.eclipse.elk.layered.edgeRouting.splines.sloppy.layerSpacingFactor",tct="org.eclipse.elk.layered.edgeRouting.polyline.slopedEdgeZoneWidth",F6t="org.eclipse.elk.layered.spacing.baseValue",B6t="org.eclipse.elk.layered.spacing.edgeNodeBetweenLayers",R6t="org.eclipse.elk.layered.spacing.edgeEdgeBetweenLayers",j6t="org.eclipse.elk.layered.sp
`,e=de(0),h=0;h<this.p;h++){for(r+=""+e.a,e=de(PWt(e.a)),s=0;s<this.o;s++)n=ait(this,s,h),yc(n,0)==0?r+="_":yc(n,1)==0?r+="X":r+="0";r+=`
`}return Dl(r,0,r.length-1)},l.o=0,l.p=0,P(jq,"TwoBitGrid",1298),I(321,1298,{321:1},w3t),l.j=0,l.k=0,P(jq,"PlanarGrid",321),I(167,321,{321:1,167:1}),l.g=0,l.i=0,P(jq,"Polyomino",167);var oxn=Yi(BD,Nfe);I(134,1,Zxt,xa),l.Ye=function(e,n){return FI(this,e,n)},l.Ve=function(){return rYt(this)},l.We=function(e){return Q(this,e)},l.Xe=function(e){return Vs(this,e)},P(BD,"MapPropertyHolder",134),I(1299,134,Zxt,Fce),P(jq,"Polyominoes",1299);var Lpe=!1,cS,e7t;I(1766,1,Un,xi),l.td=function(e){Nle(u(e,221))},P(p6,"DepthFirstCompaction/0methodref$compactTree$Type",1766),I(810,1,Un,Jr),l.td=function(e){Gen(this.a,u(e,221))},P(p6,"DepthFirstCompaction/lambda$1$Type",810),I(1767,1,Un,bKt),l.td=function(e){ghn(this.a,this.b,this.c,u(e,221))},P(p6,"DepthFirstCompaction/lambda$2$Type",1767);var uS,n7t;I(65,1,{65:1},EQt),P(p6,"Node",65),I(1250,1,{},TUt),P(p6,"ScanlineOverlapCheck",1250),I(1251,1,{679:1},HXt),l.Ke=function(e){SQe(this,u(e,440))},P(p6,"ScanlineOverlapCheck/OverlapsScanlineHandler",1251),I(1252,1,Oi,Wc),l.ue=function(e,n){return Xun(u(e,65),u(n,65))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(p6,"ScanlineOverlapCheck/OverlapsScanlineHandler/lambda$0$Type",1252),I(440,1,{440:1},Tbt),l.a=!1,P(p6,"ScanlineOverlapCheck/Timestamp",440),I(1253,1,Oi,Ce),l.ue=function(e,n){return _1n(u(e,440),u(n,440))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},P(p6,"ScanlineOverlapCheck/lambda$0$Type",1253),I(550,1,{},gp),P(Pfe,"SVGImage",550),I(324,1,{324:1},vvt),l.Ib=function(){return"("+this.a+Ka+this.b+Ka+this.c+")"},P(Pfe,"UniqueTriple",324),I(209,1,E2),P(S4,"AbstractLayoutProvider",209),I(1132,209,E2,Be),l.Ze=function(e,n){var r,s,o,h;switch(wr(n,Ffe,1),this.a=Xt(ye(qe(e,(i_(),c7t)))),r2(e,jut)&&(o=Br(qe(e,jut)),r=sat(z8(),o),r&&(s=u(lrt(r.f),209),s.Ze(e,Rc(n,1)))),h=new jZt(this.a),this.b=p4n(h,e),u(qe(e,(Sit(),i7t)),481).g){case 0:Ipn(new Ff,this.b),bo(e,eG,Q(this.b,eG));break;default:qd()}E4n(h),bo(e,a7t,this.b),or(n)},l.a=0,P(Bfe,"DisCoLayoutProvider",1132),I(1244,1,{},Ff),l.c=!1,l.e=0,l.f=0,P(Bfe,"DisCoPolyominoCompactor",1244),I(561,1,{561:1},cYt),l.b=!0,P(zq,"DCComponent",561),I(394,22,{3:1,35:1,22:1,394:1},jR),l.a=!1;var JH,hO,tG,fO,Mpe=jr(zq,"DCDirection",394,Hr,Lin,bZe),Ipe;I(266,134,{3:1,266:1,94:1,134:1},Vst),P(zq,"DCElement",266),I(395,1,{395:1},q3t),l.c=0,P(zq,"DCExtension",395),I(755,134,Zxt,sHt),P(zq,"DCGraph",755),I(481,22,{3:1,35:1,22:1,481:1},uWt);var Rut,r7t=jr(Sot,Jxt,481,Hr,snn,vZe),Dpe;I(854,1,Ih,IJ),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,t6t),Rfe),"Connected Components Compaction Strategy"),"Strategy for packing different connected components in order to save space and enhance readability of a graph."),s7t),(jg(),cs)),r7t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,e6t),Rfe),"Connected Components Layout Algorithm"),"A layout algorithm that is to be applied to each connected component before the components themselves are compacted. If unspecified, the positions of the components' nodes are not altered."),T7),Ae),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,n6t),"debug"),"DCGraph"),"Access to the DCGraph is intended for the debug view,"),q1),Xn),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,r6t),"debug"),"List of Polyominoes"),"Access to the polyominoes is intended for the debug view,"),q1),Xn),un(qn)))),kle((new LB,e))};var Ope,i7t,s7t,Npe,Ppe;P(Sot,"DisCoMetaDataProvider",854),I(998,1,Ih,LB),l.Qe=function(e){kle(e)};var Fpe,jut,Bpe,a7t,eG,$ut,o7t,Rpe,jpe,$pe,zpe,c7t;P(Sot,"DisCoOptions",998),I(999,1,{},dg),l.$e=function(){var e;return e=new Be,e},l._e=function(e){},P(Sot,"DisCoOptions/DiscoFactory",999),I(562,167,{321:1,167:1,562:1},mce),l.a=0,l.b=0,l.c=0,l.d=0,P("org.eclipse.elk.alg.disco.structures","DCPolyomino",562);var zut,qut,nG;I(1268,1,ui,dm),l.Mb=function(e){return Jbt(e)},P(A4,"ElkGraphComponentsProcessor/lambda$0$Type",1268),I(1269,1,{},pk),l.Kb=function(e){return jx(),Zd(u(e,79))},P(A4,"ElkGraphComponentsProcessor/lambda$1$Type",1269),I(1270,1,ui,x3),l.Mb=function(e){return btn(u(e,79))},P(A4,"ElkGraphCom
start=`,hc(e,this.i),e.a+=`
end=`,hc(e,this.a),e.a+=`
nodeStartEdge=`,hc(e,this.e),e.a+=`
startEndEdge=`,hc(e,this.j),e.a+=`
originalEdge=`,hc(e,this.f),e.a+=`
startInLayerDummy=`,hc(e,this.k),e.a+=`
startInLayerEdge=`,hc(e,this.n),e.a+=`
endInLayerDummy=`,hc(e,this.b),e.a+=`
endInLayerEdge=`,hc(e,this.c),e.a},P(kd,"BreakingPointInserter/BPInfo",305),I(652,1,{652:1},Tp),l.a=!1,l.b=0,l.c=0,P(kd,"BreakingPointInserter/Cut",652),I(1480,1,as,WX),l.pf=function(e,n){Gbn(u(e,37),n)},P(kd,"BreakingPointProcessor",1480),I(1481,1,ui,KX),l.Mb=function(e){return ree(u(e,10))},P(kd,"BreakingPointProcessor/0methodref$isEnd$Type",1481),I(1482,1,ui,YX),l.Mb=function(e){return iee(u(e,10))},P(kd,"BreakingPointProcessor/1methodref$isStart$Type",1482),I(1483,1,as,XX),l.pf=function(e,n){d2n(this,u(e,37),n)},P(kd,"BreakingPointRemover",1483),I(1484,1,Un,QX),l.td=function(e){u(e,128).k=!0},P(kd,"BreakingPointRemover/lambda$0$Type",1484),I(797,1,{},f5t),l.b=0,l.e=0,l.f=0,l.j=0,P(kd,"GraphStats",797),I(798,1,{},OF),l.Ce=function(e,n){return b.Math.max(Xt(ye(e)),Xt(ye(n)))},P(kd,"GraphStats/0methodref$max$Type",798),I(799,1,{},NF),l.Ce=function(e,n){return b.Math.max(Xt(ye(e)),Xt(ye(n)))},P(kd,"GraphStats/2methodref$max$Type",799),I(1660,1,{},ZX),l.Ce=function(e,n){return ZJe(ye(e),ye(n))},P(kd,"GraphStats/lambda$1$Type",1660),I(1661,1,{},_9),l.Kb=function(e){return Uie(this.a,u(e,29))},P(kd,"GraphStats/lambda$2$Type",1661),I(1662,1,{},rR),l.Kb=function(e){return Sce(this.a,u(e,29))},P(kd,"GraphStats/lambda$6$Type",1662),I(800,1,{},PF),l.Vf=function(e,n){var r;return r=u(Q(e,(Te(),bCt)),15),r||(vn(),vn(),io)},l.Wf=function(){return!1},P(kd,"ICutIndexCalculator/ManualCutIndexCalculator",800),I(802,1,{},FF),l.Vf=function(e,n){var r,s,o,h,d,w,k,C,M,F,H,V,Y,tt,gt,Lt,_t,Bt,Yt;for(Yt=(n.n==null&&bse(n),n.n),k=(n.d==null&&bse(n),n.d),Bt=Pt(ia,vo,25,Yt.length,15,1),Bt[0]=Yt[0],Lt=Yt[0],C=1;C<Yt.length;C++)Bt[C]=Bt[C-1]+Yt[C],Lt+=Yt[C];for(o=Dae(n)-1,d=u(Q(e,(Te(),vCt)),19).a,s=Ts,r=new le,H=b.Math.max(0,o-d);H<=b.Math.min(n.f-1,o+d);H++){if(tt=Lt/(H+1),gt=0,M=1,h=new le,_t=Ts,F=0,w=0,Y=k[0],H==0)_t=Lt,w=(n.g==null&&(n.g=une(n,new NF)),Xt(n.g));else{for(;M<n.f;)Bt[M-1]-gt>=tt&&(ue(h,de(M)),_t=b.Math.max(_t,Bt[M-1]-F),w+=Y,gt+=Bt[M-1]-gt,F=Bt[M-1],Y=k[M]),Y=b.Math.max(Y,k[M]),++M;w+=Y}V=b.Math.min(1/_t,1/n.b/w),V>s&&(s=V,r=h)}return r},l.Wf=function(){return!1},P(kd,"MSDCutIndexHeuristic",802),I(1617,1,as,JX),l.pf=function(e,n){jmn(u(e,37),n)},P(kd,"SingleEdgeGraphWrapper",1617),I(227,22,{3:1,35:1,22:1,227:1},Y9);var q4,a7,o7,Oy,dS,H4,c7=jr(kc,"CenterEdgeLabelPlacementStrategy",227,Hr,Xsn,AZe),c2e;I(422,22,{3:1,35:1,22:1,422:1},Mbt);var xTt,vlt,kTt=jr(kc,"ConstraintCalculationStrategy",422,Hr,$nn,LZe),u2e;I(314,22,{3:1,35:1,22:1,314:1,246:1,234:1},ket),l.Kf=function(){return moe(this)},l.Xf=function(){return moe(this)};var wO,S6,ETt,TTt=jr(kc,"CrossingMinimizationStrategy",314,Hr,Drn,MZe),l2e;I(337,22,{3:1,35:1,22:1,337:1},Eet);var CTt,wlt,OG,_Tt=jr(kc,"CuttingStrategy",337,Hr,Orn,OZe),h2e;I(335,22,{3:1,35:1,22:1,335:1,246:1,234:1},EM),l.Kf=function(){return sce(this)},l.Xf=function(){return sce(this)};var STt,mlt,gS,ylt,pS,ATt=jr(kc,"CycleBreakingStrategy",335,Hr,ksn,NZe),f2e;I(419,22,{3:1,35:1,22:1,419:1},Ibt);var NG,LTt,MTt=jr(kc,"DirectionCongruency",419,Hr,jnn,PZe),d2e;I(450,22,{3:1,35:1,22:1,450:1},Tet);var u7,xlt,G4,g2e=jr(kc,"EdgeConstraint",450,Hr,Nrn,FZe),p2e;I(276,22,{3:1,35:1,22:1,276:1},X9);var klt,Elt,Tlt,Clt,PG,_lt,ITt=jr(kc,"EdgeLabelSideSelection",276,Hr,tan,BZe),b2e;I(479,22,{3:1,35:1,22:1,479:1},Dbt);var FG,DTt,OTt=jr(kc,"EdgeStraighteningStrategy",479,Hr,Rnn,RZe),v2e;I(274,22,{3:1,35:1,22:1,274:1},Q9);var Slt,NTt,PTt,BG,FTt,BTt,RTt=jr(kc,"FixedAlignment",274,Hr,Zsn,jZe),w2e;I(275,22,{3:1,35:1,22:1,275:1},Z9);var jTt,$Tt,zTt,qTt,bS,HTt,GTt=jr(kc,"GraphCompactionStrategy",275,Hr,Qsn,$Ze),m2e;I(256,22,{3:1,35:1,22:1,256:1},Dm);var l7,RG,h7,bh,vS,jG,f7,V4,$G,wS,Alt=jr(kc,"GraphProperties",256,Hr,jon,zZe),y2e;I(292,22,{3:1,35:1,22:1,292:1},Cet);var mO,Llt,Mlt,Ilt=jr(kc,"GreedySwitchType",292,Hr,Brn,qZe),x2e;I(303,22,{3:1,35:1,22:1,303:1},_et);var A6,yO,U4,k2e=jr(kc,"InLayerConstraint",303,Hr,Frn,HZe),E2e;I(420,22,{3:1,35:1,22:1,420:1},Obt);var Dlt,VTt,UTt=jr(kc,"InteractiveReferencePoint",420,Hr,znn,GZe),T2e,WTt,L6,Lw,zG,KTt,YTt,qG,XTt,xO,HG,mS,M6,Ny,Olt,GG,oc,QTt,Mw,Gc,Nlt,Plt,kO,O2,Iw,I6,ZTt,D6,EO,Py,n1,Rh,F
`;for(n=ei(this.a,0);n.b!=n.d.c;)e=u(ti(n),188),o+=(e.b&&e.c?b$(e.b)+"->"+b$(e.c):"e_"+Hi(e))+`
`;return o};var pxn=P(H_,"TGraph",135);I(633,502,{3:1,502:1,633:1,94:1,134:1}),P(H_,"TShape",633),I(86,633,{3:1,502:1,86:1,633:1,94:1,134:1},yit),l.Ib=function(){return b$(this)};var bxn=P(H_,"TNode",86);I(255,1,t0,Cp),l.Jc=function(e){va(this,e)},l.Kc=function(){var e;return e=ei(this.a.d,0),new bx(e)},P(H_,"TNode/2",255),I(358,1,ra,bx),l.Nb=function(e){pa(this,e)},l.Pb=function(){return u(ti(this.a),188).c},l.Ob=function(){return kR(this.a)},l.Qb=function(){H$(this.a)},P(H_,"TNode/2/1",358),I(1840,1,as,GWt),l.pf=function(e,n){Smn(this,u(e,135),n)},P(x6,"FanProcessor",1840),I(327,22,{3:1,35:1,22:1,327:1,234:1},tC),l.Kf=function(){switch(this.g){case 0:return new Mqt;case 1:return new GWt;case 2:return new Q5;case 3:return new UQ;case 4:return new KQ;case 5:return new OL;default:throw rt(new Pn(Bot+(this.f!=null?this.f:""+this.g)))}};var xht,kht,Eht,Tht,Cht,wV,Xme=jr(x6,v6t,327,Hr,ean,fJe),Qme;I(1843,1,as,UQ),l.pf=function(e,n){ubn(this,u(e,135),n)},l.a=0,P(x6,"LevelHeightProcessor",1843),I(1844,1,t0,WQ),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(x6,"LevelHeightProcessor/1",1844),I(1841,1,as,Q5),l.pf=function(e,n){bgn(this,u(e,135),n)},l.a=0,P(x6,"NeighborsProcessor",1841),I(1842,1,t0,$F),l.Jc=function(e){va(this,e)},l.Kc=function(){return vn(),r8(),ZE},P(x6,"NeighborsProcessor/1",1842),I(1845,1,as,KQ),l.pf=function(e,n){cbn(this,u(e,135),n)},l.a=0,P(x6,"NodePositionProcessor",1845),I(1839,1,as,Mqt),l.pf=function(e,n){Nyn(this,u(e,135))},P(x6,"RootProcessor",1839),I(1846,1,as,OL),l.pf=function(e,n){Hun(u(e,135))},P(x6,"Untreeifyer",1846);var FO,BS,Zme,_ht,mV,RS,Sht,yV,xV,k7,jS,kV,Yg,JCt,Jme,Aht,Wy,Lht,t_t;I(851,1,Ih,L3),l.Qe=function(e){an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Fkt),""),"Weighting of Nodes"),"Which weighting to use when computing a node order."),n_t),(jg(),cs)),u_t),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,Bkt),""),"Search Order"),"Which search order to use when computing a spanning tree."),e_t),cs),h_t),un(qn)))),Zle((new KL,e))};var tye,e_t,eye,n_t;P(fH,"MrTreeMetaDataProvider",851),I(994,1,Ih,KL),l.Qe=function(e){Zle(e)};var nye,r_t,rye,iye,sye,aye,i_t,oye,s_t,cye,EV,a_t,uye,o_t,lye;P(fH,"MrTreeOptions",994),I(995,1,{},YQ),l.$e=function(){var e;return e=new VWt,e},l._e=function(e){},P(fH,"MrTreeOptions/MrtreeFactory",995),I(480,22,{3:1,35:1,22:1,480:1},zbt);var Mht,c_t,u_t=jr(fH,"OrderWeighting",480,Hr,Ynn,dJe),hye;I(425,22,{3:1,35:1,22:1,425:1},qbt);var l_t,Iht,h_t=jr(fH,"TreeifyingOrder",425,Hr,Knn,pJe),fye;I(1459,1,zc,WL),l.Yf=function(e){return u(e,135),dye},l.pf=function(e,n){qon(this,u(e,135),n)};var dye;P("org.eclipse.elk.alg.mrtree.p1treeify","DFSTreeifyer",1459),I(1460,1,zc,QJ),l.Yf=function(e){return u(e,135),gye},l.pf=function(e,n){_gn(this,u(e,135),n)};var gye;P("org.eclipse.elk.alg.mrtree.p2order","NodeOrderer",1460),I(1461,1,zc,XJ),l.Yf=function(e){return u(e,135),pye},l.pf=function(e,n){Hvn(this,u(e,135),n)},l.a=0;var pye;P("org.eclipse.elk.alg.mrtree.p3place","NodePlacer",1461),I(1462,1,zc,NB),l.Yf=function(e){return u(e,135),bye},l.pf=function(e,n){p1n(u(e,135),n)};var bye;P("org.eclipse.elk.alg.mrtree.p4route","EdgeRouter",1462);var $S;I(495,22,{3:1,35:1,22:1,495:1,246:1,234:1},Hbt),l.Kf=function(){return iie(this)},l.Xf=function(){return iie(this)};var TV,E7,f_t=jr(Rkt,"RadialLayoutPhases",495,Hr,Xnn,gJe),vye;I(1131,209,E2,THt),l.Ze=function(e,n){var r,s,o,h,d,w;if(r=ooe(this,e),wr(n,"Radial layout",r.c.length),je(Re(qe(e,(ay(),k_t))))||u$((s=new rr((Im(),new Sm(e))),s)),w=Ddn(e),bo(e,(bC(),$S),w),!w)throw rt(new Pn("The given graph is not a tree!"));for(o=Xt(ye(qe(e,SV))),o==0&&(o=xoe(e)),bo(e,SV,o),d=new S(ooe(this,e));d.a<d.c.c.length;)h=u(J(d),51),h.pf(e,Rc(n,1));or(n)},P(Rkt,"RadialLayoutProvider",1131),I(549,1,Oi,ER),l.ue=function(e,n){return iwn(this.a,this.b,u(e,33),u(n,33))},l.Fb=function(e){return this===e},l.ve=function(){return new ft(this)},l.a=0,l.b=0,P(Rkt,"RadialUtil/lambda$0$Type",549),I(1375,1,as,QQ),l.pf=function(e,n){E3n(u(e,33),n)},P(O1e,"CalculateGraphSize",1375),I(442,22,{3:1,35:1,22:1,442:1,234:1},Fet),l.Kf=functi
`),o.length!=2)throw rt(new Pn("Exactly two numbers are expected, "+o.length+" were found."));try{this.a=ly(uy(o[0])),this.b=ly(uy(o[1]))}catch(h){throw h=Wi(h),Et(h,127)?(r=h,rt(new Pn(Qfe+r))):rt(h)}},l.Ib=function(){return"("+this.a+","+this.b+")"},l.a=0,l.b=0;var Us=P(qD,"KVector",8);I(74,68,{3:1,4:1,20:1,28:1,52:1,14:1,68:1,15:1,74:1,414:1},Du,yR,dWt),l.Pc=function(){return eun(this)},l.Jf=function(e){var n,r,s,o,h,d;s=py(e,`,|;|\\(|\\)|\\[|\\]|\\{|\\}| | |
`),_h(this);try{for(r=0,h=0,o=0,d=0;r<s.length;)s[r]!=null&&uy(s[r]).length>0&&(h%2==0?o=ly(s[r]):d=ly(s[r]),h>0&&h%2!=0&&ni(this,new $e(o,d)),++h),++r}catch(w){throw w=Wi(w),Et(w,127)?(n=w,rt(new Pn("The given string does not match the expected format for vectors."+n))):rt(w)}},l.Ib=function(){var e,n,r;for(e=new Il("("),n=ei(this,0);n.b!=n.d.c;)r=u(ti(n),8),Vr(e,r.a+","+r.b),n.b!=n.d.c&&(e.a+="; ");return(e.a+=")",e).a};var xSt=P(qD,"KVectorChain",74);I(248,22,{3:1,35:1,22:1,248:1},eC);var Zht,NV,PV,$O,zO,FV,kSt=jr(Oh,"Alignment",248,Hr,Ysn,DJe),F3e;I(979,1,Ih,ttt),l.Qe=function(e){Wue(e)};var ESt,Jht,B3e,TSt,CSt,R3e,_St,j3e,$3e,SSt,ASt,z3e;P(Oh,"BoxLayouterOptions",979),I(980,1,{},IZ),l.$e=function(){var e;return e=new BZ,e},l._e=function(e){},P(Oh,"BoxLayouterOptions/BoxFactory",980),I(291,22,{3:1,35:1,22:1,291:1},nC);var qO,tft,HO,GO,VO,eft,nft=jr(Oh,"ContentAlignment",291,Hr,Ksn,OJe),q3e;I(684,1,Ih,yp),l.Qe=function(e){an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,U1e),""),"Layout Algorithm"),"Select a specific layout algorithm."),(jg(),T7)),Ae),un((Xf(),qn))))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,W1e),""),"Resolved Layout Algorithm"),"Meta data associated with the selected algorithm."),q1),mxn),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gkt),""),"Alignment"),"Alignment of the selected node relative to other nodes; the exact meaning depends on the used algorithm."),LSt),cs),kSt),un(Js)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,b6),""),"Aspect Ratio"),"The desired aspect ratio of the drawing, that is the quotient of width by height."),Do),ca),un(qn)))),an(e,new Xe(rn(nn(sn(Ze(en(Je(tn(new Ue,c8t),""),"Bend Points"),"A fixed list of bend points for the edge. This is used by the 'Fixed Layout' algorithm to specify a pre-defined routing for an edge. The vector chain must include the source point, any bend points, and the target point, so it must have at least two points."),q1),xSt),un(Id)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,cH),""),"Content Alignment"),"Specifies how the content of a node are aligned. Each node can individually control the alignment of its contents. I.e. if a node should be aligned top left in its parent node, the parent node should specify that option."),ISt),j6),nft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,KD),""),"Debug Mode"),"Whether additional debug information shall be generated."),(Fn(),!1)),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,vkt),""),Qxt),"Overall direction of edges: horizontal (right / left) or vertical (down / up)."),DSt),cs),WS),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,UD),""),"Edge Routing"),"What kind of edge routing style should be applied for the content of a parent node. Algorithms may also set this option to single edges in order to mark them as splines. The bend point list of edges with this option set to SPLINES must be interpreted as control points for a piecewise cubic spline."),PSt),cs),pft),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,gH),""),"Expand Nodes"),"If active, nodes are expanded to fill the area of their parent."),!1),Aa),Bs),un(qn)))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,oH),""),"Hierarchy Handling"),"Determines whether separate layout runs are triggered for different compound nodes in a hierarchical graph. Setting a node's hierarchy handling to `INCLUDE_CHILDREN` will lay out that node and all of its descendants in a single layout run, until a descendant is encountered which has its hierarchy handling set to `SEPARATE_CHILDREN`. In general, `SEPARATE_CHILDREN` will ensure that a new layout run is triggered for a node with that setting. Including multiple levels of hierarchy in a single layout run may allow cross-hierarchical edges to be laid out properly. If the root node is set to `INHERIT` (or not set at all), the default behavior is `SEPARATE_CHILDREN`."),jSt),cs),TAt),ji(qn,ct(ot(Qg,1),ae,175,0,[Js]))))),an(e,new Xe(rn(nn(sn(kn(Ze(en(Je(tn(new Ue,ww),""),"Padding"),"The padding to be left to a parent element's border when placing child elements. This can also serve as an output o
Consider installing the package or pass your own 'workerFactory' to ELK's constructor.
... Falling back to non-web worker version.`);if(!R.workerFactory){var it=f("./elk-worker.min.js"),st=it.Worker;R.workerFactory=function(ut){return new st(ut)}}return b(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,R))}return B}(_);Object.defineProperty(p.exports,"__esModule",{value:!0}),p.exports=L,L.default=L},{"./elk-api.js":1,"./elk-worker.min.js":2,"web-worker":4}],4:[function(f,p,v){p.exports=Worker},{}]},{},[3])(3)})})(kjt);var cUe=kjt.exports;const uUe=B7(cUe),Ejt=new uUe;let iv={};const lUe={};let P5={};const hUe=async function(i,a,f,p,v,m,b){const _=f.select(`[id="${a}"]`).insert("g").attr("class","nodes"),L=Object.keys(i);return await Promise.all(L.map(async function(N){const B=i[N];let j="default";B.classes.length>0&&(j=B.classes.join(" ")),j=j+" flowchart-label";const R=em(B.styles);let z=B.text!==void 0?B.text:B.id;const K={width:0,height:0},it=[{id:B.id+"-west",layoutOptions:{"port.side":"WEST"}},{id:B.id+"-east",layoutOptions:{"port.side":"EAST"}},{id:B.id+"-south",layoutOptions:{"port.side":"SOUTH"}},{id:B.id+"-north",layoutOptions:{"port.side":"NORTH"}}];let st=0,ut="",bt={};switch(B.type){case"round":st=5,ut="rect";break;case"square":ut="rect";break;case"diamond":ut="question",bt={portConstraints:"FIXED_SIDE"};break;case"hexagon":ut="hexagon";break;case"odd":ut="rect_left_inv_arrow";break;case"lean_right":ut="lean_right";break;case"lean_left":ut="lean_left";break;case"trapezoid":ut="trapezoid";break;case"inv_trapezoid":ut="inv_trapezoid";break;case"odd_right":ut="rect_left_inv_arrow";break;case"circle":ut="circle";break;case"ellipse":ut="ellipse";break;case"stadium":ut="stadium";break;case"subroutine":ut="subroutine";break;case"cylinder":ut="cylinder";break;case"group":ut="rect";break;case"doublecircle":ut="doublecircle";break;default:ut="rect"}const mt={labelStyle:R.labelStyle,shape:ut,labelText:z,labelType:B.labelType,rx:st,ry:st,class:j,style:R.style,id:B.id,link:B.link,linkTarget:B.linkTarget,tooltip:v.db.getTooltip(B.id)||"",domId:v.db.lookUpDomId(B.id),haveCallback:B.haveCallback,width:B.type==="group"?500:void 0,dir:B.dir,type:B.type,props:B.props,padding:Le().flowchart.padding};let yt,dt;if(mt.type!=="group")dt=await xBt(_,mt,B.dir),yt=dt.node().getBBox();else{p.createElementNS("http://www.w3.org/2000/svg","text");const{shapeSvg:wt,bbox:X}=await Od(_,mt,void 0,!0);K.width=X.width,K.wrappingWidth=Le().flowchart.wrappingWidth,K.height=X.height,K.labelNode=wt.node(),mt.labelData=K}const ht={id:B.id,ports:B.type==="diamond"?it:[],layoutOptions:bt,labelText:z,labelData:K,domId:v.db.lookUpDomId(B.id),width:yt==null?void 0:yt.width,height:yt==null?void 0:yt.height,type:B.type,el:dt,parent:m.parentById[B.id]};P5[mt.id]=ht})),b},Tjt=(i,a,f)=>{const p={TB:{in:{north:"north"},out:{south:"west",west:"east",east:"south"}},LR:{in:{west:"west"},out:{east:"south",south:"north",north:"east"}},RL:{in:{east:"east"},out:{west:"north",north:"south",south:"west"}},BT:{in:{south:"south"},out:{north:"east",east:"west",west:"north"}}};return p.TD=p.TB,Ut.info("abc88",f,a,i),p[f][a][i]},Cjt=(i,a,f)=>{if(Ut.info("getNextPort abc88",{node:i,edgeDirection:a,graphDirection:f}),!iv[i])switch(f){case"TB":case"TD":iv[i]={inPosition:"north",outPosition:"south"};break;case"BT":iv[i]={inPosition:"south",outPosition:"north"};break;case"RL":iv[i]={inPosition:"east",outPosition:"west"};break;case"LR":iv[i]={inPosition:"west",outPosition:"east"};break}const p=a==="in"?iv[i].inPosition:iv[i].outPosition;return a==="in"?iv[i].inPosition=Tjt(iv[i].inPosition,a,f):iv[i].outPosition=Tjt(iv[i].outPosition,a,f),p},fUe=(i,a)=>{let f=i.start,p=i.end;const v=f,m=p,b=P5[f],E=P5[p];return!b||!E?{source:f,target:p}:(b.type==="diamond"&&(f=`${f}-${Cjt(f,"out",a)}`),E.type==="diamond"&&(p=`${p}-${Cjt(p,"in",a)}`),{source:f,target:p,sourceId:v,targetId:m})},dUe=function(i,a,f,p){Ut.info("abc78 edges = ",i);const v=p.insert("g").attr("class","edgeLabels");let m={},b=a.db.getDirection(),E,_;if(i.defaultStyle!==void 0){const L=em(i.defaultStyle);E=L.style,_=L.labelStyle}return i.forEach(function(L){const N="L-"+L.start+"-"+L.end;m[N]===void 0
`),L.style===void 0&&(z.style=z.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),z.labelStyle=z.labelStyle.replace("color:","fill:"),z.id=B,z.classes="flowchart-link "+j+" "+R;const st=CBt(v,z),{source:ut,target:bt,sourceId:mt,targetId:yt}=fUe(L,b);Ut.debug("abc78 source and target",ut,bt),f.edges.push({id:"e"+L.start+L.end,sources:[ut],targets:[bt],sourceId:mt,targetId:yt,labelEl:st,labels:[{width:z.width,height:z.height,orgWidth:z.width,orgHeight:z.height,text:z.label,layoutOptions:{"edgeLabels.inline":"true","edgeLabels.placement":"CENTER"}}],edgeData:z})}),f},gUe=function(i,a,f,p,v){let m="";switch(p&&(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,m=m.replace(/\(/g,"\\("),m=m.replace(/\)/g,"\\)")),a.arrowTypeStart){case"arrow_cross":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-crossStart)");break;case"arrow_point":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-pointStart)");break;case"arrow_barb":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-barbStart)");break;case"arrow_circle":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-circleStart)");break;case"aggregation":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-aggregationStart)");break;case"extension":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-extensionStart)");break;case"composition":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-compositionStart)");break;case"dependency":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-dependencyStart)");break;case"lollipop":i.attr("marker-start","url("+m+"#"+v+"_"+f+"-lollipopStart)");break}switch(a.arrowTypeEnd){case"arrow_cross":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-crossEnd)");break;case"arrow_point":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-pointEnd)");break;case"arrow_barb":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-barbEnd)");break;case"arrow_circle":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-circleEnd)");break;case"aggregation":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-aggregationEnd)");break;case"extension":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-extensionEnd)");break;case"composition":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-compositionEnd)");break;case"dependency":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-dependencyEnd)");break;case"lollipop":i.attr("marker-end","url("+m+"#"+v+"_"+f+"-lollipopEnd)");break}},pUe=function(i,a){return Ut.info("Extracting classes"),a.db.getClasses()},bUe=function(i){const a={parentById:{},childrenById:{}},f=i.getSubGraphs();return Ut.info("Subgraphs - ",f),f.forEach(function(p){p.nodes.forEach(function(v){a.parentById[v]=p.id,a.childrenById[p.id]===void 0&&(a.childrenById[p.id]=[]),a.childrenById[p.id].push(v)})}),f.forEach(function(p){p.id,a.parentById[p.id]!==void 0&&a.parentById[p.id]}),a},vUe=function(i,a,f){const p=oUe(i,a,f);if(p===void 0||p==="root")return{x:0,y:0};const v=P5[p].offset;return{x:v.posX,y:v.posY}},wUe=function(i,a,f,p,v,m){const b=vUe(a.sourceId,a.targetId,v),E=a.sections[0].startPoint,_=a.sections[0].endPoint,N=(a.sections[0].bendPoints?a.sections[0].bendPoints:[]).map(bt=>[bt.x+b.x,bt.y+b.y]),B=[[E.x+b.x,E.y+b.y],...N,[_.x+b.x,_.y+b.y]],{x:j,y:R}=TBt(a.edgeData),z=Z7().x(j).y(R).curve(ig),K=i.insert("path").attr("d",z(B)).attr("class","path "+f.classes).attr("fill","none"),it=i.insert("g").attr("class","edgeLabel"),st=yr(it.node().appendChild(a.labelEl)),ut=st.node().firstChild.getBoundingClientRect();st.attr("width",ut.width),st.attr("height",ut.height),it.attr("transform",`translate(${a.labels[0].x+b.x}, ${a.labels[0].y+b.y})`),gUe(K,f,p.type,p.arrowMarkerAbsolute,m)},_jt=(i,a)=>{i.forEach(f=>{f.children||(f.children=[]);const p=a.childrenById[f.id];p&&p.forEach(v=>{f.children.push(P5[v])}),_jt(f.children,a)})},mUe=async function(i,a,f,p){var ht;p.db.clear(),P5={},iv={},p.db.setGen("gen-2"),p.parser.parse(i);const v=yr("body").append("div").attr("style","height:400px").attr("id","cy");let m={id:"root",layoutOptions:{"elk.hierarchyHandling":"INCLUDE_CHILDREN","org.eclipse.elk.padding":"[top=100, left=100, bottom=110, right=110]","elk.layered.spacing.edgeNodeBetweenLayers":"30","elk.direction":"DOWN"},chil
.subgraph-lvl-${f} {
fill: ${i[`surface${f}`]};
stroke: ${i[`surfacePeer${f}`]};
}
`;return a},kUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:jIe,renderer:yUe,parser:$dt,styles:i=>`.label {
font-family: ${i.fontFamily};
color: ${i.nodeTextColor||i.textColor};
}
.cluster-label text {
fill: ${i.titleColor};
}
.cluster-label span {
color: ${i.titleColor};
}
.label text,span {
fill: ${i.nodeTextColor||i.textColor};
color: ${i.nodeTextColor||i.textColor};
}
.node rect,
.node circle,
.node ellipse,
.node polygon,
.node path {
fill: ${i.mainBkg};
stroke: ${i.nodeBorder};
stroke-width: 1px;
}
.node .label {
text-align: center;
}
.node.clickable {
cursor: pointer;
}
.arrowheadPath {
fill: ${i.arrowheadColor};
}
.edgePath .path {
stroke: ${i.lineColor};
stroke-width: 2.0px;
}
.flowchart-link {
stroke: ${i.lineColor};
fill: none;
}
.edgeLabel {
background-color: ${i.edgeLabelBackground};
rect {
opacity: 0.85;
background-color: ${i.edgeLabelBackground};
fill: ${i.edgeLabelBackground};
}
text-align: center;
}
.cluster rect {
fill: ${i.clusterBkg};
stroke: ${i.clusterBorder};
stroke-width: 1px;
}
.cluster text {
fill: ${i.titleColor};
}
.cluster span {
color: ${i.titleColor};
}
/* .cluster div {
color: ${i.titleColor};
} */
div.mermaidTooltip {
position: absolute;
text-align: center;
max-width: 200px;
padding: 2px;
font-family: ${i.fontFamily};
font-size: 12px;
background: ${i.tertiaryColor};
border: 1px solid ${i.border2};
border-radius: 2px;
pointer-events: none;
z-index: 100;
}
.flowchartTitleText {
text-anchor: middle;
font-size: 18px;
fill: ${i.textColor};
}
.subgraph {
stroke-width:2;
rx:3;
}
// .subgraph-lvl-1 {
// fill:#ccc;
// // stroke:black;
// }
.flowchart-label text {
text-anchor: middle;
}
${xUe(i)}
`}},Symbol.toStringTag,{value:"Module"}));var jgt=function(){var i=function(j,R,z,K){for(z=z||{},K=j.length;K--;z[j[K]]=R);return z},a=[6,8,10,11,12,14,16,17,20,21],f=[1,9],p=[1,10],v=[1,11],m=[1,12],b=[1,13],E=[1,16],_=[1,17],L={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(R,z,K,it,st,ut,bt){var mt=ut.length-1;switch(st){case 1:return ut[mt-1];case 2:this.$=[];break;case 3:ut[mt-1].push(ut[mt]),this.$=ut[mt-1];break;case 4:case 5:this.$=ut[mt];break;case 6:case 7:this.$=[];break;case 8:it.getCommonDb().setDiagramTitle(ut[mt].substr(6)),this.$=ut[mt].substr(6);break;case 9:this.$=ut[mt].trim(),it.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=ut[mt].trim(),it.getCommonDb().setAccDescription(this.$);break;case 12:it.addSection(ut[mt].substr(8)),this.$=ut[mt].substr(8);break;case 15:it.addTask(ut[mt],0,""),this.$=ut[mt];break;case 16:it.addEvent(ut[mt].substr(2)),this.$=ut[mt];break}},table:[{3:1,4:[1,2]},{1:[3]},i(a,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:f,12:p,14:v,16:m,17:b,18:14,19:15,20:E,21:_},i(a,[2,7],{1:[2,1]}),i(a,[2,3]),{9:18,11:f,12:p,14:v,16:m,17:b,18:14,19:15,20:E,21:_},i(a,[2,5]),i(a,[2,6]),i(a,[2,8]),{13:[1,19]},{15:[1,20]},i(a,[2,11]),i(a,[2,12]),i(a,[2,13]),i(a,[2,14]),i(a,[2,15]),i(a,[2,16]),i(a,[2,4]),i(a,[2,9]),i(a,[2,10])],defaultActions:{},parseError:function(R,z){if(z.recoverable)this.trace(R);else{var K=new Error(R);throw K.hash=z,K}},parse:function(R){var z=this,K=[0],it=[],st=[null],ut=[],bt=this.table,mt="",yt=0,dt=0,ht=2,wt=1,X=ut.slice.call(arguments,1),pt=Object.create(this.lexer),U={yy:{}};for(var xt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,xt)&&(U.yy[xt]=this.yy[xt]);pt.setInput(R,U.yy),U.yy.lexer=pt,U.yy.parser=this,typeof pt.yylloc>"u"&&(pt.yylloc={});var nt=pt.yylloc;ut.push(nt);var Ot=pt.options&&pt.options.ranges;typeof U.yy.parseError=="function"?this.parseError=U.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Nt(){var ve;return ve=it.pop()||pt.lex()||wt,typeof ve!="number"&&(ve instanceof Array&&(it=ve,ve=it.pop()),ve=z.symbols_[ve]||ve),ve}for(var qt,Ct,Z,Tt,Ht={},It,Ft,ke,pn;;){if(Ct=K[K.length-1],this.defaultActions[Ct]?Z=this.defaultActions[Ct]:((qt===null||typeof qt>"u")&&(qt=Nt()),Z=bt[Ct]&&bt[Ct][qt]),typeof Z>"u"||!Z.length||!Z[0]){var Me="";pn=[];for(It in bt[Ct])this.terminals_[It]&&It>ht&&pn.push("'"+this.terminals_[It]+"'");pt.showPosition?Me="Parse error on line "+(yt+1)+`:
`+pt.showPosition()+`
Expecting `+pn.join(", ")+", got '"+(this.terminals_[qt]||qt)+"'":Me="Parse error on line "+(yt+1)+": Unexpected "+(qt==wt?"end of input":"'"+(this.terminals_[qt]||qt)+"'"),this.parseError(Me,{text:pt.match,token:this.terminals_[qt]||qt,line:pt.yylineno,loc:nt,expected:pn})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ct+", token: "+qt);switch(Z[0]){case 1:K.push(qt),st.push(pt.yytext),ut.push(pt.yylloc),K.push(Z[1]),qt=null,dt=pt.yyleng,mt=pt.yytext,yt=pt.yylineno,nt=pt.yylloc;break;case 2:if(Ft=this.productions_[Z[1]][1],Ht.$=st[st.length-Ft],Ht._$={first_line:ut[ut.length-(Ft||1)].first_line,last_line:ut[ut.length-1].last_line,first_column:ut[ut.length-(Ft||1)].first_column,last_column:ut[ut.length-1].last_column},Ot&&(Ht._$.range=[ut[ut.length-(Ft||1)].range[0],ut[ut.length-1].range[1]]),Tt=this.performAction.apply(Ht,[mt,dt,yt,U.yy,Z[1],st,ut].concat(X)),typeof Tt<"u")return Tt;Ft&&(K=K.slice(0,-1*Ft*2),st=st.slice(0,-1*Ft),ut=ut.slice(0,-1*Ft)),K.push(this.productions_[Z[1]][0]),st.push(Ht.$),ut.push(Ht._$),ke=bt[K[K.length-2]][K[K.length-1]],K.push(ke);break;case 3:return!0}}return!0}},N=function(){var j={EOF:1,parseError:function(z,K){if(this.yy.parser)this.yy.parser.parseError(z,K);else throw new Error(z)},setInput:function(R,z){return this.yy=z||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 z=R.match(/(?:\r\n?|\n).*/g);return z?(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 z=R.length,K=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-z),this.offset-=z;var it=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),K.length-1&&(this.yylineno-=K.length-1);var st=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:K?(K.length===it.length?this.yylloc.first_column:0)+it[it.length-K.length].length-K[0].length:this.yylloc.first_column-z},this.options.ranges&&(this.yylloc.range=[st[0],st[0]+this.yyleng-z]),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(),z=new Array(R.length+1).join("-");return R+this.upcomingInput()+`
`+z+"^"},test_match:function(R,z){var K,it,st;if(this.options.backtrack_lexer&&(st={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&&(st.yylloc.range=this.yylloc.range.slice(0))),it=R[0].match(/(?:\r\n?|\n).*/g),it&&(this.yylineno+=it.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:it?it[it.length-1].length-it[it.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],K=this.performAction.call(this,this.yy,this,z,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),K)return K;if(this._backtrack){for(var ut in st)this[ut]=st[ut];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,z,K,it;this._more||(this.yytext="",this.match="");for(var st=this._currentRules(),ut=0;ut<st.length;ut++)if(K=this._input.match(this.rules[st[ut]]),K&&(!z||K[0].length>z[0].length)){if(z=K,it=ut,this.options.backtrack_lexer){if(R=this.test_match(K,st[ut]),R!==!1)return R;if(this._backtrack){z=!1;continue}else return!1}else if(!this.options.flex)break}return z?(R=this.test_match(z,st[it]),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 z=this.next();return z||this.lex()},begin:function(z){this.conditionStack.push(z)},popState:function(){var z=this.conditionStack.length-1;return z>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(z){return z=this.conditionStack.length-1-Math.abs(z||0),z>=0?this.conditionStack[z]:"INITIAL"},pushState:function(z){this.begin(z)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(z,K,it,st){switch(it){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 21;case 16:return 20;case 17:return 6;case 18:return"INVALID"}},rules:[/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:timeline\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,/^(?::\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/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],inclusive:!0}}};return j}();L.lexer=N;function B(){this.yy={}}return B.prototype=L,L.Parser=B,new B}();jgt.parser=jgt;const EUe=jgt;let pL="",Ajt=0;const $gt=[],GK=[],bL=[],Ljt=()=>LOt,Mjt=function(){$gt.length=0,GK.length=0,pL="",bL.length=0,ap()},Ijt=function(i){pL=i,$gt.push(i)},Djt=function(){return $gt},Ojt=function(){let i=Bjt();const a=100;let f=0;for(;!i&&f<a;)i=Bjt(),f++;return GK.push(...bL),GK},Njt=function(i,a,f){const p={id:Ajt++,section:pL,type:pL,task:i,score:a||0,events:f?[f]:[]};bL.push(p)},Pjt=function(i){bL.find(f=>f.id===Ajt-1).events.push(i)},Fjt=function(i){const a={section:pL,type:pL,description:i,task:i,classes:[]};GK.push(a)},Bjt=function(){const i=function(f){return bL[f].processed};let a=!0;for(const[f,p]of bL.entries())i(f),a=a&&p.processed;return a},TUe=Object.freeze(Object.defineProperty({__proto__:null,addEvent:Pjt,addSection:Ijt,addTask:Njt,addTaskOrg:Fjt,clear:Mjt,default:{clear:Mjt,getCommonDb:Ljt,addSection:Ijt,getSections:Djt,getTasks:Ojt,addTask:Njt,addTaskOrg:Fjt,addEvent:Pjt},getCommonDb:Ljt,getSections:Djt,getTasks:Ojt},Symbol.toStringTag,{value:"Module"})),CUe=12,VK=function(i,a){const f=i.append("rect");return f.attr("x",a.x),f.attr("y",a.y),f.attr("fill",a.fill),f.attr("stroke",a.stroke),f.attr("width",a.width),f.attr("height",a.height),f.attr("rx",a.rx),f.attr("ry",a.ry),a.class!==void 0&&f.attr("class",a.class),f},_Ue=function(i,a){const p=i.append("circle").attr("cx",a.cx).attr("cy",a.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),v=i.append("g");v.append("circle").attr("cx",a.cx-15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),v.append("circle").attr("cx",a.cx+15/3).attr("cy",a.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function m(_){const L=LA().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform","translate("+a.cx+","+(a.cy+2)+")")}function b(_){const L=LA().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);_.append("path").attr("class","mouth").attr("d",L).attr("transform",
.section-${f-1} rect, .section-${f-1} path, .section-${f-1} circle, .section-${f-1} path {
fill: ${i["cScale"+f]};
}
.section-${f-1} text {
fill: ${i["cScaleLabel"+f]};
}
.node-icon-${f-1} {
font-size: 40px;
color: ${i["cScaleLabel"+f]};
}
.section-edge-${f-1}{
stroke: ${i["cScale"+f]};
}
.edge-depth-${f-1}{
stroke-width: ${p};
}
.section-${f-1} line {
stroke: ${i["cScaleInv"+f]} ;
stroke-width: 3;
}
.lineWrapper line{
stroke: ${i["cScaleLabel"+f]} ;
}
.disabled, .disabled circle, .disabled text {
fill: lightgray;
}
.disabled text {
fill: #efefef;
}
`}return a},zUe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:TUe,renderer:jUe,parser:EUe,styles:i=>`
.edge {
stroke-width: 3;
}
${$Ue(i)}
.section-root rect, .section-root path, .section-root circle {
fill: ${i.git0};
}
.section-root text {
fill: ${i.gitBranchLabel0};
}
.icon-container {
height:100%;
display: flex;
justify-content: center;
align-items: center;
}
.edge {
fill: none;
}
.eventWrapper {
filter: brightness(120%);
}
`}},Symbol.toStringTag,{value:"Module"}));var qgt=function(){var i=function(mt,yt,dt,ht){for(dt=dt||{},ht=mt.length;ht--;dt[mt[ht]]=yt);return dt},a=[1,4],f=[1,13],p=[1,12],v=[1,15],m=[1,16],b=[1,20],E=[1,19],_=[6,7,8],L=[1,26],N=[1,24],B=[1,25],j=[6,7,11],R=[1,6,13,15,16,19,22],z=[1,33],K=[1,34],it=[1,6,7,11,13,15,16,19,22],st={trace:function(){},yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:function(yt,dt,ht,wt,X,pt,U){var xt=pt.length-1;switch(X){case 6:case 7:return wt;case 8:wt.getLogger().trace("Stop NL ");break;case 9:wt.getLogger().trace("Stop EOF ");break;case 11:wt.getLogger().trace("Stop NL2 ");break;case 12:wt.getLogger().trace("Stop EOF2 ");break;case 15:wt.getLogger().info("Node: ",pt[xt].id),wt.addNode(pt[xt-1].length,pt[xt].id,pt[xt].descr,pt[xt].type);break;case 16:wt.getLogger().trace("Icon: ",pt[xt]),wt.decorateNode({icon:pt[xt]});break;case 17:case 21:wt.decorateNode({class:pt[xt]});break;case 18:wt.getLogger().trace("SPACELIST");break;case 19:wt.getLogger().trace("Node: ",pt[xt].id),wt.addNode(0,pt[xt].id,pt[xt].descr,pt[xt].type);break;case 20:wt.decorateNode({icon:pt[xt]});break;case 25:wt.getLogger().trace("node found ..",pt[xt-2]),this.$={id:pt[xt-1],descr:pt[xt-1],type:wt.getType(pt[xt-2],pt[xt])};break;case 26:this.$={id:pt[xt],descr:pt[xt],type:wt.nodeType.DEFAULT};break;case 27:wt.getLogger().trace("node found ..",pt[xt-3]),this.$={id:pt[xt-3],descr:pt[xt-1],type:wt.getType(pt[xt-2],pt[xt])};break}},table:[{3:1,4:2,5:3,6:[1,5],8:a},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:a},{6:f,7:[1,10],9:9,12:11,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},i(_,[2,3]),{1:[2,2]},i(_,[2,4]),i(_,[2,5]),{1:[2,6],6:f,12:21,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},{6:f,9:22,12:11,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},{6:L,7:N,10:23,11:B},i(j,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:b,22:E}),i(j,[2,18]),i(j,[2,19]),i(j,[2,20]),i(j,[2,21]),i(j,[2,23]),i(j,[2,24]),i(j,[2,26],{19:[1,30]}),{20:[1,31]},{6:L,7:N,10:32,11:B},{1:[2,7],6:f,12:21,13:p,14:14,15:v,16:m,17:17,18:18,19:b,22:E},i(R,[2,14],{7:z,11:K}),i(it,[2,8]),i(it,[2,9]),i(it,[2,10]),i(j,[2,15]),i(j,[2,16]),i(j,[2,17]),{20:[1,35]},{21:[1,36]},i(R,[2,13],{7:z,11:K}),i(it,[2,11]),i(it,[2,12]),{21:[1,37]},i(j,[2,25]),i(j,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:function(yt,dt){if(dt.recoverable)this.trace(yt);else{var ht=new Error(yt);throw ht.hash=dt,ht}},parse:function(yt){var dt=this,ht=[0],wt=[],X=[null],pt=[],U=this.table,xt="",nt=0,Ot=0,Nt=2,qt=1,Ct=pt.slice.call(arguments,1),Z=Object.create(this.lexer),Tt={yy:{}};for(var Ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Ht)&&(Tt.yy[Ht]=this.yy[Ht]);Z.setInput(yt,Tt.yy),Tt.yy.lexer=Z,Tt.yy.parser=this,typeof Z.yylloc>"u"&&(Z.yylloc={});var It=Z.yylloc;pt.push(It);var Ft=Z.options&&Z.options.ranges;typeof Tt.yy.parseError=="function"?this.parseError=Tt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(){var Oe;return Oe=wt.pop()||Z.lex()||qt,typeof Oe!="number"&&(Oe instanceof Array&&(wt=Oe,Oe=wt.pop()),Oe=dt.symbols_[Oe]||Oe),Oe}for(var pn,Me,ve,Ge,Ke={},we,_e,$t,re;;){if(Me=ht[ht.length-1],this.defaultActions[Me]?ve=this.defaultActions[Me]:((pn===null||typeof pn>"u")&&(pn=ke()),ve=U[Me]&&U[Me][pn]),typeof ve>"u"||!ve.length||!ve[0]){var ie="";re=[];for(we in U[Me])this.terminals_[we]&&we>Nt&&re.push("'"+this.terminals_[we]+"'");Z.showPosition?ie="Parse error on line "+(nt+1)+`:
`+Z.showPosition()+`
Expecting `+re.join(", ")+", got '"+(this.terminals_[pn]||pn)+"'":ie="Parse error on line "+(nt+1)+": Unexpected "+(pn==qt?"end of input":"'"+(this.terminals_[pn]||pn)+"'"),this.parseError(ie,{text:Z.match,token:this.terminals_[pn]||pn,line:Z.yylineno,loc:It,expected:re})}if(ve[0]instanceof Array&&ve.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Me+", token: "+pn);switch(ve[0]){case 1:ht.push(pn),X.push(Z.yytext),pt.push(Z.yylloc),ht.push(ve[1]),pn=null,Ot=Z.yyleng,xt=Z.yytext,nt=Z.yylineno,It=Z.yylloc;break;case 2:if(_e=this.productions_[ve[1]][1],Ke.$=X[X.length-_e],Ke._$={first_line:pt[pt.length-(_e||1)].first_line,last_line:pt[pt.length-1].last_line,first_column:pt[pt.length-(_e||1)].first_column,last_column:pt[pt.length-1].last_column},Ft&&(Ke._$.range=[pt[pt.length-(_e||1)].range[0],pt[pt.length-1].range[1]]),Ge=this.performAction.apply(Ke,[xt,Ot,nt,Tt.yy,ve[1],X,pt].concat(Ct)),typeof Ge<"u")return Ge;_e&&(ht=ht.slice(0,-1*_e*2),X=X.slice(0,-1*_e),pt=pt.slice(0,-1*_e)),ht.push(this.productions_[ve[1]][0]),X.push(Ke.$),pt.push(Ke._$),$t=U[ht[ht.length-2]][ht[ht.length-1]],ht.push($t);break;case 3:return!0}}return!0}},ut=function(){var mt={EOF:1,parseError:function(dt,ht){if(this.yy.parser)this.yy.parser.parseError(dt,ht);else throw new Error(dt)},setInput:function(yt,dt){return this.yy=dt||this.yy||{},this._input=yt,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 yt=this._input[0];this.yytext+=yt,this.yyleng++,this.offset++,this.match+=yt,this.matched+=yt;var dt=yt.match(/(?:\r\n?|\n).*/g);return dt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),yt},unput:function(yt){var dt=yt.length,ht=yt.split(/(?:\r\n?|\n)/g);this._input=yt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-dt),this.offset-=dt;var wt=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),ht.length-1&&(this.yylineno-=ht.length-1);var X=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:ht?(ht.length===wt.length?this.yylloc.first_column:0)+wt[wt.length-ht.length].length-ht[0].length:this.yylloc.first_column-dt},this.options.ranges&&(this.yylloc.range=[X[0],X[0]+this.yyleng-dt]),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(yt){this.unput(this.match.slice(yt))},pastInput:function(){var yt=this.matched.substr(0,this.matched.length-this.match.length);return(yt.length>20?"...":"")+yt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var yt=this.match;return yt.length<20&&(yt+=this._input.substr(0,20-yt.length)),(yt.substr(0,20)+(yt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var yt=this.pastInput(),dt=new Array(yt.length+1).join("-");return yt+this.upcomingInput()+`
`+dt+"^"},test_match:function(yt,dt){var ht,wt,X;if(this.options.backtrack_lexer&&(X={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&&(X.yylloc.range=this.yylloc.range.slice(0))),wt=yt[0].match(/(?:\r\n?|\n).*/g),wt&&(this.yylineno+=wt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:wt?wt[wt.length-1].length-wt[wt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+yt[0].length},this.yytext+=yt[0],this.match+=yt[0],this.matches=yt,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(yt[0].length),this.matched+=yt[0],ht=this.performAction.call(this,this.yy,this,dt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ht)return ht;if(this._backtrack){for(var pt in X)this[pt]=X[pt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var yt,dt,ht,wt;this._more||(this.yytext="",this.match="");for(var X=this._currentRules(),pt=0;pt<X.length;pt++)if(ht=this._input.match(this.rules[X[pt]]),ht&&(!dt||ht[0].length>dt[0].length)){if(dt=ht,wt=pt,this.options.backtrack_lexer){if(yt=this.test_match(ht,X[pt]),yt!==!1)return yt;if(this._backtrack){dt=!1;continue}else return!1}else if(!this.options.flex)break}return dt?(yt=this.test_match(dt,X[wt]),yt!==!1?yt:!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 dt=this.next();return dt||this.lex()},begin:function(dt){this.conditionStack.push(dt)},popState:function(){var dt=this.conditionStack.length-1;return dt>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(dt){return dt=this.conditionStack.length-1-Math.abs(dt||0),dt>=0?this.conditionStack[dt]:"INITIAL"},pushState:function(dt){this.begin(dt)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(dt,ht,wt,X){switch(wt){case 0:return dt.getLogger().trace("Found comment",ht.yytext),6;case 1:return 8;case 2:this.begin("CLASS");break;case 3:return this.popState(),16;case 4:this.popState();break;case 5:dt.getLogger().trace("Begin icon"),this.begin("ICON");break;case 6:return dt.getLogger().trace("SPACELINE"),6;case 7:return 7;case 8:return 15;case 9:dt.getLogger().trace("end icon"),this.popState();break;case 10:return dt.getLogger().trace("Exploding node"),this.begin("NODE"),19;case 11:return dt.getLogger().trace("Cloud"),this.begin("NODE"),19;case 12:return dt.getLogger().trace("Explosion Bang"),this.begin("NODE"),19;case 13:return dt.getLogger().trace("Cloud Bang"),this.begin("NODE"),19;case 14:return this.begin("NODE"),19;case 15:return this.begin("NODE"),19;case 16:return this.begin("NODE"),19;case 17:return this.begin("NODE"),19;case 18:return 13;case 19:return 22;case 20:return 11;case 21:this.begin("NSTR2");break;case 22:return"NODE_DESCR";case 23:this.popState();break;case 24:dt.getLogger().trace("Starting NSTR"),this.begin("NSTR");break;case 25:return dt.getLogger().trace("description:",ht.yytext),"NODE_DESCR";case 26:this.popState();break;case 27:return this.popState(),dt.getLogger().trace("node end ))"),"NODE_DEND";case 28:return this.popState(),dt.getLogger().trace("node end )"),"NODE_DEND";case 29:return this.popState(),dt.getLogger().trace("node end ...",ht.yytext),"NODE_DEND";case 30:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 31:return this.popState(),dt.getLogger().trace("node end (-"),"NODE_DEND";case 32:return this.popState(),dt.getLogger().trace("node end (-"),"NODE_DEND";case 33:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 34:return this.popState(),dt.getLogger().trace("node end (("),"NODE_DEND";case 35:return dt.getLogger().trace("Long description:",ht.yytext),20;case 36:return dt.getLogger().trace("Long description:",ht.yytext),20}},rules:[/^(?:\s*%%.*)/i,/^(?:mindmap\b)/i,/^(?::::)/i,/^(?:.+)/i,/^(?:\n)/i,/^(?:::icon\()/i,/^(?:[\s]+[\n])/i,/^(?:[\n]+)/i,/^(?:[^\)]+)/i,/^(?:\))/i,/^(?:-\))/i,/^(?:\(-)/i,/^(?:\)\))/i,/^(?:\))/i,/^(?:\(\()/i,/^(?:\{\{)/i,/^(?:\()/i,/^(?:\[)/i,/^(?:[\s]+)/i,/^(?:[^\(\[\n\)\{\}]+)/i,/^(?:$)/i,/^(?:["][`])/i,/^(?:[^`"]+)/i,/^(?:[`]["])/i,/^(?:["])/i,/^(?:[^"]+)/i,/^(?:["])/i,/^(?:[\)]\))/i,/^(?:[\)])/i,/^(?:[\]])/i,/^(?:\}\})/i,/^(?:\(-)/i,/^(?:-\))/i,/^(?:\(\()/i,/^(?:\()/i,/^(?:[^\)\]\(\}]+)/i,/^(?:.+(?!\(\())/i],conditions:{CLASS:{rules:[3,4],inclusive:!1},ICON:{rules:[8,9],inclusive:!1},NSTR2:{rules:[22,23],inclusive:!1},NSTR:{rules:[25,26],inclusive:!1},NODE:{rules:[21,24,27,28,29,30,31,32,33,34,35,36],inclusive:!1},INITIAL:{rules:[0,1,2,5,6,7,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};return mt}();st.lexer=ut;function bt(){this.yy={}}return bt.prototype=st,st.Parser=bt,new bt}();qgt.parser=qgt;const qUe=qgt,UP=i=>Dd(i,Le());let sv=[],Hjt=0,Hgt={};const HUe=()=>{sv=[],Hjt=0,Hgt={}},GUe=function(i){for(let a=sv.length-1;a>=0;a--)if(sv[a].level<i)return sv[a];return null},VUe=()=>sv.length>0?sv[0]:null,UUe=(i,a,f,p)=>{Ut.info("addNode",i,a,f,p);const v=Le(),m={id:Hjt++,nodeId:UP(a),level:i,descr:UP(f),type:p,children:[],width:Le().mindmap.maxNodeWidth};switch(m.type){case Vu.ROUNDED_RECT:m.padding=2*v.mindmap.padding;break;case Vu.REC
a${b},${b} 1 0,1 ${f*.4},${-1*f*.1}
a${m},${m} 1 0,1 ${f*.35},${1*f*.2}
a${v},${v} 1 0,1 ${f*.15},${1*p*.35}
a${E},${E} 1 0,1 ${-1*f*.15},${1*p*.65}
a${m},${v} 1 0,1 ${-1*f*.25},${f*.15}
a${b},${b} 1 0,1 ${-1*f*.5},0
a${v},${v} 1 0,1 ${-1*f*.25},${-1*f*.15}
a${v},${v} 1 0,1 ${-1*f*.1},${-1*p*.35}
a${E},${E} 1 0,1 ${f*.1},${-1*p*.65}
H0 V0 Z`)},nWe=function(i,a){const f=a.width,p=a.height,v=.15*f;i.append("path").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("d",`M0 0 a${v},${v} 1 0,0 ${f*.25},${-1*p*.1}
a${v},${v} 1 0,0 ${f*.25},0
a${v},${v} 1 0,0 ${f*.25},0
a${v},${v} 1 0,0 ${f*.25},${1*p*.1}
a${v},${v} 1 0,0 ${f*.15},${1*p*.33}
a${v*.8},${v*.8} 1 0,0 0,${1*p*.34}
a${v},${v} 1 0,0 ${-1*f*.15},${1*p*.33}
a${v},${v} 1 0,0 ${-1*f*.25},${p*.15}
a${v},${v} 1 0,0 ${-1*f*.25},0
a${v},${v} 1 0,0 ${-1*f*.25},0
a${v},${v} 1 0,0 ${-1*f*.25},${-1*p*.15}
a${v},${v} 1 0,0 ${-1*f*.1},${-1*p*.33}
a${v*.8},${v*.8} 1 0,0 0,${-1*p*.34}
a${v},${v} 1 0,0 ${f*.1},${-1*p*.33}
H0 V0 Z`)},rWe=function(i,a){i.append("circle").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("r",a.width/2)};function iWe(i,a,f,p,v){return i.insert("polygon",":first-child").attr("points",p.map(function(m){return m.x+","+m.y}).join(" ")).attr("transform","translate("+(v.width-a)/2+", "+f+")")}const sWe=function(i,a){const f=a.height,v=f/4,m=a.width-a.padding+2*v,b=[{x:v,y:0},{x:m-v,y:0},{x:m,y:-f/2},{x:m-v,y:-f},{x:v,y:-f},{x:0,y:-f/2}];iWe(i,m,f,b,a)},aWe=function(i,a){i.append("rect").attr("id","node-"+a.id).attr("class","node-bkg node-"+LT(a.type)).attr("height",a.height).attr("rx",a.padding).attr("ry",a.padding).attr("width",a.width)},Wjt={drawNode:function(i,a,f,p){const v=p.htmlLabels,m=f%(Ujt-1),b=i.append("g");a.section=m;let E="section-"+m;m<0&&(E+=" section-root"),b.attr("class",(a.class?a.class+" ":"")+"mindmap-node "+E);const _=b.append("g"),L=b.append("g"),N=a.descr.replace(/(<br\/*>)/g,`
`);dK(L,N,{useHtmlLabels:v,width:a.width,classes:"mindmap-node-label"}),v||L.attr("dy","1em").attr("alignment-baseline","middle").attr("dominant-baseline","middle").attr("text-anchor","middle");const B=L.node().getBBox(),j=p.fontSize.replace?p.fontSize.replace("px",""):p.fontSize;if(a.height=B.height+j*1.1*.5+a.padding,a.width=B.width+2*a.padding,a.icon)if(a.type===Vu.CIRCLE)a.height+=50,a.width+=50,b.append("foreignObject").attr("height","50px").attr("width",a.width).attr("style","text-align: center;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),L.attr("transform","translate("+a.width/2+", "+(a.height/2-1.5*a.padding)+")");else{a.width+=50;const R=a.height;a.height=Math.max(R,60);const z=Math.abs(a.height-R);b.append("foreignObject").attr("width","60px").attr("height",a.height).attr("style","text-align: center;margin-top:"+z/2+"px;").append("div").attr("class","icon-container").append("i").attr("class","node-icon-"+m+" "+a.icon),L.attr("transform","translate("+(25+a.width/2)+", "+(z/2+a.padding/2)+")")}else if(v){const R=(a.width-B.width)/2,z=(a.height-B.height)/2;L.attr("transform","translate("+R+", "+z+")")}else{const R=a.width/2,z=a.padding/2;L.attr("transform","translate("+R+", "+z+")")}switch(a.type){case Vu.DEFAULT:JUe(_,a,m);break;case Vu.ROUNDED_RECT:aWe(_,a);break;case Vu.RECT:tWe(_,a);break;case Vu.CIRCLE:_.attr("transform","translate("+a.width/2+", "+ +a.height/2+")"),rWe(_,a);break;case Vu.CLOUD:eWe(_,a);break;case Vu.BANG:nWe(_,a);break;case Vu.HEXAGON:sWe(_,a);break}return Gjt(a.id,b),a.height},positionNode:function(i){const a=Ggt(i.id),f=i.x||0,p=i.y||0;a.attr("transform","translate("+f+","+p+")")},drawEdge:function(a,f,p,v,m){const b=m%(Ujt-1),E=p.x+p.width/2,_=p.y+p.height/2,L=f.x+f.width/2,N=f.y+f.height/2,B=L>E?E+Math.abs(E-L)/2:E-Math.abs(E-L)/2,j=N>_?_+Math.abs(_-N)/2:_-Math.abs(_-N)/2,R=L>E?Math.abs(E-B)/2+E:-Math.abs(E-B)/2+E,z=N>_?Math.abs(_-j)/2+_:-Math.abs(_-j)/2+_;a.append("path").attr("d",p.direction==="TB"||p.direction==="BT"?`M${E},${_} Q${E},${z} ${B},${j} T${L},${N}`:`M${E},${_} Q${R},${_} ${B},${j} T${L},${N}`).attr("class","edge section-edge-"+b+" edge-depth-"+v)}};var Kjt={exports:{}};(function(i,a){(function(f,p){i.exports=p()})(d0,function(){function f(y){return f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(g){return typeof g}:function(g){return g&&typeof Symbol=="function"&&g.constructor===Symbol&&g!==Symbol.prototype?"symbol":typeof g},f(y)}function p(y,g){if(!(y instanceof g))throw new TypeError("Cannot call a class as a function")}function v(y,g){for(var x=0;x<g.length;x++){var T=g[x];T.enumerable=T.enumerable||!1,T.configurable=!0,"value"in T&&(T.writable=!0),Object.defineProperty(y,T.key,T)}}function m(y,g,x){return g&&v(y.prototype,g),x&&v(y,x),Object.defineProperty(y,"prototype",{writable:!1}),y}function b(y,g,x){return g in y?Object.defineProperty(y,g,{value:x,enumerable:!0,configurable:!0,writable:!0}):y[g]=x,y}function E(y,g){return _(y)||L(y,g)||N(y,g)||j()}function _(y){if(Array.isArray(y))return y}function L(y,g){var x=y==null?null:typeof Symbol<"u"&&y[Symbol.iterator]||y["@@iterator"];if(x!=null){var T=[],A=!0,D=!1,O,$;try{for(x=x.call(y);!(A=(O=x.next()).done)&&(T.push(O.value),!(g&&T.length===g));A=!0);}catch(q){D=!0,$=q}finally{try{!A&&x.return!=null&&x.return()}finally{if(D)throw $}}return T}}function N(y,g){if(y){if(typeof y=="string")return B(y,g);var x=Object.prototype.toString.call(y).slice(8,-1);if(x==="Object"&&y.constructor&&(x=y.constructor.name),x==="Map"||x==="Set")return Array.from(y);if(x==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(x))return B(y,g)}}function B(y,g){(g==null||g>y.length)&&(g=y.length);for(var x=0,T=new Array(g);x<g;x++)T[x]=y[x];return T}function j(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var R=typeof window>"u"?null:window,z=R?R.navigator:null;R&&R.document;var K=f(""),it=f({}),st=f(function(){}),ut=typeof HTMLElement>"u"?"undefined":f(HTMLElement),bt=function(g){return g&&g.instanceString&&yt(g.instanceString)?g.instanceString():null},mt=function(g){return g!=null&&f(g)==K},yt=function(g){return g!=null&&f(g)===st},dt=function(g){return!xt(g)&&(Array.isArray?Array.isArray(g):g!=null&&g instanceof Array)},ht=function(g){return g!=null&&f(g)===it&&!dt(g)&&g.constructor===Object},wt=function(g){return g!=null&&f(g)===it},X=function(g){return g!=null&&f(g)===f(1)&&!isNaN(g)},pt=function(g){return X(g)&&Math.floor(g)===g},U=function(g){if(ut!=="undefined")return g!=null&&g instanceof HTMLElement},xt=function(g){return nt(g)||Ot(g)},nt=function(g){return bt(g)==="collection"&&g._private.single},Ot=function(g){return bt(g)==="collection"&&!g._private.single},Nt=function(g){return bt(g)==="core"},qt=function(g){return bt(g)==="stylesheet"},Ct=function(g){return bt(g)==="event"},Z=function(g){return g==null?!0:!!(g===""||g.match(/^\s+$/))},Tt=function(g){return typeof HTMLElement>"u"?!1:g instanceof HTMLElement},Ht=function(g){return ht(g)&&X(g.x1)&&X(g.x2)&&X(g.y1)&&X(g.y2)},It=function(g){return wt(g)&&yt(g.then)},Ft=function(){return z&&z.userAgent.match(/msie|trident|edge/i)},ke=function(g,x){x||(x=function(){if(arguments.length===1)return arguments[0];if(arguments.length===0)return"undefined";for(var D=[],O=0;O<arguments.length;O++)D.push(arguments[O]);return D.join("$")});var T=function A(){var D=this,O=arguments,$,q=x.apply(D,O),S=A.cache;return($=S[q])||($=S[q]=g.apply(D,O)),$};return T.cache={},T},pn=ke(function(y){return y.replace(/([A-Z])/g,function(g){return"-"+g.toLowerCase()})}),Me=ke(function(y){return y.replace(/(-\w)/g,function(g){return g[1].toUpperCase()})}),ve=ke(function(y,g){return y+g[0].toUpperCase()+g.substring(1)},function(y,g){return y+"$"+g}),Ge=function(g){return Z(g)?g:g.charAt(0).toUpperCase()+g.substring(1)},Ke="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",we="rgb[a]?\\(("+Ke+"[%]?)\\s*,\\s*("+Ke+"[%]?)\\s*,\\s*("+Ke+"[%]?)(?:\\s*,\\s*("+Ke+"))?\\)",_e="rgb[a]?\\((?:"+Ke+"[%]?)\\s*,\\s*(?:"+Ke+"[%]?)\\s*,\\s*(?:"+Ke+"[%]?)(?:\\s*,\\s*(?:"+Ke+"))?\\)",$t="hsl[a]?\\(("+Ke+")\\s*,\\s*("+Ke+"[%])\\s*,\\s*("+Ke+"[%])(?:\\s*,\\s*("+Ke+"))?\\)",re="hsl[a]?\\((?:"+Ke+")\\s*,\\s*(?:"+Ke+"[%])\\s*,\\s*(?:"+Ke+"[%])(?:\\s*,\\s*(?:"+Ke+"))?\\)",ie="\\#[0-9a-fA-F]{3}",Oe="\\#[0-9a-fA-F]{6}",oe=function(g,x){return g<x?-1:g>x?1:0},Ne=function(g,x){return-1*oe(g,x)},me=Object.assign!=null?Object.assign.bind(Object):function(y){for(var g=arguments,x=1;x<g.length;x++){var T=g[x];if(T!=null)for(var A=Object.keys(T),D=0;D<A.length;D++){var O=A[D];y[O]=T[O]}}return y},cn=function(g){if(!(!(g.length===4||g.length===7)||g[0]!=="#")){var x=g.length===4,T,A,D,O=16;return x?(T=parseInt(g[1]+g[1],O),A=parseInt(g[2]+g[2],O),D=parseInt(g[3]+g[3],O)):(T=parseInt(g[1]+g[2],O),A=parseInt(g[3]+g[4],O),D=parseInt(g[5]+g[6],O)),[T,A,D]}},li=function(g){var x,T,A,D,O,$,q,S;function G(lt,ft,At){return At<0&&(At+=1),At>1&&(At-=1),At<1/6?lt+(ft-lt)*6*At:At<1/2?ft:At<2/3?lt+(ft-lt)*(2/3-At)*6:lt}var W=new RegExp("^"+$t+"$").exec(g);if(W){if(T=parseInt(W[1]),T<0?T=(360- -1*T%360)%360:T>360&&(T=T%360),T/=360,A=parseFloat(W[2]),A<0||A>100||(A=A/100,D=parseFloat(W[3]),D<0||D>100)||(D=D/100,O=W[4],O!==void 0&&(O=parseFloat(O),O<0||O>1)))return;if(A===0)$=q=S=Math.round(D*255);else{var et=D<.5?D*(1+A):D+A-D*A,at=2*D-et;$=Math.round(255*G(at,et,T+1/3)),q=Math.round(255*G(at,et,T)),S=Math.round(255*G(at,et,T-1/3))}x=[$,q,S,O]}return x},ya=function(g){var x,T=new RegExp("^"+we+"$").exec(g);if(T){x=[];for(var A=[],D=1;D<=3;D++){var O=T[D];if(O[O.length-1]==="%"&&(A[D]=!0),O=parseFloat(O),A[D]&&(O=O/100*255),O<0||O>255)return;x.push(Math.floor(O))}var $=A[1]||A[2]||A[3],q=A[1]&&A[2]&&A[3];if($&&!q)return;var S=T[4];if(S!==void 0){if(S=parseFloat(S),S<0||S>1)return;x.push(S)}}return x},da=function(g){return ds[g.toLowerCase()]},Oo=functio
Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
Licensed under The MIT License (http://opensource.org/licenses/MIT)
*/var TF=0,CF=1,_F=2,hv=function y(g){if(!(this instanceof y))return new y(g);this.id="Thenable/1.0.7",this.state=TF,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},typeof g=="function"&&g.call(this,this.fulfill.bind(this),this.reject.bind(this))};hv.prototype={fulfill:function(g){return SF(this,CF,"fulfillValue",g)},reject:function(g){return SF(this,_F,"rejectReason",g)},then:function(g,x){var T=this,A=new hv;return T.onFulfilled.push(MF(g,A,"fulfill")),T.onRejected.push(MF(x,A,"reject")),AF(T),A.proxy}};var SF=function(g,x,T,A){return g.state===TF&&(g.state=x,g[T]=A,AF(g)),g},AF=function(g){g.state===CF?LF(g,"onFulfilled",g.fulfillValue):g.state===_F&&LF(g,"onRejected",g.rejectReason)},LF=function(g,x,T){if(g[x].length!==0){var A=g[x];g[x]=[];var D=function(){for(var $=0;$<A.length;$++)A[$](T)};typeof setImmediate=="function"?setImmediate(D):setTimeout(D,0)}},MF=function(g,x,T){return function(A){if(typeof g!="function")x[T].call(x,A);else{var D;try{D=g(A)}catch(O){x.reject(O);return}LX(x,D)}}},LX=function y(g,x){if(g===x||g.proxy===x){g.reject(new TypeError("cannot resolve promise with itself"));return}var T;if(f(x)==="object"&&x!==null||typeof x=="function")try{T=x.then}catch(D){g.reject(D);return}if(typeof T=="function"){var A=!1;try{T.call(x,function(D){A||(A=!0,D===x?g.reject(new TypeError("circular thenable chain")):y(g,D))},function(D){A||(A=!0,g.reject(D))})}catch(D){A||g.reject(D)}return}g.fulfill(x)};hv.all=function(y){return new hv(function(g,x){for(var T=new Array(y.length),A=0,D=function(q,S){T[q]=S,A++,A===y.length&&g(T)},O=0;O<y.length;O++)(function($){var q=y[$],S=q!=null&&q.then!=null;if(S)q.then(function(W){D($,W)},function(W){x(W)});else{var G=q;D($,G)}})(O)})},hv.resolve=function(y){return new hv(function(g,x){g(y)})},hv.reject=function(y){return new hv(function(g,x){x(y)})};var K5=typeof Promise<"u"?Promise:hv,qT=function(g,x,T){var A=Nt(g),D=!A,O=this._private=me({duration:1e3},x,T);if(O.target=g,O.style=O.style||O.css,O.started=!1,O.playing=!1,O.hooked=!1,O.applying=!1,O.progress=0,O.completes=[],O.frames=[],O.complete&&yt(O.complete)&&O.completes.push(O.complete),D){var $=g.position();O.startPosition=O.startPosition||{x:$.x,y:$.y},O.startStyle=O.startStyle||g.cy().style().getAnimationStartStyle(g,O.style)}if(A){var q=g.pan();O.startPan={x:q.x,y:q.y},O.startZoom=g.zoom()}this.length=1,this[0]=this},_3=qT.prototype;me(_3,{instanceString:function(){return"animation"},hook:function(){var g=this._private;if(!g.hooked){var x,T=g.target._private.animation;g.queue?x=T.queue:x=T.current,x.push(this),xt(g.target)&&g.target.cy().addToAnimationPool(g.target),g.hooked=!0}return this},play:function(){var g=this._private;return g.progress===1&&(g.progress=0),g.playing=!0,g.started=!1,g.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var g=this._private;return g.applying=!0,g.started=!1,g.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var g=this._private;return g.playing=!1,g.started=!1,this},stop:function(){var g=this._private;return g.playing=!1,g.started=!1,g.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(g){var x=this._private;return g===void 0?x.progress*x.duration:this.progress(g/x.duration)},progress:function(g){var x=this._private,T=x.playing;return g===void 0?x.progress:(T&&this.pause(),x.progress=g,x.started=!1,T&&this.play(),this)},completed:function(){return this._private.progress===1},reverse:function(){var g=this._private,x=g.playing;x&&this.pause(),g.progress=1-g.progress,g.started=!1;var T=function(S,G){var W=g[S];W!=null&&(g[S]=g[G],g[G]=W)};if(T("zoom","startZoom"),T("pan","startPan"),T("position","startPosition"),g.style)for(var A=0;A<g.style.length;A++){var D=g.style[A],O=D.name,$=g.startStyle[O];g.startStyle[O]=D,g.style[A]=$}return x&&this.play(),this},promise:function(g){var x=this._private,T;switch(g){case"frame":T=x.frames;break;default:c
Event object based on jQuery events, MIT license
https://jquery.org/license/
https://tldrlegal.com/license/mit-license
https://github.com/jquery/jquery/blob/master/src/event.js
*/var oB=function(g,x){this.recycle(g,x)};function Ik(){return!1}function ZT(){return!0}oB.prototype={instanceString:function(){return"event"},recycle:function(g,x){if(this.isImmediatePropagationStopped=this.isPropagationStopped=this.isDefaultPrevented=Ik,g!=null&&g.preventDefault?(this.type=g.type,this.isDefaultPrevented=g.defaultPrevented?ZT:Ik):g!=null&&g.type?x=g:this.type=g,x!=null&&(this.originalEvent=x.originalEvent,this.type=x.type!=null?x.type:this.type,this.cy=x.cy,this.target=x.target,this.position=x.position,this.renderedPosition=x.renderedPosition,this.namespace=x.namespace,this.layout=x.layout),this.cy!=null&&this.position!=null&&this.renderedPosition==null){var T=this.position,A=this.cy.zoom(),D=this.cy.pan();this.renderedPosition={x:T.x*A+D.x,y:T.y*A+D.y}}this.timeStamp=g&&g.timeStamp||Date.now()},preventDefault:function(){this.isDefaultPrevented=ZT;var g=this.originalEvent;g&&g.preventDefault&&g.preventDefault()},stopPropagation:function(){this.isPropagationStopped=ZT;var g=this.originalEvent;g&&g.stopPropagation&&g.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ZT,this.stopPropagation()},isDefaultPrevented:Ik,isPropagationStopped:Ik,isImmediatePropagationStopped:Ik};var cB=/^([^.]+)(\.(?:[^.]+))?$/,aJ=".*",uB={qualifierCompare:function(g,x){return g===x},eventMatches:function(){return!0},addEventFields:function(){},callbackContext:function(g){return g},beforeEmit:function(){},afterEmit:function(){},bubble:function(){return!1},parent:function(){return null},context:null},lB=Object.keys(uB),oJ={};function JT(){for(var y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:oJ,g=arguments.length>1?arguments[1]:void 0,x=0;x<lB.length;x++){var T=lB[x];this[T]=y[T]||uB[T]}this.context=g||this.context,this.listeners=[],this.emitting=0}var km=JT.prototype,hB=function(g,x,T,A,D,O,$){yt(A)&&(D=A,A=null),$&&(O==null?O=$:O=me({},O,$));for(var q=dt(T)?T:T.split(/\s+/),S=0;S<q.length;S++){var G=q[S];if(!Z(G)){var W=G.match(cB);if(W){var et=W[1],at=W[2]?W[2]:null,lt=x(g,G,et,at,A,D,O);if(lt===!1)break}}}},fB=function(g,x){return g.addEventFields(g.context,x),new oB(x.type,x)},cJ=function(g,x,T){if(Ct(T)){x(g,T);return}else if(ht(T)){x(g,fB(g,T));return}for(var A=dt(T)?T:T.split(/\s+/),D=0;D<A.length;D++){var O=A[D];if(!Z(O)){var $=O.match(cB);if($){var q=$[1],S=$[2]?$[2]:null,G=fB(g,{type:q,namespace:S,target:g.context});x(g,G)}}}};km.on=km.addListener=function(y,g,x,T,A){return hB(this,function(D,O,$,q,S,G,W){yt(G)&&D.listeners.push({event:O,callback:G,type:$,namespace:q,qualifier:S,conf:W})},y,g,x,T,A),this},km.one=function(y,g,x,T){return this.on(y,g,x,T,{one:!0})},km.removeListener=km.off=function(y,g,x,T){var A=this;this.emitting!==0&&(this.listeners=ZK(this.listeners));for(var D=this.listeners,O=function(S){var G=D[S];hB(A,function(W,et,at,lt,ft,At){if((G.type===at||y==="*")&&(!lt&&G.namespace!==".*"||G.namespace===lt)&&(!ft||W.qualifierCompare(G.qualifier,ft))&&(!At||G.callback===At))return D.splice(S,1),!1},y,g,x,T)},$=D.length-1;$>=0;$--)O($);return this},km.removeAllListeners=function(){return this.removeListener("*")},km.emit=km.trigger=function(y,g,x){var T=this.listeners,A=T.length;return this.emitting++,dt(g)||(g=[g]),cJ(this,function(D,O){x!=null&&(T=[{event:O.event,type:O.type,namespace:O.namespace,callback:x}],A=T.length);for(var $=function(G){var W=T[G];if(W.type===O.type&&(!W.namespace||W.namespace===O.namespace||W.namespace===aJ)&&D.eventMatches(D.context,W,O)){var et=[O];g!=null&&YP(et,g),D.beforeEmit(D.context,W,O),W.conf&&W.conf.one&&(D.listeners=D.listeners.filter(function(ft){return ft!==W}));var at=D.callbackContext(D.context,W,O),lt=W.callback.apply(at,et);D.afterEmit(D.context,W,O),lt===!1&&(O.stopPropagation(),O.preventDefault())}},q=0;q<A;q++)$(q);D.bubble(D.context)&&!O.isPropagationStopped()&&D.parent(D.context).emit(O,g)},y),this.emitting--,this};var uJ={qualifierCompare:function(g,x){return g==null||x==null?g==null&&x==null:g.sameText(x)},eventMatches:function(g,x,T){var A=x.qualifier;return A!=null?g!==T.target&&nt(T.target)&&A.matc
`),W=y.pstyle("text-max-width").pfValue,et=y.pstyle("text-overflow-wrap").value,at=et==="anywhere",lt=[],ft=/[\s\u200b]+/,At=at?"":" ",kt=0;kt<G.length;kt++){var Mt=G[kt],Dt=this.calculateLabelDimensions(y,Mt),jt=Dt.width;if(at){var Zt=Mt.split("").join(S);Mt=Zt}if(jt>W){for(var Kt=Mt.split(ft),zt="",ee=0;ee<Kt.length;ee++){var Vt=Kt[ee],fe=zt.length===0?Vt:zt+At+Vt,ge=this.calculateLabelDimensions(y,fe),ne=ge.width;ne<=W?zt+=Vt+At:(zt&&lt.push(zt),zt=Vt+At)}zt.match(/^[\s\u200b]+$/)||lt.push(zt)}else lt.push(Mt)}O("labelWrapCachedLines",lt),A=O("labelWrapCachedText",lt.join(`
`)),O("labelWrapKey",q)}else if($==="ellipsis"){var Pe=y.pstyle("text-max-width").pfValue,pe="",bn="…",ze=!1;if(this.calculateLabelDimensions(y,A).width<Pe)return A;for(var Ve=0;Ve<A.length;Ve++){var En=this.calculateLabelDimensions(y,pe+A[Ve]+bn).width;if(En>Pe)break;pe+=A[Ve],Ve===A.length-1&&(ze=!0)}return ze||(pe+=bn),pe}return A},yp.getLabelJustification=function(y){var g=y.pstyle("text-justification").strValue,x=y.pstyle("text-halign").strValue;if(g==="auto")if(y.isNode())switch(x){case"left":return"right";case"right":return"left";default:return"center"}else return"center";else return g},yp.calculateLabelDimensions=function(y,g){var x=this,T=td(g,y._private.labelDimsKey),A=x.labelDimCache||(x.labelDimCache=[]),D=A[T];if(D!=null)return D;var O=0,$=y.pstyle("font-style").strValue,q=y.pstyle("font-size").pfValue,S=y.pstyle("font-family").strValue,G=y.pstyle("font-weight").strValue,W=this.labelCalcCanvas,et=this.labelCalcCanvasContext;if(!W){W=this.labelCalcCanvas=document.createElement("canvas"),et=this.labelCalcCanvasContext=W.getContext("2d");var at=W.style;at.position="absolute",at.left="-9999px",at.top="-9999px",at.zIndex="-1",at.visibility="hidden",at.pointerEvents="none"}et.font="".concat($," ").concat(G," ").concat(q,"px ").concat(S);for(var lt=0,ft=0,At=g.split(`
`),kt=0;kt<At.length;kt++){var Mt=At[kt],Dt=et.measureText(Mt),jt=Math.ceil(Dt.width),Zt=q;lt=Math.max(jt,lt),ft+=Zt}return lt+=O,ft+=O,A[T]={width:lt,height:ft}},yp.calculateLabelAngle=function(y,g){var x=y._private,T=x.rscratch,A=y.isEdge(),D=g?g+"-":"",O=y.pstyle(D+"text-rotation"),$=O.strValue;return $==="none"?0:A&&$==="autorotate"?T.labelAutoAngle:$==="autorotate"?0:O.pfValue},yp.calculateLabelAngles=function(y){var g=this,x=y.isEdge(),T=y._private,A=T.rscratch;A.labelAngle=g.calculateLabelAngle(y),x&&(A.sourceLabelAngle=g.calculateLabelAngle(y,"source"),A.targetLabelAngle=g.calculateLabelAngle(y,"target"))};var th={},XL=28,HB=!1;th.getNodeShape=function(y){var g=this,x=y.pstyle("shape").value;if(x==="cutrectangle"&&(y.width()<XL||y.height()<XL))return HB||(Sc("The `cutrectangle` node shape can not be used at small sizes so `rectangle` is used instead"),HB=!0),"rectangle";if(y.isParent())return x==="rectangle"||x==="roundrectangle"||x==="round-rectangle"||x==="cutrectangle"||x==="cut-rectangle"||x==="barrel"?x:"rectangle";if(x==="polygon"){var T=y.pstyle("shape-polygon-points").value;return g.nodeShapes.makePolygon(T).name}return x};var Rk={};Rk.registerCalculationListeners=function(){var y=this.cy,g=y.collection(),x=this,T=function(O){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(g.merge(O),$)for(var q=0;q<O.length;q++){var S=O[q],G=S._private,W=G.rstyle;W.clean=!1,W.cleanConnected=!1}};x.binder(y).on("bounds.* dirty.*",function(O){var $=O.target;T($)}).on("style.* background.*",function(O){var $=O.target;T($,!1)});var A=function(O){if(O){var $=x.onUpdateEleCalcsFns;g.cleanStyle();for(var q=0;q<g.length;q++){var S=g[q],G=S._private.rstyle;S.isNode()&&!G.cleanConnected&&(T(S.connectedEdges()),G.cleanConnected=!0)}if($)for(var W=0;W<$.length;W++){var et=$[W];et(O,g)}x.recalculateRenderedStyle(g),g=y.collection()}};x.flushRenderedStyleQueue=function(){A(!0)},x.beforeRender(A,x.beforeRenderPriorities.eleCalcs)},Rk.onUpdateEleCalcs=function(y){var g=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];g.push(y)},Rk.recalculateRenderedStyle=function(y,g){var x=function(jt){return jt._private.rstyle.cleanConnected},T=[],A=[];if(!this.destroyed){g===void 0&&(g=!0);for(var D=0;D<y.length;D++){var O=y[D],$=O._private,q=$.rstyle;O.isEdge()&&(!x(O.source())||!x(O.target()))&&(q.clean=!1),!(g&&q.clean||O.removed())&&O.pstyle("display").value!=="none"&&($.group==="nodes"?A.push(O):T.push(O),q.clean=!0)}for(var S=0;S<A.length;S++){var G=A[S],W=G._private,et=W.rstyle,at=G.position();this.recalculateNodeLabelProjection(G),et.nodeX=at.x,et.nodeY=at.y,et.nodeW=G.pstyle("width").pfValue,et.nodeH=G.pstyle("height").pfValue}this.recalculateEdgeProjections(T);for(var lt=0;lt<T.length;lt++){var ft=T[lt],At=ft._private,kt=At.rstyle,Mt=At.rscratch;kt.srcX=Mt.arrowStartX,kt.srcY=Mt.arrowStartY,kt.tgtX=Mt.arrowEndX,kt.tgtY=Mt.arrowEndY,kt.midX=Mt.midX,kt.midY=Mt.midY,kt.labelAngle=Mt.labelAngle,kt.sourceLabelAngle=Mt.sourceLabelAngle,kt.targetLabelAngle=Mt.targetLabelAngle}}};var b9={};b9.updateCachedGrabbedEles=function(){var y=this.cachedZSortedEles;if(y){y.drag=[],y.nondrag=[];for(var g=[],x=0;x<y.length;x++){var T=y[x],A=T._private.rscratch;T.grabbed()&&!T.isParent()?g.push(T):A.inDragLayer?y.drag.push(T):y.nondrag.push(T)}for(var x=0;x<g.length;x++){var T=g[x];y.drag.push(T)}}},b9.invalidateCachedZSortedEles=function(){this.cachedZSortedEles=null},b9.getCachedZSortedEles=function(y){if(y||!this.cachedZSortedEles){var g=this.cy.mutableElements().toArray();g.sort(pB),g.interactive=g.filter(function(x){return x.interactive()}),this.cachedZSortedEles=g,this.updateCachedGrabbedEles()}else g=this.cachedZSortedEles;return g};var jk={};[L3,p9,id,Bk,YL,yp,th,Rk,b9].forEach(function(y){me(jk,y)});var GB={};GB.getCachedImage=function(y,g,x){var T=this,A=T.imageCache=T.imageCache||{},D=A[y];if(D)return D.image.complete||D.image.addEventListener("load",x),D.image;D=A[y]=A[y]||{};var O=D.image=new Image;O.addEventListener("load",x),O.addEventListener("error",function(){O.error=!0});var $="data:",q=y.substring(0,$.length).toLowe
`+i,p.parser);const m=Le().securityLevel;let b;m==="sandbox"&&(b=yr("#i"+a));const _=yr(m==="sandbox"?b.nodes()[0].contentDocument.body:"body").select("#"+a);_.append("g");const L=p.db.getMindmap(),N=_.append("g");N.attr("class","mindmap-edges");const B=_.append("g");B.attr("class","mindmap-nodes"),Jjt(B,L,-1,v);const j=await dWe(L,v);fWe(N,j),gWe(j),cT(void 0,_,v.mindmap.padding,v.mindmap.useMaxWidth)}},bWe=i=>{let a="";for(let f=0;f<i.THEME_COLOR_LIMIT;f++)i["lineColor"+f]=i["lineColor"+f]||i["cScaleInv"+f],J7(i["lineColor"+f])?i["lineColor"+f]=bs(i["lineColor"+f],20):i["lineColor"+f]=js(i["lineColor"+f],20);for(let f=0;f<i.THEME_COLOR_LIMIT;f++){const p=""+(17-3*f);a+=`
.section-${f-1} rect, .section-${f-1} path, .section-${f-1} circle, .section-${f-1} polygon, .section-${f-1} path {
fill: ${i["cScale"+f]};
}
.section-${f-1} text {
fill: ${i["cScaleLabel"+f]};
}
.node-icon-${f-1} {
font-size: 40px;
color: ${i["cScaleLabel"+f]};
}
.section-edge-${f-1}{
stroke: ${i["cScale"+f]};
}
.edge-depth-${f-1}{
stroke-width: ${p};
}
.section-${f-1} line {
stroke: ${i["cScaleInv"+f]} ;
stroke-width: 3;
}
.disabled, .disabled circle, .disabled text {
fill: lightgray;
}
.disabled text {
fill: #efefef;
}
`}return a},vWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{db:ZUe,renderer:pWe,parser:qUe,styles:i=>`
.edge {
stroke-width: 3;
}
${bWe(i)}
.section-root rect, .section-root path, .section-root circle, .section-root polygon {
fill: ${i.git0};
}
.section-root text {
fill: ${i.gitBranchLabel0};
}
.icon-container {
height:100%;
display: flex;
justify-content: center;
align-items: center;
}
.edge {
fill: none;
}
.mindmap-node-label {
dy: 1em;
alignment-baseline: middle;
text-anchor: middle;
dominant-baseline: middle;
text-align: center;
}
`}},Symbol.toStringTag,{value:"Module"}));var Wgt=function(){var i=function(E,_,L,N){for(L=L||{},N=E.length;N--;L[E[N]]=_);return L},a=[1,9],f=[1,10],p=[1,5,10,12],v={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(_,L,N,B,j,R,z){var K=R.length-1;switch(j){case 7:const it=B.findOrCreateNode(R[K-4].trim().replaceAll('""','"')),st=B.findOrCreateNode(R[K-2].trim().replaceAll('""','"')),ut=parseFloat(R[K].trim());B.addLink(it,st,ut);break;case 8:case 9:case 11:this.$=R[K];break;case 10:this.$=R[K-1];break}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:a,20:f},{1:[2,6],7:11,10:[1,12]},i(f,[2,4],{9:13,5:[1,14]}),{12:[1,15]},i(p,[2,8]),i(p,[2,9]),{19:[1,16]},i(p,[2,11]),{1:[2,1]},{1:[2,5]},i(f,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:a,20:f},{15:18,16:7,17:8,18:a,20:f},{18:[1,19]},i(f,[2,3]),{12:[1,20]},i(p,[2,10]),{15:21,16:7,17:8,18:a,20:f},i([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:function(_,L){if(L.recoverable)this.trace(_);else{var N=new Error(_);throw N.hash=L,N}},parse:function(_){var L=this,N=[0],B=[],j=[null],R=[],z=this.table,K="",it=0,st=0,ut=2,bt=1,mt=R.slice.call(arguments,1),yt=Object.create(this.lexer),dt={yy:{}};for(var ht in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ht)&&(dt.yy[ht]=this.yy[ht]);yt.setInput(_,dt.yy),dt.yy.lexer=yt,dt.yy.parser=this,typeof yt.yylloc>"u"&&(yt.yylloc={});var wt=yt.yylloc;R.push(wt);var X=yt.options&&yt.options.ranges;typeof dt.yy.parseError=="function"?this.parseError=dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pt(){var It;return It=B.pop()||yt.lex()||bt,typeof It!="number"&&(It instanceof Array&&(B=It,It=B.pop()),It=L.symbols_[It]||It),It}for(var U,xt,nt,Ot,Nt={},qt,Ct,Z,Tt;;){if(xt=N[N.length-1],this.defaultActions[xt]?nt=this.defaultActions[xt]:((U===null||typeof U>"u")&&(U=pt()),nt=z[xt]&&z[xt][U]),typeof nt>"u"||!nt.length||!nt[0]){var Ht="";Tt=[];for(qt in z[xt])this.terminals_[qt]&&qt>ut&&Tt.push("'"+this.terminals_[qt]+"'");yt.showPosition?Ht="Parse error on line "+(it+1)+`:
`+yt.showPosition()+`
Expecting `+Tt.join(", ")+", got '"+(this.terminals_[U]||U)+"'":Ht="Parse error on line "+(it+1)+": Unexpected "+(U==bt?"end of input":"'"+(this.terminals_[U]||U)+"'"),this.parseError(Ht,{text:yt.match,token:this.terminals_[U]||U,line:yt.yylineno,loc:wt,expected:Tt})}if(nt[0]instanceof Array&&nt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+xt+", token: "+U);switch(nt[0]){case 1:N.push(U),j.push(yt.yytext),R.push(yt.yylloc),N.push(nt[1]),U=null,st=yt.yyleng,K=yt.yytext,it=yt.yylineno,wt=yt.yylloc;break;case 2:if(Ct=this.productions_[nt[1]][1],Nt.$=j[j.length-Ct],Nt._$={first_line:R[R.length-(Ct||1)].first_line,last_line:R[R.length-1].last_line,first_column:R[R.length-(Ct||1)].first_column,last_column:R[R.length-1].last_column},X&&(Nt._$.range=[R[R.length-(Ct||1)].range[0],R[R.length-1].range[1]]),Ot=this.performAction.apply(Nt,[K,st,it,dt.yy,nt[1],j,R].concat(mt)),typeof Ot<"u")return Ot;Ct&&(N=N.slice(0,-1*Ct*2),j=j.slice(0,-1*Ct),R=R.slice(0,-1*Ct)),N.push(this.productions_[nt[1]][0]),j.push(Nt.$),R.push(Nt._$),Z=z[N[N.length-2]][N[N.length-1]],N.push(Z);break;case 3:return!0}}return!0}},m=function(){var E={EOF:1,parseError:function(L,N){if(this.yy.parser)this.yy.parser.parseError(L,N);else throw new Error(L)},setInput:function(_,L){return this.yy=L||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 L=_.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),_},unput:function(_){var L=_.length,N=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;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),N.length-1&&(this.yylineno-=N.length-1);var j=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===B.length?this.yylloc.first_column:0)+B[B.length-N.length].length-N[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[j[0],j[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(_){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(),L=new Array(_.length+1).join("-");return _+this.upcomingInput()+`
`+L+"^"},test_match:function(_,L){var N,B,j;if(this.options.backtrack_lexer&&(j={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&&(j.yylloc.range=this.yylloc.range.slice(0))),B=_[0].match(/(?:\r\n?|\n).*/g),B&&(this.yylineno+=B.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:B?B[B.length-1].length-B[B.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+_[0].length},this.yytext+=_[0],this.match+=_[0],this.matches=_,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(_[0].length),this.matched+=_[0],N=this.performAction.call(this,this.yy,this,L,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),N)return N;if(this._backtrack){for(var R in j)this[R]=j[R];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var _,L,N,B;this._more||(this.yytext="",this.match="");for(var j=this._currentRules(),R=0;R<j.length;R++)if(N=this._input.match(this.rules[j[R]]),N&&(!L||N[0].length>L[0].length)){if(L=N,B=R,this.options.backtrack_lexer){if(_=this.test_match(N,j[R]),_!==!1)return _;if(this._backtrack){L=!1;continue}else return!1}else if(!this.options.flex)break}return L?(_=this.test_match(L,j[B]),_!==!1?_:!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 L=this.next();return L||this.lex()},begin:function(L){this.conditionStack.push(L)},popState:function(){var L=this.conditionStack.length-1;return L>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(L){return L=this.conditionStack.length-1-Math.abs(L||0),L>=0?this.conditionStack[L]:"INITIAL"},pushState:function(L){this.begin(L)},stateStackSize:function(){return this.conditionStack.length},options:{easy_keword_rules:!0},performAction:function(L,N,B,j){switch(B){case 0:return this.pushState("csv"),4;case 1:return 10;case 2:return 5;case 3:return 12;case 4:return this.pushState("escaped_text"),18;case 5:return 20;case 6:return this.popState("escaped_text"),18;case 7:return 19}},rules:[/^(?:sankey-beta\b)/,/^(?:$)/,/^(?:((\u000D\u000A)|(\u000A)))/,/^(?:(\u002C))/,/^(?:(\u0022))/,/^(?:([\u0020-\u0021\u0023-\u002B\u002D-\u007E])*)/,/^(?:(\u0022)(?!(\u0022)))/,/^(?:(([\u0020-\u0021\u0023-\u002B\u002D-\u007E])|(\u002C)|(\u000D)|(\u000A)|(\u0022)(\u0022))*)/],conditions:{csv:{rules:[1,2,3,4,5,6,7],inclusive:!1},escaped_text:{rules:[6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7],inclusive:!0}}};return E}();v.lexer=m;function b(){this.yy={}}return b.prototype=v,v.Parser=b,new b}();Wgt.parser=Wgt;const UK=Wgt;let WK=[],KK=[],vL={};const wWe=()=>{WK=[],KK=[],vL={},ap()};class mWe{constructor(a,f,p=0){this.source=a,this.target=f,this.value=p}}const yWe=(i,a,f)=>{WK.push(new mWe(i,a,f))};class xWe{constructor(a){this.ID=a}}const kWe={nodesMap:vL,getConfig:()=>Le().sankey,getNodes:()=>KK,getLinks:()=>WK,getGraph:()=>({nodes:KK.map(i=>({id:i.ID})),links:WK.map(i=>({source:i.source.ID,target:i.target.ID,value:i.value}))}),addLink:yWe,findOrCreateNode:i=>(i=Yr.sanitizeText(i,Le()),vL[i]||(vL[i]=new xWe(i),KK.push(vL[i])),vL[i]),getAccTitle:op,setAccTitle:cg,getAccDescription:up,setAccDescription:cp,getDiagramTitle:Db,setDiagramTitle:Z2,clear:wWe};function e$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f<p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f<v||f===void 0&&v>=v)&&(f=v)}return f}function n$t(i,a){let f;if(a===void 0)for(const p of i)p!=null&&(f>p||f===void 0&&p>=p)&&(f=p);else{let p=-1;for(let v of i)(v=a(v,++p,i))!=null&&(f>v||f===void 0&&v>=v)&&(f=v)}return f}function Kgt(i,a){let f=0;if(a===void 0)for(let p of i)(p=+p)&&(f+=p);else{let p=-1;for(let v of i)(v=+a(v,++p,i))&&(f+=v)}return f}function EWe(i){return i.target.depth}function TWe(i){return i.depth}function CWe(i,a){return a-1-i.height}function r$t(i,a){return i.sourceLinks.length?i.depth:a-1}function _We(i){return i.targetLinks.length?i.depth:i.sourceLinks.length?n$t(i.sourceLinks,EWe)-1:0}function YK(i){return function(){return i}}function i$t(i,a){return XK(i.source,a.source)||i.index-a.index}function s$t(i,a){return XK(i.target,a.target)||i.index-a.index}function XK(i,a){return i.y0-a.y0}function Ygt(i){return i.value}function SWe(i){return i.index}function AWe(i){return i.nodes}function LWe(i){return i.links}function a$t(i,a){const f=i.get(a);if(!f)throw new Error("missing: "+a);return f}function o$t({nodes:i}){for(const a of i){let f=a.y0,p=f;for(const v of a.sourceLinks)v.y0=f+v.width/2,f+=v.width;for(const v of a.targetLinks)v.y1=p+v.width/2,p+=v.width}}function MWe(){let i=0,a=0,f=1,p=1,v=24,m=8,b,E=SWe,_=r$t,L,N,B=AWe,j=LWe,R=6;function z(){const Nt={nodes:B.apply(null,arguments),links:j.apply(null,arguments)};return K(Nt),it(Nt),st(Nt),ut(Nt),yt(Nt),o$t(Nt),Nt}z.update=function(Nt){return o$t(Nt),Nt},z.nodeId=function(Nt){return arguments.length?(E=typeof Nt=="function"?Nt:YK(Nt),z):E},z.nodeAlign=function(Nt){return arguments.length?(_=typeof Nt=="function"?Nt:YK(Nt),z):_},z.nodeSort=function(Nt){return arguments.length?(L=Nt,z):L},z.nodeWidth=function(Nt){return arguments.length?(v=+Nt,z):v},z.nodePadd
${z}${Math.round(U*100)/100}${K}`:pt;L.append("g").attr("class","node-labels").attr("font-family","sans-serif").attr("font-size",14).selectAll("text").data(st.nodes).join("text").attr("x",pt=>pt.x0<N/2?pt.x1+6:pt.x0-6).attr("y",pt=>(pt.y1+pt.y0)/2).attr("dy",`${it?"0":"0.35"}em`).attr("text-anchor",pt=>pt.x0<N/2?"start":"end").text(dt);const ht=L.append("g").attr("class","links").attr("fill","none").attr("stroke-opacity",.5).selectAll(".link").data(st.links).join("g").attr("class","link").style("mix-blend-mode","multiply"),wt=(m==null?void 0:m.linkColor)||"gradient";if(wt==="gradient"){const pt=ht.append("linearGradient").attr("id",U=>(U.uid=tpt.next("linearGradient-")).id).attr("gradientUnits","userSpaceOnUse").attr("x1",U=>U.source.x1).attr("x2",U=>U.target.x0);pt.append("stop").attr("offset","0%").attr("stop-color",U=>yt(U.source.id)),pt.append("stop").attr("offset","100%").attr("stop-color",U=>yt(U.target.id))}let X;switch(wt){case"gradient":X=pt=>pt.uid;break;case"source":X=pt=>yt(pt.source.id);break;case"target":X=pt=>yt(pt.target.id);break;default:X=wt}ht.append("path").attr("d",qWe()).attr("stroke",X).attr("stroke-width",pt=>Math.max(1,pt.width))}},VWe=i=>i.replaceAll(/^[^\S\n\r]+|[^\S\n\r]+$/g,"").replaceAll(/([\n\r])+/g,`
`).trim(),UWe=UK.parse.bind(UK);UK.parse=i=>UWe(VWe(i));const WWe=Object.freeze(Object.defineProperty({__proto__:null,diagram:{parser:UK,db:kWe,renderer:GWe}},Symbol.toStringTag,{value:"Module"}));return Ob});
</script></script><script>/* global mermaid */
function mermaidReady() {
// The Mermaid initialization code renders the Mermaid code within any element with class "mermaid" or
// ID "mermaid". However in some cases some elements might have this ID but not be Mermaid code.
// For example, Markdown code like this:
//
// # Mermaid
//
// Will generate this HTML:
//
// <h1 id="mermaid">Mermaid</h1>
//
// And that's going to make the lib set the `mermaid` object to the H1 element.
// So below, we double-check that what we have really is an instance of the library.
return typeof mermaid !== 'undefined' && mermaid !== null && typeof mermaid === 'object' && !!mermaid.init;
}
function mermaidInit() {
// Mermaid's wonderful API has two init methods: init() and initialize().
// init() is deprectated but works, and initialize() is recommended but doesn't
// work, so let's use init() for now.
if (mermaidReady()) {
try {
mermaid.init();
} catch (error) {
console.error('Mermaid error', error);
}
// Resetting elements size - see mermaid.ts
const elements = document.getElementsByClassName('mermaid');
for (const element of elements) {
element.style.width = '100%';
}
}
}
document.addEventListener('joplin-noteDidUpdate', () => {
mermaidInit();
});
const initIID_ = setInterval(() => {
const isReady = mermaidReady();
if (isReady) {
clearInterval(initIID_);
mermaidInit();
}
}, 100);
</script></script><style>pre code.hljs {
display: block;
overflow-x: auto;
padding: 1em;
}
code.hljs {
padding: 3px 5px;
}
.hljs {
color: #383a42;
background: #fafafa;
}
.hljs-comment,
.hljs-quote {
color: #a0a1a7;
font-style: italic;
}
.hljs-doctag,
.hljs-formula,
.hljs-keyword {
color: #a626a4;
}
.hljs-deletion,
.hljs-name,
.hljs-section,
.hljs-selector-tag,
.hljs-subst {
color: #e45649;
}
.hljs-literal {
color: #0184bb;
}
.hljs-addition,
.hljs-attribute,
.hljs-meta .hljs-string,
.hljs-regexp,
.hljs-string {
color: #50a14f;
}
.hljs-attr,
.hljs-number,
.hljs-selector-attr,
.hljs-selector-class,
.hljs-selector-pseudo,
.hljs-template-variable,
.hljs-type,
.hljs-variable {
color: #986801;
}
.hljs-bullet,
.hljs-link,
.hljs-meta,
.hljs-selector-id,
.hljs-symbol,
.hljs-title {
color: #4078f2;
}
.hljs-built_in,
.hljs-class .hljs-title,
.hljs-title.class_ {
color: #c18401;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: 700;
}
.hljs-link {
text-decoration: underline;
}</style>
<title>Nextcloud Serverinstallation auf Almalinux 9.x und Debian 12</title>
</head>
<body>
<div class="exported-note"><div class="exported-note-title">Nextcloud Serverinstallation auf Almalinux 9.x und Debian 12</div>
<style>
/* https://necolas.github.io/normalize.css/ */
html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}
pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}
b,strong{font-weight:bolder}small{font-size:80%}img{border-style:none}
body {
font-size: 15px;
color: #32373F;
word-wrap: break-word;
line-height: 1.6em;
background-color: #ffffff;
font-family: 'Avenir', 'Arial', sans-serif;
padding-bottom: 0px;
padding-top: 0px;
}
kbd {
border: 1px solid rgb(220, 220, 220);
box-shadow: inset 0 -1px 0 rgb(220, 220, 220);
padding: 2px 4px;
border-radius: 3px;
background-color: rgb(243, 243, 243);
}
::-webkit-scrollbar {
width: 7px;
height: 7px;
}
::-webkit-scrollbar-corner {
background: none;
}
::-webkit-scrollbar-track {
border: none;
}
::-webkit-scrollbar-thumb {
background: rgba(100, 100, 100, 0.3);
border-radius: 5px;
}
::-webkit-scrollbar-track:hover {
background: rgba(0, 0, 0, 0.1);
}
::-webkit-scrollbar-thumb:hover {
background: rgba(100, 100, 100, 0.7);
}
/* Remove top padding and margin from first child so that top of rendered text is aligned to top of text editor text */
#rendered-md > h1:first-child,
#rendered-md > h2:first-child,
#rendered-md > h3:first-child,
#rendered-md > h4:first-child,
#rendered-md > ul:first-child,
#rendered-md > ol:first-child,
#rendered-md > table:first-child,
#rendered-md > blockquote:first-child,
#rendered-md > img:first-child,
#rendered-md > p:first-child {
margin-top: 0;
padding-top: 0;
}
p, h1, h2, h3, h4, h5, h6, ul, table {
margin-top: .6em;
margin-bottom: 1.35em;
/*
Adds support for RTL text in the note body. It automatically detects the direction using the content.
Issue: https://github.com/laurent22/joplin/issues/3991
*/
unicode-bidi: plaintext;
}
h1, h2, h3, h4, h5, h6, ul, table {
margin-bottom: 0.65em;
}
h1, h2, h3, h4, h5, h6 {
line-height: 1.5em;
}
h1 {
font-size: 1.5em;
font-weight: bold;
border-bottom: 1px solid #dddddd;
padding-bottom: .3em;
}
h2 {
font-size: 1.3em;
font-weight: bold;
padding-bottom: .1em; */
}
h3 {
font-size: 1.1em;
font-weight: bold;
}
h4, h5, h6 {
font-size: 1em;
font-weight: bold;
}
.exported-note-title {
font-size: 2em;
font-weight: bold;
margin-bottom: 0.8em;
line-height: 1.5em;
padding-bottom: .35em;
border-bottom: 1px solid #dddddd;
}
a {
color: #155BDA;
}
ul, ol {
padding-left: 0;
margin-left: 1.7em;
}
li {
margin-bottom: .4em;
}
li p {
margin-top: 0.2em;
margin-bottom: 0;
}
.resource-icon {
display: inline-block;
position: relative;
top: 0.3em;
text-decoration: none;
width: 1.2em;
height: 1.4em;
margin-right: 0.4em;
background-color: #155BDA;
}
/* These icons are obtained from the wonderful ForkAwesome project by copying the src svgs
* into the css classes below.
* svgs are obtained from https://github.com/ForkAwesome/Fork-Awesome/tree/master/src/icons/svg
* instead of the svg width, height property you must use a viewbox here, 0 0 1536 1792 is typically the actual size of the icon
* each line begins with the pre-amble -webkit-mask: url("data:image/svg+xml;utf8,
* and of course finishes with ");
* to precvent artifacts it is also necessary to include -webkit-mask-repeat: no-repeat;
* on the following line
* */
.fa-joplin {
/* Awesome Font file */
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M373.834 128C168.227 128 0 296.223 0 501.834v788.336C0 1495.778 168.227 1664 373.834 1664h788.336c205.608 0 373.83-168.222 373.83-373.83V501.834C1536 296.224 1367.778 128 1162.17 128zm397.222 205.431h417.424a7.132 7.132 0 0 1 7.132 7.133v132.552c0 4.461-3.619 8.073-8.077 8.073h-57.23c-24.168 0-43.768 19.338-44.284 43.374v2.377h-.017v136.191h-.053l-.466 509.375c-5.02 77.667-39.222 149.056-96.324 201.046-60.28 54.834-141.948 85.017-229.962 85.017-12.45 0-25.208-.61-37.907-1.785-92.157-8.682-181.494-48.601-251.662-112.438-71.99-65.517-117.147-150.03-127.164-238-11.226-98.763 23.42-192.783 95.045-257.937 81.99-74.637 198.185-101.768 316.613-75.704 5.574 1.227 9.55 6.282 9.55 11.997v199.52c-.199 2.625-1.481 6.599-8.183 2.896-.663-.365-1.194-.511-1.653-.531-21.987-10.587-45.159-17.57-68.559-19.916-.38-.04-.757-.124-1.138-.163-.537-.048-1.034-.033-1.556-.075-4.13-.354-8.183-.517-12.203-.58-.87-.011-1.771-.127-2.641-.127-.486 0-.951.05-1.437.057-1.464.011-2.886.115-4.33.163-2.76.102-5.497.211-8.182.448-.273.024-.547.07-.835.097-25.509 2.4-47.864 11.104-65.012 25.47-.954.802-1.974 1.53-2.9 2.36a1.34 1.34 0 0 1-.168.146c-23.96 21.8-34.881 53.872-30.726 90.316 4.62 40.737 26.94 81.156 62.841 113.823 35.908 32.67 80.335 52.977 125.113 57.186 35.118 3.36 66.547-3.919 89.899-20.461a97.255 97.255 0 0 0 9.365-7.501c2.925-2.661 5.569-5.5 8.086-8.416.3-.348.672-.673.975-1.024 8.253-9.864 14.222-21.067 17.996-33.148.639-2.034 1.051-4.148 1.564-6.227.381-1.563.81-3.106 1.112-4.693.555-2.784.923-5.632 1.253-8.49.086-.709.183-1.414.237-2.128.492-4.893.693-9.858.55-14.91h.013V521.623c-2.01-22.626-20.78-40.434-43.928-40.434h-57.23a8.071 8.071 0 0 1-8.077-8.073V340.564a7.132 7.132 0 0 1 7.136-7.133z'/></svg>");
}
.fa-file-image {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zm-128-448v320H256v-192l192-192 128 128 384-384zm-832-192c-106 0-192-86-192-192s86-192 192-192 192 86 192 192-86 192-192 192z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-pdf {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zm-514-593c25 20 53 38 84 56 42-5 81-7 117-7 67 0 152 8 177 49 7 10 13 28 2 52-1 1-2 3-3 4v1c-3 18-18 38-71 38-64 0-161-29-245-73-139 15-285 46-392 83-103 176-182 262-242 262-10 0-19-2-28-7l-24-12c-3-1-4-3-6-5-5-5-9-16-6-36 10-46 64-123 188-188 8-5 18-2 23 6 1 1 2 3 2 4 31-51 67-116 107-197 45-90 80-178 104-262-32-109-42-221-24-287 7-25 22-40 42-40h22c15 0 27 5 35 15 12 14 15 36 9 68-1 3-2 6-4 8 1 3 1 5 1 8v30c-1 63-2 123-14 192 35 105 87 190 146 238zm-576 411c30-14 73-57 137-158-75 58-122 124-137 158zm398-920c-10 28-10 76-2 132 3-16 5-31 7-44 2-17 5-31 7-43 1-3 2-5 4-8-1-1-1-3-2-5-1-18-7-29-13-36 0 2-1 3-1 4zm-124 661c88-35 186-63 284-81-10-8-20-15-29-23-49-43-93-103-127-176-19 61-47 126-83 197-15 28-30 56-45 83zm646-16c-5-5-31-24-140-24 49 18 94 28 124 28 9 0 14 0 18-1 0-1-1-2-2-3z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-word {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zM233 768v107h70l164 661h159l128-485c5-15 8-30 10-46 1-8 2-16 2-24h4l3 24c3 14 4 30 9 46l128 485h159l164-661h70V768h-300v107h90l-99 438c-4 16-6 33-7 46l-2 21h-4c0-6-2-14-3-21-3-13-5-30-9-46L825 768H711l-144 545c-4 16-5 33-8 46l-4 21h-4l-2-21c-1-13-3-30-7-46l-99-438h90V768H233z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-powerpoint {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zm-992-234v106h327v-106h-93v-167h137c43 0 82-2 118-15 90-31 146-124 146-233s-54-193-137-228c-38-15-84-19-130-19H416v107h92v555h-92zm353-280H650V882h120c35 0 62 6 83 18 36 21 56 62 56 115 0 56-20 99-62 120-21 10-47 15-78 15z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-excel {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zm-979-234v106h281v-106h-75l103-161c12-19 18-34 21-34h2c1 4 3 7 5 10 4 8 10 14 17 24l107 161h-76v106h291v-106h-68l-192-273 195-282h67V768H828v107h74l-103 159c-12 19-21 34-21 33h-2c-1-4-3-7-5-10-4-7-9-14-17-23L648 875h76V768H434v107h68l189 272-194 283h-68z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-audio {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zM620 850c12 5 20 17 20 30v544c0 13-8 25-20 30-4 1-8 2-12 2-8 0-16-3-23-9l-166-167H288c-18 0-32-14-32-32v-192c0-18 14-32 32-32h131l166-167c10-9 23-12 35-7zm417 689c19 0 37-8 50-24 83-102 129-231 129-363s-46-261-129-363c-22-28-63-32-90-10-28 23-32 63-9 91 65 80 100 178 100 282s-35 202-100 282c-23 28-19 68 9 90 12 10 26 15 40 15zm-211-148c17 0 34-7 47-20 56-60 87-137 87-219s-31-159-87-219c-24-26-65-27-91-3-25 24-27 65-2 91 33 36 52 82 52 131s-19 95-52 131c-25 26-23 67 2 91 13 11 29 17 44 17z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-video {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zM768 768c70 0 128 58 128 128v384c0 70-58 128-128 128H384c-70 0-128-58-128-128V896c0-70 58-128 128-128h384zm492 2c12 5 20 17 20 30v576c0 13-8 25-20 30-4 1-8 2-12 2-8 0-17-3-23-9l-265-266v-90l265-266c6-6 15-9 23-9 4 0 8 1 12 2z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-archive {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M640 384V256H512v128h128zm128 128V384H640v128h128zM640 640V512H512v128h128zm128 128V640H640v128h128zm700-388c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H768v128H640V128H128v1536h1280zM781 943c85 287 107 349 107 349 5 17 8 34 8 52 0 111-108 192-256 192s-256-81-256-192c0-18 3-35 8-52 0 0 21-62 120-396V768h128v128h79c29 0 54 19 62 47zm-141 465c71 0 128-29 128-64s-57-64-128-64-128 29-128 64 57 64 128 64z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-code {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zM480 768c11-14 31-17 45-6l51 38c14 11 17 31 6 45l-182 243 182 243c11 14 8 34-6 45l-51 38c-14 11-34 8-45-6l-226-301c-8-11-8-27 0-38zm802 301c8 11 8 27 0 38l-226 301c-11 14-31 17-45 6l-51-38c-14-11-17-31-6-45l182-243-182-243c-11-14-8-34 6-45l51-38c14-11 34-8 45 6zm-620 461c-18-3-29-20-26-37l138-831c3-18 20-29 37-26l63 10c18 3 29 20 26 37l-138 831c-3 18-20 29-37 26z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file-alt, .fa-file-csv {
/* fork-awesome doesn't have csv so we use the text icon */
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280zM384 800c0-18 14-32 32-32h704c18 0 32 14 32 32v64c0 18-14 32-32 32H416c-18 0-32-14-32-32v-64zm736 224c18 0 32 14 32 32v64c0 18-14 32-32 32H416c-18 0-32-14-32-32v-64c0-18 14-32 32-32h704zm0 256c18 0 32 14 32 32v64c0 18-14 32-32 32H416c-18 0-32-14-32-32v-64c0-18 14-32 32-32h704z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
.fa-file {
-webkit-mask: url("data:image/svg+xml;utf8,<svg viewBox='0 0 1536 1792' xmlns='http://www.w3.org/2000/svg'><path d='M1468 380c37 37 68 111 68 164v1152c0 53-43 96-96 96H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h896c53 0 127 31 164 68zm-444-244v376h376c-6-17-15-34-22-41l-313-313c-7-7-24-16-41-22zm384 1528V640H992c-53 0-96-43-96-96V128H128v1536h1280z'/></svg>");
-webkit-mask-repeat: no-repeat;
}
blockquote {
border-left: 4px solid rgb(220, 220, 220);
padding-left: 1.2em;
margin-left: 0;
opacity: 0.7;
}
.jop-tinymce table,
table {
text-align: left;
border-collapse: collapse;
border: 1px solid rgb(220, 220, 220);
background-color: #ffffff;
}
.jop-tinymce table td, .jop-tinymce table th,
table td, th {
text-align: left;
padding: .5em 1em .5em 1em;
font-size: 15;
color: #32373F;
font-family: 'Avenir', 'Arial', sans-serif;
}
.jop-tinymce table td,
table td {
border: 1px solid rgb(220, 220, 220);
}
.jop-tinymce table th,
table th {
border: 1px solid rgb(220, 220, 220);
border-bottom: 2px solid rgb(220, 220, 220);
background-color: rgb(247, 247, 247);
}
.jop-tinymce table tr:nth-child(even),
table tr:nth-child(even) {
background-color: rgb(247, 247, 247);
}
.jop-tinymce table tr:hover,
table tr:hover {
background-color: #e5e5e5;
}
hr {
border: none;
border-bottom: 2px solid #dddddd;
}
img {
max-width: 100%;
height: auto;
}
.inline-code,
.mce-content-body code {
border: 1px solid rgb(220, 220, 220);
background-color: rgb(243, 243, 243);
padding-right: .2em;
padding-left: .2em;
border-radius: .25em;
color: rgb(0,0,0);
font-size: .9em;
}
.highlighted-keyword {
background-color: #F3B717;
color: black;
}
.not-loaded-resource img {
width: 1.15em;
height: 1.15em;
background: white;
padding: 2px !important;
border-radius: 2px;
box-shadow: 0 1px 3px #000000aa;
}
a.not-loaded-resource img {
margin-right: .2em;
}
a.not-loaded-resource {
display: flex;
flex-direction: row;
align-items: center;
}
.md-checkbox input[type=checkbox]:checked {
opacity: 0.7;
}
.jop-tinymce ul.joplin-checklist .checked,
.md-checkbox .checkbox-label-checked {
opacity: 0.5;
}
.exported-note {
padding: 1em;
}
.joplin-editable .joplin-source {
display: none;
}
mark {
background: #F7D26E;
color: black;
}
/* =============================================== */
/* For TinyMCE */
/* =============================================== */
.mce-content-body {
/* Note: we give a bit more padding at the bottom, to allow scrolling past the end of the document */
padding: 5px 10px 10em 0;
}
/*
.mce-content-body code {
background-color: transparent;
}
*/
.mce-content-body [data-mce-selected=inline-boundary] {
background-color: transparent;
}
.mce-content-body .joplin-editable {
cursor: pointer !important;
}
.mce-content-body.mce-content-readonly {
opacity: 0.5;
}
/* We need that to make sure click events have the A has a target */
.katex a span {
pointer-events: none;
}
.media-player {
width: 100%;
margin-top: 10px;
}
.media-player.media-pdf {
min-height: 35rem;
width: 100%;
max-width: 1000px;
margin: 0;
border: 0;
display: block;
}
/* Clear the CODE style if the element is within a joplin-editable block */
.mce-content-body .joplin-editable code {
border: none;
background: none;
padding: 0;
color: inherit;
font-size: inherit;
}
/* To make code blocks horizontally scrollable */
/* https://github.com/laurent22/joplin/issues/5740 */
pre.hljs {
overflow-x: auto;
}
/* =============================================== */
/* For TinyMCE */
/* =============================================== */
@media print {
body {
height: auto !important;
}
pre {
white-space: pre-wrap;
}
.code, .inline-code {
border: 1px solid #CBCBCB;
}
#joplin-container-content {
/* The height of the content is set dynamically by JavaScript (in updateBodyHeight) to go
around various issues related to scrolling. However when printing we don't want this
fixed size as that would crop the content. So we set it to auto here. "important" is
needed to override the style set by JavaScript at the element-level. */
height: auto !important;
}
}
/*
FOR THE MARKDOWN EDITOR
*/
/* Remove the indentation from the checkboxes at the root of the document
(otherwise they are too far right), but keep it for their children to allow
nested lists. Make sure this value matches the UL margin. */
li.md-checkbox {
list-style-type: none;
}
li.md-checkbox input[type=checkbox] {
margin-left: -1.71em;
margin-right: 0.7em;
}
ul.joplin-checklist {
list-style:none;
}
/*
FOR THE RICH TEXT EDITOR
*/
ul.joplin-checklist li::before {
content:"\f14a";
font-family:"Font Awesome 5 Free";
background-size: 16px 16px;
pointer-events: all;
cursor: pointer;
width: 1em;
height: 1em;
margin-left: -1.3em;
position: absolute;
color: #32373F;
}
.joplin-checklist li:not(.checked)::before {
content:"\f0c8";
}
.mermaid { background-color: white; width: 640px; }
.mermaid-export-graph { visibility: hidden; }
.joplin-editable:hover .mermaid-export-graph { visibility: visible; }
.mermaid-export-graph:hover { background-color: #CBDAF1 !important; }</style><div id="rendered-md"><h1 id="nextcloud-serverinstallation-auf-almalinux-9x-und-debian-12-mit-docker-compose-nginx-als-reverse-proxy-und-monitoring-von-docker-erstellen">Nextcloud Serverinstallation auf Almalinux 9.x und Debian 12 mit Docker Compose, Nginx als Reverse Proxy und Monitoring von Docker erstellen</h1>
<p><strong>Version: 1.2 <em>2024-01-04 15:00 Simon Rieger</em></strong></p>
<ol>
<li>
<p><a data-from-md="" title="#almalinux-herunterladen-und-installieren" href="#almalinux-herunterladen-und-installieren">Almalinux herunterladen und installieren</a><br/>
1.1 <a data-from-md="" title="#almalinux-herunterladen" href="#almalinux-herunterladen">Almalinux herunterladen</a><br/>
1.2 <a data-from-md="" title="#debian-herunterladen" href="#debian-herunterladen">Debian herunterladen</a><br/>
1.3 <a data-from-md="" title="#hardwareanforderungen-beachten" href="#hardwareanforderungen-beachten">Hardwareanforderungen beachten</a><br/>
1.4 <a data-from-md="" title="#zeitzone-einstellen" href="#zeitzone-einstellen">Zeitzone einstellen</a><br/>
1.5 <a data-from-md="" title="#root-benutzer-deaktivieren-und-nli-server-benutzer-anlegen" href="#root-benutzer-deaktivieren-und-nli-server-benutzer-anlegen">Root-Benutzer deaktivieren und nli-server Benutzer anlegen</a><br/>
1.6 <a data-from-md="" title="#netzwerkeinstellungen" href="#netzwerkeinstellungen">Netzwerkeinstellungen</a><br/>
1.7 <a data-from-md="" title="#minimalinstallation-durchfuehren" href="#minimalinstallation-durchfuehren">Minimalinstallation durchf&uuml;hren</a></p>
</li>
<li>
<p><a data-from-md="" title="#distribution-starten-und-docker-compose-einrichten" href="#distribution-starten-und-docker-compose-einrichten">Distribution starten und Docker Compose einrichten</a><br/>
2.1 <a data-from-md="" title="#installation-unter-almalinux" href="#installation-unter-almalinux">Installation unter Almalinux</a><br/>
2.2 <a data-from-md="" title="#nstallation-unter-vsphere" href="#nstallation-unter-vsphere">Installation unter Vsphere</a><br/>
2.3 <a data-from-md="" title="#installation-unter-debian" href="#installation-unter-debian">Installation unter Debian</a><br/>
2.4 <a data-from-md="" title="#docker-daemon-service-setzen" href="#docker-daemon-service-setzen">Docker-Daemon Service setzen</a><br/>
2.5 <a data-from-md="" title="#chrony-einrichten" href="#chrony-einrichten">Chrony einrichten</a><br/>
2.6 <a data-from-md="" title="#einrichten-von-mehreren-festplatten" href="#einrichten-von-mehreren-festplatten">Einrichten von mehreren Festplatten</a></p>
</li>
<li>
<p><a data-from-md="" title="#installieren-von-der-nextcloud" href="#installieren-von-der-nextcloud">Installieren von Nextcloud</a><br/>
3.1 <a data-from-md="" title="#ordnerstrukturen-anlegen" href="#ordnerstrukturen-anlegen">Ordnerstrukturen anlegen</a><br/>
3.2 <a data-from-md="" title="#docker-datei-erstellen" href="#docker-datei-erstellen">Docker-Datei erstellen</a><br/>
3.3 <a data-from-md="" title="#nextcloud-server-starten" href="#nextcloud-server-starten">Nextcloud Server starten</a><br/>
3.4 <a data-from-md="" title="#verbindung-zur-nextcloud-per-port-forwarding-herstellen" href="#verbindung-zur-nextcloud-per-port-forwarding-herstellen">Verbindung zur Nextcloud per Port Forwarding herstellen</a><br/>
3.5 <a data-from-md="" title="#reverse-proxy-mit-nginx-einrichten" href="#reverse-proxy-mit-nginx-einrichten">Reverse Proxy mit Nginx einrichten</a><br/>
3.6 <a data-from-md="" title="#admin-benutzer-fuer-die-nextcloud-anlegen" href="#admin-benutzer-fuer-die-nextcloud-anlegen">Admin Benutzer f&uuml;r die Nextcloud anlegen</a><br/>
3.7 <a data-from-md="" title="#optimierungen" href="#optimierungen">Optimierungen</a></p>
</li>
<li>
<p><a data-from-md="" title="#nextcloud-cron-einrichten" href="#nextcloud-cron-einrichten">Nextcloud Cron einrichten</a></p>
</li>
<li>
<p><a data-from-md="" title="#nextcloud-container-updaten" href="#nextcloud-container-updaten">Nextcloud Container updaten</a><br/>
5.1 <a data-from-md="" title="#neue-nextcloud-hauptversion-verwendet" href="#neue-nextcloud-hauptversion-verwendet">Neue Nextcloud Hauptversion verwendet</a><br/>
5.2 <a data-from-md="" title="#docker-container-updaten" href="#docker-container-updaten">Docker Container updaten</a></p>
</li>
<li>
<p><a data-from-md="" title="#datenbank-und-dateien-von-einer-bereits-vorhandenen-instanz-migrieren" href="#datenbank-und-dateien-von-einer-bereits-vorhandenen-instanz-migrieren">Datenbank und Dateien von einer bereits vorhandenen Instanz migrieren</a><br/>
6.1 <a data-from-md="" title="#weitere-optimierungen-an-der-datenbank-nach-der-migration" href="#weitere-optimierungen-an-der-datenbank-nach-der-migration">Weitere Optimierungen an der Datenbank nach der Migration</a></p>
</li>
<li>
<p><a data-from-md="" title="#volltextsuche-und-ocr-mit-migrieren-und-installieren" href="#volltextsuche-und-ocr-mit-migrieren-und-installieren">Volltextsuche und OCR mit migrieren und installieren</a><br/>
7.1. <a data-from-md="" title="#anpassungen-f%C3%BCr-imagemagick" href="#anpassungen-f%C3%BCr-imagemagick">Anpassungen f&uuml;r ImageMagick</a><br/>
7.2. <a data-from-md="" title="#anpassung-f%C3%BCr-nextcloud" href="#anpassung-f%C3%BCr-nextcloud">Anpassung f&uuml;r Nextcloud</a><br/>
7.3. <a data-from-md="" title="#anpassungen-f%C3%BCr-elasticsearch" href="#anpassungen-f%C3%BCr-elasticsearch">Anpassungen f&uuml;r ElasticSearch</a></p>
</li>
<li>
<p><a data-from-md="" title="#quellen" href="#quellen">Quellen</a></p>
</li>
</ol>
<ul>
<li>Hinweis: bei der nachfolgenden Anleitung ist der Domainname durch den Namen &quot;webseite&quot; auszutauschen.</li>
</ul>
<h2 id="almalinux-herunterladen-und-installieren">Almalinux herunterladen und installieren <a name="almalinux-herunterladen-und-installieren" class="jop-noMdConv" href="#"></a></h2>
<p>Almalinux kann &uuml;ber folgenden Direktlink herunterladen werden:</p>
<p><a data-from-md="" title="http://almalinux.mirrors.itworxx.de/9/isos/x86_64/AlmaLinux-9-latest-x86_64-minimal.iso" href="http://almalinux.mirrors.itworxx.de/9/isos/x86_64/AlmaLinux-9-latest-x86_64-minimal.iso">Link zum herunterladen von Almalinux</a></p>
<p>oder Debian unter diesem Link:</p>
<p><a data-from-md="" title="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64-netinst.iso" href="https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64-netinst.iso">Link zum herunterladen von Debian</a></p>
<p>Bitte darauf achten das man eine Festplatte mit mindesten 64 GB als Datentr&auml;ger, 2 vCPUs und 4 GB RAM einbindet.</p>
<p>Anschlie&szlig;end muss die Zeitzone auf Europe/Berlin eingestellt werden.</p>
<p>Den Root-Benutzer kann man deaktivieren und als Benutzer &quot;nli-server&quot; mit Administratorrechten anlegen.</p>
<p>Falls das Netzwerk noch statisch eingerichtet werden muss, kann dies unter dem Reiter Netwerk eingerichtet werden, dabei kann auch noch der Hostname gesetzt werden, anschlie&szlig;end muss der Schriit noch extra best&auml;tigt werden.</p>
<p>Bitte noch darauf achten das man eine Minimalinstallation ausgew&auml;hlt hat und nicht eine normale mit der Standardsoftware von Almalinux, weil sonst der Gnome Desktop mit installiert wird und den brauchen wir nicht f&uuml;r einen Server.</p>
<h2 id="distrubtion-starten-und-docker-compose-einrichten">Distrubtion starten und docker compose einrichten <a name="distrubtion-starten-und-docker-compose-einrichten" class="jop-noMdConv" href="#"></a></h2>
<p>Anschlie&szlig;end kann man die VM neustarten und sich per SSH auf dem eben bereits erstellen Benutzer verbinden.</p>
<h3 id="installation-unter-almalinux">Installation unter Almalinux <a name="installation-unter-almalinux" class="jop-noMdConv" href="#"></a></h3>
<p>F&uuml;r die Installation von Docker Compose k&ouml;nnen wir die Offiziele Dokumentation von CentOS verwenden, da Almalinux mehr oder weniger ein Fork davon ist.</p>
<p><a data-from-md="" title="https://docs.docker.com/engine/install/centos/" href="https://docs.docker.com/engine/install/centos/">Link f&uuml;r die Installation von Docker</a></p>
<p>Um die Packete des Systems upzudaten f&uuml;hren wir folgenden Kommando aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo dnf update</pre><pre class="hljs"><code><span class="hljs-attribute">sudo dnf update</span></code></pre></div>
<p>Wir integrieren das Repository nun erstmal in die yum Konfiguration.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</pre><pre class="hljs"><code>sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https:<span class="hljs-regexp">//</span>download.docker.com<span class="hljs-regexp">/linux/</span>centos/docker-ce.repo</code></pre></div>
<p>Danach installieren wir Docker Compose mittels diesen Befehls hier.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</pre><pre class="hljs"><code>sudo yum <span class="hljs-keyword">install </span>docker-ce docker-ce-cli containerd.io docker-<span class="hljs-keyword">buildx-plugin </span>docker-compose-plugin</code></pre></div>
<h3 id="installation-unter-vsphere">Installation unter Vsphere <a name="installation-unter-vsphere" class="jop-noMdConv" href="#"></a></h3>
<p>F&uuml;r die Installation unter Vsphere werden noch die Open-VM-tools ben&ouml;tigt.</p>
<p>Diese kann man mit folgendem Befehl installieren.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">dnf install open-vm-tools</pre><pre class="hljs"><code>dnf install <span class="hljs-keyword">open</span>-<span class="hljs-keyword">vm</span>-tools</code></pre></div>
<p>Nun muss der Befehl noch als Autostart eingerichtet werden mit folgendem Befehl:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">systemctl enable --now vmtoolsd</pre><pre class="hljs"><code>systemctl <span class="hljs-built_in">enable</span> --now vmtoolsd</code></pre></div>
<p>und man kann dies nun &uuml;berpr&uuml;fen mit</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">systemctl status vmtoolsd</pre><pre class="hljs"><code><span class="hljs-attribute">systemctl status vmtoolsd</span></code></pre></div>
<h3 id="installation-unter-debian">Installation unter Debian <a name="installation-unter-debian" class="jop-noMdConv" href="#"></a></h3>
<p>F&uuml;r die Installation von Docker Compose k&ouml;nnen wir die Offiziele Dokumentation von Debian verwenden,</p>
<p><a data-from-md="" title="https://docs.docker.com/engine/install/debian/" href="https://docs.docker.com/engine/install/debian/">Link f&uuml;r die Installation von Docker</a></p>
<p>Um die Packete des Systems upzudaten f&uuml;hren wir folgenden Kommando aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo apt update &amp;&amp; sudo apt upgrade</pre><pre class="hljs"><code>sudo apt <span class="hljs-keyword">update</span> <span class="hljs-variable">&amp;&amp;</span> sudo apt upgrade</code></pre></div>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
&quot;deb [arch=&quot;$(dpkg --print-architecture)&quot; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
&quot;$(. /etc/os-release &amp;&amp; echo &quot;$VERSION_CODENAME&quot;)&quot; stable&quot; | \
sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</pre><pre class="hljs"><code>sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m <span class="hljs-number">0755</span> -d <span class="hljs-regexp">/etc/</span>apt/keyrings
curl -fsSL https:<span class="hljs-regexp">//</span>download.docker.com<span class="hljs-regexp">/linux/</span>debian<span class="hljs-regexp">/gpg | sudo gpg --dearmor -o /</span>etc<span class="hljs-regexp">/apt/</span>keyrings/docker.gpg
sudo chmod a+r <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/keyrings/</span>docker.gpg
echo \
<span class="hljs-string">&quot;deb [arch=&quot;</span>$(dpkg --print-architecture)<span class="hljs-string">&quot; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
&quot;</span>$(. <span class="hljs-regexp">/etc/</span>os-release &amp;&amp; echo <span class="hljs-string">&quot;$VERSION_CODENAME&quot;</span>)<span class="hljs-string">&quot; stable&quot;</span> | \
sudo tee <span class="hljs-regexp">/etc/</span>apt<span class="hljs-regexp">/sources.list.d/</span>docker.list &gt; <span class="hljs-regexp">/dev/</span>null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin</code></pre></div>
<h3 id="docker-daemon-service-setzen">Docker-Daemon Service setzen <a name="docker-daemon-service-setzen" class="jop-noMdConv" href="#"></a></h3>
<p>Und richten Docker als Systemd-Service ein und starten den auch gleichzeitig.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo systemctl enable --now docker</pre><pre class="hljs"><code>sudo systemctl <span class="hljs-built_in">enable</span> --now docker</code></pre></div>
<p>Anschlie&szlig;end testen wir mit folgendem Befehl, ob Docker ordnungsgem&auml;&szlig; funktioniert.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo docker run hello-world</pre><pre class="hljs"><code>sudo docker <span class="hljs-built_in">run</span> hello-world</code></pre></div>
<h2 id="chrony-einrichten">Chrony einrichten <a name="chrony-einrichten" class="jop-noMdConv" href="#"></a></h2>
<p>Um den Zeitserver einzurichten bitte noch folgende Befehle als ROOT ausf&uuml;hren:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">dnf install chrony</pre><pre class="hljs"><code>dnf <span class="hljs-keyword">install</span> chrony</code></pre></div>
<p>Crony als Systemweiten Service einrichten</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">systemctl enable --now chronyd</pre><pre class="hljs"><code>systemctl <span class="hljs-built_in">enable</span> --now chronyd</code></pre></div>
<p>die Firewall noch erg&auml;nzen</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload</pre><pre class="hljs"><code><span class="hljs-comment">firewall</span><span class="hljs-literal">-</span><span class="hljs-comment">cmd</span> <span class="hljs-literal">--</span><span class="hljs-comment">permanent</span> <span class="hljs-literal">--</span><span class="hljs-comment">add</span><span class="hljs-literal">-</span><span class="hljs-comment">service=ntp</span>
<span class="hljs-comment">firewall</span><span class="hljs-literal">-</span><span class="hljs-comment">cmd</span> <span class="hljs-literal">--</span><span class="hljs-comment">reload</span></code></pre></div>
<p>und danach nochmal neustarten</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">systemctl restart chronyd</pre><pre class="hljs"><code><span class="hljs-attribute">systemctl restart chronyd</span></code></pre></div>
<h2 id="einrichten-von-mehreren-festplatten">Einrichten von mehreren Festplatten <a name="einrichten-von-mehreren-festplatten" class="jop-noMdConv" href="#"></a></h2>
<p>Wenn man die Daten getrennt von dem Betriebssytem haben m&ouml;chte, formatiert man erstmal die neue Festplatte mit fdisk. Mit folgendem Befehl sehen wir uns die verf&uuml;gbaren Festplatten genauer an.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">fdisk -l
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/sdb: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 8A25CA1F-8A16-471D-B928-C0EF5BD7B174
Device Start End Sectors Size Type
/dev/sdb1 2048 1230847 1228800 600M EFI System
/dev/sdb2 1230848 3327999 2097152 1G Linux filesystem
/dev/sdb3 3328000 134215679 130887680 62.4G Linux LVM
Disk /dev/mapper/almalinux-root: 37.63 GiB, 40407924736 bytes, 78921728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mapper/almalinux-swap: 6.4 GiB, 6874464256 bytes, 13426688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mapper/almalinux-home: 18.38 GiB, 19730006016 bytes, 38535168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes</pre><pre class="hljs"><code>fdisk -l
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/sdb: 64 GiB, 68719476736 bytes, 134217728 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 8A25CA1F-8A16-471D-B928-C0EF5BD7B174
Device Start End Sectors Size Type
/dev/sdb1 2048 1230847 1228800 600M EFI System
/dev/sdb2 1230848 3327999 2097152 1G Linux filesystem
/dev/sdb3 3328000 134215679 130887680 62.4G Linux LVM
Disk /dev/mapper/almalinux-root: 37.63 GiB, 40407924736 bytes, 78921728 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mapper/almalinux-swap: 6.4 GiB, 6874464256 bytes, 13426688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mapper/almalinux-home: 18.38 GiB, 19730006016 bytes, 38535168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes</code></pre></div>
<p>Um <strong>/dev/sdb</strong> handelt es sich die Systempartition, deswegen w&auml;hlen wir nun mit fdisk die Festplatte <strong>/dev/sda</strong> aus.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">[root@SST-S-440 ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xbbcd0e1c.
Command (m for help): p
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbbcd0e1c
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-2147483647, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2147483647, default 2147483647):
Created a new partition 1 of type &apos;Linux&apos; and of size 1024 GiB.
Command (m for help):
Command (m for help): p
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbbcd0e1c
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 2147483647 2147481600 1024G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.</pre><pre class="hljs"><code>[root@SST-S-440 ~]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xbbcd0e1c.
Command (m for help): p
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbbcd0e1c
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-2147483647, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2147483647, default 2147483647):
Created a new partition 1 of type &apos;Linux&apos; and of size 1024 GiB.
Command (m for help):
Command (m for help): p
Disk /dev/sda: 1 TiB, 1099511627776 bytes, 2147483648 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xbbcd0e1c
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 2147483647 2147481600 1024G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.</code></pre></div>
<p>Und formatiert sie anschlie&szlig;end mit ext4.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">[root@SST-S-440 ~]# mkfs.ext4 /dev/sda1
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 268435200 4k blocks and 67108864 inodes
Filesystem UUID: 4a3937fd-26b9-4dd2-9937-d441569a5c5e
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done</pre><pre class="hljs"><code>[root@SST-S-<span class="hljs-number">440</span> ~]# mkfs.ext4 /dev/sda1
mke2fs <span class="hljs-number">1</span>.<span class="hljs-number">46</span>.<span class="hljs-number">5</span> (<span class="hljs-number">30</span>-Dec-<span class="hljs-number">2021</span>)
Discarding device blocks: done
Creating filesystem with <span class="hljs-number">268435200</span> <span class="hljs-number">4</span>k blocks and <span class="hljs-number">67108864</span> inodes
Filesystem UUID: <span class="hljs-number">4</span>a3937fd-<span class="hljs-number">26</span>b9-<span class="hljs-number">4d</span>d2-<span class="hljs-number">9937</span>-d441569a5c5e
Superblock backups stored on blocks:
<span class="hljs-number">32768</span>, <span class="hljs-number">98304</span>, <span class="hljs-number">163840</span>, <span class="hljs-number">229376</span>, <span class="hljs-number">294912</span>, <span class="hljs-number">819200</span>, <span class="hljs-number">884736</span>, <span class="hljs-number">1605632</span>, <span class="hljs-number">2654208</span>,
<span class="hljs-number">4096000</span>, <span class="hljs-number">7962624</span>, <span class="hljs-number">11239424</span>, <span class="hljs-number">20480000</span>, <span class="hljs-number">23887872</span>, <span class="hljs-number">71663616</span>, <span class="hljs-number">78675968</span>,
<span class="hljs-number">102400000</span>, <span class="hljs-number">214990848</span>
Allocating group tables: done
Writing inode tables: done
Creating journal (<span class="hljs-number">262144</span> blocks): done
Writing superblocks and filesystem accounting information: done</code></pre></div>
<p>Damit sie beim n&auml;chsten Start automatisch gemounted wird, tr&auml;gt man die Festplatte noch in die Fstab ein. Davor m&uuml;ssen wir ersteinmal die UUID der Festplatte herausfinden.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">blkid</pre><pre class="hljs"><code><span class="hljs-attribute">blkid</span></code></pre></div>
<p>und danach denn Ordner erstellen und die /etc/fstab bearbeiten.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir -p /opt/data
nano /etc/fstab</pre><pre class="hljs"><code>mkdir -p <span class="hljs-regexp">/opt/</span>data
nano <span class="hljs-regexp">/etc/</span>fstab</code></pre></div>
<p>mit folgendem Inhalt erg&auml;nzen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">UUID=&quot;4a3937fd-26b9-4dd2-9937-d441569a5c5e&quot; /opt/data ext4 defaults 0 0</pre><pre class="hljs"><code><span class="hljs-attribute">UUID</span><span class="hljs-operator">=</span><span class="hljs-string">&quot;4a3937fd-26b9-4dd2-9937-d441569a5c5e&quot;</span> /opt/data ext4 defaults <span class="hljs-number">0</span> <span class="hljs-number">0</span></code></pre></div>
<p>und anschlie&szlig;end mit STRG + X und dann Y abspeicher und den automatischen Mount ausf&uuml;hren.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mount -a</pre><pre class="hljs"><code>mount -<span class="hljs-selector-tag">a</span></code></pre></div>
<h2 id="installieren-von-der-nextcloud">Installieren von der Nextcloud <a name="installieren-von-der-nextcloud" class="jop-noMdConv" href="#"></a></h2>
<p>Zuerst legen wir uns passende Ordner-Strukturen an.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir -p /opt/containers/nextcloud/{db,app,daten}</pre><pre class="hljs"><code>mkdir -p <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>{db,app,daten}</code></pre></div>
<p>und Optional falls man die Daten von Nextcloud wo anders gespeichert haben m&ouml;chte.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir -p /opt/data/nextcloud/daten</pre><pre class="hljs"><code>mkdir -p <span class="hljs-regexp">/opt/</span>data<span class="hljs-regexp">/nextcloud/</span>daten</code></pre></div>
<p>Um den Texteditor Nano und Vim zu installieren, benutzt ihr folgenden Befehl.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo dnf install nano vim bash-completion</pre><pre class="hljs"><code>sudo dnf <span class="hljs-keyword">install</span> nano vim bash-completion</code></pre></div>
<p>oder f&uuml;r Debian:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo apt install nano vim bash-completion</pre><pre class="hljs"><code>sudo apt <span class="hljs-keyword">install</span> nano vim bash-completion</code></pre></div>
<p>Nun legen wir die eigentliche Docker Datei an. Hierf&uuml;r habe ich mir die offizielle Nextcloud Compose genommen und etwas modifiziert. Die Datei k&ouml;nnt ihr mit dem Editor eurer Wahl bearbeiten.</p>
<p><a data-from-md="" title="https://hub.docker.com/_/nextcloud/" href="https://hub.docker.com/_/nextcloud/">Offizielle Nextcloud Compose Anleitung</a></p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">nano /opt/containers/nextcloud/docker-compose.yml</pre><pre class="hljs"><code>nano <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>docker-compose.yml</code></pre></div>
<p>docker-compose.yml</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">version: &apos;3.3&apos;
services:
nextcloud-db:
image: mariadb:10.6
container_name: nextcloud-db
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_PASSWORD=userpass
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_INITDB_SKIP_TZINFO=1
- MARIADB_AUTO_UPGRADE=1
networks:
- default
ports:
- 127.0.0.1:3306:3306
nextcloud-redis:
image: redis:alpine
container_name: nextcloud-redis
hostname: nextcloud-redis
restart: always
command: redis-server --requirepass redispass
networks:
- default
nextcloud-app:
image: nextcloud:27
container_name: nextcloud-app
restart: always
ports:
- 8080:80
depends_on:
- nextcloud-db
- nextcloud-redis
volumes:
- ./app:/var/www/html
- /opt/data/nextcloud/daten:/var/www/html/data
environment:
- MYSQL_PASSWORD=userpass
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=nextcloud-db
- TRUSTED_PROXIES=10.161.24.10/24
#- OVERWRITEPROTOCOL=https
#- OVERWRITECLIURL=https://cloud.webseite.com
#- OVERWRITEHOST=cloud.webseite.com
- REDIS_HOST=nextcloud-redis
- REDIS_HOST_PASSWORD=redispass
- PHP_MEMORY_LIMIT=2G
- PHP_UPLOAD_LIMIT=2G
- NEXTCLOUD_TRUSTED_DOMAINS=10.161.24.1
networks:
- default</pre><pre class="hljs"><code>version: &apos;3.3&apos;
services:
nextcloud-db:
image: mariadb:10.6
container_name: nextcloud-db
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=rootpass
- MYSQL_PASSWORD=userpass
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_INITDB_SKIP_TZINFO=1
- MARIADB_AUTO_UPGRADE=1
networks:
- default
ports:
- 127.0.0.1:3306:3306
nextcloud-redis:
image: redis:alpine
container_name: nextcloud-redis
hostname: nextcloud-redis
restart: always
command: redis-server --requirepass redispass
networks:
- default
nextcloud-app:
image: nextcloud:27
container_name: nextcloud-app
restart: always
ports:
- 8080:80
depends_on:
- nextcloud-db
- nextcloud-redis
volumes:
- ./app:/var/www/html
- /opt/data/nextcloud/daten:/var/www/html/data
environment:
- MYSQL_PASSWORD=userpass
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=nextcloud-db
- TRUSTED_PROXIES=10.161.24.10/24
#- OVERWRITEPROTOCOL=https
#- OVERWRITECLIURL=https://cloud.webseite.com
#- OVERWRITEHOST=cloud.webseite.com
- REDIS_HOST=nextcloud-redis
- REDIS_HOST_PASSWORD=redispass
- PHP_MEMORY_LIMIT=2G
- PHP_UPLOAD_LIMIT=2G
- NEXTCLOUD_TRUSTED_DOMAINS=10.161.24.1
networks:
- default</code></pre></div>
<p>Die Umgebgungsvariablen OVERWRITEPROTOCOL, OVERWRITECLIURL und OVERWRITEHOST sollten erst gesetzt worden sein, wenn der Reverse Proxy mit SSL-Zertifikat bereits eingerichtet wurde.</p>
<p>Falls eventuell das automatische anlegen der Datenbank, oder die Datenbank nicht von der Nextcloud automatisch &uuml;bernommen wurde kann mit dem Tool <em>dos2unix</em> der Text in das Unix Format konventiert werden.</p>
<h2 id="nextcloud-server-starten">Nextcloud Server starten <a name="nextcloud-server-starten" class="jop-noMdConv" href="#"></a></h2>
<p>Den Server startet ihr wie gewohnt mit folgendem Befehl:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d</pre><pre class="hljs"><code>docker compose -f <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>docker-compose.yml up -d</code></pre></div>
<p>Falls Probleme auftreten solltet, wechselt in das Verzeichnis wo die Docker Compose Datei liegt und f&uuml;r einen dieser folgenden Befehlen aus.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">cd /opt/containers/nextcloud/
docker compose logs nextcloud-app
docker compose logs nextcloud-db
docker compose logs nextcloud-redis</pre><pre class="hljs"><code>cd <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>
docker compose logs nextcloud-app
docker compose logs nextcloud-db
docker compose logs nextcloud-redis</code></pre></div>
<h2 id="verbindung-zur-nextcloud-per-port-forwarding-herstellen">Verbindung zur Nextcloud per Port Forwarding herstellen <a name="verbindung-zur-nextcloud-per-port-forwarding-herstellen" class="jop-noMdConv" href="#"></a></h2>
<p>Falls ihr noch nicht auf eure Nextcloud zugreifen k&ouml;nnt, weil sie von einer Firewall blockiert wird, oder auf einem anderem Server liegt k&ouml;nnt ihr mittels Port Forwarding drauf zugreifen.</p>
<p>Unter Linux verwendet ihr folgenden Befehl:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">ssh -L 8080:127.0.0.1:8080 server -N</pre><pre class="hljs"><code><span class="hljs-attribute">ssh</span> -L <span class="hljs-number">8080</span>:<span class="hljs-number">127.0.0.1:8080</span> server -N</code></pre></div>
<p>Unter Putty f&uuml;gt ihr f&uuml;gt ihr folgendes im Connection -&gt; SSH -&gt; Tunnels reiter hinzu.</p>
<p><img src="data:image/png;base64,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
<h2 id="reverse-proxy-mit-nginx-einrichten">Reverse Proxy mit Nginx einrichten <a name="reverse-proxy-mit-nginx-einrichten" class="jop-noMdConv" href="#"></a></h2>
<p>Den Reverse Proxy Nginx installieren wir lokal auf das System ohne Docker zu verwenden.<br/>
F&uuml;r das Zertifikat benutzen wir Let&acute;s Encrypt und automatisieren es mit Certbot.</p>
<p>Installieren k&ouml;nnen wir die Packete mit:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx nginx</pre><pre class="hljs"><code>sudo dnf <span class="hljs-keyword">install</span> epel-release
sudo dnf <span class="hljs-keyword">install</span> certbot python3-certbot-nginx nginx</code></pre></div>
<p>oder f&uuml;r Debian:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo apt install python3-certbot-nginx nginx</pre><pre class="hljs"><code>sudo apt <span class="hljs-keyword">install</span> python3-certbot-nginx nginx</code></pre></div>
<p>und &uuml;berpr&uuml;fen danach ob nun Certbot vorhanden ist.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">certbot --version</pre><pre class="hljs"><code>certbot <span class="hljs-comment">--version</span></code></pre></div>
<p>F&uuml;r Almalinux f&uuml;gen wir noch ein paar Firewall-Regeln hinzu.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo firewall-cmd --permanent --add-port=80/tcp --zone=public
sudo firewall-cmd --permanent --add-port=443/tcp --zone=public
sudo firewall-cmd --reload
setsebool -P httpd_can_network_connect 1
sudo cat /var/log/audit/audit.log | grep nginx | grep denied
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp
setsebool -P httpd_can_network_relay 1</pre><pre class="hljs"><code>sudo firewall-cmd --permanent --add-port=<span class="hljs-number">80</span>/tcp --zone=<span class="hljs-keyword">public</span>
sudo firewall-cmd --permanent --add-port=<span class="hljs-number">443</span>/tcp --zone=<span class="hljs-keyword">public</span>
sudo firewall-cmd --reload
setsebool -P httpd_can_network_connect <span class="hljs-number">1</span>
sudo cat <span class="hljs-regexp">/var/</span>log<span class="hljs-regexp">/audit/</span>audit.log | <span class="hljs-keyword">grep</span> nginx | <span class="hljs-keyword">grep</span> denied
sudo cat <span class="hljs-regexp">/var/</span>log<span class="hljs-regexp">/audit/</span>audit.log | <span class="hljs-keyword">grep</span> nginx | <span class="hljs-keyword">grep</span> denied | audit2allow -M mynginx
sudo semodule -i mynginx.pp
setsebool -P httpd_can_network_relay <span class="hljs-number">1</span></code></pre></div>
<p>Dann erstellen wir die Konfiguration des Reverse Proxys. Das geht am einfachsten mit dem Tool von DigitalOcean.</p>
<p>Ich habe hier bereits eine vorkonfiguriete Konfiguration erstellt, dort m&uuml;sst ihr einfach nur den Domain-Namen &auml;ndern.</p>
<p><em>Was noch zu beachten ist, das man noch in der Konfiguration bei Debian den Benutzer und die Gruppe f&uuml;r den zu ben&ouml;tigten User noch anpasst.</em></p>
<p><a data-from-md="" title="https://www.digitalocean.com/community/tools/nginx?domains.0.server.domain=cloud.webseite.com&amp;domains.0.server.documentRoot=&amp;domains.0.server.redirectSubdomains=false&amp;domains.0.https.letsEncryptEmail=support%40webseite.com&amp;domains.0.php.php=false&amp;domains.0.reverseProxy.reverseProxy=true&amp;domains.0.reverseProxy.proxyPass=http%3A%2F%2F127.0.0.1%3A8080&amp;domains.0.routing.root=false&amp;domains.0.logging.accessLogPath=%2Fvar%2Flog%2Fnginx%2Fcloud.webseite.com-access.log&amp;domains.0.logging.redirectAccessLog=true&amp;domains.0.logging.errorLogPath=%2Fvar%2Flog%2Fnginx%2Fcloud.webseite.com-error.log&amp;domains.0.logging.redirectErrorLog=true&amp;global.nginx.user=nginx&amp;global.nginx.clientMaxBodySize=0&amp;global.app.lang=de" href="https://www.digitalocean.com/community/tools/nginx?domains.0.server.domain=cloud.webseite.com&amp;domains.0.server.documentRoot=&amp;domains.0.server.redirectSubdomains=false&amp;domains.0.https.letsEncryptEmail=support%40webseite.com&amp;domains.0.php.php=false&amp;domains.0.reverseProxy.reverseProxy=true&amp;domains.0.reverseProxy.proxyPass=http%3A%2F%2F127.0.0.1%3A8080&amp;domains.0.routing.root=false&amp;domains.0.logging.accessLogPath=%2Fvar%2Flog%2Fnginx%2Fcloud.webseite.com-access.log&amp;domains.0.logging.redirectAccessLog=true&amp;domains.0.logging.errorLogPath=%2Fvar%2Flog%2Fnginx%2Fcloud.webseite.com-error.log&amp;domains.0.logging.redirectErrorLog=true&amp;global.nginx.user=nginx&amp;global.nginx.clientMaxBodySize=0&amp;global.app.lang=de">Vorkonfigurierte Nginx Konfiguration</a></p>
<p>Ihr dr&uuml;ckt dann einmal auf Als Base64 kopieren und follgt dementsprechend die Anleitung.</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUYAAAK3CAIAAADGSgIEAAAAA3NCSVQICAjb4U/gAAAgAElEQVR42uzdZ1gUVxsG4GeXpXdQmgVFQUHE3nvvPbHErlGjiUls0RijJnajUWOLMRp7L7E3QFHsSlURsCC9986y8/2YZUFUBI2Szffcl1eyO3PmtDmg78yZM5L8/HwQERERERERkbqRSSSS8q4DEREREREREZWZtLwrQERERERERETvQiIIQnnXgYiIiIiIiIjKjHfpiYiIiIiIiNQSQ3oiIiIiIiIitcSQnoiIiIiIiEgtMaQnIiIiIiIiUktvDOnz5HxfPREREREREdG/l6zol6cvorftvXjG7V5IWExGZrahgW7N6jZ9uzabNLK7RQXj8q4qERERERERERUqfIndio1Hf169Pyc379VEpsYGm1dM+aR3q/cpKTdPvv+4h5hb327NyrvhREREREREROpNGdIvW3/4xxV7xE0OdjaN69lXMDMKj0pwu+aTkpYJQCbTOLFjXrf2Dd+5pOTUjApOnwFwcqjq576+vBtOREREREREpN5kACKiExavOQhAJtPYvHzK6MGdpFKJuDstPevreVt2H7ksl+dPm7/V//JGDQ2uqEdERERERERU/qQATl64Lc63Hzuk89ihnVXxPABDA91tv35jX90GQNCzyMdPwsq7wkREREREREQEiHfpQ8JixS91ald9NYVUKtm0fPKjoDAABvq6xfYmJKX9ue/i4VOeIaEx2Tl5VStV6NGx8aRRPRzsbFRpfB48G/X1GkFQiF+fhkS5dJwKoGqliqd3zweQlp7Vqu93AOztbI7++X2xImb+tO2ihw+AXb9Nq+9sJ24cPHHF4yfhALwvrYuJT56/cs9Zt3sJSWk2lmatmjrN/GKAKiURERERERHRf5IMgKGBMlC/evPhV2N7v5qoQyuXDq1cXt1+xztowLglMXHJqi1BzyKDnp3csvv8mp8/nzC8m7gxIzP7UVCoKk1Obp74NScnV9ySr1AUTVBMaES8uDcjM1u18UlIlLgxKjapTb/vwiLjxe1hkfEH/r56+JTnb4snTRrZvby7l4iIiIiIiOhDkQHo0bHRwlX7ABw7e2PU1F/X/DzB3NTwrUc+fRHdZciPYpjdoZVLr85NDA1073gF7j5yOTsnd8qczZWtK/To2AhA1coWP80anpOTu/S3wwAsKhh/ObY3ADMTg/dvwKipv4ZHJfTp2rRlY8f0jKwzbvd8HjzLz1d8+f3malUs3mc9PyIiIiIiIqJ/M+WK919+v3nL7vPiJh1tra7tG/Ts1LhDK5catlZvOrLz4HlXbvgDWLdo4pdje6m237r/uPPgH7Nzcq0tTJ/c2qqtpSluL2HF+5IXwx88ccWxszcAeBxb1qqpk7ixYddv/R49ByCRSPZvnqV6wZ4gCDMWbvtt2ykA1apYBF3/o+jSAERERERERET/Gcrl6zcs/WLtogl6utoAsnNyT164/cV3G2u1mlS3w5c/rd4XEZ1Q7LDApxFiPD+wZ8ui8TyA5o1qT5vYD0BUbNLFK94fugE9OjZSxfMAJBLJL/PHiU/yh4TFXr/7qHz7l4iIiIiIiOgDUYb0Eonkq7G9g25sWf7DmDq1bFW7A4LDF6056NBy0spNR4seduLCLfHD6MEdX820Z6fG4ofbXoEfugGvPjCvoSEd+amyVhcue32cfiQiIiIiIiL6yGRFv1hVNJ05ecDMyQNCI+Jcr/r8ff6W61Wf3Dx5Tm7e3KW7UlIylnw/Skz5LCRa/LBq83HVjH0V1Tp2oRFxH7oBtWpWfnVjswYO4odX5xcQERERERER/TfIXru1aqWK44Z1GTesS3JqxrLfDq/+/TiAlZuODR/U3smhKoCYeOUq99duPywh98ysnA/dAGsL01c3mpkol/eLT0z90BUgIiIiIiIiKheyknebGOmvmDcmOSV92/5LgiAcP3dLDOkNC15QP21iP6vXBdUi++o2+MDiE1P19XSKbUxNzxQ/GBnqfegKEBEREREREZULWVZ2rrg+vK6O1tfj+7w2UYvGjtv2XwIQE5ckbrGxMhM/dGvfsHPb+u9ZCalEuSh9VvZr7uonJqeVcOzz0BjbyhbFNvoHvBA/WFYw+Xh9SURERERERPQRSXW0NZesPfjDsl3TF/wZEhb72kSPgkLFDzZW5uKH9i3rih/Oud9/NX1aelZicvqbCxWKfTfQ15VIJABehMempGUW3ZWSlnnPN7iEBuw+cvnVjUdOXxc/tG7mVD79SkRERERERPSBSSUSSY+OjcQvE2auT0vPKpbikof3xr/OiJ87t6knfujUpr5lRRMAW/de8H34vNghU3/YYuE8vFqTcUUDfh1t5Qvqw6MS8uT5L1VCKhFfO6dQCN8v2SEIypg/Oyd3/LR16RnZJTRg/3EP/4CQolv2HfcQn/DX19Pp1r5hefcwERERERER0QehsXDhQieHKtv3X8pXKELCYrbuuRAdmxQTl/w8LOaih/f8X/YuWnMwP18BoG+3ZtMm9lceJpVWq2J55PT1PHn+gRNXJVKJqbFhbp7c9+HzWT//dfDkNQDa2lrL543R0dYSD5HJNHYfuZyckpGTm+fl9yQ9Iys6NsnBrpK4NzY+WYzD7/s9vXTVJzwq/sJl7y/nbr7jE+TkYBuXkAJg7JDOVStVFNNv2X0+Ji4ZgLmZ4V8HXGUyDZlMI+hpxPptp+at2KNQCAAWfTdCNZuAiIiIiIiI6D9GIt4SP3H+1oivVmdl574pXaumTmd2LzDQf2khuiXrDi1ctU91U70oI0O9EzvmtWlWp+jGrXsvTJ69SfXVyaGqn/t68XNqWmbzXjOCnkUWy2fOV5/EJqRs338JgMexZa2aKifSN+z6rd+j5wBO7Zo/aPzS3Dx5sQMH9Gixf/MsmUyjvHuYiIiIiIiI6IOQiv/r1725j9v6kZ90eHX1+Hp1qm9cNvnykaXF4nkAP3wz+OyeBR1auUgK1rcDoKUp+6R3qzvnfi0WzwOYMLzb5hVTVK+dC3oWoZpUb2So53F8+WcD2mlpKhfht7E0W79k0uI5I0tuQJP69qd2zS+6Qp5FBeOlc0cd3DKb8TwRERERERH9h0mK3WOXy/MfBYVGxSbl5eVXMDO0rWJp/eZ31KkkJKWFhMUkJKWZGhs4OVR59bpAUYIgvAiPy8rOtbEyM37lJXOZWTmhEXFGhnrWFqZFrxQUo7pLH+23u4KZkUIh+AeExCWk2FiZ1axuo7ouQERERERERPRfJXnttPl/v2IhfXlXh4iIiIiIiOhjk5Z3BYiIiIiIiIjoXTCkJyIiIiIiIlJLDOmJiIiIiIiI1JK6LiP32YB27Vs4A9DV0SrvuhARERERERGVA3VdHo+IiIiIiIjo/xwn3hMRERERERGpJYb0RERERERERGqJIT0RERERERGRWmJIT0RERERERKSWGNITERERERERqSWG9ERERERERERqiSE9ERERERERkVpiSE9ERERERESklhjSExEREREREaklhvREREREREREaokhPREREREREZFaYkhPREREREREpJYY0hMRERERERGpJYb0RERERERERGqJIT0RERERERGRWpKVJpHw0v+IiIiIiIiI6B8iUf2nzN4Y0gsCigbxDOeJiIiIiIiI/nkCJC8F3RJJqeP714f0giAAyM7Olsvl4mciIiIiIiIi+nAkEolMJtPR0RGE0ob1klcjdkEQBCAnOxuAjo5OGa4PEBEREREREdE7EQQhOzsbgLaOjqR0N+ulr2ShzEgulzOeJyIiIiIiIvo4JBKJjo6OarJ8aWbMv7rivSAIEARBEATG80REREREREQfjUQiEZRQmkXtXvMSOwF8fJ6IiIiIiIiofAgChNItUv9SSF/4sjrG9ERERERERETlQlBG9G+NzKWvP7y8609ERERERET0/6n0Ibm02HEM5omIiIiIiIjKXWmeppeWJiMiIiIiIiIi+rdhSE9ERERERESklhjSExEREREREaklhvREREREREREaokhPREREREREZFaYkhPRERERERE
<p>Hier nochmal die vollst&auml;ndige Anleitung.</p>
<p>kopiere einen Base64 String der komprimierten Konfiguration, f&uuml;ge ihn auf der Kommandozeile deines Servers ein und f&uuml;hre ihn aus.</p>
<p>Wechsle in das NGINX Konfigurationsverzeichnis deines Servers:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">cd /etc/nginx</pre><pre class="hljs"><code>cd <span class="hljs-regexp">/etc/</span>nginx</code></pre></div>
<p>Erstelle ein Backup deiner aktuellen NGINX Konfiguration:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">tar -czvf nginx_$(date +&apos;%F_%H-%M-%S&apos;).tar.gz nginx.conf sites-available/ sites-enabled/ nginxconfig.io/</pre><pre class="hljs"><code>tar -czvf nginx_$(date +&apos;<span class="hljs-built_in">%F</span>_<span class="hljs-built_in">%H</span>-<span class="hljs-built_in">%M</span>-<span class="hljs-built_in">%S</span>&apos;).tar.gz nginx.conf sites-available/ sites-enabled/ nginxconfig.io/</code></pre></div>
<p>Entpacke das komprimierte Konfigurationsverzeichnis mittels tar:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">tar -xzvf nginxconfig.io-cloud.webseite.com.tar.gz | xargs chmod 0644</pre><pre class="hljs"><code><span class="hljs-attribute">tar</span> -xzvf nginxconfig.io-cloud.webseite.com.tar.gz | xargs chmod <span class="hljs-number">0644</span></code></pre></div>
<p>Erzeuge Diffie-Hellman Schl&uuml;ssel indem du diesen Befehl auf deinem Server ausf&uuml;hrst:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">openssl dhparam -out /etc/nginx/dhparam.pem 2048</pre><pre class="hljs"><code>openssl dhparam -out <span class="hljs-regexp">/etc/</span>nginx/dhparam.pem <span class="hljs-number">2048</span></code></pre></div>
<p>Erstelle ein ACME-Challenge Verzeichnis (f&uuml;r Let&apos;s Encrypt):</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir -p /var/www/_letsencrypt
chown nginx /var/www/_letsencrypt</pre><pre class="hljs"><code>mkdir -p <span class="hljs-regexp">/var/</span>www/_letsencrypt
chown nginx <span class="hljs-regexp">/var/</span>www/_letsencrypt</code></pre></div>
<p>Kommentiere SSL-relevante Direktiven in deiner Konfiguration aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sed -i -r &apos;s/(listen .*443)/\1; #/g; s/(ssl_(certificate|certificate_key|trusted_certificate) )/#;#\1/g; s/(server \{)/\1\n ssl off;/g&apos; /etc/nginx/sites-available/cloud.webseite.com.conf</pre><pre class="hljs"><code><span class="hljs-attribute">sed</span> -i -r &apos;s/(listen .*<span class="hljs-number">443</span>)/\<span class="hljs-number">1</span>; #/g; s/(ssl_(certificate|certificate_key|trusted_certificate) )/#;#\<span class="hljs-number">1</span>/g; s/(server \{)/\<span class="hljs-number">1</span>\n ssl <span class="hljs-literal">off</span>;/g&apos; /etc/nginx/sites-available/cloud.webseite.com.conf</code></pre></div>
<p>This command will add a temporary ssl off directive to ensure that SSL directives are not active. This may cause NGINX to emit a warning, which is safe to ignore. The directive will be removed once Certbot is configured.</p>
<p>F&uuml;hre einen reload deines NGINX Server aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo nginx -t &amp;&amp; sudo systemctl reload nginx</pre><pre class="hljs"><code>sudo nginx -<span class="hljs-built_in">t</span> &amp;&amp; sudo systemctl reload nginx</code></pre></div>
<p>Erhalte SSL Zertifikate von Let&apos;s Encrypt mittels Certbot:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">certbot certonly --webroot -d cloud.webseite.com --email support@webseite.com -w /var/www/_letsencrypt -n --agree-tos --force-renewal</pre><pre class="hljs"><code>certbot certonly <span class="hljs-attr">--webroot</span> -d cloud<span class="hljs-selector-class">.webseite</span><span class="hljs-selector-class">.com</span> <span class="hljs-attr">--email</span> support@webseite<span class="hljs-selector-class">.com</span> -w /var/www/_letsencrypt -n <span class="hljs-attr">--agree-tos</span> <span class="hljs-attr">--force-renewal</span></code></pre></div>
<p>Kommentiere SSL-relevante Direktiven in deiner Konfiguration ein:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sed -i -r -z &apos;s/#?; ?#//g; s/(server \{)\n ssl off;/\1/g&apos; /etc/nginx/sites-available/cloud.webseite.com.conf</pre><pre class="hljs"><code>sed -i -r -z <span class="hljs-string">&apos;s/#?; ?#//g; s/(server \{)\n ssl off;/\1/g&apos;</span> <span class="hljs-regexp">/etc/</span>nginx<span class="hljs-regexp">/sites-available/</span>cloud.webseite.com.conf</code></pre></div>
<p>F&uuml;hre einen reload deines NGINX Server aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo nginx -t &amp;&amp; sudo systemctl reload nginx</pre><pre class="hljs"><code>sudo nginx -<span class="hljs-built_in">t</span> &amp;&amp; sudo systemctl reload nginx</code></pre></div>
<p>Konfiguriere Certbot um NGINX neu zu laden, wenn die Zertifikate erfolgreich erneuert wurden:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">echo -e &apos;#!/bin/bash\nnginx -t &amp;&amp; systemctl reload nginx&apos; | sudo tee /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh
sudo chmod a+x /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh</pre><pre class="hljs"><code>echo -e <span class="hljs-string">&apos;#!/bin/bash\nnginx -t &amp;&amp; systemctl reload nginx&apos;</span> | sudo tee <span class="hljs-regexp">/etc/</span>letsencrypt<span class="hljs-regexp">/renewal-hooks/</span>post/nginx-reload.sh
sudo chmod a+x <span class="hljs-regexp">/etc/</span>letsencrypt<span class="hljs-regexp">/renewal-hooks/</span>post/nginx-reload.sh</code></pre></div>
<p>Jetzt gehts los! 🎉</p>
<p>Lade NGINX neu, um deine neue Konfiguration zu verwenden:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">sudo nginx -t &amp;&amp; sudo systemctl reload nginx</pre><pre class="hljs"><code>sudo nginx -<span class="hljs-built_in">t</span> &amp;&amp; sudo systemctl reload nginx</code></pre></div>
<p>Und damit das zuk&uuml;nftige neuerstellen der Zertifikate m&ouml;glich ist</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">systemctl enable --now certbot-renew.timer</pre><pre class="hljs"><code>systemctl <span class="hljs-built_in">enable</span> --now certbot-renew.timer</code></pre></div>
<p>Dann modifizieren wir noch die cloud.webseite.com.conf im nginx Verzeichnis.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">nano /etc/nginx/sites-available/cloud.webseite.com.conf</pre><pre class="hljs"><code>nano <span class="hljs-regexp">/etc/</span>nginx<span class="hljs-regexp">/sites-available/</span>cloud.webseite.com.conf</code></pre></div>
<p>cloud.webseite.com.conf</p>
<p>Wir f&uuml;gen noch diese Eintr&auml;ge dort hinzu:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```"> add_header Strict-Transport-Security &quot;max-age=31536000; includeSubDomains; preload&quot;;
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}</pre><pre class="hljs"><code> add_header Strict-Transport-Security <span class="hljs-string">&quot;max-age=31536000; includeSubDomains; preload&quot;</span>;
location <span class="hljs-regexp">/.well-known/</span>carddav {
return <span class="hljs-number">301</span> <span class="hljs-variable">$scheme</span>:<span class="hljs-regexp">//</span><span class="hljs-variable">$host</span><span class="hljs-regexp">/remote.php/</span>dav;
}
location <span class="hljs-regexp">/.well-known/</span>caldav {
return <span class="hljs-number">301</span> <span class="hljs-variable">$scheme</span>:<span class="hljs-regexp">//</span><span class="hljs-variable">$host</span><span class="hljs-regexp">/remote.php/</span>dav;
}</code></pre></div>
<p>Und dokumentieren schlie&szlig;lich diesen Bereich aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```"> include nginxconfig.io/security.conf;</pre><pre class="hljs"><code> include nginxconfig.io/security.conf<span class="hljs-comment">;</span></code></pre></div>
<p>So das es schlie&szlig;lich so aussieht:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.webseite.com;
# SSL
ssl_certificate /etc/letsencrypt/live/cloud.webseite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.webseite.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/cloud.webseite.com/chain.pem;
# security
#include nginxconfig.io/security.conf;
add_header Strict-Transport-Security &quot;max-age=31536000; includeSubDomains; preload&quot;;
# logging
access_log /var/log/nginx/cloud.webseite.com-access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/cloud.webseite.com-error.log warn;
# reverse proxy
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
include nginxconfig.io/proxy.conf;
}
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# additional config
include nginxconfig.io/general.conf;
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name cloud.webseite.com;
# logging
access_log /var/log/nginx/cloud.webseite.com-access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/cloud.webseite.com-error.log warn;
include nginxconfig.io/letsencrypt.conf;
location / {
return 301 https://cloud.webseite.com$request_uri;
}
}</pre><pre class="hljs"><code>server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.webseite.com;
# SSL
ssl_certificate /etc/letsencrypt/live/cloud.webseite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cloud.webseite.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/cloud.webseite.com/chain.pem;
# security
#include nginxconfig.io/security.conf;
add_header Strict-Transport-Security &quot;max-age=31536000; includeSubDomains; preload&quot;;
# logging
access_log /var/log/nginx/cloud.webseite.com-access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/cloud.webseite.com-error.log warn;
# reverse proxy
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
include nginxconfig.io/proxy.conf;
}
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# additional config
include nginxconfig.io/general.conf;
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name cloud.webseite.com;
# logging
access_log /var/log/nginx/cloud.webseite.com-access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/cloud.webseite.com-error.log warn;
include nginxconfig.io/letsencrypt.conf;
location / {
return 301 https://cloud.webseite.com$request_uri;
}
}</code></pre></div>
<p>Und das war es eigentlich schon, wichtig dabei ist das euer Server als A-Record im Domainbestellsystem hinterlegt worden ist.</p>
<h2 id="admin-benutzer-f&uuml;r-die-nextcloud-anlegen">Admin Benutzer f&uuml;r die Nextcloud anlegen <a name="admin-benutzer-f&uuml;r-die-nextcloud-anlegen" class="jop-noMdConv" href="#"></a></h2>
<p>Wir &ouml;ffnen dann die Webseite zur Nextcloud: <a data-from-md="" title="http://127.0.0.1:8080" href="http://127.0.0.1:8080">Link zur Nextcloud</a></p>
<p>Wichtig dabei zu beachten ist, wenn der Admin Benutzer angelegt ist, ist nur noch ein Zugriff &uuml;ber den Reverse Proxy mit Nginx auf dem <em>OVERWRITECLIURL</em> m&ouml;glich der dann im vorherigen Schritt eingerichtet wurde. Deswegen ist es auch Sinnvoll erst diesen Schritt erst auszuf&uuml;hren wenn der Nginx auch komplett l&auml;uft und auf die FQDN zugreifen kann.</p>
<h2 id="optimierungen">Optimierungen <a name="optimierungen" class="jop-noMdConv" href="#"></a></h2>
<p>Wenn ihr oben rechts auf eueren &ldquo;Buchstaben&rdquo;. Dann w&auml;hlt ihr &ldquo;Einstellungen&rdquo; -&gt; &ldquo;&Uuml;bersicht&rdquo; aus. Nun solltet ihr feststellen, dass Nextcloud noch &ldquo;Optimierungsbedarf&rdquo; sieht. Dies wollen wir nun tun.</p>
<p><img src="data:image/png;base64,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
<h3 id="standardtelefonregion-festlegen">Standardtelefonregion festlegen <a name="standardtelefonregion-festlegen" class="jop-noMdConv" href="#"></a></h3>
<p>Dazu &ouml;ffnet ihr folgende Datei:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">nano /opt/containers/nextcloud/app/config/config.php</pre><pre class="hljs"><code>nano <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>app<span class="hljs-regexp">/config/</span>config.php</code></pre></div>
<p>F&uuml;gt nun folgende Zeile hinzu:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```"> &apos;default_phone_region&apos; =&gt; &apos;DE&apos;,</pre><pre class="hljs"><code> <span class="hljs-string">&apos;default_phone_region&apos;</span> =&gt; <span class="hljs-string">&apos;DE&apos;</span>,</code></pre></div>
<p>Dies setzt die Standardregion auf Deutschland. Beispiele dazu findet ihr <a data-from-md="" title="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html" href="https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html">hier</a>. Nun k&ouml;nnt ihr die Datei wieder schlie&szlig;en.</p>
<p>Bei mir sieht es dann so aus:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```"> &apos;dbuser&apos; =&gt; &apos;nextcloud&apos;,
&apos;dbpassword&apos; =&gt; &apos;test&apos;,
&apos;installed&apos; =&gt; true,
&apos;default_phone_region&apos; =&gt; &apos;DE&apos;,
);</pre><pre class="hljs"><code> <span class="hljs-string">&apos;dbuser&apos;</span> =&gt; <span class="hljs-string">&apos;nextcloud&apos;</span>,
<span class="hljs-string">&apos;dbpassword&apos;</span> =&gt; <span class="hljs-string">&apos;test&apos;</span>,
<span class="hljs-string">&apos;installed&apos;</span> =&gt; <span class="hljs-keyword">true</span>,
<span class="hljs-string">&apos;default_phone_region&apos;</span> =&gt; <span class="hljs-string">&apos;DE&apos;</span>,
);</code></pre></div>
<h2 id="container-neu-starten">Container neu starten <a name="container-neu-starten" class="jop-noMdConv" href="#"></a></h2>
<p>Nun starten wir Nextcloud neu um sicherzugehen, dass alle Einstellungen &uuml;bernommen werden.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">docker compose -f /opt/containers/nextcloud/docker-compose.yml down
docker compose -f /opt/containers/nextcloud/docker-compose.yml up -d</pre><pre class="hljs"><code>docker compose -f <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>docker-compose.yml down
docker compose -f <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>docker-compose.yml up -d</code></pre></div>
<p>Nun sollte es so aussehen:</p>
<p><img src="data:image/png;base64,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
<h2 id="nextcloud-cron-einrichten">Nextcloud Cron einrichten <a name="nextcloud-cron-einrichten" class="jop-noMdConv" href="#"></a></h2>
<p>Nun f&uuml;gen wir auf unserem Server noch einen Cron Eintrag hinzu. Dieser bewirkt, dass Nextcloud alle 5 Minuten die Hintergrundjobs abarbeitet. Um Cron zu starten gebt ihr folgendes ein:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">crontab -e</pre><pre class="hljs"><code><span class="hljs-attribute">crontab -e</span></code></pre></div>
<p>Beim ersten Start erscheint nun folgende Meldung. W&auml;hlt hier &ldquo;1&rdquo; aus.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">no crontab for root - using an empty one
Select an editor. To change later, run &apos;select-editor&apos;.
1. /bin/nano &lt;---- easiest
2. /usr/bin/vim.tiny
Choose 1-2 [1]: 1</pre><pre class="hljs"><code>no crontab <span class="hljs-keyword">for</span> root - <span class="hljs-keyword">using</span> <span class="hljs-keyword">an</span> <span class="hljs-literal">empty</span> <span class="hljs-literal">one</span>
Select <span class="hljs-keyword">an</span> editor. To change later, run <span class="hljs-string">&apos;select-editor&apos;</span>.
<span class="hljs-number">1.</span> /bin/nano &lt;<span class="hljs-comment">---- easiest</span>
<span class="hljs-number">2.</span> /usr/bin/vim.tiny
Choose <span class="hljs-number">1</span><span class="hljs-number">-2</span> [<span class="hljs-number">1</span>]: <span class="hljs-number">1</span></code></pre></div>
<p>Hier f&uuml;gt ihr nun folgende Zeile hinzu:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">*/5 * * * * docker exec -u www-data nextcloud-app-1 php cron.php</pre><pre class="hljs"><code>*/<span class="hljs-number">5</span> * * * * docker exec -u www-<span class="hljs-class"><span class="hljs-keyword">data</span> nextcloud-app-1 php cron.php</span></code></pre></div>
<p>Diese Zeile bewirkt, dass euer Server alle 5 Minuten die &ldquo;cron.php&rdquo; Datei ausf&uuml;hrt in eurem Nextcloud Container.</p>
<p>Nachdem ihr dies eingerichtet habt, k&ouml;nnt ihr dies auch kontrollieren. Geht dazu in eure Nextcloud als Administrator. W&auml;hlt dann bei Hintergrundaufgaben noch &ldquo;Cron (Empfohlen)&rdquo;. Hier solltet ihr nun folgendes in den Einstellungen sehen. Wichtig ist, dass die &ldquo;Letzte Aufgabe ausgef&uuml;hrt&hellip;&rdquo; maximal 5 Minuten sein sollte. Wenn dies so ist, dann funktioniert alles.</p>
<p><img src="data:image/png;base64,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
<h2 id="nextcloud-container-updaten">Nextcloud Container updaten <a name="nextcloud-container-updaten" class="jop-noMdConv" href="#"></a></h2>
<p>Man kann den Nextcloud Container Updaten, indem man in folgendes Verzeichnis wechselt und die docker-compose.yml bearbeitet:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">cd /opt/containers/nextcloud
nano docker-compose.yml</pre><pre class="hljs"><code>cd <span class="hljs-regexp">/opt/</span>containers/nextcloud
nano docker-compose.yml</code></pre></div>
<p>Falls man bei dieser Hauptversion bleiben m&ouml;chte, dann bitte den n&auml;chsten Schritt &uuml;berspringen.</p>
<h2 id="neue-nextcloud-hauptversion-verwendet">Neue Nextcloud Hauptversion verwendet <a name="neue-nextcloud-hauptversion-verwendet" class="jop-noMdConv" href="#"></a></h2>
<p>Wichtig dabei zu beachten, wenn man noch die Hauptversion updaten will auch den Tag von Version zu Version hochzuz&auml;hlen.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">nextcloud-app:
image: nextcloud:27</pre><pre class="hljs"><code><span class="hljs-attribute">nextcloud-app</span><span class="hljs-punctuation">:</span>
<span class="hljs-attribute">image</span><span class="hljs-punctuation">:</span> <span class="hljs-string">nextcloud:27</span></code></pre></div>
<p>In diesem Falle die Version nextcloud:27 zu nextcloud:28, aber nicht von Version 27 zu 29.</p>
<p>Eventuell muss man auch die Version der MariaDB Datenbank hochz&auml;hlen, falls die neue Version die &auml;ltere Datenbank nicht mehr unterst&uuml;tzt wird.</p>
<p>Unter folgendem <a data-from-md="" title="https://hub.docker.com/_/nextcloud/tags" href="https://hub.docker.com/_/nextcloud/tags">Link</a> kann man sich die Tags zu den Nextcloud Versionen anzeigen lassen.</p>
<h2 id="docker-container-updaten">Docker Container updaten <a name="docker-container-updaten" class="jop-noMdConv" href="#"></a></h2>
<p>Um nun die neue Version von Nextcloud herunterzuladen machen wir erst einmal ein Backup von den Container, da Backups wichtig und richtig sind.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">cd /opt/containers/
tar -czf nextcloud-backup-$(date &quot;+%F&quot;).tar.gz nextcloud/</pre><pre class="hljs"><code><span class="hljs-built_in">cd</span> /opt/containers/
tar -czf nextcloud-backup-$(<span class="hljs-built_in">date</span> <span class="hljs-string">&quot;+%F&quot;</span>).tar.gz nextcloud/</code></pre></div>
<p>nun m&uuml;ssen folgende Befehle ausgef&uuml;hrt werden damit die neuen Images gepulled werden und anschlie&szlig;end ausgef&uuml;hrt werden.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">cd nextcloud
docker compose pull
docker compose up -d</pre><pre class="hljs"><code><span class="hljs-keyword">cd</span> nextcloud
docker compose pull
docker compose <span class="hljs-keyword">up</span> -d</code></pre></div>
<h2 id="datenbank-und-dateien-von-einer-bereits-vorhandenen-instanz-migrieren">Datenbank und Dateien von einer bereits vorhandenen Instanz migrieren <a name="datenbank-und-dateien-von-einer-bereits-vorhandenen-instanz-migrieren" class="jop-noMdConv" href="#"></a></h2>
<p>Hierdurch werden die Nextcloud Datenbank vom alten System gedumpt:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mysqldump --single-transaction --default-character-set=utf8mb4 -h 127.0.0.1 -u root -p nextcloud &gt; NextCloud-dump-2023-07-24.sql</pre><pre class="hljs"><code><span class="hljs-attribute">mysqldump</span> --single-transaction --default-character-set=utf8mb4 -h <span class="hljs-number">127.0.0.1</span> -u root -p nextcloud &gt; NextCloud-dump-<span class="hljs-number">2023</span>-<span class="hljs-number">07</span>-<span class="hljs-number">24</span>.sql</code></pre></div>
<p>und anschlie&szlig;end auf das neue System hinzugef&uuml;gt:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mysql -h 127.0.0.1 -u nextcloud -p nextcloud &lt; NextCloud-dump.sql
./occ upgrade</pre><pre class="hljs"><code><span class="hljs-attribute">mysql</span> -h <span class="hljs-number">127.0.0.1</span> -u nextcloud -p nextcloud &lt; NextCloud-dump.sql
./occ upgrade</code></pre></div>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
Updating database schema
Updated database
Updating &lt;files&gt; ...
Updated &lt;files&gt; to 1.22.0
Updating &lt;activity&gt; ...
Updated &lt;activity&gt; to 2.19.0
Updating &lt;circles&gt; ...
Updated &lt;circles&gt; to 27.0.1
Updating &lt;cloud_federation_api&gt; ...
Updated &lt;cloud_federation_api&gt; to 1.10.0
Updating &lt;dav&gt; ...
Fix broken values of calendar objects
Done
0/0 [-&gt;--------------------------] 0%
Clean up old calendar subscriptions from deleted users that were not cleaned-up
Done
0/0 [-----&gt;----------------------] 0%
Updated &lt;dav&gt; to 1.27.0
Updating &lt;encryption&gt; ...
Updated &lt;encryption&gt; to 2.15.0
Updating &lt;files_sharing&gt; ...
Updated &lt;files_sharing&gt; to 1.19.0
Updating &lt;files_trashbin&gt; ...
Updated &lt;files_trashbin&gt; to 1.17.0
Updating &lt;files_versions&gt; ...
Updated &lt;files_versions&gt; to 1.20.0
Updating &lt;sharebymail&gt; ...
Updated &lt;sharebymail&gt; to 1.17.0
Updating &lt;workflowengine&gt; ...
Updated &lt;workflowengine&gt; to 2.9.0
Updating &lt;admin_audit&gt; ...
Updated &lt;admin_audit&gt; to 1.17.0
Updating &lt;comments&gt; ...
Updated &lt;comments&gt; to 1.17.0
Updating &lt;notifications&gt; ...
Updated &lt;notifications&gt; to 2.15.0
Updating &lt;systemtags&gt; ...
Updated &lt;systemtags&gt; to 1.17.0
Updating &lt;theming&gt; ...
Migrate old user accessibility config
Done
471/471 [============================] 100%
Updated &lt;theming&gt; to 2.2.0
Updating &lt;bruteforcesettings&gt; ...
Updated &lt;bruteforcesettings&gt; to 2.7.0
Updating &lt;contactsinteraction&gt; ...
Updated &lt;contactsinteraction&gt; to 1.8.0
Updating &lt;dashboard&gt; ...
Updated &lt;dashboard&gt; to 7.7.0
Updating &lt;federatedfilesharing&gt; ...
Updated &lt;federatedfilesharing&gt; to 1.17.0
Updating &lt;files_pdfviewer&gt; ...
Updated &lt;files_pdfviewer&gt; to 2.8.0
Updating &lt;files_rightclick&gt; ...
Updated &lt;files_rightclick&gt; to 1.6.0
Updating &lt;logreader&gt; ...
Updated &lt;logreader&gt; to 2.12.0
Updating &lt;photos&gt; ...
Updated &lt;photos&gt; to 2.3.0
Updating &lt;privacy&gt; ...
Updated &lt;privacy&gt; to 1.11.0
Updating &lt;provisioning_api&gt; ...
Updated &lt;provisioning_api&gt; to 1.17.0
Updating &lt;recommendations&gt; ...
Updated &lt;recommendations&gt; to 1.6.0
Updating &lt;serverinfo&gt; ...
Updated &lt;serverinfo&gt; to 1.17.0
Updating &lt;settings&gt; ...
Updated &lt;settings&gt; to 1.9.0
Updating &lt;twofactor_backupcodes&gt; ...
Updated &lt;twofactor_backupcodes&gt; to 1.16.0
Updating &lt;updatenotification&gt; ...
Updated &lt;updatenotification&gt; to 1.17.0
Updating &lt;user_status&gt; ...
Updated &lt;user_status&gt; to 1.7.0
Updating &lt;viewer&gt; ...
Updated &lt;viewer&gt; to 2.1.0
Updating &lt;weather_status&gt; ...
Updated &lt;weather_status&gt; to 1.7.0
Starting code integrity check...
Finished code integrity check
Update successful
Maintenance mode is kept active
Resetting log level</pre><pre class="hljs"><code>Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
Updating database schema
Updated database
Updating &lt;files&gt; ...
Updated &lt;files&gt; to 1.22.0
Updating &lt;activity&gt; ...
Updated &lt;activity&gt; to 2.19.0
Updating &lt;circles&gt; ...
Updated &lt;circles&gt; to 27.0.1
Updating &lt;cloud_federation_api&gt; ...
Updated &lt;cloud_federation_api&gt; to 1.10.0
Updating &lt;dav&gt; ...
Fix broken values of calendar objects
Done
0/0 [-&gt;--------------------------] 0%
Clean up old calendar subscriptions from deleted users that were not cleaned-up
Done
0/0 [-----&gt;----------------------] 0%
Updated &lt;dav&gt; to 1.27.0
Updating &lt;encryption&gt; ...
Updated &lt;encryption&gt; to 2.15.0
Updating &lt;files_sharing&gt; ...
Updated &lt;files_sharing&gt; to 1.19.0
Updating &lt;files_trashbin&gt; ...
Updated &lt;files_trashbin&gt; to 1.17.0
Updating &lt;files_versions&gt; ...
Updated &lt;files_versions&gt; to 1.20.0
Updating &lt;sharebymail&gt; ...
Updated &lt;sharebymail&gt; to 1.17.0
Updating &lt;workflowengine&gt; ...
Updated &lt;workflowengine&gt; to 2.9.0
Updating &lt;admin_audit&gt; ...
Updated &lt;admin_audit&gt; to 1.17.0
Updating &lt;comments&gt; ...
Updated &lt;comments&gt; to 1.17.0
Updating &lt;notifications&gt; ...
Updated &lt;notifications&gt; to 2.15.0
Updating &lt;systemtags&gt; ...
Updated &lt;systemtags&gt; to 1.17.0
Updating &lt;theming&gt; ...
Migrate old user accessibility config
Done
471/471 [============================] 100%
Updated &lt;theming&gt; to 2.2.0
Updating &lt;bruteforcesettings&gt; ...
Updated &lt;bruteforcesettings&gt; to 2.7.0
Updating &lt;contactsinteraction&gt; ...
Updated &lt;contactsinteraction&gt; to 1.8.0
Updating &lt;dashboard&gt; ...
Updated &lt;dashboard&gt; to 7.7.0
Updating &lt;federatedfilesharing&gt; ...
Updated &lt;federatedfilesharing&gt; to 1.17.0
Updating &lt;files_pdfviewer&gt; ...
Updated &lt;files_pdfviewer&gt; to 2.8.0
Updating &lt;files_rightclick&gt; ...
Updated &lt;files_rightclick&gt; to 1.6.0
Updating &lt;logreader&gt; ...
Updated &lt;logreader&gt; to 2.12.0
Updating &lt;photos&gt; ...
Updated &lt;photos&gt; to 2.3.0
Updating &lt;privacy&gt; ...
Updated &lt;privacy&gt; to 1.11.0
Updating &lt;provisioning_api&gt; ...
Updated &lt;provisioning_api&gt; to 1.17.0
Updating &lt;recommendations&gt; ...
Updated &lt;recommendations&gt; to 1.6.0
Updating &lt;serverinfo&gt; ...
Updated &lt;serverinfo&gt; to 1.17.0
Updating &lt;settings&gt; ...
Updated &lt;settings&gt; to 1.9.0
Updating &lt;twofactor_backupcodes&gt; ...
Updated &lt;twofactor_backupcodes&gt; to 1.16.0
Updating &lt;updatenotification&gt; ...
Updated &lt;updatenotification&gt; to 1.17.0
Updating &lt;user_status&gt; ...
Updated &lt;user_status&gt; to 1.7.0
Updating &lt;viewer&gt; ...
Updated &lt;viewer&gt; to 2.1.0
Updating &lt;weather_status&gt; ...
Updated &lt;weather_status&gt; to 1.7.0
Starting code integrity check...
Finished code integrity check
Update successful
Maintenance mode is kept active
Resetting log level</code></pre></div>
<p>Und f&uuml;r die Dateien einmal die in den Nextcloud Data-Verzeichnis ableget wurde mit folgendem Befehl die Rechte anlegen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">cd /opt/data/nextcloud/
cp -Rv /opt/extern-data/nextcloud/data/* .
chown -cRv www-data:www-data .</pre><pre class="hljs"><code>cd <span class="hljs-regexp">/opt/</span>data<span class="hljs-regexp">/nextcloud/</span>
cp -Rv <span class="hljs-regexp">/opt/</span>extern-data<span class="hljs-regexp">/nextcloud/</span>data/* .
chown -cRv www-data:www-data .</code></pre></div>
<p>und anschlie&szlig;end die Dateien neu einscannen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">docker compose exec --user www-data -it nextcloud-app /bin/bash
./occ files:scan --all</pre><pre class="hljs"><code>docker compose exec <span class="hljs-params">--user</span> www-data -it nextcloud-app <span class="hljs-string">/bin/bash</span>
<span class="hljs-string">./occ</span> files<span class="hljs-function">:scan</span> <span class="hljs-params">--all</span></code></pre></div>
<h2 id="weitere-optimierungen-an-der-datenbank-nach-der-migration">Weitere Optimierungen an der Datenbank nach der Migration <a name="weitere-optimierungen-an-der-datenbank-nach-der-migration" class="jop-noMdConv" href="#"></a></h2>
<p>Falls noch Probleme im Status mit der Datenbank vorhanden sind, sind diese Befehle auszuf&uuml;hren um die Tabellen zu reparieren:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">[root@SST-S-440 nextcloud]# docker compose exec --user www-data -it nextcloud-app /bin/bash
www-data@bbb02abc82f0:~/html$ ./occ db:add-missing-indices</pre><pre class="hljs"><code>[root<span class="hljs-variable">@SST</span>-S<span class="hljs-number">-440</span> nextcloud]<span class="hljs-comment"># docker compose exec --user www-data -it nextcloud-app /bin/bash</span>
www-data<span class="hljs-variable">@bbb02abc82f0</span><span class="hljs-symbol">:~/html</span><span class="hljs-variable">$ </span>./occ <span class="hljs-symbol">db:</span>add-missing-indices</code></pre></div>
<p>Das Ergebniss sollte dann so aussehen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">Check indices of the share table.
Check indices of the filecache table.
Adding additional size index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional size index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional path index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional parent index to the filecache table, this can take some time...
Filecache table updated successfully.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.
Adding properties_pathonly_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_jobs table.
Adding job_lastcheck_reserved index to the oc_jobs table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_direct_edit table.
Adding direct_edit_timestamp index to the oc_direct_edit table, this can take some time...
oc_direct_edit table updated successfully.
Check indices of the oc_preferences table.
Adding preferences_app_key index to the oc_preferences table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_mounts table.
Adding mounts_user_root_path_index index to the oc_mounts table, this can take some time...
oc_mounts table updated successfully.
Check indices of the oc_systemtag_object_mapping table.
Adding systag_by_tagid index to the oc_systemtag_object_mapping table, this can take some time...
oc_systemtag_object_mapping table updated successfully.
Adding additional textstep_session index to the oc_text_steps table, this can take some time...
oc_text_steps table updated successfully.</pre><pre class="hljs"><code>Check indices of the share table.
Check indices of the filecache table.
Adding additional size index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional size index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional path index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional parent index to the filecache table, this can take some time...
Filecache table updated successfully.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.
Adding properties_pathonly_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_jobs table.
Adding job_lastcheck_reserved index to the oc_jobs table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_direct_edit table.
Adding direct_edit_timestamp index to the oc_direct_edit table, this can take some time...
oc_direct_edit table updated successfully.
Check indices of the oc_preferences table.
Adding preferences_app_key index to the oc_preferences table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_mounts table.
Adding mounts_user_root_path_index index to the oc_mounts table, this can take some time...
oc_mounts table updated successfully.
Check indices of the oc_systemtag_object_mapping table.
Adding systag_by_tagid index to the oc_systemtag_object_mapping table, this can take some time...
oc_systemtag_object_mapping table updated successfully.
Adding additional textstep_session index to the oc_text_steps table, this can take some time...
oc_text_steps table updated successfully.</code></pre></div>
<p>Und noch ein weiterer Befehl:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">www-data@bbb02abc82f0:~/html$ ./occ db:add-missing-primary-keys</pre><pre class="hljs"><code>www-data<span class="hljs-variable">@bbb02abc82f0</span><span class="hljs-symbol">:~/html</span><span class="hljs-variable">$ </span>./occ <span class="hljs-symbol">db:</span>add-missing-primary-keys</code></pre></div>
<p>Und weitere Anpassungen an der Datenbank mit:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mysql -h 127.0.0.1 -u nextcloud -p nextcloud</pre><pre class="hljs"><code><span class="hljs-attribute">mysql</span> -h <span class="hljs-number">127.0.0.1</span> -u nextcloud -p nextcloud</code></pre></div>
<p>und folgenden Befehlen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">use nextcloud
DROP TABLE oc_textprocessing_tasks;
DROP TABLE oc_open_local_editor;</pre><pre class="hljs"><code>use nextcloud
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> oc_textprocessing_tasks;
<span class="hljs-keyword">DROP</span> <span class="hljs-keyword">TABLE</span> oc_open_local_editor;</code></pre></div>
<p>Dessen Ausgabe so aussehen sollte:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">Check primary keys.
Adding primary key to the federated_reshares table, this can take some time...
federated_reshares table updated successfully.
Adding primary key to the systemtag_object_mapping table, this can take some time...
systemtag_object_mapping table updated successfully.
Adding primary key to the comments_read_markers table, this can take some time...
comments_read_markers table updated successfully.
Adding primary key to the collres_resources table, this can take some time...
collres_resources table updated successfully.
Adding primary key to the collres_accesscache table, this can take some time...
collres_accesscache table updated successfully.
Adding primary key to the filecache_extended table, this can take some time...
filecache_extended table updated successfully.</pre><pre class="hljs"><code>Check primary keys.
Adding primary key <span class="hljs-selector-tag">to</span> the federated_reshares <span class="hljs-selector-tag">table</span>, this can take some <span class="hljs-selector-tag">time</span>...
federated_reshares <span class="hljs-selector-tag">table</span> updated successfully.
Adding primary key <span class="hljs-selector-tag">to</span> the systemtag_object_mapping <span class="hljs-selector-tag">table</span>, this can take some <span class="hljs-selector-tag">time</span>...
systemtag_object_mapping <span class="hljs-selector-tag">table</span> updated successfully.
Adding primary key <span class="hljs-selector-tag">to</span> the comments_read_markers <span class="hljs-selector-tag">table</span>, this can take some <span class="hljs-selector-tag">time</span>...
comments_read_markers <span class="hljs-selector-tag">table</span> updated successfully.
Adding primary key <span class="hljs-selector-tag">to</span> the collres_resources <span class="hljs-selector-tag">table</span>, this can take some <span class="hljs-selector-tag">time</span>...
collres_resources <span class="hljs-selector-tag">table</span> updated successfully.
Adding primary key <span class="hljs-selector-tag">to</span> the collres_accesscache <span class="hljs-selector-tag">table</span>, this can take some <span class="hljs-selector-tag">time</span>...
collres_accesscache <span class="hljs-selector-tag">table</span> updated successfully.
Adding primary key <span class="hljs-selector-tag">to</span> the filecache_extended <span class="hljs-selector-tag">table</span>, this can take some <span class="hljs-selector-tag">time</span>...
filecache_extended <span class="hljs-selector-tag">table</span> updated successfully.</code></pre></div>
<p>Anschlie&szlig;end noch diesen Befehl ausf&uuml;hren und zus&auml;tzlich best&auml;tigen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">www-data@bbb02abc82f0:~/html$ ./occ db:convert-filecache-bigint
Following columns will be updated:
* federated_reshares.share_id
* filecache.mtime
* filecache.storage_mtime
* filecache_extended.fileid
* files_trash.auto_id
* mounts.storage_id
* mounts.root_id
* mounts.mount_id
* share_external.id
* share_external.parent
This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y</pre><pre class="hljs"><code>www-data@bbb02abc82f0:~/html<span class="hljs-symbol">$</span> ./occ db:convert-filecache-bigint
Following columns will be updated:
<span class="hljs-comment">* federated_reshares.share_id</span>
<span class="hljs-comment">* filecache.mtime</span>
<span class="hljs-comment">* filecache.storage_mtime</span>
<span class="hljs-comment">* filecache_extended.fileid</span>
<span class="hljs-comment">* files_trash.auto_id</span>
<span class="hljs-comment">* mounts.storage_id</span>
<span class="hljs-comment">* mounts.root_id</span>
<span class="hljs-comment">* mounts.mount_id</span>
<span class="hljs-comment">* share_external.id</span>
<span class="hljs-comment">* share_external.parent</span>
This can take up to hours, depending on the number of <span class="hljs-keyword">files</span> in your instance!
Continue with the conversion (y/n)? [n] y</code></pre></div>
<h2 id="volltextsuche-und-ocr-mit-migrieren-und-installieren">Volltextsuche und OCR mit migrieren und installieren <a name="volltextsuche-und-ocr-mit-migrieren-und-installieren" class="jop-noMdConv" href="#"></a></h2>
<p>Folgenden Text der Docker Compose Datei hinzuf&uuml;gen:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```"> elasticsearch:
build: ./elasticsearch
container_name: elasticsearch
restart: unless-stopped
environment:
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
networks:
- default</pre><pre class="hljs"><code><span class="hljs-symbol"> elasticsearch:</span>
<span class="hljs-symbol"> build:</span> ./elasticsearch
<span class="hljs-symbol"> container_name:</span> elasticsearch
<span class="hljs-symbol"> restart:</span> unless-stopped
<span class="hljs-symbol"> environment:</span>
- discovery.<span class="hljs-attr">type</span><span class="hljs-operator">=</span>single-node
<span class="hljs-symbol"> ulimits:</span>
<span class="hljs-symbol"> memlock:</span>
<span class="hljs-symbol"> soft:</span> <span class="hljs-number">-1</span>
<span class="hljs-symbol"> hard:</span> <span class="hljs-number">-1</span>
<span class="hljs-symbol"> volumes:</span>
- .<span class="hljs-keyword">/elasticsearch/</span>data:<span class="hljs-keyword">/usr/</span>share<span class="hljs-keyword">/elasticsearch/</span>data
<span class="hljs-symbol"> networks:</span>
- default</code></pre></div>
<p>und folgendes beim Nextcloud &auml;ndern bzw. ausdokumentieren:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```"># image: nextcloud:27
build: ./nextcloud-app</pre><pre class="hljs"><code><span class="hljs-meta"># image: nextcloud:27</span>
<span class="hljs-symbol">build:</span> ./nextcloud-app</code></pre></div>
<h3 id="anpassungen-f&uuml;r-imagemagick">Anpassungen f&uuml;r ImageMagick <a name="anpassungen-f&uuml;r-imagemagick" class="jop-noMdConv" href="#"></a></h3>
<p>ImageMagick wird verwendet um aus PDF Seiten Fotos zu erstellen. Diese k&ouml;nnen sp&auml;ter per OCR erkannt werden. Es gibt derzeit wohl ein kleines Hindernis (<a data-from-md="" title="https://github.com/nextcloud/files_fulltextsearch/issues/100" href="https://github.com/nextcloud/files_fulltextsearch/issues/100">Github Quelle</a>) weshalb wir hier noch eine extra Anpassung vornehmen m&uuml;ssen.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir /opt/containers/nextcloud/imagemagick/
nano /opt/containers/nextcloud/imagemagick/policy.xml</pre><pre class="hljs"><code>mkdir <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/im</span>agemagick/
nano <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/im</span>agemagick/policy.xml</code></pre></div>
<p>Inhalt:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE policymap [
&lt;!ELEMENT policymap (policy)+&gt;
&lt;!ATTLIST policymap xmlns CDATA #FIXED &apos;&apos;&gt;
&lt;!ELEMENT policy EMPTY&gt;
&lt;!ATTLIST policy xmlns CDATA #FIXED &apos;&apos; domain NMTOKEN #REQUIRED
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED&gt;
]&gt;
&lt;policymap&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;shred&quot; value=&quot;2&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;precision&quot; value=&quot;6&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;memory-map&quot; value=&quot;anonymous&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;max-memory-request&quot; value=&quot;256MiB&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;temporary-path&quot; value=&quot;/tmp&quot;/&gt; --&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;memory&quot; value=&quot;256MiB&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;map&quot; value=&quot;512MiB&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;width&quot; value=&quot;16KP&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;height&quot; value=&quot;16KP&quot;/&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;list-length&quot; value=&quot;128&quot;/&gt; --&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;area&quot; value=&quot;128MB&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;disk&quot; value=&quot;1GiB&quot;/&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;file&quot; value=&quot;768&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;thread&quot; value=&quot;4&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;throttle&quot; value=&quot;0&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;time&quot; value=&quot;3600&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;MVG&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;module&quot; rights=&quot;none&quot; pattern=&quot;{PS,PDF,XPS}&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;HTTPS&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;path&quot; rights=&quot;none&quot; pattern=&quot;@*&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;cache&quot; name=&quot;memory-map&quot; value=&quot;anonymous&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;cache&quot; name=&quot;synchronize&quot; value=&quot;True&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;cache&quot; name=&quot;shared-secret&quot; value=&quot;passphrase&quot; stealth=&quot;true&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;pixel-cache-memory&quot; value=&quot;anonymous&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;shred&quot; value=&quot;2&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;precision&quot; value=&quot;6&quot;/&gt; --&gt;
&lt;!-- not needed due to the need to use explicitly by mvg: --&gt;
&lt;!-- &lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;MVG&quot; /&gt; --&gt;
&lt;!-- use curl --&gt;
&lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;URL&quot; /&gt;
&lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;HTTPS&quot; /&gt;
&lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;HTTP&quot; /&gt;
&lt;!-- in order to avoid to get image with password text --&gt;
&lt;policy domain=&quot;path&quot; rights=&quot;none&quot; pattern=&quot;@*&quot;/&gt;
&lt;!-- disable ghostscript format types --&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PS&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PS2&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PS3&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;EPS&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;read | write&quot; pattern=&quot;PDF&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;XPS&quot; /&gt;
&lt;/policymap&gt;</pre><pre class="hljs"><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE policymap [
&lt;!ELEMENT policymap (policy)+&gt;
&lt;!ATTLIST policymap xmlns CDATA #FIXED &apos;&apos;&gt;
&lt;!ELEMENT policy EMPTY&gt;
&lt;!ATTLIST policy xmlns CDATA #FIXED &apos;&apos; domain NMTOKEN #REQUIRED
name NMTOKEN #IMPLIED pattern CDATA #IMPLIED rights NMTOKEN #IMPLIED
stealth NMTOKEN #IMPLIED value CDATA #IMPLIED&gt;
]&gt;
&lt;policymap&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;shred&quot; value=&quot;2&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;precision&quot; value=&quot;6&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;memory-map&quot; value=&quot;anonymous&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;max-memory-request&quot; value=&quot;256MiB&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;temporary-path&quot; value=&quot;/tmp&quot;/&gt; --&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;memory&quot; value=&quot;256MiB&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;map&quot; value=&quot;512MiB&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;width&quot; value=&quot;16KP&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;height&quot; value=&quot;16KP&quot;/&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;list-length&quot; value=&quot;128&quot;/&gt; --&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;area&quot; value=&quot;128MB&quot;/&gt;
&lt;policy domain=&quot;resource&quot; name=&quot;disk&quot; value=&quot;1GiB&quot;/&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;file&quot; value=&quot;768&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;thread&quot; value=&quot;4&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;throttle&quot; value=&quot;0&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;resource&quot; name=&quot;time&quot; value=&quot;3600&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;MVG&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;module&quot; rights=&quot;none&quot; pattern=&quot;{PS,PDF,XPS}&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;HTTPS&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;path&quot; rights=&quot;none&quot; pattern=&quot;@*&quot; /&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;cache&quot; name=&quot;memory-map&quot; value=&quot;anonymous&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;cache&quot; name=&quot;synchronize&quot; value=&quot;True&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;cache&quot; name=&quot;shared-secret&quot; value=&quot;passphrase&quot; stealth=&quot;true&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;pixel-cache-memory&quot; value=&quot;anonymous&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;shred&quot; value=&quot;2&quot;/&gt; --&gt;
&lt;!-- &lt;policy domain=&quot;system&quot; name=&quot;precision&quot; value=&quot;6&quot;/&gt; --&gt;
&lt;!-- not needed due to the need to use explicitly by mvg: --&gt;
&lt;!-- &lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;MVG&quot; /&gt; --&gt;
&lt;!-- use curl --&gt;
&lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;URL&quot; /&gt;
&lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;HTTPS&quot; /&gt;
&lt;policy domain=&quot;delegate&quot; rights=&quot;none&quot; pattern=&quot;HTTP&quot; /&gt;
&lt;!-- in order to avoid to get image with password text --&gt;
&lt;policy domain=&quot;path&quot; rights=&quot;none&quot; pattern=&quot;@*&quot;/&gt;
&lt;!-- disable ghostscript format types --&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PS&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PS2&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;PS3&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;EPS&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;read | write&quot; pattern=&quot;PDF&quot; /&gt;
&lt;policy domain=&quot;coder&quot; rights=&quot;none&quot; pattern=&quot;XPS&quot; /&gt;
&lt;/policymap&gt;</code></pre></div>
<h3 id="anpassung-f&uuml;r-nextcloud">Anpassung f&uuml;r Nextcloud <a name="anpassung-f&uuml;r-nextcloud" class="jop-noMdConv" href="#"></a></h3>
<p>In der aktuellen Version muss noch GhostScript in den Nextcloud Container hinzugef&uuml;gt werden. Daher m&uuml;ssen wir uns den Container selbst bauen.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir /opt/containers/nextcloud/nextcloud-app/
nano /opt/containers/nextcloud/nextcloud-app/Dockerfile</pre><pre class="hljs"><code>mkdir <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>nextcloud-app/
nano <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>nextcloud-app/Dockerfile</code></pre></div>
<p>Inhalt:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">FROM nextcloud
RUN apt-get update
RUN apt-get install -y ghostscript
RUN apt install -y libmagickwand-dev --no-install-recommends
RUN pecl install imagick; exit 0
RUN docker-php-ext-enable imagick
RUN rm -rf /var/lib/apt/lists/*</pre><pre class="hljs"><code><span class="hljs-keyword">FROM</span> nextcloud
<span class="hljs-built_in">RUN</span> apt-<span class="hljs-built_in">get</span> update
<span class="hljs-built_in">RUN</span> apt-<span class="hljs-built_in">get</span> install -y ghostscript
<span class="hljs-built_in">RUN</span> apt install -y libmagickwand-dev --no-install-recommends
<span class="hljs-built_in">RUN</span> pecl install imagick; exit 0
<span class="hljs-built_in">RUN</span> docker-php-ext-<span class="hljs-built_in">enable</span> imagick
<span class="hljs-built_in">RUN</span> rm -rf /var/lib/apt/lists/*</code></pre></div>
<h3 id="anpassungen-f&uuml;r-elasticsearch">Anpassungen f&uuml;r ElasticSearch <a name="anpassungen-f&uuml;r-elasticsearch" class="jop-noMdConv" href="#"></a></h3>
<p>Um die OCR Erkennung in ElasticSearch zu realisieren ben&ouml;tigen wir noch das Programm <a data-from-md="" title="https://tesseract-ocr.github.io/tessdoc/4.0-Docker-Containers.html" href="https://tesseract-ocr.github.io/tessdoc/4.0-Docker-Containers.html">Tesseract</a>. Daher m&uuml;ssen wir uns den ElasticSearch Container auch selbst bauen.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">mkdir /opt/containers/nextcloud/elasticsearch/
nano /opt/containers/nextcloud/elasticsearch/Dockerfile</pre><pre class="hljs"><code>mkdir <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>elasticsearch/
nano <span class="hljs-regexp">/opt/</span>containers<span class="hljs-regexp">/nextcloud/</span>elasticsearch/Dockerfile</code></pre></div>
<p>Inhalt:</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">FROM elasticsearch:7.17.10
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch ingest-attachment
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng</pre><pre class="hljs"><code><span class="hljs-keyword">FROM</span> elasticsearch:7.17.10
<span class="hljs-built_in">RUN</span> /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch ingest-attachment
<span class="hljs-built_in">RUN</span> apt-<span class="hljs-built_in">get</span> update
<span class="hljs-built_in">RUN</span> apt-<span class="hljs-built_in">get</span><span class="hljs-built_in"> upgrade </span>-y
<span class="hljs-built_in">RUN</span> apt-<span class="hljs-built_in">get</span> install -y tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng</code></pre></div>
<p>Hier k&ouml;nnt ihr noch weitere Sprachen installieren zur OCR Erkennung. Eine &Uuml;bersicht alles Sprachen findet ihr <a data-from-md="" title="https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_8/noarch/" href="https://download.opensuse.org/repositories/home:/Alexander_Pozdnyakov/CentOS_8/noarch/">hier</a>.</p>
<p>Folgende Plugins m&uuml;ssen installiert werden:</p>
<p><img src="data:image/png;base64,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
<p>Und folgende Einstellungen gesetzt werden:</p>
<p><img src="data:image/png;base64,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
<p>Nach der DB-Migration folgende Befehle ausf&uuml;hren.</p>
<div class="joplin-editable"><pre class="joplin-source" data-joplin-language="" data-joplin-source-open="```
" data-joplin-source-close="
```">docker compose exec --user www-data -it app /bin/bash
./occ fultextsearch:migration:24
./occ fulltextsearch:index
./occ fulltextsearch:live</pre><pre class="hljs"><code>docker compose <span class="hljs-built_in">exec</span> --user www-data -it app /bin/bash
./occ fultextsearch:migration:24
./occ fulltextsearch:index
./occ fulltextsearch:live</code></pre></div>
<p>Das Ergebniss m&uuml;sste schlie&szlig;lich so aussehen:</p>
<p><img src="data:image/png;base64,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
<h2 id="quellen">Quellen <a name="quellen" class="jop-noMdConv" href="#"></a></h2>
<p><a data-from-md="" title="https://hub.docker.com/_/nextcloud/" href="https://hub.docker.com/_/nextcloud/">https://hub.docker.com/_/nextcloud/</a></p>
<p><a data-from-md="" title="https://teqqy.de/nextcloud-docker-tutorial-step-by-step-zum-erfolg/" href="https://teqqy.de/nextcloud-docker-tutorial-step-by-step-zum-erfolg/">https://teqqy.de/nextcloud-docker-tutorial-step-by-step-zum-erfolg/</a></p>
<p><a data-from-md="" title="https://goneuland.de/nextcloud-server-mit-docker-compose-und-traefik-installieren/" href="https://goneuland.de/nextcloud-server-mit-docker-compose-und-traefik-installieren/">https://goneuland.de/nextcloud-server-mit-docker-compose-und-traefik-installieren/</a></p>
<p><a data-from-md="" title="https://goneuland.de/nextcloud-server-mit-elasticsearch-collabora-office-docker-compose-und-traefik-installieren/" href="https://goneuland.de/nextcloud-server-mit-elasticsearch-collabora-office-docker-compose-und-traefik-installieren/">https://goneuland.de/nextcloud-server-mit-elasticsearch-collabora-office-docker-compose-und-traefik-installieren/</a></p>
<p><a data-from-md="" title="https://wiki.ubuntuusers.de/SSH/#SSH-Tunnel" href="https://wiki.ubuntuusers.de/SSH/#SSH-Tunnel">https://wiki.ubuntuusers.de/SSH/#SSH-Tunnel</a></p>
<p><a data-from-md="" title="https://idroot.us/install-certbot-almalinux-8/" href="https://idroot.us/install-certbot-almalinux-8/">https://idroot.us/install-certbot-almalinux-8/</a></p>
<p><a data-from-md="" title="https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx" href="https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx">https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx</a></p>
<p><a data-from-md="" title="https://github.com/nextcloud/docker/blob/master/README.md" href="https://github.com/nextcloud/docker/blob/master/README.md">https://github.com/nextcloud/docker/blob/master/README.md</a></p>
<p><a data-from-md="" title="https://howtodotech.de/nextcloud-dateien-mit-occ-filesscan-neu-einscannen/" href="https://howtodotech.de/nextcloud-dateien-mit-occ-filesscan-neu-einscannen/">https://howtodotech.de/nextcloud-dateien-mit-occ-filesscan-neu-einscannen/</a></p>
<p><a data-from-md="" title="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html" href="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html">https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html</a></p>
<p><a data-from-md="" title="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html" href="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html">https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html</a></p>
<p><a data-from-md="" title="https://gdevillele.github.io/engine/admin/systemd/" href="https://gdevillele.github.io/engine/admin/systemd/">https://gdevillele.github.io/engine/admin/systemd/</a></p>
<p><a data-from-md="" title="https://linuxconfig.org/how-to-configure-ntp-server-and-client-on-almalinux" href="https://linuxconfig.org/how-to-configure-ntp-server-and-client-on-almalinux">https://linuxconfig.org/how-to-configure-ntp-server-and-client-on-almalinux</a></p>
<p><a data-from-md="" title="https://www.my-it-brain.de/wordpress/nextcloud-im-container-teil-3-mit-reverse-proxy/" href="https://www.my-it-brain.de/wordpress/nextcloud-im-container-teil-3-mit-reverse-proxy/">https://www.my-it-brain.de/wordpress/nextcloud-im-container-teil-3-mit-reverse-proxy/</a></p>
</div></div>
</body>
</html>