From 0fe06e120ac2520940fef1a0180318459e20a619 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 4 Nov 2026 03:05:56 +0000 Subject: [PATCH] Web 0.15.2: Lektion 1 in zwei Lektionen geteilt (Struktogramm / PAP und Pseudocode) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit VisuStruct zählt Lektionen jetzt wie VisuBot in Dateireihenfolge durch; die neue Lektion 01-weitere-darstellungen behält Dateinummer 01, Verweise „Lektion N“ und nach: werden automatisch umgeschrieben. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Ugz28SUi7WrLyAgxYxQzrJ --- CHANGELOG.md | 1 + web/lessons/de/01-was-ist-ein-struktogramm.md | 177 +- web/lessons/de/01-weitere-darstellungen.md | 244 ++ web/lessons/en/01-was-ist-ein-struktogramm.md | 170 +- web/lessons/en/01-weitere-darstellungen.md | 237 ++ web/lessons/pt/01-was-ist-ein-struktogramm.md | 177 +- web/lessons/pt/01-weitere-darstellungen.md | 244 ++ web/package-lock.json | 4 +- web/package.json | 2 +- web/src/learn/content.ts | 11 +- web/test/lessons.test.ts | 12 + ...lowApp-RdEaBhPZ.js => flowApp-DABZxAnt.js} | 4 +- .../{index-DuzNMqv5.js => index-f5yHO7xw.js} | 3551 +++++++++-------- ...tApp-DkBXkNTX.js => objectApp-B_BhGjAU.js} | 8 +- ...Zip-hnnNIFP3.js => projectZip-U6owH1qi.js} | 2 +- ...obot3d-K0yfmoba.js => robot3d-QiT3_7Hv.js} | 2 +- website/app/index.html | 2 +- 17 files changed, 2640 insertions(+), 2208 deletions(-) create mode 100644 web/lessons/de/01-weitere-darstellungen.md create mode 100644 web/lessons/en/01-weitere-darstellungen.md create mode 100644 web/lessons/pt/01-weitere-darstellungen.md rename website/app/assets/{flowApp-RdEaBhPZ.js => flowApp-DABZxAnt.js} (99%) rename website/app/assets/{index-DuzNMqv5.js => index-f5yHO7xw.js} (94%) rename website/app/assets/{objectApp-DkBXkNTX.js => objectApp-B_BhGjAU.js} (99%) rename website/app/assets/{projectZip-hnnNIFP3.js => projectZip-U6owH1qi.js} (99%) rename website/app/assets/{robot3d-K0yfmoba.js => robot3d-QiT3_7Hv.js} (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55360adf..9ce074d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Changed +- **Web 0.15.2, lesson 1 split in two:** VisuStruct lesson 1 „Was ist ein Struktogramm?“ was very long (15 steps). It now covers algorithm, reading a structure chart, the three building blocks, „Erst die Struktur, dann der Code“, the game „Welcher Baustein?“, checklist and quiz. The new lesson 2 „PAP und Pseudocode“ (`01-weitere-darstellungen.md`) takes the flowchart part (PAP elements, exercise „Kuchen backen als PAP“, jumps/GOTO/spaghetti code, pseudocode and comparison) with its own Kompetenzen, a new game „Welche Darstellung?“ (structure chart, flowchart or pseudocode, eight rounds), checklist and quiz (de/en/pt). VisuStruct now numbers lessons like VisuBot: in file order, so the new lesson keeps file number 01 and no file is renamed (progress stays). All later lessons move up by one; „Lektion N“ in texts and `nach:` in tasks are renumbered automatically. Saved step positions in lesson 1 may point to a later step than before. New test checks the split and the renumbered references. - **Web 0.15.1, third hint and robot game moved:** eight harder exercises get a third hint that gives the outline of the solution box by box (L9 Schaltjahr, L10 Taschenrechner, L12 Summe bis 0, L14 Rechteck, L15 Summe und Maximum, L17 Rückwärts and Wörter zählen, L19 Absteigend sortieren; de/en/pt, with the variable names of each language). Students working alone are no longer stuck after two hints; the sample solution stays teacher-only. VisuBot: the game „Wo landet der mBot2?“ moves from lesson 1 „Struktogramm und Editor“ (where the commands with numbers in brackets were not explained yet) to lesson 2 „Der mBot2“, right after „Befehle für den mBot2“ and „Erste Fahrt“ (de/en). Saved step positions in these two lessons may shift by one. - **Web 0.15.0, release:** version number only, no further changes. 0.15.0 bundles everything since 0.14.x: VisuBot as a robotics-only world with its own basic lessons, a game in every lesson, repaired lesson steps (0.14.34) and lessons that are easier for self-study (0.14.35). - **Web 0.14.35, lessons easier for self-study:** VisuBot lesson 3 gets a new step „So sieht Java aus“ before the first Java exercise: where the Code area is, the square with a variable in Java, semicolons, the `for` head, curly brackets, upper and lower case, and how to solve a Java exercise (Im Editor öffnen, type, Prüfen); plus a Kompetenz and checklist item. VisuBot lesson 2 explains the counter `i` of the for loop (what `int i = 0`, `i < 5`, `i++` mean, table of the five runs). VisuBot says `true`/`false` like the editor instead of Ja/Nein (lesson text, hints, tasks). VisuBot lesson 1 (Struktogramm und Editor) says that every exercise ends with Prüfen, often in several worlds, and that the hints help. VisuStruct lesson 4 explains `"Text: " + variable` in the lesson text before the exercise „Rechteck“ (before, only its second hint did). Lesson 2 names the tool buttons Kopieren, Einfügen and Rückgängig for tablets without a keyboard and points to the Simulation button. The tasks of lessons 29–40 get a list „Du bist fertig, wenn …“ with things you can see in the window, so students working alone know when they are done (de/en/pt; VisuBot de/en). diff --git a/web/lessons/de/01-was-ist-ein-struktogramm.md b/web/lessons/de/01-was-ist-ein-struktogramm.md index ed2033fc..ccaf69d1 100644 --- a/web/lessons/de/01-was-ist-ein-struktogramm.md +++ b/web/lessons/de/01-was-ist-ein-struktogramm.md @@ -10,9 +10,6 @@ kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. - erklären, was ein Algorithmus ist - ein Struktogramm lesen - die drei Grundbausteine Sequenz, Verzweigung und Wiederholung erkennen -- einen PAP (englisch *flowchart*) lesen und selbst zusammenbauen -- erklären, warum Sprünge im PAP zu Fehlern führen -- einen einfachen Algorithmus als Pseudocode lesen ::: ## Ein Algorithmus ist eine genaue Anleitung @@ -45,7 +42,7 @@ Die Darstellung stammt von **Isaac Nassi und Ben Shneiderman** (1973). Deshalb h Links Isaac „Ike“ Nassi (Foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/deed.de), zugeschnitten), rechts Ben Shneiderman (Foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0). ::: -> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer. Programme, die kreuz und quer springen, nennt man **Spaghetticode**, weil sich ihr Ablauf verheddert wie Nudeln auf dem Teller. Mehr dazu in Schritt 10. +> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer. Programme, die kreuz und quer springen, nennt man **Spaghetticode**, weil sich ihr Ablauf verheddert wie Nudeln auf dem Teller. Mehr dazu in der nächsten Lektion. ::: angeberwissen Määäh, aufgepasst! 1972 waren Nassi und Shneiderman noch Doktoranden an der Stony Brook University bei New York, Shneiderman etwa 25 und Nassi etwa 23. Also quasi zwei Studis, die nebenbei Informatikgeschichte geschrieben haben. @@ -123,138 +120,6 @@ Die Kästen können auch **ineinander geschachtelt** werden: In einer Schleife o Trostpflaster für alle mit einer verpatzten Arbeit: Die berühmte Fachzeitschrift *Communications of the ACM* hat den Struktogramm-Artikel abgelehnt. Laut Nassi meinte der Gutachter sogar, sie sollten alle Exemplare einsammeln und verbrennen. Autsch! Er erschien 1973 dann in einem kleineren Heft und wird heute tausendfach zitiert. Ätsch! ::: -## Andere Darstellungen: Der PAP - -Es gibt noch zwei weitere Arten, Algorithmen darzustellen: den **Programmablaufplan**, kurz **PAP**, und den **Pseudocode**. Beide wirst du im Unterricht treffen. Auf Englisch heißt der PAP **flowchart**, auf Deutsch auch Flussdiagramm. Das englische Wort begegnet dir oft, zum Beispiel in Programmen und im Internet. - -Hier siehst du noch einmal unser Struktogramm zum Teetrinken aus „Alle drei zusammen“. Als Nächstes schauen wir uns den PAP an, und zwar mit demselben Beispiel. - -::: diagramm l1-grundbausteine.visustruct -Das Tee-Beispiel als Struktogramm: erst die Tasse, dann die Verzweigung für den Zucker, dann die Schleife. -::: - -### Derselbe Algorithmus als PAP - -::: grafik l01-pap.svg -Das Tee-Beispiel als Programmablaufplan. Der Pfeil von „1 Minute warten“ zurück nach oben bildet die Schleife. -::: - -### Die Elemente - -Ein PAP besteht aus wenigen Symbolen, die mit **Pfeilen** verbunden sind. Er ist nach DIN 66001 genormt. - -- **Oval:** Start oder Ende. Jeder PAP hat genau einen Start und ein Ende. -- **Rechteck:** eine Anweisung, zum Beispiel *Tasse auf den Tisch stellen*. -- **Raute:** eine Verzweigung. In der Raute steht eine Frage, heraus führen zwei Pfeile: **ja** und **nein**. -- **Parallelogramm:** eine Ein- oder Ausgabe. Im Tee-Beispiel kommt sie nicht vor. -- **Pfeil:** zeigt, welcher Schritt als Nächstes kommt. - -Eine Schleife hat im PAP kein eigenes Symbol. Du erkennst sie daran, dass ein Pfeil **zurück nach oben** führt. - -### Die Vorteile - -- **Sehr gut lesbar**, auch für Leute, die noch nie einen PAP gesehen haben. Man folgt einfach den Pfeilen mit dem Finger. -- Flussdiagramme benutzt man nicht nur beim Programmieren, sondern überall, wo ein Ablauf erklärt wird: in Bedienungsanleitungen, bei der Fehlersuche („Leuchtet die Lampe? Nein: Steckt der Stecker?“) oder in Firmen für Arbeitsabläufe. - -## Übung: Kuchen backen als PAP - -Jetzt baust du selbst einen PAP. Ludwig backt einen Kuchen und geht so vor: - -Er gibt die Zutaten in die Schüssel und rührt den Teig. Ist der Teig noch nicht glatt, rührt er weiter. Ist er glatt, füllt er den Teig in die Form und backt den Kuchen 30 Minuten. Dann prüft er mit einem Holzstäbchen: Klebt noch Teig daran, backt er 5 Minuten weiter und prüft noch einmal. Ist das Stäbchen sauber, nimmt er den Kuchen heraus und ruft: „Der Kuchen ist fertig!“ - -::: pap -titel: Übung: Kuchen backen als PAP -auftrag: Die Plätze im Plan sind leer. Lege jedes Element an seinen Platz. Die Form des Platzes hilft dir. -start: Start -anweisung: Zutaten in die Schüssel geben -anweisung: Teig rühren -frage: Teig glatt? | nein -> Teig rühren -anweisung: Teig in die Form füllen -anweisung: Kuchen 30 Minuten backen -frage: Stäbchen sauber? | nein: 5 Minuten weiterbacken -anweisung: Kuchen herausnehmen -ausgabe: „Der Kuchen ist fertig!“ -ende: Ende -erklärung: Zwei Schleifen, zwei Pfeile zurück nach oben: Beim Rühren führt der Pfeil zurück zu „Teig rühren“, beim Backen von „5 Minuten weiterbacken“ zurück zur Frage. Die Ausgabe steht im Parallelogramm. -legende: ja -::: - -## Nachteile des PAP: Sprünge - -Ein Pfeil im PAP darf von jedem Symbol zu jedem anderen führen. Das klingt praktisch, ist aber gefährlich. - -Früher hat man Programme genau so geschrieben. Jede Zeile hatte eine **Nummer**, und der Befehl **GOTO**, auf Deutsch „gehe zu“, sprang zu einer Zeilennummer. Jedes GEHE ZU ist ein Pfeil aus dem PAP. Unser Tee-Beispiel sähe so aus: - -``` -10 Tasse auf den Tisch stellen -20 WENN kein Zucker gewünscht, GEHE ZU 40 -30 Zucker hineingeben -40 WENN Tee nicht zu heiß, GEHE ZU 70 -50 1 Minute warten -60 GEHE ZU 40 -70 Tee trinken -``` - -### Eine Zeile mehr, und schon springt es falsch - -Jetzt verbesserst du den Algorithmus: Nach dem Zucker soll der Teebeutel heraus. Du fügst die neue Zeile 40 ein, und alle Zeilen darunter rutschen eine Nummer weiter. Die Sprünge zeigen aber noch auf die alten Nummern: - -``` -10 Tasse auf den Tisch stellen -20 WENN kein Zucker gewünscht, GEHE ZU 40 -30 Zucker hineingeben -40 Teebeutel herausnehmen -50 WENN Tee nicht zu heiß, GEHE ZU 70 -60 1 Minute warten -70 GEHE ZU 40 -80 Tee trinken -``` - -Spiel es durch: Zeile 70 schickt dich nicht mehr zur Prüfung in Zeile 50, sondern zum Teebeutel. Und wenn der Tee kühl genug ist, springt Zeile 50 zu Zeile 70 und nicht mehr zu *Tee trinken*. Du nimmst also immer wieder den Teebeutel heraus und trinkst nie. Bei jeder Änderung musst du jedes GEHE ZU prüfen. In einem großen Programm mit Hunderten Sprüngen geht dabei leicht etwas schief. - -### Kreuz und quer: Spaghetticode - -Mit Pfeilen kann man auch mitten aus einer Schleife herausspringen oder von außen mitten in eine Schleife hinein. Solche **Aussprünge** und Einsprünge machen den Plan schnell unübersichtlich. Bei vielen Sprüngen kreuzen sich die Pfeile, bis der Plan aussieht wie ein Teller Spaghetti. Deshalb nennt man das **Spaghetticode**. Den Ablauf kann man kaum noch verfolgen, und Fehler verstecken sich gut. - -Im Struktogramm gibt es keine Pfeile. Fügst du einen Kasten ein, rutscht alles darunter einfach mit, und kein Sprung kann auf die falsche Stelle zeigen. Für das vorzeitige Verlassen einer Schleife gibt es dort einen eigenen, ordentlichen Kasten, den Aussprung. Den lernst du in Lektion 18 kennen. - -::: angeberwissen -1968 schrieb der Informatiker Edsger Dijkstra einen berühmten Brief: „Go To Statement Considered Harmful“, auf Deutsch „GOTO gilt als schädlich“. Seitdem baut man Programme nur noch aus Sequenz, Verzweigung und Wiederholung. In Java ist `goto` bis heute ein reserviertes Wort, benutzen darf man es aber nicht. Mäh, Spaghetti esse ich lieber, als sie zu programmieren. -::: - -## Pseudocode und Vergleich - -**Pseudocode** ist Text, der wie ein Programm aussieht, aber in normaler Sprache geschrieben ist. Feste Wörter wie WENN und SOLANGE zeigen die Bausteine, die **Einrückung** zeigt, was dazugehört. Sprünge gibt es auch hier nicht. Das ist unser Tee-Beispiel: - -``` -Tasse auf den Tisch stellen -WENN Zucker gewünscht DANN - Zucker hineingeben -ENDE WENN -SOLANGE Tee noch zu heiß - 1 Minute warten -ENDE SOLANGE -Tee trinken -``` - -Pseudocode hat **keine feste Schreibweise**. Manche schreiben FALLS statt WENN, andere setzen einen Pfeil für die Zuweisung (`zahl ← 5`) oder schreiben ganz ohne ENDE-Zeilen. Das ist alles erlaubt. Wichtig ist nur, dass jeder Mensch ihn ohne Erklärung versteht. Pseudocode ist also keine weitere Programmiersprache, die man lernen muss. - -::: angeberwissen -Kommt dir Pseudocode bekannt vor? Die Programmiersprache Python sieht ihm sehr ähnlich, und das ist Absicht: Ihr Erfinder Guido van Rossum wollte, dass sich Programme fast wie normaler Text lesen. Auch Python zeigt mit der Einrückung, was zusammengehört. Aber Vorsicht: Python ist eine echte Programmiersprache mit festen Regeln. Ein Leerzeichen zu viel, und der Computer meckert. Pseudocode ist da großzügiger, so wie ich beim Frühstück. -::: - -### Im Vergleich - -- **Struktogramm:** Kästen ineinander, die Schleife ist ein gekipptes L. Die Struktur siehst du auf einen Blick, wilde Sprünge sind unmöglich. -- **PAP:** Symbole mit Pfeilen, die Schleife ist ein Pfeil zurück nach oben. Sehr anschaulich, aber bei großen Plänen schnell unübersichtlich, und Sprünge kreuz und quer sind möglich. -- **Pseudocode:** Text mit Einrückung, die Schleife steht zwischen SOLANGE und ENDE SOLANGE. Schnell geschrieben und schon nah am Programmcode. - -> Alle drei beschreiben denselben Algorithmus. Wenn du eine Form lesen kannst, lernst du die anderen schnell. - -::: angeberwissen -Nassi und Shneiderman wollten den Pfeilen an den Kragen! Ihr Artikel von 1973 hieß „Flowchart Techniques for Structured Programming“. Flowchart ist das englische Wort für Ablaufplan. Mit Pfeilen kann man nämlich kreuz und quer springen, bis der Plan aussieht wie ein Teller Spaghetti. Im Struktogramm geht das gar nicht. Mäh, so mag ich das: ordentlich, wie mein Stall. -::: - ## Erst die Struktur, dann der Code Beim Programmieren passieren zwei Dinge gleichzeitig: Du musst dir den Ablauf überlegen und die Schreibweise der Programmiersprache beachten. Mit einem Struktogramm trennst du beides. @@ -321,10 +186,6 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann ein Struktogramm von oben nach unten lesen. → So liest du ein Struktogramm - Ich kann die drei Grundbausteine Sequenz, Verzweigung und Wiederholung nennen. → Baustein 1: Die Sequenz - Ich kann jeden Baustein im Struktogramm an seiner Form erkennen. → Alle drei zusammen -- Ich kann die Elemente eines PAP benennen und einen einfachen PAP lesen. → Andere Darstellungen: Der PAP -- Ich kann einen einfachen Algorithmus selbst als PAP zusammenbauen. → Übung: Kuchen backen als PAP -- Ich kann erklären, warum Sprünge mit GOTO zu Fehlern und Spaghetticode führen. → Nachteile des PAP: Sprünge -- Ich kann einen einfachen Algorithmus als Pseudocode lesen. → Pseudocode und Vergleich ::: ## Wissenstest @@ -365,40 +226,4 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Ein bestimmtes Programm in Java - [ ] Ein Bild, das ein Programm erklärt > Ein Algorithmus ist unabhängig von der Programmiersprache. Ein Struktogramm ist eine Möglichkeit, ihn aufzuschreiben. - -? Woran erkennst du in einem Programmablaufplan (PAP) eine Schleife? -→ Andere Darstellungen: Der PAP -- [ ] An einem gekippten L -- [x] An einem Pfeil, der zurück nach oben führt -- [ ] Am Wort SOLANGE -> Das gekippte L gehört zum Struktogramm, SOLANGE zum Pseudocode. - -? Ordne jedem Symbol im PAP seine Bedeutung zu. -→ Andere Darstellungen: Der PAP -= Oval -> Start oder Ende -= Rechteck -> Anweisung -= Raute -> Verzweigung -= Parallelogramm -> Ein- oder Ausgabe -> Die Raute hat zwei Ausgänge: ja und nein. - -? Wie heißt der Programmablaufplan auf Englisch? -→ Andere Darstellungen: Der PAP -- [x] Flowchart -- [ ] Structure chart -- [ ] Pseudocode -> Auf Deutsch sagt man auch Flussdiagramm. Structure chart ist das Struktogramm. - -? Du fügst in ein Programm mit GOTO eine neue Zeile ein. Was kann passieren? -→ Nachteile des PAP: Sprünge -- [x] Die Sprünge zeigen auf die falschen Zeilen, weil sich die Nummern verschoben haben -- [ ] Nichts, die Sprünge passen sich von selbst an -- [ ] Das Programm wird automatisch schneller -> Jedes GEHE ZU zeigt auf eine feste Zeilennummer. Rutschen die Zeilen weiter, springt das Programm an die falsche Stelle. - -? Was zeigt im Pseudocode, welche Zeilen zu einer Schleife gehören? -→ Pseudocode und Vergleich -- [ ] Die Farbe -- [x] Die Einrückung und das ENDE SOLANGE -- [ ] Ein Pfeil -> Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: diff --git a/web/lessons/de/01-weitere-darstellungen.md b/web/lessons/de/01-weitere-darstellungen.md new file mode 100644 index 00000000..119ff4cd --- /dev/null +++ b/web/lessons/de/01-weitere-darstellungen.md @@ -0,0 +1,244 @@ +--- +titel: PAP und Pseudocode +bereich: Erste Schritte +kurz: Algorithmen als Programmablaufplan und als Pseudocode darstellen und mit dem Struktogramm vergleichen. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- einen PAP (englisch *flowchart*) lesen und selbst zusammenbauen +- erklären, warum Sprünge im PAP zu Fehlern führen +- einen einfachen Algorithmus als Pseudocode lesen +::: + +## Andere Darstellungen: Der PAP + +Es gibt noch zwei weitere Arten, Algorithmen darzustellen: den **Programmablaufplan**, kurz **PAP**, und den **Pseudocode**. Beide wirst du im Unterricht treffen. Auf Englisch heißt der PAP **flowchart**, auf Deutsch auch Flussdiagramm. Das englische Wort begegnet dir oft, zum Beispiel in Programmen und im Internet. + +Hier siehst du noch einmal unser Struktogramm zum Teetrinken aus der letzten Lektion. Als Nächstes schauen wir uns den PAP an, und zwar mit demselben Beispiel. + +::: diagramm l1-grundbausteine.visustruct +Das Tee-Beispiel als Struktogramm: erst die Tasse, dann die Verzweigung für den Zucker, dann die Schleife. +::: + +### Derselbe Algorithmus als PAP + +::: grafik l01-pap.svg +Das Tee-Beispiel als Programmablaufplan. Der Pfeil von „1 Minute warten“ zurück nach oben bildet die Schleife. +::: + +### Die Elemente + +Ein PAP besteht aus wenigen Symbolen, die mit **Pfeilen** verbunden sind. Er ist nach DIN 66001 genormt. + +- **Oval:** Start oder Ende. Jeder PAP hat genau einen Start und ein Ende. +- **Rechteck:** eine Anweisung, zum Beispiel *Tasse auf den Tisch stellen*. +- **Raute:** eine Verzweigung. In der Raute steht eine Frage, heraus führen zwei Pfeile: **ja** und **nein**. +- **Parallelogramm:** eine Ein- oder Ausgabe. Im Tee-Beispiel kommt sie nicht vor. +- **Pfeil:** zeigt, welcher Schritt als Nächstes kommt. + +Eine Schleife hat im PAP kein eigenes Symbol. Du erkennst sie daran, dass ein Pfeil **zurück nach oben** führt. + +### Die Vorteile + +- **Sehr gut lesbar**, auch für Leute, die noch nie einen PAP gesehen haben. Man folgt einfach den Pfeilen mit dem Finger. +- Flussdiagramme benutzt man nicht nur beim Programmieren, sondern überall, wo ein Ablauf erklärt wird: in Bedienungsanleitungen, bei der Fehlersuche („Leuchtet die Lampe? Nein: Steckt der Stecker?“) oder in Firmen für Arbeitsabläufe. + +## Übung: Kuchen backen als PAP + +Jetzt baust du selbst einen PAP. Ludwig backt einen Kuchen und geht so vor: + +Er gibt die Zutaten in die Schüssel und rührt den Teig. Ist der Teig noch nicht glatt, rührt er weiter. Ist er glatt, füllt er den Teig in die Form und backt den Kuchen 30 Minuten. Dann prüft er mit einem Holzstäbchen: Klebt noch Teig daran, backt er 5 Minuten weiter und prüft noch einmal. Ist das Stäbchen sauber, nimmt er den Kuchen heraus und ruft: „Der Kuchen ist fertig!“ + +::: pap +titel: Übung: Kuchen backen als PAP +auftrag: Die Plätze im Plan sind leer. Lege jedes Element an seinen Platz. Die Form des Platzes hilft dir. +start: Start +anweisung: Zutaten in die Schüssel geben +anweisung: Teig rühren +frage: Teig glatt? | nein -> Teig rühren +anweisung: Teig in die Form füllen +anweisung: Kuchen 30 Minuten backen +frage: Stäbchen sauber? | nein: 5 Minuten weiterbacken +anweisung: Kuchen herausnehmen +ausgabe: „Der Kuchen ist fertig!“ +ende: Ende +erklärung: Zwei Schleifen, zwei Pfeile zurück nach oben: Beim Rühren führt der Pfeil zurück zu „Teig rühren“, beim Backen von „5 Minuten weiterbacken“ zurück zur Frage. Die Ausgabe steht im Parallelogramm. +legende: ja +::: + +## Nachteile des PAP: Sprünge + +Ein Pfeil im PAP darf von jedem Symbol zu jedem anderen führen. Das klingt praktisch, ist aber gefährlich. + +Früher hat man Programme genau so geschrieben. Jede Zeile hatte eine **Nummer**, und der Befehl **GOTO**, auf Deutsch „gehe zu“, sprang zu einer Zeilennummer. Jedes GEHE ZU ist ein Pfeil aus dem PAP. Unser Tee-Beispiel sähe so aus: + +``` +10 Tasse auf den Tisch stellen +20 WENN kein Zucker gewünscht, GEHE ZU 40 +30 Zucker hineingeben +40 WENN Tee nicht zu heiß, GEHE ZU 70 +50 1 Minute warten +60 GEHE ZU 40 +70 Tee trinken +``` + +### Eine Zeile mehr, und schon springt es falsch + +Jetzt verbesserst du den Algorithmus: Nach dem Zucker soll der Teebeutel heraus. Du fügst die neue Zeile 40 ein, und alle Zeilen darunter rutschen eine Nummer weiter. Die Sprünge zeigen aber noch auf die alten Nummern: + +``` +10 Tasse auf den Tisch stellen +20 WENN kein Zucker gewünscht, GEHE ZU 40 +30 Zucker hineingeben +40 Teebeutel herausnehmen +50 WENN Tee nicht zu heiß, GEHE ZU 70 +60 1 Minute warten +70 GEHE ZU 40 +80 Tee trinken +``` + +Spiel es durch: Zeile 70 schickt dich nicht mehr zur Prüfung in Zeile 50, sondern zum Teebeutel. Und wenn der Tee kühl genug ist, springt Zeile 50 zu Zeile 70 und nicht mehr zu *Tee trinken*. Du nimmst also immer wieder den Teebeutel heraus und trinkst nie. Bei jeder Änderung musst du jedes GEHE ZU prüfen. In einem großen Programm mit Hunderten Sprüngen geht dabei leicht etwas schief. + +### Kreuz und quer: Spaghetticode + +Mit Pfeilen kann man auch mitten aus einer Schleife herausspringen oder von außen mitten in eine Schleife hinein. Solche **Aussprünge** und Einsprünge machen den Plan schnell unübersichtlich. Bei vielen Sprüngen kreuzen sich die Pfeile, bis der Plan aussieht wie ein Teller Spaghetti. Deshalb nennt man das **Spaghetticode**. Den Ablauf kann man kaum noch verfolgen, und Fehler verstecken sich gut. + +Im Struktogramm gibt es keine Pfeile. Fügst du einen Kasten ein, rutscht alles darunter einfach mit, und kein Sprung kann auf die falsche Stelle zeigen. Für das vorzeitige Verlassen einer Schleife gibt es dort einen eigenen, ordentlichen Kasten, den Aussprung. Den lernst du in Lektion 18 kennen. + +::: angeberwissen +1968 schrieb der Informatiker Edsger Dijkstra einen berühmten Brief: „Go To Statement Considered Harmful“, auf Deutsch „GOTO gilt als schädlich“. Seitdem baut man Programme nur noch aus Sequenz, Verzweigung und Wiederholung. In Java ist `goto` bis heute ein reserviertes Wort, benutzen darf man es aber nicht. Mäh, Spaghetti esse ich lieber, als sie zu programmieren. +::: + +## Pseudocode und Vergleich + +**Pseudocode** ist Text, der wie ein Programm aussieht, aber in normaler Sprache geschrieben ist. Feste Wörter wie WENN und SOLANGE zeigen die Bausteine, die **Einrückung** zeigt, was dazugehört. Sprünge gibt es auch hier nicht. Das ist unser Tee-Beispiel: + +``` +Tasse auf den Tisch stellen +WENN Zucker gewünscht DANN + Zucker hineingeben +ENDE WENN +SOLANGE Tee noch zu heiß + 1 Minute warten +ENDE SOLANGE +Tee trinken +``` + +Pseudocode hat **keine feste Schreibweise**. Manche schreiben FALLS statt WENN, andere setzen einen Pfeil für die Zuweisung (`zahl ← 5`) oder schreiben ganz ohne ENDE-Zeilen. Das ist alles erlaubt. Wichtig ist nur, dass jeder Mensch ihn ohne Erklärung versteht. Pseudocode ist also keine weitere Programmiersprache, die man lernen muss. + +::: angeberwissen +Kommt dir Pseudocode bekannt vor? Die Programmiersprache Python sieht ihm sehr ähnlich, und das ist Absicht: Ihr Erfinder Guido van Rossum wollte, dass sich Programme fast wie normaler Text lesen. Auch Python zeigt mit der Einrückung, was zusammengehört. Aber Vorsicht: Python ist eine echte Programmiersprache mit festen Regeln. Ein Leerzeichen zu viel, und der Computer meckert. Pseudocode ist da großzügiger, so wie ich beim Frühstück. +::: + +### Im Vergleich + +- **Struktogramm:** Kästen ineinander, die Schleife ist ein gekipptes L. Die Struktur siehst du auf einen Blick, wilde Sprünge sind unmöglich. +- **PAP:** Symbole mit Pfeilen, die Schleife ist ein Pfeil zurück nach oben. Sehr anschaulich, aber bei großen Plänen schnell unübersichtlich, und Sprünge kreuz und quer sind möglich. +- **Pseudocode:** Text mit Einrückung, die Schleife steht zwischen SOLANGE und ENDE SOLANGE. Schnell geschrieben und schon nah am Programmcode. + +> Alle drei beschreiben denselben Algorithmus. Wenn du eine Form lesen kannst, lernst du die anderen schnell. + +::: angeberwissen +Nassi und Shneiderman wollten den Pfeilen an den Kragen! Ihr Artikel von 1973 hieß „Flowchart Techniques for Structured Programming“. Flowchart ist das englische Wort für Ablaufplan. Mit Pfeilen kann man nämlich kreuz und quer springen, bis der Plan aussieht wie ein Teller Spaghetti. Im Struktogramm geht das gar nicht. Mäh, so mag ich das: ordentlich, wie mein Stall. +::: + +## Spiel: Welche Darstellung? + +::: spiel frage +titel: Spiel: Welche Darstellung? +intro: Ludwig beschreibt eine Darstellung, ohne ihren Namen zu verraten. Ist es das Struktogramm, der PAP oder der Pseudocode? Acht Runden. +antworten: Struktogramm | PAP | Pseudocode + +runde: +frage: „Bei mir zeigt ein Pfeil zurück nach oben, wenn etwas wiederholt wird.“ +richtig: PAP +> Im PAP hat die Schleife kein eigenes Symbol. Ein Pfeil führt zurück nach oben. + +runde: +frage: „Meine Schleife sieht aus wie ein gekipptes L.“ +richtig: Struktogramm +> Oben und links umschließt der Kasten die Schritte, die wiederholt werden. + +runde: +frage: „Ich bestehe aus Wörtern wie WENN und SOLANGE, und die Einrückung zeigt, was dazugehört.“ +richtig: Pseudocode +> Pseudocode ist Text in normaler Sprache, der wie ein Programm aufgebaut ist. + +runde: +frage: „Meine Verzweigung ist eine Raute mit den Ausgängen ja und nein.“ +richtig: PAP +> Im Struktogramm steht die Bedingung dagegen in einem Dreieck. + +runde: +frage: „Bei mir können sich die Pfeile kreuz und quer verheddern wie Spaghetti.“ +richtig: PAP +> Weil Pfeile überallhin führen dürfen, ist im PAP Spaghetticode möglich. + +runde: +frage: „Ich habe keine feste Schreibweise. FALLS statt WENN ist bei mir auch erlaubt.“ +richtig: Pseudocode +> Wichtig ist nur, dass jeder Mensch ihn ohne Erklärung versteht. + +runde: +frage: „Die Bedingung steht oben in einem Dreieck, darunter teile ich mich in zwei Spalten.“ +richtig: Struktogramm +> So sieht die Verzweigung im Struktogramm aus: links true, rechts false. + +runde: +frage: „Fügst du einen Kasten ein, rutscht alles darunter einfach mit. Kein Sprung kann danebengehen.“ +richtig: Struktogramm +> Im Struktogramm gibt es keine Pfeile und keine Sprünge, deshalb kann nichts auf die falsche Stelle zeigen. +::: + +## Checkliste + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann die Elemente eines PAP benennen und einen einfachen PAP lesen. → Andere Darstellungen: Der PAP +- Ich kann einen einfachen Algorithmus selbst als PAP zusammenbauen. → Übung: Kuchen backen als PAP +- Ich kann erklären, warum Sprünge mit GOTO zu Fehlern und Spaghetticode führen. → Nachteile des PAP: Sprünge +- Ich kann einen einfachen Algorithmus als Pseudocode lesen. → Pseudocode und Vergleich +::: + +## Wissenstest + +::: quiz +? Woran erkennst du in einem Programmablaufplan (PAP) eine Schleife? +→ Andere Darstellungen: Der PAP +- [ ] An einem gekippten L +- [x] An einem Pfeil, der zurück nach oben führt +- [ ] Am Wort SOLANGE +> Das gekippte L gehört zum Struktogramm, SOLANGE zum Pseudocode. + +? Ordne jedem Symbol im PAP seine Bedeutung zu. +→ Andere Darstellungen: Der PAP += Oval -> Start oder Ende += Rechteck -> Anweisung += Raute -> Verzweigung += Parallelogramm -> Ein- oder Ausgabe +> Die Raute hat zwei Ausgänge: ja und nein. + +? Wie heißt der Programmablaufplan auf Englisch? +→ Andere Darstellungen: Der PAP +- [x] Flowchart +- [ ] Structure chart +- [ ] Pseudocode +> Auf Deutsch sagt man auch Flussdiagramm. Structure chart ist das Struktogramm. + +? Du fügst in ein Programm mit GOTO eine neue Zeile ein. Was kann passieren? +→ Nachteile des PAP: Sprünge +- [x] Die Sprünge zeigen auf die falschen Zeilen, weil sich die Nummern verschoben haben +- [ ] Nichts, die Sprünge passen sich von selbst an +- [ ] Das Programm wird automatisch schneller +> Jedes GEHE ZU zeigt auf eine feste Zeilennummer. Rutschen die Zeilen weiter, springt das Programm an die falsche Stelle. + +? Was zeigt im Pseudocode, welche Zeilen zu einer Schleife gehören? +→ Pseudocode und Vergleich +- [ ] Die Farbe +- [x] Die Einrückung und das ENDE SOLANGE +- [ ] Ein Pfeil +> Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. +::: diff --git a/web/lessons/en/01-was-ist-ein-struktogramm.md b/web/lessons/en/01-was-ist-ein-struktogramm.md index e3a10688..25a7198f 100644 --- a/web/lessons/en/01-was-ist-ein-struktogramm.md +++ b/web/lessons/en/01-was-ist-ein-struktogramm.md @@ -10,9 +10,6 @@ kurz: Show and read algorithms as a series of clear steps. - explain what an algorithm is - read a structure chart - recognise the three basic building blocks: sequence, branch and loop -- read a flowchart and build one myself -- explain why jumps in a flowchart lead to mistakes -- read a simple algorithm as pseudocode ::: ## An algorithm is an exact set of instructions @@ -45,7 +42,7 @@ This way of drawing was invented by **Isaac Nassi and Ben Shneiderman** (1973). Left: Isaac “Ike” Nassi (photo: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), cropped), right: Ben Shneiderman (photo: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0). ::: -> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place. Programs that jump all over the place are called **spaghetti code**, because their flow gets tangled like noodles on a plate. More on this in step 10. +> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place. Programs that jump all over the place are called **spaghetti code**, because their flow gets tangled like noodles on a plate. More on this in the next lesson. ::: angeberwissen Baaah, listen up! In 1972 Nassi and Shneiderman were still PhD students at Stony Brook University near New York. Shneiderman was about 25 and Nassi about 23. So basically two students who wrote computer science history on the side. @@ -123,138 +120,6 @@ The boxes can also be **nested** inside each other: a loop or a path can contain Comfort for anyone who has messed up a test: the famous journal *Communications of the ACM* rejected the structure chart article. According to Nassi, the reviewer even said they should collect every copy and burn it. Ouch! It then appeared in 1973 in a smaller journal and today it is quoted thousands of times. Ha! ::: -## Other ways to draw it: the flowchart - -There are two more ways to show an algorithm: the **flowchart** and **pseudocode**. You will meet both in class. - -Here you see our structure chart for drinking tea from “All three together” once more. Next we look at the flowchart, using the same example. - -::: diagramm l1-grundbausteine.visustruct -The tea example as a structure chart: first the cup, then the branch for the sugar, then the loop. -::: - -### The same algorithm as a flowchart - -::: grafik l01-pap.svg -The tea example as a flowchart. The arrow from “Wait 1 minute” back up forms the loop. -::: - -### The symbols - -A flowchart is made of a few symbols joined by **arrows**. It is standardised as DIN 66001 (ISO 5807). - -- **Oval:** start or end. Every flowchart has exactly one start and one end. -- **Rectangle:** a statement, for example *Put a cup on the table*. -- **Diamond:** a decision. The diamond holds a question, and two arrows lead out of it: **yes** and **no**. -- **Parallelogram:** an input or output. The tea example does not have one. -- **Arrow:** shows which step comes next. - -A loop has no symbol of its own in a flowchart. You recognise it by an arrow that leads **back up**. - -### The advantages - -- **Very easy to read**, even for people who have never seen a flowchart. You simply follow the arrows with your finger. -- Flowcharts are not only used in programming but wherever a process is explained: in user manuals, for troubleshooting (“Is the lamp on? No: is it plugged in?”) or in companies for work processes. - -## Exercise: Baking a cake as a flowchart - -Now you build a flowchart yourself. Ludwig bakes a cake like this: - -He puts the ingredients in the bowl and stirs the batter. If the batter is not smooth yet, he keeps stirring. Once it is smooth, he pours the batter into the tin and bakes the cake for 30 minutes. Then he checks with a wooden skewer: if batter still sticks to it, he bakes for 5 more minutes and checks again. Once the skewer comes out clean, he takes the cake out and calls: “The cake is ready!” - -::: pap -titel: Exercise: Baking a cake as a flowchart -auftrag: The places in the chart are empty. Put each element in its place. The shape of the place helps you. -start: Start -anweisung: Put ingredients in the bowl -anweisung: Stir the batter -frage: Batter smooth? | nein -> Stir the batter -anweisung: Pour batter into the tin -anweisung: Bake for 30 minutes -frage: Skewer clean? | nein: Bake 5 more minutes -anweisung: Take the cake out -ausgabe: “The cake is ready!” -ende: End -erklärung: Two loops, two arrows back up: when stirring, the arrow leads back to “Stir the batter”; when baking, it leads from “Bake 5 more minutes” back to the question. The output sits in the parallelogram. -legende: ja -::: - -## Drawbacks of the flowchart: jumps - -An arrow in a flowchart may lead from any symbol to any other. That sounds handy, but it is dangerous. - -In the old days, programs were written exactly like that. Every line had a **number**, and the command **GOTO** jumped to a line number. Every GOTO is an arrow from the flowchart. Our tea example would look like this: - -``` -10 Put a cup on the table -20 IF no sugar wanted, GOTO 40 -30 Add sugar -40 IF tea not too hot, GOTO 70 -50 Wait 1 minute -60 GOTO 40 -70 Drink the tea -``` - -### One more line, and the jumps go wrong - -Now you improve the algorithm: after the sugar, the tea bag should come out. You insert the new line 40, and all lines below move down one number. But the jumps still point to the old numbers: - -``` -10 Put a cup on the table -20 IF no sugar wanted, GOTO 40 -30 Add sugar -40 Take out the tea bag -50 IF tea not too hot, GOTO 70 -60 Wait 1 minute -70 GOTO 40 -80 Drink the tea -``` - -Play it through: line 70 no longer sends you to the check in line 50 but to the tea bag. And when the tea is cool enough, line 50 jumps to line 70 instead of *Drink the tea*. So you keep taking out the tea bag and never drink. With every change you have to check every GOTO. In a big program with hundreds of jumps, something easily goes wrong. - -### All over the place: spaghetti code - -With arrows you can also jump out of the middle of a loop, or from outside into the middle of a loop. Such jumps quickly make the chart confusing. With many jumps the arrows cross until the chart looks like a plate of spaghetti. That is why it is called **spaghetti code**. You can hardly follow the flow any more, and mistakes hide well. - -A structure chart has no arrows. If you insert a box, everything below simply moves down with it, and no jump can point to the wrong place. For leaving a loop early there is a separate, tidy box, the break. You will meet it in lesson 18. - -::: angeberwissen -In 1968 the computer scientist Edsger Dijkstra wrote a famous letter: “Go To Statement Considered Harmful”. Since then, programs are built only from sequence, branch and loop. In Java, `goto` is still a reserved word today, but you are not allowed to use it. Baah, I would rather eat spaghetti than program it. -::: - -## Pseudocode and comparison - -**Pseudocode** is text that looks like a program but is written in plain language. Fixed words such as IF and WHILE show the building blocks, and the **indentation** shows what belongs to them. There are no jumps here either. This is our tea example: - -``` -Put a cup on the table -IF sugar wanted THEN - Add sugar -END IF -WHILE tea still too hot - Wait 1 minute -END WHILE -Drink the tea -``` - -Pseudocode has **no fixed notation**. Some people write WHEN instead of IF, others use an arrow for assignment (`number ← 5`) or leave out the END lines. All of that is fine. What matters is that anyone can understand it without an explanation. So pseudocode is not another programming language you have to learn. - -::: angeberwissen -Does pseudocode look familiar? The programming language Python looks very similar, and that is on purpose: its inventor Guido van Rossum wanted programs to read almost like plain text. Python also uses indentation to show what belongs together. But careful: Python is a real programming language with strict rules. One space too many and the computer complains. Pseudocode is more relaxed, just like me at breakfast. -::: - -### Compared - -- **Structure chart:** boxes inside boxes, the loop is an upside-down L. You see the structure at a glance, and wild jumps are impossible. -- **Flowchart:** symbols with arrows, the loop is an arrow back up. Very easy to picture, but big charts quickly get confusing, and jumps all over the place are possible. -- **Pseudocode:** text with indentation, the loop sits between WHILE and END WHILE. Quick to write and already close to program code. - -> All three describe the same algorithm. Once you can read one form, you learn the others quickly. - -::: angeberwissen -Nassi and Shneiderman were out to get the arrows! Their 1973 article was called “Flowchart Techniques for Structured Programming”. With arrows you can jump all over the place until the chart looks like a plate of spaghetti. In a structure chart that is simply impossible. Baah, that is how I like it: tidy, like my stable. -::: - ## Structure first, then code When you program, two things happen at once: you have to think about the steps and pay attention to how the programming language is written. A structure chart lets you keep the two apart. @@ -321,10 +186,6 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can read a structure chart from top to bottom. → How to read a structure chart - I can name the three basic building blocks: sequence, branch and loop. → Building block 1: the sequence - I can recognise every building block in a structure chart by its shape. → All three together -- I can name the symbols of a flowchart and read a simple flowchart. → Other ways to draw it: the flowchart -- I can build a simple algorithm as a flowchart myself. → Exercise: Baking a cake as a flowchart -- I can explain why jumps with GOTO lead to mistakes and spaghetti code. → Drawbacks of the flowchart: jumps -- I can read a simple algorithm as pseudocode. → Pseudocode and comparison ::: ## Quiz @@ -365,33 +226,4 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] A particular program in Java - [ ] A picture that explains a program > An algorithm does not depend on a programming language. A structure chart is one way to write it down. - -? How do you recognise a loop in a flowchart? -→ Other ways to draw it: the flowchart -- [ ] By an upside-down L -- [x] By an arrow that leads back up -- [ ] By the word WHILE -> The upside-down L belongs to the structure chart, and WHILE to pseudocode. - -? Match each flowchart symbol to its meaning. -→ Other ways to draw it: the flowchart -= Oval -> Start or end -= Rectangle -> Statement -= Diamond -> Decision -= Parallelogram -> Input or output -> The diamond has two exits: yes and no. - -? You insert a new line into a program with GOTO. What can happen? -→ Drawbacks of the flowchart: jumps -- [x] The jumps point to the wrong lines because the numbers have moved -- [ ] Nothing, the jumps adjust by themselves -- [ ] The program automatically gets faster -> Every GOTO points to a fixed line number. If the lines move down, the program jumps to the wrong place. - -? In pseudocode, what shows which lines belong to a loop? -→ Pseudocode and comparison -- [ ] The colour -- [x] The indentation and the END WHILE -- [ ] An arrow -> Everything between WHILE and END WHILE is indented and is repeated. ::: diff --git a/web/lessons/en/01-weitere-darstellungen.md b/web/lessons/en/01-weitere-darstellungen.md new file mode 100644 index 00000000..0e6fa312 --- /dev/null +++ b/web/lessons/en/01-weitere-darstellungen.md @@ -0,0 +1,237 @@ +--- +titel: Flowcharts and pseudocode +bereich: First steps +kurz: Show algorithms as a flowchart and as pseudocode, and compare them with the structure chart. +--- + +## Skills I will gain now + +::: kompetenzen +- read a flowchart and build one myself +- explain why jumps in a flowchart lead to mistakes +- read a simple algorithm as pseudocode +::: + +## Other ways to draw it: the flowchart + +There are two more ways to show an algorithm: the **flowchart** and **pseudocode**. You will meet both in class. + +Here you see our structure chart for drinking tea from the last lesson once more. Next we look at the flowchart, using the same example. + +::: diagramm l1-grundbausteine.visustruct +The tea example as a structure chart: first the cup, then the branch for the sugar, then the loop. +::: + +### The same algorithm as a flowchart + +::: grafik l01-pap.svg +The tea example as a flowchart. The arrow from “Wait 1 minute” back up forms the loop. +::: + +### The symbols + +A flowchart is made of a few symbols joined by **arrows**. It is standardised as DIN 66001 (ISO 5807). + +- **Oval:** start or end. Every flowchart has exactly one start and one end. +- **Rectangle:** a statement, for example *Put a cup on the table*. +- **Diamond:** a decision. The diamond holds a question, and two arrows lead out of it: **yes** and **no**. +- **Parallelogram:** an input or output. The tea example does not have one. +- **Arrow:** shows which step comes next. + +A loop has no symbol of its own in a flowchart. You recognise it by an arrow that leads **back up**. + +### The advantages + +- **Very easy to read**, even for people who have never seen a flowchart. You simply follow the arrows with your finger. +- Flowcharts are not only used in programming but wherever a process is explained: in user manuals, for troubleshooting (“Is the lamp on? No: is it plugged in?”) or in companies for work processes. + +## Exercise: Baking a cake as a flowchart + +Now you build a flowchart yourself. Ludwig bakes a cake like this: + +He puts the ingredients in the bowl and stirs the batter. If the batter is not smooth yet, he keeps stirring. Once it is smooth, he pours the batter into the tin and bakes the cake for 30 minutes. Then he checks with a wooden skewer: if batter still sticks to it, he bakes for 5 more minutes and checks again. Once the skewer comes out clean, he takes the cake out and calls: “The cake is ready!” + +::: pap +titel: Exercise: Baking a cake as a flowchart +auftrag: The places in the chart are empty. Put each element in its place. The shape of the place helps you. +start: Start +anweisung: Put ingredients in the bowl +anweisung: Stir the batter +frage: Batter smooth? | nein -> Stir the batter +anweisung: Pour batter into the tin +anweisung: Bake for 30 minutes +frage: Skewer clean? | nein: Bake 5 more minutes +anweisung: Take the cake out +ausgabe: “The cake is ready!” +ende: End +erklärung: Two loops, two arrows back up: when stirring, the arrow leads back to “Stir the batter”; when baking, it leads from “Bake 5 more minutes” back to the question. The output sits in the parallelogram. +legende: ja +::: + +## Drawbacks of the flowchart: jumps + +An arrow in a flowchart may lead from any symbol to any other. That sounds handy, but it is dangerous. + +In the old days, programs were written exactly like that. Every line had a **number**, and the command **GOTO** jumped to a line number. Every GOTO is an arrow from the flowchart. Our tea example would look like this: + +``` +10 Put a cup on the table +20 IF no sugar wanted, GOTO 40 +30 Add sugar +40 IF tea not too hot, GOTO 70 +50 Wait 1 minute +60 GOTO 40 +70 Drink the tea +``` + +### One more line, and the jumps go wrong + +Now you improve the algorithm: after the sugar, the tea bag should come out. You insert the new line 40, and all lines below move down one number. But the jumps still point to the old numbers: + +``` +10 Put a cup on the table +20 IF no sugar wanted, GOTO 40 +30 Add sugar +40 Take out the tea bag +50 IF tea not too hot, GOTO 70 +60 Wait 1 minute +70 GOTO 40 +80 Drink the tea +``` + +Play it through: line 70 no longer sends you to the check in line 50 but to the tea bag. And when the tea is cool enough, line 50 jumps to line 70 instead of *Drink the tea*. So you keep taking out the tea bag and never drink. With every change you have to check every GOTO. In a big program with hundreds of jumps, something easily goes wrong. + +### All over the place: spaghetti code + +With arrows you can also jump out of the middle of a loop, or from outside into the middle of a loop. Such jumps quickly make the chart confusing. With many jumps the arrows cross until the chart looks like a plate of spaghetti. That is why it is called **spaghetti code**. You can hardly follow the flow any more, and mistakes hide well. + +A structure chart has no arrows. If you insert a box, everything below simply moves down with it, and no jump can point to the wrong place. For leaving a loop early there is a separate, tidy box, the break. You will meet it in lesson 18. + +::: angeberwissen +In 1968 the computer scientist Edsger Dijkstra wrote a famous letter: “Go To Statement Considered Harmful”. Since then, programs are built only from sequence, branch and loop. In Java, `goto` is still a reserved word today, but you are not allowed to use it. Baah, I would rather eat spaghetti than program it. +::: + +## Pseudocode and comparison + +**Pseudocode** is text that looks like a program but is written in plain language. Fixed words such as IF and WHILE show the building blocks, and the **indentation** shows what belongs to them. There are no jumps here either. This is our tea example: + +``` +Put a cup on the table +IF sugar wanted THEN + Add sugar +END IF +WHILE tea still too hot + Wait 1 minute +END WHILE +Drink the tea +``` + +Pseudocode has **no fixed notation**. Some people write WHEN instead of IF, others use an arrow for assignment (`number ← 5`) or leave out the END lines. All of that is fine. What matters is that anyone can understand it without an explanation. So pseudocode is not another programming language you have to learn. + +::: angeberwissen +Does pseudocode look familiar? The programming language Python looks very similar, and that is on purpose: its inventor Guido van Rossum wanted programs to read almost like plain text. Python also uses indentation to show what belongs together. But careful: Python is a real programming language with strict rules. One space too many and the computer complains. Pseudocode is more relaxed, just like me at breakfast. +::: + +### Compared + +- **Structure chart:** boxes inside boxes, the loop is an upside-down L. You see the structure at a glance, and wild jumps are impossible. +- **Flowchart:** symbols with arrows, the loop is an arrow back up. Very easy to picture, but big charts quickly get confusing, and jumps all over the place are possible. +- **Pseudocode:** text with indentation, the loop sits between WHILE and END WHILE. Quick to write and already close to program code. + +> All three describe the same algorithm. Once you can read one form, you learn the others quickly. + +::: angeberwissen +Nassi and Shneiderman were out to get the arrows! Their 1973 article was called “Flowchart Techniques for Structured Programming”. With arrows you can jump all over the place until the chart looks like a plate of spaghetti. In a structure chart that is simply impossible. Baah, that is how I like it: tidy, like my stable. +::: + +## Game: Which way of drawing? + +::: spiel frage +titel: Game: Which way of drawing? +intro: Ludwig describes a way of drawing an algorithm without saying its name. Is it the structure chart, the flowchart or pseudocode? Eight rounds. +antworten: structure chart | flowchart | pseudocode + +runde: +frage: “When something is repeated, one of my arrows points back up.” +richtig: flowchart +> A flowchart has no special symbol for a loop. An arrow leads back up. + +runde: +frage: “My loop looks like an upside-down L.” +richtig: structure chart +> The box wraps around the repeated steps at the top and on the left. + +runde: +frage: “I am made of words like IF and WHILE, and the indentation shows what belongs together.” +richtig: pseudocode +> Pseudocode is text in plain language that is laid out like a program. + +runde: +frage: “My branch is a diamond with the exits yes and no.” +richtig: flowchart +> In a structure chart, the condition sits in a triangle instead. + +runde: +frage: “My arrows can get tangled all over the place like spaghetti.” +richtig: flowchart +> Because arrows may lead anywhere, spaghetti code is possible in a flowchart. + +runde: +frage: “I have no fixed way of writing. You may write WHEN instead of IF.” +richtig: pseudocode +> All that matters is that anyone can understand it without an explanation. + +runde: +frage: “The condition sits at the top in a triangle, and below it I split into two columns.” +richtig: structure chart +> This is how a branch looks in a structure chart: true on the left, false on the right. + +runde: +frage: “If you insert a box, everything below simply moves down with it. No jump can go wrong.” +richtig: structure chart +> A structure chart has no arrows and no jumps, so nothing can point to the wrong place. +::: + +## Checklist + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can name the symbols of a flowchart and read a simple flowchart. → Other ways to draw it: the flowchart +- I can build a simple algorithm as a flowchart myself. → Exercise: Baking a cake as a flowchart +- I can explain why jumps with GOTO lead to mistakes and spaghetti code. → Drawbacks of the flowchart: jumps +- I can read a simple algorithm as pseudocode. → Pseudocode and comparison +::: + +## Quiz + +::: quiz +? How do you recognise a loop in a flowchart? +→ Other ways to draw it: the flowchart +- [ ] By an upside-down L +- [x] By an arrow that leads back up +- [ ] By the word WHILE +> The upside-down L belongs to the structure chart, and WHILE to pseudocode. + +? Match each flowchart symbol to its meaning. +→ Other ways to draw it: the flowchart += Oval -> Start or end += Rectangle -> Statement += Diamond -> Decision += Parallelogram -> Input or output +> The diamond has two exits: yes and no. + +? You insert a new line into a program with GOTO. What can happen? +→ Drawbacks of the flowchart: jumps +- [x] The jumps point to the wrong lines because the numbers have moved +- [ ] Nothing, the jumps adjust by themselves +- [ ] The program automatically gets faster +> Every GOTO points to a fixed line number. If the lines move down, the program jumps to the wrong place. + +? In pseudocode, what shows which lines belong to a loop? +→ Pseudocode and comparison +- [ ] The colour +- [x] The indentation and the END WHILE +- [ ] An arrow +> Everything between WHILE and END WHILE is indented and is repeated. +::: diff --git a/web/lessons/pt/01-was-ist-ein-struktogramm.md b/web/lessons/pt/01-was-ist-ein-struktogramm.md index b97b31ea..97894452 100644 --- a/web/lessons/pt/01-was-ist-ein-struktogramm.md +++ b/web/lessons/pt/01-was-ist-ein-struktogramm.md @@ -10,9 +10,6 @@ kurz: Mostrar e ler algoritmos como uma série de passos claros. - explicar o que é um algoritmo - ler um estrutograma - reconhecer os três blocos básicos: sequência, decisão e ciclo -- ler um fluxograma (em inglês *flowchart*) e construir um sozinho -- explicar porque é que os saltos num fluxograma levam a erros -- ler um algoritmo simples em pseudocódigo ::: ## Um algoritmo é uma instrução exata @@ -45,7 +42,7 @@ Esta forma de desenhar foi inventada por **Isaac Nassi e Ben Shneiderman** (1973 À esquerda: Isaac “Ike” Nassi (foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), recortada), à direita: Ben Shneiderman (foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0). ::: -> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado. Programas que saltam para todo o lado chamam-se **código esparguete**, porque o seu fluxo se enrola como massa no prato. Mais sobre isto no passo 10. +> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado. Programas que saltam para todo o lado chamam-se **código esparguete**, porque o seu fluxo se enrola como massa no prato. Mais sobre isto na próxima lição. ::: angeberwissen Méééé, ouve bem! Em 1972, Nassi e Shneiderman ainda eram doutorandos na Universidade de Stony Brook, perto de Nova Iorque. Shneiderman tinha uns 25 anos e Nassi uns 23. Ou seja, dois estudantes que escreveram história da informática nas horas vagas. @@ -123,138 +120,6 @@ Os blocos também podem ser **encaixados** uns dentro dos outros: um ciclo ou um Consolo para quem correu mal um teste: a famosa revista *Communications of the ACM* rejeitou o artigo sobre estrutogramas. Segundo Nassi, o revisor até disse que deviam juntar todas as cópias e queimá-las. Ai! O artigo saiu em 1973 numa revista mais pequena e hoje é citado milhares de vezes. Ha! ::: -## Outras formas de desenhar: o fluxograma - -Há mais duas formas de representar um algoritmo: o **fluxograma** e o **pseudocódigo**. Vais conhecer as duas nas aulas. Em inglês, o fluxograma chama-se **flowchart**. Esta palavra aparece muitas vezes, por exemplo em programas e na internet. - -Aqui vês outra vez o nosso estrutograma para beber chá de “Os três juntos”. A seguir vamos ver o fluxograma, com o mesmo exemplo. - -::: diagramm l1-grundbausteine.visustruct -O exemplo do chá como estrutograma: primeiro a chávena, depois a decisão para o açúcar e depois o ciclo. -::: - -### O mesmo algoritmo como fluxograma - -::: grafik l01-pap.svg -O exemplo do chá como fluxograma. A seta de “Esperar 1 minuto” para cima forma o ciclo. -::: - -### Os símbolos - -Um fluxograma é feito de poucos símbolos ligados por **setas**. Está normalizado como DIN 66001 (ISO 5807). - -- **Oval:** início ou fim. Cada fluxograma tem exatamente um início e um fim. -- **Retângulo:** uma instrução, por exemplo *Pôr uma chávena na mesa*. -- **Losango:** uma decisão. No losango está uma pergunta, e dele saem duas setas: **sim** e **não**. -- **Paralelogramo:** uma entrada ou saída. No exemplo do chá não aparece. -- **Seta:** mostra qual é o passo seguinte. - -Um ciclo não tem símbolo próprio no fluxograma. Reconheces um ciclo por uma seta que volta **para cima**. - -### As vantagens - -- **Muito fácil de ler**, mesmo para quem nunca viu um fluxograma. Basta seguir as setas com o dedo. -- Os fluxogramas não se usam só na programação, mas em todo o lado onde se explica um processo: em manuais de instruções, na procura de avarias (“A lâmpada acende? Não: a ficha está ligada?”) ou nas empresas para os processos de trabalho. - -## Exercício: Fazer um bolo como fluxograma - -Agora és tu que constróis um fluxograma. O Ludwig faz um bolo assim: - -Põe os ingredientes na tigela e mexe a massa. Se a massa ainda não estiver lisa, continua a mexer. Quando está lisa, deita a massa na forma e coze o bolo durante 30 minutos. Depois testa com um palito: se ainda tiver massa agarrada, coze mais 5 minutos e testa outra vez. Quando o palito sai limpo, tira o bolo e diz: “O bolo está pronto!” - -::: pap -titel: Exercício: Fazer um bolo como fluxograma -auftrag: Os lugares no fluxograma estão vazios. Põe cada elemento no seu lugar. A forma do lugar ajuda-te. -start: Início -anweisung: Pôr os ingredientes na tigela -anweisung: Mexer a massa -frage: Massa lisa? | nein -> Mexer a massa -anweisung: Deitar a massa na forma -anweisung: Cozer 30 minutos -frage: Palito limpo? | nein: Cozer mais 5 minutos -anweisung: Tirar o bolo do forno -ausgabe: “O bolo está pronto!” -ende: Fim -erklärung: Dois ciclos, duas setas para cima: ao mexer, a seta volta a “Mexer a massa”; ao cozer, vai de “Cozer mais 5 minutos” de volta à pergunta. A saída fica no paralelogramo. -legende: ja -::: - -## Desvantagens do fluxograma: saltos - -Uma seta num fluxograma pode ir de qualquer símbolo para qualquer outro. Parece prático, mas é perigoso. - -Antigamente, os programas escreviam-se exatamente assim. Cada linha tinha um **número**, e o comando **GOTO**, em português “ir para”, saltava para um número de linha. Cada IR PARA é uma seta do fluxograma. O nosso exemplo do chá ficava assim: - -``` -10 Pôr uma chávena na mesa -20 SE não quer açúcar, IR PARA 40 -30 Juntar açúcar -40 SE chá não demasiado quente, IR PARA 70 -50 Esperar 1 minuto -60 IR PARA 40 -70 Beber o chá -``` - -### Mais uma linha, e os saltos ficam errados - -Agora melhoras o algoritmo: depois do açúcar, o saquinho de chá deve sair. Acrescentas a nova linha 40, e todas as linhas abaixo avançam um número. Mas os saltos continuam a apontar para os números antigos: - -``` -10 Pôr uma chávena na mesa -20 SE não quer açúcar, IR PARA 40 -30 Juntar açúcar -40 Tirar o saquinho de chá -50 SE chá não demasiado quente, IR PARA 70 -60 Esperar 1 minuto -70 IR PARA 40 -80 Beber o chá -``` - -Experimenta: a linha 70 já não te manda para a verificação da linha 50, mas para o saquinho. E quando o chá já está frio o suficiente, a linha 50 salta para a linha 70 em vez de *Beber o chá*. Ou seja, tiras o saquinho vezes sem conta e nunca bebes. A cada alteração tens de verificar todos os IR PARA. Num programa grande, com centenas de saltos, é fácil algo correr mal. - -### Para todo o lado: código esparguete - -Com setas também se pode saltar do meio de um ciclo para fora, ou de fora para o meio de um ciclo. Estes saltos tornam o fluxograma confuso muito depressa. Com muitos saltos, as setas cruzam-se até o fluxograma parecer um prato de esparguete. Por isso chama-se **código esparguete**. Mal se consegue seguir o fluxo, e os erros escondem-se bem. - -Um estrutograma não tem setas. Se acrescentares um bloco, tudo o que está abaixo desce com ele, e nenhum salto pode apontar para o sítio errado. Para sair de um ciclo mais cedo existe lá um bloco próprio e arrumado, a interrupção. Vais conhecê-la na lição 18. - -::: angeberwissen -Em 1968, o informático Edsger Dijkstra escreveu uma carta famosa: “Go To Statement Considered Harmful”, ou seja, “o GOTO é considerado prejudicial”. Desde então, os programas são construídos só com sequência, decisão e ciclo. Em Java, `goto` ainda hoje é uma palavra reservada, mas não a podes usar. Mééé, prefiro comer esparguete a programá-lo. -::: - -## Pseudocódigo e comparação - -**Pseudocódigo** é texto que parece um programa, mas está escrito em linguagem corrente. Palavras fixas como SE e ENQUANTO mostram os blocos, e a **indentação** mostra o que pertence a eles. Aqui também não há saltos. Este é o nosso exemplo do chá: - -``` -Pôr uma chávena na mesa -SE quer açúcar ENTÃO - Juntar açúcar -FIM SE -ENQUANTO chá ainda demasiado quente - Esperar 1 minuto -FIM ENQUANTO -Beber o chá -``` - -O pseudocódigo **não tem uma forma fixa**. Há quem escreva CASO em vez de SE, quem use uma seta para a atribuição (`numero ← 5`) ou quem não escreva as linhas FIM. Tudo isso é permitido. O importante é que qualquer pessoa o perceba sem explicação. Por isso, o pseudocódigo não é mais uma linguagem de programação que tens de aprender. - -::: angeberwissen -O pseudocódigo parece-te familiar? A linguagem de programação Python é muito parecida, e isso é de propósito: o seu criador, Guido van Rossum, queria que os programas se lessem quase como texto normal. O Python também usa a indentação para mostrar o que pertence junto. Mas atenção: o Python é uma linguagem de programação a sério, com regras fixas. Um espaço a mais e o computador reclama. O pseudocódigo é mais descontraído, tal como eu ao pequeno-almoço. -::: - -### Comparação - -- **Estrutograma:** blocos dentro de blocos, o ciclo é um L invertido. Vês a estrutura num relance, e saltos malucos são impossíveis. -- **Fluxograma:** símbolos com setas, o ciclo é uma seta que volta para cima. Muito fácil de imaginar, mas os fluxogramas grandes ficam depressa confusos, e são possíveis saltos para todo o lado. -- **Pseudocódigo:** texto com indentação, o ciclo fica entre ENQUANTO e FIM ENQUANTO. Rápido de escrever e já perto do código de um programa. - -> Os três descrevem o mesmo algoritmo. Quando sabes ler uma das formas, aprendes as outras depressa. - -::: angeberwissen -Nassi e Shneiderman estavam em guerra com as setas! O artigo deles de 1973 chamava-se “Flowchart Techniques for Structured Programming”. Com setas pode-se saltar para todo o lado até o fluxograma parecer um prato de esparguete. Num estrutograma isso é simplesmente impossível. Mééé, é assim que eu gosto: arrumado, como o meu estábulo. -::: - ## Primeiro a estrutura, depois o código Quando programas, acontecem duas coisas ao mesmo tempo: tens de pensar nos passos e prestar atenção à forma como a linguagem de programação se escreve. Um estrutograma permite-te separar as duas coisas. @@ -321,10 +186,6 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - Consigo ler um estrutograma de cima para baixo. → Como se lê um estrutograma - Consigo nomear os três blocos básicos: sequência, decisão e ciclo. → Bloco básico 1: a sequência - Consigo reconhecer cada bloco básico num estrutograma pela sua forma. → Os três juntos -- Consigo nomear os símbolos de um fluxograma e ler um fluxograma simples. → Outras formas de desenhar: o fluxograma -- Consigo construir sozinho um algoritmo simples como fluxograma. → Exercício: Fazer um bolo como fluxograma -- Consigo explicar porque é que os saltos com GOTO levam a erros e a código esparguete. → Desvantagens do fluxograma: saltos -- Consigo ler um algoritmo simples em pseudocódigo. → Pseudocódigo e comparação ::: ## Teste de conhecimentos @@ -365,40 +226,4 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Um determinado programa em Java - [ ] Uma imagem que explica um programa > Um algoritmo não depende de nenhuma linguagem de programação. Um estrutograma é uma forma de o escrever. - -? Como reconheces um ciclo num fluxograma? -→ Outras formas de desenhar: o fluxograma -- [ ] Por um L invertido -- [x] Por uma seta que volta para cima -- [ ] Pela palavra ENQUANTO -> O L invertido pertence ao estrutograma, e ENQUANTO ao pseudocódigo. - -? Associa cada símbolo do fluxograma ao seu significado. -→ Outras formas de desenhar: o fluxograma -= Oval -> Início ou fim -= Retângulo -> Instrução -= Losango -> Decisão -= Paralelogramo -> Entrada ou saída -> O losango tem duas saídas: sim e não. - -? Como se diz fluxograma em inglês? -→ Outras formas de desenhar: o fluxograma -- [x] Flowchart -- [ ] Structure chart -- [ ] Pseudocode -> Structure chart é o estrutograma. - -? Acrescentas uma nova linha a um programa com GOTO. O que pode acontecer? -→ Desvantagens do fluxograma: saltos -- [x] Os saltos apontam para as linhas erradas, porque os números mudaram -- [ ] Nada, os saltos ajustam-se sozinhos -- [ ] O programa fica automaticamente mais rápido -> Cada IR PARA aponta para um número de linha fixo. Se as linhas descem, o programa salta para o sítio errado. - -? No pseudocódigo, o que mostra que linhas pertencem a um ciclo? -→ Pseudocódigo e comparação -- [ ] A cor -- [x] A indentação e o FIM ENQUANTO -- [ ] Uma seta -> Tudo o que está entre ENQUANTO e FIM ENQUANTO está recuado e é repetido. ::: diff --git a/web/lessons/pt/01-weitere-darstellungen.md b/web/lessons/pt/01-weitere-darstellungen.md new file mode 100644 index 00000000..4f3cc90c --- /dev/null +++ b/web/lessons/pt/01-weitere-darstellungen.md @@ -0,0 +1,244 @@ +--- +titel: Fluxograma e pseudocódigo +bereich: Primeiros passos +kurz: Representar algoritmos como fluxograma e como pseudocódigo e compará-los com o estrutograma. +--- + +## Competências que vou adquirir agora + +::: kompetenzen +- ler um fluxograma (em inglês *flowchart*) e construir um sozinho +- explicar porque é que os saltos num fluxograma levam a erros +- ler um algoritmo simples em pseudocódigo +::: + +## Outras formas de desenhar: o fluxograma + +Há mais duas formas de representar um algoritmo: o **fluxograma** e o **pseudocódigo**. Vais conhecer as duas nas aulas. Em inglês, o fluxograma chama-se **flowchart**. Esta palavra aparece muitas vezes, por exemplo em programas e na internet. + +Aqui vês outra vez o nosso estrutograma para beber chá da última lição. A seguir vamos ver o fluxograma, com o mesmo exemplo. + +::: diagramm l1-grundbausteine.visustruct +O exemplo do chá como estrutograma: primeiro a chávena, depois a decisão para o açúcar e depois o ciclo. +::: + +### O mesmo algoritmo como fluxograma + +::: grafik l01-pap.svg +O exemplo do chá como fluxograma. A seta de “Esperar 1 minuto” para cima forma o ciclo. +::: + +### Os símbolos + +Um fluxograma é feito de poucos símbolos ligados por **setas**. Está normalizado como DIN 66001 (ISO 5807). + +- **Oval:** início ou fim. Cada fluxograma tem exatamente um início e um fim. +- **Retângulo:** uma instrução, por exemplo *Pôr uma chávena na mesa*. +- **Losango:** uma decisão. No losango está uma pergunta, e dele saem duas setas: **sim** e **não**. +- **Paralelogramo:** uma entrada ou saída. No exemplo do chá não aparece. +- **Seta:** mostra qual é o passo seguinte. + +Um ciclo não tem símbolo próprio no fluxograma. Reconheces um ciclo por uma seta que volta **para cima**. + +### As vantagens + +- **Muito fácil de ler**, mesmo para quem nunca viu um fluxograma. Basta seguir as setas com o dedo. +- Os fluxogramas não se usam só na programação, mas em todo o lado onde se explica um processo: em manuais de instruções, na procura de avarias (“A lâmpada acende? Não: a ficha está ligada?”) ou nas empresas para os processos de trabalho. + +## Exercício: Fazer um bolo como fluxograma + +Agora és tu que constróis um fluxograma. O Ludwig faz um bolo assim: + +Põe os ingredientes na tigela e mexe a massa. Se a massa ainda não estiver lisa, continua a mexer. Quando está lisa, deita a massa na forma e coze o bolo durante 30 minutos. Depois testa com um palito: se ainda tiver massa agarrada, coze mais 5 minutos e testa outra vez. Quando o palito sai limpo, tira o bolo e diz: “O bolo está pronto!” + +::: pap +titel: Exercício: Fazer um bolo como fluxograma +auftrag: Os lugares no fluxograma estão vazios. Põe cada elemento no seu lugar. A forma do lugar ajuda-te. +start: Início +anweisung: Pôr os ingredientes na tigela +anweisung: Mexer a massa +frage: Massa lisa? | nein -> Mexer a massa +anweisung: Deitar a massa na forma +anweisung: Cozer 30 minutos +frage: Palito limpo? | nein: Cozer mais 5 minutos +anweisung: Tirar o bolo do forno +ausgabe: “O bolo está pronto!” +ende: Fim +erklärung: Dois ciclos, duas setas para cima: ao mexer, a seta volta a “Mexer a massa”; ao cozer, vai de “Cozer mais 5 minutos” de volta à pergunta. A saída fica no paralelogramo. +legende: ja +::: + +## Desvantagens do fluxograma: saltos + +Uma seta num fluxograma pode ir de qualquer símbolo para qualquer outro. Parece prático, mas é perigoso. + +Antigamente, os programas escreviam-se exatamente assim. Cada linha tinha um **número**, e o comando **GOTO**, em português “ir para”, saltava para um número de linha. Cada IR PARA é uma seta do fluxograma. O nosso exemplo do chá ficava assim: + +``` +10 Pôr uma chávena na mesa +20 SE não quer açúcar, IR PARA 40 +30 Juntar açúcar +40 SE chá não demasiado quente, IR PARA 70 +50 Esperar 1 minuto +60 IR PARA 40 +70 Beber o chá +``` + +### Mais uma linha, e os saltos ficam errados + +Agora melhoras o algoritmo: depois do açúcar, o saquinho de chá deve sair. Acrescentas a nova linha 40, e todas as linhas abaixo avançam um número. Mas os saltos continuam a apontar para os números antigos: + +``` +10 Pôr uma chávena na mesa +20 SE não quer açúcar, IR PARA 40 +30 Juntar açúcar +40 Tirar o saquinho de chá +50 SE chá não demasiado quente, IR PARA 70 +60 Esperar 1 minuto +70 IR PARA 40 +80 Beber o chá +``` + +Experimenta: a linha 70 já não te manda para a verificação da linha 50, mas para o saquinho. E quando o chá já está frio o suficiente, a linha 50 salta para a linha 70 em vez de *Beber o chá*. Ou seja, tiras o saquinho vezes sem conta e nunca bebes. A cada alteração tens de verificar todos os IR PARA. Num programa grande, com centenas de saltos, é fácil algo correr mal. + +### Para todo o lado: código esparguete + +Com setas também se pode saltar do meio de um ciclo para fora, ou de fora para o meio de um ciclo. Estes saltos tornam o fluxograma confuso muito depressa. Com muitos saltos, as setas cruzam-se até o fluxograma parecer um prato de esparguete. Por isso chama-se **código esparguete**. Mal se consegue seguir o fluxo, e os erros escondem-se bem. + +Um estrutograma não tem setas. Se acrescentares um bloco, tudo o que está abaixo desce com ele, e nenhum salto pode apontar para o sítio errado. Para sair de um ciclo mais cedo existe lá um bloco próprio e arrumado, a interrupção. Vais conhecê-la na lição 18. + +::: angeberwissen +Em 1968, o informático Edsger Dijkstra escreveu uma carta famosa: “Go To Statement Considered Harmful”, ou seja, “o GOTO é considerado prejudicial”. Desde então, os programas são construídos só com sequência, decisão e ciclo. Em Java, `goto` ainda hoje é uma palavra reservada, mas não a podes usar. Mééé, prefiro comer esparguete a programá-lo. +::: + +## Pseudocódigo e comparação + +**Pseudocódigo** é texto que parece um programa, mas está escrito em linguagem corrente. Palavras fixas como SE e ENQUANTO mostram os blocos, e a **indentação** mostra o que pertence a eles. Aqui também não há saltos. Este é o nosso exemplo do chá: + +``` +Pôr uma chávena na mesa +SE quer açúcar ENTÃO + Juntar açúcar +FIM SE +ENQUANTO chá ainda demasiado quente + Esperar 1 minuto +FIM ENQUANTO +Beber o chá +``` + +O pseudocódigo **não tem uma forma fixa**. Há quem escreva CASO em vez de SE, quem use uma seta para a atribuição (`numero ← 5`) ou quem não escreva as linhas FIM. Tudo isso é permitido. O importante é que qualquer pessoa o perceba sem explicação. Por isso, o pseudocódigo não é mais uma linguagem de programação que tens de aprender. + +::: angeberwissen +O pseudocódigo parece-te familiar? A linguagem de programação Python é muito parecida, e isso é de propósito: o seu criador, Guido van Rossum, queria que os programas se lessem quase como texto normal. O Python também usa a indentação para mostrar o que pertence junto. Mas atenção: o Python é uma linguagem de programação a sério, com regras fixas. Um espaço a mais e o computador reclama. O pseudocódigo é mais descontraído, tal como eu ao pequeno-almoço. +::: + +### Comparação + +- **Estrutograma:** blocos dentro de blocos, o ciclo é um L invertido. Vês a estrutura num relance, e saltos malucos são impossíveis. +- **Fluxograma:** símbolos com setas, o ciclo é uma seta que volta para cima. Muito fácil de imaginar, mas os fluxogramas grandes ficam depressa confusos, e são possíveis saltos para todo o lado. +- **Pseudocódigo:** texto com indentação, o ciclo fica entre ENQUANTO e FIM ENQUANTO. Rápido de escrever e já perto do código de um programa. + +> Os três descrevem o mesmo algoritmo. Quando sabes ler uma das formas, aprendes as outras depressa. + +::: angeberwissen +Nassi e Shneiderman estavam em guerra com as setas! O artigo deles de 1973 chamava-se “Flowchart Techniques for Structured Programming”. Com setas pode-se saltar para todo o lado até o fluxograma parecer um prato de esparguete. Num estrutograma isso é simplesmente impossível. Mééé, é assim que eu gosto: arrumado, como o meu estábulo. +::: + +## Jogo: Que representação? + +::: spiel frage +titel: Jogo: Que representação? +intro: O Ludwig descreve uma forma de representar um algoritmo sem dizer o nome. É o estrutograma, o fluxograma ou o pseudocódigo? Oito rondas. +antworten: estrutograma | fluxograma | pseudocódigo + +runde: +frage: “Quando algo se repete, uma das minhas setas aponta de volta para cima.” +richtig: fluxograma +> No fluxograma, o ciclo não tem símbolo próprio. Uma seta volta para cima. + +runde: +frage: “O meu ciclo parece um L invertido.” +richtig: estrutograma +> A caixa envolve os passos repetidos em cima e à esquerda. + +runde: +frage: “Sou feito de palavras como SE e ENQUANTO, e a indentação mostra o que pertence a quê.” +richtig: pseudocódigo +> O pseudocódigo é texto em linguagem normal, organizado como um programa. + +runde: +frage: “A minha decisão é um losango com as saídas sim e não.” +richtig: fluxograma +> No estrutograma, a condição fica num triângulo. + +runde: +frage: “As minhas setas podem enrolar-se para todo o lado como esparguete.” +richtig: fluxograma +> Como as setas podem ir para qualquer lado, no fluxograma é possível haver código esparguete. + +runde: +frage: “Não tenho uma forma fixa de escrever. Também podes escrever CASO em vez de SE.” +richtig: pseudocódigo +> O importante é que qualquer pessoa o perceba sem explicação. + +runde: +frage: “A condição fica em cima num triângulo, e por baixo divido-me em duas colunas.” +richtig: estrutograma +> É assim que a decisão aparece no estrutograma: true à esquerda, false à direita. + +runde: +frage: “Se inserires uma caixa, tudo o que está por baixo desce também. Nenhum salto pode falhar.” +richtig: estrutograma +> O estrutograma não tem setas nem saltos, por isso nada pode apontar para o sítio errado. +::: + +## Lista de verificação + +Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ consigo com segurança. Com ⛅ e ☂️, **Rever** ajuda-te. Depois vem o teste de conhecimentos. Mostra-te se a tua autoavaliação está certa. + +::: checkliste +- Consigo nomear os símbolos de um fluxograma e ler um fluxograma simples. → Outras formas de desenhar: o fluxograma +- Consigo construir sozinho um algoritmo simples como fluxograma. → Exercício: Fazer um bolo como fluxograma +- Consigo explicar porque é que os saltos com GOTO levam a erros e a código esparguete. → Desvantagens do fluxograma: saltos +- Consigo ler um algoritmo simples em pseudocódigo. → Pseudocódigo e comparação +::: + +## Teste de conhecimentos + +::: quiz +? Como reconheces um ciclo num fluxograma? +→ Outras formas de desenhar: o fluxograma +- [ ] Por um L invertido +- [x] Por uma seta que volta para cima +- [ ] Pela palavra ENQUANTO +> O L invertido pertence ao estrutograma, e ENQUANTO ao pseudocódigo. + +? Associa cada símbolo do fluxograma ao seu significado. +→ Outras formas de desenhar: o fluxograma += Oval -> Início ou fim += Retângulo -> Instrução += Losango -> Decisão += Paralelogramo -> Entrada ou saída +> O losango tem duas saídas: sim e não. + +? Como se diz fluxograma em inglês? +→ Outras formas de desenhar: o fluxograma +- [x] Flowchart +- [ ] Structure chart +- [ ] Pseudocode +> Structure chart é o estrutograma. + +? Acrescentas uma nova linha a um programa com GOTO. O que pode acontecer? +→ Desvantagens do fluxograma: saltos +- [x] Os saltos apontam para as linhas erradas, porque os números mudaram +- [ ] Nada, os saltos ajustam-se sozinhos +- [ ] O programa fica automaticamente mais rápido +> Cada IR PARA aponta para um número de linha fixo. Se as linhas descem, o programa salta para o sítio errado. + +? No pseudocódigo, o que mostra que linhas pertencem a um ciclo? +→ Pseudocódigo e comparação +- [ ] A cor +- [x] A indentação e o FIM ENQUANTO +- [ ] Uma seta +> Tudo o que está entre ENQUANTO e FIM ENQUANTO está recuado e é repetido. +::: diff --git a/web/package-lock.json b/web/package-lock.json index 131caa5a..e70f3509 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "visustruct-web", - "version": "0.15.1", + "version": "0.15.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "visustruct-web", - "version": "0.15.1", + "version": "0.15.2", "dependencies": { "@codemirror/autocomplete": "^6.20.4", "@codemirror/commands": "^6.11.1", diff --git a/web/package.json b/web/package.json index 4a6bd39b..da538a4d 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "visustruct-web", "private": true, - "version": "0.15.1", + "version": "0.15.2", "type": "module", "scripts": { "dev": "vite", diff --git a/web/src/learn/content.ts b/web/src/learn/content.ts index dfd64925..e7d4a49a 100644 --- a/web/src/learn/content.ts +++ b/web/src/learn/content.ts @@ -105,8 +105,13 @@ export function useContentLanguage(lang: ContentLanguage) { const robotTaskFiles = filesFor(visuBotTaskFiles, /\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/, lang) tasks = parseTasks(robotTaskFiles, 'visubot/aufgaben/', series.renumber).map((t) => ({ ...t, robot: true })) } else { - lessons = parseLessons(pages) - tasks = parseTasks(normalTaskFiles, 'aufgaben/') + // Gleiches Durchzählen wie bei VisuBot: seit 4.11. ist Lektion 1 geteilt (`01-was-ist-…`, `01-weitere-darstellungen`). + const lessonFiles = pages.filter(([name]) => /^\d+/.test(name)) + const series = visuBotSeries(lessonFiles) + lessons = parseLessons(lessonFiles, series.renumber) + .map((l) => ({ ...l, number: series.number.get(l.id)! })) + .sort((a, b) => a.number - b.number) + tasks = parseTasks(normalTaskFiles, 'aufgaben/', series.renumber) } tasks.sort((a, b) => (a.after ?? 0) - (b.after ?? 0) || a.level - b.level || a.title.localeCompare(b.title, lang)) // Textdateien aus den Lektionen kann die Simulation mit `Files.readString(Path.of("name"))` lesen. @@ -123,7 +128,7 @@ export function useContentLanguage(lang: ContentLanguage) { } /** - * Nummern der VisuBot-Reihe: die Roboter-Lektionen in Dateireihenfolge, durchgezählt ab 1. So kann eine neue Lektion + * Nummern der Lektionsreihe (VisuBot und seit 4.11. auch VisuStruct): die Roboter-Lektionen in Dateireihenfolge, durchgezählt ab 1. So kann eine neue Lektion * mit gleicher Nummer und späterem Namen (`07-linie.md`, `07-wand-oder-linie.md`) eingeschoben werden, ohne Dateien * umzubenennen (Lernstand hängt am Dateinamen). Verweise „Lektion N“ in den Texten meinen die Dateinummer N und * werden auf die Nummer in der Reihe umgeschrieben (bei gleicher Nummer zählt die erste Datei). diff --git a/web/test/lessons.test.ts b/web/test/lessons.test.ts index f6af38a0..cd515c5c 100644 --- a/web/test/lessons.test.ts +++ b/web/test/lessons.test.ts @@ -528,6 +528,18 @@ describe('Kompetenzen und Selbsteinschätzung', () => { expect(() => lesson('Test')).toThrow(/keinen Checklistenpunkt/) }) + it('Lektion 1 ist geteilt: PAP und Pseudocode sind Lektion 2, die Verweise zählen mit', () => { + for (const lang of contentLanguages) { + useContentLanguage(lang) + expect(lessons[1].id, lang).toBe('01-weitere-darstellungen') + expect(lessons.find((l) => l.id === '02-der-editor')!.number, lang).toBe(3) + // „Lektion 18“ (Datei 18, Aussprung) heißt jetzt Lektion 19. + const text = JSON.stringify(lessons[1].steps) + expect(text, lang).toMatch(/\b(Lektion|lesson|lição) 19\b/i) + expect(text, lang).not.toMatch(/\b(Lektion|lesson|lição) 18\b/i) + } + }) + it('Lektion 1 hat Kompetenzen und Ich-kann-Sätze in allen Sprachen', () => { for (const lang of contentLanguages) { useContentLanguage(lang) diff --git a/website/app/assets/flowApp-RdEaBhPZ.js b/website/app/assets/flowApp-DABZxAnt.js similarity index 99% rename from website/app/assets/flowApp-RdEaBhPZ.js rename to website/app/assets/flowApp-DABZxAnt.js index 011a9064..a0ab39d9 100644 --- a/website/app/assets/flowApp-RdEaBhPZ.js +++ b/website/app/assets/flowApp-DABZxAnt.js @@ -1,4 +1,4 @@ -var dt=Object.defineProperty;var lt=(i,t,e)=>t in i?dt(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var y=(i,t,e)=>lt(i,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,o as ut,f as ft,q as G,u as pt,v as gt,x as wt,y as vt,z as mt,l as xt,n as yt}from"./index-DuzNMqv5.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,bt=170;function _t(i,t,e){const n=[];for(const s of i.split(` +var dt=Object.defineProperty;var lt=(i,t,e)=>t in i?dt(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var y=(i,t,e)=>lt(i,typeof t!="symbol"?t+"":t,e);import{t as h,g as ct,i as I,w as ht,o as ut,f as ft,q as G,u as pt,v as gt,x as wt,y as vt,z as mt,l as xt,n as yt}from"./index-f5yHO7xw.js";const et=["start","anweisung","ein","verzweigung","unterprogramm","ende"],m=20,st={start:"#d1f2d9",ende:"#d1f2d9",anweisung:"#e5f0ff",ein:"#f2e6ff",verzweigung:"#fff4d6",unterprogramm:"#e5f0ff"},H=16,bt=170;function _t(i,t,e){const n=[];for(const s of i.split(` `)){let o="";for(const r of s.split(/\s+/).filter(Boolean)){const a=o?`${o} ${r}`:r;o&&e(a)>t?(n.push(o),o=r):o=a}n.push(o)}return n.length?n:[""]}const U=i=>Math.round(i/m)*m;function C(i,t){const e=_t(i.text,bt,t),n=Math.max(0,...e.map(t)),s=e.length*H;let o,r;if(i.shape==="verzweigung")o=Math.max(140,n*1.7+30),r=Math.max(80,s*1.8+24);else{const a=i.shape==="ein"?44:i.shape==="unterprogramm"?40:i.shape==="anweisung"?24:36;o=Math.max(i.shape==="start"||i.shape==="ende"?100:120,n+a),r=Math.max(40,s+18)}return{x:i.x,y:i.y,w:Math.ceil(o/m)*m,h:Math.ceil(r/m)*m,lines:e}}function V(i){return i==="ende"?[]:i==="verzweigung"?["ja","nein"]:["out"]}const P=i=>i!=="start";function j(i,t,e){var s;if(e==="out")return"bottom";const n=((s=i.yesRight)==null?void 0:s.includes(t.id))??!1;return e==="ja"===n?"right":"bottom"}function F(i,t){return t==="bottom"?[i.x,i.y+i.h/2]:[i.x+i.w/2,i.y]}const $t=i=>[i.x,i.y-i.h/2];function Lt(i,t,e,n=0){const[s,o]=F(i,t),[r,a]=$t(e),d=m,u=Math.max(i.x+i.w/2,e.x+e.w/2)+d*(1.5+n);if(t==="bottom"){if(a>=o+d){if(s===r)return[[s,o],[r,a]];const l=o+d;return[[s,o],[s,l],[r,l],[r,a]]}return[[s,o],[s,o+d],[u,o+d],[u,a-d],[r,a-d],[r,a]]}const p=e.x-e.w/2;if(p>=s+d&&Math.abs(e.y-o)=o+d){if(r>=s+d)return[[s,o],[r,o],[r,a]];const l=s+d;return[[s,o],[l,o],[l,a-d],[r,a-d],[r,a]]}const f=Math.max(s+d,u);return[[s,o],[f,o],[f,a-d],[r,a-d],[r,a]]}function nt(i=""){return{title:i,nodes:[],edges:[]}}function it(i,t){const e=new Set([...i.nodes.map(s=>s.id),...i.edges.map(s=>s.id)]);let n=1;for(;e.has(`${t}${n}`);)n++;return`${t}${n}`}function q(i,t,e,n,s){const o=it(i,"n");return{doc:{...i,nodes:[...i.nodes,{id:o,shape:t,x:U(e),y:U(n),text:s}]},id:o}}function J(i,t,e,n){return{...i,nodes:i.nodes.map(s=>s.id===t?{...s,x:Math.max(m*4,U(e)),y:Math.max(m*2,U(n))}:s)}}function Et(i,t,e){return{...i,nodes:i.nodes.map(n=>n.id===t?{...n,text:e}:n)}}function _(i,t,e,n){const s=i.nodes.find(a=>a.id===t),o=i.nodes.find(a=>a.id===n);if(!s||!o||t===n||!V(s.shape).includes(e)||!P(o.shape))return i;const r=i.edges.filter(a=>!(a.from===t&&a.port===e));return{...i,edges:[...r,{id:it(i,"e"),from:t,port:e,to:n}]}}function kt(i,t){return V(t.shape).find(e=>!i.edges.some(n=>n.from===t.id&&n.port===e))}function St(i,t){var e;return{...i,nodes:i.nodes.filter(n=>n.id!==t),edges:i.edges.filter(n=>n.from!==t&&n.to!==t),yesRight:(e=i.yesRight)==null?void 0:e.filter(n=>n!==t)}}function Mt(i,t){return{...i,edges:i.edges.filter(e=>e.id!==t)}}function ot(i,t){const e=new Set(i.yesRight??[]);return e.has(t)?e.delete(t):e.add(t),{...i,yesRight:[...e]}}function b(i){return JSON.stringify({format:"visuflow",version:1,...i},null,2)}function W(i){let t;try{t=JSON.parse(i)}catch{return}if(!t||typeof t!="object")return;const e=t;if(!Array.isArray(e.nodes)||!Array.isArray(e.edges))return;const n=[];for(const o of e.nodes)!o||typeof o.id!="string"||!et.includes(o.shape)||!Number.isFinite(o.x)||!Number.isFinite(o.y)||n.some(r=>r.id===o.id)||n.push({id:o.id,shape:o.shape,x:o.x,y:o.y,text:typeof o.text=="string"?o.text:""});let s={title:typeof e.title=="string"?e.title:"",nodes:n,edges:[]};for(const o of e.edges)!o||typeof o.from!="string"||typeof o.to!="string"||typeof o.port!="string"||(s=_(s,o.from,o.port,o.to));return Array.isArray(e.yesRight)&&(s.yesRight=e.yesRight.filter(o=>typeof o=="string"&&n.some(r=>r.id===o))),s}const z="http://www.w3.org/2000/svg",X="visuflow.doc",At=100,Y=14,rt=`${Y}px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`,B="#1c1c1e",w=i=>i.replace(/[&<>"]/g,t=>({"&":"&","<":"<",">":">",'"':"""})[t]);function It(i){try{return localStorage.getItem(i)}catch{return null}}function Z(i,t){try{localStorage.setItem(i,t)}catch{}}function Ct(){return xt("visustruct",yt())}function D(i,t,e){const n=URL.createObjectURL(new Blob([t],{type:e})),s=document.createElement("a");s.href=n,s.download=i,s.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function v(i,t={}){const e=document.createElementNS(z,i);for(const[n,s]of Object.entries(t))e.setAttribute(n,String(s));return e}let N;function R(i){return N===void 0&&(N=document.createElement("canvas").getContext("2d")),N?(N.font=rt,N.measureText(i).width):i.length*Y*.55}const Rt=i=>h(`web_visuflow_shape_${i}`),T=i=>h(`web_visuflow_text_${i}`);function at(i,t){const e=t.x-t.w/2,n=t.x+t.w/2,s=t.y-t.h/2,o=t.y+t.h/2;return i==="verzweigung"?v("path",{d:`M${t.x} ${s} L${n} ${t.y} L${t.x} ${o} L${e} ${t.y} Z`}):i==="ein"?v("path",{d:`M${e+14} ${s} L${n} ${s} L${n-14} ${o} L${e} ${o} Z`}):i==="unterprogramm"?v("path",{d:`M${e} ${s} H${n} V${o} H${e} Z M${e+10} ${s} V${o} M${n-10} ${s} V${o}`}):v("rect",{x:e,y:s,width:t.w,height:t.h,rx:i==="anweisung"?2:t.h/2})}function Bt(i){const t=v("text",{"text-anchor":"middle","font-size":Y,fill:B});return i.lines.forEach((e,n)=>{const s=v("tspan",{x:i.x,y:i.y+5+(n-(i.lines.length-1)/2)*H});s.textContent=e,t.append(s)}),t}function Q(i){const t=v("svg",{viewBox:"0 0 64 36",width:64,height:36,"aria-hidden":"true"}),e=at(i,{x:32,y:18,w:i==="verzweigung"?54:56,h:i==="verzweigung"?32:26});return e.setAttribute("fill",st[i]),e.setAttribute("stroke",B),e.setAttribute("stroke-width","1.5"),t.append(e),t.outerHTML}function tt(){let i=nt(h("web_visuflow_example_title"));const t=[],e=(p,f,l,c)=>{const g=q(i,p,f,l,c);i=g.doc,t.push(g.id)};e("start",240,60,T("start")),e("anweisung",240,160,h("web_visuflow_example_water")),e("anweisung",240,260,h("web_visuflow_example_bag")),e("verzweigung",240,380,h("web_visuflow_example_hot")),e("anweisung",480,380,h("web_visuflow_example_wait")),e("anweisung",240,500,h("web_visuflow_example_drink")),e("ende",240,600,T("ende"));const[n,s,o,r,a,d,u]=t;return i=_(i,n,"out",s),i=_(i,s,"out",o),i=_(i,o,"out",r),i=ot(i,r),i=_(i,r,"ja",a),i=_(i,a,"out",r),i=_(i,r,"nein",d),i=_(i,d,"out",u),i}function Tt(){return q(nt(),"start",240,60,T("start")).doc}class Dt{constructor(t){y(this,"shell");y(this,"svg");y(this,"scroller");y(this,"status");y(this,"titleInput");y(this,"doc");y(this,"selection");y(this,"history",[]);y(this,"future",[]);y(this,"editor");y(this,"dragLine");document.documentElement.classList.add("visuflow-theme"),history.replaceState(history.state,"",`${location.pathname}?visuflow${location.hash}`),this.doc=W(It(X)??"")??tt(),this.shell=document.createElement("div"),this.shell.className="shell visuflow",t.replaceWith(this.shell),this.build(),this.render(),window.addEventListener("keydown",e=>this.onKey(e))}build(){const t=(l,c,g,x=c)=>``,e=et.map(l=>``).join("");this.shell.innerHTML=`
VisuFlow ${w(h("web_visuflow_subtitle"))} @@ -28,7 +28,7 @@ var dt=Object.defineProperty;var lt=(i,t,e)=>t in i?dt(i,t,{enumerable:!0,config ${ht()}
- ${w(h("web_about_version_fmt").replace("%@","0.15.1"))} + ${w(h("web_about_version_fmt").replace("%@","0.15.2"))}
diff --git a/website/app/assets/index-DuzNMqv5.js b/website/app/assets/index-f5yHO7xw.js similarity index 94% rename from website/app/assets/index-DuzNMqv5.js rename to website/app/assets/index-f5yHO7xw.js index dc9ce651..a46ec3b7 100644 --- a/website/app/assets/index-DuzNMqv5.js +++ b/website/app/assets/index-f5yHO7xw.js @@ -1,27 +1,27 @@ -var V2=Object.defineProperty;var q2=(i,e,t)=>e in i?V2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>q2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const Q2="modulepreload",U2=function(i,e){return new URL(i,e).href},gu={},ee=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=U2(m,n),m in gu)return;gu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const b=o[f];if(b.href===m&&(!c||b.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":Q2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,b)=>{g.addEventListener("load",f),g.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var T=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(T||{});function Y2(i){return i===3||i===4||i===5||i===6}function $2(i){return i===1||i===2}function Ce(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function K2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case T.forSchleife:return e.length<=1?e:[e3(e)];case T.verzweigung:return oa("if",e);case T.whileSchleife:return oa("while",e);case T.doUntilSchleife:return oa("while",X2(e));case T.fallauswahl:return oa("switch",e);default:return e}}function X2(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function pu(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function oa(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function e3(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const oh={[T.anweisung]:"Anweisung",[T.verzweigung]:"Bedingung",[T.fallauswahl]:"Fallauswahl",[T.forSchleife]:"for 0 < i < anzahl",[T.whileSchleife]:"while …",[T.doUntilSchleife]:"while …",[T.endlosschleife]:"endless",[T.aussprung]:"break",[T.aufruf]:"Aufruf()",[T.leerElement]:"ø"};function t3(i){Object.assign(oh,i)}function $l(i){return K2(i)??[oh[i.type]]}const n3="visucode.de";function lh(i=location.hostname){const e=/^(visustruct|visubot|visuobject)\.visucode\.de$/.exec(i.toLowerCase());return e?e[1]:void 0}function i3(i){return i==="pt-PT"?"pt":i==="de"?"de":"en"}function a3(i,e,t,n=location){const a=i3(e),s=t?`#${t}`:"";return lh(n.hostname)===i&&/\/app\/(index\.html)?$/.test(n.pathname)?`../${a}/index.html${s}`:`https://${i}.${n3}/${a}/${s}`}class We extends Error{}const vn=i=>structuredClone(i);function sn(){return Ce(T.anweisung,{textLines:["ø"]})}function s3(){return{caption:"",elements:[sn()]}}function Kl(i){if(i.type===T.leerElement)return!0;if(i.type===T.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function Sn(i,e){const t=yt(i,e);return t!==void 0&&Kl(t)}function $i(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return $i(uh(i[t],a),s)}function uh(i,e){if(Y2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if($2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Ot(i,e){const{list:t,index:n}=$i(i.elements,e);return t[n]}function yt(i,e){try{return Ot(i,e)}catch{return}}function On(i,e,t){const n=vn(i),{list:a,index:s}=$i(n.elements,e);return a[s]=vn(t),n}function $1(i,e,t){const n=vn(Ot(i,e));return n.textLines=t.length===0?[""]:t,On(i,e,n)}function jr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!Sn(i,e):yt(i,e)!==void 0}function Pi(i,e){const t=vn(i),{list:n,index:a}=$i(t.elements,e);if(e.length===1&&n.length===1){if(Kl(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=sn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(sn()),t}function pi(i,e,t,n){const a=vn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=$i(a.elements,r);s=uh(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,vn(n)),a}function mh(i,e,t){if(t.length===0)throw new We("Invalid element path.");return pi(i,t.slice(0,-1),t[t.length-1],e)}function To(i,e,t){if(t.length===0)throw new We("Invalid element path.");return pi(i,t.slice(0,-1),t[t.length-1]+1,e)}function Xl(i,e){return i.lengthe[n]===t)}function e0(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const t0=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function r3(i,e,t){if(t0(e,t))return i;if(Xl(e,t))throw new We("Invalid element path.");const n=Ot(i,e),a=Pi(i,e);return mh(a,n,e0(t,e))}function o3(i,e,t){if(t0(e,t))return i;if(Xl(e,t))throw new We("Invalid element path.");const n=Ot(i,e),a=Pi(i,e);return To(a,n,e0(t,e))}function l3(i,e,t){if(!Sn(i,t))throw new We("Invalid element path.");if(t0(e,t))return i;if(Xl(e,t))throw new We("Invalid element path.");const n=Ot(i,e),a=Pi(i,e);return On(a,e0(t,e),n)}function u3(i,e){const t=vn(Ot(i,e)),n=t.cases;if(t.type!==T.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[sn()]}),{doc:On(i,e,t),path:[...e,s,0]}}function m3(i,e,t){const n=vn(Ot(i,e)),a=n.cases;if(n.type!==T.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:On(i,e,n),path:[...e,s,0]}}function c3(i,e,t,n){const a=vn(Ot(i,e)),s=a.cases;if(a.type!==T.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,On(i,e,a)}function d3(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=yt(e,a))==null?void 0:t.type)===T.fallauswahl)return a}}function h3(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function Cr(i,e){if(e.elements.length!==0)return!i||!yt(e,i)?[0]:i}const ch=i=>i!==void 0&&/\s/.test(i);function ms(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function g3(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function fu(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function p3(i,e){const t=g3(e);switch(i){case"statement":return t;case"input":return fu("input:",t);case"output":return fu("output:",t)}}const qa=i=>ch(i[0])?i.slice(1):i;function f3(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?qa(e.slice(6)):t.startsWith("output:")?qa(e.slice(7)):t.startsWith("print:")?qa(e.slice(6)):i}function bu(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||ch(n[0])||n[0]==="("))return e;const a=qa(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function xu(i,e){if(i==="input:"||i==="output:")return f3(e);const t=bu(i,e);if(i==="while"&&t===e){const n=bu("until",e);if(n!==e)return n}return t}function b3(i,e){return e===""?`${i} `:`${i} ${e}`}function dh(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function vu(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function x3(i){let e=dh(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const ar='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function v3(i,e){return`${e==="bold"?700:500} ${i}px ${ar}`}const hh=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function y3(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",ar),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let Ar;function gh(){return Ar===void 0&&(Ar=y3()??null),Ar??void 0}function ph(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function yu(i,e){const t=`${i}|${e}`;let n=wu.get(t);if(!n){const a=gh();if(n={ascent:i*.95,descent:i*.24},a){ph(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}wu.set(t,n)}return n}const wu=new Map;function w3(){const i=gh();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(ph(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return hh;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=v3(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const fh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function z3(i){return{...fh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const la=i=>i===T.forSchleife||i===T.whileSchleife||i===T.doUntilSchleife||i===T.endlosschleife,ui=i=>i===T.fallauswahl||i===T.verzweigung;function ua(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function at(i){return{...i,frame:{...i.frame}}}class bh{constructor(e=fh,t=hh){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=at(e);if(n.caseColumnFrames.length===0)return n;const a=n.caseColumnFrames.reduce((l,u)=>l+u.width,0);if(!(a>0))return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=at(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=at(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=at(e);return n.frame.width>0?ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,la(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=at(e);return ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):la(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=at(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===T.anweisung||s===T.leerElement||s===T.aufruf||s===T.aussprung||la(s);let a;switch(t.element.type){case T.forSchleife:case T.whileSchleife:case T.endlosschleife:{const s=t.element.type===T.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case T.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=at(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===T.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case T.fallauswahl:a=40;break;case T.verzweigung:a=20;break;case T.forSchleife:case T.whileSchleife:case T.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===T.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return ui(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===T.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===T.leerElement?76:e.type===T.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(ui(e.type))return this.layoutMultiway(e,t,n,a);if(la(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ua(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=b=>b.reduce((x,v)=>x+v.frame.height,0),r=b=>Math.max(0,...b.map(x=>x.frame.width)),o=e.loopBody??[];if(e.type===T.doUntilSchleife){const b=this.doUntilBodyLeadingInset(),x=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+b,n+x,[...a,0]),z=Math.max(this.minWidth(e),r(w)+b),I=s(w)+v+x,S=Math.max(0,z-b),k=ua(a,e,{x:t,y:n,width:z,height:I},v);return k.topBandHeight=x,k.loopBodyLeadingInset=b,k.children=w.map(P=>{const D=at(P);return D.frame.x=t+b,D.frame.width=S,this.stretchDescendantsWidths(D,S)}),k}const l=20,u=this.headerHeight(e),m=e.type===T.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ua(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(b=>{const x=at(b);return x.frame.x=t+l,x.frame.width=g,this.stretchDescendantsWidths(x,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((b,x)=>{const v=t+c,w=this.layoutList(b.elements,v,n+s,[...a,x]),z=Math.max(0,...w.map(k=>k.frame.width));let I;e.type===T.verzweigung&&o===2?I=Math.max(z,(x===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const S=w.reduce((k,P)=>k+P.frame.height,0);d=Math.max(d,S),u.push({x:v,y:n+s,width:I,height:S}),m.push(w.map(k=>{const P=at(k);return P.frame.x=v,P.frame.width=I,this.stretchDescendantsWidths(P,I)})),c+=I}),e.type===T.verzweigung&&o===2&&u.length===2&&!r.some(b=>_o(b.elements))){const b=Math.max(u[0].width,u[1].width),x=t,v=t+b,w=v-u[1].x;u[0]={...u[0],x,width:b},u[1]={...u[1],x:v,width:b},c=b*2,m[0]=m[0].map(z=>{const I=at(z);return I.frame.x=x,I.frame.width=b,this.stretchDescendantsWidths(I,b)}),m[1]=m[1].map(z=>{const I=jo(z,w);return I.frame.width=b,this.stretchDescendantsWidths(I,b)})}if(m.length>0){const b=I3(m,n+s);m=b.columns.map(x=>x.map(v=>this.stretchLoopBodiesVertically(v)));for(let x=0;x0?Math.max(...b.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const b=h/c;let x=t;const v=[],w=[];u.forEach((z,I)=>{const S=z.width*b;w.push(m[I].map(k=>{const P=at(k);return P.frame.x=x,P.frame.width=S,this.stretchDescendantsWidths(P,S)})),v.push({x,y:z.y,width:S,height:z.height}),x+=S}),u=v,m=w,c=x-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ua(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===T.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function _o(i){return i.some(e=>ui(e.type)||_o(e.loopBody??[])||(e.cases??[]).some(t=>_o(t.elements)))}function xh(i,e){if(Math.abs(e)<=1e-4)return i;const t=at(i),n=a=>{const s=at(a);return s.frame.y+=e,xh(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function jo(i,e){if(Math.abs(e)<=1e-4)return i;const t=at(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>jo(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>jo(n,e)),t}function I3(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=at(d);const f=s[c],b=d.frame.y+d.frame.height,x=h===u.length-1?s.length-1:r(b,c+1),v=s[x],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=xh(g,w),m.push(g),c=x}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const k3=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function zu(i){const e=sn;switch(i){case"anweisung":return Ce(T.anweisung);case"verzweigung":return Ce(T.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return Ce(T.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return Ce(T.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return Ce(T.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return Ce(T.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return Ce(T.endlosschleife,{loopBody:[e()]});case"aussprung":return Ce(T.aussprung);case"aufruf":return Ce(T.aufruf)}}function cs(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function Co(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class Iu extends Error{}function n0(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Iu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Iu("Invalid XML: root element is not .");const n={caption:Su(t,"caption")??"",elements:Po(t)},a=Su(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=fi(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=fi(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function d1(i){const e=(n,a)=>a===void 0?"":` ${n}="${vh(a)}"`;let t=` +var q2=Object.defineProperty;var Q2=(i,e,t)=>e in i?q2(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>Q2(i,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function t(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=t(a);fetch(a.href,s)}})();const U2="modulepreload",Y2=function(i,e){return new URL(i,e).href},gu={},ee=function(e,t,n){let a=Promise.resolve();if(t&&t.length>0){let r=function(m){return Promise.all(m.map(c=>Promise.resolve(c).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};const o=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),u=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));a=r(t.map(m=>{if(m=Y2(m,n),m in gu)return;gu[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const b=o[f];if(b.href===m&&(!c||b.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":U2,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,b)=>{g.addEventListener("load",f),g.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${m}`)))})}))}function s(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return a.then(r=>{for(const o of r||[])o.status==="rejected"&&s(o.reason);return e().catch(s)})};var T=(i=>(i[i.anweisung=0]="anweisung",i[i.verzweigung=1]="verzweigung",i[i.fallauswahl=2]="fallauswahl",i[i.forSchleife=3]="forSchleife",i[i.whileSchleife=4]="whileSchleife",i[i.doUntilSchleife=5]="doUntilSchleife",i[i.endlosschleife=6]="endlosschleife",i[i.aussprung=7]="aussprung",i[i.aufruf=8]="aufruf",i[i.leerElement=9]="leerElement",i))(T||{});function $2(i){return i===3||i===4||i===5||i===6}function K2(i){return i===1||i===2}function Ce(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function X2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case T.forSchleife:return e.length<=1?e:[t3(e)];case T.verzweigung:return oa("if",e);case T.whileSchleife:return oa("while",e);case T.doUntilSchleife:return oa("while",e3(e));case T.fallauswahl:return oa("switch",e);default:return e}}function e3(i){if(i.length===0)return i;const e=i[0].trim(),t=e.toLowerCase(),n=[...i];if(t==="until")n[0]="";else if(t.startsWith("until "))n[0]=e.slice(6).trim();else if(t.startsWith("until("))n[0]=e.slice(5);else return i;return n}function pu(i){const e=new Set(["if","for","while","until","switch"]),t=["input:","output:","print:"],n=i.trim(),a=n.toLowerCase();for(const o of t){if(a===o)return{keyword:n,rest:""};if(a.startsWith(o+" "))return{keyword:n.slice(0,o.length),rest:n.slice(o.length).trim()}}const s=n.indexOf(" ");if(s<0)return;const r=n.slice(0,s);if(e.has(r.toLowerCase()))return{keyword:r,rest:n.slice(s+1).trim()}}function oa(i,e){if(e.length===0)return e;const t=e[0].trim(),n=t.toLowerCase();if(n===i||n.startsWith(i+" "))return e;const a=[...e];return a[0]=i+" "+t,a}function t3(i){let e=[...i];for(;e.length<3;)e.push("");e=e.slice(0,3);const t=a=>{let s=a.trim();for(;s.endsWith(";");)s=s.slice(0,-1).trim();return s},n=e.map(t).join("; ").trim();return n===""?"for":"for "+n}const lh={[T.anweisung]:"Anweisung",[T.verzweigung]:"Bedingung",[T.fallauswahl]:"Fallauswahl",[T.forSchleife]:"for 0 < i < anzahl",[T.whileSchleife]:"while …",[T.doUntilSchleife]:"while …",[T.endlosschleife]:"endless",[T.aussprung]:"break",[T.aufruf]:"Aufruf()",[T.leerElement]:"ø"};function n3(i){Object.assign(lh,i)}function $l(i){return X2(i)??[lh[i.type]]}const i3="visucode.de";function uh(i=location.hostname){const e=/^(visustruct|visubot|visuobject)\.visucode\.de$/.exec(i.toLowerCase());return e?e[1]:void 0}function a3(i){return i==="pt-PT"?"pt":i==="de"?"de":"en"}function s3(i,e,t,n=location){const a=a3(e),s=t?`#${t}`:"";return uh(n.hostname)===i&&/\/app\/(index\.html)?$/.test(n.pathname)?`../${a}/index.html${s}`:`https://${i}.${i3}/${a}/${s}`}class We extends Error{}const vn=i=>structuredClone(i);function sn(){return Ce(T.anweisung,{textLines:["ø"]})}function r3(){return{caption:"",elements:[sn()]}}function Kl(i){if(i.type===T.leerElement)return!0;if(i.type===T.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function Sn(i,e){const t=yt(i,e);return t!==void 0&&Kl(t)}function $i(i,e){if(e.length===0)throw new We("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new We("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new We("Invalid element path.");return $i(mh(i[t],a),s)}function mh(i,e){if($2(i.type)){if(e!==0||!i.loopBody)throw new We("Invalid element path.");return i.loopBody}if(K2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new We("Invalid element path.");return i.cases[e].elements}throw new We("Invalid element path.")}function Ot(i,e){const{list:t,index:n}=$i(i.elements,e);return t[n]}function yt(i,e){try{return Ot(i,e)}catch{return}}function On(i,e,t){const n=vn(i),{list:a,index:s}=$i(n.elements,e);return a[s]=vn(t),n}function $1(i,e,t){const n=vn(Ot(i,e));return n.textLines=t.length===0?[""]:t,On(i,e,n)}function jr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!Sn(i,e):yt(i,e)!==void 0}function Pi(i,e){const t=vn(i),{list:n,index:a}=$i(t.elements,e);if(e.length===1&&n.length===1){if(Kl(n[0]))throw new We("The last root element cannot be deleted.");return n[0]=sn(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(sn()),t}function pi(i,e,t,n){const a=vn(i);let s;if(e.length===0)s=a.elements;else{const r=e.slice(0,-1),o=e[e.length-1],{list:l,index:u}=$i(a.elements,r);s=mh(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,vn(n)),a}function ch(i,e,t){if(t.length===0)throw new We("Invalid element path.");return pi(i,t.slice(0,-1),t[t.length-1],e)}function To(i,e,t){if(t.length===0)throw new We("Invalid element path.");return pi(i,t.slice(0,-1),t[t.length-1]+1,e)}function Xl(i,e){return i.lengthe[n]===t)}function e0(i,e){if(e.length===0)return i;const t=e[e.length-1],n=e.slice(0,-1);if(i.length<=n.length||!n.every((r,o)=>i[o]===r))return i;const a=n.length;if(i[a]<=t)return i;const s=[...i];return s[a]-=1,s}const t0=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function o3(i,e,t){if(t0(e,t))return i;if(Xl(e,t))throw new We("Invalid element path.");const n=Ot(i,e),a=Pi(i,e);return ch(a,n,e0(t,e))}function l3(i,e,t){if(t0(e,t))return i;if(Xl(e,t))throw new We("Invalid element path.");const n=Ot(i,e),a=Pi(i,e);return To(a,n,e0(t,e))}function u3(i,e,t){if(!Sn(i,t))throw new We("Invalid element path.");if(t0(e,t))return i;if(Xl(e,t))throw new We("Invalid element path.");const n=Ot(i,e),a=Pi(i,e);return On(a,e0(t,e),n)}function m3(i,e){const t=vn(Ot(i,e)),n=t.cases;if(t.type!==T.fallauswahl||!n||n.length===0)throw new We("Invalid element path.");const a=n[n.length-1].name.toLowerCase()==="default",s=a?n.length-1:n.length,r=String(a?n.length:n.length+1);return n.splice(s,0,{name:r,elements:[sn()]}),{doc:On(i,e,t),path:[...e,s,0]}}function c3(i,e,t){const n=vn(Ot(i,e)),a=n.cases;if(n.type!==T.fallauswahl||!a)throw new We("Invalid element path.");if(a.length<=2)throw new We("A switch needs at least two cases.");if(t<0||t>=a.length)throw new We("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:On(i,e,n),path:[...e,s,0]}}function d3(i,e,t,n){const a=vn(Ot(i,e)),s=a.cases;if(a.type!==T.fallauswahl||!s)throw new We("Invalid element path.");if(t<0||t>=s.length)throw new We("Invalid element path.");const r=n.trim();if(r==="")throw new We("Invalid element path.");return s[t].name=r,On(i,e,a)}function h3(i,e){var t;if(!(!i||i.length===0))for(let n=i.length;n>=1;n--){const a=i.slice(0,n);if(((t=yt(e,a))==null?void 0:t.type)===T.fallauswahl)return a}}function g3(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function Cr(i,e){if(e.elements.length!==0)return!i||!yt(e,i)?[0]:i}const dh=i=>i!==void 0&&/\s/.test(i);function ms(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function p3(i){const e=i.trim(),t=e.toLowerCase();return t.startsWith("input:")?e.slice(6).trim():t.startsWith("output:")?e.slice(7).trim():t.startsWith("print:")?e.slice(6).trim():i}function fu(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function f3(i,e){const t=p3(e);switch(i){case"statement":return t;case"input":return fu("input:",t);case"output":return fu("output:",t)}}const qa=i=>dh(i[0])?i.slice(1):i;function b3(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?qa(e.slice(6)):t.startsWith("output:")?qa(e.slice(7)):t.startsWith("print:")?qa(e.slice(6)):i}function bu(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||dh(n[0])||n[0]==="("))return e;const a=qa(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function xu(i,e){if(i==="input:"||i==="output:")return b3(e);const t=bu(i,e);if(i==="while"&&t===e){const n=bu("until",e);if(n!==e)return n}return t}function x3(i,e){return e===""?`${i} `:`${i} ${e}`}function hh(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function vu(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function v3(i){let e=hh(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const ar='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function y3(i,e){return`${e==="bold"?700:500} ${i}px ${ar}`}const gh=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function w3(){if(typeof document>"u"||!document.body)return;const i="http://www.w3.org/2000/svg",e=document.createElementNS(i,"svg");e.setAttribute("aria-hidden","true"),e.setAttribute("width","0"),e.setAttribute("height","0"),e.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;overflow:hidden";const t=document.createElementNS(i,"text");if(t.setAttribute("font-family",ar),t.style.whiteSpace="pre",e.append(t),document.body.append(e),typeof t.getComputedTextLength!="function"||typeof t.getBBox!="function"){e.remove();return}if(t.textContent="Mg",t.setAttribute("font-size","20"),!(t.getComputedTextLength()>0)){e.remove();return}return t}let Ar;function ph(){return Ar===void 0&&(Ar=w3()??null),Ar??void 0}function fh(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function yu(i,e){const t=`${i}|${e}`;let n=wu.get(t);if(!n){const a=ph();if(n={ascent:i*.95,descent:i*.24},a){fh(a,i,e),a.setAttribute("y","0"),a.textContent="Mg";const s=a.getBBox();s.height>0&&(n={ascent:-s.y,descent:s.height+s.y})}wu.set(t,n)}return n}const wu=new Map;function z3(){const i=ph();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(fh(i,s,r),i.textContent=a,l=a===""?0:i.getComputedTextLength(),n.size>2e3&&n.clear(),n.set(o,l)),l}}const e=typeof document<"u"?document.createElement("canvas").getContext("2d"):null;if(!e)return gh;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=y3(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const bh={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function I3(i){return{...bh,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const la=i=>i===T.forSchleife||i===T.whileSchleife||i===T.doUntilSchleife||i===T.endlosschleife,ui=i=>i===T.fallauswahl||i===T.verzweigung;function ua(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function at(i){return{...i,frame:{...i.frame}}}class xh{constructor(e=bh,t=gh){this.metrics=e,this.measure=t}layout(e,t={left:28,top:28}){const a=this.layoutList(e.elements,t.left,t.top,[]).map(l=>this.stretchLoopBodiesVertically(l));let s=0,r=0;const o=l=>{s=Math.max(s,l.frame.x+l.frame.width),r=Math.max(r,l.frame.y+l.frame.height),l.children.forEach(o)};return a.forEach(o),{canvasSize:{width:s+t.left,height:r+t.top},elements:a}}lineWidth(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"medium"))}lineWidthBold(e){return Math.ceil(this.measure(e,this.metrics.fontSize,"bold"))}layoutList(e,t,n,a){let s=[],r=n;e.forEach((l,u)=>{const m=this.layoutElement(l,t,r,[...a,u]);s.push(m),r+=m.frame.height});const o=Math.max(0,...s.map(l=>l.frame.width));return o>0&&(s=s.map(l=>this.stretchNodeTreeToWidth(l,o))),s}stretchMultiwayNodeToWidth(e,t){const n=at(e);if(n.caseColumnFrames.length===0)return n;const a=n.caseColumnFrames.reduce((l,u)=>l+u.width,0);if(!(a>0))return n;const s=t/a;n.frame.width=t;let r=n.frame.x;const o=n.caseColumnFrames.map(l=>{const u=l.width*s,m={x:r,y:l.y,width:u,height:l.height};return r+=u,m});return n.caseColumnFrames=o,n.dividerX=o.length>0?o[o.length-1].x:n.frame.x+t,n.columns&&n.columns.length===o.length&&(n.columns=n.columns.map((l,u)=>{const m=o[u];return l.map(c=>{const d=at(c);return d.frame.x=m.x,d.frame.width=m.width,this.stretchDescendantsWidths(d,m.width)})}),n.children=n.columns.flat()),n}stretchLoopChildren(e,t){const n=this.effectiveLoopBodyLeading(e),a=Math.max(0,t-n);e.children=e.children.map(s=>{const r=at(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=at(e);return n.frame.width>0?ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,la(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=at(e);return ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):la(n.element.type)?(n.frame.width=t,this.stretchLoopChildren(n,t)):(n.frame.width=t,n.children=n.children.map(a=>this.stretchDescendantsWidths(a,t))),n}stretchLoopBodiesVertically(e){const t=at(e);if(t.columns&&t.columns.length>0)return t.columns=t.columns.map(s=>s.map(r=>this.stretchLoopBodiesVertically(r))),t.children=t.columns.flat(),t;t.children=t.children.map(s=>this.stretchLoopBodiesVertically(s));const n=s=>s===T.anweisung||s===T.leerElement||s===T.aufruf||s===T.aussprung||la(s);let a;switch(t.element.type){case T.forSchleife:case T.whileSchleife:case T.endlosschleife:{const s=t.element.type===T.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case T.doUntilSchleife:a=t.frame.y+t.frame.height-t.headerBandHeight;break}if(a!==void 0&&t.children.length>0){const s=t.children.length-1;let r=at(t.children[s]);const o=a-(r.frame.y+r.frame.height);o>.5&&n(r.element.type)&&(r.frame.height+=o,r=this.stretchLoopBodiesVertically(r),t.children=[...t.children.slice(0,s),r])}return t}headerHeight(e){const t=this.metrics,n=Math.max(1,e.textLines.length);if(e.type===T.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case T.fallauswahl:a=40;break;case T.verzweigung:a=20;break;case T.forSchleife:case T.whileSchleife:case T.endlosschleife:a=t.baseHeaderExtra+4;break;default:a=14}return a+n*t.lineHeight+e.zoomY}doUntilBodyLeadingInset(){return Math.max(20,this.lineWidthBold("do")+12)}effectiveLoopBodyLeading(e){return e.element.type===T.doUntilSchleife?e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:this.doUntilBodyLeadingInset():20}horizontalPaddingInsideCell(e){return ui(e)?Math.max(100,this.metrics.minSidePadding*2.45):this.metrics.minSidePadding}minWidth(e){const t=e.textLines.length===0?0:Math.max(...e.textLines.map(s=>this.lineWidth(s)));let n=t+e.zoomX+this.horizontalPaddingInsideCell(e.type);if(e.type===T.aufruf){const s=Math.max(68,this.metrics.minSidePadding*1.7),r=Math.max(8,this.metrics.minSidePadding*.2);n=Math.max(n,t+e.zoomX+s+r)}const a=e.type===T.leerElement?76:e.type===T.aufruf?104:72;return Math.max(a,n)}layoutElement(e,t,n,a){if(ui(e.type))return this.layoutMultiway(e,t,n,a);if(la(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return ua(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=b=>b.reduce((x,v)=>x+v.frame.height,0),r=b=>Math.max(0,...b.map(x=>x.frame.width)),o=e.loopBody??[];if(e.type===T.doUntilSchleife){const b=this.doUntilBodyLeadingInset(),x=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+b,n+x,[...a,0]),z=Math.max(this.minWidth(e),r(w)+b),I=s(w)+v+x,S=Math.max(0,z-b),k=ua(a,e,{x:t,y:n,width:z,height:I},v);return k.topBandHeight=x,k.loopBodyLeadingInset=b,k.children=w.map(P=>{const D=at(P);return D.frame.x=t+b,D.frame.width=S,this.stretchDescendantsWidths(D,S)}),k}const l=20,u=this.headerHeight(e),m=e.type===T.endlosschleife?40:0,c=this.layoutList(o,t+l,n+u,[...a,0]),d=Math.max(this.minWidth(e),r(c)+l),h=u+m+s(c),g=Math.max(0,d-l),f=ua(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(b=>{const x=at(b);return x.frame.x=t+l,x.frame.width=g,this.stretchDescendantsWidths(x,g)}),f}layoutMultiway(e,t,n,a){const s=this.headerHeight(e),r=e.cases??[],o=Math.max(1,r.length),l=Math.max(this.minWidth(e)/o,132);let u=[],m=[],c=0,d=0;if(r.forEach((b,x)=>{const v=t+c,w=this.layoutList(b.elements,v,n+s,[...a,x]),z=Math.max(0,...w.map(k=>k.frame.width));let I;e.type===T.verzweigung&&o===2?I=Math.max(z,(x===0?"true":"false").length*this.metrics.charWidth+24):I=Math.max(l,z);const S=w.reduce((k,P)=>k+P.frame.height,0);d=Math.max(d,S),u.push({x:v,y:n+s,width:I,height:S}),m.push(w.map(k=>{const P=at(k);return P.frame.x=v,P.frame.width=I,this.stretchDescendantsWidths(P,I)})),c+=I}),e.type===T.verzweigung&&o===2&&u.length===2&&!r.some(b=>_o(b.elements))){const b=Math.max(u[0].width,u[1].width),x=t,v=t+b,w=v-u[1].x;u[0]={...u[0],x,width:b},u[1]={...u[1],x:v,width:b},c=b*2,m[0]=m[0].map(z=>{const I=at(z);return I.frame.x=x,I.frame.width=b,this.stretchDescendantsWidths(I,b)}),m[1]=m[1].map(z=>{const I=jo(z,w);return I.frame.width=b,this.stretchDescendantsWidths(I,b)})}if(m.length>0){const b=k3(m,n+s);m=b.columns.map(x=>x.map(v=>this.stretchLoopBodiesVertically(v)));for(let x=0;x0?Math.max(...b.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const b=h/c;let x=t;const v=[],w=[];u.forEach((z,I)=>{const S=z.width*b;w.push(m[I].map(k=>{const P=at(k);return P.frame.x=x,P.frame.width=S,this.stretchDescendantsWidths(P,S)})),v.push({x,y:z.y,width:S,height:z.height}),x+=S}),u=v,m=w,c=x-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=ua(a,e,{x:t,y:n,width:h,height:s+d},s);return f.caseColumnFrames=u,f.dividerX=u.length>0?u[u.length-1].x:t+c-g,f.dividerYInset=e.type===T.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function _o(i){return i.some(e=>ui(e.type)||_o(e.loopBody??[])||(e.cases??[]).some(t=>_o(t.elements)))}function vh(i,e){if(Math.abs(e)<=1e-4)return i;const t=at(i),n=a=>{const s=at(a);return s.frame.y+=e,vh(s,e)};return t.columns?(t.columns=t.columns.map(a=>a.map(n)),t.children=t.columns.flat()):t.children=t.children.map(n),t}function jo(i,e){if(Math.abs(e)<=1e-4)return i;const t=at(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>jo(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>jo(n,e)),t}function k3(i,e){if(i.length<2)return{columns:i,columnHeights:i.map(u=>u.reduce((m,c)=>m+c.frame.height,0))};const t=.5,n=[e];for(const u of i)for(const m of u)n.push(m.frame.y+m.frame.height);const a=Math.max(...n);n.push(a),n.sort((u,m)=>u-m);let s=[];for(const u of n)s.length>0&&Math.abs(u-s[s.length-1])<=t||s.push(u);(s.length===0||Math.abs(s[0]-e)>t)&&s.unshift(e),s.length===0?s=[e,a]:s[s.length-1]{let c=Math.max(0,m);for(;c{let g=at(d);const f=s[c],b=d.frame.y+d.frame.height,x=h===u.length-1?s.length-1:r(b,c+1),v=s[x],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=vh(g,w),m.push(g),c=x}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const S3=[{item:"anweisung",label:"Anweisung"},{item:"verzweigung",label:"Verzweigung"},{item:"fallauswahl",label:"Fallauswahl"},{item:"forZaehlSchleife",label:"For-Schleife"},{item:"whileSchleife",label:"While-Schleife"},{item:"doUntilSchleife",label:"Do-while-Schleife"},{item:"endlosschleife",label:"Endlosschleife"},{item:"aufruf",label:"Aufruf"},{item:"aussprung",label:"Aussprung"}];function zu(i){const e=sn;switch(i){case"anweisung":return Ce(T.anweisung);case"verzweigung":return Ce(T.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return Ce(T.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return Ce(T.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return Ce(T.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return Ce(T.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return Ce(T.endlosschleife,{loopBody:[e()]});case"aussprung":return Ce(T.aussprung);case"aufruf":return Ce(T.aufruf)}}function cs(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function Co(i){const e=i.split(";").filter(n=>n!=="");if(e.length===1&&e[0]==="-1")return"";let t="";for(const n of e){if(!/^[+-]?\d+$/.test(n))continue;const a=Number(n);a!==-1&&(a<0||a>1114111||a>=55296&&a<=57343||(t+=String.fromCodePoint(a)))}return t}class Iu extends Error{}function n0(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Iu("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Iu("Invalid XML: root element is not .");const n={caption:Su(t,"caption")??"",elements:Po(t)},a=Su(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=fi(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=fi(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function d1(i){const e=(n,a)=>a===void 0?"":` ${n}="${yh(a)}"`;let t=` `;t+=" `;for(const n of i.elements)t+=Ao(n," ");return t+=` `,t}function Ao(i,e){let t=`${e} -`;for(const n of i.textLines)t+=`${e} ${S3(cs(n))} +`;for(const n of i.textLines)t+=`${e} ${T3(cs(n))} `;if(i.loopBody){t+=`${e} `;for(const n of i.loopBody)t+=Ao(n,e+" ");t+=`${e} -`}if(i.cases)for(const n of i.cases){t+=`${e} +`}if(i.cases)for(const n of i.cases){t+=`${e} `;for(const a of n.elements)t+=Ao(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function vh(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function S3(i){return i.replace(/&/g,"&").replace(//g,">")}function ku(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Qa(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function Po(i){const e=[];for(const t of Qa(i,"strelem")){const n=T3(t);n&&e.push(n)}return e}function T3(i){const e=fi(i,"typ");if(e===void 0||T[e]===void 0)return;const t={type:e,zoomX:fi(i,"zx")??0,zoomY:fi(i,"zy")??0,textLines:Qa(i,"text").map(o=>Co((o.textContent??"").trim()))},n=Tu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=Tu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Qa(i,"schleifeninhalt")[0];if(s){const o=Po(s);o.length>0&&(t.loopBody=o)}const r=Qa(i,"fall").map(o=>({name:Co(o.getAttribute("fallname")??""),elements:Po(o)}));return r.length>0&&(t.cases=r),t}function Su(i,e){const t=i.getAttribute(e);return t===null?void 0:Co(t)}function fi(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function Tu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const _3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function yh(i){switch(i){case T.forSchleife:case T.whileSchleife:case T.doUntilSchleife:case T.endlosschleife:return"loop";case T.verzweigung:case T.fallauswahl:return"if";default:return}}function Te(i,e={}){const t=document.createElementNS(_3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class wh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Te("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":ar,"font-size":this.fontSize,class:"diagram"});s.append(Te("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Te("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Te("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Te("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Te("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=pu(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Te("text",{x:n,y:a+yu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=pu(t);if(r){const o=Te("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Te("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=yu(this.fontSize,s?"bold":"medium"),l=Te("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===T.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var P;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===T.verzweigung||l.type===T.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&Do(e.idPath,n),g=$l(l),f=Te("g",{"data-path":e.idPath.join(",")});t.append(f);const b=this.usesSimulationHighlight,x=l.backgroundColor,v=x&&x.a>0?`rgba(${x.r}, ${x.g}, ${x.b}, ${x.a/255})`:"white",w=h&&(b||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=yh(l.type)??(l.type===T.leerElement?r:"method"),I=Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const S=Ee.callSideBarInset;if(l.type===T.aufruf?(this.line(f,[[o.x+S,o.y],[o.x+S,m]]),this.line(f,[[u-S,o.y],[u-S,m]])):l.type===T.aussprung&&this.line(f,[[o.x+S,o.y],[o.x,o.y+o.height/2],[o.x+S,m]]),c&&e.dividerX!==void 0){const D=e.dividerX,A=this.roofMetrics(e,o,d,D),B=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[A.apex.x,A.apex.y],[u,o.y]]),l.type===T.fallauswahl&&this.line(f,[[o.x,A.roofBottom],[u,A.roofBottom]]);let L;C+B<=A.maxTextBottom?L=C:L=Math.max(o.y+2,A.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((F,Y)=>{const ne=this.textWidth(F);let X;if(l.type===T.verzweigung){const he=o.x+Ee.cellTextInsetX,ae=u-ne-Ee.cellTextInsetX;X=Math.min(Math.max(D-ne/2,he),ae)}else X=o.x+o.width/2-ne/2;this.drawKeywordLine(f,F,X,L+Y*this.lineHeight)})}else if(l.type!==T.doUntilSchleife)if(l.type===T.anweisung||l.type===T.aufruf||l.type===T.aussprung){const D=Ee.cellTextInsetX;let A=o.x+D,B=u-D;l.type===T.aufruf?(A=o.x+S+Ee.callTextInsetFromSideBar,B=u-S-Ee.callTextInsetFromSideBar):l.type===T.aussprung&&(A=o.x+S+D);const C=Math.max(0,B-A);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const F of g)this.drawKeywordLine(f,F,A+(C-this.textWidth(F))/2,L),L+=this.lineHeight}else{const D=Math.max(1,g.length)*this.lineHeight;let A=s===T.doUntilSchleife?o.y+o.height/2-D/2:o.y+Ee.cellTextInsetY;for(const B of g)this.drawKeywordLine(f,B,o.x+Ee.cellTextInsetX,A),A+=this.lineHeight}e.children.forEach((D,A)=>{const B=l.type===T.doUntilSchleife&&A===0?{top:!0,left:!0}:{};this.drawNode(D,t,n,B,l.type,z)});const k=Te("g");if(t.append(k),l.type===T.doUntilSchleife){const D=((P=e.children[0])==null?void 0:P.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(k,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const A=m-e.headerBandHeight;this.line(k,[[D,A],[u,A]]),this.line(k,[[D,o.y],[D,A]]);let B=A+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(k,C,o.x+Ee.cellTextInsetX,B),B+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const D=this.roofMetrics(e,o,d,e.dividerX),A=D.apex;e.caseColumnFrames.forEach((C,L)=>{if(L>=e.caseColumnFrames.length-1)return;const F=C.x+C.width,Y=j3(F,o,A),ne=Number.isFinite(Y)?Math.min(Math.max(Y,o.y),m):o.y;this.line(k,[[F,m],[F,ne]])});const B=l.cases;if(B&&B.length===e.caseColumnFrames.length){const C=l.type===T.fallauswahl?D.roofBottom-6:o.y+d-8,L=Ee.branchLabelInsetX;if(l.type===T.verzweigung&&B.length===2){this.drawLabel(k,"true",o.x+L,C,!0,"bottom");const F=e.caseColumnFrames[1],Y=this.measure("false",this.fontSize,"bold");this.drawLabel(k,"false",F.x+F.width-L-Y,C,!0,"bottom")}else B.forEach((F,Y)=>{const ne=e.caseColumnFrames[Y],X=["default","true","false"].includes(F.name.toLowerCase()),he=this.measure(F.name,this.fontSize,X?"bold":"medium");this.drawLabel(k,F.name,ne.x+ne.width/2-he/2,C,X,"bottom")})}}h&&k.append(Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:b?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function j3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function Do(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function C3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function ds(i){var e,t;return{...i,textLines:$l(i),loopBody:(e=i.loopBody)==null?void 0:e.map(ds),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(ds)}))}}const A3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],zh=["de","en","pt-PT"],Ih=A3.filter(i=>zh.includes(i.code)),_u=i=>zh.includes(i),P3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),kh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>ee(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),D3=Object.assign({"../i18n/ar.strings":()=>ee(()=>import("./ar-B37uSeni.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>ee(()=>import("./da-BOu8fAad.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>ee(()=>import("./de-B--hZiad.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>ee(()=>import("./el-gg2XQg4B.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>ee(()=>import("./en-CyL8rJ-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>ee(()=>import("./es-pM1vcD9J.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>ee(()=>import("./fr-4jpJiELE.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>ee(()=>import("./he-D0hfYxbO.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>ee(()=>import("./it-DvTA5OAG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>ee(()=>import("./ja-B9gt74zl.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>ee(()=>import("./ko-CsUr1hf8.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>ee(()=>import("./nb-CevhvW4M.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>ee(()=>import("./nl-BsXYXKpN.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>ee(()=>import("./pl-DzI5OyWY.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>ee(()=>import("./pt-PT-Cr31YzEm.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>ee(()=>import("./ru-DicU-xti.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>ee(()=>import("./sv-CCQFxpqQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>ee(()=>import("./tr-BrQzU5M5.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>ee(()=>import("./uk-CgoU8BhR.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>ee(()=>import("./zh-Hans-C89x22CL.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>ee(()=>import("./zh-Hant-wLNOkM_A.js"),[],import.meta.url).then(i=>i.default)});function Ua(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Sh(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` -`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function Bo(i){const e=i==="java"?Ua(kh,"/Java.strings"):Ua(P3,`/${i}.lproj/Localizable.strings`),t=Ua(D3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Sh(await a()))n.set(s,r);return n}let Th="en",_h=new Map,e1=new Map;const hs="appLanguageCode",i0="visustruct.keywords";let Oo=new Map,a0=!1;const B3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function O3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(hs)==="java";return i&&(localStorage.setItem(hs,"en"),localStorage.setItem(i0,"1")),i}catch{return!1}}function M3(){try{return localStorage.getItem(i0)==="1"}catch{return!1}}async function jh(i,e=!0){if(i&&Oo.size===0){e1.size===0&&(e1=await Bo("en"));const t=Ua(kh,"/Java.strings");if(t)for(const[n,a]of Sh(await t()))B3(n)&&a!==e1.get(n)&&Oo.set(n,a)}if(a0=i,e)try{localStorage.setItem(i0,i?"1":"0")}catch{}}function Z3(){return a0}function L3(){if(O3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&_u(i))return i;try{const e=localStorage.getItem(hs);if(e&&_u(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=Ih.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Ch(i,e=!0){if(e1.size===0&&(e1=await Bo("en")),_h=i==="en"?e1:await Bo(i),Th=i,e)try{localStorage.setItem(hs,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function o1(){return Th}function p(i,...e){const t=(a0?Oo.get(i):void 0)??_h.get(i)??e1.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const gs=243,W3=244,Ah=40,Pr=4,E3=1;function s0(i){const e=i.length,t=gs+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([gs,t,e&255,e>>8,...i,n,W3])}function N3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return s0([Ah,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function F3(i){if(i[0]!==Ah||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:J3(t[1].trim())}:void 0}function R3(i){const e=[];for(;;){const t=i.indexOf(gs);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(gs+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.length/g,">")}function T3(i){return i.replace(/&/g,"&").replace(//g,">")}function ku(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Qa(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function Po(i){const e=[];for(const t of Qa(i,"strelem")){const n=_3(t);n&&e.push(n)}return e}function _3(i){const e=fi(i,"typ");if(e===void 0||T[e]===void 0)return;const t={type:e,zoomX:fi(i,"zx")??0,zoomY:fi(i,"zy")??0,textLines:Qa(i,"text").map(o=>Co((o.textContent??"").trim()))},n=Tu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=Tu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Qa(i,"schleifeninhalt")[0];if(s){const o=Po(s);o.length>0&&(t.loopBody=o)}const r=Qa(i,"fall").map(o=>({name:Co(o.getAttribute("fallname")??""),elements:Po(o)}));return r.length>0&&(t.cases=r),t}function Su(i,e){const t=i.getAttribute(e);return t===null?void 0:Co(t)}function fi(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function Tu(i){if(i===null||!/^[+-]?\d+$/.test(i))return;const e=Number(i);if(e<-2147483648||e>2147483647)return;const t=e>>>0;return{a:t>>>24&255,r:t>>>16&255,g:t>>>8&255,b:t&255}}const j3="http://www.w3.org/2000/svg",Ee={diagramLineWidth:2,outerFrameLineWidth:2,selectionLineWidth:3.5,canvasOuterMargin:16,cellTextInsetX:18,cellTextInsetY:15,multiHeaderFirstLineY:14,branchLabelInsetX:10,fallauswahlCaseLabelBand:26,callSideBarInset:14,callTextInsetFromSideBar:20,loopBodyLeadingInset:20};function wh(i){switch(i){case T.forSchleife:case T.whileSchleife:case T.doUntilSchleife:case T.endlosschleife:return"loop";case T.verzweigung:case T.fallauswahl:return"if";default:return}}function Te(i,e={}){const t=document.createElementNS(j3,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class zh{constructor(e,t){y(this,"usesSimulationHighlight",!1);y(this,"fillsSelection",!1);this.metrics=e,this.measure=t}get lineHeight(){return this.metrics.lineHeight}get fontSize(){return this.metrics.fontSize}render(e,t,n,a=Ee.canvasOuterMargin){const s=Te("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":ar,"font-size":this.fontSize,class:"diagram"});s.append(Te("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(Te("rect",{x:r,y:r,width:e.canvasSize.width-2*r-1,height:e.canvasSize.height-2*r-1,fill:"none",stroke:"black","stroke-width":Ee.outerFrameLineWidth}));const o=Te("g");for(const l of e.elements)this.drawNode(l,o,n,{},void 0,"method");return s.append(o),s}line(e,t){e.append(Te("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth,"stroke-linejoin":"miter"}))}strokeCellBorder(e,t,n){const a=t.x,s=t.y,r=t.x+t.width,o=t.y+t.height;if(!n.top&&!n.left&&!n.bottom&&!n.right){e.append(Te("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Ee.diagramLineWidth}));return}n.top||this.line(e,[[a,s],[r,s]]),n.right||this.line(e,[[r,s],[r,o]]),n.bottom||this.line(e,[[r,o],[a,o]]),n.left||this.line(e,[[a,o],[a,s]])}textWidth(e){const t=pu(e);return t?this.measure(t.keyword,this.fontSize,"bold")+(t.rest===""?0:this.measure(" "+t.rest,this.fontSize,"medium")):this.measure(e,this.fontSize,"medium")}drawKeywordLine(e,t,n,a){const s=Te("text",{x:n,y:a+yu(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=pu(t);if(r){const o=Te("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=Te("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=yu(this.fontSize,s?"bold":"medium"),l=Te("text",{x:n,y:r==="top"?a+o.ascent:a-o.descent,"font-weight":s?700:500});l.style.whiteSpace="pre",l.textContent=t,e.append(l)}roofMetrics(e,t,n,a){const s=t.y+n,r=e.dividerYInset??0,o=12,l=Math.max(e.element.textLines.length,1)*this.lineHeight,u=t.y+Ee.multiHeaderFirstLineY;if(e.element.type===T.fallauswahl){const c=Math.max(Ee.fallauswahlCaseLabelBand,this.lineHeight+10),d=s-c,h=Math.min(s+r,d-8),g=Math.max(h,u+l+6);return{apex:{x:a,y:g},maxTextBottom:d-o,roofBottom:s}}const m={x:a,y:s+r};return{apex:m,maxTextBottom:m.y-o,roofBottom:s}}drawNode(e,t,n,a,s,r){var P;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===T.verzweigung||l.type===T.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&Do(e.idPath,n),g=$l(l),f=Te("g",{"data-path":e.idPath.join(",")});t.append(f);const b=this.usesSimulationHighlight,x=l.backgroundColor,v=x&&x.a>0?`rgba(${x.r}, ${x.g}, ${x.b}, ${x.a/255})`:"white",w=h&&(b||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,z=wh(l.type)??(l.type===T.leerElement?r:"method"),I=Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&z&&I.setAttribute("class",`ns-scope ns-scope-${z}`),f.append(I),this.strokeCellBorder(f,o,a);const S=Ee.callSideBarInset;if(l.type===T.aufruf?(this.line(f,[[o.x+S,o.y],[o.x+S,m]]),this.line(f,[[u-S,o.y],[u-S,m]])):l.type===T.aussprung&&this.line(f,[[o.x+S,o.y],[o.x,o.y+o.height/2],[o.x+S,m]]),c&&e.dividerX!==void 0){const D=e.dividerX,A=this.roofMetrics(e,o,d,D),B=Math.max(g.length,1)*this.lineHeight,C=o.y+Ee.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[A.apex.x,A.apex.y],[u,o.y]]),l.type===T.fallauswahl&&this.line(f,[[o.x,A.roofBottom],[u,A.roofBottom]]);let L;C+B<=A.maxTextBottom?L=C:L=Math.max(o.y+2,A.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((F,Y)=>{const ne=this.textWidth(F);let X;if(l.type===T.verzweigung){const he=o.x+Ee.cellTextInsetX,ae=u-ne-Ee.cellTextInsetX;X=Math.min(Math.max(D-ne/2,he),ae)}else X=o.x+o.width/2-ne/2;this.drawKeywordLine(f,F,X,L+Y*this.lineHeight)})}else if(l.type!==T.doUntilSchleife)if(l.type===T.anweisung||l.type===T.aufruf||l.type===T.aussprung){const D=Ee.cellTextInsetX;let A=o.x+D,B=u-D;l.type===T.aufruf?(A=o.x+S+Ee.callTextInsetFromSideBar,B=u-S-Ee.callTextInsetFromSideBar):l.type===T.aussprung&&(A=o.x+S+D);const C=Math.max(0,B-A);let L=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const F of g)this.drawKeywordLine(f,F,A+(C-this.textWidth(F))/2,L),L+=this.lineHeight}else{const D=Math.max(1,g.length)*this.lineHeight;let A=s===T.doUntilSchleife?o.y+o.height/2-D/2:o.y+Ee.cellTextInsetY;for(const B of g)this.drawKeywordLine(f,B,o.x+Ee.cellTextInsetX,A),A+=this.lineHeight}e.children.forEach((D,A)=>{const B=l.type===T.doUntilSchleife&&A===0?{top:!0,left:!0}:{};this.drawNode(D,t,n,B,l.type,z)});const k=Te("g");if(t.append(k),l.type===T.doUntilSchleife){const D=((P=e.children[0])==null?void 0:P.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Ee.loopBodyLeadingInset);this.drawLabel(k,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const A=m-e.headerBandHeight;this.line(k,[[D,A],[u,A]]),this.line(k,[[D,o.y],[D,A]]);let B=A+this.metrics.doUntilFooterTopInset;for(const C of g)this.drawKeywordLine(k,C,o.x+Ee.cellTextInsetX,B),B+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const D=this.roofMetrics(e,o,d,e.dividerX),A=D.apex;e.caseColumnFrames.forEach((C,L)=>{if(L>=e.caseColumnFrames.length-1)return;const F=C.x+C.width,Y=C3(F,o,A),ne=Number.isFinite(Y)?Math.min(Math.max(Y,o.y),m):o.y;this.line(k,[[F,m],[F,ne]])});const B=l.cases;if(B&&B.length===e.caseColumnFrames.length){const C=l.type===T.fallauswahl?D.roofBottom-6:o.y+d-8,L=Ee.branchLabelInsetX;if(l.type===T.verzweigung&&B.length===2){this.drawLabel(k,"true",o.x+L,C,!0,"bottom");const F=e.caseColumnFrames[1],Y=this.measure("false",this.fontSize,"bold");this.drawLabel(k,"false",F.x+F.width-L-Y,C,!0,"bottom")}else B.forEach((F,Y)=>{const ne=e.caseColumnFrames[Y],X=["default","true","false"].includes(F.name.toLowerCase()),he=this.measure(F.name,this.fontSize,X?"bold":"medium");this.drawLabel(k,F.name,ne.x+ne.width/2-he/2,C,X,"bottom")})}}h&&k.append(Te("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:b?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Ee.selectionLineWidth}))}}function C3(i,e,t){const n=e.y;if(i<=t.x){const s=t.x-e.x;return Math.abs(s)<.5?t.y:n+(t.y-n)/s*(i-e.x)}const a=e.x+e.width-t.x;return Math.abs(a)<.5?t.y:t.y+(n-t.y)/a*(i-t.x)}function Do(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function A3(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function ds(i){var e,t;return{...i,textLines:$l(i),loopBody:(e=i.loopBody)==null?void 0:e.map(ds),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(ds)}))}}const P3=[{code:"de",name:"Deutsch"},{code:"en",name:"English"},{code:"es",name:"Español"},{code:"fr",name:"Français"},{code:"it",name:"Italiano"},{code:"pl",name:"Polski"},{code:"tr",name:"Türkçe"},{code:"ko",name:"한국어"},{code:"ja",name:"日本語"},{code:"el",name:"Ελληνικά"},{code:"uk",name:"Українська"},{code:"ar",name:"العربية"},{code:"ru",name:"Русский"},{code:"he",name:"עברית"},{code:"nl",name:"Nederlands"},{code:"sv",name:"Svenska"},{code:"da",name:"Dansk"},{code:"nb",name:"Norsk bokmål"},{code:"zh-Hans",name:"中文(简体)"},{code:"zh-Hant",name:"中文(繁體)"},{code:"pt-PT",name:"Português"},{code:"java",name:"Java (Keywords)"}],Ih=["de","en","pt-PT"],kh=P3.filter(i=>Ih.includes(i.code)),_u=i=>Ih.includes(i),D3=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>ee(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Sh=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>ee(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),B3=Object.assign({"../i18n/ar.strings":()=>ee(()=>import("./ar-B37uSeni.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>ee(()=>import("./da-BOu8fAad.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>ee(()=>import("./de-B--hZiad.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>ee(()=>import("./el-gg2XQg4B.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>ee(()=>import("./en-CyL8rJ-B.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>ee(()=>import("./es-pM1vcD9J.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>ee(()=>import("./fr-4jpJiELE.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>ee(()=>import("./he-D0hfYxbO.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>ee(()=>import("./it-DvTA5OAG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>ee(()=>import("./ja-B9gt74zl.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>ee(()=>import("./ko-CsUr1hf8.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>ee(()=>import("./nb-CevhvW4M.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>ee(()=>import("./nl-BsXYXKpN.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>ee(()=>import("./pl-DzI5OyWY.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>ee(()=>import("./pt-PT-Cr31YzEm.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>ee(()=>import("./ru-DicU-xti.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>ee(()=>import("./sv-CCQFxpqQ.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>ee(()=>import("./tr-BrQzU5M5.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>ee(()=>import("./uk-CgoU8BhR.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>ee(()=>import("./zh-Hans-C89x22CL.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>ee(()=>import("./zh-Hant-wLNOkM_A.js"),[],import.meta.url).then(i=>i.default)});function Ua(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Th(i){const e=new Map,t=i.replace(/\/\*[\s\S]*?\*\//g,"").replace(/^\s*\/\/.*$/gm,""),n=/"((?:[^"\\]|\\.)*)"\s*=\s*"((?:[^"\\]|\\.)*)"\s*;/g,a=s=>s.replace(/\\(u[0-9a-fA-F]{4}|.)/g,(r,o)=>o==="n"?` +`:o==="t"?" ":o.startsWith("u")&&o.length===5?String.fromCharCode(parseInt(o.slice(1),16)):o);for(const s of t.matchAll(n))e.set(a(s[1]),a(s[2]));return e}async function Bo(i){const e=i==="java"?Ua(Sh,"/Java.strings"):Ua(D3,`/${i}.lproj/Localizable.strings`),t=Ua(B3,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Th(await a()))n.set(s,r);return n}let _h="en",jh=new Map,e1=new Map;const hs="appLanguageCode",i0="visustruct.keywords";let Oo=new Map,a0=!1;const O3=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function M3(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem(hs)==="java";return i&&(localStorage.setItem(hs,"en"),localStorage.setItem(i0,"1")),i}catch{return!1}}function Z3(){try{return localStorage.getItem(i0)==="1"}catch{return!1}}async function Ch(i,e=!0){if(i&&Oo.size===0){e1.size===0&&(e1=await Bo("en"));const t=Ua(Sh,"/Java.strings");if(t)for(const[n,a]of Th(await t()))O3(n)&&a!==e1.get(n)&&Oo.set(n,a)}if(a0=i,e)try{localStorage.setItem(i0,i?"1":"0")}catch{}}function L3(){return a0}function W3(){if(M3())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&_u(i))return i;try{const e=localStorage.getItem(hs);if(e&&_u(e))return e}catch{}for(const e of navigator.languages??[navigator.language]){const t=e.toLowerCase();if(t.startsWith("pt"))return"pt-PT";const n=kh.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Ah(i,e=!0){if(e1.size===0&&(e1=await Bo("en")),jh=i==="en"?e1:await Bo(i),_h=i,e)try{localStorage.setItem(hs,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function o1(){return _h}function p(i,...e){const t=(a0?Oo.get(i):void 0)??jh.get(i)??e1.get(i)??i;if(e.length===0)return t;let n=0;return t.replace(/%(?:(\d+)\$)?[@d]/g,(a,s)=>String(e[s?Number(s)-1:n++]??""))}const gs=243,E3=244,Ph=40,Pr=4,N3=1;function s0(i){const e=i.length,t=gs+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([gs,t,e&255,e>>8,...i,n,E3])}function F3(i,e,t){const n=Array.from(new TextEncoder().encode(i));return s0([Ph,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function R3(i){if(i[0]!==Ph||i.length<6)return;const e=new TextDecoder().decode(Uint8Array.from(i.slice(6))),t=/"ret"\s*:\s*([^}]*)\}/.exec(e);return t?{idx:i[2]|i[3]<<8,value:G3(t[1].trim())}:void 0}function J3(i){const e=[];for(;;){const t=i.indexOf(gs);if(t<0){i.length=0;break}if(i.splice(0,t),i.length<4)break;const n=i[2]|i[3]<<8;if(i[1]!==(gs+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.lengthArray.from({length:e},(t,n)=>i>>>8*n&255);function q3(i){let e=0;for(let t=0;t>>0;return bi(e,4)}const Dr=(i,e)=>s0([1,0,Ph,i,...bi(e.length,2),...e]);function Q3(i,e=G3){const t=new TextEncoder().encode(i),n=(4-t.length%K1+K1)%K1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[Dr(1,[0,...bi(a.length,4),...q3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,Y3=i=>i.length===7||i.some((e,t)=>e===Ph&&i[t+1]===240),Dh=()=>typeof navigator>"u"?void 0:navigator.serial,Br=()=>Dh()!==void 0,$3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,sr=(i,e=24)=>$3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Bh=sr("VisuBot",32);class K3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Dh();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Bh))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",sr("Bis bald!")])await this.send(r,Pr,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,Pr,3e4).then(()=>{})}ask(e){return this.send(e,E3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=Q3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(s0(H3),U3),r();for(const l of V3)await this.send(l,Pr,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,Y3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(N3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of R3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=F3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const be=new K3,Oh=5,X3=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Mo=6.5,h1=Math.PI*Mo,tb={cm:{cm:1,one:"cm",many:"cm"},umdrehungen:{cm:h1,one:"Umdrehung",many:"Umdrehungen"},umdrehung:{cm:h1,one:"Umdrehung",many:"Umdrehungen"},rotations:{cm:h1,one:"rotation",many:"rotations"},rotation:{cm:h1,one:"rotation",many:"rotations"},rotações:{cm:h1,one:"rotação",many:"rotações"},rotação:{cm:h1,one:"rotação",many:"rotações"}},nb=["cm","Umdrehungen","rotations"];function ib(i,e,t){const n=tb[t.trim().toLowerCase()];if(!n)return;const a=e*n.cm,s=Zo(i,[a]);if(n.cm===1)return s;const r=e===1?n.one:n.many;return{...s,label:`${ze(e)} ${r} ${i==="forward"?"vorwärts":"rückwärts"} (${ze(a)} cm)`}}const Di={forward:{args:1,defaults:[ju],python:([i])=>`mbot2.straight(${ze(i)})`,label:([i])=>`${ze(i)} cm vorwärts`},backward:{args:1,defaults:[ju],python:([i])=>`mbot2.straight(${ze(-i)})`,label:([i])=>`${ze(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(-i)})`,label:([i])=>`${ze(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(i)})`,label:([i])=>`${ze(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ze(i)}, ${ze(-e)})`,label:([i,e])=>`Räder links ${ze(i)} %, rechts ${ze(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ze(i)}, ${ze(e)}, ${ze(t)})`,label:([i,e,t])=>`LEDs (${ze(i)}, ${ze(e)}, ${ze(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(ps),valid:([i])=>X3(i),python:([i],e)=>`cyberpi.led.on(${ps[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ze(i)}, ${ze(e/1e3)})`,label:([i,e])=>`Ton ${ze(i)} Hz, ${ze(e)} ms`},pause:{args:1,label:([i])=>`${ze(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:eb,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>sr(e),label:(i,e)=>`Bildschirm: ${e}`}},Cu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let r0="en";function ab(i){r0=i==="de"?"de":"en"}const sb=()=>r0;function Mh(i){const e=i.trim().toLowerCase(),t=Cu[e]??Object.values(Cu).find(n=>n.de===e);return t?t[r0]:e}const g1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),Pt={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:g1("a"),isButtonB:g1("b"),isJoystickUp:g1("up"),isJoystickDown:g1("down"),isJoystickLeft:g1("left"),isJoystickRight:g1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function rb(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in Pt&&e.add(t[1]);return[...e]}function ob(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:mb(n)}}function fs(i,e){const t=Di[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function Zo(i,e,t=""){var a;const n=Di[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function Zh(i){return i.map(e=>[e.method,...e.args.map(ze),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function lb(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in Pt))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?Mh(a):a):String(a)}):i}function mb(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Lh(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=mi(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const Wh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],cb=i=>Wh.includes(i),db=100;function Eh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Je extends Error{constructor(e){super(Eh(e)),this.notice=e}}const et=i=>new Je({kind:"unsupportedStatement",text:i}),J=i=>new Je({kind:"invalidExpression",text:i}),w1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Je(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},hb=()=>new Je({kind:"divisionByZero"}),xs=new Map;function gb(i,e){xs.set(i,e)}const Nh=()=>[...xs];function Au(i){return i instanceof Je?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function pb(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function Pu(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):pb(i)}function _e(i){switch(i.kind){case"int":return String(i.value);case"double":return Pu(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(Pu).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+fb(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function fb(i){return i.value.map(e=>"["+e.map(t=>_e(Lo(i.elementType,t))).join(", ")+"]")}function Lo(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function Du(i){return i==="string"?"":i==="boolean"?!1:0}const vs=new WeakMap;let bb=0;function Bu(i){const e=s=>({int:"I",double:"D",boolean:"Z",string:"Ljava.lang.String;"})[s],t=i.kind==="grid"?"[["+e(i.elementType):i.kind==="intArray"?"[I":i.kind==="doubleArray"?"[D":i.kind==="booleanArray"?"[Z":i.kind==="stringArray"?"[Ljava.lang.String;":void 0;if(!t||!("value"in i))return _e(i);const n=i.value;let a=vs.get(n);return a||(a=(Math.imul(++bb,2654435761)>>>0&2147483647).toString(16),vs.set(n,a)),t+"@"+a}function Ou(i,e){const t=vs.get(i);t&&vs.set(e,t)}function Ya(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function xb(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const Tt=i=>({kind:"int",value:i}),_t=i=>({kind:"double",value:i}),o0=i=>i!==void 0&&/\s/u.test(i),ys=i=>new RegExp("\\p{L}","u").test(i),ci=i=>new RegExp("\\p{N}","u").test(i);function xi(i){const e=Array.from(i);return e.length===0||!(ys(e[0])||e[0]==="_")?!1:e.every(t=>ys(t)||ci(t)||t==="_")}function nn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function Mu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function ut(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` -`)}function Zu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function l0(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function ws(i,e){const t=Array.from(i),n=Array.from(e),a=l0(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function vb(i){const e=Array.from(i),t=l0(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function rr(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(rr(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function ma(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||o0(n[0])||n[0]==="("))continue;let a=n.trim();const s=Fh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function z1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!xi(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function wb(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(rr(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:ws(s,",")}}function Lu(i){return xi(i)||z1(i)!==void 0}function Or(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw J(i);return e.push(t),e}function zb(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Wu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw J(i)}else if(!ci(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw J(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ys(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function t1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Nu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function Eo(i){const e=i.map(t=>t1(t).trim());return e.length===1&&e[0].includes(";")?Nu(e[0].split(";").map(t=>t.trim())):Nu(e)}const ht=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function $t(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case T.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case T.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case T.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case T.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:Eo(s.textLines)});break;case T.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case T.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case T.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case T.aussprung:a({path:o,text:l,kind:"jump"});break;case T.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function kb(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Je({kind:"wholeNumberExpected"});return Tt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Je({kind:"numberExpected"});return _t(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Je({kind:"booleanExpected"})}}}function Fu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function Sb(i,e){for(let t=0;tt===e.path[n])}function St(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(t1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:nn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:nn(e[1]),name:e[2],params:t}}function Rh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(t1(i));if(e)return{targetType:e[1]?nn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:ws(e[4],",")}}function zs(i){var t,n;const e=t1(i);return((t=St(e))==null?void 0:t.name)??((n=Rh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Bi{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",Fu());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=$t(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${_e(n)}`}catch(n){this.state.inputErrorNotice=Au(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw et(e.text);const n=ma(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=$t(t[s].elements,[...e.path,s],ht(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw et(e.text);const n=ma(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=Sb(this.evaluateSwitchSelector(n),t)??t.length-1;const s=$t(t[a].elements,[...e.path,a],ht(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=Eo(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...ht(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=Eo(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...s,{...ht(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...ht(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=ma(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...a,{...ht(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...t,{...ht(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=ma(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...a,{...ht(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...t,{...ht(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(zs(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=Rh(t),s=St(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Je({kind:"callArguments",text:(s==null?void 0:s.name)??zs(t)});if(this.callDepth>=db)throw new Je({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?w1(g,this.state.variables):J(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw J(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=$t(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():_e(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=t1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw J(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${_e(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Je({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?_t(a.value):r==="string"?{kind:"string",value:_e(a)}:a;if(Mu(o)!==r)throw J(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${_e(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v),I=(r==null?void 0:r[1])==="print",S=I&&z.endsWith(` + pass`],bi=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function Q3(i){let e=0;for(let t=0;t>>0;return bi(e,4)}const Dr=(i,e)=>s0([1,0,Dh,i,...bi(e.length,2),...e]);function U3(i,e=H3){const t=new TextEncoder().encode(i),n=(4-t.length%K1+K1)%K1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[Dr(1,[0,...bi(a.length,4),...Q3(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,$3=i=>i.length===7||i.some((e,t)=>e===Dh&&i[t+1]===240),Bh=()=>typeof navigator>"u"?void 0:navigator.serial,Br=()=>Bh()!==void 0,K3=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,sr=(i,e=24)=>K3("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Oh=sr("VisuBot",32);class X3{constructor(){y(this,"port");y(this,"writer");y(this,"reader");y(this,"loop");y(this,"rx",[]);y(this,"idx",1);y(this,"frameWaiters",[]);y(this,"waiting",new Map);y(this,"queue",Promise.resolve());y(this,"listeners",new Set);y(this,"error");y(this,"connecting",!1)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}changed(){for(const e of this.listeners)e()}get connected(){return this.writer!==void 0&&!this.connecting}async connect(){const e=Bh();if(!e)throw new Error("Web Serial");const t=await e.requestPort();await t.open({baudRate:115200}),this.port=t,this.writer=t.writable.getWriter(),this.error=void 0,this.connecting=!0,this.changed(),this.loop=this.readLoop(),window.addEventListener("pagehide",()=>void this.disconnect(),{once:!0}),await new Promise(n=>setTimeout(n,3e3)),this.writer&&(this.rx.length=0,this.connecting=!1,this.changed(),await this.run(Oh))}async disconnect(e){if(!this.port)return this.error=e,this.changed();if(!e&&this.writer&&!this.connecting)for(const r of["mbot2.EM_stop('ALL')","cyberpi.led.off()",sr("Bis bald!")])await this.send(r,Pr,2e3).catch(()=>{});const t=this.port,n=this.writer,a=this.reader,s=this.loop;this.port=this.writer=this.reader=this.loop=void 0,this.error=e,this.connecting=!1;for(const r of this.waiting.values())r.reject(new Error(e??"getrennt"));this.waiting.clear();try{await(a==null?void 0:a.cancel()),await s,await(n==null?void 0:n.close())}catch{}try{n==null||n.releaseLock(),await t.close()}catch(r){console.warn("[mBot2] Schließen",r.message)}this.changed()}run(e){return this.send(e,Pr,3e4).then(()=>{})}ask(e){return this.send(e,N3,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=U3(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(s0(V3),Y3),r();for(const l of q3)await this.send(l,Pr,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,$3),r();s=a-3,await o(),await this.restart()}sendFrame(e,t){const n=this.queue.then(async()=>{for(let a=0;a<3;a++){if(!this.writer)throw new Error("nicht verbunden");let s=()=>{};const r=new Promise(u=>s=u),o={match:t,resolve:s};this.frameWaiters.push(o),await this.writer.write(e);const l=await Promise.race([r.then(()=>!0),new Promise(u=>setTimeout(()=>u(!1),3e3))]);if(this.frameWaiters=this.frameWaiters.filter(u=>u!==o),l)return}throw new Error("keine Antwort")});return this.queue=n.catch(()=>{}),n}async restart(){const e=this.port;await this.disconnect("restart"),this.error=void 0,await new Promise(t=>setTimeout(t,300)),await e.open({baudRate:115200}),await new Promise(t=>setTimeout(t,500)),await e.close(),this.changed()}send(e,t,n){const a=this.queue.then(()=>new Promise((s,r)=>{if(!this.writer)return r(new Error("nicht verbunden"));const o=this.idx;this.idx=this.idx%65535+1;const l=setTimeout(()=>{this.waiting.delete(o),r(new Error("keine Antwort"))},n);this.waiting.set(o,{resolve:u=>(clearTimeout(l),s(u)),reject:u=>(clearTimeout(l),r(u))}),this.writer.write(F3(e,t,o)).catch(u=>{this.waiting.delete(o),r(u)})}));return this.queue=a.catch(()=>{}),a}async readLoop(){var e;for(;(e=this.port)!=null&&e.readable;){const t=this.port.readable.getReader();this.reader=t;try{for(;;){const{value:n,done:a}=await t.read();if(a)break;this.rx.push(...n);for(const s of J3(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=R3(s);if(!o)continue;const l=this.waiting.get(o.idx);this.waiting.delete(o.idx),l==null||l.resolve(o.value)}}}catch(n){const a=["BufferOverrunError","FramingError","BreakError","ParityError"].includes(n.name);console.warn("[mBot2] Lesefehler",n.name,n.message),!a&&this.port&&this.disconnect(n.message)}finally{t.releaseLock()}if(!this.writer)break}}}const be=new X3,Mh=5,eb=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),Mo=6.5,h1=Math.PI*Mo,nb={cm:{cm:1,one:"cm",many:"cm"},umdrehungen:{cm:h1,one:"Umdrehung",many:"Umdrehungen"},umdrehung:{cm:h1,one:"Umdrehung",many:"Umdrehungen"},rotations:{cm:h1,one:"rotation",many:"rotations"},rotation:{cm:h1,one:"rotation",many:"rotations"},rotações:{cm:h1,one:"rotação",many:"rotações"},rotação:{cm:h1,one:"rotação",many:"rotações"}},ib=["cm","Umdrehungen","rotations"];function ab(i,e,t){const n=nb[t.trim().toLowerCase()];if(!n)return;const a=e*n.cm,s=Zo(i,[a]);if(n.cm===1)return s;const r=e===1?n.one:n.many;return{...s,label:`${ze(e)} ${r} ${i==="forward"?"vorwärts":"rückwärts"} (${ze(a)} cm)`}}const Di={forward:{args:1,defaults:[ju],python:([i])=>`mbot2.straight(${ze(i)})`,label:([i])=>`${ze(i)} cm vorwärts`},backward:{args:1,defaults:[ju],python:([i])=>`mbot2.straight(${ze(-i)})`,label:([i])=>`${ze(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(-i)})`,label:([i])=>`${ze(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${ze(i)})`,label:([i])=>`${ze(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${ze(i)}, ${ze(-e)})`,label:([i,e])=>`Räder links ${ze(i)} %, rechts ${ze(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${ze(i)}, ${ze(e)}, ${ze(t)})`,label:([i,e,t])=>`LEDs (${ze(i)}, ${ze(e)}, ${ze(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(ps),valid:([i])=>eb(i),python:([i],e)=>`cyberpi.led.on(${ps[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${ze(i)}, ${ze(e/1e3)})`,label:([i,e])=>`Ton ${ze(i)} Hz, ${ze(e)} ms`},pause:{args:1,label:([i])=>`${ze(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:tb,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>sr(e),label:(i,e)=>`Bildschirm: ${e}`}},Cu={red:{de:"rot",en:"red"},green:{de:"grün",en:"green"},blue:{de:"blau",en:"blue"},yellow:{de:"gelb",en:"yellow"},cyan:{de:"türkis",en:"cyan"},purple:{de:"lila",en:"purple"},white:{de:"weiß",en:"white"},black:{de:"schwarz",en:"black"}};let r0="en";function sb(i){r0=i==="de"?"de":"en"}const rb=()=>r0;function Zh(i){const e=i.trim().toLowerCase(),t=Cu[e]??Object.values(Cu).find(n=>n.de===e);return t?t[r0]:e}const g1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),Pt={getDistance:{python:"mbuild.ultrasonic2.get(1)",simulated:100},getLine:{python:"mbuild.quad_rgb_sensor.get_line_sta('all', 1)",simulated:0},isLineLeft:{python:"mbuild.quad_rgb_sensor.is_line('L1', 1)",simulated:!1},isLineRight:{python:"mbuild.quad_rgb_sensor.is_line('R1', 1)",simulated:!1},getColor:{python:"mbuild.quad_rgb_sensor.get_color_sta('L1', 1)",simulated:"white"},isButtonA:g1("a"),isButtonB:g1("b"),isJoystickUp:g1("up"),isJoystickDown:g1("down"),isJoystickLeft:g1("left"),isJoystickRight:g1("right"),getBrightness:{python:"cyberpi.get_bri()",simulated:50},getLoudness:{python:"cyberpi.get_loudness('maximum')",simulated:0},getPitch:{python:"cyberpi.get_pitch()",simulated:0},getRoll:{python:"cyberpi.get_roll()",simulated:0},isShaken:{python:"cyberpi.is_shake()",simulated:!1},getBattery:{python:"cyberpi.get_battery()",simulated:100},getTimer:{python:"cyberpi.timer.get()",simulated:0}};function ob(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in Pt&&e.add(t[1]);return[...e]}function lb(i){const e=/^mbot\s*\.\s*led\s*\(([^()]*(?:\([^()]*\)[^()]*)*)\)\s*\.\s*setColor\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(e)return{method:"ledColor",args:[e[1].trim(),e[2].trim()]};const t=/^mbot\s*\.\s*([A-Za-z_]\w*)\s*\(([\s\S]*)\)\s*;?$/u.exec(i.trim());if(!t)return;const n=t[2].trim();return{method:t[1],args:n===""?[]:cb(n)}}function fs(i,e){const t=Di[i];if(!t)return;const n=e.length===0&&t.defaults?t.defaults:e;if(n.length===t.args)return!t.valid||t.valid(n)?n:void 0}function Zo(i,e,t=""){var a;const n=Di[i];return{method:i,args:e,python:(a=n.python)==null?void 0:a.call(n,e,t),waitMs:i==="pause"?Math.max(0,e[0]):void 0,label:n.label(e,t),...n.text?{text:t}:{}}}function Lh(i){return i.map(e=>[e.method,...e.args.map(ze),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function ub(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const c=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let d=0;d{if(!(n in Pt))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?Zh(a):a):String(a)}):i}function cb(i){const e=[];let t=0,n=!1,a=0;for(let s=0;s{const a=t==="turn"?((n+180)%360+360)%360-180:n;if(Math.abs(a)<1e-6)return[];const s=Math.round(Math.abs(a)*100)/100;return t==="drive"?[`${a>0?"forward":"backward"} ${s}`]:[a===-180?"turnRight 180":`${a>0?"turnRight":"turnLeft"} ${s}`]})}function Wh(i){let e=0;const t=i.trim(),n=()=>{const s=[];for(;;){for(;t[e]===" "||t[e]===",";)e++;if(e>=t.length||t[e]===")")return s;const r=/^(\d+)\s*[x×]\s*\(/u.exec(t.slice(e));if(r){e+=r[0].length;const u=n();if(t[e]!==")")throw new Error(`„)“ fehlt in „${i}“`);e++;for(let m=0;ma===i[s%t])){const a=mi(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const Eh=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],db=i=>Eh.includes(i),hb=100;function Nh(i){switch(i.kind){case"finished":return"Simulation finished.";case"infiniteLoopWithoutBody":return"Infinite loop has no body.";case"unsupportedStatement":return`Unsupported statement: ${i.text}`;case"invalidExpression":return`Invalid expression: ${i.text}`;case"unknownVariable":return i.similar?`Unknown variable: ${i.text}. Java is case-sensitive: did you mean ${i.similar}?`:`Unknown variable: ${i.text}`;case"divisionByZero":return"Division by zero.";case"wholeNumberExpected":return"Please enter a whole number.";case"numberExpected":return"Please enter a number.";case"booleanExpected":return"Please enter true or false.";case"subprogramNotFound":return`No open diagram is called ${i.text}. The call was skipped.`;case"callTooDeep":return"Too many nested calls. Does a subprogram call itself?";case"callArguments":return`The call does not match the header of ${i.text}. Check the values in the parentheses.`;case"missingReturn":return`${i.text} ended without returning a value with return.`;case"fileNotFound":return`There is no file called ${i.text}.`;case"endOfFile":return`The file ${i.text} has no more lines.`;case"nullValue":return`${i.text} is null.`;case"other":return i.text}}class Je extends Error{constructor(e){super(Nh(e)),this.notice=e}}const et=i=>new Je({kind:"unsupportedStatement",text:i}),J=i=>new Je({kind:"invalidExpression",text:i}),w1=(i,e)=>{const t=e&&[...e.keys()].find(n=>n!==i&&n.toLowerCase()===i.toLowerCase());return new Je(t?{kind:"unknownVariable",text:i,similar:t}:{kind:"unknownVariable",text:i})},gb=()=>new Je({kind:"divisionByZero"}),xs=new Map;function pb(i,e){xs.set(i,e)}const Fh=()=>[...xs];function Au(i){return i instanceof Je?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function fb(i){if(i===0)return"0";if(!Number.isFinite(i))return Number.isNaN(i)?"nan":i>0?"inf":"-inf";const e=Math.floor(Math.log10(Math.abs(Number(i.toPrecision(12)))));if(e<-4||e>=12){const[n,a]=i.toExponential(11).split("e"),s=n.includes(".")?n.replace(/0+$/,"").replace(/\.$/,""):n,r=Number(a);return`${s}e${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}const t=i.toFixed(Math.max(0,11-e));return t.includes(".")?t.replace(/0+$/,"").replace(/\.$/,""):t}function Pu(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):fb(i)}function _e(i){switch(i.kind){case"int":return String(i.value);case"double":return Pu(i.value);case"string":return i.value;case"boolean":return String(i.value);case"intArray":return"["+i.value.map(String).join(", ")+"]";case"doubleArray":return"["+i.value.map(Pu).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+bb(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function bb(i){return i.value.map(e=>"["+e.map(t=>_e(Lo(i.elementType,t))).join(", ")+"]")}function Lo(i,e){switch(i){case"int":return{kind:"int",value:e};case"double":return{kind:"double",value:e};case"string":return{kind:"string",value:e};case"boolean":return{kind:"boolean",value:e}}}function Du(i){return i==="string"?"":i==="boolean"?!1:0}const vs=new WeakMap;let xb=0;function Bu(i){const e=s=>({int:"I",double:"D",boolean:"Z",string:"Ljava.lang.String;"})[s],t=i.kind==="grid"?"[["+e(i.elementType):i.kind==="intArray"?"[I":i.kind==="doubleArray"?"[D":i.kind==="booleanArray"?"[Z":i.kind==="stringArray"?"[Ljava.lang.String;":void 0;if(!t||!("value"in i))return _e(i);const n=i.value;let a=vs.get(n);return a||(a=(Math.imul(++xb,2654435761)>>>0&2147483647).toString(16),vs.set(n,a)),t+"@"+a}function Ou(i,e){const t=vs.get(i);t&&vs.set(e,t)}function Ya(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function vb(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const Tt=i=>({kind:"int",value:i}),_t=i=>({kind:"double",value:i}),o0=i=>i!==void 0&&/\s/u.test(i),ys=i=>new RegExp("\\p{L}","u").test(i),ci=i=>new RegExp("\\p{N}","u").test(i);function xi(i){const e=Array.from(i);return e.length===0||!(ys(e[0])||e[0]==="_")?!1:e.every(t=>ys(t)||ci(t)||t==="_")}function nn(i){switch(i.toLowerCase()){case"int":return"int";case"double":return"double";case"string":return"string";case"char":return"string";case"boolean":case"bool":return"boolean";default:return}}function Mu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function ut(i){const e=Array.from(i);if(e.length===3&&e[0]==="'"&&e[2]==="'")return e[1];if(e.length<2||e[0]!=='"'||e[e.length-1]!=='"')return;const t=e.slice(1,-1).join("");if(/^(?:[^"\\]|\\.)*$/u.test(t))return t.replaceAll('\\"','"').replaceAll("\\n",` +`)}function Zu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function l0(i){const e=new Array(i.length).fill(!1);let t=0,n=!1,a=!1;return i.forEach((s,r)=>{if(n){a?a=!1:s==="\\"?a=!0:s==='"'&&(n=!1);return}switch(s){case'"':n=!0;break;case"(":case"[":t+=1;break;case")":case"]":t-=1;break;default:e[r]=t===0}}),e}function ws(i,e){const t=Array.from(i),n=Array.from(e),a=l0(t),s=[];let r=[],o=0;for(;ot[o+m]===u)&&a.slice(o,l).every(Boolean)){s.push(r.join("").trim()),r=[],o=l;continue}r.push(t[o]),o+=1}return s.push(r.join("").trim()),s}function yb(i){const e=Array.from(i),t=l0(e);for(let n=0;n=","<=","==","!="].includes(o)&&(a=o)}if(a===void 0&&(e[n]==="<"||e[n]===">")&&(a=e[n]),a===void 0)continue;const s=e.slice(0,n).join("").trim(),r=e.slice(n+a.length).join("").trim();return{lhs:s,op:a,rhs:r}}}function rr(i,e){let t=0,n=!1,a=!1;for(let s=e;se.length||!t.every((r,o)=>e[a+o]===r))continue;const s=a+t.length-1;if(rr(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function ma(i){const e=i.trim();for(const t of["if","while","until","switch"]){if(!e.startsWith(t))continue;const n=e.slice(t.length);if(!(n===""||o0(n[0])||n[0]==="("))continue;let a=n.trim();const s=Rh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function z1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!xi(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function zb(i){const e=i.trim();if(!e.endsWith(")"))return;const t=/^([A-Za-z_]\w*(?:\s*\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*([A-Za-z_]\w*)\s*\(/u.exec(e);if(!t)return;const n=Array.from(e),a=Array.from(t[0]).length-1;if(rr(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:ws(s,",")}}function Lu(i){return xi(i)||z1(i)!==void 0}function Or(i){const e=[];let t="",n=!1,a=!1,s=0;for(const r of i){if(a){t+=r,a=!1;continue}if(r==="\\"){t+=r,a=!0;continue}if(r==='"'){n=!n,t+=r;continue}if(!n&&r==="("&&(s+=1),!n&&r===")"&&(s-=1),r==="+"&&!n&&s===0){e.push(t),t="";continue}t+=r}if(n)throw J(i);return e.push(t),e}function Ib(i){const e=[];let t=0,n="";for(const a of i){if(a==="{"&&(t+=1),a==="}"&&(t-=1),a===","&&t===0){e.push(n),n="";continue}n+=a}return n.trim()!==""&&e.push(n),e}function Wu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw J(i)}else if(!ci(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw J(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ys(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function t1(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Nu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function Eo(i){const e=i.map(t=>t1(t).trim());return e.length===1&&e[0].includes(";")?Nu(e[0].split(";").map(t=>t.trim())):Nu(e)}const ht=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function $t(i,e=[],t={}){const n=[],a=s=>n.push(t.frame?{...s,...t}:s);return i.forEach((s,r)=>{const o=[...e,r],l=s.textLines.join(" ").trim();switch(s.type){case T.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case T.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case T.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case T.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:Eo(s.textLines)});break;case T.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case T.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case T.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case T.aussprung:a({path:o,text:l,kind:"jump"});break;case T.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function Sb(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Je({kind:"wholeNumberExpected"});return Tt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Je({kind:"numberExpected"});return _t(Number(t));case"string":return{kind:"string",value:i};case"boolean":switch(t.toLowerCase()){case"true":case"wahr":return{kind:"boolean",value:!0};case"false":case"falsch":return{kind:"boolean",value:!1};default:throw new Je({kind:"booleanExpected"})}}}function Fu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function Tb(i,e){for(let t=0;tt===e.path[n])}function St(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(t1(i));if(!e)return;const t=[];if(e[3].trim()!=="")for(const n of e[3].split(",")){const a=/^(int|double|String|boolean|char)\s*((?:\[\s*\]){0,2})\s+([A-Za-z_]\w*)$/u.exec(n.trim());if(!a)return;const s=(a[2].match(/\[/gu)??[]).length;t.push({type:nn(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:nn(e[1]),name:e[2],params:t}}function Jh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(t1(i));if(e)return{targetType:e[1]?nn(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:ws(e[4],",")}}function zs(i){var t,n;const e=t1(i);return((t=St(e))==null?void 0:t.name)??((n=Jh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class Bi{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",Fu());y(this,"nextFrame",1);y(this,"callDepth",0);y(this,"frames",new Map);y(this,"peeking",!1);y(this,"robotSensors",{});y(this,"pseudocode");y(this,"decided");y(this,"afterOutput",!1);this.resolveSubprogram=t,this.steps=$t(e.elements),this.pseudocode=!!e.pseudocode}get currentStepPath(){const e=this.steps[this.state.stepIndex];return(e==null?void 0:e.callPath)??(e==null?void 0:e.path)}get canStep(){return!this.state.isHalted&&!this.state.inputRequest&&this.state.stepIndex ${_e(n)}`}catch(n){this.state.inputErrorNotice=Au(n);return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.state.stepIndex+=1,this.state.notice=this.finishedIfAtEnd()}}provideDecision(e){var s;if(((s=this.state.inputRequest)==null?void 0:s.valueType)==="string")return this.state.inputRequest=void 0,this.decided=e.trim(),this.step();const t=e.trim().toLowerCase(),n=["true","wahr","ja","yes","sim","verdadeiro"].includes(t),a=["false","falsch","nein","no","não","nao","falso"].includes(t);if(!n&&!a){this.state.inputErrorNotice={kind:"booleanExpected"};return}this.state.inputRequest=void 0,this.state.inputErrorNotice=void 0,this.decided=n,this.step()}condition(e){if(!this.pseudocode)return this.evaluateBool(e);const t=this.decided;if(typeof t=="boolean")return this.decided=void 0,t;this.state.inputRequest={variableName:"",valueType:"boolean",prompt:`${e} (true/false)`,decision:!0},this.state.inputErrorNotice=void 0,this.state.notice=void 0}finishedIfAtEnd(){return this.state.stepIndex>=this.steps.length?{kind:"finished"}:void 0}splice(e){this.steps.splice(this.state.stepIndex,1,...e)}noticeAfterEntering(e){return e.length>0?void 0:this.finishedIfAtEnd()}executeBranch(e){const t=e.cases;if(!t||t.length<2)throw et(e.text);const n=ma(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=$t(t[s].elements,[...e.path,s],ht(e));this.splice(r),this.state.lastTrace=`${n} -> ${a}`,this.state.notice=this.noticeAfterEntering(r)}executeSwitchSelection(e){const t=e.cases;if(!t||t.length===0)throw et(e.text);const n=ma(e.text);let a;if(this.pseudocode){const r=this.decided;if(typeof r!="string"){const l=t.map(u=>u.name).join(" / ");this.state.inputRequest={variableName:"",valueType:"string",prompt:`${n} (${l})`,decision:!0},this.state.notice=void 0;return}this.decided=void 0;const o=t.findIndex(l=>l.name.trim().toLowerCase()===r.toLowerCase());a=o>=0?o:t.length-1}else a=Tb(this.evaluateSwitchSelector(n),t)??t.length-1;const s=$t(t[a].elements,[...e.path,a],ht(e));this.splice(s),this.state.lastTrace=`${n} -> ${t[a].name}`,this.state.notice=this.noticeAfterEntering(s)}executeForLoopStart(e){if(this.pseudocode)return this.splice([{...e,kind:"whileLoop"}]);const t=Eo(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...ht(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=Eo(e.forParts??[e.text]),n=t[1]===""?"true":t[1],a=this.condition(n);if(a!==void 0)if(this.state.lastTrace=`${n} -> ${a}`,a){const s=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...s,{...ht(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...ht(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}executeForLoopIncrement(e){const t=e.text.trim();t!==""&&this.executeIncrement(t),this.splice([])}executeWhileLoop(e){const t=ma(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...a,{...ht(e),path:e.path,text:e.text,kind:"whileLoop",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(a)}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterDoUntilLoop(e){const t=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...t,{...ht(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=ma(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...a,{...ht(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=$t(e.loopBody??[],[...e.path,0],ht(e));this.splice([...t,{...ht(e),path:e.path,text:e.text,kind:"infiniteLoop",loopBody:e.loopBody}]),this.state.lastTrace="true -> true",this.state.notice=t.length>0?void 0:{kind:"infiniteLoopWithoutBody"}}executeJump(e){const t=e.frame??0,n=o=>o.lengthl===e.path[u]);let a=this.steps.length,s="end";for(let o=this.state.stepIndex+1;o ${s}`,s==="return"&&this.finishFrame(r),this.state.notice=this.finishedIfAtEnd()}executeCall(e){const t=e.text,n=this.resolveSubprogram(zs(t));if(!n){this.splice([]),this.state.lastTrace=`${t} -> ?`,this.state.notice={kind:"subprogramNotFound",text:t},this.state.stepIndex>=this.steps.length&&(this.state.notice={kind:"finished"});return}const a=Jh(t),s=St(n.caption);if(s?((a==null?void 0:a.args.length)??0)!==s.params.length||(a==null?void 0:a.target)!==void 0&&!s.returnType:a!==void 0&&(a.args.length>0||a.target!==void 0))throw new Je({kind:"callArguments",text:(s==null?void 0:s.name)??zs(t)});if(this.callDepth>=hb)throw new Je({kind:"callTooDeep"});const o=new Map,l=[];s==null||s.params.forEach((d,h)=>{const g=a.args[h].trim();if(!d.dims){o.set(d.name,this.evaluateExpression(g,d.type));return}const f=this.state.variables.get(g);if(!f)throw/^[A-Za-z_]\w*$/u.test(g)?w1(g,this.state.variables):J(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw J(g);o.set(d.name,f),l.push({param:d.name,callerName:g})}),this.callDepth+=1;const u={frame:this.nextFrame++,callPath:e.callPath??e.path};s&&(this.frames.set(u.frame,{saved:this.state.variables,header:s,call:a,references:l}),this.state.variables=o);const m=$t(n.elements,[],u);this.splice([...m,{...u,path:e.path,text:t,kind:"callEnd"}]);const c=s==null?void 0:s.params.map((d,h)=>`${d.name} = ${d.dims?a.args[h].trim():_e(o.get(d.name))}`).join(", ");this.state.lastTrace=c?`${t} -> ${c}`:`${t} -> call`}executeCallEnd(e){this.callDepth-=1,this.splice([]),this.state.lastTrace=`${e.text} -> return`,this.finishFrame(e),this.state.notice=this.finishedIfAtEnd()}executeReturn(e){const t=e.frame??0,n=t1(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw J(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${_e(a.returnValue)}`:`${e.text} -> return`;if(t===0){this.steps.splice(this.state.stepIndex),this.state.lastTrace=s,this.state.notice={kind:"finished"};return}let r=this.state.stepIndex+1;for(;r0?new Map(t.saved):t.saved;for(const m of t.references){const c=this.state.variables.get(m.param);c&&n.set(m.callerName,c)}this.state.variables=n;const a=t.returnValue;if(t.header.returnType&&!a)throw new Je({kind:"missingReturn",text:t.header.name});const s=(l=t.call)==null?void 0:l.target;if(!s||!a)return;let r=(u=t.call)==null?void 0:u.targetType;if(!r)try{r=this.inferTargetValueType(s)}catch{r=t.header.returnType}const o=r==="double"&&a.kind==="int"?_t(a.value):r==="string"?{kind:"string",value:_e(a)}:a;if(Mu(o)!==r)throw J(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${_e(o)}`}executeStatement(e){const t=this.state,n=e.trim(),a=n.toLowerCase(),s=this.afterOutput;if(this.afterOutput=!1,a.startsWith("input:")){t.inputRequest=this.parseInputRequest(n,s),t.outputLineOpen=!1,t.inputErrorNotice=void 0;return}const r=/^System\s*\.\s*out\s*\.\s*(println|print)\s*\(([\s\S]*)\)\s*;?$/u.exec(n);if(a.startsWith("output:")||a.startsWith("print:")||r){const v=r?r[2]:n.slice(a.startsWith("output:")?7:6),w=this.peek(()=>this.renderOutputExpression(v)),z=v.trim()===""?"":this.evaluateOutputExpression(v),I=(r==null?void 0:r[1])==="print",S=I&&z.endsWith(` `),[k,...P]=(S?z.slice(0,-1):z).split(` -`);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=k:t.outputLines.push(k),t.outputLines.push(...P),t.outputLineOpen=I&&!S,this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=ob(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(t1(n).trim()),u=l?nn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,Lo(u,Du(u)));t.lastTrace=v.map(w=>`${w} = ${_e(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw et(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let b=g.valueType;if(!b)try{b=this.inferTargetValueType(g.variableName)}catch{b="int"}const x=this.evaluateExpression(d,b);this.assignValue(x,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${_e(x)}`}executeMBotCommand(e,t,n){var r;if((r=Di[e])!=null&&r.text){const o=Di[e];if(t.length!==o.args+1)throw J(n);const l=fs(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw J(n);const u=Zo(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw J(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}if((e==="forward"||e==="backward")&&t.length===2){const o=this.evaluateOutputExpression(t[1]),l=ib(e,this.evaluateDouble(t[0]),o);if(!l)throw J(`${n} (${nb.map(u=>`"${u}"`).join(", ")})`);this.state.robotActions.push(l),this.state.lastTrace=`${n} -> ${l.label}`;return}const a=fs(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw J(n);const s=Zo(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=t1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw J(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw et(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const x=this.fileContent(f).split(/\r?\n/u);x[x.length-1]===""&&x.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:x,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Je({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` -`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=ut(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw J(t)}fileContent(e){const t=this.state.files.get(e)??xs.get(e);if(t===void 0)throw new Je({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw J(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,Tt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,_t(l)),this.state.lastTrace=`${s} = ${_e(r)} ${o} 1 -> ${_e(_t(l))}`;return}throw et(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!xi(r)||!l)throw et(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,Tt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,_t(c)),this.state.lastTrace=`${r} = ${_e(l)} ${u} ${_e(_t(m))} -> ${_e(_t(c))}`;return}throw et(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(z1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&nn(t[0]))n=t[1],a=nn(t[0]);else if(t.length===3&&t[0]==="const"&&nn(t[1]))n=t[2],a=nn(t[1]);else throw et(e);if(!Lu(n))throw et(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw et(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=nn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!Lu(r))throw et(e);const m=ut(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=nn(s),o=n[1];if(!r||!xi(o))throw et(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>ut(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw et(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw J(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return ut(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=zb(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw J(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw et(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw J(o[1]);if(u<0)throw J(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(Du(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw J(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw J(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=z1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=wb(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Je({kind:"nullValue",text:t.target.trim()});const s=ut(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw J(e);const g=ut(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw J(h)},l=d=>{if(r[d]===void 0)throw J(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw J(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw J(e);return d};switch(t.method){case"length":return u(0),Tt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw J(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw J(e);return t.args[0]},a=s=>{const r=ut(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw J(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Je({kind:"wholeNumberExpected"});return Tt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Je({kind:"numberExpected"});return _t(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Arrays.toString":case"Arrays.deepToString":{const s=this.state.variables.get(n().trim());if(!s||!Ya(s))throw J(e);return s.kind==="grid"&&t.method==="toString"?{kind:"string",value:"["+s.value.map(o=>Bu({kind:`${s.elementType}Array`,value:o})).join(", ")+"]"}:{kind:"string",value:_e(s)}}case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw J(e);const r=ut(s[1]),o=xs.get(r);if(o===void 0)throw new Je({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=z1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=rr(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?Wo(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw w1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw J(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw J(a);return Lo(n.elementType,r[t[1]])}if(t.length!==1)throw J(a);const s=t[0];if(!Ya(n))throw J(e);if(s>=n.value.length)throw J(a);switch(n.kind){case"intArray":return Tt(n.value[s]);case"doubleArray":return _t(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw J(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return Mu(n);const a=z1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw w1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw J(a.arrayName)}throw et(e)}assignValue(e,t){const n=t.trim(),a=z1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw w1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw J(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||Ya(e))throw J(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,Ou(r.value,m),this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw J(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw J(n);if(o>=l.value.length)throw J(n);l.value[o]=e.value,Ou(r.value,l.value),this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Eu(t)&&Or(t).every(s=>ut(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Or(this.withSensors(e))){const r=s.trim(),o=ut(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Eu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?Tt(n.value+l.value):_t(n.value+l.value):n=l;continue}a=(a??(n?_e(n):""))+Bu(l),n=void 0}return a??(n?_e(n):"")}renderOutputExpression(e){return Or(e).map(t=>{const n=t.trim();if(ut(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return _e(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return Tt(this.evaluateInt(e));case"double":return _t(this.evaluateDouble(e));case"string":{const n=e.trim(),a=ut(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:_e(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?Tt(t):_t(t)}parser(e){const t=this.withSensors(e);return new Ib(Wu(Zu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return ub(e,t=>this.robotSensors[t]??Pt[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=ws(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=ws(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=Fh(t);if(r!==void 0)return this.evaluateBool(r);const o=yb(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=vb(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw J(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw J(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw J(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=ut(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=ut(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw J(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Wu(Zu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw w1(t.name,this.state.variables);return _e(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Jh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function Is(i,e,t={},n=[]){const a=u0(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; +`);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=k:t.outputLines.push(k),t.outputLines.push(...P),t.outputLineOpen=I&&!S,this.afterOutput=!0,t.lastTrace=`${w} -> ${z}`;return}const o=lb(n);if(o){this.executeMBotCommand(o.method,o.args,n);return}if(this.executeFileStatement(n))return;if(n.endsWith("++")||n.endsWith("--")||n.includes("+=")||n.includes("-=")){this.executeIncrement(n);return}const l=/^(?:final\s+)?([A-Za-z]+)\s+([A-Za-z_]\w*(?:\s*,\s*[A-Za-z_]\w*)*)$/u.exec(t1(n).trim()),u=l?nn(l[1]):void 0;if(l&&u){const v=l[2].split(",").map(w=>w.trim());for(const w of v)t.variables.set(w,Lo(u,Du(u)));t.lastTrace=v.map(w=>`${w} = ${_e(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw et(n);const c=n.slice(0,m).trim(),d=n.slice(m+1),h=this.parseArrayDeclaration(c,d);if(h){t.variables.set(h.name,h.value),t.lastTrace=`${h.name} = new ${h.typeName}[${h.count}]`;return}const g=this.parseAssignmentTarget(c);let f;try{f=this.peek(()=>this.renderNumericExpression(d))}catch{f=d.trim()}let b=g.valueType;if(!b)try{b=this.inferTargetValueType(g.variableName)}catch{b="int"}const x=this.evaluateExpression(d,b);this.assignValue(x,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${_e(x)}`}executeMBotCommand(e,t,n){var r;if((r=Di[e])!=null&&r.text){const o=Di[e];if(t.length!==o.args+1)throw J(n);const l=fs(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw J(n);const u=Zo(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw J(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}if((e==="forward"||e==="backward")&&t.length===2){const o=this.evaluateOutputExpression(t[1]),l=ab(e,this.evaluateDouble(t[0]),o);if(!l)throw J(`${n} (${ib.map(u=>`"${u}"`).join(", ")})`);this.state.robotActions.push(l),this.state.lastTrace=`${n} -> ${l.label}`;return}const a=fs(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw J(n);const s=Zo(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=t1(e).trim(),a=/^(?:(Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*new\s+(Scanner|BufferedReader|PrintWriter)\s*\(([\s\S]*)\)$/u.exec(n);if(a){const[,m,c,d,h]=a;if(m&&m!==d)throw J(n);const g=d==="Scanner"?/^new\s+File\s*\(([\s\S]+)\)$/u.exec(h.trim()):d==="BufferedReader"?/^new\s+FileReader\s*\(([\s\S]+)\)$/u.exec(h.trim()):/^(?:new\s+(?:File|FileWriter)\s*\(([\s\S]+)\)|([\s\S]+))$/u.exec(h.trim());if(!g)throw et(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const x=this.fileContent(f).split(/\r?\n/u);x[x.length-1]===""&&x.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:x,next:0})}return t.lastTrace=`${c} = new ${d}(${f})`,!0}const s=/^Files\s*\.\s*writeString\s*\(\s*(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(([^()]+)\)\s*,([\s\S]+)\)$/u.exec(n);if(s){const m=this.fileNameValue(s[1]),c=this.evaluateOutputExpression(s[2]);return t.files.set(m,c),t.lastTrace=`${m} ← ${JSON.stringify(c)}`,!0}const r=/^([A-Za-z_]\w*)\s*\.\s*(println|print|close)\s*\(([\s\S]*)\)$/u.exec(n),o=r&&t.variables.get(r[1]);if(!r||!o)return!1;if(o.kind==="null")throw new Je({kind:"nullValue",text:r[1]});if(o.kind==="reader"&&r[2]==="close")return t.lastTrace=`${r[1]}.close()`,!0;if(o.kind!=="writer")return!1;if(r[2]==="close")return t.files.set(o.file,o.text),t.lastTrace=`${o.file} ← ${JSON.stringify(o.text)}`,!0;const l=r[3].trim()===""?"":this.evaluateOutputExpression(r[3]),u=r[2]==="println"?l+` +`:l;return t.variables.set(r[1],{...o,text:o.text+u}),t.lastTrace=`${r[1]}.${r[2]}(${JSON.stringify(l)})`,!0}fileNameValue(e){const t=e.trim(),n=ut(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw J(t)}fileContent(e){const t=this.state.files.get(e)??xs.get(e);if(t===void 0)throw new Je({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw J(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,Tt(r.value+a)),this.state.lastTrace=`${s} = ${r.value} ${o} 1 -> ${r.value+a}`;return}if(r.kind==="double"){const l=r.value+a;t.set(s,_t(l)),this.state.lastTrace=`${s} = ${_e(r)} ${o} 1 -> ${_e(_t(l))}`;return}throw et(e)}for(const[n,a]of[["+=",1],["-=",-1]]){const s=e.indexOf(n);if(s<0)continue;const r=e.slice(0,s).trim(),o=e.slice(s+2),l=t.get(r);if(!xi(r)||!l)throw et(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,Tt(c)),this.state.lastTrace=`${r} = ${l.value} ${u} ${m} -> ${c}`;return}if(l.kind==="double"){const m=this.evaluateDouble(o),c=l.value+a*m;t.set(r,_t(c)),this.state.lastTrace=`${r} = ${_e(l)} ${u} ${_e(_t(m))} -> ${_e(_t(c))}`;return}throw et(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(z1(e))return{variableName:e.trim()};const t=e.split(/\s+/u).filter(Boolean);let n,a;if(t.length===1)n=t[0];else if(t.length===2&&nn(t[0]))n=t[1],a=nn(t[0]);else if(t.length===3&&t[0]==="const"&&nn(t[1]))n=t[2],a=nn(t[1]);else throw et(e);if(!Lu(n))throw et(e);return{variableName:n,valueType:a}}parseInputRequest(e,t=!1){const n=e.slice(6).trim(),a=/^(\S+)(?:\s+(\S+))?(?:\s+([\s\S]*))?$/u.exec(n);if(!a)throw et(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=nn(s[0]);if(s.length>=2&&u?(r=s[1],o=u,l=(s[2]??"").trim()):(r=s[0],o=this.inferTargetValueType(r),l=(s[1]??"").trim()),!Lu(r))throw et(e);const m=ut(l)??l;return m===""&&t?this.state.outputLineOpen?{variableName:r,valueType:o,prompt:"",continuesLine:!0}:{variableName:r,valueType:o,prompt:""}:{variableName:r,valueType:o,prompt:m===""?`${r}:`:m}}parseArrayDeclaration(e,t){const n=e.split(/\s+/u).filter(Boolean);if(n.length!==2||!n[0].endsWith("[]"))return;const a=n[0].endsWith("[][]"),s=n[0].slice(0,a?-4:-2),r=nn(s),o=n[1];if(!r||!xi(o))throw et(e);if(a)return this.parseGridDeclaration(o,s,r,t);const l=t.trim();if(l.startsWith("{")&&l.endsWith("}")){const h=l.slice(1,-1).split(",").map(f=>f.trim());let g;switch(r){case"int":g={kind:"intArray",value:h.map(f=>this.evaluateInt(f))};break;case"double":g={kind:"doubleArray",value:h.map(f=>this.evaluateDouble(f))};break;case"string":g={kind:"stringArray",value:h.map(f=>ut(f)??this.evaluateOutputExpression(f))};break;case"boolean":g={kind:"booleanArray",value:h.map(f=>this.evaluateBool(f))};break}return{name:o,typeName:s,count:h.length,value:g}}const u=`new ${s}[`;if(!l.startsWith(u)){const h=this.evaluateStringMethod(l);if((h==null?void 0:h.kind)==="stringArray"&&r==="string")return{name:o,typeName:s,count:h.value.length,value:h}}if(!l.startsWith(u)||!l.endsWith("]"))throw et(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw J(m);const d=r==="int"?{kind:"intArray",value:new Array(c).fill(0)}:r==="double"?{kind:"doubleArray",value:new Array(c).fill(0)}:r==="boolean"?{kind:"booleanArray",value:new Array(c).fill(!1)}:{kind:"stringArray",value:new Array(c).fill("")};return{name:o,typeName:s,count:c,value:d}}parseGridDeclaration(e,t,n,a){var c;const s=a.trim(),r=d=>{switch(n){case"int":return this.evaluateInt(d);case"double":return this.evaluateDouble(d);case"boolean":return this.evaluateBool(d);case"string":return ut(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=Ib(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw J(g);return g.slice(1,-1).trim()===""?[]:g.slice(1,-1).split(",").map(f=>r(f.trim()))});return{name:e,typeName:t,count:`${d.length}][${((c=d[0])==null?void 0:c.length)??0}`,value:{kind:"grid",elementType:n,value:d}}}const o=new RegExp(String.raw`^new\s+${t}\s*\[(.+)\]\s*\[(.+)\]$`,"u").exec(s);if(!o)throw et(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw J(o[1]);if(u<0)throw J(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(Du(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw J(e);return t}evaluateReference(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n;const a=this.evaluateStringMethod(t);if(a)return a;const s=/^\(\s*char\s*\)\s*(.+)$/su.exec(t);if(s){const o=this.evaluateInt(s[1]);if(!(o>=0&&o<=1114111))throw J(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=z1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=zb(e);if(!t)return;const n=this.evaluateStaticCall(e,t);if(n)return n;const a=this.state.variables.get(t.target.trim());if((a==null?void 0:a.kind)==="reader")return this.readerMethod(t.target.trim(),a,t,e);if((a==null?void 0:a.kind)==="null")throw new Je({kind:"nullValue",text:t.target.trim()});const s=ut(t.target)??this.stringValueOf(t.target);if(s===void 0)return;const r=t.args,o=d=>{const h=r[d];if(h===void 0)throw J(e);const g=ut(h.trim());if(g!==void 0)return g;const f=this.evaluateReference(h);if((f==null?void 0:f.kind)==="string")return f.value;throw J(h)},l=d=>{if(r[d]===void 0)throw J(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw J(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw J(e);return d};switch(t.method){case"length":return u(0),Tt(m.length);case"charAt":return u(1),{kind:"string",value:m[c(l(0),m.length-1)]};case"substring":{if(r.length!==1&&r.length!==2)throw J(e);const d=c(l(0),m.length),h=r.length===2?c(l(1),m.length):m.length;if(h0&&h[h.length-1]==="";)h.pop();return{kind:"stringArray",value:h}}default:return}}evaluateStaticCall(e,t){const n=()=>{if(t.args.length!==1)throw J(e);return t.args[0]},a=s=>{const r=ut(s.trim());if(r!==void 0)return r;const o=this.evaluateReference(s);if((o==null?void 0:o.kind)==="string")return o.value;throw J(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Je({kind:"wholeNumberExpected"});return Tt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Je({kind:"numberExpected"});return _t(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Arrays.toString":case"Arrays.deepToString":{const s=this.state.variables.get(n().trim());if(!s||!Ya(s))throw J(e);return s.kind==="grid"&&t.method==="toString"?{kind:"string",value:"["+s.value.map(o=>Bu({kind:`${s.elementType}Array`,value:o})).join(", ")+"]"}:{kind:"string",value:_e(s)}}case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw J(e);const r=ut(s[1]),o=xs.get(r);if(o===void 0)throw new Je({kind:"fileNotFound",text:r});return{kind:"string",value:o}}default:return}}stringValueOf(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return n.kind==="string"?n.value:void 0;const a=z1(t);if(!a)return;const s=this.valueInArray(a.arrayName,a.indexExpressions.map(r=>this.arrayIndex(r)));return s.kind==="string"?s.value:void 0}substituteStringCalls(e){if(!e.includes("("))return e;let t="",n=e;const a=/([A-Za-z_]\w*(?:\[[^\[\]]*\])*|"(?:[^"\\]|\\.)*")\s*\.\s*(length|indexOf|lastIndexOf|compareTo|charAt|parseInt|parseDouble)\s*\(/u;for(let s=a.exec(n);s;s=a.exec(n)){const r=s.index+s[0].length-1,o=rr(Array.from(n),Array.from(n.slice(0,r)).length);if(o===void 0)break;const l=Array.from(n),u=l.slice(Array.from(n.slice(0,s.index)).length,o+1).join(""),m=this.evaluateStringMethod(u),c=l.slice(0,Array.from(n.slice(0,s.index)).length).join(""),d=(m==null?void 0:m.kind)==="string"?Wo(m.value):void 0;(m==null?void 0:m.kind)==="int"?t+=c+String(m.value):(m==null?void 0:m.kind)==="double"?t+=c+(Number.isInteger(m.value)?m.value.toFixed(1):String(m.value)):d!==void 0?t+=c+String(d):t+=c+u,n=l.slice(o+1).join("")}return t+n}valueInArray(e,t){const n=this.state.variables.get(e);if(!n)throw w1(e,this.state.variables);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw J(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw J(a);return Lo(n.elementType,r[t[1]])}if(t.length!==1)throw J(a);const s=t[0];if(!Ya(n))throw J(e);if(s>=n.value.length)throw J(a);switch(n.kind){case"intArray":return Tt(n.value[s]);case"doubleArray":return _t(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw J(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return Mu(n);const a=z1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw w1(a.arrayName,this.state.variables);if(s.kind==="intArray")return"int";if(s.kind==="doubleArray")return"double";if(s.kind==="stringArray")return"string";if(s.kind==="booleanArray")return"boolean";if(s.kind==="grid")return s.elementType;throw J(a.arrayName)}throw et(e)}assignValue(e,t){const n=t.trim(),a=z1(n);if(!a){this.state.variables.set(n,e);return}const s=a.indexExpressions.map(u=>this.arrayIndex(u)),r=this.state.variables.get(a.arrayName);if(!r)throw w1(a.arrayName,this.state.variables);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw J(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||Ya(e))throw J(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,Ou(r.value,m),this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw J(n);const o=s[0];let l;if(r.kind==="intArray"&&e.kind==="int")l={kind:"intArray",value:[...r.value]};else if(r.kind==="doubleArray"&&(e.kind==="double"||e.kind==="int"))l={kind:"doubleArray",value:[...r.value]};else if(r.kind==="stringArray"&&e.kind==="string")l={kind:"stringArray",value:[...r.value]};else if(r.kind==="booleanArray"&&e.kind==="boolean")l={kind:"booleanArray",value:[...r.value]};else throw J(n);if(o>=l.value.length)throw J(n);l.value[o]=e.value,Ou(r.value,l.value),this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(Eu(t)&&Or(t).every(s=>ut(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of Or(this.withSensors(e))){const r=s.trim(),o=ut(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(Eu(r)?{kind:"boolean",value:this.evaluateBool(r)}:this.evaluateNumeric(r)),u=l.kind==="int"||l.kind==="double";if(a===void 0&&u){n?n=n.kind==="int"&&l.kind==="int"?Tt(n.value+l.value):_t(n.value+l.value):n=l;continue}a=(a??(n?_e(n):""))+Bu(l),n=void 0}return a??(n?_e(n):"")}renderOutputExpression(e){return Or(e).map(t=>{const n=t.trim();if(ut(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return _e(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return Tt(this.evaluateInt(e));case"double":return _t(this.evaluateDouble(e));case"string":{const n=e.trim(),a=ut(n);if(a!==void 0)return{kind:"string",value:a};if(n==="null")return{kind:"null"};const s=this.evaluateReference(n);return(s==null?void 0:s.kind)==="null"?s:s?{kind:"string",value:_e(s)}:{kind:"string",value:this.evaluateOutputExpression(e)}}case"boolean":return{kind:"boolean",value:this.evaluateBool(e)}}}evaluateNumeric(e){const{v:t,int:n}=this.parser(e).parseNumber();return n||Number.isFinite(t)&&Math.round(t)===t?Tt(t):_t(t)}parser(e){const t=this.withSensors(e);return new kb(Wu(Zu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return mb(e,t=>this.robotSensors[t]??Pt[t].simulated)}evaluateInt(e){return this.parser(e).parseInt()}evaluateDouble(e){return this.parser(e).parseDouble()}evaluateBool(e){const t=this.withSensors(e).trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);if((n==null?void 0:n.kind)==="boolean")return n.value;const a=ws(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=ws(t,"&&");if(s.length>1)return s.every(u=>this.evaluateBool(u));if(t.startsWith("!")&&!t.startsWith("!="))return!this.evaluateBool(t.slice(1));const r=Rh(t);if(r!==void 0)return this.evaluateBool(r);const o=wb(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=yb(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw J(t);return this.evaluateDouble(t)!==0}evaluateComparison(e,t,n){if((e.trim()==="null"||n.trim()==="null")&&(t==="=="||t==="!=")){const m=d=>{var h;return d.trim()==="null"||((h=this.evaluateReference(d))==null?void 0:h.kind)==="null"},c=m(e)===m(n);return t==="=="?c:!c}const a=this.booleanOperand(e),s=this.booleanOperand(n);if((a!==void 0||s!==void 0)&&(t==="=="||t==="!=")){const m=a??this.evaluateBool(e),c=s??this.evaluateBool(n);return t==="=="?m===c:m!==c}const r=this.stringOperand(e),o=this.stringOperand(n);let l,u;if(r!==void 0||o!==void 0){if(r===void 0||o===void 0)throw J(`${e} ${t} ${n}`);l=r,u=o}else l=this.evaluateDouble(e),u=this.evaluateDouble(n);switch(t){case"==":return l===u;case"!=":return l!==u;case"<":return l":return l>u;case">=":return l>=u;default:throw J(`${e} ${t} ${n}`)}}booleanOperand(e){const t=e.trim();if(t==="true")return!0;if(t==="false")return!1;const n=this.evaluateReference(t);return(n==null?void 0:n.kind)==="boolean"?n.value:void 0}stringOperand(e){const t=e.trim(),n=ut(t);if(n!==void 0)return n;const a=this.evaluateReference(t);return(a==null?void 0:a.kind)==="string"?a.value:void 0}evaluateSwitchSelector(e){const t=this.withSensors(e).trim(),n=ut(t);if(n!==void 0)return{kind:"text",value:n};const a=this.state.variables.get(t);if(a)switch(a.kind){case"int":return{kind:"int",value:a.value};case"double":return{kind:"int",value:Math.trunc(a.value)};case"string":return{kind:"text",value:a.value};default:throw J(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return Wu(Zu(e)).map(t=>{if(t.t==="number")return t.literal;if(t.t==="identifier"){const n=this.state.variables.get(t.name);if(!n)throw w1(t.name,this.state.variables);return _e(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const Gh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function Is(i,e,t={},n=[]){const a=u0(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; -`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(ag)&&(s+=`import random +`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(sg)&&(s+=`import random `),e!=="java"&&(s+=Ro(r,e)),e==="java"&&Ts(i)&&(s+=`// import java.util.Scanner; `,s+=`Scanner scanner = new Scanner(System.in); @@ -29,49 +29,49 @@ except: `),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+` `),e!=="java")for(const u of n){if(u===i)continue;const m=St(u.caption);m&&(s+=No(u,m,e,t,0)+` -`)}const o=St(i.caption),l={out:""};if(o)l.out=No(i,o,e,t,a.baseIndent);else for(const u of i.elements)mr(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=jb(e);return e==="javascript"?`"use strict"; +`)}const o=St(i.caption),l={out:""};if(o)l.out=No(i,o,e,t,a.baseIndent);else for(const u of i.elements)mr(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=Cb(e);return e==="javascript"?`"use strict"; -`+u:u}return lg(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function u0(i,e,t){const n={...Jh,...t,jsIntVariables:new Set,arrayElementTypes:Lb(i),stringVariables:Zb(i)};return e!=="java"&&(n.jsIntVariables=ax(i)),n}const Ru=i=>i==="string"?"String":i===void 0?"void":i;function Gh(i){const e=i.params.map(t=>`${Ru(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Ru(i.returnType)} ${i.name}(${e}) {`}function No(i,e,t,n,a){const s=u0(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)mr(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass +`+u:u}return ug(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function u0(i,e,t){const n={...Gh,...t,jsIntVariables:new Set,arrayElementTypes:Wb(i),stringVariables:Lb(i)};return e!=="java"&&(n.jsIntVariables=sx(i)),n}const Ru=i=>i==="string"?"String":i===void 0?"void":i;function Hh(i){const e=i.params.map(t=>`${Ru(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${Ru(i.returnType)} ${i.name}(${e}) {`}function No(i,e,t,n,a){const s=u0(i,t,n);for(const l of e.params)l.dims||(l.type==="int"&&s.jsIntVariables.add(l.name),l.type==="string"&&s.stringVariables.add(l.name));const r=e.params.map(l=>l.name).join(", "),o={out:""};for(const l of i.elements)mr(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass `:` -`)),t){case"java":return`${Z(a)}${Gh(e)} +`)),t){case"java":return`${Z(a)}${Hh(e)} ${o.out}${Z(a)}} `;case"python":return`${Z(a)}def ${e.name}(${r}): ${o.out}`;case"javascript":return`${Z(a)}function ${e.name}(${r}) { ${o.out}${Z(a)}} -`}}const Z=i=>i>0?" ".repeat(i):"";function ye(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function jb(i,e){return i==="python"?"# empty element":"// empty element"}const Fo=i=>i.trim()==="ø";function Hh(i,e){return Z(i)+(e==="python"?`# empty element +`}}const Z=i=>i>0?" ".repeat(i):"";function ye(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function Cb(i,e){return i==="python"?"# empty element":"// empty element"}const Fo=i=>i.trim()==="ø";function Vh(i,e){return Z(i)+(e==="python"?`# empty element `:`// empty element -`)}function Cb(i){switch(i.type){case T.leerElement:return!0;case T.anweisung:case T.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Fo(e));default:return!1}}function Ab(i){return i.every(Cb)}function m0(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" +`)}function Ab(i){switch(i.type){case T.leerElement:return!0;case T.anweisung:case T.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||Fo(e));default:return!1}}function Pb(i){return i.every(Ab)}function m0(i,e,t){const n=i.map(a=>a.replace(/^[ \t]+|[ \t]+$/g,"")).filter(a=>a!=="");return n.length===0?"":e==="python"?Z(t)+`""" `+n.map(a=>Z(t)+a+` `).join("")+Z(t)+`""" `:n.length===1?Z(t)+"/* "+n[0]+` */ `:Z(t)+`/* `+n.map(a=>Z(t)+" * "+a+` `).join("")+Z(t)+` */ -`}const Pb=i=>i==="java"||i==="javascript";function ks(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function $a(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return Db(e.length===0?"true":e.join(" "))}function Db(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=Vh(t,e);if(n!==void 0)return n===""?"true":n}return e}function Vh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Bb(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const or=i=>i.name.includes("[")&&i.name.includes("]");function c0(i){const e=i.trim();if(e==="")return;const t=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:Ss(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ye(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=Ob(e);if(a)return{type:Ss(a[0]),name:a[1]}}function Ss(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function Ob(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function Mb(i,e,t,n,a){const s=Qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`); +`}const Db=i=>i==="java"||i==="javascript";function ks(i){const e=i.trim();if(e==="")return"";if(e.startsWith("//")||e.startsWith("/*")||e.startsWith("*")||e.startsWith("#")||e.startsWith("{")||e.startsWith("}")||e.endsWith("{")||e.endsWith(";"))return e;const t=e.toLowerCase();for(const n of["if ","else","for ","while ","do ","switch ","case ","default"])if(t.startsWith(n))return e;return e+";"}function $a(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return Bb(e.length===0?"true":e.join(" "))}function Bb(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=qh(t,e);if(n!==void 0)return n===""?"true":n}return e}function qh(i,e){if(!e.toLowerCase().startsWith(i))return;const t=e.slice(i.length);if(!(t===""||/^\s/.test(t)||t[0]==="("))return;let n=t.trim();return n.startsWith("(")&&n.endsWith(")")&&n.length>=2&&(n=n.slice(1,-1).trim()),n}function Qt(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function Ob(i){const e=i.trim(),t=e.toLowerCase();let n;if(t.startsWith("output:"))n=e.slice(7).trim();else if(t.startsWith("print:"))n=e.slice(6).trim();else return;return n===""?void 0:n}const or=i=>i.name.includes("[")&&i.name.includes("]");function c0(i){const e=i.trim();if(e==="")return;const t=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)(?:\s+"([^"]*)")?\s*$/i,e);if(t){const s=t[2].replaceAll(" ","");if(s==="")return;const r=(t[3]??"").trim();return{type:Ss(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ye(/^\s*([a-zA-Z_]\w*(?:\s*\[[^\]]+\])?)\s+"([^"]*)"\s*$/i,e);if(n){const s=n[1].replaceAll(" ","");return["int","integer","long","float","double","string","boolean","char","bool","void"].includes(s.toLowerCase())?void 0:{type:s.includes("[")?"String":"int",name:s,customPrompt:n[2].trim()}}const a=Mb(e);if(a)return{type:Ss(a[0]),name:a[1]}}function Ss(i){switch(i.trim().toLowerCase()){case"integer":case"int":return"int";case"long":return"long";case"float":return"float";case"double":return"double";case"string":return"String";case"boolean":case"bool":return"boolean";case"char":return"char";default:return i}}function Mb(i){const e=i.split(/[ \t]+/).filter(Boolean);if(e.length===0)return;if(e.length>=2)return[e[0],e[1]];if(!["int","double","string","boolean","char","long","float","short","byte","void","bool","integer"].includes(e[0].toLowerCase()))return["int",e[0]]}function Zb(i,e,t,n,a){const s=Qt(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`); `;case"javascript":return Z(t)+"console.log("+s+`); `;case"python":return Z(t)+"print("+Mn(s,n,a)+`) `}}function Oi(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(` -`,"\\n").replaceAll("\r","\\r")}function d0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=c0(n);if(a&&or(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function Zb(i){const e=new Set;return yn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=c0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!or(o)&&e.add(o.name);continue}const s=ye(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ye(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function Lb(i){const e=new Map;return yn(i.elements,t=>{for(const n of t.textLines){const a=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],Ss(a[1]))}}),e}function Wb(i,e,t){const n=d0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+Oi(a)+`"); +`,"\\n").replaceAll("\r","\\r")}function d0(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=c0(n);if(a&&or(a)&&!/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s/i.test(n)){const s=e.get(a.name.slice(0,a.name.indexOf("[")).trim());if(s)return{...a,type:s}}return a}function Lb(i){const e=new Set;return yn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=c0(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!or(o)&&e.add(o.name);continue}const s=ye(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ye(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function Wb(i){const e=new Map;return yn(i.elements,t=>{for(const n of t.textLines){const a=ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ye(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],Ss(a[1]))}}),e}function Eb(i,e,t){const n=d0(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+Oi(a)+`"); `,r=o=>or(n)?n.name:`${o} ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${r("int")} = scanner.nextInt(); `;case"double":return s+Z(e)+`${r("double")} = scanner.nextDouble(); `;case"String":return s+Z(e)+`${r("String")} = scanner.next(); `;case"boolean":return s+Z(e)+`${r("boolean")} = scanner.nextBoolean(); -`;default:return}}function Eb(i,e,t){const n=d0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+Oi(n.name+": ")+`"); +`;default:return}}function Nb(i,e,t){const n=d0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+Oi(n.name+": ")+`"); `,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${Oi(u)}") ?? "${l}")`},o=or(n)?n.name:`let ${n.name}`;switch(n.type){case"int":return s+Z(e)+`${o} = parseInt(${r("0")}, 10); `;case"double":return s+Z(e)+`${o} = Number(${r("0")}); `;case"String":return s+Z(e)+`${o} = ${r("")}; `;case"boolean":return s+Z(e)+`${o} = ${r("")}.trim().toLowerCase() === "true"; -`;default:return}}function Nb(i,e,t){const n=d0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+Oi(n.name+": ")+`") +`;default:return}}function Fb(i,e,t){const n=d0(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+Oi(n.name+": ")+`") `,r=`input("${Oi(a?n.customPrompt:n.name+": ")}")`;switch(n.type){case"int":return s+Z(e)+`${n.name} = int(${r}) `;case"double":return s+Z(e)+`${n.name} = float(${r}) `;case"String":return s+Z(e)+`${n.name} = ${r} `;case"boolean":return s+Z(e)+`${n.name} = ${r}.strip().lower() in ("true", "wahr") -`;default:return}}const Mr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,Fb=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${Mr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${Mr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${Mr}\s*\)?\s*\)$`),"PrintWriter"]];function qh(i){const e=i.trim();for(const[t,n]of Fb){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function Rb(i,e,t,n,a){if(e==="java")return;const s=Qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&qh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?Z(t)+`${r[1]} = ${o.kind}(${o.name}) +`;default:return}}const Mr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,Rb=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${Mr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${Mr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${Mr}\s*\)?\s*\)$`),"PrintWriter"]];function Qh(i){const e=i.trim();for(const[t,n]of Rb){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function Jb(i,e,t,n,a){if(e==="java")return;const s=Qt(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&Qh(r[2]);if(r&&o){const m=/^(?:Scanner|BufferedReader|PrintWriter)\s/.test(s);return e==="python"?Z(t)+`${r[1]} = ${o.kind}(${o.name}) `:Z(t)+`${m?"let ":""}${r[1]} = new ${o.kind}(${o.name}); `}const l=/^([A-Za-z_]\w*)\.(println|print)\s*\(([\s\S]*)\)$/.exec(s);if(l&&l[1]!=="System"){const m=l[3].trim(),c=e==="python"&&m!==""?Mn(m,n,a):m;return Z(t)+`${l[1]}.${l[2]}(${c})${e==="javascript"?";":""} `}const u=/^Files\.writeString\s*\(\s*(?:Path\.of|Paths\.get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*,\s*([\s\S]+)\)$/.exec(s);if(u){const m=u[2].trim();return e==="python"?Z(t)+`open(${u[1]}, "w", encoding="utf-8").write(${Mn(m,n,a)}) `:Z(t)+`require("fs").writeFileSync(${u[1]}, ${m}); -`}}function Jb(i){const e=new Set;for(const t of i)yn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&qh(s[1]);r&&e.add(r.kind)}});return e}const Gb={Scanner:`class Scanner: +`}}function Gb(i){const e=new Set;for(const t of i)yn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&Qh(s[1]);r&&e.add(r.kind)}});return e}const Hb={Scanner:`class Scanner: def __init__(self, name): self.lines = open(name, encoding="utf-8").read().splitlines() def hasNextLine(self): @@ -96,7 +96,7 @@ ${o.out}${Z(a)}} self.file.write(str(text)) def close(self): self.file.close() -`},Hb={Scanner:`class Scanner { +`},Vb={Scanner:`class Scanner { constructor(name) { this.lines = require("fs").readFileSync(name, "utf8").split(/\\r?\\n/); if (this.lines.at(-1) === "") this.lines.pop(); } hasNextLine() { return this.lines.length > 0; } nextLine() { return this.lines.shift(); } @@ -113,34 +113,34 @@ ${o.out}${Z(a)}} print(text) { this.text += text; } close() { require("fs").writeFileSync(this.name, this.text); } } -`};function Ro(i,e){const t=Jb(i);if(t.size===0)return"";const n=e==="python"?Gb:Hb;return[...t].map(a=>n[a]).join(` +`};function Ro(i,e){const t=Gb(i);if(t.size===0)return"";const n=e==="python"?Hb:Vb;return[...t].map(a=>n[a]).join(` `)+` -`}function Vb(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return Z(t)+"System.out.print("+o+`); +`}function qb(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Qt(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return Z(t)+"System.out.print("+o+`); `;case"javascript":return Z(t)+"process.stdout.write(String("+o+`)); `;case"python":return Z(t)+"print("+(o===""?"":Mn(o,n,a)+", ")+`end="") -`}}const r=Bb(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?Z(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` +`}}const r=Ob(i);if(r===void 0)return/^\s*(?:output|print):\s*$/i.test(i)?Z(t)+{java:"System.out.println();",javascript:"console.log();",python:"print()"}[e]+` `:void 0;switch(e){case"java":return Z(t)+"System.out.println("+r+`); `;case"javascript":return Z(t)+"console.log("+r+`); `;case"python":return Z(t)+"print("+Mn(r,n,a)+`) -`}}function h0(i){const e=i.map(Qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function qb(i){const t=h0(i).split(";"),n=Qh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Qh(i){const e=ye(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function Qb(i){const e=i.map(n=>Qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=Vh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Uh(i,e){let t=ye(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ye(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ye(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ye(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Jo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function Ub(i,e){const t=Qb(i);if(!t)return;const[n,a,s]=t,r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Ze(r[2],e)}`,condition:a,increment:s},u=ye(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Uh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Ze(r[2],e);let d=Ze(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Jo(d,1);else if(m<0&&h===">=")d=Jo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function Yh(i){const e=Qt(i).trim();if(e==="")return;const t=ye(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function Yb(i,e,t,n){var o;const a=Yh(i);if(!a)return;const s=Ss(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+ks(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` +`}}function h0(i){const e=i.map(Qt).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function Qb(i){const t=h0(i).split(";"),n=Uh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function Uh(i){const e=ye(/^(\s*)(?:integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?\s*$/i,i);if(!e)return;const t=e[2].trim();if(t==="")return;const n=(e[3]??"").trim();return i.includes("=")&&n!==""?e[1]+`let ${t} = ${n}`:e[1]+`let ${t}`}function Ub(i){const e=i.map(n=>Qt(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=qh("for",n);a!==void 0&&(n=a),t=n.split(";").map(s=>s.trim())}if(!(t.length!==3||t.some(n=>n==="")))return[t[0],t[1],t[2]]}function Yh(i,e){let t=ye(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ye(/^\s*(\+\+|--)\s*(\w+)\s*$/,i);if(t){const[n,a]=t[1]==="++"||t[1]==="--"?[t[2],t[1]]:[t[1],t[2]];return n===e?a==="++"?1:-1:void 0}if(t=ye(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ye(/^\s*(\w+)\s*=\s*(\w+)\s*(\+|-)\s*(\d+)\s*$/,i),t)return t[1]===e&&t[2]===e?(t[3]==="+"?1:-1)*Number(t[4]):void 0}function Jo(i,e){if(/^-?\d+$/.test(i))return String(Number(i)+e);const t=/^[\w.()[\]]+$/.test(i)?i:`(${i})`;return e>0?`${t} + ${e}`:`${t} - ${-e}`}function Yb(i,e){const t=Ub(i);if(!t)return;const[n,a,s]=t,r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n);if(!r)return;const o=r[1],l={variable:o,init:`${o} = ${Ze(r[2],e)}`,condition:a,increment:s},u=ye(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=Yh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Ze(r[2],e);let d=Ze(u[3],e);const h=u[2];if(m>0&&h==="<=")d=Jo(d,1);else if(m<0&&h===">=")d=Jo(d,-1);else if(!(m>0&&h==="<")&&!(m<0&&h===">"))return l;const g=m===1?c==="0"?[d]:[c,d]:[c,d,String(m)];return l.rangeLine=`for ${o} in range(${g.join(", ")}):`,l}function $h(i){const e=Qt(i).trim();if(e==="")return;const t=ye(/^\s*const\s+(integer|int|long|float|double|string|boolean|char|bool)\s+(\w+)(?:\s*=\s*(.*))?$/i,e);if(!t)return;const n=t[2].trim();if(n==="")return;if(!e.includes("="))return{rawType:t[1].trim(),name:n};const a=(t[3]??"").trim();if(a!=="")return{rawType:t[1].trim(),name:n,rhs:a}}function $b(i,e,t,n){var o;const a=$h(i);if(!a)return;const s=Ss(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+ks(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` `;case"javascript":return r?Z(t)+ks(`const ${a.name} = ${r}`)+` `:Z(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} `;case"python":return r?Z(t)+`${a.name} = ${ur(r,n)} # const ${s} `:Z(t)+`${a.name} = None # const ${s}, uninitialized -`}}function $b(i){const e=Qt(i).trim();if(e===""||ng(e))return;const t=ye(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function lr(i){const e=ye(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||$h(t)))return t.startsWith("(")&&Go(t,0)===t.length-1?t.slice(1,-1).trim():t}function Go(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Kb(i,e){if(i[e]==="("){const a=Go(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Go(i,n);if(s<0)return-1;n=s+1}else return n}}function Ho(i,e){return g0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Kb(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!$h(u))continue;const m=Ho(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function ur(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=lr(t);return n!==void 0?`int(${ur(n,e)})`:Ze(t,e)}function g0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return g0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Kh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Mn(i,e,t){const n=Kh(i),a=s=>p0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Ze(i,e):n.map(s=>a(s)?s:`str(${Ze(s,e)})`).join(" + ")}function Xh(i,e,t=new Set){const n=Qt(i).trim(),a=ye(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ye(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Ze(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ye(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Ze(s[2],e)}`;const r=ye(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Kh(u);m=Mn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!p0(u.trim())&&!t.has(u.trim())&&(m=`str(${Ze(u,e)})`)}else l==="="&&lr(u)===void 0&&u.trim()!=="null"?m=Mn(u,e,t):m=l==="="?ur(u,e):Ze(u,e);return`${o} ${l} ${m}`}return Ze(n,e)}const Xb=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function eg(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function tg(i){const e=ye(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function ng(i){const e=ye(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function ex(i){const e=ye(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Ju=i=>i.replaceAll("{","[").replaceAll("}","]");function Gu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function tx(i,e,t){const n=ex(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Gu(i.elementType,e)}))`:Ju(i.rhs):n?`[[${Gu(i.elementType,e)}] * ${Ze(n[1],t)} for _ in range(${Ze(n[0],t)})]`:Ze(Ju(i.rhs),t)}function ig(i,e){const t=i.trim();if(e){const a=tg(t);return a!==void 0?`new Array(${a})`:eg(t)}const n=lr(t);return n!==void 0?`Math.floor(${ig(n,!1)})`:Xb(t)}function nx(i,e,t){const n=i.trim();if(e){const a=tg(n);return a!==void 0?`[None] * ${a}`:Ze(eg(n),t)}return ur(n,t)}function ix(i,e,t,n,a){if(e==="java")return;const s=ng(i);if(s){const u=tx(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; +`}}function Kb(i){const e=Qt(i).trim();if(e===""||ig(e))return;const t=ye(/^\s*(?:integer|int|long|float|double|string|boolean|char|bool)(?:\s*\[\s*\]\s+(\w+)|\s+(\w+)(\s*\[\s*\])?)\s*=\s*(.*)$/i,e);if(!t)return;const n=t[1]===""?t[2]:t[1],a=t[4].trim();if(a!=="")return{name:n,rhs:a,isArray:t[1]!==""||t[3]!==""}}function lr(i){const e=ye(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||Kh(t)))return t.startsWith("(")&&Go(t,0)===t.length-1?t.slice(1,-1).trim():t}function Go(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Xb(i,e){if(i[e]==="("){const a=Go(i,e);return a<0?-1:a+1}if(i[e]==="'")return i[e+2]==="'"?e+3:-1;const t=/^(?:[A-Za-z_]\w*|\d+)/.exec(i.slice(e));if(!t)return-1;let n=e+t[0].length;for(;;){const a=/^\.[A-Za-z_]\w*/.exec(i.slice(n));if(a)n+=a[0].length;else if(i[n]==="("||i[n]==="["){const s=Go(i,n);if(s<0)return-1;n=s+1}else return n}}function Ho(i,e){return g0(i,t=>{const n=/\(\s*(int|char)\s*\)\s*/g;let a="",s=0;for(let r=n.exec(t);r;r=n.exec(t)){const o=r.index+r[0].length,l=Xb(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!Kh(u))continue;const m=Ho(u.startsWith("(")?u.slice(1,-1).trim():u,e),c=r[1]==="int"?e==="python"?`ord(${m})`:`${m}.charCodeAt(0)`:e==="python"?`chr(${m})`:`String.fromCharCode(${m})`;a+=t.slice(s,r.index)+c,s=l,n.lastIndex=l}return a+t.slice(s)})}function ur(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=lr(t);return n!==void 0?`int(${ur(n,e)})`:Ze(t,e)}function g0(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return g0(t,a=>a.replace(/\bMath\.random\s*\(\s*\)/gi,"random.random()").replace(/===/g,"==").replace(/!==/g,"!=").replace(/\s*&&\s*/g," and ").replace(/\s*\|\|\s*/g," or ").replace(/!(?!=)\s*/g,"not ").replace(/\btrue\b/g,"True").replace(/\bfalse\b/g,"False").replace(/\bnull\b/g,"None").replace(new RegExp("(?n(r)&&n(o)?`${r} // ${o}`:s))}function Xh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function Mn(i,e,t){const n=Xh(i),a=s=>p0(s)||t.has(s)||t.has(s.replace(/^([A-Za-z_]\w*)\[[^[\]]*\]$/u,"$1[]"));return n.length<2||!n.some(a)||n.some(s=>s==="")?Ze(i,e):n.map(s=>a(s)?s:`str(${Ze(s,e)})`).join(" + ")}function eg(i,e,t=new Set){const n=Qt(i).trim(),a=ye(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ye(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Ze(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ye(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Ze(s[2],e)}`;const r=ye(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=Xh(u);m=Mn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!p0(u.trim())&&!t.has(u.trim())&&(m=`str(${Ze(u,e)})`)}else l==="="&&lr(u)===void 0&&u.trim()!=="null"?m=Mn(u,e,t):m=l==="="?ur(u,e):Ze(u,e);return`${o} ${l} ${m}`}return Ze(n,e)}const ex=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function tg(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function ng(i){const e=ye(/^\s*new\s+(?:byte|short|int|long|float|double|boolean|char|string)\s*\[\s*(.+)\s*\]\s*$/i,i),t=e==null?void 0:e[1].trim();return t||void 0}function ig(i){const e=ye(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Qt(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function tx(i){const e=ye(/^\s*new\s+(?:int|double|string|boolean)\s*\[\s*(.+?)\s*\]\s*\[\s*(.+?)\s*\]\s*$/i,i);return e?[e[1],e[2]]:void 0}const Ju=i=>i.replaceAll("{","[").replaceAll("}","]");function Gu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function nx(i,e,t){const n=tx(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${Gu(i.elementType,e)}))`:Ju(i.rhs):n?`[[${Gu(i.elementType,e)}] * ${Ze(n[1],t)} for _ in range(${Ze(n[0],t)})]`:Ze(Ju(i.rhs),t)}function ag(i,e){const t=i.trim();if(e){const a=ng(t);return a!==void 0?`new Array(${a})`:tg(t)}const n=lr(t);return n!==void 0?`Math.floor(${ag(n,!1)})`:ex(t)}function ix(i,e,t){const n=i.trim();if(e){const a=ng(n);return a!==void 0?`[None] * ${a}`:Ze(tg(n),t)}return ur(n,t)}function ax(i,e,t,n,a){if(e==="java")return;const s=ig(i);if(s){const u=nx(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; `:Z(t)+`${s.name} = ${u} -`}const r=$b(i);if(!r)return;if(e==="javascript")return Z(t)+ks(`let ${r.name} = ${ig(r.rhs,r.isArray)}`)+` -`;const l=!r.isArray&&lr(r.rhs)===void 0&&r.rhs.trim()!=="null"?Mn(r.rhs,n,a):nx(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} -`}function yn(i,e){for(const t of i){e(t),t.loopBody&&yn(t.loopBody,e);for(const n of t.cases??[])yn(n.elements,e)}}function ax(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return yn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=c0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=Yh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ye(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Vo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function Ts(i){let e=!1;return yn(i.elements,t=>{t.type===T.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}const f0="import java.util.Arrays;";function b0(i){let e=!1,t=!1,n=!1,a=!1;return yn(i.elements,s=>{for(const r of s.textLines)/\bArrays\s*\./.test(r)&&(a=!0),/\bFiles\s*\./.test(r)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(r)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(r)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[],...a?[f0]:[]]}function sx(i){return b0(i).some(e=>e!==f0)}function ag(i){let e=!1;return yn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function ca(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||p0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function X1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function rx(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` -`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Fo(o));r.length>0&&(a.out+=m0(r,e,n))}for(const r of s){if(r==="")continue;if(Fo(r)){a.out+=t.live?v0(n,t.live):Hh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?Wb(r,n,l):void 0)??(e==="javascript"?Eb(r,n,l):void 0)??(e==="python"?Nb(r,n,l):void 0)??Rb(r,e,n,o,u)??Vb(r,e,n,o,u)??Yb(r,e,n,o)??ix(r,e,n,o,u)??Mb(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Vo(m,o):m;continue}let c=r;Pb(e)?c=ks(e==="javascript"?Vo(r,o):r):e==="python"&&(c=Xh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` +`}const r=Kb(i);if(!r)return;if(e==="javascript")return Z(t)+ks(`let ${r.name} = ${ag(r.rhs,r.isArray)}`)+` +`;const l=!r.isArray&&lr(r.rhs)===void 0&&r.rhs.trim()!=="null"?Mn(r.rhs,n,a):ix(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} +`}function yn(i,e){for(const t of i){e(t),t.loopBody&&yn(t.loopBody,e);for(const n of t.cases??[])yn(n.elements,e)}}function sx(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return yn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=c0(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=$h(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ye(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function Vo(i,e){const t=r=>/^\d+$/.test(r)||e.has(r),n=String.raw`(?:[a-zA-Z_]\w*|\d+(?:\.\d+)?)`,a=new RegExp(String.raw`(?{const o=r.split(/\s*([*/%])\s*/);if(!o.some(m=>m==="/"))return r;let l=o[0],u=t(o[0]);for(let m=1;mr.replace(a,s).replace(new RegExp("(?t(l)&&t(u)?`${l} = Math.trunc(${l} / ${u})`:o))}function Ts(i){let e=!1;return yn(i.elements,t=>{t.type===T.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}const f0="import java.util.Arrays;";function b0(i){let e=!1,t=!1,n=!1,a=!1;return yn(i.elements,s=>{for(const r of s.textLines)/\bArrays\s*\./.test(r)&&(a=!0),/\bFiles\s*\./.test(r)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(r)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(r)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[],...a?[f0]:[]]}function rx(i){return b0(i).some(e=>e!==f0)}function sg(i){let e=!1;return yn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function ca(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||p0(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function X1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function ox(i,e,t,n,a){const s=i.map(r=>r.trim());if(s.every(r=>r==="")){t.live&&(a.out+=Z(n)+(e==="python"?"pass":";")+` +`);return}if(t.includeDiagramTextAsComments){const r=s.filter(o=>o!==""&&!Fo(o));r.length>0&&(a.out+=m0(r,e,n))}for(const r of s){if(r==="")continue;if(Fo(r)){a.out+=t.live?v0(n,t.live):Vh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?Eb(r,n,l):void 0)??(e==="javascript"?Nb(r,n,l):void 0)??(e==="python"?Fb(r,n,l):void 0)??Jb(r,e,n,o,u)??qb(r,e,n,o,u)??$b(r,e,n,o)??ax(r,e,n,o,u)??Zb(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?Vo(m,o):m;continue}let c=r;Db(e)?c=ks(e==="javascript"?Vo(r,o):r):e==="python"&&(c=eg(r,o,u)),c!==""&&(a.out+=Z(n)+c+` `)}}function vi(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=m0(t,n,s)),o!==void 0&&y0(t)){r.out+=Z(s)+i+n1(o)+e;return}const u=$a(t),m=a.jsIntVariables??new Set,c=n==="python"?Ze(u,m):n==="javascript"?Vo(u,m):u;r.out+=Z(s)+i+c+e}function S1(i,e,t,n,a){const s=a.out.length;for(const o of i)mr(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=v0(n,t.live)),e!=="python")return;a.out.slice(s).split(` `).map(o=>o.trim()).every(o=>o===""||o.startsWith("#"))&&(a.out+=Z(n)+`pass -`)}function ox(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===T.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function qo(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&Ab(r[1].elements),m=u?void 0:ox(r[1].elements,t);if(o){vi(s?"elif ":"if ",`: +`)}function lx(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===T.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function qo(i,e,t,n,a,s){const r=i.cases;if(!r||r.length<2)return;const o=e==="python",l=n+t.indentPerLevel,u=!t.includeEmptyElseBranch&&Pb(r[1].elements),m=u?void 0:lx(r[1].elements,t);if(o){vi(s?"elif ":"if ",`: `,i.textLines,e,t,n,a),S1(r[0].elements,e,t,l,a),m?qo(m,e,t,n,a,!0):u||(a.out+=Z(n)+`else: `,S1(r[1].elements,e,t,l,a));return}if(vi(s?"} else if (":"if (",`) { -`,i.textLines,e,t,n,a),S1(r[0].elements,e,t,l,a),m){const c=a.out.length;qo(m,e,t,n,a,!0),rg(t,m,a,c)}else u||(a.out+=Z(n)+`} else { +`,i.textLines,e,t,n,a),S1(r[0].elements,e,t,l,a),m){const c=a.out.length;qo(m,e,t,n,a,!0),og(t,m,a,c)}else u||(a.out+=Z(n)+`} else { `,S1(r[1].elements,e,t,l,a)),a.out+=Z(n)+`} -`}function mr(i,e,t,n,a){const s=a.out.length;lx(i,e,t,n,a),rg(t,i,a,s)}function lx(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>S1(c,e,t,d,a),l=(c,d)=>vi(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=m0(i.textLines,e,c))};switch(i.type){case T.leerElement:a.out+=t.live?v0(n,t.live):Hh(n,e);return;case T.anweisung:case T.aufruf:rx(i.textLines,e,t,n,a);return;case T.aussprung:{const c=$a(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break +`}function mr(i,e,t,n,a){const s=a.out.length;ux(i,e,t,n,a),og(t,i,a,s)}function ux(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>S1(c,e,t,d,a),l=(c,d)=>vi(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=m0(i.textLines,e,c))};switch(i.type){case T.leerElement:a.out+=t.live?v0(n,t.live):Vh(n,e);return;case T.anweisung:case T.aufruf:ox(i.textLines,e,t,n,a);return;case T.aussprung:{const c=$a(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break `:`break # ${c} `):a.out+=Z(n)+(c===""?`break; `:`break; // ${c} @@ -157,14 +157,14 @@ ${o.out}${Z(a)}} `,o(d.elements,n+s*2)}else{const f=g?"default:"+X1(d.name,e):"case "+ca(d.name,e)+":";a.out+=Z(n+s)+f+` `,o(d.elements,n+s*2),a.out+=Z(n+s*2)+`break; `}}),r||(a.out+=Z(n)+`} -`);return}case T.forSchleife:if(e==="java"){u();const c=t.live?sg(i.textLines,t.live.labels):h0(i.textLines);a.out+=Z(n)+"for ("+c+`) { -`}else if(r){const c=t.jsIntVariables??new Set,d=Ub(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` +`);return}case T.forSchleife:if(e==="java"){u();const c=t.live?rg(i.textLines,t.live.labels):h0(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`}else if(r){const c=t.jsIntVariables??new Set,d=Yb(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` `;else if(d){u(),a.out+=Z(n)+d.init+` `,a.out+=Z(n)+"while "+Ze(d.condition,c)+`: -`;for(const h of i.loopBody??[])mr(h,e,t,n+s,a);a.out+=Z(n+s)+Xh(d.increment,c)+` -`;return}else t.live?a.out+=Z(n)+mx(i.textLines,t.live.labels,c)+` +`;for(const h of i.loopBody??[])mr(h,e,t,n+s,a);a.out+=Z(n+s)+eg(d.increment,c)+` +`;return}else t.live?a.out+=Z(n)+cx(i.textLines,t.live.labels,c)+` `:l("for ",`: -`)}else{u();const c=t.live?ux(i.textLines,t.live.labels):qb(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`)}else{u();const c=t.live?mx(i.textLines,t.live.labels):Qb(i.textLines);a.out+=Z(n)+"for ("+c+`) { `}o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} `);return;case T.whileSchleife:l(r?"while ":"while (",r?`: `:`) { @@ -180,22 +180,22 @@ ${o.out}${Z(a)}} `:`while (true) /* ${c} */ { `),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} `);return}}}const Ki="",x0="",n1=i=>Ki+i+x0,v0=(i,e)=>Z(i)+n1(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` -`,y0=i=>i.every(e=>e.trim()==="");function sg(i,e){return y0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Qt(i[a]??"");return s===""?n1(n):s}).join("; "):h0(i)}function ux(i,e){const t=sg(i,e).split(";"),n=t[0].includes(Ki)?void 0:Qh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function mx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Qt(g)):[],r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ye(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Ze(r[2],t):n1(e.start),u=ye(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=n1(e.end);u&&(o===void 0||u[1]===o)&&(m=Ze(u[3],t),u[2]==="<="&&(m=Jo(m,1)));const c=o===void 0?void 0:Uh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??n1(e.selector)} in range(${d.join(", ")}):`}function Qo(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Qo(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Qo(o.elements,[...s,l],t))}),t}function rg(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` -`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function og(i,e,t){const n={target:e,labels:t,paths:Qo(i.elements),spans:[]},a=u0(i,e,{includeEmptyElseBranch:!0,live:n}),s=St(i.caption);let r="";if(e==="java"){const u=b0(i);for(const m of u)r+=m+` +`,y0=i=>i.every(e=>e.trim()==="");function rg(i,e){return y0(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Qt(i[a]??"");return s===""?n1(n):s}).join("; "):h0(i)}function mx(i,e){const t=rg(i,e).split(";"),n=t[0].includes(Ki)?void 0:Uh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function cx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Qt(g)):[],r=ye(/^\s*(?:integer|int|long|short|byte|double|float)?\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,n),o=(r==null?void 0:r[1])??((h=ye(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Ze(r[2],t):n1(e.start),u=ye(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=n1(e.end);u&&(o===void 0||u[1]===o)&&(m=Ze(u[3],t),u[2]==="<="&&(m=Jo(m,1)));const c=o===void 0?void 0:Yh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??n1(e.selector)} in range(${d.join(", ")}):`}function Qo(i,e=[],t=new Map){return i.forEach((n,a)=>{var r;const s=[...e,a];t.has(n)||t.set(n,s),n.loopBody&&Qo(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>Qo(o.elements,[...s,l],t))}),t}function og(i,e,t,n){const a=i.live,s=a==null?void 0:a.paths.get(e);if(!a||!s||t.out.length===n)return;const r=o=>t.out.slice(0,o).split(` +`).length-1;a.spans.push({path:s,from:r(n),to:r(t.out.length-1)})}function lg(i,e,t){const n={target:e,labels:t,paths:Qo(i.elements),spans:[]},a=u0(i,e,{includeEmptyElseBranch:!0,live:n}),s=St(i.caption);let r="";if(e==="java"){const u=b0(i);for(const m of u)r+=m+` `;Ts(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; `),r+=`Scanner scanner = new Scanner(System.in); `):u.length&&(r+=` -`),s&&(r+=Gh(s)+` +`),s&&(r+=Hh(s)+` `)}else{if(s)for(const m of s.params)m.dims||(m.type==="int"&&a.jsIntVariables.add(m.name),m.type==="string"&&a.stringVariables.add(m.name));const u=s==null?void 0:s.params.map(m=>m.name).join(", ");e==="javascript"?(r+=`"use strict"; `,r+=Ro([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { -`)):(ag(i)&&(r+=`import random +`)):(sg(i)&&(r+=`import random `),r+=Ro([i],"python"),s&&(r+=`def ${s.name}(${u}): `))}const o={out:""};S1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:lg((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function lg(i,e){switch(e){case"javascript":return hx(Ho(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return cx(Ho(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return fx(i)}}function cx(i){for(let e=0;e<5;e++){const t=ug(dx(i),"python");if(t===i)break;i=t}return i}const Hu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function dx(i){return w0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Hu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=gx(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Hu[t]}(${n})`}})}function hx(i){for(let e=0;e<5;e++){const t=ug(w0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function ug(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function gx(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function w0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const bx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function cr(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),bx.has(t.toLowerCase())&&(t="_"+t),t)}function Vu(i,e,t={},n=[]){const a={...Jh,...t},s=cr(e),r=[i,...n].filter((z,I,S)=>S.indexOf(z)===I).map(z=>({d:z,header:St(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>No(z.d,z.header,"java",t,a.indentPerLevel)),l=St(i.caption),u=r.some(z=>Ts(z.d)),m=Is(i,"java",a),c=a.indentPerLevel*2,d=Ts(i),h=d?xx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` +`).length-1;return{text:ug((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function ug(i,e){switch(e){case"javascript":return gx(Ho(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return dx(Ho(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return bx(i)}}function dx(i){for(let e=0;e<5;e++){const t=mg(hx(i),"python");if(t===i)break;i=t}return i}const Hu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function hx(i){return w0(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(Hu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=px(n);return a.length===2?`${e}[${a[0].trim()}:${a[1].trim()}]`:`${e}[${n.trim()}:]`}case"contains":return`(${n.trim()} in ${e})`;case"isEmpty":return`(len(${e}) == 0)`;case"equalsIgnoreCase":return`(${e}.lower() == ${n.trim()}.lower())`;case"compareTo":return`((${e} > ${n.trim()}) - (${e} < ${n.trim()}))`;case"repeat":return`(${e} * ${n.trim()})`;case"concat":return`(${e} + ${n.trim()})`;default:return`${e}.${Hu[t]}(${n})`}})}function gx(i){for(let e=0;e<5;e++){const t=mg(w0(i,["isEmpty","equalsIgnoreCase","compareTo","replace"],(n,a,s)=>{switch(a){case"isEmpty":return`(${n}.length === 0)`;case"equalsIgnoreCase":return`(${n}.toLowerCase() === ${s.trim()}.toLowerCase())`;case"compareTo":return`${n}.localeCompare(${s.trim()})`;default:return`${n}.replaceAll(${s})`}}),"javascript");if(t===i)break;i=t}return i}function mg(i,e){const t=/\bFiles\.readString\(\s*(?:Path\.of|Paths\.get)\(\s*("(?:[^"\\]|\\.)*")\s*\)\s*\)/g;return e==="python"?i.replace(t,'open($1, encoding="utf-8").read()').replace(/\bInteger\.parseInt\(/g,"int(").replace(/\bDouble\.parseDouble\(/g,"float(").replace(/\bString\.valueOf\(/g,"str("):i.replace(t,'require("fs").readFileSync($1, "utf8")').replace(/\bInteger\.parseInt\(/g,"parseInt(").replace(/\bDouble\.parseDouble\(/g,"parseFloat(").replace(/\bString\.valueOf\(/g,"String(")}function px(i){let e=0;const t=[...i].findIndex(n=>n==="("?(e+=1,!1):n===")"?(e-=1,!1):n===","&&e===0);return t<0?[i]:[i.slice(0,t),i.slice(t+1)]}function w0(i,e,t){const n=new RegExp(`([A-Za-z_]\\w*(?:\\[[^[\\]]*\\]|\\.\\w+\\(\\))*|"(?:[^"\\\\]|\\\\.)*")\\.(${e.join("|")})\\(`,"g");let a="",s=0;for(let r=n.exec(i);r;r=n.exec(i)){const o=r.index+r[0].length-1;let l=0,u=-1;for(let c=o;ce.has(n.toLowerCase())?t:`${n}.length()`)}const xx=new Set("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while true false null var record sealed permits yield module open opens requires exports to uses provides with transitive".split(" "));function cr(i){const e=i.trim();if(e==="")return"Main";let t="";return Array.from(e).forEach((n,a)=>{a===0?new RegExp("\\p{L}","u").test(n)||n==="_"||n==="$"?t+=n:new RegExp("\\p{Nd}","u").test(n)?t+="_"+n:t+="_":/[\p{L}\p{M}\p{N}]/u.test(n)||n==="_"||n==="$"?t+=n:t+="_"}),t=t.replace(/_{2,}/g,"_").replace(/^_+|_+$/g,""),t===""?"Main":(new RegExp("^\\p{Nd}","u").test(t)&&(t="_"+t),xx.has(t.toLowerCase())&&(t="_"+t),t)}function Vu(i,e,t={},n=[]){const a={...Gh,...t},s=cr(e),r=[i,...n].filter((z,I,S)=>S.indexOf(z)===I).map(z=>({d:z,header:St(z.caption)})).filter(z=>z.header!==void 0),o=r.map(z=>No(z.d,z.header,"java",t,a.indentPerLevel)),l=St(i.caption),u=r.some(z=>Ts(z.d)),m=Is(i,"java",a),c=a.indentPerLevel*2,d=Ts(i),h=d?vx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` `).map(z=>z.trim()===""?g:g+z).join(` `);let b="";const x=o.length>0&&(d||u),v=[...new Set([i,...r.map(z=>z.d)].flatMap(b0))],w=v.some(z=>z!==f0);(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const z of v)b+=z+` `;v.length&&(b+=` @@ -210,9 +210,9 @@ ${o.out}${Z(a)}} `),b+=Z(a.indentPerLevel)+`} `);for(const[z,I]of o.entries())b+=(z>0||!l?` `:"")+I;return b+=`} -`,b}function xx(i){const e=i.split(` +`,b}function vx(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` -`)}const zn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function da(i){try{return localStorage.getItem(i)}catch{return null}}function ha(i,e){try{localStorage.setItem(i,e)}catch{}}const vx=()=>p("web_run_stopped_loop"),mg=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function yx(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(vx())}); })(); ${a}++) {`})}function wx(i){return yx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const zx=` +`)}const zn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function da(i){try{return localStorage.getItem(i)}catch{return null}}function ha(i,e){try{localStorage.setItem(i,e)}catch{}}const yx=()=>p("web_run_stopped_loop"),cg=()=>p("web_run_cancelled"),Ne=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function wx(i){let e=0;return i.replace(/^(\s*)while\s*\(\s*true\s*\)(?:\s*\/\*.*?\*\/)?\s*\{/gm,(t,n)=>{const a=`__visuStructLoopGuard${e++}`;return`${n}for (let ${a} = 0; ${a} < 100000 || (() => { throw new Error(${JSON.stringify(yx())}); })(); ${a}++) {`})}function zx(i){return wx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const Ix=` let answer let lines = [] // Text von \`process.stdout.write\` ohne neue Zeile (wie \`System.out.print\`). @@ -244,7 +244,7 @@ const process = { stdout: { write: (text) => { } } } setInterval(flush, 50) const __visuStructPrompt = (label) => new Promise((resolve, reject) => { - answer = (value) => (value === null ? reject(new Error(${JSON.stringify(mg())})) : resolve(value)) + answer = (value) => (value === null ? reject(new Error(${JSON.stringify(cg())})) : resolve(value)) send('prompt', String(label ?? '')) }) onmessage = async (e) => { @@ -257,7 +257,7 @@ onmessage = async (e) => { send('error', String(err)) } } -`,Zr=2e3;class Ix{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=da(zn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=da(zn.javaMode)==="class"?"class":"snippet",this.comments=da(zn.comments)==="true",this.emptyElse=da(zn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Vu(e,this.classStem(),t,this.subprograms()):Is(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return zs(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=` +`,Zr=2e3;class kx{constructor(e,t,n,a,s=()=>[]){y(this,"element");y(this,"target");y(this,"javaMode");y(this,"comments");y(this,"emptyElse");y(this,"code","");y(this,"codeView");y(this,"javaModeRow");y(this,"runButton");y(this,"saveButton");y(this,"copyButton");y(this,"runner");y(this,"runOutput");y(this,"runInput");y(this,"pseudocodeBox");y(this,"pseudocodeHint");y(this,"worker");y(this,"outputLines",[]);y(this,"droppedLines",0);y(this,"outputFrame");y(this,"pendingAnswer");this.currentDocument=e,this.saveFile=t,this.onClose=n,this.setPseudocode=a,this.subprograms=s;const r=da(zn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=da(zn.javaMode)==="class"?"class":"snippet",this.comments=da(zn.comments)==="true",this.emptyElse=da(zn.emptyElse)!=="false",this.element=document.createElement("aside"),this.element.className="codepanel",this.build()}refresh(){const e=this.currentDocument(),t=this.options();this.code=this.target==="java"&&this.javaMode==="class"?Vu(e,this.classStem(),t,this.subprograms()):Is(e,this.target,t,this.subprograms()),this.codeView.textContent=this.code,this.javaModeRow.hidden=this.target!=="java",this.saveButton.hidden=this.target!=="java",this.runButton.hidden=this.target!=="javascript"||!!e.pseudocode,this.runButton.hidden&&this.stopRun(!0),this.pseudocodeBox.checked=!!e.pseudocode,this.pseudocodeHint.hidden=!e.pseudocode;for(const n of this.element.querySelectorAll("[data-target]"))n.setAttribute("aria-pressed",String(n.dataset.target===this.target));for(const n of this.element.querySelectorAll("[data-java-mode]"))n.setAttribute("aria-pressed",String(n.dataset.javaMode===this.javaMode))}close(){this.stopRun(!0)}options(){return{includeDiagramTextAsComments:this.comments,includeEmptyElseBranch:this.emptyElse,pseudocodeNote:p("codegen_pseudocode_note")}}classStem(){return zs(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`

${Ne(p("codegen_placeholder_title"))}

@@ -287,12 +287,12 @@ onmessage = async (e) => {

${Ne(p("codegen_generated_hint"))}

- `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,ha(zn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ha(zn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ha(zn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ha(zn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=cr(this.classStem()),s=Vu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=wx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([zx],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(mg())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>Zr&&(this.droppedLines+=this.outputLines.length-Zr,this.outputLines.splice(0,this.outputLines.length-Zr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` + `;const e=a=>this.element.querySelector(a);this.codeView=e(".code-view"),this.javaModeRow=e(".java-mode"),this.runButton=e("[data-act=run]"),this.saveButton=e("[data-act=save]"),this.copyButton=e("[data-act=copy]"),this.runner=e(".runner"),this.runOutput=e(".runner-out"),this.runInput=e(".runner-input"),this.pseudocodeBox=e("[data-opt=pseudocode]"),this.pseudocodeHint=e(".pseudocode-hint"),this.pseudocodeBox.addEventListener("change",()=>this.setPseudocode(this.pseudocodeBox.checked)),e(".code-close").addEventListener("click",()=>this.onClose());for(const a of this.element.querySelectorAll("[data-target]"))a.addEventListener("click",()=>{this.target=a.dataset.target,ha(zn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ha(zn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ha(zn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ha(zn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=cr(this.classStem()),s=Vu(this.currentDocument(),this.classStem(),this.options());this.saveFile(`${a}.java`,s)}),this.runButton.addEventListener("click",()=>this.run()),e("[data-act=stop]").addEventListener("click",()=>this.stopRun(!1)),e("[data-act=cancel]").addEventListener("click",()=>this.answer(null)),this.runInput.addEventListener("submit",a=>{a.preventDefault(),this.answer(this.runInput.querySelector("input").value)})}async copy(){var t;let e=!1;try{await navigator.clipboard.writeText(this.code),e=!0}catch{const n=document.createRange();n.selectNodeContents(this.codeView);const a=getSelection();a==null||a.removeAllRanges(),a==null||a.addRange(n),e=((t=document.execCommand)==null?void 0:t.call(document,"copy"))??!1}this.copyButton.textContent=p(e?"web_copied_check":"web_copy_manual"),setTimeout(()=>this.copyButton.textContent=p("codegen_copy"),2e3)}run(){this.stopRun(!0),this.runner.hidden=!1,this.runOutput.textContent="",this.outputLines=[],this.droppedLines=0,this.runOutput.classList.remove("error");const e=zx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([Ix],{type:"text/javascript"})),a=new Worker(n);URL.revokeObjectURL(n),a.onmessage=s=>t(s.data),a.onerror=s=>{s.preventDefault(),t({type:"error",text:s.message||p("web_run_error")})},a.postMessage({type:"run",code:e}),this.worker=a}catch{this.runInPage(e,t)}this.setRunning(!0)}runInPage(e,t){const n={log:(...r)=>t({type:"log",lines:[r.map(o=>typeof o=="string"?o:JSON.stringify(o)).join(" ")]})},a=r=>new Promise((o,l)=>{this.pendingAnswer=u=>u===null?l(new Error(cg())):o(u),t({type:"prompt",text:r})}),s=(async()=>{}).constructor;new s("__visuStructPrompt","console",e)(a,n).then(()=>t({type:"done"})).catch(r=>t({type:"error",text:String(r)}))}onRunnerMessage(e){switch(e.type){case"log":this.appendOutput(e.lines??[]);break;case"prompt":{this.runInput.hidden=!1,this.runInput.querySelector("label").textContent=e.text??"";const t=this.runInput.querySelector("input");t.value="",t.focus();break}case"error":this.appendOutput([e.text??""]),this.runOutput.classList.add("error"),this.stopRun(!1);break;case"done":this.stopRun(!1);break}}appendOutput(e){this.outputLines.push(...e),this.outputLines.length>Zr&&(this.droppedLines+=this.outputLines.length-Zr,this.outputLines.splice(0,this.outputLines.length-Zr)),this.outputFrame===void 0&&(this.outputFrame=requestAnimationFrame(()=>{this.outputFrame=void 0;const t=this.droppedLines>0?p("web_run_dropped_fmt",this.droppedLines)+` `:"";this.runOutput.textContent=t+this.outputLines.join(` `)+(this.outputLines.length?` -`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Be=(i,e=!1)=>``,me={newFile:Be(''),open:Be(''),save:Be(''),undo:Be(''),redo:Be(''),cut:Be(''),copy:Be(''),paste:Be(''),trash:Be(''),share:Be(''),book:Be(''),code:Be(''),play:Be('',!0),step:Be(''),indent:Be(''),stop:Be('',!0),folder:Be(''),newFolder:Be(''),diagram:Be(''),fileText:Be('')},kx="visustruct.learn.progress",Lr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function Sx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Lr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Lr[i.view.lesson]?{...i.view,lesson:Lr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function Tx(){try{localStorage.removeItem(kx)}catch{}}const cg=()=>({lessons:{},exercises:{}});Tx();let tt=cg();const Uo=new Set;function ga(){for(const i of Uo)i()}const qu="visustruct-lernstand";function dg(i,e){return i||e||void 0}function _x(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:dg(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function jx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=_x(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:dg(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const xe={lesson(i){return tt.lessons[i]??{step:0}},updateLesson(i,e){tt.lessons[i]={...xe.lesson(i),...e},ga()},exercise(i){return tt.exercises[i]??{}},updateExercise(i,e){tt.exercises[i]={...xe.exercise(i),...e},ga()},resetExercise(i){delete tt.exercises[i],ga()},view(){return tt.view},hasContent(){return Object.values(tt.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(tt.exercises).length>0},setView(i){tt.view=i,ga()},onChange(i){return Uo.add(i),()=>Uo.delete(i)},toFile(){return JSON.stringify({format:qu,version:1,saved:new Date().toISOString(),lessons:tt.lessons,exercises:tt.exercises,view:tt.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==qu)return!1;const n=Sx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return tt=e?{...jx(tt,n),view:n.view??tt.view}:n,!0},clear(){tt=cg()}};function Qu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Uu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function Cx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Uu(i.name)&&Uu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function Ax(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function Px(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function Dx(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Yn=10;function hg(i){let e=i.replace(/\r/g,"").split(` -`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,b)=>"^>v<".includes(g)?h===m>>1&&b===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Yn,r=e.length*Yn,o=(m,c)=>({x:-s/2+(m+.5)*Yn,y:r/2-(c+.5)*Yn}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Yu?l.colors.push({at:g,color:Yu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Yu={r:"red",g:"green",b:"blue",y:"yellow"},ei=(i,e)=>Math.abs(i.x-e.x)<=Yn/2&&Math.abs(i.y-e.y)<=Yn/2,$u=10,Ku=9,Bx=300,p1=8,Ox=[-3.6,-1.2,1.2,3.6],Mx=2.5,Zx=20,Lx=12,z0=100,Mi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Xu=i=>i*Math.PI/180,f1=i=>({x:Math.sin(Xu(i)),y:Math.cos(Xu(i))}),pa=()=>Array.from({length:Oh},()=>{}),em=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class _s{constructor(e=Mi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",pa());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=pa(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Yn/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=f1(this.pose.heading),t={x:this.pose.x+e.x*p1,y:this.pose.y+e.y*p1};return(this.setup.goals??[]).some(n=>ei(this.pose,n)||ei(t,n))||(this.setup.targets??[]).some(n=>ei(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[tm(e.args[0]),tm(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=pa().map(()=>em(e.args));return;case"ledOff":this.leds=pa();return;case"ledColor":this.leds[e.args[0]]=em(ps[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*Zx);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*p1+t.x*a,y:this.pose.y+e.y*p1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>ei(r,l))||this.setup.lines.some(l=>Ex(r,l)<=Mx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=f1(this.pose.heading),t={x:this.pose.x+e.x*p1,y:this.pose.y+e.y*p1};return(n=(this.setup.colors??[]).find(a=>ei(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=Wx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function nm(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Wx(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function Ex(i,e){let t=1/0;for(let n=0;n+10&&o.tick(z0),s.robotSensors={...o.sensors(),...Hx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?bs(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:Zh(m.robotActions.filter(d=>!Jx.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:bs(s.state.robotActions),tooManySteps:!0}}function Hx(i,e){const t=Math.floor(e/Fx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function gg(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function fa(i,e){return i.length!==e.length?!1:i.every((t,n)=>im(t)===im(e[n]))}function Vx(i,e){const t=n=>n.join("").replace(/\s+/g,"");return i.length>0&&i.length{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Gx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var b;return fa(gg((b=r.files)==null?void 0:b.get(f.name)),f.lines)}),l=!a.drive||fa(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||fa(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&fa(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Qx(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Yo(i){const e=[T.forSchleife,T.whileSchleife,T.doUntilSchleife,T.endlosschleife];let t=0;for(const n of i){const a=Math.max(Yo(n.loopBody??[]),...(n.cases??[]).map(s=>Yo(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Zi extends Error{}function Ux(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();js(o,Yx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Zi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Zi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Yx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function $x(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Zi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Zi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,b]=[d,g];return h.value==="<"?f"?f>b:f>=b}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Kx(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(js(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(js(i,e));return s!==t[t.length-1]&&t.push(s),t}function Xx(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function e4(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=Xx(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:js(o,l)}}function t4(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const n4=`--- +`:""),this.runOutput.scrollTop=this.runOutput.scrollHeight}))}answer(e){var t;this.runInput.hidden=!0,this.worker?this.worker.postMessage({type:"answer",value:e}):(t=this.pendingAnswer)==null||t.call(this,e),this.pendingAnswer=void 0}stopRun(e){var t;(t=this.worker)==null||t.terminate(),this.worker=void 0,this.pendingAnswer=void 0,this.runInput&&(this.runInput.hidden=!0),e&&this.runner&&(this.runner.hidden=!0),this.setRunning(!1)}setRunning(e){const t=this.element.querySelector("[data-act=stop]");t&&(t.disabled=!e)}}const Be=(i,e=!1)=>``,me={newFile:Be(''),open:Be(''),save:Be(''),undo:Be(''),redo:Be(''),cut:Be(''),copy:Be(''),paste:Be(''),trash:Be(''),share:Be(''),book:Be(''),code:Be(''),play:Be('',!0),step:Be(''),indent:Be(''),stop:Be('',!0),folder:Be(''),newFolder:Be(''),diagram:Be(''),fileText:Be('')},Sx="visustruct.learn.progress",Lr={"04-sequenz":"05-sequenz","05-variablen-und-datentypen":"04-variablen-und-datentypen","07-verzweigung":"08-verzweigung","08-bedingungen-verknuepfen":"09-bedingungen-verknuepfen","09-fallauswahl":"10-fallauswahl","10-while-schleife":"11-while-schleife","11-do-while-schleife":"12-do-while-schleife","12-for-schleife":"13-for-schleife","13-verschachteln":"14-verschachteln","14-arrays":"15-arrays","15-aufruf-und-aussprung":"18-aufruf-und-aussprung","16-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-aufruf-und-aussprung":"18-aufruf-und-aussprung","17-suchen-und-sortieren":"19-suchen-und-sortieren","18-suchen-und-sortieren":"19-suchen-und-sortieren","16-simulation-und-schreibtischtest":"07-simulation-und-schreibtischtest","17-java":"20-java","18-java":"20-java","19-java":"20-java","18-python-und-javascript":"21-python-und-javascript","19-python-und-javascript":"21-python-und-javascript","20-python-und-javascript":"21-python-und-javascript","22-erstes-fenster":"28-erstes-fenster","23-knopf-im-fenster":"29-knopf-im-fenster","24-der-knopf-reagiert":"30-der-knopf-reagiert","23-erstes-fenster":"28-erstes-fenster","24-knopf-im-fenster":"29-knopf-im-fenster","25-der-knopf-reagiert":"30-der-knopf-reagiert","26-zahl-verdoppeln":"31-zahl-verdoppeln","27-klickzaehler":"32-klickzaehler","28-ampel":"33-ampel","29-notenrechner":"34-notenrechner","30-taschenrechner":"35-taschenrechner","31-zahlenraten":"36-zahlenraten","13-lautsprecher":"16-lautsprecher","14-bildschirm":"18-bildschirm","15-motoren":"20-motoren","16-stoppuhr-akku":"21-stoppuhr-akku","03-sensoren":"04-sensoren","04-bis-zur-wand":"05-bis-zur-wand","05-abstand":"06-abstand","06-linie":"07-linie","07-farben":"08-farben","08-tasten-joystick":"10-tasten-joystick","09-licht":"11-licht","10-lautstaerke":"12-lautstaerke","11-neigung":"13-neigung","12-leds":"14-leds","13-einzelne-leds":"15-einzelne-leds","14-lautsprecher":"16-lautsprecher","15-bildschirm":"18-bildschirm","16-motoren":"20-motoren","17-stoppuhr-akku":"21-stoppuhr-akku"};function Tx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(Lr))i.lessons[a]&&!i.lessons[s]&&(e[s]=i.lessons[a]),i.lessons[a]&&delete e[a];const t=(n=i.view)!=null&&n.lesson&&Lr[i.view.lesson]?{...i.view,lesson:Lr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function _x(){try{localStorage.removeItem(Sx)}catch{}}const dg=()=>({lessons:{},exercises:{}});_x();let tt=dg();const Uo=new Set;function ga(){for(const i of Uo)i()}const qu="visustruct-lernstand";function hg(i,e){return i||e||void 0}function jx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||t[n]||!1;return{step:Math.max(i.step??0,e.step??0),done:hg(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Cx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=jx(i.lessons[a],s);const n={...i.exercises};for(const[a,s]of Object.entries(e.exercises)){const r=i.exercises[a];n[a]=r?{done:hg(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const xe={lesson(i){return tt.lessons[i]??{step:0}},updateLesson(i,e){tt.lessons[i]={...xe.lesson(i),...e},ga()},exercise(i){return tt.exercises[i]??{}},updateExercise(i,e){tt.exercises[i]={...xe.exercise(i),...e},ga()},resetExercise(i){delete tt.exercises[i],ga()},view(){return tt.view},hasContent(){return Object.values(tt.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(tt.exercises).length>0},setView(i){tt.view=i,ga()},onChange(i){return Uo.add(i),()=>Uo.delete(i)},toFile(){return JSON.stringify({format:qu,version:1,saved:new Date().toISOString(),lessons:tt.lessons,exercises:tt.exercises,view:tt.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==qu)return!1;const n=Tx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return tt=e?{...Cx(tt,n),view:n.view??tt.view}:n,!0},clear(){tt=dg()}};function Qu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const Uu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function Ax(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:Uu(i.name)&&Uu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function Px(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function Dx(i,e){const t=new Set([...e].map(a=>a.toLowerCase())),n=a=>!t.has(`${a}.visustruct`.toLowerCase())&&!t.has(`${a}.java`.toLowerCase());if(n(i))return i;for(let a=2;;a++)if(n(`${i} ${a}`))return`${i} ${a}`}function Bx(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Yn=10;function gg(i){let e=i.replace(/\r/g,"").split(` +`).filter(m=>!m.startsWith("//"));const t=e.filter(m=>/^linie:/.test(m)).map(m=>m.slice(6).trim());e=e.filter(m=>!/^linie:/.test(m));const n=e.findIndex(m=>/^raster:\s*\d+\s*$/.test(m));if(n>=0){const m=Number(e[n].split(":")[1]);e.splice(n,1),e=e.flatMap(c=>Array.from({length:m},(d,h)=>Array.from(c).map(g=>Array.from({length:m},(f,b)=>"^>v<".includes(g)?h===m>>1&&b===m>>1?g:".":g).join("")).join("")))}for(;e.length&&e[e.length-1].trim()==="";)e.pop();for(;e.length&&e[0].trim()==="";)e.shift();const s=Math.max(...e.map(m=>m.length))*Yn,r=e.length*Yn,o=(m,c)=>({x:-s/2+(m+.5)*Yn,y:r/2-(c+.5)*Yn}),l={width:s,depth:r,start:{x:0,y:0,heading:0},walls:[],lines:[],blocks:[],marks:[],goals:[],targets:[],colors:[]};let u=0;e.forEach((m,c)=>{Array.from(m).forEach((d,h)=>{const g=o(h,c);d==="#"?l.blocks.push(g):d==="="?l.marks.push(g):d==="Z"?l.goals.push(g):d==="o"?l.targets.push(g):d in Yu?l.colors.push({at:g,color:Yu[d]}):"^>v<".includes(d)&&(u++,l.start={...g,heading:{"^":0,">":90,v:180,"<":270}[d]})})});for(const m of t)l.lines.push(m.split(/\s+/).map(c=>{const[d,h]=c.split(",").map(Number);if(!Number.isFinite(d)||!Number.isFinite(h))throw new Error(`Linie: „${c}“ ist kein Feld (Spalte,Zeile).`);return o(d,h)}));if(u!==1)throw new Error(`Die Weltkarte braucht genau einen Start (^ > v <), gefunden: ${u}`);return l}const Yu={r:"red",g:"green",b:"blue",y:"yellow"},ei=(i,e)=>Math.abs(i.x-e.x)<=Yn/2&&Math.abs(i.y-e.y)<=Yn/2,$u=10,Ku=9,Ox=300,p1=8,Mx=[-3.6,-1.2,1.2,3.6],Zx=2.5,Lx=20,Wx=12,z0=100,Mi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},Xu=i=>i*Math.PI/180,f1=i=>({x:Math.sin(Xu(i)),y:Math.cos(Xu(i))}),pa=()=>Array.from({length:Mh},()=>{}),em=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class _s{constructor(e=Mi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",pa());y(this,"screen");y(this,"wheels",[0,0]);y(this,"time",0);y(this,"timerStart",0);y(this,"blocked",!1);y(this,"blockWallCache");this.setup=e,this.pose={...e.start},this.trail=[{x:e.start.x,y:e.start.y}]}reset(){this.pose={...this.setup.start},this.trail=[{x:this.pose.x,y:this.pose.y}],this.bumps=0,this.leds=pa(),this.screen=void 0,this.wheels=[0,0],this.time=0,this.timerStart=0,this.blocked=!1}get allWalls(){const e=this.setup.width/2,t=this.setup.depth/2,n=[{x:-e,y:-t},{x:e,y:-t},{x:e,y:t},{x:-e,y:t}];return[...this.setup.walls,...n.map((a,s)=>({from:a,to:n[(s+1)%4]})),...this.blockWalls]}get blockWalls(){return this.blockWallCache??(this.blockWallCache=(this.setup.blocks??[]).flatMap(e=>{const t=Yn/2,n=[{x:e.x-t,y:e.y-t},{x:e.x+t,y:e.y-t},{x:e.x+t,y:e.y+t},{x:e.x-t,y:e.y+t}];return n.map((a,s)=>({from:a,to:n[(s+1)%4]}))})),this.blockWallCache}atGoal(){const e=f1(this.pose.heading),t={x:this.pose.x+e.x*p1,y:this.pose.y+e.y*p1};return(this.setup.goals??[]).some(n=>ei(this.pose,n)||ei(t,n))||(this.setup.targets??[]).some(n=>ei(this.pose,n))}apply(e){switch(e.method){case"forward":return this.wheels=[0,0],this.drive(e.args[0]);case"backward":return this.wheels=[0,0],this.drive(-e.args[0]);case"turnRight":return this.wheels=[0,0],this.turn(e.args[0]);case"turnLeft":return this.wheels=[0,0],this.turn(-e.args[0]);case"stop":this.wheels=[0,0];return;case"drive":this.wheels=[tm(e.args[0]),tm(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=pa().map(()=>em(e.args));return;case"ledOff":this.leds=pa();return;case"ledColor":this.leds[e.args[0]]=em(ps[e.text??""]??[0,0,0]);return;case"showText":this.screen=e.text;return}}tick(e){if(e<=0)return;this.time+=e;const[t,n]=this.wheels.map(o=>o/100*Lx);if(t===0&&n===0)return;const a=Math.ceil(e/10),s=e/1e3/a;let r=!1;for(let o=0;o{const r={x:this.pose.x+e.x*p1+t.x*a,y:this.pose.y+e.y*p1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>ei(r,l))||this.setup.lines.some(l=>Nx(r,l)<=Zx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=f1(this.pose.heading),t={x:this.pose.x+e.x*p1,y:this.pose.y+e.y*p1};return(n=(this.setup.colors??[]).find(a=>ei(t,a.at)))==null?void 0:n.color}sensors(){const e=this.lineState();return{getDistance:this.distance(),getLine:e,getColor:this.colorUnder()??(e&6?"black":"white"),isLineLeft:(e&4)!==0,isLineRight:(e&2)!==0,getTimer:this.timer}}freeDistance(e,t){let n=1/0;for(const a of this.allWalls){const s=Ex(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function nm(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Ex(i,e,t,n){const a={x:n.x-t.x,y:n.y-t.y},s=e.x*a.y-e.y*a.x;if(Math.abs(s)<1e-12)return;const r={x:t.x-i.x,y:t.y-i.y},o=(r.x*a.y-r.y*a.x)/s,l=(r.x*e.y-r.y*e.x)/s;return o>=0&&l>=0&&l<=1?o:void 0}function Nx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(z0),s.robotSensors={...o.sensors(),...Vx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?bs(m.robotActions):void 0,...n?{atGoal:o.atGoal(),bumps:o.bumps}:{},led:o.leds.some(d=>d!==void 0),tone:m.robotActions.some(d=>d.method==="playTone"),screen:o.screen,actions:Lh(m.robotActions.filter(d=>!Gx.has(d.method)))});if(m.inputRequest){const d=r.shift();if(d===void 0)return{...c(),missingInput:!0};if(s.provideInput(d),m.inputErrorNotice)return{...c(),error:m.inputErrorNotice};continue}if(m.isHalted)return{...c(),error:m.notice};if(!s.canStep)return{...c(),unusedInputs:r.length||void 0};s.step()}return{outputs:[...s.state.outputLines],files:new Map(s.state.files),drive:bs(s.state.robotActions),tooManySteps:!0}}function Vx(i,e){const t=Math.floor(e/Rx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function pg(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` +`)}function fa(i,e){return i.length!==e.length?!1:i.every((t,n)=>im(t)===im(e[n]))}function qx(i,e){const t=n=>n.join("").replace(/\s+/g,"");return i.length>0&&i.length{var d,h,g;const s=a.world?n==null?void 0:n(a.world):void 0;if(a.world&&!s)throw new Error(`Weltkarte „${a.world}“ fehlt.`);const r=Hx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var b;return fa(pg((b=r.files)==null?void 0:b.get(f.name)),f.lines)}),l=!a.drive||fa(r.drive??[],a.drive),u=!a.world||r.bumps===0&&(!((d=s==null?void 0:s.goals)!=null&&d.length||(h=s==null?void 0:s.targets)!=null&&h.length)||r.atGoal===!0),m=(a.led===void 0||r.led===a.led)&&(a.tone===void 0||r.tone===a.tone)&&(a.screen===void 0||r.screen===a.screen)&&(a.drives===void 0||(((g=r.drive)==null?void 0:g.length)??0)>0===a.drives)&&(!a.actions||fa(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&fa(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Ux(i){const e=new Set,t=n=>{for(const a of n){e.add(a.type),a.loopBody&&t(a.loopBody);for(const s of a.cases??[])t(s.elements)}};return t(i.elements),e}function Yo(i){const e=[T.forSchleife,T.whileSchleife,T.doUntilSchleife,T.endlosschleife];let t=0;for(const n of i){const a=Math.max(Yo(n.loopBody??[]),...(n.cases??[]).map(s=>Yo(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class Zi extends Error{}function Yx(i,e){const t=[],n=[];for(const a of i){const s=a.trim();if(!s)continue;if(s.startsWith("?")){const o=s.slice(1).trim();js(o,$x(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new Zi(`${e}: Unbekannte Zeile im Spiel: „${s}“`);t.push(r[4]?{name:r[1],kind:"boolean"}:{name:r[1],kind:"int",min:Number(r[2]),max:Number(r[3])})}if(!n.length)throw new Zi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function $x(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Kx(i){const e=[],t=/\s*(?:(\d+)|(true|false)\b|([A-Za-z_]\w*)|(&&|\|\||==|!=|<=|>=|<|>|!|\(|\)))/y;let n=0;for(;nt[n],s=d=>{var h;return((h=a())==null?void 0:h.kind)==="op"&&a().value===d},r=()=>{throw new Zi(`Bedingung nicht lesbar: „${i}“`)},o=()=>{const d=t[n++]??r();if(d.kind==="num"||d.kind==="bool")return d.value;if(d.kind==="name"){if(!(d.value in e))throw new Zi(`Unbekannte Variable „${d.value}“ in „${i}“`);return e[d.value]}if(d.value==="("){const h=m();return s(")")||r(),n++,h}if(d.value==="!"){const h=o();return typeof h!="boolean"&&r(),!h}return r()},l=()=>{const d=o(),h=a();if((h==null?void 0:h.kind)==="op"&&["==","!=","<","<=",">",">="].includes(h.value)){n++;const g=o();switch(h.value){case"==":return d===g;case"!=":return d!==g}(typeof d!="number"||typeof g!="number")&&r();const[f,b]=[d,g];return h.value==="<"?f"?f>b:f>=b}return d},u=()=>{let d=l();for(;s("&&");){n++;const h=l();d=d&&h}return d},m=()=>{let d=u();for(;s("||");){n++;const h=u();d=d||h}return d},c=m();return n!==t.length||typeof c!="boolean"?r():c}function Xx(i,e){const t=[i],n=i.replace(/\b[A-Za-z_]\w*\b/g,r=>r in e?String(e[r]):r);n!==i&&t.push(n);const a=n.replace(/(-?\d+|true|false)\s*(==|!=|<=|>=|<|>)\s*(-?\d+|true|false)/g,r=>String(js(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(js(i,e));return s!==t[t.length-1]&&t.push(s),t}function e4(i,e){const t=[],n=new RegExp(`\\b${e}\\s*(?:==|!=|<=|>=|<|>)\\s*(-?\\d+)|(-?\\d+)\\s*(?:==|!=|<=|>=|<|>)\\s*${e}\\b`,"g");for(const a of i.matchAll(n)){const s=Number(a[1]??a[2]);t.push(s-1,s,s+1)}return t}function t4(i,e,t,n=Math.random){const a=i.conditions.length,s=Math.floor(e*a/t),r=Math.min(a-1,s+(n()<.5?0:1)),o=i.conditions[r],l={};for(const u of i.vars){if(u.kind==="boolean"){l[u.name]=n()<.5;continue}const m=e4(o,u.name).filter(c=>c>=u.min&&c<=u.max);l[u.name]=m.length&&n()<.6?m[Math.floor(n()*m.length)]:u.min+Math.floor(n()*(u.max-u.min+1))}return{condition:o,values:l,answer:js(o,l)}}function n4(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const i4=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -304,9 +304,6 @@ kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. - erklären, was ein Algorithmus ist - ein Struktogramm lesen - die drei Grundbausteine Sequenz, Verzweigung und Wiederholung erkennen -- einen PAP (englisch *flowchart*) lesen und selbst zusammenbauen -- erklären, warum Sprünge im PAP zu Fehlern führen -- einen einfachen Algorithmus als Pseudocode lesen ::: ## Ein Algorithmus ist eine genaue Anleitung @@ -339,7 +336,7 @@ Die Darstellung stammt von **Isaac Nassi und Ben Shneiderman** (1973). Deshalb h Links Isaac „Ike“ Nassi (Foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/deed.de), zugeschnitten), rechts Ben Shneiderman (Foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0). ::: -> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer. Programme, die kreuz und quer springen, nennt man **Spaghetticode**, weil sich ihr Ablauf verheddert wie Nudeln auf dem Teller. Mehr dazu in Schritt 10. +> Ein Struktogramm hat immer genau einen Anfang (oben) und ein Ende (unten). Es gibt keine Pfeile und keine Sprünge kreuz und quer. Programme, die kreuz und quer springen, nennt man **Spaghetticode**, weil sich ihr Ablauf verheddert wie Nudeln auf dem Teller. Mehr dazu in der nächsten Lektion. ::: angeberwissen Määäh, aufgepasst! 1972 waren Nassi und Shneiderman noch Doktoranden an der Stony Brook University bei New York, Shneiderman etwa 25 und Nassi etwa 23. Also quasi zwei Studis, die nebenbei Informatikgeschichte geschrieben haben. @@ -417,11 +414,132 @@ Die Kästen können auch **ineinander geschachtelt** werden: In einer Schleife o Trostpflaster für alle mit einer verpatzten Arbeit: Die berühmte Fachzeitschrift *Communications of the ACM* hat den Struktogramm-Artikel abgelehnt. Laut Nassi meinte der Gutachter sogar, sie sollten alle Exemplare einsammeln und verbrennen. Autsch! Er erschien 1973 dann in einem kleineren Heft und wird heute tausendfach zitiert. Ätsch! ::: +## Erst die Struktur, dann der Code + +Beim Programmieren passieren zwei Dinge gleichzeitig: Du musst dir den Ablauf überlegen und die Schreibweise der Programmiersprache beachten. Mit einem Struktogramm trennst du beides. + +1. Du denkst zuerst über die **Logik** nach: Welche Schritte, welche Bedingungen, welche Wiederholungen? +2. Danach übersetzt du die fertige Struktur in **Java, Python oder JavaScript**. VisuStruct kann dir den Code sogar erzeugen. + +Mit der **Simulation** kannst du dein Struktogramm außerdem Schritt für Schritt ausführen und prüfen, ob es wirklich tut, was es soll. + +## Spiel: Welcher Baustein? + +::: spiel frage +titel: Spiel: Welcher Baustein? +intro: Ludwig beschreibt Dinge aus seinem Alltag. Welcher der drei Bausteine steckt darin? Acht Runden. +antworten: Sequenz | Verzweigung | Wiederholung + +runde: +frage: „Zahnpasta auf die Bürste, Zähne putzen, Mund ausspülen.“ +richtig: Sequenz +> Drei Schritte, jeder genau einmal und immer in dieser Reihenfolge. + +runde: +frage: „Wenn es regnet, nimm den Schirm mit, sonst die Sonnenbrille.“ +richtig: Verzweigung +> Eine Bedingung entscheidet, welcher der zwei Wege genommen wird. + +runde: +frage: „Rühre, bis der Teig glatt ist.“ +richtig: Wiederholung +> Das Rühren wird wiederholt, solange der Teig noch nicht glatt ist. + +runde: +frage: „Laufe zehn Runden um den Sportplatz.“ +richtig: Wiederholung +> Dieselbe Runde wird zehnmal gelaufen. + +runde: +frage: „Schuhe an, Jacke an, Tür auf, losgehen.“ +richtig: Sequenz +> Ein Schritt nach dem anderen, nichts wird übersprungen oder wiederholt. + +runde: +frage: „Ist die Ampel grün, gehst du über die Straße.“ +richtig: Verzweigung +> Auch ohne „sonst“ ist es eine Verzweigung. Der Sonst-Zweig ist einfach leer. + +runde: +frage: „Würfle so lange, bis du eine Sechs hast.“ +richtig: Wiederholung +> Du weißt vorher nicht, wie oft. Gewürfelt wird, bis die Bedingung erfüllt ist. + +runde: +frage: „Sagt jemand ‚Herein‘, gehst du hinein. Sonst wartest du vor der Tür.“ +richtig: Verzweigung +> Die Antwort entscheidet zwischen zwei Wegen: hineingehen oder warten. +::: + +## Checkliste + +Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. + +::: checkliste +- Ich kann erklären, was ein Algorithmus ist. → Ein Algorithmus ist eine genaue Anleitung +- Ich kann ein Struktogramm von oben nach unten lesen. → So liest du ein Struktogramm +- Ich kann die drei Grundbausteine Sequenz, Verzweigung und Wiederholung nennen. → Baustein 1: Die Sequenz +- Ich kann jeden Baustein im Struktogramm an seiner Form erkennen. → Alle drei zusammen +::: + +## Wissenstest + +::: quiz +? In welcher Richtung wird ein Struktogramm gelesen? +→ So liest du ein Struktogramm +- [ ] Von links nach rechts +- [x] Von oben nach unten +- [ ] Von unten nach oben +> Jeder Kasten ist ein Schritt, und die Schritte folgen von oben nach unten aufeinander. + +? Welcher Baustein gehört NICHT zu den drei Grundbausteinen? +→ Baustein 1: Die Sequenz +- [ ] Sequenz +- [ ] Verzweigung +- [x] Sprung +- [ ] Wiederholung +> Sprünge gibt es im Struktogramm nicht. Sequenz, Verzweigung und Wiederholung reichen für jeden Algorithmus. + +? Woran erkennst du im Struktogramm eine Verzweigung? +→ Alle drei zusammen +- [ ] An einem gekippten L +- [x] An einem Dreieck mit der Bedingung und zwei Spalten darunter +- [ ] An mehreren Rechtecken untereinander +> Das gekippte L gehört zur Schleife, Rechtecke untereinander sind eine Sequenz. + +? Wann wird der Inhalt einer Schleife noch einmal ausgeführt? +→ Alle drei zusammen +- [x] Solange die Bedingung true ist +- [ ] Nur, wenn die Bedingung false ist +- [ ] Immer genau zweimal +> Vor jedem Durchlauf wird die Bedingung geprüft. Ist sie false, geht es unter der Schleife weiter. + +? Was ist ein Algorithmus? +→ Ein Algorithmus ist eine genaue Anleitung +- [x] Eine eindeutige Schritt-für-Schritt-Anleitung zum Lösen einer Aufgabe +- [ ] Ein bestimmtes Programm in Java +- [ ] Ein Bild, das ein Programm erklärt +> Ein Algorithmus ist unabhängig von der Programmiersprache. Ein Struktogramm ist eine Möglichkeit, ihn aufzuschreiben. +::: +`,a4=`--- +titel: PAP und Pseudocode +bereich: Erste Schritte +kurz: Algorithmen als Programmablaufplan und als Pseudocode darstellen und mit dem Struktogramm vergleichen. +--- + +## Diese Kompetenzen erwerbe ich jetzt + +::: kompetenzen +- einen PAP (englisch *flowchart*) lesen und selbst zusammenbauen +- erklären, warum Sprünge im PAP zu Fehlern führen +- einen einfachen Algorithmus als Pseudocode lesen +::: + ## Andere Darstellungen: Der PAP Es gibt noch zwei weitere Arten, Algorithmen darzustellen: den **Programmablaufplan**, kurz **PAP**, und den **Pseudocode**. Beide wirst du im Unterricht treffen. Auf Englisch heißt der PAP **flowchart**, auf Deutsch auch Flussdiagramm. Das englische Wort begegnet dir oft, zum Beispiel in Programmen und im Internet. -Hier siehst du noch einmal unser Struktogramm zum Teetrinken aus „Alle drei zusammen“. Als Nächstes schauen wir uns den PAP an, und zwar mit demselben Beispiel. +Hier siehst du noch einmal unser Struktogramm zum Teetrinken aus der letzten Lektion. Als Nächstes schauen wir uns den PAP an, und zwar mit demselben Beispiel. ::: diagramm l1-grundbausteine.visustruct Das Tee-Beispiel als Struktogramm: erst die Tasse, dann die Verzweigung für den Zucker, dann die Schleife. @@ -549,61 +667,52 @@ Kommt dir Pseudocode bekannt vor? Die Programmiersprache Python sieht ihm sehr Nassi und Shneiderman wollten den Pfeilen an den Kragen! Ihr Artikel von 1973 hieß „Flowchart Techniques for Structured Programming“. Flowchart ist das englische Wort für Ablaufplan. Mit Pfeilen kann man nämlich kreuz und quer springen, bis der Plan aussieht wie ein Teller Spaghetti. Im Struktogramm geht das gar nicht. Mäh, so mag ich das: ordentlich, wie mein Stall. ::: -## Erst die Struktur, dann der Code - -Beim Programmieren passieren zwei Dinge gleichzeitig: Du musst dir den Ablauf überlegen und die Schreibweise der Programmiersprache beachten. Mit einem Struktogramm trennst du beides. - -1. Du denkst zuerst über die **Logik** nach: Welche Schritte, welche Bedingungen, welche Wiederholungen? -2. Danach übersetzt du die fertige Struktur in **Java, Python oder JavaScript**. VisuStruct kann dir den Code sogar erzeugen. - -Mit der **Simulation** kannst du dein Struktogramm außerdem Schritt für Schritt ausführen und prüfen, ob es wirklich tut, was es soll. - -## Spiel: Welcher Baustein? +## Spiel: Welche Darstellung? ::: spiel frage -titel: Spiel: Welcher Baustein? -intro: Ludwig beschreibt Dinge aus seinem Alltag. Welcher der drei Bausteine steckt darin? Acht Runden. -antworten: Sequenz | Verzweigung | Wiederholung +titel: Spiel: Welche Darstellung? +intro: Ludwig beschreibt eine Darstellung, ohne ihren Namen zu verraten. Ist es das Struktogramm, der PAP oder der Pseudocode? Acht Runden. +antworten: Struktogramm | PAP | Pseudocode runde: -frage: „Zahnpasta auf die Bürste, Zähne putzen, Mund ausspülen.“ -richtig: Sequenz -> Drei Schritte, jeder genau einmal und immer in dieser Reihenfolge. +frage: „Bei mir zeigt ein Pfeil zurück nach oben, wenn etwas wiederholt wird.“ +richtig: PAP +> Im PAP hat die Schleife kein eigenes Symbol. Ein Pfeil führt zurück nach oben. runde: -frage: „Wenn es regnet, nimm den Schirm mit, sonst die Sonnenbrille.“ -richtig: Verzweigung -> Eine Bedingung entscheidet, welcher der zwei Wege genommen wird. +frage: „Meine Schleife sieht aus wie ein gekipptes L.“ +richtig: Struktogramm +> Oben und links umschließt der Kasten die Schritte, die wiederholt werden. runde: -frage: „Rühre, bis der Teig glatt ist.“ -richtig: Wiederholung -> Das Rühren wird wiederholt, solange der Teig noch nicht glatt ist. +frage: „Ich bestehe aus Wörtern wie WENN und SOLANGE, und die Einrückung zeigt, was dazugehört.“ +richtig: Pseudocode +> Pseudocode ist Text in normaler Sprache, der wie ein Programm aufgebaut ist. runde: -frage: „Laufe zehn Runden um den Sportplatz.“ -richtig: Wiederholung -> Dieselbe Runde wird zehnmal gelaufen. +frage: „Meine Verzweigung ist eine Raute mit den Ausgängen ja und nein.“ +richtig: PAP +> Im Struktogramm steht die Bedingung dagegen in einem Dreieck. runde: -frage: „Schuhe an, Jacke an, Tür auf, losgehen.“ -richtig: Sequenz -> Ein Schritt nach dem anderen, nichts wird übersprungen oder wiederholt. +frage: „Bei mir können sich die Pfeile kreuz und quer verheddern wie Spaghetti.“ +richtig: PAP +> Weil Pfeile überallhin führen dürfen, ist im PAP Spaghetticode möglich. runde: -frage: „Ist die Ampel grün, gehst du über die Straße.“ -richtig: Verzweigung -> Auch ohne „sonst“ ist es eine Verzweigung. Der Sonst-Zweig ist einfach leer. +frage: „Ich habe keine feste Schreibweise. FALLS statt WENN ist bei mir auch erlaubt.“ +richtig: Pseudocode +> Wichtig ist nur, dass jeder Mensch ihn ohne Erklärung versteht. runde: -frage: „Würfle so lange, bis du eine Sechs hast.“ -richtig: Wiederholung -> Du weißt vorher nicht, wie oft. Gewürfelt wird, bis die Bedingung erfüllt ist. +frage: „Die Bedingung steht oben in einem Dreieck, darunter teile ich mich in zwei Spalten.“ +richtig: Struktogramm +> So sieht die Verzweigung im Struktogramm aus: links true, rechts false. runde: -frage: „Sagt jemand ‚Herein‘, gehst du hinein. Sonst wartest du vor der Tür.“ -richtig: Verzweigung -> Die Antwort entscheidet zwischen zwei Wegen: hineingehen oder warten. +frage: „Fügst du einen Kasten ein, rutscht alles darunter einfach mit. Kein Sprung kann danebengehen.“ +richtig: Struktogramm +> Im Struktogramm gibt es keine Pfeile und keine Sprünge, deshalb kann nichts auf die falsche Stelle zeigen. ::: ## Checkliste @@ -611,10 +720,6 @@ richtig: Verzweigung Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀️ kann ich sicher. Bei ⛅ und ☂️ hilft dir **Nachlesen**. Danach kommt der Wissenstest. Er zeigt dir, ob deine Einschätzung stimmt. ::: checkliste -- Ich kann erklären, was ein Algorithmus ist. → Ein Algorithmus ist eine genaue Anleitung -- Ich kann ein Struktogramm von oben nach unten lesen. → So liest du ein Struktogramm -- Ich kann die drei Grundbausteine Sequenz, Verzweigung und Wiederholung nennen. → Baustein 1: Die Sequenz -- Ich kann jeden Baustein im Struktogramm an seiner Form erkennen. → Alle drei zusammen - Ich kann die Elemente eines PAP benennen und einen einfachen PAP lesen. → Andere Darstellungen: Der PAP - Ich kann einen einfachen Algorithmus selbst als PAP zusammenbauen. → Übung: Kuchen backen als PAP - Ich kann erklären, warum Sprünge mit GOTO zu Fehlern und Spaghetticode führen. → Nachteile des PAP: Sprünge @@ -624,42 +729,6 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ ## Wissenstest ::: quiz -? In welcher Richtung wird ein Struktogramm gelesen? -→ So liest du ein Struktogramm -- [ ] Von links nach rechts -- [x] Von oben nach unten -- [ ] Von unten nach oben -> Jeder Kasten ist ein Schritt, und die Schritte folgen von oben nach unten aufeinander. - -? Welcher Baustein gehört NICHT zu den drei Grundbausteinen? -→ Baustein 1: Die Sequenz -- [ ] Sequenz -- [ ] Verzweigung -- [x] Sprung -- [ ] Wiederholung -> Sprünge gibt es im Struktogramm nicht. Sequenz, Verzweigung und Wiederholung reichen für jeden Algorithmus. - -? Woran erkennst du im Struktogramm eine Verzweigung? -→ Alle drei zusammen -- [ ] An einem gekippten L -- [x] An einem Dreieck mit der Bedingung und zwei Spalten darunter -- [ ] An mehreren Rechtecken untereinander -> Das gekippte L gehört zur Schleife, Rechtecke untereinander sind eine Sequenz. - -? Wann wird der Inhalt einer Schleife noch einmal ausgeführt? -→ Alle drei zusammen -- [x] Solange die Bedingung true ist -- [ ] Nur, wenn die Bedingung false ist -- [ ] Immer genau zweimal -> Vor jedem Durchlauf wird die Bedingung geprüft. Ist sie false, geht es unter der Schleife weiter. - -? Was ist ein Algorithmus? -→ Ein Algorithmus ist eine genaue Anleitung -- [x] Eine eindeutige Schritt-für-Schritt-Anleitung zum Lösen einer Aufgabe -- [ ] Ein bestimmtes Programm in Java -- [ ] Ein Bild, das ein Programm erklärt -> Ein Algorithmus ist unabhängig von der Programmiersprache. Ein Struktogramm ist eine Möglichkeit, ihn aufzuschreiben. - ? Woran erkennst du in einem Programmablaufplan (PAP) eine Schleife? → Andere Darstellungen: Der PAP - [ ] An einem gekippten L @@ -696,7 +765,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Ein Pfeil > Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: -`,i4=`--- +`,s4=`--- titel: Der Editor bereich: Erste Schritte kurz: Elemente einfügen, Text eingeben, verschieben und löschen. @@ -882,7 +951,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] input: "Guten Tag" > Ohne Anführungszeichen wird Guten Tag als Name einer Variablen verstanden. ::: -`,a4=`--- +`,r4=`--- titel: Speichern, Öffnen, Exportieren bereich: Erste Schritte kurz: Dateien sichern, deinen Workspace nutzen, mehrere Diagramme öffnen und als Bild oder PDF weitergeben. @@ -1053,7 +1122,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Direkt im Workspace ohne Unterordner > VisuStruct legt für jeden Tag automatisch einen Datumsordner an. So bleiben die Programme nach Stunden sortiert. ::: -`,s4=`--- +`,o4=`--- titel: Variablen und Datentypen bereich: Grundlagen kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und rechnen. @@ -1460,7 +1529,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Double preis = 2.5 > Kommazahlen schreibst du mit Punkt, und am Ende steht ein Semikolon. ::: -`,r4=`--- +`,l4=`--- titel: Sequenz bereich: Grundlagen kurz: Schritte nacheinander ausführen, auf die Reihenfolge achten und Werte tauschen. @@ -1713,7 +1782,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Mit einem Doppelpunkt : > Fehlt das Semikolon, zeigt VisuStruct unter dem Code einen Hinweis. ::: -`,o4=`--- +`,u4=`--- titel: Eingabe und Ausgabe bereich: Grundlagen kurz: Werte abfragen, Ergebnisse anzeigen und das EVA-Prinzip anwenden. @@ -2145,7 +2214,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Bei der nächsten Leerzeile > Darum kann ein Kommentar mit \`/*\` über mehrere Zeilen gehen. Ein Kommentar mit \`//\` endet dagegen am Zeilenende. ::: -`,l4=`--- +`,m4=`--- titel: Simulation und Schreibtischtest bereich: Grundlagen kurz: Ein Struktogramm Schritt für Schritt ausführen, von Hand nachrechnen und Fehler finden. @@ -2509,7 +2578,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Logikfehler > Es gibt keine Meldung, das Ergebnis ist trotzdem falsch. So einen Fehler findest du nur mit deiner Erwartung und dem Schreibtischtest. ::: -`,u4=`--- +`,c4=`--- titel: Verzweigung bereich: Grundlagen kurz: Mit einer Bedingung entscheiden, welcher von zwei Wegen ausgeführt wird. @@ -2877,7 +2946,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Hinter einem Semikolon > \`if (alter >= 18) { … }\`: Die runden Klammern gehören zur Bedingung, die geschweiften zum Zweig. ::: -`,m4=`--- +`,d4=`--- titel: Bedingungen verknüpfen bereich: Grundlagen kurz: Mehrere Bedingungen mit und, oder und nicht verbinden und Wertebereiche prüfen. @@ -3205,7 +3274,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] if (alter >= 12 || alter < 18) > Jeder Vergleich steht für sich, verbunden mit \`&&\`. ::: -`,c4=`--- +`,h4=`--- titel: Fallauswahl bereich: Grundlagen kurz: Je nach Wert einer Variablen einen von vielen Fällen ausführen. @@ -3535,7 +3604,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] default - [ ] case 0 ::: -`,d4=`--- +`,g4=`--- titel: While-Schleife bereich: Grundlagen kurz: Schritte wiederholen, solange eine Bedingung wahr ist. @@ -3894,7 +3963,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] while (zahl > 0); > Die Bedingung steht in runden Klammern, danach öffnet \`{\` den Rumpf. ::: -`,h4=`--- +`,p4=`--- titel: Do-while-Schleife bereich: Grundlagen kurz: Erst ausführen, dann prüfen: Schleifen mit mindestens einem Durchlauf. @@ -4173,7 +4242,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] } until (bedingung); > Nach der Bedingung kommt ein Semikolon. ::: -`,g4=`--- +`,f4=`--- titel: For-Schleife bereich: Grundlagen kurz: Mit Start, Bedingung und Schritt eine feste Anzahl von Durchläufen zählen. @@ -4510,7 +4579,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] i wird ausgegeben. > \`i++\` ist die Kurzform von \`i = i + 1\`. ::: -`,p4=`--- +`,b4=`--- titel: Verschachteln bereich: Grundlagen kurz: Verzweigungen in Schleifen und Schleifen in Schleifen kombinieren. @@ -4815,7 +4884,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] An den geschweiften Klammern und der Einrückung - [ ] An den Semikolons ::: -`,f4=`--- +`,x4=`--- titel: Arrays bereich: Grundlagen kurz: Viele Werte unter einem Namen speichern, mit dem Index darauf zugreifen und sie mit einer Schleife durchlaufen. @@ -5177,7 +5246,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] int zahlen = [1, 2, 3]; - [ ] array zahlen = (1, 2, 3); ::: -`,b4=`--- +`,v4=`--- titel: Zweidimensionale Arrays bereich: Grundlagen kurz: Werte in Zeilen und Spalten speichern, wie die Sitze in einem Kinosaal, und mit zwei verschachtelten Schleifen durchlaufen. @@ -5494,7 +5563,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 5, die Zahl der Plätze - [ ] 15, alle Plätze zusammen ::: -`,x4=`--- +`,y4=`--- titel: Zeichenketten bereich: Grundlagen kurz: Mit Texten arbeiten, also einzelne Zeichen lesen, Teile herausschneiden, suchen, vergleichen und zerlegen. @@ -6022,7 +6091,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] eine Fehlermeldung > parseInt macht aus dem Text eine Zahl. Danach rechnet Java ganz normal. ::: -`,v4=`--- +`,w4=`--- titel: Aufruf und Aussprung bereich: Grundlagen kurz: Große Aufgaben in Unterprogramme zerlegen und Schleifen vorzeitig verlassen. @@ -6505,7 +6574,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] return > void heißt „leer“: Die Methode macht etwas, gibt aber keinen Wert zurück. ::: -`,y4=`--- +`,z4=`--- titel: Suchen und Sortieren bereich: Grundlagen kurz: Mit Spielkarten verstehen, wie lineare und binäre Suche und Bubblesort arbeiten und warum manche Verfahren viel schneller sind. @@ -6857,7 +6926,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Eine While-Schleife kann keine Arrays durchlaufen. > Die Karte kann mehrmals vorkommen. Darum gehst du alle Karten bis zum Ende durch. ::: -`,w4=`--- +`,I4=`--- titel: Struktogramm und Code bereich: Vom Struktogramm zum Code kurz: Alle Elemente in Java auf einen Blick, Code erzeugen, im Bereich Code Java schreiben, ausführen und Fehler suchen. @@ -7329,7 +7398,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Zeile 3 wird als Nächstes ausgeführt. > Der Haltepunkt ist ein runder roter Punkt, die nächste Zeile ist gelb. Eine rote Zeilennummer zeigt einen Syntaxfehler oder einen Laufzeitfehler. ::: -`,z4=`--- +`,k4=`--- titel: Python und JavaScript bereich: Vom Struktogramm zum Code kurz: Python- und JavaScript-Code aus dem Struktogramm erzeugen und JavaScript direkt im Browser ausführen. @@ -7569,7 +7638,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es wird Summe: ausgegeben. > Mit str(summe) wird aus der Zahl ein Text. ::: -`,I4=`--- +`,S4=`--- titel: Wenn das Programm abstürzt: try und catch bereich: Fehler abfangen kurz: Mit echtem Java Fehlermeldungen lesen und Abstürze mit try und catch abfangen. @@ -7862,7 +7931,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ArithmeticException -> Teilen durch 0 = NumberFormatException -> Text ist keine Zahl ::: -`,k4=`--- +`,T4=`--- titel: Text einlesen und speichern bereich: Dateien kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern. @@ -8116,7 +8185,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = println(text) -> schreibt eine Zeile = close() -> schließt die Datei ::: -`,S4=`--- +`,_4=`--- titel: Zeile für Zeile mit BufferedReader bereich: Dateien kurz: Mit BufferedReader und readLine lesen, bis null kommt, und mit Files eine ganze Datei auf einmal lesen. @@ -8372,7 +8441,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Files.readString -> kleine Dateien auf einmal = Scanner -> Zahlen und Wörter lesen ::: -`,T4=`--- +`,j4=`--- titel: Tabellen als CSV bereich: Dateien kurz: Eine Tabelle als CSV-Datei lesen, jede Zeile mit split zerlegen und mit den Zahlen rechnen. @@ -8596,7 +8665,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = Datensatz -> eine Zeile mit Werten = Trennzeichen -> trennt die Spalten, meist ; ::: -`,_4=`--- +`,C4=`--- titel: Daten als JSON bereich: Dateien kurz: JSON-Dateien verstehen, Werte mit indexOf und substring herausholen und selbst JSON schreiben. @@ -8821,7 +8890,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = [ ] -> eine Liste = : -> trennt Schlüssel und Wert ::: -`,j4=`--- +`,A4=`--- titel: Formate im Vergleich bereich: Dateien kurz: Dieselben Daten als txt, CSV und JSON vergleichen, das passende Format wählen und eine Datei in ein anderes Format umwandeln. @@ -8996,7 +9065,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = die Notenliste der Klasse -> CSV = ein Spielstand mit Listen -> JSON ::: -`,C4=`--- +`,P4=`--- titel: Dein erstes Fenster bereich: Fenster mit Swing kurz: Mit Java und Swing ein eigenes Fenster öffnen, Zeile für Zeile erklärt. @@ -9218,7 +9287,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Sie stehen in geschweiften Klammern. - [ ] Sie enden mit Window. ::: -`,A4=`--- +`,D4=`--- titel: Ein Knopf im Fenster bereich: Fenster mit Swing kurz: Einen Knopf ins Fenster legen und mit einem Layout ordentlich anordnen. @@ -9441,7 +9510,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Auf dem Knopf steht „Ich wurde geklickt“. > Was beim Klick passieren soll, lernst du in der nächsten Lektion. ::: -`,P4=`--- +`,B4=`--- titel: Der Knopf reagiert bereich: Fenster mit Swing kurz: Mit einem ActionListener festlegen, was beim Klick passiert. @@ -9789,7 +9858,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = setText -> Beschriftung ändern = setVisible(true) -> Fenster zeigen ::: -`,D4=`--- +`,O4=`--- titel: Zahl verdoppeln im Fenster bereich: Fenster mit Swing kurz: Beschriftung, Textfeld und Knopf mit einem GridLayout anordnen und mit dem Text im Textfeld rechnen. @@ -10076,7 +10145,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = JButton -> Knopf = GridLayout -> Anordnung im Gitter ::: -`,B4=`--- +`,M4=`--- titel: Klickzähler mit Reset bereich: Fenster mit Swing kurz: Zwei Knöpfe ändern dieselbe Zahl: eine Variable für die ganze Klasse anlegen. @@ -10314,7 +10383,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Es setzt das Fenster in die Mitte des Bildschirms. - [ ] Es macht die Schrift größer. ::: -`,O4=`--- +`,Z4=`--- titel: Eine Ampel mit Farben bereich: Fenster mit Swing kurz: Hintergrundfarben setzen und mit einer Zustandsvariable eine Ampel weiterschalten. @@ -10596,7 +10665,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 3 > Nach phase++ ist sie 3, das ist größer als 2, also wird sie 0. ::: -`,M4=`--- +`,L4=`--- titel: Notenrechner im Fenster bereich: Fenster mit Swing kurz: Punkte eingeben, mit else if die Note bestimmen und falsche Eingaben abfangen. @@ -10878,7 +10947,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] punkte >= 0 || punkte <= 100 > Eine Zahl kann nicht gleichzeitig kleiner als 0 und größer als 100 sein, deshalb braucht es oder. ::: -`,Z4=`--- +`,W4=`--- titel: Ein Taschenrechner bereich: Fenster mit Swing kurz: Zwei Spalten mit GridLayout, vier Rechenknöpfe und die Division durch 0 abfangen. @@ -11155,7 +11224,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Spalte für Spalte, erst ganz links von oben nach unten - [ ] Zufällig ::: -`,L4=`--- +`,E4=`--- titel: Zahlenraten bereich: Fenster mit Swing kurz: Ein Spiel mit Zufallszahl, Versuchszähler und einem Knopf, der sich am Ende abschaltet. @@ -11389,7 +11458,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] 7 > Jeder Tipp halbiert den Bereich, und 2 hoch 7 = 128 ist größer als 100. ::: -`,W4=`--- +`,N4=`--- titel: Viele Knöpfe, ein Zuhörer bereich: Fenster mit Swing kurz: Ein Zuhörer für viele Knöpfe, mit getActionCommand und getSource herausfinden, welcher Knopf geklickt wurde. @@ -11700,7 +11769,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ActionEvent -> das Ereignis e mit den Infos zum Klick = JPanel -> eine Fläche mit eigenem Layout ::: -`,E4=`--- +`,F4=`--- titel: Innere Klassen bereich: Fenster mit Swing kurz: Einen Zuhörer als benannte innere Klasse, als anonyme Klasse und als Lambda schreiben und wissen, wer was sehen darf. @@ -11938,7 +12007,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = new ActionListener() { … } -> anonyme Klasse = der Pfeil hinter e -> Lambda ::: -`,N4=`--- +`,R4=`--- titel: Zwei Reiter bereich: Fenster mit Swing kurz: Ein Fenster mit zwei Reitern bauen, Daten von einem Reiter zum anderen bringen und die Liste als Textdatei speichern. @@ -12225,7 +12294,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = JPanel -> die Fläche eines Reiters = JTextArea -> ein Textbereich mit mehreren Zeilen ::: -`,F4=`--- +`,J4=`--- titel: Model View Controller bereich: Fenster mit Swing kurz: Den Klickzähler in Model, View und Controller zerlegen und verstehen, wer mit wem redet. @@ -12647,7 +12716,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ = ZahlAnzeige mit aktualisieren(int wert) -> View = der Zuhörer am Knopf -> Controller ::: -`,R4=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim +`,G4=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim Hovern oder Antippen seine Erklärung. Steht er im Schritt fett, wird er gerade erklärt und deshalb nicht markiert. \`auch:\` nennt weitere Formen, die ebenfalls erkannt werden. Groß- und Kleinschreibung zählt. @@ -12898,7 +12967,7 @@ Befehle als Zahlen, die der Prozessor direkt ausführt. Jede Prozessorart hat ih ### JIT-Compiler auch: JIT Ein Teil der JVM, der oft benutzten Bytecode während des Ausführens („just in time“) in Maschinencode übersetzt. Dadurch wird Java schneller. -`,J4=`## Grundbausteine +`,H4=`## Grundbausteine ### Anweisung @@ -13067,7 +13136,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Gut für: die Aufgabenstellung, die Einteilung in Eingabe, Verarbeitung und Ausgabe, eine Erklärung, das Ende eines Blocks hinter \`}\`, die erwartete Ausgabe und Notizen fürs nächste Mal. -`,G4=`--- +`,V4=`--- titel: What is a structure chart? bereich: First steps kurz: Show and read algorithms as a series of clear steps. @@ -13079,9 +13148,6 @@ kurz: Show and read algorithms as a series of clear steps. - explain what an algorithm is - read a structure chart - recognise the three basic building blocks: sequence, branch and loop -- read a flowchart and build one myself -- explain why jumps in a flowchart lead to mistakes -- read a simple algorithm as pseudocode ::: ## An algorithm is an exact set of instructions @@ -13114,7 +13180,7 @@ This way of drawing was invented by **Isaac Nassi and Ben Shneiderman** (1973). Left: Isaac “Ike” Nassi (photo: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), cropped), right: Ben Shneiderman (photo: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0). ::: -> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place. Programs that jump all over the place are called **spaghetti code**, because their flow gets tangled like noodles on a plate. More on this in step 10. +> A structure chart always has exactly one start (at the top) and one end (at the bottom). There are no arrows and no jumps all over the place. Programs that jump all over the place are called **spaghetti code**, because their flow gets tangled like noodles on a plate. More on this in the next lesson. ::: angeberwissen Baaah, listen up! In 1972 Nassi and Shneiderman were still PhD students at Stony Brook University near New York. Shneiderman was about 25 and Nassi about 23. So basically two students who wrote computer science history on the side. @@ -13192,11 +13258,132 @@ The boxes can also be **nested** inside each other: a loop or a path can contain Comfort for anyone who has messed up a test: the famous journal *Communications of the ACM* rejected the structure chart article. According to Nassi, the reviewer even said they should collect every copy and burn it. Ouch! It then appeared in 1973 in a smaller journal and today it is quoted thousands of times. Ha! ::: +## Structure first, then code + +When you program, two things happen at once: you have to think about the steps and pay attention to how the programming language is written. A structure chart lets you keep the two apart. + +1. First you think about the **logic**: which steps, which conditions, which repetitions? +2. Then you translate the finished structure into **Java, Python or JavaScript**. VisuStruct can even generate the code for you. + +With the **simulation** you can also run your structure chart step by step and check whether it really does what it should. + +## Game: Which building block? + +::: spiel frage +titel: Game: Which building block? +intro: Ludwig describes things from his everyday life. Which of the three building blocks is hidden in each? Eight rounds. +antworten: sequence | branch | loop + +runde: +frage: "Toothpaste on the brush, brush your teeth, rinse your mouth." +richtig: sequence +> Three steps, each exactly once and always in this order. + +runde: +frage: "If it rains, take the umbrella, otherwise the sunglasses." +richtig: branch +> A condition decides which of the two ways is taken. + +runde: +frage: "Stir until the dough is smooth." +richtig: loop +> Stirring is repeated as long as the dough isn't smooth yet. + +runde: +frage: "Run ten laps around the sports field." +richtig: loop +> The same lap is run ten times. + +runde: +frage: "Shoes on, jacket on, door open, off you go." +richtig: sequence +> One step after the other, nothing is skipped or repeated. + +runde: +frage: "If the light is green, you cross the street." +richtig: branch +> Even without "otherwise" it is a branch. The otherwise branch is simply empty. + +runde: +frage: "Roll the dice until you get a six." +richtig: loop +> You don't know beforehand how often. You roll until the condition is met. + +runde: +frage: "If someone says 'Come in', you go in. Otherwise you wait at the door." +richtig: branch +> The answer decides between two ways: go in or wait. +::: + +## Checklist + +Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. + +::: checkliste +- I can explain what an algorithm is. → An algorithm is an exact set of instructions +- I can read a structure chart from top to bottom. → How to read a structure chart +- I can name the three basic building blocks: sequence, branch and loop. → Building block 1: the sequence +- I can recognise every building block in a structure chart by its shape. → All three together +::: + +## Quiz + +::: quiz +? In which direction do you read a structure chart? +→ How to read a structure chart +- [ ] From left to right +- [x] From top to bottom +- [ ] From bottom to top +> Every box is one step, and the steps follow each other from top to bottom. + +? Which building block is NOT one of the three basic building blocks? +→ Building block 1: the sequence +- [ ] Sequence +- [ ] Branch +- [x] Jump +- [ ] Loop +> There are no jumps in a structure chart. Sequence, branch and loop are enough for every algorithm. + +? How do you recognise a branch in a structure chart? +→ All three together +- [ ] By an upside-down L +- [x] By a triangle with the condition and two columns below it +- [ ] By several rectangles on top of each other +> The upside-down L belongs to the loop, and rectangles on top of each other are a sequence. + +? When does the inside of a loop run once more? +→ All three together +- [x] As long as the condition is true +- [ ] Only if the condition is false +- [ ] Always exactly twice +> The condition is checked before every pass. If it is false, the program continues below the loop. + +? What is an algorithm? +→ An algorithm is an exact set of instructions +- [x] Clear step-by-step instructions for solving a task +- [ ] A particular program in Java +- [ ] A picture that explains a program +> An algorithm does not depend on a programming language. A structure chart is one way to write it down. +::: +`,q4=`--- +titel: Flowcharts and pseudocode +bereich: First steps +kurz: Show algorithms as a flowchart and as pseudocode, and compare them with the structure chart. +--- + +## Skills I will gain now + +::: kompetenzen +- read a flowchart and build one myself +- explain why jumps in a flowchart lead to mistakes +- read a simple algorithm as pseudocode +::: + ## Other ways to draw it: the flowchart There are two more ways to show an algorithm: the **flowchart** and **pseudocode**. You will meet both in class. -Here you see our structure chart for drinking tea from “All three together” once more. Next we look at the flowchart, using the same example. +Here you see our structure chart for drinking tea from the last lesson once more. Next we look at the flowchart, using the same example. ::: diagramm l1-grundbausteine.visustruct The tea example as a structure chart: first the cup, then the branch for the sugar, then the loop. @@ -13324,61 +13511,52 @@ Does pseudocode look familiar? The programming language Python looks very simila Nassi and Shneiderman were out to get the arrows! Their 1973 article was called “Flowchart Techniques for Structured Programming”. With arrows you can jump all over the place until the chart looks like a plate of spaghetti. In a structure chart that is simply impossible. Baah, that is how I like it: tidy, like my stable. ::: -## Structure first, then code - -When you program, two things happen at once: you have to think about the steps and pay attention to how the programming language is written. A structure chart lets you keep the two apart. - -1. First you think about the **logic**: which steps, which conditions, which repetitions? -2. Then you translate the finished structure into **Java, Python or JavaScript**. VisuStruct can even generate the code for you. - -With the **simulation** you can also run your structure chart step by step and check whether it really does what it should. - -## Game: Which building block? +## Game: Which way of drawing? ::: spiel frage -titel: Game: Which building block? -intro: Ludwig describes things from his everyday life. Which of the three building blocks is hidden in each? Eight rounds. -antworten: sequence | branch | loop +titel: Game: Which way of drawing? +intro: Ludwig describes a way of drawing an algorithm without saying its name. Is it the structure chart, the flowchart or pseudocode? Eight rounds. +antworten: structure chart | flowchart | pseudocode runde: -frage: "Toothpaste on the brush, brush your teeth, rinse your mouth." -richtig: sequence -> Three steps, each exactly once and always in this order. +frage: “When something is repeated, one of my arrows points back up.” +richtig: flowchart +> A flowchart has no special symbol for a loop. An arrow leads back up. runde: -frage: "If it rains, take the umbrella, otherwise the sunglasses." -richtig: branch -> A condition decides which of the two ways is taken. +frage: “My loop looks like an upside-down L.” +richtig: structure chart +> The box wraps around the repeated steps at the top and on the left. runde: -frage: "Stir until the dough is smooth." -richtig: loop -> Stirring is repeated as long as the dough isn't smooth yet. +frage: “I am made of words like IF and WHILE, and the indentation shows what belongs together.” +richtig: pseudocode +> Pseudocode is text in plain language that is laid out like a program. runde: -frage: "Run ten laps around the sports field." -richtig: loop -> The same lap is run ten times. +frage: “My branch is a diamond with the exits yes and no.” +richtig: flowchart +> In a structure chart, the condition sits in a triangle instead. runde: -frage: "Shoes on, jacket on, door open, off you go." -richtig: sequence -> One step after the other, nothing is skipped or repeated. +frage: “My arrows can get tangled all over the place like spaghetti.” +richtig: flowchart +> Because arrows may lead anywhere, spaghetti code is possible in a flowchart. runde: -frage: "If the light is green, you cross the street." -richtig: branch -> Even without "otherwise" it is a branch. The otherwise branch is simply empty. +frage: “I have no fixed way of writing. You may write WHEN instead of IF.” +richtig: pseudocode +> All that matters is that anyone can understand it without an explanation. runde: -frage: "Roll the dice until you get a six." -richtig: loop -> You don't know beforehand how often. You roll until the condition is met. +frage: “The condition sits at the top in a triangle, and below it I split into two columns.” +richtig: structure chart +> This is how a branch looks in a structure chart: true on the left, false on the right. runde: -frage: "If someone says 'Come in', you go in. Otherwise you wait at the door." -richtig: branch -> The answer decides between two ways: go in or wait. +frage: “If you insert a box, everything below simply moves down with it. No jump can go wrong.” +richtig: structure chart +> A structure chart has no arrows and no jumps, so nothing can point to the wrong place. ::: ## Checklist @@ -13386,10 +13564,6 @@ richtig: branch Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can do this confidently. For ⛅ and ☂️, **Review** helps you. Then comes the quiz. It shows you whether your self-assessment is right. ::: checkliste -- I can explain what an algorithm is. → An algorithm is an exact set of instructions -- I can read a structure chart from top to bottom. → How to read a structure chart -- I can name the three basic building blocks: sequence, branch and loop. → Building block 1: the sequence -- I can recognise every building block in a structure chart by its shape. → All three together - I can name the symbols of a flowchart and read a simple flowchart. → Other ways to draw it: the flowchart - I can build a simple algorithm as a flowchart myself. → Exercise: Baking a cake as a flowchart - I can explain why jumps with GOTO lead to mistakes and spaghetti code. → Drawbacks of the flowchart: jumps @@ -13399,42 +13573,6 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can ## Quiz ::: quiz -? In which direction do you read a structure chart? -→ How to read a structure chart -- [ ] From left to right -- [x] From top to bottom -- [ ] From bottom to top -> Every box is one step, and the steps follow each other from top to bottom. - -? Which building block is NOT one of the three basic building blocks? -→ Building block 1: the sequence -- [ ] Sequence -- [ ] Branch -- [x] Jump -- [ ] Loop -> There are no jumps in a structure chart. Sequence, branch and loop are enough for every algorithm. - -? How do you recognise a branch in a structure chart? -→ All three together -- [ ] By an upside-down L -- [x] By a triangle with the condition and two columns below it -- [ ] By several rectangles on top of each other -> The upside-down L belongs to the loop, and rectangles on top of each other are a sequence. - -? When does the inside of a loop run once more? -→ All three together -- [x] As long as the condition is true -- [ ] Only if the condition is false -- [ ] Always exactly twice -> The condition is checked before every pass. If it is false, the program continues below the loop. - -? What is an algorithm? -→ An algorithm is an exact set of instructions -- [x] Clear step-by-step instructions for solving a task -- [ ] A particular program in Java -- [ ] A picture that explains a program -> An algorithm does not depend on a programming language. A structure chart is one way to write it down. - ? How do you recognise a loop in a flowchart? → Other ways to draw it: the flowchart - [ ] By an upside-down L @@ -13464,7 +13602,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] An arrow > Everything between WHILE and END WHILE is indented and is repeated. ::: -`,H4=`--- +`,Q4=`--- titel: The editor bereich: First steps kurz: Insert elements, type text, move and delete. @@ -13650,7 +13788,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] input: "Good morning" > Without quotation marks, Good morning is understood as the name of a variable. ::: -`,V4=`--- +`,U4=`--- titel: Save, open, export bereich: First steps kurz: Keep your files safe, use your workspace, open several diagrams and share them as an image or PDF. @@ -13821,7 +13959,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Directly in the workspace without a subfolder > VisuStruct automatically creates a date folder for each day. That keeps the programs sorted by lesson. ::: -`,q4=`--- +`,Y4=`--- titel: Variables and data types bereich: Basics kurz: Store values, get to know the data types int, double, String and boolean, and calculate. @@ -14228,7 +14366,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Double price = 2.5 > Decimal numbers use a point, and the line ends with a semicolon. ::: -`,Q4=`--- +`,$4=`--- titel: Sequence bereich: Basics kurz: Run steps one after another, watch the order and swap values. @@ -14481,7 +14619,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] With a colon : > If the semicolon is missing, VisuStruct shows a hint below the code. ::: -`,U4=`--- +`,K4=`--- titel: Input and output bereich: Basics kurz: Ask for values, show results and use the IPO model. @@ -14913,7 +15051,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] At the next empty line > That is why a comment with \`/*\` can span several lines. A comment with \`//\`, on the other hand, ends at the end of the line. ::: -`,Y4=`--- +`,X4=`--- titel: Simulation and desk check bereich: Basics kurz: Run a structure chart step by step, work it out by hand and find mistakes. @@ -15277,7 +15415,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] Logic error > There is no message, but the result is still wrong. You only find an error like this with your expectation and a desk check. ::: -`,$4=`--- +`,ev=`--- titel: Branch bereich: Basics kurz: Use a condition to decide which of two paths runs. @@ -15645,7 +15783,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] After a semicolon > \`if (age >= 18) { … }\`: the round brackets belong to the condition, the curly ones to the branch. ::: -`,K4=`--- +`,tv=`--- titel: Combining conditions bereich: Basics kurz: Join several conditions with and, or and not, and check ranges of values. @@ -15973,7 +16111,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] if (age >= 12 || age < 18) > Each comparison stands on its own, joined with \`&&\`. ::: -`,X4=`--- +`,nv=`--- titel: Switch bereich: Basics kurz: Run one of many cases, depending on the value of a variable. @@ -16303,7 +16441,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] default - [ ] case 0 ::: -`,ev=`--- +`,iv=`--- titel: While loop bereich: Basics kurz: Repeat steps as long as a condition is true. @@ -16662,7 +16800,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] while (number > 0); > The condition is in round brackets, then \`{\` opens the body. ::: -`,tv=`--- +`,av=`--- titel: Do-while loop bereich: Basics kurz: Run first, check afterwards: loops with at least one pass. @@ -16941,7 +17079,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] } until (condition); > A semicolon follows the condition. ::: -`,nv=`--- +`,sv=`--- titel: For loop bereich: Basics kurz: Count a fixed number of passes with Init, Condition and Step. @@ -17278,7 +17416,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] i is output. > \`i++\` is short for \`i = i + 1\`. ::: -`,iv=`--- +`,rv=`--- titel: Nesting bereich: Basics kurz: Combine branches inside loops and loops inside loops. @@ -17583,7 +17721,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] By the curly brackets and the indentation - [ ] By the semicolons ::: -`,av=`--- +`,ov=`--- titel: Arrays bereich: Basics kurz: Store many values under one name, reach them with the index and go through them with a loop. @@ -17945,7 +18083,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] int numbers = [1, 2, 3]; - [ ] array numbers = (1, 2, 3); ::: -`,sv=`--- +`,lv=`--- titel: Two-dimensional arrays bereich: Basics kurz: Store values in rows and columns, like the seats in a cinema, and go through them with two nested loops. @@ -18262,7 +18400,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 5, the number of seats - [ ] 15, all seats together ::: -`,rv=`--- +`,uv=`--- titel: Strings bereich: Basics kurz: Work with text: read single characters, cut out parts, search, compare and split. @@ -18788,7 +18926,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] an error message > parseInt turns the text into a number. After that Java calculates as usual. ::: -`,ov=`--- +`,mv=`--- titel: Call and break bereich: Basics kurz: Split big tasks into subprograms and leave loops early. @@ -19270,7 +19408,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] return > void means “empty”: the method does something but returns no value. ::: -`,lv=`--- +`,cv=`--- titel: Searching and sorting bereich: Basics kurz: Use playing cards to understand how linear search, binary search and bubble sort work, and why some methods are much faster. @@ -19622,7 +19760,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] A while loop cannot go through arrays. > The card can appear several times. That is why you go through all cards to the end. ::: -`,uv=`--- +`,dv=`--- titel: Structure chart and code bereich: From structure chart to code kurz: All elements in Java at a glance, generate code, write Java in the Code area, run it and find mistakes. @@ -20094,7 +20232,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Line 3 runs next. > A breakpoint is a round red dot, and the next line is yellow. A red line number shows a syntax error or a runtime error. ::: -`,mv=`--- +`,hv=`--- titel: Python and JavaScript bereich: From structure chart to code kurz: Generate Python and JavaScript code from the structure chart and run JavaScript straight in the browser. @@ -20334,7 +20472,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Sum: is output. > str(sum) turns the number into text. ::: -`,cv=`--- +`,gv=`--- titel: When the program crashes: try and catch bereich: Catching errors kurz: Use real Java to read error messages and catch crashes with try and catch. @@ -20627,7 +20765,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = ArithmeticException -> dividing by 0 = NumberFormatException -> text is not a number ::: -`,dv=`--- +`,pv=`--- titel: Reading and saving text bereich: Files kurz: Read a text file line by line with Scanner and save a file with PrintWriter. @@ -20881,7 +21019,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = println(text) -> writes a line = close() -> closes the file ::: -`,hv=`--- +`,fv=`--- titel: Line by line with BufferedReader bereich: Files kurz: Read with BufferedReader and readLine until null comes, and read a whole file at once with Files. @@ -21137,7 +21275,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = Files.readString -> small files all at once = Scanner -> reading numbers and words ::: -`,gv=`--- +`,bv=`--- titel: Tables as CSV bereich: Files kurz: Read a table as a CSV file, split each line with split and calculate with the numbers. @@ -21361,7 +21499,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = record -> a line with values = separator -> separates the columns, often ; ::: -`,pv=`--- +`,xv=`--- titel: Data as JSON bereich: Files kurz: Understand JSON files, get values out with indexOf and substring, and write JSON yourself. @@ -21586,7 +21724,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = [ ] -> a list = : -> separates key and value ::: -`,fv=`--- +`,vv=`--- titel: Comparing formats bereich: Files kurz: Compare the same data as txt, CSV and JSON, choose the right format and convert a file into another format. @@ -21761,7 +21899,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = the class grade list -> CSV = a game save with lists -> JSON ::: -`,bv=`--- +`,yv=`--- titel: Your first window bereich: Windows with Swing kurz: Open your own window with Java and Swing, explained line by line. @@ -21983,7 +22121,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] They are in curly brackets. - [ ] They end in Window. ::: -`,xv=`--- +`,wv=`--- titel: A button in the window bereich: Windows with Swing kurz: Put a button into the window and arrange it neatly with a layout. @@ -22206,7 +22344,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] The button says “I was clicked”. > What should happen on a click is what you learn in the next lesson. ::: -`,vv=`--- +`,zv=`--- titel: The button reacts bereich: Windows with Swing kurz: Use an ActionListener to decide what happens on a click. @@ -22554,7 +22692,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = setText -> change the label = setVisible(true) -> show the window ::: -`,yv=`--- +`,Iv=`--- titel: Doubling a number in a window bereich: Windows with Swing kurz: Arrange a label, a text field and a button with a GridLayout and calculate with the text in the text field. @@ -22841,7 +22979,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = JButton -> button = GridLayout -> arrangement in a grid ::: -`,wv=`--- +`,kv=`--- titel: Click counter with reset bereich: Windows with Swing kurz: Two buttons change the same number: create a variable for the whole class. @@ -23079,7 +23217,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] It puts the window in the middle of the screen. - [ ] It makes the font bigger. ::: -`,zv=`--- +`,Sv=`--- titel: A traffic light with colours bereich: Windows with Swing kurz: Set background colours and switch a traffic light on with a state variable. @@ -23361,7 +23499,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 3 > After phase++ it is 3, which is greater than 2, so it becomes 0. ::: -`,Iv=`--- +`,Tv=`--- titel: Grade calculator in a window bereich: Windows with Swing kurz: Enter points, work out the grade with else if and catch wrong input. @@ -23638,7 +23776,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] points >= 0 || points <= 100 > A number can't be smaller than 0 and bigger than 100 at the same time, so you need or. ::: -`,kv=`--- +`,_v=`--- titel: A calculator bereich: Windows with Swing kurz: Two columns with GridLayout, four arithmetic buttons and catching division by 0. @@ -23915,7 +24053,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Column by column, starting top to bottom on the far left - [ ] Randomly ::: -`,Sv=`--- +`,jv=`--- titel: Guess the number bereich: Windows with Swing kurz: A game with a random number, a counter for the guesses and a button that switches itself off at the end. @@ -24149,7 +24287,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] 7 > Each guess halves the range, and 2 to the power of 7 = 128 is bigger than 100. ::: -`,Tv=`--- +`,Cv=`--- titel: Many buttons, one listener bereich: Windows with Swing kurz: One listener for many buttons, and finding out with getActionCommand and getSource which button was clicked. @@ -24459,7 +24597,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = ActionEvent -> the event e with the information about the click = JPanel -> an area with its own layout ::: -`,_v=`--- +`,Av=`--- titel: Inner classes bereich: Windows with Swing kurz: Write a listener as a named inner class, as an anonymous class and as a lambda, and know who can see what. @@ -24697,7 +24835,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = new ActionListener() { … } -> anonymous class = the arrow after e -> lambda ::: -`,jv=`--- +`,Pv=`--- titel: Two tabs bereich: Windows with Swing kurz: Build a window with two tabs, bring data from one tab to the other and save the list as a text file. @@ -24984,7 +25122,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = JPanel -> the area of a tab = JTextArea -> a text area with several lines ::: -`,Cv=`--- +`,Dv=`--- titel: Model View Controller bereich: Windows with Swing kurz: Split the click counter into model, view and controller and understand who talks to whom. @@ -25406,7 +25544,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can = NumberView with update(int value) -> view = the listener at the button -> controller ::: -`,Av=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation +`,Bv=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation on hover or tap. If it is in bold in that step, it is being explained right there and is not marked. \`also:\` lists other forms that are recognised too. Upper and lower case matter. @@ -25664,7 +25802,7 @@ Instructions as numbers that the processor runs directly. Every kind of processo ### JIT compiler auch: JIT A part of the JVM that translates often-used bytecode into machine code while the program runs (“just in time”). This makes Java faster. -`,Pv=`## Basics +`,Ov=`## Basics ### Statement @@ -25833,7 +25971,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Good for: the task, dividing the code into input, process and output, an explanation, the end of a block after \`}\`, the expected output and notes for next time. -`,Dv=`--- +`,Mv=`--- titel: O que é um estrutograma? bereich: Primeiros passos kurz: Mostrar e ler algoritmos como uma série de passos claros. @@ -25845,9 +25983,6 @@ kurz: Mostrar e ler algoritmos como uma série de passos claros. - explicar o que é um algoritmo - ler um estrutograma - reconhecer os três blocos básicos: sequência, decisão e ciclo -- ler um fluxograma (em inglês *flowchart*) e construir um sozinho -- explicar porque é que os saltos num fluxograma levam a erros -- ler um algoritmo simples em pseudocódigo ::: ## Um algoritmo é uma instrução exata @@ -25880,7 +26015,7 @@ Esta forma de desenhar foi inventada por **Isaac Nassi e Ben Shneiderman** (1973 À esquerda: Isaac “Ike” Nassi (foto: [Ed Schipul](https://commons.wikimedia.org/wiki/File:Me_with_Ike_Nassi!!!!!_%286893328729%29.jpg), [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), recortada), à direita: Ben Shneiderman (foto: [Robert Kosara](https://commons.wikimedia.org/wiki/File:Ben_Shneiderman_at_UNCC_%283x4_cropped%29.jpg), CC0). ::: -> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado. Programas que saltam para todo o lado chamam-se **código esparguete**, porque o seu fluxo se enrola como massa no prato. Mais sobre isto no passo 10. +> Um estrutograma tem sempre exatamente um início (em cima) e um fim (em baixo). Não há setas nem saltos para todo o lado. Programas que saltam para todo o lado chamam-se **código esparguete**, porque o seu fluxo se enrola como massa no prato. Mais sobre isto na próxima lição. ::: angeberwissen Méééé, ouve bem! Em 1972, Nassi e Shneiderman ainda eram doutorandos na Universidade de Stony Brook, perto de Nova Iorque. Shneiderman tinha uns 25 anos e Nassi uns 23. Ou seja, dois estudantes que escreveram história da informática nas horas vagas. @@ -25958,11 +26093,132 @@ Os blocos também podem ser **encaixados** uns dentro dos outros: um ciclo ou um Consolo para quem correu mal um teste: a famosa revista *Communications of the ACM* rejeitou o artigo sobre estrutogramas. Segundo Nassi, o revisor até disse que deviam juntar todas as cópias e queimá-las. Ai! O artigo saiu em 1973 numa revista mais pequena e hoje é citado milhares de vezes. Ha! ::: +## Primeiro a estrutura, depois o código + +Quando programas, acontecem duas coisas ao mesmo tempo: tens de pensar nos passos e prestar atenção à forma como a linguagem de programação se escreve. Um estrutograma permite-te separar as duas coisas. + +1. Primeiro pensas na **lógica**: que passos, que condições, que repetições? +2. Depois traduzes a estrutura pronta para **Java, Python ou JavaScript**. O VisuStruct até consegue gerar o código por ti. + +Com a **simulação** também podes executar o teu estrutograma passo a passo e verificar se ele faz mesmo o que deve. + +## Jogo: Que bloco básico? + +::: spiel frage +titel: Jogo: Que bloco básico? +intro: O Ludwig descreve coisas do seu dia a dia. Que bloco básico se esconde em cada uma? Oito rondas. +antworten: sequência | decisão | ciclo + +runde: +frage: "Pasta na escova, lavar os dentes, bochechar." +richtig: sequência +> Três passos, cada um exatamente uma vez e sempre por esta ordem. + +runde: +frage: "Se chover, levo o guarda-chuva, senão os óculos de sol." +richtig: decisão +> Uma condição decide qual dos dois caminhos é seguido. + +runde: +frage: "Mexer até a massa ficar lisa." +richtig: ciclo +> Mexe-se repetidamente enquanto a massa ainda não estiver lisa. + +runde: +frage: "Correr dez voltas ao campo de desporto." +richtig: ciclo +> A mesma volta é corrida dez vezes. + +runde: +frage: "Calçar os sapatos, vestir o casaco, abrir a porta, e lá vamos." +richtig: sequência +> Um passo a seguir ao outro, nada é saltado nem repetido. + +runde: +frage: "Se o semáforo estiver verde, atravessas a rua." +richtig: decisão +> Mesmo sem "senão" é uma decisão. O ramo senão fica simplesmente vazio. + +runde: +frage: "Lançar o dado até sair um seis." +richtig: ciclo +> Não se sabe antes quantas vezes. Lança-se até a condição se cumprir. + +runde: +frage: "Se alguém disser 'Entra', entras. Senão, esperas à porta." +richtig: decisão +> A resposta decide entre dois caminhos: entrar ou esperar. +::: + +## Lista de verificação + +Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ consigo com segurança. Com ⛅ e ☂️, **Rever** ajuda-te. Depois vem o teste de conhecimentos. Mostra-te se a tua autoavaliação está certa. + +::: checkliste +- Consigo explicar o que é um algoritmo. → Um algoritmo é uma instrução exata +- Consigo ler um estrutograma de cima para baixo. → Como se lê um estrutograma +- Consigo nomear os três blocos básicos: sequência, decisão e ciclo. → Bloco básico 1: a sequência +- Consigo reconhecer cada bloco básico num estrutograma pela sua forma. → Os três juntos +::: + +## Teste de conhecimentos + +::: quiz +? Em que direção se lê um estrutograma? +→ Como se lê um estrutograma +- [ ] Da esquerda para a direita +- [x] De cima para baixo +- [ ] De baixo para cima +> Cada bloco é um passo, e os passos seguem-se de cima para baixo. + +? Qual destes NÃO é um dos três blocos básicos? +→ Bloco básico 1: a sequência +- [ ] Sequência +- [ ] Decisão +- [x] Salto +- [ ] Ciclo +> Num estrutograma não há saltos. Sequência, decisão e ciclo chegam para qualquer algoritmo. + +? Como reconheces uma decisão num estrutograma? +→ Os três juntos +- [ ] Por um L invertido +- [x] Por um triângulo com a condição e duas colunas por baixo +- [ ] Por vários retângulos uns por cima dos outros +> O L invertido pertence ao ciclo, e retângulos uns por cima dos outros são uma sequência. + +? Quando é que o interior de um ciclo é executado mais uma vez? +→ Os três juntos +- [x] Enquanto a condição for verdadeira +- [ ] Só se a condição for falsa +- [ ] Sempre exatamente duas vezes +> A condição é verificada antes de cada iteração. Se for falsa, o programa continua por baixo do ciclo. + +? O que é um algoritmo? +→ Um algoritmo é uma instrução exata +- [x] Instruções claras, passo a passo, para resolver uma tarefa +- [ ] Um determinado programa em Java +- [ ] Uma imagem que explica um programa +> Um algoritmo não depende de nenhuma linguagem de programação. Um estrutograma é uma forma de o escrever. +::: +`,Zv=`--- +titel: Fluxograma e pseudocódigo +bereich: Primeiros passos +kurz: Representar algoritmos como fluxograma e como pseudocódigo e compará-los com o estrutograma. +--- + +## Competências que vou adquirir agora + +::: kompetenzen +- ler um fluxograma (em inglês *flowchart*) e construir um sozinho +- explicar porque é que os saltos num fluxograma levam a erros +- ler um algoritmo simples em pseudocódigo +::: + ## Outras formas de desenhar: o fluxograma Há mais duas formas de representar um algoritmo: o **fluxograma** e o **pseudocódigo**. Vais conhecer as duas nas aulas. Em inglês, o fluxograma chama-se **flowchart**. Esta palavra aparece muitas vezes, por exemplo em programas e na internet. -Aqui vês outra vez o nosso estrutograma para beber chá de “Os três juntos”. A seguir vamos ver o fluxograma, com o mesmo exemplo. +Aqui vês outra vez o nosso estrutograma para beber chá da última lição. A seguir vamos ver o fluxograma, com o mesmo exemplo. ::: diagramm l1-grundbausteine.visustruct O exemplo do chá como estrutograma: primeiro a chávena, depois a decisão para o açúcar e depois o ciclo. @@ -26090,61 +26346,52 @@ O pseudocódigo parece-te familiar? A linguagem de programação Python é muito Nassi e Shneiderman estavam em guerra com as setas! O artigo deles de 1973 chamava-se “Flowchart Techniques for Structured Programming”. Com setas pode-se saltar para todo o lado até o fluxograma parecer um prato de esparguete. Num estrutograma isso é simplesmente impossível. Mééé, é assim que eu gosto: arrumado, como o meu estábulo. ::: -## Primeiro a estrutura, depois o código - -Quando programas, acontecem duas coisas ao mesmo tempo: tens de pensar nos passos e prestar atenção à forma como a linguagem de programação se escreve. Um estrutograma permite-te separar as duas coisas. - -1. Primeiro pensas na **lógica**: que passos, que condições, que repetições? -2. Depois traduzes a estrutura pronta para **Java, Python ou JavaScript**. O VisuStruct até consegue gerar o código por ti. - -Com a **simulação** também podes executar o teu estrutograma passo a passo e verificar se ele faz mesmo o que deve. - -## Jogo: Que bloco básico? +## Jogo: Que representação? ::: spiel frage -titel: Jogo: Que bloco básico? -intro: O Ludwig descreve coisas do seu dia a dia. Que bloco básico se esconde em cada uma? Oito rondas. -antworten: sequência | decisão | ciclo +titel: Jogo: Que representação? +intro: O Ludwig descreve uma forma de representar um algoritmo sem dizer o nome. É o estrutograma, o fluxograma ou o pseudocódigo? Oito rondas. +antworten: estrutograma | fluxograma | pseudocódigo runde: -frage: "Pasta na escova, lavar os dentes, bochechar." -richtig: sequência -> Três passos, cada um exatamente uma vez e sempre por esta ordem. +frage: “Quando algo se repete, uma das minhas setas aponta de volta para cima.” +richtig: fluxograma +> No fluxograma, o ciclo não tem símbolo próprio. Uma seta volta para cima. runde: -frage: "Se chover, levo o guarda-chuva, senão os óculos de sol." -richtig: decisão -> Uma condição decide qual dos dois caminhos é seguido. +frage: “O meu ciclo parece um L invertido.” +richtig: estrutograma +> A caixa envolve os passos repetidos em cima e à esquerda. runde: -frage: "Mexer até a massa ficar lisa." -richtig: ciclo -> Mexe-se repetidamente enquanto a massa ainda não estiver lisa. +frage: “Sou feito de palavras como SE e ENQUANTO, e a indentação mostra o que pertence a quê.” +richtig: pseudocódigo +> O pseudocódigo é texto em linguagem normal, organizado como um programa. runde: -frage: "Correr dez voltas ao campo de desporto." -richtig: ciclo -> A mesma volta é corrida dez vezes. +frage: “A minha decisão é um losango com as saídas sim e não.” +richtig: fluxograma +> No estrutograma, a condição fica num triângulo. runde: -frage: "Calçar os sapatos, vestir o casaco, abrir a porta, e lá vamos." -richtig: sequência -> Um passo a seguir ao outro, nada é saltado nem repetido. +frage: “As minhas setas podem enrolar-se para todo o lado como esparguete.” +richtig: fluxograma +> Como as setas podem ir para qualquer lado, no fluxograma é possível haver código esparguete. runde: -frage: "Se o semáforo estiver verde, atravessas a rua." -richtig: decisão -> Mesmo sem "senão" é uma decisão. O ramo senão fica simplesmente vazio. +frage: “Não tenho uma forma fixa de escrever. Também podes escrever CASO em vez de SE.” +richtig: pseudocódigo +> O importante é que qualquer pessoa o perceba sem explicação. runde: -frage: "Lançar o dado até sair um seis." -richtig: ciclo -> Não se sabe antes quantas vezes. Lança-se até a condição se cumprir. +frage: “A condição fica em cima num triângulo, e por baixo divido-me em duas colunas.” +richtig: estrutograma +> É assim que a decisão aparece no estrutograma: true à esquerda, false à direita. runde: -frage: "Se alguém disser 'Entra', entras. Senão, esperas à porta." -richtig: decisão -> A resposta decide entre dois caminhos: entrar ou esperar. +frage: “Se inserires uma caixa, tudo o que está por baixo desce também. Nenhum salto pode falhar.” +richtig: estrutograma +> O estrutograma não tem setas nem saltos, por isso nada pode apontar para o sítio errado. ::: ## Lista de verificação @@ -26152,10 +26399,6 @@ richtig: decisão Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ consigo com segurança. Com ⛅ e ☂️, **Rever** ajuda-te. Depois vem o teste de conhecimentos. Mostra-te se a tua autoavaliação está certa. ::: checkliste -- Consigo explicar o que é um algoritmo. → Um algoritmo é uma instrução exata -- Consigo ler um estrutograma de cima para baixo. → Como se lê um estrutograma -- Consigo nomear os três blocos básicos: sequência, decisão e ciclo. → Bloco básico 1: a sequência -- Consigo reconhecer cada bloco básico num estrutograma pela sua forma. → Os três juntos - Consigo nomear os símbolos de um fluxograma e ler um fluxograma simples. → Outras formas de desenhar: o fluxograma - Consigo construir sozinho um algoritmo simples como fluxograma. → Exercício: Fazer um bolo como fluxograma - Consigo explicar porque é que os saltos com GOTO levam a erros e a código esparguete. → Desvantagens do fluxograma: saltos @@ -26165,42 +26408,6 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ ## Teste de conhecimentos ::: quiz -? Em que direção se lê um estrutograma? -→ Como se lê um estrutograma -- [ ] Da esquerda para a direita -- [x] De cima para baixo -- [ ] De baixo para cima -> Cada bloco é um passo, e os passos seguem-se de cima para baixo. - -? Qual destes NÃO é um dos três blocos básicos? -→ Bloco básico 1: a sequência -- [ ] Sequência -- [ ] Decisão -- [x] Salto -- [ ] Ciclo -> Num estrutograma não há saltos. Sequência, decisão e ciclo chegam para qualquer algoritmo. - -? Como reconheces uma decisão num estrutograma? -→ Os três juntos -- [ ] Por um L invertido -- [x] Por um triângulo com a condição e duas colunas por baixo -- [ ] Por vários retângulos uns por cima dos outros -> O L invertido pertence ao ciclo, e retângulos uns por cima dos outros são uma sequência. - -? Quando é que o interior de um ciclo é executado mais uma vez? -→ Os três juntos -- [x] Enquanto a condição for verdadeira -- [ ] Só se a condição for falsa -- [ ] Sempre exatamente duas vezes -> A condição é verificada antes de cada iteração. Se for falsa, o programa continua por baixo do ciclo. - -? O que é um algoritmo? -→ Um algoritmo é uma instrução exata -- [x] Instruções claras, passo a passo, para resolver uma tarefa -- [ ] Um determinado programa em Java -- [ ] Uma imagem que explica um programa -> Um algoritmo não depende de nenhuma linguagem de programação. Um estrutograma é uma forma de o escrever. - ? Como reconheces um ciclo num fluxograma? → Outras formas de desenhar: o fluxograma - [ ] Por um L invertido @@ -26237,7 +26444,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Uma seta > Tudo o que está entre ENQUANTO e FIM ENQUANTO está recuado e é repetido. ::: -`,Bv=`--- +`,Lv=`--- titel: O editor bereich: Primeiros passos kurz: Inserir elementos, escrever texto, mover e eliminar. @@ -26423,7 +26630,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] input: "Bom dia" > Sem aspas, Bom dia é entendido como o nome de uma variável. ::: -`,Ov=`--- +`,Wv=`--- titel: Guardar, abrir, exportar bereich: Primeiros passos kurz: Guardar os teus ficheiros em segurança, usar o teu espaço de trabalho, abrir vários diagramas e partilhá-los como imagem ou PDF. @@ -26594,7 +26801,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Diretamente no espaço de trabalho, sem subpasta > O VisuStruct cria automaticamente uma pasta com a data de cada dia. Assim os programas ficam ordenados por aula. ::: -`,Mv=`--- +`,Ev=`--- titel: Variáveis e tipos de dados bereich: Fundamentos kurz: Guardar valores, conhecer os tipos de dados int, double, String e boolean, e fazer contas. @@ -27001,7 +27208,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Double preco = 2.5 > Os números decimais escrevem-se com ponto, e no fim há um ponto e vírgula. ::: -`,Zv=`--- +`,Nv=`--- titel: Sequência bereich: Fundamentos kurz: Executar passos um a seguir ao outro, prestar atenção à ordem e trocar valores. @@ -27254,7 +27461,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Com dois pontos : > Se faltar o ponto e vírgula, o VisuStruct mostra uma indicação por baixo do código. ::: -`,Lv=`--- +`,Fv=`--- titel: Entrada e saída bereich: Fundamentos kurz: Pedir valores, mostrar resultados e usar o modelo EPS. @@ -27686,7 +27893,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Na próxima linha vazia > Por isso um comentário com \`/*\` pode ocupar várias linhas. Já um comentário com \`//\` termina no fim da linha. ::: -`,Wv=`--- +`,Rv=`--- titel: Simulação e teste de secretária bereich: Fundamentos kurz: Executar um estrutograma passo a passo, segui-lo à mão e encontrar erros. @@ -28050,7 +28257,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] Erro de lógica > Não há mensagem, mas o resultado está errado. Um erro destes só se encontra com o que esperas e com o teste de secretária. ::: -`,Ev=`--- +`,Jv=`--- titel: Decisão bereich: Fundamentos kurz: Usar uma condição para decidir qual de dois ramos é executado. @@ -28418,7 +28625,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Depois de um ponto e vírgula > \`if (idade >= 18) { … }\`: os parênteses curvos pertencem à condição, as chavetas ao ramo. ::: -`,Nv=`--- +`,Gv=`--- titel: Combinar condições bereich: Fundamentos kurz: Juntar várias condições com e, ou e não, e verificar intervalos de valores. @@ -28746,7 +28953,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] if (idade >= 12 || idade < 18) > Cada comparação fica sozinha, ligada com \`&&\`. ::: -`,Fv=`--- +`,Hv=`--- titel: Seleção bereich: Fundamentos kurz: Executar um de vários casos, consoante o valor de uma variável. @@ -29076,7 +29283,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] default - [ ] case 0 ::: -`,Rv=`--- +`,Vv=`--- titel: Ciclo while bereich: Fundamentos kurz: Repetir passos enquanto uma condição for verdadeira. @@ -29435,7 +29642,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] while (numero > 0); > A condição fica entre parênteses curvos, depois \`{\` abre o corpo. ::: -`,Jv=`--- +`,qv=`--- titel: Ciclo do-while bereich: Fundamentos kurz: Primeiro executar, depois verificar: ciclos com pelo menos uma iteração. @@ -29714,7 +29921,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] } until (condicao); > Depois da condição vem um ponto e vírgula. ::: -`,Gv=`--- +`,Qv=`--- titel: Ciclo for bereich: Fundamentos kurz: Contar um número fixo de iterações com Início, Condição e Passo. @@ -30051,7 +30258,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] i é mostrado. > \`i++\` é a forma curta de \`i = i + 1\`. ::: -`,Hv=`--- +`,Uv=`--- titel: Encaixar bereich: Fundamentos kurz: Combinar decisões dentro de ciclos e ciclos dentro de ciclos. @@ -30356,7 +30563,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] Pelas chavetas e pela indentação - [ ] Pelos pontos e vírgulas ::: -`,Vv=`--- +`,Yv=`--- titel: Arrays bereich: Fundamentos kurz: Guardar muitos valores com um só nome, chegar a eles com o índice e percorrê-los com um ciclo. @@ -30718,7 +30925,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] int numeros = [1, 2, 3]; - [ ] array numeros = (1, 2, 3); ::: -`,qv=`--- +`,$v=`--- titel: Arrays bidimensionais bereich: Fundamentos kurz: Guardar valores em linhas e colunas, como os lugares de um cinema, e percorrê-los com dois ciclos encaixados. @@ -31035,7 +31242,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] 5, o número de lugares - [ ] 15, todos os lugares juntos ::: -`,Qv=`--- +`,Kv=`--- titel: Strings bereich: Fundamentos kurz: Trabalhar com texto: ler caracteres, recortar partes, pesquisar, comparar e dividir. @@ -31563,7 +31770,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] uma mensagem de erro > parseInt transforma o texto num número. Depois o Java faz a conta normalmente. ::: -`,Uv=`--- +`,Xv=`--- titel: Chamada e interrupção bereich: Fundamentos kurz: Dividir tarefas grandes em subprogramas e sair mais cedo dos ciclos. @@ -32045,7 +32252,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] return > void significa “vazio”: o método faz alguma coisa, mas não devolve nenhum valor. ::: -`,Yv=`--- +`,ey=`--- titel: Pesquisar e ordenar bereich: Fundamentos kurz: Perceber com cartas de jogar como funcionam a pesquisa linear, a pesquisa binária e o bubble sort, e porque é que alguns métodos são muito mais rápidos. @@ -32397,7 +32604,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Um ciclo while não consegue percorrer arrays. > A carta pode aparecer várias vezes. Por isso percorres todas as cartas até ao fim. ::: -`,$v=`--- +`,ty=`--- titel: Estrutograma e código bereich: Do estrutograma ao código kurz: Todos os elementos em Java num relance, gerar código, escrever Java na área Código, executá-lo e procurar erros. @@ -32869,7 +33076,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] A linha 3 é a próxima a ser executada. > Um ponto de paragem é um ponto vermelho redondo, e a próxima linha está a amarelo. Um número de linha vermelho mostra um erro de sintaxe ou de execução. ::: -`,Kv=`--- +`,ny=`--- titel: Python e JavaScript bereich: Do estrutograma ao código kurz: Gerar código Python e JavaScript a partir do estrutograma e executar JavaScript diretamente no navegador. @@ -33109,7 +33316,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] É mostrado Soma:. > str(soma) transforma o número em texto. ::: -`,Xv=`--- +`,iy=`--- titel: Quando o programa falha: try e catch bereich: Apanhar erros kurz: Ler mensagens de erro com Java verdadeiro e apanhar falhas com try e catch. @@ -33402,7 +33609,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = ArithmeticException -> divisão por 0 = NumberFormatException -> o texto não é um número ::: -`,ey=`--- +`,ay=`--- titel: Ler e guardar texto bereich: Ficheiros kurz: Ler um ficheiro de texto linha a linha com Scanner e guardar um ficheiro com PrintWriter. @@ -33656,7 +33863,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = println(texto) -> escreve uma linha = close() -> fecha o ficheiro ::: -`,ty=`--- +`,sy=`--- titel: Linha a linha com BufferedReader bereich: Ficheiros kurz: Ler com BufferedReader e readLine até chegar null, e ler um ficheiro inteiro de uma vez com Files. @@ -33912,7 +34119,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = Files.readString -> ficheiros pequenos de uma vez = Scanner -> ler números e palavras ::: -`,ny=`--- +`,ry=`--- titel: Tabelas em CSV bereich: Ficheiros kurz: Ler uma tabela num ficheiro CSV, dividir cada linha com split e fazer contas com os números. @@ -34136,7 +34343,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = registo -> uma linha com valores = separador -> separa as colunas, muitas vezes ; ::: -`,iy=`--- +`,oy=`--- titel: Dados em JSON bereich: Ficheiros kurz: Perceber ficheiros JSON, tirar valores com indexOf e substring e escrever JSON tu mesmo. @@ -34361,7 +34568,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = [ ] -> uma lista = : -> separa a chave do valor ::: -`,ay=`--- +`,ly=`--- titel: Comparar formatos bereich: Ficheiros kurz: Comparar os mesmos dados em txt, CSV e JSON, escolher o formato certo e converter um ficheiro noutro formato. @@ -34536,7 +34743,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = a pauta de notas da turma -> CSV = um jogo guardado com listas -> JSON ::: -`,sy=`--- +`,uy=`--- titel: A tua primeira janela bereich: Janelas com Swing kurz: Abrir uma janela tua com Java e Swing, explicado linha a linha. @@ -34758,7 +34965,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Estão entre chavetas. - [ ] Terminam em Window. ::: -`,ry=`--- +`,my=`--- titel: Um botão na janela bereich: Janelas com Swing kurz: Pôr um botão na janela e arrumá-lo bem com um layout. @@ -34981,7 +35188,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] No botão aparece “Fui clicado”. > O que deve acontecer com um clique aprendes na próxima lição. ::: -`,oy=`--- +`,cy=`--- titel: O botão reage bereich: Janelas com Swing kurz: Com um ActionListener decides o que acontece com um clique. @@ -35329,7 +35536,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = setText -> mudar o texto = setVisible(true) -> mostrar a janela ::: -`,ly=`--- +`,dy=`--- titel: Duplicar um número na janela bereich: Janelas com Swing kurz: Arrumar uma etiqueta, um campo de texto e um botão com um GridLayout e calcular com o texto do campo de texto. @@ -35616,7 +35823,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = JButton -> botão = GridLayout -> arrumação em grelha ::: -`,uy=`--- +`,hy=`--- titel: Contador de cliques com reset bereich: Janelas com Swing kurz: Dois botões alteram o mesmo número: criar uma variável para a classe toda. @@ -35854,7 +36061,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Põe a janela no meio do ecrã. - [ ] Aumenta a letra. ::: -`,my=`--- +`,gy=`--- titel: Um semáforo com cores bereich: Janelas com Swing kurz: Definir cores de fundo e mudar um semáforo com uma variável de estado. @@ -36136,7 +36343,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] 3 > Depois de fase++ é 3, que é maior do que 2, por isso passa a 0. ::: -`,cy=`--- +`,py=`--- titel: Calculadora de notas na janela bereich: Janelas com Swing kurz: Escrever a percentagem, determinar o nível com else if e apanhar entradas erradas. @@ -36413,7 +36620,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] percentagem >= 0 || percentagem <= 100 > Um número não pode ser ao mesmo tempo menor do que 0 e maior do que 100, por isso é preciso o ou. ::: -`,dy=`--- +`,fy=`--- titel: Uma calculadora bereich: Janelas com Swing kurz: Duas colunas com GridLayout, quatro botões de cálculo e apanhar a divisão por 0. @@ -36690,7 +36897,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [ ] Coluna a coluna, começando de cima para baixo na coluna da esquerda - [ ] Ao acaso ::: -`,hy=`--- +`,by=`--- titel: Adivinha o número bereich: Janelas com Swing kurz: Um jogo com número aleatório, contagem de tentativas e um botão que se desliga no fim. @@ -36924,7 +37131,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ - [x] 7 > Cada palpite corta o intervalo a meio, e 2 elevado a 7 = 128 é maior do que 100. ::: -`,gy=`--- +`,xy=`--- titel: Muitos botões, um ouvinte bereich: Janelas com Swing kurz: Um ouvinte para muitos botões e descobrir com getActionCommand e getSource qual foi o botão clicado. @@ -37234,7 +37441,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = ActionEvent -> o evento e com a informação sobre o clique = JPanel -> uma área com o seu próprio layout ::: -`,py=`--- +`,vy=`--- titel: Classes internas bereich: Janelas com Swing kurz: Escrever um ouvinte como classe interna com nome, como classe anónima e como lambda, e saber quem vê o quê. @@ -37472,7 +37679,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = new ActionListener() { … } -> classe anónima = a seta depois de e -> lambda ::: -`,fy=`--- +`,yy=`--- titel: Dois separadores bereich: Janelas com Swing kurz: Construir uma janela com dois separadores, levar dados de um separador para o outro e guardar a lista num ficheiro de texto. @@ -37759,7 +37966,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = JPanel -> a área de um separador = JTextArea -> uma área de texto com várias linhas ::: -`,by=`--- +`,wy=`--- titel: Model View Controller bereich: Janelas com Swing kurz: Dividir o contador de cliques em model, view e controller e perceber quem fala com quem. @@ -38181,7 +38388,7 @@ Avalia-te com honestidade em cada ponto: ☂️ ainda não, ⛅ em parte, ☀️ = VistaNumero com atualizar(int valor) -> view = o ouvinte do botão -> controller ::: -`,xy=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua +`,zy=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua explicação ao passar o rato ou ao tocar. Se estiver a negrito nesse passo, é explicado ali mesmo e não é marcado. \`auch:\` indica outras formas que também são reconhecidas. Maiúsculas e minúsculas contam. @@ -38439,7 +38646,7 @@ Instruções em forma de números que o processador executa diretamente. Cada ti ### compilador JIT auch: JIT Uma parte da JVM que, durante a execução (“just in time”), traduz o bytecode muito usado em código máquina. Assim o Java fica mais rápido. -`,vy=`## Elementos básicos +`,Iy=`## Elementos básicos ### Instrução @@ -38608,7 +38815,7 @@ for (int i = 1; i <= 10; i++) { \`\`\` Serve para: a tarefa, dividir o código em entrada, processamento e saída, uma explicação, o fim de um bloco depois de \`}\`, a saída esperada e notas para a próxima vez. -`,yy=`--- +`,ky=`--- titel: Alter im Unterprogramm nach: 18 stufe: 2 @@ -38629,7 +38836,7 @@ tipp: Öffne die Übung im Editor und baue dort das Hauptprogramm mit dem Aufruf lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,wy=`--- +`,Sy=`--- titel: Ballwurf auswerten nach: 25 stufe: 2 @@ -38658,7 +38865,7 @@ tipp: Du brauchst vier Variablen vor der Schleife: die Anzahl, die Summe als \`d tipp: In der Schleife: \`String[] teile = zeile.split(";");\` und \`int weite = Integer.parseInt(teile[1]);\`. Ist \`weite > besteWeite\`, merkst du dir Weite und Namen. Zum Speichern: \`PrintWriter aus = new PrintWriter("sieger.txt");\`, \`aus.println(…)\` und \`aus.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,zy=`--- +`,Ty=`--- titel: Bestenliste nach: 19 stufe: 2 @@ -38692,7 +38899,7 @@ tipp: Lies jede Zahl erst in eine Variable ein und schreibe sie dann ins Array: tipp: Der Tausch braucht auch in Java eine Hilfsvariable: \`int hilf = punkte[i]; punkte[i] = punkte[i + 1]; punkte[i + 1] = hilf;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,Iy=`--- +`,_y=`--- titel: Binärzahl nach: 11 stufe: 3 @@ -38734,7 +38941,7 @@ tipp: Fang mit \`String binaer = "";\` an. Die Schleife läuft mit \`while (zahl tipp: Im Rumpf: \`int rest = zahl % 2;\`, dann \`binaer = rest + binaer;\` und \`zahl = zahl / 2;\`. Weil \`binaer\` ein String ist, hängt \`+\` den Rest vorne an. lösung: aufgabe-binaer-loesung.visustruct ::: -`,ky=`--- +`,jy=`--- titel: Caesar-Verschlüsselung nach: 17 stufe: 3 @@ -38868,7 +39075,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Sicher ist Caesar leider nicht. Es gibt nur 25 Schlüssel, die kann man in ein paar Minuten alle ausprobieren. Noch schneller geht es mit einem Trick: Im Deutschen ist E der häufigste Buchstabe. Kommt im Geheimtext H am häufigsten vor, war der Schlüssel wohl 3. Im Internet gibt es übrigens ROT13, das ist Caesar mit dem Schlüssel 13. Zweimal ROT13 ergibt wieder den Klartext, weil 13 + 13 = 26. ::: -`,Sy=`--- +`,Cy=`--- titel: Collatz-Folge nach: 11 stufe: 2 @@ -38912,7 +39119,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Mit dieser Aufgabe kann man reich werden! Der Mathematiker Paul Erdős setzte für einen Beweis 500 Dollar aus. 2021 legte die japanische Firma Bakuage noch einiges drauf: 120 Millionen Yen, damals umgerechnet rund eine Million Dollar, für einen Beweis oder ein Gegenbeispiel. Abgeholt hat das Geld bis heute niemand. Erfunden hat das Rätsel übrigens der deutsche Mathematiker Lothar Collatz im Jahr 1937. Ich rechne gleich mal los, für so viel Geld gibt es eine Menge Heu. ::: -`,Ty=`--- +`,Ay=`--- titel: Einheitenrechner nach: 35 stufe: 2 @@ -38961,7 +39168,7 @@ Zusatz: Ein vierter Knopf **in Fuß** rechnet in die englische Einheit um. Ein F ::: ludwig Tick im [Zahnrad](#zeige-einstellungen) **Echtes Java (mit Swing)** an. Für „abc“ im Feld brauchst du in jedem Zuhörer ein try/catch mit \`NumberFormatException\`, wie beim Taschenrechner. ::: -`,_y=`--- +`,Py=`--- titel: Fibonacci-Zahlen nach: 13 stufe: 2 @@ -39015,7 +39222,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] Die Reihenfolge ist egal > Andersherum hätten zahl1 und zahl2 danach denselben Wert. Wie beim Tauschen gilt: Erst retten, dann überschreiben. ::: -`,jy=`--- +`,Dy=`--- titel: Gerade oder ungerade nach: 8 stufe: 1 @@ -39051,7 +39258,7 @@ tipp: Eine Zahl liest du mit \`int zahl = scanner.nextInt();\` ein. Vorher frags tipp: \`if (zahl % 2 == 0) { … } else { … }\`. Die Ausgabe ist \`System.out.println(zahl + " ist gerade");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,Cy=`--- +`,By=`--- titel: Mehrwertsteuer nach: 6 stufe: 1 @@ -39092,7 +39299,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Weil man Kommazahlen nur als Konstante speichern kann > Eine Konstante behält ihren Wert. Ändert sich der Steuersatz einmal, passt du nur die eine Zeile mit \`const\` an. ::: -`,Ay=`--- +`,Oy=`--- titel: Notendurchschnitt nach: 13 stufe: 2 @@ -39127,7 +39334,7 @@ tipp: \`for (int i = 0; i < anzahl; i++)\` liest genau so viele Noten ein, wie v tipp: Teile mit \`double schnitt = summe * 1.0 / anzahl;\`. Ohne \`* 1.0\` teilt Java zwei \`int\` ganzzahlig, und aus 1.5 wird 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,Py=`--- +`,My=`--- titel: PIN prüfen nach: 12 stufe: 2 @@ -39167,7 +39374,7 @@ tipp: \`do { … } while (…);\` fragt mindestens einmal. Hinter \`while (…)\ tipp: Lege vorher \`int pin = 0;\` und \`int versuche = 0;\` an. In der Schleife: \`int eingabe = scanner.nextInt();\`, \`pin = eingabe;\` und \`versuche++;\`. Die Bedingung ist \`pin != 1234 && versuche < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,Dy=`--- +`,Zy=`--- titel: Schiffe versenken nach: 16 stufe: 2 @@ -39204,7 +39411,7 @@ tipp: Zwei \`for\`-Schleifen ineinander: außen die Reihe, innen die Spalte, bei tipp: \`if (meer[reihe][spalte]) { System.out.println(spalten[spalte] + (reihe + 1)); }\`. Die Klammer um \`reihe + 1\` sorgt dafür, dass Java erst rechnet. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,By=`--- +`,Ly=`--- titel: Speisekarte nach: 10 stufe: 1 @@ -39240,7 +39447,7 @@ tipp: In Java ist das eine Fallauswahl mit \`switch (nummer) { … }\`. tipp: Jeder Fall sieht so aus: \`case 1 -> { System.out.println("…"); }\`. Für alle anderen Nummern gibt es \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,Oy=`--- +`,Wy=`--- titel: Summe bilden nach: 2 stufe: 1 @@ -39256,7 +39463,7 @@ tipp: Du brauchst drei Variablen: zwei für die Zahlen und eine für das Ergebni tipp: Eine Variable legst du mit einer Anweisung wie \`int zahl1 = 4\` fest. Für die Ausgabe schreibst du den Namen der Variablen ohne Anführungszeichen. lösung: aufgabe-summe-loesung.visustruct ::: -`,My=`--- +`,Ey=`--- titel: Tafeldienst auslosen nach: 15 stufe: 2 @@ -39293,7 +39500,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > Mit \`int nummer = (int) (Math.random() * 5) + 1\` kannst du die Losnummer auch vom Zufall ziehen lassen. Für die automatische Prüfung brauchen wir aber eine feste Eingabe. -`,Zy=`--- +`,Ny=`--- titel: Taschenrechner nach: 10 stufe: 2 @@ -39329,7 +39536,7 @@ tipp: Das Rechenzeichen ist ein Text. Du liest es mit \`String zeichen = scanner tipp: \`switch (zeichen) { case "+" -> { … } … default -> { … } }\`. Bei Texten stehen die Fälle in Anführungszeichen. lösung: aufgabe-rechner-loesung.visustruct ::: -`,Ly=`--- +`,Fy=`--- titel: Verleih-Menü nach: 18 stufe: 2 @@ -39364,7 +39571,7 @@ tipp: \`while (true) { … }\` läuft endlos, bis ein \`break;\` kommt. tipp: Nimm in Java hier \`if\`/\`else if\` statt \`switch\`: Ein \`break;\` in einem \`switch\` verlässt nur den \`switch\`, nicht die Schleife. \`if (wahl == 0) { System.out.println("Tschüss"); break; } else if (wahl == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,Wy=`--- +`,Ry=`--- titel: Vokabeltrainer nach: 27 stufe: 3 @@ -39399,7 +39606,7 @@ tipp: Überspringe die Kopfzeile. In der Schleife zerlegst du jede Zeile mit \`s tipp: Texte vergleichst du mit \`antwort.equals(teile[1])\`, nicht mit \`==\`. Zähle vor der Schleife mit \`int richtig = 0;\` und \`int anzahl = 0;\` mit. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,Ey=`--- +`,Jy=`--- titel: Volljährig? nach: 8 stufe: 1 @@ -39435,7 +39642,7 @@ tipp: Lies das Alter mit \`int alter = scanner.nextInt();\` ein. tipp: \`if (alter >= 18) { … } else { … }\`, in jedem Zweig ein \`System.out.println(…)\`. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,Ny=`--- +`,Gy=`--- titel: Würfeln mit MVC nach: 40 stufe: 3 @@ -39473,7 +39680,7 @@ Zusatz: Ein Knopf **Neues Spiel** setzt alles auf Anfang. Die Methode dafür geh ::: ludwig Denk an die Regel aus Lektion 40: Im Model steht kein einziges \`JLabel\`. Wenn du beim Würfeln die Schriftgröße änderst, gehört das in die View. ::: -`,Fy=`--- +`,Hy=`--- titel: Zahl verdoppeln nach: 2 stufe: 1 @@ -39489,7 +39696,7 @@ tipp: Verdoppeln heißt: mal 2. Das Ergebnis speicherst du wieder in derselben V tipp: \`zahl = zahl * 2\` rechnet mit dem alten Wert und speichert das Ergebnis wieder in \`zahl\`. Text und Variable verbindest du mit \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,Ry=`--- +`,Vy=`--- titel: Age in a subprogram nach: 18 stufe: 2 @@ -39510,7 +39717,7 @@ tipp: Open the exercise in the editor and build the main program there with the lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,Jy=`--- +`,qy=`--- titel: Ball throw results nach: 25 stufe: 2 @@ -39539,7 +39746,7 @@ tipp: You need four variables before the loop: the count, the sum as a \`double\ tipp: In the loop: \`String[] parts = line.split(";");\` and \`int distance = Integer.parseInt(parts[1]);\`. If \`distance > bestDistance\`, remember the distance and the name. To save: \`PrintWriter out = new PrintWriter("winner.txt");\`, \`out.println(…)\` and \`out.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,Gy=`--- +`,Qy=`--- titel: Leaderboard nach: 19 stufe: 2 @@ -39573,7 +39780,7 @@ tipp: Read each number into a variable first and then put it into the array: \`i tipp: The swap needs a temporary variable in Java too: \`int temp = points[i]; points[i] = points[i + 1]; points[i + 1] = temp;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,Hy=`--- +`,Uy=`--- titel: Binary number nach: 11 stufe: 3 @@ -39615,7 +39822,7 @@ tipp: Start with \`String binary = "";\`. The loop runs with \`while (number > 0 tipp: In the body: \`int remainder = number % 2;\`, then \`binary = remainder + binary;\` and \`number = number / 2;\`. Because \`binary\` is a String, \`+\` puts the remainder at the front. lösung: aufgabe-binaer-loesung.visustruct ::: -`,Vy=`--- +`,Yy=`--- titel: Caesar cipher nach: 17 stufe: 3 @@ -39749,7 +39956,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Unfortunately, Caesar is not secure. There are only 25 keys, and you can try them all in a few minutes. It is even quicker with a trick: in English, E is the most common letter. If H is the most common letter in the secret text, the key was probably 3. On the internet there is also ROT13, which is Caesar with the key 13. Applying ROT13 twice gives you the plain text again, because 13 + 13 = 26. ::: -`,qy=`--- +`,$y=`--- titel: Collatz sequence nach: 11 stufe: 2 @@ -39793,7 +40000,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen This task could make you rich! The mathematician Paul Erdős offered 500 dollars for a proof. In 2021 the Japanese company Bakuage added quite a bit more: 120 million yen, about a million dollars at the time, for a proof or a counterexample. Nobody has collected the money yet. By the way, the puzzle was invented by the German mathematician Lothar Collatz in 1937. I am going to start calculating right now; that much money buys a lot of hay. ::: -`,Qy=`--- +`,Ky=`--- titel: Unit converter nach: 35 stufe: 2 @@ -39842,7 +40049,7 @@ Extra: a fourth button **in feet** converts to the imperial unit. One foot is 0. ::: ludwig Tick **Real Java (with Swing)** in the [gear](#zeige-einstellungen). For "abc" in the field, every listener needs a try/catch with \`NumberFormatException\`, just like the calculator. ::: -`,Uy=`--- +`,Xy=`--- titel: Fibonacci numbers nach: 13 stufe: 2 @@ -39896,7 +40103,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] The order does not matter > The other way round, number1 and number2 would have the same value afterwards. Just like swapping: first save, then overwrite. ::: -`,Yy=`--- +`,ew=`--- titel: Even or odd nach: 8 stufe: 1 @@ -39932,7 +40139,7 @@ tipp: Read a number with \`int number = scanner.nextInt();\`. Ask with \`System. tipp: \`if (number % 2 == 0) { … } else { … }\`. The output is \`System.out.println(number + " is even");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,$y=`--- +`,tw=`--- titel: Sales tax nach: 6 stufe: 1 @@ -39973,7 +40180,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Because decimal numbers can only be stored as constants > A constant keeps its value. If the tax rate ever changes, you only change the one line with \`const\`. ::: -`,Ky=`--- +`,nw=`--- titel: Grade average nach: 13 stufe: 2 @@ -40008,7 +40215,7 @@ tipp: \`for (int i = 0; i < count; i++)\` reads exactly as many grades as were g tipp: Divide with \`double average = sum * 1.0 / count;\`. Without \`* 1.0\`, Java divides two \`int\` values as whole numbers, and 1.5 becomes 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,Xy=`--- +`,iw=`--- titel: Check the PIN nach: 12 stufe: 2 @@ -40048,7 +40255,7 @@ tipp: \`do { … } while (…);\` asks at least once. There is a semicolon after tipp: Create \`int pin = 0;\` and \`int attempts = 0;\` first. In the loop: \`int entered = scanner.nextInt();\`, \`pin = entered;\` and \`attempts++;\`. The condition is \`pin != 1234 && attempts < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,ew=`--- +`,aw=`--- titel: Battleship nach: 16 stufe: 2 @@ -40085,7 +40292,7 @@ tipp: Two \`for\` loops inside each other: the row outside, the column inside, b tipp: \`if (sea[row][column]) { System.out.println(columns[column] + (row + 1)); }\`. The brackets around \`row + 1\` make Java calculate first. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,tw=`--- +`,sw=`--- titel: Menu nach: 10 stufe: 1 @@ -40121,7 +40328,7 @@ tipp: In Java this is a switch: \`switch (pick) { … }\`. tipp: Every case looks like this: \`case 1 -> { System.out.println("…"); }\`. All other numbers go to \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,nw=`--- +`,rw=`--- titel: Add up nach: 2 stufe: 1 @@ -40137,7 +40344,7 @@ tipp: You need three variables: two for the numbers and one for the result. tipp: You set a variable with a statement such as \`int number1 = 4\`. For the output you write the name of the variable without quotation marks. lösung: aufgabe-summe-loesung.visustruct ::: -`,iw=`--- +`,ow=`--- titel: Draw for board duty nach: 15 stufe: 2 @@ -40174,7 +40381,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > With \`int pick = (int) (Math.random() * 5) + 1\` you can also let chance draw the number. But for the automatic check we need a fixed input. -`,aw=`--- +`,lw=`--- titel: Calculator nach: 10 stufe: 2 @@ -40210,7 +40417,7 @@ tipp: The operator is a text. Read it with \`String operator = scanner.next();\` tipp: \`switch (operator) { case "+" -> { … } … default -> { … } }\`. With texts, the cases are in quotation marks. lösung: aufgabe-rechner-loesung.visustruct ::: -`,sw=`--- +`,uw=`--- titel: Rental menu nach: 18 stufe: 2 @@ -40245,7 +40452,7 @@ tipp: \`while (true) { … }\` runs forever until a \`break;\` comes. tipp: In Java, use \`if\`/\`else if\` here instead of \`switch\`: a \`break;\` inside a \`switch\` only leaves the \`switch\`, not the loop. \`if (choice == 0) { System.out.println("Bye"); break; } else if (choice == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,rw=`--- +`,mw=`--- titel: Vocabulary trainer nach: 27 stufe: 3 @@ -40280,7 +40487,7 @@ tipp: Skip the header line. In the loop, split every line with \`split(";")\`: \ tipp: Compare texts with \`answer.equals(parts[1])\`, not with \`==\`. Count along with \`int right = 0;\` and \`int count = 0;\` before the loop. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,ow=`--- +`,cw=`--- titel: Adult? nach: 8 stufe: 1 @@ -40316,7 +40523,7 @@ tipp: Read the age with \`int age = scanner.nextInt();\`. tipp: \`if (age >= 18) { … } else { … }\`, with a \`System.out.println(…)\` in each branch. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,lw=`--- +`,dw=`--- titel: Rolling dice with MVC nach: 40 stufe: 3 @@ -40354,7 +40561,7 @@ Extra: a button **New game** resets everything. The method for that belongs in t ::: ludwig Remember the rule from lesson 40: there isn't a single \`JLabel\` in the model. If you change the font size when rolling, that belongs in the view. ::: -`,uw=`--- +`,hw=`--- titel: Double a number nach: 2 stufe: 1 @@ -40370,7 +40577,7 @@ tipp: Doubling means: times 2. You store the result in the same variable again. tipp: \`number = number * 2\` calculates with the old value and stores the result in \`number\` again. You join text and a variable with \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,mw=`--- +`,gw=`--- titel: Idade num subprograma nach: 18 stufe: 2 @@ -40391,7 +40598,7 @@ tipp: Abre o exercício no editor e constrói lá o programa principal com a cha lösung: aufgabe-alter-haupt-loesung.visustruct unterprogramm: aufgabe-alter-unterprogramm-loesung.visustruct ::: -`,cw=`--- +`,pw=`--- titel: Avaliar o lançamento da bola nach: 25 stufe: 2 @@ -40420,7 +40627,7 @@ tipp: Precisas de quatro variáveis antes do ciclo: a contagem, a soma como \`do tipp: No ciclo: \`String[] partes = linha.split(";");\` e \`int distancia = Integer.parseInt(partes[1]);\`. Se \`distancia > melhorDistancia\`, guarda a distância e o nome. Para guardar: \`PrintWriter saida = new PrintWriter("vencedor.txt");\`, \`saida.println(…)\` e \`saida.close();\`. lösung: aufgabe-ballwurf-loesung.visustruct ::: -`,dw=`--- +`,fw=`--- titel: Classificação nach: 19 stufe: 2 @@ -40454,7 +40661,7 @@ tipp: Lê cada número primeiro para uma variável e depois põe-no no array: \` tipp: A troca também precisa de uma variável auxiliar em Java: \`int aux = pontos[i]; pontos[i] = pontos[i + 1]; pontos[i + 1] = aux;\`. lösung: aufgabe-bestenliste-loesung.visustruct ::: -`,hw=`--- +`,bw=`--- titel: Número binário nach: 11 stufe: 3 @@ -40496,7 +40703,7 @@ tipp: Começa com \`String binario = "";\`. O ciclo corre com \`while (numero > tipp: No corpo: \`int resto = numero % 2;\`, depois \`binario = resto + binario;\` e \`numero = numero / 2;\`. Como \`binario\` é uma String, o \`+\` põe o resto à frente. lösung: aufgabe-binaer-loesung.visustruct ::: -`,gw=`--- +`,xw=`--- titel: Cifra de César nach: 17 stufe: 3 @@ -40630,7 +40837,7 @@ lösung: aufgabe-caesar-entschluesseln-loesung.visustruct ::: angeberwissen Infelizmente, a cifra de César não é segura. Há apenas 25 chaves, e é possível experimentá-las todas em poucos minutos. Com um truque é ainda mais rápido: em português, as letras mais frequentes são o A e o E. Se no texto cifrado o H aparecer muitas vezes, a chave foi provavelmente 3. Na internet existe ainda o ROT13, que é a cifra de César com a chave 13. Aplicar ROT13 duas vezes devolve o texto simples, porque 13 + 13 = 26. ::: -`,pw=`--- +`,vw=`--- titel: Sequência de Collatz nach: 11 stufe: 2 @@ -40674,7 +40881,7 @@ lösung: aufgabe-collatz-loesung.visustruct ::: angeberwissen Esta tarefa pode tornar-te rico! O matemático Paul Erdős ofereceu 500 dólares por uma demonstração. Em 2021, a empresa japonesa Bakuage juntou bastante mais: 120 milhões de ienes, na altura cerca de um milhão de dólares, por uma demonstração ou um contraexemplo. Ainda ninguém foi buscar o dinheiro. Já agora, o enigma foi inventado pelo matemático alemão Lothar Collatz em 1937. Vou já começar a fazer contas; com tanto dinheiro compra-se muito feno. ::: -`,fw=`--- +`,yw=`--- titel: Conversor de unidades nach: 35 stufe: 2 @@ -40723,7 +40930,7 @@ Extra: um quarto botão **em pés** converte para a unidade inglesa. Um pé são ::: ludwig Marca **Java verdadeiro (com Swing)** na [roda dentada](#zeige-einstellungen). Para "abc" no campo, cada ouvinte precisa de um try/catch com \`NumberFormatException\`, tal como na calculadora. ::: -`,bw=`--- +`,ww=`--- titel: Números de Fibonacci nach: 13 stufe: 2 @@ -40777,7 +40984,7 @@ lösung: aufgabe-fibonacci-loesung.visustruct - [ ] A ordem não importa > Ao contrário, numero1 e numero2 ficariam depois com o mesmo valor. Tal como na troca: primeiro guardar, depois substituir. ::: -`,xw=`--- +`,zw=`--- titel: Par ou ímpar nach: 8 stufe: 1 @@ -40813,7 +41020,7 @@ tipp: Lês um número com \`int numero = scanner.nextInt();\`. Antes disso pergu tipp: \`if (numero % 2 == 0) { … } else { … }\`. A saída é \`System.out.println(numero + " é par");\`. lösung: aufgabe-gerade-loesung.visustruct ::: -`,vw=`--- +`,Iw=`--- titel: IVA nach: 6 stufe: 1 @@ -40854,7 +41061,7 @@ lösung: aufgabe-mehrwertsteuer-loesung.visustruct - [ ] Porque os números decimais só podem ser guardados como constantes > Uma constante mantém o seu valor. Se a taxa alguma vez mudar, só alteras a linha com \`const\`. ::: -`,yw=`--- +`,kw=`--- titel: Média das notas nach: 13 stufe: 2 @@ -40889,7 +41096,7 @@ tipp: \`for (int i = 0; i < quantidade; i++)\` lê exatamente as notas que foram tipp: Divide com \`double media = soma * 1.0 / quantidade;\`. Sem \`* 1.0\`, o Java divide dois \`int\` como inteiros, e 1.5 passa a 1. lösung: aufgabe-durchschnitt-loesung.visustruct ::: -`,ww=`--- +`,Sw=`--- titel: Verificar o PIN nach: 12 stufe: 2 @@ -40929,7 +41136,7 @@ tipp: \`do { … } while (…);\` pergunta pelo menos uma vez. Depois do \`while tipp: Cria antes \`int pin = 0;\` e \`int tentativas = 0;\`. No ciclo: \`int entrada = scanner.nextInt();\`, \`pin = entrada;\` e \`tentativas++;\`. A condição é \`pin != 1234 && tentativas < 3\`. lösung: aufgabe-pin-java-loesung.visustruct ::: -`,zw=`--- +`,Tw=`--- titel: Batalha naval nach: 16 stufe: 2 @@ -40966,7 +41173,7 @@ tipp: Dois ciclos \`for\` um dentro do outro: fora a fila, dentro a coluna, ambo tipp: \`if (mar[fila][coluna]) { System.out.println(colunas[coluna] + (fila + 1)); }\`. Os parênteses à volta de \`fila + 1\` fazem o Java calcular primeiro. lösung: aufgabe-schiffe-loesung.visustruct ::: -`,Iw=`--- +`,_w=`--- titel: Ementa nach: 10 stufe: 1 @@ -41002,7 +41209,7 @@ tipp: Em Java isto é uma seleção com \`switch (prato) { … }\`. tipp: Cada caso é assim: \`case 1 -> { System.out.println("…"); }\`. Para todos os outros números há \`default -> { … }\`. lösung: aufgabe-speisekarte-loesung.visustruct ::: -`,kw=`--- +`,jw=`--- titel: Somar nach: 2 stufe: 1 @@ -41018,7 +41225,7 @@ tipp: Precisas de três variáveis: duas para os números e uma para o resultado tipp: Defines uma variável com uma instrução como \`int numero1 = 4\`. Na saída escreves o nome da variável sem aspas. lösung: aufgabe-summe-loesung.visustruct ::: -`,Sw=`--- +`,Cw=`--- titel: Sortear quem limpa o quadro nach: 15 stufe: 2 @@ -41055,7 +41262,7 @@ lösung: aufgabe-tafeldienst-loesung.visustruct ::: > Com \`int sorteado = (int) (Math.random() * 5) + 1\` também podes deixar o acaso sortear o número. Mas para a verificação automática precisamos de uma entrada fixa. -`,Tw=`--- +`,Aw=`--- titel: Calculadora nach: 10 stufe: 2 @@ -41091,7 +41298,7 @@ tipp: O operador é um texto. Lês com \`String operador = scanner.next();\`. tipp: \`switch (operador) { case "+" -> { … } … default -> { … } }\`. Com textos, os casos ficam entre aspas. lösung: aufgabe-rechner-loesung.visustruct ::: -`,_w=`--- +`,Pw=`--- titel: Menu de aluguer nach: 18 stufe: 2 @@ -41126,7 +41333,7 @@ tipp: \`while (true) { … }\` corre sem fim até aparecer um \`break;\`. tipp: Em Java usa aqui \`if\`/\`else if\` em vez de \`switch\`: um \`break;\` dentro de um \`switch\` só sai do \`switch\`, não do ciclo. \`if (escolha == 0) { System.out.println("Adeus"); break; } else if (escolha == 1) { … }\`. lösung: aufgabe-verleih-java-loesung.visustruct ::: -`,jw=`--- +`,Dw=`--- titel: Treino de vocabulário nach: 27 stufe: 3 @@ -41161,7 +41368,7 @@ tipp: Salta a linha de cabeçalho. No ciclo, divide cada linha com \`split(";")\ tipp: Os textos comparam-se com \`resposta.equals(partes[1])\`, não com \`==\`. Conta com \`int certas = 0;\` e \`int contagem = 0;\` antes do ciclo. lösung: aufgabe-vokabeln-loesung.visustruct ::: -`,Cw=`--- +`,Bw=`--- titel: Maior de idade? nach: 8 stufe: 1 @@ -41197,7 +41404,7 @@ tipp: Lê a idade com \`int idade = scanner.nextInt();\`. tipp: \`if (idade >= 18) { … } else { … }\`, com um \`System.out.println(…)\` em cada ramo. lösung: aufgabe-volljaehrig-loesung.visustruct ::: -`,Aw=`--- +`,Ow=`--- titel: Lançar o dado com MVC nach: 40 stufe: 3 @@ -41235,7 +41442,7 @@ Extra: um botão **Novo jogo** põe tudo no início. O método para isso pertenc ::: ludwig Lembra-te da regra da lição 40: no model não há um único \`JLabel\`. Se mudares o tamanho da letra ao lançar, isso pertence à view. ::: -`,Pw=`--- +`,Mw=`--- titel: Duplicar um número nach: 2 stufe: 1 @@ -41251,7 +41458,7 @@ tipp: Duplicar quer dizer: vezes 2. Guardas o resultado outra vez na mesma vari tipp: \`numero = numero * 2\` calcula com o valor antigo e volta a guardar o resultado em \`numero\`. Juntas texto e uma variável com \`+\`. lösung: aufgabe-verdoppeln-loesung.visustruct ::: -`,Dw=`--- +`,Zw=`--- titel: Struktogramm und Editor bereich: Losfahren kurz: Was ein Struktogramm ist, wie du den Editor bedienst und deine Programme speicherst. @@ -41410,7 +41617,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`.png\` > \`.png\` ist ein Bild zum Weitergeben. Weiterbearbeiten kannst du nur die \`.visustruct\`-Datei. ::: -`,Bw=`--- +`,Lw=`--- titel: Der mBot2 bereich: Losfahren kurz: Lerne den Roboter kennen, den du gleich programmierst. @@ -41784,7 +41991,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann den echten mBot2 per USB-C verbinden und wieder trennen. → Den echten mBot2 verbinden - Ich kann prüfen, ob alle Sensoren und Aktoren funktionieren. → Den mBot2 testen ::: -`,Ow=`--- +`,Ww=`--- titel: Das Quadrat bereich: Losfahren kurz: Vom langen Struktogramm zur dreifach verschachtelten Schleife. @@ -42114,7 +42321,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann drei Schleifen ineinander schachteln. → Vier Quadrate - Ich kann mein Programm auf den mBot2 übertragen und ohne Kabel mit Taste A starten. → Ohne Kabel fahren ::: -`,Mw=`--- +`,Ew=`--- titel: Variablen und Ausgabe bereich: Losfahren kurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse auf dem Bildschirm zeigen. @@ -42363,7 +42570,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 30 > Das \`+\` hängt den Text und die Zahl aneinander. ::: -`,Zw=`--- +`,Nw=`--- titel: Schritt für Schritt testen bereich: Losfahren kurz: Mit der Simulation und dem Schreibtischtest herausfinden, was dein Programm wirklich tut. @@ -42546,7 +42753,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] ein Fehler im Roboter > Das Programm tut genau, was dasteht, nur nicht das, was gemeint war. ::: -`,Lw=`--- +`,Fw=`--- titel: Sensoren abfragen bereich: Sensoren und Entscheidungen kurz: Der mBot2 misst etwas, und dein Programm entscheidet. @@ -42713,7 +42920,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Weil Sensoren nur in Java gehen. > Befehle sind Anweisungen. Sensoren sind Werte, so wie eine Variable. ::: -`,Ww=`--- +`,Rw=`--- titel: Bis zur Wand bereich: Sensoren und Entscheidungen kurz: Der mBot2 misst den Abstand und hält rechtzeitig an. @@ -42920,7 +43127,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Weil der mBot2 For-Schleifen nicht versteht. > Die For-Schleife weiß vorher, wie oft sie läuft. Die While-Schleife entscheidet unterwegs. ::: -`,Ew=`--- +`,Jw=`--- titel: Erst fahren, dann prüfen bereich: Sensoren und Entscheidungen kurz: Die Do-while-Schleife fährt immer mindestens einmal und prüft erst danach. @@ -43191,7 +43398,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] nichts > \`} while (Bedingung);\` endet mit einem Semikolon. ::: -`,Nw=`--- +`,Gw=`--- titel: Der Ultraschallsensor bereich: Sensoren und Entscheidungen kurz: Abstand messen, Abstand halten und das Ganze in Java. @@ -43379,7 +43586,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`otherwise\` > \`if\` ist der Anfang, \`else\` der false-Zweig. ::: -`,Fw=`--- +`,Hw=`--- titel: Der Liniensensor bereich: Sensoren und Entscheidungen kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen. @@ -43636,7 +43843,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`mbot.getLine() < 0\` > \`!=\` heißt „ungleich“. ::: -`,Rw=`--- +`,Vw=`--- titel: Und, oder, nicht bereich: Sensoren und Entscheidungen kurz: Zwei Sensoren in einer Bedingung prüfen: und, oder, nicht. @@ -43893,7 +44100,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`while (mbot.getDistance() > 15)\` > Mit \`||\` würde er weiterfahren, solange nur einer der Teile stimmt, also zum Beispiel über den Rand hinaus. ::: -`,Jw=`--- +`,qw=`--- titel: Farben erkennen bereich: Sensoren und Entscheidungen kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht. @@ -44056,7 +44263,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`mbot.getColor() = "grün"\` > \`mbot.getColor()\` liefert einen Text, und Texte vergleicht man mit \`.equals(…)\`. Ein einzelnes \`=\` ist eine Zuweisung, gar kein Vergleich. ::: -`,Gw=`--- +`,Qw=`--- titel: Fallauswahl mit Farben bereich: Sensoren und Entscheidungen kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen. @@ -44287,7 +44494,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`if 6 -> { … }\` > Zahlen stehen ohne Anführungszeichen, Texte wie \`"rot"\` mit. ::: -`,Hw=`--- +`,Uw=`--- titel: Tasten und Joystick bereich: Sensoren und Entscheidungen kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern. @@ -44464,7 +44671,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Ohne Pause fährt der mBot2 rückwärts. > Die Schleife fragt alle 100 Millisekunden nach, das reicht völlig. ::: -`,Vw=`--- +`,Yw=`--- titel: Notbremse mit break bereich: Sensoren und Entscheidungen kurz: Eine Endlosschleife mit Aussprung: Der mBot2 fährt immer weiter, bis die Notbremse greift. @@ -44694,7 +44901,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`for (;;) break;\` > \`true\` ist immer wahr, die Schleife hört nur mit \`break\` auf. ::: -`,qw=`--- +`,$w=`--- titel: Der Lichtsensor bereich: Sensoren und Entscheidungen kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht. @@ -44858,7 +45065,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] 0 bis 100 - [ ] -100 bis 100 ::: -`,Qw=`--- +`,Kw=`--- titel: Das Mikrofon bereich: Sensoren und Entscheidungen kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer. @@ -45021,7 +45228,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Der mBot2 fährt los. > 30 ist kleiner als 50, die Bedingung ist wahr, die Schleife läuft weiter. ::: -`,Uw=`--- +`,Xw=`--- titel: Der Lagesensor bereich: Sensoren und Entscheidungen kurz: Neigung messen und Schütteln erkennen. @@ -45205,7 +45412,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Es meldet, ob jemand den mBot2 schüttelt. > Sensoren tun nichts, sie messen nur. ::: -`,Yw=`--- +`,e9=`--- titel: Die LEDs bereich: Licht, Ton und Bildschirm kurz: Farben mischen, eine Ampel bauen und blinken lassen. @@ -45421,7 +45628,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Sonst gehen die LEDs kaputt. - [ ] Weil \`ledOff()\` sonst nicht geht. ::: -`,$w=`--- +`,t9=`--- titel: Einzelne LEDs bereich: Licht, Ton und Bildschirm kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht. @@ -45630,7 +45837,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Nur LED 4 geht aus. - [ ] Vier LEDs gehen aus. ::: -`,Kw=`--- +`,n9=`--- titel: Der Lautsprecher bereich: Licht, Ton und Bildschirm kurz: Töne, eine Tonleiter und eine Sirene. @@ -45797,7 +46004,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 1000 Sekunden > 1000 Millisekunden sind eine Sekunde. ::: -`,Xw=`--- +`,i9=`--- titel: Arrays und Melodien bereich: Licht, Ton und Bildschirm kurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten. @@ -46041,7 +46248,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] 330 > \`length\` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2. ::: -`,e9=`--- +`,a9=`--- titel: Der Bildschirm bereich: Licht, Ton und Bildschirm kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen. @@ -46247,7 +46454,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [x] Er wird ersetzt. - [ ] Der neue kommt darunter. ::: -`,t9=`--- +`,s9=`--- titel: Zeichenketten bereich: Licht, Ton und Bildschirm kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen. @@ -46439,7 +46646,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`g\` > Die Zeichen werden ab 0 gezählt. Zeichen 0 ist das erste. ::: -`,n9=`--- +`,r9=`--- titel: Motoren und Geschwindigkeit bereich: Motoren und Methoden kurz: Gas geben, lenken und einer Linie folgen. @@ -46610,7 +46817,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] \`mbot.drive(-40, -40)\` > Dreht sich das linke Rad schneller, fährt er eine Rechtskurve. ::: -`,i9=`--- +`,o9=`--- titel: Stoppuhr und Akku bereich: Motoren und Methoden kurz: Zeit messen und den Akku im Blick behalten. @@ -46783,7 +46990,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - [ ] Weil die Stoppuhr sonst stehen bleibt. > Gas geben gilt weiter, auch während er wartet. ::: -`,a9=`--- +`,l9=`--- titel: Eigene Methoden bereich: Motoren und Methoden kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen. @@ -47082,7 +47289,7 @@ Schätze dich bei jedem Punkt ehrlich ein: ☂️ noch nicht, ⛅ teilweise, ☀ - Ich kann eine überladene Methode erkennen und aufrufen. → Gleicher Name, andere Parameter: Überladung - Ich kann eine Methode mit Rückgabewert schreiben. → Methode mit Rückgabe ::: -`,s9=`## 🤖 mBot2-Befehle +`,u9=`## 🤖 mBot2-Befehle Ein Befehl sagt dem mBot2, was er **tun** soll. Jeder Befehl beginnt mit \`mbot.\` und endet mit Klammern. In die Klammern schreibst du oft eine Zahl. @@ -47250,7 +47457,7 @@ Mit **🔌 mBot2** neben „Simulation starten“ verbindest du den echten Robot ### Ohne Kabel fahren Mit **⬆ Übertragen** speicherst du dein Programm fest auf dem mBot2. Danach Kabel ab, mBot2 an den Start und **Taste A** drücken: Er fährt dein Programm allein. Es bleibt gespeichert, bis du ein neues überträgst. Eingaben mit der Tastatur gehen am mBot2 nicht. -`,r9=`--- +`,m9=`--- titel: Structure chart and editor bereich: Getting started kurz: What a structure chart is, how to use the editor and how to save your programs. @@ -47409,7 +47616,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`.png\` > \`.png\` is a picture to pass on. You can only keep editing the \`.visustruct\` file. ::: -`,o9=`--- +`,c9=`--- titel: The mBot2 bereich: Getting started kurz: Get to know the robot you are about to program. @@ -47783,7 +47990,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can connect the real mBot2 with USB-C and disconnect it again. → Connecting the real mBot2 - I can check that all sensors and actuators work. → Testing the mBot2 ::: -`,l9=`--- +`,d9=`--- titel: The square bereich: Getting started kurz: From a long structure chart to a triple nested loop. @@ -48113,7 +48320,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can nest three loops. → Four squares - I can upload my program to the mBot2 and start it with button A without a cable. → Driving without a cable ::: -`,u9=`--- +`,h9=`--- titel: Variables and output bereich: Getting started kurz: Store values in variables, drive the mBot2 with them and show results on the screen. @@ -48362,7 +48569,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 30 > The \`+\` joins the text and the number. ::: -`,m9=`--- +`,g9=`--- titel: Testing step by step bereich: Getting started kurz: Use the simulation and a desk check to find out what your program really does. @@ -48545,7 +48752,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] a fault in the robot > The program does exactly what it says, just not what was meant. ::: -`,c9=`--- +`,p9=`--- titel: Reading sensors bereich: Sensors and decisions kurz: The mBot2 measures something, and your program decides. @@ -48712,7 +48919,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Because sensors only work in Java. > Commands are statements. Sensors are values, just like a variable. ::: -`,d9=`--- +`,f9=`--- titel: Up to the wall bereich: Sensors and decisions kurz: The mBot2 measures the distance and stops in time. @@ -48919,7 +49126,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Because the mBot2 does not understand for loops. > The for loop knows beforehand how often it runs. The while loop decides on the way. ::: -`,h9=`--- +`,b9=`--- titel: Drive first, then check bereich: Sensors and decisions kurz: The do-while loop always drives at least once and only checks afterwards. @@ -49190,7 +49397,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] nothing > \`} while (condition);\` ends with a semicolon. ::: -`,g9=`--- +`,x9=`--- titel: The ultrasonic sensor bereich: Sensors and decisions kurz: Measure the distance, keep your distance, and do it all in Java. @@ -49378,7 +49585,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`otherwise\` > \`if\` is the start, \`else\` the false branch. ::: -`,p9=`--- +`,v9=`--- titel: The line sensor bereich: Sensors and decisions kurz: Detect dark lines on the floor and don't fall off the table. @@ -49635,7 +49842,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`mbot.getLine() < 0\` > \`!=\` means “not equal”. ::: -`,f9=`--- +`,y9=`--- titel: And, or, not bereich: Sensors and decisions kurz: Check two sensors in one condition: and, or, not. @@ -49892,7 +50099,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`while (mbot.getDistance() > 15)\` > With \`||\` it would keep driving as long as just one part is true, for example over the edge. ::: -`,b9=`--- +`,w9=`--- titel: Recognising colours bereich: Sensors and decisions kurz: The quad RGB sensor tells you which colour the mBot2 is standing on. @@ -50055,7 +50262,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`mbot.getColor() = "green"\` > \`mbot.getColor()\` gives a text, and texts are compared with \`.equals(…)\`. A single \`=\` is an assignment, not a comparison at all. ::: -`,x9=`--- +`,z9=`--- titel: Case selection with colours bereich: Sensors and decisions kurz: Do something different for each colour or line, with one case selection instead of many branches. @@ -50286,7 +50493,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`if 6 -> { … }\` > Numbers have no quotation marks, texts like \`"red"\` do. ::: -`,v9=`--- +`,I9=`--- titel: Buttons and joystick bereich: Sensors and decisions kurz: The mBot2 waits for you and can be remote controlled. @@ -50463,7 +50670,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Without a pause the mBot2 drives backwards. > The loop checks every 100 milliseconds, that is plenty. ::: -`,y9=`--- +`,k9=`--- titel: Emergency brake with break bereich: Sensors and decisions kurz: An endless loop with a Break: the mBot2 keeps driving until the emergency brake kicks in. @@ -50693,7 +50900,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`for (;;) break;\` > \`true\` is always true, the loop only stops with \`break\`. ::: -`,w9=`--- +`,S9=`--- titel: The light sensor bereich: Sensors and decisions kurz: Bright or dark? The mBot2 becomes a night light. @@ -50857,7 +51064,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] 0 to 100 - [ ] -100 to 100 ::: -`,z9=`--- +`,T9=`--- titel: The microphone bereich: Sensors and decisions kurz: Clap to start, and a noise light for the classroom. @@ -51020,7 +51227,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] The mBot2 drives off. > 30 is less than 50, the condition is true, the loop keeps running. ::: -`,I9=`--- +`,_9=`--- titel: The motion sensor bereich: Sensors and decisions kurz: Measure tilt and detect shaking. @@ -51204,7 +51411,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] It reports whether someone is shaking the mBot2. > Sensors don't do anything, they only measure. ::: -`,k9=`--- +`,j9=`--- titel: The LEDs bereich: Light, sound and screen kurz: Mix colours, build a traffic light and make it blink. @@ -51420,7 +51627,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Otherwise the LEDs break. - [ ] Because \`ledOff()\` doesn't work otherwise. ::: -`,S9=`--- +`,C9=`--- titel: Single LEDs bereich: Light, sound and screen kurz: Each of the five LEDs gets its own colour, all the way to a running light. @@ -51629,7 +51836,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] Only LED 4 goes off. - [ ] Four LEDs go off. ::: -`,T9=`--- +`,A9=`--- titel: The speaker bereich: Light, sound and screen kurz: Tones, a scale and a siren. @@ -51796,7 +52003,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 1000 seconds > 1000 milliseconds are one second. ::: -`,_9=`--- +`,P9=`--- titel: Arrays and melodies bereich: Light, sound and screen kurz: Store many values in one array and work through them with a loop. @@ -52040,7 +52247,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] 330 > \`length\` counts the slots, here three. That is why the last slot has the number 2. ::: -`,j9=`--- +`,D9=`--- titel: The screen bereich: Light, sound and screen kurz: Show text, numbers and sensor values on the CyberPi. @@ -52246,7 +52453,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [x] It is replaced. - [ ] The new one appears below it. ::: -`,C9=`--- +`,B9=`--- titel: Strings bereich: Light, sound and screen kurz: Work with texts, pick out letters and show them on the screen. @@ -52438,7 +52645,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`g\` > Characters are counted from 0. Character 0 is the first one. ::: -`,A9=`--- +`,O9=`--- titel: Motors and speed bereich: Motors and methods kurz: Step on the gas, steer and follow a line. @@ -52609,7 +52816,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] \`mbot.drive(-40, -40)\` > If the left wheel turns faster, it drives a right curve. ::: -`,P9=`--- +`,M9=`--- titel: Stopwatch and battery bereich: Motors and methods kurz: Measure time and keep an eye on the battery. @@ -52782,7 +52989,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - [ ] Because otherwise the stopwatch stops. > Stepping on the gas still applies while it waits. ::: -`,D9=`--- +`,Z9=`--- titel: Your own methods bereich: Motors and methods kurz: Write and call your own commands with parameters and return values. @@ -53081,7 +53288,7 @@ Rate yourself honestly for each point: ☂️ not yet, ⛅ partly, ☀️ I can - I can recognise and call an overloaded method. → Same name, different parameters: overloading - I can write a method with a return value. → A method with a return value ::: -`,B9=`## 🤖 mBot2 commands +`,L9=`## 🤖 mBot2 commands A command tells the mBot2 what to **do**. Every command starts with \`mbot.\` and ends with brackets. Often you write a number in the brackets. @@ -53249,7 +53456,7 @@ With **🔌 mBot2** next to "Start simulation" you connect the real robot with t ### Driving without a cable With **⬆ Upload** you save your program on the mBot2. Then unplug the cable, put the mBot2 at the start and press **button A**: it drives your program on its own. It stays saved until you upload a new one. Keyboard inputs do not work on the mBot2. -`,O9=`--- +`,W9=`--- titel: Die Alarmanlage nach: 16 stufe: 2 @@ -53268,7 +53475,7 @@ tipp: Außen steht eine While-Schleife mit \`!mbot.isButtonB()\`. Darin eine Ver tipp: Die Bedingung der Verzweigung: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. Im true-Zweig \`mbot.setLed(255, 0, 0)\` und \`mbot.playTone(880, 200)\`, im false-Zweig \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,M9=`--- +`,E9=`--- titel: Labyrinth mit Ausgängen nach: 5 stufe: 3 @@ -53287,7 +53494,7 @@ tipp: In jedem Durchlauf dreht sich der mBot2 zuerst nach links und misst. Ist o tipp: Durch die Lücke sind es zwei Felder bis in den nächsten Gang. Danach soll er wieder nach rechts schauen. Ist oben eine Wand, dreht er sich zurück und fährt ein Feld weiter. lösung: vb-ausgang-loesung.visustruct ::: -`,Z9=`--- +`,N9=`--- titel: Binär zählen nach: 15 stufe: 3 @@ -53312,7 +53519,7 @@ tipp: Ob LED 0 an ist, verrät der Rest beim Teilen durch 2: \`zahl % 2 == 1\`. tipp: In der Schleife stehen drei Verzweigungen und danach **kurz warten**. Im true-Zweig zum Beispiel \`mbot.led(0).setColor("grün")\`, im false-Zweig \`mbot.led(0).setColor("aus")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,L9=`--- +`,F9=`--- titel: Das Dreieck nach: 2 stufe: 1 @@ -53335,7 +53542,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen Die Idee, mit einem fahrenden Roboter Figuren zu zeichnen, ist über 50 Jahre alt: Ende der 1960er-Jahre entstand die Sprache **Logo**. Kinder steuerten damit eine „Schildkröte“, die mit einem Stift über das Papier fuhr. ::: -`,W9=`--- +`,R9=`--- titel: Rückwärts einparken nach: 16 stufe: 2 @@ -53355,7 +53562,7 @@ tipp: Zwei While-Schleifen hintereinander: erst \`!mbot.getColor().equals("blau" tipp: Am Ende: \`mbot.setLed(0, 255, 0)\` und \`mbot.showText("Geparkt!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,E9='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im true-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im false-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',N9=`--- +`,J9='---\ntitel: Hindernis ausweichen\nnach: 16\nstufe: 2\n---\n\nAuf dem Weg zum roten Feld stehen Klötze im Weg. Der mBot2 fährt in 10-cm-Schritten vor. Taucht ein Klotz auf (näher als 20 cm), warnt er mit Licht und Ton und fährt außen herum: nach rechts drehen, 30 cm vor, nach links drehen. Dann geht es weiter geradeaus.\n\n::: übung vb-hindernis\ntitel: Hindernis ausweichen\nauftrag: Der mBot2 fährt, solange er nicht auf Rot steht. Ist ein Klotz näher als 20 cm, leuchten die LEDs orange (`mbot.setLed(255, 128, 0)`), er piept und weicht aus. Danach gehen die LEDs aus. Sonst fährt er 10 cm vor. Es gibt zwei Welten.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, darin eine Verzweigung mit `mbot.getDistance() < 20`.\ntipp: Im true-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im false-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',G9=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -53372,7 +53579,7 @@ tipp: Die erste Schleife zählt \`i\` von 0 bis 4 hoch. Die zweite startet bei 3 tipp: In beiden Schleifen: \`mbot.led(i).setColor("rot")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("aus")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,F9=`--- +`,H9=`--- titel: Das Labyrinth nach: 5 stufe: 2 @@ -53397,7 +53604,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen Mit der Regel „Hand immer an der Wand“ findet man aus jedem Labyrinth, dessen Wände alle zusammenhängen. Schon die Griechen erzählten von Theseus, der sich im Labyrinth des Minotaurus mit einem Wollfaden half. ::: -`,R9='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',J9=`--- +`,V9='---\ntitel: Linienfolger mit Stopp\nnach: 20\nstufe: 3\n---\n\nDer mBot2 folgt einer schwarzen Linie und hält am roten Feld an ihrem Ende an.\n\nDafür gibt er mit **Räder einzeln** Gas: `mbot.drive(40, 40)` lässt beide Räder gleich schnell drehen, er fährt geradeaus weiter, bis ein anderer Fahrbefehl kommt. `mbot.drive(10, 40)` macht eine Linkskurve, `mbot.drive(40, 10)` eine Rechtskurve. `mbot.stop()` hält ihn an.\n\nDie beiden mittleren Fühler des Liniensensors fragst du mit `mbot.isLineLeft()` und `mbot.isLineRight()` ab. Sehen beide die Linie, fährt er geradeaus. Sieht nur der linke sie, lenkt er nach links, sieht nur der rechte sie, nach rechts.\n\n::: übung vb-linienfolger-stopp\ntitel: Linienfolger mit Stopp\nauftrag: Solange der mBot2 nicht auf Rot steht, folgt er der Linie. Danach hält er an. In der zweiten Welt schlängelt sich die Linie.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: Außen eine While-Schleife mit `!mbot.getColor().equals("rot")`, danach **anhalten**.\ntipp: In der Schleife: Sind `mbot.isLineLeft() && mbot.isLineRight()`, dann `mbot.drive(40, 40)`. Sonst, wenn `mbot.isLineLeft()`, dann `mbot.drive(10, 40)`. Sonst, wenn `mbot.isLineRight()`, dann `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',q9=`--- titel: Morsen nach: 15 stufe: 2 @@ -53414,7 +53621,7 @@ tipp: Drei For-Schleifen hintereinander, jede läuft dreimal. Dazwischen steht j tipp: In der ersten und dritten Schleife: \`mbot.led(2).setColor("weiß")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("aus")\`, \`mbot.pause(200)\`. In der mittleren wartet er nach dem Einschalten 600. lösung: vb-morsen-loesung.visustruct ::: -`,G9=`--- +`,Q9=`--- titel: Der Nachtwächter nach: 18 stufe: 1 @@ -53432,7 +53639,7 @@ tipp: Eine While-Schleife mit \`mbot.getBrightness() < 20\`. Darin \`mbot.forwar tipp: Nach der Schleife steht \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,H9=`--- +`,U9=`--- titel: Slalom nach: 2 stufe: 2 @@ -53451,7 +53658,7 @@ tipp: Überlege zuerst, wie der mBot2 oben um einen einzigen Pylon herumfährt: tipp: Unten herum geht genauso, nur mit links und rechts vertauscht. „Oben herum, dann unten herum“ wiederholt sich zweimal. lösung: vb-slalom-loesung.visustruct ::: -`,V9=`--- +`,Y9=`--- titel: Die Spirale nach: 2 stufe: 2 @@ -53470,7 +53677,7 @@ tipp: Lass die Zählvariable von 1 bis 8 laufen. Wie lang ist dann die Seite in tipp: In der Klammer von **fahre vor** steht eine Rechnung mit der Zählvariable. lösung: vb-spirale-loesung.visustruct ::: -`,q9=`--- +`,$9=`--- titel: Die Treppe nach: 2 stufe: 1 @@ -53487,7 +53694,7 @@ tipp: Schreib zuerst eine Stufe auf. Dann packst du sie in eine For-Schleife, di tipp: In der Schleife: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,Q9=`--- +`,K9=`--- titel: Der Tunnelsucher nach: 5 stufe: 3 @@ -53508,7 +53715,7 @@ tipp: In jedem Durchlauf fährt der mBot2 ein Feld vor und schaut sich dann nach tipp: Hier passt eine Schleife, die erst fährt und danach prüft. Sie läuft weiter, solange links **oder** rechts mindestens 20 cm frei ist: \`links >= 20 || rechts >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,U9=`--- +`,X9=`--- titel: Kleeblatt im Wald nach: 5 stufe: 2 @@ -53527,7 +53734,7 @@ tipp: Wie bei „Fahre bis zum Ziel“ läuft außen eine Schleife, bis der Lini tipp: Um einen Baum herum: nach links drehen, ein Feld vor, nach rechts drehen, zwei Felder vor, nach rechts drehen, ein Feld vor, nach links drehen. lösung: vb-wald-loesung.visustruct ::: -`,Y9=`--- +`,e5=`--- titel: The alarm system nach: 16 stufe: 2 @@ -53546,7 +53753,7 @@ tipp: On the outside is a while loop with \`!mbot.isButtonB()\`. Inside a branch tipp: The condition of the branch: \`mbot.getDistance() < 20 || mbot.getLoudness() > 60\`. In the true branch \`mbot.setLed(255, 0, 0)\` and \`mbot.playTone(880, 200)\`, in the false branch \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,$9=`--- +`,t5=`--- titel: Maze with exits nach: 5 stufe: 3 @@ -53565,7 +53772,7 @@ tipp: In each pass the mBot2 first turns left and measures. If the way up is fre tipp: Through the gap it is two squares into the next corridor. Afterwards it should face right again. If there is a wall above, it turns back and drives one square further. lösung: vb-ausgang-loesung.visustruct ::: -`,K9=`--- +`,n5=`--- titel: Counting in binary nach: 15 stufe: 3 @@ -53590,7 +53797,7 @@ tipp: Whether LED 0 is on is given by the remainder when dividing by 2: \`number tipp: The loop contains three branches and then **wait a moment**. In the true branch, for example, \`mbot.led(0).setColor("green")\`, in the false branch \`mbot.led(0).setColor("off")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,X9=`--- +`,i5=`--- titel: The triangle nach: 2 stufe: 1 @@ -53613,7 +53820,7 @@ lösung: vb-dreieck-loesung.visustruct ::: angeberwissen The idea of drawing shapes with a driving robot is more than 50 years old: the language **Logo** was created in the late 1960s. Children used it to steer a "turtle" that rolled across paper with a pen. ::: -`,e5=`--- +`,a5=`--- titel: Reverse parking nach: 16 stufe: 2 @@ -53633,7 +53840,7 @@ tipp: Two while loops one after the other: first \`!mbot.getColor().equals("blue tipp: At the end: \`mbot.setLed(0, 255, 0)\` and \`mbot.showText("Parked!")\`. lösung: vb-einparken-loesung.visustruct ::: -`,t5='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the true branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the false branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',n5=`--- +`,s5='---\ntitel: Avoid obstacles\nnach: 16\nstufe: 2\n---\n\nOn the way to the red field there are blocks in the way. The mBot2 drives forward in steps of 10 cm. If a block shows up (closer than 20 cm), it warns with light and sound and drives around it: turn right, 30 cm forward, turn left. Then it carries on straight ahead.\n\n::: übung vb-hindernis\ntitel: Avoid obstacles\nauftrag: The mBot2 drives as long as it is not on red. If a block is closer than 20 cm, the LEDs light up orange (`mbot.setLed(255, 128, 0)`), it beeps and drives around it. Then the LEDs go off. Otherwise it drives forward 10 cm. There are two worlds.\nwelt: hindernis-1 -> tone\nwelt: hindernis-2 -> tone\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, inside a branch with `mbot.getDistance() < 20`.\ntipp: In the true branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the false branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',r5=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -53650,7 +53857,7 @@ tipp: The first loop counts \`i\` up from 0 to 4. The second starts at 3 and cou tipp: In both loops: \`mbot.led(i).setColor("red")\`, \`mbot.pause(100)\`, \`mbot.led(i).setColor("off")\`. lösung: vb-knight-rider-loesung.visustruct ::: -`,i5=`--- +`,o5=`--- titel: The maze nach: 5 stufe: 2 @@ -53675,7 +53882,7 @@ lösung: vb-labyrinth-loesung.visustruct ::: angeberwissen With the rule "always keep one hand on the wall" you get out of any maze whose walls are all connected. The ancient Greeks already told of Theseus, who found his way through the Minotaur's labyrinth with a ball of thread. ::: -`,a5='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',s5=`--- +`,l5='---\ntitel: Line follower with stop\nnach: 20\nstufe: 3\n---\n\nThe mBot2 follows a black line and stops at the red field at its end.\n\nFor this it steps on the gas with **wheels separately**: `mbot.drive(40, 40)` turns both wheels equally fast, it keeps driving straight ahead until another driving command comes. `mbot.drive(10, 40)` makes a left curve, `mbot.drive(40, 10)` a right curve. `mbot.stop()` stops it.\n\nYou ask the two middle probes of the line sensor with `mbot.isLineLeft()` and `mbot.isLineRight()`. If both see the line, it drives straight ahead. If only the left one sees it, it steers left, if only the right one sees it, right.\n\n::: übung vb-linienfolger-stopp\ntitel: Line follower with stop\nauftrag: As long as the mBot2 is not on red, it follows the line. Then it stops. In the second world the line winds about.\nwelt: linie-rot-1, linie-rot-2\nbraucht: whileSchleife, verzweigung\ntipp: On the outside a while loop with `!mbot.getColor().equals("red")`, after it **stop**.\ntipp: Inside the loop: if `mbot.isLineLeft() && mbot.isLineRight()`, then `mbot.drive(40, 40)`. Otherwise, if `mbot.isLineLeft()`, then `mbot.drive(10, 40)`. Otherwise, if `mbot.isLineRight()`, then `mbot.drive(40, 10)`.\nlösung: vb-linienfolger-stopp-loesung.visustruct\n:::\n',u5=`--- titel: Morse code nach: 15 stufe: 2 @@ -53692,7 +53899,7 @@ tipp: Three for loops one after the other, each runs three times. Between them t tipp: In the first and third loop: \`mbot.led(2).setColor("white")\`, \`mbot.pause(200)\`, \`mbot.led(2).setColor("off")\`, \`mbot.pause(200)\`. In the middle one it waits 600 after switching on. lösung: vb-morsen-loesung.visustruct ::: -`,r5=`--- +`,m5=`--- titel: The night watchman nach: 18 stufe: 1 @@ -53710,7 +53917,7 @@ tipp: A while loop with \`mbot.getBrightness() < 20\`. Inside \`mbot.forward(30) tipp: After the loop is \`mbot.showText("Zzz")\`. lösung: vb-nachtwaechter-loesung.visustruct ::: -`,o5=`--- +`,c5=`--- titel: Slalom nach: 2 stufe: 2 @@ -53729,7 +53936,7 @@ tipp: First think about how the mBot2 drives around a single cone on the top sid tipp: Around the bottom works the same way, only with left and right swapped. "Top, then bottom" repeats twice. lösung: vb-slalom-loesung.visustruct ::: -`,l5=`--- +`,d5=`--- titel: The spiral nach: 2 stufe: 2 @@ -53748,7 +53955,7 @@ tipp: Let the counter variable run from 1 to 8. How long is the side in each pas tipp: The brackets of **drive forward** contain a calculation with the counter variable. lösung: vb-spirale-loesung.visustruct ::: -`,u5=`--- +`,h5=`--- titel: The staircase nach: 2 stufe: 1 @@ -53765,7 +53972,7 @@ tipp: Write down one step first. Then put it into a for loop that runs three tim tipp: Inside the loop: \`mbot.forward(20)\`, \`mbot.turnLeft()\`, \`mbot.forward(20)\`, \`mbot.turnRight()\`. lösung: vb-treppe-loesung.visustruct ::: -`,m5=`--- +`,g5=`--- titel: The tunnel finder nach: 5 stufe: 3 @@ -53786,7 +53993,7 @@ tipp: In each pass the mBot2 drives one square forward and then looks left and r tipp: A loop that drives first and checks afterwards fits here. It keeps going as long as at least 20 cm are free on the left **or** on the right: \`left >= 20 || right >= 20\`. lösung: vb-tunnel-loesung.visustruct ::: -`,c5=`--- +`,p5=`--- titel: Clover in the forest nach: 5 stufe: 2 @@ -53805,7 +54012,7 @@ tipp: As in "Drive to the goal", a loop on the outside runs until the line senso tipp: Around a tree: turn left, one square forward, turn right, two squares forward, turn right, one square forward, turn left. lösung: vb-wald-loesung.visustruct ::: -`,d5=` +`,f5=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;34; @@ -53817,7 +54024,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;117;102;32;87;105;101;100;101;114;115;101;104;101;110;34; -`,h5=` +`,b5=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -53836,7 +54043,7 @@ lösung: vb-wald-loesung.visustruct -`,g5=` +`,x5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -53917,7 +54124,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,p5=` +`,v5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;98;97;108;108;119;117;114;102;46;99;115;118;34;41;41; @@ -53926,7 +54133,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,f5=` +`,y5=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -53991,7 +54198,7 @@ lösung: vb-wald-loesung.visustruct -`,b5=` +`,w5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;71;97;110;122;101;32;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -54017,7 +54224,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;101;114; -`,x5=` +`,z5=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -54071,13 +54278,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,v5=` +`,I5=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,y5=` +`,k5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;101;108;99;104;101;115;32;87;111;114;116;32;40;110;117;114;32;71;114;111;223;98;117;99;104;115;116;97;98;101;110;41;63;34; @@ -54108,7 +54315,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,w5=` +`,S5=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;103;101;104;101;105;109;32;34;87;101;108;99;104;101;114;32;71;101;104;101;105;109;116;101;120;116;63;34; @@ -54139,7 +54346,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;107;108;97;114;116;101;120;116; -`,z5=` +`,T5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -54175,7 +54382,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101; -`,I5=` +`,_5=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;78;111;116;101;110;63;34; @@ -54203,7 +54410,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;110;105;116;116; -`,k5=` +`,j5=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;90;97;104;108;101;110;63;34; @@ -54240,7 +54447,7 @@ lösung: vb-wald-loesung.visustruct -`,S5=` +`,C5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -54259,7 +54466,7 @@ lösung: vb-wald-loesung.visustruct -`,T5=` +`,A5=` 99;111;110;115;116;32;100;111;117;98;108;101;32;77;87;83;84;32;61;32;48;46;49;57; @@ -54280,7 +54487,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;114;117;116;116;111;112;114;101;105;115; -`,_5=` +`,P5=` 105;110;116;32;112;105;110;32;61;32;48; @@ -54316,7 +54523,7 @@ lösung: vb-wald-loesung.visustruct -`,j5=` +`,D5=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -54352,7 +54559,7 @@ lösung: vb-wald-loesung.visustruct -`,C5=` +`,B5=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;49;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -54396,7 +54603,7 @@ lösung: vb-wald-loesung.visustruct -`,A5=` +`,O5=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -54450,7 +54657,7 @@ lösung: vb-wald-loesung.visustruct -`,P5=` +`,M5=` 98;111;111;108;101;97;110;91;93;91;93;32;109;101;101;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -54477,7 +54684,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;115;112;97;108;116;101;110;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,D5=` +`,Z5=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;109;101;114;32;34;87;101;108;99;104;101;115;32;71;101;114;105;99;104;116;63;32;40;49;44;32;50;32;111;100;101;114;32;51;41;34; @@ -54506,7 +54713,7 @@ lösung: vb-wald-loesung.visustruct -`,B5=` +`,L5=` 105;110;116;32;122;97;104;108;49;32;61;32;52; @@ -54521,7 +54728,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,O5=` +`,W5=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -54543,7 +54750,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;97;102;101;108;100;105;101;110;115;116;58;32;34;32;43;32;110;97;109;101;110;91;110;117;109;109;101;114;32;45;32;49;93; -`,M5=` +`,E5=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -54555,7 +54762,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;100;111;112;112;101;108;116;101;32;90;97;104;108;58;32;34;32;43;32;122;97;104;108; -`,Z5=` +`,N5=` -1; @@ -54602,7 +54809,7 @@ lösung: vb-wald-loesung.visustruct -`,L5=` +`,F5=` @@ -54639,7 +54846,7 @@ lösung: vb-wald-loesung.visustruct -`,W5=` +`,R5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -54699,7 +54906,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;99;104;116;105;103;32;43;32;34;32;118;111;110;32;34;32;43;32;97;110;122;97;104;108;32;43;32;34;32;114;105;99;104;116;105;103;34; -`,E5=` +`,J5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;107;97;98;101;108;110;46;99;115;118;34;41;41; @@ -54708,7 +54915,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,N5=` +`,G5=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -54727,7 +54934,7 @@ lösung: vb-wald-loesung.visustruct -`,F5=` +`,H5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -54750,7 +54957,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,R5=` +`,V5=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -54768,7 +54975,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;104;97;116;32;105;110;32;77;97;116;104;101;32;101;105;110;101;32;34;32;43;32;109;97;116;104;101; -`,J5=` +`,q5=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;97;114;116;92;34;58;32;92;34;90;105;101;103;101;92;34;44;32;92;34;97;108;116;101;114;92;34;58;32;54;125;44;34; @@ -54786,7 +54993,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,G5=` +`,Q5=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -54806,7 +55013,7 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,H5=` +`,U5=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;34; @@ -54818,7 +55025,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;111;100;98;121;101;34; -`,V5=` +`,Y5=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -54837,7 +55044,7 @@ lösung: vb-wald-loesung.visustruct -`,q5=` +`,$5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -54918,7 +55125,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,Q5=` +`,K5=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;104;114;111;119;46;99;115;118;34;41;41; @@ -54927,7 +55134,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,U5=` +`,X5=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -54992,7 +55199,7 @@ lösung: vb-wald-loesung.visustruct -`,Y5=` +`,ez=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;119;104;111;108;101;32;110;117;109;98;101;114;34; @@ -55018,7 +55225,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;121; -`,$5=` +`,tz=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -55072,13 +55279,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,K5=` +`,nz=` 99;104;97;114;91;93;32;97;108;112;104;97;98;101;116;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,X5=` +`,iz=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;87;104;105;99;104;32;119;111;114;100;32;40;99;97;112;105;116;97;108;32;108;101;116;116;101;114;115;32;111;110;108;121;41;63;34; @@ -55109,7 +55316,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,ez=` +`,az=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;99;114;101;116;32;34;87;104;105;99;104;32;115;101;99;114;101;116;32;116;101;120;116;63;34; @@ -55140,7 +55347,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;108;97;105;110; -`,tz=` +`,sz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;115;116;97;114;116;32;110;117;109;98;101;114;34; @@ -55176,7 +55383,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115; -`,nz=` +`,rz=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;103;114;97;100;101;115;63;34; @@ -55204,7 +55411,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;118;101;114;97;103;101; -`,iz=` +`,oz=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;110;117;109;98;101;114;115;63;34; @@ -55241,7 +55448,7 @@ lösung: vb-wald-loesung.visustruct -`,az=` +`,lz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -55260,7 +55467,7 @@ lösung: vb-wald-loesung.visustruct -`,sz=` +`,uz=` 99;111;110;115;116;32;100;111;117;98;108;101;32;86;65;84;32;61;32;48;46;49;57; @@ -55281,7 +55488,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;114;111;115;115;80;114;105;99;101; -`,rz=` +`,mz=` 105;110;116;32;112;105;110;32;61;32;48; @@ -55317,7 +55524,7 @@ lösung: vb-wald-loesung.visustruct -`,oz=` +`,cz=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -55353,7 +55560,7 @@ lösung: vb-wald-loesung.visustruct -`,lz=` +`,dz=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;49;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -55397,7 +55604,7 @@ lösung: vb-wald-loesung.visustruct -`,uz=` +`,hz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -55451,7 +55658,7 @@ lösung: vb-wald-loesung.visustruct -`,mz=` +`,gz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -55478,7 +55685,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;109;110;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,cz=` +`,pz=` 105;110;112;117;116;58;32;105;110;116;32;112;105;99;107;32;34;87;104;105;99;104;32;100;105;115;104;63;32;40;49;44;32;50;32;111;114;32;51;41;34; @@ -55507,7 +55714,7 @@ lösung: vb-wald-loesung.visustruct -`,dz=` +`,fz=` 105;110;116;32;110;117;109;98;101;114;49;32;61;32;52; @@ -55522,7 +55729,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,hz=` +`,bz=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -55544,7 +55751,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;111;97;114;100;32;100;117;116;121;58;32;34;32;43;32;110;97;109;101;115;91;112;105;99;107;32;45;32;49;93; -`,gz=` +`,xz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -55556,7 +55763,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;111;117;98;108;101;100;32;110;117;109;98;101;114;58;32;34;32;43;32;110;117;109;98;101;114; -`,pz=` +`,vz=` -1; @@ -55603,7 +55810,7 @@ lösung: vb-wald-loesung.visustruct -`,fz=` +`,yz=` @@ -55640,7 +55847,7 @@ lösung: vb-wald-loesung.visustruct -`,bz=` +`,wz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -55700,7 +55907,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;105;103;104;116;32;43;32;34;32;111;102;32;34;32;43;32;99;111;117;110;116;32;43;32;34;32;114;105;103;104;116;34; -`,xz=` +`,zz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;119;111;114;100;115;46;99;115;118;34;41;41; @@ -55709,7 +55916,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,vz=` +`,Iz=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -55728,7 +55935,7 @@ lösung: vb-wald-loesung.visustruct -`,yz=` +`,kz=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -55751,7 +55958,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,wz=` +`,Sz=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -55769,7 +55976,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;103;111;116;32;97;32;34;32;43;32;109;97;116;104;115;32;43;32;34;32;105;110;32;109;97;116;104;115;34; -`,zz=` +`,Tz=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;123;92;34;110;97;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;115;112;101;99;105;101;115;92;34;58;32;92;34;103;111;97;116;92;34;44;32;92;34;97;103;101;92;34;58;32;54;125;44;34; @@ -55787,7 +55994,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,Iz=` +`,_z=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -55807,7 +56014,7 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,kz=` +`,jz=` 105;110;116;91;93;91;93;32;116;97;98;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -55839,7 +56046,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,Sz=` +`,Cz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -55887,7 +56094,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;101;58;32;34;32;43;32;102;114;101;101; -`,Tz=` +`,Az=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -55902,7 +56109,7 @@ lösung: vb-wald-loesung.visustruct 115;101;97;116;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,_z=` +`,Pz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -55936,7 +56143,7 @@ lösung: vb-wald-loesung.visustruct -`,jz=` +`,Dz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -55954,7 +56161,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;115;101;97;116;32;34;83;101;97;116;34; -`,Cz=` +`,Bz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -56002,7 +56209,7 @@ lösung: vb-wald-loesung.visustruct -`,Az=` +`,Oz=` 98;111;111;108;101;97;110;91;93;91;93;32;115;101;97;116;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -56026,7 +56233,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;111;119;32;49;44;32;115;101;97;116;32;50;32;115;111;108;100;63;32;34;32;43;32;115;101;97;116;115;91;49;93;91;50;93; -`,Pz=` +`,Mz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -56041,7 +56248,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; -`,Dz=` +`,Zz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -56056,7 +56263,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;58;32;34;32;43;32;114;101;115;117;108;116; -`,Bz=` +`,Lz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -56071,7 +56278,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,Oz=` +`,Wz=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -56086,7 +56293,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,Mz=` +`,Ez=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -56098,7 +56305,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;97;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34; -`,Zz=` +`,Nz=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -56110,7 +56317,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;32;34;32;43;32;65;103;101;32;43;32;34;32;121;101;97;114;115;32;111;108;100;46;34;41; -`,Lz=` +`,Fz=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -56128,7 +56335,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,Wz=` +`,Rz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -56143,7 +56350,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,Ez=` +`,Jz=` 105;110;116;32;110;117;109;98;101;114;32;61;32;50; @@ -56158,7 +56365,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,Nz=` +`,Gz=` 111;117;116;112;117;116;58;32;110;117;109;98;101;114; @@ -56173,7 +56380,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;98;101;114;32;61;32;110;117;109;98;101;114;32;43;32;51; -`,Fz=` +`,Hz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -56197,7 +56404,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,Rz=` +`,Vz=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -56212,7 +56419,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;105;103;104;116;58;32;34;32;43;32;114;105;103;104;116; -`,Jz=` +`,qz=` 105;110;116;32;97;32;61;32;53; @@ -56236,7 +56443,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,Gz=` +`,Qz=` 105;110;116;32;97;103;101;32;61;32;49;52; @@ -56254,7 +56461,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;109;34; -`,Hz=` +`,Uz=` 105;110;116;32;109;105;110;117;116;101;115;32;61;32;49;51;53; @@ -56269,7 +56476,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;117;114;115;32;43;32;34;32;104;111;117;114;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;109;105;110;117;116;101;115;34; -`,Vz=` +`,Yz=` 105;110;116;32;99;111;117;110;116;32;61;32;51; @@ -56284,7 +56491,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108;80;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,qz=` +`,$z=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -56299,7 +56506,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;101;102;116;58;32;34;32;43;32;99;114;101;100;105;116; -`,Qz=` +`,Kz=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -56314,7 +56521,7 @@ lösung: vb-wald-loesung.visustruct 99;114;101;100;105;116;32;61;32;99;114;101;100;105;116;32;45;32;112;114;105;99;101; -`,Uz=` +`,Xz=` 105;110;116;32;112;114;105;99;101;32;61;32;57; @@ -56329,7 +56536,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,Yz=` +`,e6=` 105;110;116;32;115;108;105;99;101;115;32;61;32;56; @@ -56344,7 +56551,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;80;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; -`,$z=` +`,t6=` 105;110;116;32;115;108;105;99;101;115;32;61;32;56; @@ -56359,7 +56566,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;118;101;114;121;111;110;101;32;103;101;116;115;32;34;32;43;32;112;101;114;112;101;114;115;111;110;32;43;32;34;32;115;108;105;99;101;115;46;34; -`,Kz=` +`,n6=` 105;110;116;32;108;101;110;103;116;104;32;61;32;55; @@ -56380,7 +56587,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;105;109;101;116;101;114;58;32;34;32;43;32;112;101;114;105;109;101;116;101;114; -`,Xz=` +`,i6=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -56395,7 +56602,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,e6=` +`,a6=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -56404,7 +56611,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;115;32;43;32;34;32;109;105;110;117;116;101;115;32;97;110;100;32;34;32;43;32;114;101;109;97;105;110;100;101;114;32;43;32;34;32;115;101;99;111;110;100;115;34; -`,t6=` +`,s6=` 105;110;116;32;108;101;110;103;116;104;32;61;32;53; @@ -56419,7 +56626,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,n6=` +`,r6=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;104;97;116;32;105;115;32;121;111;117;114;32;110;97;109;101;63;34; @@ -56428,7 +56635,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,i6=` +`,o6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -56443,7 +56650,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,a6=` +`,l6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -56455,7 +56662,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,s6=` +`,u6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -56467,7 +56674,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;97;32;43;32;98; -`,r6=` +`,m6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56476,7 +56683,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;97;103;101;32;43;32;49;41; -`,o6=` +`,c6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56485,7 +56692,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;101;120;116;32;121;101;97;114;32;121;111;117;32;119;105;108;108;32;98;101;32;34;32;43;32;40;65;103;101;32;43;32;49;41; -`,l6=` +`,d6=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;115;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56497,7 +56704,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;116;32;105;115;32;97;98;111;117;116;32;34;32;43;32;100;97;121;115;32;43;32;34;32;100;97;121;115;46;34; -`,u6=` +`,h6=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -56512,7 +56719,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;97;110;58;32;34;32;43;32;109;101;97;110; -`,m6=` +`,g6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -56533,7 +56740,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;99;116;58;32;34;32;43;32;112;114;111;100;117;99;116; -`,c6=` +`,p6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56552,7 +56759,7 @@ lösung: vb-wald-loesung.visustruct -`,d6=` +`,f6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -56574,7 +56781,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,h6=` +`,b6=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;78;117;109;98;101;114;63;34; @@ -56593,7 +56800,7 @@ lösung: vb-wald-loesung.visustruct -`,g6=` +`,x6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -56611,7 +56818,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,p6=` +`,v6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -56629,7 +56836,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,f6=` +`,y6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; @@ -56644,7 +56851,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,b6=` +`,w6=` 105;110;116;32;112;111;105;110;116;115;32;61;32;49;48; @@ -56659,7 +56866,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;105;110;116;115;58;32;34;32;43;32;112;111;105;110;116;115; -`,x6=` +`,z6=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -56677,7 +56884,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,v6=` +`,I6=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -56695,7 +56902,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,y6=` +`,k6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -56717,7 +56924,7 @@ lösung: vb-wald-loesung.visustruct -`,w6=` +`,S6=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;105;99;101;32;34;80;114;105;99;101;32;105;110;32;101;117;114;111;115;63;34; @@ -56739,7 +56946,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;32;112;97;121;58;32;34;32;43;32;112;114;105;99;101;32;43;32;34;32;101;117;114;111;115;34; -`,z6=` +`,T6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -56758,7 +56965,7 @@ lösung: vb-wald-loesung.visustruct -`,I6=` +`,_6=` 105;110;112;117;116;58;32;105;110;116;32;112;111;105;110;116;115;32;34;72;111;119;32;109;97;110;121;32;112;111;105;110;116;115;63;34; @@ -56777,7 +56984,7 @@ lösung: vb-wald-loesung.visustruct -`,k6=` +`,j6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56796,7 +57003,7 @@ lösung: vb-wald-loesung.visustruct -`,S6=` +`,C6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56815,7 +57022,7 @@ lösung: vb-wald-loesung.visustruct -`,T6=` +`,A6=` 105;110;116;32;97;103;101;32;61;32;49;53; @@ -56834,7 +57041,7 @@ lösung: vb-wald-loesung.visustruct -`,_6=` +`,P6=` 105;110;116;32;97;103;101;32;61;32;49;53; @@ -56853,7 +57060,7 @@ lösung: vb-wald-loesung.visustruct -`,j6=` +`,D6=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -56872,7 +57079,7 @@ lösung: vb-wald-loesung.visustruct -`,C6=` +`,B6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;71;114;97;100;101;63;34; @@ -56891,7 +57098,7 @@ lösung: vb-wald-loesung.visustruct -`,A6=` +`,O6=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;32;34;89;101;97;114;63;34; @@ -56910,7 +57117,7 @@ lösung: vb-wald-loesung.visustruct -`,P6=` +`,M6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;68;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -56929,7 +57136,7 @@ lösung: vb-wald-loesung.visustruct -`,D6=` +`,Z6=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;108;111;114;32;34;87;104;97;116;32;99;111;108;111;114;32;105;115;32;116;104;101;32;116;114;97;102;102;105;99;32;108;105;103;104;116;63;34; @@ -56958,7 +57165,7 @@ lösung: vb-wald-loesung.visustruct -`,B6=` +`,L6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -56987,7 +57194,7 @@ lösung: vb-wald-loesung.visustruct -`,O6=` +`,W6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -57006,7 +57213,7 @@ lösung: vb-wald-loesung.visustruct -`,M6=` +`,E6=` 105;110;112;117;116;58;32;105;110;116;32;100;97;121;32;34;87;104;105;99;104;32;100;97;121;32;40;49;32;116;111;32;55;41;63;34; @@ -57025,7 +57232,7 @@ lösung: vb-wald-loesung.visustruct -`,Z6=` +`,N6=` 105;110;116;32;100;97;121;32;61;32;55; @@ -57044,7 +57251,7 @@ lösung: vb-wald-loesung.visustruct -`,L6=` +`,F6=` 105;110;116;32;100;97;121;32;61;32;55; @@ -57063,7 +57270,7 @@ lösung: vb-wald-loesung.visustruct -`,W6=` +`,R6=` 105;110;112;117;116;58;32;105;110;116;32;104;111;117;114;32;34;87;104;97;116;32;116;105;109;101;32;105;115;32;105;116;32;40;106;117;115;116;32;116;104;101;32;104;111;117;114;41;63;34; @@ -57082,7 +57289,7 @@ lösung: vb-wald-loesung.visustruct -`,E6=` +`,J6=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101;32;34;87;104;105;99;104;32;103;114;97;100;101;63;34; @@ -57126,7 +57333,7 @@ lösung: vb-wald-loesung.visustruct -`,N6=` +`,G6=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -57173,7 +57380,7 @@ lösung: vb-wald-loesung.visustruct -`,F6=` +`,H6=` 105;110;112;117;116;58;32;105;110;116;32;99;104;111;105;99;101;32;34;49;32;119;97;116;101;114;44;32;50;32;106;117;105;99;101;44;32;51;32;99;111;99;111;97;34; @@ -57212,7 +57419,7 @@ lösung: vb-wald-loesung.visustruct -`,R6=` +`,V6=` 80;117;116;32;97;32;99;117;112;32;111;110;32;116;104;101;32;116;97;98;108;101; @@ -57242,7 +57449,7 @@ lösung: vb-wald-loesung.visustruct 68;114;105;110;107;32;116;104;101;32;116;101;97; -`,J6=` +`,q6=` 71;101;116;32;117;112; @@ -57257,7 +57464,7 @@ lösung: vb-wald-loesung.visustruct 72;97;118;101;32;98;114;101;97;107;102;97;115;116; -`,G6=` +`,Q6=` 70;105;108;108;32;116;104;101;32;107;101;116;116;108;101;32;119;105;116;104;32;119;97;116;101;114; @@ -57278,7 +57485,7 @@ lösung: vb-wald-loesung.visustruct 84;97;107;101;32;111;117;116;32;116;104;101;32;116;101;97;32;98;97;103; -`,H6=` +`,U6=` 73;115;32;105;116;32;114;97;105;110;105;110;103;63; @@ -57297,7 +57504,7 @@ lösung: vb-wald-loesung.visustruct 76;101;97;118;101; -`,V6=` +`,Y6=` 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; @@ -57311,7 +57518,7 @@ lösung: vb-wald-loesung.visustruct 67;108;101;97;114;32;116;104;101;32;112;108;97;116;101; -`,q6=` +`,$6=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;117;110;116;32;117;112;32;116;111;63;34; @@ -57331,7 +57538,7 @@ lösung: vb-wald-loesung.visustruct -`,Q6=` +`,K6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -57351,7 +57558,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,U6=` +`,X6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -57368,7 +57575,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,Y6=` +`,eI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;99;116;111;114;105;97;108;32;111;102;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -57394,7 +57601,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;99;116;111;114;105;97;108; -`,$6=` +`,tI=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -57429,7 +57636,7 @@ lösung: vb-wald-loesung.visustruct -`,K6=` +`,nI=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;63;34; @@ -57464,7 +57671,7 @@ lösung: vb-wald-loesung.visustruct -`,X6=` +`,iI=` 105;110;116;32;103;114;97;100;101;32;61;32;50; @@ -57488,7 +57695,7 @@ lösung: vb-wald-loesung.visustruct -`,eI=` +`,aI=` 105;110;116;32;103;114;97;100;101;32;61;32;50; @@ -57512,7 +57719,7 @@ lösung: vb-wald-loesung.visustruct -`,tI=` +`,sI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -57541,7 +57748,7 @@ lösung: vb-wald-loesung.visustruct -`,nI=` +`,rI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -57564,7 +57771,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;101;112;115; -`,iI=` +`,oI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -57581,7 +57788,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;97;110;107;32;121;111;117;33;34; -`,aI=` +`,lI=` 105;110;116;32;105;32;61;32;49;48; @@ -57598,7 +57805,7 @@ lösung: vb-wald-loesung.visustruct -`,sI=` +`,uI=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -57624,7 +57831,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,rI=` +`,mI=` 105;110;112;117;116;58;32;105;110;116;32;103;111;97;108;32;34;83;97;118;105;110;103;115;32;103;111;97;108;63;34; @@ -57650,7 +57857,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;101;101;107;115;58;32;34;32;43;32;119;101;101;107;115; -`,oI=` +`,cI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;101;114;101;63;34; @@ -57670,7 +57877,7 @@ lösung: vb-wald-loesung.visustruct -`,lI=` +`,dI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -57690,7 +57897,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,uI=` +`,hI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -57710,7 +57917,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,mI=` +`,gI=` 105;110;116;32;103;114;97;100;101;32;61;32;48; @@ -57727,7 +57934,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;114;32;103;114;97;100;101;58;32;34;32;43;32;103;114;97;100;101; -`,cI=` +`,pI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -57750,7 +57957,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,dI=` +`,fI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;32;110;117;109;98;101;114;34; @@ -57769,7 +57976,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,hI=` +`,bI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -57788,7 +57995,7 @@ lösung: vb-wald-loesung.visustruct -`,gI=` +`,xI=` 105;110;116;32;105;32;61;32;49; @@ -57801,7 +58008,7 @@ lösung: vb-wald-loesung.visustruct -`,pI=` +`,vI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -57818,7 +58025,7 @@ lösung: vb-wald-loesung.visustruct -`,fI=` +`,yI=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -57835,7 +58042,7 @@ lösung: vb-wald-loesung.visustruct -`,bI=` +`,wI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;49; @@ -57855,7 +58062,7 @@ lösung: vb-wald-loesung.visustruct -`,xI=` +`,zI=` 105;110;116;32;110;117;109;98;101;114;32;61;32;49; @@ -57875,7 +58082,7 @@ lösung: vb-wald-loesung.visustruct -`,vI=` +`,II=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;110;117;109;98;101;114;63;34; @@ -57892,7 +58099,7 @@ lösung: vb-wald-loesung.visustruct -`,yI=` +`,kI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -57914,7 +58121,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,wI=` +`,SI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;108;105;110;101;115;63;34; @@ -57943,7 +58150,7 @@ lösung: vb-wald-loesung.visustruct -`,zI=` +`,TI=` 105;110;116;32;99;111;117;110;116;32;61;32;48; @@ -57975,7 +58182,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,II=` +`,_I=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58007,7 +58214,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,kI=` +`,jI=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -58023,7 +58230,7 @@ lösung: vb-wald-loesung.visustruct -`,SI=` +`,CI=` 105;110;112;117;116;58;32;105;110;116;32;114;111;119;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -58039,7 +58246,7 @@ lösung: vb-wald-loesung.visustruct -`,TI=` +`,AI=` 105;110;116;32;104;101;105;103;104;116;32;61;32;48; @@ -58058,7 +58265,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; -`,_I=` +`,PI=` 105;110;116;32;115;116;101;112;32;61;32;49; @@ -58074,7 +58281,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;105;103;104;116;58;32;34;32;43;32;104;101;105;103;104;116;32;43;32;34;32;99;109;34; -`,jI=` +`,DI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58090,7 +58297,7 @@ lösung: vb-wald-loesung.visustruct -`,CI=` +`,BI=` 105;110;112;117;116;58;32;105;110;116;32;119;105;100;116;104;32;34;87;105;100;116;104;34; @@ -58122,7 +58329,7 @@ lösung: vb-wald-loesung.visustruct -`,AI=` +`,OI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -58138,7 +58345,7 @@ lösung: vb-wald-loesung.visustruct -`,PI=` +`,MI=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -58153,7 +58360,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;117;101;115;46;108;101;110;103;116;104; -`,DI=` +`,ZI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58185,7 +58392,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,BI=` +`,LI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58217,7 +58424,7 @@ lösung: vb-wald-loesung.visustruct -`,OI=` +`,WI=` 105;110;116;32;105;32;61;32;49; @@ -58240,7 +58447,7 @@ lösung: vb-wald-loesung.visustruct -`,MI=` +`,EI=` 105;110;116;32;105;32;61;32;49; @@ -58263,7 +58470,7 @@ lösung: vb-wald-loesung.visustruct -`,ZI=` +`,NI=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;72;111;119;32;109;97;110;121;32;115;116;101;112;115;63;34; @@ -58292,7 +58499,7 @@ lösung: vb-wald-loesung.visustruct -`,LI=` +`,FI=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -58311,7 +58518,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;114;115;116;32;110;97;109;101;58;32;34;32;43;32;110;97;109;101;115;91;48;93; -`,WI=` +`,RI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -58337,7 +58544,7 @@ lösung: vb-wald-loesung.visustruct -`,EI=` +`,JI=` 105;110;116;91;93;32;110;117;109;98;101;114;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -58388,7 +58595,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,NI=` +`,GI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -58429,7 +58636,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,FI=` +`,HI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -58452,7 +58659,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,RI=` +`,VI=` 105;110;116;32;115;117;109;32;61;32;48; @@ -58482,7 +58689,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,JI=` +`,qI=` 105;110;112;117;116;58;32;105;110;116;32;108;101;110;103;116;104;32;34;76;101;110;103;116;104;63;34; @@ -58497,13 +58704,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;114;101;97;58;32;34;32;43;32;102; -`,GI=` +`,QI=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,HI=` +`,UI=` 115;104;111;119;71;114;101;101;116;105;110;103;40;41; @@ -58515,7 +58722,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;82;101;115;117;108;116;40;41; -`,VI=` +`,YI=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -58547,7 +58754,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,qI=` +`,$I=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -58579,7 +58786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;105;103;104;101;115;116;32;116;101;109;112;101;114;97;116;117;114;101;58;32;34;32;43;32;109;97;120; -`,QI=` +`,KI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -58601,7 +58808,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,UI=` +`,XI=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -58623,7 +58830,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,YI=` +`,ek=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -58645,7 +58852,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,$I=` +`,tk=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58657,7 +58864,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;104;101;32;115;113;117;97;114;101;32;105;115;32;34;32;43;32;113; -`,KI=` +`,nk=` 105;110;116;32;114;101;115;117;108;116;32;61;32;120;32;42;32;120; @@ -58666,7 +58873,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116; -`,XI=` +`,ik=` 115;104;111;119;84;105;116;108;101;40;41; @@ -58678,7 +58885,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;34;32;43;32;110;97;109;101; -`,ek=` +`,ak=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;32;116;111;32;116;104;101;32;113;117;105;122;33;34; @@ -58687,7 +58894,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;89;111;117;32;103;101;116;32;116;104;114;101;101;32;113;117;101;115;116;105;111;110;115;46;34; -`,tk=` +`,sk=` 115;104;111;119;83;117;109;40;51;44;32;52;41; @@ -58699,7 +58906,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;83;117;109;40;120;44;32;120;32;43;32;49;41; -`,nk=` +`,rk=` 105;110;116;32;115;117;109;32;61;32;97;32;43;32;98; @@ -58708,7 +58915,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109; -`,ik=` +`,ok=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -58731,7 +58938,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,ak=` +`,lk=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;32;118;97;108;117;101;34; @@ -58754,7 +58961,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;34; -`,sk=` +`,uk=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -58776,7 +58983,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,rk=` +`,mk=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -58798,7 +59005,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;58;32;34;32;43;32;116;111;116;97;108; -`,ok=` +`,ck=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -58807,7 +59014,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;112;111;105;110;116;115;91;49;93;91;48;93; -`,lk=` +`,dk=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -58816,7 +59023,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;108;97;121;101;114;32;50;44;32;114;111;117;110;100;32;49;58;32;34;32;43;32;80;111;105;110;116;115;91;49;93;91;48;93; -`,uk=` +`,hk=` 105;110;116;91;93;91;93;32;112;111;105;110;116;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -58845,7 +59052,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;58;32;34;32;43;32;115;117;109; -`,mk=` +`,gk=` 105;110;116;32;115;117;109;32;61;32;48; @@ -58868,7 +59075,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,ck=` +`,pk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58890,7 +59097,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,dk=` +`,fk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -58912,7 +59119,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,hk=` +`,bk=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;87;104;105;99;104;32;116;105;109;101;115;32;116;97;98;108;101;63;34; @@ -58944,7 +59151,7 @@ lösung: vb-wald-loesung.visustruct -`,gk=` +`,xk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;69;110;116;101;114;32;97;32;110;117;109;98;101;114;34; @@ -58966,7 +59173,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;99;116;111;114;105;97;108; -`,pk=` +`,vk=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; @@ -58998,13 +59205,13 @@ lösung: vb-wald-loesung.visustruct -`,fk=` +`,yk=` 83;116;114;105;110;103;32;108;101;116;116;101;114;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;101;116;116;101;114;46;116;120;116;34;41;41; -`,bk=` +`,wk=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -59016,7 +59223,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,xk=` +`,zk=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;32;34;70;105;114;115;116;32;110;97;109;101;63;34; @@ -59028,7 +59235,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,vk=` +`,Ik=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -59037,7 +59244,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; -`,yk=` +`,kk=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -59046,7 +59253,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;115;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;116;101;114;115;34; -`,wk=` +`,Sk=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;105;110;112;117;116;32;34;80;97;115;115;119;111;114;100;63;34; @@ -59065,7 +59272,7 @@ lösung: vb-wald-loesung.visustruct -`,zk=` +`,Tk=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -59094,7 +59301,7 @@ lösung: vb-wald-loesung.visustruct -`,Ik=` +`,_k=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;98;101;114;32;34;83;116;97;114;116;32;118;97;108;117;101;63;34; @@ -59114,7 +59321,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;34; -`,kk=` +`,jk=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -59147,7 +59354,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,Sk=` +`,Ck=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -59180,7 +59387,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;114;105;101;115;58;32;34;32;43;32;116;114;105;101;115; -`,Tk=` +`,Ak=` 105;110;116;32;115;117;109;32;61;32;48; @@ -59222,7 +59429,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;117;109; -`,_k=` +`,Pk=` 105;110;112;117;116;58;32;105;110;116;32;97;103;101;32;34;72;111;119;32;111;108;100;32;97;114;101;32;121;111;117;63;34; @@ -59244,7 +59451,7 @@ lösung: vb-wald-loesung.visustruct -`,jk=` +`,Dk=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;32;34;85;112;32;116;111;32;119;104;105;99;104;32;110;117;109;98;101;114;63;34; @@ -59260,7 +59467,7 @@ lösung: vb-wald-loesung.visustruct -`,Ck=` +`,Bk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -59299,7 +59506,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Ak=` +`,Ok=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -59338,7 +59545,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Pk=` +`,Mk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -59373,7 +59580,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Dk=` +`,Zk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -59408,7 +59615,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Bk=` +`,Lk=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -59443,7 +59650,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;117;110;116;58;32;34;32;43;32;99;111;117;110;116; -`,Ok=` +`,Wk=` 111;117;116;112;117;116;58;32;34;71;111;111;100;32;109;111;114;110;105;110;103;34; @@ -59452,13 +59659,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;100;97;121;32;119;101;32;108;101;97;114;110;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;46;34; -`,Mk=` +`,Ek=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;87;111;114;108;100;34; -`,Zk=` +`,Nk=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;34; @@ -59467,7 +59674,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;32;97;109;32;108;101;97;114;110;105;110;103;32;115;116;114;117;99;116;117;114;101;32;99;104;97;114;116;115;34; -`,Lk=` +`,Fk=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -59508,7 +59715,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;108;105;110;101;115;32;115;97;118;101;100;34; -`,Wk=` +`,Rk=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -59517,7 +59724,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;111;117;116;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;115;104;111;112;112;105;110;103;45;110;101;119;46;116;120;116;34;41; -`,Ek=` +`,Jk=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; @@ -59543,13 +59750,13 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,Nk=` +`,Gk=` 83;99;97;110;110;101;114;32;102;105;108;101;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;115;104;111;112;112;105;110;103;46;116;120;116;34;41;41; -`,Fk=` +`,Hk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -59588,7 +59795,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;111;120;58;32;34;32;43;32;99;111;117;110;116; -`,Rk=` +`,Vk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -59597,7 +59804,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Jk=` +`,qk=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -59632,7 +59839,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;110;103;101;115;116;32;101;110;116;114;121;58;32;34;32;43;32;108;111;110;103;101;115;116; -`,Gk=` +`,Qk=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;111;111;107;46;116;120;116;34;41;41; @@ -59641,7 +59848,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;101;115;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,Hk=` +`,Uk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -59695,7 +59902,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;32;103;114;97;100;101;32;105;110;32;69;110;103;108;105;115;104;58;32;34;32;43;32;98;101;115;116;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;71;114;97;100;101;32;43;32;34;41;34; -`,Vk=` +`,Yk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -59704,7 +59911,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,qk=` +`,$k=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -59745,7 +59952,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;116;104;115;32;97;118;101;114;97;103;101;58;32;34;32;43;32;115;117;109;32;47;32;99;111;117;110;116; -`,Qk=` +`,Kk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;99;108;97;115;115;46;99;115;118;34;41;41; @@ -59754,7 +59961,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Uk=` +`,Xk=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -59793,7 +60000,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,Yk=` +`,e7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -59802,7 +60009,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;101;32;61;32;114;101;97;100;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,$k=` +`,t7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -59852,7 +60059,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;105;101;115;32;115;97;118;101;100;34; -`,Kk=` +`,n7=` 83;116;114;105;110;103;91;93;32;110;97;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;111;120;34;125; @@ -59870,7 +60077,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,Xk=` +`,i7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -59923,7 +60130,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;101;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;108;115;32;115;97;118;101;100;34; -`,e7=` +`,a7=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -59944,7 +60151,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,t7=` +`,s7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -59988,7 +60195,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116;32;43;32;34;32;115;101;110;116;101;110;99;101;115;32;115;97;118;101;100;34; -`,n7=` +`,r7=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;114;101;97;100;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;108;115;46;99;115;118;34;41;41; @@ -60009,7 +60216,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,i7=` +`,o7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -60021,7 +60228,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,a7=` +`,l7=` 105;110;112;117;116;58;32;105;110;116;32;99;111;117;110;116;32;34;72;111;119;32;109;97;110;121;32;116;105;99;107;101;116;115;63;34; @@ -60033,7 +60240,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;99;111;117;110;116;32;42;32;56;46;53; -`,s7=` +`,u7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -60057,7 +60264,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,r7=` +`,m7=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;70;105;114;115;116;32;110;117;109;98;101;114;34; @@ -60078,7 +60285,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,o7=` +`,c7=` 105;110;116;32;97;32;61;32;51; @@ -60102,7 +60309,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,l7=` +`,d7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -60161,7 +60368,7 @@ lösung: vb-wald-loesung.visustruct -`,u7=` +`,h7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -60220,7 +60427,7 @@ lösung: vb-wald-loesung.visustruct -`,m7=` +`,g7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -60294,7 +60501,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,c7=` +`,p7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -60343,7 +60550,7 @@ lösung: vb-wald-loesung.visustruct -`,d7=` +`,f7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -60392,7 +60599,7 @@ lösung: vb-wald-loesung.visustruct -`,h7=` +`,b7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -60450,7 +60657,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;105;115;111;110;115;58;32;34;32;43;32;99;111;109;112;97;114;105;115;111;110;115; -`,g7=` +`,x7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -60469,7 +60676,7 @@ lösung: vb-wald-loesung.visustruct -`,p7=` +`,v7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -60488,7 +60695,7 @@ lösung: vb-wald-loesung.visustruct -`,f7=` +`,y7=` 105;110;116;32;105;32;61;32;48; @@ -60501,7 +60708,7 @@ lösung: vb-wald-loesung.visustruct -`,b7=` +`,w7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;53; @@ -60525,7 +60732,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;102;116;101;114;58;32;34;32;43;32;114;111;119;91;48;93;32;43;32;34;44;32;34;32;43;32;114;111;119;91;49;93; -`,x7=` +`,z7=` 105;110;116;32;105;32;61;32;48; @@ -60538,7 +60745,7 @@ lösung: vb-wald-loesung.visustruct -`,v7=` +`,I7=` 120;32;61;32;120;32;42;32;50; @@ -60547,7 +60754,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;110;32;116;104;101;32;115;117;98;112;114;111;103;114;97;109;58;32;120;32;61;32;34;32;43;32;120; -`,y7=` +`,k7=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -60556,7 +60763,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,w7=` +`,S7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -60582,7 +60789,7 @@ lösung: vb-wald-loesung.visustruct -`,z7=` +`,T7=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -60609,7 +60816,7 @@ lösung: vb-wald-loesung.visustruct -`,I7=` +`,_7=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -60627,7 +60834,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,k7=` +`,j7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -60657,7 +60864,7 @@ lösung: vb-wald-loesung.visustruct -`,S7=` +`,C7=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;101;108;108;111;33;34;41; @@ -60669,7 +60876,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;32;97;109;32;86;105;115;117;66;111;116;34;41; -`,T7=` +`,A7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -60721,7 +60928,7 @@ lösung: vb-wald-loesung.visustruct -`,_7=` +`,P7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -60732,7 +60939,7 @@ lösung: vb-wald-loesung.visustruct -`,j7=` +`,D7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -60743,7 +60950,7 @@ lösung: vb-wald-loesung.visustruct -`,C7=` +`,B7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -60754,7 +60961,7 @@ lösung: vb-wald-loesung.visustruct -`,A7=` +`,O7=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;86;105;115;117;66;111;116;34; @@ -60773,7 +60980,7 @@ lösung: vb-wald-loesung.visustruct -`,P7=` +`,M7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -60787,7 +60994,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,D7=` +`,Z7=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;101;100;34;41; @@ -60799,7 +61006,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;101;101;110;34;41; -`,B7=` +`,L7=` 105;110;116;32;105;32;61;32;48; @@ -60815,7 +61022,7 @@ lösung: vb-wald-loesung.visustruct -`,O7=` +`,W7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -60843,7 +61050,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;80;97;114;107;101;100;33;34;41; -`,M7=` +`,E7=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -60861,7 +61068,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,Z7=` +`,N7=` 83;116;114;105;110;103;91;93;32;99;111;108;111;117;114;115;32;61;32;123;34;114;101;100;34;44;32;34;121;101;108;108;111;119;34;44;32;34;103;114;101;101;110;34;44;32;34;98;108;117;101;34;44;32;34;112;117;114;112;108;101;34;125; @@ -60877,7 +61084,7 @@ lösung: vb-wald-loesung.visustruct -`,L7=` +`,F7=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -60903,7 +61110,7 @@ lösung: vb-wald-loesung.visustruct -`,W7=` +`,R7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -60919,7 +61126,7 @@ lösung: vb-wald-loesung.visustruct -`,E7=` +`,J7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -60930,7 +61137,7 @@ lösung: vb-wald-loesung.visustruct -`,N7=` +`,G7=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -60950,7 +61157,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;101;112;115;58;32;34;32;43;32;83;116;101;112;115;41; -`,F7=` +`,H7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -60964,7 +61171,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;41; -`,R7=` +`,V7=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -60994,7 +61201,7 @@ lösung: vb-wald-loesung.visustruct -`,J7=` +`,q7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -61008,7 +61215,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;116;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,G7=` +`,Q7=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -61032,7 +61239,7 @@ lösung: vb-wald-loesung.visustruct -`,H7=` +`,U7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -61058,7 +61265,7 @@ lösung: vb-wald-loesung.visustruct -`,V7=` +`,Y7=` 105;110;116;32;105;32;61;32;48; @@ -61091,7 +61298,7 @@ lösung: vb-wald-loesung.visustruct -`,q7=` +`,$7=` @@ -61118,7 +61325,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;83;116;111;112;112;101;100;41; -`,Q7=` +`,K7=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -61137,7 +61344,7 @@ lösung: vb-wald-loesung.visustruct -`,U7=` +`,X7=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -61153,7 +61360,7 @@ lösung: vb-wald-loesung.visustruct -`,Y7=` +`,e8=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -61169,7 +61376,7 @@ lösung: vb-wald-loesung.visustruct -`,$7=` +`,t8=` 105;110;116;32;105;32;61;32;48; @@ -61191,7 +61398,7 @@ lösung: vb-wald-loesung.visustruct -`,K7=` +`,n8=` 105;110;116;32;105;32;61;32;48; @@ -61210,7 +61417,7 @@ lösung: vb-wald-loesung.visustruct -`,X7=` +`,i8=` 105;110;116;32;105;32;61;32;49; @@ -61223,7 +61430,7 @@ lösung: vb-wald-loesung.visustruct -`,e8=` +`,a8=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -61261,7 +61468,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;118;101;114;97;103;101;58;32;34;32;43;32;97;118;101;114;97;103;101;41; -`,t8=` +`,s8=` 105;110;116;32;105;32;61;32;51; @@ -61280,7 +61487,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,n8=` +`,r8=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -61289,7 +61496,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;84;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,i8=` +`,o8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -61333,7 +61540,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;83;116;111;112;40;41; -`,a8=` +`,l8=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -61352,7 +61559,7 @@ lösung: vb-wald-loesung.visustruct -`,s8=` +`,u8=` 105;110;116;32;105;32;61;32;48; @@ -61374,7 +61581,7 @@ lösung: vb-wald-loesung.visustruct -`,r8=` +`,m8=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -61391,7 +61598,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,o8=` +`,c8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -61409,7 +61616,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,l8=` +`,d8=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -61445,7 +61652,7 @@ lösung: vb-wald-loesung.visustruct -`,u8=` +`,h8=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;66;97;116;116;101;114;121;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -61464,7 +61671,7 @@ lösung: vb-wald-loesung.visustruct -`,m8=` +`,g8=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;117;101;34;41; @@ -61488,7 +61695,7 @@ lösung: vb-wald-loesung.visustruct -`,c8=` +`,p8=` 105;110;116;32;105;32;61;32;48; @@ -61510,7 +61717,7 @@ lösung: vb-wald-loesung.visustruct -`,d8=` +`,f8=` 105;110;116;32;105;32;61;32;51; @@ -61529,7 +61736,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;111;33;34;41; -`,h8=` +`,b8=` 105;110;116;32;105;32;61;32;49; @@ -61542,7 +61749,7 @@ lösung: vb-wald-loesung.visustruct -`,g8=` +`,x8=` 105;110;116;32;105;32;61;32;48; @@ -61575,7 +61782,7 @@ lösung: vb-wald-loesung.visustruct -`,p8=` +`,v8=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -61591,7 +61798,7 @@ lösung: vb-wald-loesung.visustruct -`,f8=` +`,y8=` 105;110;116;32;105;32;61;32;48; @@ -61610,7 +61817,7 @@ lösung: vb-wald-loesung.visustruct -`,b8=` +`,w8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -61654,7 +61861,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,x8=` +`,z8=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -61673,7 +61880,7 @@ lösung: vb-wald-loesung.visustruct -`,v8=` +`,I8=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -61703,7 +61910,7 @@ lösung: vb-wald-loesung.visustruct -`,y8=` +`,k8=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -61731,7 +61938,7 @@ lösung: vb-wald-loesung.visustruct -`,w8=` +`,S8=` 105;110;116;32;105;32;61;32;48; @@ -61753,7 +61960,7 @@ lösung: vb-wald-loesung.visustruct -`,z8=` +`,T8=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -61773,7 +61980,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;101;112;115;58;32;34;32;43;32;115;116;101;112;115;41; -`,I8=` +`,_8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -61787,7 +61994,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,k8=` +`,j8=` @@ -61814,7 +62021,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;111;112;112;101;100;34;41; -`,S8=` +`,C8=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;101;108;108;111;32;99;108;97;115;115;34; @@ -61823,7 +62030,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,T8=` +`,A8=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -61837,7 +62044,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,_8=` +`,P8=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -61853,7 +62060,7 @@ lösung: vb-wald-loesung.visustruct -`,j8=` +`,D8=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -61867,7 +62074,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,C8=` +`,B8=` 105;110;116;32;105;32;61;32;48; @@ -61902,7 +62109,7 @@ lösung: vb-wald-loesung.visustruct -`,A8=` +`,O8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -61928,7 +62135,7 @@ lösung: vb-wald-loesung.visustruct -`,P8=` +`,M8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -61940,7 +62147,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,D8=` +`,Z8=` 105;110;116;32;115;105;100;101;32;61;32;50;48; @@ -61962,7 +62169,7 @@ lösung: vb-wald-loesung.visustruct -`,B8=` +`,L8=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -61996,7 +62203,7 @@ lösung: vb-wald-loesung.visustruct -`,O8=` +`,W8=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;76;117;100;119;105;103;34; @@ -62015,7 +62222,7 @@ lösung: vb-wald-loesung.visustruct -`,M8=` +`,E8=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;101;100;34;41; @@ -62059,7 +62266,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Z8=` +`,N8=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -62085,7 +62292,7 @@ lösung: vb-wald-loesung.visustruct -`,L8=` +`,F8=` 105;110;116;91;93;32;116;111;110;101;115;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -62101,7 +62308,7 @@ lösung: vb-wald-loesung.visustruct -`,W8=` +`,R8=` 105;110;116;91;93;32;118;97;108;117;101;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -62139,7 +62346,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;118;101;114;97;103;101;58;32;34;32;43;32;97;118;101;114;97;103;101;41; -`,E8=` +`,J8=` 105;110;116;32;105;32;61;32;48; @@ -62205,7 +62412,7 @@ lösung: vb-wald-loesung.visustruct -`,N8=` +`,G8=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -62221,7 +62428,7 @@ lösung: vb-wald-loesung.visustruct -`,F8=` +`,H8=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -62238,7 +62445,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,R8=` +`,V8=` @@ -62265,7 +62472,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,J8=` +`,q8=` 109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41;32;124;124;32;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -62281,7 +62488,7 @@ lösung: vb-wald-loesung.visustruct -`,G8=` +`,Q8=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -62356,7 +62563,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,H8=` +`,U8=` 115;113;117;97;114;101;40;51;48;41; @@ -62365,7 +62572,7 @@ lösung: vb-wald-loesung.visustruct 115;113;117;97;114;101;40;53;48;41; -`,V8=` +`,Y8=` 105;110;116;32;105;32;61;32;48; @@ -62420,7 +62627,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,q8=` +`,$8=` 105;110;116;32;105;32;61;32;48; @@ -62436,7 +62643,7 @@ lösung: vb-wald-loesung.visustruct -`,Q8=` +`,K8=` 105;110;116;32;105;32;61;32;48; @@ -62459,7 +62666,7 @@ lösung: vb-wald-loesung.visustruct -`,U8=` +`,X8=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -62473,7 +62680,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,Y8=` +`,eS=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -62489,7 +62696,7 @@ lösung: vb-wald-loesung.visustruct -`,$8=` +`,tS=` 105;110;116;32;105;32;61;32;48; @@ -62541,7 +62748,7 @@ lösung: vb-wald-loesung.visustruct -`,K8=` +`,nS=` 105;110;116;32;115;105;100;101;32;61;32;50;48; @@ -62563,7 +62770,7 @@ lösung: vb-wald-loesung.visustruct -`,X8=` +`,iS=` 105;110;116;32;115;105;100;101;32;61;32;50;48; @@ -62585,7 +62792,7 @@ lösung: vb-wald-loesung.visustruct -`,eS=` +`,aS=` 105;110;116;32;105;32;61;32;49; @@ -62601,7 +62808,7 @@ lösung: vb-wald-loesung.visustruct -`,tS=` +`,sS=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -62615,7 +62822,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,nS=` +`,rS=` 105;110;116;32;114;117;110;100;101;32;61;32;49; @@ -62649,7 +62856,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;53;48;41; -`,iS=` +`,oS=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -62683,7 +62890,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,aS=` +`,lS=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -62701,7 +62908,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,sS=` +`,uS=` 105;110;116;32;105;32;61;32;48; @@ -62723,7 +62930,7 @@ lösung: vb-wald-loesung.visustruct -`,rS=` +`,mS=` 105;110;116;32;108;101;102;116;32;61;32;57;57; @@ -62755,7 +62962,7 @@ lösung: vb-wald-loesung.visustruct -`,oS=` +`,cS=` 105;110;116;32;105;32;61;32;48; @@ -62771,7 +62978,7 @@ lösung: vb-wald-loesung.visustruct -`,lS=` +`,dS=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -62787,7 +62994,7 @@ lösung: vb-wald-loesung.visustruct -`,uS=` +`,hS=` 105;110;116;32;115;105;100;101;32;61;32;51;48; @@ -62806,7 +63013,7 @@ lösung: vb-wald-loesung.visustruct -`,mS=` +`,gS=` 105;110;116;32;105;32;61;32;48; @@ -62839,7 +63046,7 @@ lösung: vb-wald-loesung.visustruct -`,cS=` +`,pS=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -62878,7 +63085,7 @@ lösung: vb-wald-loesung.visustruct -`,dS=` +`,fS=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -62894,7 +63101,7 @@ lösung: vb-wald-loesung.visustruct -`,hS=` +`,bS=` 105;110;116;32;100;105;115;116;97;110;99;101;32;61;32;99;101;110;116;105;109;101;116;114;101;115;40;51;41; @@ -62906,13 +63113,13 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;68;105;115;116;97;110;99;101;58;32;34;32;43;32;100;105;115;116;97;110;99;101;32;43;32;34;32;99;109;34;41; -`,gS=` +`,xS=` 114;101;116;117;114;110;32;114;111;116;97;116;105;111;110;115;32;42;32;50;48; -`,pS=` +`,vS=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -62932,7 +63139,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,fS=` +`,yS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;105;114;115;116;78;97;109;101;32;34;70;105;114;115;116;32;110;97;109;101;34; @@ -62944,7 +63151,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;105;114;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;108;97;115;116;78;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,bS=` +`,wS=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -62983,7 +63190,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,xS=` +`,zS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -63005,7 +63212,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,vS=` +`,IS=` 83;116;114;105;110;103;32;108;105;110;101;32;61;32;34;76;117;100;119;105;103;59;98;105;108;108;121;32;103;111;97;116;59;55;34; @@ -63024,7 +63231,7 @@ lösung: vb-wald-loesung.visustruct -`,yS=` +`,kS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;110;116;101;110;99;101;32;34;69;110;116;101;114;32;97;32;115;101;110;116;101;110;99;101;34; @@ -63036,7 +63243,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;114;100;115;58;32;34;32;43;32;119;111;114;100;115;46;108;101;110;103;116;104; -`,wS=` +`,SS=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;100;32;34;69;110;116;101;114;32;97;32;119;111;114;100;34; @@ -63068,7 +63275,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;117;109;98;101;114;32;111;102;32;101;58;32;34;32;43;32;99;111;117;110;116; -`,zS=` +`,TS=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;66;105;108;108;121;103;111;97;116;34; @@ -63092,7 +63299,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;100;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,IS=` +`,_S=` 105;110;116;91;93;91;93;32;116;97;98;101;108;108;101;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -63124,7 +63331,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;108;101;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,kS=` +`,jS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -63172,7 +63379,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;114;101;105;58;32;34;32;43;32;102;114;101;105; -`,SS=` +`,CS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -63187,7 +63394,7 @@ lösung: vb-wald-loesung.visustruct 115;105;116;122;101;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,TS=` +`,AS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -63221,7 +63428,7 @@ lösung: vb-wald-loesung.visustruct -`,_S=` +`,PS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -63239,7 +63446,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;112;108;97;116;122;32;34;80;108;97;116;122;34; -`,jS=` +`,DS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -63287,7 +63494,7 @@ lösung: vb-wald-loesung.visustruct -`,CS=` +`,BS=` 98;111;111;108;101;97;110;91;93;91;93;32;115;105;116;122;101;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -63311,7 +63518,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;105;104;101;32;49;44;32;80;108;97;116;122;32;50;32;118;101;114;107;97;117;102;116;63;32;34;32;43;32;115;105;116;122;101;91;49;93;91;50;93; -`,AS=` +`,OS=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -63326,7 +63533,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; -`,PS=` +`,MS=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -63341,7 +63548,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;103;101;98;110;105;115;58;32;34;32;43;32;101;114;103;101;98;110;105;115; -`,DS=` +`,ZS=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -63356,7 +63563,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,BS=` +`,LS=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -63371,7 +63578,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;32;43;32;34;32;115;34; -`,OS=` +`,WS=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -63383,7 +63590,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;97;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34; -`,MS=` +`,ES=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -63395,7 +63602,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;97;109;101;32;43;32;34;32;105;115;116;32;34;32;43;32;65;108;116;101;114;32;43;32;34;32;74;97;104;114;101;32;97;108;116;46;34;41; -`,ZS=` +`,NS=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -63413,7 +63620,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,LS=` +`,FS=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -63428,7 +63635,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,WS=` +`,RS=` 105;110;116;32;122;97;104;108;32;61;32;50; @@ -63443,7 +63650,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,ES=` +`,JS=` 111;117;116;112;117;116;58;32;122;97;104;108; @@ -63458,7 +63665,7 @@ lösung: vb-wald-loesung.visustruct 122;97;104;108;32;61;32;122;97;104;108;32;43;32;51; -`,NS=` +`,GS=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -63482,7 +63689,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,FS=` +`,HS=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -63497,7 +63704,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;99;104;116;115;58;32;34;32;43;32;114;101;99;104;116;115; -`,RS=` +`,VS=` 105;110;116;32;97;32;61;32;53; @@ -63521,7 +63728,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,JS=` +`,qS=` 105;110;116;32;97;108;116;101;114;32;61;32;49;52; @@ -63539,7 +63746,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;114;246;223;101;58;32;34;32;43;32;103;114;111;101;115;115;101;32;43;32;34;32;109;34; -`,GS=` +`,QS=` 105;110;116;32;109;105;110;117;116;101;110;32;61;32;49;51;53; @@ -63554,7 +63761,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;117;110;100;101;110;32;43;32;34;32;83;116;117;110;100;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;77;105;110;117;116;101;110;34; -`,HS=` +`,US=` 105;110;116;32;97;110;122;97;104;108;32;61;32;51; @@ -63569,7 +63776,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116;80;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,VS=` +`,YS=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -63584,7 +63791,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;220;98;114;105;103;58;32;34;32;43;32;103;117;116;104;97;98;101;110; -`,qS=` +`,$S=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -63599,7 +63806,7 @@ lösung: vb-wald-loesung.visustruct 103;117;116;104;97;98;101;110;32;61;32;103;117;116;104;97;98;101;110;32;45;32;112;114;101;105;115; -`,QS=` +`,KS=` 105;110;116;32;112;114;101;105;115;32;61;32;57; @@ -63614,7 +63821,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,US=` +`,XS=` 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; @@ -63629,7 +63836,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;80;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; -`,YS=` +`,eT=` 105;110;116;32;115;116;117;101;99;107;101;32;61;32;56; @@ -63644,7 +63851,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;101;100;101;114;32;98;101;107;111;109;109;116;32;34;32;43;32;112;114;111;112;101;114;115;111;110;32;43;32;34;32;83;116;252;99;107;101;46;34; -`,$S=` +`,tT=` 105;110;116;32;108;97;101;110;103;101;32;61;32;55; @@ -63665,7 +63872,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;85;109;102;97;110;103;58;32;34;32;43;32;117;109;102;97;110;103; -`,KS=` +`,nT=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -63680,7 +63887,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,XS=` +`,iT=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -63689,7 +63896,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;101;110;32;43;32;34;32;77;105;110;117;116;101;110;32;117;110;100;32;34;32;43;32;114;101;115;116;32;43;32;34;32;83;101;107;117;110;100;101;110;34; -`,eT=` +`,aT=` 105;110;116;32;108;97;101;110;103;101;32;61;32;53; @@ -63704,7 +63911,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;108;97;101;99;104;101; -`,tT=` +`,sT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;97;109;101;32;34;87;105;101;32;104;101;105;223;116;32;100;117;63;34; @@ -63713,7 +63920,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101;32;43;32;34;33;34; -`,nT=` +`,rT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -63728,7 +63935,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,iT=` +`,oT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -63740,7 +63947,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,aT=` +`,lT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -63752,7 +63959,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;97;32;43;32;98; -`,sT=` +`,uT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -63761,7 +63968,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;97;108;116;101;114;32;43;32;49;41; -`,rT=` +`,mT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -63770,7 +63977,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;228;99;104;115;116;101;115;32;74;97;104;114;32;98;105;115;116;32;100;117;32;34;32;43;32;40;65;108;116;101;114;32;43;32;49;41; -`,oT=` +`,cT=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;101;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -63782,7 +63989,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;115;105;110;100;32;101;116;119;97;32;34;32;43;32;116;97;103;101;32;43;32;34;32;84;97;103;101;46;34; -`,lT=` +`,dT=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -63797,7 +64004,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108; -`,uT=` +`,hT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -63818,7 +64025,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;107;116;58;32;34;32;43;32;112;114;111;100;117;107;116; -`,mT=` +`,gT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -63837,7 +64044,7 @@ lösung: vb-wald-loesung.visustruct -`,cT=` +`,pT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -63859,7 +64066,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,dT=` +`,fT=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -63878,7 +64085,7 @@ lösung: vb-wald-loesung.visustruct -`,hT=` +`,bT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -63896,7 +64103,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,gT=` +`,xT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -63914,7 +64121,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,pT=` +`,vT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; @@ -63929,7 +64136,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,fT=` +`,yT=` 105;110;116;32;112;117;110;107;116;101;32;61;32;49;48; @@ -63944,7 +64151,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;117;110;107;116;101;58;32;34;32;43;32;112;117;110;107;116;101; -`,bT=` +`,wT=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -63962,7 +64169,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,xT=` +`,zT=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -63980,7 +64187,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,vT=` +`,IT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -64002,7 +64209,7 @@ lösung: vb-wald-loesung.visustruct -`,yT=` +`,kT=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;105;115;32;34;80;114;101;105;115;32;105;110;32;69;117;114;111;63;34; @@ -64024,7 +64231,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;90;117;32;122;97;104;108;101;110;58;32;34;32;43;32;112;114;101;105;115;32;43;32;34;32;69;117;114;111;34; -`,wT=` +`,ST=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -64043,7 +64250,7 @@ lösung: vb-wald-loesung.visustruct -`,zT=` +`,TT=` 105;110;112;117;116;58;32;105;110;116;32;112;117;110;107;116;101;32;34;87;105;101;32;118;105;101;108;101;32;80;117;110;107;116;101;63;34; @@ -64062,7 +64269,7 @@ lösung: vb-wald-loesung.visustruct -`,IT=` +`,_T=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -64081,7 +64288,7 @@ lösung: vb-wald-loesung.visustruct -`,kT=` +`,jT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -64100,7 +64307,7 @@ lösung: vb-wald-loesung.visustruct -`,ST=` +`,CT=` 105;110;116;32;97;108;116;101;114;32;61;32;49;53; @@ -64119,7 +64326,7 @@ lösung: vb-wald-loesung.visustruct -`,TT=` +`,AT=` 105;110;116;32;97;108;116;101;114;32;61;32;49;53; @@ -64138,7 +64345,7 @@ lösung: vb-wald-loesung.visustruct -`,_T=` +`,PT=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -64157,7 +64364,7 @@ lösung: vb-wald-loesung.visustruct -`,jT=` +`,DT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -64176,7 +64383,7 @@ lösung: vb-wald-loesung.visustruct -`,CT=` +`,BT=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;32;34;74;97;104;114;63;34; @@ -64195,7 +64402,7 @@ lösung: vb-wald-loesung.visustruct -`,AT=` +`,OT=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -64214,7 +64421,7 @@ lösung: vb-wald-loesung.visustruct -`,PT=` +`,MT=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;97;114;98;101;32;34;87;101;108;99;104;101;32;70;97;114;98;101;32;104;97;116;32;100;105;101;32;65;109;112;101;108;63;34; @@ -64243,7 +64450,7 @@ lösung: vb-wald-loesung.visustruct -`,DT=` +`,ZT=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -64272,7 +64479,7 @@ lösung: vb-wald-loesung.visustruct -`,BT=` +`,LT=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -64291,7 +64498,7 @@ lösung: vb-wald-loesung.visustruct -`,OT=` +`,WT=` 105;110;112;117;116;58;32;105;110;116;32;116;97;103;32;34;87;101;108;99;104;101;114;32;84;97;103;32;40;49;32;98;105;115;32;55;41;63;34; @@ -64310,7 +64517,7 @@ lösung: vb-wald-loesung.visustruct -`,MT=` +`,ET=` 105;110;116;32;116;97;103;32;61;32;55; @@ -64329,7 +64536,7 @@ lösung: vb-wald-loesung.visustruct -`,ZT=` +`,NT=` 105;110;116;32;116;97;103;32;61;32;55; @@ -64348,7 +64555,7 @@ lösung: vb-wald-loesung.visustruct -`,LT=` +`,FT=` 105;110;112;117;116;58;32;105;110;116;32;115;116;117;110;100;101;32;34;87;105;101;32;115;112;228;116;32;105;115;116;32;101;115;32;40;110;117;114;32;100;105;101;32;83;116;117;110;100;101;41;63;34; @@ -64367,7 +64574,7 @@ lösung: vb-wald-loesung.visustruct -`,WT=` +`,RT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;87;101;108;99;104;101;32;78;111;116;101;63;34; @@ -64411,7 +64618,7 @@ lösung: vb-wald-loesung.visustruct -`,ET=` +`,JT=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -64458,7 +64665,7 @@ lösung: vb-wald-loesung.visustruct -`,NT=` +`,GT=` 105;110;112;117;116;58;32;105;110;116;32;119;97;104;108;32;34;49;32;87;97;115;115;101;114;44;32;50;32;83;97;102;116;44;32;51;32;75;97;107;97;111;34; @@ -64497,7 +64704,7 @@ lösung: vb-wald-loesung.visustruct -`,FT=` +`,HT=` 84;97;115;115;101;32;97;117;102;32;100;101;110;32;84;105;115;99;104;32;115;116;101;108;108;101;110; @@ -64527,7 +64734,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;116;114;105;110;107;101;110; -`,RT=` +`,VT=` 65;117;102;115;116;101;104;101;110; @@ -64542,7 +64749,7 @@ lösung: vb-wald-loesung.visustruct 70;114;252;104;115;116;252;99;107;101;110; -`,JT=` +`,qT=` 87;97;115;115;101;114;32;105;110;32;100;101;110;32;87;97;115;115;101;114;107;111;99;104;101;114;32;102;252;108;108;101;110; @@ -64563,7 +64770,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;98;101;117;116;101;108;32;104;101;114;97;117;115;110;101;104;109;101;110; -`,GT=` +`,QT=` 82;101;103;110;101;116;32;101;115;63; @@ -64582,7 +64789,7 @@ lösung: vb-wald-loesung.visustruct 76;111;115;103;101;104;101;110; -`,HT=` +`,UT=` 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; @@ -64596,7 +64803,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;97;98;114;228;117;109;101;110; -`,VT=` +`,YT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;32;122;228;104;108;101;110;63;34; @@ -64616,7 +64823,7 @@ lösung: vb-wald-loesung.visustruct -`,qT=` +`,$T=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -64636,7 +64843,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,QT=` +`,KT=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -64653,7 +64860,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,UT=` +`,XT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;107;117;108;116;228;116;32;118;111;110;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -64679,7 +64886,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;107;117;108;116;97;101;116; -`,YT=` +`,e_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -64714,7 +64921,7 @@ lösung: vb-wald-loesung.visustruct -`,$T=` +`,t_=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;63;34; @@ -64749,7 +64956,7 @@ lösung: vb-wald-loesung.visustruct -`,KT=` +`,n_=` 105;110;116;32;110;111;116;101;32;61;32;50; @@ -64773,7 +64980,7 @@ lösung: vb-wald-loesung.visustruct -`,XT=` +`,i_=` 105;110;116;32;110;111;116;101;32;61;32;50; @@ -64797,7 +65004,7 @@ lösung: vb-wald-loesung.visustruct -`,e_=` +`,a_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -64826,7 +65033,7 @@ lösung: vb-wald-loesung.visustruct -`,t_=` +`,s_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;34; @@ -64849,7 +65056,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;114;105;116;116;101; -`,n_=` +`,r_=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -64866,7 +65073,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;110;107;101;33;34; -`,i_=` +`,o_=` 105;110;116;32;105;32;61;32;49;48; @@ -64883,7 +65090,7 @@ lösung: vb-wald-loesung.visustruct -`,a_=` +`,l_=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -64909,7 +65116,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,s_=` +`,u_=` 105;110;112;117;116;58;32;105;110;116;32;122;105;101;108;32;34;83;112;97;114;122;105;101;108;63;34; @@ -64935,7 +65142,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;111;99;104;101;110;58;32;34;32;43;32;119;111;99;104;101;110; -`,r_=` +`,m_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -64955,7 +65162,7 @@ lösung: vb-wald-loesung.visustruct -`,o_=` +`,c_=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -64975,7 +65182,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,l_=` +`,d_=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -64995,7 +65202,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,u_=` +`,h_=` 105;110;116;32;110;111;116;101;32;61;32;48; @@ -65012,7 +65219,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;105;110;101;32;78;111;116;101;58;32;34;32;43;32;110;111;116;101; -`,m_=` +`,g_=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -65035,7 +65242,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,c_=` +`,p_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;122;97;104;108;34; @@ -65054,7 +65261,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,d_=` +`,f_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -65073,7 +65280,7 @@ lösung: vb-wald-loesung.visustruct -`,h_=` +`,b_=` 105;110;116;32;105;32;61;32;49; @@ -65086,7 +65293,7 @@ lösung: vb-wald-loesung.visustruct -`,g_=` +`,x_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -65103,7 +65310,7 @@ lösung: vb-wald-loesung.visustruct -`,p_=` +`,v_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -65120,7 +65327,7 @@ lösung: vb-wald-loesung.visustruct -`,f_=` +`,y_=` 105;110;116;32;122;97;104;108;32;61;32;49; @@ -65140,7 +65347,7 @@ lösung: vb-wald-loesung.visustruct -`,b_=` +`,w_=` 105;110;116;32;122;97;104;108;32;61;32;49; @@ -65160,7 +65367,7 @@ lösung: vb-wald-loesung.visustruct -`,x_=` +`,z_=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -65177,7 +65384,7 @@ lösung: vb-wald-loesung.visustruct -`,v_=` +`,I_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -65199,7 +65406,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,y_=` +`,k_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;90;101;105;108;101;110;63;34; @@ -65228,7 +65435,7 @@ lösung: vb-wald-loesung.visustruct -`,w_=` +`,S_=` 105;110;116;32;97;110;122;97;104;108;32;61;32;48; @@ -65260,7 +65467,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,z_=` +`,T_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -65292,7 +65499,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,I_=` +`,__=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -65308,7 +65515,7 @@ lösung: vb-wald-loesung.visustruct -`,k_=` +`,j_=` 105;110;112;117;116;58;32;105;110;116;32;114;101;105;104;101;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -65324,7 +65531,7 @@ lösung: vb-wald-loesung.visustruct -`,S_=` +`,C_=` 105;110;116;32;104;111;101;104;101;32;61;32;48; @@ -65343,7 +65550,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; -`,T_=` +`,A_=` 105;110;116;32;115;116;117;102;101;32;61;32;49; @@ -65359,7 +65566,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;104;101;58;32;34;32;43;32;104;111;101;104;101;32;43;32;34;32;99;109;34; -`,__=` +`,P_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -65375,7 +65582,7 @@ lösung: vb-wald-loesung.visustruct -`,j_=` +`,D_=` 105;110;112;117;116;58;32;105;110;116;32;98;114;101;105;116;101;32;34;66;114;101;105;116;101;34; @@ -65407,7 +65614,7 @@ lösung: vb-wald-loesung.visustruct -`,C_=` +`,B_=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -65423,7 +65630,7 @@ lösung: vb-wald-loesung.visustruct -`,A_=` +`,O_=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -65438,7 +65645,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;101;114;116;101;46;108;101;110;103;116;104; -`,P_=` +`,M_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -65470,7 +65677,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,D_=` +`,Z_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;122;117;32;119;101;108;99;104;101;114;32;90;97;104;108;63;34; @@ -65502,7 +65709,7 @@ lösung: vb-wald-loesung.visustruct -`,B_=` +`,L_=` 105;110;116;32;105;32;61;32;49; @@ -65525,7 +65732,7 @@ lösung: vb-wald-loesung.visustruct -`,O_=` +`,W_=` 105;110;116;32;105;32;61;32;49; @@ -65548,7 +65755,7 @@ lösung: vb-wald-loesung.visustruct -`,M_=` +`,E_=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;87;105;101;32;118;105;101;108;101;32;83;116;117;102;101;110;63;34; @@ -65577,7 +65784,7 @@ lösung: vb-wald-loesung.visustruct -`,Z_=` +`,N_=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -65596,7 +65803,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;114;115;116;101;114;32;78;97;109;101;58;32;34;32;43;32;110;97;109;101;110;91;48;93; -`,L_=` +`,F_=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -65622,7 +65829,7 @@ lösung: vb-wald-loesung.visustruct -`,W_=` +`,R_=` 105;110;116;91;93;32;122;97;104;108;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -65673,7 +65880,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,E_=` +`,J_=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -65714,7 +65921,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;97;120;105;109;117;109;58;32;34;32;43;32;109;97;120; -`,N_=` +`,G_=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -65737,7 +65944,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,F_=` +`,H_=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -65767,7 +65974,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,R_=` +`,V_=` 105;110;112;117;116;58;32;105;110;116;32;108;97;101;110;103;101;32;34;76;228;110;103;101;63;34; @@ -65782,13 +65989,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;108;228;99;104;101;58;32;34;32;43;32;102; -`,J_=` +`,q_=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,G_=` +`,Q_=` 122;101;105;103;101;66;101;103;114;117;101;115;115;117;110;103;40;41; @@ -65800,7 +66007,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;69;114;103;101;98;110;105;115;40;41; -`,H_=` +`,U_=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -65832,7 +66039,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,V_=` +`,Y_=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;101;110;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -65864,7 +66071,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;246;99;104;115;116;101;32;84;101;109;112;101;114;97;116;117;114;58;32;34;32;43;32;109;97;120; -`,q_=` +`,$_=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -65886,7 +66093,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Q_=` +`,K_=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -65908,7 +66115,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,U_=` +`,X_=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -65930,7 +66137,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,Y_=` +`,ej=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;90;97;104;108;63;34; @@ -65942,7 +66149,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;115;32;81;117;97;100;114;97;116;32;105;115;116;32;34;32;43;32;113; -`,$_=` +`,tj=` 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;120;32;42;32;120; @@ -65951,7 +66158,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;101;114;103;101;98;110;105;115; -`,K_=` +`,nj=` 122;101;105;103;101;84;105;116;101;108;40;41; @@ -65963,7 +66170,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;34;32;43;32;110;97;109;101; -`,X_=` +`,ij=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;32;122;117;109;32;81;117;105;122;33;34; @@ -65972,7 +66179,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;117;32;98;101;107;111;109;109;115;116;32;100;114;101;105;32;70;114;97;103;101;110;46;34; -`,ej=` +`,aj=` 122;101;105;103;101;83;117;109;109;101;40;51;44;32;52;41; @@ -65984,7 +66191,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;83;117;109;109;101;40;120;44;32;120;32;43;32;49;41; -`,tj=` +`,sj=` 105;110;116;32;115;117;109;109;101;32;61;32;97;32;43;32;98; @@ -65993,7 +66200,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;117;109;109;101; -`,nj=` +`,rj=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -66016,7 +66223,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,ij=` +`,oj=` 105;110;112;117;116;58;32;105;110;116;32;115;116;97;114;116;32;34;83;116;97;114;116;119;101;114;116;34; @@ -66039,7 +66246,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;34; -`,aj=` +`,lj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -66061,7 +66268,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,sj=` +`,uj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -66083,7 +66290,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;58;32;34;32;43;32;115;117;109;109;101; -`,rj=` +`,mj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -66092,7 +66299,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;112;117;110;107;116;101;91;49;93;91;48;93; -`,oj=` +`,cj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -66101,7 +66308,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;112;105;101;108;101;114;32;50;44;32;82;117;110;100;101;32;49;58;32;34;32;43;32;80;117;110;107;116;101;91;49;93;91;48;93; -`,lj=` +`,dj=` 105;110;116;91;93;91;93;32;112;117;110;107;116;101;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -66130,7 +66337,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;117;109;109;101;58;32;34;32;43;32;115;117;109;109;101; -`,uj=` +`,hj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -66153,7 +66360,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,mj=` +`,gj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -66175,7 +66382,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,cj=` +`,pj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -66197,7 +66404,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,dj=` +`,fj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;87;101;108;99;104;101;32;82;101;105;104;101;63;34; @@ -66229,7 +66436,7 @@ lösung: vb-wald-loesung.visustruct -`,hj=` +`,bj=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;90;97;104;108;32;101;105;110;103;101;98;101;110;34; @@ -66251,7 +66458,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;107;117;108;116;97;101;116; -`,gj=` +`,xj=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; @@ -66283,13 +66490,13 @@ lösung: vb-wald-loesung.visustruct -`,pj=` +`,vj=` 83;116;114;105;110;103;32;98;114;105;101;102;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;98;114;105;101;102;46;116;120;116;34;41;41; -`,fj=` +`,yj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -66301,7 +66508,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,bj=` +`,wj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;63;34; @@ -66313,7 +66520,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,xj=` +`,zj=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -66322,7 +66529,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; -`,vj=` +`,Ij=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -66331,7 +66538,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;104;97;116;32;34;32;43;32;110;97;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;66;117;99;104;115;116;97;98;101;110;34; -`,yj=` +`,kj=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;105;110;103;97;98;101;32;34;80;97;115;115;119;111;114;116;63;34; @@ -66350,7 +66557,7 @@ lösung: vb-wald-loesung.visustruct -`,wj=` +`,Sj=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -66379,7 +66586,7 @@ lösung: vb-wald-loesung.visustruct -`,zj=` +`,Tj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;119;101;114;116;63;34; @@ -66399,7 +66606,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;101;34; -`,Ij=` +`,_j=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -66432,7 +66639,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,kj=` +`,jj=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -66465,7 +66672,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;115;117;99;104;101;58;32;34;32;43;32;118;101;114;115;117;99;104;101; -`,Sj=` +`,Cj=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -66507,7 +66714,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;115;117;109;109;101; -`,Tj=` +`,Aj=` 105;110;112;117;116;58;32;105;110;116;32;97;108;116;101;114;32;34;87;105;101;32;97;108;116;32;98;105;115;116;32;100;117;63;34; @@ -66529,7 +66736,7 @@ lösung: vb-wald-loesung.visustruct -`,_j=` +`,Pj=` 105;110;112;117;116;58;32;105;110;116;32;103;114;101;110;122;101;32;34;66;105;115;32;119;111;104;105;110;63;34; @@ -66545,7 +66752,7 @@ lösung: vb-wald-loesung.visustruct -`,jj=` +`,Dj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66584,7 +66791,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Cj=` +`,Bj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66623,7 +66830,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Aj=` +`,Oj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66658,7 +66865,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Pj=` +`,Mj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66693,7 +66900,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;116;105;111;110;58;32;34;32;43;32;112;111;115;105;116;105;111;110; -`,Dj=` +`,Zj=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -66728,7 +66935,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;58;32;34;32;43;32;97;110;122;97;104;108; -`,Bj=` +`,Lj=` 111;117;116;112;117;116;58;32;34;71;117;116;101;110;32;77;111;114;103;101;110;34; @@ -66737,13 +66944,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;101;117;116;101;32;108;101;114;110;101;110;32;119;105;114;32;83;116;114;117;107;116;111;103;114;97;109;109;101;46;34; -`,Oj=` +`,Wj=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;87;101;108;116;34; -`,Mj=` +`,Ej=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;34; @@ -66752,7 +66959,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;99;104;32;108;101;114;110;101;32;83;116;114;117;107;116;111;103;114;97;109;109;101;34; -`,Zj=` +`,Nj=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;83;116;97;114;116;122;97;104;108;63;34; @@ -66772,7 +66979,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,Lj=` +`,Fj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -66813,7 +67020,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;90;101;105;108;101;110;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Wj=` +`,Rj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -66822,7 +67029,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;97;117;115;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;101;105;110;107;97;117;102;45;110;101;117;46;116;120;116;34;41; -`,Ej=` +`,Jj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; @@ -66848,13 +67055,13 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,Nj=` +`,Gj=` 83;99;97;110;110;101;114;32;100;97;116;101;105;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;101;105;110;107;97;117;102;46;116;120;116;34;41;41; -`,Fj=` +`,Hj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -66893,7 +67100,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;117;99;104;115;58;32;34;32;43;32;97;110;122;97;104;108; -`,Rj=` +`,Vj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -66902,7 +67109,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Jj=` +`,qj=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -66937,7 +67144,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;228;110;103;115;116;101;114;32;69;105;110;116;114;97;103;58;32;34;32;43;32;108;97;101;110;103;115;116;101;114; -`,Gj=` +`,Qj=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;108;111;103;98;117;99;104;46;116;120;116;34;41;41; @@ -66946,7 +67153,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;122;101;105;108;101;110;32;61;32;116;101;120;116;46;115;112;108;105;116;40;34;92;110;34;41; -`,Hj=` +`,Uj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -67000,7 +67207,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;66;101;115;116;101;32;78;111;116;101;32;105;110;32;69;110;103;108;105;115;99;104;58;32;34;32;43;32;98;101;115;116;101;114;78;97;109;101;32;43;32;34;32;40;34;32;43;32;98;101;115;116;101;78;111;116;101;32;43;32;34;41;34; -`,Vj=` +`,Yj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -67009,7 +67216,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,qj=` +`,$j=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -67050,7 +67257,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;99;104;110;105;116;116;32;77;97;116;104;101;58;32;34;32;43;32;115;117;109;109;101;32;47;32;97;110;122;97;104;108; -`,Qj=` +`,Kj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;107;108;97;115;115;101;46;99;115;118;34;41;41; @@ -67059,7 +67266,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,Uj=` +`,Xj=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -67098,7 +67305,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,Yj=` +`,eC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -67107,7 +67314,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;108;101;115;101;114;46;114;101;97;100;76;105;110;101;40;41; -`,$j=` +`,tC=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -67157,7 +67364,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101;110;46;108;101;110;103;116;104;32;43;32;34;32;69;105;110;116;114;228;103;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,Kj=` +`,nC=` 83;116;114;105;110;103;91;93;32;110;97;109;101;110;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;70;117;99;104;115;34;125; @@ -67175,7 +67382,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,Xj=` +`,iC=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -67228,7 +67435,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;122;101;105;108;101;110;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;84;105;101;114;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,eC=` +`,aC=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -67249,7 +67456,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,tC=` +`,sC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -67293,7 +67500,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108;32;43;32;34;32;83;228;116;122;101;32;103;101;115;112;101;105;99;104;101;114;116;34; -`,nC=` +`,rC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;115;101;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;105;101;114;101;46;99;115;118;34;41;41; @@ -67314,7 +67521,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,iC=` +`,oC=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;34; @@ -67326,7 +67533,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;100;101;117;115;34; -`,aC=` +`,lC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -67345,7 +67552,7 @@ lösung: vb-wald-loesung.visustruct -`,sC=` +`,uC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -67426,7 +67633,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,rC=` +`,mC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;108;97;110;99;97;109;101;110;116;111;46;99;115;118;34;41;41; @@ -67435,7 +67642,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,oC=` +`,cC=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -67500,7 +67707,7 @@ lösung: vb-wald-loesung.visustruct -`,lC=` +`,dC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;116;101;105;114;111;34; @@ -67526,7 +67733,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;105;111; -`,uC=` +`,hC=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; @@ -67580,13 +67787,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,mC=` +`,gC=` 99;104;97;114;91;93;32;97;108;102;97;98;101;116;111;32;61;32;123;39;65;39;44;32;39;66;39;44;32;39;67;39;44;32;39;68;39;44;32;39;69;39;44;32;39;70;39;44;32;39;71;39;44;32;39;72;39;44;32;39;73;39;44;32;39;74;39;44;32;39;75;39;44;32;39;76;39;44;32;39;77;39;44;32;39;78;39;44;32;39;79;39;44;32;39;80;39;44;32;39;81;39;44;32;39;82;39;44;32;39;83;39;44;32;39;84;39;44;32;39;85;39;44;32;39;86;39;44;32;39;87;39;44;32;39;88;39;44;32;39;89;39;44;32;39;90;39;125; -`,cC=` +`,pC=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;81;117;101;32;112;97;108;97;118;114;97;32;40;115;243;32;109;97;105;250;115;99;117;108;97;115;41;63;34; @@ -67617,7 +67824,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,dC=` +`,fC=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;101;103;114;101;100;111;32;34;81;117;97;108;32;233;32;111;32;116;101;120;116;111;32;99;105;102;114;97;100;111;63;34; @@ -67648,7 +67855,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116;111; -`,hC=` +`,bC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -67684,7 +67891,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;115;115;111;115;58;32;34;32;43;32;112;97;115;115;111;115; -`,gC=` +`,xC=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;97;115;32;110;111;116;97;115;63;34; @@ -67712,7 +67919,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;101;100;105;97; -`,pC=` +`,vC=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;110;250;109;101;114;111;115;63;34; @@ -67749,7 +67956,7 @@ lösung: vb-wald-loesung.visustruct -`,fC=` +`,yC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -67768,7 +67975,7 @@ lösung: vb-wald-loesung.visustruct -`,bC=` +`,wC=` 99;111;110;115;116;32;100;111;117;98;108;101;32;73;86;65;32;61;32;48;46;50;51; @@ -67789,7 +67996,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;114;101;99;111;67;111;109;73;118;97; -`,xC=` +`,zC=` 105;110;116;32;112;105;110;32;61;32;48; @@ -67825,7 +68032,7 @@ lösung: vb-wald-loesung.visustruct -`,vC=` +`,IC=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -67861,7 +68068,7 @@ lösung: vb-wald-loesung.visustruct -`,yC=` +`,kC=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;49;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -67905,7 +68112,7 @@ lösung: vb-wald-loesung.visustruct -`,wC=` +`,SC=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -67959,7 +68166,7 @@ lösung: vb-wald-loesung.visustruct -`,zC=` +`,TC=` 98;111;111;108;101;97;110;91;93;91;93;32;109;97;114;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;53;93;91;53;93; @@ -67986,7 +68193,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;99;111;108;117;110;97;115;32;61;32;123;34;65;34;44;32;34;66;34;44;32;34;67;34;44;32;34;68;34;44;32;34;69;34;125; -`,IC=` +`,_C=` 105;110;112;117;116;58;32;105;110;116;32;112;114;97;116;111;32;34;81;117;101;32;112;114;97;116;111;63;32;40;49;44;32;50;32;111;117;32;51;41;34; @@ -68015,7 +68222,7 @@ lösung: vb-wald-loesung.visustruct -`,kC=` +`,jC=` 105;110;116;32;110;117;109;101;114;111;49;32;61;32;52; @@ -68030,7 +68237,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,SC=` +`,CC=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;53;93; @@ -68052,7 +68259,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;109;112;97;32;111;32;113;117;97;100;114;111;58;32;34;32;43;32;110;111;109;101;115;91;115;111;114;116;101;97;100;111;32;45;32;49;93; -`,TC=` +`,AC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -68064,7 +68271,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;117;112;108;105;99;97;100;111;58;32;34;32;43;32;110;117;109;101;114;111; -`,_C=` +`,PC=` -1; @@ -68111,7 +68318,7 @@ lösung: vb-wald-loesung.visustruct -`,jC=` +`,DC=` @@ -68148,7 +68355,7 @@ lösung: vb-wald-loesung.visustruct -`,CC=` +`,BC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -68208,7 +68415,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;101;114;116;97;115;32;43;32;34;32;100;101;32;34;32;43;32;99;111;110;116;97;103;101;109;32;43;32;34;32;99;101;114;116;97;115;34; -`,AC=` +`,OC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;118;111;99;97;98;117;108;97;114;105;111;46;99;115;118;34;41;41; @@ -68217,7 +68424,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,PC=` +`,MC=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -68236,7 +68443,7 @@ lösung: vb-wald-loesung.visustruct -`,DC=` +`,ZC=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -68259,7 +68466,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,BC=` +`,LC=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;90;111;114;97;59;49;59;50;59;50;34; @@ -68277,7 +68484,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;109;97;116;101;109;97;116;105;99;97;32;43;32;34;32;97;32;77;97;116;101;109;225;116;105;99;97;34; -`,OC=` +`,WC=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;123;92;34;110;111;109;101;92;34;58;32;92;34;90;111;114;97;92;34;44;32;92;34;101;115;112;101;99;105;101;92;34;58;32;92;34;99;97;98;114;97;92;34;44;32;92;34;105;100;97;100;101;92;34;58;32;54;125;44;34; @@ -68295,7 +68502,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101; -`,MC=` +`,EC=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -68315,7 +68522,7 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,ZC=` +`,NC=` 105;110;116;91;93;91;93;32;116;97;98;101;108;97;32;61;32;110;101;119;32;105;110;116;91;49;48;93;91;49;48;93; @@ -68347,7 +68554,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;183;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;116;97;98;101;108;97;91;97;32;45;32;49;93;91;98;32;45;32;49;93; -`,LC=` +`,FC=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -68395,7 +68602,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;105;118;114;101;115;58;32;34;32;43;32;108;105;118;114;101;115; -`,WC=` +`,RC=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -68410,7 +68617,7 @@ lösung: vb-wald-loesung.visustruct 108;117;103;97;114;101;115;91;50;93;91;51;93;32;61;32;116;114;117;101; -`,EC=` +`,JC=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -68444,7 +68651,7 @@ lösung: vb-wald-loesung.visustruct -`,NC=` +`,GC=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -68462,7 +68669,7 @@ lösung: vb-wald-loesung.visustruct 105;110;112;117;116;58;32;105;110;116;32;108;117;103;97;114;32;34;76;117;103;97;114;34; -`,FC=` +`,HC=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -68510,7 +68717,7 @@ lösung: vb-wald-loesung.visustruct -`,RC=` +`,VC=` 98;111;111;108;101;97;110;91;93;91;93;32;108;117;103;97;114;101;115;32;61;32;110;101;119;32;98;111;111;108;101;97;110;91;51;93;91;53;93; @@ -68534,7 +68741,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;108;97;32;49;44;32;108;117;103;97;114;32;50;32;118;101;110;100;105;100;111;63;32;34;32;43;32;108;117;103;97;114;101;115;91;49;93;91;50;93; -`,JC=` +`,qC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -68549,7 +68756,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; -`,GC=` +`,QC=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -68564,7 +68771,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;117;108;116;97;100;111;58;32;34;32;43;32;114;101;115;117;108;116;97;100;111; -`,HC=` +`,UC=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -68579,7 +68786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,VC=` +`,YC=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -68594,7 +68801,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;34; -`,qC=` +`,$C=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -68606,7 +68813,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;105;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34; -`,QC=` +`,KC=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -68618,7 +68825,7 @@ lösung: vb-wald-loesung.visustruct 115;121;115;116;101;109;46;111;117;116;46;112;114;105;110;116;108;110;40;110;111;109;101;32;43;32;34;32;116;101;109;32;34;32;43;32;73;100;97;100;101;32;43;32;34;32;97;110;111;115;46;34;41; -`,UC=` +`,XC=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -68636,7 +68843,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,YC=` +`,eA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -68651,7 +68858,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,$C=` +`,tA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;50; @@ -68666,7 +68873,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,KC=` +`,nA=` 111;117;116;112;117;116;58;32;110;117;109;101;114;111; @@ -68681,7 +68888,7 @@ lösung: vb-wald-loesung.visustruct 110;117;109;101;114;111;32;61;32;110;117;109;101;114;111;32;43;32;51; -`,XC=` +`,iA=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -68705,7 +68912,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,eA=` +`,aA=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -68720,7 +68927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;105;114;101;105;116;97;58;32;34;32;43;32;100;105;114;101;105;116;97; -`,tA=` +`,sA=` 105;110;116;32;97;32;61;32;53; @@ -68744,7 +68951,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,nA=` +`,rA=` 105;110;116;32;105;100;97;100;101;32;61;32;49;52; @@ -68762,7 +68969,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;109;34; -`,iA=` +`,oA=` 105;110;116;32;109;105;110;117;116;111;115;32;61;32;49;51;53; @@ -68777,7 +68984,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;104;111;114;97;115;32;43;32;34;32;104;111;114;97;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;109;105;110;117;116;111;115;34; -`,aA=` +`,lA=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;51; @@ -68792,7 +68999,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;112;114;101;99;111;84;111;116;97;108;32;43;32;34;32;101;117;114;111;115;34; -`,sA=` +`,uA=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -68807,7 +69014,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;101;115;116;97;58;32;34;32;43;32;115;97;108;100;111; -`,rA=` +`,mA=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -68822,7 +69029,7 @@ lösung: vb-wald-loesung.visustruct 115;97;108;100;111;32;61;32;115;97;108;100;111;32;45;32;112;114;101;99;111; -`,oA=` +`,cA=` 105;110;116;32;112;114;101;99;111;32;61;32;57; @@ -68837,7 +69044,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,lA=` +`,dA=` 105;110;116;32;102;97;116;105;97;115;32;61;32;56; @@ -68852,7 +69059,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;80;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; -`,uA=` +`,hA=` 105;110;116;32;102;97;116;105;97;115;32;61;32;56; @@ -68867,7 +69074,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;97;100;97;32;117;109;32;114;101;99;101;98;101;32;34;32;43;32;112;111;114;112;101;115;115;111;97;32;43;32;34;32;102;97;116;105;97;115;46;34; -`,mA=` +`,gA=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;55; @@ -68888,7 +69095,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;101;114;237;109;101;116;114;111;58;32;34;32;43;32;112;101;114;105;109;101;116;114;111; -`,cA=` +`,pA=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -68903,7 +69110,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,dA=` +`,fA=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -68912,7 +69119,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;105;110;117;116;111;115;32;43;32;34;32;109;105;110;117;116;111;115;32;101;32;34;32;43;32;114;101;115;116;111;32;43;32;34;32;115;101;103;117;110;100;111;115;34; -`,hA=` +`,bA=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;53; @@ -68927,7 +69134,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;114;101;97; -`,gA=` +`,xA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;67;111;109;111;32;116;101;32;99;104;97;109;97;115;63;34; @@ -68936,7 +69143,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101;32;43;32;34;33;34; -`,pA=` +`,vA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -68951,7 +69158,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,fA=` +`,yA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -68963,7 +69170,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;40;97;32;43;32;98;41; -`,bA=` +`,wA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -68975,7 +69182,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;97;32;43;32;98; -`,xA=` +`,zA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -68984,7 +69191,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;105;100;97;100;101;32;43;32;49;41; -`,vA=` +`,IA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -68993,7 +69200,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;112;114;243;120;105;109;111;32;97;110;111;32;116;101;110;115;32;34;32;43;32;40;73;100;97;100;101;32;43;32;49;41; -`,yA=` +`,kA=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;115;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -69005,7 +69212,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;227;111;32;99;101;114;99;97;32;100;101;32;34;32;43;32;100;105;97;115;32;43;32;34;32;100;105;97;115;46;34; -`,wA=` +`,SA=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;120;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -69020,7 +69227,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;58;32;34;32;43;32;109;101;100;105;97; -`,zA=` +`,TA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -69041,7 +69248,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;111;100;117;116;111;58;32;34;32;43;32;112;114;111;100;117;116;111; -`,IA=` +`,_A=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -69060,7 +69267,7 @@ lösung: vb-wald-loesung.visustruct -`,kA=` +`,jA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -69082,7 +69289,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,SA=` +`,CA=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;63;34; @@ -69101,7 +69308,7 @@ lösung: vb-wald-loesung.visustruct -`,TA=` +`,AA=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -69119,7 +69326,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,_A=` +`,PA=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -69137,7 +69344,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,jA=` +`,DA=` 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; @@ -69152,7 +69359,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,CA=` +`,BA=` 105;110;116;32;112;111;110;116;111;115;32;61;32;49;48; @@ -69167,7 +69374,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;110;116;111;115;58;32;34;32;43;32;112;111;110;116;111;115; -`,AA=` +`,OA=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -69185,7 +69392,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,PA=` +`,MA=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -69203,7 +69410,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,DA=` +`,ZA=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -69225,7 +69432,7 @@ lösung: vb-wald-loesung.visustruct -`,BA=` +`,LA=` 105;110;112;117;116;58;32;100;111;117;98;108;101;32;112;114;101;99;111;32;34;80;114;101;231;111;32;101;109;32;101;117;114;111;115;63;34; @@ -69247,7 +69454,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;112;97;103;97;114;58;32;34;32;43;32;112;114;101;99;111;32;43;32;34;32;101;117;114;111;115;34; -`,OA=` +`,WA=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -69266,7 +69473,7 @@ lösung: vb-wald-loesung.visustruct -`,MA=` +`,EA=` 105;110;112;117;116;58;32;105;110;116;32;112;111;110;116;111;115;32;34;81;117;97;110;116;111;115;32;112;111;110;116;111;115;63;34; @@ -69285,7 +69492,7 @@ lösung: vb-wald-loesung.visustruct -`,ZA=` +`,NA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -69304,7 +69511,7 @@ lösung: vb-wald-loesung.visustruct -`,LA=` +`,FA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;101;32;105;100;97;100;101;32;116;101;110;115;63;34; @@ -69323,7 +69530,7 @@ lösung: vb-wald-loesung.visustruct -`,WA=` +`,RA=` 105;110;116;32;105;100;97;100;101;32;61;32;49;53; @@ -69342,7 +69549,7 @@ lösung: vb-wald-loesung.visustruct -`,EA=` +`,JA=` 105;110;116;32;105;100;97;100;101;32;61;32;49;53; @@ -69361,7 +69568,7 @@ lösung: vb-wald-loesung.visustruct -`,NA=` +`,GA=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -69380,7 +69587,7 @@ lösung: vb-wald-loesung.visustruct -`,FA=` +`,HA=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -69399,7 +69606,7 @@ lösung: vb-wald-loesung.visustruct -`,RA=` +`,VA=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34; @@ -69418,7 +69625,7 @@ lösung: vb-wald-loesung.visustruct -`,JA=` +`,qA=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;68;105;97;32;40;49;32;97;32;55;41;63;34; @@ -69437,7 +69644,7 @@ lösung: vb-wald-loesung.visustruct -`,GA=` +`,QA=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;99;111;114;32;34;68;101;32;113;117;101;32;99;111;114;32;101;115;116;225;32;111;32;115;101;109;225;102;111;114;111;63;34; @@ -69466,7 +69673,7 @@ lösung: vb-wald-loesung.visustruct -`,HA=` +`,UA=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -69495,7 +69702,7 @@ lösung: vb-wald-loesung.visustruct -`,VA=` +`,YA=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -69514,7 +69721,7 @@ lösung: vb-wald-loesung.visustruct -`,qA=` +`,$A=` 105;110;112;117;116;58;32;105;110;116;32;100;105;97;32;34;81;117;101;32;100;105;97;32;40;49;32;97;32;55;41;63;34; @@ -69533,7 +69740,7 @@ lösung: vb-wald-loesung.visustruct -`,QA=` +`,KA=` 105;110;116;32;100;105;97;32;61;32;55; @@ -69552,7 +69759,7 @@ lösung: vb-wald-loesung.visustruct -`,UA=` +`,XA=` 105;110;116;32;100;105;97;32;61;32;55; @@ -69571,7 +69778,7 @@ lösung: vb-wald-loesung.visustruct -`,YA=` +`,eP=` 105;110;112;117;116;58;32;105;110;116;32;104;111;114;97;32;34;81;117;101;32;104;111;114;97;115;32;115;227;111;32;40;115;243;32;97;32;104;111;114;97;41;63;34; @@ -69590,7 +69797,7 @@ lösung: vb-wald-loesung.visustruct -`,$A=` +`,tP=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;81;117;101;32;110;111;116;97;63;34; @@ -69629,7 +69836,7 @@ lösung: vb-wald-loesung.visustruct -`,KA=` +`,nP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -69676,7 +69883,7 @@ lösung: vb-wald-loesung.visustruct -`,XA=` +`,iP=` 105;110;112;117;116;58;32;105;110;116;32;101;115;99;111;108;104;97;32;34;49;32;225;103;117;97;44;32;50;32;115;117;109;111;44;32;51;32;99;104;111;99;111;108;97;116;101;32;113;117;101;110;116;101;34; @@ -69715,7 +69922,7 @@ lösung: vb-wald-loesung.visustruct -`,eP=` +`,aP=` 80;244;114;32;117;109;97;32;99;104;225;118;101;110;97;32;110;97;32;109;101;115;97; @@ -69745,7 +69952,7 @@ lösung: vb-wald-loesung.visustruct 66;101;98;101;114;32;111;32;99;104;225; -`,tP=` +`,sP=` 76;101;118;97;110;116;97;114; @@ -69760,7 +69967,7 @@ lösung: vb-wald-loesung.visustruct 84;111;109;97;114;32;111;32;112;101;113;117;101;110;111;45;97;108;109;111;231;111; -`,nP=` +`,rP=` 69;110;99;104;101;114;32;97;32;99;104;97;108;101;105;114;97;32;99;111;109;32;225;103;117;97; @@ -69781,7 +69988,7 @@ lösung: vb-wald-loesung.visustruct 84;105;114;97;114;32;97;32;115;97;113;117;101;116;97;32;100;101;32;99;104;225; -`,iP=` +`,oP=` 69;115;116;225;32;97;32;99;104;111;118;101;114;63; @@ -69800,7 +70007,7 @@ lösung: vb-wald-loesung.visustruct 83;97;105;114; -`,aP=` +`,lP=` 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; @@ -69814,7 +70021,7 @@ lösung: vb-wald-loesung.visustruct 76;101;118;97;110;116;97;114;32;111;32;112;114;97;116;111; -`,sP=` +`,uP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;67;111;110;116;97;114;32;97;116;233;63;34; @@ -69834,7 +70041,7 @@ lösung: vb-wald-loesung.visustruct -`,rP=` +`,mP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -69854,7 +70061,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,oP=` +`,cP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -69871,7 +70078,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,lP=` +`,dP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;70;97;116;111;114;105;97;108;32;100;101;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -69897,7 +70104,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;32;43;32;34;33;32;61;32;34;32;43;32;102;97;116;111;114;105;97;108; -`,uP=` +`,hP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -69932,7 +70139,7 @@ lösung: vb-wald-loesung.visustruct -`,mP=` +`,gP=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;63;34; @@ -69967,7 +70174,7 @@ lösung: vb-wald-loesung.visustruct -`,cP=` +`,pP=` 105;110;116;32;110;111;116;97;32;61;32;50; @@ -69991,7 +70198,7 @@ lösung: vb-wald-loesung.visustruct -`,dP=` +`,fP=` 105;110;116;32;110;111;116;97;32;61;32;50; @@ -70015,7 +70222,7 @@ lösung: vb-wald-loesung.visustruct -`,hP=` +`,bP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -70044,7 +70251,7 @@ lösung: vb-wald-loesung.visustruct -`,gP=` +`,xP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -70067,7 +70274,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;115;115;111;115; -`,pP=` +`,vP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;48; @@ -70084,7 +70291,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;98;114;105;103;97;100;111;33;34; -`,fP=` +`,yP=` 105;110;116;32;105;32;61;32;49;48; @@ -70101,7 +70308,7 @@ lösung: vb-wald-loesung.visustruct -`,bP=` +`,wP=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -70127,7 +70334,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,xP=` +`,zP=` 105;110;112;117;116;58;32;105;110;116;32;111;98;106;101;116;105;118;111;32;34;79;98;106;101;116;105;118;111;63;34; @@ -70153,7 +70360,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;101;109;97;110;97;115;58;32;34;32;43;32;115;101;109;97;110;97;115; -`,vP=` +`,IP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;111;110;100;101;63;34; @@ -70173,7 +70380,7 @@ lösung: vb-wald-loesung.visustruct -`,yP=` +`,kP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -70193,7 +70400,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,wP=` +`,SP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -70213,7 +70420,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;114;116;105;100;97;33;34; -`,zP=` +`,TP=` 105;110;116;32;110;111;116;97;32;61;32;48; @@ -70230,7 +70437,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;32;116;117;97;32;110;111;116;97;58;32;34;32;43;32;110;111;116;97; -`,IP=` +`,_P=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -70253,7 +70460,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,kP=` +`,jP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;34; @@ -70272,7 +70479,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,SP=` +`,CP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -70291,7 +70498,7 @@ lösung: vb-wald-loesung.visustruct -`,TP=` +`,AP=` 105;110;116;32;105;32;61;32;49; @@ -70304,7 +70511,7 @@ lösung: vb-wald-loesung.visustruct -`,_P=` +`,PP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -70321,7 +70528,7 @@ lösung: vb-wald-loesung.visustruct -`,jP=` +`,DP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -70338,7 +70545,7 @@ lösung: vb-wald-loesung.visustruct -`,CP=` +`,BP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;49; @@ -70358,7 +70565,7 @@ lösung: vb-wald-loesung.visustruct -`,AP=` +`,OP=` 105;110;116;32;110;117;109;101;114;111;32;61;32;49; @@ -70378,7 +70585,7 @@ lösung: vb-wald-loesung.visustruct -`,PP=` +`,MP=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;78;250;109;101;114;111;32;105;110;105;99;105;97;108;63;34; @@ -70395,7 +70602,7 @@ lösung: vb-wald-loesung.visustruct -`,DP=` +`,ZP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -70417,7 +70624,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,BP=` +`,LP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;97;115;32;108;105;110;104;97;115;63;34; @@ -70446,7 +70653,7 @@ lösung: vb-wald-loesung.visustruct -`,OP=` +`,WP=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;48; @@ -70478,7 +70685,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,MP=` +`,EP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -70510,7 +70717,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101; -`,ZP=` +`,NP=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -70526,7 +70733,7 @@ lösung: vb-wald-loesung.visustruct -`,LP=` +`,FP=` 105;110;112;117;116;58;32;105;110;116;32;116;97;98;117;97;100;97;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -70542,7 +70749,7 @@ lösung: vb-wald-loesung.visustruct -`,WP=` +`,RP=` 105;110;116;32;97;108;116;117;114;97;32;61;32;48; @@ -70561,7 +70768,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; -`,EP=` +`,JP=` 105;110;116;32;100;101;103;114;97;117;32;61;32;49; @@ -70577,7 +70784,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;108;116;117;114;97;58;32;34;32;43;32;97;108;116;117;114;97;32;43;32;34;32;99;109;34; -`,NP=` +`,GP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -70593,7 +70800,7 @@ lösung: vb-wald-loesung.visustruct -`,FP=` +`,HP=` 105;110;112;117;116;58;32;105;110;116;32;108;97;114;103;117;114;97;32;34;76;97;114;103;117;114;97;34; @@ -70625,7 +70832,7 @@ lösung: vb-wald-loesung.visustruct -`,RP=` +`,VP=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;123;50;44;32;52;44;32;54;44;32;56;44;32;49;48;125; @@ -70641,7 +70848,7 @@ lösung: vb-wald-loesung.visustruct -`,JP=` +`,qP=` 105;110;116;91;93;32;118;97;108;111;114;101;115;32;61;32;123;52;44;32;56;44;32;49;53;44;32;49;54;44;32;50;51;44;32;52;50;125; @@ -70656,7 +70863,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;97;108;111;114;101;115;46;108;101;110;103;116;104; -`,GP=` +`,QP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -70688,7 +70895,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,HP=` +`,UP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -70720,7 +70927,7 @@ lösung: vb-wald-loesung.visustruct -`,VP=` +`,YP=` 105;110;116;32;105;32;61;32;49; @@ -70743,7 +70950,7 @@ lösung: vb-wald-loesung.visustruct -`,qP=` +`,$P=` 105;110;116;32;105;32;61;32;49; @@ -70766,7 +70973,7 @@ lösung: vb-wald-loesung.visustruct -`,QP=` +`,KP=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;81;117;97;110;116;111;115;32;100;101;103;114;97;117;115;63;34; @@ -70795,7 +71002,7 @@ lösung: vb-wald-loesung.visustruct -`,UP=` +`,XP=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;110;101;119;32;83;116;114;105;110;103;91;51;93; @@ -70814,7 +71021,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;114;105;109;101;105;114;111;32;110;111;109;101;58;32;34;32;43;32;110;111;109;101;115;91;48;93; -`,YP=` +`,eD=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;52;93; @@ -70840,7 +71047,7 @@ lösung: vb-wald-loesung.visustruct -`,$P=` +`,tD=` 105;110;116;91;93;32;110;117;109;101;114;111;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -70891,7 +71098,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,KP=` +`,nD=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;49;50;44;32;55;44;32;49;57;44;32;52;125; @@ -70932,7 +71139,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;225;120;105;109;111;58;32;34;32;43;32;109;97;120; -`,XP=` +`,iD=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -70955,7 +71162,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,eD=` +`,aD=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -70985,7 +71192,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,tD=` +`,sD=` 105;110;112;117;116;58;32;105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;34;67;111;109;112;114;105;109;101;110;116;111;63;34; @@ -71000,7 +71207,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;193;114;101;97;58;32;34;32;43;32;102; -`,nD=` +`,rD=` 109;111;115;116;114;97;114;66;111;97;115;86;105;110;100;97;115;40;41; @@ -71012,7 +71219,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;82;101;115;117;108;116;97;100;111;40;41; -`,iD=` +`,oD=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -71044,7 +71251,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,aD=` +`,lD=` 105;110;116;91;93;32;116;101;109;112;101;114;97;116;117;114;97;115;32;61;32;123;45;53;44;32;45;50;44;32;45;56;44;32;45;51;125; @@ -71076,7 +71283,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;109;112;101;114;97;116;117;114;97;32;109;97;105;115;32;97;108;116;97;58;32;34;32;43;32;109;97;120; -`,sD=` +`,uD=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -71098,7 +71305,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,rD=` +`,mD=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;52;44;32;55;44;32;50;44;32;53;125; @@ -71120,7 +71327,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,oD=` +`,cD=` 105;110;116;91;93;32;110;111;116;97;115;32;61;32;123;50;44;32;51;44;32;49;44;32;52;125; @@ -71142,7 +71349,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,lD=` +`,dD=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;110;250;109;101;114;111;63;34; @@ -71154,7 +71361,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;32;113;117;97;100;114;97;100;111;32;233;32;34;32;43;32;113; -`,uD=` +`,hD=` 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;120;32;42;32;120; @@ -71163,7 +71370,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116;97;100;111; -`,mD=` +`,gD=` 109;111;115;116;114;97;114;84;105;116;117;108;111;40;41; @@ -71175,7 +71382,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;79;108;225;32;34;32;43;32;110;111;109;101; -`,cD=` +`,pD=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;32;97;111;32;113;117;105;122;33;34; @@ -71184,7 +71391,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;97;105;115;32;116;101;114;32;116;114;234;115;32;112;101;114;103;117;110;116;97;115;46;34; -`,dD=` +`,fD=` 109;111;115;116;114;97;114;83;111;109;97;40;51;44;32;52;41; @@ -71196,7 +71403,7 @@ lösung: vb-wald-loesung.visustruct 109;111;115;116;114;97;114;83;111;109;97;40;120;44;32;120;32;43;32;49;41; -`,hD=` +`,bD=` 105;110;116;32;115;111;109;97;32;61;32;97;32;43;32;98; @@ -71205,7 +71412,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;32;43;32;34;32;43;32;34;32;43;32;98;32;43;32;34;32;61;32;34;32;43;32;115;111;109;97; -`,gD=` +`,xD=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -71228,7 +71435,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,pD=` +`,vD=` 105;110;112;117;116;58;32;105;110;116;32;105;110;105;99;105;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;34; @@ -71251,7 +71458,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;34; -`,fD=` +`,yD=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -71273,7 +71480,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,bD=` +`,wD=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;44;32;50;125;44;32;123;52;44;32;49;44;32;54;125;125; @@ -71295,7 +71502,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;58;32;34;32;43;32;115;111;109;97; -`,xD=` +`,zD=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -71304,7 +71511,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;112;111;110;116;111;115;91;49;93;91;48;93; -`,vD=` +`,ID=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;50;125;125; @@ -71313,7 +71520,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;111;103;97;100;111;114;32;50;44;32;114;111;110;100;97;32;49;58;32;34;32;43;32;80;111;110;116;111;115;91;49;93;91;48;93; -`,yD=` +`,kD=` 105;110;116;91;93;91;93;32;112;111;110;116;111;115;32;61;32;123;123;51;44;32;53;125;44;32;123;52;44;32;49;125;44;32;123;50;44;32;50;125;125; @@ -71342,7 +71549,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;111;109;97;58;32;34;32;43;32;115;111;109;97; -`,wD=` +`,SD=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -71365,7 +71572,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,zD=` +`,TD=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -71387,7 +71594,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,ID=` +`,_D=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -71409,7 +71616,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,kD=` +`,jD=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;81;117;101;32;116;97;98;117;97;100;97;63;34; @@ -71441,7 +71648,7 @@ lösung: vb-wald-loesung.visustruct -`,SD=` +`,CD=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;73;110;116;114;111;100;117;122;32;117;109;32;110;250;109;101;114;111;34; @@ -71463,7 +71670,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;116;111;114;105;97;108; -`,TD=` +`,AD=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; @@ -71495,13 +71702,13 @@ lösung: vb-wald-loesung.visustruct -`,_D=` +`,PD=` 83;116;114;105;110;103;32;99;97;114;116;97;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;99;97;114;116;97;46;116;120;116;34;41;41; -`,jD=` +`,DD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -71513,7 +71720,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,CD=` +`,BD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;63;34; @@ -71525,7 +71732,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;49;41;32;43;32;34;46;34; -`,AD=` +`,OD=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -71534,7 +71741,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;108;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; -`,PD=` +`,MD=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -71543,7 +71750,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;97;116;40;48;41;32;43;32;34;32;116;101;109;32;34;32;43;32;110;111;109;101;46;76;101;110;103;116;104;40;41;32;43;32;34;32;108;101;116;114;97;115;34; -`,DD=` +`,ZD=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;101;110;116;114;97;100;97;32;34;80;97;108;97;118;114;97;45;112;97;115;115;101;63;34; @@ -71562,7 +71769,7 @@ lösung: vb-wald-loesung.visustruct -`,BD=` +`,LD=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -71591,7 +71798,7 @@ lösung: vb-wald-loesung.visustruct -`,OD=` +`,WD=` 105;110;112;117;116;58;32;105;110;116;32;110;117;109;101;114;111;32;34;86;97;108;111;114;32;105;110;105;99;105;97;108;63;34; @@ -71611,7 +71818,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;109;34; -`,MD=` +`,ED=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -71644,7 +71851,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,ZD=` +`,ND=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -71677,7 +71884,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;101;110;116;97;116;105;118;97;115;58;32;34;32;43;32;116;101;110;116;97;116;105;118;97;115; -`,LD=` +`,FD=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -71719,7 +71926,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;115;111;109;97; -`,WD=` +`,RD=` 105;110;112;117;116;58;32;105;110;116;32;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;97;110;111;115;32;116;101;110;115;63;34; @@ -71741,7 +71948,7 @@ lösung: vb-wald-loesung.visustruct -`,ED=` +`,JD=` 105;110;112;117;116;58;32;105;110;116;32;108;105;109;105;116;101;32;34;65;116;233;32;113;117;101;32;110;250;109;101;114;111;63;34; @@ -71757,7 +71964,7 @@ lösung: vb-wald-loesung.visustruct -`,ND=` +`,GD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -71796,7 +72003,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,FD=` +`,HD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -71835,7 +72042,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,RD=` +`,VD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -71870,7 +72077,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,JD=` +`,qD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -71905,7 +72112,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;111;115;105;231;227;111;58;32;34;32;43;32;112;111;115;105;99;97;111; -`,GD=` +`,QD=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -71940,7 +72147,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;81;117;97;110;116;105;100;97;100;101;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,HD=` +`,UD=` 111;117;116;112;117;116;58;32;34;66;111;109;32;100;105;97;34; @@ -71949,13 +72156,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;72;111;106;101;32;97;112;114;101;110;100;101;109;111;115;32;101;115;116;114;117;116;111;103;114;97;109;97;115;46;34; -`,VD=` +`,YD=` 111;117;116;112;117;116;58;32;34;79;108;225;32;77;117;110;100;111;34; -`,qD=` +`,$D=` 111;117;116;112;117;116;58;32;34;79;108;225;34; @@ -71964,7 +72171,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;115;116;111;117;32;97;32;97;112;114;101;110;100;101;114;32;101;115;116;114;117;116;111;103;114;97;109;97;115;34; -`,QD=` +`,KD=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -72005,7 +72212,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;108;105;110;104;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,UD=` +`,XD=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -72014,7 +72221,7 @@ lösung: vb-wald-loesung.visustruct 80;114;105;110;116;87;114;105;116;101;114;32;115;97;105;100;97;32;61;32;110;101;119;32;80;114;105;110;116;87;114;105;116;101;114;40;34;99;111;109;112;114;97;115;45;110;111;118;97;46;116;120;116;34;41; -`,YD=` +`,eB=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; @@ -72040,13 +72247,13 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,$D=` +`,tB=` 83;99;97;110;110;101;114;32;102;105;99;104;101;105;114;111;32;61;32;110;101;119;32;83;99;97;110;110;101;114;40;110;101;119;32;70;105;108;101;40;34;99;111;109;112;114;97;115;46;116;120;116;34;41;41; -`,KD=` +`,nB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -72085,7 +72292,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;82;97;112;111;115;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,XD=` +`,iB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -72094,7 +72301,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,eB=` +`,aB=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -72129,7 +72336,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;116;114;97;100;97;32;109;97;105;115;32;108;111;110;103;97;58;32;34;32;43;32;109;97;105;115;76;111;110;103;97; -`,tB=` +`,sB=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;100;105;97;114;105;111;46;116;120;116;34;41;41; @@ -72138,7 +72345,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;91;93;32;108;105;110;104;97;115;32;61;32;116;101;120;116;111;46;115;112;108;105;116;40;34;92;110;34;41; -`,nB=` +`,rB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -72192,7 +72399,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;101;108;104;111;114;32;110;111;116;97;32;97;32;73;110;103;108;234;115;58;32;34;32;43;32;109;101;108;104;111;114;78;111;109;101;32;43;32;34;32;40;34;32;43;32;109;101;108;104;111;114;78;111;116;97;32;43;32;34;41;34; -`,iB=` +`,oB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -72201,7 +72408,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,aB=` +`,lB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -72242,7 +72449,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;77;233;100;105;97;32;100;101;32;77;97;116;101;109;225;116;105;99;97;58;32;34;32;43;32;115;111;109;97;32;47;32;113;117;97;110;116;105;100;97;100;101; -`,sB=` +`,uB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;116;117;114;109;97;46;99;115;118;34;41;41; @@ -72251,7 +72458,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,rB=` +`,mB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -72290,7 +72497,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,oB=` +`,cB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;122;111;111;46;106;115;111;110;34;41;41; @@ -72299,7 +72506,7 @@ lösung: vb-wald-loesung.visustruct 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;108;101;105;116;111;114;46;114;101;97;100;76;105;110;101;40;41; -`,lB=` +`,dB=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -72349,7 +72556,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;115;46;108;101;110;103;116;104;32;43;32;34;32;101;110;116;114;97;100;97;115;32;103;117;97;114;100;97;100;97;115;34; -`,uB=` +`,hB=` 83;116;114;105;110;103;91;93;32;110;111;109;101;115;32;61;32;123;34;76;117;100;119;105;103;34;44;32;34;90;111;114;97;34;44;32;34;82;97;112;111;115;97;34;125; @@ -72367,7 +72574,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,mB=` +`,gB=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -72420,7 +72627,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;40;108;105;110;104;97;115;46;108;101;110;103;116;104;32;45;32;49;41;32;43;32;34;32;97;110;105;109;97;105;115;32;103;117;97;114;100;97;100;111;115;34; -`,cB=` +`,pB=` 83;116;114;105;110;103;32;116;101;120;116;111;32;61;32;70;105;108;101;115;46;114;101;97;100;83;116;114;105;110;103;40;80;97;116;104;46;111;102;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -72441,7 +72648,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,dB=` +`,fB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -72485,7 +72692,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;113;117;97;110;116;105;100;97;100;101;32;43;32;34;32;102;114;97;115;101;115;32;103;117;97;114;100;97;100;97;115;34; -`,hB=` +`,bB=` 66;117;102;102;101;114;101;100;82;101;97;100;101;114;32;108;101;105;116;111;114;32;61;32;110;101;119;32;66;117;102;102;101;114;101;100;82;101;97;100;101;114;40;110;101;119;32;70;105;108;101;82;101;97;100;101;114;40;34;97;110;105;109;97;105;115;46;99;115;118;34;41;41; @@ -72506,7 +72713,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,gB=` +`,xB=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -72518,7 +72725,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;84;111;116;97;108;58;32;34;32;43;32;116;111;116;97;108; -`,pB=` +`,vB=` 105;110;112;117;116;58;32;105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;34;81;117;97;110;116;111;115;32;98;105;108;104;101;116;101;115;63;34; @@ -72530,7 +72737,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;116;111;116;97;108;32;61;32;113;117;97;110;116;105;100;97;100;101;32;42;32;56;46;53; -`,fB=` +`,yB=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -72554,7 +72761,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,bB=` +`,wB=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;80;114;105;109;101;105;114;111;32;110;250;109;101;114;111;34; @@ -72575,7 +72782,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,xB=` +`,zB=` 105;110;116;32;97;32;61;32;51; @@ -72599,7 +72806,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,vB=` +`,IB=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -72658,7 +72865,7 @@ lösung: vb-wald-loesung.visustruct -`,yB=` +`,kB=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -72717,7 +72924,7 @@ lösung: vb-wald-loesung.visustruct -`,wB=` +`,SB=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -72791,7 +72998,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,zB=` +`,TB=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -72840,7 +73047,7 @@ lösung: vb-wald-loesung.visustruct -`,IB=` +`,_B=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -72889,7 +73096,7 @@ lösung: vb-wald-loesung.visustruct -`,kB=` +`,jB=` 105;110;116;91;93;32;99;97;114;116;97;115;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -72947,7 +73154,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;67;111;109;112;97;114;97;231;245;101;115;58;32;34;32;43;32;99;111;109;112;97;114;97;99;111;101;115; -`,SB=` +`,CB=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -72966,7 +73173,7 @@ lösung: vb-wald-loesung.visustruct -`,TB=` +`,AB=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -72985,7 +73192,7 @@ lösung: vb-wald-loesung.visustruct -`,_B=` +`,PB=` 105;110;116;32;105;32;61;32;48; @@ -72998,7 +73205,7 @@ lösung: vb-wald-loesung.visustruct -`,jB=` +`,DB=` 105;110;116;32;110;117;109;101;114;111;32;61;32;53; @@ -73022,7 +73229,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;101;112;111;105;115;58;32;34;32;43;32;102;105;108;97;91;48;93;32;43;32;34;44;32;34;32;43;32;102;105;108;97;91;49;93; -`,CB=` +`,BB=` 105;110;116;32;105;32;61;32;48; @@ -73035,7 +73242,7 @@ lösung: vb-wald-loesung.visustruct -`,AB=` +`,OB=` 120;32;61;32;120;32;42;32;50; @@ -73044,7 +73251,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;111;32;115;117;98;112;114;111;103;114;97;109;97;58;32;120;32;61;32;34;32;43;32;120; -`,PB=` +`,MB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;110;111;109;101;32;34;78;111;109;101;32;112;114;243;112;114;105;111;34; @@ -73056,7 +73263,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;97;112;101;108;105;100;111;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,DB=` +`,ZB=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -73095,7 +73302,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,BB=` +`,LB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -73117,7 +73324,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;105;110;118;101;114;116;105;100;97; -`,OB=` +`,WB=` 83;116;114;105;110;103;32;108;105;110;104;97;32;61;32;34;76;117;100;119;105;103;59;98;111;100;101;59;55;34; @@ -73136,7 +73343,7 @@ lösung: vb-wald-loesung.visustruct -`,MB=` +`,EB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;102;114;97;115;101;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;102;114;97;115;101;34; @@ -73148,7 +73355,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;80;97;108;97;118;114;97;115;58;32;34;32;43;32;112;97;108;97;118;114;97;115;46;108;101;110;103;116;104; -`,ZB=` +`,NB=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;34;73;110;116;114;111;100;117;122;32;117;109;97;32;112;97;108;97;118;114;97;34; @@ -73180,7 +73387,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;250;109;101;114;111;32;100;101;32;97;58;32;34;32;43;32;113;117;97;110;116;105;100;97;100;101; -`,LB=` +`,FB=` 83;116;114;105;110;103;32;112;97;108;97;118;114;97;32;61;32;34;80;97;115;115;97;116;101;109;112;111;34; @@ -73204,7 +73411,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;108;97;118;114;97;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,WB=` +`,RB=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -73216,7 +73423,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;101;115;97;109;116;58;32;34;32;43;32;103;101;115;97;109;116; -`,EB=` +`,JB=` 105;110;112;117;116;58;32;105;110;116;32;97;110;122;97;104;108;32;34;87;105;101;32;118;105;101;108;101;32;75;97;114;116;101;110;63;34; @@ -73228,7 +73435,7 @@ lösung: vb-wald-loesung.visustruct 100;111;117;98;108;101;32;103;101;115;97;109;116;32;61;32;97;110;122;97;104;108;32;42;32;56;46;53; -`,NB=` +`,GB=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -73252,7 +73459,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,FB=` +`,HB=` 105;110;112;117;116;58;32;105;110;116;32;97;32;34;69;114;115;116;101;32;90;97;104;108;34; @@ -73273,7 +73480,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,RB=` +`,VB=` 105;110;116;32;97;32;61;32;51; @@ -73297,7 +73504,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;98;32;61;32;34;32;43;32;98; -`,JB=` +`,qB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -73356,7 +73563,7 @@ lösung: vb-wald-loesung.visustruct -`,GB=` +`,QB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -73415,7 +73622,7 @@ lösung: vb-wald-loesung.visustruct -`,HB=` +`,UB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -73489,7 +73696,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,VB=` +`,YB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;55;44;32;51;44;32;49;48;44;32;53;44;32;50;125; @@ -73538,7 +73745,7 @@ lösung: vb-wald-loesung.visustruct -`,qB=` +`,$B=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;56;44;32;52;44;32;49;49;44;32;52;44;32;54;125; @@ -73587,7 +73794,7 @@ lösung: vb-wald-loesung.visustruct -`,QB=` +`,KB=` 105;110;116;91;93;32;107;97;114;116;101;110;32;61;32;123;50;44;32;51;44;32;53;44;32;55;44;32;56;44;32;49;48;44;32;49;50;44;32;49;51;44;32;49;53;44;32;49;56;44;32;50;48;44;32;50;49;44;32;50;52;44;32;50;55;44;32;51;48;125; @@ -73645,7 +73852,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;86;101;114;103;108;101;105;99;104;101;58;32;34;32;43;32;118;101;114;103;108;101;105;99;104;101; -`,UB=` +`,XB=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -73664,7 +73871,7 @@ lösung: vb-wald-loesung.visustruct -`,YB=` +`,eO=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -73683,7 +73890,7 @@ lösung: vb-wald-loesung.visustruct -`,$B=` +`,tO=` 105;110;116;32;105;32;61;32;48; @@ -73696,7 +73903,7 @@ lösung: vb-wald-loesung.visustruct -`,KB=` +`,nO=` 105;110;116;32;122;97;104;108;32;61;32;53; @@ -73720,7 +73927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;78;97;99;104;104;101;114;58;32;34;32;43;32;114;101;105;104;101;91;48;93;32;43;32;34;44;32;34;32;43;32;114;101;105;104;101;91;49;93; -`,XB=` +`,iO=` 105;110;116;32;105;32;61;32;48; @@ -73733,7 +73940,7 @@ lösung: vb-wald-loesung.visustruct -`,eO=` +`,aO=` 120;32;61;32;120;32;42;32;50; @@ -73742,7 +73949,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;73;109;32;85;110;116;101;114;112;114;111;103;114;97;109;109;58;32;120;32;61;32;34;32;43;32;120; -`,tO=` +`,sO=` 105;110;116;32;97;98;115;116;97;110;100;32;61;32;109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41; @@ -73751,7 +73958,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;98;115;116;97;110;100;58;32;34;32;43;32;97;98;115;116;97;110;100;32;43;32;34;32;99;109;34;41; -`,nO=` +`,rO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -73777,7 +73984,7 @@ lösung: vb-wald-loesung.visustruct -`,iO=` +`,oO=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -73804,7 +74011,7 @@ lösung: vb-wald-loesung.visustruct -`,aO=` +`,lO=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -73822,7 +74029,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;101;116;76;101;100;40;48;44;32;50;53;53;44;32;48;41; -`,sO=` +`,uO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -73852,7 +74059,7 @@ lösung: vb-wald-loesung.visustruct -`,rO=` +`,mO=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;97;108;108;111;33;34;41; @@ -73864,7 +74071,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;73;99;104;32;98;105;110;32;86;105;115;117;66;111;116;34;41; -`,oO=` +`,cO=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -73916,7 +74123,7 @@ lösung: vb-wald-loesung.visustruct -`,lO=` +`,dO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -73927,7 +74134,7 @@ lösung: vb-wald-loesung.visustruct -`,uO=` +`,hO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -73938,7 +74145,7 @@ lösung: vb-wald-loesung.visustruct -`,mO=` +`,gO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -73949,7 +74156,7 @@ lösung: vb-wald-loesung.visustruct -`,cO=` +`,pO=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;86;105;115;117;66;111;116;34; @@ -73968,7 +74175,7 @@ lösung: vb-wald-loesung.visustruct -`,dO=` +`,fO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -73982,7 +74189,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,hO=` +`,bO=` 109;98;111;116;46;108;101;100;40;48;41;46;115;101;116;67;111;108;111;114;40;34;114;111;116;34;41; @@ -73994,7 +74201,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;108;101;100;40;52;41;46;115;101;116;67;111;108;111;114;40;34;103;114;252;110;34;41; -`,gO=` +`,xO=` 105;110;116;32;105;32;61;32;48; @@ -74010,7 +74217,7 @@ lösung: vb-wald-loesung.visustruct -`,pO=` +`,vO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -74038,7 +74245,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;112;97;114;107;116;33;34;41; -`,fO=` +`,yO=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -74056,7 +74263,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,bO=` +`,wO=` 83;116;114;105;110;103;91;93;32;102;97;114;98;101;110;32;61;32;123;34;114;111;116;34;44;32;34;103;101;108;98;34;44;32;34;103;114;252;110;34;44;32;34;98;108;97;117;34;44;32;34;108;105;108;97;34;125; @@ -74072,7 +74279,7 @@ lösung: vb-wald-loesung.visustruct -`,xO=` +`,zO=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -74098,7 +74305,7 @@ lösung: vb-wald-loesung.visustruct -`,vO=` +`,IO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -74114,7 +74321,7 @@ lösung: vb-wald-loesung.visustruct -`,yO=` +`,kO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -74125,7 +74332,7 @@ lösung: vb-wald-loesung.visustruct -`,wO=` +`,SO=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -74145,7 +74352,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;83;99;104;114;105;116;116;101;41; -`,zO=` +`,TO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -74159,7 +74366,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;41; -`,IO=` +`,_O=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -74189,7 +74396,7 @@ lösung: vb-wald-loesung.visustruct -`,kO=` +`,jO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -74203,7 +74410,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;116;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,SO=` +`,CO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -74227,7 +74434,7 @@ lösung: vb-wald-loesung.visustruct -`,TO=` +`,AO=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -74253,7 +74460,7 @@ lösung: vb-wald-loesung.visustruct -`,_O=` +`,PO=` 105;110;116;32;105;32;61;32;48; @@ -74286,7 +74493,7 @@ lösung: vb-wald-loesung.visustruct -`,jO=` +`,DO=` @@ -74313,7 +74520,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;71;101;115;116;111;112;112;116;41; -`,CO=` +`,BO=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -74332,7 +74539,7 @@ lösung: vb-wald-loesung.visustruct -`,AO=` +`,OO=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -74348,7 +74555,7 @@ lösung: vb-wald-loesung.visustruct -`,PO=` +`,MO=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -74364,7 +74571,7 @@ lösung: vb-wald-loesung.visustruct -`,DO=` +`,ZO=` 105;110;116;32;105;32;61;32;48; @@ -74386,7 +74593,7 @@ lösung: vb-wald-loesung.visustruct -`,BO=` +`,LO=` 105;110;116;32;105;32;61;32;48; @@ -74405,7 +74612,7 @@ lösung: vb-wald-loesung.visustruct -`,OO=` +`,WO=` 105;110;116;32;105;32;61;32;49; @@ -74418,7 +74625,7 @@ lösung: vb-wald-loesung.visustruct -`,MO=` +`,EO=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -74456,7 +74663,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108;119;101;114;116;41; -`,ZO=` +`,NO=` 105;110;116;32;105;32;61;32;51; @@ -74475,7 +74682,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,LO=` +`,FO=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -74484,7 +74691,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;84;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,WO=` +`,RO=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -74528,7 +74735,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;83;116;111;112;40;41; -`,EO=` +`,JO=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -74547,7 +74754,7 @@ lösung: vb-wald-loesung.visustruct -`,NO=` +`,GO=` 105;110;116;32;105;32;61;32;48; @@ -74569,7 +74776,7 @@ lösung: vb-wald-loesung.visustruct -`,FO=` +`,HO=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -74586,7 +74793,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,RO=` +`,VO=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -74604,7 +74811,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,JO=` +`,qO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -74640,7 +74847,7 @@ lösung: vb-wald-loesung.visustruct -`,GO=` +`,QO=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;65;107;107;117;58;32;34;32;43;32;109;98;111;116;46;103;101;116;66;97;116;116;101;114;121;40;41;32;43;32;34;32;37;34;41; @@ -74659,7 +74866,7 @@ lösung: vb-wald-loesung.visustruct -`,HO=` +`,UO=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;98;108;97;117;34;41; @@ -74683,7 +74890,7 @@ lösung: vb-wald-loesung.visustruct -`,VO=` +`,YO=` 105;110;116;32;105;32;61;32;48; @@ -74705,7 +74912,7 @@ lösung: vb-wald-loesung.visustruct -`,qO=` +`,$O=` 105;110;116;32;105;32;61;32;51; @@ -74724,7 +74931,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;76;111;115;33;34;41; -`,QO=` +`,KO=` 105;110;116;32;105;32;61;32;49; @@ -74737,7 +74944,7 @@ lösung: vb-wald-loesung.visustruct -`,UO=` +`,XO=` 105;110;116;32;105;32;61;32;48; @@ -74770,7 +74977,7 @@ lösung: vb-wald-loesung.visustruct -`,YO=` +`,eM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -74786,7 +74993,7 @@ lösung: vb-wald-loesung.visustruct -`,$O=` +`,tM=` 105;110;116;32;105;32;61;32;48; @@ -74805,7 +75012,7 @@ lösung: vb-wald-loesung.visustruct -`,KO=` +`,nM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -74849,7 +75056,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,XO=` +`,iM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -74868,7 +75075,7 @@ lösung: vb-wald-loesung.visustruct -`,eM=` +`,aM=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -74898,7 +75105,7 @@ lösung: vb-wald-loesung.visustruct -`,tM=` +`,sM=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -74926,7 +75133,7 @@ lösung: vb-wald-loesung.visustruct -`,nM=` +`,rM=` 105;110;116;32;105;32;61;32;48; @@ -74948,7 +75155,7 @@ lösung: vb-wald-loesung.visustruct -`,iM=` +`,oM=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -74968,7 +75175,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;99;104;114;105;116;116;101;58;32;34;32;43;32;115;99;104;114;105;116;116;101;41; -`,aM=` +`,lM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -74982,7 +75189,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,sM=` +`,uM=` @@ -75009,7 +75216,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;71;101;115;116;111;112;112;116;34;41; -`,rM=` +`,mM=` 83;116;114;105;110;103;32;116;101;120;116;32;61;32;34;72;97;108;108;111;32;75;108;97;115;115;101;34; @@ -75018,7 +75225,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;116;101;120;116;32;43;32;34;32;40;34;32;43;32;116;101;120;116;46;108;101;110;103;116;104;40;41;32;43;32;34;41;34;41; -`,oM=` +`,cM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -75032,7 +75239,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,lM=` +`,dM=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;62;32;45;53;32;38;38;32;109;98;111;116;46;103;101;116;82;111;108;108;40;41;32;60;32;53; @@ -75048,7 +75255,7 @@ lösung: vb-wald-loesung.visustruct -`,uM=` +`,hM=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -75062,7 +75269,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,mM=` +`,gM=` 105;110;116;32;105;32;61;32;48; @@ -75097,7 +75304,7 @@ lösung: vb-wald-loesung.visustruct -`,cM=` +`,pM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -75123,7 +75330,7 @@ lösung: vb-wald-loesung.visustruct -`,dM=` +`,fM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -75135,7 +75342,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,hM=` +`,bM=` 105;110;116;32;115;101;105;116;101;32;61;32;50;48; @@ -75157,7 +75364,7 @@ lösung: vb-wald-loesung.visustruct -`,gM=` +`,xM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -75191,7 +75398,7 @@ lösung: vb-wald-loesung.visustruct -`,pM=` +`,vM=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;76;117;100;119;105;103;34; @@ -75210,7 +75417,7 @@ lösung: vb-wald-loesung.visustruct -`,fM=` +`,yM=` 33;109;98;111;116;46;103;101;116;67;111;108;111;114;40;41;46;101;113;117;97;108;115;40;34;114;111;116;34;41; @@ -75254,7 +75461,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,bM=` +`,wM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -75280,7 +75487,7 @@ lösung: vb-wald-loesung.visustruct -`,xM=` +`,zM=` 105;110;116;91;93;32;116;111;101;110;101;32;61;32;123;50;54;50;44;32;50;57;52;44;32;51;51;48;44;32;51;52;57;44;32;51;57;50;125; @@ -75296,7 +75503,7 @@ lösung: vb-wald-loesung.visustruct -`,vM=` +`,IM=` 105;110;116;91;93;32;119;101;114;116;101;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -75334,7 +75541,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;77;105;116;116;101;108;119;101;114;116;58;32;34;32;43;32;109;105;116;116;101;108;119;101;114;116;41; -`,yM=` +`,kM=` 105;110;116;32;105;32;61;32;48; @@ -75400,7 +75607,7 @@ lösung: vb-wald-loesung.visustruct -`,wM=` +`,SM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;51;48; @@ -75416,7 +75623,7 @@ lösung: vb-wald-loesung.visustruct -`,zM=` +`,TM=` 109;98;111;116;46;103;101;116;66;114;105;103;104;116;110;101;115;115;40;41;32;60;32;50;48; @@ -75433,7 +75640,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;90;122;122;34;41; -`,IM=` +`,_M=` @@ -75460,7 +75667,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;52;52;48;44;32;51;48;48;41; -`,kM=` +`,jM=` 109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41;32;124;124;32;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -75476,7 +75683,7 @@ lösung: vb-wald-loesung.visustruct -`,SM=` +`,CM=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -75551,7 +75758,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,TM=` +`,AM=` 113;117;97;100;114;97;116;40;51;48;41; @@ -75560,7 +75767,7 @@ lösung: vb-wald-loesung.visustruct 113;117;97;100;114;97;116;40;53;48;41; -`,_M=` +`,PM=` 105;110;116;32;105;32;61;32;48; @@ -75615,7 +75822,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,jM=` +`,DM=` 105;110;116;32;105;32;61;32;48; @@ -75631,7 +75838,7 @@ lösung: vb-wald-loesung.visustruct -`,CM=` +`,BM=` 105;110;116;32;105;32;61;32;48; @@ -75654,7 +75861,7 @@ lösung: vb-wald-loesung.visustruct -`,AM=` +`,OM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -75668,7 +75875,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;49;56;48;41; -`,PM=` +`,MM=` 109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;62;32;50;48;32;124;124;32;109;98;111;116;46;103;101;116;80;105;116;99;104;40;41;32;60;32;45;50;48; @@ -75684,7 +75891,7 @@ lösung: vb-wald-loesung.visustruct -`,DM=` +`,ZM=` 105;110;116;32;105;32;61;32;48; @@ -75736,7 +75943,7 @@ lösung: vb-wald-loesung.visustruct -`,BM=` +`,LM=` 105;110;116;32;115;101;105;116;101;32;61;32;50;48; @@ -75758,7 +75965,7 @@ lösung: vb-wald-loesung.visustruct -`,OM=` +`,WM=` 105;110;116;32;115;101;105;116;101;32;61;32;50;48; @@ -75780,7 +75987,7 @@ lösung: vb-wald-loesung.visustruct -`,MM=` +`,EM=` 105;110;116;32;105;32;61;32;49; @@ -75796,7 +76003,7 @@ lösung: vb-wald-loesung.visustruct -`,ZM=` +`,NM=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -75810,7 +76017,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,LM=` +`,FM=` 105;110;116;32;114;117;110;100;101;32;61;32;49; @@ -75844,7 +76051,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;53;48;41; -`,WM=` +`,RM=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -75878,7 +76085,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34;41; -`,EM=` +`,JM=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -75896,7 +76103,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;112;108;97;121;84;111;110;101;40;51;57;50;44;32;51;48;48;41; -`,NM=` +`,GM=` 105;110;116;32;105;32;61;32;48; @@ -75918,7 +76125,7 @@ lösung: vb-wald-loesung.visustruct -`,FM=` +`,HM=` 105;110;116;32;108;105;110;107;115;32;61;32;57;57; @@ -75950,7 +76157,7 @@ lösung: vb-wald-loesung.visustruct -`,RM=` +`,VM=` 105;110;116;32;105;32;61;32;48; @@ -75966,7 +76173,7 @@ lösung: vb-wald-loesung.visustruct -`,JM=` +`,qM=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53;32;38;38;32;109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -75982,7 +76189,7 @@ lösung: vb-wald-loesung.visustruct -`,GM=` +`,QM=` 105;110;116;32;115;101;105;116;101;32;61;32;51;48; @@ -76001,7 +76208,7 @@ lösung: vb-wald-loesung.visustruct -`,HM=` +`,UM=` 105;110;116;32;105;32;61;32;48; @@ -76034,7 +76241,7 @@ lösung: vb-wald-loesung.visustruct -`,VM=` +`,YM=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -76073,7 +76280,7 @@ lösung: vb-wald-loesung.visustruct -`,qM=` +`,$M=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -76089,7 +76296,7 @@ lösung: vb-wald-loesung.visustruct -`,QM=` +`,KM=` 105;110;116;32;115;116;114;101;99;107;101;32;61;32;122;101;110;116;105;109;101;116;101;114;40;51;41; @@ -76101,13 +76308,13 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;83;116;114;101;99;107;101;58;32;34;32;43;32;115;116;114;101;99;107;101;32;43;32;34;32;99;109;34;41; -`,UM=` +`,XM=` 114;101;116;117;114;110;32;117;109;100;114;101;104;117;110;103;101;110;32;42;32;50;48; -`,YM=` +`,eZ=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -76127,7 +76334,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,$M=` +`,tZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;118;111;114;110;97;109;101;32;34;86;111;114;110;97;109;101;34; @@ -76139,7 +76346,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;118;111;114;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;32;34;32;43;32;110;97;99;104;110;97;109;101;46;99;104;97;114;65;116;40;48;41;32;43;32;34;46;34; -`,KM=` +`,nZ=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;90;105;101;103;101;110;98;111;99;107;34; @@ -76178,7 +76385,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,XM=` +`,iZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -76200,7 +76407,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;114;117;101;99;107;119;97;101;114;116;115; -`,eZ=` +`,aZ=` 83;116;114;105;110;103;32;122;101;105;108;101;32;61;32;34;76;117;100;119;105;103;59;71;101;105;223;98;111;99;107;59;55;34; @@ -76219,7 +76426,7 @@ lösung: vb-wald-loesung.visustruct -`,tZ=` +`,sZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;115;97;116;122;32;34;83;97;116;122;32;101;105;110;103;101;98;101;110;34; @@ -76231,7 +76438,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;87;246;114;116;101;114;58;32;34;32;43;32;119;111;101;114;116;101;114;46;108;101;110;103;116;104; -`,nZ=` +`,rZ=` 105;110;112;117;116;58;32;83;116;114;105;110;103;32;119;111;114;116;32;34;87;111;114;116;32;101;105;110;103;101;98;101;110;34; @@ -76263,7 +76470,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;110;122;97;104;108;32;101;58;32;34;32;43;32;97;110;122;97;104;108; -`,iZ=` +`,oZ=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;71;101;105;223;98;111;99;107;34; @@ -76287,14 +76494,14 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;119;111;114;116;46;116;111;85;112;112;101;114;67;97;115;101;40;41; -`,aZ=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. +`,lZ=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. raster: 3 .......Z #####.## ........ ##.##### >....... -`,sZ=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. +`,uZ=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. raster: 3 ........Z ######.## @@ -76303,20 +76510,20 @@ raster: 3 ......... .######## >........ -`,rZ=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. +`,mZ=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. raster: 3 Z.... ###.. ..... ..### ^.... -`,oZ=`// Fahre bis Rot: kurzer Weg +`,cZ=`// Fahre bis Rot: kurzer Weg ..... ..r.. ..... ..... ..^.. -`,lZ=`// Fahre bis Rot: erst kommt ein grünes Feld +`,dZ=`// Fahre bis Rot: erst kommt ein grünes Feld ..... ..r.. ..... @@ -76325,21 +76532,21 @@ Z.... ..... ..... ..^.. -`,uZ=`// Bis Blau, bei Grün piepen +`,hZ=`// Bis Blau, bei Grün piepen ..... ..b.. ..... ..g.. ..... ..^.. -`,mZ=`// Bis Blau, ohne grünes Feld +`,gZ=`// Bis Blau, ohne grünes Feld ..... ..b.. ..... ..... ..... ..^.. -`,cZ=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. +`,pZ=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. ......... .....r... .....o... @@ -76350,7 +76557,7 @@ Z.... ......... ......... ..^...... -`,dZ=`// Hindernis ausweichen: zwei Klötze im Weg. +`,fZ=`// Hindernis ausweichen: zwei Klötze im Weg. ......... .......r. .......o. @@ -76365,7 +76572,7 @@ Z.... ......... ......... .^....... -`,hZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. +`,bZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. ........... .Z......... ........... @@ -76377,7 +76584,7 @@ Z.... ........... .........<. ........... -`,gZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. +`,xZ=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. ........... .........Z. ........... @@ -76389,7 +76596,7 @@ Z.... ........... .>......... ........... -`,pZ=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. +`,vZ=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. ######### ......... ......... @@ -76404,7 +76611,7 @@ Z.... ......... ..^...... linie: 2,12 2,8 4,5 4,0.6 -`,fZ=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. +`,yZ=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. ######### ......... ......... @@ -76419,7 +76626,7 @@ linie: 2,12 2,8 4,5 4,0.6 ......... ......^.. linie: 6,12 6,8 4,5 4,0.6 -`,bZ=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. +`,wZ=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. ......... .....r... .....o... @@ -76433,7 +76640,7 @@ linie: 6,12 6,8 4,5 4,0.6 ......... ..^...... linie: 2,11 2,8 5,4 5,1.5 -`,xZ=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. +`,zZ=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. ........... ...r....... ...o....... @@ -76449,7 +76656,7 @@ linie: 2,11 2,8 5,4 5,1.5 ........... .......^... linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 -`,vZ=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. +`,IZ=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. #....#### #....#### #....#### @@ -76462,7 +76669,7 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,yZ=`// Einparken: Die Lücke liegt weiter vorn. +`,kZ=`// Einparken: Die Lücke liegt weiter vorn. #....#### #..b....# #.....o.# @@ -76475,14 +76682,14 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,wZ=`// Bis zur Linie: der schwarze Rand ist nah +`,SZ=`// Bis zur Linie: der schwarze Rand ist nah ..... ===== ..... ..... ..^.. ..... -`,zZ=`// Bis zur Linie: der schwarze Rand ist weiter weg +`,TZ=`// Bis zur Linie: der schwarze Rand ist weiter weg ..... ===== ..... @@ -76492,17 +76699,17 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 ..... ..^.. ..... -`,IZ=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. +`,_Z=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. raster: 3 ......... >#.#.#.#Z ......... -`,kZ=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. +`,jZ=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. raster: 3 ..#..###. >....o... ....##### -`,SZ=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. +`,CZ=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. raster: 3 .#.#. .#o#. @@ -76510,12 +76717,12 @@ raster: 3 .#... ..... ..^.. -`,TZ=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. +`,AZ=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. raster: 3 .......... >..#.#..#Z .......... -`,_Z=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. +`,PZ=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. raster: 3 .Z. .#. @@ -76524,7 +76731,7 @@ raster: 3 ... ... .^. -`,jZ=`// Wand vorn? Vor dem mBot2 ist viel Platz. +`,DZ=`// Wand vorn? Vor dem mBot2 ist viel Platz. ##### ..... ..... @@ -76534,14 +76741,14 @@ raster: 3 ..... ..^.. ..... -`,CZ=`// Bis zur Wand: kurzer Weg +`,BZ=`// Bis zur Wand: kurzer Weg ##### ..... ..Z.. ..... ..... ..^.. -`,AZ=`// Bis zur Wand: langer Weg +`,OZ=`// Bis zur Wand: langer Weg ##### ..... ..Z.. @@ -76557,7 +76764,7 @@ raster: 3 ..... ..... ..^.. -`,PZ=`// Bis zur Wand: mittlerer Weg +`,MZ=`// Bis zur Wand: mittlerer Weg ##### ..... ..Z.. @@ -76568,26 +76775,26 @@ raster: 3 ..... ..... ..^.. -`,DZ=`// Wand vorn? Die Wand steht direkt vor dem mBot2. +`,ZZ=`// Wand vorn? Die Wand steht direkt vor dem mBot2. ##### ..... ..^.. ..... -`,BZ=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? +`,LZ=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? ..... ..... ..... ..o.. ..... ..^.. -`,OZ=`// Fahre bis zum Ziel: kurzer Weg, keine Wand +`,WZ=`// Fahre bis zum Ziel: kurzer Weg, keine Wand ..... ..Z.. ..... ..... ..^.. ..... -`,MZ=`// Fahre bis zum Ziel: langer Weg, keine Wand +`,EZ=`// Fahre bis zum Ziel: langer Weg, keine Wand ..... ..Z.. ..... @@ -76600,50 +76807,50 @@ raster: 3 ..... ..^.. ..... -`,ZZ=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,LZ=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,WZ=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,EZ=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,NZ=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,FZ=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,RZ=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,JZ=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,GZ=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,HZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",VZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",qZ=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,QZ=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,UZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",YZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",$Z="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",KZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",XZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",eL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",tL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",nL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",iL=""+new URL("l12-while-zu-for-DddKE_8R.svg",import.meta.url).href,aL=""+new URL("l13-verschachtelt-tabelle-jipYA7Ld.svg",import.meta.url).href,sL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",rL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",oL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",lL=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,uL=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,mL=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,cL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",dL=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,hL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",gL=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,pL=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,fL=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,bL=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,xL=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,vL=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,yL=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,wL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",zL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",IL=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,kL=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,SL=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,TL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",_L="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",jL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",CL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",AL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmhpbGY8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",PL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPnRlbXA8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",DL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmF1eDwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9Ijk3IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiMxZjNhOGEiIHN0cm9rZS13aWR0aD0iMS42IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiPgo8cGF0aCBkPSJNMTAwIDgzIFExOTAgODEgMzAwIDg0Ii8+CjxwYXRoIGQ9Ik0xNjIgNTYgUTE2MCAxNTAgMTYzIDE5NCIvPgo8cGF0aCBkPSJNMjI4IDU2IFEyMzAgMTUwIDIyNyAxOTQiLz4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMCAyMzIpIHJvdGF0ZSgtMzgpIj4KPHJlY3QgeD0iMCIgeT0iLTkiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIGZpbGw9IiNmNWMwMDAiIHN0cm9rZT0iIzhhNmQwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjAiIHkxPSItMyIgeDI9IjEyMCIgeTI9Ii0zIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIxMjAiIHkyPSIzIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8cmVjdCB4PSIxMjAiIHk9Ii05IiB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIGZpbGw9IiNiOGI4YjgiIHN0cm9rZT0iIzc3NyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHJlY3QgeD0iMTMyIiB5PSItOSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiByeD0iNSIgZmlsbD0iI2YwOGE5YSIgc3Ryb2tlPSIjYTI0YTU4IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNMCAtOSBMLTI2IDAgTDAgOSBaIiBmaWxsPSIjZTljOWEwIiBzdHJva2U9IiM4YTZkNGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxwYXRoIGQ9Ik0tMTcgLTMgTC0yNiAwIEwtMTcgMyBaIiBmaWxsPSIjMzMzIi8+CjwvZz4KPC9zdmc+Cg==",BL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",OL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",ML="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",ZL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",LL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",WL=""+new URL("l12-while-zu-for-Cu-8sS5S.svg",import.meta.url).href,EL=""+new URL("l13-verschachtelt-tabelle-CmsFvxQ5.svg",import.meta.url).href,NL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",FL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",RL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",JL=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,GL=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,HL=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,VL=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,qL=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,QL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",UL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",YL=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,$L=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,KL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",XL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",eW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",tW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",nW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",iW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",aW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",sW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",rW=""+new URL("l12-while-zu-for-CM2--y57.svg",import.meta.url).href,oW=""+new URL("l13-verschachtelt-tabelle-CR2WySqU.svg",import.meta.url).href,lW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",uW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",mW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",cW=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,dW=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,hW=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,gW=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,pW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",fW=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,bW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",xW=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,vW=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,yW=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,wW=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,zW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",IW=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,kW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",SW=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function TW(i){const e=[];for(const t of i.replace(/\r\n/g,` +`,NZ=""+new URL("ada-lovelace-DS_988PF.jpg",import.meta.url).href,FZ=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,RZ=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,JZ=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,GZ=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,HZ=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,VZ=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,qZ=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,QZ=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,UZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlB1dCBhIGN1cCBvbiB0aGUgdGFibGU8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjEzMyI+U3VnYXIgd2FudGVkPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5BZGQgc3VnYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+VGVhIHN0aWxsIHRvbyBob3Q/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+V2FpdCAxIG1pbnV0ZTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5EcmluayB0aGUgdGVhPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIzOTUiPkVuZDwvdGV4dD4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZm9udC13ZWlnaHQ9IjYwMCI+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjE2OCIgZmlsbD0iIzI0OGEzZCI+eWVzPC90ZXh0PgogICAgPHRleHQgeD0iMjQyIiB5PSIxMjIiIGZpbGw9IiNkNzAwMTUiPm5vPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPnllczwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMzIwIiBmaWxsPSIjZDcwMDE1Ij5ubzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5TdGFydCBvciBlbmQ8L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ0MyI+U3RhdGVtZW50PC90ZXh0PgogICAgPHRleHQgeD0iODYiIHk9IjQ3MyI+RGVjaXNpb248L3RleHQ+CiAgICA8dGV4dCB4PSIyNjYiIHk9IjQ3MyI+SW5wdXQgb3Igb3V0cHV0PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",YZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",$Z=""+new URL("l03-lochkarte-beschriftet-BjBFZjzb.svg",import.meta.url).href,KZ=""+new URL("l03-lochkarte-BB3rWQOm.svg",import.meta.url).href,XZ="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjg4IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByaWNlPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlc8L3RzcGFuPml0aDx0c3BhbiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj5UPC90c3Bhbj5heDwvdGV4dD4KPGxpbmUgeDE9IjE4MiIgeTE9IjU0IiB4Mj0iMTgyIiB5Mj0iODIiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIvPgo8bGluZSB4MT0iMjc4IiB5MT0iNTQiIHgyPSIyNzgiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxwYXRoIGQ9Ik0yMCAyNzIgSDQ0MCIgc3Ryb2tlPSIjZTVkM2IwIiBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTU2IDE3MiBMMTUwIDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTE1MCAyMjYgTDE1NiAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxNjEiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMyOCAxNzIgTDMzMiAyMjYiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMzIgMjI2IEwzMjggMjYyIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMzMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzMzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0xMjAgMTQwIEMxMDQgMTUwIDEwNCAxNzYgMTEwIDE5NiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8ZWxsaXBzZSBjeD0iMTEwIiBjeT0iMjAwIiByeD0iNSIgcnk9IjkiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNzIgQzEwOCAxNTIgMTE0IDEyOCAxMzQgMTIyIEMxNDggMTIwIDE1NCA4NCAxODIgODQgQzIxMCA4NCAyMDggMTI2IDIzMCAxMjQgQzI1MiAxMjYgMjUwIDg0IDI3OCA4NCBDMzA2IDg0IDMwOCAxMjIgMzE4IDEyOCBDMzQwIDEzMiAzNDggMTU4IDM2NCAxNTggQzM3NiAxNTggMzc4IDEyNCAzODIgMTEwIEMzODYgOTggNDAwIDk2IDQxMiA5OSBDNDI0IDEwMiA0MzAgMTA4IDQyOCAxMTYgQzQyNiAxMjMgNDE0IDEyNCA0MDQgMTIyIEMzOTYgMTIyIDM5NCAxMjggMzk0IDEzNiBDMzk0IDE2MiAzODggMTg0IDM2NiAxODYgQzM1MCAxODggMzQwIDE4MiAzMzAgMTc4IEMyNjAgMTg4IDIwMCAxODggMTQwIDE4MiBDMTMwIDE4MCAxMjQgMTc3IDEyMCAxNzIgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTM0IDE3MiBMMTI4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTEyOCAyMjYgTDEzNCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMTI4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIxMzkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTMwOCAxNzIgTDMxMiAyMjYiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSIxMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zMTIgMjI2IEwzMDggMjYyIiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxjaXJjbGUgY3g9IjMxMiIgY3k9IjIyNiIgcj0iNiIgZmlsbD0iIzdhNTUzMCIgb3BhY2l0eT0iMC41NSIvPgo8ZWxsaXBzZSBjeD0iMzEzIiBjeT0iMjY3IiByeD0iMTEiIHJ5PSI1IiBmaWxsPSIjN2E1NTMwIi8+CjxwYXRoIGQ9Ik0zOTAgMTAzIEwzODYgOTIgTDM5OCAxMDAgWiIgZmlsbD0iI2QyYTU2YSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPGNpcmNsZSBjeD0iNDA2IiBjeT0iMTA3IiByPSIzLjIiIGZpbGw9IiMxYzFjMWUiLz4KPHBhdGggZD0iTTQwMSAxMDQgUTQwNiAxMDEgNDExIDEwNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDIyIDEwNyBxNCAxIDUgNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjN2E1NTMwIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNNDE2IDExOSBRNDIyIDExOCA0MjcgMTE3IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPgo=",eL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",tL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",nL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",iL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",aL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",sL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",rL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4ob25seSBvbmNlKTwvdHNwYW4+PC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNzYiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSIxNyIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY2hlY2sgdGhlIGNvbmRpdGlvbjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjEzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIxNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoiBydW4gdGhlIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBzdGVwLCBlLmcuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+YmFjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50byDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZG9uZTwvdGV4dD4KPC9zdmc+Cg==",oL=""+new URL("l12-while-zu-for-DddKE_8R.svg",import.meta.url).href,lL=""+new URL("l13-verschachtelt-tabelle-jipYA7Ld.svg",import.meta.url).href,uL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtYmVycyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5JbmRleDwvdGV4dD4KICA8dGV4dCB4PSI5MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjA8L3RleHQ+PHJlY3QgeD0iNjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iOTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj4yPC90ZXh0PgogIDx0ZXh0IHg9IjE1MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjE8L3RleHQ+PHJlY3QgeD0iMTIwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjQ8L3RleHQ+CiAgPHRleHQgeD0iMjEwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MjwvdGV4dD48cmVjdCB4PSIxODAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjEwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NjwvdGV4dD4KICA8dGV4dCB4PSIyNzAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4zPC90ZXh0PjxyZWN0IHg9IjI0MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNzAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj44PC90ZXh0PgogIDx0ZXh0IHg9IjMzMCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjQ8L3RleHQ+PHJlY3QgeD0iMzAwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMzMCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjEwPC90ZXh0PgogIDx0ZXh0IHg9IjIwIiB5PSI5MCIgZmlsbD0iIzZlNmU3MyIgZm9udC1zaXplPSIxMiI+VmFsdWU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+PGxpbmUgeDE9IjkwIiB5MT0iMTQwIiB4Mj0iOTAiIHkyPSIxMTIiLz48bGluZSB4MT0iMzMwIiB5MT0iMTQwIiB4Mj0iMzMwIiB5Mj0iMTEyIi8+PC9nPgogIDxnIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dGV4dCB4PSI5MCIgeT0iMTU2Ij5udW1iZXJzWzBdIGlzIDI8L3RleHQ+PHRleHQgeD0iMzMwIiB5PSIxNTYiPm51bWJlcnNbNF0gaXMgMTA8L3RleHQ+PC9nPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTgyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj41IHNsb3RzLCBjb3VudGluZyBzdGFydHMgYXQgMDogdGhlIGxhc3QgaW5kZXggaXMgNC48L3RleHQ+Cjwvc3ZnPgo=",mL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGF0b3IuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPnNvdXJjZSBjb2RlIGluIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTU4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjYjkxYzFjIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5tYWNoaW5lIGNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxlIGFnYWluPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmZvciBldmVyeSBzeXN0ZW08L3RleHQ+Cjwvc3ZnPgo=",cL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRpbWVzVGFibGUuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5zb3VyY2UgY29kZSwgZm9yIHBlb3BsZTwvdGV4dD4KICA8cmVjdCB4PSIxMTAiIHk9IjEwNCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXdlaWdodD0iNjAwIj5UaW1lc1RhYmxlLmNsYXNzPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMTQzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5ieXRlY29kZTogQ0EgRkUgQkEgQkUg4oCmPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iMTAyIi8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iODAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIyMjAiIHkyPSIxOTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxNTIiIHgyPSIzNjAiIHkyPSIxOTYiLz4KICA8L2c+CiAgPHRleHQgeD0iMjMwIiB5PSI4NiI+Y29tcGlsZXIgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPldyaXRlIG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnJ1biBhbnl3aGVyZTwvdGV4dD4KPC9zdmc+Cg==",dL=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,hL=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,gL=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,pL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Mb29raW5nIGZvciB0aGUgOS4gVGhlIGNhcmRzIGFyZSBtaXhlZCB1cC48L3RleHQ+CjxnPjxyZWN0IHg9IjE0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIzNC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij43PC90ZXh0Pjx0ZXh0IHg9IjM0LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjZGMyNjI2Ij7imaU8L3RleHQ+PC9nPgo8dGV4dCB4PSIzNC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMzQuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4xLjwvdGV4dD4KPGc+PHJlY3QgeD0iNjIiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjgyLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjM8L3RleHQ+PHRleHQgeD0iODIuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZoDwvdGV4dD48L2c+Cjx0ZXh0IHg9IjgyLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSI4Mi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjIuPC90ZXh0Pgo8Zz48cmVjdCB4PSIxMTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjEzMC4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjZGMyNjI2Ij4xMDwvdGV4dD48dGV4dCB4PSIxMzAuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpjwvdGV4dD48L2c+Cjx0ZXh0IHg9IjEzMC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTMwLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+My48L3RleHQ+CjxnPjxyZWN0IHg9IjE1OCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTc4LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjU8L3RleHQ+PHRleHQgeD0iMTc4LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaM8L3RleHQ+PC9nPgo8dGV4dCB4PSIxNzguMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjQuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyMDYiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMyIvPjx0ZXh0IHg9IjIyNi4wIiB5PSI3NS4yIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj45PC90ZXh0Pjx0ZXh0IHg9IjIyNi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iMjI2LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzE1ODAzZCI+4pyTPC90ZXh0Pgo8dGV4dCB4PSIyMjYuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj41LjwvdGV4dD4KPGc+PHJlY3QgeD0iMjU0IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIyNTgiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjMwMiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzA2IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8Zz48cmVjdCB4PSIzNTAiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjM1NCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPHRleHQgeD0iMTQiIHk9IjE2OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+VHVybiB0aGVtIG92ZXIgZnJvbSBsZWZ0IHRvIHJpZ2h0OjwvdGV4dD48dGV4dCB4PSIxNCIgeT0iMTg4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5BZnRlciA1IGNvbXBhcmlzb25zIHRoZSA5IGlzIGZvdW5kLjwvdGV4dD4KPC9zdmc+Cg==",fL=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,bL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPkNhbGwgYnkgdmFsdWU6IGEgY29weTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1iZXI8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZG91YmxlSXQ8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb3B5PC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTUwIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj54IGJlY29tZXMgMTAsIGJ1dCBudW1iZXIgc3RheXMgNS48L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNjgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPkxpa2UgYSBwaG90b2NvcHk6IHdyaXRpbmcgb24gdGhlIGNvcHk8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPmRvZXMgbm90IGNoYW5nZSB0aGUgb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5DYWxsIGJ5IHJlZmVyZW5jZTogdGhlIHNhbWUgYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPk1haW4gcHJvZ3JhbTwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+cm93PC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5jbGVhcjwvdGV4dD4KPHRleHQgeD0iMjYwIiB5PSIzMDAiPnNlYXRzPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5UaGVyZSBpcyBvbmx5IG9uZSBhcnJheS4gV2hhdCBjbGVhciBjaGFuZ2VzIHRocm91Z2ggc2VhdHMsPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDM0IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj50aGUgbWFpbiBwcm9ncmFtIHNlZXMgdW5kZXIgcm93LjwvdGV4dD4KPC9zdmc+Cg==",xL=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,vL=""+new URL("grace-hopper-DltOT1I5.jpg",import.meta.url).href,yL=""+new URL("hedy-lamarr-MFZMAlPQ.jpg",import.meta.url).href,wL=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,zL=""+new URL("katherine-johnson-k17EjVTs.jpg",import.meta.url).href,IL=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,kL=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,SL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5TdGFydDwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iNzYiPlRhc3NlIGF1ZiBkZW4gVGlzY2ggc3RlbGxlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5adWNrZXIgZ2V3w7xuc2NodD88L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjE5NCI+WnVja2VyIGhpbmVpbmdlYmVuPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSIyODUiPlRlZSBub2NoIHp1IGhlacOfPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjMyNy41IiB5PSIyODUiPjEgTWludXRlIHdhcnRlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5UZWUgdHJpbmtlbjwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzk1Ij5FbmRlPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5qYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MiIgeT0iMTIyIiBmaWxsPSIjZDcwMDE1Ij5uZWluPC90ZXh0PgogICAgPHRleHQgeD0iMjQwIiB5PSIyNzQiIGZpbGw9IiMyNDhhM2QiPmphPC90ZXh0PgogICAgPHRleHQgeD0iMTU2IiB5PSIzMjAiIGZpbGw9IiNkNzAwMTUiPm5laW48L3RleHQ+CiAgPC9nPgogIDwhLS0gTGVnZW5kZSAtLT4KICA8bGluZSB4MT0iMTAiIHkxPSI0MTgiIHgyPSIzOTAiIHkyPSI0MTgiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxnIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiPgogICAgPHJlY3QgeD0iNDAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiByeD0iOSIgZmlsbD0iI2QxZjJkOSIvPgogICAgPHJlY3QgeD0iMjIwIiB5PSI0MzAiIHdpZHRoPSIzNiIgaGVpZ2h0PSIxOCIgZmlsbD0iI2U1ZjBmZiIvPgogICAgPHBhdGggZD0iTTU4IDQ1OCBMNzYgNDY5IEw1OCA0ODAgTDQwIDQ2OSBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8cGF0aCBkPSJNMjI2IDQ2MCBMMjU2IDQ2MCBMMjUwIDQ3OCBMMjIwIDQ3OCBaIiBmaWxsPSIjZjJlNmZmIi8+CiAgPC9nPgogIDxnIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiMzYTNhM2MiPgogICAgPHRleHQgeD0iODYiIHk9IjQ0MyI+U3RhcnQgb2RlciBFbmRlPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NDMiPkFud2Vpc3VuZzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPlZlcnp3ZWlndW5nPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVpbi0gb2RlciBBdXNnYWJlPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",TL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",_L=""+new URL("l03-lochkarte-beschriftet-7hmU_7ct.svg",import.meta.url).href,jL=""+new URL("l03-lochkarte-gzfFEatc.svg",import.meta.url).href,CL=""+new URL("l03-zuse-lochstreifen-B87kqGex.svg",import.meta.url).href,AL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMzM2IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWlzPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPk08L3RzcGFuPml0PHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPlM8L3RzcGFuPnRldWVyPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",PL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",DL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",BL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGlua3M8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+U2FmdDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aGlsZjwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bGVlcjwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cmVjaHRzPC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5XYXNzZXI8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iNzAiIHk9IjI0NyI+MTogaGlsZiA9IGxpbmtzPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNDciPjI6IGxpbmtzID0gcmVjaHRzPC90ZXh0PgogICAgPHRleHQgeD0iMzMwIiB5PSIyNDciPjM6IHJlY2h0cyA9IGhpbGY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",OL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmhpbGY8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",ML="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPnRlbXA8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iOTciIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjI2MiIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+CjwvZz4KPGcgc3Ryb2tlPSIjMWYzYThhIiBzdHJva2Utd2lkdGg9IjEuNiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj4KPHBhdGggZD0iTTEwMCA4MyBRMTkwIDgxIDMwMCA4NCIvPgo8cGF0aCBkPSJNMTYyIDU2IFExNjAgMTUwIDE2MyAxOTQiLz4KPHBhdGggZD0iTTIyOCA1NiBRMjMwIDE1MCAyMjcgMTk0Ii8+CjwvZz4KPC9nPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMjMyKSByb3RhdGUoLTM4KSI+CjxyZWN0IHg9IjAiIHk9Ii05IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjE4IiBmaWxsPSIjZjVjMDAwIiBzdHJva2U9IiM4YTZkMDAiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxsaW5lIHgxPSIwIiB5MT0iLTMiIHgyPSIxMjAiIHkyPSItMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMTIwIiB5Mj0iMyIgc3Ryb2tlPSIjZDlhODAwIiBzdHJva2Utd2lkdGg9IjEiLz4KPHJlY3QgeD0iMTIwIiB5PSItOSIgd2lkdGg9IjEyIiBoZWlnaHQ9IjE4IiBmaWxsPSIjYjhiOGI4IiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxyZWN0IHg9IjEzMiIgeT0iLTkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxOCIgcng9IjUiIGZpbGw9IiNmMDhhOWEiIHN0cm9rZT0iI2EyNGE1OCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHBhdGggZD0iTTAgLTkgTC0yNiAwIEwwIDkgWiIgZmlsbD0iI2U5YzlhMCIgc3Ryb2tlPSIjOGE2ZDRhIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNLTE3IC0zIEwtMjYgMCBMLTE3IDMgWiIgZmlsbD0iIzMzMyIvPgo8L2c+Cjwvc3ZnPgo=",ZL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzAwIj4KPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KPGcgdHJhbnNmb3JtPSJyb3RhdGUoLTMgMjAwIDE1MCkiPgo8cmVjdCB4PSI0NCIgeT0iMjQiIHdpZHRoPSIyOTAiIGhlaWdodD0iMjU2IiBmaWxsPSIjMDAwIiBvcGFjaXR5PSIwLjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDYpIi8+CjxyZWN0IHg9IjQ0IiB5PSIyNCIgd2lkdGg9IjI5MCIgaGVpZ2h0PSIyNTYiIGZpbGw9IiNmZmZkZjYiIHN0cm9rZT0iI2M5YzJhZCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iNTgiIHgyPSIzMzQiIHkyPSI1OCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iODAiIHgyPSIzMzQiIHkyPSI4MCIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTAyIiB4Mj0iMzM0IiB5Mj0iMTAyIiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxMjQiIHgyPSIzMzQiIHkyPSIxMjQiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjE0NiIgeDI9IjMzNCIgeTI9IjE0NiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMTY4IiB4Mj0iMzM0IiB5Mj0iMTY4IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIxOTAiIHgyPSIzMzQiIHkyPSIxOTAiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI0NCIgeTE9IjIxMiIgeDI9IjMzNCIgeTI9IjIxMiIgc3Ryb2tlPSIjYmNkNGVlIiBzdHJva2Utd2lkdGg9IjEiLz4KPGxpbmUgeDE9IjQ0IiB5MT0iMjM0IiB4Mj0iMzM0IiB5Mj0iMjM0IiBzdHJva2U9IiNiY2Q0ZWUiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iNDQiIHkxPSIyNTYiIHgyPSIzMzQiIHkyPSIyNTYiIHN0cm9rZT0iI2JjZDRlZSIgc3Ryb2tlLXdpZHRoPSIxIi8+CjxsaW5lIHgxPSI3OCIgeTE9IjI0IiB4Mj0iNzgiIHkyPSIyODAiIHN0cm9rZT0iI2U4YTBhMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGcgZm9udC1mYW1pbHk9IidTZWdvZSBQcmludCcsICdCcmFkbGV5IEhhbmQnLCAnQ2hhbGtib2FyZCBTRScsICdDb21pYyBTYW5zIE1TJywgY3Vyc2l2ZSIgZmlsbD0iIzFmM2E4YSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+Cjx0ZXh0IHg9IjEzMCIgeT0iNzUiIGZvbnQtc2l6ZT0iMTkiIGZvbnQtd2VpZ2h0PSJib2xkIj5hPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9Ijc1IiBmb250LXNpemU9IjE5IiBmb250LXdlaWdodD0iYm9sZCI+YjwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSI3NSIgZm9udC1zaXplPSIxOSIgZm9udC13ZWlnaHQ9ImJvbGQiPmF1eDwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSI5NyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTk1IiB5PSI5NyIgZm9udC1zaXplPSIxOCI+4oCTPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9Ijk3IiBmb250LXNpemU9IjE4Ij7igJM8L3RleHQ+Cjx0ZXh0IHg9IjEzMCIgeT0iMTE5IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIxOTUiIHk9IjExOSIgZm9udC1zaXplPSIxOCI+NTwvdGV4dD4KPHRleHQgeD0iMjYyIiB5PSIxMTkiIGZvbnQtc2l6ZT0iMTgiPuKAkzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNDEiIGZvbnQtc2l6ZT0iMTgiPjM8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTQxIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE0MSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxNjMiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTYzIiBmb250LXNpemU9IjE4Ij41PC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE2MyIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPHRleHQgeD0iMTMwIiB5PSIxODUiIGZvbnQtc2l6ZT0iMTgiPjU8L3RleHQ+Cjx0ZXh0IHg9IjE5NSIgeT0iMTg1IiBmb250LXNpemU9IjE4Ij4zPC90ZXh0Pgo8dGV4dCB4PSIyNjIiIHk9IjE4NSIgZm9udC1zaXplPSIxOCI+MzwvdGV4dD4KPC9nPgo8ZyBzdHJva2U9IiMxZjNhOGEiIHN0cm9rZS13aWR0aD0iMS42IiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiPgo8cGF0aCBkPSJNMTAwIDgzIFExOTAgODEgMzAwIDg0Ii8+CjxwYXRoIGQ9Ik0xNjIgNTYgUTE2MCAxNTAgMTYzIDE5NCIvPgo8cGF0aCBkPSJNMjI4IDU2IFEyMzAgMTUwIDIyNyAxOTQiLz4KPC9nPgo8L2c+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMCAyMzIpIHJvdGF0ZSgtMzgpIj4KPHJlY3QgeD0iMCIgeT0iLTkiIHdpZHRoPSIxMjAiIGhlaWdodD0iMTgiIGZpbGw9IiNmNWMwMDAiIHN0cm9rZT0iIzhhNmQwMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPGxpbmUgeDE9IjAiIHkxPSItMyIgeDI9IjEyMCIgeTI9Ii0zIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIxMjAiIHkyPSIzIiBzdHJva2U9IiNkOWE4MDAiIHN0cm9rZS13aWR0aD0iMSIvPgo8cmVjdCB4PSIxMjAiIHk9Ii05IiB3aWR0aD0iMTIiIGhlaWdodD0iMTgiIGZpbGw9IiNiOGI4YjgiIHN0cm9rZT0iIzc3NyIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHJlY3QgeD0iMTMyIiB5PSItOSIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE4IiByeD0iNSIgZmlsbD0iI2YwOGE5YSIgc3Ryb2tlPSIjYTI0YTU4IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8cGF0aCBkPSJNMCAtOSBMLTI2IDAgTDAgOSBaIiBmaWxsPSIjZTljOWEwIiBzdHJva2U9IiM4YTZkNGEiIHN0cm9rZS13aWR0aD0iMS4yIi8+CjxwYXRoIGQ9Ik0tMTcgLTMgTC0yNiAwIEwtMTcgMyBaIiBmaWxsPSIjMzMzIi8+CjwvZz4KPC9zdmc+Cg==",LL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",WL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMTkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+CiAgPHJlY3Qgd2lkdGg9IjQ0MCIgaGVpZ2h0PSIxOTAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmE8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmI8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIyMjAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPmEgJmFtcDsmYW1wOyBiPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTQiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjM1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNzAwIj5hIHx8IGI8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iMzUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI3MDAiPiFhPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0NiIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSI2MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjE0MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyNjAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIzNDAiIHk9IjQ2IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjM4MC4wIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjEwMCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzMDAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSI3OCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIzODAuMCIgeT0iOTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iNjAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIj5mYWxzZTwvdGV4dD4KICA8cmVjdCB4PSIxMDAiIHk9IjExMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiM4ZThlOTMiLz48dGV4dCB4PSIxNDAuMCIgeT0iMTMxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj50cnVlPC90ZXh0PgogIDxyZWN0IHg9IjE4MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjIyMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiPmZhbHNlPC90ZXh0PgogIDxyZWN0IHg9IjI2MCIgeT0iMTEwIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjMwMC4wIiB5PSIxMzEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnRydWU8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxMTAiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjEzMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTQyIiB3aWR0aD0iODAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iIzhlOGU5MyIvPjx0ZXh0IHg9IjYwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTAwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMTQwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMTgwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMjIwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMjYwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZlZTJlMiIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzAwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iI2I5MWMxYyI+ZmFsc2U8L3RleHQ+CiAgPHJlY3QgeD0iMzQwIiB5PSIxNDIiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjOGU4ZTkzIi8+PHRleHQgeD0iMzgwLjAiIHk9IjE2MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCI+dHJ1ZTwvdGV4dD4KICA8bGluZSB4MT0iMTgwIiB5MT0iMTQiIHgyPSIxODAiIHkyPSIxNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIzIi8+Cjwvc3ZnPgo=",EL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",NL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",FL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIFN0YXJ0IDx0c3BhbiBmaWxsPSIjNmU2ZTczIj4obnVyIGVpbm1hbCk8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIEJlZGluZ3VuZyBwcsO8ZmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGiIEluaGFsdCBhdXNmw7xocmVuPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMjAwIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGjIFNjaHJpdHQsIHouIEIuIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+enVyw7xjazwvdGV4dD4KICA8dGV4dCB4PSI0OCIgeT0iMTc2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj56dSDikaE8L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSI4NCIgZmlsbD0iI2I5MWMxYyIgZm9udC13ZWlnaHQ9IjYwMCI+ZmFsc2U8L3RleHQ+CiAgPHRleHQgeD0iMzM2IiB5PSI5OCI+ZmVydGlnPC90ZXh0Pgo8L3N2Zz4K",RL=""+new URL("l12-while-zu-for-Cu-8sS5S.svg",import.meta.url).href,JL=""+new URL("l13-verschachtelt-tabelle-CmsFvxQ5.svg",import.meta.url).href,GL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gemFobGVuID0gezIsIDQsIDYsIDgsIDEwfTwvdGV4dD4KICA8dGV4dCB4PSIyMCIgeT0iNTQiIGZpbGw9IiM2ZTZlNzMiIGZvbnQtc2l6ZT0iMTIiPkluZGV4PC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5XZXJ0PC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIxLjgiIG1hcmtlci1lbmQ9InVybCgjYSkiPjxsaW5lIHgxPSI5MCIgeTE9IjE0MCIgeDI9IjkwIiB5Mj0iMTEyIi8+PGxpbmUgeDE9IjMzMCIgeTE9IjE0MCIgeDI9IjMzMCIgeTI9IjExMiIvPjwvZz4KICA8ZyBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRleHQgeD0iOTAiIHk9IjE1NiI+emFobGVuWzBdIGlzdCAyPC90ZXh0Pjx0ZXh0IHg9IjMzMCIgeT0iMTU2Ij56YWhsZW5bNF0gaXN0IDEwPC90ZXh0PjwvZz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+NSBGw6RjaGVyLCBnZXrDpGhsdCB3aXJkIGFiIDA6IGRlciBsZXR6dGUgSW5kZXggaXN0IDQuPC90ZXh0Pgo8L3N2Zz4K",HL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPnJlY2huZXIuY3BwPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMzYTNhM2MiPlF1ZWxsY29kZSBpbiBDKys8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSI4MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iODAiIHkxPSIxMjYiIHgyPSI4MCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMjIwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSIxMjYiIHgyPSIyMjAiIHkyPSIxNTYiLz4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjM2MCIgeTI9Ijk0Ii8+CiAgICA8bGluZSB4MT0iMzYwIiB5MT0iMTI2IiB4Mj0iMzYwIiB5Mj0iMTU2Ii8+CiAgPC9nPgogIDxyZWN0IHg9IjE4IiB5PSI5NiIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzMCIgcng9IjE1IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMS41Ii8+CiAgPHRleHQgeD0iODAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjE4MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+TWFzY2hpbmVuY29kZTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iOTYiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzAiIHJ4PSIxNSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5Db21waWxlcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPk1hc2NoaW5lbmNvZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Q29tcGlsZXI8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMTgxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5NYXNjaGluZW5jb2RlPC90ZXh0PgogIDxyZWN0IHg9IjI5OCIgeT0iMTk0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+TGludXg8L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+RsO8ciBqZWRlcyBTeXN0ZW08L3RleHQ+CiAgPHRleHQgeD0iMjIwIiB5PSIyNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc3R5bGU9Iml0YWxpYyI+bmV1IMO8YmVyc2V0emVuPC90ZXh0Pgo8L3N2Zz4K",VL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPkVpbm1hbGVpbnMuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5RdWVsbGNvZGUsIGbDvHIgTWVuc2NoZW48L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+RWlubWFsZWlucy5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Qnl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPkNvbXBpbGVyIGphdmFjPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIxOCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSI4MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5XaW5kb3dzPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMTk4IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2RjZmNlNyIgc3Ryb2tlPSIjMTU4MDNkIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE1OCIgeT0iMjM0IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjM2IiByeD0iNiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjI1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+bWFjT1M8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5FaW5tYWwgc2NocmVpYmVuLDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjMxOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj7DvGJlcmFsbCBhdXNmw7xocmVuPC90ZXh0Pgo8L3N2Zz4K",qL=""+new URL("margaret-hamilton-pYPKs1sU.jpg",import.meta.url).href,QL=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,UL=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,YL=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,$L=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,KL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgNDkyIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDkyIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiPgogICAgPCEtLSBTdGFydCAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMTAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMjgiIHJ4PSIxNCIgZmlsbD0iI2QxZjJkOSIvPgogICAgPGxpbmUgeDE9IjE1MCIgeTE9IjM4IiB4Mj0iMTUwIiB5Mj0iNTQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gQW53ZWlzdW5nIC0tPgogICAgPHJlY3QgeD0iNTAiIHk9IjU2IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iODYiIHgyPSIxNTAiIHkyPSI5OCIgbWFya2VyLWVuZD0idXJsKCNhKSIvPgogICAgPCEtLSBSYXV0ZSAxIC0tPgogICAgPHBhdGggZD0iTTE1MCAxMDAgTDIzNSAxMjggTDE1MCAxNTYgTDY1IDEyOCBaIiBmaWxsPSIjZmZmNGQ2Ii8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMTU2IiB4Mj0iMTUwIiB5Mj0iMTcyIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8cmVjdCB4PSI1MCIgeT0iMTc0IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8bGluZSB4MT0iMTUwIiB5MT0iMjA0IiB4Mj0iMTUwIiB5Mj0iMjUwIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIG5laW4tV2VnIHVtIGRlbiBLYXN0ZW4gaGVydW0gLS0+CiAgICA8cG9seWxpbmUgcG9pbnRzPSIyMzUsMTI4IDI4NSwxMjggMjg1LDIyMiAxNTAsMjIyIiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgICA8IS0tIFJhdXRlIDIgLS0+CiAgICA8cGF0aCBkPSJNMTUwIDI1MiBMMjM1IDI4MCBMMTUwIDMwOCBMNjUgMjgwIFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxsaW5lIHgxPSIyMzUiIHkxPSIyODAiIHgyPSIyNjgiIHkyPSIyODAiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjI3MCIgeT0iMjY1IiB3aWR0aD0iMTE1IiBoZWlnaHQ9IjMwIiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8IS0tIHp1csO8Y2sgenVyIFByw7xmdW5nIC0tPgogICAgPHBvbHlsaW5lIHBvaW50cz0iMzI3LDI2NSAzMjcsMjM4IDE1MCwyMzgiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzMDgiIHgyPSIxNTAiIHkyPSIzMjYiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDxyZWN0IHg9IjUwIiB5PSIzMjgiIHdpZHRoPSIyMDAiIGhlaWdodD0iMzAiIGZpbGw9IiNlNWYwZmYiLz4KICAgIDxsaW5lIHgxPSIxNTAiIHkxPSIzNTgiIHgyPSIxNTAiIHkyPSIzNzQiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICAgIDwhLS0gRW5kZSAtLT4KICAgIDxyZWN0IHg9IjEwMCIgeT0iMzc2IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjI4IiByeD0iMTQiIGZpbGw9IiNkMWYyZDkiLz4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSI+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI5Ij5JbsOtY2lvPC90ZXh0PgogICAgPHRleHQgeD0iMTUwIiB5PSI3NiI+UMO0ciB1bWEgY2jDoXZlbmEgbmEgbWVzYTwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTMzIj5RdWVyIGHDp8O6Y2FyPzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMTk0Ij5KdW50YXIgYcOnw7pjYXI8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjI4NSI+Q2jDoSBtdWl0byBxdWVudGU/PC90ZXh0PgogICAgPHRleHQgeD0iMzI3LjUiIHk9IjI4NSI+RXNwZXJhciAxIG1pbnV0bzwvdGV4dD4KICAgIDx0ZXh0IHg9IjE1MCIgeT0iMzQ4Ij5CZWJlciBvIGNow6E8L3RleHQ+CiAgICA8dGV4dCB4PSIxNTAiIHk9IjM5NSI+RmltPC90ZXh0PgogIDwvZz4KICA8ZyBmb250LXNpemU9IjEyIiBmb250LXdlaWdodD0iNjAwIj4KICAgIDx0ZXh0IHg9IjE1NiIgeT0iMTY4IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIyNDIiIHk9IjEyMiIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICAgIDx0ZXh0IHg9IjI0MCIgeT0iMjc0IiBmaWxsPSIjMjQ4YTNkIj5zaW08L3RleHQ+CiAgICA8dGV4dCB4PSIxNTYiIHk9IjMyMCIgZmlsbD0iI2Q3MDAxNSI+bsOjbzwvdGV4dD4KICA8L2c+CiAgPCEtLSBMZWdlbmRlIC0tPgogIDxsaW5lIHgxPSIxMCIgeTE9IjQxOCIgeDI9IjM5MCIgeTI9IjQxOCIgc3Ryb2tlPSIjZDFkMWQ2Ii8+CiAgPGcgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuNSI+CiAgICA8cmVjdCB4PSI0MCIgeT0iNDMwIiB3aWR0aD0iMzYiIGhlaWdodD0iMTgiIHJ4PSI5IiBmaWxsPSIjZDFmMmQ5Ii8+CiAgICA8cmVjdCB4PSIyMjAiIHk9IjQzMCIgd2lkdGg9IjM2IiBoZWlnaHQ9IjE4IiBmaWxsPSIjZTVmMGZmIi8+CiAgICA8cGF0aCBkPSJNNTggNDU4IEw3NiA0NjkgTDU4IDQ4MCBMNDAgNDY5IFoiIGZpbGw9IiNmZmY0ZDYiLz4KICAgIDxwYXRoIGQ9Ik0yMjYgNDYwIEwyNTYgNDYwIEwyNTAgNDc4IEwyMjAgNDc4IFoiIGZpbGw9IiNmMmU2ZmYiLz4KICA8L2c+CiAgPGcgZm9udC1zaXplPSIxMiIgZmlsbD0iIzNhM2EzYyI+CiAgICA8dGV4dCB4PSI4NiIgeT0iNDQzIj5JbsOtY2lvIG91IGZpbTwvdGV4dD4KICAgIDx0ZXh0IHg9IjI2NiIgeT0iNDQzIj5JbnN0cnXDp8OjbzwvdGV4dD4KICAgIDx0ZXh0IHg9Ijg2IiB5PSI0NzMiPkRlY2lzw6NvPC90ZXh0PgogICAgPHRleHQgeD0iMjY2IiB5PSI0NzMiPkVudHJhZGEgb3Ugc2HDrWRhPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",XL="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",eW=""+new URL("l03-lochkarte-beschriftet-D1QjqGFo.svg",import.meta.url).href,tW=""+new URL("l03-lochkarte-BSn6oWaS.svg",import.meta.url).href,nW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgMjkwIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSI+CjxyZWN0IHdpZHRoPSI0NjAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+Cjx0ZXh0IHg9IjUwIiB5PSI0NCIgZm9udC1zaXplPSI0MCIgZmlsbD0iIzZlNmU3MyIgdGV4dExlbmd0aD0iMjY0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiPnByZWNvPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkM8L3RzcGFuPm9tPHRzcGFuIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPkk8L3RzcGFuPnZhPC90ZXh0Pgo8bGluZSB4MT0iMTgyIiB5MT0iNTQiIHgyPSIxODIiIHkyPSI4MiIgc3Ryb2tlPSIjMDA3YWZmIiBzdHJva2Utd2lkdGg9IjIuNSIgc3Ryb2tlLWRhc2hhcnJheT0iNSA0Ii8+CjxsaW5lIHgxPSIyNTQiIHkxPSI1NCIgeDI9IjI1NCIgeTI9IjgyIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiLz4KPHBhdGggZD0iTTIwIDI3MiBINDQwIiBzdHJva2U9IiNlNWQzYjAiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xNTYgMTcyIEwxNTAgMjI2IiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTUwIDIyNiBMMTU2IDI2MiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjE2MSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMzA0IDE3MiBMMzA4IDIyNiIgc3Ryb2tlPSIjYjg4YTUyIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTMwOCAyMjYgTDMwNCAyNjIiIHN0cm9rZT0iI2I4OGE1MiIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMzA4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIzMDkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTEyMCAxNDAgQzEwNCAxNTAgMTA0IDE3NiAxMTAgMTk2IiBmaWxsPSJub25lIiBzdHJva2U9IiNiODhhNTIiIHN0cm9rZS13aWR0aD0iNSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIyMDAiIHJ4PSI1IiByeT0iOSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMTIwIDE3MiBDMTA4IDE1MiAxMTQgMTI4IDEzNCAxMjIgQzE0OCAxMjAgMTU0IDg0IDE4MiA4NCBDMjEwIDg0IDIwOCAxMjYgMjE4IDEyNCBDMjI4IDEyNiAyMjYgODQgMjU0IDg0IEMyODIgODQgMjg0IDEyMiAyOTQgMTI4IEMzMTYgMTMyIDMyNCAxNTggMzQwIDE1OCBDMzUyIDE1OCAzNTQgMTI0IDM1OCAxMTAgQzM2MiA5OCAzNzYgOTYgMzg4IDk5IEM0MDAgMTAyIDQwNiAxMDggNDA0IDExNiBDNDAyIDEyMyAzOTAgMTI0IDM4MCAxMjIgQzM3MiAxMjIgMzcwIDEyOCAzNzAgMTM2IEMzNzAgMTYyIDM2NCAxODQgMzQyIDE4NiBDMzI2IDE4OCAzMTYgMTgyIDMwNiAxNzggQzI0OCAxODggMTg4IDE4OCAxNDAgMTgyIEMxMzAgMTgwIDEyNCAxNzcgMTIwIDE3MiBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMi41IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMzQgMTcyIEwxMjggMjI2IiBzdHJva2U9IiNkMmE1NmEiIHN0cm9rZS13aWR0aD0iMTMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTI4IDIyNiBMMTM0IDI2MiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIxMjgiIGN5PSIyMjYiIHI9IjYiIGZpbGw9IiM3YTU1MzAiIG9wYWNpdHk9IjAuNTUiLz4KPGVsbGlwc2UgY3g9IjEzOSIgY3k9IjI2NyIgcng9IjExIiByeT0iNSIgZmlsbD0iIzdhNTUzMCIvPgo8cGF0aCBkPSJNMjg0IDE3MiBMMjg4IDIyNiIgc3Ryb2tlPSIjZDJhNTZhIiBzdHJva2Utd2lkdGg9IjEzIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPHBhdGggZD0iTTI4OCAyMjYgTDI4NCAyNjIiIHN0cm9rZT0iI2QyYTU2YSIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPGNpcmNsZSBjeD0iMjg4IiBjeT0iMjI2IiByPSI2IiBmaWxsPSIjN2E1NTMwIiBvcGFjaXR5PSIwLjU1Ii8+CjxlbGxpcHNlIGN4PSIyODkiIGN5PSIyNjciIHJ4PSIxMSIgcnk9IjUiIGZpbGw9IiM3YTU1MzAiLz4KPHBhdGggZD0iTTM2NiAxMDMgTDM2MiA5MiBMMzc0IDEwMCBaIiBmaWxsPSIjZDJhNTZhIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8Y2lyY2xlIGN4PSIzODIiIGN5PSIxMDciIHI9IjMuMiIgZmlsbD0iIzFjMWMxZSIvPgo8cGF0aCBkPSJNMzc3IDEwNCBRMzgyIDEwMSAzODcgMTA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTggMTA3IHE0IDEgNSA0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3YTU1MzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0zOTIgMTE5IFEzOTggMTE4IDQwMyAxMTciIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzdhNTUzMCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+Cg==",iW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",aW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",sW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMzAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZXNxdWVyZGE8L3RleHQ+CiAgPHRleHQgeD0iNzUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+c3VtbzwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YXV4PC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52YXppbzwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+ZGlyZWl0YTwvdGV4dD4KICA8dGV4dCB4PSIzMjUiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+w6FndWE8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8cGF0aCBkPSJNODggMTA0IEMxMTAgNzAsIDE2MCA3MCwgMTg2IDEwNCIvPgogICAgPHBhdGggZD0iTTMxOCAxMDQgQzI3MCAxNSwgMTMwIDE1LCA4MiAxMDQiLz4KICAgIDxwYXRoIGQ9Ik0yMTQgMTA0IEMyNDAgNzAsIDI5MCA3MCwgMzEyIDEwNCIvPgogIDwvZz4KICA8ZyBmb250LXdlaWdodD0iNzAwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4KICAgIDxjaXJjbGUgY3g9IjEzNyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMTM3IiB5PSI4NSI+MTwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjIwMCIgY3k9IjM4IiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjAwIiB5PSI0MyI+MjwvdGV4dD4KICAgIDxjaXJjbGUgY3g9IjI2MyIgY3k9IjgwIiByPSIxMSIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+PHRleHQgeD0iMjYzIiB5PSI4NSI+MzwvdGV4dD4KICA8L2c+CiAgPGcgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiPgogICAgPHRleHQgeD0iMjAwIiB5PSIyNTAiPjE6IGF1eCA9IGVzcXVlcmRhPC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIyNjgiPjI6IGVzcXVlcmRhID0gZGlyZWl0YTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjg2Ij4zOiBkaXJlaXRhID0gYXV4PC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",rW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",oW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",lW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",uW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",mW=""+new URL("l12-while-zu-for-CM2--y57.svg",import.meta.url).href,cW=""+new URL("l13-verschachtelt-tabelle-CR2WySqU.svg",import.meta.url).href,dW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMTkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxNCI+aW50W10gbnVtZXJvcyA9IHsyLCA0LCA2LCA4LCAxMH08L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjU0IiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj7DjW5kaWNlPC90ZXh0PgogIDx0ZXh0IHg9IjkwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MDwvdGV4dD48cmVjdCB4PSI2MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjI8L3RleHQ+CiAgPHRleHQgeD0iMTUwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+MTwvdGV4dD48cmVjdCB4PSIxMjAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTUwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+NDwvdGV4dD4KICA8dGV4dCB4PSIyMTAiIHk9IjU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIiBmb250LXdlaWdodD0iNzAwIj4yPC90ZXh0PjxyZWN0IHg9IjE4MCIgeT0iNjIiIHdpZHRoPSI2MCIgaGVpZ2h0PSI0NiIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyMTAiIHk9IjkyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE4IiBmb250LXdlaWdodD0iNjAwIj42PC90ZXh0PgogIDx0ZXh0IHg9IjI3MCIgeT0iNTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPjM8L3RleHQ+PHJlY3QgeD0iMjQwIiB5PSI2MiIgd2lkdGg9IjYwIiBoZWlnaHQ9IjQ2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjI3MCIgeT0iOTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI2MDAiPjg8L3RleHQ+CiAgPHRleHQgeD0iMzMwIiB5PSI1NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiIgZm9udC13ZWlnaHQ9IjcwMCI+NDwvdGV4dD48cmVjdCB4PSIzMDAiIHk9IjYyIiB3aWR0aD0iNjAiIGhlaWdodD0iNDYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzMwIiB5PSI5MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjYwMCI+MTA8L3RleHQ+CiAgPHRleHQgeD0iMjAiIHk9IjkwIiBmaWxsPSIjNmU2ZTczIiBmb250LXNpemU9IjEyIj5WYWxvcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj48bGluZSB4MT0iOTAiIHkxPSIxNDAiIHgyPSI5MCIgeTI9IjExMiIvPjxsaW5lIHgxPSIzMzAiIHkxPSIxNDAiIHgyPSIzMzAiIHkyPSIxMTIiLz48L2c+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjx0ZXh0IHg9IjkwIiB5PSIxNTYiPm51bWVyb3NbMF0gw6kgMjwvdGV4dD48dGV4dCB4PSIzMzAiIHk9IjE1NiI+bnVtZXJvc1s0XSDDqSAxMDwvdGV4dD48L2c+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPjUgcG9zacOnw7VlcywgY29udGEtc2UgYSBwYXJ0aXIgZGUgMDogbyDDumx0aW1vIMOtbmRpY2Ugw6kgNC48L3RleHQ+Cjwvc3ZnPgo=",hW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMjkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMjkwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPmNhbGN1bGFkb3JhLmNwcDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlIGVtIEMrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjgwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjEyNiIgeDI9IjgwIiB5Mj0iMTU2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iNjAiIHgyPSIyMjAiIHkyPSI5NCIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjEyNiIgeDI9IjIyMCIgeTI9IjE1NiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjYwIiB4Mj0iMzYwIiB5Mj0iOTQiLz4KICAgIDxsaW5lIHgxPSIzNjAiIHkxPSIxMjYiIHgyPSIzNjAiIHkyPSIxNTYiLz4KICA8L2c+CiAgPHJlY3QgeD0iMTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSI4MCIgeT0iMTE2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jb21waWxhZG9yPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIxNTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZmVlMmUyIiBzdHJva2U9IiNiOTFjMWMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5NCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+V2luZG93czwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIxNTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9Ijk2IiB3aWR0aD0iMTI0IiBoZWlnaHQ9IjMwIiByeD0iMTUiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIzNjAiIHk9IjExNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+Y29tcGlsYWRvcjwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE1OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmZWUyZTIiIHN0cm9rZT0iI2I5MWMxYyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIxODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmPDs2RpZ28gbcOhcXVpbmE8L3RleHQ+CiAgPHJlY3QgeD0iMjk4IiB5PSIxOTQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjM2MCIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5MaW51eDwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjI1OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zdHlsZT0iaXRhbGljIj5Db21waWxhciBkZSBub3ZvPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPnBhcmEgY2FkYSBzaXN0ZW1hPC90ZXh0Pgo8L3N2Zz4K",gW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NDAgMzMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0NDAiIGhlaWdodD0iMzMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMiIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI0OCIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjIwIiB5PSIzMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtd2VpZ2h0PSI2MDAiPlRhYnVhZGEuamF2YTwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjM2EzYTNjIj5jw7NkaWdvLWZvbnRlLCBwYXJhIHBlc3NvYXM8L3RleHQ+CiAgPHJlY3QgeD0iMTEwIiB5PSIxMDQiIHdpZHRoPSIyMjAiIGhlaWdodD0iNDgiIHJ4PSI2IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC13ZWlnaHQ9IjYwMCI+VGFidWFkYS5jbGFzczwvdGV4dD4KICA8dGV4dCB4PSIyMjAiIHk9IjE0MyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzNhM2EzYyI+Ynl0ZWNvZGU6IENBIEZFIEJBIEJFIOKApjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMjAiIHkxPSI2MCIgeDI9IjIyMCIgeTI9IjEwMiIvPgogICAgPGxpbmUgeDE9IjIyMCIgeTE9IjE1MiIgeDI9IjgwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMjIwIiB5Mj0iMTk2Ii8+CiAgICA8bGluZSB4MT0iMjIwIiB5MT0iMTUyIiB4Mj0iMzYwIiB5Mj0iMTk2Ii8+CiAgPC9nPgogIDx0ZXh0IHg9IjIzMCIgeT0iODYiPmNvbXBpbGFkb3IgamF2YWM8L3RleHQ+CiAgPHJlY3QgeD0iMTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iODAiIHk9IjIyMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+SlZNPC90ZXh0PgogIDxyZWN0IHg9IjE4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjgwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPldpbmRvd3M8L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIxOTgiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGNmY2U3IiBzdHJva2U9IiMxNTgwM2QiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjIxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5KVk08L3RleHQ+CiAgPHJlY3QgeD0iMTU4IiB5PSIyMzQiIHdpZHRoPSIxMjQiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIyMCIgeT0iMjU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5tYWNPUzwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjE5OCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyMjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPkpWTTwvdGV4dD4KICA8cmVjdCB4PSIyOTgiIHk9IjIzNCIgd2lkdGg9IjEyNCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzYwIiB5PSIyNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiPkxpbnV4PC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMjk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPkVzY3JldmVyIHVtYSB2ZXosPC90ZXh0PgogIDx0ZXh0IHg9IjIyMCIgeT0iMzE4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXN0eWxlPSJpdGFsaWMiPmV4ZWN1dGFyIGVtIHF1YWxxdWVyIGxhZG88L3RleHQ+Cjwvc3ZnPgo=",pW=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,fW=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,bW=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,xW=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,vW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5Qcm9jdXJhLXNlIG8gOS4gQXMgY2FydGFzIGVzdMOjbyBiYXJhbGhhZGFzLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5WaXJhciBkYSBlc3F1ZXJkYSBwYXJhIGEgZGlyZWl0YTo8L3RleHQ+PHRleHQgeD0iMTQiIHk9IjE4OCIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzZlNmU3MyI+QXDDs3MgNSBjb21wYXJhw6fDtWVzLCBvIDkgw6kgZW5jb250cmFkby48L3RleHQ+Cjwvc3ZnPgo=",yW=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,wW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPlBhc3NhZ2VtIHBvciB2YWxvcjogdW1hIGPDs3BpYTwvdGV4dD4KPHJlY3QgeD0iMTAiIHk9IjM4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9Ijg2IiByeD0iOCIgZmlsbD0iI2VmZjZmZiIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMCIgeT0iNTgiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMTYiIHk9Ijk4IiBmb250LXNpemU9IjEyIj5udW1lcm88L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+ZHVwbGljYXI8L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iOTgiPng8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNzgiIHdpZHRoPSI4MCIgaGVpZ2h0PSIzMCIgcng9IjQiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8dGV4dCB4PSIzMjAiIHk9Ijk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj48dHNwYW4gZmlsbD0iIzZlNmU3MyIgdGV4dC1kZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giPjU8L3RzcGFuPiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPjwvdGV4dD4KPGxpbmUgeDE9IjEyOCIgeTE9IjkzIiB4Mj0iMjQ4IiB5Mj0iOTMiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNCIgbWFya2VyLWVuZD0idXJsKCNrKSIvPgo8dGV4dCB4PSIyMTAiIHk9Ijg0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5jw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggcGFzc2EgYSAxMCwgbWFzIG51bWVybyBmaWNhIDUuPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iMTY4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5Db21vIHVtYSBmb3RvY8OzcGlhOiBlc2NyZXZlciBuYSBjw7NwaWE8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxODYiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPm7Do28gYWx0ZXJhIG8gb3JpZ2luYWwuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5QYXNzYWdlbSBwb3IgcmVmZXLDqm5jaWE6IG8gbWVzbW8gYXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPlByb2dyYW1hIHByaW5jaXBhbDwvdGV4dD4KPHRleHQgeD0iMjAiIHk9IjMwMCI+ZmlsYTwvdGV4dD4KPGNpcmNsZSBjeD0iMTUwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjMWQ0ZWQ4Ii8+CjxyZWN0IHg9IjI1MCIgeT0iMjUyIiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjYyIiByeD0iOCIgZmlsbD0iI2ZmZjdlZCIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyNjAiIHk9IjI3MiIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+bGltcGFyPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9IjMwMCI+bHVnYXJlczwvdGV4dD4KPGNpcmNsZSBjeD0iMzkwIiBjeT0iMjk1IiByPSI1IiBmaWxsPSIjYjQ1MzA5Ii8+CjxwYXRoIGQ9Ik0xNTAgMzAwIEwxNTAgMzQwIEwxNDAgMzUyIiBmaWxsPSJub25lIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI2IpIi8+CjxwYXRoIGQ9Ik0zOTAgMzAwIEwzOTAgMzQwIEwzMjIgMzU0IiBmaWxsPSJub25lIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41IiBtYXJrZXItZW5kPSJ1cmwoI28pIi8+CjxyZWN0IHg9IjkwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjE1MCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyMTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMjcwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9IjEyMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTgwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIyNDAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjMwMCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQxNiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+U8OzIGjDoSB1bSBhcnJheS4gTyBxdWUgbGltcGFyIGFsdGVyYSBhdHJhdsOpcyBkZSBsdWdhcmVzLDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+byBwcm9ncmFtYSBwcmluY2lwYWwgdsOqIGVtIGZpbGEuPC90ZXh0Pgo8L3N2Zz4K",zW=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,IW=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,kW=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,SW=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,TW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDQgMTk2IiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KPHJlY3Qgd2lkdGg9IjQwNCIgaGVpZ2h0PSIxOTYiIGZpbGw9IiNmZmZmZmYiLz4KPHRleHQgeD0iMTQiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIiBmb250LXNpemU9IjE1Ij5HZXN1Y2h0OiBkaWUgOS4gRGllIEthcnRlbiBzaW5kIGdlbWlzY2h0LjwvdGV4dD4KPGc+PHJlY3QgeD0iMTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjZjJmMmY3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjx0ZXh0IHg9IjM0LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjc8L3RleHQ+PHRleHQgeD0iMzQuMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiNkYzI2MjYiPuKZpTwvdGV4dD48L2c+Cjx0ZXh0IHg9IjM0LjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIzNC4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjEuPC90ZXh0Pgo8Zz48cmVjdCB4PSI2MiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iODIuMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+MzwvdGV4dD48dGV4dCB4PSI4Mi4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iIzFjMWMxZSI+4pmgPC90ZXh0PjwvZz4KPHRleHQgeD0iODIuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjZGMyNjI2Ij7inJc8L3RleHQ+Cjx0ZXh0IHg9IjgyLjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+Mi48L3RleHQ+CjxnPjxyZWN0IHg9IjExMCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHRleHQgeD0iMTMwLjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNkYzI2MjYiPjEwPC90ZXh0Pjx0ZXh0IHg9IjEzMC4wIiB5PSI5NS45MTk5OTk5OTk5OTk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNSIgZmlsbD0iI2RjMjYyNiI+4pmmPC90ZXh0PjwvZz4KPHRleHQgeD0iMTMwLjAiIHk9IjEzMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iI2RjMjYyNiI+4pyXPC90ZXh0Pgo8dGV4dCB4PSIxMzAuMCIgeT0iMTQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj4zLjwvdGV4dD4KPGc+PHJlY3QgeD0iMTU4IiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iI2YyZjJmNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48dGV4dCB4PSIxNzguMCIgeT0iNzUuMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+NTwvdGV4dD48dGV4dCB4PSIxNzguMCIgeT0iOTUuOTE5OTk5OTk5OTk5OTkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiMxYzFjMWUiPuKZozwvdGV4dD48L2c+Cjx0ZXh0IHg9IjE3OC4wIiB5PSIxMzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiNkYzI2MjYiPuKclzwvdGV4dD4KPHRleHQgeD0iMTc4LjAiIHk9IjE0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+NC48L3RleHQ+CjxnPjxyZWN0IHg9IjIwNiIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIzIi8+PHRleHQgeD0iMjI2LjAiIHk9Ijc1LjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPjk8L3RleHQ+PHRleHQgeD0iMjI2LjAiIHk9Ijk1LjkxOTk5OTk5OTk5OTk5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE1IiBmaWxsPSIjMWMxYzFlIj7imaA8L3RleHQ+PC9nPgo8dGV4dCB4PSIyMjYuMCIgeT0iMTMwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMTU4MDNkIj7inJM8L3RleHQ+Cjx0ZXh0IHg9IjIyNi4wIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPjUuPC90ZXh0Pgo8Zz48cmVjdCB4PSIyNTQiIHk9IjUwIiB3aWR0aD0iNDAiIGhlaWdodD0iNTYiIHJ4PSI1IiBmaWxsPSIjMWQ0ZWQ4IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMSIvPjxyZWN0IHg9IjI1OCIgeT0iNTQiIHdpZHRoPSIzMiIgaGVpZ2h0PSI0OCIgcng9IjMiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzkzYzVmZCIgc3Ryb2tlLXdpZHRoPSIxLjIiIHN0cm9rZS1kYXNoYXJyYXk9IjMgMiIvPjwvZz4KPGc+PHJlY3QgeD0iMzAyIiB5PSI1MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjU2IiByeD0iNSIgZmlsbD0iIzFkNGVkOCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEiLz48cmVjdCB4PSIzMDYiIHk9IjU0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDgiIHJ4PSIzIiBmaWxsPSJub25lIiBzdHJva2U9IiM5M2M1ZmQiIHN0cm9rZS13aWR0aD0iMS4yIiBzdHJva2UtZGFzaGFycmF5PSIzIDIiLz48L2c+CjxnPjxyZWN0IHg9IjM1MCIgeT0iNTAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI1NiIgcng9IjUiIGZpbGw9IiMxZDRlZDgiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxIi8+PHJlY3QgeD0iMzU0IiB5PSI1NCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjQ4IiByeD0iMyIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOTNjNWZkIiBzdHJva2Utd2lkdGg9IjEuMiIgc3Ryb2tlLWRhc2hhcnJheT0iMyAyIi8+PC9nPgo8dGV4dCB4PSIxNCIgeT0iMTY4IiBmb250LXNpemU9IjE1IiBmaWxsPSIjNmU2ZTczIj5Wb24gbGlua3MgbmFjaCByZWNodHMgdW1kcmVoZW46PC90ZXh0Pjx0ZXh0IHg9IjE0IiB5PSIxODgiIGZvbnQtc2l6ZT0iMTUiIGZpbGw9IiM2ZTZlNzMiPk5hY2ggNSBWZXJnbGVpY2hlbiBpc3QgZGllIDkgZ2VmdW5kZW4uPC90ZXh0Pgo8L3N2Zz4K",_W=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,jW="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MjAgNDUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KPGRlZnM+PG1hcmtlciBpZD0iayIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI5IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNiIgbWFya2VySGVpZ2h0PSI2IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wIDAgTDEwIDUgTDAgMTAgWiIgZmlsbD0iIzFjMWMxZSIvPjwvbWFya2VyPjxtYXJrZXIgaWQ9ImIiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOSIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYiIG1hcmtlckhlaWdodD0iNiIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCAwIEwxMCA1IEwwIDEwIFoiIGZpbGw9IiMxZDRlZDgiLz48L21hcmtlcj48bWFya2VyIGlkPSJvIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2IiBtYXJrZXJIZWlnaHQ9IjYiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjYjQ1MzA5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB3aWR0aD0iNDIwIiBoZWlnaHQ9IjQ1MCIgZmlsbD0iI2ZmZmZmZiIvPgo8dGV4dCB4PSIxMCIgeT0iMjIiIGZvbnQtc2l6ZT0iMTUiIGZvbnQtd2VpZ2h0PSI3MDAiPldlcnTDvGJlcmdhYmU6IGVpbmUgS29waWU8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNlZmY2ZmYiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjAiIHk9IjU4IiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWQ0ZWQ4Ij5IYXVwdHByb2dyYW1tPC90ZXh0Pgo8dGV4dCB4PSIyMCIgeT0iOTgiPnphaGw8L3RleHQ+CjxyZWN0IHg9IjcwIiB5PSI3OCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+Cjx0ZXh0IHg9Ijk4IiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+NTwvdGV4dD4KPHJlY3QgeD0iMjUwIiB5PSIzOCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI4NiIgcng9IjgiIGZpbGw9IiNmZmY3ZWQiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjYwIiB5PSI1OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iI2I0NTMwOSI+dmVyZG9wcGxlPC90ZXh0Pgo8dGV4dCB4PSIyNjAiIHk9Ijk4Ij54PC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9Ijc4IiB3aWR0aD0iODAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMzIwIiB5PSI5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+PHRzcGFuIGZpbGw9IiM2ZTZlNzMiIHRleHQtZGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIj41PC90c3Bhbj4gPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj48L3RleHQ+CjxsaW5lIHgxPSIxMjgiIHkxPSI5MyIgeDI9IjI0OCIgeTI9IjkzIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS41IiBzdHJva2UtZGFzaGFycmF5PSI1IDQiIG1hcmtlci1lbmQ9InVybCgjaykiLz4KPHRleHQgeD0iMjEwIiB5PSI4NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+S29waWU8L3RleHQ+Cjx0ZXh0IHg9IjEwIiB5PSIxNTAiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiM2ZTZlNzMiPnggd2lyZCAxMCwgYWJlciB6YWhsIGJsZWlidCA1LjwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE2OCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+V2llIGJlaSBlaW5lciBGb3Rva29waWU6IFdlciBhdWYgZGVyIEtvcGllIHNjaHJlaWJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjE4NiIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+w6RuZGVydCBkYXMgT3JpZ2luYWwgbmljaHQuPC90ZXh0Pgo8bGluZSB4MT0iMTAiIHkxPSIyMDgiIHgyPSI0MTAiIHkyPSIyMDgiIHN0cm9rZT0iI2QxZDFkNiIvPgo8dGV4dCB4PSIxMCIgeT0iMjM2IiBmb250LXNpemU9IjE1IiBmb250LXdlaWdodD0iNzAwIj5SZWZlcmVuesO8YmVyZ2FiZTogZGFzc2VsYmUgQXJyYXk8L3RleHQ+CjxyZWN0IHg9IjEwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZWZmNmZmIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwIiB5PSIyNzIiIGZvbnQtc2l6ZT0iMTMiIGZpbGw9IiMxZDRlZDgiPkhhdXB0cHJvZ3JhbW08L3RleHQ+Cjx0ZXh0IHg9IjIwIiB5PSIzMDAiPnJlaWhlPC90ZXh0Pgo8Y2lyY2xlIGN4PSIxNTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiMxZDRlZDgiLz4KPHJlY3QgeD0iMjUwIiB5PSIyNTIiIHdpZHRoPSIxNjAiIGhlaWdodD0iNjIiIHJ4PSI4IiBmaWxsPSIjZmZmN2VkIiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjI2MCIgeT0iMjcyIiBmb250LXNpemU9IjEzIiBmaWxsPSIjYjQ1MzA5Ij5sZWVyZW48L3RleHQ+Cjx0ZXh0IHg9IjI2MCIgeT0iMzAwIj5wbGFldHplPC90ZXh0Pgo8Y2lyY2xlIGN4PSIzOTAiIGN5PSIyOTUiIHI9IjUiIGZpbGw9IiNiNDUzMDkiLz4KPHBhdGggZD0iTTE1MCAzMDAgTDE1MCAzNDAgTDE0MCAzNTIiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjYikiLz4KPHBhdGggZD0iTTM5MCAzMDAgTDM5MCAzNDAgTDMyMiAzNTQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIxLjUiIG1hcmtlci1lbmQ9InVybCgjbykiLz4KPHJlY3QgeD0iOTAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHJlY3QgeD0iMTUwIiB5PSIzNTgiIHdpZHRoPSI2MCIgaGVpZ2h0PSIzMiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjMWMxYzFlIi8+CjxyZWN0IHg9IjIxMCIgeT0iMzU4IiB3aWR0aD0iNjAiIGhlaWdodD0iMzIiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzFjMWMxZSIvPgo8cmVjdCB4PSIyNzAiIHk9IjM1OCIgd2lkdGg9IjYwIiBoZWlnaHQ9IjMyIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz4KPHRleHQgeD0iMTIwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxODAiIHk9IjM3OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMyI+ZmFsc2U8L3RleHQ+Cjx0ZXh0IHg9IjI0MCIgeT0iMzc5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjEzIj5mYWxzZTwvdGV4dD4KPHRleHQgeD0iMzAwIiB5PSIzNzkiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTMiPmZhbHNlPC90ZXh0Pgo8dGV4dCB4PSIxMCIgeT0iNDE2IiBmb250LXNpemU9IjEzIiBmaWxsPSIjNmU2ZTczIj5FcyBnaWJ0IG51ciBlaW4gQXJyYXkuIFdhcyBsZWVyZW4gw7xiZXIgcGxhZXR6ZSDDpG5kZXJ0LDwvdGV4dD4KPHRleHQgeD0iMTAiIHk9IjQzNCIgZm9udC1zaXplPSIxMyIgZmlsbD0iIzZlNmU3MyI+c2llaHQgZGFzIEhhdXB0cHJvZ3JhbW0gdW50ZXIgcmVpaGUuPC90ZXh0Pgo8L3N2Zz4K",CW=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function AW(i){const e=[];for(const t of i.replace(/\r\n/g,` `).split(` -`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const _W=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function am(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class $o extends Error{}function jW(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function CW(i,e,t){const n=h=>{throw new $o(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` +`)){const n=/^###\s+(.+)$/.exec(t),a=e.at(-1);if(n){const s=n[1].trim();e.push({term:s,forms:[s],text:""})}else a&&/^(auch|also):/i.test(t)?a.forms.push(...t.replace(/^(auch|also):/i,"").split(",").map(s=>s.trim()).filter(Boolean)):a&&t.trim()!==""&&(a.text=(a.text+" "+t.trim()).trim())}return e.filter(t=>t.text!=="")}const PW=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function am(i){const e=i.flatMap(t=>t.forms).sort((t,n)=>n.length-t.length);if(e.length!==0)return new RegExp(`(?t.forms.includes(e))}class $o extends Error{}function DW(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function BW(i,e,t){const n=h=>{throw new $o(`${t}: ${h}`)};let a="",s="",r="",o=[],l,u;const m=[];let c,d=!1;for(const h of e){const g=h.trim();if(c&&d&&(/^ {4}|^\t/.test(h)||g==="")){c.code+=(c.code?` `:"")+h.replace(/^( {4}|\t)/,"");continue}if(d=!1,!g)continue;const f=/^(titel|intro|antworten|frage|runde|klicks|richtig|zeit|fehler|besser|daten|stelle):\s*(.*)$/.exec(g);if(f){const[,v,w]=f;v==="runde"?(c={code:"",question:r,options:[],explanation:"",clicks:[]},m.push(c),d=!0):c?v==="frage"?c.question=w:v==="fehler"?c.wrongLine=Number(w):v==="besser"?c.fix=w:v==="stelle"?c.wrongPart=w.trim():v==="klicks"?c.clicks=w.split(",").map(z=>z.trim()).filter(Boolean):v==="richtig"?c.rightText=w:n(`„${v}:“ gehört vor die erste Runde.`):v==="titel"?a=w:v==="intro"?s=w:v==="antworten"?o=w.split("|").map(z=>z.trim()):v==="frage"?r=w:v==="zeit"?l=Number(w):v==="daten"?u=w==="csv"?w:n("„daten:“ kennt nur „csv“."):n(`„${v}:“ gehört in eine Runde.`);continue}c||n(`Unbekannte Zeile vor der ersten Runde: „${g}“`);const b=c,x=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);x?b.options.push({text:x[2].trim().replaceAll("\\n",` `),right:!!x[1]}):g.startsWith(">")?b.explanation+=(b.explanation?" ":"")+g.slice(1).trim():n(`Unbekannte Zeile im Spiel: „${g}“`)}return a||n("Das Spiel braucht eine Zeile „titel:“."),m.length||n("Das Spiel braucht mindestens eine „runde:“."),m.forEach((h,g)=>{if(h.code=h.code.replace(/\n+$/,""),i==="bombe"){const f=h.code.split(` -`),b=h.wrongLine;if((!b||!Number.isInteger(b)||b<1||b>f.length||!f[b-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`),h.wrongPart!==void 0){u&&n(`Runde ${g+1}: „stelle:“ geht nur bei Java, nicht bei CSV.`);const x=pg(f[b-1]).filter(v=>v.part).map(v=>v.text);x.filter(v=>v===h.wrongPart).length!==1&&n(`Runde ${g+1}: „stelle: ${h.wrongPart}“ ist kein Teil der Zeile ${b}. Teile: ${x.map(v=>`„${v}“`).join(", ")}`)}return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>fg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=bg(h.code);for(const b of h.clicks)f.buttons.some(x=>x.caption===b)||n(`Runde ${g+1}: Knopf „${b}“ gibt es nicht.`);DW(f,h.clicks)}catch(f){if(f instanceof $o)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function ba(i,e){const t=[];let n=0,a="";for(let s=0;so&&/\s/.test(i[l-1]);)l--;l>o&&a.push([e+o,e+l]),s=r+n}return a}const AW=(i,e)=>i[e]==="+"&&i[e-1]!=="+"&&i[e+1]!=="+"&&i[e+1]!=="=",PW=(i,e)=>i[e]==="="&&!"=<>!+-*/%".includes(i[e-1]??"")&&i[e+1]!=="=";function pg(i){const e=/^\s*/.exec(i)[0],t=i.slice(e.length).replace(/\s+$/,""),n=(()=>{const o=/^(?:\}\s*)?(?:else\s+)?(for|if|while)\s*\(/.exec(t);if(o){const g=o[0].length-1,f=rm(t,g);if(f<0)return[];const b=t.slice(g+1,f);if(o[1]!=="for")return b1(b,g+1,[],0);const x=ba(b,(v,w)=>v[w]===";");return x.length===2?b1(b,g+1,x,1):[]}if(!t.endsWith(";"))return[];const l=t.slice(0,-1),u=ba(l,PW);if(u.length===1)return b1(l,0,u,1);if(u.length)return[];const m=l.indexOf("(");if(m<=0||rm(l,m)!==l.length-1||/^(new|return)\b/.test(l))return[];const c=b1(l.slice(0,m),0,[],0),d=l.slice(m+1,-1),h=b1(d,m+1,ba(d,(g,f)=>g[f]===","),1).flatMap(([g,f])=>{const b=l.slice(g,f);return b1(b,g,ba(b,AW),1)});return[...c,...h]})(),a=n.length?n:t?[[0,t.length]]:[],s=e?[{text:e,part:!1}]:[];let r=0;for(const[o,l]of a)o>r&&s.push({text:t.slice(r,o),part:!1}),s.push({text:t.slice(o,l),part:!0}),r=l;return r{throw new $o(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ka='"((?:[^"\\\\]|\\\\.)*)"';function bg(i){const e=i.split(` -`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Ko(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Ko(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Ko(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Ko(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return yg(i,e,n.name)}function yg(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])wg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function DW(i,e){const t=xg(i);return e.map(n=>vg(i,t,n))}function wg(i,e,t,n){if(typeof i!="string"){for(const s of BW(i.condition,e,n)?i.then:i.otherwise)wg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String($n(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String($n(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[om(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=om(a[1],e),r=Number($n(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function BW(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String($n(n[2],e,t))===String($n(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number($n(n[1],e,t)),s=Number($n(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function om(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function $n(i,e,t){const n=i.match(new RegExp(`${Ka}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class zg extends Error{}const Cs="___";function OW(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function MW(i,e){const t=k=>{throw new zg(`${e}: ${k}`)},n=(k,P)=>{const D=/^(\d+)\s+(\d+)$/.exec(k.trim());return!D||Number(D[1])<1||Number(D[2])<1?t(`${P}: „${k}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(D[1])-1,col:Number(D[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const k of i){const P=k.trim();if(g&&(/^( {4}|\t)/.test(k)||P==="")){const A=k.replace(/^( {4}|\t)/,"");if(g==="station"){const B=c[c.length-1];B.code+=(B.code?` +`),b=h.wrongLine;if((!b||!Number.isInteger(b)||b<1||b>f.length||!f[b-1].trim())&&n(`Runde ${g+1}: „fehler:“ muss eine Zeile des Codes sein.`),h.fix||n(`Runde ${g+1}: „besser:“ fehlt.`),h.options.length&&n(`Runde ${g+1}: Bei „bombe“ gibt es keine Antworten, man tippt auf die Zeile.`),h.question||n(`Runde ${g+1}: keine Frage.`),h.wrongPart!==void 0){u&&n(`Runde ${g+1}: „stelle:“ geht nur bei Java, nicht bei CSV.`);const x=fg(f[b-1]).filter(v=>v.part).map(v=>v.text);x.filter(v=>v===h.wrongPart).length!==1&&n(`Runde ${g+1}: „stelle: ${h.wrongPart}“ ist kein Teil der Zeile ${b}. Teile: ${x.map(v=>`„${v}“`).join(", ")}`)}return}if(i==="reihenfolge"){h.options.length<3&&n(`Runde ${g+1}: „reihenfolge“ braucht mindestens drei Schritte.`),h.options.some(f=>f.right)&&n(`Runde ${g+1}: Bei „reihenfolge“ gibt es kein [x], die Schritte stehen der Reihe nach da.`),new Set(h.options.map(f=>f.text)).size!==h.options.length&&n(`Runde ${g+1}: zwei Schritte sind gleich.`),h.question||n(`Runde ${g+1}: keine Frage.`);return}if(h.options.length||(o.length||n(`Runde ${g+1}: keine Antworten.`),(!h.rightText||!o.includes(h.rightText))&&n(`Runde ${g+1}: „richtig:“ muss eine der Antworten sein.`),h.options=o.map(f=>({text:f,right:f===h.rightText}))),h.options.filter(f=>f.right).length!==1&&n(`Runde ${g+1}: genau eine Antwort muss richtig sein.`),h.question||n(`Runde ${g+1}: keine Frage.`),i==="layout"&&h.options.forEach(f=>bg(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=xg(h.code);for(const b of h.clicks)f.buttons.some(x=>x.caption===b)||n(`Runde ${g+1}: Knopf „${b}“ gibt es nicht.`);ZW(f,h.clicks)}catch(f){if(f instanceof $o)throw f;n(`Runde ${g+1}: ${f.message}`)}delete h.rightText}),i==="bombe"&&!(l&&l>0)&&n("„bombe“ braucht „zeit:“ mit den Sekunden je Runde."),{kind:i,title:a,intro:s,...i==="bombe"?{seconds:l,...u?{data:u}:{}}:{},rounds:m}}function ba(i,e){const t=[];let n=0,a="";for(let s=0;so&&/\s/.test(i[l-1]);)l--;l>o&&a.push([e+o,e+l]),s=r+n}return a}const OW=(i,e)=>i[e]==="+"&&i[e-1]!=="+"&&i[e+1]!=="+"&&i[e+1]!=="=",MW=(i,e)=>i[e]==="="&&!"=<>!+-*/%".includes(i[e-1]??"")&&i[e+1]!=="=";function fg(i){const e=/^\s*/.exec(i)[0],t=i.slice(e.length).replace(/\s+$/,""),n=(()=>{const o=/^(?:\}\s*)?(?:else\s+)?(for|if|while)\s*\(/.exec(t);if(o){const g=o[0].length-1,f=rm(t,g);if(f<0)return[];const b=t.slice(g+1,f);if(o[1]!=="for")return b1(b,g+1,[],0);const x=ba(b,(v,w)=>v[w]===";");return x.length===2?b1(b,g+1,x,1):[]}if(!t.endsWith(";"))return[];const l=t.slice(0,-1),u=ba(l,MW);if(u.length===1)return b1(l,0,u,1);if(u.length)return[];const m=l.indexOf("(");if(m<=0||rm(l,m)!==l.length-1||/^(new|return)\b/.test(l))return[];const c=b1(l.slice(0,m),0,[],0),d=l.slice(m+1,-1),h=b1(d,m+1,ba(d,(g,f)=>g[f]===","),1).flatMap(([g,f])=>{const b=l.slice(g,f);return b1(b,g,ba(b,OW),1)});return[...c,...h]})(),a=n.length?n:t?[[0,t.length]]:[],s=e?[{text:e,part:!1}]:[];let r=0;for(const[o,l]of a)o>r&&s.push({text:t.slice(r,o),part:!1}),s.push({text:t.slice(o,l),part:!0}),r=l;return r{throw new $o(n)}){const n=/^(grid|flow|border):\s*(.+)$/.exec(i);if(!n)return t(`${e}: Antwort „${i}“ ist kein Fensterbild (grid:, flow: oder border:).`);if(n[1]==="border"){const s={};for(const r of n[2].split(/\s+/)){const o=/^([NSWEC])=(.+)$/.exec(r);o||t(`${e}: „${r}“ im BorderLayout-Bild verstehe ich nicht (z. B. N=A).`),s[o[1]]=o[2]}return{kind:"border",areas:s}}const a=n[2].split("/").map(s=>s.trim().split(/\s+/).filter(Boolean));return{kind:n[1],rows:a}}const Ka='"((?:[^"\\\\]|\\\\.)*)"';function xg(i){const e=i.split(` +`),t={title:"",buttons:[],labels:[],ints:{},listeners:[]},n=new Map,a=(r,o,l)=>{if(o.startsWith("{")){let m=r+1;const c=[];for(;m=e.length)throw new Error(`Dem Zuhörer fehlt „${l}“.`);return{from:r,to:m,statements:Ko(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Ko(u)}},s=r=>{if(!t.buttons.some(o=>o.name===r))throw new Error(`Knopf ${r} ist nicht angelegt.`);return r};for(let r=0;r\s*(.*)$/.exec(o)){const u=a(r,l[2],"};");n.set(l[1],u),r=u.to}else if(l=/^(\w+)\.addActionListener\(\s*(\w+)\s*\)\s*;$/.exec(o)){const u=n.get(l[2]);if(!u)throw new Error(`Zuhörer ${l[2]} ist nicht angelegt.`);t.listeners.push({button:s(l[1]),...u})}else if(l=/^(\w+)\.addActionListener\(\s*\w+\s*->\s*(.*)$/.exec(o)){const u=a(r,l[2],"});");t.listeners.push({button:s(l[1]),...u}),r=u.to}}return t}function Ko(i){const e=[];let t=0;const n=()=>{for(;t{let u=0,m=!1;const c=t+1;for(;t{let o=0,l=!1;const u=t;for(;t{if(n(),i[t]==="{")return Ko(a("{","}"));if(/^if\s*\(/.test(i.slice(t))){t=i.indexOf("(",t);const l=a("(",")").trim(),u=r();n();let m=[];return/^else\b/.test(i.slice(t))&&(t+=4,m=r()),[{condition:l,then:u,otherwise:m}]}const o=s();return o?[o]:[]};for(n();ta.caption===t)??i.buttons.find(a=>e.texts[a.name]===t);if(!n)throw new Error(`Knopf „${t}“ gibt es nicht.`);return wg(i,e,n.name)}function wg(i,e,t){const n=i.listeners.find(r=>r.button===t),a=[],s={source:t,command:e.texts[t]};for(const r of(n==null?void 0:n.statements)??[])zg(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function ZW(i,e){const t=vg(i);return e.map(n=>yg(i,t,n))}function zg(i,e,t,n){if(typeof i!="string"){for(const s of LW(i.condition,e,n)?i.then:i.otherwise)zg(s,e,t,n);return}let a;if(a=/^(\w+)\.setText\((.*)\)$/.exec(i)){if(!(a[1]in e.texts))throw new Error(`${a[1]} ist keine Beschriftung und kein Knopf.`);e.texts[a[1]]=String($n(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String($n(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[om(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=om(a[1],e),r=Number($n(a[3],e,n));e.ints[s]=a[2]==="="?r:a[2]==="+="?e.ints[s]+r:e.ints[s]-r}else throw new Error(`Diese Anweisung kann das Spiel nicht nachspielen: „${i}“`)}function LW(i,e,t){let n;if(n=/^e\.getSource\(\)\s*(==|!=)\s*(\w+)$/.exec(i)){if(!(n[2]in e.texts))throw new Error(`${n[2]} ist kein Knopf.`);return t.source===n[2]==(n[1]==="==")}if(n=/^(!?)(.+)\.equals\((.+)\)$/.exec(i))return String($n(n[2],e,t))===String($n(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number($n(n[1],e,t)),s=Number($n(n[3],e,t));return{"==":a===s,"!=":a!==s,"<=":a<=s,">=":a>=s,"<":a":a>s}[n[2]]}throw new Error(`Diese Bedingung kann das Spiel nicht nachspielen: „${i}“`)}function om(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function $n(i,e,t){const n=i.match(new RegExp(`${Ka}|\\d+|e\\.getActionCommand\\(\\)|\\w+(?:\\.getText\\(\\))?|[-+*/()]`,"g"))??[];let a=0;const s=()=>{const l=n[a++];if(l===void 0)throw new Error(`Unvollständiger Ausdruck „${i}“`);if(l==="("){const u=o();return a++,u}if(l.startsWith('"'))return JSON.parse(l);if(/^\d+$/.test(l))return Number(l);if(l==="e.getActionCommand()"){if(!t)throw new Error("e.getActionCommand() gibt es nur im Zuhörer.");return t.command}if(l.endsWith(".getText()"))return e.texts[l.slice(0,-10)]??"";if(l in e.ints)return e.ints[l];throw new Error(`Unbekannt: „${l}“`)},r=()=>{let l=s();for(;n[a]==="*"||n[a]==="/";){const u=n[a++],m=Number(s());l=u==="*"?Number(l)*m:Math.trunc(Number(l)/m)}return l},o=()=>{let l=r();for(;n[a]==="+"||n[a]==="-";){const u=n[a++],m=r();u==="+"?l=typeof l=="string"||typeof m=="string"?`${l}${m}`:l+m:l=Number(l)-Number(m)}return l};return o()}class Ig extends Error{}const Cs="___";function WW(i){const e=Array.from({length:i.rows},()=>Array(i.cols).fill(""));for(const t of i.words)[...t.word].forEach((n,a)=>e[t.row+(t.across?0:a)][t.col+(t.across?a:0)]=n);return e}function EW(i,e){const t=k=>{throw new Ig(`${e}: ${k}`)},n=(k,P)=>{const D=/^(\d+)\s+(\d+)$/.exec(k.trim());return!D||Number(D[1])<1||Number(D[2])<1?t(`${P}: „${k}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(D[1])-1,col:Number(D[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const k of i){const P=k.trim();if(g&&(/^( {4}|\t)/.test(k)||P==="")){const A=k.replace(/^( {4}|\t)/,"");if(g==="station"){const B=c[c.length-1];B.code+=(B.code?` `:"")+A}else u+=(u?` -`:"")+A;continue}if(g=void 0,!P)continue;const D=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(P);if(D){const[,A,B]=D;if(A==="station")c.push({name:B,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(A==="kreuzwort")o=B,f="crossword";else if(A==="tor")l=B,f="gate",g="gate";else if(A==="titel")a=B;else if(A==="intro")s=B;else if(A==="alphabet")r=B;else if(A==="ende")m=B;else if(A==="lösung"||A==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=B.split(",").map(C=>n(C,"lösung"));else{f!=="station"&&t(`„${A}:“ gehört in eine Station.`);const C=c[c.length-1];A==="frage"?C.question=B:A==="tipp"?C.hint=B:A==="zahl"?C.answer=/^-?\d+$/.test(B)?Number(B):t(`Station „${C.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(C,n(B,`Station „${C.name}“`))}continue}if(f==="crossword"){d.push(Ig(P,t));continue}if(f==="station"&&P.startsWith(">")){const A=c[c.length-1];A.explanation+=(A.explanation?" ":"")+P.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${P}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(Cs)||t(`Der Code bei „tor:“ braucht ${Cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const{rows:b,cols:x,words:v,keyword:w,grid:z}=kg(d,h,t),I=(k,P)=>{var D;return((D=z[k])==null?void 0:D[P])??""},S=c.map(k=>{k.code||t(`Station „${k.name}“: Code fehlt.`),k.question||t(`Station „${k.name}“: „frage:“ fehlt.`),k.answer===void 0&&t(`Station „${k.name}“: „zahl:“ fehlt.`),k.row===void 0&&t(`Station „${k.name}“: „feld:“ fehlt.`);const P=r.charAt(k.answer);P||t(`Station „${k.name}“: alphabet.charAt(${k.answer}) gibt es nicht.`);const D=I(k.row,k.col);return D!==P&&t(`Station „${k.name}“: alphabet.charAt(${k.answer}) ist ${P}, im Feld ${k.row+1} ${k.col+1} steht aber „${D}“.`),k.code=k.code.replace(/\n+$/,""),k});return{title:a,intro:s,alphabet:r,stations:S,crosswordText:o,rows:b,cols:x,words:v,solution:h,keyword:w,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const ZW=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u;function Ig(i,e){const t=ZW.exec(i);return t||e(`Kreuzworträtsel: „${i}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),{across:t[1]==="→",row:Number(t[2])-1,col:Number(t[3])-1,word:t[4],clue:t[5]}}function kg(i,e,t){const n=Math.max(...i.map(m=>m.row+(m.across?1:m.word.length))),a=Math.max(...i.map(m=>m.col+(m.across?m.word.length:1))),s=Array.from({length:n},()=>Array(a).fill(""));for(const m of i)[...m.word].forEach((c,d)=>{const h=m.row+(m.across?0:d),g=m.col+(m.across?d:0);s[h][g]&&s[h][g]!==c&&t(`Kreuzworträtsel: ${m.word} passt in Zeile ${h+1}, Spalte ${g+1} nicht (dort steht ${s[h][g]}).`),s[h][g]=c});const r=[...new Set(i.map(m=>m.row*a+m.col))].sort((m,c)=>m-c),o=i.map(m=>({...m,number:r.indexOf(m.row*a+m.col)+1})),l=(m,c)=>{var d;return((d=s[m])==null?void 0:d[c])??""},u=e.map(({row:m,col:c})=>l(m,c)||t(`lösung: In Zeile ${m+1}, Spalte ${c+1} ist kein Feld.`)).join("");return{rows:n,cols:a,words:o,keyword:u,grid:s}}function LW(i,e){const t=d=>{throw new zg(`${e}: ${d}`)};let n="",a="",s="",r=[];const o=[];for(const d of i){const h=d.trim();if(!h)continue;const g=/^(titel|intro|lösung|loesung|ende):\s*(.*)$/.exec(h);if(g){const[,f,b]=g;f==="titel"?n=b:f==="intro"?a=b:f==="ende"?s=b:r=b.split(",").map(x=>{const v=/^(\d+)\s+(\d+)$/.exec(x.trim());return!v||Number(v[1])<1||Number(v[2])<1?t(`lösung: „${x.trim()}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(v[1])-1,col:Number(v[2])-1}});continue}h.startsWith("-")?o.push(Ig(h,t)):t(`Unbekannte Zeile im Spiel: „${h}“`)}n||t("Das Spiel braucht eine Zeile „titel:“."),o.length<2&&t("Das Rätsel braucht mindestens zwei Wörter."),r.length||t("Das Rätsel braucht eine Zeile „lösung:“.");const{rows:l,cols:u,words:m,keyword:c}=kg(o,r,t);return{title:n,intro:a,rows:l,cols:u,words:m,solution:r,keyword:c,end:s}}const WW=5e3;function Sg(i,e,t,n={}){const a=new Bi(i,e),s=new _s(t),r=m=>({pose:{...s.pose},trail:s.trail.map(c=>({...c})),leds:[...s.leds],screen:s.screen,tone:m}),o=[r()];let l=0;const u=(m,c)=>({frames:o,stop:m,notice:c,bumps:s.bumps,distance:Math.round(s.trail.slice(1).reduce((d,h,g)=>d+Math.hypot(h.x-s.trail[g].x,h.y-s.trail[g].y),0))});for(let m=0;mh!==0);s.tick(z0),d&&o.push(r())}return u("limit")}const Tg=["boolean","int","double","String","char","long","float","short","byte"],EW=new Set([...Tg,"Boolean","Integer","Double","Character","Long","Float","Short","Byte","var","void"]);function NW(i){if(EW.has(i))return;const e=i.toLowerCase();for(const t of Tg)if(FW(e,t.toLowerCase())<=(t.length>=6?2:1))return t}function FW(i,e){const t=Array.from({length:i.length+1},(n,a)=>Array.from({length:e.length+1},(s,r)=>a===0?r:r===0?a:0));for(let n=1;n<=i.length;n++)for(let a=1;a<=e.length;a++){const s=i[n-1]===e[a-1]?0:1;t[n][a]=Math.min(t[n-1][a]+1,t[n][a-1]+1,t[n-1][a-1]+s),n>1&&a>1&&i[n-1]===e[a-2]&&i[n-2]===e[a-1]&&(t[n][a]=Math.min(t[n][a],t[n-2][a-2]+1))}return t[i.length][e.length]}const RW=[">>>=","<<=",">>=",">>>","->","::","++","--","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<"];function JW(i,e){const t=[];let n=0,a=0;const s=(r,o,l,u)=>t.push({kind:r,text:i.slice(o,l),start:o,end:l,line:u});for(;nn(C,"lösung"));else{f!=="station"&&t(`„${A}:“ gehört in eine Station.`);const C=c[c.length-1];A==="frage"?C.question=B:A==="tipp"?C.hint=B:A==="zahl"?C.answer=/^-?\d+$/.test(B)?Number(B):t(`Station „${C.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(C,n(B,`Station „${C.name}“`))}continue}if(f==="crossword"){d.push(kg(P,t));continue}if(f==="station"&&P.startsWith(">")){const A=c[c.length-1];A.explanation+=(A.explanation?" ":"")+P.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${P}“`)}a||t("Das Spiel braucht eine Zeile „titel:“."),c.length||t("Das Spiel braucht mindestens eine „station:“."),d.length||t("Das Spiel braucht ein „kreuzwort:“ mit Wörtern."),h.length||t("Das Kreuzworträtsel braucht eine Zeile „lösung:“."),u.includes(Cs)||t(`Der Code bei „tor:“ braucht ${Cs} für das Eingabefeld.`),new Set(r).size!==r.length&&t("Im Alphabet kommt ein Zeichen doppelt vor.");const{rows:b,cols:x,words:v,keyword:w,grid:z}=Sg(d,h,t),I=(k,P)=>{var D;return((D=z[k])==null?void 0:D[P])??""},S=c.map(k=>{k.code||t(`Station „${k.name}“: Code fehlt.`),k.question||t(`Station „${k.name}“: „frage:“ fehlt.`),k.answer===void 0&&t(`Station „${k.name}“: „zahl:“ fehlt.`),k.row===void 0&&t(`Station „${k.name}“: „feld:“ fehlt.`);const P=r.charAt(k.answer);P||t(`Station „${k.name}“: alphabet.charAt(${k.answer}) gibt es nicht.`);const D=I(k.row,k.col);return D!==P&&t(`Station „${k.name}“: alphabet.charAt(${k.answer}) ist ${P}, im Feld ${k.row+1} ${k.col+1} steht aber „${D}“.`),k.code=k.code.replace(/\n+$/,""),k});return{title:a,intro:s,alphabet:r,stations:S,crosswordText:o,rows:b,cols:x,words:v,solution:h,keyword:w,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const NW=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u;function kg(i,e){const t=NW.exec(i);return t||e(`Kreuzworträtsel: „${i}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),{across:t[1]==="→",row:Number(t[2])-1,col:Number(t[3])-1,word:t[4],clue:t[5]}}function Sg(i,e,t){const n=Math.max(...i.map(m=>m.row+(m.across?1:m.word.length))),a=Math.max(...i.map(m=>m.col+(m.across?m.word.length:1))),s=Array.from({length:n},()=>Array(a).fill(""));for(const m of i)[...m.word].forEach((c,d)=>{const h=m.row+(m.across?0:d),g=m.col+(m.across?d:0);s[h][g]&&s[h][g]!==c&&t(`Kreuzworträtsel: ${m.word} passt in Zeile ${h+1}, Spalte ${g+1} nicht (dort steht ${s[h][g]}).`),s[h][g]=c});const r=[...new Set(i.map(m=>m.row*a+m.col))].sort((m,c)=>m-c),o=i.map(m=>({...m,number:r.indexOf(m.row*a+m.col)+1})),l=(m,c)=>{var d;return((d=s[m])==null?void 0:d[c])??""},u=e.map(({row:m,col:c})=>l(m,c)||t(`lösung: In Zeile ${m+1}, Spalte ${c+1} ist kein Feld.`)).join("");return{rows:n,cols:a,words:o,keyword:u,grid:s}}function FW(i,e){const t=d=>{throw new Ig(`${e}: ${d}`)};let n="",a="",s="",r=[];const o=[];for(const d of i){const h=d.trim();if(!h)continue;const g=/^(titel|intro|lösung|loesung|ende):\s*(.*)$/.exec(h);if(g){const[,f,b]=g;f==="titel"?n=b:f==="intro"?a=b:f==="ende"?s=b:r=b.split(",").map(x=>{const v=/^(\d+)\s+(\d+)$/.exec(x.trim());return!v||Number(v[1])<1||Number(v[2])<1?t(`lösung: „${x.trim()}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(v[1])-1,col:Number(v[2])-1}});continue}h.startsWith("-")?o.push(kg(h,t)):t(`Unbekannte Zeile im Spiel: „${h}“`)}n||t("Das Spiel braucht eine Zeile „titel:“."),o.length<2&&t("Das Rätsel braucht mindestens zwei Wörter."),r.length||t("Das Rätsel braucht eine Zeile „lösung:“.");const{rows:l,cols:u,words:m,keyword:c}=Sg(o,r,t);return{title:n,intro:a,rows:l,cols:u,words:m,solution:r,keyword:c,end:s}}const RW=5e3;function Tg(i,e,t,n={}){const a=new Bi(i,e),s=new _s(t),r=m=>({pose:{...s.pose},trail:s.trail.map(c=>({...c})),leds:[...s.leds],screen:s.screen,tone:m}),o=[r()];let l=0;const u=(m,c)=>({frames:o,stop:m,notice:c,bumps:s.bumps,distance:Math.round(s.trail.slice(1).reduce((d,h,g)=>d+Math.hypot(h.x-s.trail[g].x,h.y-s.trail[g].y),0))});for(let m=0;mh!==0);s.tick(z0),d&&o.push(r())}return u("limit")}const _g=["boolean","int","double","String","char","long","float","short","byte"],JW=new Set([..._g,"Boolean","Integer","Double","Character","Long","Float","Short","Byte","var","void"]);function GW(i){if(JW.has(i))return;const e=i.toLowerCase();for(const t of _g)if(HW(e,t.toLowerCase())<=(t.length>=6?2:1))return t}function HW(i,e){const t=Array.from({length:i.length+1},(n,a)=>Array.from({length:e.length+1},(s,r)=>a===0?r:r===0?a:0));for(let n=1;n<=i.length;n++)for(let a=1;a<=e.length;a++){const s=i[n-1]===e[a-1]?0:1;t[n][a]=Math.min(t[n-1][a]+1,t[n][a-1]+1,t[n-1][a-1]+s),n>1&&a>1&&i[n-1]===e[a-2]&&i[n-2]===e[a-1]&&(t[n][a]=Math.min(t[n][a],t[n-2][a-2]+1))}return t[i.length][e.length]}const VW=[">>>=","<<=",">>=",">>>","->","::","++","--","==","!=","<=",">=","&&","||","+=","-=","*=","/=","%=","&=","|=","^=","<<"];function qW(i,e){const t=[];let n=0,a=0;const s=(r,o,l,u)=>t.push({kind:r,text:i.slice(o,l),start:o,end:l,line:u});for(;ni.startsWith(d,n))??r;n+=c.length,s("op",o,n,l)}return t}const xa=new Set(["if","else","for","while","do","switch","case","default","break","return","try"]),Wr=new Set(["public","private","protected","static","final","abstract"]),lm="(?:int|long|short|byte|float|double|boolean|char|String)";let GW=class{constructor(e,t,n){y(this,"toks");y(this,"comments");y(this,"i",0);y(this,"problems",[]);y(this,"placeholders",[]);y(this,"lines",new Map);y(this,"className");y(this,"imports",[]);y(this,"fileScanners",new Set);this.src=e,this.labels=t,this.opts=n;const a=JW(e,this.problems);this.toks=a.filter(s=>s.kind!=="comment"),this.comments=a.filter(s=>s.kind==="comment")}get tok(){return this.toks[this.i]}is(e,t=this.tok){return t!==void 0&&t.text===e&&t.kind!=="str"}next(){return this.toks[this.i++]}eat(e){return this.is(e)?this.next():void 0}prev(){return this.toks[this.i-1]}problem(e,t,n){const a=t??{start:this.src.length,end:this.src.length};this.problems.push({from:a.start,to:Math.max(a.end,a.start+1),key:e,arg:n})}missingAfter(e,t){const n=e?e.end:this.src.length;this.problems.push({from:Math.max(0,n-1),to:n,key:"web_parse_missing",arg:t})}text(e,t){let n="",a=e;for(const s of this.comments)s.end<=e||s.start>=t||(n+=this.src.slice(a,Math.max(a,s.start)),a=Math.max(a,s.end));return n+=this.src.slice(a,Math.max(a,t)),n.replace(/\s*\n\s*/g," ").trim()}slot(e,t,n){const a=this.text(e,t);if(a===n){const s=this.src.indexOf(n,e);return s>=0&&this.placeholders.push({from:s,to:s+n.length}),""}return a}record(e,t,n){return this.lines.set(e,[t,n]),{element:e,from:t,to:n}}lineOf(e){var t;return(e==null?void 0:e.line)??((t=this.toks[this.toks.length-1])==null?void 0:t.line)??0}checkImports(){const e=["File","PrintWriter","FileReader","FileWriter","BufferedReader","IOException","FileNotFoundException"].map(t=>[t,"java.io"]);for(const[t,n]of[["Scanner","java.util"],["Arrays","java.util"],["Files","java.nio.file"],["Path","java.nio.file"],["Paths","java.nio.file"],...e]){const a=this.imports.some(r=>r===`import${n}.${t};`||r===`import${n}.*;`),s=this.toks.find((r,o)=>{var l;return r.kind==="id"&&r.text===t&&(t!=="Arrays"&&n!=="java.nio.file"||((l=this.toks[o+1])==null?void 0:l.text)===".")});if(!a&&s){this.problem("web_parse_missing_import",s,n==="java.util"?`import ${n}.${t};`:`import ${n}.*;`);return}}}checkScanners(){var n;const e=new Set(["next","nextInt","nextDouble","nextLine","nextBoolean","nextLong","nextFloat","hasNext","hasNextInt","hasNextLine","hasNextDouble"]),t=a=>this.toks.some((s,r)=>{const o=this.toks[r-1];return s.kind==="id"&&s.text===a&&!!o&&(o.kind==="id"&&!xa.has(o.text)&&o.text!=="new"||o.text===">"||o.text==="]")});for(let a=0;a{var s;return((s=this.toks[a-1])==null?void 0:s.text)==="class"}).map(n=>n.text));for(let n=0;nthis.toks.some((c,d)=>{var h;return c.text===m&&((h=this.toks[d-1])==null?void 0:h.kind)==="id"&&!xa.has(this.toks[d-1].text)}),n=["println","print","printf"],a=["length","charAt","substring","indexOf","equals","equalsIgnoreCase","compareTo","contains","startsWith","endsWith","toUpperCase","toLowerCase","trim","isEmpty","split","replace","sqrt","pow","abs","max","min","random","round","parseInt","parseDouble","nextInt","nextDouble","nextLine","next","hasNext","hasNextInt","hasNextLine"],s=(m,c)=>c.find(d=>d!==m&&d.toLowerCase()===m.toLowerCase());for(let m=0;mo.text).join(""));continue}const a=this.classStart();if(a!==void 0){this.className??(this.className=a.name),this.i=a.index;const r=this.parseClassBody();e.push(...r.elements),t??(t=r.caption);continue}const s=this.methodStart();if(s){n&&this.problem("web_parse_more_methods",this.tok);const r=this.parseMethod(s);n||(t=s.caption,e.push(...r)),n=!0;continue}if(this.is("}")){this.problem("web_parse_extra",this.next(),"}");continue}e.push(...this.parseStatement())}return{caption:t,elements:this.finishList(e)}}skipPast(e){for(;this.tok&&!this.is(e);)this.next();this.eat(e)}classStart(){var n,a;let e=this.i;for(;this.toks[e]&&Wr.has(this.toks[e].text);)e++;if(((n=this.toks[e])==null?void 0:n.text)!=="class"||((a=this.toks[e+1])==null?void 0:a.kind)!=="id")return;const t=this.toks[e+1].text;for(e+=2;this.toks[e]&&this.toks[e].text!=="{";)e++;return{name:t,index:e+1}}parseClassBody(){let e,t,n=!1;const a=[];for(;this.tok&&!this.is("}");){const s=this.methodStart();if(!s){this.is("{")?a.push(...this.parseBlock().elements):a.push(...this.parseStatement());continue}const r=this.tok,o=this.parseMethod(s);s.name==="main"?e??(e=o):t?n=!0:t={caption:s.caption,body:o},(e&&t||n)&&this.problem("web_parse_more_methods",r)}return this.eat("}"),e?{elements:e}:a.length>0||!t?{elements:a}:{caption:t.caption,elements:t.body}}methodStart(){var g,f,b,x,v,w,z,I,S,k,P;let e=this.i,t=0;for(;this.toks[e]&&Wr.has(this.toks[e].text);)e++,t++;const n=this.toks[e];if((n==null?void 0:n.kind)!=="id"||xa.has(n.text)||n.text==="new")return;for(e++;((g=this.toks[e])==null?void 0:g.text)==="["&&((f=this.toks[e+1])==null?void 0:f.text)==="]";)e+=2;const a=this.toks[e];if((a==null?void 0:a.kind)!=="id"||((b=this.toks[e+1])==null?void 0:b.text)!=="(")return;let s=0,r=e+1;for(;this.toks[r];r++){const D=this.toks[r].text;if(D==="(")s++;else{if(D===")"&&--s===0)break;if(D===";"||D==="{"||D==="}")break}}let o=r+1;if(((x=this.toks[r])==null?void 0:x.text)===")"&&((v=this.toks[o])==null?void 0:v.text)==="throws")for(o++;((w=this.toks[o])==null?void 0:w.kind)==="id"&&(((z=this.toks[o+1])==null?void 0:z.text)===","||((I=this.toks[o+1])==null?void 0:I.text)==="{"||((S=this.toks[o+1])==null?void 0:S.text)===".");)o+=this.toks[o+1].text==="{"?1:2;const l=this.toks[o],u=((k=this.toks[r])==null?void 0:k.text)===")"&&(l==null?void 0:l.text)==="{";if(!u&&!(t>0&&(l===void 0||this.toks[r]===void 0)))return;const m=((P=this.toks[r])==null?void 0:P.text)===")"?this.toks[r].start:this.src.length,c=this.text(this.toks[e+1].end,m),h=`${this.text(n.start,this.toks[e-1].end).replace(/\s+/g,"")} ${a.text}(${c.replace(/\s*,\s*/g,", ")})`;return this.i=Math.min(u?o:r+1,this.toks.length),{name:a.text,caption:a.text==="main"||!St(h)?void 0:h}}parseMethod(e){return this.is("{")?this.parseBlock().elements:(this.missingAfter(this.prev(),"{"),[])}parseBlock(){const e=this.next(),t=[];for(;this.tok&&!this.is("}")&&!(this.is("case")||this.is("default"));)t.push(...this.parseStatement());const n=this.eat("}");if(n||this.problem("web_parse_missing",e,"}"),t.length===0){const a=(n==null?void 0:n.start)??this.src.length,s=this.comments.find(r=>r.start>e.end&&r.startn.element)}parseStatement(){const e=this.tok;switch(e.kind==="id"?e.text:""){case"if":return[this.parseIf()];case"while":return[this.parseWhile()];case"do":return[this.parseDo()];case"for":return[this.parseFor()];case"switch":return[this.parseSwitch()];case"try":return this.parseTry();case"break":{this.next();const t=this.eat(";");t||this.missingAfter(e,";");const n=this.trailingComment(t??e);return[this.record(Ce(T.aussprung,{textLines:[n]}),e.line,e.line)]}case"else":return this.problem("web_parse_else_without_if",this.next()),[];case"case":case"default":for(this.problem("web_parse_case_outside_switch",this.next());this.tok&&!this.is(":")&&!this.is("->")&&!this.is(";");)this.next();return this.next(),[]}return this.is("{")?this.parseBlock().elements:this.is(";")?(this.next(),[this.record(Ce(T.anweisung),e.line,e.line)]):this.parseSimple()}parseTry(){const e=this.next();let t=e;const n=(r,o)=>{t=this.next();let u=1;for(;this.tok;){const m=this.next();if(t=m,m.kind!=="str"){if(m.text===r)u++;else if(m.text===o&&--u===0)return!0}}return this.missingAfter(t,o),!1};let a=!0;for(this.is("(")&&(a=n("(",")")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{");a&&(this.is("catch")||this.is("finally"));){const r=this.next().text==="catch";t=this.prev(),r&&(this.is("(")?a=n("(",")"):this.missingAfter(t,"(")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{")}const s=this.text(e.start,t.end).replace(/\s+/g," ");return[this.record(Ce(T.anweisung,{textLines:[s]}),e.line,t.line)]}trailingComment(e){const t=this.comments.find(a=>a.start>=e.end&&a.line===e.line),n=this.toks.find(a=>a.start>=e.end);return!t||n&&n.start1;)m.push("");const c=this.parseBody();return this.record(Ce(T.forSchleife,{textLines:m,loopBody:c.elements}),e.line,c.end)}parseSwitch(){const e=this.next(),t=this.parenthesized(e,this.labels.selector),n=[];let a=this.lineOf(this.prev());const s=this.eat("{");if(!s)this.missingAfter(this.prev(),"{");else{for(;this.tok&&!this.is("}");){if(!this.is("case")&&!this.is("default")){this.problem("web_parse_case_outside_switch",this.tok),this.parseStatement();continue}n.push(this.parseCase())}const o=this.eat("}");o||this.problem("web_parse_missing",s,"}"),a=this.lineOf(o??this.prev())}n.some(o=>o.isDefault)||n.push({name:"default",elements:[sn()],isDefault:!0});const r=[...n.filter(o=>!o.isDefault),...n.filter(o=>o.isDefault)].map(({name:o,elements:l})=>({name:o,elements:l}));return this.record(Ce(T.fallauswahl,{textLines:[t.text],cases:r}),e.line,a)}parseCase(){var l;const e=this.next(),t=e.text==="default",n=((l=this.tok)==null?void 0:l.start)??e.end;let a=n;for(;this.tok&&!this.is("->")&&!this.is(":")&&!this.is("{")&&!this.is("}");)a=this.next().end;const s=this.eat("->")??this.eat(":");s||this.missingAfter(this.prev(),"->");let r=t?"default":this.text(n,a),o=[];if((s==null?void 0:s.text)==="->")this.is("{")?(t&&(r=this.trailingComment(this.tok)||r),o=this.parseBlock().elements):this.tok&&!this.is("}")&&(o=this.parseStatement());else{for(t&&s&&(r=this.trailingComment(s)||r);this.tok&&!this.is("case")&&!this.is("default")&&!this.is("}");)o.push(...this.parseStatement());const u=o[o.length-1];(u==null?void 0:u.element.type)===T.aussprung&&u.element.textLines.every(m=>m==="")&&o.pop()}return{name:r,elements:this.finishList(o),isDefault:t}}parseSimple(){const e=this.next();let t=e;const n=e.text==="("||e.text==="["||e.text==="{"?[e.text]:[],a=()=>n.length>0&&n[n.length-1]==="{"&&e.text!=="{";let s;for(;this.tok;){const u=this.tok;if(u.text===";"&&u.kind==="op"&&!a()){s=this.next();break}if(u.line!==t.line&&!a()&&(n.length===0||u.kind==="id"&&xa.has(u.text)||u.text==="}")||u.text==="}"&&n.length===0)break;(u.text==="("||u.text==="["||u.text==="{")&&n.push(u.text),(u.text===")"||u.text==="]"||u.text==="}")&&n.pop(),t=this.next()}s||this.missingAfter(t,";"),this.checkBrackets(e,t);const r=this.text(e.start,t.end),o=this.simpleElement(r);if(!o)return[];const l=this.record(o.element,e.line,t.line);return l.prompt=o.prompt,[l]}checkBrackets(e,t){const n=[],a={")":"(","]":"[","}":"{"},s={"(":")","[":"]","{":"}"};for(let r=this.toks.indexOf(e);r>=0&&rCe(T.anweisung,{textLines:[u]}),a=/^System\.out\.println\s*\(([\s\S]*?)\)?$/.exec(e);if(a){const u=a[1].trim();if(u==="")return{element:n("output: ")};const m=/^"((?:[^"\\]|\\.)*)"$/.exec(u),c=m?HW(m[1]):void 0;return{element:n(`output: ${u}`),prompt:c!==void 0&&!c.includes('"')?c:void 0}}const s=new RegExp(`^(?:(${lm})\\s+)?([A-Za-z_]\\w*(?:\\s*\\[[^\\]]+\\])*)\\s*=\\s*\\w+\\.(nextInt|nextDouble|nextLine|next|nextBoolean)\\s*\\(\\s*\\)$`).exec(e);if(s&&!this.fileScanners.has(e.replace(/^[\s\S]*=\s*(\w+)\.\w+\s*\(\s*\)$/,"$1"))){const u={nextInt:"int",nextDouble:"double",nextLine:"String",next:"String",nextBoolean:"boolean"}[s[3]],m=s[2].replace(/\s+/g,"");if((s[1]===u||!s[1]&&m.includes("["))&&u)return{element:n(`input: ${u} ${m}`)}}const r=new RegExp(`^final\\s+(${lm}\\s+[\\s\\S]*)$`).exec(e);if(r)return{element:n(`const ${r[1]}`)};const o=/^(?:(?:\w+\s+)?\w+\s*=\s*)?([A-Za-z_]\w*)\s*\(/.exec(e);return o&&((l=this.opts.subprograms)!=null&&l.has(o[1]))?{element:Ce(T.aufruf,{textLines:[e]})}:{element:n(e)}}spansFor(e,t=[],n=[]){return e.forEach((a,s)=>{var l;const r=[...t,s],o=this.lines.get(a);o&&n.push({path:r,from:o[0],to:o[1]}),a.loopBody&&this.spansFor(a.loopBody,[...r,0],n),(l=a.cases)==null||l.forEach((u,m)=>this.spansFor(u.elements,[...r,m],n))}),n}isCodePlaceholder(e){return e.text.startsWith("//")&&e.text.slice(2).trim()===this.labels.code}markPlaceholderComments(){for(const e of this.comments)this.isCodePlaceholder(e)&&this.placeholders.push({from:e.start,to:e.end})}};function HW(i){return i.replace(/\\(.)/g,(e,t)=>({n:` -`,r:"\r",t:" "})[t]??t)}function As(i,e,t={}){const n=new GW(i,e,t),{caption:a,elements:s}=n.parseProgram();n.markPlaceholderComments(),n.checkImports(),n.checkScanners(),n.checkTypes(),n.checkCase();const r=n.spansFor(s),o=n.problems.sort((l,u)=>l.from-u.from);return{caption:a,className:n.className,elements:s,spans:r,placeholders:n.placeholders.sort((l,u)=>l.from-u.from),problems:o}}const I0={asClass:!1,withMain:!1},um=i=>/^import\s+[\w.]+(?:\.\*)?\s*;$/.test(i.trim()),mm=i=>i.map(e=>e.trim()===""?"":" "+e);function _g(i,e,t=I0){var u;const n=og(i,"java",e);let a=n.text.replaceAll(Ki,"").replaceAll(x0,"").split(` -`),s=n.spans;const r=m=>s=s.map(c=>({...c,from:c.from+m,to:c.to+m})),o=St(i.caption)!==void 0,l=[];if(t.withMain&&!o||t.asClass){for(let m=a.findIndex(um);m>=0;m=a.findIndex(um))l.push(a[m].trim()),a.splice(m,1),s=s.map(c=>({...c,from:c.from>m?c.from-1:c.from,to:c.to>m?c.to-1:c.to}));l.length&&((u=a[0])==null?void 0:u.trim())===""&&(a.splice(0,1),s=s.map(m=>({...m,from:m.from>0?m.from-1:m.from,to:m.to>0?m.to-1:m.to}))),l.length&&l.push("")}return t.withMain&&!o&&(a=[`public static void main(String[] args)${sx(i)?" throws Exception":""} {`,...mm(a),"}"],r(1)),t.asClass&&(a=[`public class ${cr(o?"Main":i.caption)} {`,...mm(a),"}"],r(1)),l.length&&(a=[...l,...a],r(l.length)),{text:a.join(` -`),spans:s}}function yi(i,e,t=I0){return _g(i,e,t).text}function Er(i){const e=jg(i).code;return(e.trim()===""?i:e).replace(/\s+/g,"")}function jg(i){let e="";for(let t=0;tnew Array(a+1).fill(0));for(let u=n-1;u>=0;u--)for(let m=a-1;m>=0;m--)s[u][m]=t(i[u],e[m])?s[u+1][m+1]+1:Math.max(s[u+1][m],s[u][m+1]);const r=[];let o=0,l=0;for(;o=s[o][l+1])?r.push({kind:"del",a:o++}):r.push({kind:"ins",b:l++});return r}function dm(i,e,t,n,a={},s=I0){const r=yi(t,n,s),o=yi(e,n,s);if(i===o)return r;const l=o.split(` +`;)n+=i[n]==="\\"?2:1;i[n]===r?n++:e.push({from:o,to:Math.min(n,i.length),key:"web_parse_unclosed_string",arg:r}),s("str",o,Math.min(n,i.length),l);continue}const u=/^\d[\d_]*(?:\.\d+)?(?:[eE][+-]?\d+)?[lLfFdD]?/.exec(i.slice(n,n+64));if(u){n+=u[0].length,s("num",o,n,l);continue}const m=/^[\p{L}_$][\p{L}\p{N}_$]*/u.exec(i.slice(n,n+256));if(m){n+=m[0].length,s("id",o,n,l);continue}const c=VW.find(d=>i.startsWith(d,n))??r;n+=c.length,s("op",o,n,l)}return t}const xa=new Set(["if","else","for","while","do","switch","case","default","break","return","try"]),Wr=new Set(["public","private","protected","static","final","abstract"]),lm="(?:int|long|short|byte|float|double|boolean|char|String)";let QW=class{constructor(e,t,n){y(this,"toks");y(this,"comments");y(this,"i",0);y(this,"problems",[]);y(this,"placeholders",[]);y(this,"lines",new Map);y(this,"className");y(this,"imports",[]);y(this,"fileScanners",new Set);this.src=e,this.labels=t,this.opts=n;const a=qW(e,this.problems);this.toks=a.filter(s=>s.kind!=="comment"),this.comments=a.filter(s=>s.kind==="comment")}get tok(){return this.toks[this.i]}is(e,t=this.tok){return t!==void 0&&t.text===e&&t.kind!=="str"}next(){return this.toks[this.i++]}eat(e){return this.is(e)?this.next():void 0}prev(){return this.toks[this.i-1]}problem(e,t,n){const a=t??{start:this.src.length,end:this.src.length};this.problems.push({from:a.start,to:Math.max(a.end,a.start+1),key:e,arg:n})}missingAfter(e,t){const n=e?e.end:this.src.length;this.problems.push({from:Math.max(0,n-1),to:n,key:"web_parse_missing",arg:t})}text(e,t){let n="",a=e;for(const s of this.comments)s.end<=e||s.start>=t||(n+=this.src.slice(a,Math.max(a,s.start)),a=Math.max(a,s.end));return n+=this.src.slice(a,Math.max(a,t)),n.replace(/\s*\n\s*/g," ").trim()}slot(e,t,n){const a=this.text(e,t);if(a===n){const s=this.src.indexOf(n,e);return s>=0&&this.placeholders.push({from:s,to:s+n.length}),""}return a}record(e,t,n){return this.lines.set(e,[t,n]),{element:e,from:t,to:n}}lineOf(e){var t;return(e==null?void 0:e.line)??((t=this.toks[this.toks.length-1])==null?void 0:t.line)??0}checkImports(){const e=["File","PrintWriter","FileReader","FileWriter","BufferedReader","IOException","FileNotFoundException"].map(t=>[t,"java.io"]);for(const[t,n]of[["Scanner","java.util"],["Arrays","java.util"],["Files","java.nio.file"],["Path","java.nio.file"],["Paths","java.nio.file"],...e]){const a=this.imports.some(r=>r===`import${n}.${t};`||r===`import${n}.*;`),s=this.toks.find((r,o)=>{var l;return r.kind==="id"&&r.text===t&&(t!=="Arrays"&&n!=="java.nio.file"||((l=this.toks[o+1])==null?void 0:l.text)===".")});if(!a&&s){this.problem("web_parse_missing_import",s,n==="java.util"?`import ${n}.${t};`:`import ${n}.*;`);return}}}checkScanners(){var n;const e=new Set(["next","nextInt","nextDouble","nextLine","nextBoolean","nextLong","nextFloat","hasNext","hasNextInt","hasNextLine","hasNextDouble"]),t=a=>this.toks.some((s,r)=>{const o=this.toks[r-1];return s.kind==="id"&&s.text===a&&!!o&&(o.kind==="id"&&!xa.has(o.text)&&o.text!=="new"||o.text===">"||o.text==="]")});for(let a=0;a{var s;return((s=this.toks[a-1])==null?void 0:s.text)==="class"}).map(n=>n.text));for(let n=0;nthis.toks.some((c,d)=>{var h;return c.text===m&&((h=this.toks[d-1])==null?void 0:h.kind)==="id"&&!xa.has(this.toks[d-1].text)}),n=["println","print","printf"],a=["length","charAt","substring","indexOf","equals","equalsIgnoreCase","compareTo","contains","startsWith","endsWith","toUpperCase","toLowerCase","trim","isEmpty","split","replace","sqrt","pow","abs","max","min","random","round","parseInt","parseDouble","nextInt","nextDouble","nextLine","next","hasNext","hasNextInt","hasNextLine"],s=(m,c)=>c.find(d=>d!==m&&d.toLowerCase()===m.toLowerCase());for(let m=0;mo.text).join(""));continue}const a=this.classStart();if(a!==void 0){this.className??(this.className=a.name),this.i=a.index;const r=this.parseClassBody();e.push(...r.elements),t??(t=r.caption);continue}const s=this.methodStart();if(s){n&&this.problem("web_parse_more_methods",this.tok);const r=this.parseMethod(s);n||(t=s.caption,e.push(...r)),n=!0;continue}if(this.is("}")){this.problem("web_parse_extra",this.next(),"}");continue}e.push(...this.parseStatement())}return{caption:t,elements:this.finishList(e)}}skipPast(e){for(;this.tok&&!this.is(e);)this.next();this.eat(e)}classStart(){var n,a;let e=this.i;for(;this.toks[e]&&Wr.has(this.toks[e].text);)e++;if(((n=this.toks[e])==null?void 0:n.text)!=="class"||((a=this.toks[e+1])==null?void 0:a.kind)!=="id")return;const t=this.toks[e+1].text;for(e+=2;this.toks[e]&&this.toks[e].text!=="{";)e++;return{name:t,index:e+1}}parseClassBody(){let e,t,n=!1;const a=[];for(;this.tok&&!this.is("}");){const s=this.methodStart();if(!s){this.is("{")?a.push(...this.parseBlock().elements):a.push(...this.parseStatement());continue}const r=this.tok,o=this.parseMethod(s);s.name==="main"?e??(e=o):t?n=!0:t={caption:s.caption,body:o},(e&&t||n)&&this.problem("web_parse_more_methods",r)}return this.eat("}"),e?{elements:e}:a.length>0||!t?{elements:a}:{caption:t.caption,elements:t.body}}methodStart(){var g,f,b,x,v,w,z,I,S,k,P;let e=this.i,t=0;for(;this.toks[e]&&Wr.has(this.toks[e].text);)e++,t++;const n=this.toks[e];if((n==null?void 0:n.kind)!=="id"||xa.has(n.text)||n.text==="new")return;for(e++;((g=this.toks[e])==null?void 0:g.text)==="["&&((f=this.toks[e+1])==null?void 0:f.text)==="]";)e+=2;const a=this.toks[e];if((a==null?void 0:a.kind)!=="id"||((b=this.toks[e+1])==null?void 0:b.text)!=="(")return;let s=0,r=e+1;for(;this.toks[r];r++){const D=this.toks[r].text;if(D==="(")s++;else{if(D===")"&&--s===0)break;if(D===";"||D==="{"||D==="}")break}}let o=r+1;if(((x=this.toks[r])==null?void 0:x.text)===")"&&((v=this.toks[o])==null?void 0:v.text)==="throws")for(o++;((w=this.toks[o])==null?void 0:w.kind)==="id"&&(((z=this.toks[o+1])==null?void 0:z.text)===","||((I=this.toks[o+1])==null?void 0:I.text)==="{"||((S=this.toks[o+1])==null?void 0:S.text)===".");)o+=this.toks[o+1].text==="{"?1:2;const l=this.toks[o],u=((k=this.toks[r])==null?void 0:k.text)===")"&&(l==null?void 0:l.text)==="{";if(!u&&!(t>0&&(l===void 0||this.toks[r]===void 0)))return;const m=((P=this.toks[r])==null?void 0:P.text)===")"?this.toks[r].start:this.src.length,c=this.text(this.toks[e+1].end,m),h=`${this.text(n.start,this.toks[e-1].end).replace(/\s+/g,"")} ${a.text}(${c.replace(/\s*,\s*/g,", ")})`;return this.i=Math.min(u?o:r+1,this.toks.length),{name:a.text,caption:a.text==="main"||!St(h)?void 0:h}}parseMethod(e){return this.is("{")?this.parseBlock().elements:(this.missingAfter(this.prev(),"{"),[])}parseBlock(){const e=this.next(),t=[];for(;this.tok&&!this.is("}")&&!(this.is("case")||this.is("default"));)t.push(...this.parseStatement());const n=this.eat("}");if(n||this.problem("web_parse_missing",e,"}"),t.length===0){const a=(n==null?void 0:n.start)??this.src.length,s=this.comments.find(r=>r.start>e.end&&r.startn.element)}parseStatement(){const e=this.tok;switch(e.kind==="id"?e.text:""){case"if":return[this.parseIf()];case"while":return[this.parseWhile()];case"do":return[this.parseDo()];case"for":return[this.parseFor()];case"switch":return[this.parseSwitch()];case"try":return this.parseTry();case"break":{this.next();const t=this.eat(";");t||this.missingAfter(e,";");const n=this.trailingComment(t??e);return[this.record(Ce(T.aussprung,{textLines:[n]}),e.line,e.line)]}case"else":return this.problem("web_parse_else_without_if",this.next()),[];case"case":case"default":for(this.problem("web_parse_case_outside_switch",this.next());this.tok&&!this.is(":")&&!this.is("->")&&!this.is(";");)this.next();return this.next(),[]}return this.is("{")?this.parseBlock().elements:this.is(";")?(this.next(),[this.record(Ce(T.anweisung),e.line,e.line)]):this.parseSimple()}parseTry(){const e=this.next();let t=e;const n=(r,o)=>{t=this.next();let u=1;for(;this.tok;){const m=this.next();if(t=m,m.kind!=="str"){if(m.text===r)u++;else if(m.text===o&&--u===0)return!0}}return this.missingAfter(t,o),!1};let a=!0;for(this.is("(")&&(a=n("(",")")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{");a&&(this.is("catch")||this.is("finally"));){const r=this.next().text==="catch";t=this.prev(),r&&(this.is("(")?a=n("(",")"):this.missingAfter(t,"(")),a&&this.is("{")?a=n("{","}"):a&&this.missingAfter(t,"{")}const s=this.text(e.start,t.end).replace(/\s+/g," ");return[this.record(Ce(T.anweisung,{textLines:[s]}),e.line,t.line)]}trailingComment(e){const t=this.comments.find(a=>a.start>=e.end&&a.line===e.line),n=this.toks.find(a=>a.start>=e.end);return!t||n&&n.start1;)m.push("");const c=this.parseBody();return this.record(Ce(T.forSchleife,{textLines:m,loopBody:c.elements}),e.line,c.end)}parseSwitch(){const e=this.next(),t=this.parenthesized(e,this.labels.selector),n=[];let a=this.lineOf(this.prev());const s=this.eat("{");if(!s)this.missingAfter(this.prev(),"{");else{for(;this.tok&&!this.is("}");){if(!this.is("case")&&!this.is("default")){this.problem("web_parse_case_outside_switch",this.tok),this.parseStatement();continue}n.push(this.parseCase())}const o=this.eat("}");o||this.problem("web_parse_missing",s,"}"),a=this.lineOf(o??this.prev())}n.some(o=>o.isDefault)||n.push({name:"default",elements:[sn()],isDefault:!0});const r=[...n.filter(o=>!o.isDefault),...n.filter(o=>o.isDefault)].map(({name:o,elements:l})=>({name:o,elements:l}));return this.record(Ce(T.fallauswahl,{textLines:[t.text],cases:r}),e.line,a)}parseCase(){var l;const e=this.next(),t=e.text==="default",n=((l=this.tok)==null?void 0:l.start)??e.end;let a=n;for(;this.tok&&!this.is("->")&&!this.is(":")&&!this.is("{")&&!this.is("}");)a=this.next().end;const s=this.eat("->")??this.eat(":");s||this.missingAfter(this.prev(),"->");let r=t?"default":this.text(n,a),o=[];if((s==null?void 0:s.text)==="->")this.is("{")?(t&&(r=this.trailingComment(this.tok)||r),o=this.parseBlock().elements):this.tok&&!this.is("}")&&(o=this.parseStatement());else{for(t&&s&&(r=this.trailingComment(s)||r);this.tok&&!this.is("case")&&!this.is("default")&&!this.is("}");)o.push(...this.parseStatement());const u=o[o.length-1];(u==null?void 0:u.element.type)===T.aussprung&&u.element.textLines.every(m=>m==="")&&o.pop()}return{name:r,elements:this.finishList(o),isDefault:t}}parseSimple(){const e=this.next();let t=e;const n=e.text==="("||e.text==="["||e.text==="{"?[e.text]:[],a=()=>n.length>0&&n[n.length-1]==="{"&&e.text!=="{";let s;for(;this.tok;){const u=this.tok;if(u.text===";"&&u.kind==="op"&&!a()){s=this.next();break}if(u.line!==t.line&&!a()&&(n.length===0||u.kind==="id"&&xa.has(u.text)||u.text==="}")||u.text==="}"&&n.length===0)break;(u.text==="("||u.text==="["||u.text==="{")&&n.push(u.text),(u.text===")"||u.text==="]"||u.text==="}")&&n.pop(),t=this.next()}s||this.missingAfter(t,";"),this.checkBrackets(e,t);const r=this.text(e.start,t.end),o=this.simpleElement(r);if(!o)return[];const l=this.record(o.element,e.line,t.line);return l.prompt=o.prompt,[l]}checkBrackets(e,t){const n=[],a={")":"(","]":"[","}":"{"},s={"(":")","[":"]","{":"}"};for(let r=this.toks.indexOf(e);r>=0&&rCe(T.anweisung,{textLines:[u]}),a=/^System\.out\.println\s*\(([\s\S]*?)\)?$/.exec(e);if(a){const u=a[1].trim();if(u==="")return{element:n("output: ")};const m=/^"((?:[^"\\]|\\.)*)"$/.exec(u),c=m?UW(m[1]):void 0;return{element:n(`output: ${u}`),prompt:c!==void 0&&!c.includes('"')?c:void 0}}const s=new RegExp(`^(?:(${lm})\\s+)?([A-Za-z_]\\w*(?:\\s*\\[[^\\]]+\\])*)\\s*=\\s*\\w+\\.(nextInt|nextDouble|nextLine|next|nextBoolean)\\s*\\(\\s*\\)$`).exec(e);if(s&&!this.fileScanners.has(e.replace(/^[\s\S]*=\s*(\w+)\.\w+\s*\(\s*\)$/,"$1"))){const u={nextInt:"int",nextDouble:"double",nextLine:"String",next:"String",nextBoolean:"boolean"}[s[3]],m=s[2].replace(/\s+/g,"");if((s[1]===u||!s[1]&&m.includes("["))&&u)return{element:n(`input: ${u} ${m}`)}}const r=new RegExp(`^final\\s+(${lm}\\s+[\\s\\S]*)$`).exec(e);if(r)return{element:n(`const ${r[1]}`)};const o=/^(?:(?:\w+\s+)?\w+\s*=\s*)?([A-Za-z_]\w*)\s*\(/.exec(e);return o&&((l=this.opts.subprograms)!=null&&l.has(o[1]))?{element:Ce(T.aufruf,{textLines:[e]})}:{element:n(e)}}spansFor(e,t=[],n=[]){return e.forEach((a,s)=>{var l;const r=[...t,s],o=this.lines.get(a);o&&n.push({path:r,from:o[0],to:o[1]}),a.loopBody&&this.spansFor(a.loopBody,[...r,0],n),(l=a.cases)==null||l.forEach((u,m)=>this.spansFor(u.elements,[...r,m],n))}),n}isCodePlaceholder(e){return e.text.startsWith("//")&&e.text.slice(2).trim()===this.labels.code}markPlaceholderComments(){for(const e of this.comments)this.isCodePlaceholder(e)&&this.placeholders.push({from:e.start,to:e.end})}};function UW(i){return i.replace(/\\(.)/g,(e,t)=>({n:` +`,r:"\r",t:" "})[t]??t)}function As(i,e,t={}){const n=new QW(i,e,t),{caption:a,elements:s}=n.parseProgram();n.markPlaceholderComments(),n.checkImports(),n.checkScanners(),n.checkTypes(),n.checkCase();const r=n.spansFor(s),o=n.problems.sort((l,u)=>l.from-u.from);return{caption:a,className:n.className,elements:s,spans:r,placeholders:n.placeholders.sort((l,u)=>l.from-u.from),problems:o}}const I0={asClass:!1,withMain:!1},um=i=>/^import\s+[\w.]+(?:\.\*)?\s*;$/.test(i.trim()),mm=i=>i.map(e=>e.trim()===""?"":" "+e);function jg(i,e,t=I0){var u;const n=lg(i,"java",e);let a=n.text.replaceAll(Ki,"").replaceAll(x0,"").split(` +`),s=n.spans;const r=m=>s=s.map(c=>({...c,from:c.from+m,to:c.to+m})),o=St(i.caption)!==void 0,l=[];if(t.withMain&&!o||t.asClass){for(let m=a.findIndex(um);m>=0;m=a.findIndex(um))l.push(a[m].trim()),a.splice(m,1),s=s.map(c=>({...c,from:c.from>m?c.from-1:c.from,to:c.to>m?c.to-1:c.to}));l.length&&((u=a[0])==null?void 0:u.trim())===""&&(a.splice(0,1),s=s.map(m=>({...m,from:m.from>0?m.from-1:m.from,to:m.to>0?m.to-1:m.to}))),l.length&&l.push("")}return t.withMain&&!o&&(a=[`public static void main(String[] args)${rx(i)?" throws Exception":""} {`,...mm(a),"}"],r(1)),t.asClass&&(a=[`public class ${cr(o?"Main":i.caption)} {`,...mm(a),"}"],r(1)),l.length&&(a=[...l,...a],r(l.length)),{text:a.join(` +`),spans:s}}function yi(i,e,t=I0){return jg(i,e,t).text}function Er(i){const e=Cg(i).code;return(e.trim()===""?i:e).replace(/\s+/g,"")}function Cg(i){let e="";for(let t=0;tnew Array(a+1).fill(0));for(let u=n-1;u>=0;u--)for(let m=a-1;m>=0;m--)s[u][m]=t(i[u],e[m])?s[u+1][m+1]+1:Math.max(s[u+1][m],s[u][m+1]);const r=[];let o=0,l=0;for(;o=s[o][l+1])?r.push({kind:"del",a:o++}):r.push({kind:"ins",b:l++});return r}function dm(i,e,t,n,a={},s=I0){const r=yi(t,n,s),o=yi(e,n,s);if(i===o)return r;const l=o.split(` `),u=r.split(` `),m=i.split(` -`),c=new Array(l.length).fill(-1);for(const v of cm(l,m,(w,z)=>Er(w)!==""&&Er(w)===Er(z)))v.kind==="keep"&&(c[v.a]=v.b);const d=[];let h=0,g="";const f=v=>{for(;hw===z))if(v.kind==="keep")c[v.a]>=0&&(f(c[v.a]+1),g="");else if(v.kind==="del"){const w=c[v.a];if(w<0)continue;f(w),g||(g=jg(m[w]).comment),h=w+1}else{const w=u[v.b];d.push(g&&w.trim()!==""?`${w} ${g}`:w),w.trim()!==""&&(g="")}f(m.length);const b=d.join(` -`),x=As(b,n,a);return yi(Ps(t,x),n,s)===r?b:r}function Ps(i,e){let t=e.caption??(St(i.caption)?"":i.caption);return!e.caption&&e.className&&cr(t)!==e.className&&(t=e.className),{...i,caption:t,elements:Xo(i.elements,e.elements)}}function Xo(i,e){return e.map((t,n)=>{const a=i[n];if(!a||a.type!==t.type)return t;const s={...t,zoomX:a.zoomX,zoomY:a.zoomY};return a.textColor&&(s.textColor=a.textColor),a.backgroundColor&&(s.backgroundColor=a.backgroundColor),t.loopBody&&(s.loopBody=Xo(a.loopBody??[],t.loopBody)),t.cases&&(s.cases=t.cases.map((r,o)=>{var l,u;return{...r,elements:Xo(((u=(l=a.cases)==null?void 0:l[o])==null?void 0:u.elements)??[],r.elements)}})),s})}class VW extends Error{}function qW(i,e){const t=m=>{throw new VW(`${e}: ${m}`)};let n="",a="",s="",r=30;const o=[];let l,u=!1;for(const m of i){const c=m.trim();if(l&&u&&(/^ {4}|^\t/.test(m)||c==="")){l.code+=(l.code?` -`:"")+m.replace(/^( {4}|\t)/,"");continue}if(u=!1,!c)continue;const d=/^(titel|intro|frage|feld|runde|karte|ziel):\s*(.*)$/.exec(c);if(d){const[,h,g]=d;if(h==="runde")l={code:"",map:[],question:s,explanation:""},o.push(l),u=!0;else if(!l)h==="titel"?n=g:h==="intro"?a=g:h==="frage"?s=g:h==="feld"?r=[10,20,30].includes(Number(g))?Number(g):t("„feld:“ ist 10, 20 oder 30 (Zentimeter)."):t(`„${h}:“ gehört in eine Runde.`);else if(h==="frage")l.question=g;else if(h==="karte")l.map=g.split("|").map(f=>f.trim());else if(h==="ziel"){const f=/^(\d+)\s*,\s*(\d+)$/.exec(g);f||t(`„ziel: ${g}“ muss Spalte,Zeile sein, zum Beispiel „ziel: 2,0“.`),l.target={col:Number(f[1]),row:Number(f[2])}}else t(`„${h}:“ gehört vor die erste Runde.`);continue}l&&c.startsWith(">")?l.explanation+=(l.explanation?" ":"")+c.slice(1).trim():t(`Unbekannte Zeile im Spiel: „${c}“`)}return n||t("Das Spiel braucht eine Zeile „titel:“."),o.length||t("Das Spiel braucht mindestens eine „runde:“."),o.forEach((m,c)=>{m.code=m.code.replace(/\n+$/,""),m.code.trim()||t(`Runde ${c+1}: Code fehlt.`),(!m.map.length||m.map.some(d=>d.length!==m.map[0].length))&&t(`Runde ${c+1}: „karte:“ fehlt oder die Zeilen sind verschieden lang.`),m.map.join("").replace(/[^\^> v <).`),/[^.#=rgby^>=m.map.length||m.target.col>=m.map[0].length)&&t(`Runde ${c+1}: „ziel:“ liegt außerhalb der Karte.`),m.question||t(`Runde ${c+1}: keine Frage.`)}),{title:n,intro:a,field:r,rounds:o}}function Cg(i,e){return hg([`raster: ${e/10}`,...i.map].join(` -`))}function QW(i,e,t){const n=e.map[0].length*t,a=e.map.length*t,s=Math.floor((i.x+n/2)/t),r=Math.floor((a/2-i.y)/t);if(!(s<0||r<0||s>=e.map[0].length||r>=e.map.length))return{col:s,row:r}}const UW={condition:"Bedingung",selector:"Wert",code:"Dein Code",start:"Startwert",step:"Schritt",end:"Ende"};function YW(i,e){const t=As(i.code,UW),n=t.problems.map(o=>typeof o=="string"?o:JSON.stringify(o)),a=Ps({caption:"",elements:[]},t),s=Sg(a,void 0,Cg(i,e)),r=s.frames[s.frames.length-1].pose;return{run:s,end:r,cell:QW(r,i,e),problems:n}}const $W=/\[\[(.+?)\]\]/g;function KW(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>XW(o.slice(r),e,t.title))}),!eE(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function XW(i,e,t){const n=[];let a=0;for(const s of i.matchAll($W)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function eE(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function tE(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const hm={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function nE(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in hm){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:hm[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=lE(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:aE,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:sE,h:s},n.side!==void 0&&(e[n.side]={x:rE,y:t+s/2,w:oE,h:40}),t+=s+gm}),{boxes:e,height:t-gm+10}}function Ag(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));lEr(w)!==""&&Er(w)===Er(z)))v.kind==="keep"&&(c[v.a]=v.b);const d=[];let h=0,g="";const f=v=>{for(;hw===z))if(v.kind==="keep")c[v.a]>=0&&(f(c[v.a]+1),g="");else if(v.kind==="del"){const w=c[v.a];if(w<0)continue;f(w),g||(g=Cg(m[w]).comment),h=w+1}else{const w=u[v.b];d.push(g&&w.trim()!==""?`${w} ${g}`:w),w.trim()!==""&&(g="")}f(m.length);const b=d.join(` +`),x=As(b,n,a);return yi(Ps(t,x),n,s)===r?b:r}function Ps(i,e){let t=e.caption??(St(i.caption)?"":i.caption);return!e.caption&&e.className&&cr(t)!==e.className&&(t=e.className),{...i,caption:t,elements:Xo(i.elements,e.elements)}}function Xo(i,e){return e.map((t,n)=>{const a=i[n];if(!a||a.type!==t.type)return t;const s={...t,zoomX:a.zoomX,zoomY:a.zoomY};return a.textColor&&(s.textColor=a.textColor),a.backgroundColor&&(s.backgroundColor=a.backgroundColor),t.loopBody&&(s.loopBody=Xo(a.loopBody??[],t.loopBody)),t.cases&&(s.cases=t.cases.map((r,o)=>{var l,u;return{...r,elements:Xo(((u=(l=a.cases)==null?void 0:l[o])==null?void 0:u.elements)??[],r.elements)}})),s})}class YW extends Error{}function $W(i,e){const t=m=>{throw new YW(`${e}: ${m}`)};let n="",a="",s="",r=30;const o=[];let l,u=!1;for(const m of i){const c=m.trim();if(l&&u&&(/^ {4}|^\t/.test(m)||c==="")){l.code+=(l.code?` +`:"")+m.replace(/^( {4}|\t)/,"");continue}if(u=!1,!c)continue;const d=/^(titel|intro|frage|feld|runde|karte|ziel):\s*(.*)$/.exec(c);if(d){const[,h,g]=d;if(h==="runde")l={code:"",map:[],question:s,explanation:""},o.push(l),u=!0;else if(!l)h==="titel"?n=g:h==="intro"?a=g:h==="frage"?s=g:h==="feld"?r=[10,20,30].includes(Number(g))?Number(g):t("„feld:“ ist 10, 20 oder 30 (Zentimeter)."):t(`„${h}:“ gehört in eine Runde.`);else if(h==="frage")l.question=g;else if(h==="karte")l.map=g.split("|").map(f=>f.trim());else if(h==="ziel"){const f=/^(\d+)\s*,\s*(\d+)$/.exec(g);f||t(`„ziel: ${g}“ muss Spalte,Zeile sein, zum Beispiel „ziel: 2,0“.`),l.target={col:Number(f[1]),row:Number(f[2])}}else t(`„${h}:“ gehört vor die erste Runde.`);continue}l&&c.startsWith(">")?l.explanation+=(l.explanation?" ":"")+c.slice(1).trim():t(`Unbekannte Zeile im Spiel: „${c}“`)}return n||t("Das Spiel braucht eine Zeile „titel:“."),o.length||t("Das Spiel braucht mindestens eine „runde:“."),o.forEach((m,c)=>{m.code=m.code.replace(/\n+$/,""),m.code.trim()||t(`Runde ${c+1}: Code fehlt.`),(!m.map.length||m.map.some(d=>d.length!==m.map[0].length))&&t(`Runde ${c+1}: „karte:“ fehlt oder die Zeilen sind verschieden lang.`),m.map.join("").replace(/[^\^> v <).`),/[^.#=rgby^>=m.map.length||m.target.col>=m.map[0].length)&&t(`Runde ${c+1}: „ziel:“ liegt außerhalb der Karte.`),m.question||t(`Runde ${c+1}: keine Frage.`)}),{title:n,intro:a,field:r,rounds:o}}function Ag(i,e){return gg([`raster: ${e/10}`,...i.map].join(` +`))}function KW(i,e,t){const n=e.map[0].length*t,a=e.map.length*t,s=Math.floor((i.x+n/2)/t),r=Math.floor((a/2-i.y)/t);if(!(s<0||r<0||s>=e.map[0].length||r>=e.map.length))return{col:s,row:r}}const XW={condition:"Bedingung",selector:"Wert",code:"Dein Code",start:"Startwert",step:"Schritt",end:"Ende"};function eE(i,e){const t=As(i.code,XW),n=t.problems.map(o=>typeof o=="string"?o:JSON.stringify(o)),a=Ps({caption:"",elements:[]},t),s=Tg(a,void 0,Ag(i,e)),r=s.frames[s.frames.length-1].pose;return{run:s,end:r,cell:KW(r,i,e),problems:n}}const tE=/\[\[(.+?)\]\]/g;function nE(i,e){const t={title:"",task:"",blocks:[]},n=[];let a=!1;for(const s of i){if(/^\s*```/.test(s)){a||n.push([]),a=!a;continue}if(a){n[n.length-1].push(s.replace(/\s+$/,""));continue}const r=s.trim();if(!r)continue;const o=/^([a-zäöü]+):\s*(.*)$/i.exec(r);if(!o)throw new Error(`${e}: Unbekannte Zeile im Lückentext: „${r}“.`);const l=o[2].trim();switch(o[1].toLowerCase()){case"titel":t.title=l;break;case"auftrag":t.task=l;break;case"erklärung":case"erklaerung":t.explanation=l;break;default:throw new Error(`${e}: Unbekannter Schlüssel „${o[1]}“ im Lückentext.`)}}if(a)throw new Error(`${e}: Der Codeblock im Lückentext wird nicht mit \`\`\` geschlossen.`);if(!t.title)throw new Error(`${e}: Ein Lückentext braucht einen Titel.`);if(!n.some(s=>s.some(r=>r.trim())))throw new Error(`${e}: Lückentext „${t.title}“ braucht einen Codeblock.`);if(t.blocks=n.map(s=>{const r=Math.min(...s.filter(o=>o.trim()).map(o=>/^ */.exec(o)[0].length));return s.map(o=>iE(o.slice(r),e,t.title))}),!aE(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function iE(i,e,t){const n=[];let a=0;for(const s of i.matchAll(tE)){s.index>a&&n.push(i.slice(a,s.index));const r=s[1].split(/\s+\|\s+/).map(o=>o.trim()).filter(Boolean);if(!r.length)throw new Error(`${e}: Leere Lücke im Lückentext „${t}“.`);n.push({answers:r}),a=s.index+s[0].length}if(atypeof s=="string"&&(s.includes("[[")||s.includes("]]"))))throw new Error(`${e}: Unvollständige Lücke im Lückentext „${t}“: „${i}“.`);return n}function aE(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function sE(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}const hm={start:"oval",ende:"oval",anweisung:"rechteck",eingabe:"parallelogramm",ausgabe:"parallelogramm",frage:"raute"};function rE(i,e){const t={title:"",task:"",nodes:[]},n=[];for(const a of i){const s=a.trim();if(!s)continue;const r=/^([a-zäöü]+):\s*(.*)$/i.exec(s);if(!r)throw new Error(`${e}: Unbekannte Zeile im PAP: „${s}“.`);const o=r[1].toLowerCase(),l=r[2].trim();if(o==="titel")t.title=l;else if(o==="auftrag")t.task=l;else if(o==="erklärung"||o==="erklaerung")t.explanation=l;else if(o==="legende")t.legend=/^(ja|yes|true|sim)$/i.test(l);else if(o in hm){const[u,m]=l.split(/\s+\|\s+/);if(!u)throw new Error(`${e}: Leeres Element im PAP: „${s}“.`);const c={shape:hm[o],text:u.trim()};if(t.nodes.push(c),o!=="frage"){if(m)throw new Error(`${e}: Nur eine Frage hat einen zweiten Ausgang: „${s}“.`);continue}const d=/^(ja|nein)\s*(->|:)\s*(.+)$/i.exec(m??"");if(!d)throw new Error(`${e}: Eine Frage braucht „| nein -> Text“ oder „| nein: Text“: „${s}“.`);c.sideExit=d[1].toLowerCase(),d[2]===":"?(c.side=t.nodes.length,t.nodes.push({shape:"rechteck",text:d[3].trim(),isSide:!0})):n.push({node:t.nodes.length-1,target:d[3].trim(),line:s})}else throw new Error(`${e}: Unbekannter Schlüssel „${r[1]}“ im PAP.`)}for(const a of n){const s=t.nodes.findIndex((r,o)=>o{if(n.isSide)return;const s=dE(n.shape);(i.nodes.some(r=>r.backTo===a)||n.side!==void 0)&&(t+=12),e[a]={x:lE,y:t+s/2,w:n.shape==="raute"?170:n.shape==="oval"?110:uE,h:s},n.side!==void 0&&(e[n.side]={x:mE,y:t+s/2,w:cE,h:40}),t+=s+gm}),{boxes:e,height:t-gm+10}}function Pg(i,e){if((r=>r.length*6.6<=e)(i))return[i];const n=i.split(" ");let a=[i],s=1/0;for(let r=1;ru.length));l|→)\s*/);if(t.length!==2)throw new ie(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function cE(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in Pt))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof Pt[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Bg({inputs:[],expected:[],sensors:t},e[2])}function Bg(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=bs(Lh(t.join(", ")))),i}function dE(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(mE(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ie(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:bs(Lh(l))})}catch(u){throw new ie(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Bg({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ie(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ie(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:lb(l)})}catch(u){throw new ie(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(cE(l))}catch(u){throw new ie(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ie(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ie(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ie(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` +`).slice(t[0].length)}}function gE(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new ie(`${e}: Test „${i}“ braucht genau ein „->“.`);const n=(a,s)=>a.trim()===""||a.trim()==="-"?[]:a.split(s).map(r=>r.trim());return{inputs:n(t[0],/\s*,\s*/),expected:n(t[1],/\s*\|\s*/)}}function pE(i){const e=/^(.*?)\s*(?:->|→)\s*(.*)$/.exec(i.trim());if(!e)throw new Error(`„messwerte: ${i}“ braucht ein „->“.`);const t={};for(const n of e[1].split(/\s*,\s*/).filter(Boolean)){const a=/^(\w+)\s*=\s*(.+)$/.exec(n);if(!a||!(a[1]in Pt))throw new Error(`Unbekannter Sensor in „${n}“.`);t[a[1]]=a[2].split("/").map(s=>{const r=s.trim();if(r==="true"||r==="false")return r==="true";if(/^-?\d+(\.\d+)?$/.test(r))return Number(r);if(typeof Pt[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Og({inputs:[],expected:[],sensors:t},e[2])}function Og(i,e){const t=[];e=e.replace(/\bscreen\s+("(?:[^"\\]|\\.)*")/u,(n,a)=>(i.screen=JSON.parse(a),""));for(const n of e.split(/\s*,\s*/).filter(Boolean))n==="ledOn"||n==="ledOff"?i.led=n==="ledOn":n==="tone"||n==="noTone"?i.tone=n==="tone":n==="none"?i.drive=[]:n==="drives"?i.drives=!0:t.push(n);return t.length&&(i.drive=bs(Wh(t.join(", ")))),i}function fE(i,e,t){const n={id:i,title:"",task:"",tests:[],requires:[],hints:[],subprograms:[]};let a;for(const s of e){const r=/^(titel|auftrag|start|test|datei|fahrt|befehle|welt|messwerte|schleifentiefe|braucht|tipp|lösung|loesung|unterprogramm|code|bereich):\s*(.*)$/i.exec(s.trim());if(r){const[,o,l]=r;switch(a=void 0,o.toLowerCase()){case"titel":n.title=l;break;case"auftrag":n.task=l,a="task";break;case"start":n.start=l;break;case"test":n.tests.push(gE(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new ie(`${t}: Übung „${i}“: „datei:“ braucht vorher einen Test und die Form „name.txt -> Zeile | Zeile“.`);const m=n.tests[n.tests.length-1];m.files=[...m.files??[],{name:u[1],lines:u[2].trim()===""?[]:u[2].split(/\s*\|\s*/).map(c=>c.trim())}];break}case"fahrt":try{n.tests.push({inputs:[],expected:[],drive:bs(Wh(l))})}catch(u){throw new ie(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Og({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new ie(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new ie(`${t}: Übung „${i}“: Weltname „${m}“ (nur Buchstaben, Ziffern, -).`);n.tests.push({inputs:[],expected:[],world:m})}break}case"befehle":try{n.tests.push({inputs:[],expected:[],actions:ub(l)})}catch(u){throw new ie(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(pE(l))}catch(u){throw new ie(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new ie(`${t}: Übung „${i}“: „schleifentiefe:“ braucht eine Zahl ab 1.`);break;case"braucht":n.requires.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"tipp":n.hints.push(l),a="hint";break;case"lösung":case"loesung":n.solution=l;break;case"unterprogramm":n.subprograms.push(...l.split(/\s*,\s*/).filter(Boolean));break;case"code":if(l.trim().toLowerCase()!=="java")throw new ie(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break;case"bereich":{const u=l.trim().toLowerCase();if(u!=="struktogramm"&&u!=="code"&&u!=="beide")throw new ie(`${t}: Übung „${i}“: „bereich:“ kennt nur „struktogramm“, „code“ oder „beide“.`);n.area=u;break}}}else a&&s.trim()!==""?a==="task"?n.task+=` `+s.trim():n.hints[n.hints.length-1]+=` `+s.trim():s.trim()===""&&a==="task"&&(n.task+=` -`)}if(!n.title)throw new ie(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ie(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function hE(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ie(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ie(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ie(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ie(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ie(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function Og(i,e){const t=[],n=i.split(` +`)}if(!n.title)throw new ie(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new ie(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function bE(i,e){const t=[];for(const n of i){const a=n.trim();if(a.startsWith("?"))t.push({question:a.slice(1).trim(),options:[]});else if(/^- \[[ xX]\]/.test(a)){const s=t.at(-1);if(!s)throw new ie(`${e}: Antwort ohne Frage im Quiz.`);s.options.push({text:a.slice(5).trim(),correct:a[3].toLowerCase()==="x"})}else if(a.startsWith("= ")){const s=t.at(-1),r=/^=\s+(.+?)\s+->\s+(.+)$/.exec(a);if(!s||!r)throw new ie(`${e}: Zuordnung „${a}“ braucht die Form „= links -> rechts“ nach einer Frage.`);(s.pairs??(s.pairs=[])).push({left:r[1].trim(),right:r[2].trim()})}else if(a.startsWith("→")){const s=t.at(-1);if(!s)throw new ie(`${e}: „→ Schritt“ ohne Frage im Quiz.`);s.ref=a.slice(1).trim()}else if(a.startsWith(">")){const s=t.at(-1);s&&(s.explanation=((s.explanation?s.explanation+" ":"")+a.slice(1).trim()).trim())}}for(const n of t){if(n.pairs){const a=new Set(n.pairs.map(s=>s.right));if(n.options.length>0||n.pairs.length<2||a.size!==n.pairs.length)throw new ie(`${e}: Zuordnung „${n.question}“ braucht mindestens zwei Paare mit verschiedenen rechten Seiten und keine Antworten.`);continue}if(n.options.length<2||!n.options.some(a=>a.correct))throw new ie(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function Mg(i,e){const t=[],n=i.split(` `);let a=[];const s=()=>{const r=a.join(` -`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ie(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ie(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ie(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:dE(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>gE(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:hE(l,e)});break;case"bild":if(!c)throw new ie(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ie(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/),g=h==="animiert"?{animated:!0}:h?{labeled:h}:{};t.push({kind:"graphic",file:d,...g,caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` -`).trim()});break;case"spiel":try{if(jW(c))t.push({kind:"roundGame",game:CW(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:MW(l,e)});else if(c==="fahrt")t.push({kind:"driveGame",game:qW(l,e)});else if(c==="kreuzwort")t.push({kind:"crosswordGame",game:LW(l,e)});else{if(c)throw new ie(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge, prinzessin, fahrt oder kreuzwort).`);t.push({kind:"game",game:Ux(l,e)})}}catch(d){throw new ie(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:KW(l,e)})}catch(d){throw new ie(d.message)}break;case"pap":try{t.push({kind:"pap",pap:nE(l,e)})}catch(d){throw new ie(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` +`).trim();r&&t.push({kind:"markdown",text:r}),a=[]};for(let r=0;r=n.length)throw new ie(`${e}: Block „::: ${o[1]}“ wird nicht mit „:::“ geschlossen.`);const m=o[1].toLowerCase(),c=o[2].trim();switch(m){case"diagramm":if(!c)throw new ie(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new ie(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:fE(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>xE(d.slice(2).trim()))});break;case"kompetenzen":t.push({kind:"competences",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>d.slice(2).trim())});break;case"quiz":t.push({kind:"quiz",questions:bE(l,e)});break;case"bild":if(!c)throw new ie(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new ie(`${e}: „::: grafik“ braucht einen Dateinamen.`);{const[d,h]=c.split(/\s+/),g=h==="animiert"?{animated:!0}:h?{labeled:h}:{};t.push({kind:"graphic",file:d,...g,caption:l.join(" ").trim()})}break;case"angeberwissen":t.push({kind:"brag",text:l.join(` +`).trim()});break;case"spiel":try{if(DW(c))t.push({kind:"roundGame",game:BW(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:EW(l,e)});else if(c==="fahrt")t.push({kind:"driveGame",game:$W(l,e)});else if(c==="kreuzwort")t.push({kind:"crosswordGame",game:FW(l,e)});else{if(c)throw new ie(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge, prinzessin, fahrt oder kreuzwort).`);t.push({kind:"game",game:Yx(l,e)})}}catch(d){throw new ie(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:nE(l,e)})}catch(d){throw new ie(d.message)}break;case"pap":try{t.push({kind:"pap",pap:rE(l,e)})}catch(d){throw new ie(d.message)}break;case"ludwig":t.push({kind:"brag",text:l.join(` `).trim(),tip:!0});break;case"caesar":{const d=c?Number(c):3;if(!Number.isInteger(d)||d<0||d>25)throw new ie(`${e}: „::: caesar“ braucht einen Schlüssel von 0 bis 25.`);t.push({kind:"caesar",key:d,text:l.join(" ").trim()});break}case"mbot2":{const d={kind:"robotModel",focus:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*(fokus|focus|ansicht|view|drehen|spin):\s*(.*)$/i.exec(h);if(!g)throw new ie(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=pm(g[2],e):f==="ansicht"||f==="view"?d.view=g[2].trim().toLowerCase():d.spin=/^(ja|yes|true|sim)$/i.test(g[2].trim())}t.push(d);break}case"mbot2quiz":{const d={kind:"robotQuiz",tasks:[]};for(const h of l.filter(g=>g.trim())){const g=/^\s*-\s*(\w+)\s*:\s*(.+)$/.exec(h),f=/^\s*(fertig|done):\s*(.+)$/i.exec(h);if(g)d.tasks.push({part:pm(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new ie(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new ie(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new ie(`${e}: „::: datei“ braucht einen Dateinamen wie brief.txt, liste.csv oder daten.json.`);for(;l.length&&l[0].trim()==="";)l.shift();for(;l.length&&l[l.length-1].trim()==="";)l.pop();t.push({kind:"textFile",name:c,content:l.join(` -`)});break}default:throw new ie(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function gE(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function pE(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ie(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ie(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ie(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function fE(i,e){var c;const{meta:t,body:n}=Dg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ie(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Og(l.lines.join(` +`)});break}default:throw new ie(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function xE(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function vE(i,e){const t=new Map(i.map((a,s)=>[a.title.toLowerCase(),s]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="checklist"){for(const s of a.items)if(s.ref!==void 0&&(s.step=t.get(s.ref.toLowerCase()),s.step===void 0))throw new ie(`${e}: Checkliste verweist auf unbekannten Schritt „${s.ref}“.`)}const n=new Set(i.flatMap(a=>a.blocks).flatMap(a=>a.kind==="checklist"?a.items.map(s=>s.step):[]));for(const a of i.flatMap(s=>s.blocks))if(a.kind==="quiz"){for(const s of a.questions)if(s.ref!==void 0){if(s.step=t.get(s.ref.toLowerCase()),s.step===void 0)throw new ie(`${e}: Quizfrage „${s.question}“ verweist auf unbekannten Schritt „${s.ref}“.`);if(!n.has(s.step))throw new ie(`${e}: Zu „${s.ref}“ (Quizfrage „${s.question}“) gibt es keinen Checklistenpunkt.`)}}}function yE(i,e){var c;const{meta:t,body:n}=Bg(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new ie(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Mg(l.lines.join(` `),e)})};for(const d of n.split(` -`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ie(`${e}: Keine Schritte (## Überschrift) gefunden.`);pE(r,e);const m=t.get("titel");if(!m)throw new ie(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function bE(i,e){const{meta:t,body:n}=Dg(i,e),a=t.get("titel");if(!a)throw new ie(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:Og(n,e)}}function pm(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!cb(n))throw new ie(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${Wh.join(", ")}.`);return t}const xE=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":n4,"../../lessons/de/02-der-editor.md":i4,"../../lessons/de/03-speichern-oeffnen-exportieren.md":a4,"../../lessons/de/04-variablen-und-datentypen.md":s4,"../../lessons/de/05-sequenz.md":r4,"../../lessons/de/06-eingabe-und-ausgabe.md":o4,"../../lessons/de/07-simulation-und-schreibtischtest.md":l4,"../../lessons/de/08-verzweigung.md":u4,"../../lessons/de/09-bedingungen-verknuepfen.md":m4,"../../lessons/de/10-fallauswahl.md":c4,"../../lessons/de/11-while-schleife.md":d4,"../../lessons/de/12-do-while-schleife.md":h4,"../../lessons/de/13-for-schleife.md":g4,"../../lessons/de/14-verschachteln.md":p4,"../../lessons/de/15-arrays.md":f4,"../../lessons/de/16-zweidimensionale-arrays.md":b4,"../../lessons/de/17-zeichenketten.md":x4,"../../lessons/de/18-aufruf-und-aussprung.md":v4,"../../lessons/de/19-suchen-und-sortieren.md":y4,"../../lessons/de/20-java.md":w4,"../../lessons/de/21-python-und-javascript.md":z4,"../../lessons/de/22-try-und-catch.md":I4,"../../lessons/de/23-text-einlesen-und-speichern.md":k4,"../../lessons/de/24-zeile-fuer-zeile.md":S4,"../../lessons/de/25-tabellen-als-csv.md":T4,"../../lessons/de/26-json.md":_4,"../../lessons/de/27-formate-im-vergleich.md":j4,"../../lessons/de/28-erstes-fenster.md":C4,"../../lessons/de/29-knopf-im-fenster.md":A4,"../../lessons/de/30-der-knopf-reagiert.md":P4,"../../lessons/de/31-zahl-verdoppeln.md":D4,"../../lessons/de/32-klickzaehler.md":B4,"../../lessons/de/33-ampel.md":O4,"../../lessons/de/34-notenrechner.md":M4,"../../lessons/de/35-taschenrechner.md":Z4,"../../lessons/de/36-zahlenraten.md":L4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":W4,"../../lessons/de/38-innere-klassen.md":E4,"../../lessons/de/39-zwei-reiter.md":N4,"../../lessons/de/40-model-view-controller.md":F4,"../../lessons/de/begriffe.md":R4,"../../lessons/de/nachschlagen.md":J4,"../../lessons/en/01-was-ist-ein-struktogramm.md":G4,"../../lessons/en/02-der-editor.md":H4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":V4,"../../lessons/en/04-variablen-und-datentypen.md":q4,"../../lessons/en/05-sequenz.md":Q4,"../../lessons/en/06-eingabe-und-ausgabe.md":U4,"../../lessons/en/07-simulation-und-schreibtischtest.md":Y4,"../../lessons/en/08-verzweigung.md":$4,"../../lessons/en/09-bedingungen-verknuepfen.md":K4,"../../lessons/en/10-fallauswahl.md":X4,"../../lessons/en/11-while-schleife.md":ev,"../../lessons/en/12-do-while-schleife.md":tv,"../../lessons/en/13-for-schleife.md":nv,"../../lessons/en/14-verschachteln.md":iv,"../../lessons/en/15-arrays.md":av,"../../lessons/en/16-zweidimensionale-arrays.md":sv,"../../lessons/en/17-zeichenketten.md":rv,"../../lessons/en/18-aufruf-und-aussprung.md":ov,"../../lessons/en/19-suchen-und-sortieren.md":lv,"../../lessons/en/20-java.md":uv,"../../lessons/en/21-python-und-javascript.md":mv,"../../lessons/en/22-try-und-catch.md":cv,"../../lessons/en/23-text-einlesen-und-speichern.md":dv,"../../lessons/en/24-zeile-fuer-zeile.md":hv,"../../lessons/en/25-tabellen-als-csv.md":gv,"../../lessons/en/26-json.md":pv,"../../lessons/en/27-formate-im-vergleich.md":fv,"../../lessons/en/28-erstes-fenster.md":bv,"../../lessons/en/29-knopf-im-fenster.md":xv,"../../lessons/en/30-der-knopf-reagiert.md":vv,"../../lessons/en/31-zahl-verdoppeln.md":yv,"../../lessons/en/32-klickzaehler.md":wv,"../../lessons/en/33-ampel.md":zv,"../../lessons/en/34-notenrechner.md":Iv,"../../lessons/en/35-taschenrechner.md":kv,"../../lessons/en/36-zahlenraten.md":Sv,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":Tv,"../../lessons/en/38-innere-klassen.md":_v,"../../lessons/en/39-zwei-reiter.md":jv,"../../lessons/en/40-model-view-controller.md":Cv,"../../lessons/en/begriffe.md":Av,"../../lessons/en/nachschlagen.md":Pv,"../../lessons/pt/01-was-ist-ein-struktogramm.md":Dv,"../../lessons/pt/02-der-editor.md":Bv,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":Ov,"../../lessons/pt/04-variablen-und-datentypen.md":Mv,"../../lessons/pt/05-sequenz.md":Zv,"../../lessons/pt/06-eingabe-und-ausgabe.md":Lv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":Wv,"../../lessons/pt/08-verzweigung.md":Ev,"../../lessons/pt/09-bedingungen-verknuepfen.md":Nv,"../../lessons/pt/10-fallauswahl.md":Fv,"../../lessons/pt/11-while-schleife.md":Rv,"../../lessons/pt/12-do-while-schleife.md":Jv,"../../lessons/pt/13-for-schleife.md":Gv,"../../lessons/pt/14-verschachteln.md":Hv,"../../lessons/pt/15-arrays.md":Vv,"../../lessons/pt/16-zweidimensionale-arrays.md":qv,"../../lessons/pt/17-zeichenketten.md":Qv,"../../lessons/pt/18-aufruf-und-aussprung.md":Uv,"../../lessons/pt/19-suchen-und-sortieren.md":Yv,"../../lessons/pt/20-java.md":$v,"../../lessons/pt/21-python-und-javascript.md":Kv,"../../lessons/pt/22-try-und-catch.md":Xv,"../../lessons/pt/23-text-einlesen-und-speichern.md":ey,"../../lessons/pt/24-zeile-fuer-zeile.md":ty,"../../lessons/pt/25-tabellen-als-csv.md":ny,"../../lessons/pt/26-json.md":iy,"../../lessons/pt/27-formate-im-vergleich.md":ay,"../../lessons/pt/28-erstes-fenster.md":sy,"../../lessons/pt/29-knopf-im-fenster.md":ry,"../../lessons/pt/30-der-knopf-reagiert.md":oy,"../../lessons/pt/31-zahl-verdoppeln.md":ly,"../../lessons/pt/32-klickzaehler.md":uy,"../../lessons/pt/33-ampel.md":my,"../../lessons/pt/34-notenrechner.md":cy,"../../lessons/pt/35-taschenrechner.md":dy,"../../lessons/pt/36-zahlenraten.md":hy,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":gy,"../../lessons/pt/38-innere-klassen.md":py,"../../lessons/pt/39-zwei-reiter.md":fy,"../../lessons/pt/40-model-view-controller.md":by,"../../lessons/pt/begriffe.md":xy,"../../lessons/pt/nachschlagen.md":vy}),vE=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":yy,"../../lessons/de/aufgaben/ballwurf.md":wy,"../../lessons/de/aufgaben/bestenliste.md":zy,"../../lessons/de/aufgaben/binaerzahl.md":Iy,"../../lessons/de/aufgaben/caesar.md":ky,"../../lessons/de/aufgaben/collatz.md":Sy,"../../lessons/de/aufgaben/einheitenrechner.md":Ty,"../../lessons/de/aufgaben/fibonacci.md":_y,"../../lessons/de/aufgaben/gerade-ungerade.md":jy,"../../lessons/de/aufgaben/mehrwertsteuer.md":Cy,"../../lessons/de/aufgaben/notendurchschnitt.md":Ay,"../../lessons/de/aufgaben/pin-pruefen.md":Py,"../../lessons/de/aufgaben/schiffe-versenken.md":Dy,"../../lessons/de/aufgaben/speisekarte.md":By,"../../lessons/de/aufgaben/summe-bilden.md":Oy,"../../lessons/de/aufgaben/tafeldienst.md":My,"../../lessons/de/aufgaben/taschenrechner.md":Zy,"../../lessons/de/aufgaben/verleih-menue.md":Ly,"../../lessons/de/aufgaben/vokabeltrainer.md":Wy,"../../lessons/de/aufgaben/volljaehrig.md":Ey,"../../lessons/de/aufgaben/wuerfel-mvc.md":Ny,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Fy,"../../lessons/en/aufgaben/alter-unterprogramm.md":Ry,"../../lessons/en/aufgaben/ballwurf.md":Jy,"../../lessons/en/aufgaben/bestenliste.md":Gy,"../../lessons/en/aufgaben/binaerzahl.md":Hy,"../../lessons/en/aufgaben/caesar.md":Vy,"../../lessons/en/aufgaben/collatz.md":qy,"../../lessons/en/aufgaben/einheitenrechner.md":Qy,"../../lessons/en/aufgaben/fibonacci.md":Uy,"../../lessons/en/aufgaben/gerade-ungerade.md":Yy,"../../lessons/en/aufgaben/mehrwertsteuer.md":$y,"../../lessons/en/aufgaben/notendurchschnitt.md":Ky,"../../lessons/en/aufgaben/pin-pruefen.md":Xy,"../../lessons/en/aufgaben/schiffe-versenken.md":ew,"../../lessons/en/aufgaben/speisekarte.md":tw,"../../lessons/en/aufgaben/summe-bilden.md":nw,"../../lessons/en/aufgaben/tafeldienst.md":iw,"../../lessons/en/aufgaben/taschenrechner.md":aw,"../../lessons/en/aufgaben/verleih-menue.md":sw,"../../lessons/en/aufgaben/vokabeltrainer.md":rw,"../../lessons/en/aufgaben/volljaehrig.md":ow,"../../lessons/en/aufgaben/wuerfel-mvc.md":lw,"../../lessons/en/aufgaben/zahl-verdoppeln.md":uw,"../../lessons/pt/aufgaben/alter-unterprogramm.md":mw,"../../lessons/pt/aufgaben/ballwurf.md":cw,"../../lessons/pt/aufgaben/bestenliste.md":dw,"../../lessons/pt/aufgaben/binaerzahl.md":hw,"../../lessons/pt/aufgaben/caesar.md":gw,"../../lessons/pt/aufgaben/collatz.md":pw,"../../lessons/pt/aufgaben/einheitenrechner.md":fw,"../../lessons/pt/aufgaben/fibonacci.md":bw,"../../lessons/pt/aufgaben/gerade-ungerade.md":xw,"../../lessons/pt/aufgaben/mehrwertsteuer.md":vw,"../../lessons/pt/aufgaben/notendurchschnitt.md":yw,"../../lessons/pt/aufgaben/pin-pruefen.md":ww,"../../lessons/pt/aufgaben/schiffe-versenken.md":zw,"../../lessons/pt/aufgaben/speisekarte.md":Iw,"../../lessons/pt/aufgaben/summe-bilden.md":kw,"../../lessons/pt/aufgaben/tafeldienst.md":Sw,"../../lessons/pt/aufgaben/taschenrechner.md":Tw,"../../lessons/pt/aufgaben/verleih-menue.md":_w,"../../lessons/pt/aufgaben/vokabeltrainer.md":jw,"../../lessons/pt/aufgaben/volljaehrig.md":Cw,"../../lessons/pt/aufgaben/wuerfel-mvc.md":Aw,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":Pw}),fm=Object.assign({"../../lessons/de/visubot/00-struktogramm-und-editor.md":Dw,"../../lessons/de/visubot/01-der-mbot2.md":Bw,"../../lessons/de/visubot/02-das-quadrat.md":Ow,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Mw,"../../lessons/de/visubot/03-zeile-fuer-zeile-testen.md":Zw,"../../lessons/de/visubot/04-sensoren.md":Lw,"../../lessons/de/visubot/05-bis-zur-wand.md":Ww,"../../lessons/de/visubot/05-erst-fahren-dann-pruefen.md":Ew,"../../lessons/de/visubot/06-abstand.md":Nw,"../../lessons/de/visubot/07-linie.md":Fw,"../../lessons/de/visubot/07-und-oder.md":Rw,"../../lessons/de/visubot/08-farben.md":Jw,"../../lessons/de/visubot/09-fallauswahl-mbot2.md":Gw,"../../lessons/de/visubot/10-tasten-joystick.md":Hw,"../../lessons/de/visubot/10-unterbrechen-mit-break.md":Vw,"../../lessons/de/visubot/11-licht.md":qw,"../../lessons/de/visubot/12-lautstaerke.md":Qw,"../../lessons/de/visubot/13-neigung.md":Uw,"../../lessons/de/visubot/14-leds.md":Yw,"../../lessons/de/visubot/15-einzelne-leds.md":$w,"../../lessons/de/visubot/16-lautsprecher.md":Kw,"../../lessons/de/visubot/17-arrays-melodie.md":Xw,"../../lessons/de/visubot/18-bildschirm.md":e9,"../../lessons/de/visubot/19-zeichenketten.md":t9,"../../lessons/de/visubot/20-motoren.md":n9,"../../lessons/de/visubot/21-stoppuhr-akku.md":i9,"../../lessons/de/visubot/22-eigene-methoden.md":a9,"../../lessons/de/visubot/nachschlagen.md":s9,"../../lessons/en/visubot/00-struktogramm-und-editor.md":r9,"../../lessons/en/visubot/01-der-mbot2.md":o9,"../../lessons/en/visubot/02-das-quadrat.md":l9,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":u9,"../../lessons/en/visubot/03-zeile-fuer-zeile-testen.md":m9,"../../lessons/en/visubot/04-sensoren.md":c9,"../../lessons/en/visubot/05-bis-zur-wand.md":d9,"../../lessons/en/visubot/05-erst-fahren-dann-pruefen.md":h9,"../../lessons/en/visubot/06-abstand.md":g9,"../../lessons/en/visubot/07-linie.md":p9,"../../lessons/en/visubot/07-und-oder.md":f9,"../../lessons/en/visubot/08-farben.md":b9,"../../lessons/en/visubot/09-fallauswahl-mbot2.md":x9,"../../lessons/en/visubot/10-tasten-joystick.md":v9,"../../lessons/en/visubot/10-unterbrechen-mit-break.md":y9,"../../lessons/en/visubot/11-licht.md":w9,"../../lessons/en/visubot/12-lautstaerke.md":z9,"../../lessons/en/visubot/13-neigung.md":I9,"../../lessons/en/visubot/14-leds.md":k9,"../../lessons/en/visubot/15-einzelne-leds.md":S9,"../../lessons/en/visubot/16-lautsprecher.md":T9,"../../lessons/en/visubot/17-arrays-melodie.md":_9,"../../lessons/en/visubot/18-bildschirm.md":j9,"../../lessons/en/visubot/19-zeichenketten.md":C9,"../../lessons/en/visubot/20-motoren.md":A9,"../../lessons/en/visubot/21-stoppuhr-akku.md":P9,"../../lessons/en/visubot/22-eigene-methoden.md":D9,"../../lessons/en/visubot/nachschlagen.md":B9}),yE=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":O9,"../../lessons/de/visubot/aufgaben/ausgang.md":M9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":Z9,"../../lessons/de/visubot/aufgaben/dreieck.md":L9,"../../lessons/de/visubot/aufgaben/einparken.md":W9,"../../lessons/de/visubot/aufgaben/hindernis.md":E9,"../../lessons/de/visubot/aufgaben/knight-rider.md":N9,"../../lessons/de/visubot/aufgaben/labyrinth.md":F9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":R9,"../../lessons/de/visubot/aufgaben/morsen.md":J9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":G9,"../../lessons/de/visubot/aufgaben/slalom.md":H9,"../../lessons/de/visubot/aufgaben/spirale.md":V9,"../../lessons/de/visubot/aufgaben/treppe.md":q9,"../../lessons/de/visubot/aufgaben/tunnel.md":Q9,"../../lessons/de/visubot/aufgaben/wald.md":U9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Y9,"../../lessons/en/visubot/aufgaben/ausgang.md":$9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":K9,"../../lessons/en/visubot/aufgaben/dreieck.md":X9,"../../lessons/en/visubot/aufgaben/einparken.md":e5,"../../lessons/en/visubot/aufgaben/hindernis.md":t5,"../../lessons/en/visubot/aufgaben/knight-rider.md":n5,"../../lessons/en/visubot/aufgaben/labyrinth.md":i5,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":a5,"../../lessons/en/visubot/aufgaben/morsen.md":s5,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":r5,"../../lessons/en/visubot/aufgaben/slalom.md":o5,"../../lessons/en/visubot/aufgaben/spirale.md":l5,"../../lessons/en/visubot/aufgaben/treppe.md":u5,"../../lessons/en/visubot/aufgaben/tunnel.md":m5,"../../lessons/en/visubot/aufgaben/wald.md":c5}),wE=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":d5,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":h5,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":g5,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":p5,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":f5,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":b5,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":x5,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":v5,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":y5,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":w5,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":z5,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":I5,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":k5,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":S5,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":T5,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":_5,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":j5,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":C5,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":A5,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":P5,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":D5,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":B5,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":O5,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":M5,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":Z5,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":L5,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":W5,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":E5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":N5,"../../lessons/diagramme/dt-buffered.visustruct":F5,"../../lessons/diagramme/dt-csv.visustruct":R5,"../../lessons/diagramme/dt-json.visustruct":J5,"../../lessons/diagramme/dt-lesen.visustruct":G5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":H5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":V5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":q5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Q5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":U5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Y5,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":$5,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":K5,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":X5,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":ez,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":tz,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":nz,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":iz,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":az,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":sz,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":rz,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":oz,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":lz,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":uz,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":mz,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":cz,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":dz,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":hz,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":gz,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":pz,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":fz,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":bz,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":xz,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":vz,"../../lessons/diagramme/en/dt-buffered.visustruct":yz,"../../lessons/diagramme/en/dt-csv.visustruct":wz,"../../lessons/diagramme/en/dt-json.visustruct":zz,"../../lessons/diagramme/en/dt-lesen.visustruct":Iz,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":kz,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":Sz,"../../lessons/diagramme/en/kino-frei-start.visustruct":Tz,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":_z,"../../lessons/diagramme/en/kino-karte-start.visustruct":jz,"../../lessons/diagramme/en/kino-saalplan.visustruct":Cz,"../../lessons/diagramme/en/kino-verkaufen.visustruct":Az,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":Pz,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":Dz,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":Bz,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":Oz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":Mz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":Zz,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":Lz,"../../lessons/diagramme/en/l04-rechnen.visustruct":Wz,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":Ez,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":Nz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":Fz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":Rz,"../../lessons/diagramme/en/l04-tauschen.visustruct":Jz,"../../lessons/diagramme/en/l05-datentypen.visustruct":Gz,"../../lessons/diagramme/en/l05-division.visustruct":Hz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":Vz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":qz,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":Qz,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":Uz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":Yz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":$z,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":Kz,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":Xz,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":e6,"../../lessons/diagramme/en/l05-sequenz.visustruct":t6,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":n6,"../../lessons/diagramme/en/l06-eva.visustruct":i6,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":a6,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":s6,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":r6,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":o6,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":l6,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":u6,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":m6,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":c6,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":d6,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":h6,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":g6,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":p6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":f6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":b6,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":x6,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":v6,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":y6,"../../lessons/diagramme/en/l07-rabatt.visustruct":w6,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":z6,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":I6,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":k6,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":S6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":T6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":_6,"../../lessons/diagramme/en/l08-jugendticket.visustruct":j6,"../../lessons/diagramme/en/l08-note.visustruct":C6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":A6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":P6,"../../lessons/diagramme/en/l09-ampel.visustruct":D6,"../../lessons/diagramme/en/l09-automat.visustruct":B6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":O6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":M6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":Z6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":L6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":W6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":E6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":N6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":F6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":R6,"../../lessons/diagramme/en/l1-sequenz.visustruct":J6,"../../lessons/diagramme/en/l1-tee.visustruct":G6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":H6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":V6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":q6,"../../lessons/diagramme/en/l10-countdown.visustruct":Q6,"../../lessons/diagramme/en/l10-endlos.visustruct":U6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":Y6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":$6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":K6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":X6,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":eI,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":tI,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":nI,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":iI,"../../lessons/diagramme/en/l11-einmal.visustruct":aI,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":sI,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":rI,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":oI,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":lI,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":uI,"../../lessons/diagramme/en/l11-note-loesung.visustruct":mI,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":cI,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":dI,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":hI,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":gI,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":pI,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":fI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":bI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":xI,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":vI,"../../lessons/diagramme/en/l12-summe.visustruct":yI,"../../lessons/diagramme/en/l13-dreieck.visustruct":wI,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":zI,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":II,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":kI,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":SI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":TI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":_I,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":jI,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":CI,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":AI,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":PI,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":DI,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":BI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":OI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":MI,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":ZI,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":LI,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":WI,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":EI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":NI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":FI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":RI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":JI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":GI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":HI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":VI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":qI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":QI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":UI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":YI,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":$I,"../../lessons/diagramme/en/l15-quadrat.visustruct":KI,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":XI,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":ek,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":tk,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":nk,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":ik,"../../lessons/diagramme/en/l16-countdown-start.visustruct":ak,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":sk,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":rk,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":ok,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":lk,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":uk,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":mk,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":ck,"../../lessons/diagramme/en/l16-summe-start.visustruct":dk,"../../lessons/diagramme/en/l17-beispiel.visustruct":hk,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":gk,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":pk,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":fk,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":bk,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":xk,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":vk,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":yk,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":wk,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":zk,"../../lessons/diagramme/en/l18-beispiel.visustruct":Ik,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":kk,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Sk,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Tk,"../../lessons/diagramme/en/l18-js-loesung.visustruct":_k,"../../lessons/diagramme/en/l18-python-loesung.visustruct":jk,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Ck,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Ak,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":Pk,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":Dk,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Bk,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Ok,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Mk,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Zk,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Lk,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Wk,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Ek,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Nk,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":Fk,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":Rk,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":Jk,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":Gk,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Hk,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Vk,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":qk,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":Qk,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":Uk,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":Yk,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":$k,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":Kk,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":Xk,"../../lessons/diagramme/en/l27-java-json-start.visustruct":e7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":t7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":n7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":i7,"../../lessons/diagramme/en/sim-kino-start.visustruct":a7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":s7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":r7,"../../lessons/diagramme/en/sim-tausch.visustruct":o7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":l7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":u7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":m7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":c7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":d7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":h7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":g7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":p7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":f7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":b7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":x7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":v7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":y7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":w7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":z7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":I7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":k7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":S7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":_7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-do-while-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-erster-plan-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-fehler-04-sensoren-start.visustruct":W7,"../../lessons/diagramme/en/vb-fehler-05-bis-zur-wand-start.visustruct":E7,"../../lessons/diagramme/en/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":N7,"../../lessons/diagramme/en/vb-fehler-06-abstand-start.visustruct":F7,"../../lessons/diagramme/en/vb-fehler-07-linie-start.visustruct":R7,"../../lessons/diagramme/en/vb-fehler-07-und-oder-start.visustruct":J7,"../../lessons/diagramme/en/vb-fehler-08-farben-start.visustruct":G7,"../../lessons/diagramme/en/vb-fehler-09-fallauswahl-mbot2-start.visustruct":H7,"../../lessons/diagramme/en/vb-fehler-10-tasten-joystick-start.visustruct":V7,"../../lessons/diagramme/en/vb-fehler-10-unterbrechen-mit-break-start.visustruct":q7,"../../lessons/diagramme/en/vb-fehler-11-licht-start.visustruct":Q7,"../../lessons/diagramme/en/vb-fehler-12-lautstaerke-start.visustruct":U7,"../../lessons/diagramme/en/vb-fehler-13-neigung-start.visustruct":Y7,"../../lessons/diagramme/en/vb-fehler-14-leds-start.visustruct":$7,"../../lessons/diagramme/en/vb-fehler-15-einzelne-leds-start.visustruct":K7,"../../lessons/diagramme/en/vb-fehler-16-lautsprecher-start.visustruct":X7,"../../lessons/diagramme/en/vb-fehler-17-arrays-melodie-start.visustruct":e8,"../../lessons/diagramme/en/vb-fehler-18-bildschirm-start.visustruct":t8,"../../lessons/diagramme/en/vb-fehler-19-zeichenketten-start.visustruct":n8,"../../lessons/diagramme/en/vb-fehler-20-motoren-start.visustruct":i8,"../../lessons/diagramme/en/vb-fehler-21-stoppuhr-akku-start.visustruct":a8,"../../lessons/diagramme/en/vb-fehler-22-eigene-methoden-start.visustruct":s8,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":r8,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":o8,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":l8,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":u8,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":m8,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":c8,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":d8,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":h8,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":g8,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":p8,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":f8,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":b8,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":x8,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":v8,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":y8,"../../lessons/diagramme/en/vb-java-rechteck-umdrehungen-loesung.visustruct":w8,"../../lessons/diagramme/en/vb-java-schritte-zaehlen-loesung.visustruct":z8,"../../lessons/diagramme/en/vb-java-sicher-fahren-loesung.visustruct":I8,"../../lessons/diagramme/en/vb-java-taste-stopp-loesung.visustruct":k8,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":S8,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":T8,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":_8,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":j8,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":C8,"../../lessons/diagramme/en/vb-l00-bausteine-loesung.visustruct":A8,"../../lessons/diagramme/en/vb-l00-sequenz-loesung.visustruct":P8,"../../lessons/diagramme/en/vb-l03-wachsend-loesung.visustruct":D8,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":B8,"../../lessons/diagramme/en/vb-laufschrift-loesung.visustruct":O8,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":M8,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":Z8,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":L8,"../../lessons/diagramme/en/vb-messreihe-loesung.visustruct":W8,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":E8,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":N8,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":F8,"../../lessons/diagramme/en/vb-notbremse-loesung.visustruct":R8,"../../lessons/diagramme/en/vb-oder-loesung.visustruct":J8,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":G8,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":H8,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":V8,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":q8,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":Q8,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":U8,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":Y8,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":$8,"../../lessons/diagramme/en/vb-spirale-falsch-loesung.visustruct":K8,"../../lessons/diagramme/en/vb-spirale-falsch-start.visustruct":X8,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":eS,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":tS,"../../lessons/diagramme/en/vb-startsignal-loesung.visustruct":nS,"../../lessons/diagramme/en/vb-strecke-anzeigen-loesung.visustruct":iS,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":aS,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":sS,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":rS,"../../lessons/diagramme/en/vb-ueberladung-umdrehung-loesung.visustruct":oS,"../../lessons/diagramme/en/vb-und-loesung.visustruct":lS,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":uS,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":mS,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":cS,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":dS,"../../lessons/diagramme/en/vb-zentimeter-loesung.visustruct":hS,"../../lessons/diagramme/en/vb-zentimeter-unterprogramm-loesung.visustruct":gS,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":pS,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":fS,"../../lessons/diagramme/en/zk-mehr.visustruct":bS,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":xS,"../../lessons/diagramme/en/zk-split.visustruct":vS,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":yS,"../../lessons/diagramme/en/zk-zaehlen.visustruct":wS,"../../lessons/diagramme/en/zk-zeichen.visustruct":zS,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":IS,"../../lessons/diagramme/kino-frei-loesung.visustruct":kS,"../../lessons/diagramme/kino-frei-start.visustruct":SS,"../../lessons/diagramme/kino-karte-loesung.visustruct":TS,"../../lessons/diagramme/kino-karte-start.visustruct":_S,"../../lessons/diagramme/kino-saalplan.visustruct":jS,"../../lessons/diagramme/kino-verkaufen.visustruct":CS,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":AS,"../../lessons/diagramme/l04-gross-klein-start.visustruct":PS,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":DS,"../../lessons/diagramme/l04-java-fehler-start.visustruct":BS,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":OS,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":MS,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":ZS,"../../lessons/diagramme/l04-rechnen.visustruct":LS,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":WS,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":ES,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":NS,"../../lessons/diagramme/l04-tauschen-start.visustruct":FS,"../../lessons/diagramme/l04-tauschen.visustruct":RS,"../../lessons/diagramme/l05-datentypen.visustruct":JS,"../../lessons/diagramme/l05-division.visustruct":GS,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":HS,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":VS,"../../lessons/diagramme/l05-java-fehler-start.visustruct":qS,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":QS,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":US,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":YS,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":$S,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":KS,"../../lessons/diagramme/l05-sekunden-start.visustruct":XS,"../../lessons/diagramme/l05-sequenz.visustruct":eT,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":tT,"../../lessons/diagramme/l06-eva.visustruct":nT,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":iT,"../../lessons/diagramme/l06-java-fehler-start.visustruct":aT,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":sT,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":rT,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":oT,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":lT,"../../lessons/diagramme/l06-rechner-loesung.visustruct":uT,"../../lessons/diagramme/l07-alter-pruefen.visustruct":mT,"../../lessons/diagramme/l07-betrag-loesung.visustruct":cT,"../../lessons/diagramme/l07-gerade-loesung.visustruct":dT,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":hT,"../../lessons/diagramme/l07-java-fehler-start.visustruct":gT,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":pT,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":fT,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":bT,"../../lessons/diagramme/l07-java-pizza-start.visustruct":xT,"../../lessons/diagramme/l07-maximum-loesung.visustruct":vT,"../../lessons/diagramme/l07-rabatt.visustruct":yT,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":wT,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":zT,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":IT,"../../lessons/diagramme/l08-java-fehler-start.visustruct":kT,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":ST,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":TT,"../../lessons/diagramme/l08-jugendticket.visustruct":_T,"../../lessons/diagramme/l08-note.visustruct":jT,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":CT,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":AT,"../../lessons/diagramme/l09-ampel.visustruct":PT,"../../lessons/diagramme/l09-automat.visustruct":DT,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":BT,"../../lessons/diagramme/l09-java-fehler-start.visustruct":OT,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":MT,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":ZT,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":LT,"../../lessons/diagramme/l09-note-loesung.visustruct":WT,"../../lessons/diagramme/l09-rechner-loesung.visustruct":ET,"../../lessons/diagramme/l09-verschachtelt.visustruct":NT,"../../lessons/diagramme/l1-grundbausteine.visustruct":FT,"../../lessons/diagramme/l1-sequenz.visustruct":RT,"../../lessons/diagramme/l1-tee.visustruct":JT,"../../lessons/diagramme/l1-verzweigung.visustruct":GT,"../../lessons/diagramme/l1-wiederholung.visustruct":HT,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":VT,"../../lessons/diagramme/l10-countdown.visustruct":qT,"../../lessons/diagramme/l10-endlos.visustruct":QT,"../../lessons/diagramme/l10-fakultaet.visustruct":UT,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":YT,"../../lessons/diagramme/l10-java-fehler-start.visustruct":$T,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":KT,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":XT,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":e_,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":t_,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":n_,"../../lessons/diagramme/l11-einmal.visustruct":i_,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":a_,"../../lessons/diagramme/l11-java-fehler-start.visustruct":s_,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":r_,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":o_,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":l_,"../../lessons/diagramme/l11-note-loesung.visustruct":u_,"../../lessons/diagramme/l11-summe-loesung.visustruct":m_,"../../lessons/diagramme/l12-countdown-loesung.visustruct":c_,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":d_,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":h_,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":g_,"../../lessons/diagramme/l12-java-fehler-start.visustruct":p_,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":f_,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":b_,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":x_,"../../lessons/diagramme/l12-summe.visustruct":v_,"../../lessons/diagramme/l13-dreieck.visustruct":y_,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":w_,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":z_,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":I_,"../../lessons/diagramme/l13-java-fehler-start.visustruct":k_,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":S_,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":T_,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":__,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":j_,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":C_,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":A_,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":P_,"../../lessons/diagramme/l14-java-fehler-start.visustruct":D_,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":B_,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":O_,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":M_,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Z_,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":L_,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":W_,"../../lessons/diagramme/l14-summe-maximum.visustruct":E_,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":N_,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":F_,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":R_,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":J_,"../../lessons/diagramme/l15-hauptprogramm.visustruct":G_,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":H_,"../../lessons/diagramme/l15-java-fehler-start.visustruct":V_,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":q_,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":Q_,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":U_,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Y_,"../../lessons/diagramme/l15-quadrat.visustruct":$_,"../../lessons/diagramme/l15-titel-loesung.visustruct":K_,"../../lessons/diagramme/l15-unterprogramm.visustruct":X_,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":ej,"../../lessons/diagramme/l15-zeige-summe.visustruct":tj,"../../lessons/diagramme/l16-countdown-loesung.visustruct":nj,"../../lessons/diagramme/l16-countdown-start.visustruct":ij,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":aj,"../../lessons/diagramme/l16-java-fehler-start.visustruct":sj,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":rj,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":oj,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":lj,"../../lessons/diagramme/l16-schreibtisch.visustruct":uj,"../../lessons/diagramme/l16-summe-loesung.visustruct":mj,"../../lessons/diagramme/l16-summe-start.visustruct":cj,"../../lessons/diagramme/l17-beispiel.visustruct":dj,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":hj,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":gj,"../../lessons/diagramme/l17-java-brief-start.visustruct":pj,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":fj,"../../lessons/diagramme/l17-java-fehler-start.visustruct":bj,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":xj,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":vj,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":yj,"../../lessons/diagramme/l17-ticket-loesung.visustruct":wj,"../../lessons/diagramme/l18-beispiel.visustruct":zj,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":Ij,"../../lessons/diagramme/l18-java-fehler-start.visustruct":kj,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":Sj,"../../lessons/diagramme/l18-js-loesung.visustruct":Tj,"../../lessons/diagramme/l18-python-loesung.visustruct":_j,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":jj,"../../lessons/diagramme/l19-java-fehler-start.visustruct":Cj,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":Aj,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":Pj,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":Dj,"../../lessons/diagramme/l2-ausgabe.visustruct":Bj,"../../lessons/diagramme/l2-hallo-loesung.visustruct":Oj,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":Mj,"../../lessons/diagramme/l20-countdown-loesung.visustruct":Zj,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":Lj,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":Wj,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":Ej,"../../lessons/diagramme/l23-java-nummern-start.visustruct":Nj,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":Fj,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":Rj,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":Jj,"../../lessons/diagramme/l24-java-laengster-start.visustruct":Gj,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":Hj,"../../lessons/diagramme/l25-java-beste-start.visustruct":Vj,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":qj,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":Qj,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":Uj,"../../lessons/diagramme/l26-java-namen-start.visustruct":Yj,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":$j,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":Kj,"../../lessons/diagramme/l27-java-json-loesung.visustruct":Xj,"../../lessons/diagramme/l27-java-json-start.visustruct":eC,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":tC,"../../lessons/diagramme/l27-java-saetze-start.visustruct":nC,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":iC,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":aC,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":sC,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":rC,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":oC,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":lC,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":uC,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":mC,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":cC,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":dC,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":hC,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":gC,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":pC,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":fC,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":bC,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":xC,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":vC,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":yC,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":wC,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":zC,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":IC,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":kC,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":SC,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":TC,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":_C,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":jC,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":CC,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":AC,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":PC,"../../lessons/diagramme/pt/dt-buffered.visustruct":DC,"../../lessons/diagramme/pt/dt-csv.visustruct":BC,"../../lessons/diagramme/pt/dt-json.visustruct":OC,"../../lessons/diagramme/pt/dt-lesen.visustruct":MC,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":ZC,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":LC,"../../lessons/diagramme/pt/kino-frei-start.visustruct":WC,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":EC,"../../lessons/diagramme/pt/kino-karte-start.visustruct":NC,"../../lessons/diagramme/pt/kino-saalplan.visustruct":FC,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":RC,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":JC,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":GC,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":HC,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":VC,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":qC,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":QC,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":UC,"../../lessons/diagramme/pt/l04-rechnen.visustruct":YC,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":$C,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":KC,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":XC,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":eA,"../../lessons/diagramme/pt/l04-tauschen.visustruct":tA,"../../lessons/diagramme/pt/l05-datentypen.visustruct":nA,"../../lessons/diagramme/pt/l05-division.visustruct":iA,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":aA,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":sA,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":rA,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":oA,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":lA,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":uA,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":mA,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":cA,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":dA,"../../lessons/diagramme/pt/l05-sequenz.visustruct":hA,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":gA,"../../lessons/diagramme/pt/l06-eva.visustruct":pA,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":fA,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":bA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":xA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":vA,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":yA,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":wA,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":zA,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":IA,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":kA,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":SA,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":TA,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":_A,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":jA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":CA,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":AA,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":PA,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":DA,"../../lessons/diagramme/pt/l07-rabatt.visustruct":BA,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":OA,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":MA,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":ZA,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":LA,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":WA,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":EA,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":NA,"../../lessons/diagramme/pt/l08-note.visustruct":FA,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":RA,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":JA,"../../lessons/diagramme/pt/l09-ampel.visustruct":GA,"../../lessons/diagramme/pt/l09-automat.visustruct":HA,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":VA,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":qA,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":QA,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":UA,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":YA,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":$A,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":KA,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":XA,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":eP,"../../lessons/diagramme/pt/l1-sequenz.visustruct":tP,"../../lessons/diagramme/pt/l1-tee.visustruct":nP,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":iP,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":aP,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":sP,"../../lessons/diagramme/pt/l10-countdown.visustruct":rP,"../../lessons/diagramme/pt/l10-endlos.visustruct":oP,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":lP,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":uP,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":mP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":cP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":dP,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":hP,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":gP,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":pP,"../../lessons/diagramme/pt/l11-einmal.visustruct":fP,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":bP,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":xP,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":vP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":yP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":wP,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":zP,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":IP,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":kP,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":SP,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":TP,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":_P,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":jP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":CP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":AP,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":PP,"../../lessons/diagramme/pt/l12-summe.visustruct":DP,"../../lessons/diagramme/pt/l13-dreieck.visustruct":BP,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":OP,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":MP,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":ZP,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":LP,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":WP,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":EP,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":NP,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":FP,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":RP,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":JP,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":GP,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":HP,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":VP,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":qP,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":QP,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":UP,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":YP,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":$P,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":KP,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":XP,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":eD,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":tD,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":nD,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":iD,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":aD,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":sD,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":rD,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":oD,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":lD,"../../lessons/diagramme/pt/l15-quadrat.visustruct":uD,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":mD,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":cD,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":dD,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":hD,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":gD,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":pD,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":fD,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":bD,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":xD,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":vD,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":yD,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":wD,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":zD,"../../lessons/diagramme/pt/l16-summe-start.visustruct":ID,"../../lessons/diagramme/pt/l17-beispiel.visustruct":kD,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":SD,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":TD,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":_D,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":jD,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":CD,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":AD,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":PD,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":DD,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":BD,"../../lessons/diagramme/pt/l18-beispiel.visustruct":OD,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":MD,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":ZD,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":LD,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":WD,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":ED,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":ND,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":FD,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":RD,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":JD,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":GD,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":HD,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":VD,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":qD,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":QD,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":UD,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":YD,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":$D,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":KD,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":XD,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":eB,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":tB,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":nB,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":iB,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":aB,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":sB,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":rB,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":oB,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":lB,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":uB,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":mB,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":cB,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":dB,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":hB,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":gB,"../../lessons/diagramme/pt/sim-kino-start.visustruct":pB,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":fB,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":bB,"../../lessons/diagramme/pt/sim-tausch.visustruct":xB,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":vB,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":yB,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":wB,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":zB,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":IB,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":kB,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":SB,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":TB,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":_B,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":jB,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":CB,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":AB,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":PB,"../../lessons/diagramme/pt/zk-mehr.visustruct":DB,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":BB,"../../lessons/diagramme/pt/zk-split.visustruct":OB,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":MB,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":ZB,"../../lessons/diagramme/pt/zk-zeichen.visustruct":LB,"../../lessons/diagramme/sim-kino-loesung.visustruct":WB,"../../lessons/diagramme/sim-kino-start.visustruct":EB,"../../lessons/diagramme/sim-tausch-loesung.visustruct":NB,"../../lessons/diagramme/sim-tausch-start.visustruct":FB,"../../lessons/diagramme/sim-tausch.visustruct":RB,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":JB,"../../lessons/diagramme/ss-absteigend-start.visustruct":GB,"../../lessons/diagramme/ss-binaere-suche.visustruct":HB,"../../lessons/diagramme/ss-bubblesort.visustruct":VB,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":qB,"../../lessons/diagramme/ss-lineare-suche.visustruct":QB,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":UB,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":YB,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":$B,"../../lessons/diagramme/uebergabe-haupt.visustruct":KB,"../../lessons/diagramme/uebergabe-leeren.visustruct":XB,"../../lessons/diagramme/uebergabe-verdopple.visustruct":eO,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":tO,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":nO,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":iO,"../../lessons/diagramme/vb-ampel-loesung.visustruct":aO,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":sO,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":rO,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":oO,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":lO,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":uO,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":mO,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":cO,"../../lessons/diagramme/vb-do-while-loesung.visustruct":dO,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":hO,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":gO,"../../lessons/diagramme/vb-einparken-loesung.visustruct":pO,"../../lessons/diagramme/vb-erster-plan-loesung.visustruct":fO,"../../lessons/diagramme/vb-farben-loesung.visustruct":bO,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":xO,"../../lessons/diagramme/vb-fehler-04-sensoren-start.visustruct":vO,"../../lessons/diagramme/vb-fehler-05-bis-zur-wand-start.visustruct":yO,"../../lessons/diagramme/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":wO,"../../lessons/diagramme/vb-fehler-06-abstand-start.visustruct":zO,"../../lessons/diagramme/vb-fehler-07-linie-start.visustruct":IO,"../../lessons/diagramme/vb-fehler-07-und-oder-start.visustruct":kO,"../../lessons/diagramme/vb-fehler-08-farben-start.visustruct":SO,"../../lessons/diagramme/vb-fehler-09-fallauswahl-mbot2-start.visustruct":TO,"../../lessons/diagramme/vb-fehler-10-tasten-joystick-start.visustruct":_O,"../../lessons/diagramme/vb-fehler-10-unterbrechen-mit-break-start.visustruct":jO,"../../lessons/diagramme/vb-fehler-11-licht-start.visustruct":CO,"../../lessons/diagramme/vb-fehler-12-lautstaerke-start.visustruct":AO,"../../lessons/diagramme/vb-fehler-13-neigung-start.visustruct":PO,"../../lessons/diagramme/vb-fehler-14-leds-start.visustruct":DO,"../../lessons/diagramme/vb-fehler-15-einzelne-leds-start.visustruct":BO,"../../lessons/diagramme/vb-fehler-16-lautsprecher-start.visustruct":OO,"../../lessons/diagramme/vb-fehler-17-arrays-melodie-start.visustruct":MO,"../../lessons/diagramme/vb-fehler-18-bildschirm-start.visustruct":ZO,"../../lessons/diagramme/vb-fehler-19-zeichenketten-start.visustruct":LO,"../../lessons/diagramme/vb-fehler-20-motoren-start.visustruct":WO,"../../lessons/diagramme/vb-fehler-21-stoppuhr-akku-start.visustruct":EO,"../../lessons/diagramme/vb-fehler-22-eigene-methoden-start.visustruct":NO,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":FO,"../../lessons/diagramme/vb-gerade-loesung.visustruct":RO,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":JO,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":GO,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":HO,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":VO,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":qO,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":QO,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":UO,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":YO,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":$O,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":KO,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":XO,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":eM,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":tM,"../../lessons/diagramme/vb-java-rechteck-umdrehungen-loesung.visustruct":nM,"../../lessons/diagramme/vb-java-schritte-zaehlen-loesung.visustruct":iM,"../../lessons/diagramme/vb-java-sicher-fahren-loesung.visustruct":aM,"../../lessons/diagramme/vb-java-taste-stopp-loesung.visustruct":sM,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":rM,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":oM,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":lM,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":uM,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":mM,"../../lessons/diagramme/vb-l00-bausteine-loesung.visustruct":cM,"../../lessons/diagramme/vb-l00-sequenz-loesung.visustruct":dM,"../../lessons/diagramme/vb-l03-wachsend-loesung.visustruct":hM,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":gM,"../../lessons/diagramme/vb-laufschrift-loesung.visustruct":pM,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":fM,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":bM,"../../lessons/diagramme/vb-melodie-loesung.visustruct":xM,"../../lessons/diagramme/vb-messreihe-loesung.visustruct":vM,"../../lessons/diagramme/vb-morsen-loesung.visustruct":yM,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":wM,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":zM,"../../lessons/diagramme/vb-notbremse-loesung.visustruct":IM,"../../lessons/diagramme/vb-oder-loesung.visustruct":kM,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":SM,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":TM,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":_M,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":jM,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":CM,"../../lessons/diagramme/vb-rand-loesung.visustruct":AM,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":PM,"../../lessons/diagramme/vb-slalom-loesung.visustruct":DM,"../../lessons/diagramme/vb-spirale-falsch-loesung.visustruct":BM,"../../lessons/diagramme/vb-spirale-falsch-start.visustruct":OM,"../../lessons/diagramme/vb-spirale-loesung.visustruct":MM,"../../lessons/diagramme/vb-start-a-loesung.visustruct":ZM,"../../lessons/diagramme/vb-startsignal-loesung.visustruct":LM,"../../lessons/diagramme/vb-strecke-anzeigen-loesung.visustruct":WM,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":EM,"../../lessons/diagramme/vb-treppe-loesung.visustruct":NM,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":FM,"../../lessons/diagramme/vb-ueberladung-umdrehung-loesung.visustruct":RM,"../../lessons/diagramme/vb-und-loesung.visustruct":JM,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":GM,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":HM,"../../lessons/diagramme/vb-wald-loesung.visustruct":VM,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":qM,"../../lessons/diagramme/vb-zentimeter-loesung.visustruct":QM,"../../lessons/diagramme/vb-zentimeter-unterprogramm-loesung.visustruct":UM,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":YM,"../../lessons/diagramme/zk-initialen-loesung.visustruct":$M,"../../lessons/diagramme/zk-mehr.visustruct":KM,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":XM,"../../lessons/diagramme/zk-split.visustruct":eZ,"../../lessons/diagramme/zk-woerter-loesung.visustruct":tZ,"../../lessons/diagramme/zk-zaehlen.visustruct":nZ,"../../lessons/diagramme/zk-zeichen.visustruct":iZ}),zE=Object.assign({"../../lessons/welten/ausgang-1.txt":aZ,"../../lessons/welten/ausgang-2.txt":sZ,"../../lessons/welten/ecke.txt":rZ,"../../lessons/welten/farbe-1.txt":oZ,"../../lessons/welten/farbe-2.txt":lZ,"../../lessons/welten/farbe-3.txt":uZ,"../../lessons/welten/farbe-4.txt":mZ,"../../lessons/welten/hindernis-1.txt":cZ,"../../lessons/welten/hindernis-2.txt":dZ,"../../lessons/welten/labyrinth-1.txt":hZ,"../../lessons/welten/labyrinth-2.txt":gZ,"../../lessons/welten/linie-1.txt":pZ,"../../lessons/welten/linie-2.txt":fZ,"../../lessons/welten/linie-rot-1.txt":bZ,"../../lessons/welten/linie-rot-2.txt":xZ,"../../lessons/welten/parken-1.txt":vZ,"../../lessons/welten/parken-2.txt":yZ,"../../lessons/welten/rand-1.txt":wZ,"../../lessons/welten/rand-2.txt":zZ,"../../lessons/welten/slalom.txt":IZ,"../../lessons/welten/tunnel-1.txt":kZ,"../../lessons/welten/tunnel-2.txt":SZ,"../../lessons/welten/wald-1.txt":TZ,"../../lessons/welten/wald-2.txt":_Z,"../../lessons/welten/wand-frei.txt":jZ,"../../lessons/welten/wand-kurz.txt":CZ,"../../lessons/welten/wand-lang.txt":AZ,"../../lessons/welten/wand-mittel.txt":PZ,"../../lessons/welten/wand-nah.txt":DZ,"../../lessons/welten/zeit-1.txt":BZ,"../../lessons/welten/ziel-kurz.txt":OZ,"../../lessons/welten/ziel-lang.txt":MZ}),IE=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":ZZ,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":LZ,"../../lessons/bilder/ben-shneiderman.jpg":WZ,"../../lessons/bilder/caesar-ascii.svg":EZ,"../../lessons/bilder/caesar-scheibe.svg":NZ,"../../lessons/bilder/caesar-verschiebung.svg":FZ,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":RZ,"../../lessons/bilder/en/kino-saal.svg":JZ,"../../lessons/bilder/en/kino-schleifen.svg":GZ,"../../lessons/bilder/en/l01-pap.svg":HZ,"../../lessons/bilder/en/l02-einfuegen.svg":VZ,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":qZ,"../../lessons/bilder/en/l03-lochkarte.svg":QZ,"../../lessons/bilder/en/l04-camelcase.svg":UZ,"../../lessons/bilder/en/l04-variable.svg":YZ,"../../lessons/bilder/en/l04-zuweisung.svg":$Z,"../../lessons/bilder/en/l05-tauschen.svg":KZ,"../../lessons/bilder/en/l08-zahlenstrahl.svg":XZ,"../../lessons/bilder/en/l10-kopfgesteuert.svg":eL,"../../lessons/bilder/en/l11-vergleich.svg":tL,"../../lessons/bilder/en/l12-for-ablauf.svg":nL,"../../lessons/bilder/en/l12-while-zu-for.svg":iL,"../../lessons/bilder/en/l13-verschachtelt-tabelle.svg":aL,"../../lessons/bilder/en/l14-array.svg":sL,"../../lessons/bilder/en/l20-cpp.svg":rL,"../../lessons/bilder/en/l20-jvm.svg":oL,"../../lessons/bilder/en/mvc-klick.svg":lL,"../../lessons/bilder/en/ss-binaere-suche.svg":uL,"../../lessons/bilder/en/ss-bubblesort.svg":mL,"../../lessons/bilder/en/ss-lineare-suche.svg":cL,"../../lessons/bilder/en/ss-vergleiche.svg":dL,"../../lessons/bilder/en/uebergabe.svg":hL,"../../lessons/bilder/en/zk-zeichen.svg":gL,"../../lessons/bilder/grace-hopper.jpg":pL,"../../lessons/bilder/hedy-lamarr.jpg":fL,"../../lessons/bilder/ike-nassi.jpg":bL,"../../lessons/bilder/katherine-johnson.jpg":xL,"../../lessons/bilder/kino-saal.svg":vL,"../../lessons/bilder/kino-schleifen.svg":yL,"../../lessons/bilder/l01-pap.svg":wL,"../../lessons/bilder/l02-einfuegen.svg":zL,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":IL,"../../lessons/bilder/l03-lochkarte.svg":kL,"../../lessons/bilder/l03-zuse-lochstreifen.svg":SL,"../../lessons/bilder/l04-camelcase.svg":TL,"../../lessons/bilder/l04-variable.svg":_L,"../../lessons/bilder/l04-zuweisung.svg":jL,"../../lessons/bilder/l05-tauschen.svg":CL,"../../lessons/bilder/l07-schreibtischtest-de.svg":AL,"../../lessons/bilder/l07-schreibtischtest-en.svg":PL,"../../lessons/bilder/l07-schreibtischtest-pt.svg":DL,"../../lessons/bilder/l08-zahlenstrahl.svg":BL,"../../lessons/bilder/l09-wahrheitstabelle.svg":OL,"../../lessons/bilder/l10-kopfgesteuert.svg":ML,"../../lessons/bilder/l11-vergleich.svg":ZL,"../../lessons/bilder/l12-for-ablauf.svg":LL,"../../lessons/bilder/l12-while-zu-for.svg":WL,"../../lessons/bilder/l13-verschachtelt-tabelle.svg":EL,"../../lessons/bilder/l14-array.svg":NL,"../../lessons/bilder/l20-cpp.svg":FL,"../../lessons/bilder/l20-jvm.svg":RL,"../../lessons/bilder/margaret-hamilton.jpg":JL,"../../lessons/bilder/mvc-klick.svg":GL,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":HL,"../../lessons/bilder/pt/kino-saal.svg":VL,"../../lessons/bilder/pt/kino-schleifen.svg":qL,"../../lessons/bilder/pt/l01-pap.svg":QL,"../../lessons/bilder/pt/l02-einfuegen.svg":UL,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":YL,"../../lessons/bilder/pt/l03-lochkarte.svg":$L,"../../lessons/bilder/pt/l04-camelcase.svg":KL,"../../lessons/bilder/pt/l04-variable.svg":XL,"../../lessons/bilder/pt/l04-zuweisung.svg":eW,"../../lessons/bilder/pt/l05-tauschen.svg":tW,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":nW,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":iW,"../../lessons/bilder/pt/l11-vergleich.svg":aW,"../../lessons/bilder/pt/l12-for-ablauf.svg":sW,"../../lessons/bilder/pt/l12-while-zu-for.svg":rW,"../../lessons/bilder/pt/l13-verschachtelt-tabelle.svg":oW,"../../lessons/bilder/pt/l14-array.svg":lW,"../../lessons/bilder/pt/l20-cpp.svg":uW,"../../lessons/bilder/pt/l20-jvm.svg":mW,"../../lessons/bilder/pt/mvc-klick.svg":cW,"../../lessons/bilder/pt/schiffe-versenken.svg":dW,"../../lessons/bilder/pt/ss-binaere-suche.svg":hW,"../../lessons/bilder/pt/ss-bubblesort.svg":gW,"../../lessons/bilder/pt/ss-lineare-suche.svg":pW,"../../lessons/bilder/pt/ss-vergleiche.svg":fW,"../../lessons/bilder/pt/uebergabe.svg":bW,"../../lessons/bilder/pt/zk-zeichen.svg":xW,"../../lessons/bilder/schiffe-versenken.svg":vW,"../../lessons/bilder/ss-binaere-suche.svg":yW,"../../lessons/bilder/ss-bubblesort.svg":wW,"../../lessons/bilder/ss-lineare-suche.svg":zW,"../../lessons/bilder/ss-vergleiche.svg":IW,"../../lessons/bilder/uebergabe.svg":kW,"../../lessons/bilder/zk-zeichen.svg":SW}),Mg=i=>i.replace(/^.*\//,"");function ti(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[Mg(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function bm(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let P1="en",zt=[],Pn=[],Xa="",es=[],Ds="off";function xm(i){i!==Ds&&(Ds=i,zt=[],Bs(P1))}function Bs(i){var s,r,o;if(ab(i),i===P1&&zt.length>0)return;P1=i;const e=ti(xE,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>fE(vm(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=bE(vm(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=ti(vE,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(Ds==="on"){const l=ti(fm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=kE(l);zt=t(l,u.renumber).map(c=>({...c,number:u.number.get(c.id),robot:!0})).sort((c,d)=>c.number-d.number);const m=ti(yE,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Pn=n(m,"visubot/aufgaben/",u.renumber).map(c=>({...c,robot:!0}))}else zt=t(e),Pn=n(a,"aufgaben/");Pn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...zt.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...Pn.flatMap(u=>u.blocks)])l.kind==="textFile"&&gb(l.name,l.content);if(Xa=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",Ds!=="off"){const l=(r=ti(fm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Xa=`${Xa.trimEnd()} +`)){const h=/^##\s+(.*)$/.exec(d);h?(u(),l={title:h[1].trim(),lines:[]}):l?l.lines.push(d):o.push(d)}if(u(),r.length===0)throw new ie(`${e}: Keine Schritte (## Überschrift) gefunden.`);vE(r,e);const m=t.get("titel");if(!m)throw new ie(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function wE(i,e){const{meta:t,body:n}=Bg(i,e),a=t.get("titel");if(!a)throw new ie(`${e}: „titel:“ fehlt.`);const s=t.get("nach");return{id:e.replace(/^.*\//,"").replace(/\.md$/,""),title:a,after:s?Number(s):void 0,level:Number(t.get("stufe")??"1")||1,blocks:Mg(n,e)}}function pm(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!db(n))throw new ie(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${Eh.join(", ")}.`);return t}const zE=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":i4,"../../lessons/de/01-weitere-darstellungen.md":a4,"../../lessons/de/02-der-editor.md":s4,"../../lessons/de/03-speichern-oeffnen-exportieren.md":r4,"../../lessons/de/04-variablen-und-datentypen.md":o4,"../../lessons/de/05-sequenz.md":l4,"../../lessons/de/06-eingabe-und-ausgabe.md":u4,"../../lessons/de/07-simulation-und-schreibtischtest.md":m4,"../../lessons/de/08-verzweigung.md":c4,"../../lessons/de/09-bedingungen-verknuepfen.md":d4,"../../lessons/de/10-fallauswahl.md":h4,"../../lessons/de/11-while-schleife.md":g4,"../../lessons/de/12-do-while-schleife.md":p4,"../../lessons/de/13-for-schleife.md":f4,"../../lessons/de/14-verschachteln.md":b4,"../../lessons/de/15-arrays.md":x4,"../../lessons/de/16-zweidimensionale-arrays.md":v4,"../../lessons/de/17-zeichenketten.md":y4,"../../lessons/de/18-aufruf-und-aussprung.md":w4,"../../lessons/de/19-suchen-und-sortieren.md":z4,"../../lessons/de/20-java.md":I4,"../../lessons/de/21-python-und-javascript.md":k4,"../../lessons/de/22-try-und-catch.md":S4,"../../lessons/de/23-text-einlesen-und-speichern.md":T4,"../../lessons/de/24-zeile-fuer-zeile.md":_4,"../../lessons/de/25-tabellen-als-csv.md":j4,"../../lessons/de/26-json.md":C4,"../../lessons/de/27-formate-im-vergleich.md":A4,"../../lessons/de/28-erstes-fenster.md":P4,"../../lessons/de/29-knopf-im-fenster.md":D4,"../../lessons/de/30-der-knopf-reagiert.md":B4,"../../lessons/de/31-zahl-verdoppeln.md":O4,"../../lessons/de/32-klickzaehler.md":M4,"../../lessons/de/33-ampel.md":Z4,"../../lessons/de/34-notenrechner.md":L4,"../../lessons/de/35-taschenrechner.md":W4,"../../lessons/de/36-zahlenraten.md":E4,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":N4,"../../lessons/de/38-innere-klassen.md":F4,"../../lessons/de/39-zwei-reiter.md":R4,"../../lessons/de/40-model-view-controller.md":J4,"../../lessons/de/begriffe.md":G4,"../../lessons/de/nachschlagen.md":H4,"../../lessons/en/01-was-ist-ein-struktogramm.md":V4,"../../lessons/en/01-weitere-darstellungen.md":q4,"../../lessons/en/02-der-editor.md":Q4,"../../lessons/en/03-speichern-oeffnen-exportieren.md":U4,"../../lessons/en/04-variablen-und-datentypen.md":Y4,"../../lessons/en/05-sequenz.md":$4,"../../lessons/en/06-eingabe-und-ausgabe.md":K4,"../../lessons/en/07-simulation-und-schreibtischtest.md":X4,"../../lessons/en/08-verzweigung.md":ev,"../../lessons/en/09-bedingungen-verknuepfen.md":tv,"../../lessons/en/10-fallauswahl.md":nv,"../../lessons/en/11-while-schleife.md":iv,"../../lessons/en/12-do-while-schleife.md":av,"../../lessons/en/13-for-schleife.md":sv,"../../lessons/en/14-verschachteln.md":rv,"../../lessons/en/15-arrays.md":ov,"../../lessons/en/16-zweidimensionale-arrays.md":lv,"../../lessons/en/17-zeichenketten.md":uv,"../../lessons/en/18-aufruf-und-aussprung.md":mv,"../../lessons/en/19-suchen-und-sortieren.md":cv,"../../lessons/en/20-java.md":dv,"../../lessons/en/21-python-und-javascript.md":hv,"../../lessons/en/22-try-und-catch.md":gv,"../../lessons/en/23-text-einlesen-und-speichern.md":pv,"../../lessons/en/24-zeile-fuer-zeile.md":fv,"../../lessons/en/25-tabellen-als-csv.md":bv,"../../lessons/en/26-json.md":xv,"../../lessons/en/27-formate-im-vergleich.md":vv,"../../lessons/en/28-erstes-fenster.md":yv,"../../lessons/en/29-knopf-im-fenster.md":wv,"../../lessons/en/30-der-knopf-reagiert.md":zv,"../../lessons/en/31-zahl-verdoppeln.md":Iv,"../../lessons/en/32-klickzaehler.md":kv,"../../lessons/en/33-ampel.md":Sv,"../../lessons/en/34-notenrechner.md":Tv,"../../lessons/en/35-taschenrechner.md":_v,"../../lessons/en/36-zahlenraten.md":jv,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":Cv,"../../lessons/en/38-innere-klassen.md":Av,"../../lessons/en/39-zwei-reiter.md":Pv,"../../lessons/en/40-model-view-controller.md":Dv,"../../lessons/en/begriffe.md":Bv,"../../lessons/en/nachschlagen.md":Ov,"../../lessons/pt/01-was-ist-ein-struktogramm.md":Mv,"../../lessons/pt/01-weitere-darstellungen.md":Zv,"../../lessons/pt/02-der-editor.md":Lv,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":Wv,"../../lessons/pt/04-variablen-und-datentypen.md":Ev,"../../lessons/pt/05-sequenz.md":Nv,"../../lessons/pt/06-eingabe-und-ausgabe.md":Fv,"../../lessons/pt/07-simulation-und-schreibtischtest.md":Rv,"../../lessons/pt/08-verzweigung.md":Jv,"../../lessons/pt/09-bedingungen-verknuepfen.md":Gv,"../../lessons/pt/10-fallauswahl.md":Hv,"../../lessons/pt/11-while-schleife.md":Vv,"../../lessons/pt/12-do-while-schleife.md":qv,"../../lessons/pt/13-for-schleife.md":Qv,"../../lessons/pt/14-verschachteln.md":Uv,"../../lessons/pt/15-arrays.md":Yv,"../../lessons/pt/16-zweidimensionale-arrays.md":$v,"../../lessons/pt/17-zeichenketten.md":Kv,"../../lessons/pt/18-aufruf-und-aussprung.md":Xv,"../../lessons/pt/19-suchen-und-sortieren.md":ey,"../../lessons/pt/20-java.md":ty,"../../lessons/pt/21-python-und-javascript.md":ny,"../../lessons/pt/22-try-und-catch.md":iy,"../../lessons/pt/23-text-einlesen-und-speichern.md":ay,"../../lessons/pt/24-zeile-fuer-zeile.md":sy,"../../lessons/pt/25-tabellen-als-csv.md":ry,"../../lessons/pt/26-json.md":oy,"../../lessons/pt/27-formate-im-vergleich.md":ly,"../../lessons/pt/28-erstes-fenster.md":uy,"../../lessons/pt/29-knopf-im-fenster.md":my,"../../lessons/pt/30-der-knopf-reagiert.md":cy,"../../lessons/pt/31-zahl-verdoppeln.md":dy,"../../lessons/pt/32-klickzaehler.md":hy,"../../lessons/pt/33-ampel.md":gy,"../../lessons/pt/34-notenrechner.md":py,"../../lessons/pt/35-taschenrechner.md":fy,"../../lessons/pt/36-zahlenraten.md":by,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":xy,"../../lessons/pt/38-innere-klassen.md":vy,"../../lessons/pt/39-zwei-reiter.md":yy,"../../lessons/pt/40-model-view-controller.md":wy,"../../lessons/pt/begriffe.md":zy,"../../lessons/pt/nachschlagen.md":Iy}),IE=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":ky,"../../lessons/de/aufgaben/ballwurf.md":Sy,"../../lessons/de/aufgaben/bestenliste.md":Ty,"../../lessons/de/aufgaben/binaerzahl.md":_y,"../../lessons/de/aufgaben/caesar.md":jy,"../../lessons/de/aufgaben/collatz.md":Cy,"../../lessons/de/aufgaben/einheitenrechner.md":Ay,"../../lessons/de/aufgaben/fibonacci.md":Py,"../../lessons/de/aufgaben/gerade-ungerade.md":Dy,"../../lessons/de/aufgaben/mehrwertsteuer.md":By,"../../lessons/de/aufgaben/notendurchschnitt.md":Oy,"../../lessons/de/aufgaben/pin-pruefen.md":My,"../../lessons/de/aufgaben/schiffe-versenken.md":Zy,"../../lessons/de/aufgaben/speisekarte.md":Ly,"../../lessons/de/aufgaben/summe-bilden.md":Wy,"../../lessons/de/aufgaben/tafeldienst.md":Ey,"../../lessons/de/aufgaben/taschenrechner.md":Ny,"../../lessons/de/aufgaben/verleih-menue.md":Fy,"../../lessons/de/aufgaben/vokabeltrainer.md":Ry,"../../lessons/de/aufgaben/volljaehrig.md":Jy,"../../lessons/de/aufgaben/wuerfel-mvc.md":Gy,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Hy,"../../lessons/en/aufgaben/alter-unterprogramm.md":Vy,"../../lessons/en/aufgaben/ballwurf.md":qy,"../../lessons/en/aufgaben/bestenliste.md":Qy,"../../lessons/en/aufgaben/binaerzahl.md":Uy,"../../lessons/en/aufgaben/caesar.md":Yy,"../../lessons/en/aufgaben/collatz.md":$y,"../../lessons/en/aufgaben/einheitenrechner.md":Ky,"../../lessons/en/aufgaben/fibonacci.md":Xy,"../../lessons/en/aufgaben/gerade-ungerade.md":ew,"../../lessons/en/aufgaben/mehrwertsteuer.md":tw,"../../lessons/en/aufgaben/notendurchschnitt.md":nw,"../../lessons/en/aufgaben/pin-pruefen.md":iw,"../../lessons/en/aufgaben/schiffe-versenken.md":aw,"../../lessons/en/aufgaben/speisekarte.md":sw,"../../lessons/en/aufgaben/summe-bilden.md":rw,"../../lessons/en/aufgaben/tafeldienst.md":ow,"../../lessons/en/aufgaben/taschenrechner.md":lw,"../../lessons/en/aufgaben/verleih-menue.md":uw,"../../lessons/en/aufgaben/vokabeltrainer.md":mw,"../../lessons/en/aufgaben/volljaehrig.md":cw,"../../lessons/en/aufgaben/wuerfel-mvc.md":dw,"../../lessons/en/aufgaben/zahl-verdoppeln.md":hw,"../../lessons/pt/aufgaben/alter-unterprogramm.md":gw,"../../lessons/pt/aufgaben/ballwurf.md":pw,"../../lessons/pt/aufgaben/bestenliste.md":fw,"../../lessons/pt/aufgaben/binaerzahl.md":bw,"../../lessons/pt/aufgaben/caesar.md":xw,"../../lessons/pt/aufgaben/collatz.md":vw,"../../lessons/pt/aufgaben/einheitenrechner.md":yw,"../../lessons/pt/aufgaben/fibonacci.md":ww,"../../lessons/pt/aufgaben/gerade-ungerade.md":zw,"../../lessons/pt/aufgaben/mehrwertsteuer.md":Iw,"../../lessons/pt/aufgaben/notendurchschnitt.md":kw,"../../lessons/pt/aufgaben/pin-pruefen.md":Sw,"../../lessons/pt/aufgaben/schiffe-versenken.md":Tw,"../../lessons/pt/aufgaben/speisekarte.md":_w,"../../lessons/pt/aufgaben/summe-bilden.md":jw,"../../lessons/pt/aufgaben/tafeldienst.md":Cw,"../../lessons/pt/aufgaben/taschenrechner.md":Aw,"../../lessons/pt/aufgaben/verleih-menue.md":Pw,"../../lessons/pt/aufgaben/vokabeltrainer.md":Dw,"../../lessons/pt/aufgaben/volljaehrig.md":Bw,"../../lessons/pt/aufgaben/wuerfel-mvc.md":Ow,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":Mw}),fm=Object.assign({"../../lessons/de/visubot/00-struktogramm-und-editor.md":Zw,"../../lessons/de/visubot/01-der-mbot2.md":Lw,"../../lessons/de/visubot/02-das-quadrat.md":Ww,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Ew,"../../lessons/de/visubot/03-zeile-fuer-zeile-testen.md":Nw,"../../lessons/de/visubot/04-sensoren.md":Fw,"../../lessons/de/visubot/05-bis-zur-wand.md":Rw,"../../lessons/de/visubot/05-erst-fahren-dann-pruefen.md":Jw,"../../lessons/de/visubot/06-abstand.md":Gw,"../../lessons/de/visubot/07-linie.md":Hw,"../../lessons/de/visubot/07-und-oder.md":Vw,"../../lessons/de/visubot/08-farben.md":qw,"../../lessons/de/visubot/09-fallauswahl-mbot2.md":Qw,"../../lessons/de/visubot/10-tasten-joystick.md":Uw,"../../lessons/de/visubot/10-unterbrechen-mit-break.md":Yw,"../../lessons/de/visubot/11-licht.md":$w,"../../lessons/de/visubot/12-lautstaerke.md":Kw,"../../lessons/de/visubot/13-neigung.md":Xw,"../../lessons/de/visubot/14-leds.md":e9,"../../lessons/de/visubot/15-einzelne-leds.md":t9,"../../lessons/de/visubot/16-lautsprecher.md":n9,"../../lessons/de/visubot/17-arrays-melodie.md":i9,"../../lessons/de/visubot/18-bildschirm.md":a9,"../../lessons/de/visubot/19-zeichenketten.md":s9,"../../lessons/de/visubot/20-motoren.md":r9,"../../lessons/de/visubot/21-stoppuhr-akku.md":o9,"../../lessons/de/visubot/22-eigene-methoden.md":l9,"../../lessons/de/visubot/nachschlagen.md":u9,"../../lessons/en/visubot/00-struktogramm-und-editor.md":m9,"../../lessons/en/visubot/01-der-mbot2.md":c9,"../../lessons/en/visubot/02-das-quadrat.md":d9,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":h9,"../../lessons/en/visubot/03-zeile-fuer-zeile-testen.md":g9,"../../lessons/en/visubot/04-sensoren.md":p9,"../../lessons/en/visubot/05-bis-zur-wand.md":f9,"../../lessons/en/visubot/05-erst-fahren-dann-pruefen.md":b9,"../../lessons/en/visubot/06-abstand.md":x9,"../../lessons/en/visubot/07-linie.md":v9,"../../lessons/en/visubot/07-und-oder.md":y9,"../../lessons/en/visubot/08-farben.md":w9,"../../lessons/en/visubot/09-fallauswahl-mbot2.md":z9,"../../lessons/en/visubot/10-tasten-joystick.md":I9,"../../lessons/en/visubot/10-unterbrechen-mit-break.md":k9,"../../lessons/en/visubot/11-licht.md":S9,"../../lessons/en/visubot/12-lautstaerke.md":T9,"../../lessons/en/visubot/13-neigung.md":_9,"../../lessons/en/visubot/14-leds.md":j9,"../../lessons/en/visubot/15-einzelne-leds.md":C9,"../../lessons/en/visubot/16-lautsprecher.md":A9,"../../lessons/en/visubot/17-arrays-melodie.md":P9,"../../lessons/en/visubot/18-bildschirm.md":D9,"../../lessons/en/visubot/19-zeichenketten.md":B9,"../../lessons/en/visubot/20-motoren.md":O9,"../../lessons/en/visubot/21-stoppuhr-akku.md":M9,"../../lessons/en/visubot/22-eigene-methoden.md":Z9,"../../lessons/en/visubot/nachschlagen.md":L9}),kE=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":W9,"../../lessons/de/visubot/aufgaben/ausgang.md":E9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":N9,"../../lessons/de/visubot/aufgaben/dreieck.md":F9,"../../lessons/de/visubot/aufgaben/einparken.md":R9,"../../lessons/de/visubot/aufgaben/hindernis.md":J9,"../../lessons/de/visubot/aufgaben/knight-rider.md":G9,"../../lessons/de/visubot/aufgaben/labyrinth.md":H9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":V9,"../../lessons/de/visubot/aufgaben/morsen.md":q9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":Q9,"../../lessons/de/visubot/aufgaben/slalom.md":U9,"../../lessons/de/visubot/aufgaben/spirale.md":Y9,"../../lessons/de/visubot/aufgaben/treppe.md":$9,"../../lessons/de/visubot/aufgaben/tunnel.md":K9,"../../lessons/de/visubot/aufgaben/wald.md":X9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":e5,"../../lessons/en/visubot/aufgaben/ausgang.md":t5,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":n5,"../../lessons/en/visubot/aufgaben/dreieck.md":i5,"../../lessons/en/visubot/aufgaben/einparken.md":a5,"../../lessons/en/visubot/aufgaben/hindernis.md":s5,"../../lessons/en/visubot/aufgaben/knight-rider.md":r5,"../../lessons/en/visubot/aufgaben/labyrinth.md":o5,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":l5,"../../lessons/en/visubot/aufgaben/morsen.md":u5,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":m5,"../../lessons/en/visubot/aufgaben/slalom.md":c5,"../../lessons/en/visubot/aufgaben/spirale.md":d5,"../../lessons/en/visubot/aufgaben/treppe.md":h5,"../../lessons/en/visubot/aufgaben/tunnel.md":g5,"../../lessons/en/visubot/aufgaben/wald.md":p5}),SE=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":f5,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":b5,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":x5,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":v5,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":y5,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":w5,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":z5,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":I5,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":k5,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":S5,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":T5,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":_5,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":j5,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":C5,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":A5,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":P5,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":D5,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":B5,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":O5,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":M5,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":Z5,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":L5,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":W5,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":E5,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":N5,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":F5,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":R5,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":J5,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":G5,"../../lessons/diagramme/dt-buffered.visustruct":H5,"../../lessons/diagramme/dt-csv.visustruct":V5,"../../lessons/diagramme/dt-json.visustruct":q5,"../../lessons/diagramme/dt-lesen.visustruct":Q5,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":U5,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":Y5,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":$5,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":K5,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":X5,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":ez,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":tz,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":nz,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":iz,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":az,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":sz,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":rz,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":oz,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":lz,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":uz,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":mz,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":cz,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":dz,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":hz,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":gz,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":pz,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":fz,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":bz,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":xz,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":vz,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":yz,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":wz,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":zz,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":Iz,"../../lessons/diagramme/en/dt-buffered.visustruct":kz,"../../lessons/diagramme/en/dt-csv.visustruct":Sz,"../../lessons/diagramme/en/dt-json.visustruct":Tz,"../../lessons/diagramme/en/dt-lesen.visustruct":_z,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":jz,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":Cz,"../../lessons/diagramme/en/kino-frei-start.visustruct":Az,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":Pz,"../../lessons/diagramme/en/kino-karte-start.visustruct":Dz,"../../lessons/diagramme/en/kino-saalplan.visustruct":Bz,"../../lessons/diagramme/en/kino-verkaufen.visustruct":Oz,"../../lessons/diagramme/en/l04-gross-klein-loesung.visustruct":Mz,"../../lessons/diagramme/en/l04-gross-klein-start.visustruct":Zz,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":Lz,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":Wz,"../../lessons/diagramme/en/l04-java-laeuft-nicht-loesung.visustruct":Ez,"../../lessons/diagramme/en/l04-java-laeuft-nicht-start.visustruct":Nz,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":Fz,"../../lessons/diagramme/en/l04-rechnen.visustruct":Rz,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":Jz,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":Gz,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":Hz,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":Vz,"../../lessons/diagramme/en/l04-tauschen.visustruct":qz,"../../lessons/diagramme/en/l05-datentypen.visustruct":Qz,"../../lessons/diagramme/en/l05-division.visustruct":Uz,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":Yz,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":$z,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":Kz,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":Xz,"../../lessons/diagramme/en/l05-java-laeuft-nicht-loesung.visustruct":e6,"../../lessons/diagramme/en/l05-java-laeuft-nicht-start.visustruct":t6,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":n6,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":i6,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":a6,"../../lessons/diagramme/en/l05-sequenz.visustruct":s6,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":r6,"../../lessons/diagramme/en/l06-eva.visustruct":o6,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":l6,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":u6,"../../lessons/diagramme/en/l06-java-laeuft-nicht-loesung.visustruct":m6,"../../lessons/diagramme/en/l06-java-laeuft-nicht-start.visustruct":c6,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":d6,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":h6,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":g6,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":p6,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":f6,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":b6,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":x6,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":v6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-loesung.visustruct":y6,"../../lessons/diagramme/en/l07-java-laeuft-nicht-start.visustruct":w6,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":z6,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":I6,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":k6,"../../lessons/diagramme/en/l07-rabatt.visustruct":S6,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":T6,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":_6,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":j6,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":C6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-loesung.visustruct":A6,"../../lessons/diagramme/en/l08-java-laeuft-nicht-start.visustruct":P6,"../../lessons/diagramme/en/l08-jugendticket.visustruct":D6,"../../lessons/diagramme/en/l08-note.visustruct":B6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":O6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":M6,"../../lessons/diagramme/en/l09-ampel.visustruct":Z6,"../../lessons/diagramme/en/l09-automat.visustruct":L6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":W6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":E6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-loesung.visustruct":N6,"../../lessons/diagramme/en/l09-java-laeuft-nicht-start.visustruct":F6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":R6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":J6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":G6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":H6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":V6,"../../lessons/diagramme/en/l1-sequenz.visustruct":q6,"../../lessons/diagramme/en/l1-tee.visustruct":Q6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":U6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":Y6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":$6,"../../lessons/diagramme/en/l10-countdown.visustruct":K6,"../../lessons/diagramme/en/l10-endlos.visustruct":X6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":eI,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":tI,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":nI,"../../lessons/diagramme/en/l10-java-laeuft-nicht-loesung.visustruct":iI,"../../lessons/diagramme/en/l10-java-laeuft-nicht-start.visustruct":aI,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":sI,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":rI,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":oI,"../../lessons/diagramme/en/l11-einmal.visustruct":lI,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":uI,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":mI,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":cI,"../../lessons/diagramme/en/l11-java-laeuft-nicht-loesung.visustruct":dI,"../../lessons/diagramme/en/l11-java-laeuft-nicht-start.visustruct":hI,"../../lessons/diagramme/en/l11-note-loesung.visustruct":gI,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":pI,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":fI,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":bI,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":xI,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":vI,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":yI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-loesung.visustruct":wI,"../../lessons/diagramme/en/l12-java-laeuft-nicht-start.visustruct":zI,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":II,"../../lessons/diagramme/en/l12-summe.visustruct":kI,"../../lessons/diagramme/en/l13-dreieck.visustruct":SI,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":TI,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":_I,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":jI,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":CI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-loesung.visustruct":AI,"../../lessons/diagramme/en/l13-java-laeuft-nicht-start.visustruct":PI,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":DI,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":BI,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":OI,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":MI,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":ZI,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":LI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-loesung.visustruct":WI,"../../lessons/diagramme/en/l14-java-laeuft-nicht-start.visustruct":EI,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":NI,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":FI,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":RI,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":JI,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":GI,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":HI,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":VI,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":qI,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":QI,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":UI,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":YI,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":$I,"../../lessons/diagramme/en/l15-java-laeuft-nicht-loesung.visustruct":KI,"../../lessons/diagramme/en/l15-java-laeuft-nicht-start.visustruct":XI,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":ek,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":tk,"../../lessons/diagramme/en/l15-quadrat.visustruct":nk,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":ik,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":ak,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":sk,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":rk,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":ok,"../../lessons/diagramme/en/l16-countdown-start.visustruct":lk,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":uk,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":mk,"../../lessons/diagramme/en/l16-java-laeuft-nicht-loesung.visustruct":ck,"../../lessons/diagramme/en/l16-java-laeuft-nicht-start.visustruct":dk,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":hk,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":gk,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":pk,"../../lessons/diagramme/en/l16-summe-start.visustruct":fk,"../../lessons/diagramme/en/l17-beispiel.visustruct":bk,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":xk,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":vk,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":yk,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":wk,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":zk,"../../lessons/diagramme/en/l17-java-laeuft-nicht-loesung.visustruct":Ik,"../../lessons/diagramme/en/l17-java-laeuft-nicht-start.visustruct":kk,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Sk,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":Tk,"../../lessons/diagramme/en/l18-beispiel.visustruct":_k,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":jk,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Ck,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Ak,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Pk,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Dk,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Bk,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Ok,"../../lessons/diagramme/en/l19-java-laeuft-nicht-loesung.visustruct":Mk,"../../lessons/diagramme/en/l19-java-laeuft-nicht-start.visustruct":Zk,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Lk,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Wk,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Ek,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Nk,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Fk,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Rk,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Jk,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Gk,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":Hk,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":Vk,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":qk,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":Qk,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Uk,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Yk,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":$k,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":Kk,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":Xk,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":e7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":t7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":n7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":i7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":a7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":s7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":r7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":o7,"../../lessons/diagramme/en/sim-kino-start.visustruct":l7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":u7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":m7,"../../lessons/diagramme/en/sim-tausch.visustruct":c7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":d7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":h7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":g7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":p7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":f7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":b7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":x7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":v7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":y7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":w7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":z7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":I7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":k7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":S7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":_7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-do-while-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-erster-plan-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-fehler-04-sensoren-start.visustruct":R7,"../../lessons/diagramme/en/vb-fehler-05-bis-zur-wand-start.visustruct":J7,"../../lessons/diagramme/en/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":G7,"../../lessons/diagramme/en/vb-fehler-06-abstand-start.visustruct":H7,"../../lessons/diagramme/en/vb-fehler-07-linie-start.visustruct":V7,"../../lessons/diagramme/en/vb-fehler-07-und-oder-start.visustruct":q7,"../../lessons/diagramme/en/vb-fehler-08-farben-start.visustruct":Q7,"../../lessons/diagramme/en/vb-fehler-09-fallauswahl-mbot2-start.visustruct":U7,"../../lessons/diagramme/en/vb-fehler-10-tasten-joystick-start.visustruct":Y7,"../../lessons/diagramme/en/vb-fehler-10-unterbrechen-mit-break-start.visustruct":$7,"../../lessons/diagramme/en/vb-fehler-11-licht-start.visustruct":K7,"../../lessons/diagramme/en/vb-fehler-12-lautstaerke-start.visustruct":X7,"../../lessons/diagramme/en/vb-fehler-13-neigung-start.visustruct":e8,"../../lessons/diagramme/en/vb-fehler-14-leds-start.visustruct":t8,"../../lessons/diagramme/en/vb-fehler-15-einzelne-leds-start.visustruct":n8,"../../lessons/diagramme/en/vb-fehler-16-lautsprecher-start.visustruct":i8,"../../lessons/diagramme/en/vb-fehler-17-arrays-melodie-start.visustruct":a8,"../../lessons/diagramme/en/vb-fehler-18-bildschirm-start.visustruct":s8,"../../lessons/diagramme/en/vb-fehler-19-zeichenketten-start.visustruct":r8,"../../lessons/diagramme/en/vb-fehler-20-motoren-start.visustruct":o8,"../../lessons/diagramme/en/vb-fehler-21-stoppuhr-akku-start.visustruct":l8,"../../lessons/diagramme/en/vb-fehler-22-eigene-methoden-start.visustruct":u8,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":m8,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":c8,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":d8,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":h8,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":g8,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":p8,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":f8,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":b8,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":x8,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":v8,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":y8,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":w8,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":z8,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":I8,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":k8,"../../lessons/diagramme/en/vb-java-rechteck-umdrehungen-loesung.visustruct":S8,"../../lessons/diagramme/en/vb-java-schritte-zaehlen-loesung.visustruct":T8,"../../lessons/diagramme/en/vb-java-sicher-fahren-loesung.visustruct":_8,"../../lessons/diagramme/en/vb-java-taste-stopp-loesung.visustruct":j8,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":C8,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":A8,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":P8,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":D8,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":B8,"../../lessons/diagramme/en/vb-l00-bausteine-loesung.visustruct":O8,"../../lessons/diagramme/en/vb-l00-sequenz-loesung.visustruct":M8,"../../lessons/diagramme/en/vb-l03-wachsend-loesung.visustruct":Z8,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":L8,"../../lessons/diagramme/en/vb-laufschrift-loesung.visustruct":W8,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":E8,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":N8,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":F8,"../../lessons/diagramme/en/vb-messreihe-loesung.visustruct":R8,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":J8,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":G8,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":H8,"../../lessons/diagramme/en/vb-notbremse-loesung.visustruct":V8,"../../lessons/diagramme/en/vb-oder-loesung.visustruct":q8,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":Q8,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":U8,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":Y8,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":$8,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":K8,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":X8,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":eS,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":tS,"../../lessons/diagramme/en/vb-spirale-falsch-loesung.visustruct":nS,"../../lessons/diagramme/en/vb-spirale-falsch-start.visustruct":iS,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":aS,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":sS,"../../lessons/diagramme/en/vb-startsignal-loesung.visustruct":rS,"../../lessons/diagramme/en/vb-strecke-anzeigen-loesung.visustruct":oS,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":lS,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":uS,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":mS,"../../lessons/diagramme/en/vb-ueberladung-umdrehung-loesung.visustruct":cS,"../../lessons/diagramme/en/vb-und-loesung.visustruct":dS,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":hS,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":gS,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":pS,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":fS,"../../lessons/diagramme/en/vb-zentimeter-loesung.visustruct":bS,"../../lessons/diagramme/en/vb-zentimeter-unterprogramm-loesung.visustruct":xS,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":vS,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":yS,"../../lessons/diagramme/en/zk-mehr.visustruct":wS,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":zS,"../../lessons/diagramme/en/zk-split.visustruct":IS,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":kS,"../../lessons/diagramme/en/zk-zaehlen.visustruct":SS,"../../lessons/diagramme/en/zk-zeichen.visustruct":TS,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":_S,"../../lessons/diagramme/kino-frei-loesung.visustruct":jS,"../../lessons/diagramme/kino-frei-start.visustruct":CS,"../../lessons/diagramme/kino-karte-loesung.visustruct":AS,"../../lessons/diagramme/kino-karte-start.visustruct":PS,"../../lessons/diagramme/kino-saalplan.visustruct":DS,"../../lessons/diagramme/kino-verkaufen.visustruct":BS,"../../lessons/diagramme/l04-gross-klein-loesung.visustruct":OS,"../../lessons/diagramme/l04-gross-klein-start.visustruct":MS,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":ZS,"../../lessons/diagramme/l04-java-fehler-start.visustruct":LS,"../../lessons/diagramme/l04-java-laeuft-nicht-loesung.visustruct":WS,"../../lessons/diagramme/l04-java-laeuft-nicht-start.visustruct":ES,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":NS,"../../lessons/diagramme/l04-rechnen.visustruct":FS,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":RS,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":JS,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":GS,"../../lessons/diagramme/l04-tauschen-start.visustruct":HS,"../../lessons/diagramme/l04-tauschen.visustruct":VS,"../../lessons/diagramme/l05-datentypen.visustruct":qS,"../../lessons/diagramme/l05-division.visustruct":QS,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":US,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":YS,"../../lessons/diagramme/l05-java-fehler-start.visustruct":$S,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":KS,"../../lessons/diagramme/l05-java-laeuft-nicht-loesung.visustruct":XS,"../../lessons/diagramme/l05-java-laeuft-nicht-start.visustruct":eT,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":tT,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":nT,"../../lessons/diagramme/l05-sekunden-start.visustruct":iT,"../../lessons/diagramme/l05-sequenz.visustruct":aT,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":sT,"../../lessons/diagramme/l06-eva.visustruct":rT,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":oT,"../../lessons/diagramme/l06-java-fehler-start.visustruct":lT,"../../lessons/diagramme/l06-java-laeuft-nicht-loesung.visustruct":uT,"../../lessons/diagramme/l06-java-laeuft-nicht-start.visustruct":mT,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":cT,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":dT,"../../lessons/diagramme/l06-rechner-loesung.visustruct":hT,"../../lessons/diagramme/l07-alter-pruefen.visustruct":gT,"../../lessons/diagramme/l07-betrag-loesung.visustruct":pT,"../../lessons/diagramme/l07-gerade-loesung.visustruct":fT,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":bT,"../../lessons/diagramme/l07-java-fehler-start.visustruct":xT,"../../lessons/diagramme/l07-java-laeuft-nicht-loesung.visustruct":vT,"../../lessons/diagramme/l07-java-laeuft-nicht-start.visustruct":yT,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":wT,"../../lessons/diagramme/l07-java-pizza-start.visustruct":zT,"../../lessons/diagramme/l07-maximum-loesung.visustruct":IT,"../../lessons/diagramme/l07-rabatt.visustruct":kT,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":ST,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":TT,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":_T,"../../lessons/diagramme/l08-java-fehler-start.visustruct":jT,"../../lessons/diagramme/l08-java-laeuft-nicht-loesung.visustruct":CT,"../../lessons/diagramme/l08-java-laeuft-nicht-start.visustruct":AT,"../../lessons/diagramme/l08-jugendticket.visustruct":PT,"../../lessons/diagramme/l08-note.visustruct":DT,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":BT,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":OT,"../../lessons/diagramme/l09-ampel.visustruct":MT,"../../lessons/diagramme/l09-automat.visustruct":ZT,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":LT,"../../lessons/diagramme/l09-java-fehler-start.visustruct":WT,"../../lessons/diagramme/l09-java-laeuft-nicht-loesung.visustruct":ET,"../../lessons/diagramme/l09-java-laeuft-nicht-start.visustruct":NT,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":FT,"../../lessons/diagramme/l09-note-loesung.visustruct":RT,"../../lessons/diagramme/l09-rechner-loesung.visustruct":JT,"../../lessons/diagramme/l09-verschachtelt.visustruct":GT,"../../lessons/diagramme/l1-grundbausteine.visustruct":HT,"../../lessons/diagramme/l1-sequenz.visustruct":VT,"../../lessons/diagramme/l1-tee.visustruct":qT,"../../lessons/diagramme/l1-verzweigung.visustruct":QT,"../../lessons/diagramme/l1-wiederholung.visustruct":UT,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":YT,"../../lessons/diagramme/l10-countdown.visustruct":$T,"../../lessons/diagramme/l10-endlos.visustruct":KT,"../../lessons/diagramme/l10-fakultaet.visustruct":XT,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":e_,"../../lessons/diagramme/l10-java-fehler-start.visustruct":t_,"../../lessons/diagramme/l10-java-laeuft-nicht-loesung.visustruct":n_,"../../lessons/diagramme/l10-java-laeuft-nicht-start.visustruct":i_,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":a_,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":s_,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":r_,"../../lessons/diagramme/l11-einmal.visustruct":o_,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":l_,"../../lessons/diagramme/l11-java-fehler-start.visustruct":u_,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":m_,"../../lessons/diagramme/l11-java-laeuft-nicht-loesung.visustruct":c_,"../../lessons/diagramme/l11-java-laeuft-nicht-start.visustruct":d_,"../../lessons/diagramme/l11-note-loesung.visustruct":h_,"../../lessons/diagramme/l11-summe-loesung.visustruct":g_,"../../lessons/diagramme/l12-countdown-loesung.visustruct":p_,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":f_,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":b_,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":x_,"../../lessons/diagramme/l12-java-fehler-start.visustruct":v_,"../../lessons/diagramme/l12-java-laeuft-nicht-loesung.visustruct":y_,"../../lessons/diagramme/l12-java-laeuft-nicht-start.visustruct":w_,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":z_,"../../lessons/diagramme/l12-summe.visustruct":I_,"../../lessons/diagramme/l13-dreieck.visustruct":k_,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":S_,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":T_,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":__,"../../lessons/diagramme/l13-java-fehler-start.visustruct":j_,"../../lessons/diagramme/l13-java-laeuft-nicht-loesung.visustruct":C_,"../../lessons/diagramme/l13-java-laeuft-nicht-start.visustruct":A_,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":P_,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":D_,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":B_,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":O_,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":M_,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Z_,"../../lessons/diagramme/l14-java-laeuft-nicht-loesung.visustruct":L_,"../../lessons/diagramme/l14-java-laeuft-nicht-start.visustruct":W_,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":E_,"../../lessons/diagramme/l14-namen-eingeben.visustruct":N_,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":F_,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":R_,"../../lessons/diagramme/l14-summe-maximum.visustruct":J_,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":G_,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":H_,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":V_,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":q_,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Q_,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":U_,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Y_,"../../lessons/diagramme/l15-java-laeuft-nicht-loesung.visustruct":$_,"../../lessons/diagramme/l15-java-laeuft-nicht-start.visustruct":K_,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":X_,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":ej,"../../lessons/diagramme/l15-quadrat.visustruct":tj,"../../lessons/diagramme/l15-titel-loesung.visustruct":nj,"../../lessons/diagramme/l15-unterprogramm.visustruct":ij,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":aj,"../../lessons/diagramme/l15-zeige-summe.visustruct":sj,"../../lessons/diagramme/l16-countdown-loesung.visustruct":rj,"../../lessons/diagramme/l16-countdown-start.visustruct":oj,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":lj,"../../lessons/diagramme/l16-java-fehler-start.visustruct":uj,"../../lessons/diagramme/l16-java-laeuft-nicht-loesung.visustruct":mj,"../../lessons/diagramme/l16-java-laeuft-nicht-start.visustruct":cj,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":dj,"../../lessons/diagramme/l16-schreibtisch.visustruct":hj,"../../lessons/diagramme/l16-summe-loesung.visustruct":gj,"../../lessons/diagramme/l16-summe-start.visustruct":pj,"../../lessons/diagramme/l17-beispiel.visustruct":fj,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":bj,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":xj,"../../lessons/diagramme/l17-java-brief-start.visustruct":vj,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":yj,"../../lessons/diagramme/l17-java-fehler-start.visustruct":wj,"../../lessons/diagramme/l17-java-laeuft-nicht-loesung.visustruct":zj,"../../lessons/diagramme/l17-java-laeuft-nicht-start.visustruct":Ij,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":kj,"../../lessons/diagramme/l17-ticket-loesung.visustruct":Sj,"../../lessons/diagramme/l18-beispiel.visustruct":Tj,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":_j,"../../lessons/diagramme/l18-java-fehler-start.visustruct":jj,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":Cj,"../../lessons/diagramme/l18-js-loesung.visustruct":Aj,"../../lessons/diagramme/l18-python-loesung.visustruct":Pj,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":Dj,"../../lessons/diagramme/l19-java-fehler-start.visustruct":Bj,"../../lessons/diagramme/l19-java-laeuft-nicht-loesung.visustruct":Oj,"../../lessons/diagramme/l19-java-laeuft-nicht-start.visustruct":Mj,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":Zj,"../../lessons/diagramme/l2-ausgabe.visustruct":Lj,"../../lessons/diagramme/l2-hallo-loesung.visustruct":Wj,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":Ej,"../../lessons/diagramme/l20-countdown-loesung.visustruct":Nj,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":Fj,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":Rj,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":Jj,"../../lessons/diagramme/l23-java-nummern-start.visustruct":Gj,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":Hj,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":Vj,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":qj,"../../lessons/diagramme/l24-java-laengster-start.visustruct":Qj,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":Uj,"../../lessons/diagramme/l25-java-beste-start.visustruct":Yj,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":$j,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":Kj,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":Xj,"../../lessons/diagramme/l26-java-namen-start.visustruct":eC,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":tC,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":nC,"../../lessons/diagramme/l27-java-json-loesung.visustruct":iC,"../../lessons/diagramme/l27-java-json-start.visustruct":aC,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":sC,"../../lessons/diagramme/l27-java-saetze-start.visustruct":rC,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":oC,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":lC,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":uC,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":mC,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":cC,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":dC,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":hC,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":gC,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":pC,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":fC,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":bC,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":xC,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":vC,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":yC,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":wC,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":zC,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":IC,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":kC,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":SC,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":TC,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":_C,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":jC,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":CC,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":AC,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":PC,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":DC,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":BC,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":OC,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":MC,"../../lessons/diagramme/pt/dt-buffered.visustruct":ZC,"../../lessons/diagramme/pt/dt-csv.visustruct":LC,"../../lessons/diagramme/pt/dt-json.visustruct":WC,"../../lessons/diagramme/pt/dt-lesen.visustruct":EC,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":NC,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":FC,"../../lessons/diagramme/pt/kino-frei-start.visustruct":RC,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":JC,"../../lessons/diagramme/pt/kino-karte-start.visustruct":GC,"../../lessons/diagramme/pt/kino-saalplan.visustruct":HC,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":VC,"../../lessons/diagramme/pt/l04-gross-klein-loesung.visustruct":qC,"../../lessons/diagramme/pt/l04-gross-klein-start.visustruct":QC,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":UC,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":YC,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-loesung.visustruct":$C,"../../lessons/diagramme/pt/l04-java-laeuft-nicht-start.visustruct":KC,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":XC,"../../lessons/diagramme/pt/l04-rechnen.visustruct":eA,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":tA,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":nA,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":iA,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":aA,"../../lessons/diagramme/pt/l04-tauschen.visustruct":sA,"../../lessons/diagramme/pt/l05-datentypen.visustruct":rA,"../../lessons/diagramme/pt/l05-division.visustruct":oA,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":lA,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":uA,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":mA,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":cA,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-loesung.visustruct":dA,"../../lessons/diagramme/pt/l05-java-laeuft-nicht-start.visustruct":hA,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":gA,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":pA,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":fA,"../../lessons/diagramme/pt/l05-sequenz.visustruct":bA,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":xA,"../../lessons/diagramme/pt/l06-eva.visustruct":vA,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":yA,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":wA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-loesung.visustruct":zA,"../../lessons/diagramme/pt/l06-java-laeuft-nicht-start.visustruct":IA,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":kA,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":SA,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":TA,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":_A,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":jA,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":CA,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":AA,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":PA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-loesung.visustruct":DA,"../../lessons/diagramme/pt/l07-java-laeuft-nicht-start.visustruct":BA,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":OA,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":MA,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":ZA,"../../lessons/diagramme/pt/l07-rabatt.visustruct":LA,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":WA,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":EA,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":NA,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":FA,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-loesung.visustruct":RA,"../../lessons/diagramme/pt/l08-java-laeuft-nicht-start.visustruct":JA,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":GA,"../../lessons/diagramme/pt/l08-note.visustruct":HA,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":VA,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":qA,"../../lessons/diagramme/pt/l09-ampel.visustruct":QA,"../../lessons/diagramme/pt/l09-automat.visustruct":UA,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":YA,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":$A,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-loesung.visustruct":KA,"../../lessons/diagramme/pt/l09-java-laeuft-nicht-start.visustruct":XA,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":eP,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":tP,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":nP,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":iP,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":aP,"../../lessons/diagramme/pt/l1-sequenz.visustruct":sP,"../../lessons/diagramme/pt/l1-tee.visustruct":rP,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":oP,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":lP,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":uP,"../../lessons/diagramme/pt/l10-countdown.visustruct":mP,"../../lessons/diagramme/pt/l10-endlos.visustruct":cP,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":dP,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":hP,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":gP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-loesung.visustruct":pP,"../../lessons/diagramme/pt/l10-java-laeuft-nicht-start.visustruct":fP,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":bP,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":xP,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":vP,"../../lessons/diagramme/pt/l11-einmal.visustruct":yP,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":wP,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":zP,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":IP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-loesung.visustruct":kP,"../../lessons/diagramme/pt/l11-java-laeuft-nicht-start.visustruct":SP,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":TP,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":_P,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":jP,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":CP,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":AP,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":PP,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":DP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-loesung.visustruct":BP,"../../lessons/diagramme/pt/l12-java-laeuft-nicht-start.visustruct":OP,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":MP,"../../lessons/diagramme/pt/l12-summe.visustruct":ZP,"../../lessons/diagramme/pt/l13-dreieck.visustruct":LP,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":WP,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":EP,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":NP,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":FP,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-loesung.visustruct":RP,"../../lessons/diagramme/pt/l13-java-laeuft-nicht-start.visustruct":JP,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":GP,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":HP,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":VP,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":qP,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":QP,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":UP,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-loesung.visustruct":YP,"../../lessons/diagramme/pt/l14-java-laeuft-nicht-start.visustruct":$P,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":KP,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":XP,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":eD,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":tD,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":nD,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":iD,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":aD,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":sD,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":rD,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":oD,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":lD,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-loesung.visustruct":uD,"../../lessons/diagramme/pt/l15-java-laeuft-nicht-start.visustruct":mD,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":cD,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":dD,"../../lessons/diagramme/pt/l15-quadrat.visustruct":hD,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":gD,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":pD,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":fD,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":bD,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":xD,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":vD,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":yD,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":wD,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-loesung.visustruct":zD,"../../lessons/diagramme/pt/l16-java-laeuft-nicht-start.visustruct":ID,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":kD,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":SD,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":TD,"../../lessons/diagramme/pt/l16-summe-start.visustruct":_D,"../../lessons/diagramme/pt/l17-beispiel.visustruct":jD,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":CD,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":AD,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":PD,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":DD,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":BD,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-loesung.visustruct":OD,"../../lessons/diagramme/pt/l17-java-laeuft-nicht-start.visustruct":MD,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":ZD,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":LD,"../../lessons/diagramme/pt/l18-beispiel.visustruct":WD,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":ED,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":ND,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":FD,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":RD,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":JD,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":GD,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":HD,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-loesung.visustruct":VD,"../../lessons/diagramme/pt/l19-java-laeuft-nicht-start.visustruct":qD,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":QD,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":UD,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":YD,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":$D,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":KD,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":XD,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":eB,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":tB,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":nB,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":iB,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":aB,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":sB,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":rB,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":oB,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":lB,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":uB,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":mB,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":cB,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":dB,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":hB,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":gB,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":pB,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":fB,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":bB,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":xB,"../../lessons/diagramme/pt/sim-kino-start.visustruct":vB,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":yB,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":wB,"../../lessons/diagramme/pt/sim-tausch.visustruct":zB,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":IB,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":kB,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":SB,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":TB,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":_B,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":jB,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":CB,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":AB,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":PB,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":DB,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":BB,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":OB,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":MB,"../../lessons/diagramme/pt/zk-mehr.visustruct":ZB,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":LB,"../../lessons/diagramme/pt/zk-split.visustruct":WB,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":EB,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":NB,"../../lessons/diagramme/pt/zk-zeichen.visustruct":FB,"../../lessons/diagramme/sim-kino-loesung.visustruct":RB,"../../lessons/diagramme/sim-kino-start.visustruct":JB,"../../lessons/diagramme/sim-tausch-loesung.visustruct":GB,"../../lessons/diagramme/sim-tausch-start.visustruct":HB,"../../lessons/diagramme/sim-tausch.visustruct":VB,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":qB,"../../lessons/diagramme/ss-absteigend-start.visustruct":QB,"../../lessons/diagramme/ss-binaere-suche.visustruct":UB,"../../lessons/diagramme/ss-bubblesort.visustruct":YB,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":$B,"../../lessons/diagramme/ss-lineare-suche.visustruct":KB,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":XB,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":eO,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":tO,"../../lessons/diagramme/uebergabe-haupt.visustruct":nO,"../../lessons/diagramme/uebergabe-leeren.visustruct":iO,"../../lessons/diagramme/uebergabe-verdopple.visustruct":aO,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":sO,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":rO,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":oO,"../../lessons/diagramme/vb-ampel-loesung.visustruct":lO,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":uO,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":mO,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":cO,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":dO,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":hO,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":gO,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":pO,"../../lessons/diagramme/vb-do-while-loesung.visustruct":fO,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":bO,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":xO,"../../lessons/diagramme/vb-einparken-loesung.visustruct":vO,"../../lessons/diagramme/vb-erster-plan-loesung.visustruct":yO,"../../lessons/diagramme/vb-farben-loesung.visustruct":wO,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":zO,"../../lessons/diagramme/vb-fehler-04-sensoren-start.visustruct":IO,"../../lessons/diagramme/vb-fehler-05-bis-zur-wand-start.visustruct":kO,"../../lessons/diagramme/vb-fehler-05-erst-fahren-dann-pruefen-start.visustruct":SO,"../../lessons/diagramme/vb-fehler-06-abstand-start.visustruct":TO,"../../lessons/diagramme/vb-fehler-07-linie-start.visustruct":_O,"../../lessons/diagramme/vb-fehler-07-und-oder-start.visustruct":jO,"../../lessons/diagramme/vb-fehler-08-farben-start.visustruct":CO,"../../lessons/diagramme/vb-fehler-09-fallauswahl-mbot2-start.visustruct":AO,"../../lessons/diagramme/vb-fehler-10-tasten-joystick-start.visustruct":PO,"../../lessons/diagramme/vb-fehler-10-unterbrechen-mit-break-start.visustruct":DO,"../../lessons/diagramme/vb-fehler-11-licht-start.visustruct":BO,"../../lessons/diagramme/vb-fehler-12-lautstaerke-start.visustruct":OO,"../../lessons/diagramme/vb-fehler-13-neigung-start.visustruct":MO,"../../lessons/diagramme/vb-fehler-14-leds-start.visustruct":ZO,"../../lessons/diagramme/vb-fehler-15-einzelne-leds-start.visustruct":LO,"../../lessons/diagramme/vb-fehler-16-lautsprecher-start.visustruct":WO,"../../lessons/diagramme/vb-fehler-17-arrays-melodie-start.visustruct":EO,"../../lessons/diagramme/vb-fehler-18-bildschirm-start.visustruct":NO,"../../lessons/diagramme/vb-fehler-19-zeichenketten-start.visustruct":FO,"../../lessons/diagramme/vb-fehler-20-motoren-start.visustruct":RO,"../../lessons/diagramme/vb-fehler-21-stoppuhr-akku-start.visustruct":JO,"../../lessons/diagramme/vb-fehler-22-eigene-methoden-start.visustruct":GO,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":HO,"../../lessons/diagramme/vb-gerade-loesung.visustruct":VO,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":qO,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":QO,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":UO,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":YO,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":$O,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":KO,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":XO,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":eM,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":tM,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":nM,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":iM,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":aM,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":sM,"../../lessons/diagramme/vb-java-rechteck-umdrehungen-loesung.visustruct":rM,"../../lessons/diagramme/vb-java-schritte-zaehlen-loesung.visustruct":oM,"../../lessons/diagramme/vb-java-sicher-fahren-loesung.visustruct":lM,"../../lessons/diagramme/vb-java-taste-stopp-loesung.visustruct":uM,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":mM,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":cM,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":dM,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":hM,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":gM,"../../lessons/diagramme/vb-l00-bausteine-loesung.visustruct":pM,"../../lessons/diagramme/vb-l00-sequenz-loesung.visustruct":fM,"../../lessons/diagramme/vb-l03-wachsend-loesung.visustruct":bM,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":xM,"../../lessons/diagramme/vb-laufschrift-loesung.visustruct":vM,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":yM,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":wM,"../../lessons/diagramme/vb-melodie-loesung.visustruct":zM,"../../lessons/diagramme/vb-messreihe-loesung.visustruct":IM,"../../lessons/diagramme/vb-morsen-loesung.visustruct":kM,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":SM,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":TM,"../../lessons/diagramme/vb-notbremse-loesung.visustruct":_M,"../../lessons/diagramme/vb-oder-loesung.visustruct":jM,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":CM,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":AM,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":PM,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":DM,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":BM,"../../lessons/diagramme/vb-rand-loesung.visustruct":OM,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":MM,"../../lessons/diagramme/vb-slalom-loesung.visustruct":ZM,"../../lessons/diagramme/vb-spirale-falsch-loesung.visustruct":LM,"../../lessons/diagramme/vb-spirale-falsch-start.visustruct":WM,"../../lessons/diagramme/vb-spirale-loesung.visustruct":EM,"../../lessons/diagramme/vb-start-a-loesung.visustruct":NM,"../../lessons/diagramme/vb-startsignal-loesung.visustruct":FM,"../../lessons/diagramme/vb-strecke-anzeigen-loesung.visustruct":RM,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":JM,"../../lessons/diagramme/vb-treppe-loesung.visustruct":GM,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":HM,"../../lessons/diagramme/vb-ueberladung-umdrehung-loesung.visustruct":VM,"../../lessons/diagramme/vb-und-loesung.visustruct":qM,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":QM,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":UM,"../../lessons/diagramme/vb-wald-loesung.visustruct":YM,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":$M,"../../lessons/diagramme/vb-zentimeter-loesung.visustruct":KM,"../../lessons/diagramme/vb-zentimeter-unterprogramm-loesung.visustruct":XM,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":eZ,"../../lessons/diagramme/zk-initialen-loesung.visustruct":tZ,"../../lessons/diagramme/zk-mehr.visustruct":nZ,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":iZ,"../../lessons/diagramme/zk-split.visustruct":aZ,"../../lessons/diagramme/zk-woerter-loesung.visustruct":sZ,"../../lessons/diagramme/zk-zaehlen.visustruct":rZ,"../../lessons/diagramme/zk-zeichen.visustruct":oZ}),TE=Object.assign({"../../lessons/welten/ausgang-1.txt":lZ,"../../lessons/welten/ausgang-2.txt":uZ,"../../lessons/welten/ecke.txt":mZ,"../../lessons/welten/farbe-1.txt":cZ,"../../lessons/welten/farbe-2.txt":dZ,"../../lessons/welten/farbe-3.txt":hZ,"../../lessons/welten/farbe-4.txt":gZ,"../../lessons/welten/hindernis-1.txt":pZ,"../../lessons/welten/hindernis-2.txt":fZ,"../../lessons/welten/labyrinth-1.txt":bZ,"../../lessons/welten/labyrinth-2.txt":xZ,"../../lessons/welten/linie-1.txt":vZ,"../../lessons/welten/linie-2.txt":yZ,"../../lessons/welten/linie-rot-1.txt":wZ,"../../lessons/welten/linie-rot-2.txt":zZ,"../../lessons/welten/parken-1.txt":IZ,"../../lessons/welten/parken-2.txt":kZ,"../../lessons/welten/rand-1.txt":SZ,"../../lessons/welten/rand-2.txt":TZ,"../../lessons/welten/slalom.txt":_Z,"../../lessons/welten/tunnel-1.txt":jZ,"../../lessons/welten/tunnel-2.txt":CZ,"../../lessons/welten/wald-1.txt":AZ,"../../lessons/welten/wald-2.txt":PZ,"../../lessons/welten/wand-frei.txt":DZ,"../../lessons/welten/wand-kurz.txt":BZ,"../../lessons/welten/wand-lang.txt":OZ,"../../lessons/welten/wand-mittel.txt":MZ,"../../lessons/welten/wand-nah.txt":ZZ,"../../lessons/welten/zeit-1.txt":LZ,"../../lessons/welten/ziel-kurz.txt":WZ,"../../lessons/welten/ziel-lang.txt":EZ}),_E=Object.assign({"../../lessons/bilder/ada-lovelace.jpg":NZ,"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":FZ,"../../lessons/bilder/ben-shneiderman.jpg":RZ,"../../lessons/bilder/caesar-ascii.svg":JZ,"../../lessons/bilder/caesar-scheibe.svg":GZ,"../../lessons/bilder/caesar-verschiebung.svg":HZ,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":VZ,"../../lessons/bilder/en/kino-saal.svg":qZ,"../../lessons/bilder/en/kino-schleifen.svg":QZ,"../../lessons/bilder/en/l01-pap.svg":UZ,"../../lessons/bilder/en/l02-einfuegen.svg":YZ,"../../lessons/bilder/en/l03-lochkarte-beschriftet.svg":$Z,"../../lessons/bilder/en/l03-lochkarte.svg":KZ,"../../lessons/bilder/en/l04-camelcase.svg":XZ,"../../lessons/bilder/en/l04-variable.svg":eL,"../../lessons/bilder/en/l04-zuweisung.svg":tL,"../../lessons/bilder/en/l05-tauschen.svg":nL,"../../lessons/bilder/en/l08-zahlenstrahl.svg":iL,"../../lessons/bilder/en/l10-kopfgesteuert.svg":aL,"../../lessons/bilder/en/l11-vergleich.svg":sL,"../../lessons/bilder/en/l12-for-ablauf.svg":rL,"../../lessons/bilder/en/l12-while-zu-for.svg":oL,"../../lessons/bilder/en/l13-verschachtelt-tabelle.svg":lL,"../../lessons/bilder/en/l14-array.svg":uL,"../../lessons/bilder/en/l20-cpp.svg":mL,"../../lessons/bilder/en/l20-jvm.svg":cL,"../../lessons/bilder/en/mvc-klick.svg":dL,"../../lessons/bilder/en/ss-binaere-suche.svg":hL,"../../lessons/bilder/en/ss-bubblesort.svg":gL,"../../lessons/bilder/en/ss-lineare-suche.svg":pL,"../../lessons/bilder/en/ss-vergleiche.svg":fL,"../../lessons/bilder/en/uebergabe.svg":bL,"../../lessons/bilder/en/zk-zeichen.svg":xL,"../../lessons/bilder/grace-hopper.jpg":vL,"../../lessons/bilder/hedy-lamarr.jpg":yL,"../../lessons/bilder/ike-nassi.jpg":wL,"../../lessons/bilder/katherine-johnson.jpg":zL,"../../lessons/bilder/kino-saal.svg":IL,"../../lessons/bilder/kino-schleifen.svg":kL,"../../lessons/bilder/l01-pap.svg":SL,"../../lessons/bilder/l02-einfuegen.svg":TL,"../../lessons/bilder/l03-lochkarte-beschriftet.svg":_L,"../../lessons/bilder/l03-lochkarte.svg":jL,"../../lessons/bilder/l03-zuse-lochstreifen.svg":CL,"../../lessons/bilder/l04-camelcase.svg":AL,"../../lessons/bilder/l04-variable.svg":PL,"../../lessons/bilder/l04-zuweisung.svg":DL,"../../lessons/bilder/l05-tauschen.svg":BL,"../../lessons/bilder/l07-schreibtischtest-de.svg":OL,"../../lessons/bilder/l07-schreibtischtest-en.svg":ML,"../../lessons/bilder/l07-schreibtischtest-pt.svg":ZL,"../../lessons/bilder/l08-zahlenstrahl.svg":LL,"../../lessons/bilder/l09-wahrheitstabelle.svg":WL,"../../lessons/bilder/l10-kopfgesteuert.svg":EL,"../../lessons/bilder/l11-vergleich.svg":NL,"../../lessons/bilder/l12-for-ablauf.svg":FL,"../../lessons/bilder/l12-while-zu-for.svg":RL,"../../lessons/bilder/l13-verschachtelt-tabelle.svg":JL,"../../lessons/bilder/l14-array.svg":GL,"../../lessons/bilder/l20-cpp.svg":HL,"../../lessons/bilder/l20-jvm.svg":VL,"../../lessons/bilder/margaret-hamilton.jpg":qL,"../../lessons/bilder/mvc-klick.svg":QL,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":UL,"../../lessons/bilder/pt/kino-saal.svg":YL,"../../lessons/bilder/pt/kino-schleifen.svg":$L,"../../lessons/bilder/pt/l01-pap.svg":KL,"../../lessons/bilder/pt/l02-einfuegen.svg":XL,"../../lessons/bilder/pt/l03-lochkarte-beschriftet.svg":eW,"../../lessons/bilder/pt/l03-lochkarte.svg":tW,"../../lessons/bilder/pt/l04-camelcase.svg":nW,"../../lessons/bilder/pt/l04-variable.svg":iW,"../../lessons/bilder/pt/l04-zuweisung.svg":aW,"../../lessons/bilder/pt/l05-tauschen.svg":sW,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":rW,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":oW,"../../lessons/bilder/pt/l11-vergleich.svg":lW,"../../lessons/bilder/pt/l12-for-ablauf.svg":uW,"../../lessons/bilder/pt/l12-while-zu-for.svg":mW,"../../lessons/bilder/pt/l13-verschachtelt-tabelle.svg":cW,"../../lessons/bilder/pt/l14-array.svg":dW,"../../lessons/bilder/pt/l20-cpp.svg":hW,"../../lessons/bilder/pt/l20-jvm.svg":gW,"../../lessons/bilder/pt/mvc-klick.svg":pW,"../../lessons/bilder/pt/schiffe-versenken.svg":fW,"../../lessons/bilder/pt/ss-binaere-suche.svg":bW,"../../lessons/bilder/pt/ss-bubblesort.svg":xW,"../../lessons/bilder/pt/ss-lineare-suche.svg":vW,"../../lessons/bilder/pt/ss-vergleiche.svg":yW,"../../lessons/bilder/pt/uebergabe.svg":wW,"../../lessons/bilder/pt/zk-zeichen.svg":zW,"../../lessons/bilder/schiffe-versenken.svg":IW,"../../lessons/bilder/ss-binaere-suche.svg":kW,"../../lessons/bilder/ss-bubblesort.svg":SW,"../../lessons/bilder/ss-lineare-suche.svg":TW,"../../lessons/bilder/ss-vergleiche.svg":_W,"../../lessons/bilder/uebergabe.svg":jW,"../../lessons/bilder/zk-zeichen.svg":CW}),Zg=i=>i.replace(/^.*\//,"");function ti(i,e,t){const n=s=>new Map(Object.entries(i).filter(([r])=>{var o;return((o=e.exec(r))==null?void 0:o[1])===s}).map(([r,o])=>[Zg(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function bm(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let P1="en",zt=[],Pn=[],Xa="",es=[],Ds="off";function xm(i){i!==Ds&&(Ds=i,zt=[],Bs(P1))}function Bs(i){var s,r,o;if(sb(i),i===P1&&zt.length>0)return;P1=i;const e=ti(zE,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>yE(ym(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=wE(ym(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=ti(IE,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(Ds==="on"){const l=ti(fm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=vm(l);zt=t(l,u.renumber).map(c=>({...c,number:u.number.get(c.id),robot:!0})).sort((c,d)=>c.number-d.number);const m=ti(kE,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Pn=n(m,"visubot/aufgaben/",u.renumber).map(c=>({...c,robot:!0}))}else{const l=e.filter(([m])=>/^\d+/.test(m)),u=vm(l);zt=t(l,u.renumber).map(m=>({...m,number:u.number.get(m.id)})).sort((m,c)=>m.number-c.number),Pn=n(a,"aufgaben/",u.renumber)}Pn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...zt.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...Pn.flatMap(u=>u.blocks)])l.kind==="textFile"&&pb(l.name,l.content);if(Xa=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",Ds!=="off"){const l=(r=ti(fm,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Xa=`${Xa.trimEnd()} -${l}`)}es=TW(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}function kE(i){const e=i.map(([a])=>a).filter(a=>/^\d+/.test(a)).sort((a,s)=>Number(/^\d+/.exec(a)[0])-Number(/^\d+/.exec(s)[0])||a.localeCompare(s)),t=new Map,n=new Map;return e.forEach((a,s)=>{t.set(a.replace(/\.md$/,""),s+1);const r=Number(/^\d+/.exec(a)[0]);n.has(r)||n.set(r,s+1)}),{number:t,renumber:n}}function vm(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}Bs("en");function Zg(i,e){return P1==="de"?i.get(e)??i.get(`en/${e}`):(P1==="en"?void 0:i.get(`${P1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Lg=(i,e)=>i.slice(i.indexOf(e)+e.length),SE=new Map(Object.entries(wE).map(([i,e])=>[Lg(i,"/diagramme/"),e]));function di(i){const e=Zg(SE,i);return e===void 0?void 0:n0(e)}const TE=new Map(Object.entries(IE).map(([i,e])=>[Lg(i,"/bilder/"),e]));function va(i){return Zg(TE,i)}const _E=new Map(Object.entries(zE).map(([i,e])=>[Mg(i).replace(/\.txt$/,""),e])),ym=new Map;function ts(i){const e=_E.get(i);if(e===void 0)return;let t=ym.get(i);return t||ym.set(i,t=hg(e)),t}const Wg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function je(i){const e=[];let t=Wg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^\?(visustruct|visubot)(&lektion=[\w-]+)?$/.test(s),o=r||/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",l=r||/^https?:/.test(o)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function jn(i){const e=[],t=i.replace(/\r\n/g,` +${l}`)}es=AW(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}function vm(i){const e=i.map(([a])=>a).filter(a=>/^\d+/.test(a)).sort((a,s)=>Number(/^\d+/.exec(a)[0])-Number(/^\d+/.exec(s)[0])||a.localeCompare(s)),t=new Map,n=new Map;return e.forEach((a,s)=>{t.set(a.replace(/\.md$/,""),s+1);const r=Number(/^\d+/.exec(a)[0]);n.has(r)||n.set(r,s+1)}),{number:t,renumber:n}}function ym(i,e){return e?i.replace(/\b(Lektion(?:en)?|Lessons?|Li[cç](?:ão|ões))(\s+\d+(?:\s*(?:,|bis|und|and|to|a|e|–|-)\s*\d+)*)/gi,(t,n,a)=>n+a.replace(/\d+/g,s=>String(e.get(Number(s))??s))):i}Bs("en");function Lg(i,e){return P1==="de"?i.get(e)??i.get(`en/${e}`):(P1==="en"?void 0:i.get(`${P1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Wg=(i,e)=>i.slice(i.indexOf(e)+e.length),jE=new Map(Object.entries(SE).map(([i,e])=>[Wg(i,"/diagramme/"),e]));function di(i){const e=Lg(jE,i);return e===void 0?void 0:n0(e)}const CE=new Map(Object.entries(_E).map(([i,e])=>[Wg(i,"/bilder/"),e]));function va(i){return Lg(CE,i)}const AE=new Map(Object.entries(TE).map(([i,e])=>[Zg(i).replace(/\.txt$/,""),e])),wm=new Map;function ts(i){const e=AE.get(i);if(e===void 0)return;let t=wm.get(i);return t||wm.set(i,t=gg(e)),t}const Eg=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function je(i){const e=[];let t=Eg(i).replace(/`([^`]+)`/g,(n,a)=>(e.push(a),`\0${e.length-1}\0`));return t=t.replace(/\*\*(.+?)\*\*/g,"$1").replace(/(^|[^*])\*([^*\s][^*]*?)\*/g,"$1$2").replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(n,a,s)=>{const r=/^\?(visustruct|visubot)(&lektion=[\w-]+)?$/.test(s),o=r||/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",l=r||/^https?:/.test(o)?' target="_blank" rel="noopener noreferrer"':"";return`${a}`}).replace(/\[([^\]]+)\]\{\.(blau|orange|gruen|gelb|rosa)\}/g,'$1').replace(/\[([^\]]+)\]\{(?:teil|part)=([\w,]+)\}/g,'$1'),t.replace(/\u0000(\d+)\u0000/g,(n,a)=>`${e[Number(a)]}`)}function jn(i){const e=[],t=i.replace(/\r\n/g,` `).split(` -`);let n=0;for(;n${Wg(c.join(` +`);let n=0;for(;n${Eg(c.join(` `))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length,l=/\s*\{\.([a-z][a-z-]*)\}$/.exec(s[2]),u=l?s[2].slice(0,l.index):s[2];e.push(`${je(u)}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${je(u)}`)}e.push(o?`
    ${l.join("")}
`:`
    ${l.join("")}
`);continue}if(a.startsWith("|")&&/^\|?[\s:|-]*-{3,}[\s:|-]*$/.test(t[n+1]??"")){const o=m=>m.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(c=>je(c.trim())),l=o(a);n+=2;const u=[];for(;n${l.map(m=>``).join("")}${u.map(m=>`${m.map(c=>``).join("")}`).join("")}
${m}
${c}
`);continue}if(a.startsWith(">")){const o=[];for(;n");)o.push(t[n++].replace(/^>\s?/,""));e.push(``);continue}const r=[];for(;n|\||\s*([-*]|\d+\.)\s+)/.test(t[n]);)r.push(t[n++].trim());e.push(`

${je(r.join(" "))}

`)}return e.join(` -`)}const x1=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,el="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",k0="visustruct.learn.teacher";let S0=!1;function wm(){if(S0)return!0;try{return localStorage.getItem(k0)===el}catch{return!1}}async function jE(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function CE(i){let e=!1;try{e=await jE(i.trim())===el}catch{return!1}if(e){S0=!0;try{localStorage.setItem(k0,el)}catch{}}return e}function AE(){S0=!1;try{localStorage.removeItem(k0)}catch{}}function Eg(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` +`)}const x1=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,el="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",k0="visustruct.learn.teacher";let S0=!1;function zm(){if(S0)return!0;try{return localStorage.getItem(k0)===el}catch{return!1}}async function PE(i){const e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(i));return[...new Uint8Array(e)].map(t=>t.toString(16).padStart(2,"0")).join("")}async function DE(i){let e=!1;try{e=await PE(i.trim())===el}catch{return!1}if(e){S0=!0;try{localStorage.setItem(k0,el)}catch{}}return e}function BE(){S0=!1;try{localStorage.removeItem(k0)}catch{}}function Ng(i,e,t=!1){const n=document.createElement("figure");n.className=t?"learn-file written":"learn-file";const a=document.createElement("figcaption"),s=document.createElement("span");s.className="learn-file-icon",s.setAttribute("aria-hidden","true"),s.textContent="📄",a.append(s,t?p("web_sim_written_file_fmt",i):i);const r=document.createElement("pre");return r.className="learn-file-text",r.dir="ltr",e.replace(/\n$/,"").split(` `).forEach((l,u)=>{const m=document.createElement("span");m.className="ln",m.textContent=String(u+1),r.append(m,l+` -`)}),n.append(a,r),n}function Ng(i){return[...i].map(([e,t])=>Eg(e,t,!0))}function i1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Oe=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),zm=["0.2","0.5","1.0","1.5","2.0"],PE=i=>Number(i).toLocaleString(o1()==="java"?"en":o1(),{minimumFractionDigits:1}),Nr="visustruct.simulation.stepDelay",Im="visustruct.simulation.highlightMode";function Fr(i){try{return localStorage.getItem(i)}catch{return null}}function km(i,e){try{localStorage.setItem(i,e)}catch{}}class DE{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",zm.includes(Fr(Nr)??"")?Fr(Nr):"0.5");y(this,"highlightMode",Fr(Im)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Bi(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,rb(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Bi(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=` +`)}),n.append(a,r),n}function Fg(i){return[...i].map(([e,t])=>Ng(e,t,!0))}function i1(i){switch(i.kind){case"finished":return p("sim_notice_finished");case"infiniteLoopWithoutBody":return p("sim_notice_infinite_loop_empty");case"unsupportedStatement":return p("sim_notice_unsupported_statement_fmt",i.text);case"invalidExpression":return p("sim_notice_invalid_expression_fmt",i.text);case"unknownVariable":return i.similar?p("web_sim_unknown_variable_case_fmt",i.text,i.similar):p("sim_notice_unknown_variable_fmt",i.text);case"divisionByZero":return p("sim_notice_division_by_zero");case"wholeNumberExpected":return p("sim_notice_whole_number_expected");case"numberExpected":return p("sim_notice_number_expected");case"booleanExpected":return p("sim_notice_boolean_expected");case"subprogramNotFound":return p("sim_notice_subprogram_not_found_fmt",i.text);case"callTooDeep":return p("sim_notice_call_too_deep");case"callArguments":return p("web_sim_call_arguments_fmt",i.text);case"missingReturn":return p("web_sim_missing_return_fmt",i.text);case"fileNotFound":return p("web_sim_file_not_found_fmt",i.text);case"endOfFile":return p("web_sim_end_of_file_fmt",i.text);case"nullValue":return p("web_sim_null_value_fmt",i.text);case"other":return i.text}}const Oe=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),Im=["0.2","0.5","1.0","1.5","2.0"],OE=i=>Number(i).toLocaleString(o1()==="java"?"en":o1(),{minimumFractionDigits:1}),Nr="visustruct.simulation.stepDelay",km="visustruct.simulation.highlightMode";function Fr(i){try{return localStorage.getItem(i)}catch{return null}}function Sm(i,e){try{localStorage.setItem(i,e)}catch{}}class ME{constructor(e,t,n=()=>{},a=()=>{},s=()=>{}){y(this,"element");y(this,"engine");y(this,"isPlaying",!1);y(this,"playTimer");y(this,"wasPlayingBeforeInput",!1);y(this,"delay",Im.includes(Fr(Nr)??"")?Fr(Nr):"0.5");y(this,"highlightMode",Fr(km)==="nextToExecute"?"nextToExecute":"lastExecuted");y(this,"buttons");y(this,"inputSection");y(this,"trace");y(this,"variables");y(this,"output");y(this,"transcript",[]);y(this,"printed",0);y(this,"notice");y(this,"editButton");y(this,"robot");y(this,"liveBusy",!1);this.currentDocument=e,this.onHighlight=t,this.findSubprogram=n,this.onEdit=a,this.onTranscript=s,this.engine=new Bi(e(),n),this.element=document.createElement("aside"),this.element.className="simpanel",this.build()}setRobot(e){var t;this.robot!==e&&((t=this.robot)==null||t.element.remove(),this.robot=e,e&&(this.element.querySelector("section").after(e.element),e.onWorldChange=()=>this.restartEngine(),e.reset()))}showRobot(){var e;(e=this.robot)==null||e.show()}begin(){this.pause(),this.restartEngine(),this.showRobot()}end(){this.pause()}step(){var n,a,s;if((n=this.robot)!=null&&n.live){this.stepLive();return}if(!this.engine.canStep){this.pause();return}const e=this.isPlaying,t=this.engine.currentStepPath;(a=this.robot)==null||a.prepare(this.engine),this.engine.step(),(s=this.robot)==null||s.follow(this.engine.state.robotActions,e?Number(this.delay)*850:450),this.afterStep(e,t)}async stepLive(){if(this.liveBusy)return;if(!this.engine.canStep){this.pause();return}this.liveBusy=!0;const e=this.robot,t=this.isPlaying,n=this.engine.currentStepPath;try{await e.prepareLive(this.engine,ob(JSON.stringify(this.currentDocument()))),this.engine.step(),e.follow(this.engine.state.robotActions,450),await e.drive(this.engine.state.robotActions)}catch(a){e.liveFailed(a),this.isPlaying=!1}finally{this.liveBusy=!1}this.afterStep(t,n)}afterStep(e,t){this.collectOutput(),this.highlightMode==="nextToExecute"&&this.engine.canStep?this.onHighlight(this.engine.currentStepPath):this.onHighlight(t??this.engine.currentStepPath),this.engine.state.inputRequest&&e&&(this.wasPlayingBeforeInput=!0),this.engine.canStep||this.pause(),this.update()}reset(){this.pause(),this.restartEngine()}play(){if(this.isPlaying||!this.engine.canStep)return;this.isPlaying=!0;const e=async()=>{var t;this.playTimer=void 0,this.isPlaying&&((t=this.robot)!=null&&t.live?await this.stepLive():this.step(),this.isPlaying&&this.engine.canStep?this.playTimer=window.setTimeout(()=>void e(),Number(this.delay)*1e3):(this.isPlaying=!1,this.update()))};e()}pause(){this.playTimer!==void 0&&window.clearTimeout(this.playTimer),this.playTimer=void 0,this.isPlaying=!1,this.update()}submitInput(e){var s,r;const t=this.isPlaying||this.wasPlayingBeforeInput;this.pause();const n=((s=this.engine.state.inputRequest)==null?void 0:s.prompt)??"",a=(r=this.engine.state.inputRequest)==null?void 0:r.continuesLine;if(this.engine.provideInput(e.value),!this.engine.state.inputRequest){const o=this.transcript[this.transcript.length-1];a&&o&&o.typed===void 0?o.typed=e.value:this.transcript.push({text:n?`${n} `:"",typed:e.value}),e.value=""}this.onHighlight(this.engine.currentStepPath),t&&this.engine.canStep&&(this.wasPlayingBeforeInput=!1,this.play()),this.update()}restartEngine(){var e;this.engine=new Bi(this.currentDocument(),this.findSubprogram),this.transcript=[],this.printed=0,this.wasPlayingBeforeInput=!1,(e=this.robot)==null||e.reset(),this.onHighlight(this.engine.currentStepPath),this.update()}build(){this.element.innerHTML=`

${Oe(p("simulation_controls"))}

@@ -76659,7 +76866,7 @@ ${l}`)}es=TW(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}funct

@@ -76668,23 +76875,23 @@ ${l}`)}es=TW(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}funct

${Oe(p("simulation_trace"))}

${Oe(p("simulation_variables"))}

${Oe(p("simulation_output"))}

- `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,km(Im,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,km(Nr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Oe(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Fg(u)):m.textContent=_e(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Oe(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...Ng(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Oe(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?i1(r):"",o.hidden=!r}}function Fg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const T1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Vn=360/T1.length,BE="http://www.w3.org/2000/svg";function Re(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function vt(i,e={},t){const n=document.createElementNS(BE,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function OE(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function Sm(i,e){const t=vt("g",{class:e}),n=T1.map((a,s)=>{const r=vt("g",{transform:`rotate(${s*Vn})`});return r.append(vt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function ME(i,e){let t=i,n=!1,a=-t*Vn;const s=Re("section",{class:"learn-game learn-caesar"});s.append(Re("div",{class:"learn-game-head"},Re("strong",{},p("web_learn_caesar_title")))),s.append(Re("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=vt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(vt("circle",{r:196,class:"outer-disc"})),r.append(vt("path",{d:ZE(196,92,Vn/2),class:"window"}));const o=Sm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((L,F)=>L.classList.toggle("marked",F===C)),u.cells.forEach((L,F)=>L.classList.toggle("marked",C!==void 0&&F===(C+t)%26))},k=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),x.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),b.classList.toggle("active",n),z.textContent=OE(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(F=>T1.includes(F));if(C===void 0)return S();const L=T1.indexOf(C);S(n?(L-t+26)%26:L)},P=C=>{t=(C%26+26)%26,a=-t*Vn,k()};c.addEventListener("click",()=>P(t-1)),d.addEventListener("click",()=>P(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,k()}),b.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,k()}),v.addEventListener("input",k),o.cells.forEach((C,L)=>C.addEventListener("click",()=>S(L)));let D;const A=C=>{const L=r.getBoundingClientRect();return Math.atan2(C.clientY-(L.top+L.height/2),C.clientX-(L.left+L.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const L=C;D=A(L)-a,l.classList.add("dragging"),r.setPointerCapture(L.pointerId),L.preventDefault()}),r.addEventListener("pointermove",C=>{if(D===void 0)return;a=A(C)-D,l.setAttribute("transform",`rotate(${a})`);const L=Math.round(-a/Vn);if((L%26+26)%26!==t){t=(L%26+26)%26;const F=a;k(),a=F,l.setAttribute("transform",`rotate(${a})`)}});const B=()=>{D!==void 0&&(D=void 0,l.classList.remove("dragging"),P(t))};return r.addEventListener("pointerup",B),r.addEventListener("pointercancel",B),k(),s}function ZE(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const T0=i=>p(`web_visubot_part_${i}`),Rg=new WeakMap;function Jg(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=T0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=ee(async()=>{const{Robot3D:c}=await import("./robot3d-K0yfmoba.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const b=s.getBoundingClientRect();o(f,g.clientX-b.left,g.clientY-b.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const b=s.getBoundingClientRect();o(f,g.clientX-b.left,g.clientY-b.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return Rg.set(a,m),m}function LE(i,e,t=!1){return Jg(i,e,t).box}function WE(i){const e=i.querySelector(".visubot-model"),t=e&&Rg.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(T0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function EE(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=jn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Jg([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",T0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=$("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=$("div",{class:"learn-bomb-fuse"},$("span",{})),I=$("span",{class:"learn-bomb-time"}),S=$("div",{class:"learn-bomb","aria-live":"polite"},$("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),k=$("div",{class:"learn-game-feedback",role:"status"}),P=v.wrongPart!==void 0,D=[],A=v.code.split(` -`).map((X,he)=>{if(!P){const M=$("button",{class:"ln",type:"button"},X||" ");return M.disabled=!X.trim(),D.push({button:M,line:he+1,right:he+1===v.wrongLine}),M}const ae=$("div",{class:"ln parts"});X.trim()||ae.append(" ");for(const M of pg(X)){if(!M.part){ae.append(M.text);continue}const j=$("button",{class:"part",type:"button"},M.text);D.push({button:j,line:he+1,right:he+1===v.wrongLine&&M.text===v.wrongPart}),ae.append(j)}return ae});for(const X of D)X.button.addEventListener("click",()=>F(X.right?"right":X.line===v.wrongLine?"part":"wrong",X.button));const B=$("div",{class:`learn-game-code learn-bomb-code mono${P?" by-parts":""}`,dir:"ltr"},...A),C=Date.now(),L=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const X=Math.max(0,w-(Date.now()-C)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(X)),z.firstChild.style.width=`${X/w*100}%`,S.classList.toggle("hurry",X<=5),X<=0&&F("time")},F=(X,he)=>{m();for(const j of D)j.button.disabled=!0,j.right&&j.button.classList.add("right");P&&A[v.wrongLine-1].classList.add("right"),he&&X!=="right"&&he.classList.add("wrong");const ae=X==="right";ae&&l++,c(),S.classList.add(ae?"defused":"boom"),S.firstChild.textContent=ae?"✂️":"💥",k.className=`learn-game-feedback ${ae?"right":"wrong"}`;const M=d();k.replaceChildren($("p",{},p(ae?"web_game_defused":X==="time"?"web_game_boom_time":X==="part"?"web_game_boom_part":P?"web_game_boom_wrong_part":"web_game_boom_wrong")),Gn("div",{class:"learn-game-explain"},v.explanation),$("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,$("code",{},v.fix.trim())),M),M.focus({preventScroll:!0})},Y=Gn("p",{class:"learn-game-question"},v.question);P&&Y.append(" ",$("span",{class:"learn-bomb-hint"},p("web_game_bomb_parts_hint"))),s.replaceChildren(S,Y,B,k),L();const ne=window.setInterval(L,200);u.push(ne)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(_m(v.code).element),w.push(Gn("p",{class:"learn-game-question"},v.question),$("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=$("div",{class:"learn-game-options learn-order"}),I=$("div",{class:"learn-game-feedback",role:"status"});let S=0;const k=FE(v.options.length).map(D=>{const A=$("span",{class:"learn-order-badge","aria-hidden":"true"}),B=$("span",{});B.innerHTML=je(v.options[D].text);const C=$("button",{},A,B);return C.addEventListener("click",()=>{if(D!==S)return C.classList.add("wrong"),P(!1);C.classList.add("right"),A.textContent=String(++S),C.disabled=!0,S===v.options.length&&P(!0)}),z.append(C),{k:D,b:C,badge:A}}),P=D=>{for(const{k:B,b:C,badge:L}of[...k].sort((F,Y)=>F.k-Y.k))C.disabled=!0,L.textContent=String(B+1),z.append(C);D&&l++,c(),I.className=`learn-game-feedback ${D?"right":"wrong"}`;const A=d();I.replaceChildren($("p",{},p(D?"web_game_right":"web_game_wrong_short")),Gn("div",{class:"learn-game-explain"},v.explanation),A),A.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=_m(v.code),z=[];let I;i.kind==="zuhoerer"?(I=RE(bg(v.code),w),z.push($("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push($("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((A,B)=>[...B?[" → "]:[],$("code",{},A)])))):v.code.trim()&&z.push(w.element),z.push(Gn("p",{class:"learn-game-question"},v.question));const S=$("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),k=$("div",{class:"learn-game-feedback",role:"status"}),P=v.options.map(A=>{const B=$("button",{});return i.kind==="layout"?B.append(GE(A.text)):A.text.includes(` -`)?B.append(JE(A.text)):B.innerHTML=je(A.text),B.addEventListener("click",()=>D(A.right,B)),S.append(B),B}),D=(A,B)=>{P.forEach((L,F)=>{L.disabled=!0,v.options[F].right&&L.classList.add("right")}),A||B.classList.add("wrong"),A&&l++,c(),k.className=`learn-game-feedback ${A?"right":"wrong"}`;const C=d();k.replaceChildren($("p",{},p(A?"web_game_right":"web_game_wrong_short")),Gn("div",{class:"learn-game-explain"},v.explanation)),k.append(C),I&&(u=I.replay(v.clicks,()=>C.before($("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,S,k)},b=()=>{m(),a.textContent="";const v=$("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren($("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),$("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},x=$("button",{class:"primary"},p("web_game_start"));return x.addEventListener("click",f),s.append(Gn("p",{},i.intro),x),t}function FE(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function _m(i){const e=i.split(` -`).map(n=>$("div",{class:"ln"},n||" "));return{element:$("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function RE(i,e){const t=xg(i),n=$("div",{class:"learn-swing-window",dir:"ltr"});n.append($("div",{class:"learn-swing-title"},i.title||" "));const a=$("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=$("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=$("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=$("p",{class:"learn-swing-event",role:"status"}),l=$("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,b]of Object.entries(c.texts)){const x=s.get(f);x&&x.textContent!==b&&(x.textContent=b,x.classList.remove("changed"),x.offsetWidth,x.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} -`).join(""))},m=c=>u(vg(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*Tm));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(yg(i,t,g.name)))}),d()},(c.length+.3)*Tm)),h}}}function JE(i){return $("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function GE(i){const e=fg(i),t=$("div",{class:"learn-layout-window",dir:"ltr"},$("div",{class:"learn-layout-title"})),n=$("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>$("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function G(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function an(i,e,t){const n=G(i,e);return n.innerHTML=je(t),n}function jm(i){return G("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` -`).map(e=>G("div",{class:"ln"},e||" ")))}function HE(i,e){const t=G("section",{class:"learn-game learn-rescue"}),n=G("div",{class:"learn-game-head"});n.append(G("img",{src:e,alt:"",width:"40",height:"40"}),G("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>G("span",{class:"learn-rescue-dot"})),r=G("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=G("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",G("span",{class:"learn-rescue-zora"},"🐐"),G("span",{class:"learn-rescue-fox"},"🦊")),l=G("span",{class:"learn-rescue-free"},"🐐"),u=G("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=G("p",{class:"learn-game-status"}),c=G("div",{class:"learn-game-stage"}),d=Gg(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,S)=>I.classList.toggle("done",S{const I=[...i.alphabet].map((S,k)=>G("span",{class:"learn-rescue-letter"},G("b",{},S),G("small",{},String(k))));return{element:G("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},b=I=>{const S=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,S.name);const k=f(),P=G("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),D=G("button",{class:"primary"},p("web_learn_check")),A=G("div",{class:"learn-game-feedback",role:"status"}),B=()=>{const C=P.value.trim();if(!/^-?\d+$/.test(C)){A.className="learn-game-feedback wrong",A.replaceChildren(G("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==S.answer){A.className="learn-game-feedback wrong",A.replaceChildren(G("p",{},p("web_learn_rescue_wrong")),...S.hint?[an("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${S.hint}`)]:[]),P.select();return}P.disabled=D.disabled=!0;const L=i.alphabet.charAt(S.answer);k.cells[S.answer].classList.add("hit"),d.give(S.row,S.col,L),h++,g();const F=I+1===a,Y=G("button",{class:"primary"},p(F?"web_learn_rescue_to_crossword":"web_game_next"));Y.addEventListener("click",()=>F?x():b(I+1)),A.className="learn-game-feedback right",A.replaceChildren(G("p",{},p("web_game_right")),G("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${S.answer})`,G("span",{"aria-hidden":"true"}," → "),G("code",{},`'${L}'`)),an("div",{class:"learn-game-explain"},S.explanation),G("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Y),Y.focus({preventScroll:!0})};D.addEventListener("click",B),P.addEventListener("keydown",C=>{C.key==="Enter"&&B()}),c.replaceChildren(jm(S.code),an("p",{class:"learn-game-question"},S.question),G("div",{class:"learn-rescue-answer"},P,D),A,G("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),jm(`String alphabet = "${i.alphabet}";`),k.element,d.element),P.focus({preventScroll:!0})},x=()=>{m.textContent=p("web_learn_rescue_crossword");const I=G("div",{class:"learn-game-feedback",role:"status"}),S=G("button",{class:"primary"},p("web_learn_check"));S.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(G("p",{},p("web_learn_rescue_cw_wrong")));return}S.disabled=!0,d.lock();const k=G("button",{class:"primary"},p("web_learn_rescue_to_gate"));k.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(G("p",{},p("web_learn_rescue_cw_done")),k),k.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(an("p",{},i.crosswordText),d.element,S,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=G("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),S=i.gateCode.split(` -`).map(A=>{const B=A.indexOf(Cs);return B<0?G("div",{class:"ln"},A||" "):G("div",{class:"ln"},A.slice(0,B),I,A.slice(B+Cs.length))}),k=G("button",{class:"primary"},p("web_learn_rescue_open")),P=G("div",{class:"learn-game-feedback",role:"status"}),D=()=>{const A=I.value.trim();if(A!==i.keyword){const C=A.toUpperCase()===i.keyword.toUpperCase();P.className="learn-game-feedback wrong",P.replaceChildren(G("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=k.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const B=G("button",{},p("web_game_again"));B.addEventListener("click",w),P.className="learn-game-feedback right",P.replaceChildren(G("p",{},p("web_learn_rescue_freed")),an("div",{class:"learn-game-explain"},i.end),B)};k.addEventListener("click",D),I.addEventListener("keydown",A=>{A.key==="Enter"&&D()}),c.replaceChildren(an("p",{},i.gateText),G("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...S),k,P),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),b(0)},z=G("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(an("p",{},i.intro),z),t}function VE(i,e){const t=G("section",{class:"learn-game learn-rescue learn-crossword-game"}),n=G("div",{class:"learn-game-head"});n.append(G("img",{src:e,alt:"",width:"40",height:"40"}),G("strong",{},i.title));const a=Gg(i),s=G("div",{class:"learn-game-feedback",role:"status"}),r=G("button",{class:"primary"},p("web_learn_check"));return r.addEventListener("click",()=>{if(!a.check()){s.className="learn-game-feedback wrong",s.replaceChildren(G("p",{},p("web_learn_rescue_cw_wrong")));return}r.disabled=!0,a.lock();const o=G("button",{},p("web_game_again"));o.addEventListener("click",()=>{a.reset(),a.unlock(),r.disabled=!1,s.className="learn-game-feedback",s.replaceChildren(),a.focusFirst()}),s.className="learn-game-feedback right",s.replaceChildren(G("p",{},p("web_learn_rescue_cw_done")),G("p",{class:"learn-game-result"},G("span",{class:"mono",dir:"ltr"},i.keyword)),...i.end?[an("p",{},i.end)]:[],o)}),a.unlock(),t.append(n,an("p",{},i.intro),a.element,r,s),t}function Gg(i){const e=OW(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=G("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(b=>b.across?b.row===g&&f>=b.col&&f=b.row&&g{var v;const x=r?`${g} ${f+b}`:`${g+b} ${f}`;(v=a.get(x))==null||v.focus()};e.forEach((g,f)=>g.forEach((b,x)=>{if(!b)return s.append(G("span",{class:"learn-cw-empty"}));const v=`${f} ${x}`,w=G("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,x+1)});w.disabled=!0,w.addEventListener("focus",()=>{const k=o(f,x);k.some(P=>P.across===r)||(r=k[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,x,1)}),w.addEventListener("keydown",k=>{if(k.key==="Backspace"&&!w.value)l(f,x,-1);else if(k.key==="ArrowRight"||k.key==="ArrowLeft")r=!0,l(f,x,k.key==="ArrowRight"?1:-1);else if(k.key==="ArrowDown"||k.key==="ArrowUp")r=!1,l(f,x,k.key==="ArrowDown"?1:-1);else return;k.preventDefault()}),a.set(v,w);const z=t.get(v),I=G("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),S=n.get(v);S&&I.append(G("small",{class:"learn-cw-number"},String(S))),z!==void 0&&I.append(G("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=G("ol",{class:"learn-cw-clues"});for(const b of i.words.filter(x=>x.across===g).sort((x,v)=>x.number-v.number)){const x=an("li",{value:String(b.number)},`${b.clue} (${b.word.length})`);x.addEventListener("click",()=>{var v;r=b.across,(v=a.get(`${b.row} ${b.col}`))==null||v.focus()}),f.append(x)}return G("div",{},G("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>G("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=G("div",{class:"learn-cw"},G("div",{class:"learn-cw-board"},s,G("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,G("span",{class:"mono",dir:"ltr"},...m))),G("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,b){const x=a.get(`${g} ${f}`);x.value=b,x.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,b]of a){const[x,v]=f.split(" ").map(Number),w=b.value!==e[x][v];b.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}const qE="http://www.w3.org/2000/svg";function it(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function v1(i,e={}){const t=document.createElementNS(qE,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}function Rr(i,e,t){const n=it(i,e);return n.innerHTML=je(t),n}const QE={"#":"#6b7280","=":"#111827",r:"#ef4444",g:"#22c55e",b:"#3b82f6",y:"#facc15"},UE=450;function YE(i,e){const t=it("section",{class:"learn-game learn-round-game learn-drive-game"}),n=it("div",{class:"learn-game-head"});n.append(it("img",{src:e,alt:"",width:"40",height:"40"}),it("strong",{},i.title));const a=it("p",{class:"learn-game-status"}),s=it("div",{class:"learn-game-stage"});t.append(n,a,s);const r=i.rounds.length,o=i.field;let l=0,u=0,m=0;const c=()=>{a.textContent=`${p("web_game_round_fmt",l+1,r)} · ${p("web_game_score_fmt",u)}`},d=()=>{const b=it("button",{class:"primary"},l+1{l++,l{window.clearInterval(m),c();const b=i.rounds[l],x=b.map[0].length,v=b.map.length,w=x*o,z=v*o,I=M=>M+w/2,S=M=>z/2-M,k=Cg(b,o),P=YW(b,o),D=v1("svg",{viewBox:`-2 -2 ${w+4} ${z+4}`,class:"learn-drive-map",role:"group","aria-label":b.question}),A=[];b.map.forEach((M,j)=>{A.push([]),Array.from(M).forEach((N,V)=>{const U=v1("rect",{x:V*o,y:j*o,width:o,height:o,class:"cell",fill:QE[N]??"#ffffff",tabindex:0,role:"button","aria-label":`${V+1}, ${j+1}`}),re=()=>ae(V,j);U.addEventListener("click",re),U.addEventListener("keydown",K=>{(K.key==="Enter"||K.key===" ")&&(K.preventDefault(),re())}),D.append(U),A[j].push(U)})});const B=v1("polyline",{class:"trail",points:"",fill:"none"}),C=v1("g",{class:"robot"}),L=Math.min(o*.7,20);C.append(v1("rect",{x:-L/2,y:-L/2,width:L,height:L,rx:L/5,class:"body"}),v1("path",{d:`M ${-L/3} ${L/6} L 0 ${-L/2.4} L ${L/3} ${L/6} Z`,class:"nose"}));let F=k.start.heading;const Y=M=>{F+=((M.heading-F)%360+540)%360-180,C.style.transform=`translate(${I(M.x)}px, ${S(M.y)}px) rotate(${F}deg)`};Y(k.start),D.append(B,C);const ne=it("div",{class:"learn-game-feedback",role:"status"}),X=it("pre",{class:"learn-game-code mono",dir:"ltr"},...b.code.split(` -`).map(M=>it("div",{class:"ln"},M||" ")));let he=!1;const ae=(M,j)=>{if(he)return;he=!0,D.classList.add("done");const N=M===b.target.col&&j===b.target.row;A[j][M].classList.add(N?"right":"wrong"),N&&u++,c();const V=P.run.frames;let U=0;const re=[`${I(k.start.x)},${S(k.start.y)}`],K=()=>{if(U++,U>=V.length){window.clearInterval(m),A[b.target.row][b.target.col].classList.add("right");const ue=d();ne.className=`learn-game-feedback ${N?"right":"wrong"}`,ne.replaceChildren(it("p",{},p(N?"web_game_right":"web_game_wrong_short")),Rr("div",{class:"learn-game-explain"},b.explanation),ue),ue.focus({preventScroll:!0});return}const le=V[U].pose;Y(le),re.push(`${I(le.x)},${S(le.y)}`),B.setAttribute("points",re.join(" "))};m=window.setInterval(()=>{if(!t.isConnected)return window.clearInterval(m);K()},UE)};s.replaceChildren(X,Rr("p",{class:"learn-game-question"},b.question),D,ne)},g=()=>{window.clearInterval(m),a.textContent="";const b=it("button",{class:"primary"},p("web_game_again"));b.addEventListener("click",()=>{l=u=0,h()}),s.replaceChildren(it("p",{class:"learn-game-result"},p("web_game_done_fmt",u,r)),it("p",{},p(u===r?"web_game_perfect":u>=r*.7?"web_game_good":"web_game_practice_short")),b)},f=it("button",{class:"primary"},p("web_game_start"));return f.addEventListener("click",h),s.append(Rr("p",{},i.intro),f),t}function jt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Cm(i,e,t){const n=jt(i,e);return n.innerHTML=je(t),n}function $E(i){const e=jt("section",{class:"learn-cloze"});e.append(jt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Cm("p",{},i.task)),e.append(jt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=jt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=jt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=jt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(b=>b.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` -`),c.append(h)}e.append(c)}const n=jt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Cm("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=jt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=jt("button",{},p("web_learn_cloze_solution")),o=jt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=jt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=tE(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=It("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function ya(i,e){return It("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function Am(i,e,t,n){const a=It("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function eN(i,e){const t=Ag(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=It("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=j0(i,o);return l.setAttribute("fill",_0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,Hg(e,{...o,w:t.length>1?124:a},i)),r}function tN(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function nN(){const i=Qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=It("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=j0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",_0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(Qe("dt",{},s),Qe("dd",{},p(n)))}return i}function iN(i){const e=Qe("section",{class:"learn-pap"});if(e.append(Qe("strong",{class:"learn-pap-title"},i.title)),i.task){const M=Qe("p");M.innerHTML=je(i.task),e.append(M)}e.append(Qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=uE(i),a=t.filter(Boolean),s=Math.min(...a.map(M=>M.x-M.w/2))-4,r=i.nodes.some(M=>M.shape==="raute"),o=Math.max(...a.map(M=>M.x+M.w/2),r?Math.max(...a.map(M=>M.x))+85+40:0)+4,l=It("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++XE}`;l.innerHTML=``;const m=It("g",{stroke:"#1c1c1e","stroke-width":2}),c=It("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=M=>t[M].y-t[M].h/2,f=M=>t[M].y+t[M].h/2,b=i.nodes.map((M,j)=>j).filter(M=>!i.nodes[M].isSide);b.forEach((M,j)=>{const N=i.nodes[M],V=t[M],U=b[j+1];if(U!==void 0&&(m.append(ya([[V.x,f(M)],[V.x,g(U)-2]],u)),N.shape==="raute"&&c.append(Am(N.sideExit==="nein"?d:h,V.x+6,f(M)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const re=V.x+V.w/2;if(c.append(Am(N.sideExit==="ja"?d:h,re+5,V.y-6,N.sideExit==="ja")),N.backTo!==void 0){const K=g(N.backTo)-14;m.append(ya([[re,V.y],[re+22,V.y],[re+22,K],[V.x,K]],u))}else if(N.side!==void 0){const K=t[N.side],le=g(M)-14;m.append(ya([[re,V.y],[K.x-K.w/2-2,V.y]],u)),m.append(ya([[K.x,K.y-K.h/2],[K.x,le],[V.x,le]],u))}}),l.append(m,c);const x=i.nodes.map(()=>{}),v=[],w=[];let z;const I=Qe("p",{class:"learn-pap-status",role:"status"}),S=i.explanation?Qe("p",{class:"learn-explanation"}):void 0;S&&(S.innerHTML=je(i.explanation),S.hidden=!0);let k=!1;const P=()=>{v.forEach(M=>M.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},D=M=>{const j=v[M];j.replaceChildren();const N=i.nodes[M],V=x[M],U=j0(N.shape,t[M]);if(U.setAttribute("class","learn-pap-shape"),V===void 0)U.setAttribute("fill","#f7f7f9"),U.setAttribute("stroke-dasharray","6 4"),j.append(U),j.setAttribute("aria-label",p("web_learn_pap_empty"));else{const re=i.nodes[V];U.setAttribute("fill",_0[re.shape]),j.append(U,Hg(re.text,t[M],N.shape)),j.setAttribute("aria-label",re.text)}},A=()=>{i.nodes.forEach((M,j)=>D(j)),w.forEach((M,j)=>{M.hidden=x.includes(j),M.classList.toggle("selected",z===j)})},B=(M,j)=>{if(k)return;const N=x.indexOf(j);N>=0&&(x[N]=void 0),x[M]=j,z=void 0,P(),A()};i.nodes.forEach((M,j)=>{const N=It("g",{class:"learn-pap-slot","data-slot":j,tabindex:0,role:"button"}),V=()=>{k||(z!==void 0?B(j,z):x[j]!==void 0&&(x[j]=void 0,P(),A()))};N.addEventListener("click",V),N.addEventListener("keydown",U=>{U.key!=="Enter"&&U.key!==" "||(U.preventDefault(),V())}),v.push(N),l.append(N)});const C=Qe("div",{class:"learn-pap-tray"});let L=!1;for(const M of tN(i.nodes.length)){const j=i.nodes[M],N=Qe("button",{class:"learn-pap-card",type:"button","aria-label":j.text},eN(j.shape,j.text));w[M]=N,N.addEventListener("click",()=>{L||k||(z=z===M?void 0:M,A())}),N.addEventListener("pointerdown",V=>{if(k)return;L=!1;let U;const re=ue=>{var Se;!U&&Math.hypot(ue.clientX-V.clientX,ue.clientY-V.clientY)<6||(U||(L=!0,U=N.cloneNode(!0),U.classList.add("learn-pap-ghost"),document.body.append(U),N.classList.add("dragging")),U.style.left=`${ue.clientX}px`,U.style.top=`${ue.clientY}px`,v.forEach(Fe=>Fe.classList.remove("over")),(Se=K(ue))==null||Se.classList.add("over"))},K=ue=>{var Fe;U&&(U.style.display="none");const Se=(Fe=document.elementFromPoint(ue.clientX,ue.clientY))==null?void 0:Fe.closest("[data-slot]");return U&&(U.style.display=""),Se&&v.includes(Se)?Se:void 0},le=ue=>{if(N.removeEventListener("pointermove",re),N.removeEventListener("pointerup",le),N.removeEventListener("pointercancel",le),v.forEach(Fe=>Fe.classList.remove("over")),N.classList.remove("dragging"),!U)return;const Se=ue.type==="pointerup"?K(ue):void 0;U.remove(),Se&&B(Number(Se.getAttribute("data-slot")),M),setTimeout(()=>L=!1)};N.setPointerCapture(V.pointerId),N.addEventListener("pointermove",re),N.addEventListener("pointerup",le),N.addEventListener("pointercancel",le)}),C.append(N)}const F=Qe("button",{class:"learn-pap-check"},p("web_learn_check")),Y=Qe("button",{},p("web_learn_cloze_solution")),ne=Qe("button",{},p("web_learn_cloze_again"));Y.hidden=!0,ne.hidden=!0;const X=()=>{k=!0,F.hidden=!0,Y.hidden=!0,ne.hidden=!1,C.hidden=!0,ae.classList.add("done"),S&&(S.hidden=!1)};F.addEventListener("click",()=>{const M=x.filter(V=>V===void 0).length;let j=0;x.forEach((V,U)=>{const re=V!==void 0&&iE(i,U,V);v[U].classList.toggle("right",re),v[U].classList.toggle("wrong",V!==void 0&&!re),re&&j++});const N=j===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):M?p("web_learn_pap_missing_fmt",M):p("web_learn_pap_score_fmt",j,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?X():M||(Y.hidden=!1)}),Y.addEventListener("click",()=>{i.nodes.forEach((M,j)=>x[j]=j),z=void 0,A(),P(),v.forEach(M=>M.classList.add("shown")),X()}),ne.addEventListener("click",()=>{i.nodes.forEach((M,j)=>x[j]=void 0),k=!1,z=void 0,v.forEach(M=>M.classList.remove("shown")),P(),A(),F.hidden=!1,ne.hidden=!0,C.hidden=!1,ae.classList.remove("done"),S&&(S.hidden=!0)}),A();const he=Qe("div",{class:"learn-pap-left"});he.append(l),i.legend&&he.append(nN());const ae=Qe("div",{class:"learn-pap-work"},he,C);return e.append(ae,Qe("div",{class:"learn-pap-actions"},F,Y,ne),I),S&&e.append(S),e}const aN="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function Pm(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=am(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?sm(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(aN)||l.push(u)}for(let u of l)for(;;){const m=am(a),c=m==null?void 0:m.exec(u.data),d=c?sm(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function sN(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const Vg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},qg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Qg=new Set(["ausfuehren","konsole","einzelschritt"]);function dr(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function Dm(i){return i==="elemente"?["editor","palette"]:qg.has(i)?["editor"]:i==="codelive"||Qg.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function rN(i){return dr(i,new Set(["elemente"]))}function oN(i){return dr(i,new Set(["dateien"]))}function lN(i){return dr(i,qg)}function uN(i){return dr(i,Qg)}function Bm(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Vg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function mN(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(Vg[h.dataset.target??""]??":not(*)")].find(b=>b.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(Dm(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=Dm(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const At='',cN=()=>{const i=[];for(const e of zt){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function _(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Ve(i,e,t){const n=_(i,e);return n.innerHTML=t,n}const dN=i=>p(`element_${T[i]}`);function hN(i){return{caption:i,elements:[Ce(T.anweisung,{textLines:["ø"]})]}}function Om(i){const e=i.start?di(i.start):void 0;return e?{...e,caption:e.caption||i.title}:hN(i.title)}class gN{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=_("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=sN(this.element),this.pointers=mN(this.element,t=>this.host.reveal(t)),Bs(bm(o1())),this.restore()}restore(){const e=xe.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=zt.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Pn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),Bs(bm(o1()));const e=_("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=_("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=Ve("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},At);t.addEventListener("click",()=>this.host.collapse());const n=_("div",{class:"learn-head"},e,t);if(this.body=_("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=zt.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Pn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=es.map(r=>`- **${r.term}:** ${r.text}`).join(` + `;const e=a=>this.element.querySelector(a);this.buttons={play:e("[data-sim=play]"),pause:e("[data-sim=pause]"),step:e("[data-sim=step]"),stop:e("[data-sim=stop]")},this.buttons.play.addEventListener("click",()=>this.play()),this.buttons.pause.addEventListener("click",()=>this.pause()),this.buttons.step.addEventListener("click",()=>this.step()),this.buttons.stop.addEventListener("click",()=>this.reset()),this.editButton=e(".sim-edit"),this.editButton.addEventListener("click",()=>this.onEdit());const t=e("[data-sim=highlight]");t.value=this.highlightMode,t.addEventListener("change",()=>{this.highlightMode=t.value,Sm(km,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Sm(Nr,this.delay)}),this.inputSection=e(".sim-input > div"),this.trace=e(".sim-trace"),this.variables=e(".sim-vars"),this.output=e(".sim-output"),this.notice=e(".sim-notice")}collectOutput(){const e=this.engine.state.outputLines;for(;this.printedr.localeCompare(o));if(n.length===0)this.variables.innerHTML=`

${Oe(p("simulation_variables_placeholder"))}

`;else{const r=document.createElement("table");for(const o of n){const l=r.insertRow();l.insertCell().textContent=o;const u=e.variables.get(o),m=l.insertCell();u.kind==="grid"?m.append(Rg(u)):m.textContent=_e(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

${Oe(p("simulation_output_placeholder"))}

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...Fg(e.files)),this.output.scrollTop=this.output.scrollHeight)}updateInput(){const e=this.engine.state.inputRequest,t=this.inputSection;if(t.parentElement.classList.toggle("active",!!e),!e){t.innerHTML=`

${Oe(p("simulation_input_placeholder"))}

`;return}let n=t.querySelector("form");if(!n){n=document.createElement("form"),n.innerHTML=`

`;const l=n.querySelector("input");n.addEventListener("submit",u=>{u.preventDefault(),this.submitInput(l)}),t.replaceChildren(n),requestAnimationFrame(()=>l.focus())}const a=this.engine.state.outputLines;n.querySelector(".sim-prompt").textContent=e.prompt||(a[a.length-1]??"");const s=n.querySelector("input");s.inputMode=e.valueType==="string"||e.valueType==="boolean"?"text":"decimal";const r=this.engine.state.inputErrorNotice,o=n.querySelector(".sim-input-error");o.textContent=r?i1(r):"",o.hidden=!r}}function Rg(i){const e=document.createElement("table");e.className="sim-grid";for(const t of i.value){const n=e.insertRow();for(const a of t){const s=n.insertCell();s.textContent=String(a),a===!0&&(s.className="sim-grid-true")}}return e}const T1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Vn=360/T1.length,ZE="http://www.w3.org/2000/svg";function Re(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function vt(i,e={},t){const n=document.createElementNS(ZE,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function LE(i,e){const t=(e%26+26)%26;return Array.from(i).map(n=>{const a=n.charCodeAt(0);return a>=65&&a<=90?String.fromCharCode((a-65+t)%26+65):a>=97&&a<=122?String.fromCharCode((a-97+t)%26+97):n}).join("")}function Tm(i,e){const t=vt("g",{class:e}),n=T1.map((a,s)=>{const r=vt("g",{transform:`rotate(${s*Vn})`});return r.append(vt("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function WE(i,e){let t=i,n=!1,a=-t*Vn;const s=Re("section",{class:"learn-game learn-caesar"});s.append(Re("div",{class:"learn-game-head"},Re("strong",{},p("web_learn_caesar_title")))),s.append(Re("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=vt("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(vt("circle",{r:196,class:"outer-disc"})),r.append(vt("path",{d:EE(196,92,Vn/2),class:"window"}));const o=Tm(168,"outer-letters");r.append(o.group);for(let C=0;C{o.cells.forEach((L,F)=>L.classList.toggle("marked",F===C)),u.cells.forEach((L,F)=>L.classList.toggle("marked",C!==void 0&&F===(C+t)%26))},k=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),x.textContent=p(n?"web_learn_caesar_secret":"web_learn_caesar_plain"),w.textContent=p(n?"web_learn_caesar_plain":"web_learn_caesar_secret"),f.classList.toggle("active",!n),b.classList.toggle("active",n),z.textContent=LE(v.value,n?-t:t)||" ";const C=Array.from(v.value.toUpperCase()).reverse().find(F=>T1.includes(F));if(C===void 0)return S();const L=T1.indexOf(C);S(n?(L-t+26)%26:L)},P=C=>{t=(C%26+26)%26,a=-t*Vn,k()};c.addEventListener("click",()=>P(t-1)),d.addEventListener("click",()=>P(t+1)),f.addEventListener("click",()=>{var C;n&&(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!1,k()}),b.addEventListener("click",()=>{var C;n||(v.value=((C=z.textContent)==null?void 0:C.trim())??""),n=!0,k()}),v.addEventListener("input",k),o.cells.forEach((C,L)=>C.addEventListener("click",()=>S(L)));let D;const A=C=>{const L=r.getBoundingClientRect();return Math.atan2(C.clientY-(L.top+L.height/2),C.clientX-(L.left+L.width/2))*180/Math.PI};l.addEventListener("pointerdown",C=>{const L=C;D=A(L)-a,l.classList.add("dragging"),r.setPointerCapture(L.pointerId),L.preventDefault()}),r.addEventListener("pointermove",C=>{if(D===void 0)return;a=A(C)-D,l.setAttribute("transform",`rotate(${a})`);const L=Math.round(-a/Vn);if((L%26+26)%26!==t){t=(L%26+26)%26;const F=a;k(),a=F,l.setAttribute("transform",`rotate(${a})`)}});const B=()=>{D!==void 0&&(D=void 0,l.classList.remove("dragging"),P(t))};return r.addEventListener("pointerup",B),r.addEventListener("pointercancel",B),k(),s}function EE(i,e,t){const n=(a,s)=>{const r=(s-90)*Math.PI/180;return`${(a*Math.cos(r)).toFixed(2)} ${(a*Math.sin(r)).toFixed(2)}`};return`M ${n(i,-t)} A ${i} ${i} 0 0 1 ${n(i,t)} L ${n(e,t)} A ${e} ${e} 0 0 0 ${n(e,-t)} Z`}const T0=i=>p(`web_visubot_part_${i}`),Jg=new WeakMap;function Gg(i,e,t,n){const a=document.createElement("div");a.className="visubot-model";const s=document.createElement("div");s.className="visubot-stage";const r=document.createElement("div");r.className="visubot-part-label",r.hidden=!0,s.append(r);const o=(c,d,h)=>{r.hidden=!1,r.textContent=T0(c),r.style.left=`${Math.min(d+12,s.clientWidth-140)}px`,r.style.top=`${h+12}px`},l=document.createElement("p");l.className="visubot-model-hint hint",l.textContent=p("web_visubot_tap_part"),l.hidden=!!n,a.append(s,l);const u=ee(async()=>{const{Robot3D:c}=await import("./robot3d-QiT3_7Hv.js");return{Robot3D:c}},[],import.meta.url).then(({Robot3D:c})=>{const d=new c(s);d.showcase(),d.highlight(i),i.includes("leds")&&d.setLed([40,90,255]),d.focusOn([],e==="unten"||e==="bottom"?"":e,!1,1),d.focusOn(i,e,t);let h;return s.addEventListener("pointerdown",g=>h={x:g.clientX,y:g.clientY}),s.addEventListener("pointerup",g=>{if(!h||Math.hypot(g.clientX-h.x,g.clientY-h.y)>5)return;const f=d.partAt(g.clientX,g.clientY);if(!f)return;if(n)return n(f);d.highlight(f);const b=s.getBoundingClientRect();o(f,g.clientX-b.left,g.clientY-b.top)}),s.addEventListener("pointermove",g=>{if(g.pointerType!=="mouse"||n)return;const f=d.partAt(g.clientX,g.clientY);if(r.hidden=!f,!f)return;const b=s.getBoundingClientRect();o(f,g.clientX-b.left,g.clientY-b.top)}),s.addEventListener("pointerleave",()=>r.hidden=!0),d}).catch(c=>{console.error(c),s.textContent=p("web_visubot_no_3d")}),m={box:a,ready:u,focus:i,view:e};return Jg.set(a,m),m}function NE(i,e,t=!1){return Gg(i,e,t).box}function FE(i){const e=i.querySelector(".visubot-model"),t=e&&Jg.get(e);for(const n of i.querySelectorAll("[data-robot-part]")){const a=(n.dataset.robotPart??"").split(",").filter(Boolean);if(n.title=a.map(T0).join(", "),!t)continue;const s=()=>void t.ready.then(o=>o==null?void 0:o.highlight(a)),r=()=>void t.ready.then(o=>o==null?void 0:o.highlight(t.focus));n.addEventListener("mouseenter",s),n.addEventListener("focus",s),n.addEventListener("mouseleave",r),n.addEventListener("blur",r),n.addEventListener("click",()=>{t.ready.then(o=>{o==null||o.highlight(a),o==null||o.focusOn(a,t.view)}),t.box.scrollIntoView({block:"nearest",behavior:"smooth"})})}}function RE(i,e){let t=0;const n=document.createElement("div");n.className="visubot-quiz-question";const a=document.createElement("p");a.className="visubot-quiz-feedback",a.setAttribute("aria-live","polite");const s=()=>{n.innerHTML=jn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Gg([],void 0,!1,l=>{if(!(t>=i.length)){if(r.ready.then(u=>u==null?void 0:u.highlight(l)),l!==i[t].part){a.className="visubot-quiz-feedback wrong",a.textContent=p("web_visubot_quiz_wrong_fmt",T0(l));return}t++,a.className="visubot-quiz-feedback right",t{u.forEach(v=>{window.clearTimeout(v),window.clearInterval(v)}),u=[]},c=()=>{a.textContent=`${p("web_game_round_fmt",o+1,r)} · ${p("web_game_score_fmt",l)}`},d=()=>{const v=$("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,z=$("div",{class:"learn-bomb-fuse"},$("span",{})),I=$("span",{class:"learn-bomb-time"}),S=$("div",{class:"learn-bomb","aria-live":"polite"},$("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),I,z),k=$("div",{class:"learn-game-feedback",role:"status"}),P=v.wrongPart!==void 0,D=[],A=v.code.split(` +`).map((X,he)=>{if(!P){const M=$("button",{class:"ln",type:"button"},X||" ");return M.disabled=!X.trim(),D.push({button:M,line:he+1,right:he+1===v.wrongLine}),M}const ae=$("div",{class:"ln parts"});X.trim()||ae.append(" ");for(const M of fg(X)){if(!M.part){ae.append(M.text);continue}const j=$("button",{class:"part",type:"button"},M.text);D.push({button:j,line:he+1,right:he+1===v.wrongLine&&M.text===v.wrongPart}),ae.append(j)}return ae});for(const X of D)X.button.addEventListener("click",()=>F(X.right?"right":X.line===v.wrongLine?"part":"wrong",X.button));const B=$("div",{class:`learn-game-code learn-bomb-code mono${P?" by-parts":""}`,dir:"ltr"},...A),C=Date.now(),L=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const X=Math.max(0,w-(Date.now()-C)/1e3);I.textContent=p("web_game_time_fmt",Math.ceil(X)),z.firstChild.style.width=`${X/w*100}%`,S.classList.toggle("hurry",X<=5),X<=0&&F("time")},F=(X,he)=>{m();for(const j of D)j.button.disabled=!0,j.right&&j.button.classList.add("right");P&&A[v.wrongLine-1].classList.add("right"),he&&X!=="right"&&he.classList.add("wrong");const ae=X==="right";ae&&l++,c(),S.classList.add(ae?"defused":"boom"),S.firstChild.textContent=ae?"✂️":"💥",k.className=`learn-game-feedback ${ae?"right":"wrong"}`;const M=d();k.replaceChildren($("p",{},p(ae?"web_game_defused":X==="time"?"web_game_boom_time":X==="part"?"web_game_boom_part":P?"web_game_boom_wrong_part":"web_game_boom_wrong")),Gn("div",{class:"learn-game-explain"},v.explanation),$("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,$("code",{},v.fix.trim())),M),M.focus({preventScroll:!0})},Y=Gn("p",{class:"learn-game-question"},v.question);P&&Y.append(" ",$("span",{class:"learn-bomb-hint"},p("web_game_bomb_parts_hint"))),s.replaceChildren(S,Y,B,k),L();const ne=window.setInterval(L,200);u.push(ne)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(jm(v.code).element),w.push(Gn("p",{class:"learn-game-question"},v.question),$("p",{class:"learn-order-hint"},p("web_game_order_hint")));const z=$("div",{class:"learn-game-options learn-order"}),I=$("div",{class:"learn-game-feedback",role:"status"});let S=0;const k=GE(v.options.length).map(D=>{const A=$("span",{class:"learn-order-badge","aria-hidden":"true"}),B=$("span",{});B.innerHTML=je(v.options[D].text);const C=$("button",{},A,B);return C.addEventListener("click",()=>{if(D!==S)return C.classList.add("wrong"),P(!1);C.classList.add("right"),A.textContent=String(++S),C.disabled=!0,S===v.options.length&&P(!0)}),z.append(C),{k:D,b:C,badge:A}}),P=D=>{for(const{k:B,b:C,badge:L}of[...k].sort((F,Y)=>F.k-Y.k))C.disabled=!0,L.textContent=String(B+1),z.append(C);D&&l++,c(),I.className=`learn-game-feedback ${D?"right":"wrong"}`;const A=d();I.replaceChildren($("p",{},p(D?"web_game_right":"web_game_wrong_short")),Gn("div",{class:"learn-game-explain"},v.explanation),A),A.focus({preventScroll:!0})};s.replaceChildren(...w,z,I)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=jm(v.code),z=[];let I;i.kind==="zuhoerer"?(I=HE(xg(v.code),w),z.push($("div",{class:"learn-swing-row"},w.element,I.element)),v.clicks.length&&z.push($("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((A,B)=>[...B?[" → "]:[],$("code",{},A)])))):v.code.trim()&&z.push(w.element),z.push(Gn("p",{class:"learn-game-question"},v.question));const S=$("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),k=$("div",{class:"learn-game-feedback",role:"status"}),P=v.options.map(A=>{const B=$("button",{});return i.kind==="layout"?B.append(qE(A.text)):A.text.includes(` +`)?B.append(VE(A.text)):B.innerHTML=je(A.text),B.addEventListener("click",()=>D(A.right,B)),S.append(B),B}),D=(A,B)=>{P.forEach((L,F)=>{L.disabled=!0,v.options[F].right&&L.classList.add("right")}),A||B.classList.add("wrong"),A&&l++,c(),k.className=`learn-game-feedback ${A?"right":"wrong"}`;const C=d();k.replaceChildren($("p",{},p(A?"web_game_right":"web_game_wrong_short")),Gn("div",{class:"learn-game-explain"},v.explanation)),k.append(C),I&&(u=I.replay(v.clicks,()=>C.before($("p",{class:"learn-swing-try"},p("web_game_try"))))),C.focus({preventScroll:!0})};s.replaceChildren(...z,S,k)},b=()=>{m(),a.textContent="";const v=$("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren($("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),$("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},x=$("button",{class:"primary"},p("web_game_start"));return x.addEventListener("click",f),s.append(Gn("p",{},i.intro),x),t}function GE(i){const e=[...Array(i).keys()];for(;e.every((t,n)=>t===n);)for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e}function jm(i){const e=i.split(` +`).map(n=>$("div",{class:"ln"},n||" "));return{element:$("pre",{class:"learn-game-code mono",dir:"ltr"},...e),highlight(n,a){e.forEach((s,r)=>s.classList.toggle("hit",n!==void 0&&r>=n&&r<=(a??n)))}}}function HE(i,e){const t=vg(i),n=$("div",{class:"learn-swing-window",dir:"ltr"});n.append($("div",{class:"learn-swing-title"},i.title||" "));const a=$("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=$("div",{class:"learn-swing-label"},t.texts[c.name]);s.set(c.name,d),a.append(d)}const r=i.buttons.map(c=>{const d=$("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=$("p",{class:"learn-swing-event",role:"status"}),l=$("pre",{class:"learn-swing-console mono",hidden:""});n.append(a,o,l);const u=c=>{var h,g;const d=s.get(c.button);d.classList.add("pressed"),window.setTimeout(()=>d.classList.remove("pressed"),350),e.highlight((h=c.listener)==null?void 0:h.from,(g=c.listener)==null?void 0:g.to),o.textContent=c.listener?p("web_game_event_fmt",d.textContent??""):p("web_game_nobody"),o.className=`learn-swing-event ${c.listener?"heard":"nobody"}`;for(const[f,b]of Object.entries(c.texts)){const x=s.get(f);x&&x.textContent!==b&&(x.textContent=b,x.classList.remove("changed"),x.offsetWidth,x.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} +`).join(""))},m=c=>u(yg(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*_m));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(wg(i,t,g.name)))}),d()},(c.length+.3)*_m)),h}}}function VE(i){return $("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function qE(i){const e=bg(i),t=$("div",{class:"learn-layout-window",dir:"ltr"},$("div",{class:"learn-layout-title"})),n=$("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>$("span",{class:"learn-layout-cell",...r?{style:`grid-area:${r}`}:{}},s);if(e.kind==="border")for(const[s,r]of Object.entries(e.areas))n.append(a(r,s));else if(e.kind==="grid"){const s=Math.max(...e.rows.map(r=>r.length));n.style.gridTemplateColumns=`repeat(${s}, 1fr)`;for(const r of e.rows)for(let o=0;oa(r))));return t.append(n),t}function G(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function an(i,e,t){const n=G(i,e);return n.innerHTML=je(t),n}function Cm(i){return G("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` +`).map(e=>G("div",{class:"ln"},e||" ")))}function QE(i,e){const t=G("section",{class:"learn-game learn-rescue"}),n=G("div",{class:"learn-game-head"});n.append(G("img",{src:e,alt:"",width:"40",height:"40"}),G("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>G("span",{class:"learn-rescue-dot"})),r=G("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=G("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",G("span",{class:"learn-rescue-zora"},"🐐"),G("span",{class:"learn-rescue-fox"},"🦊")),l=G("span",{class:"learn-rescue-free"},"🐐"),u=G("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=G("p",{class:"learn-game-status"}),c=G("div",{class:"learn-game-stage"}),d=Hg(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((I,S)=>I.classList.toggle("done",S{const I=[...i.alphabet].map((S,k)=>G("span",{class:"learn-rescue-letter"},G("b",{},S),G("small",{},String(k))));return{element:G("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...I),cells:I}},b=I=>{const S=i.stations[I];m.textContent=p("web_learn_rescue_station_fmt",I+1,a,S.name);const k=f(),P=G("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),D=G("button",{class:"primary"},p("web_learn_check")),A=G("div",{class:"learn-game-feedback",role:"status"}),B=()=>{const C=P.value.trim();if(!/^-?\d+$/.test(C)){A.className="learn-game-feedback wrong",A.replaceChildren(G("p",{},p("web_learn_rescue_not_number")));return}if(Number(C)!==S.answer){A.className="learn-game-feedback wrong",A.replaceChildren(G("p",{},p("web_learn_rescue_wrong")),...S.hint?[an("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${S.hint}`)]:[]),P.select();return}P.disabled=D.disabled=!0;const L=i.alphabet.charAt(S.answer);k.cells[S.answer].classList.add("hit"),d.give(S.row,S.col,L),h++,g();const F=I+1===a,Y=G("button",{class:"primary"},p(F?"web_learn_rescue_to_crossword":"web_game_next"));Y.addEventListener("click",()=>F?x():b(I+1)),A.className="learn-game-feedback right",A.replaceChildren(G("p",{},p("web_game_right")),G("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${S.answer})`,G("span",{"aria-hidden":"true"}," → "),G("code",{},`'${L}'`)),an("div",{class:"learn-game-explain"},S.explanation),G("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Y),Y.focus({preventScroll:!0})};D.addEventListener("click",B),P.addEventListener("keydown",C=>{C.key==="Enter"&&B()}),c.replaceChildren(Cm(S.code),an("p",{class:"learn-game-question"},S.question),G("div",{class:"learn-rescue-answer"},P,D),A,G("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),Cm(`String alphabet = "${i.alphabet}";`),k.element,d.element),P.focus({preventScroll:!0})},x=()=>{m.textContent=p("web_learn_rescue_crossword");const I=G("div",{class:"learn-game-feedback",role:"status"}),S=G("button",{class:"primary"},p("web_learn_check"));S.addEventListener("click",()=>{if(!d.check()){I.className="learn-game-feedback wrong",I.replaceChildren(G("p",{},p("web_learn_rescue_cw_wrong")));return}S.disabled=!0,d.lock();const k=G("button",{class:"primary"},p("web_learn_rescue_to_gate"));k.addEventListener("click",v),I.className="learn-game-feedback right",I.replaceChildren(G("p",{},p("web_learn_rescue_cw_done")),k),k.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(an("p",{},i.crosswordText),d.element,S,I),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const I=G("input",{type:"text",autocomplete:"off",autocapitalize:"off",spellcheck:"false",class:"learn-rescue-word mono",size:String(i.keyword.length+2),"aria-label":p("web_learn_rescue_word")}),S=i.gateCode.split(` +`).map(A=>{const B=A.indexOf(Cs);return B<0?G("div",{class:"ln"},A||" "):G("div",{class:"ln"},A.slice(0,B),I,A.slice(B+Cs.length))}),k=G("button",{class:"primary"},p("web_learn_rescue_open")),P=G("div",{class:"learn-game-feedback",role:"status"}),D=()=>{const A=I.value.trim();if(A!==i.keyword){const C=A.toUpperCase()===i.keyword.toUpperCase();P.className="learn-game-feedback wrong",P.replaceChildren(G("p",{},p(C?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),I.select();return}I.disabled=k.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const B=G("button",{},p("web_game_again"));B.addEventListener("click",w),P.className="learn-game-feedback right",P.replaceChildren(G("p",{},p("web_learn_rescue_freed")),an("div",{class:"learn-game-explain"},i.end),B)};k.addEventListener("click",D),I.addEventListener("keydown",A=>{A.key==="Enter"&&D()}),c.replaceChildren(an("p",{},i.gateText),G("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...S),k,P),I.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),b(0)},z=G("button",{class:"primary"},p("web_game_start"));return z.addEventListener("click",w),c.append(an("p",{},i.intro),z),t}function UE(i,e){const t=G("section",{class:"learn-game learn-rescue learn-crossword-game"}),n=G("div",{class:"learn-game-head"});n.append(G("img",{src:e,alt:"",width:"40",height:"40"}),G("strong",{},i.title));const a=Hg(i),s=G("div",{class:"learn-game-feedback",role:"status"}),r=G("button",{class:"primary"},p("web_learn_check"));return r.addEventListener("click",()=>{if(!a.check()){s.className="learn-game-feedback wrong",s.replaceChildren(G("p",{},p("web_learn_rescue_cw_wrong")));return}r.disabled=!0,a.lock();const o=G("button",{},p("web_game_again"));o.addEventListener("click",()=>{a.reset(),a.unlock(),r.disabled=!1,s.className="learn-game-feedback",s.replaceChildren(),a.focusFirst()}),s.className="learn-game-feedback right",s.replaceChildren(G("p",{},p("web_learn_rescue_cw_done")),G("p",{class:"learn-game-result"},G("span",{class:"mono",dir:"ltr"},i.keyword)),...i.end?[an("p",{},i.end)]:[],o)}),a.unlock(),t.append(n,an("p",{},i.intro),a.element,r,s),t}function Hg(i){const e=WW(i),t=new Map(i.solution.map((g,f)=>[`${g.row} ${g.col}`,f])),n=new Map;for(const g of i.words)n.set(`${g.row} ${g.col}`,g.number);const a=new Map,s=G("div",{class:"learn-cw-grid",dir:"ltr"});s.style.gridTemplateColumns=`repeat(${i.cols}, var(--cw-cell))`;let r=!0;const o=(g,f)=>i.words.filter(b=>b.across?b.row===g&&f>=b.col&&f=b.row&&g{var v;const x=r?`${g} ${f+b}`:`${g+b} ${f}`;(v=a.get(x))==null||v.focus()};e.forEach((g,f)=>g.forEach((b,x)=>{if(!b)return s.append(G("span",{class:"learn-cw-empty"}));const v=`${f} ${x}`,w=G("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,x+1)});w.disabled=!0,w.addEventListener("focus",()=>{const k=o(f,x);k.some(P=>P.across===r)||(r=k[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,x,1)}),w.addEventListener("keydown",k=>{if(k.key==="Backspace"&&!w.value)l(f,x,-1);else if(k.key==="ArrowRight"||k.key==="ArrowLeft")r=!0,l(f,x,k.key==="ArrowRight"?1:-1);else if(k.key==="ArrowDown"||k.key==="ArrowUp")r=!1,l(f,x,k.key==="ArrowDown"?1:-1);else return;k.preventDefault()}),a.set(v,w);const z=t.get(v),I=G("span",{class:`learn-cw-cell${z!==void 0?" key":""}`}),S=n.get(v);S&&I.append(G("small",{class:"learn-cw-number"},String(S))),z!==void 0&&I.append(G("small",{class:"learn-cw-keyindex"},String(z+1))),I.append(w),s.append(I)}));const u=g=>{const f=G("ol",{class:"learn-cw-clues"});for(const b of i.words.filter(x=>x.across===g).sort((x,v)=>x.number-v.number)){const x=an("li",{value:String(b.number)},`${b.clue} (${b.word.length})`);x.addEventListener("click",()=>{var v;r=b.across,(v=a.get(`${b.row} ${b.col}`))==null||v.focus()}),f.append(x)}return G("div",{},G("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>G("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=G("div",{class:"learn-cw"},G("div",{class:"learn-cw-board"},s,G("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,G("span",{class:"mono",dir:"ltr"},...m))),G("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,b){const x=a.get(`${g} ${f}`);x.value=b,x.parentElement.classList.add("given","arrived"),h.add(`${g} ${f}`),c()},unlock(){for(const[g,f]of a)f.disabled=h.has(g)},lock(){for(const g of a.values())g.disabled=!0},focusFirst(){var g;(g=[...a].find(([f])=>!h.has(f)))==null||g[1].focus({preventScroll:!0})},check(){let g=!0;for(const[f,b]of a){const[x,v]=f.split(" ").map(Number),w=b.value!==e[x][v];b.classList.toggle("wrong",w),w&&(g=!1)}return g},reset(){h.clear();for(const g of a.values())g.value="",g.disabled=!0,g.classList.remove("wrong"),g.parentElement.classList.remove("given","arrived");c()}}}const YE="http://www.w3.org/2000/svg";function it(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function v1(i,e={}){const t=document.createElementNS(YE,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}function Rr(i,e,t){const n=it(i,e);return n.innerHTML=je(t),n}const $E={"#":"#6b7280","=":"#111827",r:"#ef4444",g:"#22c55e",b:"#3b82f6",y:"#facc15"},KE=450;function XE(i,e){const t=it("section",{class:"learn-game learn-round-game learn-drive-game"}),n=it("div",{class:"learn-game-head"});n.append(it("img",{src:e,alt:"",width:"40",height:"40"}),it("strong",{},i.title));const a=it("p",{class:"learn-game-status"}),s=it("div",{class:"learn-game-stage"});t.append(n,a,s);const r=i.rounds.length,o=i.field;let l=0,u=0,m=0;const c=()=>{a.textContent=`${p("web_game_round_fmt",l+1,r)} · ${p("web_game_score_fmt",u)}`},d=()=>{const b=it("button",{class:"primary"},l+1{l++,l{window.clearInterval(m),c();const b=i.rounds[l],x=b.map[0].length,v=b.map.length,w=x*o,z=v*o,I=M=>M+w/2,S=M=>z/2-M,k=Ag(b,o),P=eE(b,o),D=v1("svg",{viewBox:`-2 -2 ${w+4} ${z+4}`,class:"learn-drive-map",role:"group","aria-label":b.question}),A=[];b.map.forEach((M,j)=>{A.push([]),Array.from(M).forEach((N,V)=>{const U=v1("rect",{x:V*o,y:j*o,width:o,height:o,class:"cell",fill:$E[N]??"#ffffff",tabindex:0,role:"button","aria-label":`${V+1}, ${j+1}`}),re=()=>ae(V,j);U.addEventListener("click",re),U.addEventListener("keydown",K=>{(K.key==="Enter"||K.key===" ")&&(K.preventDefault(),re())}),D.append(U),A[j].push(U)})});const B=v1("polyline",{class:"trail",points:"",fill:"none"}),C=v1("g",{class:"robot"}),L=Math.min(o*.7,20);C.append(v1("rect",{x:-L/2,y:-L/2,width:L,height:L,rx:L/5,class:"body"}),v1("path",{d:`M ${-L/3} ${L/6} L 0 ${-L/2.4} L ${L/3} ${L/6} Z`,class:"nose"}));let F=k.start.heading;const Y=M=>{F+=((M.heading-F)%360+540)%360-180,C.style.transform=`translate(${I(M.x)}px, ${S(M.y)}px) rotate(${F}deg)`};Y(k.start),D.append(B,C);const ne=it("div",{class:"learn-game-feedback",role:"status"}),X=it("pre",{class:"learn-game-code mono",dir:"ltr"},...b.code.split(` +`).map(M=>it("div",{class:"ln"},M||" ")));let he=!1;const ae=(M,j)=>{if(he)return;he=!0,D.classList.add("done");const N=M===b.target.col&&j===b.target.row;A[j][M].classList.add(N?"right":"wrong"),N&&u++,c();const V=P.run.frames;let U=0;const re=[`${I(k.start.x)},${S(k.start.y)}`],K=()=>{if(U++,U>=V.length){window.clearInterval(m),A[b.target.row][b.target.col].classList.add("right");const ue=d();ne.className=`learn-game-feedback ${N?"right":"wrong"}`,ne.replaceChildren(it("p",{},p(N?"web_game_right":"web_game_wrong_short")),Rr("div",{class:"learn-game-explain"},b.explanation),ue),ue.focus({preventScroll:!0});return}const le=V[U].pose;Y(le),re.push(`${I(le.x)},${S(le.y)}`),B.setAttribute("points",re.join(" "))};m=window.setInterval(()=>{if(!t.isConnected)return window.clearInterval(m);K()},KE)};s.replaceChildren(X,Rr("p",{class:"learn-game-question"},b.question),D,ne)},g=()=>{window.clearInterval(m),a.textContent="";const b=it("button",{class:"primary"},p("web_game_again"));b.addEventListener("click",()=>{l=u=0,h()}),s.replaceChildren(it("p",{class:"learn-game-result"},p("web_game_done_fmt",u,r)),it("p",{},p(u===r?"web_game_perfect":u>=r*.7?"web_game_good":"web_game_practice_short")),b)},f=it("button",{class:"primary"},p("web_game_start"));return f.addEventListener("click",h),s.append(Rr("p",{},i.intro),f),t}function jt(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Am(i,e,t){const n=jt(i,e);return n.innerHTML=je(t),n}function eN(i){const e=jt("section",{class:"learn-cloze"});e.append(jt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Am("p",{},i.task)),e.append(jt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=jt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=jt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=jt("input",{type:"text",class:"learn-cloze-gap mono",autocomplete:"off",autocapitalize:"off",autocorrect:"off",spellcheck:"false",enterkeyhint:"done","aria-label":`${t.length+1}`});f.style.width=`${Math.max(3,...g.answers.map(b=>b.length))+1}ch`,t.push({input:f,answers:g.answers}),h.append(f)}d.length||h.append(` +`),c.append(h)}e.append(c)}const n=jt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Am("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=jt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=jt("button",{},p("web_learn_cloze_solution")),o=jt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=jt("div",{class:"learn-cloze-actions"},s,r,o);e.append(l,n),a&&e.append(a);const u=()=>{var d;let m=0;for(const h of t){const g=sE(h.answers,h.input.value);h.input.classList.toggle("right",g),h.input.classList.toggle("wrong",!g),g&&m++}const c=m===t.length;n.textContent=c?p("web_learn_cloze_all_right"):p("web_learn_cloze_score_fmt",m,t.length),n.className=`learn-cloze-status ${c?"right":"wrong"}`,a&&(a.hidden=!c),c?(t.forEach(h=>h.input.disabled=!0),s.hidden=!0,o.hidden=!1):(r.hidden=!1,(d=t.find(h=>h.input.classList.contains("wrong")))==null||d.input.focus())};return s.addEventListener("click",u),r.addEventListener("click",()=>{for(const m of t)m.input.value=m.answers[0],m.input.classList.remove("right","wrong"),m.input.classList.add("shown"),m.input.disabled=!0;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!1),s.hidden=!0,r.hidden=!0,o.hidden=!1}),o.addEventListener("click",()=>{var m;for(const c of t)c.input.value="",c.input.classList.remove("right","wrong","shown"),c.input.disabled=!1;n.textContent="",n.className="learn-cloze-status",a&&(a.hidden=!0),s.hidden=!1,r.hidden=!0,o.hidden=!0,(m=t[0])==null||m.input.focus()}),t.forEach((m,c)=>{m.input.addEventListener("input",()=>m.input.classList.remove("right","wrong")),m.input.addEventListener("keydown",d=>{d.key==="Enter"&&(d.preventDefault(),c1?12:13});return n.forEach((s,r)=>{const o=It("tspan",{x:e.x,y:e.y+4.5+(r-(n.length-1)/2)*14});o.textContent=s,a.append(o)}),a}function ya(i,e){return It("polyline",{points:i.map(t=>t.join(",")).join(" "),fill:"none","marker-end":`url(#${e})`})}function Pm(i,e,t,n){const a=It("text",{x:e,y:t,"font-size":12,"font-weight":600,fill:n?"#248a3d":"#d70015"});return a.textContent=i,a}function iN(i,e){const t=Pg(e,110),n=Math.max(...t.map(u=>u.length)),a=Math.max(70,n*6.6+(i==="raute"?56:26)),s=i==="raute"?48:t.length>1?40:30,r=It("svg",{viewBox:`0 0 ${a+4} ${s+4}`,width:a+4,height:s+4,"aria-hidden":"true"}),o={x:(a+4)/2,y:(s+4)/2,w:a,h:s},l=j0(i,o);return l.setAttribute("fill",_0[i]),l.setAttribute("stroke","#1c1c1e"),l.setAttribute("stroke-width","1.5"),r.append(l,Vg(e,{...o,w:t.length>1?124:a},i)),r}function aN(i){const e=[...Array(i).keys()];for(let t=i-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return i>1&&e.every((t,n)=>t===n)&&e.reverse(),e}function sN(){const i=Qe("dl",{class:"learn-pap-legend"}),e=[["oval","web_learn_pap_legend_oval"],["rechteck","web_learn_pap_legend_rect"],["raute","web_learn_pap_legend_diamond"],["parallelogramm","web_learn_pap_legend_para"]];for(const[t,n]of e){const a=t==="raute"?44:40,s=It("svg",{viewBox:`0 0 ${a+4} 28`,width:a+4,height:28,"aria-hidden":"true"}),r=j0(t,{x:(a+4)/2,y:14,w:a,h:t==="raute"?24:18});r.setAttribute("fill",_0[t]),r.setAttribute("stroke","#1c1c1e"),r.setAttribute("stroke-width","1.5"),s.append(r),i.append(Qe("dt",{},s),Qe("dd",{},p(n)))}return i}function rN(i){const e=Qe("section",{class:"learn-pap"});if(e.append(Qe("strong",{class:"learn-pap-title"},i.title)),i.task){const M=Qe("p");M.innerHTML=je(i.task),e.append(M)}e.append(Qe("p",{class:"learn-pap-hint"},p("web_learn_pap_hint")));const{boxes:t,height:n}=hE(i),a=t.filter(Boolean),s=Math.min(...a.map(M=>M.x-M.w/2))-4,r=i.nodes.some(M=>M.shape==="raute"),o=Math.max(...a.map(M=>M.x+M.w/2),r?Math.max(...a.map(M=>M.x))+85+40:0)+4,l=It("svg",{viewBox:`${s} 0 ${o-s} ${n}`,class:"learn-pap-plan",role:"group","aria-label":i.title}),u=`pap-arrow-${++nN}`;l.innerHTML=``;const m=It("g",{stroke:"#1c1c1e","stroke-width":2}),c=It("g"),d=p("web_learn_pap_yes"),h=p("web_learn_pap_no"),g=M=>t[M].y-t[M].h/2,f=M=>t[M].y+t[M].h/2,b=i.nodes.map((M,j)=>j).filter(M=>!i.nodes[M].isSide);b.forEach((M,j)=>{const N=i.nodes[M],V=t[M],U=b[j+1];if(U!==void 0&&(m.append(ya([[V.x,f(M)],[V.x,g(U)-2]],u)),N.shape==="raute"&&c.append(Pm(N.sideExit==="nein"?d:h,V.x+6,f(M)+13,N.sideExit==="nein"))),N.shape!=="raute")return;const re=V.x+V.w/2;if(c.append(Pm(N.sideExit==="ja"?d:h,re+5,V.y-6,N.sideExit==="ja")),N.backTo!==void 0){const K=g(N.backTo)-14;m.append(ya([[re,V.y],[re+22,V.y],[re+22,K],[V.x,K]],u))}else if(N.side!==void 0){const K=t[N.side],le=g(M)-14;m.append(ya([[re,V.y],[K.x-K.w/2-2,V.y]],u)),m.append(ya([[K.x,K.y-K.h/2],[K.x,le],[V.x,le]],u))}}),l.append(m,c);const x=i.nodes.map(()=>{}),v=[],w=[];let z;const I=Qe("p",{class:"learn-pap-status",role:"status"}),S=i.explanation?Qe("p",{class:"learn-explanation"}):void 0;S&&(S.innerHTML=je(i.explanation),S.hidden=!0);let k=!1;const P=()=>{v.forEach(M=>M.classList.remove("right","wrong")),I.textContent="",I.className="learn-pap-status"},D=M=>{const j=v[M];j.replaceChildren();const N=i.nodes[M],V=x[M],U=j0(N.shape,t[M]);if(U.setAttribute("class","learn-pap-shape"),V===void 0)U.setAttribute("fill","#f7f7f9"),U.setAttribute("stroke-dasharray","6 4"),j.append(U),j.setAttribute("aria-label",p("web_learn_pap_empty"));else{const re=i.nodes[V];U.setAttribute("fill",_0[re.shape]),j.append(U,Vg(re.text,t[M],N.shape)),j.setAttribute("aria-label",re.text)}},A=()=>{i.nodes.forEach((M,j)=>D(j)),w.forEach((M,j)=>{M.hidden=x.includes(j),M.classList.toggle("selected",z===j)})},B=(M,j)=>{if(k)return;const N=x.indexOf(j);N>=0&&(x[N]=void 0),x[M]=j,z=void 0,P(),A()};i.nodes.forEach((M,j)=>{const N=It("g",{class:"learn-pap-slot","data-slot":j,tabindex:0,role:"button"}),V=()=>{k||(z!==void 0?B(j,z):x[j]!==void 0&&(x[j]=void 0,P(),A()))};N.addEventListener("click",V),N.addEventListener("keydown",U=>{U.key!=="Enter"&&U.key!==" "||(U.preventDefault(),V())}),v.push(N),l.append(N)});const C=Qe("div",{class:"learn-pap-tray"});let L=!1;for(const M of aN(i.nodes.length)){const j=i.nodes[M],N=Qe("button",{class:"learn-pap-card",type:"button","aria-label":j.text},iN(j.shape,j.text));w[M]=N,N.addEventListener("click",()=>{L||k||(z=z===M?void 0:M,A())}),N.addEventListener("pointerdown",V=>{if(k)return;L=!1;let U;const re=ue=>{var Se;!U&&Math.hypot(ue.clientX-V.clientX,ue.clientY-V.clientY)<6||(U||(L=!0,U=N.cloneNode(!0),U.classList.add("learn-pap-ghost"),document.body.append(U),N.classList.add("dragging")),U.style.left=`${ue.clientX}px`,U.style.top=`${ue.clientY}px`,v.forEach(Fe=>Fe.classList.remove("over")),(Se=K(ue))==null||Se.classList.add("over"))},K=ue=>{var Fe;U&&(U.style.display="none");const Se=(Fe=document.elementFromPoint(ue.clientX,ue.clientY))==null?void 0:Fe.closest("[data-slot]");return U&&(U.style.display=""),Se&&v.includes(Se)?Se:void 0},le=ue=>{if(N.removeEventListener("pointermove",re),N.removeEventListener("pointerup",le),N.removeEventListener("pointercancel",le),v.forEach(Fe=>Fe.classList.remove("over")),N.classList.remove("dragging"),!U)return;const Se=ue.type==="pointerup"?K(ue):void 0;U.remove(),Se&&B(Number(Se.getAttribute("data-slot")),M),setTimeout(()=>L=!1)};N.setPointerCapture(V.pointerId),N.addEventListener("pointermove",re),N.addEventListener("pointerup",le),N.addEventListener("pointercancel",le)}),C.append(N)}const F=Qe("button",{class:"learn-pap-check"},p("web_learn_check")),Y=Qe("button",{},p("web_learn_cloze_solution")),ne=Qe("button",{},p("web_learn_cloze_again"));Y.hidden=!0,ne.hidden=!0;const X=()=>{k=!0,F.hidden=!0,Y.hidden=!0,ne.hidden=!1,C.hidden=!0,ae.classList.add("done"),S&&(S.hidden=!1)};F.addEventListener("click",()=>{const M=x.filter(V=>V===void 0).length;let j=0;x.forEach((V,U)=>{const re=V!==void 0&&oE(i,U,V);v[U].classList.toggle("right",re),v[U].classList.toggle("wrong",V!==void 0&&!re),re&&j++});const N=j===i.nodes.length;I.textContent=N?p("web_learn_pap_all_right"):M?p("web_learn_pap_missing_fmt",M):p("web_learn_pap_score_fmt",j,i.nodes.length),I.className=`learn-pap-status ${N?"right":"wrong"}`,N?X():M||(Y.hidden=!1)}),Y.addEventListener("click",()=>{i.nodes.forEach((M,j)=>x[j]=j),z=void 0,A(),P(),v.forEach(M=>M.classList.add("shown")),X()}),ne.addEventListener("click",()=>{i.nodes.forEach((M,j)=>x[j]=void 0),k=!1,z=void 0,v.forEach(M=>M.classList.remove("shown")),P(),A(),F.hidden=!1,ne.hidden=!0,C.hidden=!1,ae.classList.remove("done"),S&&(S.hidden=!0)}),A();const he=Qe("div",{class:"learn-pap-left"});he.append(l),i.legend&&he.append(sN());const ae=Qe("div",{class:"learn-pap-work"},he,C);return e.append(ae,Qe("div",{class:"learn-pap-actions"},F,Y,ne),I),S&&e.append(S),e}const oN="code, pre, a, button, h1, h2, h3, h4, strong, .term, .ui-pointer";function Dm(i,e){var s;const t=[...i.querySelectorAll(".learn-text")],n=new Set;for(const r of t.flatMap(o=>[...o.querySelectorAll("strong")])){const o=am(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?sm(e,l[0]):void 0;u&&n.add(u)}let a=e.filter(r=>!n.has(r));for(const r of t){const o=document.createTreeWalker(r,NodeFilter.SHOW_TEXT),l=[];for(;o.nextNode();){const u=o.currentNode;(s=u.parentElement)!=null&&s.closest(oN)||l.push(u)}for(let u of l)for(;;){const m=am(a),c=m==null?void 0:m.exec(u.data),d=c?sm(a,c[0]):void 0;if(!c||!d)break;const h=u.splitText(c.index);u=h.splitText(c[0].length);const g=document.createElement("span");g.className="term",g.tabIndex=0,g.setAttribute("role","button"),g.setAttribute("aria-describedby","term-tip"),g.dataset.term=d.term,g.dataset.text=d.text,h.replaceWith(g),g.append(h),a=a.filter(f=>f!==d)}}}function lN(i){const e=document.createElement("div");e.id="term-tip",e.className="term-tip",e.setAttribute("role","tooltip"),e.hidden=!0,document.body.append(e);let t,n=!1;const a=o=>{t=o,e.replaceChildren();const l=document.createElement("strong");l.textContent=o.dataset.term??"",e.append(l,document.createTextNode(" "+(o.dataset.text??""))),e.hidden=!1;const u=o.getBoundingClientRect(),m=e.offsetWidth,c=e.offsetHeight,d=Math.max(8,Math.min(u.left,window.innerWidth-m-8)),h=u.bottom+6;e.style.left=`${d}px`,e.style.top=`${h+c>window.innerHeight-8?Math.max(8,u.top-c-6):h}px`,o.setAttribute("aria-expanded","true")},s=()=>{t==null||t.setAttribute("aria-expanded","false"),t=void 0,n=!1,e.hidden=!0},r=o=>{var l,u;return((u=(l=o.target)==null?void 0:l.closest)==null?void 0:u.call(l,".term"))??void 0};return i.addEventListener("pointerover",o=>{const l=r(o);l&&o.pointerType==="mouse"&&!n&&a(l)}),i.addEventListener("pointerout",o=>{r(o)&&o.pointerType==="mouse"&&!n&&s()}),i.addEventListener("click",o=>{const l=r(o);if(l){if(n&&t===l)return s();a(l),n=!0}}),i.addEventListener("focusin",o=>{const l=r(o);l&&!n&&a(l)}),i.addEventListener("focusout",o=>{r(o)&&!n&&s()}),i.addEventListener("keydown",o=>{const l=r(o);o.key==="Escape"&&t?s():l&&(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l.click())}),i.addEventListener("scroll",s,!0),document.addEventListener("pointerdown",o=>{t&&!r(o)&&!e.contains(o.target)&&s()}),{hide:s}}const qg={leiste:".topbar > .toolbar",editor:".editor-rail, .columns > .app",werkzeuge:".diagram-tools",dateien:".files-rail, .files",codelive:".live-rail, .livecode",ausfuehren:"[data-run=play]",konsole:".livecode .console",einzelschritt:"[data-run=step]",elemente:".palette",struktogramm:".canvas",objektinspektor:".inspector",reiter:".tabs",titel:".caption",neu:"[data-action=new]",oeffnen:"[data-action=open]",speichern:"[data-action=save]",exportieren:"[data-action=export]",rueckgaengig:"[data-action=undo]",loeschen:"[data-action=delete]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},Qg=new Set(["editor","werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","loeschen","exportieren","code","simulation"]),Ug=new Set(["ausfuehren","konsole","einzelschritt"]);function dr(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function Bm(i){return i==="elemente"?["editor","palette"]:Qg.has(i)?["editor"]:i==="codelive"||Ug.has(i)?["livecode"]:i==="dateien"?["files"]:[]}function uN(i){return dr(i,new Set(["elemente"]))}function mN(i){return dr(i,new Set(["dateien"]))}function cN(i){return dr(i,Qg)}function dN(i){return dr(i,Ug)}function Om(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in qg))continue;const n=document.createElement("span");n.className="ui-pointer",n.tabIndex=0,n.setAttribute("role","button"),n.dataset.target=t,n.append(...e.childNodes),e.replaceWith(n)}}function hN(i,e=()=>()=>{}){let t,n,a,s,r;const o=()=>{t==null||t.classList.remove("ui-spot"),t=void 0,window.clearTimeout(n)},l=(h,g)=>{o();const f=[...document.querySelectorAll(qg[h.dataset.target??""]??":not(*)")].find(b=>b.getClientRects().length>0);f&&(t=f,f.classList.add("ui-spot"),g&&(n=window.setTimeout(o,2500)))},u=(h,g)=>requestAnimationFrame(()=>{l(h,g),t==null||t.scrollIntoView({block:"nearest",inline:"nearest"})}),m=()=>{window.clearTimeout(s),window.clearTimeout(r),a==null||a(),a=void 0},c=h=>{window.clearTimeout(s),window.clearTimeout(r),a=void 0,e(Bm(h.dataset.target??"")),l(h,!0),u(h,!0)},d=h=>{var g,f;return((f=(g=h.target)==null?void 0:g.closest)==null?void 0:f.call(g,".ui-pointer"))??void 0};return i.addEventListener("pointerover",h=>{const g=d(h);!g||h.pointerType!=="mouse"||(window.clearTimeout(r),l(g,!1),window.clearTimeout(s),s=window.setTimeout(()=>{if(a)return;const f=Bm(g.dataset.target??"");f.length!==0&&(a=e(f),u(g,!1))},250))}),i.addEventListener("pointerout",h=>{!d(h)||h.pointerType!=="mouse"||(o(),window.clearTimeout(s),window.clearTimeout(r),r=window.setTimeout(m,400))}),i.addEventListener("click",h=>{const g=d(h);g&&c(g)}),i.addEventListener("focusin",h=>{const g=d(h);g&&l(g,!1)}),i.addEventListener("focusout",h=>{d(h)&&o()}),i.addEventListener("keydown",h=>{const g=d(h);g&&(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c(g))}),{off:()=>{m(),o()}}}const At='',gN=()=>{const i=[];for(const e of zt){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function _(i,e={},...t){const n=document.createElement(i);for(const[a,s]of Object.entries(e))n.setAttribute(a,s);return n.append(...t),n}function Ve(i,e,t){const n=_(i,e);return n.innerHTML=t,n}const pN=i=>p(`element_${T[i]}`);function fN(i){return{caption:i,elements:[Ce(T.anweisung,{textLines:["ø"]})]}}function Mm(i){const e=i.start?di(i.start):void 0;return e?{...e,caption:e.caption||i.title}:fN(i.title)}class bN{constructor(e){y(this,"element");y(this,"tab","lessons");y(this,"returnTo");y(this,"lessonId");y(this,"taskId");y(this,"body");y(this,"tips");y(this,"pointers");this.host=e,this.element=_("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=lN(this.element),this.pointers=hN(this.element,t=>this.host.reveal(t)),Bs(bm(o1())),this.restore()}restore(){const e=xe.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=zt.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Pn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),Bs(bm(o1()));const e=_("div",{class:"segmented learn-tabs",role:"tablist"});for(const[a,s]of[["lessons",p("web_learn_lessons")],["tasks",p("web_learn_tasks")],["reference",p("web_learn_reference")]]){const r=_("button",{role:"tab","aria-pressed":String(this.tab===a),"data-learn-tab":a},s);r.addEventListener("click",()=>{this.tab===a&&(a==="lessons"&&(this.lessonId=void 0),a==="tasks"&&(this.taskId=void 0)),this.tab=a,this.persist(),this.render()}),e.append(r)}const t=Ve("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},At);t.addEventListener("click",()=>this.host.collapse());const n=_("div",{class:"learn-head"},e,t);if(this.body=_("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=zt.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Pn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=es.map(r=>`- **${r.term}:** ${r.text}`).join(` `),s=Ve("div",{class:"learn-text learn-reference"},jn(`${Xa} ## ${p("web_learn_terms")} -${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=_("details",{class:"reference-group"});r.open=n.includes(s);const o=_("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){xe.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}showLesson(e){zt.some(t=>t.id===e)&&this.openLesson(e)}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(_("p",{class:"hint"},p("web_learn_intro")));for(const e of cN()){this.body.append(_("h3",{class:"learn-section"},e.name));const t=_("ol",{class:"learn-list"});for(const n of e.lessons){const a=xe.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=_("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},_("span",{class:"learn-num"},String(n.number)),_("span",{class:"learn-item-text"},_("strong",{},n.robot?`🤖 ${n.title}`:n.title),_("small",{},n.summary)),_("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(_("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=xe.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=_("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=_("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(_("div",{class:"learn-lesson-head"},_("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),_("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),_("h2",{class:"learn-title"},_("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,_("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=_("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),Bm(this.body),WE(this.body),this.openNeededColumns(a.blocks),Pm(this.body,es),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=_("div",{class:a}),r=_("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=_("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{xe.updateLesson(e.id,{done:!0});const l=zt.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){xe.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);lN(this.body)?(this.host.showEditor(),rN(this.body)&&this.host.reveal(["palette"])):oN(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),uN(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(_("p",{class:"hint"},p("web_learn_tasks_intro")));const e=_("ul",{class:"learn-list"});for(const t of Pn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>xe.exercise(o.id).done),s=zt.find(o=>o.number===t.after),r=_("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},_("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),_("span",{class:"learn-item-text"},_("strong",{},t.title),_("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),_("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(_("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=_("details",{class:"learn-teacher"},_("summary",{},p("web_learn_teacher")));if(wm()){e.setAttribute("open","");const s=_("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{AE(),this.render()}),e.append(_("p",{},p("web_learn_teacher_on")),s),e}const t=_("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=_("p",{class:"learn-result",role:"status"}),a=_("form",{class:"group"},t,_("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await CE(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(_("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=_("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=zt.find(a=>a.number===e.after);if(this.body.append(t,_("h2",{class:"learn-title"},e.title)),n){const a=_("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(_("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Bm(this.body),this.openNeededColumns(e.blocks),Pm(this.body,es)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(Ve("div",{class:"learn-text"},jn(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return e.animated?this.renderAnimation(e.file,e.caption):this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return NE(e.game,x1);case"rescueGame":return HE(e.game,x1);case"driveGame":return YE(e.game,x1);case"crosswordGame":return VE(e.game,x1);case"caesar":return ME(e.key,e.text);case"cloze":return $E(e.cloze);case"pap":return iN(e.pap);case"textFile":return Eg(e.name,e.content);case"robotModel":return LE(e.focus,e.view,e.spin);case"robotQuiz":return EE(e.tasks,e.done)}}renderBrag(e,t=!1){const n=_("aside",{class:"learn-brag"});n.append(_("img",{src:x1,alt:"",width:"48",height:"48"}));const a=_("div",{},_("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(Ve("div",{class:"learn-text"},jn(e))),n.append(a),n}renderGame(e){const n=_("section",{class:"learn-game"}),a=_("div",{class:"learn-game-head"});a.append(_("img",{src:x1,alt:"",width:"40",height:"40"}),_("strong",{},p("web_game_title")));const s=_("p",{class:"learn-game-status"}),r=_("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=e4(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=_("div",{class:"learn-game-values mono"});for(const[w,z]of t4(d))h.append(_("code",{},`${w} = ${z}`));const g=_("div",{class:"group learn-game-answers"}),f=_("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),b=_("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,b);const x=_("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=b.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,x.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=_("div",{class:"learn-game-steps mono"});Kx(d.condition,d.values).forEach((k,P)=>I.append(_("div",{},`${P?"→ ":""}${k}`)));const S=_("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));S.addEventListener("click",()=>{o++,o<10?u():m()}),x.replaceChildren(_("p",{},p(z?"web_game_right":"web_game_wrong")),I,S),S.focus()};f.addEventListener("click",()=>v(!0)),b.addEventListener("click",()=>v(!1)),r.replaceChildren(h,_("div",{class:"learn-game-condition mono"},d.condition),g,x)},m=()=>{s.textContent="";const d=_("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(_("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),_("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=_("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(_("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=_("figure",{class:"learn-figure"}),a=_("div",{class:"learn-images"});for(const s of e){const r=va(s);r&&a.append(_("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(Ve("figcaption",{},je(t))),n}renderGraphic(e,t,n){const a=_("figure",{class:"learn-figure"}),s=va(e),r=n?va(n):void 0;if(s&&r){const o=_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=_("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,_("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(Ve("figcaption",{},je(t))),a}renderAnimation(e,t){const n=_("figure",{class:"learn-figure"}),a=va(e);if(!a)return n;const s=_("div",{class:"learn-graphic learn-animation"}),r=_("button",{class:"learn-replay",type:"button"},`↻ ${p("web_learn_replay")}`);let o=()=>{};return fetch(a).then(l=>l.text()).then(l=>{var d,h;s.innerHTML=l;const u=s.querySelector("svg"),m=(h=(d=u==null?void 0:u.getAttribute("class"))==null?void 0:d.match(/(\S+-)svg\b/))==null?void 0:h[1];if(!u||!m)return;if(o=()=>{u.classList.remove(`${m}play`),u.getBoundingClientRect(),u.classList.add(`${m}play`)},typeof IntersectionObserver>"u")return o();const c=new IntersectionObserver(g=>{g.some(f=>f.isIntersecting)&&(c.disconnect(),o())},{threshold:.6});c.observe(s)}).catch(()=>s.append(_("img",{src:a,alt:""}))),r.addEventListener("click",()=>o()),n.append(s,r),t&&n.append(Ve("figcaption",{},je(t))),n}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=_("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=di(e),a=_("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(_("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(Ve("figcaption",{},je(t)));const r=_("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=_("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>xe.exercise(e.id),a=_("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(_("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),pN(e),Ve("div",{class:"learn-text"},jn(e.task)));const s=_("div",{class:"learn-result",role:"status"}),r=_("div",{class:"learn-hints"}),o=_("div",{class:"group"}),l=_("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=Om(e);if(c)try{d=n0(c)}catch{}this.host.openExercise(e,d)});const u=_("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Kl)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=qx(c,e.tests,this.host.subprogramsFor(e.id),ts),h=Qx(c),g=e.requires.map(x=>x==="forZaehlSchleife"?"forSchleife":x).filter(x=>x in T&&!h.has(T[x])),f=e.loopDepth!==void 0&&Yo(c.elements)x.passed)&&g.length===0&&!f;this.showResult(s,d,g,b,f),b&&(xe.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=_("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(Ve("aside",{class:"lesson-note"},jn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=_("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}xe.resetExercise(e.id),this.host.resetExercise(e.id,Om(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),wm()&&e.solution){const c=di(e.solution);if(c){const d=_("details",{class:"learn-solution"},_("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(_("div",{class:"learn-preview",dir:"ltr"},h));const g=_("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const b=di(f);b&&this.host.openDiagram(b,f)}});for(const f of e.subprograms){const b=di(f),x=b&&this.host.preview(b);x&&d.append(_("div",{class:"learn-preview",dir:"ltr"},x))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(_("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(_("p",{},`✗ ${p("web_learn_missing_fmt",dN(T[d]))}`));s&&e.append(_("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=_("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(x=>x.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([x,v])=>`mbot.${x}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],b=_("div",{class:"learn-test-detail"});if(d.test.drive&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},mi(d.test.drive)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},mi(d.result.drive??[])||"–"))),d.test.actions&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},mi(d.test.actions)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},mi(d.result.actions??[])||"–"))),d.test.led!==void 0){const x=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");b.append(_("span",{},`💡 ${p("web_learn_expected")}: ${x(d.test.led)} · ${p("web_learn_actual")}: ${x(d.result.led)}`))}if(d.test.tone!==void 0){const x=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");b.append(_("span",{},`🔊 ${p("web_learn_expected")}: ${x(d.test.tone)} · ${p("web_learn_actual")}: ${x(d.result.tone)}`))}d.test.screen!==void 0&&b.append(_("span",{},`📺 ${p("web_learn_expected")}: `,_("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,_("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=ts(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=ts(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&b.append(_("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&b.append(_("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},d.test.expected.join(" | ")||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},d.result.outputs.join(" | ")||"–")));for(const x of d.test.files??[])b.append(_("span",{},`📄 ${x.name}, ${p("web_learn_expected")}: `,_("code",{},x.lines.join(" | ")||"–")),_("span",{},`📄 ${x.name}, ${p("web_learn_actual")}: `,_("code",{},gg((c=d.result.files)==null?void 0:c.get(x.name)).join(" | ")||"–")));!d.passed&&!d.result.error&&Vx(d.result.outputs,d.test.expected)&&b.append(_("span",{class:"learn-error"},p("web_learn_missing_line_break"))),d.result.error&&b.append(_("span",{class:"learn-error"},i1(d.result.error))),d.result.missingInput&&b.append(_("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&b.append(_("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&b.append(_("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(_("li",{class:d.passed?"ok":"fail"},...f,b))}e.append(r)}renderCompetences(e){const t=_("aside",{class:"learn-competences"},_("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=_("ul",{});for(const a of e)n.append(Ve("li",{},je(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=_("div",{class:"learn-checklist-wrap"}),r=_("p",{class:"learn-rating-legend"});for(const l of a)r.append(_("span",{},`${l.icon} ${l.label}`));const o=_("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=xe.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=Ve("span",{class:"learn-check-text"},je(l.text)),g=_("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=_("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,b(),!n)return;const I={...xe.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],xe.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),b=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),x.dataset.rating=d??""};g.append(...f);const x=_("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=_("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:xe.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),x.append(I)}b(),o.append(x)}),s}renderQuiz(e,t,n){const a=_("div",{class:"learn-quiz"}),s=_("p",{class:"learn-score",role:"status"}),r=()=>n?xe.lesson(n.id).quiz??{}:{},o=_("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,b)=>f.pairs?f.pairs.every((x,v)=>u[`${t}-${b}-${v}`]!==void 0):u[`${t}-${b}`]!==void 0,c=(f,b)=>{var x;return!!(f.pairs?f.pairs.every((v,w)=>Mm(f)[u[`${t}-${b}-${w}`]]===f.pairs[w].right):(x=f.options[u[`${t}-${b}`]])!=null&&x.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=_("fieldset",{},Ve("legend",{},je(u.question))),h=Ve("p",{class:"learn-explanation"},je(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((b,x)=>{b.classList.toggle("right",f!==void 0&&u.options[x].correct),b.classList.toggle("wrong",f===x&&!u.options[x].correct),b.setAttribute("aria-pressed",String(f===x))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,b)=>{const x=Ve("button",{class:"learn-option"},je(f.text));x.addEventListener("click",()=>{n&&xe.updateLesson(n.id,{quiz:{...r(),[c]:b}}),g(b),l()}),d.append(x)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=xe.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],b=f===!0?"sun":f||void 0,x=h.step===void 0?[]:n.map((S,k)=>S.step===h.step?k:-1).filter(S=>S>=0),v=x.filter(S=>!a(S));let w="";b==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(S=>S+1).join(", ")):b&&b!=="sun"&&x.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=_("li",{class:w?"learn-review-deviation":""}),I=Ve("span",{class:"learn-check-text"},je(h.text));if(w&&I.append(_("br",{}),_("em",{},w)),z.append(I,_("span",{class:"learn-review-icon","aria-label":p(b?`web_learn_rating_${b}`:"web_learn_review_unrated")},b?s[b]:"–")),w&&b==="sun"&&h.step!==void 0){const S=h.step,k=_("button",{class:"link-button learn-check-link"},p("web_learn_review"));k.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:xe.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,S)}),z.append(k)}o.push(z)})})),o.length&&e.append(_("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),_("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),_("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=Mm(e),u=_("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=b=>a?xe.updateLesson(a.id,{quiz:b}):m=b,h=b=>c()[`${t}-${b}`],g=o.map(b=>{const x=_("select",{class:"learn-match-select"});x.append(_("option",{value:""},"–")),l.forEach((w,z)=>x.append(_("option",{value:String(z)},w)));const v=Ve("label",{class:"learn-match-left"},je(b.left));return v.append(x),u.append(v),x}),f=()=>{const b=o.every((x,v)=>h(v)!==void 0);g.forEach((x,v)=>{const w=h(v);x.value=w===void 0?"":String(w),x.classList.toggle("right",b&&l[w]===o[v].right),x.classList.toggle("wrong",b&&l[w]!==o[v].right)}),s.hidden=!b||!e.explanation};return g.forEach((b,x)=>b.addEventListener("change",()=>{const v={...c()};b.value===""?delete v[`${t}-${x}`]:v[`${t}-${x}`]=Number(b.value),d(v),f(),r()})),f(),u}}function Mm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function pN(i){const e=Pg(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=_("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(_("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const fN=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,hr="visustruct.visubot";function gr(){try{return localStorage.getItem(hr)}catch{return null}}function wi(){const i=gr();return i==="1"||i==="kurs"?"on":"off"}const Ug=()=>gr()==="2";function tl(){try{localStorage.setItem(hr,"2")}catch{}}const Yg=()=>gr()==="3";function $g(){try{localStorage.setItem(hr,"3")}catch{}}const Kg=()=>gr()!==null;function ns(i){try{localStorage.setItem(hr,i==="on"?"1":"0")}catch{}}const bN=`VisuBot`,qn=()=>wi()!=="off",Zm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function nl(){const i=Ug()?"object":Yg()?"flow":wi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
+${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="visustruct.reference.open";let n=[];try{n=JSON.parse(localStorage.getItem(t)??"[]")}catch{}for(const a of[...e.querySelectorAll("h2")]){const s=a.textContent??"",r=_("details",{class:"reference-group"});r.open=n.includes(s);const o=_("summary",{},s);for(a.replaceWith(r),r.append(o);r.nextSibling&&r.nextSibling.nodeName!=="H2";)r.append(r.nextSibling);r.addEventListener("toggle",()=>{n=r.open?[...new Set([...n,s])]:n.filter(l=>l!==s);try{localStorage.setItem(t,JSON.stringify(n))}catch{}})}}showReference(){this.tab="reference",this.persist(),this.render()}persist(){xe.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}showLesson(e){zt.some(t=>t.id===e)&&this.openLesson(e)}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(_("p",{class:"hint"},p("web_learn_intro")));for(const e of gN()){this.body.append(_("h3",{class:"learn-section"},e.name));const t=_("ol",{class:"learn-list"});for(const n of e.lessons){const a=xe.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=_("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},_("span",{class:"learn-num"},String(n.number)),_("span",{class:"learn-item-text"},_("strong",{},n.robot?`🤖 ${n.title}`:n.title),_("small",{},n.summary)),_("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(_("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=xe.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=_("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=_("nav",{class:"learn-progress","aria-label":p("web_learn_step_of_fmt",n+1,e.steps.length)});r.append(...e.steps.map((m,c)=>{const d=p("web_learn_step_fmt",c+1,m.title),h=cthis.goToStep(e,c)),g})),this.body.append(_("div",{class:"learn-lesson-head"},_("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),_("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),_("h2",{class:"learn-title"},_("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,_("h3",{class:"learn-step-title"},`${n+1}. ${a.title}`)));const o=((u=this.returnTo)==null?void 0:u.lesson)===e.id&&this.returnTo.step!==n?this.returnTo:void 0,l=()=>{const m=_("button",{class:"learn-return"},`↩ ${p("web_learn_back_to_checklist")}`);return m.addEventListener("click",()=>{this.returnTo=void 0,this.goToStep(e,o.step),this.body.scrollTop=o.scroll}),m};o&&this.body.append(l()),a.blocks.forEach((m,c)=>this.body.append(this.renderBlock(m,`${n}-${c}`,e))),Om(this.body),FE(this.body),this.openNeededColumns(a.blocks),Dm(this.body,es),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=_("div",{class:a}),r=_("button",{},`← ${p("web_learn_back")}`);if(r.disabled=t===0,r.addEventListener("click",()=>this.goToStep(e,t-1)),s.append(r),tthis.goToStep(e,t+1)),s.append(o)}else{const o=_("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{xe.updateLesson(e.id,{done:!0});const l=zt.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){xe.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);cN(this.body)?(this.host.showEditor(),uN(this.body)&&this.host.reveal(["palette"])):mN(this.body)?this.host.showFiles():t.some(n=>n.code!=="java")?this.host.showEditor():(t.length>0||this.body.querySelector(".lesson-code[data-lang=java]"))&&this.host.showJava(),dN(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(_("p",{class:"hint"},p("web_learn_tasks_intro")));const e=_("ul",{class:"learn-list"});for(const t of Pn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>xe.exercise(o.id).done),s=zt.find(o=>o.number===t.after),r=_("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},_("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),_("span",{class:"learn-item-text"},_("strong",{},t.title),_("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),_("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(_("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=_("details",{class:"learn-teacher"},_("summary",{},p("web_learn_teacher")));if(zm()){e.setAttribute("open","");const s=_("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{BE(),this.render()}),e.append(_("p",{},p("web_learn_teacher_on")),s),e}const t=_("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=_("p",{class:"learn-result",role:"status"}),a=_("form",{class:"group"},t,_("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await DE(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(_("p",{class:"hint"},p("web_learn_teacher_intro")),a,n),e}taskExercises(e){return e.blocks.flatMap(t=>t.kind==="exercise"?[t.exercise]:[])}renderTask(e){const t=_("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=zt.find(a=>a.number===e.after);if(this.body.append(t,_("h2",{class:"learn-title"},e.title)),n){const a=_("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(_("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Om(this.body),this.openNeededColumns(e.blocks),Dm(this.body,es)}renderBlock(e,t,n){switch(e.kind){case"markdown":return this.withOpenButtons(Ve("div",{class:"learn-text"},jn(e.text)));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);case"competences":return this.renderCompetences(e.items);case"checklist":return this.renderChecklist(e.items,t,n);case"quiz":return this.renderQuiz(e.questions,t,n);case"brag":return this.renderBrag(e.text,e.tip);case"images":return this.renderImages(e.files,e.caption);case"graphic":return e.animated?this.renderAnimation(e.file,e.caption):this.renderGraphic(e.file,e.caption,e.labeled);case"game":return this.renderGame(e.game);case"roundGame":return JE(e.game,x1);case"rescueGame":return QE(e.game,x1);case"driveGame":return XE(e.game,x1);case"crosswordGame":return UE(e.game,x1);case"caesar":return WE(e.key,e.text);case"cloze":return eN(e.cloze);case"pap":return rN(e.pap);case"textFile":return Ng(e.name,e.content);case"robotModel":return NE(e.focus,e.view,e.spin);case"robotQuiz":return RE(e.tasks,e.done)}}renderBrag(e,t=!1){const n=_("aside",{class:"learn-brag"});n.append(_("img",{src:x1,alt:"",width:"48",height:"48"}));const a=_("div",{},_("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(Ve("div",{class:"learn-text"},jn(e))),n.append(a),n}renderGame(e){const n=_("section",{class:"learn-game"}),a=_("div",{class:"learn-game-head"});a.append(_("img",{src:x1,alt:"",width:"40",height:"40"}),_("strong",{},p("web_game_title")));const s=_("p",{class:"learn-game-status"}),r=_("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=t4(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=_("div",{class:"learn-game-values mono"});for(const[w,z]of n4(d))h.append(_("code",{},`${w} = ${z}`));const g=_("div",{class:"group learn-game-answers"}),f=_("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),b=_("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,b);const x=_("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=b.disabled=!0;const z=w===d.answer;z&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,x.className=`learn-game-feedback ${z?"right":"wrong"}`;const I=_("div",{class:"learn-game-steps mono"});Xx(d.condition,d.values).forEach((k,P)=>I.append(_("div",{},`${P?"→ ":""}${k}`)));const S=_("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));S.addEventListener("click",()=>{o++,o<10?u():m()}),x.replaceChildren(_("p",{},p(z?"web_game_right":"web_game_wrong")),I,S),S.focus()};f.addEventListener("click",()=>v(!0)),b.addEventListener("click",()=>v(!1)),r.replaceChildren(h,_("div",{class:"learn-game-condition mono"},d.condition),g,x)},m=()=>{s.textContent="";const d=_("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(_("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),_("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=_("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(_("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=_("figure",{class:"learn-figure"}),a=_("div",{class:"learn-images"});for(const s of e){const r=va(s);r&&a.append(_("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(Ve("figcaption",{},je(t))),n}renderGraphic(e,t,n){const a=_("figure",{class:"learn-figure"}),s=va(e),r=n?va(n):void 0;if(s&&r){const o=_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}),l=_("button",{class:"learn-graphic-toggle",type:"button",title:p("web_learn_graphic_labels"),"aria-pressed":"false"},o);l.addEventListener("click",()=>{const u=l.getAttribute("aria-pressed")!=="true";l.setAttribute("aria-pressed",String(u)),o.src=u?r:s}),a.append(l,_("p",{class:"learn-graphic-hint"},p("web_learn_graphic_labels")))}else s&&a.append(_("img",{class:"learn-graphic",src:s,alt:"",loading:"lazy"}));return t&&a.append(Ve("figcaption",{},je(t))),a}renderAnimation(e,t){const n=_("figure",{class:"learn-figure"}),a=va(e);if(!a)return n;const s=_("div",{class:"learn-graphic learn-animation"}),r=_("button",{class:"learn-replay",type:"button"},`↻ ${p("web_learn_replay")}`);let o=()=>{};return fetch(a).then(l=>l.text()).then(l=>{var d,h;s.innerHTML=l;const u=s.querySelector("svg"),m=(h=(d=u==null?void 0:u.getAttribute("class"))==null?void 0:d.match(/(\S+-)svg\b/))==null?void 0:h[1];if(!u||!m)return;if(o=()=>{u.classList.remove(`${m}play`),u.getBoundingClientRect(),u.classList.add(`${m}play`)},typeof IntersectionObserver>"u")return o();const c=new IntersectionObserver(g=>{g.some(f=>f.isIntersecting)&&(c.disconnect(),o())},{threshold:.6});c.observe(s)}).catch(()=>s.append(_("img",{src:a,alt:""}))),r.addEventListener("click",()=>o()),n.append(s,r),t&&n.append(Ve("figcaption",{},je(t))),n}withOpenButtons(e){for(const t of e.querySelectorAll("pre.lesson-code[data-open=editor]")){const n=t.textContent??"",a=_("button",{class:"learn-open-code"},p("web_learn_open_in_editor"));a.addEventListener("click",()=>this.host.openJavaCode(n)),t.after(a)}return e}renderDiagram(e,t){const n=di(e),a=_("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(_("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(Ve("figcaption",{},je(t)));const r=_("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=_("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>xe.exercise(e.id),a=_("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(_("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),xN(e),Ve("div",{class:"learn-text"},jn(e.task)));const s=_("div",{class:"learn-result",role:"status"}),r=_("div",{class:"learn-hints"}),o=_("div",{class:"group"}),l=_("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=Mm(e);if(c)try{d=n0(c)}catch{}this.host.openExercise(e,d)});const u=_("button",{},p("web_learn_check"));if(u.addEventListener("click",()=>{const c=this.host.exerciseDocument(e.id);if(!c){s.className="learn-result info",s.textContent=p("web_learn_open_first");return}if(c.elements.every(Kl)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Qx(c,e.tests,this.host.subprogramsFor(e.id),ts),h=Ux(c),g=e.requires.map(x=>x==="forZaehlSchleife"?"forSchleife":x).filter(x=>x in T&&!h.has(T[x])),f=e.loopDepth!==void 0&&Yo(c.elements)x.passed)&&g.length===0&&!f;this.showResult(s,d,g,b,f),b&&(xe.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=_("button",{},p("web_learn_hint"));c.addEventListener("click",()=>{const d=r.children.length;if(d>=e.hints.length)return;const h=e.hints.length>1?`**${p("web_learn_hint_fmt",d+1,e.hints.length)}:** `:"";r.append(Ve("aside",{class:"lesson-note"},jn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=_("button",{class:"danger-text"},p("web_learn_reset"));if(m.addEventListener("click",()=>{if(m.dataset.confirm!=="1"){m.dataset.confirm="1",m.textContent=p("web_learn_reset_confirm"),setTimeout(()=>{m.dataset.confirm="",m.textContent=p("web_learn_reset")},4e3);return}xe.resetExercise(e.id),this.host.resetExercise(e.id,Mm(e)),a.hidden=!0,s.replaceChildren(),s.className="learn-result",m.dataset.confirm="",m.textContent=p("web_learn_reset")}),o.append(m),t.append(o,r,s),zm()&&e.solution){const c=di(e.solution);if(c){const d=_("details",{class:"learn-solution"},_("summary",{},p("web_learn_solution")));d.addEventListener("toggle",()=>{if(!d.open||d.querySelector(".learn-preview"))return;const h=this.host.preview(c);h&&d.append(_("div",{class:"learn-preview",dir:"ltr"},h));const g=_("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const b=di(f);b&&this.host.openDiagram(b,f)}});for(const f of e.subprograms){const b=di(f),x=b&&this.host.preview(b);x&&d.append(_("div",{class:"learn-preview",dir:"ltr"},x))}d.append(g)}),t.append(d)}}return t}showResult(e,t,n,a,s){var o,l,u,m,c;e.className="learn-result "+(a?"ok":"fail"),e.replaceChildren(_("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(_("p",{},`✗ ${p("web_learn_missing_fmt",pN(T[d]))}`));s&&e.append(_("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=_("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(x=>x.test.world).indexOf(d)+1:0,g=d.test.world?`🗺 ${p("web_visubot_world_fmt",h)}`:d.test.actions?`🤖 ${p("web_visubot_actions")}`:d.test.sensors?`🎛 ${Object.entries(d.test.sensors).map(([x,v])=>`mbot.${x}() = ${v.join(" → ")}`).join(", ")}`:d.test.drive?`🤖 ${p("web_visubot_drive")}`:d.test.inputs.length?p("web_learn_input_fmt",d.test.inputs.join(", ")):p("web_learn_no_input"),f=[`${d.passed?"✓":"✗"} ${g}`],b=_("div",{class:"learn-test-detail"});if(d.test.drive&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},mi(d.test.drive)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},mi(d.result.drive??[])||"–"))),d.test.actions&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},mi(d.test.actions)||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},mi(d.result.actions??[])||"–"))),d.test.led!==void 0){const x=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");b.append(_("span",{},`💡 ${p("web_learn_expected")}: ${x(d.test.led)} · ${p("web_learn_actual")}: ${x(d.result.led)}`))}if(d.test.tone!==void 0){const x=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");b.append(_("span",{},`🔊 ${p("web_learn_expected")}: ${x(d.test.tone)} · ${p("web_learn_actual")}: ${x(d.result.tone)}`))}d.test.screen!==void 0&&b.append(_("span",{},`📺 ${p("web_learn_expected")}: `,_("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,_("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=ts(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=ts(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&b.append(_("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&b.append(_("span",{class:"learn-error"},`⚠︎ ${p("web_visubot_bumps")}: ${d.result.bumps}`))),(!d.test.drive&&!d.test.world&&!d.test.sensors&&!d.test.actions||d.result.outputs.length)&&b.append(_("span",{},`${p("web_learn_expected")}: `,_("code",{},d.test.expected.join(" | ")||"–")),_("span",{},`${p("web_learn_actual")}: `,_("code",{},d.result.outputs.join(" | ")||"–")));for(const x of d.test.files??[])b.append(_("span",{},`📄 ${x.name}, ${p("web_learn_expected")}: `,_("code",{},x.lines.join(" | ")||"–")),_("span",{},`📄 ${x.name}, ${p("web_learn_actual")}: `,_("code",{},pg((c=d.result.files)==null?void 0:c.get(x.name)).join(" | ")||"–")));!d.passed&&!d.result.error&&qx(d.result.outputs,d.test.expected)&&b.append(_("span",{class:"learn-error"},p("web_learn_missing_line_break"))),d.result.error&&b.append(_("span",{class:"learn-error"},i1(d.result.error))),d.result.missingInput&&b.append(_("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&b.append(_("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&b.append(_("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(_("li",{class:d.passed?"ok":"fail"},...f,b))}e.append(r)}renderCompetences(e){const t=_("aside",{class:"learn-competences"},_("p",{class:"learn-competences-title"},p("web_learn_competences_intro"))),n=_("ul",{});for(const a of e)n.append(Ve("li",{},je(a)));return t.append(n),t}renderChecklist(e,t,n){const a=[{value:"umbrella",icon:"☂️",label:p("web_learn_rating_umbrella")},{value:"cloud",icon:"⛅",label:p("web_learn_rating_cloud")},{value:"sun",icon:"☀️",label:p("web_learn_rating_sun")}],s=_("div",{class:"learn-checklist-wrap"}),r=_("p",{class:"learn-rating-legend"});for(const l of a)r.append(_("span",{},`${l.icon} ${l.label}`));const o=_("ul",{class:"learn-checklist"});return s.append(r,o),e.forEach((l,u)=>{var v;const m=`${t}-${u}`,c=n?(v=xe.lesson(n.id).checks)==null?void 0:v[m]:void 0;let d=c===!0?"sun":c||void 0;const h=Ve("span",{class:"learn-check-text"},je(l.text)),g=_("span",{class:"learn-rating",role:"group","aria-label":h.textContent??""}),f=a.map(w=>{const z=_("button",{class:"learn-rating-button",title:w.label,"aria-label":w.label},w.icon);return z.addEventListener("click",()=>{if(d=d===w.value?void 0:w.value,b(),!n)return;const I={...xe.lesson(n.id).checks??{}};d?I[m]=d:delete I[m],xe.updateLesson(n.id,{checks:Object.keys(I).length?I:void 0})}),z}),b=()=>{f.forEach((w,z)=>w.setAttribute("aria-pressed",String(a[z].value===d))),x.dataset.rating=d??""};g.append(...f);const x=_("li",{},h,g);if(n&&l.step!==void 0){const w=l.step,z=p("web_learn_step_fmt",w+1,n.steps[w].title),I=_("button",{class:"link-button learn-check-link",title:z,"aria-label":`${p("web_learn_review")}: ${z}`},p("web_learn_review"));I.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:xe.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,w)}),x.append(I)}b(),o.append(x)}),s}renderQuiz(e,t,n){const a=_("div",{class:"learn-quiz"}),s=_("p",{class:"learn-score",role:"status"}),r=()=>n?xe.lesson(n.id).quiz??{}:{},o=_("div",{class:"learn-review"}),l=()=>{const u=r(),m=(f,b)=>f.pairs?f.pairs.every((x,v)=>u[`${t}-${b}-${v}`]!==void 0):u[`${t}-${b}`]!==void 0,c=(f,b)=>{var x;return!!(f.pairs?f.pairs.every((v,w)=>Zm(f)[u[`${t}-${b}-${w}`]]===f.pairs[w].right):(x=f.options[u[`${t}-${b}`]])!=null&&x.correct)},d=e.filter(m).length,h=e.filter(c).length,g=d===e.length;s.textContent=g?p("web_learn_score_fmt",h,e.length):"",o.replaceChildren(),g&&n&&this.fillChecklistReview(o,n,e,f=>c(e[f],f))};return e.forEach((u,m)=>{const c=`${t}-${m}`,d=_("fieldset",{},Ve("legend",{},je(u.question))),h=Ve("p",{class:"learn-explanation"},je(u.explanation??""));if(u.pairs){d.append(this.renderMatch(u,c,r,n,h,l),h),a.append(d);return}const g=f=>{d.querySelectorAll("button").forEach((b,x)=>{b.classList.toggle("right",f!==void 0&&u.options[x].correct),b.classList.toggle("wrong",f===x&&!u.options[x].correct),b.setAttribute("aria-pressed",String(f===x))}),h.hidden=f===void 0||!u.explanation};u.options.forEach((f,b)=>{const x=Ve("button",{class:"learn-option"},je(f.text));x.addEventListener("click",()=>{n&&xe.updateLesson(n.id,{quiz:{...r(),[c]:b}}),g(b),l()}),d.append(x)}),d.append(h),g(r()[c]),a.append(d)}),a.append(s,o),l(),a}fillChecklistReview(e,t,n,a){const s={sun:"☀️",cloud:"⛅",umbrella:"☂️"},r=xe.lesson(t.id).checks??{},o=[];let l=0;t.steps.forEach((u,m)=>u.blocks.forEach((c,d)=>{c.kind==="checklist"&&c.items.forEach((h,g)=>{const f=r[`${m}-${d}-${g}`],b=f===!0?"sun":f||void 0,x=h.step===void 0?[]:n.map((S,k)=>S.step===h.step?k:-1).filter(S=>S>=0),v=x.filter(S=>!a(S));let w="";b==="sun"&&v.length?w=p("web_learn_review_overrated_fmt",v.map(S=>S+1).join(", ")):b&&b!=="sun"&&x.length&&!v.length&&(w=p("web_learn_review_underrated")),w&&l++;const z=_("li",{class:w?"learn-review-deviation":""}),I=Ve("span",{class:"learn-check-text"},je(h.text));if(w&&I.append(_("br",{}),_("em",{},w)),z.append(I,_("span",{class:"learn-review-icon","aria-label":p(b?`web_learn_rating_${b}`:"web_learn_review_unrated")},b?s[b]:"–")),w&&b==="sun"&&h.step!==void 0){const S=h.step,k=_("button",{class:"link-button learn-check-link"},p("web_learn_review"));k.addEventListener("click",()=>{this.returnTo={lesson:t.id,step:xe.lesson(t.id).step,scroll:this.body.scrollTop},this.goToStep(t,S)}),z.append(k)}o.push(z)})})),o.length&&e.append(_("p",{class:"learn-review-title"},`📋 ${p("web_learn_review_title")}`),_("p",{},p(l?"web_learn_review_hint":"web_learn_review_match")),_("ul",{class:"learn-checklist"},...o))}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=Zm(e),u=_("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=b=>a?xe.updateLesson(a.id,{quiz:b}):m=b,h=b=>c()[`${t}-${b}`],g=o.map(b=>{const x=_("select",{class:"learn-match-select"});x.append(_("option",{value:""},"–")),l.forEach((w,z)=>x.append(_("option",{value:String(z)},w)));const v=Ve("label",{class:"learn-match-left"},je(b.left));return v.append(x),u.append(v),x}),f=()=>{const b=o.every((x,v)=>h(v)!==void 0);g.forEach((x,v)=>{const w=h(v);x.value=w===void 0?"":String(w),x.classList.toggle("right",b&&l[w]===o[v].right),x.classList.toggle("wrong",b&&l[w]!==o[v].right)}),s.hidden=!b||!e.explanation};return g.forEach((b,x)=>b.addEventListener("change",()=>{const v={...c()};b.value===""?delete v[`${t}-${x}`]:v[`${t}-${x}`]=Number(b.value),d(v),f(),r()})),f(),u}}function Zm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}function xN(i){const e=Dg(i),t=e==="beide"?"web_learn_solve_in_both":e==="code"?"web_learn_solve_in_code":"web_learn_solve_in_editor",n={editor:p("web_editor_title"),code:p("web_live_title")},a=e==="beide"?["editor","code"]:[e==="code"?"code":"editor"],s=_("p",{class:`learn-where learn-where-${e}`});for(const r of p(t,...a).split(/(\u0001(?:editor|code))/))if(r==="editor"||r==="code"){const o=r.slice(1);s.append(_("span",{class:`area-name area-${o}`},n[o]))}else r&&s.append(r);return s}const vN=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,hr="visustruct.visubot";function gr(){try{return localStorage.getItem(hr)}catch{return null}}function wi(){const i=gr();return i==="1"||i==="kurs"?"on":"off"}const Yg=()=>gr()==="2";function tl(){try{localStorage.setItem(hr,"2")}catch{}}const $g=()=>gr()==="3";function Kg(){try{localStorage.setItem(hr,"3")}catch{}}const Xg=()=>gr()!==null;function ns(i){try{localStorage.setItem(hr,i==="on"?"1":"0")}catch{}}const yN=`VisuBot`,qn=()=>wi()!=="off",Lm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function nl(){const i=Yg()?"object":$g()?"flow":wi(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint",flow:"web_visuflow_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","VisuBot")}${e("object","VisuObject")}${e("flow","VisuFlow")}
- ${Zm(p(t))}`}class xN{constructor(e=Mi){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new _s(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${vN()}${yN()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=be.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=ee(async()=>{const{Robot3D:e}=await import("./robot3d-K0yfmoba.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??Mi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new _s(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;be.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>be.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&be.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!be.connected)break;const t=e.dataset.sensor,n=await be.ask(Pt[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof Pt[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return be.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await be.ask(Pt[a].python);typeof Pt[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof Pt[a].simulated=="string"?n[a]=typeof s=="string"?s:String(Pt[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){be.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=ep(),this.liveStatus.classList.toggle("connected",be.connected),this.check.hidden=!be.connected,be.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(z0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&be.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let ni;function Xg(i,e){try{ni??(ni=new AudioContext);const t=ni.createOscillator(),n=ni.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(ni.destination);const a=ni.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function vN(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} + ${Lm(p(t))}`}class wN{constructor(e=Mi){y(this,"element");y(this,"world");y(this,"view");y(this,"loading");y(this,"status");y(this,"stage");y(this,"picker");y(this,"applied",0);y(this,"sent",0);y(this,"liveStatus");y(this,"viewport");y(this,"stopListening");y(this,"realSensors");y(this,"controls",{getBrightness:50,getLoudness:0,getPitch:0,getRoll:0});y(this,"pressTimers",new Map);y(this,"check");y(this,"checking",!1);y(this,"onWorldChange");this.world=new _s(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${zN()}${IN()}`,this.stage=this.element.querySelector(".visubot-stage"),this.picker=this.element.querySelector(".visubot-worlds"),this.status=this.element.querySelector(".visubot-status"),this.liveStatus=this.element.querySelector(".visubot-live"),this.viewport=this.element.querySelector(".visubot-viewport"),this.stopListening=be.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=ee(async()=>{const{Robot3D:e}=await import("./robot3d-QiT3_7Hv.js");return{Robot3D:e}},[],import.meta.url).then(({Robot3D:e})=>{this.view=new e(this.stage),this.view.setWorld(this.world.setup),this.view.place(this.world.pose,this.world.trail),this.view.setLeds(this.world.leds)}).catch(()=>{this.stage.textContent=p("web_visubot_no_3d")}))}restoreViewport(){this.viewport.parentElement!==this.element&&this.liveStatus.after(this.viewport)}setWorlds(e){this.picker.replaceChildren(),this.picker.hidden=e.length<2,e.forEach((t,n)=>{const a=document.createElement("button");a.textContent=p("web_visubot_world_fmt",n+1),a.addEventListener("click",()=>this.useWorld(t,a)),this.picker.append(a)}),this.useWorld(e[0]??Mi,this.picker.firstElementChild)}useWorld(e,t){var n,a,s,r,o;for(const l of this.picker.children)l.classList.toggle("active",l===t);e!==this.world.setup&&(this.world=new _s(e),this.applied=0,this.sent=0,(n=this.view)==null||n.setWorld(e),(a=this.view)==null||a.place(this.world.pose,this.world.trail),(s=this.view)==null||s.setLed(void 0),(r=this.view)==null||r.setScreen(void 0),this.updateStatus(),(o=this.onWorldChange)==null||o.call(this))}reset(){var e,t,n;this.world.reset(),this.applied=0,this.sent=0,this.realSensors=void 0,(e=this.view)==null||e.place(this.world.pose,this.world.trail),(t=this.view)==null||t.setLed(void 0),(n=this.view)==null||n.setScreen(void 0),this.updateStatus()}prepare(e){e.robotSensors={...this.controls,...this.world.sensors()}}setupControls(){for(const e of this.element.querySelectorAll(".visubot-controls input[type=range]")){const t=e.parentElement.querySelector("output"),n=()=>{this.controls[e.name]=Number(e.value),t.textContent=e.value};e.addEventListener("input",n),n()}for(const e of this.element.querySelectorAll(".visubot-controls button[name]"))e.addEventListener("click",()=>{const t=e.name;this.controls[t]=!0,e.classList.add("pressed"),window.clearTimeout(this.pressTimers.get(t)),this.pressTimers.set(t,window.setTimeout(()=>{this.controls[t]=!1,e.classList.remove("pressed")},1e3))})}setupCheck(){for(const e of this.check.querySelectorAll("button[data-py]"))e.addEventListener("click",()=>{const{after:t,wait:n}=e.dataset;be.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>be.run(t)):void 0).catch(a=>this.liveFailed(a))});this.check.addEventListener("toggle",()=>void this.readCheck())}async readCheck(){if(!this.checking){this.checking=!0;try{for(;this.check.open&&be.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!be.connected)break;const t=e.dataset.sensor,n=await be.ask(Pt[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof Pt[t].simulated=="boolean"?n===!0||typeof n=="number"&&n!==0?"✓":"–":String(typeof n=="number"?Math.round(n*10)/10:n))}await new Promise(e=>setTimeout(e,200))}}finally{this.checking=!1}}}get live(){return be.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await be.ask(Pt[a].python);typeof Pt[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof Pt[a].simulated=="string"?n[a]=typeof s=="string"?s:String(Pt[a].simulated):n[a]=typeof s=="number"?a==="getDistance"?Math.round(s):s:0}this.realSensors=n,e.robotSensors={...this.controls,...this.world.sensors(),...n}}async drive(e){for(;this.sentsetTimeout(n,t.args[0]))}}liveFailed(e){be.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=tp(),this.liveStatus.classList.toggle("connected",be.connected),this.check.hidden=!be.connected,be.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(z0),n&&((o=this.view)==null||o.moveTo(this.world.pose,this.world.trail,t)),this.updateStatus()}dispose(){var e;this.stopListening();for(const t of this.pressTimers.values())window.clearTimeout(t);(e=this.view)==null||e.dispose(),this.view=void 0,this.loading=void 0}updateStatus(){const e=this.world.lineState().toString(2).padStart(4,"0"),t=[`${p("web_visubot_distance")}: ${this.world.distance()} cm`,`${p("web_visubot_line")}: ${e}`];this.world.bumps>0&&t.push(`⚠︎ ${p("web_visubot_bumps")}: ${this.world.bumps}`),this.world.screen!==void 0&&t.push(`📺 ${this.world.screen}`),this.realSensors&&be.connected&&t.push(`🤖 ${p("web_visubot_distance")}: ${this.realSensors.getDistance} cm · ${p("web_visubot_line")}: ${Number(this.realSensors.getLine).toString(2).padStart(4,"0")}`),this.status.textContent=t.join(" · ")}}let ni;function ep(i,e){try{ni??(ni=new AudioContext);const t=ni.createOscillator(),n=ni.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(ni.destination);const a=ni.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function zN(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")}

${p("web_visubot_controls_hint")}

${i("getBrightness","web_visubot_sensor_brightness",0,100,50)} ${i("getLoudness","web_visubot_sensor_loudness",0,100,0)} @@ -76696,23 +76903,23 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis ${e("isJoystickLeft","←","web_visubot_sensor_joy_left")}${e("isJoystickRight","→","web_visubot_sensor_joy_right")} ${e("isShaken",`〰 ${p("web_visubot_shake")}`,"web_visubot_sensor_shake")}
- `}function yN(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=tp.map(a=>`${p(a.key)}…`).join("");return``}function IN(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=np.map(a=>`${p(a.key)}…`).join("");return``}function ep(){return be.connecting?p("web_visubot_connecting"):be.connected?`✓ ${p("web_visubot_connected")}`:be.error?`⚠︎ ${p("web_visubot_link_error")}: ${be.error}`:""}async function wN(){if(be.connected||be.connecting)return be.disconnect();try{await be.connect()}catch(i){await be.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const gt=i=>()=>Ce(T.anweisung,{textLines:[i]}),zN=[{key:"web_visubot_el_forward",group:"drive",type:T.anweisung,make:gt("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:T.anweisung,make:gt("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:T.anweisung,make:gt("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:T.anweisung,make:gt("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:T.anweisung,make:gt("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:T.anweisung,make:gt("mbot.stop()")},{key:"web_visubot_el_led",group:"leds",type:T.anweisung,make:gt("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"leds",type:T.anweisung,make:gt("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"leds",type:T.anweisung,make:gt('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"sound",type:T.anweisung,make:gt("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"screen",type:T.anweisung,make:gt('mbot.showText("Hallo")')},{key:"web_visubot_el_emotion",group:"emotion",type:T.anweisung,make:gt('mbot.emotion("smile")')},{key:"web_visubot_el_wait",group:"wait",type:T.anweisung,make:gt("mbot.pause(100)")},{key:"web_visubot_el_timer",group:"wait",type:T.anweisung,make:gt("mbot.resetTimer()")}];function Lm(i){return{drive:"fahren",wheels:"fahren",leds:"licht",sound:"ton",screen:"anzeige",emotion:"anzeige",wait:"warten"}[i]??"sensor"}const IN={drive:"🚗",wheels:"⚙️",leds:"💡",sound:"🔊",screen:"🖥️",emotion:"😊",wait:"⏱️",distance:"📏",line:"➖",color:"🎨",buttons:"🕹️",light:"🔆",tilt:"📐",timer:"🔋"},tp=[{key:"web_visubot_sensor_distance",group:"distance",text:"mbot.getDistance()"},{key:"web_visubot_sensor_line",group:"line",text:"mbot.getLine()"},{key:"web_visubot_sensor_line_left",group:"line",text:"mbot.isLineLeft()"},{key:"web_visubot_sensor_line_right",group:"line",text:"mbot.isLineRight()"},{key:"web_visubot_sensor_color",group:"color",get text(){return`mbot.getColor().equals("${Mh("red")}")`}},{key:"web_visubot_sensor_button_a",group:"buttons",text:"mbot.isButtonA()"},{key:"web_visubot_sensor_button_b",group:"buttons",text:"mbot.isButtonB()"},{key:"web_visubot_sensor_joy_up",group:"buttons",text:"mbot.isJoystickUp()"},{key:"web_visubot_sensor_joy_down",group:"buttons",text:"mbot.isJoystickDown()"},{key:"web_visubot_sensor_joy_left",group:"buttons",text:"mbot.isJoystickLeft()"},{key:"web_visubot_sensor_joy_right",group:"buttons",text:"mbot.isJoystickRight()"},{key:"web_visubot_sensor_brightness",group:"light",text:"mbot.getBrightness()"},{key:"web_visubot_sensor_loudness",group:"light",text:"mbot.getLoudness()"},{key:"web_visubot_sensor_pitch",group:"tilt",text:"mbot.getPitch()"},{key:"web_visubot_sensor_roll",group:"tilt",text:"mbot.getRoll()"},{key:"web_visubot_sensor_shake",group:"tilt",text:"mbot.isShaken()"},{key:"web_visubot_sensor_timer",group:"timer",text:"mbot.getTimer()"},{key:"web_visubot_sensor_battery",group:"timer",text:"mbot.getBattery()"}],wa=()=>typeof window.showDirectoryPicker=="function";class pr{constructor(e){this.handle=e}get name(){return this.handle.name}async list(){const e=[];for await(const t of this.handle.values())t.name.startsWith(".")||e.push({kind:t.kind,name:t.name});return e}async dir(e,t=!1){return new pr(await this.handle.getDirectoryHandle(e,{create:t}))}async read(e){return(await(await this.handle.getFileHandle(e)).getFile()).text()}async write(e,t){const a=await(await this.handle.getFileHandle(e,{create:!0})).createWritable();await a.write(t),await a.close()}async has(e){try{return await this.handle.getFileHandle(e),!0}catch{try{return await this.handle.getDirectoryHandle(e),!0}catch{return!1}}}async remove(e){await this.handle.removeEntry(e,{recursive:!0})}}const kN="visustruct-workspace";function SN(){return new Promise((i,e)=>{const t=indexedDB.open(kN,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function Ct(i,e,t){const n=await SN();return new Promise((a,s)=>{const r=t(n.transaction(i,e).objectStore(i));r.onsuccess=()=>a(r.result),r.onerror=()=>s(r.error)})}class C0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await Ct("files","readonly",n=>n.getAllKeys()),t=new Map;for(const n of e){if(!n.startsWith(this.path)||n===this.path)continue;const a=n.slice(this.path.length),s=a.indexOf("/"),r=s<0?a:a.slice(0,s);t.has(r)||t.set(r,{kind:s<0?"file":"directory",name:r})}return[...t.values()]}async dir(e,t=!1){const n=this.key(e)+"/";if(!(await Ct("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await Ct("files","readwrite",s=>s.put("",n))}return new C0(e,n)}async read(e){const t=await Ct("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await Ct("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await Ct("files","readonly",a=>a.count(this.key(e))),n=await Ct("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await Ct("files","readwrite",n=>n.delete(t)),await Ct("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function TN(i,e="folder"){const t=await window.showDirectoryPicker({id:e==="folder"?"visustruct-workspace":e,mode:"readwrite"}),n=i&&t.name!==i?await t.getDirectoryHandle(i,{create:!0}):t;return await Ct("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new pr(n)}}function Wm(){return{kind:"browser",root:new C0("VisuStruct","")}}async function _N(i="folder"){var e;try{const t=await Ct("meta","readonly",a=>a.get(i));if(!t)return;const n=await((e=t.queryPermission)==null?void 0:e.call(t,{mode:"readwrite"}))??"granted";return{handle:t,ready:n==="granted"}}catch{return}}async function Em(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new pr(i)}:void 0}async function jN(i="folder"){try{await Ct("meta","readwrite",e=>e.delete(i))}catch{}}const za="learnProgress.json",Ia="lernstand.json",ka="visustruct.files.mode",Nm="visustruct.files.expanded";function CN(i){try{const e=JSON.parse(np(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function np(i){try{return localStorage.getItem(i)}catch{return null}}function Sa(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const te=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Fm(i){return new Promise(e=>{const t=document.createElement("div");t.className="confirm";const n=(i.choices??[]).map(o=>``).join("");t.innerHTML=``;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class AN{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(CN(Nm)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),xe.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){Sa(Nm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=` + `;const a=t.querySelector("form"),s=a.querySelector("input"),r=o=>{t.remove(),e(o)};a.addEventListener("submit",o=>{if(o.preventDefault(),!s)return r("");s.value.trim()?r(s.value):s.focus()}),t.addEventListener("click",o=>{var m;const l=o.target,u=(m=l.closest("[data-choice]"))==null?void 0:m.dataset.choice;u!==void 0?r(u):(l===t||l.closest("[data-cancel]"))&&r(void 0)}),t.addEventListener("keydown",o=>o.key==="Escape"&&r(void 0)),document.body.append(t),(s??a.querySelector("[data-cancel]")).focus()})}class BN{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(DN(Fm)));y(this,"rendering",0);y(this,"progressWorkspace");y(this,"hadWorkspace",!1);y(this,"progressTimer");this.host=e,this.element=document.createElement("aside"),this.element.className="files",this.build(),xe.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){Sa(Fm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=`

${te(p("web_files_title"))}

@@ -76720,7 +76927,7 @@ ${a}`));this.body.append(s),this.foldReference(s)}}foldReference(e){const t="vis
- `,this.body=this.element.querySelector(".files-body");const e=(t,n)=>this.element.querySelector(`[data-files=${t}]`).addEventListener("click",n);e("hide",()=>this.host.hide()),e("new-folder",()=>void this.newFolder()),e("switch",()=>void this.switchWorkspace()),this.body.addEventListener("click",t=>void this.onTreeClick(t)),this.render()}async restore(){if(np(ka)==="browser")this.workspace=Wm();else if(wa()){const e=await _N();e!=null&&e.ready?this.workspace=await Em(e.handle):this.pending=e==null?void 0:e.handle}await this.render(),this.workspace||this.startDialog()}async startDialog(){var r;const e=p("web_learn_start_folder"),t=(o,l,u=!1,m)=>`${m?`

${te(m)}

`:""}`,n=wa()?[this.pending?t("reconnect",`${me.open} ${te(p("web_learn_start_continue_fmt",this.pending.name))}`,!0):"",t("pick",`${me.open} ${te(p("web_learn_start_open"))}`,!this.pending),t("create",`${me.newFolder} ${te(p("web_learn_start_create_fmt",e))}`,!1,p("web_learn_start_create_hint"))]:[t("browser",te(p("web_files_browser")),!0,p("web_files_browser_hint"))],a=document.createElement("div");a.className="confirm",a.innerHTML=``,t.querySelector("[data-action=about-done]").addEventListener("click",()=>t.close()),t.addEventListener("click",n=>n.target===t&&t.close()),t.addEventListener("close",()=>t.remove()),document.body.append(t),t.showModal()}setupSettingsMenu(e,t){const n=a=>{t.hidden=!a,e.setAttribute("aria-expanded",String(a))};e.addEventListener("click",()=>n(t.hidden)),this.closeSettings&&document.removeEventListener("pointerdown",this.closeSettings),this.escapeSettings&&document.removeEventListener("keydown",this.escapeSettings),this.closeSettings=a=>{!t.hidden&&!e.parentElement.contains(a.target)&&n(!1)},document.addEventListener("pointerdown",this.closeSettings),this.escapeSettings=a=>{a.key!=="Escape"||t.hidden||(n(!1),e.focus())},document.addEventListener("keydown",this.escapeSettings)}learnRail(){return this.railButton=ge("button",{class:"learn-rail"}),this.labelLearnRail(),this.railButton.addEventListener("click",()=>this.setLearning(!0)),this.railButton}liveRail(){return this.liveRailButton=ge("button",{class:"learn-rail live-rail"}),this.labelLiveRail(),this.liveRailButton.addEventListener("click",()=>this.setLiveCoding(!0)),this.liveRailButton}labelLiveRail(){this.liveRailButton&&(this.liveRailButton.title=p("web_live_show"),this.liveRailButton.innerHTML=`${At}</> ${W(p("web_live_title"))}`)}labelLearnRail(){this.railButton&&(this.railButton.title=p("web_learn_show"),this.railButton.innerHTML=`${At}🎓 ${W(p("web_learn_title"))}`)}learnHost(){return{collapse:()=>this.setLearning(!1),showEditor:()=>{this.editorHidden&&this.setEditorHidden(!1)},showLiveCode:()=>{this.liveCoding||this.setLiveCoding(!0)},showJava:()=>this.openJavaColumn(),showFiles:()=>{this.shell.classList.contains("files-open")||this.setFilesOpen(!0)},reveal:e=>this.revealAreas(e),openExercise:(e,t)=>{const n=Dg(e);n!=="code"&&this.setEditorHidden(!1),n!=="struktogramm"&&(e.code==="java"?this.openJavaColumn():this.liveCoding||this.setLiveCoding(!0)),this.coding&&this.setCoding(!1),this.shell.classList.contains("files-open")&&this.setFilesOpen(!1),this.previewOpen&&this.setPreviewOpen(!1),n==="struktogramm"&&this.liveCoding&&this.setLiveCoding(!1),n==="code"&&!this.editorHidden&&this.setEditorHidden(!0);const a=this.tabs.findIndex(r=>r.exerciseId===e.id);if(a>=0){this.switchTab(a),this.setSimulating(!1);return}const s=this.makeTab();s.doc=t,s.exerciseId=e.id,s.selected=t.elements.length>0?[0]:void 0,this.isPristine(this.tab)?this.tabs[this.tabIndex]=s:this.tabs.push(s),this.tabIndex=this.tabs.indexOf(s),this.setSimulating(!1),this.render()},openJavaCode:e=>{this.openJavaColumn();const t=this.makeTab();t.doc=this.live.documentFromJavaText(e),this.isPristine(this.tab)?this.tabs[this.tabIndex]=t:this.tabs.push(t),this.tabIndex=this.tabs.indexOf(t),this.setSimulating(!1),this.live.adoptJava(t.doc,e),this.render()},openDiagram:(e,t)=>{this.setEditorHidden(!1),this.loadXML(d1(e),e.caption.trim()?`${e.caption.trim()}.visustruct`:t)},exerciseDocument:e=>{const t=this.tabs.find(a=>a.exerciseId===e);if(t)return t.doc;const n=this.tab;if(!(n.exerciseId||this.isPristine(n)))return n.exerciseId=e,xe.updateExercise(e,{xml:d1(n.doc)}),n.doc},subprogramsFor:e=>{const t=this.tabs.find(n=>n.exerciseId===e);return n=>this.findSubprogram(n,t)},stopSimulation:()=>this.setSimulating(!1),resetExercise:(e,t)=>{const n=this.tabs.find(a=>a.exerciseId===e);n&&(n.undoStack.push(n.doc),n.doc=t,n.redoStack=[],n.selected=[0],n===this.tab&&this.render())},preview:e=>{const t=Od(e,this.metrics,this.measure,0);if(!t)return;const n=t.svg.getAttribute("width");return n&&(t.svg.style.maxWidth=`${n}px`,t.svg.style.minWidth=`${Math.round(Number(n)*.6)}px`),t.svg.removeAttribute("width"),t.svg.removeAttribute("height"),t.svg}}}isPristine(e){return!e.dirty&&!e.fileName&&!e.exerciseId&&e.undoStack.length===0}rememberExercise(){const e=this.tab;e.exerciseId&&(clearTimeout(this.exerciseSaveTimer),this.exerciseSaveTimer=window.setTimeout(()=>{e.exerciseId&&xe.updateExercise(e.exerciseId,{xml:d1(e.doc)})},300))}paletteIcon(e){const t=Te("svg",{viewBox:"0 0 28 20",width:28,height:20,class:"icon"}),n={fill:"none",stroke:"currentColor","stroke-width":1.5};t.append(Te("rect",{x:1,y:1,width:26,height:18,...n}));const a=s=>t.append(Te("path",{d:s,...n}));switch(e){case"verzweigung":a("M1 1 L14 10 L27 1 M14 10 V19");break;case"fallauswahl":a("M1 1 L20 10 L27 1 M1 10 H27 M10 10 V19 M20 10 V19");break;case"forZaehlSchleife":case"whileSchleife":a("M7 7 H27 M7 7 V19");break;case"doUntilSchleife":a("M7 1 V13 H27");break;case"endlosschleife":a("M7 6 H27 M7 6 V14 H27");break;case"aufruf":a("M5 1 V19 M23 1 V19");break;case"aussprung":a("M6 1 L1 10 L6 19");break}return t}render(){const e={...this.doc,elements:this.doc.elements.map(ds)};this.layout=this.engine.layout(e),this.flat=A3(this.layout.elements),this.selected&&!yt(this.doc,this.selected)&&(this.selected=void 0);const t=this.zoom,n=this.canvasHost;this.renderedHostSize={width:n.clientWidth,height:n.clientHeight};const a={width:Math.max(320,this.layout.canvasSize.width,Math.floor(n.clientWidth/t)),height:Math.max(240,this.layout.canvasSize.height+60,Math.floor(n.clientHeight/t))};this.pseudocodeBox.checked=!!this.doc.pseudocode,this.renderer.usesSimulationHighlight=this.simulating,this.renderer.fillsSelection=this.liveCoding,this.svg=this.renderer.render(this.layout,a,this.simulating?this.simPath:this.selected),this.svg.setAttribute("width",String(Math.floor(a.width*t))),this.svg.setAttribute("height",String(Math.floor(a.height*t))),this.overlay=Te("g",{class:"drop-overlay"}),this.svg.append(this.overlay),this.canvasHost.replaceChildren(this.svg),document.activeElement!==this.captionInput&&(this.captionInput.value=this.doc.caption),this.undoButton.disabled=this.simulating||this.undoStack.length===0,this.redoButton.disabled=this.simulating||this.redoStack.length===0,this.deleteButton.disabled=this.simulating||!this.selected||!jr(this.doc,this.selected),this.captionInput.readOnly=this.simulating,this.codeButton.disabled=this.simulating,this.exportButton.disabled=this.simulating,this.coding&&this.code.refresh(),this.refreshLive(),this.refreshPreview(),this.renderTabs(),this.renderInspector(),this.updateStatus()}refreshLive(){this.liveCoding&&this.live.refresh(this.doc,this.simulating?this.simPath:this.selected,{owner:this.tab,subprograms:new Set(this.tabs.filter(e=>e!==this.tab).flatMap(e=>{var t;return((t=St(e.doc.caption))==null?void 0:t.name)??[]})),editable:!this.simulating,resolve:e=>this.findSubprogram(e)})}updateStatus(){this.rememberExercise(),document.title=`${this.dirty?"• ":""}${this.fileName} – VisuStruct Web`,this.statusLine.textContent=`${this.fileName}${this.dirty?` (${p("web_status_modified")})`:""}`}renderInspector(){const e=this.selected,t=e?yt(this.doc,e):void 0,n=this.inspector;if(!e||!t){n.replaceChildren(ge("h2",{},p("web_inspector_title")),ge("p",{class:"hint"},p("inspector_no_selection")),ge("p",{class:"hint"},p("web_inspector_help_drop")),ge("p",{class:"hint"},p("web_inspector_help_files")));return}if(n.replaceChildren(ge("h2",{},`${p("web_inspector_title")} · ${wo(t.type)}`)),t.type===T.anweisung){const a=ms(t.textLines.join(` `)),s=ge("div",{class:"segmented",role:"group","aria-label":p("inspector_io_mode_title")});for(const[r,o]of[["statement",p("inspector_io_mode_statement")],["input",p("inspector_io_mode_input")],["output",p("inspector_io_mode_output")]]){const l=ge("button",{"aria-pressed":String(r===a)},o);l.addEventListener("click",()=>{var c,d;const u=((c=yt(this.doc,e))==null?void 0:c.textLines.join(` -`))??"";if(r===ms(u))return;const m=p3(r,u);this.commit($1(this.doc,e,m.split(` -`))),(d=this.inspector.querySelector("textarea"))==null||d.focus()}),s.append(l)}n.append(s,ge("p",{class:"hint mono-hint"},gQ[a]))}if(t.type===T.forSchleife){const a=ge("div",{class:"for-fields"}),s=vu(t.textLines);[[p("inspector_for_init"),p("inspector_for_placeholder_init")],[p("inspector_for_condition"),p("inspector_for_placeholder_condition")],[p("inspector_for_step"),p("inspector_for_placeholder_step")]].forEach(([o,l],u)=>{const m=ge("input",{placeholder:l,spellcheck:"false",autocomplete:"off"});m.value=s[u],this.liveEdit(m,c=>{const d=yt(this.doc,e);if(!d)return;const h=vu(d.textLines);return h[u]=x3(c),$1(this.doc,e,h)}),a.append(ge("label",{},o,m))}),n.append(a)}else if(t.type!==T.leerElement){const a=hQ[t.type];a&&n.append(ge("p",{class:"hint mono-hint"},a));const s=Nd(t),r=ge("textarea",{rows:"3",spellcheck:"false"}),o=t.textLines.join(` -`),l=t.type===T.anweisung,u=s?xu(s,o):o;r.value=l&&u.trim()==="ø"?"":u,r.placeholder=pQ(t),this.liveEdit(r,c=>{const d=Nd(yt(this.doc,e)??t);if(l&&!d&&c.trim()==="")return $1(this.doc,e,["ø"]);const h=d?b3(d,xu(d,c)):c;return $1(this.doc,e,h.split(` -`))});const m=ge("div",{class:"editor-row"});s&&m.append(ge("span",{class:"fixed-prefix"},s)),m.append(r),n.append(m)}if(bo(t).length>0){const a=ge("button",{class:"inspector-rename"},p("web_rename_menu"));a.addEventListener("click",()=>this.renameVariable(e)),n.append(a)}this.renderCaseControls(e)}renameVariable(e){const t=yt(this.doc,e);if(!t||this.simulating)return;const n=this.liveCoding?this.live.editableCode:void 0,a=bo(t),s=n!==void 0?hu([n]):Fq(this.doc),r=[...a,...s.filter(l=>!a.includes(l))];if(r.length===0)return;const o=n!==void 0?Y1(n).map(l=>l.name):Eq(this.doc);Z2({names:r,existing:o,count:l=>n!==void 0?Yi(n,l).length:Nq(this.doc,l)}).then(l=>{if(l)if(n!==void 0)this.live.renameInCode(l.from,l.to);else{const u=Wq(this.doc,l.from,l.to);u.count>0&&this.commit(u.doc)}})}onCanvasContextMenu(e){if(this.simulating)return;const t=this.svgPoint(e.clientX,e.clientY),n=t&&this.nodeAt(t.x,t.y),a=n&&yt(this.doc,n.idPath);!n||!a||bo(a).length===0||(e.preventDefault(),this.selected=n.idPath,this.render(),L2(e.clientX,e.clientY,p("web_rename_menu"),()=>this.renameVariable(n.idPath)))}renderCaseControls(e){var l;const t=d3(e,this.doc);if(!t)return;const n=((l=yt(this.doc,t))==null?void 0:l.cases)??[],a=h3(e,t),s=ge("div",{class:"case-controls"});if(a!==void 0&&n[a]){const u=ge("input",{placeholder:p("web_case_name_placeholder"),spellcheck:"false",autocomplete:"off"});u.value=n[a].name,this.liveEdit(u,m=>m.trim()===""?void 0:c3(this.doc,t,a,m)),s.append(ge("label",{},p("web_case_name"),u))}const r=ge("button",{},`+ ${p("inspector_add_case")}`);r.addEventListener("click",()=>{const u=u3(this.doc,t);this.commit(u.doc,u.path)});const o=ge("button",{class:"danger-text"},`- ${p("inspector_remove_case")}`);o.disabled=n.length<=2||a===void 0,o.addEventListener("click",()=>{if(a===void 0)return;const u=m3(this.doc,t,a);this.commit(u.doc,u.path)}),s.append(ge("div",{class:"group"},r,o)),this.inspector.append(s)}liveEdit(e,t){let n;e.addEventListener("focus",()=>n=this.doc),e.addEventListener("input",()=>{const a=dh(e.value);if(a!==e.value){const r=e.selectionStart;e.value=a,e.setSelectionRange(r,r)}const s=t(a);s&&(this.doc=s,this.dirty=!0,this.renderDiagramOnly())}),e.addEventListener("blur",()=>{n&&n!==this.doc&&this.pushUndo(n),n=void 0,this.renderDiagramOnly()})}renderDiagramOnly(){const e=this.selected,t=this.inspector,n=document.createElement("aside");this.inspector=n,this.render(),this.inspector=t,this.selected=e}setSimulating(e){var t;e!==this.simulating&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.endDrag(),this.simulating=e,this.root.classList.toggle("simulating",e),this.simButton.setAttribute("aria-pressed",String(e)),this.simButton.innerHTML=`${e?me.stop:me.play}${W(p(e?"web_simulation_end":"web_simulation_start"))}`,this.simButton.dataset.tip=p(e?"web_simulation_end_title":"web_simulation_start_title"),this.simButton.setAttribute("aria-label",p(e?"web_simulation_end":"web_simulation_start")),e?(this.setCoding(!1),this.setEditorHidden(!1),(t=this.visuBot)==null||t.setWorlds(sh(this.tab.exerciseId)),this.visuBot&&!this.previewOpen&&(this.setPreviewOpen(!0),this.previewOpenedForSim=!0),this.placeSimulationRobot(),this.sim.begin()):(this.sim.end(),this.placeSimulationRobot(),this.previewOpenedForSim&&this.setPreviewOpen(!1),this.simPath=void 0,!this.selected&&this.doc.elements.length>0&&(this.selected=[0])),this.render())}runRobot(e){return!this.visuBot||!/\bmbot\s*\./u.test(JSON.stringify(this.tabs.map(t=>t.doc)))?!1:(this.simulating?this.sim.reset():this.setSimulating(!0),e?this.sim.step():this.sim.play(),!0)}setCoding(e){e!==this.coding&&(e&&(this.setLiveCoding(!1),this.setEditorHidden(!1)),this.coding=e,this.root.classList.toggle("coding",e),this.codeButton.setAttribute("aria-pressed",String(e)),e?this.code.refresh():this.code.close(),this.renderDiagramOnly())}openJavaColumn(){if(this.live.language!=="java"){const e="[data-action=live-language]",t=this.topbar.querySelector(e)??this.root.querySelector(e);t?(t.value="java",t.dispatchEvent(new Event("change"))):this.live.setTarget("java")}this.liveCoding||this.setLiveCoding(!0)}setCodeMain(e){this.codeMain=e,qe($d,e?"1":"0"),e&&!this.liveCoding&&this.setLiveCoding(!0),e&&this.editorHidden&&this.setEditorHidden(!1),this.shell.classList.toggle("code-main",e),this.labelSwap(),this.canvasHost&&this.render()}labelSwap(){const e=p(this.codeMain?"web_swap_to_editor":"web_swap_to_code");for(const t of this.shell.querySelectorAll("[data-action=swap-main]"))t.dataset.tip=e,t.setAttribute("aria-label",e),t.setAttribute("aria-pressed",String(this.codeMain))}setupPreview(){const e=o=>{this.previewOpenedForSim=!1,this.setPreviewOpen(o)};this.preview.onHide=()=>e(!1),this.preview.rail.addEventListener("click",()=>e(!0)),this.preview.onToggleStacked=()=>{this.previewStacked=!this.previewStacked,qe(eh,this.previewStacked?"1":"0"),this.previewStacked&&!this.liveCoding&&this.setLiveCoding(!0),this.placePreview()},this.previewStacked=nt(eh)==="1";const t=nt(Yd);this.previewOpen=t===null||t==="1";const n=this.preview.heightBar,a=this.preview.element,s=(o,l)=>{var c;const u=Math.max(160,(((c=a.parentElement)==null?void 0:c.getBoundingClientRect().height)??600)-120),m=o===void 0?void 0:Math.round(Math.max(160,Math.min(o,u)));a.style.height=m===void 0?"":`${m}px`,l&&qe(nh,m===void 0?"":String(m))},r=Number(nt(nh));r>0&&(a.style.height=`${r}px`),n.addEventListener("pointerdown",o=>{if(o.button!==0)return;o.preventDefault(),n.setPointerCapture(o.pointerId);const l=o.clientY,u=a.getBoundingClientRect().height;this.shell.classList.add("resizing");const m=d=>s(u-(d.clientY-l),!1),c=d=>{n.removeEventListener("pointermove",m),n.removeEventListener("pointerup",c),n.removeEventListener("pointercancel",c),this.shell.classList.remove("resizing"),s(u-(d.clientY-l),!0)};n.addEventListener("pointermove",m),n.addEventListener("pointerup",c),n.addEventListener("pointercancel",c)}),n.addEventListener("dblclick",()=>s(void 0,!0)),n.addEventListener("keydown",o=>{const l=o.key==="ArrowUp"?20:o.key==="ArrowDown"?-20:0;l&&(o.preventDefault(),s(a.getBoundingClientRect().height+l,!0))}),this.placePreview()}setPreviewOpen(e){this.previewOpen=e,qe(Yd,e?"1":"0"),e||this.preview.pause(),this.placePreview(),this.placeSimulationRobot(),this.canvasHost&&this.render()}placeSimulationRobot(){const e=this.visuBot,t=!!e&&this.simulating&&this.previewOpen;this.preview.hostSimulation(t?e.viewport:void 0),t||e==null||e.restoreViewport()}placePreview(){const e=this.previewStacked&&this.liveCoding;this.preview.setStacked(this.previewStacked),this.shell.classList.toggle("preview",this.previewOpen),this.shell.classList.toggle("preview-stacked",e),e?this.preview.element.parentElement!==this.live.element&&this.live.element.append(this.preview.element):this.preview.element.previousElementSibling!==this.previewResizer&&this.previewResizer.after(this.preview.element)}refreshPreview(){!this.previewOpen||!qn()||this.preview.update(this.doc,e=>this.findSubprogram(e),sh(this.tab.exerciseId),this.tab.exerciseId??"",this.tabs.map(e=>e.doc))}setLiveCoding(e){e&&this.coding&&this.setCoding(!1),this.liveCoding=e,this.shell.classList.toggle("live",e),this.placePreview(),e||this.live.hideConsole(),qe(Ud,e?"1":"0"),this.keepAColumnOpen(),this.canvasHost&&this.render()}learnResizer(){return this.panelResizer(this.learn.element,"learn-resizer",Qd,p("web_learn_resize"),1)}liveResizer(){return this.panelResizer(this.live.element,"live-resizer",xQ,p("web_live_resize"),-1,()=>this.root)}yieldingPanels(){return[{panel:this.preview.element,key:th},{panel:this.learn.element,key:Qd},{panel:this.files.element,key:qd}].filter(({panel:e})=>e.offsetParent!==null&&e.parentElement===this.live.element.parentElement)}panelResizer(e,t,n,a,s,r){const o=ge("div",{class:t,role:"separator","aria-orientation":"vertical",tabindex:"0",title:a}),l=d=>{var b;const h=((b=e.parentElement)==null?void 0:b.getBoundingClientRect().width)??0;if(h===0)return IQ(d);const g=[this.files.element,this.learn.element,this.live.element,this.preview.element].filter(x=>x!==e&&x.offsetParent!==null&&getComputedStyle(x).flexGrow==="0").reduce((x,v)=>x+v.getBoundingClientRect().width,0),f=parseFloat(getComputedStyle(e).minWidth)||200;return Math.round(Math.max(f,Math.min(d,h-g-240)))},u=(d,h)=>{e.style.width=d===void 0?"":`${l(d)}px`,h&&qe(n,d===void 0?"":String(l(d)))},m=Number(nt(n));m>0&&u(m,!1);const c=()=>{const d=typeof s=="function"?s():s;return getComputedStyle(this.shell).direction==="rtl"?-d:d};return o.addEventListener("pointerdown",d=>{if(d.button!==0)return;d.preventDefault(),o.setPointerCapture(d.pointerId);const h=d.clientX,g=e.getBoundingClientRect().width,f=c();this.shell.classList.add("resizing");const b=r?this.pushResize(e,n,r(),g):void 0,x=(z,I)=>(b??u)(g+f*(z.clientX-h),I),v=z=>x(z,!1),w=z=>{o.removeEventListener("pointermove",v),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),this.shell.classList.remove("resizing"),x(z,!0)};o.addEventListener("pointermove",v),o.addEventListener("pointerup",w),o.addEventListener("pointercancel",w)}),o.addEventListener("dblclick",()=>u(void 0,!0)),o.addEventListener("keydown",d=>{const h=d.key==="ArrowRight"?20:d.key==="ArrowLeft"?-20:0;h&&(d.preventDefault(),u(e.getBoundingClientRect().width+c()*h,!0))}),o}pushResize(e,t,n,a){const s=(m,c)=>Math.max(parseFloat(getComputedStyle(m).minWidth)||0,c),r=s(e,200),o=Math.max(0,n.getBoundingClientRect().width-s(n,240)),l=this.yieldingPanels().map(m=>({...m,start:m.panel.getBoundingClientRect().width,min:s(m.panel,200),changed:!1})),u=l.reduce((m,c)=>m+Math.max(0,c.start-c.min),0);return(m,c)=>{const d=Math.round(Math.max(r,Math.min(m,a+o+u)));let h=Math.max(0,d-a-o,r-m);for(const g of l){const f=Math.min(h,Math.max(0,g.start-g.min));h-=f,g.changed||(g.changed=f>0),g.changed&&(g.panel.style.width=`${Math.round(g.start-f)}px`,c&&qe(g.key,String(Math.round(g.start-f))))}e.style.width=`${d}px`,c&&qe(t,String(d))}}findSubprogram(e,t=this.tab){const n=ko(e);if(n==="")return;const a=this.tabs.find(s=>s!==t&&(ko(s.doc.caption)===n||ko(hn(s))===n));return a==null?void 0:a.doc}scrollToSimPath(){const e=this.simPath;if(!this.simulating||!e)return;const t=this.flat.find(o=>Do(o.idPath,e));if(!t)return;const n=this.canvasHost,a=this.zoom,s={x:t.frame.x*a,y:t.frame.y*a,width:t.frame.width*a,height:t.frame.height*a},r=24;s.yn.scrollTop+n.clientHeight&&(n.scrollTop=s.y-r),(s.xn.scrollLeft+n.clientWidth-r)&&(n.scrollLeft=Math.max(0,s.x-r))}commit(e,t){this.codeTyping=void 0,this.pushUndo(this.doc),this.doc=e,this.dirty=!0,t&&(this.selected=t),this.render()}commitFromCode(e,t){const n=Date.now(),a=this.codeTyping;!a||a.tab!==this.tab||n-a.last>1e3||n-a.start>5e3?(this.pushUndo(this.doc),this.codeTyping={tab:this.tab,start:n,last:n}):a.last=n,this.doc=e,this.dirty=!0,this.selected=Cr(t??this.selected,e),this.render()}pushUndo(e){for(this.undoStack.push(e);this.undoStack.length>wQ;)this.undoStack.shift();this.tab.redoStack=[]}undo(){const e=this.undoStack.pop();e&&(this.codeTyping=void 0,this.redoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=Cr(this.selected,this.doc),this.render())}redo(){const e=this.redoStack.pop();e&&(this.codeTyping=void 0,this.undoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=Cr(this.selected,this.doc),this.render())}resetHistory(){this.setSimulating(!1),this.tab.undoStack=[],this.tab.redoStack=[],this.selected=void 0,this.dirty=!1,this.render()}makeTab(){return{doc:s3(),serial:this.nextTabSerial++,dirty:!1,undoStack:[],redoStack:[],selected:[0]}}addTab(e=this.makeTab()){this.setSimulating(!1),this.tabs.push(e),this.tabIndex=this.tabs.length-1,this.render()}switchTab(e){e===this.tabIndex||!this.tabs[e]||(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.setSimulating(!1),this.tabIndex=e,this.render())}async closeTab(e){if(this.tabs.length<=1)return;const t=this.tabs[e];t.dirty&&!t.exerciseId&&(this.switchTab(e),!await this.confirmDiscard())||(this.setSimulating(!1),this.tabs.splice(e,1),(this.tabIndex>e||this.tabIndex>=this.tabs.length)&&(this.tabIndex=Math.max(0,this.tabIndex-1)),this.render())}renderTabs(){const e=this.tabStrip;e.replaceChildren(),this.tabs.forEach((n,a)=>{const s=document.createElement("div");s.className="tab"+(a===this.tabIndex?" active":""),s.setAttribute("role","tab"),s.setAttribute("aria-selected",String(a===this.tabIndex));const r=document.createElement("button");r.className="tab-label",r.textContent=hn(n),r.title=n.fileName??hn(n),r.addEventListener("click",()=>this.switchTab(a)),s.append(r);const o=n.dirty&&!n.exerciseId;if(this.tabs.length>1){const l=document.createElement("button");l.className="tab-close"+(o?" unsaved":""),l.innerHTML='✕',l.title=p("a11y_close_tab"),l.setAttribute("aria-label",`${p("a11y_close_tab")}: ${hn(n)}`),l.addEventListener("click",()=>this.closeTab(a)),s.append(l)}else o&&s.append(Object.assign(document.createElement("span"),{className:"tab-close unsaved",innerHTML:'●'}));o&&r.setAttribute("aria-label",`${hn(n)} (${p("web_status_modified")})`),e.append(s)});const t=document.createElement("button");t.className="tab-add",t.textContent="+",t.title=p("a11y_new_diagram_tab"),t.setAttribute("aria-label",p("a11y_new_diagram_tab")),t.addEventListener("click",()=>this.addTab()),e.append(t)}copySelection(){const e=this.selected&&yt(this.doc,this.selected);return e?(this.clipboard=structuredClone(e),this.showMessage(p("web_copied")),!0):!1}cutSelection(){this.selected&&jr(this.doc,this.selected)&&this.copySelection()&&this.deleteSelection()}paste(){this.clipboard&&this.insertNearSelection(structuredClone(this.clipboard))}deleteSelection(){!this.selected||!jr(this.doc,this.selected)||(this.commit(Pi(this.doc,this.selected)),this.selected=void 0,this.render())}insertSensor(e,t=this.selected){if(!t||Sn(this.doc,t))return;const n=Ot(this.doc,t);if(!Wd.includes(n.type))return;const a=(n.textLines??[]).join(" ").trim();this.commit($1(this.doc,t,[a?`${a} ${e}`:e]),t);const s=this.inspector.querySelector("textarea");s&&(s.focus(),s.setSelectionRange(s.value.length,s.value.length))}insertNearSelection(e){const t=this.selected;if(t&&Sn(this.doc,t))return this.commit(On(this.doc,t,e),t);if(t){const n=[...t.slice(0,-1),t[t.length-1]+1];return this.commit(To(this.doc,e,t),n)}if(this.doc.elements.length===1&&Sn(this.doc,[0]))return this.commit(On(this.doc,[0],e),[0]);this.commit(pi(this.doc,[],this.doc.elements.length,e),[this.doc.elements.length])}confirmDiscard(){return this.dirty?new Promise(e=>{const t=document.createElement("div");t.className="confirm",t.innerHTML=`
+`))??"";if(r===ms(u))return;const m=f3(r,u);this.commit($1(this.doc,e,m.split(` +`))),(d=this.inspector.querySelector("textarea"))==null||d.focus()}),s.append(l)}n.append(s,ge("p",{class:"hint mono-hint"},bQ[a]))}if(t.type===T.forSchleife){const a=ge("div",{class:"for-fields"}),s=vu(t.textLines);[[p("inspector_for_init"),p("inspector_for_placeholder_init")],[p("inspector_for_condition"),p("inspector_for_placeholder_condition")],[p("inspector_for_step"),p("inspector_for_placeholder_step")]].forEach(([o,l],u)=>{const m=ge("input",{placeholder:l,spellcheck:"false",autocomplete:"off"});m.value=s[u],this.liveEdit(m,c=>{const d=yt(this.doc,e);if(!d)return;const h=vu(d.textLines);return h[u]=v3(c),$1(this.doc,e,h)}),a.append(ge("label",{},o,m))}),n.append(a)}else if(t.type!==T.leerElement){const a=fQ[t.type];a&&n.append(ge("p",{class:"hint mono-hint"},a));const s=Fd(t),r=ge("textarea",{rows:"3",spellcheck:"false"}),o=t.textLines.join(` +`),l=t.type===T.anweisung,u=s?xu(s,o):o;r.value=l&&u.trim()==="ø"?"":u,r.placeholder=xQ(t),this.liveEdit(r,c=>{const d=Fd(yt(this.doc,e)??t);if(l&&!d&&c.trim()==="")return $1(this.doc,e,["ø"]);const h=d?x3(d,xu(d,c)):c;return $1(this.doc,e,h.split(` +`))});const m=ge("div",{class:"editor-row"});s&&m.append(ge("span",{class:"fixed-prefix"},s)),m.append(r),n.append(m)}if(bo(t).length>0){const a=ge("button",{class:"inspector-rename"},p("web_rename_menu"));a.addEventListener("click",()=>this.renameVariable(e)),n.append(a)}this.renderCaseControls(e)}renameVariable(e){const t=yt(this.doc,e);if(!t||this.simulating)return;const n=this.liveCoding?this.live.editableCode:void 0,a=bo(t),s=n!==void 0?hu([n]):Gq(this.doc),r=[...a,...s.filter(l=>!a.includes(l))];if(r.length===0)return;const o=n!==void 0?Y1(n).map(l=>l.name):Rq(this.doc);L2({names:r,existing:o,count:l=>n!==void 0?Yi(n,l).length:Jq(this.doc,l)}).then(l=>{if(l)if(n!==void 0)this.live.renameInCode(l.from,l.to);else{const u=Fq(this.doc,l.from,l.to);u.count>0&&this.commit(u.doc)}})}onCanvasContextMenu(e){if(this.simulating)return;const t=this.svgPoint(e.clientX,e.clientY),n=t&&this.nodeAt(t.x,t.y),a=n&&yt(this.doc,n.idPath);!n||!a||bo(a).length===0||(e.preventDefault(),this.selected=n.idPath,this.render(),W2(e.clientX,e.clientY,p("web_rename_menu"),()=>this.renameVariable(n.idPath)))}renderCaseControls(e){var l;const t=h3(e,this.doc);if(!t)return;const n=((l=yt(this.doc,t))==null?void 0:l.cases)??[],a=g3(e,t),s=ge("div",{class:"case-controls"});if(a!==void 0&&n[a]){const u=ge("input",{placeholder:p("web_case_name_placeholder"),spellcheck:"false",autocomplete:"off"});u.value=n[a].name,this.liveEdit(u,m=>m.trim()===""?void 0:d3(this.doc,t,a,m)),s.append(ge("label",{},p("web_case_name"),u))}const r=ge("button",{},`+ ${p("inspector_add_case")}`);r.addEventListener("click",()=>{const u=m3(this.doc,t);this.commit(u.doc,u.path)});const o=ge("button",{class:"danger-text"},`- ${p("inspector_remove_case")}`);o.disabled=n.length<=2||a===void 0,o.addEventListener("click",()=>{if(a===void 0)return;const u=c3(this.doc,t,a);this.commit(u.doc,u.path)}),s.append(ge("div",{class:"group"},r,o)),this.inspector.append(s)}liveEdit(e,t){let n;e.addEventListener("focus",()=>n=this.doc),e.addEventListener("input",()=>{const a=hh(e.value);if(a!==e.value){const r=e.selectionStart;e.value=a,e.setSelectionRange(r,r)}const s=t(a);s&&(this.doc=s,this.dirty=!0,this.renderDiagramOnly())}),e.addEventListener("blur",()=>{n&&n!==this.doc&&this.pushUndo(n),n=void 0,this.renderDiagramOnly()})}renderDiagramOnly(){const e=this.selected,t=this.inspector,n=document.createElement("aside");this.inspector=n,this.render(),this.inspector=t,this.selected=e}setSimulating(e){var t;e!==this.simulating&&(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.endDrag(),this.simulating=e,this.root.classList.toggle("simulating",e),this.simButton.setAttribute("aria-pressed",String(e)),this.simButton.innerHTML=`${e?me.stop:me.play}${W(p(e?"web_simulation_end":"web_simulation_start"))}`,this.simButton.dataset.tip=p(e?"web_simulation_end_title":"web_simulation_start_title"),this.simButton.setAttribute("aria-label",p(e?"web_simulation_end":"web_simulation_start")),e?(this.setCoding(!1),this.setEditorHidden(!1),(t=this.visuBot)==null||t.setWorlds(rh(this.tab.exerciseId)),this.visuBot&&!this.previewOpen&&(this.setPreviewOpen(!0),this.previewOpenedForSim=!0),this.placeSimulationRobot(),this.sim.begin()):(this.sim.end(),this.placeSimulationRobot(),this.previewOpenedForSim&&this.setPreviewOpen(!1),this.simPath=void 0,!this.selected&&this.doc.elements.length>0&&(this.selected=[0])),this.render())}runRobot(e){return!this.visuBot||!/\bmbot\s*\./u.test(JSON.stringify(this.tabs.map(t=>t.doc)))?!1:(this.simulating?this.sim.reset():this.setSimulating(!0),e?this.sim.step():this.sim.play(),!0)}setCoding(e){e!==this.coding&&(e&&(this.setLiveCoding(!1),this.setEditorHidden(!1)),this.coding=e,this.root.classList.toggle("coding",e),this.codeButton.setAttribute("aria-pressed",String(e)),e?this.code.refresh():this.code.close(),this.renderDiagramOnly())}openJavaColumn(){if(this.live.language!=="java"){const e="[data-action=live-language]",t=this.topbar.querySelector(e)??this.root.querySelector(e);t?(t.value="java",t.dispatchEvent(new Event("change"))):this.live.setTarget("java")}this.liveCoding||this.setLiveCoding(!0)}setCodeMain(e){this.codeMain=e,qe(Kd,e?"1":"0"),e&&!this.liveCoding&&this.setLiveCoding(!0),e&&this.editorHidden&&this.setEditorHidden(!1),this.shell.classList.toggle("code-main",e),this.labelSwap(),this.canvasHost&&this.render()}labelSwap(){const e=p(this.codeMain?"web_swap_to_editor":"web_swap_to_code");for(const t of this.shell.querySelectorAll("[data-action=swap-main]"))t.dataset.tip=e,t.setAttribute("aria-label",e),t.setAttribute("aria-pressed",String(this.codeMain))}setupPreview(){const e=o=>{this.previewOpenedForSim=!1,this.setPreviewOpen(o)};this.preview.onHide=()=>e(!1),this.preview.rail.addEventListener("click",()=>e(!0)),this.preview.onToggleStacked=()=>{this.previewStacked=!this.previewStacked,qe(th,this.previewStacked?"1":"0"),this.previewStacked&&!this.liveCoding&&this.setLiveCoding(!0),this.placePreview()},this.previewStacked=nt(th)==="1";const t=nt($d);this.previewOpen=t===null||t==="1";const n=this.preview.heightBar,a=this.preview.element,s=(o,l)=>{var c;const u=Math.max(160,(((c=a.parentElement)==null?void 0:c.getBoundingClientRect().height)??600)-120),m=o===void 0?void 0:Math.round(Math.max(160,Math.min(o,u)));a.style.height=m===void 0?"":`${m}px`,l&&qe(ih,m===void 0?"":String(m))},r=Number(nt(ih));r>0&&(a.style.height=`${r}px`),n.addEventListener("pointerdown",o=>{if(o.button!==0)return;o.preventDefault(),n.setPointerCapture(o.pointerId);const l=o.clientY,u=a.getBoundingClientRect().height;this.shell.classList.add("resizing");const m=d=>s(u-(d.clientY-l),!1),c=d=>{n.removeEventListener("pointermove",m),n.removeEventListener("pointerup",c),n.removeEventListener("pointercancel",c),this.shell.classList.remove("resizing"),s(u-(d.clientY-l),!0)};n.addEventListener("pointermove",m),n.addEventListener("pointerup",c),n.addEventListener("pointercancel",c)}),n.addEventListener("dblclick",()=>s(void 0,!0)),n.addEventListener("keydown",o=>{const l=o.key==="ArrowUp"?20:o.key==="ArrowDown"?-20:0;l&&(o.preventDefault(),s(a.getBoundingClientRect().height+l,!0))}),this.placePreview()}setPreviewOpen(e){this.previewOpen=e,qe($d,e?"1":"0"),e||this.preview.pause(),this.placePreview(),this.placeSimulationRobot(),this.canvasHost&&this.render()}placeSimulationRobot(){const e=this.visuBot,t=!!e&&this.simulating&&this.previewOpen;this.preview.hostSimulation(t?e.viewport:void 0),t||e==null||e.restoreViewport()}placePreview(){const e=this.previewStacked&&this.liveCoding;this.preview.setStacked(this.previewStacked),this.shell.classList.toggle("preview",this.previewOpen),this.shell.classList.toggle("preview-stacked",e),e?this.preview.element.parentElement!==this.live.element&&this.live.element.append(this.preview.element):this.preview.element.previousElementSibling!==this.previewResizer&&this.previewResizer.after(this.preview.element)}refreshPreview(){!this.previewOpen||!qn()||this.preview.update(this.doc,e=>this.findSubprogram(e),rh(this.tab.exerciseId),this.tab.exerciseId??"",this.tabs.map(e=>e.doc))}setLiveCoding(e){e&&this.coding&&this.setCoding(!1),this.liveCoding=e,this.shell.classList.toggle("live",e),this.placePreview(),e||this.live.hideConsole(),qe(Yd,e?"1":"0"),this.keepAColumnOpen(),this.canvasHost&&this.render()}learnResizer(){return this.panelResizer(this.learn.element,"learn-resizer",Ud,p("web_learn_resize"),1)}liveResizer(){return this.panelResizer(this.live.element,"live-resizer",wQ,p("web_live_resize"),-1,()=>this.root)}yieldingPanels(){return[{panel:this.preview.element,key:nh},{panel:this.learn.element,key:Ud},{panel:this.files.element,key:Qd}].filter(({panel:e})=>e.offsetParent!==null&&e.parentElement===this.live.element.parentElement)}panelResizer(e,t,n,a,s,r){const o=ge("div",{class:t,role:"separator","aria-orientation":"vertical",tabindex:"0",title:a}),l=d=>{var b;const h=((b=e.parentElement)==null?void 0:b.getBoundingClientRect().width)??0;if(h===0)return TQ(d);const g=[this.files.element,this.learn.element,this.live.element,this.preview.element].filter(x=>x!==e&&x.offsetParent!==null&&getComputedStyle(x).flexGrow==="0").reduce((x,v)=>x+v.getBoundingClientRect().width,0),f=parseFloat(getComputedStyle(e).minWidth)||200;return Math.round(Math.max(f,Math.min(d,h-g-240)))},u=(d,h)=>{e.style.width=d===void 0?"":`${l(d)}px`,h&&qe(n,d===void 0?"":String(l(d)))},m=Number(nt(n));m>0&&u(m,!1);const c=()=>{const d=typeof s=="function"?s():s;return getComputedStyle(this.shell).direction==="rtl"?-d:d};return o.addEventListener("pointerdown",d=>{if(d.button!==0)return;d.preventDefault(),o.setPointerCapture(d.pointerId);const h=d.clientX,g=e.getBoundingClientRect().width,f=c();this.shell.classList.add("resizing");const b=r?this.pushResize(e,n,r(),g):void 0,x=(z,I)=>(b??u)(g+f*(z.clientX-h),I),v=z=>x(z,!1),w=z=>{o.removeEventListener("pointermove",v),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),this.shell.classList.remove("resizing"),x(z,!0)};o.addEventListener("pointermove",v),o.addEventListener("pointerup",w),o.addEventListener("pointercancel",w)}),o.addEventListener("dblclick",()=>u(void 0,!0)),o.addEventListener("keydown",d=>{const h=d.key==="ArrowRight"?20:d.key==="ArrowLeft"?-20:0;h&&(d.preventDefault(),u(e.getBoundingClientRect().width+c()*h,!0))}),o}pushResize(e,t,n,a){const s=(m,c)=>Math.max(parseFloat(getComputedStyle(m).minWidth)||0,c),r=s(e,200),o=Math.max(0,n.getBoundingClientRect().width-s(n,240)),l=this.yieldingPanels().map(m=>({...m,start:m.panel.getBoundingClientRect().width,min:s(m.panel,200),changed:!1})),u=l.reduce((m,c)=>m+Math.max(0,c.start-c.min),0);return(m,c)=>{const d=Math.round(Math.max(r,Math.min(m,a+o+u)));let h=Math.max(0,d-a-o,r-m);for(const g of l){const f=Math.min(h,Math.max(0,g.start-g.min));h-=f,g.changed||(g.changed=f>0),g.changed&&(g.panel.style.width=`${Math.round(g.start-f)}px`,c&&qe(g.key,String(Math.round(g.start-f))))}e.style.width=`${d}px`,c&&qe(t,String(d))}}findSubprogram(e,t=this.tab){const n=ko(e);if(n==="")return;const a=this.tabs.find(s=>s!==t&&(ko(s.doc.caption)===n||ko(hn(s))===n));return a==null?void 0:a.doc}scrollToSimPath(){const e=this.simPath;if(!this.simulating||!e)return;const t=this.flat.find(o=>Do(o.idPath,e));if(!t)return;const n=this.canvasHost,a=this.zoom,s={x:t.frame.x*a,y:t.frame.y*a,width:t.frame.width*a,height:t.frame.height*a},r=24;s.yn.scrollTop+n.clientHeight&&(n.scrollTop=s.y-r),(s.xn.scrollLeft+n.clientWidth-r)&&(n.scrollLeft=Math.max(0,s.x-r))}commit(e,t){this.codeTyping=void 0,this.pushUndo(this.doc),this.doc=e,this.dirty=!0,t&&(this.selected=t),this.render()}commitFromCode(e,t){const n=Date.now(),a=this.codeTyping;!a||a.tab!==this.tab||n-a.last>1e3||n-a.start>5e3?(this.pushUndo(this.doc),this.codeTyping={tab:this.tab,start:n,last:n}):a.last=n,this.doc=e,this.dirty=!0,this.selected=Cr(t??this.selected,e),this.render()}pushUndo(e){for(this.undoStack.push(e);this.undoStack.length>kQ;)this.undoStack.shift();this.tab.redoStack=[]}undo(){const e=this.undoStack.pop();e&&(this.codeTyping=void 0,this.redoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=Cr(this.selected,this.doc),this.render())}redo(){const e=this.redoStack.pop();e&&(this.codeTyping=void 0,this.undoStack.push(this.doc),this.doc=e,this.dirty=!0,this.selected=Cr(this.selected,this.doc),this.render())}resetHistory(){this.setSimulating(!1),this.tab.undoStack=[],this.tab.redoStack=[],this.selected=void 0,this.dirty=!1,this.render()}makeTab(){return{doc:r3(),serial:this.nextTabSerial++,dirty:!1,undoStack:[],redoStack:[],selected:[0]}}addTab(e=this.makeTab()){this.setSimulating(!1),this.tabs.push(e),this.tabIndex=this.tabs.length-1,this.render()}switchTab(e){e===this.tabIndex||!this.tabs[e]||(document.activeElement instanceof HTMLElement&&document.activeElement.blur(),this.setSimulating(!1),this.tabIndex=e,this.render())}async closeTab(e){if(this.tabs.length<=1)return;const t=this.tabs[e];t.dirty&&!t.exerciseId&&(this.switchTab(e),!await this.confirmDiscard())||(this.setSimulating(!1),this.tabs.splice(e,1),(this.tabIndex>e||this.tabIndex>=this.tabs.length)&&(this.tabIndex=Math.max(0,this.tabIndex-1)),this.render())}renderTabs(){const e=this.tabStrip;e.replaceChildren(),this.tabs.forEach((n,a)=>{const s=document.createElement("div");s.className="tab"+(a===this.tabIndex?" active":""),s.setAttribute("role","tab"),s.setAttribute("aria-selected",String(a===this.tabIndex));const r=document.createElement("button");r.className="tab-label",r.textContent=hn(n),r.title=n.fileName??hn(n),r.addEventListener("click",()=>this.switchTab(a)),s.append(r);const o=n.dirty&&!n.exerciseId;if(this.tabs.length>1){const l=document.createElement("button");l.className="tab-close"+(o?" unsaved":""),l.innerHTML='✕',l.title=p("a11y_close_tab"),l.setAttribute("aria-label",`${p("a11y_close_tab")}: ${hn(n)}`),l.addEventListener("click",()=>this.closeTab(a)),s.append(l)}else o&&s.append(Object.assign(document.createElement("span"),{className:"tab-close unsaved",innerHTML:'●'}));o&&r.setAttribute("aria-label",`${hn(n)} (${p("web_status_modified")})`),e.append(s)});const t=document.createElement("button");t.className="tab-add",t.textContent="+",t.title=p("a11y_new_diagram_tab"),t.setAttribute("aria-label",p("a11y_new_diagram_tab")),t.addEventListener("click",()=>this.addTab()),e.append(t)}copySelection(){const e=this.selected&&yt(this.doc,this.selected);return e?(this.clipboard=structuredClone(e),this.showMessage(p("web_copied")),!0):!1}cutSelection(){this.selected&&jr(this.doc,this.selected)&&this.copySelection()&&this.deleteSelection()}paste(){this.clipboard&&this.insertNearSelection(structuredClone(this.clipboard))}deleteSelection(){!this.selected||!jr(this.doc,this.selected)||(this.commit(Pi(this.doc,this.selected)),this.selected=void 0,this.render())}insertSensor(e,t=this.selected){if(!t||Sn(this.doc,t))return;const n=Ot(this.doc,t);if(!Ed.includes(n.type))return;const a=(n.textLines??[]).join(" ").trim();this.commit($1(this.doc,t,[a?`${a} ${e}`:e]),t);const s=this.inspector.querySelector("textarea");s&&(s.focus(),s.setSelectionRange(s.value.length,s.value.length))}insertNearSelection(e){const t=this.selected;if(t&&Sn(this.doc,t))return this.commit(On(this.doc,t,e),t);if(t){const n=[...t.slice(0,-1),t[t.length-1]+1];return this.commit(To(this.doc,e,t),n)}if(this.doc.elements.length===1&&Sn(this.doc,[0]))return this.commit(On(this.doc,[0],e),[0]);this.commit(pi(this.doc,[],this.doc.elements.length,e),[this.doc.elements.length])}confirmDiscard(){return this.dirty?new Promise(e=>{const t=document.createElement("div");t.className="confirm",t.innerHTML=`

${W(p("close_unsaved_title"))}

${W(p("web_discard_message_fmt",this.fileName))}

-
`,t.addEventListener("click",n=>{const a=n.target.dataset.r;a===void 0&&n.target!==t||(t.remove(),e(a==="1"))}),document.body.append(t),t.querySelector('[data-r="0"]').focus()}):Promise.resolve(!0)}showMessage(e){this.statusLine.textContent=e,this.statusLine.classList.add("message"),setTimeout(()=>{this.statusLine.classList.remove("message"),this.updateStatus()},6e3)}loadXML(e,t,n){let a;try{a=n0(e)}catch(s){this.showMessage(p("web_err_unreadable_fmt",t,s.message));return}(this.dirty||this.tab.fileName||this.tab.exerciseId)&&this.addTab(),this.doc=a,this.tab.fileName=t.replace(/\.(strk|xml)$/i,".visustruct"),this.fileHandle=n&&/\.visustruct$/i.test(t)?n:void 0,this.resetHistory()}async open(e){const t=window;if(!t.showOpenFilePicker||this.inViewer)return e.click();try{const[n]=await t.showOpenFilePicker({types:Ed()}),a=await n.getFile();this.loadXML(await a.text(),a.name,n)}catch{}}async save(){var n,a;if(!this.downloads&&await this.saveToWorkspace())return;const e=new Blob([d1(this.doc)],{type:"application/xml"}),t=window;try{if(this.downloads){const s=this.fileName+".txt";await this.downloads.save({filename:s,data:e}),(n=this.tab).fileName??(n.fileName=this.fileName),this.dirty=!1,this.render(),this.showMessage(p("web_saved_txt_fmt",s));return}if(!this.fileHandle&&t.showSaveFilePicker&&!this.inViewer&&(this.fileHandle=await t.showSaveFilePicker({suggestedName:this.fileName,types:Ed()}),this.tab.fileName=this.fileHandle.name),this.fileHandle){const s=await this.fileHandle.createWritable();await s.write(e),await s.close()}else{const s=document.createElement("a");s.href=URL.createObjectURL(e),s.download=this.fileName,s.click(),setTimeout(()=>URL.revokeObjectURL(s.href),1e3)}(a=this.tab).fileName??(a.fileName=this.fileName),this.dirty=!1,this.render()}catch{}}async exportDiagram(e){if(e==="visustruct"){const s=Dd(this.doc,hn(this.tab));return this.offerDownload(`${s}.visustruct`,new Blob([d1(this.doc)],{type:"application/xml"}))}const t=Bd(this.doc,this.metrics,this.measure);if(!t){this.showMessage(p(e==="print"?"err_diagram_too_small_print":"err_diagram_too_small_export"));return}const n=Dd(this.doc,hn(this.tab)),a=Math.max(2,window.devicePixelRatio||1)*this.zoom;try{switch(e){case"svg":{t.svg.setAttribute("width",String(t.width*this.zoom)),t.svg.setAttribute("height",String(t.height*this.zoom)),await this.offerDownload(`${n}.svg`,new Blob([F2(t)],{type:"image/svg+xml"}));break}case"png":{const s=await Od(t,a);await this.offerDownload(`${n}.png`,await eQ(s));break}case"pdf":{const s=await Od(t,Math.max(a,3)),r=await iQ(aQ(s),s.width,s.height,t,N2(this.doc));await this.offerDownload(`${n}.pdf`,r);break}case"print":this.printDiagram(t);break}}catch(s){this.showMessage(p("web_export_failed_fmt",s instanceof Error?s.message:String(s)))}}printDiagram(e){const t=document.createElement("div");t.className="print-sheet",e.svg.removeAttribute("width"),e.svg.removeAttribute("height"),t.append(e.svg),document.body.append(t);const n=()=>t.remove();window.addEventListener("afterprint",n,{once:!0});try{window.print()}catch{n(),this.showMessage(`${p("err_print_unavailable")} ${p("web_print_hint")}`);return}setTimeout(n,6e4)}async offerDownload(e,t){try{if(this.downloads){try{await this.downloads.save({filename:e,data:t}),this.showMessage(p("web_saved_fmt",e))}catch{await this.downloads.save({filename:e+".txt",data:t}),this.showMessage(p("web_saved_txt_fmt",e+".txt"))}return}const n=document.createElement("a");n.href=URL.createObjectURL(t),n.download=e,n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),1e3)}catch{this.showMessage(p("err_save_failed_fmt",e))}}setupFileDrop(){window.addEventListener("dragover",e=>{var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(e.preventDefault(),this.root.classList.add("file-drag"))}),window.addEventListener("dragleave",e=>{e.relatedTarget===null&&this.root.classList.remove("file-drag")}),window.addEventListener("drop",async e=>{var n;this.root.classList.remove("file-drag");const t=(n=e.dataTransfer)==null?void 0:n.files[0];t&&(e.preventDefault(),this.loadXML(await t.text(),t.name))})}onKeyDown(e){var a,s;const t=e.metaKey||e.ctrlKey,n=e.target instanceof HTMLTextAreaElement||e.target instanceof HTMLInputElement||((a=e.target)==null?void 0:a.isContentEditable)===!0;if(t&&e.key.toLowerCase()==="s")e.preventDefault(),this.save();else if(t&&e.key.toLowerCase()==="p")e.preventDefault(),this.simulating||this.exportDiagram("print");else if(t&&e.key.toLowerCase()==="o")e.preventDefault(),this.open(this.root.querySelector("input[type=file]"));else{if(n||this.simulating)return;t&&e.key.toLowerCase()==="z"?(e.preventDefault(),e.shiftKey?this.redo():this.undo()):t&&e.key.toLowerCase()==="c"&&!((s=getSelection())!=null&&s.toString())?this.copySelection()&&e.preventDefault():t&&e.key.toLowerCase()==="x"?(e.preventDefault(),this.cutSelection()):t&&e.key.toLowerCase()==="v"?(e.preventDefault(),this.paste()):t&&e.key.toLowerCase()==="y"?(e.preventDefault(),this.redo()):e.key==="F2"&&this.selected?(e.preventDefault(),this.renameVariable(this.selected)):e.key==="Delete"||e.key==="Backspace"?(e.preventDefault(),this.deleteSelection()):e.key==="Escape"&&(this.drag?this.endDrag():(this.selected=void 0,this.render()))}}svgPoint(e,t){if(!this.svg)return;const n=this.svg.getBoundingClientRect(),a=e-n.left,s=t-n.top;if(!(a<0||s<0||a>n.width||s>n.height))return{x:a/this.zoom,y:s/this.zoom}}nodeAt(e,t){for(let n=this.flat.length-1;n>=0;n--){const a=this.flat[n].frame;if(e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height)return this.flat[n]}}onCanvasPointerDown(e){if(this.simulating)return;const t=this.svgPoint(e.clientX,e.clientY);if(!t)return;document.activeElement instanceof HTMLElement&&document.activeElement.blur();const n=this.nodeAt(t.x,t.y),a=n&&this.selected&&Do(n.idPath,this.selected);this.selected=n==null?void 0:n.idPath,this.render(),n&&e.pointerType!=="touch"&&!(Sn(this.doc,n.idPath)&&!a)&&this.beginDrag(e,{kind:"move",path:n.idPath})}beginDrag(e,t){e.button!==0||this.simulating||(e.preventDefault(),this.drag={source:t,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,active:!1})}onPointerMove(e){const t=this.drag;if(!t||e.pointerId!==t.pointerId)return;if(!t.active){if(Math.hypot(e.clientX-t.startX,e.clientY-t.startY)<5)return;t.active=!0,t.ghost=this.makeGhost(t.source),document.body.append(t.ghost),this.root.classList.add("dragging")}t.ghost.style.transform=`translate(${e.clientX+12}px, ${e.clientY+12}px)`,this.autoScroll(e.clientX,e.clientY);const n=this.svgPoint(e.clientX,e.clientY);t.target=n?this.dropTargetAt(n.x,n.y,t.source):void 0,this.showDropTarget(t.target)}onPointerUp(e){const t=this.drag;!t||e.pointerId!==t.pointerId||(t.active&&t.target?this.applyDrop(t.source,t.target):!t.active&&t.source.kind==="palette"?this.insertNearSelection(t.source.make()):!t.active&&t.source.kind==="sensor"&&this.insertSensor(t.source.text),this.endDrag())}endDrag(){var e,t;(t=(e=this.drag)==null?void 0:e.ghost)==null||t.remove(),this.drag=void 0,this.root.classList.remove("dragging"),this.showDropTarget(void 0)}makeGhost(e){const t=document.createElement("div");if(t.className="drag-ghost",e.kind==="palette"||e.kind==="sensor")t.textContent=e.label;else{const n=Ot(this.doc,e.path);t.textContent=`${wo(n.type)}: ${$l(n)[0]}`}return t}autoScroll(e,t){const n=this.canvasHost.getBoundingClientRect(),a=40,s=12;t>n.bottom-a&&tn.top-a&&(this.canvasHost.scrollTop-=s),e>n.right-a&&en.left-a&&(this.canvasHost.scrollLeft-=s)}dropTargetAt(e,t,n){var l;const a=((l=this.layout)==null?void 0:l.elements)??[],s=this.nodeAt(e,t);if(n.kind==="sensor")return!s||Sn(this.doc,s.idPath)?void 0:Wd.includes(Ot(this.doc,s.idPath).type)?{kind:"condition",path:s.idPath,frame:s.frame}:void 0;if(!s){const u=a[a.length-1];if(!u)return;const m=u.frame.y+u.frame.height;return t>m?n.kind==="move"&&n.path.length===1&&n.path[0]===a.length-1?void 0:{kind:"rootAppend",frame:{x:u.frame.x,y:m,width:u.frame.width,height:0}}:t=n.path.length&&n.path.every((u,m)=>r[m]===u)?void 0:Sn(this.doc,r)?{kind:"replace",path:r,frame:s.frame}:{kind:t"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e])}function sh(i){if(!i)return[];for(const e of[...zt.flatMap(t=>t.steps.flatMap(n=>n.blocks)),...Pn.flatMap(t=>t.blocks)])if(!(e.kind!=="exercise"||e.exercise.id!==i))return e.exercise.tests.flatMap(t=>{const n=t.world?ts(t.world):void 0;return n?[n]:[]});return[]}let Jt,Ql,Ul;function rh(i){const e=i.dataset.tip;if(!e)return;Jt??(Jt=Object.assign(document.createElement("div"),{className:"tooltip",role:"tooltip"})),Jt.isConnected||document.body.append(Jt),Jt.textContent=e,Jt.hidden=!1;const t=i.getBoundingClientRect(),n=Jt.offsetWidth,a=Jt.offsetHeight,s=Math.min(Math.max(8,t.left+t.width/2-n/2),window.innerWidth-n-8),r=t.bottom+6+a{if(i.pointerType==="touch")return;const e=i.target.closest("[data-tip]");e!==Ul&&(So(),e&&(Ul=e,Ql=window.setTimeout(()=>rh(e),350)))}),document.addEventListener("focusin",i=>{const e=i.target.closest("[data-tip]");So(),e!=null&&e.matches(":focus-visible")&&rh(e)});for(const i of["pointerdown","focusout","scroll","keydown"])document.addEventListener(i,So,!0)}const Yl="visustruct.reloadedAfterError";function H2(){try{const i=Number(sessionStorage.getItem(Yl));if(i&&Date.now()-i<3e4)return!1;sessionStorage.setItem(Yl,String(Date.now()))}catch{return!1}return location.reload(),!0}function TQ(i){console.error(i);const e=(navigator.language||"").toLowerCase().startsWith("de"),t=document.createElement("div");t.className="startup-error";const n=document.createElement("h1");n.textContent=e?"VisuStruct konnte nicht starten":"VisuStruct could not start";const a=document.createElement("p");a.textContent=e?"Wahrscheinlich gibt es gerade eine neue Version. Lade die Seite neu. Hilft das nicht, drücke Strg+Umschalt+R (Mac: ⌘⇧R).":"There is probably a new version. Reload the page. If that does not help, press Ctrl+Shift+R (Mac: ⌘⇧R).";const s=document.createElement("button");s.textContent=e?"Neu laden":"Reload",s.addEventListener("click",()=>location.reload());const r=document.createElement("pre");r.textContent=String(i instanceof Error?i.message:i),t.append(n,a,s,r),(document.getElementById("app")??document.body).replaceWith(t)}window.addEventListener("vite:preloadError",i=>{H2()&&i.preventDefault()});const _Q=L3();Promise.all([Ch(_Q,!1),jh(M3(),!1)]).then(()=>{G2(),SQ();const i=new URLSearchParams(location.search);if(!["visustruct","visubot","visuobject","visuflow"].some(a=>i.has(a))&&!Kg()){const a=lh();a==="visubot"?ns("on"):a==="visuobject"&&tl()}i.has("visuobject")&&tl(),i.has("visuflow")&&$g();const t=document.getElementById("app"),n=!i.has("visustruct")&&!i.has("visubot");if(Ug()&&n)return ee(async()=>{const{ObjectApp:a}=await import("./objectApp-DkBXkNTX.js").then(s=>s.g);return{ObjectApp:a}},[],import.meta.url).then(({ObjectApp:a})=>void new a(t));if(Yg()&&n)return ee(async()=>{const{FlowApp:a}=await import("./flowApp-RdEaBhPZ.js");return{FlowApp:a}},[],import.meta.url).then(({FlowApp:a})=>void new a(t));new zQ(t)}).then(()=>{try{sessionStorage.removeItem(Yl)}catch{}}).catch(i=>{/dynamically imported module|Importing a module script failed|error loading dynamically/i.test(String(i))&&H2()||TQ(i)});export{Yn as C,Iq as J,Mx as L,ee as _,uq as a,Dq as b,P2 as c,BQ as d,$g as e,ns as f,yQ as g,wa as h,me as i,_N as j,TN as k,a3 as l,DQ as m,o1 as n,tl as o,_q as p,Pd as q,Em as r,NW as s,p as t,F2 as u,Od as v,nl as w,eQ as x,iQ as y,aQ as z}; +
`,t.addEventListener("click",n=>{const a=n.target.dataset.r;a===void 0&&n.target!==t||(t.remove(),e(a==="1"))}),document.body.append(t),t.querySelector('[data-r="0"]').focus()}):Promise.resolve(!0)}showMessage(e){this.statusLine.textContent=e,this.statusLine.classList.add("message"),setTimeout(()=>{this.statusLine.classList.remove("message"),this.updateStatus()},6e3)}loadXML(e,t,n){let a;try{a=n0(e)}catch(s){this.showMessage(p("web_err_unreadable_fmt",t,s.message));return}(this.dirty||this.tab.fileName||this.tab.exerciseId)&&this.addTab(),this.doc=a,this.tab.fileName=t.replace(/\.(strk|xml)$/i,".visustruct"),this.fileHandle=n&&/\.visustruct$/i.test(t)?n:void 0,this.resetHistory()}async open(e){const t=window;if(!t.showOpenFilePicker||this.inViewer)return e.click();try{const[n]=await t.showOpenFilePicker({types:Nd()}),a=await n.getFile();this.loadXML(await a.text(),a.name,n)}catch{}}async save(){var n,a;if(!this.downloads&&await this.saveToWorkspace())return;const e=new Blob([d1(this.doc)],{type:"application/xml"}),t=window;try{if(this.downloads){const s=this.fileName+".txt";await this.downloads.save({filename:s,data:e}),(n=this.tab).fileName??(n.fileName=this.fileName),this.dirty=!1,this.render(),this.showMessage(p("web_saved_txt_fmt",s));return}if(!this.fileHandle&&t.showSaveFilePicker&&!this.inViewer&&(this.fileHandle=await t.showSaveFilePicker({suggestedName:this.fileName,types:Nd()}),this.tab.fileName=this.fileHandle.name),this.fileHandle){const s=await this.fileHandle.createWritable();await s.write(e),await s.close()}else{const s=document.createElement("a");s.href=URL.createObjectURL(e),s.download=this.fileName,s.click(),setTimeout(()=>URL.revokeObjectURL(s.href),1e3)}(a=this.tab).fileName??(a.fileName=this.fileName),this.dirty=!1,this.render()}catch{}}async exportDiagram(e){if(e==="visustruct"){const s=Bd(this.doc,hn(this.tab));return this.offerDownload(`${s}.visustruct`,new Blob([d1(this.doc)],{type:"application/xml"}))}const t=Od(this.doc,this.metrics,this.measure);if(!t){this.showMessage(p(e==="print"?"err_diagram_too_small_print":"err_diagram_too_small_export"));return}const n=Bd(this.doc,hn(this.tab)),a=Math.max(2,window.devicePixelRatio||1)*this.zoom;try{switch(e){case"svg":{t.svg.setAttribute("width",String(t.width*this.zoom)),t.svg.setAttribute("height",String(t.height*this.zoom)),await this.offerDownload(`${n}.svg`,new Blob([R2(t)],{type:"image/svg+xml"}));break}case"png":{const s=await Md(t,a);await this.offerDownload(`${n}.png`,await iQ(s));break}case"pdf":{const s=await Md(t,Math.max(a,3)),r=await rQ(oQ(s),s.width,s.height,t,F2(this.doc));await this.offerDownload(`${n}.pdf`,r);break}case"print":this.printDiagram(t);break}}catch(s){this.showMessage(p("web_export_failed_fmt",s instanceof Error?s.message:String(s)))}}printDiagram(e){const t=document.createElement("div");t.className="print-sheet",e.svg.removeAttribute("width"),e.svg.removeAttribute("height"),t.append(e.svg),document.body.append(t);const n=()=>t.remove();window.addEventListener("afterprint",n,{once:!0});try{window.print()}catch{n(),this.showMessage(`${p("err_print_unavailable")} ${p("web_print_hint")}`);return}setTimeout(n,6e4)}async offerDownload(e,t){try{if(this.downloads){try{await this.downloads.save({filename:e,data:t}),this.showMessage(p("web_saved_fmt",e))}catch{await this.downloads.save({filename:e+".txt",data:t}),this.showMessage(p("web_saved_txt_fmt",e+".txt"))}return}const n=document.createElement("a");n.href=URL.createObjectURL(t),n.download=e,n.click(),setTimeout(()=>URL.revokeObjectURL(n.href),1e3)}catch{this.showMessage(p("err_save_failed_fmt",e))}}setupFileDrop(){window.addEventListener("dragover",e=>{var t;(t=e.dataTransfer)!=null&&t.types.includes("Files")&&(e.preventDefault(),this.root.classList.add("file-drag"))}),window.addEventListener("dragleave",e=>{e.relatedTarget===null&&this.root.classList.remove("file-drag")}),window.addEventListener("drop",async e=>{var n;this.root.classList.remove("file-drag");const t=(n=e.dataTransfer)==null?void 0:n.files[0];t&&(e.preventDefault(),this.loadXML(await t.text(),t.name))})}onKeyDown(e){var a,s;const t=e.metaKey||e.ctrlKey,n=e.target instanceof HTMLTextAreaElement||e.target instanceof HTMLInputElement||((a=e.target)==null?void 0:a.isContentEditable)===!0;if(t&&e.key.toLowerCase()==="s")e.preventDefault(),this.save();else if(t&&e.key.toLowerCase()==="p")e.preventDefault(),this.simulating||this.exportDiagram("print");else if(t&&e.key.toLowerCase()==="o")e.preventDefault(),this.open(this.root.querySelector("input[type=file]"));else{if(n||this.simulating)return;t&&e.key.toLowerCase()==="z"?(e.preventDefault(),e.shiftKey?this.redo():this.undo()):t&&e.key.toLowerCase()==="c"&&!((s=getSelection())!=null&&s.toString())?this.copySelection()&&e.preventDefault():t&&e.key.toLowerCase()==="x"?(e.preventDefault(),this.cutSelection()):t&&e.key.toLowerCase()==="v"?(e.preventDefault(),this.paste()):t&&e.key.toLowerCase()==="y"?(e.preventDefault(),this.redo()):e.key==="F2"&&this.selected?(e.preventDefault(),this.renameVariable(this.selected)):e.key==="Delete"||e.key==="Backspace"?(e.preventDefault(),this.deleteSelection()):e.key==="Escape"&&(this.drag?this.endDrag():(this.selected=void 0,this.render()))}}svgPoint(e,t){if(!this.svg)return;const n=this.svg.getBoundingClientRect(),a=e-n.left,s=t-n.top;if(!(a<0||s<0||a>n.width||s>n.height))return{x:a/this.zoom,y:s/this.zoom}}nodeAt(e,t){for(let n=this.flat.length-1;n>=0;n--){const a=this.flat[n].frame;if(e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height)return this.flat[n]}}onCanvasPointerDown(e){if(this.simulating)return;const t=this.svgPoint(e.clientX,e.clientY);if(!t)return;document.activeElement instanceof HTMLElement&&document.activeElement.blur();const n=this.nodeAt(t.x,t.y),a=n&&this.selected&&Do(n.idPath,this.selected);this.selected=n==null?void 0:n.idPath,this.render(),n&&e.pointerType!=="touch"&&!(Sn(this.doc,n.idPath)&&!a)&&this.beginDrag(e,{kind:"move",path:n.idPath})}beginDrag(e,t){e.button!==0||this.simulating||(e.preventDefault(),this.drag={source:t,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,active:!1})}onPointerMove(e){const t=this.drag;if(!t||e.pointerId!==t.pointerId)return;if(!t.active){if(Math.hypot(e.clientX-t.startX,e.clientY-t.startY)<5)return;t.active=!0,t.ghost=this.makeGhost(t.source),document.body.append(t.ghost),this.root.classList.add("dragging")}t.ghost.style.transform=`translate(${e.clientX+12}px, ${e.clientY+12}px)`,this.autoScroll(e.clientX,e.clientY);const n=this.svgPoint(e.clientX,e.clientY);t.target=n?this.dropTargetAt(n.x,n.y,t.source):void 0,this.showDropTarget(t.target)}onPointerUp(e){const t=this.drag;!t||e.pointerId!==t.pointerId||(t.active&&t.target?this.applyDrop(t.source,t.target):!t.active&&t.source.kind==="palette"?this.insertNearSelection(t.source.make()):!t.active&&t.source.kind==="sensor"&&this.insertSensor(t.source.text),this.endDrag())}endDrag(){var e,t;(t=(e=this.drag)==null?void 0:e.ghost)==null||t.remove(),this.drag=void 0,this.root.classList.remove("dragging"),this.showDropTarget(void 0)}makeGhost(e){const t=document.createElement("div");if(t.className="drag-ghost",e.kind==="palette"||e.kind==="sensor")t.textContent=e.label;else{const n=Ot(this.doc,e.path);t.textContent=`${wo(n.type)}: ${$l(n)[0]}`}return t}autoScroll(e,t){const n=this.canvasHost.getBoundingClientRect(),a=40,s=12;t>n.bottom-a&&tn.top-a&&(this.canvasHost.scrollTop-=s),e>n.right-a&&en.left-a&&(this.canvasHost.scrollLeft-=s)}dropTargetAt(e,t,n){var l;const a=((l=this.layout)==null?void 0:l.elements)??[],s=this.nodeAt(e,t);if(n.kind==="sensor")return!s||Sn(this.doc,s.idPath)?void 0:Ed.includes(Ot(this.doc,s.idPath).type)?{kind:"condition",path:s.idPath,frame:s.frame}:void 0;if(!s){const u=a[a.length-1];if(!u)return;const m=u.frame.y+u.frame.height;return t>m?n.kind==="move"&&n.path.length===1&&n.path[0]===a.length-1?void 0:{kind:"rootAppend",frame:{x:u.frame.x,y:m,width:u.frame.width,height:0}}:t=n.path.length&&n.path.every((u,m)=>r[m]===u)?void 0:Sn(this.doc,r)?{kind:"replace",path:r,frame:s.frame}:{kind:t"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e])}function rh(i){if(!i)return[];for(const e of[...zt.flatMap(t=>t.steps.flatMap(n=>n.blocks)),...Pn.flatMap(t=>t.blocks)])if(!(e.kind!=="exercise"||e.exercise.id!==i))return e.exercise.tests.flatMap(t=>{const n=t.world?ts(t.world):void 0;return n?[n]:[]});return[]}let Jt,Ql,Ul;function oh(i){const e=i.dataset.tip;if(!e)return;Jt??(Jt=Object.assign(document.createElement("div"),{className:"tooltip",role:"tooltip"})),Jt.isConnected||document.body.append(Jt),Jt.textContent=e,Jt.hidden=!1;const t=i.getBoundingClientRect(),n=Jt.offsetWidth,a=Jt.offsetHeight,s=Math.min(Math.max(8,t.left+t.width/2-n/2),window.innerWidth-n-8),r=t.bottom+6+a{if(i.pointerType==="touch")return;const e=i.target.closest("[data-tip]");e!==Ul&&(So(),e&&(Ul=e,Ql=window.setTimeout(()=>oh(e),350)))}),document.addEventListener("focusin",i=>{const e=i.target.closest("[data-tip]");So(),e!=null&&e.matches(":focus-visible")&&oh(e)});for(const i of["pointerdown","focusout","scroll","keydown"])document.addEventListener(i,So,!0)}const Yl="visustruct.reloadedAfterError";function V2(){try{const i=Number(sessionStorage.getItem(Yl));if(i&&Date.now()-i<3e4)return!1;sessionStorage.setItem(Yl,String(Date.now()))}catch{return!1}return location.reload(),!0}function CQ(i){console.error(i);const e=(navigator.language||"").toLowerCase().startsWith("de"),t=document.createElement("div");t.className="startup-error";const n=document.createElement("h1");n.textContent=e?"VisuStruct konnte nicht starten":"VisuStruct could not start";const a=document.createElement("p");a.textContent=e?"Wahrscheinlich gibt es gerade eine neue Version. Lade die Seite neu. Hilft das nicht, drücke Strg+Umschalt+R (Mac: ⌘⇧R).":"There is probably a new version. Reload the page. If that does not help, press Ctrl+Shift+R (Mac: ⌘⇧R).";const s=document.createElement("button");s.textContent=e?"Neu laden":"Reload",s.addEventListener("click",()=>location.reload());const r=document.createElement("pre");r.textContent=String(i instanceof Error?i.message:i),t.append(n,a,s,r),(document.getElementById("app")??document.body).replaceWith(t)}window.addEventListener("vite:preloadError",i=>{V2()&&i.preventDefault()});const AQ=W3();Promise.all([Ah(AQ,!1),Ch(Z3(),!1)]).then(()=>{H2(),jQ();const i=new URLSearchParams(location.search);if(!["visustruct","visubot","visuobject","visuflow"].some(a=>i.has(a))&&!Xg()){const a=uh();a==="visubot"?ns("on"):a==="visuobject"&&tl()}i.has("visuobject")&&tl(),i.has("visuflow")&&Kg();const t=document.getElementById("app"),n=!i.has("visustruct")&&!i.has("visubot");if(Yg()&&n)return ee(async()=>{const{ObjectApp:a}=await import("./objectApp-B_BhGjAU.js").then(s=>s.g);return{ObjectApp:a}},[],import.meta.url).then(({ObjectApp:a})=>void new a(t));if($g()&&n)return ee(async()=>{const{FlowApp:a}=await import("./flowApp-DABZxAnt.js");return{FlowApp:a}},[],import.meta.url).then(({FlowApp:a})=>void new a(t));new SQ(t)}).then(()=>{try{sessionStorage.removeItem(Yl)}catch{}}).catch(i=>{/dynamically imported module|Importing a module script failed|error loading dynamically/i.test(String(i))&&V2()||CQ(i)});export{Yn as C,Tq as J,Zx as L,ee as _,dq as a,Mq as b,D2 as c,ZQ as d,Kg as e,ns as f,IQ as g,wa as h,me as i,AN as j,CN as k,s3 as l,MQ as m,o1 as n,tl as o,Aq as p,Dd as q,Nm as r,GW as s,p as t,R2 as u,Md as v,nl as w,iQ as x,rQ as y,oQ as z}; diff --git a/website/app/assets/objectApp-DkBXkNTX.js b/website/app/assets/objectApp-B_BhGjAU.js similarity index 99% rename from website/app/assets/objectApp-DkBXkNTX.js rename to website/app/assets/objectApp-B_BhGjAU.js index 06c0543b..ea7f6bfc 100644 --- a/website/app/assets/objectApp-DkBXkNTX.js +++ b/website/app/assets/objectApp-B_BhGjAU.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./projectZip-hnnNIFP3.js","./index-DuzNMqv5.js","./index-C2teIEHU.css"])))=>i.map(i=>d[i]); -var Ns=Object.defineProperty;var Os=(a,e,t)=>e in a?Ns(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var E=(a,e,t)=>Os(a,typeof e!="symbol"?e+"":e,t);import{t as d,i as ie,s as Ps,m as Is,g as Ds,w as Rs,J as Hs,c as Bs,a as Ws,b as Ye,p as zs,d as Vs,e as Us,f as Js,_ as wt,h as $t,j as Ks,r as _t,k as Xs,l as Ys,n as ct}from"./index-DuzNMqv5.js";function Gs(a){const e=[];let t=0;for(;ti.map(i=>d[i]); +var Ns=Object.defineProperty;var Os=(a,e,t)=>e in a?Ns(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var E=(a,e,t)=>Os(a,typeof e!="symbol"?e+"":e,t);import{t as d,i as ie,s as Ps,m as Is,g as Ds,w as Rs,J as Hs,c as Bs,a as Ws,b as Ye,p as zs,d as Vs,e as Us,f as Js,_ as wt,h as $t,j as Ks,r as _t,k as Xs,l as Ys,n as ct}from"./index-f5yHO7xw.js";function Gs(a){const e=[];let t=0;for(;te.text===","?", ":e.text).join("")}function ms(a){const e=[[]];let t=0;for(const s of a)s.text==="<"||s.text==="("||s.text==="["||s.text==="{"?t++:(s.text===">"||s.text===")"||s.text==="]"||s.text==="}")&&t--,s.text===","&&t===0?e.push([]):e[e.length-1].push(s);return e.filter(s=>s.length>0)}function ft(a){var t,s;const e=[];for(let i=0;i{const t=ft(e).filter(i=>i.text!=="final"),s=t[t.length-1];return{name:s!=null&&s.word?s.text:"",type:lt(t.slice(0,-1))}})}function kt(a,e,t,s){var x,L;const i=ft(a),n=new Set;let o=0;for(;o"));const r=i.slice(o);if(r.length===0||a.length===0)return[];const c=a[0].from,l=r.findIndex(S=>S.text==="("),h=r.findIndex(S=>S.text==="="),u=l>0&&(h<0||lS.text==="="),y=_<0?g:g.slice(0,_);let w=y.length-1;for(;w>0&&!y[w].word;)w--;if(w<1)return[];const $=lt(y.slice(0,w)),p=m.length>1,v=[];return m.forEach((S,k)=>{var C;const j=S.findIndex(F=>F.text==="="),M=j<0?S:S.slice(0,j),A=k===0?y[w]:M.find(F=>F.word);if(!A)return;const R=M.filter(F=>F.from>A.from&&F.text==="[").length;v.push({kind:"field",name:A.text,type:$+"[]".repeat(R),params:[],visibility:xt(n,f),isStatic:n.has("static"),isAbstract:!1,from:c,to:s,headerFrom:c,headerTo:k===0?((C=M[M.length-1])==null?void 0:C.to)??A.to:A.to,shared:p,nameFrom:A.from,nameTo:A.to})}),v}function Qs(a,e,t){var n;let s=[],i=e;for(;ih.text==="="),c=ye(a,i,"{","}");if(r){s.push(...a.slice(i,c)),i=c;continue}const l=s.map(h=>h.text);l.includes("class")||l.includes("interface")||l.includes("enum")||s.length>0&&t.members.push(...kt(s,t.name,t.kind==="interface",((n=a[c-1])==null?void 0:n.to)??o.to)),s=[],i=c;continue}s.push(o),i++}return t.bodyEnd=a.length>0?a[a.length-1].to:0,i}function oe(a){var n,o,r,c;const e=Gs(a),t=[];let s=[],i=0;for(;iw.text==="class"||w.text==="interface"),f=u>=0?h[u+1]:void 0;if(!(f!=null&&f.word)){i=ye(e,i,"{","}"),s=[];continue}let m=u;for(;m>0&&(fs.has(h[m-1].text)||h[m-1].text==="@");)m--;const g={name:f.text,kind:h[u].text==="interface"?"interface":"class",isAbstract:h.slice(m,u).some(w=>w.text==="abstract"),interfaces:[],members:[],from:((n=s[s.indexOf(h[m])])==null?void 0:n.from)??h[m].from,to:0,headerFrom:((o=s[s.indexOf(h[m])])==null?void 0:o.from)??h[m].from,headerTo:h[h.length-1].to,nameFrom:f.from,nameTo:f.to,bodyEnd:0};let _=u+2;((r=h[_])==null?void 0:r.text)==="<"&&(_=ye(h,_,"<",">"));let y="";for(;_")-1:w.word&&y==="extends"&&g.kind==="class"?g.superclass??(g.superclass=w.text):w.word&&y&&g.interfaces.push(w.text)}i=Qs(e,i+1,g),g.to=((c=e[i-1])==null?void 0:c.to)??a.length,t.push(g),s=[]}return t}function Fe(a){const e=/^([\p{L}_$][\p{L}\p{N}_$]*)(\[\])+$/u.exec(a);if(e)return{name:e[1],many:!0};const t=/^(?:ArrayList|LinkedList|List|Set|HashSet|TreeSet|Collection|Queue|Deque|ArrayDeque|Stack|Vector)<([\p{L}_$][\p{L}\p{N}_$]*)>$/u.exec(a);return t?{name:t[1],many:!0}:{name:a,many:!1}}function ei(a){const e=new Set(a.map(s=>s.name)),t=[];for(const s of a){s.superclass&&e.has(s.superclass)&&t.push({kind:"extends",from:s.name,to:s.superclass});for(const i of s.interfaces)e.has(i)&&t.push({kind:s.kind==="interface"?"extends":"implements",from:s.name,to:i});for(const i of s.members){if(i.kind!=="field")continue;const n=Fe(i.type);e.has(n.name)&&t.push({kind:"association",from:s.name,to:n.name,role:i.name,multiplicity:n.many?"0..*":"1"})}}return t}function Ge(a){const e=a.params.map(t=>`${t.name}: ${t.type}`).join(", ");return a.kind==="field"?`${a.visibility} ${a.name}: ${a.type}`:a.kind==="constructor"?`${a.visibility} ${a.name}(${e})`:`${a.visibility} ${a.name}(${e}): ${a.type}`}const ti=/^[\p{L}_$][\p{L}\p{N}_$]*$/u;function Ve(a){var c;let e=a.trim().replace(/;$/,"").trim();if(!e)return;let t;/^[+\-#~]/.test(e)&&(t=e[0],e=e.slice(1).trim());let s=!1;const i=e.split(/\s+/);for(;["static","public","private","protected"].includes(i[0]);){const l=i.shift();l==="static"?s=!0:t??(t=l==="public"?"+":l==="private"?"-":"#")}e=i.join(" ");const n=e.indexOf("(");if(n>=0){const l=e.lastIndexOf(")");if(lg.trim()).filter(Boolean).map(g=>{const _=/^([\p{L}_$][\p{L}\p{N}_$]*)\s*:\s*(.+)$/u.exec(g);if(_)return{name:_[1],type:_[2].replace(/\s+/g,"")};const y=/^(.+)\s+([\p{L}_$][\p{L}\p{N}_$]*)$/u.exec(g);return y?{name:y[2],type:y[1].replace(/\s+/g,"")}:{name:g,type:"int"}});return{kind:"method",visibility:t,name:h,type:u==null?void 0:u.replace(/\s+/g,""),params:m,isStatic:s}}const o=/^([\p{L}_$][\p{L}\p{N}_$]*)\s*(?::\s*(.+))?$/u.exec(e);if(o)return{kind:"field",visibility:t,name:o[1],type:(c=o[2])==null?void 0:c.replace(/\s+/g,""),params:[],isStatic:s};const r=/^(.+?)\s+([\p{L}_$][\p{L}\p{N}_$]*)$/u.exec(e);if(r)return{kind:"field",visibility:t,name:r[2],type:r[1].replace(/\s+/g,""),params:[],isStatic:s}}const si={"+":"public ","-":"private ","#":"protected ","~":""};function ii(a){return/^(int|long|short|byte)$/.test(a)?"0":/^(double|float)$/.test(a)?"0.0":a==="boolean"?"false":a==="char"?"' '":"null"}function bs(a,e,t){const s=e.kind==="interface",i=s?"":si[a.visibility??(a.kind==="field"?"-":"+")],n=a.isStatic?"static ":"";if(a.kind==="field")return`${i}${n}${a.type??"int"} ${a.name}`;const o=a.params.map(r=>`${r.type} ${r.name}`).join(", ");return a.name===e.name?`${i}${a.name}(${o})`:`${i}${n}${t&&!s?"abstract ":""}${a.type??"void"} ${a.name}(${o})`}const Ue=(a,e)=>a.lastIndexOf(` `,e-1)+1;function mt(a,e,t){const s=Ue(a,e),i=a.slice(s,e);let n=t;for(;n
- ${b(d("web_about_version_fmt").replace("%@","0.15.1"))} + ${b(d("web_about_version_fmt").replace("%@","0.15.2"))}
@@ -315,7 +315,7 @@ public String toString() { `,"in"),this.consolePane().input.hidden=!0,t.vm.input(e),this.debugRun())}debugError(e){var o;const t=e.pos?String(e.pos.line+1):"",s=((o=e.pos)==null?void 0:o.file.split("/").pop())??"",i=e.detail.replace(/^expected:/,""),n={syntax:"web_visuobject_dbg_err_syntax",symbol:"web_visuobject_dbg_err_symbol",unsupported:"web_visuobject_dbg_err_unsupported",nomain:"web_visuobject_no_main",type:"web_visuobject_dbg_err_type",import:"web_visuobject_dbg_err_import",typename:"web_visuobject_dbg_err_typename"}[e.code];e.pos&&this.showLine(e.pos.file,e.pos.line),this.stopDebug(),this.debugStatus(d(n,s,t,i),!0)}showDebugButtons(){const e=this.dbg,t=(e==null?void 0:e.state)==="paused";for(const s of this.shell.querySelectorAll("[data-dbg]"))s.disabled=!e||(s.dataset.dbg==="pause"?e.state!=="running":!t)}showLine(e,t){this.project.files.some(s=>s.path===e)&&e!==this.active&&this.openFile(e),this.editor.setMarks({placeholders:[],problems:[],current:t},!0)}showDebugState(){const e=this.dbg;if(!e)return;e.frames=e.vm.stack();const t=e.vm.heap(),s=e.frames[e.frame];s&&this.showLine(s.pos.file,s.pos.line);const i=e.values.size===0&&e.vars.size===0,n=new Set,o=new Map;for(const h of t)for(const u of h.fields){const f=`dbg${h.id}.${u.name}`;o.set(f,u.value),!i&&e.values.get(f)!==u.value&&n.add(f)}e.values=o;const r=new Set,c=new Map;e.frames.forEach((h,u)=>{for(const f of h.vars){const m=`${e.frames.length-u}|${h.title}|${f.name}`;c.set(m,f.value),!i&&e.vars.get(m)!==f.value&&r.add(`${h.title}|${f.name}`)}}),e.vars=c;const l={objects:this.liveObjects(t),changed:n,frames:e.frames,frame:e.frame,changedVars:r,onFrame:h=>{e.frame=h,l.frame=h;const u=e.frames[h];u&&this.showLine(u.pos.file,u.pos.line),this.objectDiagram.renderInspector()},move:(h,u)=>e.places.set(h,u)};this.objectDiagram.live=l,this.sequence=e.vm.sequence(),this.diagramMode==="object"&&this.objectDiagram.render(),this.diagramMode==="sequence"&&this.renderSequence()}renderSequence(){var n,o,r;const e=this.shell.querySelector(".vo-seqcanvas"),t=e.querySelector(".vo-seq"),s=e.querySelector(".vo-empty"),i=this.sequence;if(s.hidden=!!i&&i.events.length>0,s.textContent=d(i?"web_visuobject_seq_no_calls":"web_visuobject_seq_empty"),!i||!i.events.length)t.innerHTML="",t.setAttribute("width","0");else{const c=((n=this.dbg)==null?void 0:n.state)==="paused"||((o=this.dbg)==null?void 0:o.state)==="input",{svg:l,width:h,height:u}=Ai(i,c?i.events.length-1:void 0);t.innerHTML=l+(i.truncated?`${b(d("web_visuobject_seq_truncated"))}`:""),t.setAttribute("width",String(h)),t.setAttribute("height",String(u)),c&&((r=t.querySelector(".vo-seq-msg.current"))==null||r.scrollIntoView({block:"nearest",inline:"nearest"}))}this.renderSequenceInspector()}renderSequenceInspector(){if(this.objectDiagram.live)return this.objectDiagram.renderInspector();this.inspector.innerHTML=`

${b(d("web_visuobject_seq_hint"))}

`}liveObjects(e){const t=this.dbg,s=this.project.objects??[],i=c=>40+c.fields.length*20,n=[],o=[],r=[];for(const c of e){const l=`dbg${c.id}`,h=t.places.get(l)??s.find(u=>u.name===c.name&&u.cls===c.cls);if(!h){r.push(c);continue}t.places.set(l,{x:h.x,y:h.y}),n.push({x:h.x,y:h.y,w:260,h:i(c)})}for(const c of r){const l=i(c);let h={x:24,y:24};e:for(let u=24;u<6e3;u+=30)for(let f=24;f<=24+3*320;f+=320)if(n.every(m=>f+260+30<=m.x||m.x+m.w+30<=f||u+l+30<=m.y||m.y+m.h+30<=u)){h={x:f,y:u};break e}t.places.set(`dbg${c.id}`,h),n.push({...h,w:260,h:l})}for(const c of e){const l=`dbg${c.id}`;o.push({id:l,name:c.name,cls:c.cls,...t.places.get(l),values:Object.fromEntries(c.fields.map(h=>[h.name,h.value]))})}return o}stopDebug(e,t=!1){const s=this.dbg;s&&clearTimeout(s.timer),this.dbg=void 0,s&&(this.sequence=s.vm.sequence()),this.objectDiagram.live=void 0,this.consolePane().input.hidden=!0,this.shell.querySelector(".vo-dbg-controls").hidden=!0,this.shell.querySelector("[data-action=stop]").disabled=!0,this.shell.querySelector("[data-action=run]").disabled=!1,t||this.editor.setMarks({placeholders:[],problems:[]},!1),e&&this.debugStatus(d(e),t),this.diagramMode==="object"&&this.objectDiagram.render(),this.diagramMode==="sequence"&&this.renderSequence()}chooseWorld(e){if(e!=="object"){if(e==="flow"){Us(),location.href=`${location.pathname}?visuflow${location.hash}`;return}Js(e),location.href=`${location.pathname}?${e==="on"?"visubot":"visustruct"}${location.hash}`}}get activeFile(){return this.project.files.find(e=>e.path===this.active)}showActive(){const e=this.activeFile;this.editor.setText((e==null?void 0:e.text)??""),this.editor.setBreakpoints(e?this.breakpoints.get(e.path)??[]:[]),this.editor.setReadOnly(!e),e&&!this.openTabs.includes(e.path)&&this.openTabs.push(e.path),this.renderTabs(),J(ot,this.active??"")}renderTabs(){if(this.openTabs=this.openTabs.filter(e=>this.project.files.some(t=>t.path===e)),J(cs,JSON.stringify(this.openTabs)),this.openTabs.length===0){this.tabs.innerHTML=`${b(d("web_visuobject_no_file"))}`;return}this.tabs.innerHTML=this.openTabs.map(e=>{const t=e===this.active,s=this.isDirty(e);return`
-
`}).join("")}onTabClick(e){var i;const t=e.target,s=(i=t.closest("[data-tab]"))==null?void 0:i.dataset.tab;if(s){if(t.closest("[data-close]"))return this.closeTab(s);this.treeSelection=`file:${s}`,this.openFile(s)}}closeTab(e){const t=this.openTabs.indexOf(e);t<0||(this.openTabs.splice(t,1),e===this.active?(this.active=this.openTabs[Math.min(t,this.openTabs.length-1)],this.lastTyping=0,this.showActive(),this.refresh()):this.renderTabs())}snapshot(){return JSON.stringify({project:this.project,active:this.active})}remember(){this.history.push(this.snapshot()),this.history.length>jn&&this.history.shift(),this.future=[]}setProject(e,t=this.active){var s;this.remember(),this.lastTyping=0,this.project=e,this.active=e.files.some(i=>i.path===t)?t:(s=e.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}openFile(e){if(e===this.active)return;this.active=e,this.lastTyping=0,this.showActive();const t=D(e);this.currentPackage=t,this.open.set(`pkg:${t}`,!0),this.refresh()}typed(){const e=this.activeFile;if(!e)return;const t=Date.now();t-this.lastTyping>1500&&this.remember(),this.lastTyping=t,this.project=$e(this.project,e.path,this.editor.text),this.saveBreakpoints(),this.dbg&&this.stopDebug("web_visuobject_dbg_code_changed"),this.refresh(),clearTimeout(this.renameTimer),this.renameTimer=window.setTimeout(()=>this.syncFileName(),700)}syncFileName(){var c;const e=this.activeFile;if(!e||this.editing)return;const t=Q(e.path).replace(/\.java$/i,""),s=this.classes.filter(l=>l.path===e.path);if(s.length===0||s.some(l=>l.name===t))return;const i=((c=/\bpublic\s+(?:abstract\s+|final\s+)*(?:class|interface|enum)\s+(\w+)/.exec(e.text))==null?void 0:c[1])??s[0].name;if(!pe.test(i)||s.filter(l=>l.name===i).length!==1)return;const n=le(D(e.path),`${i}.java`);if(this.project.files.some(l=>l.path===n))return;let o=Oe(this.project,e.path,n);const r=this.positions.get(t);r&&!this.positions.has(i)&&this.positions.set(i,r);for(const l of Object.keys(o.uml??{}))l.startsWith(`${t}.`)&&(o={...o,uml:ke(o.uml,l,i+l.slice(t.length))});this.openTabs=this.openTabs.map(l=>l===e.path?n:l),this.treeSelection===`file:${e.path}`&&(this.treeSelection=`file:${n}`),this.isOpen(`file:${e.path}`)&&this.open.set(`file:${n}`,!0),this.project=o,this.active=n,J(ot,n),this.savePositions(),this.refresh()}undo(e){const t=e?this.future:this.history,s=e?this.history:this.future,i=t.pop();if(i===void 0)return;s.push(this.snapshot());const n=JSON.parse(i);this.project=n.project,this.active=n.active,this.lastTyping=0,this.showActive(),this.refresh()}refresh(){J(os,Pe(this.project)),this.renderTabs(),this.classes=Ct(this.project),this.selection&&!this.findClass(this.selection.cls)&&(this.selection=void 0),this.relSelection&&!this.findRelation(this.relSelection)&&!this.findDependency(this.relSelection)&&(this.relSelection=void 0),this.editing||(this.render(),this.renderTree())}ownTypesAt(e){const t=this.activeFile;if(!t)return;const s=this.editor.view.state.doc.toString(),i=X(D(t.path)),n=oe(s).map(l=>({...l,pkg:i})),o=new Set(n.map(l=>l.name)),r=n.find(l=>l.headerFrom<=e&&e<=l.bodyEnd),c=ct()==="de"?"de":ct()==="pt-PT"?"pt":"en";return Ki([...n,...this.classes.filter(l=>l.path!==t.path&&!o.has(l.name))],{cls:r==null?void 0:r.name,pkg:i},c)}findClass(e){return this.classes.find(t=>t.name===e)}caretMoved(){var n,o;const e=this.editor.caret,t=this.classes.find(r=>r.path===this.active&&e>=r.from&&e<=r.to),s=t==null?void 0:t.members.findIndex(r=>e>=r.from&&e<=r.to),i=t?{cls:t.name,member:s!==void 0&&s>=0?s:void 0}:void 0;(i==null?void 0:i.cls)===((n=this.selection)==null?void 0:n.cls)&&(i==null?void 0:i.member)===((o=this.selection)==null?void 0:o.member)||(this.selection=i,this.editing||(this.render(),this.renderTree()))}showInCode(e,t){e.path!==this.active&&(this.active=e.path,this.lastTyping=0,this.showActive());const s=this.editor.view,[i,n]=t?[t.headerFrom,t.headerTo]:[e.nameFrom,e.nameTo],o=Math.min(n,s.state.doc.length);s.dispatch({selection:{anchor:Math.min(i,o),head:o},scrollIntoView:!0})}message(e,t=!1){this.status.textContent=e,this.status.classList.toggle("hint",t)}openFiles(){const e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".zip,.java,.visuobject,application/zip,text/plain",e.addEventListener("change",()=>void this.readFiles([...e.files??[]])),e.click()}async readFiles(e){var t;if(e.length!==0)try{const s=e.find(r=>/\.zip$/i.test(r.name));if(s){const{projectFromZip:r}=await wt(async()=>{const{projectFromZip:l}=await import("./projectZip-hnnNIFP3.js");return{projectFromZip:l}},__vite__mapDeps([0,1,2]),import.meta.url),c=r(new Uint8Array(await s.arrayBuffer()),s.name.replace(/\.zip$/i,""));await this.newProject(c);return}const i=e.find(r=>/\.visuobject$/i.test(r.name));if(i){const r=qt(await i.text());if(!r)throw new Error("format");await this.newProject(r);return}const n=At(this.project.name,await Promise.all(e.map(async r=>({name:r.name,text:await r.text()}))));let o=this.project;for(const r of n.files)o=et(o,r.path,r.text);this.setProject(o,(t=n.files[0])==null?void 0:t.path)}catch{this.message(d("web_visuobject_open_failed"))}}async save(){this.workspace?await this.writeCurrent():await this.downloadZip()}async downloadZip(){const{projectToZip:e}=await wt(async()=>{const{projectToZip:s}=await import("./projectZip-hnnNIFP3.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);Ln(`${this.project.name||"Projekt"}.zip`,t.slice().buffer,"application/zip")}isDirty(e){var t;return!this.workspace||this.saved===void 0?!1:e===void 0?this.saved!==Pe(this.project):this.savedFiles.get(e)!==((t=this.project.files.find(s=>s.path===e))==null?void 0:t.text)}markSaved(){this.saved=Pe(this.project),this.savedFiles=new Map(this.project.files.map(e=>[e.path,e.text]))}async restoreWorkspace(){if(!$t())return;const e=await Ks(us);if(e!=null&&e.ready){const t=await _t(e.handle);if(t)return this.useWorkspace(t.root,!0)}this.pendingFolder=e==null?void 0:e.handle,this.renderWorkspace()}async useWorkspace(e,t=!1){var s;this.workspace=e,this.pendingFolder=void 0,J(rt,"0");try{this.projects=await is(e);const i=se(We),n=this.project;if(t&&i&&this.projects.includes(i)){const o={active:this.active,tabs:[...this.openTabs],positions:new Map(this.positions)};await this.loadProject(i),this.positions=o.positions,this.savePositions(),Pe(n)!==this.saved&&(this.project=n),this.openTabs=o.tabs.filter(r=>this.project.files.some(c=>c.path===r)),this.active=this.project.files.some(r=>r.path===o.active)?o.active:(s=this.project.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}else!this.projects.some(o=>o.toLowerCase()===ge(n.name).toLowerCase())&&n.files.length?(this.folder=ge(n.name),await this.writeCurrent(!1)):this.projects.length?await this.loadProject(this.projects.includes(i??"")?i:this.projects[0]):(this.folder=ge(n.name),await this.writeCurrent(!1))}catch(i){this.message(d("web_visuobject_ws_failed",String((i==null?void 0:i.message)??i)))}this.renderWorkspace(),this.refresh()}async loadProject(e){var i;const{project:t,positions:s}=await wn(this.workspace,e);this.folder=e,this.project=t,this.markSaved(),this.message(""),this.history=[],this.future=[],this.lastTyping=0,this.selection=void 0,this.relSelection=void 0,this.treeSelection=void 0,this.currentPackage=void 0,this.positions=new Map(Object.entries(s)),this.savePositions(),this.openTabs=[],this.active=(i=t.files[0])==null?void 0:i.path,J(We,e),this.showActive(),this.refresh()}async writeCurrent(e=!0){const t=this.workspace;if(!t)return!1;const s=ge(this.project.name),i=this.folder,n=new Set(this.classes.map(r=>r.name)),o=Object.fromEntries([...this.positions].filter(([r])=>n.has(r)));if(s!==i&&this.projects.some(r=>r!==i&&r.toLowerCase()===s.toLowerCase()))return this.message(d("web_visuobject_ws_taken",this.project.name)),!1;try{return await xn(t,s,this.project,o),i&&i!==s&&this.projects.includes(i)&&await t.remove(i),this.folder=s,this.projects=await is(t),J(We,s),this.markSaved(),e&&this.message(d("web_visuobject_ws_saved",t.name,s),!0),this.refresh(),!0}catch(r){return this.message(d("web_visuobject_ws_failed",String((r==null?void 0:r.message)??r))),!1}}async switchProject(e){if(!(!this.workspace||e===this.folder)&&!(this.isDirty()&&!await this.writeCurrent(!1)))try{await this.loadProject(e)}catch(t){this.message(d("web_visuobject_ws_failed",String((t==null?void 0:t.message)??t)))}}async newProject(e,t,s=!1){var n,o;if(!this.workspace){this.setProject(e,t??((n=e.files[0])==null?void 0:n.path)),e.files.length===0&&!s&&this.editProjectName();return}if(this.isDirty()&&!await this.writeCurrent(!1))return;const i=ns(ge(e.name),this.projects);this.project={...e,name:i},this.folder=i,this.history=[],this.future=[],this.openTabs=[],this.positions.clear(),this.savePositions(),this.active=e.files.some(r=>r.path===t)?t:(o=e.files[0])==null?void 0:o.path,this.showActive(),this.refresh(),await this.writeCurrent(!1)&&(this.message(d("web_visuobject_ws_created",i),!0),e.files.length===0&&!s&&this.editProjectName())}get currentPlace(){const e=this.currentPackage??(this.active?D(this.active):ce(this.project)[0]??"");return{root:U(e),pkg:X(e)}}async newFromWizard(e){var u;const t=this.currentPlace,s=(f,m)=>{let g=f;for(let _=2;m(g);_++)g=f+_;return g},i=await an(e,{roots:ue(this.project),packagesIn:f=>ce(this.project,f).map(X),classes:this.classes,root:t.root,pkg:t.pkg,suggest:f=>f==="project"?ns(d("web_visuobject_project_name"),this.workspace?[...this.projects,this.folder??""]:[]):f==="folder"?s("test",m=>ue(this.project).includes(m)):f==="package"?s(d("web_visuobject_new_package_name"),m=>ce(this.project).includes(re(t.root,m))):this.uniqueClassName(d(f==="class"?"web_visuobject_new_class_name":"web_visuobject_new_interface_name")),check:(f,m,g,_)=>{if(!m)return d("web_visuobject_new_name_missing");if(f==="project")return this.workspace&&this.projects.some(y=>y!==this.folder&&y.toLowerCase()===ge(m).toLowerCase())?d("web_visuobject_ws_taken",m):void 0;if(f==="folder")return!Je(m)||ue(this.project).includes(m)?d("web_visuobject_bad_folder",m):void 0;if(f==="package")return!Mt(m)||ce(this.project).includes(re(g,m))?d("web_visuobject_bad_package",m):void 0;if(!pe.test(m))return d("web_visuobject_bad_name",m);if(this.findClass(m)||this.project.files.some(y=>y.path===le(re(g,_),`${m}.java`)))return d("web_visuobject_new_exists",m);if(m.charAt(0)!==m.charAt(0).toUpperCase())return d("web_visuobject_new_upper")}});if(!i)return;const{name:n,root:o,pkg:r}=i;if(e==="project")return this.newProject({name:n,files:[],packages:[]},void 0,!0);if(this.message(""),e==="folder")return this.currentPackage=re(n,""),this.treeSelection=`root:${n}`,this.open.set(`root:${n}`,!0),this.setProject(vi(this.project,n));if(e==="package"){const f=re(o,n);return this.currentPackage=f,this.treeSelection=`pkg:${f}`,this.open.set(`root:${o}`,!0),this.setProject(mi(this.project,f))}const c=re(o,r),l=le(c,`${n}.java`);this.currentPackage=c,this.selection={cls:n},this.open.set(`root:${o}`,!0),this.open.set(`pkg:${c}`,!0),this.setProject(et(this.project,l,this.sectioned(nn(i.options),n)),l);const h=this.findClass(n);h&&this.showInCode(h),(u=this.canvas.querySelector(`.uml-class[data-class="${CSS.escape(n)}"]`))==null||u.scrollIntoView({block:"nearest",inline:"nearest"})}editProjectName(){this.treeSelection="project",this.renderTree(),this.startEditing(this.tree.querySelector('[data-node="project"] > .vo-row .vo-label'))}renderWorkspace(){const e=this.wsBox;e.hidden=!$t();const t=this.shell.querySelector("[data-action=save]");if(t.dataset.tip=d(this.workspace?"web_visuobject_save_ws_tip":"web_visuobject_save_tip"),e.hidden)return;const s=(i,n,o="text-button",r)=>``;this.workspace?(e.className="vo-ws",e.innerHTML=`${b(this.workspace.name)} + `}).join("")}onTabClick(e){var i;const t=e.target,s=(i=t.closest("[data-tab]"))==null?void 0:i.dataset.tab;if(s){if(t.closest("[data-close]"))return this.closeTab(s);this.treeSelection=`file:${s}`,this.openFile(s)}}closeTab(e){const t=this.openTabs.indexOf(e);t<0||(this.openTabs.splice(t,1),e===this.active?(this.active=this.openTabs[Math.min(t,this.openTabs.length-1)],this.lastTyping=0,this.showActive(),this.refresh()):this.renderTabs())}snapshot(){return JSON.stringify({project:this.project,active:this.active})}remember(){this.history.push(this.snapshot()),this.history.length>jn&&this.history.shift(),this.future=[]}setProject(e,t=this.active){var s;this.remember(),this.lastTyping=0,this.project=e,this.active=e.files.some(i=>i.path===t)?t:(s=e.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}openFile(e){if(e===this.active)return;this.active=e,this.lastTyping=0,this.showActive();const t=D(e);this.currentPackage=t,this.open.set(`pkg:${t}`,!0),this.refresh()}typed(){const e=this.activeFile;if(!e)return;const t=Date.now();t-this.lastTyping>1500&&this.remember(),this.lastTyping=t,this.project=$e(this.project,e.path,this.editor.text),this.saveBreakpoints(),this.dbg&&this.stopDebug("web_visuobject_dbg_code_changed"),this.refresh(),clearTimeout(this.renameTimer),this.renameTimer=window.setTimeout(()=>this.syncFileName(),700)}syncFileName(){var c;const e=this.activeFile;if(!e||this.editing)return;const t=Q(e.path).replace(/\.java$/i,""),s=this.classes.filter(l=>l.path===e.path);if(s.length===0||s.some(l=>l.name===t))return;const i=((c=/\bpublic\s+(?:abstract\s+|final\s+)*(?:class|interface|enum)\s+(\w+)/.exec(e.text))==null?void 0:c[1])??s[0].name;if(!pe.test(i)||s.filter(l=>l.name===i).length!==1)return;const n=le(D(e.path),`${i}.java`);if(this.project.files.some(l=>l.path===n))return;let o=Oe(this.project,e.path,n);const r=this.positions.get(t);r&&!this.positions.has(i)&&this.positions.set(i,r);for(const l of Object.keys(o.uml??{}))l.startsWith(`${t}.`)&&(o={...o,uml:ke(o.uml,l,i+l.slice(t.length))});this.openTabs=this.openTabs.map(l=>l===e.path?n:l),this.treeSelection===`file:${e.path}`&&(this.treeSelection=`file:${n}`),this.isOpen(`file:${e.path}`)&&this.open.set(`file:${n}`,!0),this.project=o,this.active=n,J(ot,n),this.savePositions(),this.refresh()}undo(e){const t=e?this.future:this.history,s=e?this.history:this.future,i=t.pop();if(i===void 0)return;s.push(this.snapshot());const n=JSON.parse(i);this.project=n.project,this.active=n.active,this.lastTyping=0,this.showActive(),this.refresh()}refresh(){J(os,Pe(this.project)),this.renderTabs(),this.classes=Ct(this.project),this.selection&&!this.findClass(this.selection.cls)&&(this.selection=void 0),this.relSelection&&!this.findRelation(this.relSelection)&&!this.findDependency(this.relSelection)&&(this.relSelection=void 0),this.editing||(this.render(),this.renderTree())}ownTypesAt(e){const t=this.activeFile;if(!t)return;const s=this.editor.view.state.doc.toString(),i=X(D(t.path)),n=oe(s).map(l=>({...l,pkg:i})),o=new Set(n.map(l=>l.name)),r=n.find(l=>l.headerFrom<=e&&e<=l.bodyEnd),c=ct()==="de"?"de":ct()==="pt-PT"?"pt":"en";return Ki([...n,...this.classes.filter(l=>l.path!==t.path&&!o.has(l.name))],{cls:r==null?void 0:r.name,pkg:i},c)}findClass(e){return this.classes.find(t=>t.name===e)}caretMoved(){var n,o;const e=this.editor.caret,t=this.classes.find(r=>r.path===this.active&&e>=r.from&&e<=r.to),s=t==null?void 0:t.members.findIndex(r=>e>=r.from&&e<=r.to),i=t?{cls:t.name,member:s!==void 0&&s>=0?s:void 0}:void 0;(i==null?void 0:i.cls)===((n=this.selection)==null?void 0:n.cls)&&(i==null?void 0:i.member)===((o=this.selection)==null?void 0:o.member)||(this.selection=i,this.editing||(this.render(),this.renderTree()))}showInCode(e,t){e.path!==this.active&&(this.active=e.path,this.lastTyping=0,this.showActive());const s=this.editor.view,[i,n]=t?[t.headerFrom,t.headerTo]:[e.nameFrom,e.nameTo],o=Math.min(n,s.state.doc.length);s.dispatch({selection:{anchor:Math.min(i,o),head:o},scrollIntoView:!0})}message(e,t=!1){this.status.textContent=e,this.status.classList.toggle("hint",t)}openFiles(){const e=document.createElement("input");e.type="file",e.multiple=!0,e.accept=".zip,.java,.visuobject,application/zip,text/plain",e.addEventListener("change",()=>void this.readFiles([...e.files??[]])),e.click()}async readFiles(e){var t;if(e.length!==0)try{const s=e.find(r=>/\.zip$/i.test(r.name));if(s){const{projectFromZip:r}=await wt(async()=>{const{projectFromZip:l}=await import("./projectZip-U6owH1qi.js");return{projectFromZip:l}},__vite__mapDeps([0,1,2]),import.meta.url),c=r(new Uint8Array(await s.arrayBuffer()),s.name.replace(/\.zip$/i,""));await this.newProject(c);return}const i=e.find(r=>/\.visuobject$/i.test(r.name));if(i){const r=qt(await i.text());if(!r)throw new Error("format");await this.newProject(r);return}const n=At(this.project.name,await Promise.all(e.map(async r=>({name:r.name,text:await r.text()}))));let o=this.project;for(const r of n.files)o=et(o,r.path,r.text);this.setProject(o,(t=n.files[0])==null?void 0:t.path)}catch{this.message(d("web_visuobject_open_failed"))}}async save(){this.workspace?await this.writeCurrent():await this.downloadZip()}async downloadZip(){const{projectToZip:e}=await wt(async()=>{const{projectToZip:s}=await import("./projectZip-U6owH1qi.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);Ln(`${this.project.name||"Projekt"}.zip`,t.slice().buffer,"application/zip")}isDirty(e){var t;return!this.workspace||this.saved===void 0?!1:e===void 0?this.saved!==Pe(this.project):this.savedFiles.get(e)!==((t=this.project.files.find(s=>s.path===e))==null?void 0:t.text)}markSaved(){this.saved=Pe(this.project),this.savedFiles=new Map(this.project.files.map(e=>[e.path,e.text]))}async restoreWorkspace(){if(!$t())return;const e=await Ks(us);if(e!=null&&e.ready){const t=await _t(e.handle);if(t)return this.useWorkspace(t.root,!0)}this.pendingFolder=e==null?void 0:e.handle,this.renderWorkspace()}async useWorkspace(e,t=!1){var s;this.workspace=e,this.pendingFolder=void 0,J(rt,"0");try{this.projects=await is(e);const i=se(We),n=this.project;if(t&&i&&this.projects.includes(i)){const o={active:this.active,tabs:[...this.openTabs],positions:new Map(this.positions)};await this.loadProject(i),this.positions=o.positions,this.savePositions(),Pe(n)!==this.saved&&(this.project=n),this.openTabs=o.tabs.filter(r=>this.project.files.some(c=>c.path===r)),this.active=this.project.files.some(r=>r.path===o.active)?o.active:(s=this.project.files[0])==null?void 0:s.path,this.showActive(),this.refresh()}else!this.projects.some(o=>o.toLowerCase()===ge(n.name).toLowerCase())&&n.files.length?(this.folder=ge(n.name),await this.writeCurrent(!1)):this.projects.length?await this.loadProject(this.projects.includes(i??"")?i:this.projects[0]):(this.folder=ge(n.name),await this.writeCurrent(!1))}catch(i){this.message(d("web_visuobject_ws_failed",String((i==null?void 0:i.message)??i)))}this.renderWorkspace(),this.refresh()}async loadProject(e){var i;const{project:t,positions:s}=await wn(this.workspace,e);this.folder=e,this.project=t,this.markSaved(),this.message(""),this.history=[],this.future=[],this.lastTyping=0,this.selection=void 0,this.relSelection=void 0,this.treeSelection=void 0,this.currentPackage=void 0,this.positions=new Map(Object.entries(s)),this.savePositions(),this.openTabs=[],this.active=(i=t.files[0])==null?void 0:i.path,J(We,e),this.showActive(),this.refresh()}async writeCurrent(e=!0){const t=this.workspace;if(!t)return!1;const s=ge(this.project.name),i=this.folder,n=new Set(this.classes.map(r=>r.name)),o=Object.fromEntries([...this.positions].filter(([r])=>n.has(r)));if(s!==i&&this.projects.some(r=>r!==i&&r.toLowerCase()===s.toLowerCase()))return this.message(d("web_visuobject_ws_taken",this.project.name)),!1;try{return await xn(t,s,this.project,o),i&&i!==s&&this.projects.includes(i)&&await t.remove(i),this.folder=s,this.projects=await is(t),J(We,s),this.markSaved(),e&&this.message(d("web_visuobject_ws_saved",t.name,s),!0),this.refresh(),!0}catch(r){return this.message(d("web_visuobject_ws_failed",String((r==null?void 0:r.message)??r))),!1}}async switchProject(e){if(!(!this.workspace||e===this.folder)&&!(this.isDirty()&&!await this.writeCurrent(!1)))try{await this.loadProject(e)}catch(t){this.message(d("web_visuobject_ws_failed",String((t==null?void 0:t.message)??t)))}}async newProject(e,t,s=!1){var n,o;if(!this.workspace){this.setProject(e,t??((n=e.files[0])==null?void 0:n.path)),e.files.length===0&&!s&&this.editProjectName();return}if(this.isDirty()&&!await this.writeCurrent(!1))return;const i=ns(ge(e.name),this.projects);this.project={...e,name:i},this.folder=i,this.history=[],this.future=[],this.openTabs=[],this.positions.clear(),this.savePositions(),this.active=e.files.some(r=>r.path===t)?t:(o=e.files[0])==null?void 0:o.path,this.showActive(),this.refresh(),await this.writeCurrent(!1)&&(this.message(d("web_visuobject_ws_created",i),!0),e.files.length===0&&!s&&this.editProjectName())}get currentPlace(){const e=this.currentPackage??(this.active?D(this.active):ce(this.project)[0]??"");return{root:U(e),pkg:X(e)}}async newFromWizard(e){var u;const t=this.currentPlace,s=(f,m)=>{let g=f;for(let _=2;m(g);_++)g=f+_;return g},i=await an(e,{roots:ue(this.project),packagesIn:f=>ce(this.project,f).map(X),classes:this.classes,root:t.root,pkg:t.pkg,suggest:f=>f==="project"?ns(d("web_visuobject_project_name"),this.workspace?[...this.projects,this.folder??""]:[]):f==="folder"?s("test",m=>ue(this.project).includes(m)):f==="package"?s(d("web_visuobject_new_package_name"),m=>ce(this.project).includes(re(t.root,m))):this.uniqueClassName(d(f==="class"?"web_visuobject_new_class_name":"web_visuobject_new_interface_name")),check:(f,m,g,_)=>{if(!m)return d("web_visuobject_new_name_missing");if(f==="project")return this.workspace&&this.projects.some(y=>y!==this.folder&&y.toLowerCase()===ge(m).toLowerCase())?d("web_visuobject_ws_taken",m):void 0;if(f==="folder")return!Je(m)||ue(this.project).includes(m)?d("web_visuobject_bad_folder",m):void 0;if(f==="package")return!Mt(m)||ce(this.project).includes(re(g,m))?d("web_visuobject_bad_package",m):void 0;if(!pe.test(m))return d("web_visuobject_bad_name",m);if(this.findClass(m)||this.project.files.some(y=>y.path===le(re(g,_),`${m}.java`)))return d("web_visuobject_new_exists",m);if(m.charAt(0)!==m.charAt(0).toUpperCase())return d("web_visuobject_new_upper")}});if(!i)return;const{name:n,root:o,pkg:r}=i;if(e==="project")return this.newProject({name:n,files:[],packages:[]},void 0,!0);if(this.message(""),e==="folder")return this.currentPackage=re(n,""),this.treeSelection=`root:${n}`,this.open.set(`root:${n}`,!0),this.setProject(vi(this.project,n));if(e==="package"){const f=re(o,n);return this.currentPackage=f,this.treeSelection=`pkg:${f}`,this.open.set(`root:${o}`,!0),this.setProject(mi(this.project,f))}const c=re(o,r),l=le(c,`${n}.java`);this.currentPackage=c,this.selection={cls:n},this.open.set(`root:${o}`,!0),this.open.set(`pkg:${c}`,!0),this.setProject(et(this.project,l,this.sectioned(nn(i.options),n)),l);const h=this.findClass(n);h&&this.showInCode(h),(u=this.canvas.querySelector(`.uml-class[data-class="${CSS.escape(n)}"]`))==null||u.scrollIntoView({block:"nearest",inline:"nearest"})}editProjectName(){this.treeSelection="project",this.renderTree(),this.startEditing(this.tree.querySelector('[data-node="project"] > .vo-row .vo-label'))}renderWorkspace(){const e=this.wsBox;e.hidden=!$t();const t=this.shell.querySelector("[data-action=save]");if(t.dataset.tip=d(this.workspace?"web_visuobject_save_ws_tip":"web_visuobject_save_tip"),e.hidden)return;const s=(i,n,o="text-button",r)=>``;this.workspace?(e.className="vo-ws",e.innerHTML=`${b(this.workspace.name)} ${s("zip",d("web_visuobject_ws_zip"),"text-button",d("web_visuobject_ws_zip_tip"))} ${s("switch",d("web_visuobject_ws_switch"),"text-button")}`):this.pendingFolder?(e.className="vo-ws",e.innerHTML=`${s("reopen",d("web_visuobject_ws_reopen",this.pendingFolder.name),"text-button primary")}${s("switch",d("web_visuobject_ws_switch"),"text-button")}`):se(rt)==="1"?(e.className="vo-ws",e.innerHTML=s("open",d("web_visuobject_ws_choose"),"text-button",d("web_visuobject_ws_hint"))):(e.className="vo-ws ask",e.innerHTML=`

${b(d("web_visuobject_ws_question"))}

${b(d("web_visuobject_ws_hint"))}

diff --git a/website/app/assets/projectZip-hnnNIFP3.js b/website/app/assets/projectZip-U6owH1qi.js similarity index 99% rename from website/app/assets/projectZip-hnnNIFP3.js rename to website/app/assets/projectZip-U6owH1qi.js index 7e160f65..18b737c1 100644 --- a/website/app/assets/projectZip-hnnNIFP3.js +++ b/website/app/assets/projectZip-U6owH1qi.js @@ -1 +1 @@ -import{p as Br,d as Er,a as mr,i as Gr,b as Qr,c as Vr,u as Lr,n as _r,o as pr,e as br,r as dr,f as re,s as ee}from"./objectApp-DkBXkNTX.js";import"./index-DuzNMqv5.js";var M=Uint8Array,K=Uint16Array,Tr=Int32Array,hr=new M([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gr=new M([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Sr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(r,e){for(var n=new K(31),a=0;a<31;++a)n[a]=e+=1<>1|(F&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,Cr[F]=((b&65280)>>8|(b&255)<<8)>>1}var V=(function(r,e,n){for(var a=r.length,f=0,v=new K(e);f>l]=c}else for(s=new K(a),f=0;f>15-r[f]);return s}),d=new M(288);for(var F=0;F<144;++F)d[F]=8;for(var F=144;F<256;++F)d[F]=9;for(var F=256;F<280;++F)d[F]=7;for(var F=280;F<288;++F)d[F]=8;var ir=new M(32);for(var F=0;F<32;++F)ir[F]=5;var ae=V(d,9,0),fe=V(d,9,1),ve=V(ir,5,0),te=V(ir,5,1),xr=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},X=function(r,e,n){var a=e/8|0;return(r[a]|r[a+1]<<8)>>(e&7)&n},yr=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},Ur=function(r){return(r+7)/8|0},lr=function(r,e,n){return(e==null||e<0)&&(e=0),(n==null||n>r.length)&&(n=r.length),new M(r.subarray(e,n))},oe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],I=function(r,e,n){var a=new Error(e||oe[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,I),!n)throw a;return a},ie=function(r,e,n,a){var f=r.length,v=a?a.length:0;if(!f||e.f&&!e.l)return n||new M(0);var i=!n,s=i||e.i!=2,l=e.i;i&&(n=new M(f*3));var c=function(fr){var vr=n.length;if(fr>vr){var nr=new M(Math.max(vr*2,fr));nr.set(n),n=nr}},t=e.f||0,o=e.p||0,u=e.b||0,h=e.l,y=e.d,w=e.m,x=e.n,T=f*8;do{if(!h){t=X(r,o,1);var z=X(r,o+1,3);if(o+=3,z)if(z==1)h=fe,y=te,w=9,x=5;else if(z==2){var U=X(r,o,31)+257,A=X(r,o+10,15)+4,m=U+X(r,o+5,31)+1;o+=14;for(var g=new M(m),B=new M(19),j=0;j>4;if(C<16)g[j++]=C;else{var E=0,k=0;for(C==16?(k=3+X(r,o,3),o+=2,E=g[j-1]):C==17?(k=3+X(r,o,7),o+=3):C==18&&(k=11+X(r,o,127),o+=7);k--;)g[j++]=E}}var W=g.subarray(0,U),J=g.subarray(U);w=xr(W),x=xr(J),h=V(W,w,1),y=V(J,x,1)}else I(1);else{var C=Ur(o)+4,O=r[C-4]|r[C-3]<<8,$=C+O;if($>f){l&&I(0);break}s&&c(u+O),n.set(r.subarray(C,$),u),e.b=u+=O,e.p=o=$*8,e.f=t;continue}if(o>T){l&&I(0);break}}s&&c(u+131072);for(var ar=(1<>4;if(o+=E&15,o>T){l&&I(0);break}if(E||I(2),q<256)n[u++]=q;else if(q==256){L=o,h=null;break}else{var H=q-254;if(q>264){var j=q-257,S=hr[j];H=X(r,o,(1<>4;G||I(3),o+=G&15;var J=ne[rr];if(rr>3){var S=gr[rr];J+=yr(r,o)&(1<T){l&&I(0);break}s&&c(u+131072);var er=u+H;if(u>8},tr=function(r,e,n){n<<=e&7;var a=e/8|0;r[a]|=n,r[a+1]|=n>>8,r[a+2]|=n>>16},Fr=function(r,e){for(var n=[],a=0;au&&(u=v[a].s);var h=new K(u+1),y=Or(n[t-1],h,0);if(y>e){var a=0,w=0,x=y-e,T=1<e)w+=T-(1<>=x;w>0;){var C=v[a].s;h[C]=0&&w;--a){var O=v[a].s;h[O]==e&&(--h[O],++w)}y=e}return{t:new M(h),l:y}},Or=function(r,e,n){return r.s==-1?Math.max(Or(r.l,e,n+1),Or(r.r,e,n+1)):e[r.s]=n},Nr=function(r){for(var e=r.length;e&&!r[--e];);for(var n=new K(++e),a=0,f=r[0],v=1,i=function(l){n[a++]=l},s=1;s<=e;++s)if(r[s]==f&&s!=e)++v;else{if(!f&&v>2){for(;v>138;v-=138)i(32754);v>2&&(i(v>10?v-11<<5|28690:v-3<<5|12305),v=0)}else if(v>3){for(i(f),--v;v>6;v-=6)i(8304);v>2&&(i(v-3<<5|8208),v=0)}for(;v--;)i(f);v=1,f=r[s]}return{c:n.subarray(0,a),n:e}},or=function(r,e){for(var n=0,a=0;a>8,r[f+2]=r[f]^255,r[f+3]=r[f+1]^255;for(var v=0;v4&&!B[Sr[D-1]];--D);var p=c+5<<3,Z=or(f,d)+or(v,ir)+i,P=or(f,u)+or(v,w)+i+14+3*D+or(A,B)+2*A[16]+3*A[17]+7*A[18];if(l>=0&&p<=Z&&p<=P)return Kr(e,t,r.subarray(l,l+c));var E,k,W,J;if(_(e,t,1+(P15&&(_(e,t,q[m]>>5&127),t+=q[m]>>12)}}else E=ae,k=d,W=ve,J=ir;for(var m=0;m255){var H=S>>18&31;tr(e,t,E[H+257]),t+=k[H+257],H>7&&(_(e,t,S>>23&31),t+=hr[H]);var G=S&31;tr(e,t,W[G]),t+=J[G],G>3&&(tr(e,t,S>>5&8191),t+=gr[G])}else tr(e,t,E[S]),t+=k[S]}return tr(e,t,E[256]),t+k[256]},le=new Tr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Rr=new M(0),se=function(r,e,n,a,f,v){var i=v.z||r.length,s=new M(a+i+5*(1+Math.ceil(i/7e3))+f),l=s.subarray(a,s.length-f),c=v.l,t=(v.r||0)&7;if(e){t&&(l[0]=v.r>>3);for(var o=le[e-1],u=o>>13,h=o&8191,y=(1<7e3||B>24576)&&(E>423||!c)){t=Dr(r,l,0,O,$,U,m,B,D,g-D,t),B=A=m=0,D=g;for(var k=0;k<286;++k)$[k]=0;for(var k=0;k<30;++k)U[k]=0}var W=2,J=0,ar=h,R=Z-P&32767;if(E>2&&p==C(g-R))for(var L=Math.min(u,E)-1,q=Math.min(32767,g),H=Math.min(258,E);R<=q&&--ar&&Z!=P;){if(r[g+W]==r[g+W-R]){for(var S=0;SW){if(W=S,J=R,S>L)break;for(var G=Math.min(R,S-2),rr=0,k=0;krr&&(rr=ur,P=er)}}}Z=P,P=w[Z],R+=Z-P&32767}if(J){O[B++]=268435456|Mr[W]<<18|Jr[J];var fr=Mr[W]&31,vr=Jr[J]&31;m+=hr[fr]+gr[vr],++$[257+fr],++U[vr],j=g+W,++A}else O[B++]=r[g],++$[r[g]]}}for(g=Math.max(g,j);g=i&&(l[t/8|0]=c,nr=i),t=Kr(l,t+1,r.subarray(g,nr))}v.i=i}return lr(s,0,a+Ur(t)+f)},ue=(function(){for(var r=new Int32Array(256),e=0;e<256;++e){for(var n=e,a=9;--a;)n=(n&1&&-306674912)^n>>>1;r[e]=n}return r})(),ce=function(){var r=-1;return{p:function(e){for(var n=r,a=0;a>>8;r=n},d:function(){return~r}}},he=function(r,e,n,a,f){if(!f&&(f={l:1},e.dictionary)){var v=e.dictionary.subarray(-32768),i=new M(v.length+r.length);i.set(v),i.set(r,v.length),r=i,f.w=v.length}return se(r,e.level==null?6:e.level,e.mem==null?f.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+e.mem,n,a,f)},Xr=function(r,e){var n={};for(var a in r)n[a]=r[a];for(var a in e)n[a]=e[a];return n},Q=function(r,e){return r[e]|r[e+1]<<8},Y=function(r,e){return(r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24)>>>0},kr=function(r,e){return Y(r,e)+Y(r,e+4)*4294967296},N=function(r,e,n){for(;n;++e)r[e]=n,n>>>=8};function ge(r,e){return he(r,e||{},0,0)}function we(r,e){return ie(r,{i:2},e&&e.out,e&&e.dictionary)}var Yr=function(r,e,n,a){for(var f in r){var v=r[f],i=e+f,s=a;Array.isArray(v)&&(s=Xr(a,v[1]),v=v[0]),v instanceof M?n[i]=[v,s]:(n[i+="/"]=[new M(0),s],Yr(v,i,n,a))}},Ir=typeof TextEncoder<"u"&&new TextEncoder,Ar=typeof TextDecoder<"u"&&new TextDecoder,me=0;try{Ar.decode(Rr,{stream:!0}),me=1}catch{}var xe=function(r){for(var e="",n=0;;){var a=r[n++],f=(a>127)+(a>223)+(a>239);if(n+f>r.length)return{s:e,r:lr(r,n-1)};f?f==3?(a=((a&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):f&1?e+=String.fromCharCode((a&31)<<6|r[n++]&63):e+=String.fromCharCode((a&15)<<12|(r[n++]&63)<<6|r[n++]&63):e+=String.fromCharCode(a)}};function cr(r,e){var n;if(Ir)return Ir.encode(r);for(var a=r.length,f=new M(r.length+(r.length>>1)),v=0,i=function(c){f[v++]=c},n=0;nf.length){var s=new M(v+8+(a-n<<1));s.set(f),f=s}var l=r.charCodeAt(n);l<128||e?i(l):l<2048?(i(192|l>>6),i(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|r.charCodeAt(++n)&1023,i(240|l>>18),i(128|l>>12&63),i(128|l>>6&63),i(128|l&63)):(i(224|l>>12),i(128|l>>6&63),i(128|l&63))}return lr(f,0,v)}function jr(r,e){if(e){for(var n="",a=0;a65535&&I(9),e+=a+4}return e},Pr=function(r,e,n,a,f,v,i,s){var l=a.length,c=n.extra,t=s&&s.length,o=zr(c);N(r,e,i!=null?33639248:67324752),e+=4,i!=null&&(r[e++]=20,r[e++]=n.os),r[e]=20,e+=2,r[e++]=n.flag<<1|(v<0&&8),r[e++]=f&&8,r[e++]=n.compression&255,r[e++]=n.compression>>8;var u=new Date(n.mtime==null?Date.now():n.mtime),h=u.getFullYear()-1980;if((h<0||h>119)&&I(10),N(r,e,h<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,v!=-1&&(N(r,e,n.crc),N(r,e+4,v<0?-v-2:v),N(r,e+8,n.size)),N(r,e+12,l),N(r,e+14,o),e+=16,i!=null&&(N(r,e,t),N(r,e+6,n.attrs),N(r,e+10,i),e+=14),r.set(a,e),e+=l,o)for(var y in c){var w=c[y],x=w.length;N(r,e,+y),N(r,e+2,x),r.set(w,e+4),e+=4+x}return t&&(r.set(s,e),e+=t),e},Se=function(r,e,n,a,f){N(r,e,101010256),N(r,e+8,n),N(r,e+10,n),N(r,e+12,a),N(r,e+16,f)};function Me(r,e){e||(e={});var n={},a=[];Yr(r,"",n,e);var f=0,v=0;for(var i in n){var s=n[i],l=s[0],c=s[1],t=c.level==0?0:8,o=cr(i),u=o.length,h=c.comment,y=h&&cr(h),w=y&&y.length,x=zr(c.extra);u>65535&&I(11);var T=t?ge(l,c):l,z=T.length,C=ce();C.p(l),a.push(Xr(c,{size:l.length,crc:C.d(),c:T,f:o,m:y,u:u!=i.length||y&&h.length!=w,o:f,compression:t})),f+=30+u+x+z,v+=76+2*(u+x)+(w||0)+z}for(var O=new M(v+22),$=f,U=v-f,A=0;A65558)&&I(13);var f=Q(r,a+8);if(!f)return{};var v=Y(r,a+16),i=v==4294967295||f==65535;if(i){var s=Y(r,a-12);i=Y(r,s)==101075792,i&&(f=Y(r,s+32),v=Y(r,s+48))}for(var l=0;l|]/g,"_")||"Projekt",n={};for(const l of r.files)n[`${e}/${br(l.path)}`]=new Uint8Array(cr(l.text));const a=[...r.packages.map(l=>`${e}/${dr(l)}/${re(l).replace(/\./g,"/")}/`),...ee(r).map(l=>`${e}/${l}/`)];for(const l of a)Object.keys(n).some(c=>c.startsWith(l))||(n[l.replace(/\/\/$/,"/")]=new Uint8Array);return(r.uml&&Object.keys(r.uml).length||(f=r.notes)!=null&&f.length||(v=r.objects)!=null&&v.length)&&(n[`${e}/${$r}`]=new Uint8Array(cr(JSON.stringify({format:"visuobject",version:1,uml:r.uml??{},...(i=r.notes)!=null&&i.length?{notes:r.notes}:{},...(s=r.objects)!=null&&s.length?{objects:r.objects}:{}},null,2)))),Me(n,{level:6})}function ze(r,e){var c;const n=Ce(r),a=Object.entries(n).filter(([t])=>/\.java$/i.test(t)&&!t.startsWith("__MACOSX/")).map(([t,o])=>({name:t,text:jr(o)})),f=new Set(Object.keys(n).map(t=>t.split("/")[0])),v=f.size===1&&Object.keys(n).some(t=>t.includes("/"))?[...f][0]:e,i=v!==e,s=Br(v,[]);for(const t of a){const o=Br(v,[{name:t.name.slice(t.name.lastIndexOf("/")+1),text:t.text}]).files[0],u=t.name.split("/").slice(i?1:0,-1),h=Er(o.text).split(".").filter(Boolean),w=u.slice(u.length-h.length).join("/")===h.join("/")?u.slice(0,u.length-h.length).join("/"):"",x=w&&w!==mr&&w.split("/").every(Gr)&&!w.includes(":")?w:mr,T=Qr(Vr(x,Er(o.text)),o.path.slice(o.path.lastIndexOf("/")+1));s.files=[...s.files.filter(z=>z.path!==T),{...o,path:T}],x!==mr&&!((c=s.sourceFolders)!=null&&c.includes(x))&&(s.sourceFolders=[...s.sourceFolders??[],x])}const l=Object.entries(n).find(([t])=>t===$r||t.endsWith(`/${$r}`));if(l)try{const t=JSON.parse(jr(l[1])),o=Lr(t.uml);o&&(s.uml=o);const u=_r(t.notes);u&&(s.notes=u);const h=pr(t.objects);h&&(s.objects=h)}catch{}return s}export{ze as projectFromZip,je as projectToZip}; +import{p as Br,d as Er,a as mr,i as Gr,b as Qr,c as Vr,u as Lr,n as _r,o as pr,e as br,r as dr,f as re,s as ee}from"./objectApp-B_BhGjAU.js";import"./index-f5yHO7xw.js";var M=Uint8Array,K=Uint16Array,Tr=Int32Array,hr=new M([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),gr=new M([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Sr=new M([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Wr=function(r,e){for(var n=new K(31),a=0;a<31;++a)n[a]=e+=1<>1|(F&21845)<<1;b=(b&52428)>>2|(b&13107)<<2,b=(b&61680)>>4|(b&3855)<<4,Cr[F]=((b&65280)>>8|(b&255)<<8)>>1}var V=(function(r,e,n){for(var a=r.length,f=0,v=new K(e);f>l]=c}else for(s=new K(a),f=0;f>15-r[f]);return s}),d=new M(288);for(var F=0;F<144;++F)d[F]=8;for(var F=144;F<256;++F)d[F]=9;for(var F=256;F<280;++F)d[F]=7;for(var F=280;F<288;++F)d[F]=8;var ir=new M(32);for(var F=0;F<32;++F)ir[F]=5;var ae=V(d,9,0),fe=V(d,9,1),ve=V(ir,5,0),te=V(ir,5,1),xr=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},X=function(r,e,n){var a=e/8|0;return(r[a]|r[a+1]<<8)>>(e&7)&n},yr=function(r,e){var n=e/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(e&7)},Ur=function(r){return(r+7)/8|0},lr=function(r,e,n){return(e==null||e<0)&&(e=0),(n==null||n>r.length)&&(n=r.length),new M(r.subarray(e,n))},oe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],I=function(r,e,n){var a=new Error(e||oe[r]);if(a.code=r,Error.captureStackTrace&&Error.captureStackTrace(a,I),!n)throw a;return a},ie=function(r,e,n,a){var f=r.length,v=a?a.length:0;if(!f||e.f&&!e.l)return n||new M(0);var i=!n,s=i||e.i!=2,l=e.i;i&&(n=new M(f*3));var c=function(fr){var vr=n.length;if(fr>vr){var nr=new M(Math.max(vr*2,fr));nr.set(n),n=nr}},t=e.f||0,o=e.p||0,u=e.b||0,h=e.l,y=e.d,w=e.m,x=e.n,T=f*8;do{if(!h){t=X(r,o,1);var z=X(r,o+1,3);if(o+=3,z)if(z==1)h=fe,y=te,w=9,x=5;else if(z==2){var U=X(r,o,31)+257,A=X(r,o+10,15)+4,m=U+X(r,o+5,31)+1;o+=14;for(var g=new M(m),B=new M(19),j=0;j>4;if(C<16)g[j++]=C;else{var E=0,k=0;for(C==16?(k=3+X(r,o,3),o+=2,E=g[j-1]):C==17?(k=3+X(r,o,7),o+=3):C==18&&(k=11+X(r,o,127),o+=7);k--;)g[j++]=E}}var W=g.subarray(0,U),J=g.subarray(U);w=xr(W),x=xr(J),h=V(W,w,1),y=V(J,x,1)}else I(1);else{var C=Ur(o)+4,O=r[C-4]|r[C-3]<<8,$=C+O;if($>f){l&&I(0);break}s&&c(u+O),n.set(r.subarray(C,$),u),e.b=u+=O,e.p=o=$*8,e.f=t;continue}if(o>T){l&&I(0);break}}s&&c(u+131072);for(var ar=(1<>4;if(o+=E&15,o>T){l&&I(0);break}if(E||I(2),q<256)n[u++]=q;else if(q==256){L=o,h=null;break}else{var H=q-254;if(q>264){var j=q-257,S=hr[j];H=X(r,o,(1<>4;G||I(3),o+=G&15;var J=ne[rr];if(rr>3){var S=gr[rr];J+=yr(r,o)&(1<T){l&&I(0);break}s&&c(u+131072);var er=u+H;if(u>8},tr=function(r,e,n){n<<=e&7;var a=e/8|0;r[a]|=n,r[a+1]|=n>>8,r[a+2]|=n>>16},Fr=function(r,e){for(var n=[],a=0;au&&(u=v[a].s);var h=new K(u+1),y=Or(n[t-1],h,0);if(y>e){var a=0,w=0,x=y-e,T=1<e)w+=T-(1<>=x;w>0;){var C=v[a].s;h[C]=0&&w;--a){var O=v[a].s;h[O]==e&&(--h[O],++w)}y=e}return{t:new M(h),l:y}},Or=function(r,e,n){return r.s==-1?Math.max(Or(r.l,e,n+1),Or(r.r,e,n+1)):e[r.s]=n},Nr=function(r){for(var e=r.length;e&&!r[--e];);for(var n=new K(++e),a=0,f=r[0],v=1,i=function(l){n[a++]=l},s=1;s<=e;++s)if(r[s]==f&&s!=e)++v;else{if(!f&&v>2){for(;v>138;v-=138)i(32754);v>2&&(i(v>10?v-11<<5|28690:v-3<<5|12305),v=0)}else if(v>3){for(i(f),--v;v>6;v-=6)i(8304);v>2&&(i(v-3<<5|8208),v=0)}for(;v--;)i(f);v=1,f=r[s]}return{c:n.subarray(0,a),n:e}},or=function(r,e){for(var n=0,a=0;a>8,r[f+2]=r[f]^255,r[f+3]=r[f+1]^255;for(var v=0;v4&&!B[Sr[D-1]];--D);var p=c+5<<3,Z=or(f,d)+or(v,ir)+i,P=or(f,u)+or(v,w)+i+14+3*D+or(A,B)+2*A[16]+3*A[17]+7*A[18];if(l>=0&&p<=Z&&p<=P)return Kr(e,t,r.subarray(l,l+c));var E,k,W,J;if(_(e,t,1+(P15&&(_(e,t,q[m]>>5&127),t+=q[m]>>12)}}else E=ae,k=d,W=ve,J=ir;for(var m=0;m255){var H=S>>18&31;tr(e,t,E[H+257]),t+=k[H+257],H>7&&(_(e,t,S>>23&31),t+=hr[H]);var G=S&31;tr(e,t,W[G]),t+=J[G],G>3&&(tr(e,t,S>>5&8191),t+=gr[G])}else tr(e,t,E[S]),t+=k[S]}return tr(e,t,E[256]),t+k[256]},le=new Tr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Rr=new M(0),se=function(r,e,n,a,f,v){var i=v.z||r.length,s=new M(a+i+5*(1+Math.ceil(i/7e3))+f),l=s.subarray(a,s.length-f),c=v.l,t=(v.r||0)&7;if(e){t&&(l[0]=v.r>>3);for(var o=le[e-1],u=o>>13,h=o&8191,y=(1<7e3||B>24576)&&(E>423||!c)){t=Dr(r,l,0,O,$,U,m,B,D,g-D,t),B=A=m=0,D=g;for(var k=0;k<286;++k)$[k]=0;for(var k=0;k<30;++k)U[k]=0}var W=2,J=0,ar=h,R=Z-P&32767;if(E>2&&p==C(g-R))for(var L=Math.min(u,E)-1,q=Math.min(32767,g),H=Math.min(258,E);R<=q&&--ar&&Z!=P;){if(r[g+W]==r[g+W-R]){for(var S=0;SW){if(W=S,J=R,S>L)break;for(var G=Math.min(R,S-2),rr=0,k=0;krr&&(rr=ur,P=er)}}}Z=P,P=w[Z],R+=Z-P&32767}if(J){O[B++]=268435456|Mr[W]<<18|Jr[J];var fr=Mr[W]&31,vr=Jr[J]&31;m+=hr[fr]+gr[vr],++$[257+fr],++U[vr],j=g+W,++A}else O[B++]=r[g],++$[r[g]]}}for(g=Math.max(g,j);g=i&&(l[t/8|0]=c,nr=i),t=Kr(l,t+1,r.subarray(g,nr))}v.i=i}return lr(s,0,a+Ur(t)+f)},ue=(function(){for(var r=new Int32Array(256),e=0;e<256;++e){for(var n=e,a=9;--a;)n=(n&1&&-306674912)^n>>>1;r[e]=n}return r})(),ce=function(){var r=-1;return{p:function(e){for(var n=r,a=0;a>>8;r=n},d:function(){return~r}}},he=function(r,e,n,a,f){if(!f&&(f={l:1},e.dictionary)){var v=e.dictionary.subarray(-32768),i=new M(v.length+r.length);i.set(v),i.set(r,v.length),r=i,f.w=v.length}return se(r,e.level==null?6:e.level,e.mem==null?f.l?Math.ceil(Math.max(8,Math.min(13,Math.log(r.length)))*1.5):20:12+e.mem,n,a,f)},Xr=function(r,e){var n={};for(var a in r)n[a]=r[a];for(var a in e)n[a]=e[a];return n},Q=function(r,e){return r[e]|r[e+1]<<8},Y=function(r,e){return(r[e]|r[e+1]<<8|r[e+2]<<16|r[e+3]<<24)>>>0},kr=function(r,e){return Y(r,e)+Y(r,e+4)*4294967296},N=function(r,e,n){for(;n;++e)r[e]=n,n>>>=8};function ge(r,e){return he(r,e||{},0,0)}function we(r,e){return ie(r,{i:2},e&&e.out,e&&e.dictionary)}var Yr=function(r,e,n,a){for(var f in r){var v=r[f],i=e+f,s=a;Array.isArray(v)&&(s=Xr(a,v[1]),v=v[0]),v instanceof M?n[i]=[v,s]:(n[i+="/"]=[new M(0),s],Yr(v,i,n,a))}},Ir=typeof TextEncoder<"u"&&new TextEncoder,Ar=typeof TextDecoder<"u"&&new TextDecoder,me=0;try{Ar.decode(Rr,{stream:!0}),me=1}catch{}var xe=function(r){for(var e="",n=0;;){var a=r[n++],f=(a>127)+(a>223)+(a>239);if(n+f>r.length)return{s:e,r:lr(r,n-1)};f?f==3?(a=((a&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,e+=String.fromCharCode(55296|a>>10,56320|a&1023)):f&1?e+=String.fromCharCode((a&31)<<6|r[n++]&63):e+=String.fromCharCode((a&15)<<12|(r[n++]&63)<<6|r[n++]&63):e+=String.fromCharCode(a)}};function cr(r,e){var n;if(Ir)return Ir.encode(r);for(var a=r.length,f=new M(r.length+(r.length>>1)),v=0,i=function(c){f[v++]=c},n=0;nf.length){var s=new M(v+8+(a-n<<1));s.set(f),f=s}var l=r.charCodeAt(n);l<128||e?i(l):l<2048?(i(192|l>>6),i(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|r.charCodeAt(++n)&1023,i(240|l>>18),i(128|l>>12&63),i(128|l>>6&63),i(128|l&63)):(i(224|l>>12),i(128|l>>6&63),i(128|l&63))}return lr(f,0,v)}function jr(r,e){if(e){for(var n="",a=0;a65535&&I(9),e+=a+4}return e},Pr=function(r,e,n,a,f,v,i,s){var l=a.length,c=n.extra,t=s&&s.length,o=zr(c);N(r,e,i!=null?33639248:67324752),e+=4,i!=null&&(r[e++]=20,r[e++]=n.os),r[e]=20,e+=2,r[e++]=n.flag<<1|(v<0&&8),r[e++]=f&&8,r[e++]=n.compression&255,r[e++]=n.compression>>8;var u=new Date(n.mtime==null?Date.now():n.mtime),h=u.getFullYear()-1980;if((h<0||h>119)&&I(10),N(r,e,h<<25|u.getMonth()+1<<21|u.getDate()<<16|u.getHours()<<11|u.getMinutes()<<5|u.getSeconds()>>1),e+=4,v!=-1&&(N(r,e,n.crc),N(r,e+4,v<0?-v-2:v),N(r,e+8,n.size)),N(r,e+12,l),N(r,e+14,o),e+=16,i!=null&&(N(r,e,t),N(r,e+6,n.attrs),N(r,e+10,i),e+=14),r.set(a,e),e+=l,o)for(var y in c){var w=c[y],x=w.length;N(r,e,+y),N(r,e+2,x),r.set(w,e+4),e+=4+x}return t&&(r.set(s,e),e+=t),e},Se=function(r,e,n,a,f){N(r,e,101010256),N(r,e+8,n),N(r,e+10,n),N(r,e+12,a),N(r,e+16,f)};function Me(r,e){e||(e={});var n={},a=[];Yr(r,"",n,e);var f=0,v=0;for(var i in n){var s=n[i],l=s[0],c=s[1],t=c.level==0?0:8,o=cr(i),u=o.length,h=c.comment,y=h&&cr(h),w=y&&y.length,x=zr(c.extra);u>65535&&I(11);var T=t?ge(l,c):l,z=T.length,C=ce();C.p(l),a.push(Xr(c,{size:l.length,crc:C.d(),c:T,f:o,m:y,u:u!=i.length||y&&h.length!=w,o:f,compression:t})),f+=30+u+x+z,v+=76+2*(u+x)+(w||0)+z}for(var O=new M(v+22),$=f,U=v-f,A=0;A65558)&&I(13);var f=Q(r,a+8);if(!f)return{};var v=Y(r,a+16),i=v==4294967295||f==65535;if(i){var s=Y(r,a-12);i=Y(r,s)==101075792,i&&(f=Y(r,s+32),v=Y(r,s+48))}for(var l=0;l|]/g,"_")||"Projekt",n={};for(const l of r.files)n[`${e}/${br(l.path)}`]=new Uint8Array(cr(l.text));const a=[...r.packages.map(l=>`${e}/${dr(l)}/${re(l).replace(/\./g,"/")}/`),...ee(r).map(l=>`${e}/${l}/`)];for(const l of a)Object.keys(n).some(c=>c.startsWith(l))||(n[l.replace(/\/\/$/,"/")]=new Uint8Array);return(r.uml&&Object.keys(r.uml).length||(f=r.notes)!=null&&f.length||(v=r.objects)!=null&&v.length)&&(n[`${e}/${$r}`]=new Uint8Array(cr(JSON.stringify({format:"visuobject",version:1,uml:r.uml??{},...(i=r.notes)!=null&&i.length?{notes:r.notes}:{},...(s=r.objects)!=null&&s.length?{objects:r.objects}:{}},null,2)))),Me(n,{level:6})}function ze(r,e){var c;const n=Ce(r),a=Object.entries(n).filter(([t])=>/\.java$/i.test(t)&&!t.startsWith("__MACOSX/")).map(([t,o])=>({name:t,text:jr(o)})),f=new Set(Object.keys(n).map(t=>t.split("/")[0])),v=f.size===1&&Object.keys(n).some(t=>t.includes("/"))?[...f][0]:e,i=v!==e,s=Br(v,[]);for(const t of a){const o=Br(v,[{name:t.name.slice(t.name.lastIndexOf("/")+1),text:t.text}]).files[0],u=t.name.split("/").slice(i?1:0,-1),h=Er(o.text).split(".").filter(Boolean),w=u.slice(u.length-h.length).join("/")===h.join("/")?u.slice(0,u.length-h.length).join("/"):"",x=w&&w!==mr&&w.split("/").every(Gr)&&!w.includes(":")?w:mr,T=Qr(Vr(x,Er(o.text)),o.path.slice(o.path.lastIndexOf("/")+1));s.files=[...s.files.filter(z=>z.path!==T),{...o,path:T}],x!==mr&&!((c=s.sourceFolders)!=null&&c.includes(x))&&(s.sourceFolders=[...s.sourceFolders??[],x])}const l=Object.entries(n).find(([t])=>t===$r||t.endsWith(`/${$r}`));if(l)try{const t=JSON.parse(jr(l[1])),o=Lr(t.uml);o&&(s.uml=o);const u=_r(t.notes);u&&(s.notes=u);const h=pr(t.objects);h&&(s.objects=h)}catch{}return s}export{ze as projectFromZip,je as projectToZip}; diff --git a/website/app/assets/robot3d-K0yfmoba.js b/website/app/assets/robot3d-QiT3_7Hv.js similarity index 99% rename from website/app/assets/robot3d-K0yfmoba.js rename to website/app/assets/robot3d-QiT3_7Hv.js index ae98cbe1..b88a9b4d 100644 --- a/website/app/assets/robot3d-K0yfmoba.js +++ b/website/app/assets/robot3d-QiT3_7Hv.js @@ -1,4 +1,4 @@ -var gl=Object.defineProperty;var _l=(i,t,e)=>t in i?gl(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var le=(i,t,e)=>_l(i,typeof t!="symbol"?t+"":t,e);import{C as rn,L as oo}from"./index-DuzNMqv5.js";/** +var gl=Object.defineProperty;var _l=(i,t,e)=>t in i?gl(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var le=(i,t,e)=>_l(i,typeof t!="symbol"?t+"":t,e);import{C as rn,L as oo}from"./index-f5yHO7xw.js";/** * @license * Copyright 2010-2025 Three.js Authors * SPDX-License-Identifier: MIT diff --git a/website/app/index.html b/website/app/index.html index a779966b..3d393edd 100644 --- a/website/app/index.html +++ b/website/app/index.html @@ -6,7 +6,7 @@ VisuStruct Web - +