diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a054908..fba36096 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is loosely inspired by Keep a Changelog. ### Added +- **Web 0.13.7, statements without class are coloured too:** when Programmieren shows the code without `class` and `main` (e.g. „Aufstehen;“, „Zähne putzen;“ in lesson 1), the statements now sit in a yellow block like a method, matching the yellow statements in the Struktogramm; loops and branches inside keep their own colours. Statements are now always yellow, also inside a loop or branch (own yellow stripe in the code, yellow box in the Struktogramm and in lesson 1); only the empty ø takes the colour of its block. A loop with pseudocode condition (`while (Tee noch zu heiß) {`) is coloured up to its closing brace. - **Web 0.13.6, lesson header pinned at the top:** in a lesson step the header (← Alle Lektionen, lesson title, step numbers, step title) stays at the top of the lesson column with its own ← Zurück / Weiter → buttons next to „Alle Lektionen“; only the step content below scrolls. The buttons at the end of the step stay as well. - **Web 0.13.4, Pseudocode switch in the toolbar and simulation of pseudocode:** the checkbox „Pseudocode“ now sits in the toolbar left of ⇄ (before it was only in the code window). For a diagram marked as pseudocode (e.g. „Tee kochen“ in Lektion 1) the simulation no longer runs the boxes as Java: it only highlights them one after another, and for a condition („Regnet es?“), a loop or a Fallauswahl it asks for the answer (true/false or ja/nein, case name). Programmieren shows no Java errors for pseudocode. Lektion 1 now mentions spaghetti code right where it says a Struktogramm has no jumps. - **Web 0.13.3, Struktogramm and Elemente in the code block colours:** the Struktogramm uses the same soft colours as the blocks in Programmieren: statements yellow like the method, loops (for, while, do-until, endless) pink, Verzweigung and Fallauswahl blue; elements inside a loop or branch take its colour, so code and diagram side by side show the matching blocks at a glance. The boxes in „Elemente“ get the same colours. The setting is now called „Blöcke farbig“ and switches code, diagram and Elemente together; a colour stored in the file still wins, and exports stay white. Lesson 1 uses the same colours (statements yellow, branch blue, loop pink; the sequence itself has no colour, it is the row of statements). diff --git a/web/lessons/de/01-was-ist-ein-struktogramm.md b/web/lessons/de/01-was-ist-ein-struktogramm.md index 9d554f4c..edee9db1 100644 --- a/web/lessons/de/01-was-ist-ein-struktogramm.md +++ b/web/lessons/de/01-was-ist-ein-struktogramm.md @@ -90,7 +90,7 @@ Solange der Teller nicht leer ist, wird ein Bissen gegessen. Danach wird der Tel ## Alle drei zusammen -Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Was in einer Verzweigung oder Schleife steht, bekommt deren Farbe. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. +Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Auch die Anweisungen in einer Verzweigung oder Schleife sind gelb. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. ::: diagramm l1-grundbausteine.visustruct Die Verzweigung erkennst du am Dreieck, die Schleife an der Klammer links. Alles zusammen steht in einer Sequenz. diff --git a/web/lessons/diagramme/en/l1-grundbausteine.visustruct b/web/lessons/diagramme/en/l1-grundbausteine.visustruct index 1fa51809..c53c4f4a 100644 --- a/web/lessons/diagramme/en/l1-grundbausteine.visustruct +++ b/web/lessons/diagramme/en/l1-grundbausteine.visustruct @@ -6,7 +6,7 @@ 83;117;103;97;114;32;119;97;110;116;101;100;63; - + 65;100;100;32;115;117;103;97;114; @@ -19,7 +19,7 @@ 84;101;97;32;115;116;105;108;108;32;116;111;111;32;104;111;116; - + 87;97;105;116;32;49;32;109;105;110;117;116;101; diff --git a/web/lessons/diagramme/en/l1-verzweigung.visustruct b/web/lessons/diagramme/en/l1-verzweigung.visustruct index 78e94d6e..fa580c28 100644 --- a/web/lessons/diagramme/en/l1-verzweigung.visustruct +++ b/web/lessons/diagramme/en/l1-verzweigung.visustruct @@ -3,12 +3,12 @@ 73;115;32;105;116;32;114;97;105;110;105;110;103;63; - + 80;97;99;107;32;97;110;32;117;109;98;114;101;108;108;97; - + 80;97;99;107;32;115;117;110;103;108;97;115;115;101;115; diff --git a/web/lessons/diagramme/en/l1-wiederholung.visustruct b/web/lessons/diagramme/en/l1-wiederholung.visustruct index 079c4a98..1ab21c7a 100644 --- a/web/lessons/diagramme/en/l1-wiederholung.visustruct +++ b/web/lessons/diagramme/en/l1-wiederholung.visustruct @@ -3,7 +3,7 @@ 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; - + 84;97;107;101;32;97;32;98;105;116;101; diff --git a/web/lessons/diagramme/l1-grundbausteine.visustruct b/web/lessons/diagramme/l1-grundbausteine.visustruct index a601c4d8..15b1d94b 100644 --- a/web/lessons/diagramme/l1-grundbausteine.visustruct +++ b/web/lessons/diagramme/l1-grundbausteine.visustruct @@ -6,7 +6,7 @@ 90;117;99;107;101;114;32;103;101;119;252;110;115;99;104;116;63; - + 90;117;99;107;101;114;32;104;105;110;101;105;110;103;101;98;101;110; @@ -19,7 +19,7 @@ 84;101;101;32;110;111;99;104;32;122;117;32;104;101;105;223; - + 49;32;77;105;110;117;116;101;32;119;97;114;116;101;110; diff --git a/web/lessons/diagramme/l1-verzweigung.visustruct b/web/lessons/diagramme/l1-verzweigung.visustruct index 673cb6a6..0cbc066c 100644 --- a/web/lessons/diagramme/l1-verzweigung.visustruct +++ b/web/lessons/diagramme/l1-verzweigung.visustruct @@ -3,12 +3,12 @@ 82;101;103;110;101;116;32;101;115;63; - + 82;101;103;101;110;115;99;104;105;114;109;32;101;105;110;112;97;99;107;101;110; - + 83;111;110;110;101;110;98;114;105;108;108;101;32;101;105;110;112;97;99;107;101;110; diff --git a/web/lessons/diagramme/l1-wiederholung.visustruct b/web/lessons/diagramme/l1-wiederholung.visustruct index 8b31a819..95569e48 100644 --- a/web/lessons/diagramme/l1-wiederholung.visustruct +++ b/web/lessons/diagramme/l1-wiederholung.visustruct @@ -3,7 +3,7 @@ 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; - + 69;105;110;101;110;32;66;105;115;115;101;110;32;101;115;115;101;110; diff --git a/web/lessons/diagramme/pt/l1-grundbausteine.visustruct b/web/lessons/diagramme/pt/l1-grundbausteine.visustruct index c16a085e..23018719 100644 --- a/web/lessons/diagramme/pt/l1-grundbausteine.visustruct +++ b/web/lessons/diagramme/pt/l1-grundbausteine.visustruct @@ -6,7 +6,7 @@ 81;117;101;114;32;97;231;250;99;97;114;63; - + 74;117;110;116;97;114;32;97;231;250;99;97;114; @@ -19,7 +19,7 @@ 67;104;225;32;97;105;110;100;97;32;100;101;109;97;115;105;97;100;111;32;113;117;101;110;116;101; - + 69;115;112;101;114;97;114;32;49;32;109;105;110;117;116;111; diff --git a/web/lessons/diagramme/pt/l1-verzweigung.visustruct b/web/lessons/diagramme/pt/l1-verzweigung.visustruct index 576887bc..eb6d5fcc 100644 --- a/web/lessons/diagramme/pt/l1-verzweigung.visustruct +++ b/web/lessons/diagramme/pt/l1-verzweigung.visustruct @@ -3,12 +3,12 @@ 69;115;116;225;32;97;32;99;104;111;118;101;114;63; - + 76;101;118;97;114;32;103;117;97;114;100;97;45;99;104;117;118;97; - + 76;101;118;97;114;32;243;99;117;108;111;115;32;100;101;32;115;111;108; diff --git a/web/lessons/diagramme/pt/l1-wiederholung.visustruct b/web/lessons/diagramme/pt/l1-wiederholung.visustruct index 16ef1eb1..0bca7c36 100644 --- a/web/lessons/diagramme/pt/l1-wiederholung.visustruct +++ b/web/lessons/diagramme/pt/l1-wiederholung.visustruct @@ -3,7 +3,7 @@ 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; - + 68;97;114;32;117;109;97;32;103;97;114;102;97;100;97; diff --git a/web/lessons/en/01-was-ist-ein-struktogramm.md b/web/lessons/en/01-was-ist-ein-struktogramm.md index e6b82529..f8bcc63e 100644 --- a/web/lessons/en/01-was-ist-ein-struktogramm.md +++ b/web/lessons/en/01-was-ist-ein-struktogramm.md @@ -90,7 +90,7 @@ As long as the plate is not empty, you take a bite. After that, the plate is cle ## All three together -The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. Whatever stands inside a branch or a loop takes its colour. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. +The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. The statements inside a branch or a loop are yellow too. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. ::: diagramm l1-grundbausteine.visustruct You recognise the branch by its triangle and the loop by the bracket on the left. Everything together sits in a sequence. diff --git a/web/lessons/pt/01-was-ist-ein-struktogramm.md b/web/lessons/pt/01-was-ist-ein-struktogramm.md index 7415d24a..981c8410 100644 --- a/web/lessons/pt/01-was-ist-ein-struktogramm.md +++ b/web/lessons/pt/01-was-ist-ein-struktogramm.md @@ -90,7 +90,7 @@ Enquanto o prato não estiver vazio, dás uma garfada. Depois, o prato é levant ## Os três juntos -Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. O que está dentro de uma decisão ou de um ciclo fica com a cor dela. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. +Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. As instruções dentro de uma decisão ou de um ciclo também são amarelas. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. ::: diagramm l1-grundbausteine.visustruct Reconheces a decisão pelo triângulo e o ciclo pelo parêntese à esquerda. Tudo junto forma uma sequência. diff --git a/web/package-lock.json b/web/package-lock.json index da3fa4e9..3b133508 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "visustruct-web", - "version": "0.13.6", + "version": "0.13.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "visustruct-web", - "version": "0.13.6", + "version": "0.13.7", "dependencies": { "@codemirror/autocomplete": "^6.20.4", "@codemirror/commands": "^6.11.1", diff --git a/web/package.json b/web/package.json index 5537b973..f44b6326 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "visustruct-web", "private": true, - "version": "0.13.6", + "version": "0.13.7", "type": "module", "scripts": { "dev": "vite", diff --git a/web/prog.png b/web/prog.png new file mode 100644 index 00000000..d1cce063 Binary files /dev/null and b/web/prog.png differ diff --git a/web/src/ui/javaEditor.ts b/web/src/ui/javaEditor.ts index 566b0a94..cf3a7dcb 100644 --- a/web/src/ui/javaEditor.ts +++ b/web/src/ui/javaEditor.ts @@ -2,7 +2,7 @@ import { autocompletion, closeBrackets, closeBracketsKeymap, completionKeymap, s import { defaultKeymap, indentWithTab } from '@codemirror/commands' import { java } from '@codemirror/lang-java' import { bracketMatching, HighlightStyle, indentOnInput, indentUnit, syntaxHighlighting, syntaxTree } from '@codemirror/language' -import { Annotation, type ChangeSpec, Compartment, countColumn, EditorSelection, EditorState, Prec, RangeSet, RangeSetBuilder, StateEffect, StateField, type Extension } from '@codemirror/state' +import { Annotation, type ChangeSpec, Compartment, countColumn, EditorSelection, EditorState, Prec, RangeSet, RangeSetBuilder, StateEffect, StateField, type Extension, type Text } from '@codemirror/state' import { Decoration, EditorView, gutter, GutterMarker, highlightActiveLineGutter, keymap, layer, lineNumbers, RectangleMarker, type BlockInfo, type DecorationSet } from '@codemirror/view' import { tags } from '@lezer/highlight' import { indentJava } from '../core/javaIndent' @@ -123,6 +123,24 @@ const scopeKinds: Record = { TryStatement: 'try', } +/** + * Zeile der `}`, die den Block schließt, der in der Zeile von `pos` mit `{` beginnt. Bei Pseudocode + * (`while (Tee noch zu heiß) {`) bricht der Java-Parser den Block nach der ersten Zeile ab; so reicht der Kasten + * trotzdem bis zur schließenden Klammer wie im Struktogramm. + */ +function closingLine(doc: Text, pos: number): number { + const first = doc.lineAt(pos) + if (!first.text.trimEnd().endsWith('{')) return first.number + let depth = 0 + for (let n = first.number; n <= doc.lines; n++) { + for (const ch of doc.line(n).text.replace(/"(?:[^"\\]|\\.)*"|\/\/.*$/g, '')) { + if (ch === '{') depth++ + else if (ch === '}' && --depth === 0) return n + } + } + return first.number +} + /** * Jeder Block (Klasse, Methode, Schleife, Verzweigung …) bekommt einen eigenen Kasten, der bei seiner * Einrückung beginnt; die Kästen liegen ineinander. Das ausgewählte Element bekommt einen Rahmen darüber. @@ -151,7 +169,20 @@ function scopeMarkers(view: EditorView): RectangleMarker[] { return new RectangleMarker(className, left, top, Math.max(right - left, 20), Math.max(bottom - top, 4)) } const markers: RectangleMarker[] = [] + // Anweisungen ohne Klasse und Methode (Einstellung ohne `class`/`main`): ein gelber Kasten wie die Methode, + // damit sie wie die Anweisungen im Struktogramm aussehen. + const top = syntaxTree(state).topNode + const loose: { from: number; to: number }[] = [] + for (let c = top.firstChild; c; c = c.nextSibling) { + if (scopeKinds[c.name] === 'class' || c.name === 'MethodDeclaration') { + loose.length = 0 + break + } + if (c.name !== 'ImportDeclaration' && c.name !== 'PackageDeclaration' && !c.name.includes('Comment')) loose.push(c) + } + if (loose.length) markers.push(box('cm-scope cm-scope-method', doc.lineAt(loose[0].from).number, doc.lineAt(loose[loose.length - 1].to).number, 1)) // Äußere Blöcke zuerst: Die inneren liegen darüber. + const blocks: { kind: string; from: number; to: number }[] = [] syntaxTree(state).iterate({ from: view.viewport.from, to: view.viewport.to, @@ -160,9 +191,21 @@ function scopeMarkers(view: EditorView): RectangleMarker[] { if (!kind) return // `else if` gehört zum Kasten des ersten `if`. if (node.name === 'IfStatement' && node.node.parent?.name === 'IfStatement') return - markers.push(box(`cm-scope cm-scope-${kind}`, doc.lineAt(node.from).number, doc.lineAt(node.to).number, 1)) + const from = doc.lineAt(node.from).number + const to = Math.max(doc.lineAt(node.to).number, closingLine(doc, node.from)) + blocks.push({ kind, from, to }) + markers.push(box(`cm-scope cm-scope-${kind}`, from, to, 1)) }, }) + // Anweisungen in Schleifen und Verzweigungen bekommen wie im Struktogramm einen eigenen gelben Streifen. + for (let n = 1; n <= doc.lines; n++) { + let inner: { kind: string; from: number; to: number } | undefined + for (const b of blocks) if (b.from <= n && n <= b.to && (!inner || b.from >= inner.from)) inner = b + if (!inner || (inner.kind !== 'loop' && inner.kind !== 'if') || n === inner.from) continue + const text = doc.line(n).text.trim() + if (!text || text.startsWith('}') || text.endsWith('{') || text.startsWith('//') || text.startsWith('case ') || text.startsWith('default')) continue + markers.push(box('cm-scope cm-scope-method cm-scope-stmt', n, n, 2)) + } const sel = state.field(marksField).marks.lines if (sel && sel.from < doc.lines) markers.push(box('cm-scope cm-scope-sel', sel.from + 1, Math.min(sel.to + 1, doc.lines), 0)) return markers diff --git a/web/src/ui/renderer.ts b/web/src/ui/renderer.ts index b714f34f..2fa84b3c 100644 --- a/web/src/ui/renderer.ts +++ b/web/src/ui/renderer.ts @@ -25,7 +25,7 @@ const Ink = { type Omission = { top?: boolean; left?: boolean; bottom?: boolean; right?: boolean } -/** Farbe wie bei den Codeblöcken (`cm-scope-…`): Schleife rosa, Verzweigung blau, alles andere erbt die Farbe des Blocks, in dem es steht; ganz außen gelb wie die Methode `main` im Code. */ +/** Farbe wie bei den Codeblöcken (`cm-scope-…`): Schleife rosa, Verzweigung blau, Anweisungen gelb wie die Methode im Code. */ export function scopeKind(type: ElementType): string | undefined { switch (type) { case ElementType.forSchleife: @@ -213,7 +213,8 @@ export class DiagramRenderer { const bg = e.backgroundColor const own = bg && bg.a > 0 ? `rgba(${bg.r}, ${bg.g}, ${bg.b}, ${bg.a / 255})` : 'white' const fill = isSelected && (sim || this.fillsSelection) ? 'rgba(199, 230, 255, 0.55)' : own - const scope = scopeKind(e.type) ?? parentScope + // Anweisung, Aufruf, Aussprung immer gelb; nur der leere Platzhalter ø nimmt die Farbe des Blocks. + const scope = scopeKind(e.type) ?? (e.type === ElementType.leerElement ? parentScope : 'method') // Fläche in der Farbe des Blocks per CSS (Einstellung „Blöcke farbig“); im Export bleibt sie weiß. const area = el('rect', { x: r.x, y: r.y, width: r.width, height: r.height, fill }) if (fill === 'white' && scope) area.setAttribute('class', `ns-scope ns-scope-${scope}`) diff --git a/website/app/assets/index-C0CXDsrV.js b/website/app/assets/index-FLiLJX9D.js similarity index 93% rename from website/app/assets/index-C0CXDsrV.js rename to website/app/assets/index-FLiLJX9D.js index fbb3468f..5e3cd6d5 100644 --- a/website/app/assets/index-C0CXDsrV.js +++ b/website/app/assets/index-FLiLJX9D.js @@ -1,25 +1,25 @@ -var qf=Object.defineProperty;var Uf=(i,e,t)=>e in i?qf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>Uf(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 $f="modulepreload",Yf=function(i,e){return new URL(i,e).href},J0={},q=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=Yf(m,n),m in J0)return;J0[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":$f,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(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 I=(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))(I||{});function Xf(i){return i===3||i===4||i===5||i===6}function Kf(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function e2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case I.forSchleife:return e.length<=1?e:[n2(e)];case I.verzweigung:return Vi("if",e);case I.whileSchleife:return Vi("while",e);case I.doUntilSchleife:return Vi("while",t2(e));case I.fallauswahl:return Vi("switch",e);default:return e}}function t2(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 R0(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 Vi(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 n2(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 Td={[I.anweisung]:"Anweisung",[I.verzweigung]:"Bedingung",[I.fallauswahl]:"Fallauswahl",[I.forSchleife]:"for 0 < i < anzahl",[I.whileSchleife]:"while …",[I.doUntilSchleife]:"while …",[I.endlosschleife]:"endless",[I.aussprung]:"break",[I.aufruf]:"Aufruf()",[I.leerElement]:"ø"};function i2(i){Object.assign(Td,i)}function Ol(i){return e2(i)??[Td[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(I.anweisung,{textLines:["ø"]})}function a2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===I.leerElement)return!0;if(i.type===I.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Od(i[t],a),s)}function Od(i,e){if(Xf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(Kf(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(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}=Zi(a.elements,r);s=Od(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Ad(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(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 Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function s2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Ad(a,n,jl(t,e))}function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function o2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function l2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==I.fallauswahl||!n||n.length===0)throw new Ce("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:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function u2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==I.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function m2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==I.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function c2(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=Nt(e,a))==null?void 0:t.type)===I.fallauswahl)return a}}function d2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const Pd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function h2(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 G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function g2(i,e){const t=h2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>Pd(i[0])?i.slice(1):i;function p2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||Pd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return p2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function f2(i,e){return e===""?`${i} `:`${i} ${e}`}function jd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function x2(i){let e=jd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function b2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Cd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function v2(){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",Ls),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 lr;function Bd(){return lr===void 0&&(lr=v2()??null),lr??void 0}function Dd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Bd();if(n={ascent:i*.95,descent:i*.24},a){Dd(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})}U0.set(t,n)}return n}const U0=new Map;function y2(){const i=Bd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Dd(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 Cd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=b2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Zd={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function w2(i){return{...Zd,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===I.forSchleife||i===I.whileSchleife||i===I.doUntilSchleife||i===I.endlosschleife,Ui=i=>i===I.fallauswahl||i===I.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function $e(i){return{...i,frame:{...i.frame}}}class Md{constructor(e=Zd,t=Cd){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=$e(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===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=$e(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=$e(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=$e(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=$e(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(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=$e(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===I.anweisung||s===I.leerElement||s===I.aufruf||s===I.aussprung||qi(s);let a;switch(t.element.type){case I.forSchleife:case I.whileSchleife:case I.endlosschleife:{const s=t.element.type===I.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case I.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=$e(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===I.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case I.fallauswahl:a=40;break;case I.verzweigung:a=20;break;case I.forSchleife:case I.whileSchleife:case I.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===I.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===I.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===I.leerElement?76:e.type===I.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(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===I.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),S=Math.max(this.minWidth(e),r(w)+x),z=s(w)+v+b,k=Math.max(0,S-x),_=$i(a,e,{x:t,y:n,width:S,height:z},v);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=$e(T);return j.frame.x=t+x,j.frame.width=k,this.stretchDescendantsWidths(j,k)}),_}const l=20,u=this.headerHeight(e),m=e.type===I.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=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=$e(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,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((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),S=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===I.verzweigung&&o===2?z=Math.max(S,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,S);const k=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,k),u.push({x:v,y:n+s,width:z,height:k}),m.push(w.map(_=>{const T=$e(_);return T.frame.x=v,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===I.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(S=>{const z=$e(S);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(S=>{const z=ao(S,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=z2(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((S,z)=>{const k=S.width*x;w.push(m[z].map(_=>{const T=$e(_);return T.frame.x=b,T.frame.width=k,this.stretchDescendantsWidths(T,k)})),v.push({x:b,y:S.y,width:k,height:S.height}),b+=k}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(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===I.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Ld(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i),n=a=>{const s=$e(a);return s.frame.y+=e,Ld(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 ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=$e(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function z2(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=$e(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=Ld(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const I2=[{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 $0(i){const e=en;switch(i){case"anweisung":return ze(I.anweisung);case"verzweigung":return ze(I.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(I.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(I.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(I.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(I.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(I.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(I.aussprung);case"aufruf":return ze(I.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(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 Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Wd(a)}"`;let t=` +var Uf=Object.defineProperty;var $f=(i,e,t)=>e in i?Uf(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var y=(i,e,t)=>$f(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 Yf="modulepreload",Xf=function(i,e){return new URL(i,e).href},J0={},q=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=Xf(m,n),m in J0)return;J0[m]=!0;const c=m.endsWith(".css"),d=c?'[rel="stylesheet"]':"";if(!!n)for(let f=o.length-1;f>=0;f--){const x=o[f];if(x.href===m&&(!c||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${m}"]${d}`))return;const g=document.createElement("link");if(g.rel=c?"stylesheet":Yf,c||(g.as="script"),g.crossOrigin="",g.href=m,u&&g.setAttribute("nonce",u),document.head.appendChild(g),c)return new Promise((f,x)=>{g.addEventListener("load",f),g.addEventListener("error",()=>x(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 k=(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))(k||{});function Kf(i){return i===3||i===4||i===5||i===6}function e2(i){return i===1||i===2}function ze(i,e={}){return{type:i,zoomX:0,zoomY:0,textLines:[""],...e}}function t2(i){const e=i.textLines;if(!e.every(t=>t.trim()===""))switch(i.type){case k.forSchleife:return e.length<=1?e:[i2(e)];case k.verzweigung:return Vi("if",e);case k.whileSchleife:return Vi("while",e);case k.doUntilSchleife:return Vi("while",n2(e));case k.fallauswahl:return Vi("switch",e);default:return e}}function n2(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 R0(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 Vi(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 i2(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 Od={[k.anweisung]:"Anweisung",[k.verzweigung]:"Bedingung",[k.fallauswahl]:"Fallauswahl",[k.forSchleife]:"for 0 < i < anzahl",[k.whileSchleife]:"while …",[k.doUntilSchleife]:"while …",[k.endlosschleife]:"endless",[k.aussprung]:"break",[k.aufruf]:"Aufruf()",[k.leerElement]:"ø"};function a2(i){Object.assign(Od,i)}function Ol(i){return t2(i)??[Od[i.type]]}class Ce extends Error{}const hn=i=>structuredClone(i);function en(){return ze(k.anweisung,{textLines:["ø"]})}function s2(){return{caption:"",elements:[en()]}}function Al(i){if(i.type===k.leerElement)return!0;if(i.type===k.anweisung){const e=i.textLines;return e.length===0||e.length===1&&e[0]==="ø"}return!1}function wn(i,e){const t=Nt(i,e);return t!==void 0&&Al(t)}function Zi(i,e){if(e.length===0)throw new Ce("Invalid element path.");const[t,...n]=e;if(t<0||t>=i.length)throw new Ce("Invalid element path.");if(n.length===0)return{list:i,index:t};const[a,...s]=n;if(s.length===0)throw new Ce("Invalid element path.");return Zi(Ad(i[t],a),s)}function Ad(i,e){if(Kf(i.type)){if(e!==0||!i.loopBody)throw new Ce("Invalid element path.");return i.loopBody}if(e2(i.type)){if(!i.cases||e<0||e>=i.cases.length)throw new Ce("Invalid element path.");return i.cases[e].elements}throw new Ce("Invalid element path.")}function At(i,e){const{list:t,index:n}=Zi(i.elements,e);return t[n]}function Nt(i,e){try{return At(i,e)}catch{return}}function Pn(i,e,t){const n=hn(i),{list:a,index:s}=Zi(n.elements,e);return a[s]=hn(t),n}function Qi(i,e,t){const n=hn(At(i,e));return n.textLines=t.length===0?[""]:t,Pn(i,e,n)}function rr(i,e){return e.length===0?!1:e.length===1&&i.elements.length===1?!wn(i,e):Nt(i,e)!==void 0}function fi(i,e){const t=hn(i),{list:n,index:a}=Zi(t.elements,e);if(e.length===1&&n.length===1){if(Al(n[0]))throw new Ce("The last root element cannot be deleted.");return n[0]=en(),t}return n.splice(a,1),e.length>1&&n.length===0&&n.push(en()),t}function ti(i,e,t,n){const a=hn(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}=Zi(a.elements,r);s=Ad(l[u],o)}return s.splice(Math.min(Math.max(0,t),s.length),0,hn(n)),a}function Pd(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1],e)}function io(i,e,t){if(t.length===0)throw new Ce("Invalid element path.");return ti(i,t.slice(0,-1),t[t.length-1]+1,e)}function Pl(i,e){return i.lengthe[n]===t)}function jl(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 Cl=(i,e)=>i.length===e.length&&i.every((t,n)=>t===e[n]);function r2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pd(a,n,jl(t,e))}function o2(i,e,t){if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return io(a,n,jl(t,e))}function l2(i,e,t){if(!wn(i,t))throw new Ce("Invalid element path.");if(Cl(e,t))return i;if(Pl(e,t))throw new Ce("Invalid element path.");const n=At(i,e),a=fi(i,e);return Pn(a,jl(t,e),n)}function u2(i,e){const t=hn(At(i,e)),n=t.cases;if(t.type!==k.fallauswahl||!n||n.length===0)throw new Ce("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:[en()]}),{doc:Pn(i,e,t),path:[...e,s,0]}}function m2(i,e,t){const n=hn(At(i,e)),a=n.cases;if(n.type!==k.fallauswahl||!a)throw new Ce("Invalid element path.");if(a.length<=2)throw new Ce("A switch needs at least two cases.");if(t<0||t>=a.length)throw new Ce("Invalid element path.");a.splice(t,1);const s=Math.min(t,a.length-1);return{doc:Pn(i,e,n),path:[...e,s,0]}}function c2(i,e,t,n){const a=hn(At(i,e)),s=a.cases;if(a.type!==k.fallauswahl||!s)throw new Ce("Invalid element path.");if(t<0||t>=s.length)throw new Ce("Invalid element path.");const r=n.trim();if(r==="")throw new Ce("Invalid element path.");return s[t].name=r,Pn(i,e,a)}function d2(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=Nt(e,a))==null?void 0:t.type)===k.fallauswahl)return a}}function h2(i,e){if(!(!i||i.length<=e.length))return i[e.length]}function or(i,e){if(e.elements.length!==0)return!i||!Nt(e,i)?[0]:i}const jd=i=>i!==void 0&&/\s/.test(i);function Qa(i){const e=i.trim().toLowerCase();return e.startsWith("input:")?"input":e.startsWith("output:")||e.startsWith("print:")?"output":"statement"}function g2(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 G0(i,e){const t=e.trim();return t===""?`${i} `:`${i} ${t}`}function p2(i,e){const t=g2(e);switch(i){case"statement":return t;case"input":return G0("input:",t);case"output":return G0("output:",t)}}const ja=i=>jd(i[0])?i.slice(1):i;function f2(i){const e=i.replace(/^\s+/,""),t=e.toLowerCase();return t.startsWith("input:")?ja(e.slice(6)):t.startsWith("output:")?ja(e.slice(7)):t.startsWith("print:")?ja(e.slice(6)):i}function H0(i,e){const t=e.replace(/^\s+/,"");if(!t.toLowerCase().startsWith(i.toLowerCase()))return e;const n=t.slice(i.length);if(!(n===""||jd(n[0])||n[0]==="("))return e;const a=ja(n);return a.startsWith("(")&&a.endsWith(")")&&a.length>=2?a.slice(1,-1):a}function V0(i,e){if(i==="input:"||i==="output:")return f2(e);const t=H0(i,e);if(i==="while"&&t===e){const n=H0("until",e);if(n!==e)return n}return t}function x2(i,e){return e===""?`${i} `:`${i} ${e}`}function Cd(i){return i.replace(/[“”„«»]/g,'"').replace(/[’‘‚´]/g,"'")}function Q0(i){const e=i.length===0?[""]:i.slice(0,3);for(;e.length<3;)e.push("");return e}function b2(i){let e=Cd(i);for(;;){const t=e.trim();if(!t.endsWith(";"))return e;e=t.slice(0,-1).trim()}}const Ls='system-ui, -apple-system, "Segoe UI", Roboto, sans-serif';function v2(i,e){return`${e==="bold"?700:500} ${i}px ${Ls}`}const Bd=(i,e,t)=>[...i].length*e*(t==="bold"?.68:.62);function y2(){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",Ls),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 lr;function Dd(){return lr===void 0&&(lr=y2()??null),lr??void 0}function Zd(i,e,t){i.setAttribute("font-size",String(e)),i.setAttribute("font-weight",t==="bold"?"700":"500")}function q0(i,e){const t=`${i}|${e}`;let n=U0.get(t);if(!n){const a=Dd();if(n={ascent:i*.95,descent:i*.24},a){Zd(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})}U0.set(t,n)}return n}const U0=new Map;function w2(){const i=Dd();if(i){const n=new Map;return(a,s,r)=>{const o=`${s}|${r}|${a}`;let l=n.get(o);return l===void 0&&(Zd(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 Bd;const t=new Map;return(n,a,s)=>{const r=`${a}|${s}|${n}`;let o=t.get(r);return o===void 0&&(e.font=v2(a,s),o=e.measureText(n).width,t.size>2e3&&t.clear(),t.set(r,o)),o}}const Md={fontSize:15,lineHeight:20,charWidth:7,baseHeaderExtra:20,minSidePadding:42,cellTextInsetY:15,doUntilDoLabelTopInset:2,doUntilFooterTopInset:6,doUntilFooterBottomInset:8};function z2(i){return{...Md,fontSize:14,lineHeight:21,charWidth:5.5*(14/12),baseHeaderExtra:21,minSidePadding:40}}const qi=i=>i===k.forSchleife||i===k.whileSchleife||i===k.doUntilSchleife||i===k.endlosschleife,Ui=i=>i===k.fallauswahl||i===k.verzweigung;function $i(i,e,t,n=0){return{idPath:i,element:e,frame:t,headerBandHeight:n,topBandHeight:0,loopBodyLeadingInset:0,caseColumnFrames:[],children:[]}}function Ye(i){return{...i,frame:{...i.frame}}}class Ld{constructor(e=Md,t=Bd){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=Ye(e),a=n.frame.width;if(!(a>0)||n.caseColumnFrames.length===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=Ye(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=Ye(s);return r.frame.x=e.frame.x+n,r.frame.width=a,this.stretchDescendantsWidths(r,a)})}stretchNodeTreeToWidth(e,t){const n=Ye(e);return n.frame.width>0?Ui(n.element.type)&&n.caseColumnFrames.length>0?this.stretchMultiwayNodeToWidth(n,t):(n.frame.width=t,qi(n.element.type)?this.stretchLoopChildren(n,t):n.children=n.children.map(s=>this.stretchDescendantsWidths(s,t)),n):n}stretchDescendantsWidths(e,t){let n=Ye(e);return Ui(n.element.type)?n=this.stretchNodeTreeToWidth(n,t):qi(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=Ye(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===k.anweisung||s===k.leerElement||s===k.aufruf||s===k.aussprung||qi(s);let a;switch(t.element.type){case k.forSchleife:case k.whileSchleife:case k.endlosschleife:{const s=t.element.type===k.endlosschleife?40:0;a=t.frame.y+t.frame.height-s;break}case k.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=Ye(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===k.doUntilSchleife)return t.doUntilFooterTopInset+n*t.lineHeight+t.doUntilFooterBottomInset+e.zoomY;let a;switch(e.type){case k.fallauswahl:a=40;break;case k.verzweigung:a=20;break;case k.forSchleife:case k.whileSchleife:case k.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===k.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===k.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===k.leerElement?76:e.type===k.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(qi(e.type))return this.layoutLoop(e,t,n,a);const s=this.headerHeight(e);return $i(a,e,{x:t,y:n,width:this.minWidth(e),height:s},s)}layoutLoop(e,t,n,a){const s=x=>x.reduce((b,v)=>b+v.frame.height,0),r=x=>Math.max(0,...x.map(b=>b.frame.width)),o=e.loopBody??[];if(e.type===k.doUntilSchleife){const x=this.doUntilBodyLeadingInset(),b=e.zoomY,v=this.headerHeight(e),w=this.layoutList(o,t+x,n+b,[...a,0]),I=Math.max(this.minWidth(e),r(w)+x),z=s(w)+v+b,S=Math.max(0,I-x),_=$i(a,e,{x:t,y:n,width:I,height:z},v);return _.topBandHeight=b,_.loopBodyLeadingInset=x,_.children=w.map(T=>{const j=Ye(T);return j.frame.x=t+x,j.frame.width=S,this.stretchDescendantsWidths(j,S)}),_}const l=20,u=this.headerHeight(e),m=e.type===k.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=$i(a,e,{x:t,y:n,width:d,height:h},u);return f.children=c.map(x=>{const b=Ye(x);return b.frame.x=t+l,b.frame.width=g,this.stretchDescendantsWidths(b,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((x,b)=>{const v=t+c,w=this.layoutList(x.elements,v,n+s,[...a,b]),I=Math.max(0,...w.map(_=>_.frame.width));let z;e.type===k.verzweigung&&o===2?z=Math.max(I,(b===0?"true":"false").length*this.metrics.charWidth+24):z=Math.max(l,I);const S=w.reduce((_,T)=>_+T.frame.height,0);d=Math.max(d,S),u.push({x:v,y:n+s,width:z,height:S}),m.push(w.map(_=>{const T=Ye(_);return T.frame.x=v,T.frame.width=z,this.stretchDescendantsWidths(T,z)})),c+=z}),e.type===k.verzweigung&&o===2&&u.length===2){const x=Math.max(u[0].width,u[1].width),b=t,v=t+x,w=v-u[1].x;u[0]={...u[0],x:b,width:x},u[1]={...u[1],x:v,width:x},c=x*2,m[0]=m[0].map(I=>{const z=Ye(I);return z.frame.x=b,z.frame.width=x,this.stretchDescendantsWidths(z,x)}),m[1]=m[1].map(I=>{const z=ao(I,w);return z.frame.width=x,this.stretchDescendantsWidths(z,x)})}if(m.length>0){const x=I2(m,n+s);m=x.columns.map(b=>b.map(v=>this.stretchLoopBodiesVertically(v)));for(let b=0;b0?Math.max(...x.columnHeights):d}let h=Math.max(c,this.minWidth(e));if(c>.5&&h>c+.5){const x=h/c;let b=t;const v=[],w=[];u.forEach((I,z)=>{const S=I.width*x;w.push(m[z].map(_=>{const T=Ye(_);return T.frame.x=b,T.frame.width=S,this.stretchDescendantsWidths(T,S)})),v.push({x:b,y:I.y,width:S,height:I.height}),b+=S}),u=v,m=w,c=b-t,h=c}const g=u.length>0?u[u.length-1].width:c/o,f=$i(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===k.fallauswahl?-20:0,f.columns=m,f.children=m.flat(),f}}function Wd(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i),n=a=>{const s=Ye(a);return s.frame.y+=e,Wd(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 ao(i,e){if(Math.abs(e)<=1e-4)return i;const t=Ye(i);return t.frame.x+=e,t.columns?(t.columns=t.columns.map(n=>n.map(a=>ao(a,e))),t.children=t.columns.flat()):t.children=t.children.map(n=>ao(n,e)),t}function I2(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=Ye(d);const f=s[c],x=d.frame.y+d.frame.height,b=h===u.length-1?s.length-1:r(x,c+1),v=s[b],w=f-g.frame.y;g.frame.y=f,g.frame.height=Math.max(0,v-f),g=Wd(g,w),m.push(g),c=b}),o.push(m),l.push(s[s.length-1]-e)}return{columns:o,columnHeights:l}}const k2=[{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 $0(i){const e=en;switch(i){case"anweisung":return ze(k.anweisung);case"verzweigung":return ze(k.verzweigung,{cases:[{name:"true",elements:[e()]},{name:"false",elements:[e()]}]});case"fallauswahl":return ze(k.fallauswahl,{cases:[{name:"1",elements:[e()]},{name:"2",elements:[e()]},{name:"default",elements:[e()]}]});case"forZaehlSchleife":return ze(k.forSchleife,{textLines:["","",""],loopBody:[e()]});case"whileSchleife":return ze(k.whileSchleife,{loopBody:[e()]});case"doUntilSchleife":return ze(k.doUntilSchleife,{loopBody:[e()]});case"endlosschleife":return ze(k.endlosschleife,{loopBody:[e()]});case"aussprung":return ze(k.aussprung);case"aufruf":return ze(k.aufruf)}}function qa(i){if(i==="")return"-1;";let e="";for(const t of i)e+=t.codePointAt(0)+";";return e}function so(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 Y0 extends Error{}function Bl(i){const e=new DOMParser().parseFromString(i,"application/xml");if(e.getElementsByTagName("parsererror").length>0)throw new Y0("Could not read XML.");const t=e.documentElement;if(!t||t.tagName!=="struktogramm")throw new Y0("Invalid XML: root element is not .");const n={caption:K0(t,"caption")??"",elements:oo(t)},a=K0(t,"fontfamily");a!==void 0&&(n.fontFamily=a);const s=ni(t,"fontsize");s!==void 0&&(n.fontSize=s);const r=ni(t,"fontstyle");return r!==void 0&&(n.fontStyle=r),t.getAttribute("pseudocode")==="true"&&(n.pseudocode=!0),n}function o1(i){const e=(n,a)=>a===void 0?"":` ${n}="${Ed(a)}"`;let t=` `;t+=" `;for(const n of i.elements)t+=ro(n," ");return t+=` `,t}function ro(i,e){let t=`${e} -`;for(const n of i.textLines)t+=`${e} ${k2(qa(n))} +`;for(const n of i.textLines)t+=`${e} ${S2(qa(n))} `;if(i.loopBody){t+=`${e} `;for(const n of i.loopBody)t+=ro(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+=ro(a,e+" ");t+=`${e} `}return t+=`${e} -`,t}function Wd(i){return i.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}function k2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=S2(t);n&&e.push(n)}return e}function S2(i){const e=ni(i,"typ");if(e===void 0||I[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(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 _2="http://www.w3.org/2000/svg",Be={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 Ed(i){switch(i){case I.forSchleife:case I.whileSchleife:case I.doUntilSchleife:case I.endlosschleife:return"loop";case I.verzweigung:case I.fallauswahl:return"if";default:return}}function ve(i,e={}){const t=document.createElementNS(_2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Nd{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=Be.canvasOuterMargin){const s=ve("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ve("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ve("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":Be.outerFrameLineWidth}));const o=ve("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(ve("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.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(ve("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.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=R0(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=ve("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ve("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ve("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ve("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+Be.multiHeaderFirstLineY;if(e.element.type===I.fallauswahl){const c=Math.max(Be.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 T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===I.verzweigung||l.type===I.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ve("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,S=Ed(l.type)??r,z=ve("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&S&&z.setAttribute("class",`ns-scope ns-scope-${S}`),f.append(z),this.strokeCellBorder(f,o,a);const k=Be.callSideBarInset;if(l.type===I.aufruf?(this.line(f,[[o.x+k,o.y],[o.x+k,m]]),this.line(f,[[u-k,o.y],[u-k,m]])):l.type===I.aussprung&&this.line(f,[[o.x+k,o.y],[o.x,o.y+o.height/2],[o.x+k,m]]),c&&e.dividerX!==void 0){const j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,A=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===I.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let W;A+P<=C.maxTextBottom?W=A:W=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===I.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,W+Q*this.lineHeight)})}else if(l.type!==I.doUntilSchleife)if(l.type===I.anweisung||l.type===I.aufruf||l.type===I.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===I.aufruf?(C=o.x+k+Be.callTextInsetFromSideBar,P=u-k-Be.callTextInsetFromSideBar):l.type===I.aussprung&&(C=o.x+k+j);const A=Math.max(0,P-C);let W=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(A-this.textWidth(E))/2,W),W+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===I.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===I.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,S)});const _=ve("g");if(t.append(_),l.type===I.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const A of g)this.drawKeywordLine(_,A,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((A,W)=>{if(W>=e.caseColumnFrames.length-1)return;const E=A.x+A.width,Q=T2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const A=l.type===I.fallauswahl?j.roofBottom-6:o.y+d-8,W=Be.branchLabelInsetX;if(l.type===I.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+W,A,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-W-Q,A,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,A,he,"bottom")})}}h&&_.append(ve("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Be.selectionLineWidth}))}}function T2(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 lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function O2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const A2=[{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)"}],Fd=["de","en","pt-PT"],Jd=A2.filter(i=>Fd.includes(i.code)),tu=i=>Fd.includes(i),P2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Rd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),j2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-DeE-RHam.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-D4INXE4p.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-Bm4PpPCp.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-CtIZyj0I.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en--cTSOMBP.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-BAduFB3L.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-C_mSEvw5.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-BAg3LrWK.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-ClGS2uQV.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-JQ8MwNFB.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-tfdKG8Fb.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-BpibUAkX.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-HArZjiga.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-C3HmQqUD.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BdG-UtKG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-B4vTuE57.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-Dau75zUV.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DrZsTe-O.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-DQrOpK2W.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-CeIYjS3N.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-7-ScZHAu.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Gd(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 uo(i){const e=i==="java"?Ba(Rd,"/Java.strings"):Ba(P2,`/${i}.lproj/Localizable.strings`),t=Ba(j2,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Gd(await a()))n.set(s,r);return n}let Hd="en",Vd=new Map,$n=new Map;const $a="appLanguageCode",Dl="visustruct.keywords";let mo=new Map,Zl=!1;const C2=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function B2(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem($a)==="java";return i&&(localStorage.setItem($a,"en"),localStorage.setItem(Dl,"1")),i}catch{return!1}}function D2(){try{return localStorage.getItem(Dl)==="1"}catch{return!1}}async function Qd(i,e=!0){if(i&&mo.size===0){$n.size===0&&($n=await uo("en"));const t=Ba(Rd,"/Java.strings");if(t)for(const[n,a]of Gd(await t()))C2(n)&&a!==$n.get(n)&&mo.set(n,a)}if(Zl=i,e)try{localStorage.setItem(Dl,i?"1":"0")}catch{}}function Z2(){return Zl}function M2(){if(B2())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&tu(i))return i;try{const e=localStorage.getItem($a);if(e&&tu(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=Jd.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function qd(i,e=!0){if($n.size===0&&($n=await uo("en")),Vd=i==="en"?$n:await uo(i),Hd=i,e)try{localStorage.setItem($a,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function i1(){return Hd}function p(i,...e){const t=(Zl?mo.get(i):void 0)??Vd.get(i)??$n.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 Ya=243,L2=244,Ud=40,ur=4,W2=1;function Ml(i){const e=i.length,t=Ya+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([Ya,t,e&255,e>>8,...i,n,L2])}function E2(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ml([Ud,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function N2(i){if(i[0]!==Ud||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:J2(t[1].trim())}:void 0}function F2(i){const e=[];for(;;){const t=i.indexOf(Ya);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]!==(Ya+i[2]+i[3]&255)||n>4096){i.splice(0,1);continue}if(i.length/g,">")}function S2(i){return i.replace(/&/g,"&").replace(//g,">")}function X0(i){return String(i.a<<24|i.r<<16|i.g<<8|i.b|0)}function Ca(i,e){return Array.from(i.children).filter(t=>t.tagName===e)}function oo(i){const e=[];for(const t of Ca(i,"strelem")){const n=_2(t);n&&e.push(n)}return e}function _2(i){const e=ni(i,"typ");if(e===void 0||k[e]===void 0)return;const t={type:e,zoomX:ni(i,"zx")??0,zoomY:ni(i,"zy")??0,textLines:Ca(i,"text").map(o=>so((o.textContent??"").trim()))},n=eu(i.getAttribute("textcolor"));n&&(t.textColor=n);const a=eu(i.getAttribute("bgcolor"));a&&(t.backgroundColor=a),t.textLines.length===0&&(t.textLines=[""]);const s=Ca(i,"schleifeninhalt")[0];if(s){const o=oo(s);o.length>0&&(t.loopBody=o)}const r=Ca(i,"fall").map(o=>({name:so(o.getAttribute("fallname")??""),elements:oo(o)}));return r.length>0&&(t.cases=r),t}function K0(i,e){const t=i.getAttribute(e);return t===null?void 0:so(t)}function ni(i,e){const t=i.getAttribute(e);if(!(t===null||!/^[+-]?\d+$/.test(t)))return Number(t)}function eu(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 T2="http://www.w3.org/2000/svg",Be={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 Nd(i){switch(i){case k.forSchleife:case k.whileSchleife:case k.doUntilSchleife:case k.endlosschleife:return"loop";case k.verzweigung:case k.fallauswahl:return"if";default:return}}function ve(i,e={}){const t=document.createElementNS(T2,i);for(const[n,a]of Object.entries(e))t.setAttribute(n,String(a));return t}class Fd{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=Be.canvasOuterMargin){const s=ve("svg",{width:t.width,height:t.height,viewBox:`0 0 ${t.width} ${t.height}`,"font-family":Ls,"font-size":this.fontSize,class:"diagram"});s.append(ve("rect",{x:0,y:0,width:t.width,height:t.height,fill:"#fafafa"}));const r=a;s.append(ve("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":Be.outerFrameLineWidth}));const o=ve("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(ve("polyline",{points:t.map(n=>n.join(",")).join(" "),fill:"none",stroke:"black","stroke-width":Be.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(ve("rect",{x:a,y:s,width:t.width,height:t.height,fill:"none",stroke:"black","stroke-width":Be.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=R0(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=ve("text",{x:n,y:a+q0(this.fontSize,"medium").ascent,"font-weight":500});s.style.whiteSpace="pre";const r=R0(t);if(r){const o=ve("tspan",{"font-weight":700});if(o.textContent=r.keyword,s.append(o),r.rest!==""){const l=ve("tspan",{});l.textContent=" "+r.rest,s.append(l)}}else s.textContent=t;e.append(s)}drawLabel(e,t,n,a,s,r){const o=q0(this.fontSize,s?"bold":"medium"),l=ve("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+Be.multiHeaderFirstLineY;if(e.element.type===k.fallauswahl){const c=Math.max(Be.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 T;const o=e.frame,l=e.element,u=o.x+o.width,m=o.y+o.height,c=l.type===k.verzweigung||l.type===k.fallauswahl,d=c?e.headerBandHeight:0,h=n!==void 0&&lo(e.idPath,n),g=Ol(l),f=ve("g",{"data-path":e.idPath.join(",")});t.append(f);const x=this.usesSimulationHighlight,b=l.backgroundColor,v=b&&b.a>0?`rgba(${b.r}, ${b.g}, ${b.b}, ${b.a/255})`:"white",w=h&&(x||this.fillsSelection)?"rgba(199, 230, 255, 0.55)":v,I=Nd(l.type)??(l.type===k.leerElement?r:"method"),z=ve("rect",{x:o.x,y:o.y,width:o.width,height:o.height,fill:w});w==="white"&&I&&z.setAttribute("class",`ns-scope ns-scope-${I}`),f.append(z),this.strokeCellBorder(f,o,a);const S=Be.callSideBarInset;if(l.type===k.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===k.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 j=e.dividerX,C=this.roofMetrics(e,o,d,j),P=Math.max(g.length,1)*this.lineHeight,O=o.y+Be.multiHeaderFirstLineY;this.line(f,[[o.x,o.y],[C.apex.x,C.apex.y],[u,o.y]]),l.type===k.fallauswahl&&this.line(f,[[o.x,C.roofBottom],[u,C.roofBottom]]);let W;O+P<=C.maxTextBottom?W=O:W=Math.max(o.y+2,C.maxTextBottom-(Math.max(g.length,1)-1)*this.lineHeight-this.lineHeight),g.forEach((E,Q)=>{const $=this.textWidth(E);let he;if(l.type===k.verzweigung){const Te=o.x+Be.cellTextInsetX,xe=u-$-Be.cellTextInsetX;he=Math.min(Math.max(j-$/2,Te),xe)}else he=o.x+o.width/2-$/2;this.drawKeywordLine(f,E,he,W+Q*this.lineHeight)})}else if(l.type!==k.doUntilSchleife)if(l.type===k.anweisung||l.type===k.aufruf||l.type===k.aussprung){const j=Be.cellTextInsetX;let C=o.x+j,P=u-j;l.type===k.aufruf?(C=o.x+S+Be.callTextInsetFromSideBar,P=u-S-Be.callTextInsetFromSideBar):l.type===k.aussprung&&(C=o.x+S+j);const O=Math.max(0,P-C);let W=o.y+o.height/2-Math.max(1,g.length)*this.lineHeight/2;for(const E of g)this.drawKeywordLine(f,E,C+(O-this.textWidth(E))/2,W),W+=this.lineHeight}else{const j=Math.max(1,g.length)*this.lineHeight;let C=s===k.doUntilSchleife?o.y+o.height/2-j/2:o.y+Be.cellTextInsetY;for(const P of g)this.drawKeywordLine(f,P,o.x+Be.cellTextInsetX,C),C+=this.lineHeight}e.children.forEach((j,C)=>{const P=l.type===k.doUntilSchleife&&C===0?{top:!0,left:!0}:{};this.drawNode(j,t,n,P,l.type,I)});const _=ve("g");if(t.append(_),l.type===k.doUntilSchleife){const j=((T=e.children[0])==null?void 0:T.frame.x)??o.x+(e.loopBodyLeadingInset>0?e.loopBodyLeadingInset:Be.loopBodyLeadingInset);this.drawLabel(_,"do",o.x+4,o.y+this.metrics.doUntilDoLabelTopInset,!0,"top");const C=m-e.headerBandHeight;this.line(_,[[j,C],[u,C]]),this.line(_,[[j,o.y],[j,C]]);let P=C+this.metrics.doUntilFooterTopInset;for(const O of g)this.drawKeywordLine(_,O,o.x+Be.cellTextInsetX,P),P+=this.lineHeight}if(c&&e.dividerX!==void 0&&e.caseColumnFrames.length>1){const j=this.roofMetrics(e,o,d,e.dividerX),C=j.apex;e.caseColumnFrames.forEach((O,W)=>{if(W>=e.caseColumnFrames.length-1)return;const E=O.x+O.width,Q=O2(E,o,C),$=Number.isFinite(Q)?Math.min(Math.max(Q,o.y),m):o.y;this.line(_,[[E,m],[E,$]])});const P=l.cases;if(P&&P.length===e.caseColumnFrames.length){const O=l.type===k.fallauswahl?j.roofBottom-6:o.y+d-8,W=Be.branchLabelInsetX;if(l.type===k.verzweigung&&P.length===2){this.drawLabel(_,"true",o.x+W,O,!0,"bottom");const E=e.caseColumnFrames[1],Q=this.measure("false",this.fontSize,"bold");this.drawLabel(_,"false",E.x+E.width-W-Q,O,!0,"bottom")}else P.forEach((E,Q)=>{const $=e.caseColumnFrames[Q],he=["default","true","false"].includes(E.name.toLowerCase()),Te=this.measure(E.name,this.fontSize,he?"bold":"medium");this.drawLabel(_,E.name,$.x+$.width/2-Te/2,O,he,"bottom")})}}h&&_.append(ve("rect",{x:o.x,y:o.y,width:o.width,height:o.height,class:"selection-frame",fill:"none",stroke:x?"rgba(66, 140, 242, 0.78)":"rgba(0, 122, 255, 0.9)","stroke-width":Be.selectionLineWidth}))}}function O2(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 lo(i,e){return i.length===e.length&&i.every((t,n)=>t===e[n])}function A2(i){const e=[],t=n=>{e.push(n),n.children.forEach(t)};return i.forEach(t),e}function Ua(i){var e,t;return{...i,textLines:Ol(i),loopBody:(e=i.loopBody)==null?void 0:e.map(Ua),cases:(t=i.cases)==null?void 0:t.map(n=>({name:n.name,elements:n.elements.map(Ua)}))}}const P2=[{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)"}],Jd=["de","en","pt-PT"],Rd=P2.filter(i=>Jd.includes(i.code)),tu=i=>Jd.includes(i),j2=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ar.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CxCno28C.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/da.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BAutdlBb.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/de.lproj/Localizable.strings":()=>q(()=>import("./Localizable-Dk8F86qS.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/el.lproj/Localizable.strings":()=>q(()=>import("./Localizable-rqA-20hM.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/en.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DBLIUcBd.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/es.lproj/Localizable.strings":()=>q(()=>import("./Localizable-LSTVB2Q5.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/fr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-ByPZS4RL.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/he.lproj/Localizable.strings":()=>q(()=>import("./Localizable-R-16GCrk.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/it.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DXAPah1g.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ja.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CkJEmEEP.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ko.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BudCXCER.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nb.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DSvkBkp-.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/nl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BJ55WGVD.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pl.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BYJK0mdR.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/pt-PT.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CHv0OL9S.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/ru.lproj/Localizable.strings":()=>q(()=>import("./Localizable-1QZ0wfvJ.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/sv.lproj/Localizable.strings":()=>q(()=>import("./Localizable-M33nNbEe.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/tr.lproj/Localizable.strings":()=>q(()=>import("./Localizable-BM86Igqt.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/uk.lproj/Localizable.strings":()=>q(()=>import("./Localizable-UGog_aku.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hans.lproj/Localizable.strings":()=>q(()=>import("./Localizable-CaVEL1es.js"),[],import.meta.url).then(i=>i.default),"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/zh-Hant.lproj/Localizable.strings":()=>q(()=>import("./Localizable-DqIDp_hh.js"),[],import.meta.url).then(i=>i.default)}),Gd=Object.assign({"../../../VisuStruct-iOS/VisuStructXcodeOpen/VisuStruct/Java.strings":()=>q(()=>import("./Java-Bpx1Vwvg.js"),[],import.meta.url).then(i=>i.default)}),C2=Object.assign({"../i18n/ar.strings":()=>q(()=>import("./ar-DeE-RHam.js"),[],import.meta.url).then(i=>i.default),"../i18n/da.strings":()=>q(()=>import("./da-D4INXE4p.js"),[],import.meta.url).then(i=>i.default),"../i18n/de.strings":()=>q(()=>import("./de-Bm4PpPCp.js"),[],import.meta.url).then(i=>i.default),"../i18n/el.strings":()=>q(()=>import("./el-CtIZyj0I.js"),[],import.meta.url).then(i=>i.default),"../i18n/en.strings":()=>q(()=>import("./en--cTSOMBP.js"),[],import.meta.url).then(i=>i.default),"../i18n/es.strings":()=>q(()=>import("./es-BAduFB3L.js"),[],import.meta.url).then(i=>i.default),"../i18n/fr.strings":()=>q(()=>import("./fr-C_mSEvw5.js"),[],import.meta.url).then(i=>i.default),"../i18n/he.strings":()=>q(()=>import("./he-BAg3LrWK.js"),[],import.meta.url).then(i=>i.default),"../i18n/it.strings":()=>q(()=>import("./it-ClGS2uQV.js"),[],import.meta.url).then(i=>i.default),"../i18n/ja.strings":()=>q(()=>import("./ja-JQ8MwNFB.js"),[],import.meta.url).then(i=>i.default),"../i18n/ko.strings":()=>q(()=>import("./ko-tfdKG8Fb.js"),[],import.meta.url).then(i=>i.default),"../i18n/nb.strings":()=>q(()=>import("./nb-BpibUAkX.js"),[],import.meta.url).then(i=>i.default),"../i18n/nl.strings":()=>q(()=>import("./nl-HArZjiga.js"),[],import.meta.url).then(i=>i.default),"../i18n/pl.strings":()=>q(()=>import("./pl-C3HmQqUD.js"),[],import.meta.url).then(i=>i.default),"../i18n/pt-PT.strings":()=>q(()=>import("./pt-PT-BdG-UtKG.js"),[],import.meta.url).then(i=>i.default),"../i18n/ru.strings":()=>q(()=>import("./ru-B4vTuE57.js"),[],import.meta.url).then(i=>i.default),"../i18n/sv.strings":()=>q(()=>import("./sv-Dau75zUV.js"),[],import.meta.url).then(i=>i.default),"../i18n/tr.strings":()=>q(()=>import("./tr-DrZsTe-O.js"),[],import.meta.url).then(i=>i.default),"../i18n/uk.strings":()=>q(()=>import("./uk-DQrOpK2W.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hans.strings":()=>q(()=>import("./zh-Hans-CeIYjS3N.js"),[],import.meta.url).then(i=>i.default),"../i18n/zh-Hant.strings":()=>q(()=>import("./zh-Hant-7-ScZHAu.js"),[],import.meta.url).then(i=>i.default)});function Ba(i,e){var t;return(t=Object.entries(i).find(([n])=>n.endsWith(e)))==null?void 0:t[1]}function Hd(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 uo(i){const e=i==="java"?Ba(Gd,"/Java.strings"):Ba(j2,`/${i}.lproj/Localizable.strings`),t=Ba(C2,`/${i}.strings`),n=new Map;for(const a of[e,t])if(a)for(const[s,r]of Hd(await a()))n.set(s,r);return n}let Vd="en",Qd=new Map,$n=new Map;const $a="appLanguageCode",Dl="visustruct.keywords";let mo=new Map,Zl=!1;const B2=i=>i.startsWith("element_")||i.startsWith("canvas_stub_");function D2(){try{const i=new URLSearchParams(location.search).get("lang")==="java"||localStorage.getItem($a)==="java";return i&&(localStorage.setItem($a,"en"),localStorage.setItem(Dl,"1")),i}catch{return!1}}function Z2(){try{return localStorage.getItem(Dl)==="1"}catch{return!1}}async function qd(i,e=!0){if(i&&mo.size===0){$n.size===0&&($n=await uo("en"));const t=Ba(Gd,"/Java.strings");if(t)for(const[n,a]of Hd(await t()))B2(n)&&a!==$n.get(n)&&mo.set(n,a)}if(Zl=i,e)try{localStorage.setItem(Dl,i?"1":"0")}catch{}}function M2(){return Zl}function L2(){if(D2())return"en";const i=new URLSearchParams(location.search).get("lang");if(i&&tu(i))return i;try{const e=localStorage.getItem($a);if(e&&tu(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=Rd.find(a=>a.code===t.split("-")[0]);if(n)return n.code}return"en"}async function Ud(i,e=!0){if($n.size===0&&($n=await uo("en")),Qd=i==="en"?$n:await uo(i),Vd=i,e)try{localStorage.setItem($a,i)}catch{}const t=document.documentElement;t.lang=i==="java"?"en":i,t.dir=i==="ar"||i==="he"?"rtl":"ltr"}function i1(){return Vd}function p(i,...e){const t=(Zl?mo.get(i):void 0)??Qd.get(i)??$n.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 Ya=243,W2=244,$d=40,ur=4,E2=1;function Ml(i){const e=i.length,t=Ya+(e&255)+(e>>8)&255,n=i.reduce((a,s)=>a+s,0)&255;return Uint8Array.from([Ya,t,e&255,e>>8,...i,n,W2])}function N2(i,e,t){const n=Array.from(new TextEncoder().encode(i));return Ml([$d,e,t&255,t>>8&255,n.length&255,n.length>>8,...n])}function F2(i){if(i[0]!==$d||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:R2(t[1].trim())}:void 0}function J2(i){const e=[];for(;;){const t=i.indexOf(Ya);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]!==(Ya+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 V2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,$d,i,...ii(e.length,2),...e]);function Q2(i,e=R2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...V2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,U2=i=>i.length===7||i.some((e,t)=>e===$d&&i[t+1]===240),Yd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Yd()!==void 0,$2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>$2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Xd=Ws("VisuBot",32);class Y2{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=Yd();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(Xd))}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()",Ws("Bis bald!")])await this.send(r,ur,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,ur,3e4).then(()=>{})}ask(e){return this.send(e,W2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=Q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(G2),q2),r();for(const l of H2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,U2),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(E2(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 F2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=N2(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 le=new Y2,Kd=5,X2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>X2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:K2,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={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 Ll="en";function e3(i){Ll=i==="de"?"de":"en"}const t3=()=>Ll;function eh(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={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:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("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 n3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function i3(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===""?[]:r3(n)}}function Ka(i,e){const t=xi[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 au(i,e,t=""){var a;const n=xi[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 th(i){return i.map(e=>[e.method,...e.args.map(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function a3(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 St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?eh(a):a):String(a)}):i}function r3(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 nh(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=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ih=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],o3=i=>ih.includes(i),l3=100;function ah(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`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 Ze extends Error{constructor(e){super(ah(e)),this.notice=e}}const Qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),u3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function m3(i,e){ts.set(i,e)}const sh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function c3(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 ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):c3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(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(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+d3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function d3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(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 ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function h3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const yt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(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 lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(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 uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(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 is(i,e){const t=Array.from(i),n=Array.from(e),a=El(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 g3(i){const e=Array.from(i),t=El(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 Es(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(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(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===""||Wl(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 d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function f3(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(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(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 F(i);return e.push(t),e}function x3(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 cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(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 I.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case I.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case I.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case I.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case I.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case I.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case I.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case I.aussprung:a({path:o,text:l,kind:"jump"});break;case I.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function v3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return yt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(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 Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function y3(i,e){for(let t=0;tt===e.path[n])}function vt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(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:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(e[1]),name:e[2],params:t}}function oh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=vt(e))==null?void 0:t.name)??((n=oh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",gu());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=qt(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 ${we(n)}`}catch(n){this.state.inputErrorNotice=su(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 Qe(e.text);const n=Yi(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(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 Qe(e.text);const n=Yi(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=y3(this.evaluateSwitchSelector(n),t)??t.length-1;const s=qt(t[a].elements,[...e.path,a],lt(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=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(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=Yi(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(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(as(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=oh(t),s=vt(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 Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=l3)throw new Ze({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)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(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=qt(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():we(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=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(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 Ze({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"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(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)),S=v.trim()===""?"":this.evaluateOutputExpression(v);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=S:t.outputLines.push(S),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${S}`;return}const o=i3(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(Yn(n).trim()),u=l?Kt(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,co(u,ou(u)));t.lastTrace=v.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw Qe(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 x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(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 F(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 Qe(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,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 Ze({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=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,yt(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,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw Qe(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(!ai(r)||!l)throw Qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,yt(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,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw Qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(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&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw Qe(e);if(!mu(n))throw Qe(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 Qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(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()),!mu(r))throw Qe(e);const m=at(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=Kt(s),o=n[1];if(!r||!ai(o))throw Qe(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=>at(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 Qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(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 at(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=x3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw F(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 Qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(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 F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=f3(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 Ze({kind:"nullValue",text:t.target.trim()});const s=at(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 F(e);const g=at(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 F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),yt(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 F(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 F(e);return t.args[0]},a=s=>{const r=at(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 F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return yt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({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=d1(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=Es(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"?go(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 $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return yt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);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 F(a.arrayName)}throw Qe(e)}assignValue(e,t){const n=t.trim(),a=d1(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 $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw F(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 F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(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"?yt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return yt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(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:we(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?yt(t):wt(t)}parser(e){const t=this.withSensors(e);return new b3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return s3(e,t=>this.robotSensors[t]??St[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=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(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=p3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=g3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw F(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 F(`${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 F(`${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=at(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=at(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 F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(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 $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const lh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; + pass`],ii=(i,e)=>Array.from({length:e},(t,n)=>i>>>8*n&255);function Q2(i){let e=0;for(let t=0;t>>0;return ii(e,4)}const mr=(i,e)=>Ml([1,0,Yd,i,...ii(e.length,2),...e]);function q2(i,e=G2){const t=new TextEncoder().encode(i),n=(4-t.length%W1+W1)%W1,a=new Uint8Array(t.length+n).fill(10);a.set(t);const s=[mr(1,[0,...ii(a.length,4),...Q2(a),...Array.from(new TextEncoder().encode(e))])],r=a.length-4;for(let o=0;oi.length===3&&i[0]===13,$2=i=>i.length===7||i.some((e,t)=>e===Yd&&i[t+1]===240),Xd=()=>typeof navigator>"u"?void 0:navigator.serial,cr=()=>Xd()!==void 0,Y2=(...i)=>`exec(${JSON.stringify(i.join("; "))})`,Ws=(i,e=24)=>Y2("cyberpi.display.clear()",`cyberpi.display.show_label(${JSON.stringify(i)}, ${e}, 'center')`),Kd=Ws("VisuBot",32);class X2{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=Xd();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(Kd))}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()",Ws("Bis bald!")])await this.send(r,ur,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,ur,3e4).then(()=>{})}ask(e){return this.send(e,E2,3e3)}async upload(e,t=()=>{}){if(this.port||await this.connect(),!this.writer)throw new Error(this.error??"nicht verbunden");const n=q2(e),a=6+n.length+3;let s=0;const r=()=>t(++s,a),o=async()=>{await this.sendFrame(Ml(H2),U2),r();for(const l of V2)await this.send(l,ur,3e3),r()};await o(),await o();for(const l of n)await this.sendFrame(l,$2),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(N2(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 J2(this.rx)){const r=this.frameWaiters.findIndex(u=>u.match(s));r>=0&&this.frameWaiters.splice(r,1)[0].resolve();const o=F2(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 le=new X2,eh=5,K2=i=>Number.isInteger(i)&&i>=0&&iString(Math.round(i*100)/100),xi={forward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(i)})`,label:([i])=>`${be(i)} cm vorwärts`},backward:{args:1,defaults:[nu],python:([i])=>`mbot2.straight(${be(-i)})`,label:([i])=>`${be(i)} cm rückwärts`},turnLeft:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(-i)})`,label:([i])=>`${be(i)}° nach links drehen`},turnRight:{args:1,defaults:[90],python:([i])=>`mbot2.turn(${be(i)})`,label:([i])=>`${be(i)}° nach rechts drehen`},stop:{args:0,python:()=>'mbot2.EM_stop("ALL")',label:()=>"anhalten"},drive:{args:2,python:([i,e])=>`mbot2.drive_power(${be(i)}, ${be(-e)})`,label:([i,e])=>`Räder links ${be(i)} %, rechts ${be(e)} %`},setLed:{args:3,python:([i,e,t])=>`cyberpi.led.on(${be(i)}, ${be(e)}, ${be(t)})`,label:([i,e,t])=>`LEDs (${be(i)}, ${be(e)}, ${be(t)})`},ledOff:{args:0,python:()=>"cyberpi.led.off()",label:()=>"LEDs aus"},ledColor:{args:1,text:!0,choices:Object.keys(Xa),valid:([i])=>K2(i),python:([i],e)=>`cyberpi.led.on(${Xa[e].join(", ")}, id=${i+1})`,label:([i],e)=>`LED ${i}: ${e}`},playTone:{args:2,python:([i,e])=>`cyberpi.audio.play_tone(${be(i)}, ${be(e/1e3)})`,label:([i,e])=>`Ton ${be(i)} Hz, ${be(e)} ms`},pause:{args:1,label:([i])=>`${be(i)} ms warten`},resetTimer:{args:0,python:()=>"cyberpi.timer.reset()",label:()=>"Stoppuhr auf 0"},emotion:{args:0,text:!0,choices:e3,python:(i,e)=>`cyberpi.emotion.${e}()`,label:(i,e)=>`Gefühl: ${e}`},showText:{args:0,text:!0,python:(i,e)=>Ws(e),label:(i,e)=>`Bildschirm: ${e}`}},iu={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 Ll="en";function t3(i){Ll=i==="de"?"de":"en"}const n3=()=>Ll;function th(i){const e=i.trim().toLowerCase(),t=iu[e]??Object.values(iu).find(n=>n.de===e);return t?t[Ll]:e}const l1=i=>({python:`cyberpi.controller.is_press('${i}')`,simulated:!1}),St={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:l1("a"),isButtonB:l1("b"),isJoystickUp:l1("up"),isJoystickDown:l1("down"),isJoystickLeft:l1("left"),isJoystickRight:l1("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 i3(i){const e=new Set;for(const t of i.matchAll(/\bmbot\s*\.\s*([A-Za-z_]\w*)\s*\(\s*\)/gu))t[1]in St&&e.add(t[1]);return[...e]}function a3(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===""?[]:o3(n)}}function Ka(i,e){const t=xi[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 au(i,e,t=""){var a;const n=xi[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 nh(i){return i.map(e=>[e.method,...e.args.map(be),...e.text!==void 0?[JSON.stringify(e.text)]:[]].join(" "))}function s3(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 St))return t;const a=e(n);return typeof a=="string"?JSON.stringify(n==="getColor"?th(a):a):String(a)}):i}function o3(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 ih(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=U1(i.slice(0,t));return`${n} x ${t===1?a:`(${a})`}`}}return i.join(", ")}const ah=["cyberpi","screen","joystick","buttons","leds","lightSensor","microphone","shield","powerSwitch","motors","wheels","ultrasonic","lineSensor","caster","chassis"],l3=i=>ah.includes(i),u3=100;function sh(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`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 Ze extends Error{constructor(e){super(sh(e)),this.notice=e}}const qe=i=>new Ze({kind:"unsupportedStatement",text:i}),F=i=>new Ze({kind:"invalidExpression",text:i}),$1=i=>new Ze({kind:"unknownVariable",text:i}),m3=()=>new Ze({kind:"divisionByZero"}),ts=new Map;function c3(i,e){ts.set(i,e)}const rh=()=>[...ts];function su(i){return i instanceof Ze?i.notice:{kind:"other",text:i instanceof Error?i.message:String(i)}}function d3(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 ru(i){return Number.isFinite(i)&&Math.round(i)===i?i.toFixed(1):d3(i)}function we(i){switch(i.kind){case"int":return String(i.value);case"double":return ru(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(ru).join(", ")+"]";case"stringArray":return"["+i.value.join(", ")+"]";case"booleanArray":return"["+i.value.map(String).join(", ")+"]";case"grid":return"["+h3(i).join(", ")+"]";case"reader":return`${i.className}(${i.file})`;case"writer":return`PrintWriter(${i.file})`;case"null":return"null"}}function h3(i){return i.value.map(e=>"["+e.map(t=>we(co(i.elementType,t))).join(", ")+"]")}function co(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 ou(i){return i==="string"?"":i==="boolean"?!1:0}function ho(i){return i.kind==="intArray"||i.kind==="doubleArray"||i.kind==="stringArray"||i.kind==="booleanArray"||i.kind==="grid"}function g3(i){return i.kind==="int"||i.kind==="double"?i.value:NaN}const yt=i=>({kind:"int",value:i}),wt=i=>({kind:"double",value:i}),Wl=i=>i!==void 0&&/\s/u.test(i),ns=i=>new RegExp("\\p{L}","u").test(i),Y1=i=>new RegExp("\\p{N}","u").test(i);function ai(i){const e=Array.from(i);return e.length===0||!(ns(e[0])||e[0]==="_")?!1:e.every(t=>ns(t)||Y1(t)||t==="_")}function Kt(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 lu(i){return i.kind==="int"?"int":i.kind==="double"?"double":i.kind==="boolean"?"boolean":"string"}function at(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 uu(i){return i.replaceAll("(int)","").replaceAll("(double)","").trim()}function El(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 is(i,e){const t=Array.from(i),n=Array.from(e),a=El(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 p3(i){const e=Array.from(i),t=El(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 Es(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(Es(e,s)===e.length-1)return{lhs:e.slice(0,a).join("").trim(),rhs:e.slice(s+1,-1).join("").trim()}}}function Yi(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===""||Wl(n[0])||n[0]==="("))continue;let a=n.trim();const s=oh(a);return s!==void 0&&(a=s),a===""?"true":a}return e===""?"true":e}function d1(i){const e=i.trim(),t=e.indexOf("[");if(!e.endsWith("]")||t<0)return;const n=e.slice(0,t).trim();if(!ai(n))return;const a=[];let s=t;for(;s2))return{arrayName:n,indexExpressions:a}}function x3(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(Es(n,a)!==n.length-1)return;const s=n.slice(a+1,-1).join("").trim();return{target:t[1],method:t[2],args:s===""?[]:is(s,",")}}function mu(i){return ai(i)||d1(i)!==void 0}function dr(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 F(i);return e.push(t),e}function b3(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 cu(i){const e=Array.from(i),t=[];let n=0;for(;n1)throw F(i)}else if(!Y1(e[n]))break;n+=1}const o=e.slice(s,n).join("");if(o==="."||!/^[0-9]*\.?[0-9]*$/.test(o))throw F(i);t.push({t:"number",literal:o,value:Number(o)});continue}if(ns(a)||a==="_"){const s=n;for(;n=0&&s=0&&o=0&&s|&&|\|\||^\s*!/u.test(e)}function Yn(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function hu(i){const e=i.slice(0,3);for(;e.length<3;)e.push("");return e}function po(i){const e=i.map(t=>Yn(t).trim());return e.length===1&&e[0].includes(";")?hu(e[0].split(";").map(t=>t.trim())):hu(e)}const lt=i=>i.frame?{frame:i.frame,callPath:i.callPath}:{};function qt(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 k.anweisung:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"statement"});break;case k.verzweigung:a({path:o,text:l||"true",kind:"branch",cases:s.cases});break;case k.fallauswahl:a({path:o,text:l||"0",kind:"switchSelection",cases:s.cases});break;case k.forSchleife:a({path:o,text:l,kind:"forLoopStart",loopBody:s.loopBody,forParts:po(s.textLines)});break;case k.whileSchleife:a({path:o,text:l||"true",kind:"whileLoop",loopBody:s.loopBody});break;case k.doUntilSchleife:a({path:o,text:l||"true",kind:"doUntilLoop",loopBody:s.loopBody});break;case k.endlosschleife:a({path:o,text:l||"true",kind:"infiniteLoop",loopBody:s.loopBody});break;case k.aussprung:a({path:o,text:l,kind:"jump"});break;case k.aufruf:l!==""&&l!=="ø"&&a({path:o,text:l,kind:"call"});break}}),n}function y3(i,e){const t=i.trim().replaceAll(",",".");switch(e){case"int":if(!/^[+-]?[0-9]+$/.test(t))throw new Ze({kind:"wholeNumberExpected"});return yt(Number(t));case"double":if(!/^[+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?$/.test(t))throw new Ze({kind:"numberExpected"});return wt(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 Ze({kind:"booleanExpected"})}}}function gu(){return{stepIndex:0,variables:new Map,outputLines:[],isHalted:!1,files:new Map,robotActions:[]}}function w3(i,e){for(let t=0;tt===e.path[n])}function vt(i){const e=/^(void|int|double|String|boolean)\s+([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(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:Kt(a[1]),name:a[3],...s>0?{dims:s}:{}})}return{returnType:Kt(e[1]),name:e[2],params:t}}function lh(i){const e=/^(?:(?:(int|double|String|boolean)\s+)?([A-Za-z_]\w*)\s*=\s*)?([A-Za-z_]\w*)\s*\((.*)\)$/u.exec(Yn(i));if(e)return{targetType:e[1]?Kt(e[1]):void 0,target:e[2],name:e[3],args:e[4].trim()===""?[]:is(e[4],",")}}function as(i){var t,n;const e=Yn(i);return((t=vt(e))==null?void 0:t.name)??((n=lh(e))==null?void 0:n.name)??e.replace(/\(\s*\)$/u,"").trim()}class bi{constructor(e,t=()=>{}){y(this,"steps");y(this,"state",gu());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=qt(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 ${we(n)}`}catch(n){this.state.inputErrorNotice=su(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 qe(e.text);const n=Yi(e.text),a=this.condition(n);if(a===void 0)return;const s=a?0:1,r=qt(t[s].elements,[...e.path,s],lt(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 qe(e.text);const n=Yi(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=w3(this.evaluateSwitchSelector(n),t)??t.length-1;const s=qt(t[a].elements,[...e.path,a],lt(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=po(e.forParts??[e.text]);t[0]!==""&&this.executeStatement(t[0]),this.splice([{...lt(e),path:e.path,text:t[1],kind:"forLoopCondition",loopBody:e.loopBody,forParts:t}])}executeForLoopCondition(e){const t=po(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...s,{...lt(e),path:e.path,text:t[2],kind:"forLoopIncrement",loopBody:e.loopBody,forParts:t},{...lt(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=Yi(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(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=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}]),this.state.notice=this.noticeAfterEntering(t)}executeDoUntilCondition(e){const t=Yi(e.text),n=this.condition(t);if(n!==void 0)if(this.state.lastTrace=`${t} -> ${n}`,n){const a=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...a,{...lt(e),path:e.path,text:e.text,kind:"doUntilCondition",loopBody:e.loopBody}])}else this.splice([]),this.state.notice=this.finishedIfAtEnd()}enterInfiniteLoop(e){const t=qt(e.loopBody??[],[...e.path,0],lt(e));this.splice([...t,{...lt(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(as(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=lh(t),s=vt(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 Ze({kind:"callArguments",text:(s==null?void 0:s.name)??as(t)});if(this.callDepth>=u3)throw new Ze({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)?new Ze({kind:"unknownVariable",text:g}):F(g);if(!(d.dims===1?f.kind===`${d.type}Array`:f.kind==="grid"&&f.elementType===d.type))throw F(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=qt(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():we(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=Yn(e.text).slice(6).trim(),a=this.frames.get(t);if(a&&n!==""){if(!a.header.returnType)throw F(e.text);a.returnValue=this.evaluateExpression(n,a.header.returnType)}const s=a!=null&&a.returnValue?`${e.text} -> ${we(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 Ze({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"?wt(a.value):r==="string"?{kind:"string",value:we(a)}:a;if(lu(o)!==r)throw F(e.text);this.assignValue(o,s),this.state.lastTrace=`${s} = ${e.text.slice(e.text.indexOf("=")+1).trim()} -> ${we(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)),I=v.trim()===""?"":this.evaluateOutputExpression(v);t.outputLineOpen&&t.outputLines.length?t.outputLines[t.outputLines.length-1]+=I:t.outputLines.push(I),t.outputLineOpen=(r==null?void 0:r[1])==="print",this.afterOutput=!0,t.lastTrace=`${w} -> ${I}`;return}const o=a3(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(Yn(n).trim()),u=l?Kt(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,co(u,ou(u)));t.lastTrace=v.map(w=>`${w} = ${we(t.variables.get(w))}`).join(", ");return}const m=n.indexOf("=");if(m<0)throw qe(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 x=g.valueType;if(!x)try{x=this.inferTargetValueType(g.variableName)}catch{x="int"}const b=this.evaluateExpression(d,x);this.assignValue(b,g.variableName),t.lastTrace=`${g.variableName} = ${f} -> ${we(b)}`}executeMBotCommand(e,t,n){var r;if((r=xi[e])!=null&&r.text){const o=xi[e];if(t.length!==o.args+1)throw F(n);const l=Ka(e,t.slice(0,-1).map(c=>this.evaluateDouble(c)));if(!l)throw F(n);const u=au(e,l,this.evaluateOutputExpression(t[t.length-1])),m=o.choices;if(m&&!m.includes(u.text??""))throw F(`${n} (${m.join(", ")})`);this.state.robotActions.push(u),this.state.lastTrace=`${n} -> ${u.label}`;return}const a=Ka(e,t.map(o=>this.evaluateDouble(o)));if(!a)throw F(n);const s=au(e,a);this.state.robotActions.push(s),this.state.lastTrace=`${n} -> ${s.label}`}executeFileStatement(e){const t=this.state,n=Yn(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 F(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 qe(n);const f=this.fileNameValue(g[1]??g[2]);if(d==="PrintWriter")t.variables.set(c,{kind:"writer",file:f,text:""});else{const b=this.fileContent(f).split(/\r?\n/u);b[b.length-1]===""&&b.pop(),t.variables.set(c,{kind:"reader",className:d,file:f,lines:b,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 Ze({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=at(t);if(n!==void 0)return n;const a=this.evaluateReference(t);if((a==null?void 0:a.kind)==="string")return a.value;throw F(t)}fileContent(e){const t=this.state.files.get(e)??ts.get(e);if(t===void 0)throw new Ze({kind:"fileNotFound",text:e});return t}readerMethod(e,t,n,a){if(n.args.length)throw F(a);const s=t.next0?"+":"-";if(r.kind==="int"){t.set(s,yt(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,wt(l)),this.state.lastTrace=`${s} = ${we(r)} ${o} 1 -> ${we(wt(l))}`;return}throw qe(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(!ai(r)||!l)throw qe(e);const u=a>0?"+":"-";if(l.kind==="int"){const m=this.evaluateInt(o),c=l.value+a*m;t.set(r,yt(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,wt(c)),this.state.lastTrace=`${r} = ${we(l)} ${u} ${we(wt(m))} -> ${we(wt(c))}`;return}throw qe(e)}this.executeStatement(e)}parseAssignmentTarget(e){if(d1(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&&Kt(t[0]))n=t[1],a=Kt(t[0]);else if(t.length===3&&t[0]==="const"&&Kt(t[1]))n=t[2],a=Kt(t[1]);else throw qe(e);if(!mu(n))throw qe(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 qe(e);const s=[a[1],a[2],a[3]].filter(c=>c!==void 0);let r,o,l;const u=Kt(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()),!mu(r))throw qe(e);const m=at(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=Kt(s),o=n[1];if(!r||!ai(o))throw qe(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=>at(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 qe(t);const m=l.slice(u.length,-1),c=this.evaluateInt(m);if(c<0)throw F(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 at(d.trim())??this.evaluateOutputExpression(d)}};if(s.startsWith("{")&&s.endsWith("}")){const d=b3(s.slice(1,-1)).map(h=>{const g=h.trim();if(!g.startsWith("{")||!g.endsWith("}"))throw F(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 qe(a);const l=this.evaluateInt(o[1]),u=this.evaluateInt(o[2]);if(l<0)throw F(o[1]);if(u<0)throw F(o[2]);const m={kind:"grid",elementType:n,value:Array.from({length:l},()=>new Array(u).fill(ou(n)))};return{name:e,typeName:t,count:`${l}][${u}`,value:m}}arrayIndex(e){const t=this.evaluateInt(e);if(t<0)throw F(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 F(t);return{kind:"string",value:String.fromCodePoint(o)}}const r=d1(t);if(r)return this.valueInArray(r.arrayName,r.indexExpressions.map(o=>this.arrayIndex(o)))}evaluateStringMethod(e){const t=x3(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 Ze({kind:"nullValue",text:t.target.trim()});const s=at(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 F(e);const g=at(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 F(h)},l=d=>{if(r[d]===void 0)throw F(e);return this.evaluateInt(r[d])},u=d=>{if(r.length!==d)throw F(e)},m=Array.from(s),c=(d,h)=>{if(d<0||d>h)throw F(e);return d};switch(t.method){case"length":return u(0),yt(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 F(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 F(e);return t.args[0]},a=s=>{const r=at(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 F(s)};switch(`${t.target}.${t.method}`){case"Integer.parseInt":{const s=a(n()).trim();if(!/^[+-]?\d+$/u.test(s))throw new Ze({kind:"wholeNumberExpected"});return yt(Number(s))}case"Double.parseDouble":{const s=Number(a(n()).trim());if(!Number.isFinite(s))throw new Ze({kind:"numberExpected"});return wt(s)}case"String.valueOf":return{kind:"string",value:this.evaluateOutputExpression(n())};case"Files.readString":{const s=/^(?:Path\s*\.\s*of|Paths\s*\.\s*get)\s*\(\s*("(?:[^"\\]|\\.)*")\s*\)$/u.exec(n().trim());if(!s)throw F(e);const r=at(s[1]),o=ts.get(r);if(o===void 0)throw new Ze({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=d1(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=Es(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"?go(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 $1(e);const a=`${e}[${t.join("][")}]`;if(n.kind==="grid"){if(t.length!==2)throw F(a);const r=n.value[t[0]];if(!r||t[1]>=r.length)throw F(a);return co(n.elementType,r[t[1]])}if(t.length!==1)throw F(a);const s=t[0];if(!ho(n))throw F(e);if(s>=n.value.length)throw F(a);switch(n.kind){case"intArray":return yt(n.value[s]);case"doubleArray":return wt(n.value[s]);case"stringArray":return{kind:"string",value:n.value[s]};case"booleanArray":return{kind:"boolean",value:n.value[s]};default:throw F(e)}}inferTargetValueType(e){const t=e.trim(),n=this.state.variables.get(t);if(n)return lu(n);const a=d1(t);if(a){const s=this.state.variables.get(a.arrayName);if(!s)throw $1(a.arrayName);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 F(a.arrayName)}throw qe(e)}assignValue(e,t){const n=t.trim(),a=d1(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 $1(a.arrayName);if(r.kind==="grid"){if(s.length!==2||s[0]>=r.value.length||s[1]>=r.value[s[0]].length)throw F(n);const u=r.elementType==="double"&&e.kind==="int"||e.kind===r.elementType?e.value:void 0;if(u===void 0||ho(e))throw F(n);const m=r.value.map(c=>[...c]);m[s[0]][s[1]]=u,this.state.variables.set(a.arrayName,{...r,value:m});return}if(s.length!==1)throw F(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 F(n);if(o>=l.value.length)throw F(n);l.value[o]=e.value,this.state.variables.set(a.arrayName,l)}evaluateOutputExpression(e){const t=this.withSensors(e).trim();if(du(t)&&dr(t).every(s=>at(s.trim())===void 0)&&!this.evaluateReference(t))return String(this.evaluateBool(t));let n,a;for(const s of dr(this.withSensors(e))){const r=s.trim(),o=at(r),l=o!==void 0?{kind:"string",value:o}:this.evaluateReference(r)??(du(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"?yt(n.value+l.value):wt(n.value+l.value):n=l;continue}a=(a??(n?we(n):""))+we(l),n=void 0}return a??(n?we(n):"")}renderOutputExpression(e){return dr(e).map(t=>{const n=t.trim();if(at(n)!==void 0)return n;const a=this.evaluateReference(n);if(a)return we(a);try{return this.renderNumericExpression(n)}catch{return n}}).join(" + ")}evaluateExpression(e,t){switch(t){case"int":return yt(this.evaluateInt(e));case"double":return wt(this.evaluateDouble(e));case"string":{const n=e.trim(),a=at(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:we(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?yt(t):wt(t)}parser(e){const t=this.withSensors(e);return new v3(cu(uu(this.substituteStringCalls(t))),this.state.variables)}withSensors(e){return r3(e,t=>this.robotSensors[t]??St[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=is(t,"||");if(a.length>1)return a.some(u=>this.evaluateBool(u));const s=is(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=oh(t);if(r!==void 0)return this.evaluateBool(r);const o=f3(t);if(o)return this.evaluateComparison(o.lhs,"==",o.rhs);const l=p3(t);if(l)return this.evaluateComparison(l.lhs,l.op,l.rhs);if(this.stringOperand(t)!==void 0)throw F(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 F(`${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 F(`${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=at(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=at(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 F(t)}return/^[+-]?[0-9]+$/.test(t)?{kind:"int",value:Number(t)}:{kind:"int",value:this.evaluateInt(t)}}renderNumericExpression(e){return cu(uu(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 $1(t.name);return we(n)}return t.t}).join(" ").replaceAll("( ","(").replaceAll(" )",")").replaceAll(" . ",".").replaceAll("[ ","[").replaceAll(" ]","]")}}const uh={baseIndent:0,indentPerLevel:4,includeDiagramTextAsComments:!1,includeEmptyElseBranch:!0,pseudocodeNote:"Pseudocode – not a runnable program"};function ss(i,e,t={},n=[]){const a=Nl(i,e,t);let s="";e==="javascript"&&(s+=`"use strict"; -`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(Ih)&&(s+=`import random +`);const r=[i,...e==="java"?[]:n];if(e==="python"&&r.some(kh)&&(s+=`import random `),e!=="java"&&(s+=bo(r,e)),e==="java"&&ls(i)&&(s+=`// import java.util.Scanner; `,s+=`Scanner scanner = new Scanner(System.in); @@ -27,49 +27,49 @@ except: `),i.pseudocode&&(s+=(e==="python"?"# ":"// ")+a.pseudocodeNote+` `),e!=="java")for(const u of n){if(u===i)continue;const m=vt(u.caption);m&&(s+=fo(u,m,e,t,0)+` -`)}const o=vt(i.caption),l={out:""};if(o)l.out=fo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Rs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=I3(e);return e==="javascript"?`"use strict"; +`)}const o=vt(i.caption),l={out:""};if(o)l.out=fo(i,o,e,t,a.baseIndent);else for(const u of i.elements)Rs(u,e,a,a.baseIndent,l);if(s+=l.out,s.trim()===""){const u=k3(e);return e==="javascript"?`"use strict"; -`+u:u}return Th(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Nl(i,e,t){const n={...lh,...t,jsIntVariables:new Set,arrayElementTypes:C3(i),stringVariables:j3(i)};return e!=="java"&&(n.jsIntVariables=K3(i)),n}const pu=i=>i==="string"?"String":i===void 0?"void":i;function uh(i){const e=i.params.map(t=>`${pu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${pu(i.returnType)} ${i.name}(${e}) {`}function fo(i,e,t,n,a){const s=Nl(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)Rs(l,t,s,a+s.indentPerLevel,o);switch(o.out.trim()===""&&(o.out=Z(a+s.indentPerLevel)+(t==="python"?`pass +`+u:u}return Oh(s.replace(/^[\n\r]+|[\n\r]+$/g,""),e)}function Nl(i,e,t){const n={...uh,...t,jsIntVariables:new Set,arrayElementTypes:B3(i),stringVariables:C3(i)};return e!=="java"&&(n.jsIntVariables=ex(i)),n}const pu=i=>i==="string"?"String":i===void 0?"void":i;function mh(i){const e=i.params.map(t=>`${pu(t.type)}${"[]".repeat(t.dims??0)} ${t.name}`).join(", ");return`public static ${pu(i.returnType)} ${i.name}(${e}) {`}function fo(i,e,t,n,a){const s=Nl(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)Rs(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)}${uh(e)} +`)),t){case"java":return`${Z(a)}${mh(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 ce(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function I3(i,e){return i==="python"?"# empty element":"// empty element"}const xo=i=>i.trim()==="ø";function mh(i,e){return Z(i)+(e==="python"?`# empty element +`}}const Z=i=>i>0?" ".repeat(i):"";function ce(i,e){const t=i.exec(e);return t?Array.from(t,n=>n??""):void 0}function k3(i,e){return i==="python"?"# empty element":"// empty element"}const xo=i=>i.trim()==="ø";function ch(i,e){return Z(i)+(e==="python"?`# empty element `:`// empty element -`)}function k3(i){switch(i.type){case I.leerElement:return!0;case I.anweisung:case I.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||xo(e));default:return!1}}function S3(i){return i.every(k3)}function Fl(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 S3(i){switch(i.type){case k.leerElement:return!0;case k.anweisung:case k.aufruf:return i.textLines.map(e=>e.trim()).every(e=>e===""||xo(e));default:return!1}}function _3(i){return i.every(S3)}function Fl(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 _3=i=>i==="java"||i==="javascript";function rs(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 Da(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return T3(e.length===0?"true":e.join(" "))}function T3(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=ch(t,e);if(n!==void 0)return n===""?"true":n}return e}function ch(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 Ht(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function O3(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 Ns=i=>i.name.includes("[")&&i.name.includes("]");function Jl(i){const e=i.trim();if(e==="")return;const t=ce(/^\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:os(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ce(/^\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=A3(e);if(a)return{type:os(a[0]),name:a[1]}}function os(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 A3(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 P3(i,e,t,n,a){const s=Ht(i).trim();if(s.startsWith('"'))switch(e){case"java":return Z(t)+"System.out.println("+s+`); +`}const T3=i=>i==="java"||i==="javascript";function rs(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 Da(i){const e=i.map(t=>t.trim()).filter(t=>t!=="");return O3(e.length===0?"true":e.join(" "))}function O3(i){const e=i.trim();for(const t of["if","while","until","switch"]){const n=dh(t,e);if(n!==void 0)return n===""?"true":n}return e}function dh(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 Ht(i){let e=i.trim();for(;e.endsWith(";");)e=e.slice(0,-1).trim();return e}function A3(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 Ns=i=>i.name.includes("[")&&i.name.includes("]");function Jl(i){const e=i.trim();if(e==="")return;const t=ce(/^\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:os(t[1]),name:s,customPrompt:r===""?void 0:r}}const n=ce(/^\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=P3(e);if(a)return{type:os(a[0]),name:a[1]}}function os(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 P3(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 j3(i,e,t,n,a){const s=Ht(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("+jn(s,n,a)+`) `}}function vi(i){return i.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(` -`,"\\n").replaceAll("\r","\\r")}function Rl(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=Jl(n);if(a&&Ns(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 j3(i){const e=new Set;return gn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=Jl(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Ns(o)&&e.add(o.name);continue}const s=ce(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ce(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function C3(i){const e=new Map;return gn(i.elements,t=>{for(const n of t.textLines){const a=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],os(a[1]))}}),e}function B3(i,e,t){const n=Rl(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+vi(a)+`"); +`,"\\n").replaceAll("\r","\\r")}function Rl(i,e){const t=i.trim();if(!t.toLowerCase().startsWith("input:"))return;const n=t.slice(6).trim();if(n==="")return;const a=Jl(n);if(a&&Ns(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 C3(i){const e=new Set;return gn(i.elements,t=>{for(const n of t.textLines){const a=n.trim();if(a.toLowerCase().startsWith("input:")){const o=Jl(a.slice(6).trim());(o==null?void 0:o.type)==="String"&&!Ns(o)&&e.add(o.name);continue}const s=ce(/^\s*(?:const\s+)?string\s+([a-zA-Z_]\w*)\s*=/i,a);s&&e.add(s[1]);const r=ce(/^\s*string\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=/i,a);r&&e.add(r[1]+"[]")}}),e}function B3(i){const e=new Map;return gn(i.elements,t=>{for(const n of t.textLines){const a=ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s*\[\s*\]\s*([a-zA-Z_]\w*)/i,n)??ce(/^\s*(integer|int|long|float|double|string|boolean|char|bool)\s+([a-zA-Z_]\w*)\s*\[\s*\]/i,n);a&&e.set(a[2],os(a[1]))}}),e}function D3(i,e,t){const n=Rl(i,t);if(!n)return;const a=n.customPrompt?n.customPrompt:n.name+": ",s=Z(e)+'System.out.println("'+vi(a)+`"); `,r=o=>Ns(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 D3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+vi(n.name+": ")+`"); +`;default:return}}function Z3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'console.log("'+vi(n.name+": ")+`"); `,r=l=>{const u=a?n.customPrompt:n.name+": ";return`(prompt("${vi(u)}") ?? "${l}")`},o=Ns(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 Z3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+vi(n.name+": ")+`") +`;default:return}}function M3(i,e,t){const n=Rl(i,t);if(!n)return;const a=!!n.customPrompt,s=a?"":Z(e)+'print("'+vi(n.name+": ")+`") `,r=`input("${vi(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 hr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,M3=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${hr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${hr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${hr}\s*\)?\s*\)$`),"PrintWriter"]];function dh(i){const e=i.trim();for(const[t,n]of M3){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function L3(i,e,t,n,a){if(e==="java")return;const s=Ht(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&dh(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 hr=String.raw`("(?:[^"\\]|\\.)*"|[A-Za-z_]\w*)`,L3=[[new RegExp(String.raw`^new\s+Scanner\s*\(\s*new\s+File\s*\(\s*${hr}\s*\)\s*\)$`),"Scanner"],[new RegExp(String.raw`^new\s+BufferedReader\s*\(\s*new\s+FileReader\s*\(\s*${hr}\s*\)\s*\)$`),"BufferedReader"],[new RegExp(String.raw`^new\s+PrintWriter\s*\(\s*(?:new\s+(?:File|FileWriter)\s*\(\s*)?${hr}\s*\)?\s*\)$`),"PrintWriter"]];function hh(i){const e=i.trim();for(const[t,n]of L3){const a=t.exec(e);if(a)return{kind:n,name:a[1]}}}function W3(i,e,t,n,a){if(e==="java")return;const s=Ht(i).trim(),r=/^(?:(?:Scanner|BufferedReader|PrintWriter)\s+)?([A-Za-z_]\w*)\s*=\s*(new\s[\s\S]+)$/.exec(s),o=r&&hh(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!==""?jn(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(${jn(m,n,a)}) `:Z(t)+`require("fs").writeFileSync(${u[1]}, ${m}); -`}}function W3(i){const e=new Set;for(const t of i)gn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&dh(s[1]);r&&e.add(r.kind)}});return e}const E3={Scanner:`class Scanner: +`}}function E3(i){const e=new Set;for(const t of i)gn(t.elements,n=>{for(const a of n.textLines){const s=/=\s*(new\s.+?);?\s*$/.exec(a),r=s&&hh(s[1]);r&&e.add(r.kind)}});return e}const N3={Scanner:`class Scanner: def __init__(self, name): self.lines = open(name, encoding="utf-8").read().splitlines() def hasNextLine(self): @@ -94,7 +94,7 @@ ${o.out}${Z(a)}} self.file.write(str(text)) def close(self): self.file.close() -`},N3={Scanner:`class Scanner { +`},F3={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(); } @@ -111,38 +111,38 @@ ${o.out}${Z(a)}} print(text) { this.text += text; } close() { require("fs").writeFileSync(this.name, this.text); } } -`};function bo(i,e){const t=W3(i);if(t.size===0)return"";const n=e==="python"?E3:N3;return[...t].map(a=>n[a]).join(` +`};function bo(i,e){const t=E3(i);if(t.size===0)return"";const n=e==="python"?N3:F3;return[...t].map(a=>n[a]).join(` `)+` -`}function F3(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Ht(i).trim());if(s){const o=s[1].trim();switch(e){case"java":return Z(t)+"System.out.print("+o+`); +`}function J3(i,e,t,n,a){const s=/^System\s*\.\s*out\s*\.\s*print\s*\(([\s\S]*)\)$/.exec(Ht(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===""?"":jn(o,n,a)+", ")+`end="") -`}}const r=O3(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=A3(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("+jn(r,n,a)+`) -`}}function Gl(i){const e=i.map(Ht).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function J3(i){const t=Gl(i).split(";"),n=hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function hh(i){const e=ce(/^(\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 R3(i){const e=i.map(n=>Ht(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=ch("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 gh(i,e){let t=ce(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ce(/^\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=ce(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ce(/^\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 vo(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 G3(i,e){const t=R3(i);if(!t)return;const[n,a,s]=t,r=ce(/^\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} = ${Pe(r[2],e)}`,condition:a,increment:s},u=ce(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=gh(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Pe(r[2],e);let d=Pe(u[3],e);const h=u[2];if(m>0&&h==="<=")d=vo(d,1);else if(m<0&&h===">=")d=vo(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 ph(i){const e=Ht(i).trim();if(e==="")return;const t=ce(/^\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 H3(i,e,t,n){var o;const a=ph(i);if(!a)return;const s=os(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+rs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` +`}}function Gl(i){const e=i.map(Ht).filter(t=>t!=="");return e.length===0?";;":e.join("; ")}function R3(i){const t=Gl(i).split(";"),n=gh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function gh(i){const e=ce(/^(\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 G3(i){const e=i.map(n=>Ht(n).trim()).filter(n=>n!=="");let t=e;if(e.length===1){let n=e[0];const a=dh("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 ph(i,e){let t=ce(/^\s*(\w+)\s*(\+\+|--)\s*$/,i)??ce(/^\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=ce(/^\s*(\w+)\s*(\+|-)=\s*(\d+)\s*$/,i),t)return t[1]===e?(t[2]==="+"?1:-1)*Number(t[3]):void 0;if(t=ce(/^\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 vo(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 H3(i,e){const t=G3(i);if(!t)return;const[n,a,s]=t,r=ce(/^\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} = ${Pe(r[2],e)}`,condition:a,increment:s},u=ce(/^\s*(\w+)\s*(<=|<|>=|>)\s*(.+)$/,a),m=ph(s,o);if(!u||u[1]!==o||m===void 0||m===0)return l;const c=Pe(r[2],e);let d=Pe(u[3],e);const h=u[2];if(m>0&&h==="<=")d=vo(d,1);else if(m<0&&h===">=")d=vo(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 fh(i){const e=Ht(i).trim();if(e==="")return;const t=ce(/^\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 V3(i,e,t,n){var o;const a=fh(i);if(!a)return;const s=os(a.rawType),r=(o=a.rhs)==null?void 0:o.trim();switch(e){case"java":return Z(t)+rs(r?`final ${s} ${a.name} = ${r}`:`final ${s} ${a.name}`)+` `;case"javascript":return r?Z(t)+rs(`const ${a.name} = ${r}`)+` `:Z(t)+`let ${a.name}; // from diagram: const ${s} ${a.name} `;case"python":return r?Z(t)+`${a.name} = ${Js(r,n)} # const ${s} `:Z(t)+`${a.name} = None # const ${s}, uninitialized -`}}function V3(i){const e=Ht(i).trim();if(e===""||wh(e))return;const t=ce(/^\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 Fs(i){const e=ce(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||fh(t)))return t.startsWith("(")&&yo(t,0)===t.length-1?t.slice(1,-1).trim():t}function yo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function Q3(i,e){if(i[e]==="("){const a=yo(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=yo(i,n);if(s<0)return-1;n=s+1}else return n}}function wo(i,e){return Hl(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=Q3(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!fh(u))continue;const m=wo(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 Js(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Fs(t);return n!==void 0?`int(${Js(n,e)})`:Pe(t,e)}function Hl(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return Hl(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 jn(i,e,t){const n=xh(i),a=s=>Vl(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==="")?Pe(i,e):n.map(s=>a(s)?s:`str(${Pe(s,e)})`).join(" + ")}function bh(i,e,t=new Set){const n=Ht(i).trim(),a=ce(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ce(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Pe(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ce(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Pe(s[2],e)}`;const r=ce(/^([\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=jn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!Vl(u.trim())&&!t.has(u.trim())&&(m=`str(${Pe(u,e)})`)}else l==="="&&Fs(u)===void 0&&u.trim()!=="null"?m=jn(u,e,t):m=l==="="?Js(u,e):Pe(u,e);return`${o} ${l} ${m}`}return Pe(n,e)}const q3=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function vh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function yh(i){const e=ce(/^\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 wh(i){const e=ce(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Ht(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function U3(i){const e=ce(/^\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 fu=i=>i.replaceAll("{","[").replaceAll("}","]");function xu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function $3(i,e,t){const n=U3(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${xu(i.elementType,e)}))`:fu(i.rhs):n?`[[${xu(i.elementType,e)}] * ${Pe(n[1],t)} for _ in range(${Pe(n[0],t)})]`:Pe(fu(i.rhs),t)}function zh(i,e){const t=i.trim();if(e){const a=yh(t);return a!==void 0?`new Array(${a})`:vh(t)}const n=Fs(t);return n!==void 0?`Math.floor(${zh(n,!1)})`:q3(t)}function Y3(i,e,t){const n=i.trim();if(e){const a=yh(n);return a!==void 0?`[None] * ${a}`:Pe(vh(n),t)}return Js(n,t)}function X3(i,e,t,n,a){if(e==="java")return;const s=wh(i);if(s){const u=$3(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; +`}}function Q3(i){const e=Ht(i).trim();if(e===""||zh(e))return;const t=ce(/^\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 Fs(i){const e=ce(/^\s*\(\s*int(?:eger)?\s*\)\s*(.+?)\s*$/i,i),t=e==null?void 0:e[1].trim();if(!(!t||xh(t)))return t.startsWith("(")&&yo(t,0)===t.length-1?t.slice(1,-1).trim():t}function yo(i,e){let t=0;for(let n=e;n/^'.'$/u.test(i)||/\.charAt\(.*\)$/.test(i);function q3(i,e){if(i[e]==="("){const a=yo(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=yo(i,n);if(s<0)return-1;n=s+1}else return n}}function wo(i,e){return Hl(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=q3(t,o);if(l<0)continue;const u=t.slice(o,l);if(r[1]==="int"&&!xh(u))continue;const m=wo(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 Js(i,e=new Set){const t=i.trim();if(t==="null")return"None";const n=Fs(t);return n!==void 0?`int(${Js(n,e)})`:Pe(t,e)}function Hl(i,e){let t="",n="",a=0;for(;a/^\d+$/.test(a)||e.has(a);return Hl(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 bh(i){const e=[];let t=0,n="",a=!1;for(let s=0;s/^"(?:[^"\\]|\\.)*"$/.test(i);function jn(i,e,t){const n=bh(i),a=s=>Vl(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==="")?Pe(i,e):n.map(s=>a(s)?s:`str(${Pe(s,e)})`).join(" + ")}function vh(i,e,t=new Set){const n=Ht(i).trim(),a=ce(/^(\w+(?:\[[^\]]*\])?)\s*(\+\+|--)$/,n)??ce(/^(\+\+|--)\s*(\w+(?:\[[^\]]*\])?)$/,n);if(a){const[o,l]=a[1]==="++"||a[1]==="--"?[a[2],a[1]]:[a[1],a[2]];return`${Pe(o,e)} ${l==="++"?"+=":"-="} 1`}const s=ce(/^(\w+)\s*\/=\s*(.+)$/,n);if(s&&e.has(s[1]))return`${s[1]} //= ${Pe(s[2],e)}`;const r=ce(/^([\w[\]. ]+?)\s*(=|\+=|-=|\*=|\/=|%=)\s*(.+)$/,n);if(r&&!r[3].startsWith("=")){const[,o,l,u]=r;let m;if(l==="+="&&t.has(o.trim())){const c=bh(u);m=jn(`"" + ${u}`,e,t).replace(/^"" \+ /,""),c.length===1&&!Vl(u.trim())&&!t.has(u.trim())&&(m=`str(${Pe(u,e)})`)}else l==="="&&Fs(u)===void 0&&u.trim()!=="null"?m=jn(u,e,t):m=l==="="?Js(u,e):Pe(u,e);return`${o} ${l} ${m}`}return Pe(n,e)}const U3=i=>i.replace(/\bMath\.random\b(?!\s*\()/gi,"Math.random()");function yh(i){const e=i.trim();return e.startsWith("{")&&e.endsWith("}")?"["+e.slice(1,-1)+"]":i}function wh(i){const e=ce(/^\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 zh(i){const e=ce(/^\s*(int|double|string|boolean)\s*\[\s*\]\s*\[\s*\]\s*([a-zA-Z_]\w*)\s*=\s*(.+)$/i,Ht(i).trim());return e?{elementType:e[1].toLowerCase(),name:e[2],rhs:e[3].trim()}:void 0}function $3(i){const e=ce(/^\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 fu=i=>i.replaceAll("{","[").replaceAll("}","]");function xu(i,e){return i==="boolean"?e==="python"?"False":"false":i==="string"?'""':i==="double"?"0.0":"0"}function Y3(i,e,t){const n=$3(i.rhs);return e==="javascript"?n?`Array.from({ length: ${n[0]} }, () => new Array(${n[1]}).fill(${xu(i.elementType,e)}))`:fu(i.rhs):n?`[[${xu(i.elementType,e)}] * ${Pe(n[1],t)} for _ in range(${Pe(n[0],t)})]`:Pe(fu(i.rhs),t)}function Ih(i,e){const t=i.trim();if(e){const a=wh(t);return a!==void 0?`new Array(${a})`:yh(t)}const n=Fs(t);return n!==void 0?`Math.floor(${Ih(n,!1)})`:U3(t)}function X3(i,e,t){const n=i.trim();if(e){const a=wh(n);return a!==void 0?`[None] * ${a}`:Pe(yh(n),t)}return Js(n,t)}function K3(i,e,t,n,a){if(e==="java")return;const s=zh(i);if(s){const u=Y3(s,e,n);return e==="javascript"?Z(t)+`let ${s.name} = ${u}; `:Z(t)+`${s.name} = ${u} -`}const r=V3(i);if(!r)return;if(e==="javascript")return Z(t)+rs(`let ${r.name} = ${zh(r.rhs,r.isArray)}`)+` -`;const l=!r.isArray&&Fs(r.rhs)===void 0&&r.rhs.trim()!=="null"?jn(r.rhs,n,a):Y3(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} -`}function gn(i,e){for(const t of i){e(t),t.loopBody&&gn(t.loopBody,e);for(const n of t.cases??[])gn(n.elements,e)}}function K3(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return gn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=Jl(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=ph(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ce(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function zo(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 ls(i){let e=!1;return gn(i.elements,t=>{t.type===I.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function Ql(i){let e=!1,t=!1,n=!1;return gn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function ex(i){return Ql(i).length>0}function Ih(i){let e=!1;return gn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function Xi(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||Vl(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function E1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function tx(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!==""&&!xo(o));r.length>0&&(a.out+=Fl(r,e,n))}for(const r of s){if(r==="")continue;if(xo(r)){a.out+=t.live?Ul(n,t.live):mh(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?B3(r,n,l):void 0)??(e==="javascript"?D3(r,n,l):void 0)??(e==="python"?Z3(r,n,l):void 0)??L3(r,e,n,o,u)??F3(r,e,n,o,u)??H3(r,e,n,o)??X3(r,e,n,o,u)??P3(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?zo(m,o):m;continue}let c=r;_3(e)?c=rs(e==="javascript"?zo(r,o):r):e==="python"&&(c=bh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` +`}const r=Q3(i);if(!r)return;if(e==="javascript")return Z(t)+rs(`let ${r.name} = ${Ih(r.rhs,r.isArray)}`)+` +`;const l=!r.isArray&&Fs(r.rhs)===void 0&&r.rhs.trim()!=="null"?jn(r.rhs,n,a):X3(r.rhs,r.isArray,n);return Z(t)+`${r.name} = ${l} +`}function gn(i,e){for(const t of i){e(t),t.loopBody&&gn(t.loopBody,e);for(const n of t.cases??[])gn(n.elements,e)}}function ex(i){const e=n=>["int","integer","long","short","byte"].includes(n.trim().toLowerCase()),t=new Set;return gn(i.elements,n=>{for(const a of n.textLines){const s=a.trim();if(s==="")continue;if(s.toLowerCase().startsWith("input:")){const l=Jl(s.slice(6).trim());l&&e(l.type)&&!l.name.includes("[")&&t.add(l.name);continue}const r=fh(s);if(r&&e(r.rawType)){t.add(r.name);continue}const o=ce(/^\s*(integer|int|long|short|byte)\s+([a-zA-Z_]\w*)\s*=/i,s);o&&t.add(o[2].trim())}}),t}function zo(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 ls(i){let e=!1;return gn(i.elements,t=>{t.type===k.anweisung&&t.textLines.some(n=>n.trim().toLowerCase().startsWith("input:"))&&(e=!0)}),e}function Ql(i){let e=!1,t=!1,n=!1;return gn(i.elements,a=>{for(const s of a.textLines)/\bFiles\s*\./.test(s)&&(e=!0),/\bnew\s+(?:File|PrintWriter|FileReader|FileWriter|BufferedReader)\s*\(/.test(s)&&(t=!0),/\bnew\s+Scanner\s*\(\s*new\s+File\b/.test(s)&&(n=!0)}),[...t?["import java.io.*;"]:[],...e?["import java.nio.file.*;"]:[],...n?["import java.util.Scanner;"]:[]]}function tx(i){return Ql(i).length>0}function kh(i){let e=!1;return gn(i.elements,t=>{t.textLines.some(n=>/\bMath\.random\s*\(/i.test(n))&&(e=!0)}),e}function Xi(i,e){const t=i.trim();return t===""?e==="python"?'""':"0":e==="java"||new RegExp("^\\p{N}+$","u").test(t)||Vl(t)?t:'"'+t.replaceAll('"','\\"')+'"'}function E1(i,e){const t=i.trim();if(t==="")return"";switch(e){case"java":return"/* "+t+" */";case"python":return" # "+t;case"javascript":return" /* "+t+" */"}}function nx(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!==""&&!xo(o));r.length>0&&(a.out+=Fl(r,e,n))}for(const r of s){if(r==="")continue;if(xo(r)){a.out+=t.live?Ul(n,t.live):ch(n,e);continue}const o=t.jsIntVariables??new Set,l=t.arrayElementTypes??new Map,u=t.stringVariables??new Set,m=(e==="java"?D3(r,n,l):void 0)??(e==="javascript"?Z3(r,n,l):void 0)??(e==="python"?M3(r,n,l):void 0)??W3(r,e,n,o,u)??J3(r,e,n,o,u)??V3(r,e,n,o)??K3(r,e,n,o,u)??j3(r,e,n,o,u);if(m!==void 0){a.out+=e==="javascript"?zo(m,o):m;continue}let c=r;T3(e)?c=rs(e==="javascript"?zo(r,o):r):e==="python"&&(c=vh(r,o,u)),c!==""&&(a.out+=Z(n)+c+` `)}}function si(i,e,t,n,a,s,r,o=(l=>(l=a.live)==null?void 0:l.labels.condition)()){if(a.includeDiagramTextAsComments&&(r.out+=Fl(t,n,s)),o!==void 0&&$l(t)){r.out+=Z(s)+i+Xn(o)+e;return}const u=Da(t),m=a.jsIntVariables??new Set,c=n==="python"?Pe(u,m):n==="javascript"?zo(u,m):u;r.out+=Z(s)+i+c+e}function p1(i,e,t,n,a){const s=a.out.length;for(const o of i)Rs(o,e,t,n,a);if(t.live&&a.out.length===s&&(a.out+=Ul(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 nx(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===I.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Io(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&&S3(r[1].elements),m=u?void 0:nx(r[1].elements,t);if(o){si(s?"elif ":"if ",`: +`)}function ix(i,e){var n;if(e.includeDiagramTextAsComments||i.length!==1)return;const t=i[0];return t.type===k.verzweigung&&(((n=t.cases)==null?void 0:n.length)??0)>=2?t:void 0}function Io(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&&_3(r[1].elements),m=u?void 0:ix(r[1].elements,t);if(o){si(s?"elif ":"if ",`: `,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m?Io(m,e,t,n,a,!0):u||(a.out+=Z(n)+`else: `,p1(r[1].elements,e,t,l,a));return}if(si(s?"} else if (":"if (",`) { -`,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m){const c=a.out.length;Io(m,e,t,n,a,!0),Sh(t,m,a,c)}else u||(a.out+=Z(n)+`} else { +`,i.textLines,e,t,n,a),p1(r[0].elements,e,t,l,a),m){const c=a.out.length;Io(m,e,t,n,a,!0),_h(t,m,a,c)}else u||(a.out+=Z(n)+`} else { `,p1(r[1].elements,e,t,l,a)),a.out+=Z(n)+`} -`}function Rs(i,e,t,n,a){const s=a.out.length;ix(i,e,t,n,a),Sh(t,i,a,s)}function ix(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>p1(c,e,t,d,a),l=(c,d)=>si(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Fl(i.textLines,e,c))};switch(i.type){case I.leerElement:a.out+=t.live?Ul(n,t.live):mh(n,e);return;case I.anweisung:case I.aufruf:tx(i.textLines,e,t,n,a);return;case I.aussprung:{const c=Da(i.textLines);i.textLines.some(d=>d.trim()!=="")&&u(),r?a.out+=Z(n)+(c===""?`break +`}function Rs(i,e,t,n,a){const s=a.out.length;ax(i,e,t,n,a),_h(t,i,a,s)}function ax(i,e,t,n,a){var m;const s=t.indentPerLevel,r=e==="python",o=(c,d)=>p1(c,e,t,d,a),l=(c,d)=>si(c,d,i.textLines,e,t,n,a),u=(c=n)=>{t.includeDiagramTextAsComments&&(a.out+=Fl(i.textLines,e,c))};switch(i.type){case k.leerElement:a.out+=t.live?Ul(n,t.live):ch(n,e);return;case k.anweisung:case k.aufruf:nx(i.textLines,e,t,n,a);return;case k.aussprung:{const c=Da(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} -`);return}case I.verzweigung:Io(i,e,t,n,a,!1);return;case I.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;si(d+" = ",` +`);return}case k.verzweigung:Io(i,e,t,n,a,!1);return;case k.fallauswahl:{const c=i.cases;if(!c||c.length===0)return;if(r&&t.pythonWithoutMatch){const d=`wahl${n/s+1}`;si(d+" = ",` `,i.textLines,e,t,n,a),c.forEach((h,g)=>{const f=g===c.length-1;f&&g===0?a.out+=Z(n)+"if True:"+E1(h.name,e)+` `:f?a.out+=Z(n)+"else:"+E1(h.name,e)+` `:a.out+=Z(n)+(g===0?"if ":"elif ")+d+" == "+Xi(h.name,e)+`: @@ -155,47 +155,47 @@ ${o.out}${Z(a)}} `,o(d.elements,n+s*2)}else{const f=g?"default:"+E1(d.name,e):"case "+Xi(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 I.forSchleife:if(e==="java"){u();const c=t.live?kh(i.textLines,t.live.labels):Gl(i.textLines);a.out+=Z(n)+"for ("+c+`) { -`}else if(r){const c=t.jsIntVariables??new Set,d=G3(i.textLines,c);if((d==null?void 0:d.rangeLine)!==void 0)u(),a.out+=Z(n)+d.rangeLine+` +`);return}case k.forSchleife:if(e==="java"){u();const c=t.live?Sh(i.textLines,t.live.labels):Gl(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`}else if(r){const c=t.jsIntVariables??new Set,d=H3(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 "+Pe(d.condition,c)+`: -`;for(const h of i.loopBody??[])Rs(h,e,t,n+s,a);a.out+=Z(n+s)+bh(d.increment,c)+` -`;return}else t.live?a.out+=Z(n)+sx(i.textLines,t.live.labels,c)+` +`;for(const h of i.loopBody??[])Rs(h,e,t,n+s,a);a.out+=Z(n+s)+vh(d.increment,c)+` +`;return}else t.live?a.out+=Z(n)+rx(i.textLines,t.live.labels,c)+` `:l("for ",`: -`)}else{u();const c=t.live?ax(i.textLines,t.live.labels):J3(i.textLines);a.out+=Z(n)+"for ("+c+`) { +`)}else{u();const c=t.live?sx(i.textLines,t.live.labels):R3(i.textLines);a.out+=Z(n)+"for ("+c+`) { `}o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} -`);return;case I.whileSchleife:l(r?"while ":"while (",r?`: +`);return;case k.whileSchleife:l(r?"while ":"while (",r?`: `:`) { `),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} -`);return;case I.doUntilSchleife:{const c=t.live&&$l(i.textLines)?Xn(t.live.labels.condition):Da(i.textLines);if(r){a.out+=Z(n)+`while True: +`);return;case k.doUntilSchleife:{const c=t.live&&$l(i.textLines)?Xn(t.live.labels.condition):Da(i.textLines);if(r){a.out+=Z(n)+`while True: `;const d=n+s;o(i.loopBody??[],d),u(d);const h=c.includes(Mi)?c:Pe(c,t.jsIntVariables??new Set);a.out+=Z(d)+"if not ("+h+`): `,a.out+=Z(d+s)+`break `}else a.out+=Z(n)+`do { `,o(i.loopBody??[],n+s),u(),a.out+=Z(n)+"} while ("+c+`); -`;return}case I.endlosschleife:{const c=Da(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=Z(n)+(d?`while True: +`;return}case k.endlosschleife:{const c=Da(i.textLines),d=c===""||c==="true";d||u(),r?a.out+=Z(n)+(d?`while True: `:`while True: # ${c} `):a.out+=Z(n)+(d?`while (true) { `:`while (true) /* ${c} */ { `),o(i.loopBody??[],n+s),r||(a.out+=Z(n)+`} `);return}}}const Mi="",ql="",Xn=i=>Mi+i+ql,Ul=(i,e)=>Z(i)+Xn(e.target==="python"?`pass # ${e.labels.code}`:`// ${e.labels.code}`)+` -`,$l=i=>i.every(e=>e.trim()==="");function kh(i,e){return $l(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Ht(i[a]??"");return s===""?Xn(n):s}).join("; "):Gl(i)}function ax(i,e){const t=kh(i,e).split(";"),n=t[0].includes(Mi)?void 0:hh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function sx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Ht(g)):[],r=ce(/^\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=ce(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Pe(r[2],t):Xn(e.start),u=ce(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=Xn(e.end);u&&(o===void 0||u[1]===o)&&(m=Pe(u[3],t),u[2]==="<="&&(m=vo(m,1)));const c=o===void 0?void 0:gh(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??Xn(e.selector)} in range(${d.join(", ")}):`}function ko(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&&ko(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>ko(o.elements,[...s,l],t))}),t}function Sh(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 _h(i,e,t){const n={target:e,labels:t,paths:ko(i.elements),spans:[]},a=Nl(i,e,{includeEmptyElseBranch:!0,live:n}),s=vt(i.caption);let r="";if(e==="java"){const u=Ql(i);for(const m of u)r+=m+` +`,$l=i=>i.every(e=>e.trim()==="");function Sh(i,e){return $l(i)||i.length===3?[e.start,e.condition,e.step].map((n,a)=>{const s=Ht(i[a]??"");return s===""?Xn(n):s}).join("; "):Gl(i)}function sx(i,e){const t=Sh(i,e).split(";"),n=t[0].includes(Mi)?void 0:gh(t[0]);return n!==void 0&&(t[0]=n),t.join(";")}function rx(i,e,t){var h;const[n="",a="",s=""]=i.length===3?i.map(g=>Ht(g)):[],r=ce(/^\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=ce(/^\s*([a-zA-Z_]\w*)\s*(?:<=|<|>=|>)/,a))==null?void 0:h[1]),l=r?Pe(r[2],t):Xn(e.start),u=ce(/^\s*(\w+)\s*(<=|<)\s*(.+)$/,a);let m=Xn(e.end);u&&(o===void 0||u[1]===o)&&(m=Pe(u[3],t),u[2]==="<="&&(m=vo(m,1)));const c=o===void 0?void 0:ph(s,o),d=[l,m,...c!==void 0&&c!==1?[String(c)]:[]];return`for ${o??Xn(e.selector)} in range(${d.join(", ")}):`}function ko(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&&ko(n.loopBody,[...s,0],t),(r=n.cases)==null||r.forEach((o,l)=>ko(o.elements,[...s,l],t))}),t}function _h(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 Th(i,e,t){const n={target:e,labels:t,paths:ko(i.elements),spans:[]},a=Nl(i,e,{includeEmptyElseBranch:!0,live:n}),s=vt(i.caption);let r="";if(e==="java"){const u=Ql(i);for(const m of u)r+=m+` `;ls(i)?(u.includes("import java.util.Scanner;")||(r+=`import java.util.Scanner; `),r+=`Scanner scanner = new Scanner(System.in); `):u.length&&(r+=` -`),s&&(r+=uh(s)+` +`),s&&(r+=mh(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+=bo([i],"javascript"),s&&(r+=`function ${s.name}(${u}) { -`)):(Ih(i)&&(r+=`import random +`)):(kh(i)&&(r+=`import random `),r+=bo([i],"python"),s&&(r+=`def ${s.name}(${u}): `))}const o={out:""};p1(i.elements,e,a,s?a.indentPerLevel:0,o),s&&e!=="python"&&(o.out+=`} `);const l=r.split(` -`).length-1;return{text:Th((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Th(i,e){switch(e){case"javascript":return lx(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return rx(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return cx(i)}}function rx(i){for(let e=0;e<5;e++){const t=Oh(ox(i),"python");if(t===i)break;i=t}return i}const bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function ox(i){return Yl(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=ux(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}.${bu[t]}(${n})`}})}function lx(i){for(let e=0;e<5;e++){const t=Oh(Yl(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 Oh(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 ux(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 Yl(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 dx=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 Gs(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),dx.has(t.toLowerCase())&&(t="_"+t),t)}function vu(i,e,t={},n=[]){const a={...lh,...t},s=Gs(e),r=[i,...n].filter((S,z,k)=>k.indexOf(S)===z).map(S=>({d:S,header:vt(S.caption)})).filter(S=>S.header!==void 0),o=r.map(S=>fo(S.d,S.header,"java",t,a.indentPerLevel)),l=vt(i.caption),u=r.some(S=>ls(S.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?hx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` -`).map(S=>S.trim()===""?g:g+S).join(` -`);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(S=>S.d)].flatMap(Ql))],w=v.length>0;(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const S of v)x+=S+` +`).length-1;return{text:Oh((r+o.out).replace(/\n+$/,""),e),spans:n.spans.map(u=>({...u,from:u.from+l,to:u.to+l}))}}function Oh(i,e){switch(e){case"javascript":return ux(wo(i,"javascript")).replace(/\.length\(\)/g,".length").replace(/\.contains\(/g,".includes(");case"python":return ox(wo(i,"python")).replace(/\b([a-zA-Z_]\w*(?:\[[^[\]]*\])?)\.length(?:\(\)|\b)/g,"len($1)");case"java":return dx(i)}}function ox(i){for(let e=0;e<5;e++){const t=Ah(lx(i),"python");if(t===i)break;i=t}return i}const bu={indexOf:"find",lastIndexOf:"rfind",toUpperCase:"upper",toLowerCase:"lower",trim:"strip",startsWith:"startswith",endsWith:"endswith"};function lx(i){return Yl(i,["charAt","substring","contains","isEmpty","equalsIgnoreCase","compareTo","repeat","concat",...Object.keys(bu)],(e,t,n)=>{switch(t){case"charAt":return`${e}[${n}]`;case"substring":{const a=mx(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}.${bu[t]}(${n})`}})}function ux(i){for(let e=0;e<5;e++){const t=Ah(Yl(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 Ah(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 mx(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 Yl(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 hx=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 Gs(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),hx.has(t.toLowerCase())&&(t="_"+t),t)}function vu(i,e,t={},n=[]){const a={...uh,...t},s=Gs(e),r=[i,...n].filter((I,z,S)=>S.indexOf(I)===z).map(I=>({d:I,header:vt(I.caption)})).filter(I=>I.header!==void 0),o=r.map(I=>fo(I.d,I.header,"java",t,a.indentPerLevel)),l=vt(i.caption),u=r.some(I=>ls(I.d)),m=ss(i,"java",a),c=a.indentPerLevel*2,d=ls(i),h=d?gx(m):m,g=Z(c),f=h.trim()===""?"":h.split(` +`).map(I=>I.trim()===""?g:g+I).join(` +`);let x="";const b=o.length>0&&(d||u),v=[...new Set([i,...r.map(I=>I.d)].flatMap(Ql))],w=v.length>0;(d||u)&&!v.includes("import java.util.Scanner;")&&v.push("import java.util.Scanner;");for(const I of v)x+=I+` `;v.length&&(x+=` `),x+=`public class ${s} { `,b&&(x+=Z(a.indentPerLevel)+`static Scanner scanner = new Scanner(System.in); @@ -206,11 +206,11 @@ ${o.out}${Z(a)}} `)),x+=f,f!==""&&!f.endsWith(` `)&&(x+=` `),x+=Z(a.indentPerLevel)+`} -`);for(const[S,z]of o.entries())x+=(S>0||!l?` +`);for(const[I,z]of o.entries())x+=(I>0||!l?` `:"")+z;return x+=`} -`,x}function hx(i){const e=i.split(` +`,x}function gx(i){const e=i.split(` `);let t=0;for(e[t]==="// import java.util.Scanner;"&&t++;t=e.length?"":e.slice(t).join(` -`)}const xn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function Ki(i){try{return localStorage.getItem(i)}catch{return null}}function ea(i,e){try{localStorage.setItem(i,e)}catch{}}const gx=()=>p("web_run_stopped_loop"),Ah=()=>p("web_run_cancelled"),De=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function px(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(gx())}); })(); ${a}++) {`})}function fx(i){return px(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const xx=` +`)}const xn={target:"visustruct.codegen.target",javaMode:"visustruct.codegen.javaOutputMode",comments:"visustruct.codegen.includeDiagramComments",emptyElse:"visustruct.codegen.includeEmptyElse"};function Ki(i){try{return localStorage.getItem(i)}catch{return null}}function ea(i,e){try{localStorage.setItem(i,e)}catch{}}const px=()=>p("web_run_stopped_loop"),Ph=()=>p("web_run_cancelled"),De=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function fx(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(px())}); })(); ${a}++) {`})}function xx(i){return fx(i).replace(/\bprompt\s*\(/g,"await __visuStructPrompt(")}const bx=` let answer let lines = [] // Text von \`process.stdout.write\` ohne neue Zeile (wie \`System.out.print\`). @@ -242,7 +242,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(Ah())})) : resolve(value)) + answer = (value) => (value === null ? reject(new Error(${JSON.stringify(Ph())})) : resolve(value)) send('prompt', String(label ?? '')) }) onmessage = async (e) => { @@ -255,7 +255,7 @@ onmessage = async (e) => { send('error', String(err)) } } -`,gr=2e3;class bx{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=Ki(xn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=Ki(xn.javaMode)==="class"?"class":"snippet",this.comments=Ki(xn.comments)==="true",this.emptyElse=Ki(xn.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()):ss(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 as(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=` +`,gr=2e3;class vx{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=Ki(xn.target);this.target=r==="python"||r==="javascript"?r:"java",this.javaMode=Ki(xn.javaMode)==="class"?"class":"snippet",this.comments=Ki(xn.comments)==="true",this.emptyElse=Ki(xn.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()):ss(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 as(this.currentDocument().caption)||"Main"}build(){this.element.innerHTML=`

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

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

${De(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,ea(xn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ea(xn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ea(xn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ea(xn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Gs(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=fx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([xx],{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(Ah())):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>gr&&(this.droppedLines+=this.outputLines.length-gr,this.outputLines.splice(0,this.outputLines.length-gr)),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,ea(xn.target,this.target),this.refresh()});for(const a of this.element.querySelectorAll("[data-java-mode]"))a.addEventListener("click",()=>{this.javaMode=a.dataset.javaMode,ea(xn.javaMode,this.javaMode),this.refresh()});const t=e("[data-opt=comments]");t.checked=this.comments,t.addEventListener("change",()=>{this.comments=t.checked,ea(xn.comments,String(this.comments)),this.refresh()});const n=e("[data-opt=emptyElse]");n.checked=this.emptyElse,n.addEventListener("change",()=>{this.emptyElse=n.checked,ea(xn.emptyElse,String(this.emptyElse)),this.refresh()}),this.copyButton.addEventListener("click",()=>this.copy()),this.saveButton.addEventListener("click",()=>{const a=Gs(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=xx(this.code),t=n=>this.onRunnerMessage(n);try{const n=URL.createObjectURL(new Blob([bx],{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(Ph())):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>gr&&(this.droppedLines+=this.outputLines.length-gr,this.outputLines.splice(0,this.outputLines.length-gr)),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 Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},vx="visustruct.learn.progress",pr={"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 yx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(pr))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&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function wx(){try{localStorage.removeItem(vx)}catch{}}const Ph=()=>({lessons:{},exercises:{}});wx();let qe=Ph();const So=new Set;function ta(){for(const i of So)i()}const yu="visustruct-lernstand";function jh(i,e){return i||e||void 0}function zx(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:jh(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function Ix(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=zx(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:jh(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return qe.lessons[i]??{step:0}},updateLesson(i,e){qe.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return qe.exercises[i]??{}},updateExercise(i,e){qe.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete qe.exercises[i],ta()},view(){return qe.view},hasContent(){return Object.values(qe.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(qe.exercises).length>0},setView(i){qe.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:yu,version:1,saved:new Date().toISOString(),lessons:qe.lessons,exercises:qe.exercises,view:qe.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==yu)return!1;const n=yx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return qe=e?{...Ix(qe,n),view:n.view??qe.view}:n,!0},clear(){qe=Ph()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function kx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function Sx(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function _x(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 Tx(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ox(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,x)=>"^>v<".includes(g)?h===m>>1&&x===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))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),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 Iu?l.colors.push({at:g,color:Iu[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 Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Ax=300,u1=8,Px=[-3.6,-1.2,1.2,3.6],jx=2.5,Cx=20,Bx=12,Xl=100,yi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:Kd},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=yi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",na());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=na(),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=Vn/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=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(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=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[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*Cx);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*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Zx(r,l)<=jx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(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=Dx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Dx(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 Zx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Fx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(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:th(m.robotActions.filter(d=>!Ex.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:es(s.state.robotActions),tooManySteps:!0}}function Fx(i,e){const t=Math.floor(e/Lx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Ch(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` -`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Jx(i,e,t,n){return e.map(a=>{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=Nx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Ch((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(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||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Rx(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 _o(i){const e=[I.forSchleife,I.whileSchleife,I.doUntilSchleife,I.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Gx(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();ms(o,Hx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${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 wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Hx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Vx(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 wi(`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 wi(`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,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}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 Qx(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(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function qx(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 Ux(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=qx(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:ms(o,l)}}function $x(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Yx=`--- +`:""),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 Oe=(i,e=!1)=>``,ne={newFile:Oe(''),open:Oe(''),save:Oe(''),undo:Oe(''),redo:Oe(''),cut:Oe(''),copy:Oe(''),paste:Oe(''),trash:Oe(''),share:Oe(''),book:Oe(''),code:Oe(''),play:Oe('',!0),step:Oe(''),indent:Oe(''),stop:Oe('',!0),folder:Oe(''),newFolder:Oe(''),diagram:Oe(''),fileText:Oe('')},yx="visustruct.learn.progress",pr={"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 wx(i){var n;const e={...i.lessons};for(const[a,s]of Object.entries(pr))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&&pr[i.view.lesson]?{...i.view,lesson:pr[i.view.lesson]}:i.view;return{...i,lessons:e,view:t}}function zx(){try{localStorage.removeItem(yx)}catch{}}const jh=()=>({lessons:{},exercises:{}});zx();let Ue=jh();const So=new Set;function ta(){for(const i of So)i()}const yu="visustruct-lernstand";function Ch(i,e){return i||e||void 0}function Ix(i,e){if(!i)return e;const t={...e.checks};for(const[n,a]of Object.entries(i.checks??{}))t[n]=a||!!t[n];return{step:Math.max(i.step??0,e.step??0),done:Ch(i.done,e.done),checks:Object.keys(t).length?t:void 0,quiz:i.quiz||e.quiz?{...e.quiz,...i.quiz}:void 0}}function kx(i,e){const t={...i.lessons};for(const[a,s]of Object.entries(e.lessons))t[a]=Ix(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:Ch(r.done,s.done),xml:r.xml??s.xml}:s}return{lessons:t,exercises:n}}const ge={lesson(i){return Ue.lessons[i]??{step:0}},updateLesson(i,e){Ue.lessons[i]={...ge.lesson(i),...e},ta()},exercise(i){return Ue.exercises[i]??{}},updateExercise(i,e){Ue.exercises[i]={...ge.exercise(i),...e},ta()},resetExercise(i){delete Ue.exercises[i],ta()},view(){return Ue.view},hasContent(){return Object.values(Ue.lessons).some(i=>i.step>0||i.done||i.checks||i.quiz)||Object.keys(Ue.exercises).length>0},setView(i){Ue.view=i,ta()},onChange(i){return So.add(i),()=>So.delete(i)},toFile(){return JSON.stringify({format:yu,version:1,saved:new Date().toISOString(),lessons:Ue.lessons,exercises:Ue.exercises,view:Ue.view},null,2)},loadFile(i,e=!1){let t;try{t=JSON.parse(i)}catch{return!1}if((t==null?void 0:t.format)!==yu)return!1;const n=wx({lessons:t.lessons??{},exercises:t.exercises??{},view:t.view});return Ue=e?{...kx(Ue,n),view:n.view??Ue.view}:n,!0},clear(){Ue=jh()}};function wu(i=new Date){const e=t=>String(t).padStart(2,"0");return`${i.getFullYear()}-${e(i.getMonth()+1)}-${e(i.getDate())}`}const zu=i=>/^\d{4}-\d{2}-\d{2}$/.test(i);function Sx(i,e){return i.kind!==e.kind?i.kind==="directory"?-1:1:zu(i.name)&&zu(e.name)?e.name.localeCompare(i.name):i.name.localeCompare(e.name,void 0,{numeric:!0,sensitivity:"base"})}function _x(i,e){return i.replace(/\.(visustruct|strk|java)$/i,"").replace(/[\\/:*?"<>|\u0000-\u001f]/g,"-").replace(/\s+/g," ").trim().replace(/^\.+/,"")||e}function Tx(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 Ox(i){const e=i.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"").trim();return e&&e!=="."&&e!==".."?e:void 0}const Vn=10;function Ax(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,x)=>"^>v<".includes(g)?h===m>>1&&x===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))*Vn,r=e.length*Vn,o=(m,c)=>({x:-s/2+(m+.5)*Vn,y:r/2-(c+.5)*Vn}),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 Iu?l.colors.push({at:g,color:Iu[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 Iu={r:"red",g:"green",b:"blue",y:"yellow"},N1=(i,e)=>Math.abs(i.x-e.x)<=Vn/2&&Math.abs(i.y-e.y)<=Vn/2,ku=10,Su=9,Px=300,u1=8,jx=[-3.6,-1.2,1.2,3.6],Cx=2.5,Bx=20,Dx=12,Xl=100,yi={width:200,depth:200,start:{x:0,y:0,heading:0},walls:[],lines:[]},_u=i=>i*Math.PI/180,m1=i=>({x:Math.sin(_u(i)),y:Math.cos(_u(i))}),na=()=>Array.from({length:eh},()=>{}),Tu=([i,e,t])=>i>0||e>0||t>0?[i,e,t]:void 0;class us{constructor(e=yi){y(this,"pose");y(this,"trail");y(this,"bumps",0);y(this,"leds",na());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=na(),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=Vn/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=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(this.setup.goals??[]).some(n=>N1(this.pose,n)||N1(t,n))||(this.setup.targets??[]).some(n=>N1(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=[Ou(e.args[0]),Ou(e.args[1])];return;case"pause":return this.tick(e.args[0]);case"resetTimer":this.timerStart=this.time;return;case"setLed":this.leds=na().map(()=>Tu(e.args));return;case"ledOff":this.leds=na();return;case"ledColor":this.leds[e.args[0]]=Tu(Xa[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*Bx);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*u1+t.x*a,y:this.pose.y+e.y*u1+t.y*a};([...this.setup.marks??[],...this.setup.goals??[]].some(l=>N1(r,l))||this.setup.lines.some(l=>Mx(r,l)<=Cx/2))&&(n|=1<<3-s)}),n}colorUnder(){var n;const e=m1(this.pose.heading),t={x:this.pose.x+e.x*u1,y:this.pose.y+e.y*u1};return(n=(this.setup.colors??[]).find(a=>N1(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=Zx(e,t,a.from,a.to);s!==void 0&&sMath.max(-100,Math.min(100,i));function Au(i){const e=(i%360+360)%360;return Math.abs(e-360)<1e-9?0:e}function Zx(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 Mx(i,e){let t=1/0;for(let n=0;n+10&&o.tick(Xl),s.robotSensors={...o.sensors(),...Jx(a,u)};const c=()=>({outputs:[...m.outputLines],files:new Map(m.files),drive:m.robotActions.length?es(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:nh(m.robotActions.filter(d=>!Nx.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:es(s.state.robotActions),tooManySteps:!0}}function Jx(i,e){const t=Math.floor(e/Wx);return Object.fromEntries(Object.entries(i??{}).map(([n,a])=>[n,a[Math.min(t,a.length-1)]]))}function Bh(i){return i===void 0||i===""?[]:i.replace(/\n$/,"").split(` +`)}function ia(i,e){return i.length!==e.length?!1:i.every((t,n)=>Pu(t)===Pu(e[n]))}function Pu(i){const e=i.trim().replace(/\s+/g," ");return/^-?\d+\.0+$/.test(e)?e.replace(/\.0+$/,""):e}function Rx(i,e,t,n){return e.map(a=>{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=Fx(i,a.inputs,t,s,a.sensors),o=(a.files??[]).every(f=>{var x;return ia(Bh((x=r.files)==null?void 0:x.get(f.name)),f.lines)}),l=!a.drive||ia(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||ia(r.actions??[],a.actions)),c=!r.error&&!r.missingInput&&!r.tooManySteps&&ia(r.outputs,a.expected)&&o&&l&&u&&m;return{test:a,result:r,passed:c}})}function Gx(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 _o(i){const e=[k.forSchleife,k.whileSchleife,k.doUntilSchleife,k.endlosschleife];let t=0;for(const n of i){const a=Math.max(_o(n.loopBody??[]),...(n.cases??[]).map(s=>_o(s.elements)));t=Math.max(t,a+(e.includes(n.type)?1:0))}return t}class wi extends Error{}function Hx(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();ms(o,Vx(t)),n.push(o);continue}const r=/^([A-Za-z_]\w*)\s*:\s*(?:(-?\d+)\s*\.\.\s*(-?\d+)|(boolean))$/.exec(s);if(!r)throw new wi(`${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 wi(`${e}: Das Spiel braucht mindestens eine Zeile „? bedingung“.`);return{vars:t,conditions:n}}function Vx(i){return Object.fromEntries(i.map(e=>[e.name,e.kind==="boolean"?!0:e.min]))}function Qx(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 wi(`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 wi(`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,x]=[d,g];return h.value==="<"?f"?f>x:f>=x}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 qx(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(ms(r,{})));a!==t[t.length-1]&&t.push(a);const s=String(ms(i,e));return s!==t[t.length-1]&&t.push(s),t}function Ux(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 $x(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=Ux(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:ms(o,l)}}function Yx(i){return Object.entries(i.values).filter(([e])=>new RegExp(`\\b${e}\\b`).test(i.condition))}const Xx=`--- titel: Was ist ein Struktogramm? bereich: Erste Schritte kurz: Algorithmen als Folge klarer Schritte darstellen und lesen. @@ -382,7 +382,7 @@ Solange der Teller nicht leer ist, wird ein Bissen gegessen. Danach wird der Tel ## Alle drei zusammen -Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Was in einer Verzweigung oder Schleife steht, bekommt deren Farbe. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. +Richtig nützlich werden die Bausteine, wenn man sie kombiniert. Das Diagramm enthält alle drei: eine Sequenz von oben nach unten, eine [Verzweigung]{.blau} und eine [Schleife]{.rosa}. Gelb sind die einfachen [Anweisungen]{.gelb}. Auch die Anweisungen in einer Verzweigung oder Schleife sind gelb. Genau genommen ist das ganze Diagramm eine Sequenz, denn auch Verzweigung und Schleife stehen in der Reihe von oben nach unten. ::: diagramm l1-grundbausteine.visustruct Die Verzweigung erkennst du am Dreieck, die Schleife an der Klammer links. Alles zusammen steht in einer Sequenz. @@ -563,7 +563,7 @@ richtig: Verzweigung - [ ] Ein Pfeil > Alles zwischen SOLANGE und ENDE SOLANGE ist eingerückt und wird wiederholt. ::: -`,Xx=`--- +`,Kx=`--- titel: Der Editor bereich: Erste Schritte kurz: Elemente einfügen, Text eingeben, verschieben und löschen. @@ -736,7 +736,7 @@ frage: Du klickst im Bereich Elemente auf ein Element, ohne zu ziehen. Wo landet - [ ] input: "Guten Tag" > Ohne Anführungszeichen wird Guten Tag als Name einer Variablen verstanden. ::: -`,Kx=`--- +`,eb=`--- titel: Speichern, Öffnen, Exportieren bereich: Erste Schritte kurz: Dateien sichern, deinen Workspace nutzen, mehrere Diagramme öffnen und als Bild oder PDF weitergeben. @@ -870,7 +870,7 @@ richtig: PNG - [ ] Direkt im Workspace ohne Unterordner > VisuStruct legt für jeden Tag automatisch einen Datumsordner an. So bleiben die Programme nach Stunden sortiert. ::: -`,eb=`--- +`,tb=`--- titel: Variablen und Datentypen bereich: Grundlagen kurz: Werte speichern, die Datentypen int, double, String und boolean kennen und rechnen. @@ -1189,7 +1189,7 @@ richtig: String - [ ] Double preis = 2.5 > Kommazahlen schreibst du mit Punkt, und am Ende steht ein Semikolon. ::: -`,tb=`--- +`,nb=`--- titel: Sequenz bereich: Grundlagen kurz: Schritte nacheinander ausführen, auf die Reihenfolge achten und Werte tauschen. @@ -1406,7 +1406,7 @@ frage: Ludwig kocht Tee. - [ ] Mit einem Doppelpunkt : > Fehlt das Semikolon, zeigt VisuStruct unter dem Code einen Hinweis. ::: -`,nb=`--- +`,ib=`--- titel: Eingabe und Ausgabe bereich: Grundlagen kurz: Werte abfragen, Ergebnisse anzeigen und das EVA-Prinzip anwenden. @@ -1718,7 +1718,7 @@ frage: Zu welchem Teil von EVA gehört dieser Kasten? - [ ] Einen ganzen Satz > Für Kommazahlen gibt es \`scanner.nextDouble()\`, für ein Wort \`scanner.next()\`. ::: -`,ib=`--- +`,ab=`--- titel: Simulation und Schreibtischtest bereich: Grundlagen kurz: Ein Struktogramm Schritt für Schritt ausführen, von Hand nachrechnen und Fehler finden. @@ -1995,7 +1995,7 @@ besser: preis = preis + preis * 0.1; - [ ] Die Zeile wird übersprungen. > Das ist ein Haltepunkt. Mit ▶︎ oder dem Einzelschritt geht es weiter. ::: -`,ab=`--- +`,sb=`--- titel: Verzweigung bereich: Grundlagen kurz: Mit einer Bedingung entscheiden, welcher von zwei Wegen ausgeführt wird. @@ -2312,7 +2312,7 @@ frage: Was wird ausgegeben? - [ ] Hinter einem Semikolon > \`if (alter >= 18) { … }\`: Die runden Klammern gehören zur Bedingung, die geschweiften zum Zweig. ::: -`,sb=`--- +`,rb=`--- titel: Bedingungen verknüpfen bereich: Grundlagen kurz: Mehrere Bedingungen mit und, oder und nicht verbinden und Wertebereiche prüfen. @@ -2604,7 +2604,7 @@ lösung: l09-java-fehler-loesung.visustruct - [ ] if (alter >= 12 || alter < 18) > Jeder Vergleich steht für sich, verbunden mit \`&&\`. ::: -`,rb=`--- +`,ob=`--- titel: Fallauswahl bereich: Grundlagen kurz: Je nach Wert einer Variablen einen von vielen Fällen ausführen. @@ -2901,7 +2901,7 @@ frage: Ein Würfel zeigt 1 bis 6, und für jede Zahl soll ein anderes Wort ersch - [x] default - [ ] case 0 ::: -`,ob=`--- +`,lb=`--- titel: While-Schleife bereich: Grundlagen kurz: Schritte wiederholen, solange eine Bedingung wahr ist. @@ -3227,7 +3227,7 @@ frage: Wie oft läuft der Rumpf? - [ ] while (zahl > 0); > Die Bedingung steht in runden Klammern, danach öffnet \`{\` den Rumpf. ::: -`,lb=`--- +`,ub=`--- titel: Do-while-Schleife bereich: Grundlagen kurz: Erst ausführen, dann prüfen: Schleifen mit mindestens einem Durchlauf. @@ -3474,7 +3474,7 @@ frage: Wofür nimmt man typischerweise eine Do-while-Schleife? - [ ] } until (bedingung); > Nach der Bedingung kommt ein Semikolon. ::: -`,ub=`--- +`,mb=`--- titel: For-Schleife bereich: Grundlagen kurz: Mit Start, Bedingung und Schritt eine feste Anzahl von Durchläufen zählen. @@ -3770,7 +3770,7 @@ besser: for (int i = 2; i <= 10; i = i + 2) { - [ ] i wird ausgegeben. > \`i++\` ist die Kurzform von \`i = i + 1\`. ::: -`,mb=`--- +`,cb=`--- titel: Verschachteln bereich: Grundlagen kurz: Verzweigungen in Schleifen und Schleifen in Schleifen kombinieren. @@ -4036,7 +4036,7 @@ frage: Was passiert? - [x] An den geschweiften Klammern und der Einrückung - [ ] An den Semikolons ::: -`,cb=`--- +`,db=`--- titel: Arrays bereich: Grundlagen kurz: Viele Werte unter einem Namen speichern, mit dem Index darauf zugreifen und sie mit einer Schleife durchlaufen. @@ -4346,7 +4346,7 @@ besser: for (int i = zahlen.length - 1; i >= 0; i--) { - [ ] int zahlen = [1, 2, 3]; - [ ] array zahlen = (1, 2, 3); ::: -`,db=`--- +`,hb=`--- titel: Zweidimensionale Arrays bereich: Grundlagen kurz: Werte in Zeilen und Spalten speichern, wie die Sitze in einem Kinosaal, und mit zwei verschachtelten Schleifen durchlaufen. @@ -4631,7 +4631,7 @@ frage: Zwei Schleifen gehen den Saal \`new boolean[3][5]\` durch. Welches Fach k - [ ] 5, die Zahl der Plätze - [ ] 15, alle Plätze zusammen ::: -`,hb=`--- +`,gb=`--- titel: Zeichenketten bereich: Grundlagen kurz: Mit Texten arbeiten, also einzelne Zeichen lesen, Teile herausschneiden, suchen, vergleichen und zerlegen. @@ -5082,7 +5082,7 @@ ende: Zora ist frei, und der Fuchs ist schnell davongelaufen. Das geheime Wort w - [ ] eine Fehlermeldung > parseInt macht aus dem Text eine Zahl. Danach rechnet Java ganz normal. ::: -`,gb=`--- +`,pb=`--- titel: Aufruf und Aussprung bereich: Grundlagen kurz: Große Aufgaben in Unterprogramme zerlegen und Schleifen vorzeitig verlassen. @@ -5539,7 +5539,7 @@ frage: Was wird ausgegeben? - [ ] return > void heißt „leer“: Die Methode macht etwas, gibt aber keinen Wert zurück. ::: -`,pb=`--- +`,fb=`--- 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. @@ -5855,7 +5855,7 @@ frage: Bubblesort tauscht \`karten[i]\` und \`karten[i + 1]\`. Was braucht es da - [ ] Eine While-Schleife kann keine Arrays durchlaufen. > Die Karte kann mehrmals vorkommen. Darum gehst du alle Karten bis zum Ende durch. ::: -`,fb=`--- +`,xb=`--- titel: Struktogramm und Code bereich: Vom Struktogramm zum Code kurz: Alle Elemente in Java auf einen Blick, Code erzeugen, im Bereich Programmieren Java schreiben, ausführen und Fehler suchen. @@ -6205,7 +6205,7 @@ frage: Im Debugger ist eine Zeile gelb. Was bedeutet das? - [ ] Die Zeile enthält einen Fehler. > Das ist ein Haltepunkt. Danach geht es mit ▶︎ oder dem Einzelschritt weiter. ::: -`,xb=`--- +`,bb=`--- 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. @@ -6428,7 +6428,7 @@ richtig: JavaScript - [ ] Es wird Summe: ausgegeben. > Mit str(summe) wird aus der Zahl ein Text. ::: -`,bb=`--- +`,vb=`--- 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. @@ -6695,7 +6695,7 @@ Die Exception heißt \`ArithmeticException\`. Schreib in den \`try\`-Block nur d = ArithmeticException -> Teilen durch 0 = NumberFormatException -> Text ist keine Zahl ::: -`,vb=`--- +`,yb=`--- titel: Text einlesen und speichern bereich: Dateien kurz: Mit Scanner eine Textdatei Zeile für Zeile lesen und mit PrintWriter eine Datei speichern. @@ -6933,7 +6933,7 @@ runde: = println(text) -> schreibt eine Zeile = close() -> schließt die Datei ::: -`,yb=`--- +`,wb=`--- 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. @@ -7173,7 +7173,7 @@ runde: = Files.readString -> kleine Dateien auf einmal = Scanner -> Zahlen und Wörter lesen ::: -`,wb=`--- +`,zb=`--- titel: Tabellen als CSV bereich: Dateien kurz: Eine Tabelle als CSV-Datei lesen, jede Zeile mit split zerlegen und mit den Zahlen rechnen. @@ -7380,7 +7380,7 @@ besser: Ludwig;2;3;1 = Datensatz -> eine Zeile mit Werten = Trennzeichen -> trennt die Spalten, meist ; ::: -`,zb=`--- +`,Ib=`--- titel: Daten als JSON bereich: Dateien kurz: JSON-Dateien verstehen, Werte mit indexOf und substring herausholen und selbst JSON schreiben. @@ -7588,7 +7588,7 @@ frage: Welcher Schlüssel hat einen Wahrheitswert? = [ ] -> eine Liste = : -> trennt Schlüssel und Wert ::: -`,Ib=`--- +`,kb=`--- 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. @@ -7748,7 +7748,7 @@ richtig: txt = die Notenliste der Klasse -> CSV = ein Spielstand mit Listen -> JSON ::: -`,kb=`--- +`,Sb=`--- titel: Dein erstes Fenster bereich: Fenster mit Swing kurz: Mit Java und Swing ein eigenes Fenster öffnen, Zeile für Zeile erklärt. @@ -7955,7 +7955,7 @@ Du willst nicht so viel tippen? Mit „Echtes Java“ darfst du im Bereich Progr - [ ] Sie stehen in geschweiften Klammern. - [ ] Sie enden mit Window. ::: -`,Sb=`--- +`,_b=`--- titel: Ein Knopf im Fenster bereich: Fenster mit Swing kurz: Einen Knopf ins Fenster legen und mit einem Layout ordentlich anordnen. @@ -8156,7 +8156,7 @@ Jeder Knopf braucht eine eigene Variable, zum Beispiel \`knopf\` und \`knopf2\`, - [ ] Auf dem Knopf steht „Ich wurde geklickt“. > Was beim Klick passieren soll, lernst du in der nächsten Lektion. ::: -`,_b=`--- +`,Tb=`--- titel: Der Knopf reagiert bereich: Fenster mit Swing kurz: Mit einem ActionListener festlegen, was beim Klick passiert. @@ -8483,7 +8483,7 @@ Jeder Knopf bekommt seinen eigenen Zuhörer mit eigenem \`addActionListener\`. D = setText -> Beschriftung ändern = setVisible(true) -> Fenster zeigen ::: -`,Tb=`--- +`,Ob=`--- 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. @@ -8748,7 +8748,7 @@ Der Knopf „Halbieren“ kommt als vierte Zeile ins GridLayout und bekommt sein = JButton -> Knopf = GridLayout -> Anordnung im Gitter ::: -`,Ob=`--- +`,Ab=`--- titel: Klickzähler mit Reset bereich: Fenster mit Swing kurz: Zwei Knöpfe ändern dieselbe Zahl: eine Variable für die ganze Klasse anlegen. @@ -8966,7 +8966,7 @@ Für „nie unter 0“ brauchst du im Zuhörer von −1 ein \`if\`: Nur wenn \`a - [ ] Es setzt das Fenster in die Mitte des Bildschirms. - [ ] Es macht die Schrift größer. ::: -`,Ab=`--- +`,Pb=`--- titel: Eine Ampel mit Farben bereich: Fenster mit Swing kurz: Hintergrundfarben setzen und mit einer Zustandsvariable eine Ampel weiterschalten. @@ -9227,7 +9227,7 @@ Mit vier Phasen kommt nach 3 wieder 0. Pass also die Zahl in \`if (phase > 2)\` - [ ] 3 > Nach phase++ ist sie 3, das ist größer als 2, also wird sie 0. ::: -`,Pb=`--- +`,jb=`--- titel: Notenrechner im Fenster bereich: Fenster mit Swing kurz: Punkte eingeben, mit else if die Note bestimmen und falsche Eingaben abfangen. @@ -9489,7 +9489,7 @@ Teste immer die Grenzen: 92 muss eine 1 sein, 91 eine 2. An den Grenzen stecken - [ ] punkte >= 0 || punkte <= 100 > Eine Zahl kann nicht gleichzeitig kleiner als 0 und größer als 100 sein, deshalb braucht es oder. ::: -`,jb=`--- +`,Cb=`--- titel: Ein Taschenrechner bereich: Fenster mit Swing kurz: Zwei Spalten mit GridLayout, vier Rechenknöpfe und die Division durch 0 abfangen. @@ -9746,7 +9746,7 @@ Für „abc“ brauchst du in jedem Zuhörer ein try/catch mit \`NumberFormatExc - [ ] Spalte für Spalte, erst ganz links von oben nach unten - [ ] Zufällig ::: -`,Cb=`--- +`,Bb=`--- titel: Zahlenraten bereich: Fenster mit Swing kurz: Ein Spiel mit Zufallszahl, Versuchszähler und einem Knopf, der sich am Ende abschaltet. @@ -9888,7 +9888,7 @@ Für „zählt nicht als Versuch“ muss \`versuche++\` **hinter** \`Integer.par - [x] 7 > Jeder Tipp halbiert den Bereich, und 2 hoch 7 = 128 ist größer als 100. ::: -`,Bb=`--- +`,Db=`--- 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. @@ -10178,7 +10178,7 @@ Auch beim Taschenrechner aus Lektion 35 reicht ein Zuhörer für +, -, \\* und / = ActionEvent -> das Ereignis e mit den Infos zum Klick = JPanel -> eine Fläche mit eigenem Layout ::: -`,Db=`--- +`,Zb=`--- 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. @@ -10394,7 +10394,7 @@ Probiere aus, ob alle drei Knöpfe wie erwartet zählen. Lass dann bei der Klass = new ActionListener() { … } -> anonyme Klasse = der Pfeil hinter e -> Lambda ::: -`,Zb=`--- +`,Mb=`--- 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. @@ -10659,7 +10659,7 @@ Dann mach es besser: = JPanel -> die Fläche eines Reiters = JTextArea -> ein Textbereich mit mehreren Zeilen ::: -`,Mb=`--- +`,Lb=`--- titel: Model View Controller bereich: Fenster mit Swing kurz: Den Klickzähler in Model, View und Controller zerlegen und verstehen, wer mit wem redet. @@ -11056,7 +11056,7 @@ Dann mach es besser: = ZahlAnzeige mit aktualisieren(int wert) -> View = der Zuhörer am Knopf -> Controller ::: -`,Lb=`Fachbegriffe für den Lernbereich. Kommt ein Begriff in einem Schritt vor, wird er dort einmal markiert und zeigt beim +`,Wb=`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. @@ -11246,7 +11246,7 @@ Ein fertiger Baustein von Java, der Eingaben über die Tastatur liest, z. B. mit ### import Eine Zeile ganz oben im Java-Code, die einen fertigen Baustein aus einem Paket holt, z. B. \`import java.util.Scanner;\`. Ohne sie kennt Java den Namen nicht. -`,Wb=`## Grundbausteine +`,Eb=`## Grundbausteine ### Anweisung @@ -11372,7 +11372,7 @@ boolean[][] sitze = new boolean[3][5] sitze[1][4] = true output: sitze.length + " Reihen, " + sitze[0].length + " Plätze" \`\`\` -`,Eb=`--- +`,Nb=`--- titel: What is a structure chart? bereich: First steps kurz: Show and read algorithms as a series of clear steps. @@ -11464,7 +11464,7 @@ As long as the plate is not empty, you take a bite. After that, the plate is cle ## All three together -The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. Whatever stands inside a branch or a loop takes its colour. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. +The building blocks become really useful when you combine them. This diagram contains all three: a sequence from top to bottom, a [branch]{.blau} and a [loop]{.rosa}. The yellow boxes are simple [statements]{.gelb}. The statements inside a branch or a loop are yellow too. Strictly speaking, the whole diagram is a sequence, because the branch and the loop also stand in the row from top to bottom. ::: diagramm l1-grundbausteine.visustruct You recognise the branch by its triangle and the loop by the bracket on the left. Everything together sits in a sequence. @@ -11645,7 +11645,7 @@ richtig: branch - [ ] An arrow > Everything between WHILE and END WHILE is indented and is repeated. ::: -`,Nb=`--- +`,Fb=`--- titel: The editor bereich: First steps kurz: Insert elements, type text, move and delete. @@ -11818,7 +11818,7 @@ frage: You click an element in the Elements area without dragging. Where does it - [ ] input: "Good morning" > Without quotation marks, Good morning is understood as the name of a variable. ::: -`,Fb=`--- +`,Jb=`--- 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. @@ -11952,7 +11952,7 @@ Open one of your exercises from lesson 2 and try the following: - [ ] Directly in the workspace without a subfolder > VisuStruct automatically creates a date folder for each day. That keeps the programs sorted by lesson. ::: -`,Jb=`--- +`,Rb=`--- titel: Variables and data types bereich: Basics kurz: Store values, get to know the data types int, double, String and boolean, and calculate. @@ -12271,7 +12271,7 @@ richtig: String - [ ] Double price = 2.5 > Decimal numbers use a point, and the line ends with a semicolon. ::: -`,Rb=`--- +`,Gb=`--- titel: Sequence bereich: Basics kurz: Run steps one after another, watch the order and swap values. @@ -12488,7 +12488,7 @@ frage: Ludwig makes tea. - [ ] With a colon : > If the semicolon is missing, VisuStruct shows a hint below the code. ::: -`,Gb=`--- +`,Hb=`--- titel: Input and output bereich: Basics kurz: Ask for values, show results and use the IPO model. @@ -12800,7 +12800,7 @@ frage: Which part of IPO does this box belong to? - [ ] A whole sentence > For decimal numbers there is \`scanner.nextDouble()\`, for a word \`scanner.next()\`. ::: -`,Hb=`--- +`,Vb=`--- titel: Simulation and desk check bereich: Basics kurz: Run a structure chart step by step, work it out by hand and find mistakes. @@ -13077,7 +13077,7 @@ besser: price = price + price * 0.1; - [ ] The line is skipped. > That is a breakpoint. ▶︎ or Step carries on. ::: -`,Vb=`--- +`,Qb=`--- titel: Branch bereich: Basics kurz: Use a condition to decide which of two paths runs. @@ -13394,7 +13394,7 @@ frage: What is output? - [ ] After a semicolon > \`if (age >= 18) { … }\`: the round brackets belong to the condition, the curly ones to the branch. ::: -`,Qb=`--- +`,qb=`--- titel: Combining conditions bereich: Basics kurz: Join several conditions with and, or and not, and check ranges of values. @@ -13686,7 +13686,7 @@ lösung: l09-java-fehler-loesung.visustruct - [ ] if (age >= 12 || age < 18) > Each comparison stands on its own, joined with \`&&\`. ::: -`,qb=`--- +`,Ub=`--- titel: Switch bereich: Basics kurz: Run one of many cases, depending on the value of a variable. @@ -13983,7 +13983,7 @@ frage: A dice shows 1 to 6, and for every number a different word should appear. - [x] default - [ ] case 0 ::: -`,Ub=`--- +`,$b=`--- titel: While loop bereich: Basics kurz: Repeat steps as long as a condition is true. @@ -14309,7 +14309,7 @@ frage: How often does the body run? - [ ] while (number > 0); > The condition is in round brackets, then \`{\` opens the body. ::: -`,$b=`--- +`,Yb=`--- titel: Do-while loop bereich: Basics kurz: Run first, check afterwards: loops with at least one pass. @@ -14556,7 +14556,7 @@ frage: What is a do-while loop typically used for? - [ ] } until (condition); > A semicolon follows the condition. ::: -`,Yb=`--- +`,Xb=`--- titel: For loop bereich: Basics kurz: Count a fixed number of passes with Init, Condition and Step. @@ -14852,7 +14852,7 @@ besser: for (int i = 2; i <= 10; i = i + 2) { - [ ] i is output. > \`i++\` is short for \`i = i + 1\`. ::: -`,Xb=`--- +`,Kb=`--- titel: Nesting bereich: Basics kurz: Combine branches inside loops and loops inside loops. @@ -15118,7 +15118,7 @@ frage: What happens? - [x] By the curly brackets and the indentation - [ ] By the semicolons ::: -`,Kb=`--- +`,e4=`--- titel: Arrays bereich: Basics kurz: Store many values under one name, reach them with the index and go through them with a loop. @@ -15428,7 +15428,7 @@ besser: for (int i = numbers.length - 1; i >= 0; i--) { - [ ] int numbers = [1, 2, 3]; - [ ] array numbers = (1, 2, 3); ::: -`,e4=`--- +`,t4=`--- 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. @@ -15713,7 +15713,7 @@ frage: Two loops go through the cinema \`new boolean[3][5]\`. Which slot comes r - [ ] 5, the number of seats - [ ] 15, all seats together ::: -`,t4=`--- +`,n4=`--- titel: Strings bereich: Basics kurz: Work with text: read single characters, cut out parts, search, compare and split. @@ -16162,7 +16162,7 @@ ende: Zora is free, and the fox has run off. The secret word was \`BREAK\`: with - [ ] an error message > parseInt turns the text into a number. After that Java calculates as usual. ::: -`,n4=`--- +`,i4=`--- titel: Call and break bereich: Basics kurz: Split big tasks into subprograms and leave loops early. @@ -16618,7 +16618,7 @@ frage: What is output? - [ ] return > void means “empty”: the method does something but returns no value. ::: -`,i4=`--- +`,a4=`--- 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. @@ -16934,7 +16934,7 @@ frage: Bubble sort swaps \`cards[i]\` and \`cards[i + 1]\`. What does it need fo - [ ] A while loop cannot go through arrays. > The card can appear several times. That is why you go through all cards to the end. ::: -`,a4=`--- +`,s4=`--- 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 Programming area, run it and find mistakes. @@ -17284,7 +17284,7 @@ frage: In the debugger, a line is yellow. What does that mean? - [ ] The line contains a mistake. > That is a breakpoint. Continue with ▶︎ or Step. ::: -`,s4=`--- +`,r4=`--- 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. @@ -17507,7 +17507,7 @@ richtig: JavaScript - [ ] Sum: is output. > str(sum) turns the number into text. ::: -`,r4=`--- +`,o4=`--- 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. @@ -17774,7 +17774,7 @@ The exception is called \`ArithmeticException\`. Only put the line that can cras = ArithmeticException -> dividing by 0 = NumberFormatException -> text is not a number ::: -`,o4=`--- +`,l4=`--- titel: Reading and saving text bereich: Files kurz: Read a text file line by line with Scanner and save a file with PrintWriter. @@ -18012,7 +18012,7 @@ runde: = println(text) -> writes a line = close() -> closes the file ::: -`,l4=`--- +`,u4=`--- 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. @@ -18252,7 +18252,7 @@ runde: = Files.readString -> small files all at once = Scanner -> reading numbers and words ::: -`,u4=`--- +`,m4=`--- titel: Tables as CSV bereich: Files kurz: Read a table as a CSV file, split each line with split and calculate with the numbers. @@ -18459,7 +18459,7 @@ besser: Ludwig;2;3;1 = record -> a line with values = separator -> separates the columns, often ; ::: -`,m4=`--- +`,c4=`--- titel: Data as JSON bereich: Files kurz: Understand JSON files, get values out with indexOf and substring, and write JSON yourself. @@ -18667,7 +18667,7 @@ frage: Which key has a truth value? = [ ] -> a list = : -> separates key and value ::: -`,c4=`--- +`,d4=`--- 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. @@ -18827,7 +18827,7 @@ richtig: txt = the class grade list -> CSV = a game save with lists -> JSON ::: -`,d4=`--- +`,h4=`--- titel: Your first window bereich: Windows with Swing kurz: Open your own window with Java and Swing, explained line by line. @@ -19034,7 +19034,7 @@ Don't feel like typing so much? With “Real Java” you may type just the four - [ ] They are in curly brackets. - [ ] They end in Window. ::: -`,h4=`--- +`,g4=`--- titel: A button in the window bereich: Windows with Swing kurz: Put a button into the window and arrange it neatly with a layout. @@ -19235,7 +19235,7 @@ Every button needs its own variable, for example \`button\` and \`button2\`, and - [ ] The button says “I was clicked”. > What should happen on a click is what you learn in the next lesson. ::: -`,g4=`--- +`,p4=`--- titel: The button reacts bereich: Windows with Swing kurz: Use an ActionListener to decide what happens on a click. @@ -19562,7 +19562,7 @@ Every button gets its own listener with its own \`addActionListener\`. You chang = setText -> change the label = setVisible(true) -> show the window ::: -`,p4=`--- +`,f4=`--- 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. @@ -19827,7 +19827,7 @@ The “Halve” button goes into the GridLayout as the fourth row and gets its o = JButton -> button = GridLayout -> arrangement in a grid ::: -`,f4=`--- +`,x4=`--- titel: Click counter with reset bereich: Windows with Swing kurz: Two buttons change the same number: create a variable for the whole class. @@ -20045,7 +20045,7 @@ For “never below 0” the listener of −1 needs an \`if\`: only if \`count > - [ ] It puts the window in the middle of the screen. - [ ] It makes the font bigger. ::: -`,x4=`--- +`,b4=`--- titel: A traffic light with colours bereich: Windows with Swing kurz: Set background colours and switch a traffic light on with a state variable. @@ -20306,7 +20306,7 @@ With four phases, 0 comes after 3. So change the number in \`if (phase > 2)\`. - [ ] 3 > After phase++ it is 3, which is greater than 2, so it becomes 0. ::: -`,b4=`--- +`,v4=`--- titel: Grade calculator in a window bereich: Windows with Swing kurz: Enter points, work out the grade with else if and catch wrong input. @@ -20563,7 +20563,7 @@ Always test the limits: 90 must be an A, 89 a B. Most mistakes hide at the limit - [ ] points >= 0 || points <= 100 > A number can't be smaller than 0 and bigger than 100 at the same time, so you need or. ::: -`,v4=`--- +`,y4=`--- titel: A calculator bereich: Windows with Swing kurz: Two columns with GridLayout, four arithmetic buttons and catching division by 0. @@ -20820,7 +20820,7 @@ For “abc” every listener needs a try/catch with \`NumberFormatException\`. A - [ ] Column by column, starting top to bottom on the far left - [ ] Randomly ::: -`,y4=`--- +`,w4=`--- 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. @@ -20962,7 +20962,7 @@ For “doesn't count as a guess”, \`guesses++\` must come **after** \`Integer. - [x] 7 > Each guess halves the range, and 2 to the power of 7 = 128 is bigger than 100. ::: -`,w4=`--- +`,z4=`--- 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. @@ -21251,7 +21251,7 @@ For the calculator from lesson 35, one listener is enough for +, -, \\* and / to = ActionEvent -> the event e with the information about the click = JPanel -> an area with its own layout ::: -`,z4=`--- +`,I4=`--- 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. @@ -21467,7 +21467,7 @@ Check that all three buttons count as expected. Then remove the \`static\` from = new ActionListener() { … } -> anonymous class = the arrow after e -> lambda ::: -`,I4=`--- +`,k4=`--- 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. @@ -21732,7 +21732,7 @@ Then make it better: = JPanel -> the area of a tab = JTextArea -> a text area with several lines ::: -`,k4=`--- +`,S4=`--- titel: Model View Controller bereich: Windows with Swing kurz: Split the click counter into model, view and controller and understand who talks to whom. @@ -22129,7 +22129,7 @@ Then make it better: = NumberView with update(int value) -> view = the listener at the button -> controller ::: -`,S4=`Technical terms for the learning area. When a term appears in a step, it is marked there once and shows its explanation +`,_4=`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. @@ -22324,7 +22324,7 @@ A ready-made Java building block that reads input from the keyboard, for example ### import A line at the very top of Java code that fetches a ready-made building block from a package, for example \`import java.util.Scanner;\`. Without it, Java doesn't know the name. -`,_4=`## Basics +`,T4=`## Basics ### Statement @@ -22450,7 +22450,7 @@ boolean[][] seats = new boolean[3][5] seats[1][4] = true output: seats.length + " rows, " + seats[0].length + " seats" \`\`\` -`,T4=`--- +`,O4=`--- titel: O que é um estrutograma? bereich: Primeiros passos kurz: Mostrar e ler algoritmos como uma série de passos claros. @@ -22542,7 +22542,7 @@ Enquanto o prato não estiver vazio, dás uma garfada. Depois, o prato é levant ## Os três juntos -Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. O que está dentro de uma decisão ou de um ciclo fica com a cor dela. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. +Os blocos básicos tornam-se realmente úteis quando os combinas. Este diagrama contém os três: uma sequência de cima para baixo, uma [decisão]{.blau} e um [ciclo]{.rosa}. As caixas amarelas são [instruções]{.gelb} simples. As instruções dentro de uma decisão ou de um ciclo também são amarelas. Em rigor, o diagrama todo é uma sequência, porque a decisão e o ciclo também estão na fila de cima para baixo. ::: diagramm l1-grundbausteine.visustruct Reconheces a decisão pelo triângulo e o ciclo pelo parêntese à esquerda. Tudo junto forma uma sequência. @@ -22723,7 +22723,7 @@ richtig: decisão - [ ] Uma seta > Tudo o que está entre ENQUANTO e FIM ENQUANTO está recuado e é repetido. ::: -`,O4=`--- +`,A4=`--- titel: O editor bereich: Primeiros passos kurz: Inserir elementos, escrever texto, mover e eliminar. @@ -22896,7 +22896,7 @@ frage: Clicas num elemento da área Elementos, sem arrastar. Onde fica? - [ ] input: "Bom dia" > Sem aspas, Bom dia é entendido como o nome de uma variável. ::: -`,A4=`--- +`,P4=`--- 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. @@ -23030,7 +23030,7 @@ Abre um dos teus exercícios da lição 2 e experimenta o seguinte: - [ ] 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. ::: -`,P4=`--- +`,j4=`--- 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. @@ -23349,7 +23349,7 @@ richtig: String - [ ] Double preco = 2.5 > Os números decimais escrevem-se com ponto, e no fim há um ponto e vírgula. ::: -`,j4=`--- +`,C4=`--- titel: Sequência bereich: Fundamentos kurz: Executar passos um a seguir ao outro, prestar atenção à ordem e trocar valores. @@ -23566,7 +23566,7 @@ frage: O Ludwig faz chá. - [ ] Com dois pontos : > Se faltar o ponto e vírgula, o VisuStruct mostra uma indicação por baixo do código. ::: -`,C4=`--- +`,B4=`--- titel: Entrada e saída bereich: Fundamentos kurz: Pedir valores, mostrar resultados e usar o modelo EPS. @@ -23878,7 +23878,7 @@ frage: A que parte do modelo EPS pertence este bloco? - [ ] Uma frase inteira > Para números decimais há \`scanner.nextDouble()\`, para uma palavra \`scanner.next()\`. ::: -`,B4=`--- +`,D4=`--- titel: Simulação e teste de secretária bereich: Fundamentos kurz: Executar um estrutograma passo a passo, segui-lo à mão e encontrar erros. @@ -24155,7 +24155,7 @@ besser: preco = preco + preco * 0.1; - [ ] A linha é saltada. > É um ponto de paragem. Continuas com ▶︎ ou com Passo a passo. ::: -`,D4=`--- +`,Z4=`--- titel: Decisão bereich: Fundamentos kurz: Usar uma condição para decidir qual de dois ramos é executado. @@ -24472,7 +24472,7 @@ frage: O que aparece? - [ ] Depois de um ponto e vírgula > \`if (idade >= 18) { … }\`: os parênteses curvos pertencem à condição, as chavetas ao ramo. ::: -`,Z4=`--- +`,M4=`--- titel: Combinar condições bereich: Fundamentos kurz: Juntar várias condições com e, ou e não, e verificar intervalos de valores. @@ -24764,7 +24764,7 @@ lösung: l09-java-fehler-loesung.visustruct - [ ] if (idade >= 12 || idade < 18) > Cada comparação fica sozinha, ligada com \`&&\`. ::: -`,M4=`--- +`,L4=`--- titel: Seleção bereich: Fundamentos kurz: Executar um de vários casos, consoante o valor de uma variável. @@ -25061,7 +25061,7 @@ frage: Um dado mostra de 1 a 6, e para cada número deve aparecer uma palavra di - [x] default - [ ] case 0 ::: -`,L4=`--- +`,W4=`--- titel: Ciclo while bereich: Fundamentos kurz: Repetir passos enquanto uma condição for verdadeira. @@ -25387,7 +25387,7 @@ frage: Quantas vezes corre o corpo? - [ ] while (numero > 0); > A condição fica entre parênteses curvos, depois \`{\` abre o corpo. ::: -`,W4=`--- +`,E4=`--- titel: Ciclo do-while bereich: Fundamentos kurz: Primeiro executar, depois verificar: ciclos com pelo menos uma iteração. @@ -25634,7 +25634,7 @@ frage: Para que se usa tipicamente um ciclo do-while? - [ ] } until (condicao); > Depois da condição vem um ponto e vírgula. ::: -`,E4=`--- +`,N4=`--- titel: Ciclo for bereich: Fundamentos kurz: Contar um número fixo de iterações com Início, Condição e Passo. @@ -25930,7 +25930,7 @@ besser: for (int i = 2; i <= 10; i = i + 2) { - [ ] i é mostrado. > \`i++\` é a forma curta de \`i = i + 1\`. ::: -`,N4=`--- +`,F4=`--- titel: Encaixar bereich: Fundamentos kurz: Combinar decisões dentro de ciclos e ciclos dentro de ciclos. @@ -26196,7 +26196,7 @@ frage: O que acontece? - [x] Pelas chavetas e pela indentação - [ ] Pelos pontos e vírgulas ::: -`,F4=`--- +`,J4=`--- titel: Arrays bereich: Fundamentos kurz: Guardar muitos valores com um só nome, chegar a eles com o índice e percorrê-los com um ciclo. @@ -26506,7 +26506,7 @@ besser: for (int i = numeros.length - 1; i >= 0; i--) { - [ ] int numeros = [1, 2, 3]; - [ ] array numeros = (1, 2, 3); ::: -`,J4=`--- +`,R4=`--- 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. @@ -26791,7 +26791,7 @@ frage: Dois ciclos percorrem a sala \`new boolean[3][5]\`. Que posição vem log - [ ] 5, o número de lugares - [ ] 15, todos os lugares juntos ::: -`,R4=`--- +`,G4=`--- titel: Strings bereich: Fundamentos kurz: Trabalhar com texto: ler caracteres, recortar partes, pesquisar, comparar e dividir. @@ -27242,7 +27242,7 @@ ende: A Zora está livre, e a raposa fugiu a correr. A palavra secreta era \`BRE - [ ] uma mensagem de erro > parseInt transforma o texto num número. Depois o Java faz a conta normalmente. ::: -`,G4=`--- +`,H4=`--- titel: Chamada e interrupção bereich: Fundamentos kurz: Dividir tarefas grandes em subprogramas e sair mais cedo dos ciclos. @@ -27698,7 +27698,7 @@ frage: O que aparece? - [ ] return > void significa “vazio”: o método faz alguma coisa, mas não devolve nenhum valor. ::: -`,H4=`--- +`,V4=`--- 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. @@ -28014,7 +28014,7 @@ frage: O bubble sort troca \`cartas[i]\` e \`cartas[i + 1]\`. De que precisa par - [ ] Um ciclo while não consegue percorrer arrays. > A carta pode aparecer várias vezes. Por isso percorres todas as cartas até ao fim. ::: -`,V4=`--- +`,Q4=`--- 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 Programação, executá-lo e procurar erros. @@ -28364,7 +28364,7 @@ frage: No depurador, uma linha está amarela. O que quer dizer? - [ ] A linha tem um erro. > É um ponto de paragem. Continua-se com ▶︎ ou com Passo a passo. ::: -`,Q4=`--- +`,q4=`--- 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. @@ -28587,7 +28587,7 @@ richtig: JavaScript - [ ] É mostrado Soma:. > str(soma) transforma o número em texto. ::: -`,q4=`--- +`,U4=`--- 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. @@ -28854,7 +28854,7 @@ A exceção chama-se \`ArithmeticException\`. Põe no bloco \`try\` só a linha = ArithmeticException -> divisão por 0 = NumberFormatException -> o texto não é um número ::: -`,U4=`--- +`,$4=`--- titel: Ler e guardar texto bereich: Ficheiros kurz: Ler um ficheiro de texto linha a linha com Scanner e guardar um ficheiro com PrintWriter. @@ -29092,7 +29092,7 @@ runde: = println(texto) -> escreve uma linha = close() -> fecha o ficheiro ::: -`,$4=`--- +`,Y4=`--- 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. @@ -29332,7 +29332,7 @@ runde: = Files.readString -> ficheiros pequenos de uma vez = Scanner -> ler números e palavras ::: -`,Y4=`--- +`,X4=`--- 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. @@ -29539,7 +29539,7 @@ besser: Ludwig;2;3;1 = registo -> uma linha com valores = separador -> separa as colunas, muitas vezes ; ::: -`,X4=`--- +`,K4=`--- titel: Dados em JSON bereich: Ficheiros kurz: Perceber ficheiros JSON, tirar valores com indexOf e substring e escrever JSON tu mesmo. @@ -29747,7 +29747,7 @@ frage: Que chave tem um valor lógico? = [ ] -> uma lista = : -> separa a chave do valor ::: -`,K4=`--- +`,ev=`--- 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. @@ -29907,7 +29907,7 @@ richtig: txt = a pauta de notas da turma -> CSV = um jogo guardado com listas -> JSON ::: -`,ev=`--- +`,tv=`--- titel: A tua primeira janela bereich: Janelas com Swing kurz: Abrir uma janela tua com Java e Swing, explicado linha a linha. @@ -30114,7 +30114,7 @@ Não te apetece escrever tanto? Com o “Java verdadeiro” podes escrever na á - [ ] Estão entre chavetas. - [ ] Terminam em Window. ::: -`,tv=`--- +`,nv=`--- 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. @@ -30315,7 +30315,7 @@ Cada botão precisa da sua própria variável, por exemplo \`botao\` e \`botao2\ - [ ] No botão aparece “Fui clicado”. > O que deve acontecer com um clique aprendes na próxima lição. ::: -`,nv=`--- +`,iv=`--- titel: O botão reage bereich: Janelas com Swing kurz: Com um ActionListener decides o que acontece com um clique. @@ -30642,7 +30642,7 @@ Cada botão recebe o seu próprio ouvinte, com o seu próprio \`addActionListene = setText -> mudar o texto = setVisible(true) -> mostrar a janela ::: -`,iv=`--- +`,av=`--- 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. @@ -30907,7 +30907,7 @@ O botão “Dividir por 2” entra no GridLayout como quarta linha e recebe o se = JButton -> botão = GridLayout -> arrumação em grelha ::: -`,av=`--- +`,sv=`--- 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. @@ -31125,7 +31125,7 @@ Para “nunca abaixo de 0”, o ouvinte do −1 precisa de um \`if\`: só se \`c - [ ] Põe a janela no meio do ecrã. - [ ] Aumenta a letra. ::: -`,sv=`--- +`,rv=`--- 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. @@ -31386,7 +31386,7 @@ Com quatro fases, depois do 3 vem o 0. Ajusta por isso o número em \`if (fase > - [ ] 3 > Depois de fase++ é 3, que é maior do que 2, por isso passa a 0. ::: -`,rv=`--- +`,ov=`--- 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. @@ -31643,7 +31643,7 @@ Testa sempre os limites: 90 tem de dar 5, 89 tem de dar 4. É nos limites que se - [ ] 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. ::: -`,ov=`--- +`,lv=`--- 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. @@ -31900,7 +31900,7 @@ Para o “abc” cada ouvinte precisa de um try/catch com \`NumberFormatExceptio - [ ] Coluna a coluna, começando de cima para baixo na coluna da esquerda - [ ] Ao acaso ::: -`,lv=`--- +`,uv=`--- 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. @@ -32042,7 +32042,7 @@ Para “não conta como tentativa”, o \`tentativas++\` tem de vir **depois** d - [x] 7 > Cada palpite corta o intervalo a meio, e 2 elevado a 7 = 128 é maior do que 100. ::: -`,uv=`--- +`,mv=`--- 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. @@ -32331,7 +32331,7 @@ Também na calculadora da lição 35 chega um ouvinte para +, -, \\* e /. Verifi = ActionEvent -> o evento e com a informação sobre o clique = JPanel -> uma área com o seu próprio layout ::: -`,mv=`--- +`,cv=`--- 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ê. @@ -32547,7 +32547,7 @@ Experimenta se os três botões contam como esperado. Depois tira o \`static\` d = new ActionListener() { … } -> classe anónima = a seta depois de e -> lambda ::: -`,cv=`--- +`,dv=`--- 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. @@ -32812,7 +32812,7 @@ Depois melhora-o: = JPanel -> a área de um separador = JTextArea -> uma área de texto com várias linhas ::: -`,dv=`--- +`,hv=`--- 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. @@ -33209,7 +33209,7 @@ Depois melhora-o: = VistaNumero com atualizar(int valor) -> view = o ouvinte do botão -> controller ::: -`,hv=`Termos técnicos da área de aprendizagem. Quando um termo aparece num passo, fica marcado uma vez e mostra a sua +`,gv=`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. @@ -33408,7 +33408,7 @@ Um bloco pronto do Java que lê entradas do teclado, por exemplo um número com ### import Uma linha mesmo no início do código Java que vai buscar um bloco pronto a um pacote, por exemplo \`import java.util.Scanner;\`. Sem ela, o Java não conhece o nome. -`,gv=`## Elementos básicos +`,pv=`## Elementos básicos ### Instrução @@ -33534,7 +33534,7 @@ boolean[][] lugares = new boolean[3][5] lugares[1][4] = true output: lugares.length + " filas, " + lugares[0].length + " lugares" \`\`\` -`,pv=`--- +`,fv=`--- titel: Alter im Unterprogramm nach: 18 stufe: 2 @@ -33555,7 +33555,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 ::: -`,fv=`--- +`,xv=`--- titel: Ballwurf auswerten nach: 25 stufe: 2 @@ -33584,7 +33584,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 ::: -`,xv=`--- +`,bv=`--- titel: Bestenliste nach: 19 stufe: 2 @@ -33618,7 +33618,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 ::: -`,bv=`--- +`,vv=`--- titel: Binärzahl nach: 11 stufe: 3 @@ -33660,7 +33660,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 ::: -`,vv=`--- +`,yv=`--- titel: Caesar-Verschlüsselung nach: 17 stufe: 3 @@ -33794,7 +33794,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. ::: -`,yv=`--- +`,wv=`--- titel: Collatz-Folge nach: 11 stufe: 2 @@ -33838,7 +33838,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. ::: -`,wv=`--- +`,zv=`--- titel: Einheitenrechner nach: 35 stufe: 2 @@ -33887,7 +33887,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. ::: -`,zv=`--- +`,Iv=`--- titel: Fibonacci-Zahlen nach: 13 stufe: 2 @@ -33941,7 +33941,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. ::: -`,Iv=`--- +`,kv=`--- titel: Gerade oder ungerade nach: 8 stufe: 1 @@ -33977,7 +33977,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 ::: -`,kv=`--- +`,Sv=`--- titel: Mehrwertsteuer nach: 6 stufe: 1 @@ -34018,7 +34018,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. ::: -`,Sv=`--- +`,_v=`--- titel: Notendurchschnitt nach: 13 stufe: 2 @@ -34053,7 +34053,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 ::: -`,_v=`--- +`,Tv=`--- titel: PIN prüfen nach: 12 stufe: 2 @@ -34093,7 +34093,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 ::: -`,Tv=`--- +`,Ov=`--- titel: Schiffe versenken nach: 16 stufe: 2 @@ -34130,7 +34130,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 ::: -`,Ov=`--- +`,Av=`--- titel: Speisekarte nach: 10 stufe: 1 @@ -34166,7 +34166,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 ::: -`,Av=`--- +`,Pv=`--- titel: Summe bilden nach: 2 stufe: 1 @@ -34182,7 +34182,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 ::: -`,Pv=`--- +`,jv=`--- titel: Tafeldienst auslosen nach: 15 stufe: 2 @@ -34219,7 +34219,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. -`,jv=`--- +`,Cv=`--- titel: Taschenrechner nach: 10 stufe: 2 @@ -34255,7 +34255,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 ::: -`,Cv=`--- +`,Bv=`--- titel: Verleih-Menü nach: 18 stufe: 2 @@ -34290,7 +34290,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 ::: -`,Bv=`--- +`,Dv=`--- titel: Vokabeltrainer nach: 27 stufe: 3 @@ -34325,7 +34325,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 ::: -`,Dv=`--- +`,Zv=`--- titel: Volljährig? nach: 8 stufe: 1 @@ -34361,7 +34361,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 ::: -`,Zv=`--- +`,Mv=`--- titel: Würfeln mit MVC nach: 40 stufe: 3 @@ -34399,7 +34399,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. ::: -`,Mv=`--- +`,Lv=`--- titel: Zahl verdoppeln nach: 2 stufe: 1 @@ -34415,7 +34415,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 ::: -`,Lv=`--- +`,Wv=`--- titel: Age in a subprogram nach: 18 stufe: 2 @@ -34436,7 +34436,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 ::: -`,Wv=`--- +`,Ev=`--- titel: Ball throw results nach: 25 stufe: 2 @@ -34465,7 +34465,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 ::: -`,Ev=`--- +`,Nv=`--- titel: Leaderboard nach: 19 stufe: 2 @@ -34499,7 +34499,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 ::: -`,Nv=`--- +`,Fv=`--- titel: Binary number nach: 11 stufe: 3 @@ -34541,7 +34541,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 ::: -`,Fv=`--- +`,Jv=`--- titel: Caesar cipher nach: 17 stufe: 3 @@ -34675,7 +34675,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. ::: -`,Jv=`--- +`,Rv=`--- titel: Collatz sequence nach: 11 stufe: 2 @@ -34719,7 +34719,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. ::: -`,Rv=`--- +`,Gv=`--- titel: Unit converter nach: 35 stufe: 2 @@ -34768,7 +34768,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. ::: -`,Gv=`--- +`,Hv=`--- titel: Fibonacci numbers nach: 13 stufe: 2 @@ -34822,7 +34822,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. ::: -`,Hv=`--- +`,Vv=`--- titel: Even or odd nach: 8 stufe: 1 @@ -34858,7 +34858,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 ::: -`,Vv=`--- +`,Qv=`--- titel: Sales tax nach: 6 stufe: 1 @@ -34899,7 +34899,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\`. ::: -`,Qv=`--- +`,qv=`--- titel: Grade average nach: 13 stufe: 2 @@ -34934,7 +34934,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 ::: -`,qv=`--- +`,Uv=`--- titel: Check the PIN nach: 12 stufe: 2 @@ -34974,7 +34974,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 ::: -`,Uv=`--- +`,$v=`--- titel: Battleship nach: 16 stufe: 2 @@ -35011,7 +35011,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 ::: -`,$v=`--- +`,Yv=`--- titel: Menu nach: 10 stufe: 1 @@ -35047,7 +35047,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 ::: -`,Yv=`--- +`,Xv=`--- titel: Add up nach: 2 stufe: 1 @@ -35063,7 +35063,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 ::: -`,Xv=`--- +`,Kv=`--- titel: Draw for board duty nach: 15 stufe: 2 @@ -35100,7 +35100,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. -`,Kv=`--- +`,ey=`--- titel: Calculator nach: 10 stufe: 2 @@ -35136,7 +35136,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 ::: -`,ey=`--- +`,ty=`--- titel: Rental menu nach: 18 stufe: 2 @@ -35171,7 +35171,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 ::: -`,ty=`--- +`,ny=`--- titel: Vocabulary trainer nach: 27 stufe: 3 @@ -35206,7 +35206,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 ::: -`,ny=`--- +`,iy=`--- titel: Adult? nach: 8 stufe: 1 @@ -35242,7 +35242,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 ::: -`,iy=`--- +`,ay=`--- titel: Rolling dice with MVC nach: 40 stufe: 3 @@ -35280,7 +35280,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. ::: -`,ay=`--- +`,sy=`--- titel: Double a number nach: 2 stufe: 1 @@ -35296,7 +35296,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 ::: -`,sy=`--- +`,ry=`--- titel: Idade num subprograma nach: 18 stufe: 2 @@ -35317,7 +35317,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 ::: -`,ry=`--- +`,oy=`--- titel: Avaliar o lançamento da bola nach: 25 stufe: 2 @@ -35346,7 +35346,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 ::: -`,oy=`--- +`,ly=`--- titel: Classificação nach: 19 stufe: 2 @@ -35380,7 +35380,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 ::: -`,ly=`--- +`,uy=`--- titel: Número binário nach: 11 stufe: 3 @@ -35422,7 +35422,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 ::: -`,uy=`--- +`,my=`--- titel: Cifra de César nach: 17 stufe: 3 @@ -35556,7 +35556,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. ::: -`,my=`--- +`,cy=`--- titel: Sequência de Collatz nach: 11 stufe: 2 @@ -35600,7 +35600,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. ::: -`,cy=`--- +`,dy=`--- titel: Conversor de unidades nach: 35 stufe: 2 @@ -35649,7 +35649,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. ::: -`,dy=`--- +`,hy=`--- titel: Números de Fibonacci nach: 13 stufe: 2 @@ -35703,7 +35703,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. ::: -`,hy=`--- +`,gy=`--- titel: Par ou ímpar nach: 8 stufe: 1 @@ -35739,7 +35739,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 ::: -`,gy=`--- +`,py=`--- titel: IVA nach: 6 stufe: 1 @@ -35780,7 +35780,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\`. ::: -`,py=`--- +`,fy=`--- titel: Média das notas nach: 13 stufe: 2 @@ -35815,7 +35815,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 ::: -`,fy=`--- +`,xy=`--- titel: Verificar o PIN nach: 12 stufe: 2 @@ -35855,7 +35855,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 ::: -`,xy=`--- +`,by=`--- titel: Batalha naval nach: 16 stufe: 2 @@ -35892,7 +35892,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 ::: -`,by=`--- +`,vy=`--- titel: Ementa nach: 10 stufe: 1 @@ -35928,7 +35928,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 ::: -`,vy=`--- +`,yy=`--- titel: Somar nach: 2 stufe: 1 @@ -35944,7 +35944,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 ::: -`,yy=`--- +`,wy=`--- titel: Sortear quem limpa o quadro nach: 15 stufe: 2 @@ -35981,7 +35981,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. -`,wy=`--- +`,zy=`--- titel: Calculadora nach: 10 stufe: 2 @@ -36017,7 +36017,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 ::: -`,zy=`--- +`,Iy=`--- titel: Menu de aluguer nach: 18 stufe: 2 @@ -36052,7 +36052,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 ::: -`,Iy=`--- +`,ky=`--- titel: Treino de vocabulário nach: 27 stufe: 3 @@ -36087,7 +36087,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 ::: -`,ky=`--- +`,Sy=`--- titel: Maior de idade? nach: 8 stufe: 1 @@ -36123,7 +36123,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 ::: -`,Sy=`--- +`,_y=`--- titel: Lançar o dado com MVC nach: 40 stufe: 3 @@ -36161,7 +36161,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. ::: -`,_y=`--- +`,Ty=`--- titel: Duplicar um número nach: 2 stufe: 1 @@ -36177,7 +36177,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 ::: -`,Ty=`--- +`,Oy=`--- titel: Der mBot2 bereich: VisuBot kurz: Lerne den Roboter kennen, den du gleich programmierst. @@ -36492,7 +36492,7 @@ Ist der mBot2 verbunden, erscheint unter der Welt **🔧 mBot2 testen**. Klapp e - 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 ::: -`,Oy=`--- +`,Ay=`--- titel: Das Quadrat bereich: VisuBot kurz: Vom langen Struktogramm zur dreifach verschachtelten Schleife. @@ -36616,7 +36616,7 @@ Das Programm bleibt gespeichert, auch wenn du den mBot2 aus- und wieder einschal - 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 ::: -`,Ay='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kenne die Datentypen `int`, `double`, `String` und `boolean`. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',Py=`--- +`,Py='---\ntitel: Variablen und Ausgabe\nbereich: VisuBot\nkurz: Werte in Variablen speichern, den mBot2 damit fahren lassen und Ergebnisse ausgeben.\n---\n\n## Eine Variable für die Seite\n\nMit `mbot.forward(30)` fährt der mBot2 30 cm am Stück. Fährst du damit ein Quadrat ohne Schleife, steht die 30 aber viermal im Programm. Soll das Quadrat größer werden, musst du sie an vier Stellen ändern. Besser ist es, die Seitenlänge **einmal** zu speichern und dann überall zu benutzen.\n\nDafür gibt es **Variablen**. Eine Variable ist ein Kästchen mit einem Namen, in dem ein Wert liegt:\n\n```java\nint seite = 30;\nmbot.forward(seite);\n```\n\n- `int` ist der **Datentyp**: eine ganze Zahl.\n- `seite` ist der **Name**. Du darfst ihn selbst wählen.\n- `30` ist der **Wert**. Das `=` legt ihn in das Kästchen.\n\nWo danach `seite` steht, setzt der Computer den Wert ein. `mbot.forward(seite)` fährt also 30 cm.\n\n::: übung vb-variable-seite\ntitel: Quadrat mit Variable\nauftrag: Lege in einer Anweisung die Variable `int seite = 30` an. Danach fährt der mBot2 ein Quadrat: viermal `seite` Zentimeter vor und nach rechts drehen.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: Die erste Anweisung ist `int seite = 30`. Darunter kommt eine For-Schleife, die viermal läuft.\ntipp: In der Schleife stehen `mbot.forward(seite)` und `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Ändere jetzt nur die 30 in eine 60 und starte die Simulation. Das ganze Quadrat wird doppelt so groß.\n\n## Welche Datentypen gibt es?\n\nJede Variable hat einen Datentyp. Er legt fest, welche Werte hineinpassen:\n\n| Datentyp | Was passt hinein? | Beispiel |\n|---|---|---|\n| `int` | ganze Zahlen | `int seite = 30;` |\n| `double` | Kommazahlen, mit Punkt geschrieben | `double tempo = 1.5;` |\n| `String` | Text in Anführungszeichen | `String name = "Visu";` |\n| `boolean` | wahr oder falsch | `boolean fertig = false;` |\n\nMit Variablen kannst du auch rechnen: `int strecke = 4 * seite;` rechnet die ganze Strecke des Quadrats aus.\n\n## Jetzt in Java: Rechteck\n\nEin Rechteck hat zwei verschiedene Seiten. Also brauchst du zwei Variablen.\n\n::: übung vb-java-rechteck\ntitel: Rechteck mit Variablen\ncode: java\nauftrag: Schreibe in Java: Lege `int laenge = 60` und `int breite = 30` an. Der mBot2 fährt ein Rechteck: Länge, rechts drehen, Breite, rechts drehen, und das zweimal.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Zwei Variablen oben: `int laenge = 60;` und `int breite = 30;`. Darunter eine For-Schleife, die zweimal läuft.\ntipp: In der Schleife: `mbot.forward(laenge);`, `mbot.turnRight();`, `mbot.forward(breite);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Ausgabe\n\nNicht jedes Ergebnis muss der Roboter fahren. Mit `System.out.println(…)` gibt ein Java-Programm Text in der [Konsole](#zeige-konsole) aus. Mit `+` hängst du Text und Werte aneinander:\n\n```java\nint seite = 30;\nint strecke = 4 * seite;\nSystem.out.println("Strecke: " + strecke + " cm");\n```\n\nDie Konsole zeigt dann **Strecke: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: Wie weit fährt er?\ncode: java\nauftrag: Ein Rechteck ist 60 cm lang und 30 cm breit. Lege `laenge` und `breite` als Variablen an. Berechne in einer Variablen `strecke`, wie weit der mBot2 einmal ganz herum fährt, und gib **Strecke: 180 cm** aus. Ganz ohne `mbot`!\ntest: - -> Strecke: 180 cm\nbraucht: anweisung\ntipp: Einmal herum sind zweimal die Länge und zweimal die Breite.\ntipp: `int strecke = 2 * laenge + 2 * breite;` und dann `System.out.println("Strecke: " + strecke + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? Was fährt `mbot.forward(seite)`, wenn vorher `int seite = 40;` steht?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] gar nichts, `seite` ist kein Befehl\n> Wo `seite` steht, setzt Java den Wert 40 ein.\n? Welcher Datentyp passt zu `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in Anführungszeichen ist ein `String`.\n? Was gibt `System.out.println("Seite: " + 30);` aus?\n- [x] Seite: 30\n- [ ] "Seite: " + 30\n- [ ] 30\n> Das `+` hängt den Text und die Zahl aneinander.\n:::\n\n::: checkliste\n- Ich kann eine Variable anlegen und benutzen. → Eine Variable für die Seite\n- Ich kenne die Datentypen `int`, `double`, `String` und `boolean`. → Welche Datentypen gibt es?\n- Ich kann mit zwei Variablen ein Rechteck in Java fahren. → Jetzt in Java: Rechteck\n- Ich kann mit `System.out.println` etwas ausgeben. → Jetzt ohne Roboter: Ausgabe\n:::\n',jy=`--- titel: Sensoren abfragen bereich: VisuBot kurz: Der mBot2 misst etwas, und dein Programm entscheidet. @@ -36685,7 +36685,7 @@ lösung: vb-wand-vorn-loesung.visustruct - Ich kenne den Unterschied zwischen Befehl und Sensor. → Befehle und Sensoren - Ich kann einen Sensor in eine Bedingung einbauen. → Wand vorn? ::: -`,jy=`--- +`,Cy=`--- titel: Bis zur Wand bereich: VisuBot kurz: Der mBot2 misst den Abstand und hält rechtzeitig an. @@ -36760,7 +36760,7 @@ lösung: vb-bis-ziel-loesung.visustruct - Ich weiß, wann ich eine While-Schleife statt einer For-Schleife nehme. → Drei Welten, ein Programm - Ich kann mit dem Liniensensor ein Ziel finden. → Bis zum Ziel ::: -`,Cy=`--- +`,By=`--- titel: Der Ultraschallsensor bereich: VisuBot kurz: Abstand messen, Abstand halten und das Ganze in Java. @@ -36846,7 +36846,7 @@ lösung: vb-java-wand-piep-loesung.visustruct - Ich kann zwei Verzweigungen ineinander bauen. → Abstand halten im Struktogramm - Ich kann eine While-Schleife mit dem Abstand in Java schreiben. → Jetzt in Java ::: -`,By=`--- +`,Dy=`--- titel: Der Liniensensor bereich: VisuBot kurz: Dunkle Linien auf dem Boden erkennen und nicht vom Tisch fallen. @@ -36928,7 +36928,7 @@ lösung: vb-java-rand-loesung.visustruct - Ich kann bis zu einer Linie fahren. → Am Rand umkehren im Struktogramm - Ich kann in Java mit einer Variable Schritte zählen. → Jetzt in Java: hin und zurück ::: -`,Dy=`--- +`,Zy=`--- titel: Farben erkennen bereich: VisuBot kurz: Der Quad-RGB-Sensor sagt, auf welcher Farbe der mBot2 steht. @@ -37006,7 +37006,7 @@ lösung: vb-java-blau-gruen-loesung.visustruct - Ich kann mit \`!\` eine Bedingung umdrehen. → Fahre bis Rot im Struktogramm - Ich kann eine Verzweigung in eine Schleife schreiben. → Jetzt in Java: bei Grün piepen ::: -`,Zy=`--- +`,My=`--- titel: Fallauswahl mit Farben bereich: VisuBot kurz: Je nach Farbe oder Linie etwas anderes tun, mit einer Fallauswahl statt vieler Verzweigungen. @@ -37116,7 +37116,7 @@ lösung: vb-ohne-noten-loesung.visustruct - Ich kann eine Fallauswahl mit Zahlen in Java schreiben. → Jetzt in Java: Linienmuster - Ich kann eine Zahl einlesen und je nach Wert etwas ausgeben. → Jetzt ohne Roboter: Noten in Worten ::: -`,My=`--- +`,Ly=`--- titel: Tasten und Joystick bereich: VisuBot kurz: Der mBot2 wartet auf dich und lässt sich fernsteuern. @@ -37193,7 +37193,7 @@ lösung: vb-java-joystick-loesung.visustruct - Ich kann auf eine Taste warten. → Warten auf Taste A im Struktogramm - Ich kann den mBot2 mit dem Joystick steuern. → Jetzt in Java: Fernsteuerung ::: -`,Ly=`--- +`,Wy=`--- titel: Der Lichtsensor bereich: VisuBot kurz: Hell oder dunkel? Der mBot2 wird zum Nachtlicht. @@ -37261,7 +37261,7 @@ lösung: vb-java-nachtlicht-ton-loesung.visustruct - Ich kann mit einer Verzweigung die LEDs schalten. → Nachtlicht im Struktogramm - Ich kann mehrere Befehle in einen Zweig schreiben. → Jetzt in Java: Nachtlicht mit Ton ::: -`,Wy=`--- +`,Ey=`--- titel: Das Mikrofon bereich: VisuBot kurz: Klatschen zum Losfahren und eine Lärmampel für das Klassenzimmer. @@ -37327,7 +37327,7 @@ Lautstärke misst man eigentlich in **Dezibel** (dB). Flüstern hat etwa 30 dB, - Ich kann warten, bis etwas passiert. → Klatschen zum Losfahren im Struktogramm - Ich kann eine Lärmampel in Java schreiben. → Jetzt in Java: Lärmampel ::: -`,Ey=`--- +`,Ny=`--- titel: Der Lagesensor bereich: VisuBot kurz: Neigung messen und Schütteln erkennen. @@ -37401,7 +37401,7 @@ lösung: vb-java-wasserwaage-loesung.visustruct - Ich kann zwei Bedingungen mit „oder“ verbinden. → Schräglage-Warnung im Struktogramm - Ich kann mehrere Bedingungen mit „und“ verbinden. → Jetzt in Java: Wasserwaage ::: -`,Ny=`--- +`,Fy=`--- titel: Die LEDs bereich: VisuBot kurz: Farben mischen, eine Ampel bauen und blinken lassen. @@ -37476,7 +37476,7 @@ lösung: vb-java-blinken-loesung.visustruct - Ich kann Farben mit Pausen nacheinander zeigen. → Ampel im Struktogramm - Ich kann die LEDs in Java blinken lassen. → Jetzt in Java: Blaulicht ::: -`,Fy=`--- +`,Jy=`--- titel: Einzelne LEDs bereich: VisuBot kurz: Jede der fünf LEDs bekommt ihre eigene Farbe, bis zum Lauflicht. @@ -37551,7 +37551,7 @@ lösung: vb-java-lauflicht-loesung.visustruct - Ich kann einzelne LEDs in verschiedenen Farben leuchten lassen. → Drei Lichter im Struktogramm - Ich kann mit einer Schleife ein Lauflicht bauen. → Jetzt in Java: Lauflicht ::: -`,Jy=`--- +`,Ry=`--- titel: Der Lautsprecher bereich: VisuBot kurz: Töne, eine Tonleiter und eine Sirene. @@ -37642,7 +37642,7 @@ Der mBot2 kann auch fröhlich, traurig oder müde sein. Mit **Gefühl zeigen** ( - Ich kann in Java mit der Zählvariable rechnen. → Jetzt in Java: immer höher - Ich kann den mBot2 ein Gefühl zeigen lassen. → Gefühle zeigen ::: -`,Ry='---\ntitel: Arrays und Melodien\nbereich: VisuBot\nkurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten.\n---\n\n## Eine Melodie als Array\n\nEine Melodie ist eine Reihe von Tönen. Statt fünf Variablen `ton1`, `ton2`, … nimmst du ein **Array**. Ein Array ist eine Reihe von Fächern unter **einem** Namen:\n\n```java\nint[] toene = {262, 294, 330, 349, 392};\n```\n\n- `int[]` heißt: ein Array aus ganzen Zahlen.\n- Die Fächer sind von **0** an nummeriert. `toene[0]` ist 262, `toene[4]` ist 392.\n- `toene.length` sagt, wie viele Fächer es gibt, hier 5.\n\nEine For-Schleife mit `i` von 0 bis `toene.length - 1` kommt so an jedes Fach.\n\n::: übung vb-melodie\ntitel: Melodie\nauftrag: Lege ein Array `toene` mit den Tonhöhen 262, 294, 330, 349 und 392 an. Eine For-Schleife spielt sie nacheinander, jeden 300 Millisekunden lang.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] toene = {262, 294, 330, 349, 392}` legt das Array an.\ntipp: Die Schleife läuft von `i = 0` bis `i < toene.length`. Darin steht `mbot.playTone(toene[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> Willst du eine andere Melodie, änderst du nur das Array. Die Schleife bleibt gleich.\n\n## Jetzt in Java: Regenbogen\n\nDie fünf LEDs haben die Nummern 0 bis 4, genau wie die Fächer eines Arrays mit fünf Werten. Ein Array kann auch Texte enthalten: `String[] farben = {"rot", "gelb"};`. LED `i` bekommt dann die Farbe aus Fach `i`: `mbot.led(i).setColor(farben[i])`.\n\n::: übung vb-farben\ntitel: Regenbogen\ncode: java\nauftrag: Schreibe in Java: Lege ein Array `farben` mit den Texten `"rot"`, `"gelb"`, `"grün"`, `"blau"` und `"lila"` an. Eine For-Schleife gibt jeder LED `i` die Farbe aus `farben[i]`.\nbefehle: ledColor 0 "rot", ledColor 1 "gelb", ledColor 2 "grün", ledColor 3 "blau", ledColor 4 "lila"\nbraucht: forSchleife\ntipp: `String[] farben = {"rot", "gelb", "grün", "blau", "lila"};` legt das Array an.\ntipp: `for (int i = 0; i < farben.length; i++) { mbot.led(i).setColor(farben[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Summe der Noten\n\nMit einer Schleife kannst du auch alle Werte eines Arrays zusammenzählen. Dafür brauchst du eine Variable, die mit 0 anfängt und in jedem Durchgang wächst:\n\n```java\nint summe = 0;\nfor (int i = 0; i < noten.length; i++) {\n summe = summe + noten[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Summe der Noten\ncode: java\nauftrag: Lege `int[] noten = {2, 1, 3, 2}` an. Zähle in einer Schleife alle Noten zusammen und gib danach **Summe: 8** und in einer zweiten Zeile **Anzahl: 4** aus. Die Anzahl liefert `noten.length`. Ganz ohne `mbot`!\ntest: - -> Summe: 8 | Anzahl: 4\nbraucht: forSchleife\ntipp: Vor der Schleife `int summe = 0;`, in der Schleife `summe = summe + noten[i];`.\ntipp: Nach der Schleife `System.out.println("Summe: " + summe);` und `System.out.println("Anzahl: " + noten.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? Was ist `toene[1]`, wenn `int[] toene = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> Die Fächer zählen ab 0. Fach 1 ist also das zweite.\n? Wie viele Fächer hat `{262, 294, 330}`, also was ist `toene.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2.\n:::\n\n::: checkliste\n- Ich kann ein Array anlegen und mit einer Schleife abspielen. → Eine Melodie als Array\n- Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen\n- Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten\n:::\n',Gy=`--- +`,Gy='---\ntitel: Arrays und Melodien\nbereich: VisuBot\nkurz: Viele Werte in einem Array speichern und mit einer Schleife abarbeiten.\n---\n\n## Eine Melodie als Array\n\nEine Melodie ist eine Reihe von Tönen. Statt fünf Variablen `ton1`, `ton2`, … nimmst du ein **Array**. Ein Array ist eine Reihe von Fächern unter **einem** Namen:\n\n```java\nint[] toene = {262, 294, 330, 349, 392};\n```\n\n- `int[]` heißt: ein Array aus ganzen Zahlen.\n- Die Fächer sind von **0** an nummeriert. `toene[0]` ist 262, `toene[4]` ist 392.\n- `toene.length` sagt, wie viele Fächer es gibt, hier 5.\n\nEine For-Schleife mit `i` von 0 bis `toene.length - 1` kommt so an jedes Fach.\n\n::: übung vb-melodie\ntitel: Melodie\nauftrag: Lege ein Array `toene` mit den Tonhöhen 262, 294, 330, 349 und 392 an. Eine For-Schleife spielt sie nacheinander, jeden 300 Millisekunden lang.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] toene = {262, 294, 330, 349, 392}` legt das Array an.\ntipp: Die Schleife läuft von `i = 0` bis `i < toene.length`. Darin steht `mbot.playTone(toene[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> Willst du eine andere Melodie, änderst du nur das Array. Die Schleife bleibt gleich.\n\n## Jetzt in Java: Regenbogen\n\nDie fünf LEDs haben die Nummern 0 bis 4, genau wie die Fächer eines Arrays mit fünf Werten. Ein Array kann auch Texte enthalten: `String[] farben = {"rot", "gelb"};`. LED `i` bekommt dann die Farbe aus Fach `i`: `mbot.led(i).setColor(farben[i])`.\n\n::: übung vb-farben\ntitel: Regenbogen\ncode: java\nauftrag: Schreibe in Java: Lege ein Array `farben` mit den Texten `"rot"`, `"gelb"`, `"grün"`, `"blau"` und `"lila"` an. Eine For-Schleife gibt jeder LED `i` die Farbe aus `farben[i]`.\nbefehle: ledColor 0 "rot", ledColor 1 "gelb", ledColor 2 "grün", ledColor 3 "blau", ledColor 4 "lila"\nbraucht: forSchleife\ntipp: `String[] farben = {"rot", "gelb", "grün", "blau", "lila"};` legt das Array an.\ntipp: `for (int i = 0; i < farben.length; i++) { mbot.led(i).setColor(farben[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Jetzt ohne Roboter: Summe der Noten\n\nMit einer Schleife kannst du auch alle Werte eines Arrays zusammenzählen. Dafür brauchst du eine Variable, die mit 0 anfängt und in jedem Durchgang wächst:\n\n```java\nint summe = 0;\nfor (int i = 0; i < noten.length; i++) {\n summe = summe + noten[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Summe der Noten\ncode: java\nauftrag: Lege `int[] noten = {2, 1, 3, 2}` an. Zähle in einer Schleife alle Noten zusammen und gib danach **Summe: 8** und in einer zweiten Zeile **Anzahl: 4** aus. Die Anzahl liefert `noten.length`. Ganz ohne `mbot`!\ntest: - -> Summe: 8 | Anzahl: 4\nbraucht: forSchleife\ntipp: Vor der Schleife `int summe = 0;`, in der Schleife `summe = summe + noten[i];`.\ntipp: Nach der Schleife `System.out.println("Summe: " + summe);` und `System.out.println("Anzahl: " + noten.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? Was ist `toene[1]`, wenn `int[] toene = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> Die Fächer zählen ab 0. Fach 1 ist also das zweite.\n? Wie viele Fächer hat `{262, 294, 330}`, also was ist `toene.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` zählt die Fächer, hier drei. Das letzte Fach hat deshalb die Nummer 2.\n:::\n\n::: checkliste\n- Ich kann ein Array anlegen und mit einer Schleife abspielen. → Eine Melodie als Array\n- Ich kann ein Array mit Texten in Java benutzen. → Jetzt in Java: Regenbogen\n- Ich kann alle Werte eines Arrays zusammenzählen. → Jetzt ohne Roboter: Summe der Noten\n:::\n',Hy=`--- titel: Der Bildschirm bereich: VisuBot kurz: Text, Zahlen und Messwerte auf dem CyberPi anzeigen. @@ -37717,7 +37717,7 @@ lösung: vb-java-countdown-loesung.visustruct - Ich kann Zahlen und Messwerte anzeigen. → Zahlen und Messwerte - Ich kann einen Countdown in Java schreiben. → Jetzt in Java: Countdown ::: -`,Hy=`--- +`,Vy=`--- titel: Zeichenketten bereich: VisuBot kurz: Mit Texten rechnen, Buchstaben herausholen und auf dem Bildschirm zeigen. @@ -37799,7 +37799,7 @@ lösung: vb-ohne-rueckwaerts-loesung.visustruct - Ich kann Texte und Zahlen mit \`+\` verbinden. → Jetzt in Java: Text und Länge - Ich kann mit \`charAt(…)\` einzelne Zeichen holen. → Jetzt ohne Roboter: rückwärts lesen ::: -`,Vy=`--- +`,Qy=`--- titel: Motoren und Geschwindigkeit bereich: VisuBot kurz: Gas geben, lenken und einer Linie folgen. @@ -37889,7 +37889,7 @@ lösung: vb-java-linienfolger-loesung.visustruct - Ich kann fahren, bis ein Sensor etwas meldet. → Gas geben bis zur Wand im Struktogramm - Ich kann einen Linienfolger in Java schreiben. → Jetzt in Java: Linienfolger ::: -`,Qy=`--- +`,qy=`--- titel: Stoppuhr und Akku bereich: VisuBot kurz: Zeit messen und den Akku im Blick behalten. @@ -37968,7 +37968,7 @@ lösung: vb-java-akku-loesung.visustruct - Ich kann eine bestimmte Zeit lang fahren. → Zwei Sekunden fahren im Struktogramm - Ich kann den Akkustand anzeigen. → Jetzt in Java: Akku-Anzeige ::: -`,qy=`--- +`,Uy=`--- titel: Eigene Methoden bereich: VisuBot kurz: Eigene Befehle mit Parametern und Rückgabewert schreiben und aufrufen. @@ -38058,7 +38058,7 @@ unterprogramm: vb-ohne-quadratzahl-unterprogramm-loesung.visustruct - Ich weiß, wie Methoden in Java aussehen. → Methoden in Java - Ich kann eine Methode mit Rückgabewert schreiben. → Jetzt ohne Roboter: Methode mit Rückgabe ::: -`,Uy=`## 🤖 mBot2-Befehle +`,$y=`## 🤖 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. @@ -38210,7 +38210,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. -`,$y=`--- +`,Yy=`--- titel: The mBot2 bereich: VisuBot kurz: Get to know the robot you are about to program. @@ -38525,7 +38525,7 @@ If a value does not change although you do something, something is wrong. Then t - 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 ::: -`,Yy=`--- +`,Xy=`--- titel: The square bereich: VisuBot kurz: From a long structure chart to a triple nested loop. @@ -38649,7 +38649,7 @@ The program stays saved, even when you switch the mBot2 off and on again. Only t - 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 ::: -`,Xy='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I know the data types `int`, `double`, `String` and `boolean`. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',Ky=`--- +`,Ky='---\ntitel: Variables and output\nbereich: VisuBot\nkurz: Store values in variables, drive the mBot2 with them and print results.\n---\n\n## A variable for the side\n\nWith `mbot.forward(30)` the mBot2 drives 30 cm in one go. If you drive a square with it and no loop, the 30 appears four times in your program. To make the square bigger, you have to change it in four places. It is better to store the side length **once** and then use it everywhere.\n\nThat is what **variables** are for. A variable is a box with a name that holds a value:\n\n```java\nint side = 30;\nmbot.forward(side);\n```\n\n- `int` is the **data type**: a whole number.\n- `side` is the **name**. You may choose it yourself.\n- `30` is the **value**. The `=` puts it into the box.\n\nWherever `side` appears afterwards, the computer uses its value. So `mbot.forward(side)` drives 30 cm.\n\n::: übung vb-variable-seite\ntitel: Square with a variable\nauftrag: In one statement, create the variable `int side = 30`. After that the mBot2 drives a square: four times `side` centimetres forward and turn right.\nfahrt: 4 x (forward 30, turnRight)\nbraucht: forSchleife\ntipp: The first statement is `int side = 30`. Below it comes a for loop that runs four times.\ntipp: Inside the loop are `mbot.forward(side)` and `mbot.turnRight()`.\nlösung: vb-variable-seite-loesung.visustruct\n:::\n\n> Now change only the 30 to 60 and start the simulation. The whole square becomes twice as big.\n\n## Which data types are there?\n\nEvery variable has a data type. It decides which values fit inside:\n\n| Data type | What fits inside? | Example |\n|---|---|---|\n| `int` | whole numbers | `int side = 30;` |\n| `double` | decimal numbers, written with a point | `double speed = 1.5;` |\n| `String` | text in quotation marks | `String name = "Visu";` |\n| `boolean` | true or false | `boolean done = false;` |\n\nYou can also calculate with variables: `int distance = 4 * side;` works out the whole distance around the square.\n\n## Now in Java: rectangle\n\nA rectangle has two different sides. So you need two variables.\n\n::: übung vb-java-rechteck\ntitel: Rectangle with variables\ncode: java\nauftrag: Write in Java: create `int length = 60` and `int width = 30`. The mBot2 drives a rectangle: length, turn right, width, turn right, and all that twice.\nfahrt: 2 x (forward 60, turnRight, forward 30, turnRight)\nbraucht: forSchleife\ntipp: Two variables at the top: `int length = 60;` and `int width = 30;`. Below them a for loop that runs twice.\ntipp: Inside the loop: `mbot.forward(length);`, `mbot.turnRight();`, `mbot.forward(width);`, `mbot.turnRight();`\nlösung: vb-java-rechteck-loesung.visustruct\n:::\n\n## Now without the robot: output\n\nNot every result has to be driven by the robot. With `System.out.println(…)` a Java program prints text in the [console](#zeige-konsole). With `+` you join text and values:\n\n```java\nint side = 30;\nint distance = 4 * side;\nSystem.out.println("Distance: " + distance + " cm");\n```\n\nThe console then shows **Distance: 120 cm**.\n\n::: übung vb-ohne-strecke\ntitel: How far does it drive?\ncode: java\nauftrag: A rectangle is 60 cm long and 30 cm wide. Create `length` and `width` as variables. Calculate in a variable `distance` how far the mBot2 drives once all the way round, and print **Distance: 180 cm**. No `mbot` at all!\ntest: - -> Distance: 180 cm\nbraucht: anweisung\ntipp: Once round is twice the length plus twice the width.\ntipp: `int distance = 2 * length + 2 * width;` and then `System.out.println("Distance: " + distance + " cm");`\nlösung: vb-ohne-strecke-loesung.visustruct\n:::\n\n::: quiz\n? What does `mbot.forward(side)` drive if `int side = 40;` comes first?\n- [ ] 4 cm\n- [x] 40 cm\n- [ ] nothing, `side` is not a command\n> Wherever `side` appears, Java uses the value 40.\n? Which data type fits `"Visu"`?\n- [ ] `int`\n- [ ] `double`\n- [x] `String`\n> Text in quotation marks is a `String`.\n? What does `System.out.println("Side: " + 30);` print?\n- [x] Side: 30\n- [ ] "Side: " + 30\n- [ ] 30\n> The `+` joins the text and the number.\n:::\n\n::: checkliste\n- I can create and use a variable. → A variable for the side\n- I know the data types `int`, `double`, `String` and `boolean`. → Which data types are there?\n- I can drive a rectangle in Java with two variables. → Now in Java: rectangle\n- I can print something with `System.out.println`. → Now without the robot: output\n:::\n',e9=`--- titel: Reading sensors bereich: VisuBot kurz: The mBot2 measures something, and your program decides. @@ -38718,7 +38718,7 @@ lösung: vb-wand-vorn-loesung.visustruct - I know the difference between a command and a sensor. → Commands and sensors - I can build a sensor into a condition. → Wall ahead? ::: -`,e9=`--- +`,t9=`--- titel: Up to the wall bereich: VisuBot kurz: The mBot2 measures the distance and stops in time. @@ -38793,7 +38793,7 @@ lösung: vb-bis-ziel-loesung.visustruct - I know when to use a while loop instead of a for loop. → Three worlds, one program - I can find a goal with the line sensor. → To the goal ::: -`,t9=`--- +`,n9=`--- titel: The ultrasonic sensor bereich: VisuBot kurz: Measure the distance, keep your distance, and do it all in Java. @@ -38879,7 +38879,7 @@ lösung: vb-java-wand-piep-loesung.visustruct - I can put one branch inside another. → Keep your distance in the structure chart - I can write a while loop with the distance in Java. → Now in Java ::: -`,n9=`--- +`,i9=`--- titel: The line sensor bereich: VisuBot kurz: Detect dark lines on the floor and don't fall off the table. @@ -38961,7 +38961,7 @@ lösung: vb-java-rand-loesung.visustruct - I can drive up to a line. → Turn round at the edge in the structure chart - I can count steps with a variable in Java. → Now in Java: there and back ::: -`,i9=`--- +`,a9=`--- titel: Recognising colours bereich: VisuBot kurz: The quad RGB sensor tells you which colour the mBot2 is standing on. @@ -39039,7 +39039,7 @@ lösung: vb-java-blau-gruen-loesung.visustruct - I can turn a condition round with \`!\`. → Drive to red in the structure chart - I can put a branch inside a loop. → Now in Java: beep on green ::: -`,a9=`--- +`,s9=`--- titel: Case selection with colours bereich: VisuBot kurz: Do something different for each colour or line, with one case selection instead of many branches. @@ -39149,7 +39149,7 @@ lösung: vb-ohne-noten-loesung.visustruct - I can write a case selection with numbers in Java. → Now in Java: line patterns - I can read a number and print something depending on its value. → Now without the robot: grades in words ::: -`,s9=`--- +`,r9=`--- titel: Buttons and joystick bereich: VisuBot kurz: The mBot2 waits for you and can be remote controlled. @@ -39226,7 +39226,7 @@ lösung: vb-java-joystick-loesung.visustruct - I can wait for a button. → Waiting for button A in the structure chart - I can steer the mBot2 with the joystick. → Now in Java: remote control ::: -`,r9=`--- +`,o9=`--- titel: The light sensor bereich: VisuBot kurz: Bright or dark? The mBot2 becomes a night light. @@ -39294,7 +39294,7 @@ lösung: vb-java-nachtlicht-ton-loesung.visustruct - I can switch the LEDs with a branch. → Night light in the structure chart - I can write several commands in one branch. → Now in Java: night light with sound ::: -`,o9=`--- +`,l9=`--- titel: The microphone bereich: VisuBot kurz: Clap to start, and a noise light for the classroom. @@ -39360,7 +39360,7 @@ Loudness is really measured in **decibels** (dB). Whispering is about 30 dB, a c - I can wait until something happens. → Clap to start in the structure chart - I can write a noise light in Java. → Now in Java: noise light ::: -`,l9=`--- +`,u9=`--- titel: The motion sensor bereich: VisuBot kurz: Measure tilt and detect shaking. @@ -39434,7 +39434,7 @@ lösung: vb-java-wasserwaage-loesung.visustruct - I can join two conditions with “or”. → Tilt warning in the structure chart - I can join several conditions with “and”. → Now in Java: spirit level ::: -`,u9=`--- +`,m9=`--- titel: The LEDs bereich: VisuBot kurz: Mix colours, build a traffic light and make it blink. @@ -39509,7 +39509,7 @@ lösung: vb-java-blinken-loesung.visustruct - I can show colours one after the other with pauses. → Traffic light in the structure chart - I can make the LEDs blink in Java. → Now in Java: blue light ::: -`,m9=`--- +`,c9=`--- titel: Single LEDs bereich: VisuBot kurz: Each of the five LEDs gets its own colour, all the way to a running light. @@ -39584,7 +39584,7 @@ lösung: vb-java-lauflicht-loesung.visustruct - I can make single LEDs light up in different colours. → Three lights in the structogram - I can build a running light with a loop. → Now in Java: running light ::: -`,c9=`--- +`,d9=`--- titel: The speaker bereich: VisuBot kurz: Tones, a scale and a siren. @@ -39675,7 +39675,7 @@ The mBot2 can also be happy, sad or sleepy. With **show a feeling** (\`mbot.emot - I can calculate with the counting variable in Java. → Now in Java: higher and higher - I can make the mBot2 show a feeling. → Showing feelings ::: -`,d9='---\ntitel: Arrays and melodies\nbereich: VisuBot\nkurz: Store many values in one array and work through them with a loop.\n---\n\n## A melody as an array\n\nA melody is a row of tones. Instead of five variables `tone1`, `tone2`, … you use an **array**. An array is a row of slots under **one** name:\n\n```java\nint[] tones = {262, 294, 330, 349, 392};\n```\n\n- `int[]` means: an array of whole numbers.\n- The slots are numbered from **0**. `tones[0]` is 262, `tones[4]` is 392.\n- `tones.length` tells you how many slots there are, here 5.\n\nA for loop with `i` from 0 to `tones.length - 1` reaches every slot.\n\n::: übung vb-melodie\ntitel: Melody\nauftrag: Create an array `tones` with the pitches 262, 294, 330, 349 and 392. A for loop plays them one after the other, each for 300 milliseconds.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] tones = {262, 294, 330, 349, 392}` creates the array.\ntipp: The loop runs from `i = 0` while `i < tones.length`. Inside is `mbot.playTone(tones[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> If you want a different melody, you only change the array. The loop stays the same.\n\n## Now in Java: rainbow\n\nThe five LEDs have the numbers 0 to 4, just like the slots of an array with five values. An array can hold texts too: `String[] colours = {"red", "yellow"};`. LED `i` then gets the colour from slot `i`: `mbot.led(i).setColor(colours[i])`.\n\n::: übung vb-farben\ntitel: Rainbow\ncode: java\nauftrag: Write in Java: create an array `colours` with the texts `"red"`, `"yellow"`, `"green"`, `"blue"` and `"purple"`. A for loop gives every LED `i` the colour from `colours[i]`.\nbefehle: ledColor 0 "red", ledColor 1 "yellow", ledColor 2 "green", ledColor 3 "blue", ledColor 4 "purple"\nbraucht: forSchleife\ntipp: `String[] colours = {"red", "yellow", "green", "blue", "purple"};` creates the array.\ntipp: `for (int i = 0; i < colours.length; i++) { mbot.led(i).setColor(colours[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Now without the robot: sum of the grades\n\nWith a loop you can also add up all the values of an array. You need a variable that starts at 0 and grows in every round:\n\n```java\nint sum = 0;\nfor (int i = 0; i < grades.length; i++) {\n sum = sum + grades[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Sum of the grades\ncode: java\nauftrag: Create `int[] grades = {2, 1, 3, 2}`. Add up all grades in a loop and then print **Sum: 8** and on a second line **Count: 4**. The count comes from `grades.length`. No `mbot` at all!\ntest: - -> Sum: 8 | Count: 4\nbraucht: forSchleife\ntipp: Before the loop `int sum = 0;`, inside the loop `sum = sum + grades[i];`.\ntipp: After the loop `System.out.println("Sum: " + sum);` and `System.out.println("Count: " + grades.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? What is `tones[1]` if `int[] tones = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> The slots count from 0. So slot 1 is the second one.\n? How many slots does `{262, 294, 330}` have, so what is `tones.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` counts the slots, here three. That is why the last slot has the number 2.\n:::\n\n::: checkliste\n- I can create an array and play it with a loop. → A melody as an array\n- I can use an array of texts in Java. → Now in Java: rainbow\n- I can add up all values of an array. → Now without the robot: sum of the grades\n:::\n',h9=`--- +`,h9='---\ntitel: Arrays and melodies\nbereich: VisuBot\nkurz: Store many values in one array and work through them with a loop.\n---\n\n## A melody as an array\n\nA melody is a row of tones. Instead of five variables `tone1`, `tone2`, … you use an **array**. An array is a row of slots under **one** name:\n\n```java\nint[] tones = {262, 294, 330, 349, 392};\n```\n\n- `int[]` means: an array of whole numbers.\n- The slots are numbered from **0**. `tones[0]` is 262, `tones[4]` is 392.\n- `tones.length` tells you how many slots there are, here 5.\n\nA for loop with `i` from 0 to `tones.length - 1` reaches every slot.\n\n::: übung vb-melodie\ntitel: Melody\nauftrag: Create an array `tones` with the pitches 262, 294, 330, 349 and 392. A for loop plays them one after the other, each for 300 milliseconds.\nbefehle: playTone 262 300, playTone 294 300, playTone 330 300, playTone 349 300, playTone 392 300\nbraucht: forSchleife\ntipp: `int[] tones = {262, 294, 330, 349, 392}` creates the array.\ntipp: The loop runs from `i = 0` while `i < tones.length`. Inside is `mbot.playTone(tones[i], 300)`.\nlösung: vb-melodie-loesung.visustruct\n:::\n\n> If you want a different melody, you only change the array. The loop stays the same.\n\n## Now in Java: rainbow\n\nThe five LEDs have the numbers 0 to 4, just like the slots of an array with five values. An array can hold texts too: `String[] colours = {"red", "yellow"};`. LED `i` then gets the colour from slot `i`: `mbot.led(i).setColor(colours[i])`.\n\n::: übung vb-farben\ntitel: Rainbow\ncode: java\nauftrag: Write in Java: create an array `colours` with the texts `"red"`, `"yellow"`, `"green"`, `"blue"` and `"purple"`. A for loop gives every LED `i` the colour from `colours[i]`.\nbefehle: ledColor 0 "red", ledColor 1 "yellow", ledColor 2 "green", ledColor 3 "blue", ledColor 4 "purple"\nbraucht: forSchleife\ntipp: `String[] colours = {"red", "yellow", "green", "blue", "purple"};` creates the array.\ntipp: `for (int i = 0; i < colours.length; i++) { mbot.led(i).setColor(colours[i]); }`\nlösung: vb-farben-loesung.visustruct\n:::\n\n## Now without the robot: sum of the grades\n\nWith a loop you can also add up all the values of an array. You need a variable that starts at 0 and grows in every round:\n\n```java\nint sum = 0;\nfor (int i = 0; i < grades.length; i++) {\n sum = sum + grades[i];\n}\n```\n\n::: übung vb-ohne-summe\ntitel: Sum of the grades\ncode: java\nauftrag: Create `int[] grades = {2, 1, 3, 2}`. Add up all grades in a loop and then print **Sum: 8** and on a second line **Count: 4**. The count comes from `grades.length`. No `mbot` at all!\ntest: - -> Sum: 8 | Count: 4\nbraucht: forSchleife\ntipp: Before the loop `int sum = 0;`, inside the loop `sum = sum + grades[i];`.\ntipp: After the loop `System.out.println("Sum: " + sum);` and `System.out.println("Count: " + grades.length);`.\nlösung: vb-ohne-summe-loesung.visustruct\n:::\n\n::: quiz\n? What is `tones[1]` if `int[] tones = {262, 294, 330};`?\n- [ ] 262\n- [x] 294\n- [ ] 1\n> The slots count from 0. So slot 1 is the second one.\n? How many slots does `{262, 294, 330}` have, so what is `tones.length`?\n- [ ] 2\n- [x] 3\n- [ ] 330\n> `length` counts the slots, here three. That is why the last slot has the number 2.\n:::\n\n::: checkliste\n- I can create an array and play it with a loop. → A melody as an array\n- I can use an array of texts in Java. → Now in Java: rainbow\n- I can add up all values of an array. → Now without the robot: sum of the grades\n:::\n',g9=`--- titel: The screen bereich: VisuBot kurz: Show text, numbers and sensor values on the CyberPi. @@ -39750,7 +39750,7 @@ lösung: vb-java-countdown-loesung.visustruct - I can show numbers and sensor values. → Numbers and sensor values - I can write a countdown in Java. → Now in Java: countdown ::: -`,g9=`--- +`,p9=`--- titel: Strings bereich: VisuBot kurz: Work with texts, pick out letters and show them on the screen. @@ -39832,7 +39832,7 @@ lösung: vb-ohne-rueckwaerts-loesung.visustruct - I can join texts and numbers with \`+\`. → Now in Java: text and length - I can get single characters with \`charAt(…)\`. → Now without the robot: read it backwards ::: -`,p9=`--- +`,f9=`--- titel: Motors and speed bereich: VisuBot kurz: Step on the gas, steer and follow a line. @@ -39922,7 +39922,7 @@ lösung: vb-java-linienfolger-loesung.visustruct - I can drive until a sensor reports something. → Full speed to the wall in the structure chart - I can write a line follower in Java. → Now in Java: line follower ::: -`,f9=`--- +`,x9=`--- titel: Stopwatch and battery bereich: VisuBot kurz: Measure time and keep an eye on the battery. @@ -40001,7 +40001,7 @@ lösung: vb-java-akku-loesung.visustruct - I can drive for a certain time. → Driving two seconds in the structure chart - I can show the battery level. → Now in Java: battery display ::: -`,x9=`--- +`,b9=`--- titel: Your own methods bereich: VisuBot kurz: Write and call your own commands with parameters and return values. @@ -40091,7 +40091,7 @@ unterprogramm: vb-ohne-quadratzahl-unterprogramm-loesung.visustruct - I know what methods look like in Java. → Methods in Java - I can write a method with a return value. → Now without the robot: a method with a return value ::: -`,b9=`## 🤖 mBot2 commands +`,v9=`## 🤖 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. @@ -40243,7 +40243,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. -`,v9=`--- +`,y9=`--- titel: Die Alarmanlage nach: 16 stufe: 2 @@ -40262,7 +40262,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 Ja-Zweig \`mbot.setLed(255, 0, 0)\` und \`mbot.playTone(880, 200)\`, im Nein-Zweig \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,y9=`--- +`,w9=`--- titel: Labyrinth mit Ausgängen nach: 5 stufe: 3 @@ -40281,7 +40281,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 ::: -`,w9=`--- +`,z9=`--- titel: Binär zählen nach: 15 stufe: 3 @@ -40306,7 +40306,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 Ja-Zweig zum Beispiel \`mbot.led(0).setColor("grün")\`, im Nein-Zweig \`mbot.led(0).setColor("aus")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,z9=`--- +`,I9=`--- titel: Das Dreieck nach: 2 stufe: 1 @@ -40329,7 +40329,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. ::: -`,I9=`--- +`,k9=`--- titel: Rückwärts einparken nach: 16 stufe: 2 @@ -40349,7 +40349,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 ::: -`,k9='---\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 Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',S9=`--- +`,S9='---\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 Ja-Zweig: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. Im Nein-Zweig: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',_9=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -40366,7 +40366,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 ::: -`,_9=`--- +`,T9=`--- titel: Das Labyrinth nach: 5 stufe: 2 @@ -40391,7 +40391,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. ::: -`,T9='---\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',O9=`--- +`,O9='---\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',A9=`--- titel: Morsen nach: 15 stufe: 2 @@ -40408,7 +40408,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 ::: -`,A9=`--- +`,P9=`--- titel: Der Nachtwächter nach: 18 stufe: 1 @@ -40426,7 +40426,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 ::: -`,P9=`--- +`,j9=`--- titel: Slalom nach: 2 stufe: 2 @@ -40445,7 +40445,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 ::: -`,j9=`--- +`,C9=`--- titel: Die Spirale nach: 2 stufe: 2 @@ -40464,7 +40464,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 ::: -`,C9=`--- +`,B9=`--- titel: Die Treppe nach: 2 stufe: 1 @@ -40481,7 +40481,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 ::: -`,B9=`--- +`,D9=`--- titel: Der Tunnelsucher nach: 5 stufe: 3 @@ -40502,7 +40502,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 ::: -`,D9=`--- +`,Z9=`--- titel: Kleeblatt im Wald nach: 5 stufe: 2 @@ -40521,7 +40521,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 ::: -`,Z9=`--- +`,M9=`--- titel: The alarm system nach: 16 stufe: 2 @@ -40540,7 +40540,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 yes branch \`mbot.setLed(255, 0, 0)\` and \`mbot.playTone(880, 200)\`, in the no branch \`mbot.ledOff()\`. lösung: vb-alarmanlage-loesung.visustruct ::: -`,M9=`--- +`,L9=`--- titel: Maze with exits nach: 5 stufe: 3 @@ -40559,7 +40559,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 ::: -`,L9=`--- +`,W9=`--- titel: Counting in binary nach: 15 stufe: 3 @@ -40584,7 +40584,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 yes branch, for example, \`mbot.led(0).setColor("green")\`, in the no branch \`mbot.led(0).setColor("off")\`. lösung: vb-binaer-zaehlen-loesung.visustruct ::: -`,W9=`--- +`,E9=`--- titel: The triangle nach: 2 stufe: 1 @@ -40607,7 +40607,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. ::: -`,E9=`--- +`,N9=`--- titel: Reverse parking nach: 16 stufe: 2 @@ -40627,7 +40627,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 ::: -`,N9='---\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 yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',F9=`--- +`,F9='---\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 yes branch: `mbot.setLed(255, 128, 0)`, `mbot.playTone(880, 200)`, `mbot.turnRight()`, `mbot.forward(30)`, `mbot.turnLeft()`, `mbot.ledOff()`. In the no branch: `mbot.forward()`.\nlösung: vb-hindernis-loesung.visustruct\n:::\n',J9=`--- titel: Knight Rider nach: 15 stufe: 2 @@ -40644,7 +40644,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 ::: -`,J9=`--- +`,R9=`--- titel: The maze nach: 5 stufe: 2 @@ -40669,7 +40669,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. ::: -`,R9='---\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',G9=`--- +`,G9='---\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',H9=`--- titel: Morse code nach: 15 stufe: 2 @@ -40686,7 +40686,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 ::: -`,H9=`--- +`,V9=`--- titel: The night watchman nach: 18 stufe: 1 @@ -40704,7 +40704,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 ::: -`,V9=`--- +`,Q9=`--- titel: Slalom nach: 2 stufe: 2 @@ -40723,7 +40723,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 ::: -`,Q9=`--- +`,q9=`--- titel: The spiral nach: 2 stufe: 2 @@ -40742,7 +40742,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 ::: -`,q9=`--- +`,U9=`--- titel: The staircase nach: 2 stufe: 1 @@ -40759,7 +40759,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 ::: -`,U9=`--- +`,$9=`--- titel: The tunnel finder nach: 5 stufe: 3 @@ -40780,7 +40780,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 ::: -`,$9=`--- +`,Y9=`--- titel: Clover in the forest nach: 5 stufe: 2 @@ -40799,7 +40799,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 ::: -`,Y9=` +`,X9=` 111;117;116;112;117;116;58;32;34;87;105;108;108;107;111;109;109;101;110;34; @@ -40811,7 +40811,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; -`,X9=` +`,K9=` 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; @@ -40830,7 +40830,7 @@ lösung: vb-wald-loesung.visustruct -`,K9=` +`,ew=` 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; @@ -40911,7 +40911,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,ew=` +`,tw=` 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; @@ -40920,7 +40920,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; -`,tw=` +`,nw=` 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; @@ -40985,7 +40985,7 @@ lösung: vb-wald-loesung.visustruct -`,nw=` +`,iw=` 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; @@ -41011,7 +41011,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;101;114; -`,iw=` +`,aw=` 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; @@ -41065,13 +41065,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,aw=` +`,sw=` 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; -`,sw=` +`,rw=` 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; @@ -41102,7 +41102,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;103;101;104;101;105;109; -`,rw=` +`,ow=` 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; @@ -41133,7 +41133,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;107;108;97;114;116;101;120;116; -`,ow=` +`,lw=` 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; @@ -41169,7 +41169,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; -`,lw=` +`,uw=` 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; @@ -41197,7 +41197,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;110;105;116;116; -`,uw=` +`,mw=` 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; @@ -41234,7 +41234,7 @@ lösung: vb-wald-loesung.visustruct -`,mw=` +`,cw=` 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; @@ -41253,7 +41253,7 @@ lösung: vb-wald-loesung.visustruct -`,cw=` +`,dw=` 99;111;110;115;116;32;100;111;117;98;108;101;32;77;87;83;84;32;61;32;48;46;49;57; @@ -41274,7 +41274,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; -`,dw=` +`,hw=` 105;110;116;32;112;105;110;32;61;32;48; @@ -41310,7 +41310,7 @@ lösung: vb-wald-loesung.visustruct -`,hw=` +`,gw=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -41346,7 +41346,7 @@ lösung: vb-wald-loesung.visustruct -`,gw=` +`,pw=` 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; @@ -41390,7 +41390,7 @@ lösung: vb-wald-loesung.visustruct -`,pw=` +`,fw=` 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; @@ -41444,7 +41444,7 @@ lösung: vb-wald-loesung.visustruct -`,fw=` +`,xw=` 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; @@ -41471,7 +41471,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; -`,xw=` +`,bw=` 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; @@ -41500,7 +41500,7 @@ lösung: vb-wald-loesung.visustruct -`,bw=` +`,vw=` 105;110;116;32;122;97;104;108;49;32;61;32;52; @@ -41515,7 +41515,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,vw=` +`,yw=` 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; @@ -41537,7 +41537,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; -`,yw=` +`,ww=` 105;110;116;32;122;97;104;108;32;61;32;52; @@ -41549,7 +41549,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; -`,ww=` +`,zw=` -1; @@ -41596,7 +41596,7 @@ lösung: vb-wald-loesung.visustruct -`,zw=` +`,Iw=` @@ -41633,7 +41633,7 @@ lösung: vb-wald-loesung.visustruct -`,Iw=` +`,kw=` 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; @@ -41693,7 +41693,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; -`,kw=` +`,Sw=` 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; @@ -41702,7 +41702,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; -`,Sw=` +`,_w=` 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; @@ -41721,7 +41721,7 @@ lösung: vb-wald-loesung.visustruct -`,_w=` +`,Tw=` 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; @@ -41744,7 +41744,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,Tw=` +`,Ow=` 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; @@ -41762,7 +41762,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; -`,Ow=` +`,Aw=` 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; @@ -41780,7 +41780,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,Aw=` +`,Pw=` 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; @@ -41800,7 +41800,7 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,Pw=` +`,jw=` 111;117;116;112;117;116;58;32;34;87;101;108;99;111;109;101;34; @@ -41812,7 +41812,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;111;100;98;121;101;34; -`,jw=` +`,Cw=` 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; @@ -41831,7 +41831,7 @@ lösung: vb-wald-loesung.visustruct -`,Cw=` +`,Bw=` 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; @@ -41912,7 +41912,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,Bw=` +`,Dw=` 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; @@ -41921,7 +41921,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; -`,Dw=` +`,Zw=` 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; @@ -41986,7 +41986,7 @@ lösung: vb-wald-loesung.visustruct -`,Zw=` +`,Mw=` 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; @@ -42012,7 +42012,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;121; -`,Mw=` +`,Lw=` 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; @@ -42066,13 +42066,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,Lw=` +`,Ww=` 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; -`,Ww=` +`,Ew=` 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; @@ -42103,7 +42103,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;99;114;101;116; -`,Ew=` +`,Nw=` 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; @@ -42134,7 +42134,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;108;97;105;110; -`,Nw=` +`,Fw=` 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; @@ -42170,7 +42170,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; -`,Fw=` +`,Jw=` 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; @@ -42198,7 +42198,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;118;101;114;97;103;101; -`,Jw=` +`,Rw=` 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; @@ -42235,7 +42235,7 @@ lösung: vb-wald-loesung.visustruct -`,Rw=` +`,Gw=` 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; @@ -42254,7 +42254,7 @@ lösung: vb-wald-loesung.visustruct -`,Gw=` +`,Hw=` 99;111;110;115;116;32;100;111;117;98;108;101;32;86;65;84;32;61;32;48;46;49;57; @@ -42275,7 +42275,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; -`,Hw=` +`,Vw=` 105;110;116;32;112;105;110;32;61;32;48; @@ -42311,7 +42311,7 @@ lösung: vb-wald-loesung.visustruct -`,Vw=` +`,Qw=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -42347,7 +42347,7 @@ lösung: vb-wald-loesung.visustruct -`,Qw=` +`,qw=` 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; @@ -42391,7 +42391,7 @@ lösung: vb-wald-loesung.visustruct -`,qw=` +`,Uw=` 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; @@ -42445,7 +42445,7 @@ lösung: vb-wald-loesung.visustruct -`,Uw=` +`,$w=` 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; @@ -42472,7 +42472,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; -`,$w=` +`,Yw=` 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; @@ -42501,7 +42501,7 @@ lösung: vb-wald-loesung.visustruct -`,Yw=` +`,Xw=` 105;110;116;32;110;117;109;98;101;114;49;32;61;32;52; @@ -42516,7 +42516,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,Xw=` +`,Kw=` 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; @@ -42538,7 +42538,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; -`,Kw=` +`,e5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;52; @@ -42550,7 +42550,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; -`,e5=` +`,t5=` -1; @@ -42597,7 +42597,7 @@ lösung: vb-wald-loesung.visustruct -`,t5=` +`,n5=` @@ -42634,7 +42634,7 @@ lösung: vb-wald-loesung.visustruct -`,n5=` +`,i5=` 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; @@ -42694,7 +42694,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; -`,i5=` +`,a5=` 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; @@ -42703,7 +42703,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; -`,a5=` +`,s5=` 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; @@ -42722,7 +42722,7 @@ lösung: vb-wald-loesung.visustruct -`,s5=` +`,r5=` 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; @@ -42745,7 +42745,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,r5=` +`,o5=` 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; @@ -42763,7 +42763,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; -`,o5=` +`,l5=` 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; @@ -42781,7 +42781,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;97;109;101; -`,l5=` +`,u5=` 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; @@ -42801,7 +42801,7 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,u5=` +`,m5=` 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; @@ -42833,7 +42833,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; -`,m5=` +`,c5=` 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; @@ -42881,7 +42881,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; -`,c5=` +`,d5=` 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; @@ -42896,7 +42896,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; -`,d5=` +`,h5=` 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; @@ -42930,7 +42930,7 @@ lösung: vb-wald-loesung.visustruct -`,h5=` +`,g5=` 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; @@ -42948,7 +42948,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; -`,g5=` +`,p5=` 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; @@ -42996,7 +42996,7 @@ lösung: vb-wald-loesung.visustruct -`,p5=` +`,f5=` 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; @@ -43020,7 +43020,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; -`,f5=` +`,x5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43035,7 +43035,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; -`,x5=` +`,b5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43050,7 +43050,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; -`,b5=` +`,v5=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -43068,7 +43068,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; -`,v5=` +`,y5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -43083,7 +43083,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,y5=` +`,w5=` 105;110;116;32;110;117;109;98;101;114;32;61;32;50; @@ -43098,7 +43098,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,w5=` +`,z5=` 111;117;116;112;117;116;58;32;110;117;109;98;101;114; @@ -43113,7 +43113,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; -`,z5=` +`,I5=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -43137,7 +43137,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; -`,I5=` +`,k5=` 83;116;114;105;110;103;32;108;101;102;116;32;61;32;34;106;117;105;99;101;34; @@ -43152,7 +43152,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; -`,k5=` +`,S5=` 105;110;116;32;97;32;61;32;53; @@ -43176,7 +43176,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; -`,S5=` +`,_5=` 105;110;116;32;97;103;101;32;61;32;49;52; @@ -43194,7 +43194,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; -`,_5=` +`,T5=` 105;110;116;32;109;105;110;117;116;101;115;32;61;32;49;51;53; @@ -43209,7 +43209,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; -`,T5=` +`,O5=` 105;110;116;32;99;111;117;110;116;32;61;32;51; @@ -43224,7 +43224,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; -`,O5=` +`,A5=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -43239,7 +43239,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; -`,A5=` +`,P5=` 105;110;116;32;99;114;101;100;105;116;32;61;32;50;48; @@ -43254,7 +43254,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; -`,P5=` +`,j5=` 105;110;116;32;112;114;105;99;101;32;61;32;57; @@ -43269,7 +43269,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; -`,j5=` +`,C5=` 105;110;116;32;108;101;110;103;116;104;32;61;32;55; @@ -43290,7 +43290,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; -`,C5=` +`,B5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43305,7 +43305,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; -`,B5=` +`,D5=` 105;110;116;32;115;101;99;111;110;100;115;32;61;32;50;48;48; @@ -43314,7 +43314,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; -`,D5=` +`,Z5=` 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; @@ -43323,7 +43323,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; -`,Z5=` +`,M5=` 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; @@ -43338,7 +43338,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; -`,M5=` +`,L5=` 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; @@ -43350,7 +43350,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; -`,L5=` +`,W5=` 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; @@ -43362,7 +43362,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; -`,W5=` +`,E5=` 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; @@ -43374,7 +43374,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; -`,E5=` +`,N5=` 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; @@ -43389,7 +43389,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; -`,N5=` +`,F5=` 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; @@ -43410,7 +43410,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; -`,F5=` +`,J5=` 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; @@ -43429,7 +43429,7 @@ lösung: vb-wald-loesung.visustruct -`,J5=` +`,R5=` 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; @@ -43451,7 +43451,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;98;101;114; -`,R5=` +`,G5=` 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; @@ -43470,7 +43470,7 @@ lösung: vb-wald-loesung.visustruct -`,G5=` +`,H5=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -43488,7 +43488,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; -`,H5=` +`,V5=` 105;110;116;32;112;111;105;110;116;115;32;61;32;48; @@ -43506,7 +43506,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; -`,V5=` +`,Q5=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -43524,7 +43524,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; -`,Q5=` +`,q5=` 105;110;116;32;112;114;105;99;101;32;61;32;56; @@ -43542,7 +43542,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; -`,q5=` +`,U5=` 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; @@ -43564,7 +43564,7 @@ lösung: vb-wald-loesung.visustruct -`,U5=` +`,$5=` 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; @@ -43586,7 +43586,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; -`,$5=` +`,Y5=` 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; @@ -43605,7 +43605,7 @@ lösung: vb-wald-loesung.visustruct -`,Y5=` +`,X5=` 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; @@ -43624,7 +43624,7 @@ lösung: vb-wald-loesung.visustruct -`,X5=` +`,K5=` 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; @@ -43643,7 +43643,7 @@ lösung: vb-wald-loesung.visustruct -`,K5=` +`,e6=` 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; @@ -43662,7 +43662,7 @@ lösung: vb-wald-loesung.visustruct -`,e6=` +`,t6=` 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; @@ -43681,7 +43681,7 @@ lösung: vb-wald-loesung.visustruct -`,t6=` +`,n6=` 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; @@ -43700,7 +43700,7 @@ lösung: vb-wald-loesung.visustruct -`,n6=` +`,i6=` 105;110;112;117;116;58;32;105;110;116;32;121;101;97;114;32;34;89;101;97;114;63;34; @@ -43719,7 +43719,7 @@ lösung: vb-wald-loesung.visustruct -`,i6=` +`,a6=` 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; @@ -43738,7 +43738,7 @@ lösung: vb-wald-loesung.visustruct -`,a6=` +`,s6=` 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; @@ -43767,7 +43767,7 @@ lösung: vb-wald-loesung.visustruct -`,s6=` +`,r6=` 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; @@ -43796,7 +43796,7 @@ lösung: vb-wald-loesung.visustruct -`,r6=` +`,o6=` 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; @@ -43815,7 +43815,7 @@ lösung: vb-wald-loesung.visustruct -`,o6=` +`,l6=` 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; @@ -43834,7 +43834,7 @@ lösung: vb-wald-loesung.visustruct -`,l6=` +`,u6=` 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; @@ -43853,7 +43853,7 @@ lösung: vb-wald-loesung.visustruct -`,u6=` +`,m6=` 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; @@ -43897,7 +43897,7 @@ lösung: vb-wald-loesung.visustruct -`,m6=` +`,c6=` 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; @@ -43944,7 +43944,7 @@ lösung: vb-wald-loesung.visustruct -`,c6=` +`,d6=` 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; @@ -43983,7 +43983,7 @@ lösung: vb-wald-loesung.visustruct -`,d6=` +`,h6=` 80;117;116;32;97;32;99;117;112;32;111;110;32;116;104;101;32;116;97;98;108;101; @@ -43991,7 +43991,7 @@ lösung: vb-wald-loesung.visustruct 83;117;103;97;114;32;119;97;110;116;101;100;63; - + 65;100;100;32;115;117;103;97;114; @@ -44004,7 +44004,7 @@ lösung: vb-wald-loesung.visustruct 84;101;97;32;115;116;105;108;108;32;116;111;111;32;104;111;116; - + 87;97;105;116;32;49;32;109;105;110;117;116;101; @@ -44013,7 +44013,7 @@ lösung: vb-wald-loesung.visustruct 68;114;105;110;107;32;116;104;101;32;116;101;97; -`,h6=` +`,g6=` 71;101;116;32;117;112; @@ -44028,7 +44028,7 @@ lösung: vb-wald-loesung.visustruct 72;97;118;101;32;98;114;101;97;107;102;97;115;116; -`,g6=` +`,p6=` 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; @@ -44049,17 +44049,17 @@ 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; -`,p6=` +`,f6=` 73;115;32;105;116;32;114;97;105;110;105;110;103;63; - + 80;97;99;107;32;97;110;32;117;109;98;114;101;108;108;97; - + 80;97;99;107;32;115;117;110;103;108;97;115;115;101;115; @@ -44068,12 +44068,12 @@ lösung: vb-wald-loesung.visustruct 76;101;97;118;101; -`,f6=` +`,x6=` 80;108;97;116;101;32;110;111;116;32;101;109;112;116;121; - + 84;97;107;101;32;97;32;98;105;116;101; @@ -44082,7 +44082,7 @@ lösung: vb-wald-loesung.visustruct 67;108;101;97;114;32;116;104;101;32;112;108;97;116;101; -`,x6=` +`,b6=` 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; @@ -44102,7 +44102,7 @@ lösung: vb-wald-loesung.visustruct -`,b6=` +`,v6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -44122,7 +44122,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,v6=` +`,y6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;51; @@ -44139,7 +44139,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,y6=` +`,w6=` 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; @@ -44165,7 +44165,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; -`,w6=` +`,z6=` 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; @@ -44200,7 +44200,7 @@ lösung: vb-wald-loesung.visustruct -`,z6=` +`,I6=` 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; @@ -44235,7 +44235,7 @@ lösung: vb-wald-loesung.visustruct -`,I6=` +`,k6=` 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; @@ -44264,7 +44264,7 @@ lösung: vb-wald-loesung.visustruct -`,k6=` +`,S6=` 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; @@ -44287,7 +44287,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;116;101;112;115; -`,S6=` +`,_6=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -44304,7 +44304,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; -`,_6=` +`,T6=` 105;110;116;32;105;32;61;32;49;48; @@ -44321,7 +44321,7 @@ lösung: vb-wald-loesung.visustruct -`,T6=` +`,O6=` 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; @@ -44347,7 +44347,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; -`,O6=` +`,A6=` 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; @@ -44373,7 +44373,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; -`,A6=` +`,P6=` 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; @@ -44393,7 +44393,7 @@ lösung: vb-wald-loesung.visustruct -`,P6=` +`,j6=` 105;110;116;32;103;114;97;100;101;32;61;32;48; @@ -44410,7 +44410,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; -`,j6=` +`,C6=` 105;110;116;32;115;117;109;32;61;32;48; @@ -44433,7 +44433,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,C6=` +`,B6=` 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; @@ -44452,7 +44452,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,B6=` +`,D6=` 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; @@ -44471,7 +44471,7 @@ lösung: vb-wald-loesung.visustruct -`,D6=` +`,Z6=` 105;110;116;32;105;32;61;32;49; @@ -44484,7 +44484,7 @@ lösung: vb-wald-loesung.visustruct -`,Z6=` +`,M6=` 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; @@ -44501,7 +44501,7 @@ lösung: vb-wald-loesung.visustruct -`,M6=` +`,L6=` 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; @@ -44518,7 +44518,7 @@ lösung: vb-wald-loesung.visustruct -`,L6=` +`,W6=` 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; @@ -44535,7 +44535,7 @@ lösung: vb-wald-loesung.visustruct -`,W6=` +`,E6=` 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; @@ -44557,7 +44557,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,E6=` +`,N6=` 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; @@ -44586,7 +44586,7 @@ lösung: vb-wald-loesung.visustruct -`,N6=` +`,F6=` 105;110;116;32;99;111;117;110;116;32;61;32;48; @@ -44618,7 +44618,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,F6=` +`,J6=` 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; @@ -44650,7 +44650,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;99;111;117;110;116; -`,J6=` +`,R6=` 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; @@ -44666,7 +44666,7 @@ lösung: vb-wald-loesung.visustruct -`,R6=` +`,G6=` 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; @@ -44682,7 +44682,7 @@ lösung: vb-wald-loesung.visustruct -`,G6=` +`,H6=` 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; @@ -44698,7 +44698,7 @@ lösung: vb-wald-loesung.visustruct -`,H6=` +`,V6=` 105;110;112;117;116;58;32;105;110;116;32;119;105;100;116;104;32;34;87;105;100;116;104;34; @@ -44730,7 +44730,7 @@ lösung: vb-wald-loesung.visustruct -`,V6=` +`,Q6=` 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; @@ -44746,7 +44746,7 @@ lösung: vb-wald-loesung.visustruct -`,Q6=` +`,q6=` 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; @@ -44761,7 +44761,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; -`,q6=` +`,U6=` 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; @@ -44793,7 +44793,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; -`,U6=` +`,$6=` 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; @@ -44825,7 +44825,7 @@ lösung: vb-wald-loesung.visustruct -`,$6=` +`,Y6=` 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; @@ -44854,7 +44854,7 @@ lösung: vb-wald-loesung.visustruct -`,Y6=` +`,X6=` 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; @@ -44873,7 +44873,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; -`,X6=` +`,K6=` 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; @@ -44899,7 +44899,7 @@ lösung: vb-wald-loesung.visustruct -`,K6=` +`,ez=` 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; @@ -44950,7 +44950,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; -`,ez=` +`,tz=` 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; @@ -44991,7 +44991,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; -`,tz=` +`,nz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45014,7 +45014,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; -`,nz=` +`,iz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45044,7 +45044,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; -`,iz=` +`,az=` 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; @@ -45059,13 +45059,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; -`,az=` +`,sz=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,sz=` +`,rz=` 115;104;111;119;71;114;101;101;116;105;110;103;40;41; @@ -45077,7 +45077,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;82;101;115;117;108;116;40;41; -`,rz=` +`,oz=` 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; @@ -45109,7 +45109,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; -`,oz=` +`,lz=` 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; @@ -45141,7 +45141,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; -`,lz=` +`,uz=` 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; @@ -45163,7 +45163,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; -`,uz=` +`,mz=` 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; @@ -45175,7 +45175,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; -`,mz=` +`,cz=` 105;110;116;32;114;101;115;117;108;116;32;61;32;120;32;42;32;120; @@ -45184,7 +45184,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116; -`,cz=` +`,dz=` 115;104;111;119;84;105;116;108;101;40;41; @@ -45196,7 +45196,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; -`,dz=` +`,hz=` 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; @@ -45205,7 +45205,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; -`,hz=` +`,gz=` 115;104;111;119;83;117;109;40;51;44;32;52;41; @@ -45217,7 +45217,7 @@ lösung: vb-wald-loesung.visustruct 115;104;111;119;83;117;109;40;120;44;32;120;32;43;32;49;41; -`,gz=` +`,pz=` 105;110;116;32;115;117;109;32;61;32;97;32;43;32;98; @@ -45226,7 +45226,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; -`,pz=` +`,fz=` 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; @@ -45249,7 +45249,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;33;34; -`,fz=` +`,xz=` 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; @@ -45272,7 +45272,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;71;111;34; -`,xz=` +`,bz=` 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; @@ -45294,7 +45294,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; -`,bz=` +`,vz=` 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; @@ -45316,7 +45316,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; -`,vz=` +`,yz=` 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; @@ -45345,7 +45345,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; -`,yz=` +`,wz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45368,7 +45368,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,wz=` +`,zz=` 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; @@ -45390,7 +45390,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,zz=` +`,Iz=` 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; @@ -45412,7 +45412,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109; -`,Iz=` +`,kz=` 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; @@ -45444,7 +45444,7 @@ lösung: vb-wald-loesung.visustruct -`,kz=` +`,Sz=` 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; @@ -45466,7 +45466,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;99;116;111;114;105;97;108; -`,Sz=` +`,_z=` 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; @@ -45498,13 +45498,13 @@ lösung: vb-wald-loesung.visustruct -`,_z=` +`,Tz=` 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; -`,Tz=` +`,Oz=` 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; @@ -45516,7 +45516,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; -`,Oz=` +`,Az=` 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; @@ -45528,7 +45528,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; -`,Az=` +`,Pz=` 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; @@ -45547,7 +45547,7 @@ lösung: vb-wald-loesung.visustruct -`,Pz=` +`,jz=` 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; @@ -45576,7 +45576,7 @@ lösung: vb-wald-loesung.visustruct -`,jz=` +`,Cz=` 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; @@ -45596,7 +45596,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;34; -`,Cz=` +`,Bz=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -45629,7 +45629,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; -`,Bz=` +`,Dz=` 105;110;116;32;116;114;105;101;115;32;61;32;48; @@ -45662,7 +45662,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; -`,Dz=` +`,Zz=` 105;110;116;32;115;117;109;32;61;32;48; @@ -45704,7 +45704,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; -`,Zz=` +`,Mz=` 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; @@ -45726,7 +45726,7 @@ lösung: vb-wald-loesung.visustruct -`,Mz=` +`,Lz=` 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; @@ -45742,7 +45742,7 @@ lösung: vb-wald-loesung.visustruct -`,Lz=` +`,Wz=` 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; @@ -45781,7 +45781,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; -`,Wz=` +`,Ez=` 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; @@ -45820,7 +45820,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; -`,Ez=` +`,Nz=` 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; @@ -45855,7 +45855,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; -`,Nz=` +`,Fz=` 111;117;116;112;117;116;58;32;34;71;111;111;100;32;109;111;114;110;105;110;103;34; @@ -45864,13 +45864,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; -`,Fz=` +`,Jz=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;32;87;111;114;108;100;34; -`,Jz=` +`,Rz=` 111;117;116;112;117;116;58;32;34;72;101;108;108;111;34; @@ -45879,7 +45879,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; -`,Rz=` +`,Gz=` 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; @@ -45920,7 +45920,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; -`,Gz=` +`,Hz=` 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; @@ -45929,7 +45929,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; -`,Hz=` +`,Vz=` 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; @@ -45955,13 +45955,13 @@ lösung: vb-wald-loesung.visustruct 102;105;108;101;46;99;108;111;115;101;40;41; -`,Vz=` +`,Qz=` 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; -`,Qz=` +`,qz=` 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; @@ -46000,7 +46000,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; -`,qz=` +`,Uz=` 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; @@ -46009,7 +46009,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; -`,Uz=` +`,$z=` 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; @@ -46044,7 +46044,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; -`,$z=` +`,Yz=` 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; @@ -46053,7 +46053,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; -`,Yz=` +`,Xz=` 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; @@ -46107,7 +46107,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; -`,Xz=` +`,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;99;108;97;115;115;46;99;115;118;34;41;41; @@ -46116,7 +46116,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; -`,Kz=` +`,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;99;108;97;115;115;46;99;115;118;34;41;41; @@ -46157,7 +46157,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; -`,e7=` +`,t7=` 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; @@ -46166,7 +46166,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; -`,t7=` +`,n7=` 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; @@ -46205,7 +46205,7 @@ lösung: vb-wald-loesung.visustruct 114;101;97;100;101;114;46;99;108;111;115;101;40;41; -`,n7=` +`,i7=` 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; @@ -46214,7 +46214,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; -`,i7=` +`,a7=` 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; @@ -46264,7 +46264,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; -`,a7=` +`,s7=` 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; @@ -46282,7 +46282,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,s7=` +`,r7=` 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; @@ -46335,7 +46335,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; -`,r7=` +`,o7=` 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; @@ -46356,7 +46356,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,o7=` +`,l7=` 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; @@ -46400,7 +46400,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; -`,l7=` +`,u7=` 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; @@ -46421,7 +46421,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;46;99;108;111;115;101;40;41; -`,u7=` +`,m7=` 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; @@ -46433,7 +46433,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; -`,m7=` +`,c7=` 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; @@ -46445,7 +46445,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; -`,c7=` +`,d7=` 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; @@ -46469,7 +46469,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,d7=` +`,h7=` 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; @@ -46490,7 +46490,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,h7=` +`,g7=` 105;110;116;32;97;32;61;32;51; @@ -46514,7 +46514,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; -`,g7=` +`,p7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -46573,7 +46573,7 @@ lösung: vb-wald-loesung.visustruct -`,p7=` +`,f7=` 105;110;116;91;93;32;99;97;114;100;115;32;61;32;110;101;119;32;105;110;116;91;53;93; @@ -46632,7 +46632,7 @@ lösung: vb-wald-loesung.visustruct -`,f7=` +`,x7=` 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; @@ -46706,7 +46706,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; -`,x7=` +`,b7=` 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; @@ -46755,7 +46755,7 @@ lösung: vb-wald-loesung.visustruct -`,b7=` +`,v7=` 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; @@ -46804,7 +46804,7 @@ lösung: vb-wald-loesung.visustruct -`,v7=` +`,y7=` 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; @@ -46862,7 +46862,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; -`,y7=` +`,w7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -46881,7 +46881,7 @@ lösung: vb-wald-loesung.visustruct -`,w7=` +`,z7=` 105;110;116;91;93;32;112;111;105;110;116;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -46900,7 +46900,7 @@ lösung: vb-wald-loesung.visustruct -`,z7=` +`,I7=` 105;110;116;32;105;32;61;32;48; @@ -46913,7 +46913,7 @@ lösung: vb-wald-loesung.visustruct -`,I7=` +`,k7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;53; @@ -46937,7 +46937,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; -`,k7=` +`,S7=` 105;110;116;32;105;32;61;32;48; @@ -46950,7 +46950,7 @@ lösung: vb-wald-loesung.visustruct -`,S7=` +`,_7=` 120;32;61;32;120;32;42;32;50; @@ -46959,7 +46959,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; -`,_7=` +`,T7=` 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; @@ -46968,7 +46968,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; -`,T7=` +`,O7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -46994,7 +46994,7 @@ lösung: vb-wald-loesung.visustruct -`,O7=` +`,A7=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -47021,7 +47021,7 @@ lösung: vb-wald-loesung.visustruct -`,A7=` +`,P7=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -47039,7 +47039,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; -`,P7=` +`,j7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -47069,7 +47069,7 @@ lösung: vb-wald-loesung.visustruct -`,j7=` +`,C7=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;101;108;108;111;33;34;41; @@ -47081,7 +47081,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; -`,C7=` +`,B7=` 105;110;116;32;110;117;109;98;101;114;32;61;32;48; @@ -47133,7 +47133,7 @@ lösung: vb-wald-loesung.visustruct -`,B7=` +`,D7=` 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; @@ -47144,7 +47144,7 @@ lösung: vb-wald-loesung.visustruct -`,D7=` +`,Z7=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -47155,7 +47155,7 @@ lösung: vb-wald-loesung.visustruct -`,Z7=` +`,M7=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -47166,7 +47166,7 @@ lösung: vb-wald-loesung.visustruct -`,M7=` +`,L7=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;86;105;115;117;66;111;116;34; @@ -47185,7 +47185,7 @@ lösung: vb-wald-loesung.visustruct -`,L7=` +`,W7=` 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; @@ -47197,7 +47197,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; -`,W7=` +`,E7=` 105;110;116;32;105;32;61;32;48; @@ -47213,7 +47213,7 @@ lösung: vb-wald-loesung.visustruct -`,E7=` +`,N7=` 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; @@ -47241,7 +47241,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; -`,N7=` +`,F7=` 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; @@ -47257,7 +47257,7 @@ lösung: vb-wald-loesung.visustruct -`,F7=` +`,J7=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -47283,7 +47283,7 @@ lösung: vb-wald-loesung.visustruct -`,J7=` +`,R7=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -47300,7 +47300,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,R7=` +`,G7=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -47318,7 +47318,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,G7=` +`,H7=` 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; @@ -47354,7 +47354,7 @@ lösung: vb-wald-loesung.visustruct -`,H7=` +`,V7=` 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; @@ -47373,7 +47373,7 @@ lösung: vb-wald-loesung.visustruct -`,V7=` +`,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; @@ -47397,7 +47397,7 @@ lösung: vb-wald-loesung.visustruct -`,Q7=` +`,q7=` 105;110;116;32;105;32;61;32;48; @@ -47419,7 +47419,7 @@ lösung: vb-wald-loesung.visustruct -`,q7=` +`,U7=` 105;110;116;32;105;32;61;32;51; @@ -47438,7 +47438,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; -`,U7=` +`,$7=` 105;110;116;32;105;32;61;32;49; @@ -47451,7 +47451,7 @@ lösung: vb-wald-loesung.visustruct -`,$7=` +`,Y7=` 105;110;116;32;105;32;61;32;48; @@ -47484,7 +47484,7 @@ lösung: vb-wald-loesung.visustruct -`,Y7=` +`,X7=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -47500,7 +47500,7 @@ lösung: vb-wald-loesung.visustruct -`,X7=` +`,K7=` 105;110;116;32;105;32;61;32;48; @@ -47519,7 +47519,7 @@ lösung: vb-wald-loesung.visustruct -`,K7=` +`,eI=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -47563,7 +47563,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,eI=` +`,tI=` 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; @@ -47582,7 +47582,7 @@ lösung: vb-wald-loesung.visustruct -`,tI=` +`,nI=` 105;110;116;32;115;116;101;112;115;32;61;32;48; @@ -47612,7 +47612,7 @@ lösung: vb-wald-loesung.visustruct -`,nI=` +`,iI=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -47640,7 +47640,7 @@ lösung: vb-wald-loesung.visustruct -`,iI=` +`,aI=` 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; @@ -47649,7 +47649,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; -`,aI=` +`,sI=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -47663,7 +47663,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; -`,sI=` +`,rI=` 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; @@ -47679,7 +47679,7 @@ lösung: vb-wald-loesung.visustruct -`,rI=` +`,oI=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -47693,7 +47693,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,oI=` +`,lI=` 105;110;116;32;105;32;61;32;48; @@ -47728,7 +47728,7 @@ lösung: vb-wald-loesung.visustruct -`,lI=` +`,uI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -47762,7 +47762,7 @@ lösung: vb-wald-loesung.visustruct -`,uI=` +`,mI=` 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; @@ -47806,7 +47806,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,mI=` +`,cI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -47832,7 +47832,7 @@ lösung: vb-wald-loesung.visustruct -`,cI=` +`,dI=` 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; @@ -47848,7 +47848,7 @@ lösung: vb-wald-loesung.visustruct -`,dI=` +`,hI=` 105;110;116;32;105;32;61;32;48; @@ -47914,7 +47914,7 @@ lösung: vb-wald-loesung.visustruct -`,hI=` +`,gI=` 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; @@ -47930,7 +47930,7 @@ lösung: vb-wald-loesung.visustruct -`,gI=` +`,pI=` 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; @@ -47947,7 +47947,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; -`,pI=` +`,fI=` 105;110;112;117;116;58;32;105;110;116;32;103;114;97;100;101; @@ -47976,7 +47976,7 @@ lösung: vb-wald-loesung.visustruct -`,fI=` +`,xI=` 105;110;116;32;97;32;61;32;115;113;117;97;114;101;78;117;109;98;101;114;40;51;41; @@ -47991,13 +47991,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,xI=` +`,bI=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,bI=` +`,vI=` 83;116;114;105;110;103;32;119;111;114;100;32;61;32;34;76;117;100;119;105;103;34; @@ -48019,7 +48019,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,vI=` +`,yI=` 105;110;116;32;108;101;110;103;116;104;32;61;32;54;48; @@ -48034,7 +48034,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;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; -`,yI=` +`,wI=` 105;110;116;91;93;32;103;114;97;100;101;115;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -48059,7 +48059,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;103;114;97;100;101;115;46;108;101;110;103;116;104; -`,wI=` +`,zI=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -48134,7 +48134,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,zI=` +`,II=` 115;113;117;97;114;101;40;51;48;41; @@ -48143,7 +48143,7 @@ lösung: vb-wald-loesung.visustruct 115;113;117;97;114;101;40;53;48;41; -`,II=` +`,kI=` 105;110;116;32;105;32;61;32;48; @@ -48198,7 +48198,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,kI=` +`,SI=` 105;110;116;32;105;32;61;32;48; @@ -48214,7 +48214,7 @@ lösung: vb-wald-loesung.visustruct -`,SI=` +`,_I=` 105;110;116;32;105;32;61;32;48; @@ -48237,7 +48237,7 @@ lösung: vb-wald-loesung.visustruct -`,_I=` +`,TI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -48251,7 +48251,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; -`,TI=` +`,OI=` 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; @@ -48267,7 +48267,7 @@ lösung: vb-wald-loesung.visustruct -`,OI=` +`,AI=` 105;110;116;32;105;32;61;32;48; @@ -48319,7 +48319,7 @@ lösung: vb-wald-loesung.visustruct -`,AI=` +`,PI=` 105;110;116;32;105;32;61;32;49; @@ -48335,7 +48335,7 @@ lösung: vb-wald-loesung.visustruct -`,PI=` +`,jI=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -48349,7 +48349,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,jI=` +`,CI=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -48367,7 +48367,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; -`,CI=` +`,BI=` 105;110;116;32;105;32;61;32;48; @@ -48389,7 +48389,7 @@ lösung: vb-wald-loesung.visustruct -`,BI=` +`,DI=` 105;110;116;32;108;101;102;116;32;61;32;57;57; @@ -48421,7 +48421,7 @@ lösung: vb-wald-loesung.visustruct -`,DI=` +`,ZI=` 105;110;116;32;115;105;100;101;32;61;32;51;48; @@ -48440,7 +48440,7 @@ lösung: vb-wald-loesung.visustruct -`,ZI=` +`,MI=` 105;110;116;32;105;32;61;32;48; @@ -48473,7 +48473,7 @@ lösung: vb-wald-loesung.visustruct -`,MI=` +`,LI=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -48512,7 +48512,7 @@ lösung: vb-wald-loesung.visustruct -`,LI=` +`,WI=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -48528,7 +48528,7 @@ lösung: vb-wald-loesung.visustruct -`,WI=` +`,EI=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -48548,7 +48548,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,EI=` +`,NI=` 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; @@ -48560,7 +48560,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; -`,NI=` +`,FI=` 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; @@ -48599,7 +48599,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,FI=` +`,JI=` 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; @@ -48621,7 +48621,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;97;99;107;119;97;114;100;115; -`,JI=` +`,RI=` 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; @@ -48640,7 +48640,7 @@ lösung: vb-wald-loesung.visustruct -`,RI=` +`,GI=` 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; @@ -48652,7 +48652,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; -`,GI=` +`,HI=` 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; @@ -48684,7 +48684,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; -`,HI=` +`,VI=` 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; @@ -48708,7 +48708,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; -`,VI=` +`,QI=` 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; @@ -48740,7 +48740,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; -`,QI=` +`,qI=` 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; @@ -48788,7 +48788,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; -`,qI=` +`,UI=` 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; @@ -48803,7 +48803,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; -`,UI=` +`,$I=` 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; @@ -48837,7 +48837,7 @@ lösung: vb-wald-loesung.visustruct -`,$I=` +`,YI=` 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; @@ -48855,7 +48855,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; -`,YI=` +`,XI=` 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; @@ -48903,7 +48903,7 @@ lösung: vb-wald-loesung.visustruct -`,XI=` +`,KI=` 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; @@ -48927,7 +48927,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; -`,KI=` +`,e8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -48942,7 +48942,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; -`,e8=` +`,t8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -48957,7 +48957,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; -`,t8=` +`,n8=` 83;116;114;105;110;103;32;110;97;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -48975,7 +48975,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; -`,n8=` +`,i8=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -48990,7 +48990,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,i8=` +`,a8=` 105;110;116;32;122;97;104;108;32;61;32;50; @@ -49005,7 +49005,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,a8=` +`,s8=` 111;117;116;112;117;116;58;32;122;97;104;108; @@ -49020,7 +49020,7 @@ lösung: vb-wald-loesung.visustruct 122;97;104;108;32;61;32;122;97;104;108;32;43;32;51; -`,s8=` +`,r8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -49044,7 +49044,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; -`,r8=` +`,o8=` 83;116;114;105;110;103;32;108;105;110;107;115;32;61;32;34;83;97;102;116;34; @@ -49059,7 +49059,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; -`,o8=` +`,l8=` 105;110;116;32;97;32;61;32;53; @@ -49083,7 +49083,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; -`,l8=` +`,u8=` 105;110;116;32;97;108;116;101;114;32;61;32;49;52; @@ -49101,7 +49101,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; -`,u8=` +`,m8=` 105;110;116;32;109;105;110;117;116;101;110;32;61;32;49;51;53; @@ -49116,7 +49116,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; -`,m8=` +`,c8=` 105;110;116;32;97;110;122;97;104;108;32;61;32;51; @@ -49131,7 +49131,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; -`,c8=` +`,d8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -49146,7 +49146,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; -`,d8=` +`,h8=` 105;110;116;32;103;117;116;104;97;98;101;110;32;61;32;50;48; @@ -49161,7 +49161,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; -`,h8=` +`,g8=` 105;110;116;32;112;114;101;105;115;32;61;32;57; @@ -49176,7 +49176,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; -`,g8=` +`,p8=` 105;110;116;32;108;97;101;110;103;101;32;61;32;55; @@ -49197,7 +49197,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; -`,p8=` +`,f8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -49212,7 +49212,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; -`,f8=` +`,x8=` 105;110;116;32;115;101;107;117;110;100;101;110;32;61;32;50;48;48; @@ -49221,7 +49221,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; -`,x8=` +`,b8=` 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; @@ -49230,7 +49230,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; -`,b8=` +`,v8=` 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; @@ -49245,7 +49245,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; -`,v8=` +`,y8=` 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; @@ -49257,7 +49257,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; -`,y8=` +`,w8=` 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; @@ -49269,7 +49269,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; -`,w8=` +`,z8=` 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; @@ -49281,7 +49281,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; -`,z8=` +`,I8=` 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; @@ -49296,7 +49296,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; -`,I8=` +`,k8=` 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; @@ -49317,7 +49317,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; -`,k8=` +`,S8=` 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; @@ -49336,7 +49336,7 @@ lösung: vb-wald-loesung.visustruct -`,S8=` +`,_8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -49358,7 +49358,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;122;97;104;108; -`,_8=` +`,T8=` 105;110;112;117;116;58;32;105;110;116;32;122;97;104;108;32;34;90;97;104;108;63;34; @@ -49377,7 +49377,7 @@ lösung: vb-wald-loesung.visustruct -`,T8=` +`,O8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -49395,7 +49395,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; -`,O8=` +`,A8=` 105;110;116;32;112;117;110;107;116;101;32;61;32;48; @@ -49413,7 +49413,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; -`,A8=` +`,P8=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -49431,7 +49431,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; -`,P8=` +`,j8=` 105;110;116;32;112;114;101;105;115;32;61;32;56; @@ -49449,7 +49449,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; -`,j8=` +`,C8=` 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; @@ -49471,7 +49471,7 @@ lösung: vb-wald-loesung.visustruct -`,C8=` +`,B8=` 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; @@ -49493,7 +49493,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; -`,B8=` +`,D8=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -49512,7 +49512,7 @@ lösung: vb-wald-loesung.visustruct -`,D8=` +`,Z8=` 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; @@ -49531,7 +49531,7 @@ lösung: vb-wald-loesung.visustruct -`,Z8=` +`,M8=` 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; @@ -49550,7 +49550,7 @@ lösung: vb-wald-loesung.visustruct -`,M8=` +`,L8=` 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; @@ -49569,7 +49569,7 @@ lösung: vb-wald-loesung.visustruct -`,L8=` +`,W8=` 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; @@ -49588,7 +49588,7 @@ lösung: vb-wald-loesung.visustruct -`,W8=` +`,E8=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101;32;34;78;111;116;101;63;34; @@ -49607,7 +49607,7 @@ lösung: vb-wald-loesung.visustruct -`,E8=` +`,N8=` 105;110;112;117;116;58;32;105;110;116;32;106;97;104;114;32;34;74;97;104;114;63;34; @@ -49626,7 +49626,7 @@ lösung: vb-wald-loesung.visustruct -`,N8=` +`,F8=` 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; @@ -49645,7 +49645,7 @@ lösung: vb-wald-loesung.visustruct -`,F8=` +`,J8=` 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; @@ -49674,7 +49674,7 @@ lösung: vb-wald-loesung.visustruct -`,J8=` +`,R8=` 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; @@ -49703,7 +49703,7 @@ lösung: vb-wald-loesung.visustruct -`,R8=` +`,G8=` 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; @@ -49722,7 +49722,7 @@ lösung: vb-wald-loesung.visustruct -`,G8=` +`,H8=` 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; @@ -49741,7 +49741,7 @@ lösung: vb-wald-loesung.visustruct -`,H8=` +`,V8=` 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; @@ -49760,7 +49760,7 @@ lösung: vb-wald-loesung.visustruct -`,V8=` +`,Q8=` 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; @@ -49804,7 +49804,7 @@ lösung: vb-wald-loesung.visustruct -`,Q8=` +`,q8=` 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; @@ -49851,7 +49851,7 @@ lösung: vb-wald-loesung.visustruct -`,q8=` +`,U8=` 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; @@ -49890,7 +49890,7 @@ lösung: vb-wald-loesung.visustruct -`,U8=` +`,$8=` 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; @@ -49898,7 +49898,7 @@ lösung: vb-wald-loesung.visustruct 90;117;99;107;101;114;32;103;101;119;252;110;115;99;104;116;63; - + 90;117;99;107;101;114;32;104;105;110;101;105;110;103;101;98;101;110; @@ -49911,7 +49911,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;110;111;99;104;32;122;117;32;104;101;105;223; - + 49;32;77;105;110;117;116;101;32;119;97;114;116;101;110; @@ -49920,7 +49920,7 @@ lösung: vb-wald-loesung.visustruct 84;101;101;32;116;114;105;110;107;101;110; -`,$8=` +`,Y8=` 65;117;102;115;116;101;104;101;110; @@ -49935,7 +49935,7 @@ lösung: vb-wald-loesung.visustruct 70;114;252;104;115;116;252;99;107;101;110; -`,Y8=` +`,X8=` 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; @@ -49956,17 +49956,17 @@ 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; -`,X8=` +`,K8=` 82;101;103;110;101;116;32;101;115;63; - + 82;101;103;101;110;115;99;104;105;114;109;32;101;105;110;112;97;99;107;101;110; - + 83;111;110;110;101;110;98;114;105;108;108;101;32;101;105;110;112;97;99;107;101;110; @@ -49975,12 +49975,12 @@ lösung: vb-wald-loesung.visustruct 76;111;115;103;101;104;101;110; -`,K8=` +`,ek=` 84;101;108;108;101;114;32;110;105;99;104;116;32;108;101;101;114; - + 69;105;110;101;110;32;66;105;115;115;101;110;32;101;115;115;101;110; @@ -49989,7 +49989,7 @@ lösung: vb-wald-loesung.visustruct 84;101;108;108;101;114;32;97;98;114;228;117;109;101;110; -`,ek=` +`,tk=` 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; @@ -50009,7 +50009,7 @@ lösung: vb-wald-loesung.visustruct -`,tk=` +`,nk=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -50029,7 +50029,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,nk=` +`,ik=` 105;110;116;32;122;97;104;108;32;61;32;51; @@ -50046,7 +50046,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,ik=` +`,ak=` 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; @@ -50072,7 +50072,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; -`,ak=` +`,sk=` 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; @@ -50107,7 +50107,7 @@ lösung: vb-wald-loesung.visustruct -`,sk=` +`,rk=` 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; @@ -50142,7 +50142,7 @@ lösung: vb-wald-loesung.visustruct -`,rk=` +`,ok=` 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; @@ -50171,7 +50171,7 @@ lösung: vb-wald-loesung.visustruct -`,ok=` +`,lk=` 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; @@ -50194,7 +50194,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;99;104;114;105;116;116;101; -`,lk=` +`,uk=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -50211,7 +50211,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;68;97;110;107;101;33;34; -`,uk=` +`,mk=` 105;110;116;32;105;32;61;32;49;48; @@ -50228,7 +50228,7 @@ lösung: vb-wald-loesung.visustruct -`,mk=` +`,ck=` 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; @@ -50254,7 +50254,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; -`,ck=` +`,dk=` 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; @@ -50280,7 +50280,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; -`,dk=` +`,hk=` 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; @@ -50300,7 +50300,7 @@ lösung: vb-wald-loesung.visustruct -`,hk=` +`,gk=` 105;110;116;32;110;111;116;101;32;61;32;48; @@ -50317,7 +50317,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; -`,gk=` +`,pk=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -50340,7 +50340,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,pk=` +`,fk=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;83;116;97;114;116;122;97;104;108;34; @@ -50359,7 +50359,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,fk=` +`,xk=` 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; @@ -50378,7 +50378,7 @@ lösung: vb-wald-loesung.visustruct -`,xk=` +`,bk=` 105;110;116;32;105;32;61;32;49; @@ -50391,7 +50391,7 @@ lösung: vb-wald-loesung.visustruct -`,bk=` +`,vk=` 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; @@ -50408,7 +50408,7 @@ lösung: vb-wald-loesung.visustruct -`,vk=` +`,yk=` 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; @@ -50425,7 +50425,7 @@ lösung: vb-wald-loesung.visustruct -`,yk=` +`,wk=` 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; @@ -50442,7 +50442,7 @@ lösung: vb-wald-loesung.visustruct -`,wk=` +`,zk=` 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; @@ -50464,7 +50464,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,zk=` +`,Ik=` 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; @@ -50493,7 +50493,7 @@ lösung: vb-wald-loesung.visustruct -`,Ik=` +`,kk=` 105;110;116;32;97;110;122;97;104;108;32;61;32;48; @@ -50525,7 +50525,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,kk=` +`,Sk=` 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; @@ -50557,7 +50557,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;97;110;122;97;104;108; -`,Sk=` +`,_k=` 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; @@ -50573,7 +50573,7 @@ lösung: vb-wald-loesung.visustruct -`,_k=` +`,Tk=` 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; @@ -50589,7 +50589,7 @@ lösung: vb-wald-loesung.visustruct -`,Tk=` +`,Ok=` 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; @@ -50605,7 +50605,7 @@ lösung: vb-wald-loesung.visustruct -`,Ok=` +`,Ak=` 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; @@ -50637,7 +50637,7 @@ lösung: vb-wald-loesung.visustruct -`,Ak=` +`,Pk=` 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; @@ -50653,7 +50653,7 @@ lösung: vb-wald-loesung.visustruct -`,Pk=` +`,jk=` 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; @@ -50668,7 +50668,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; -`,jk=` +`,Ck=` 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; @@ -50700,7 +50700,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; -`,Ck=` +`,Bk=` 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; @@ -50732,7 +50732,7 @@ lösung: vb-wald-loesung.visustruct -`,Bk=` +`,Dk=` 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; @@ -50761,7 +50761,7 @@ lösung: vb-wald-loesung.visustruct -`,Dk=` +`,Zk=` 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; @@ -50780,7 +50780,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; -`,Zk=` +`,Mk=` 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; @@ -50806,7 +50806,7 @@ lösung: vb-wald-loesung.visustruct -`,Mk=` +`,Lk=` 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; @@ -50857,7 +50857,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; -`,Lk=` +`,Wk=` 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; @@ -50898,7 +50898,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; -`,Wk=` +`,Ek=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -50921,7 +50921,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; -`,Ek=` +`,Nk=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -50951,7 +50951,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; -`,Nk=` +`,Fk=` 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; @@ -50966,13 +50966,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; -`,Fk=` +`,Jk=` 114;101;116;117;114;110;32;97;32;42;32;98; -`,Jk=` +`,Rk=` 122;101;105;103;101;66;101;103;114;117;101;115;115;117;110;103;40;41; @@ -50984,7 +50984,7 @@ lösung: vb-wald-loesung.visustruct 122;101;105;103;101;69;114;103;101;98;110;105;115;40;41; -`,Rk=` +`,Gk=` 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; @@ -51016,7 +51016,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; -`,Gk=` +`,Hk=` 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; @@ -51048,7 +51048,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; -`,Hk=` +`,Vk=` 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; @@ -51070,7 +51070,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; -`,Vk=` +`,Qk=` 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; @@ -51082,7 +51082,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; -`,Qk=` +`,qk=` 105;110;116;32;101;114;103;101;98;110;105;115;32;61;32;120;32;42;32;120; @@ -51091,7 +51091,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;101;114;103;101;98;110;105;115; -`,qk=` +`,Uk=` 122;101;105;103;101;84;105;116;101;108;40;41; @@ -51103,7 +51103,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; -`,Uk=` +`,$k=` 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; @@ -51112,7 +51112,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; -`,$k=` +`,Yk=` 122;101;105;103;101;83;117;109;109;101;40;51;44;32;52;41; @@ -51124,7 +51124,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; -`,Yk=` +`,Xk=` 105;110;116;32;115;117;109;109;101;32;61;32;97;32;43;32;98; @@ -51133,7 +51133,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; -`,Xk=` +`,Kk=` 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; @@ -51156,7 +51156,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;33;34; -`,Kk=` +`,eS=` 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; @@ -51179,7 +51179,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;76;111;115;34; -`,eS=` +`,tS=` 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; @@ -51201,7 +51201,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; -`,tS=` +`,nS=` 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; @@ -51223,7 +51223,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; -`,nS=` +`,iS=` 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; @@ -51252,7 +51252,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; -`,iS=` +`,aS=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -51275,7 +51275,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,aS=` +`,sS=` 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; @@ -51297,7 +51297,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,sS=` +`,rS=` 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; @@ -51319,7 +51319,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;117;109;109;101; -`,rS=` +`,oS=` 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; @@ -51351,7 +51351,7 @@ lösung: vb-wald-loesung.visustruct -`,oS=` +`,lS=` 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; @@ -51373,7 +51373,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;107;117;108;116;97;101;116; -`,lS=` +`,uS=` 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; @@ -51405,13 +51405,13 @@ lösung: vb-wald-loesung.visustruct -`,uS=` +`,mS=` 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; -`,mS=` +`,cS=` 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; @@ -51423,7 +51423,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; -`,cS=` +`,dS=` 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; @@ -51435,7 +51435,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; -`,dS=` +`,hS=` 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; @@ -51454,7 +51454,7 @@ lösung: vb-wald-loesung.visustruct -`,hS=` +`,gS=` 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; @@ -51483,7 +51483,7 @@ lösung: vb-wald-loesung.visustruct -`,gS=` +`,pS=` 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; @@ -51503,7 +51503,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;69;110;100;101;34; -`,pS=` +`,fS=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -51536,7 +51536,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; -`,fS=` +`,xS=` 105;110;116;32;118;101;114;115;117;99;104;101;32;61;32;48; @@ -51569,7 +51569,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; -`,xS=` +`,bS=` 105;110;116;32;115;117;109;109;101;32;61;32;48; @@ -51611,7 +51611,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; -`,bS=` +`,vS=` 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; @@ -51633,7 +51633,7 @@ lösung: vb-wald-loesung.visustruct -`,vS=` +`,yS=` 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; @@ -51649,7 +51649,7 @@ lösung: vb-wald-loesung.visustruct -`,yS=` +`,wS=` 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; @@ -51688,7 +51688,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; -`,wS=` +`,zS=` 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; @@ -51727,7 +51727,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; -`,zS=` +`,IS=` 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; @@ -51762,7 +51762,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; -`,IS=` +`,kS=` 111;117;116;112;117;116;58;32;34;71;117;116;101;110;32;77;111;114;103;101;110;34; @@ -51771,13 +51771,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; -`,kS=` +`,SS=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;32;87;101;108;116;34; -`,SS=` +`,_S=` 111;117;116;112;117;116;58;32;34;72;97;108;108;111;34; @@ -51786,7 +51786,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; -`,_S=` +`,TS=` 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; @@ -51806,7 +51806,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;83;116;97;114;116;33;34; -`,TS=` +`,OS=` 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; @@ -51847,7 +51847,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; -`,OS=` +`,AS=` 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; @@ -51856,7 +51856,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; -`,AS=` +`,PS=` 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; @@ -51882,13 +51882,13 @@ lösung: vb-wald-loesung.visustruct 100;97;116;101;105;46;99;108;111;115;101;40;41; -`,PS=` +`,jS=` 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; -`,jS=` +`,CS=` 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; @@ -51927,7 +51927,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; -`,CS=` +`,BS=` 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; @@ -51936,7 +51936,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; -`,BS=` +`,DS=` 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; @@ -51971,7 +51971,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; -`,DS=` +`,ZS=` 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; @@ -51980,7 +51980,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; -`,ZS=` +`,MS=` 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; @@ -52034,7 +52034,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; -`,MS=` +`,LS=` 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; @@ -52043,7 +52043,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; -`,LS=` +`,WS=` 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; @@ -52084,7 +52084,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; -`,WS=` +`,ES=` 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; @@ -52093,7 +52093,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; -`,ES=` +`,NS=` 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; @@ -52132,7 +52132,7 @@ lösung: vb-wald-loesung.visustruct 108;101;115;101;114;46;99;108;111;115;101;40;41; -`,NS=` +`,FS=` 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; @@ -52141,7 +52141,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; -`,FS=` +`,JS=` 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; @@ -52191,7 +52191,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; -`,JS=` +`,RS=` 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; @@ -52209,7 +52209,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,RS=` +`,GS=` 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; @@ -52262,7 +52262,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; -`,GS=` +`,HS=` 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; @@ -52283,7 +52283,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,HS=` +`,VS=` 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; @@ -52327,7 +52327,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; -`,VS=` +`,QS=` 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; @@ -52348,7 +52348,7 @@ lösung: vb-wald-loesung.visustruct 97;117;115;46;99;108;111;115;101;40;41; -`,QS=` +`,qS=` 111;117;116;112;117;116;58;32;34;66;101;109;45;118;105;110;100;111;34; @@ -52360,7 +52360,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;65;100;101;117;115;34; -`,qS=` +`,US=` 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; @@ -52379,7 +52379,7 @@ lösung: vb-wald-loesung.visustruct -`,US=` +`,$S=` 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; @@ -52460,7 +52460,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,$S=` +`,YS=` 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; @@ -52469,7 +52469,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; -`,YS=` +`,XS=` 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; @@ -52534,7 +52534,7 @@ lösung: vb-wald-loesung.visustruct -`,XS=` +`,KS=` 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; @@ -52560,7 +52560,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98;105;110;97;114;105;111; -`,KS=` +`,e_=` 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; @@ -52614,13 +52614,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,e_=` +`,t_=` 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; -`,t_=` +`,n_=` 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; @@ -52651,7 +52651,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;101;103;114;101;100;111; -`,n_=` +`,i_=` 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; @@ -52682,7 +52682,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116;111; -`,i_=` +`,a_=` 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; @@ -52718,7 +52718,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; -`,a_=` +`,s_=` 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; @@ -52746,7 +52746,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;109;101;100;105;97; -`,s_=` +`,r_=` 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; @@ -52783,7 +52783,7 @@ lösung: vb-wald-loesung.visustruct -`,r_=` +`,o_=` 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; @@ -52802,7 +52802,7 @@ lösung: vb-wald-loesung.visustruct -`,o_=` +`,l_=` 99;111;110;115;116;32;100;111;117;98;108;101;32;73;86;65;32;61;32;48;46;50;51; @@ -52823,7 +52823,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; -`,l_=` +`,u_=` 105;110;116;32;112;105;110;32;61;32;48; @@ -52859,7 +52859,7 @@ lösung: vb-wald-loesung.visustruct -`,u_=` +`,m_=` 99;111;110;115;116;32;105;110;116;32;80;73;78;32;61;32;49;50;51;52; @@ -52895,7 +52895,7 @@ lösung: vb-wald-loesung.visustruct -`,m_=` +`,c_=` 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; @@ -52939,7 +52939,7 @@ lösung: vb-wald-loesung.visustruct -`,c_=` +`,d_=` 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; @@ -52993,7 +52993,7 @@ lösung: vb-wald-loesung.visustruct -`,d_=` +`,h_=` 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; @@ -53020,7 +53020,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; -`,h_=` +`,g_=` 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; @@ -53049,7 +53049,7 @@ lösung: vb-wald-loesung.visustruct -`,g_=` +`,p_=` 105;110;116;32;110;117;109;101;114;111;49;32;61;32;52; @@ -53064,7 +53064,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,p_=` +`,f_=` 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; @@ -53086,7 +53086,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; -`,f_=` +`,x_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;52; @@ -53098,7 +53098,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; -`,x_=` +`,b_=` -1; @@ -53145,7 +53145,7 @@ lösung: vb-wald-loesung.visustruct -`,b_=` +`,v_=` @@ -53182,7 +53182,7 @@ lösung: vb-wald-loesung.visustruct -`,v_=` +`,y_=` 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; @@ -53242,7 +53242,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; -`,y_=` +`,w_=` 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; @@ -53251,7 +53251,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; -`,w_=` +`,z_=` 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; @@ -53270,7 +53270,7 @@ lösung: vb-wald-loesung.visustruct -`,z_=` +`,I_=` 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; @@ -53293,7 +53293,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,I_=` +`,k_=` 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; @@ -53311,7 +53311,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; -`,k_=` +`,S_=` 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; @@ -53329,7 +53329,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;111;109;101; -`,S_=` +`,__=` 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; @@ -53349,7 +53349,7 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,__=` +`,T_=` 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; @@ -53381,7 +53381,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; -`,T_=` +`,O_=` 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; @@ -53429,7 +53429,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; -`,O_=` +`,A_=` 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; @@ -53444,7 +53444,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; -`,A_=` +`,P_=` 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; @@ -53478,7 +53478,7 @@ lösung: vb-wald-loesung.visustruct -`,P_=` +`,j_=` 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; @@ -53496,7 +53496,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; -`,j_=` +`,C_=` 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; @@ -53544,7 +53544,7 @@ lösung: vb-wald-loesung.visustruct -`,C_=` +`,B_=` 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; @@ -53568,7 +53568,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; -`,B_=` +`,D_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53583,7 +53583,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; -`,D_=` +`,Z_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53598,7 +53598,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; -`,Z_=` +`,M_=` 83;116;114;105;110;103;32;110;111;109;101;32;61;32;34;76;117;100;119;105;103;34; @@ -53616,7 +53616,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; -`,M_=` +`,L_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -53631,7 +53631,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,L_=` +`,W_=` 105;110;116;32;110;117;109;101;114;111;32;61;32;50; @@ -53646,7 +53646,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,W_=` +`,E_=` 111;117;116;112;117;116;58;32;110;117;109;101;114;111; @@ -53661,7 +53661,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; -`,E_=` +`,N_=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -53685,7 +53685,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; -`,N_=` +`,F_=` 83;116;114;105;110;103;32;101;115;113;117;101;114;100;97;32;61;32;34;115;117;109;111;34; @@ -53700,7 +53700,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; -`,F_=` +`,J_=` 105;110;116;32;97;32;61;32;53; @@ -53724,7 +53724,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; -`,J_=` +`,R_=` 105;110;116;32;105;100;97;100;101;32;61;32;49;52; @@ -53742,7 +53742,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; -`,R_=` +`,G_=` 105;110;116;32;109;105;110;117;116;111;115;32;61;32;49;51;53; @@ -53757,7 +53757,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; -`,G_=` +`,H_=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;51; @@ -53772,7 +53772,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; -`,H_=` +`,V_=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -53787,7 +53787,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; -`,V_=` +`,Q_=` 105;110;116;32;115;97;108;100;111;32;61;32;50;48; @@ -53802,7 +53802,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; -`,Q_=` +`,q_=` 105;110;116;32;112;114;101;99;111;32;61;32;57; @@ -53817,7 +53817,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; -`,q_=` +`,U_=` 105;110;116;32;99;111;109;112;114;105;109;101;110;116;111;32;61;32;55; @@ -53838,7 +53838,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; -`,U_=` +`,$_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53853,7 +53853,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; -`,$_=` +`,Y_=` 105;110;116;32;115;101;103;117;110;100;111;115;32;61;32;50;48;48; @@ -53862,7 +53862,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; -`,Y_=` +`,X_=` 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; @@ -53871,7 +53871,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; -`,X_=` +`,K_=` 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; @@ -53886,7 +53886,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; -`,K_=` +`,eT=` 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; @@ -53898,7 +53898,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; -`,eT=` +`,tT=` 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; @@ -53910,7 +53910,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; -`,tT=` +`,nT=` 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; @@ -53922,7 +53922,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; -`,nT=` +`,iT=` 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; @@ -53937,7 +53937,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; -`,iT=` +`,aT=` 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; @@ -53958,7 +53958,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; -`,aT=` +`,sT=` 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; @@ -53977,7 +53977,7 @@ lösung: vb-wald-loesung.visustruct -`,sT=` +`,rT=` 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; @@ -53999,7 +53999,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;110;117;109;101;114;111; -`,rT=` +`,oT=` 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; @@ -54018,7 +54018,7 @@ lösung: vb-wald-loesung.visustruct -`,oT=` +`,lT=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -54036,7 +54036,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; -`,lT=` +`,uT=` 105;110;116;32;112;111;110;116;111;115;32;61;32;48; @@ -54054,7 +54054,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; -`,uT=` +`,mT=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -54072,7 +54072,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; -`,mT=` +`,cT=` 105;110;116;32;112;114;101;99;111;32;61;32;56; @@ -54090,7 +54090,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; -`,cT=` +`,dT=` 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; @@ -54112,7 +54112,7 @@ lösung: vb-wald-loesung.visustruct -`,dT=` +`,hT=` 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; @@ -54134,7 +54134,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; -`,hT=` +`,gT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -54153,7 +54153,7 @@ lösung: vb-wald-loesung.visustruct -`,gT=` +`,pT=` 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; @@ -54172,7 +54172,7 @@ lösung: vb-wald-loesung.visustruct -`,pT=` +`,fT=` 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; @@ -54191,7 +54191,7 @@ lösung: vb-wald-loesung.visustruct -`,fT=` +`,xT=` 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; @@ -54210,7 +54210,7 @@ lösung: vb-wald-loesung.visustruct -`,xT=` +`,bT=` 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; @@ -54229,7 +54229,7 @@ lösung: vb-wald-loesung.visustruct -`,bT=` +`,vT=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;97;32;34;78;111;116;97;63;34; @@ -54248,7 +54248,7 @@ lösung: vb-wald-loesung.visustruct -`,vT=` +`,yT=` 105;110;112;117;116;58;32;105;110;116;32;97;110;111;32;34;65;110;111;63;34; @@ -54267,7 +54267,7 @@ lösung: vb-wald-loesung.visustruct -`,yT=` +`,wT=` 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; @@ -54286,7 +54286,7 @@ lösung: vb-wald-loesung.visustruct -`,wT=` +`,zT=` 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; @@ -54315,7 +54315,7 @@ lösung: vb-wald-loesung.visustruct -`,zT=` +`,IT=` 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; @@ -54344,7 +54344,7 @@ lösung: vb-wald-loesung.visustruct -`,IT=` +`,kT=` 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; @@ -54363,7 +54363,7 @@ lösung: vb-wald-loesung.visustruct -`,kT=` +`,ST=` 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; @@ -54382,7 +54382,7 @@ lösung: vb-wald-loesung.visustruct -`,ST=` +`,_T=` 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; @@ -54401,7 +54401,7 @@ lösung: vb-wald-loesung.visustruct -`,_T=` +`,TT=` 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; @@ -54440,7 +54440,7 @@ lösung: vb-wald-loesung.visustruct -`,TT=` +`,OT=` 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; @@ -54487,7 +54487,7 @@ lösung: vb-wald-loesung.visustruct -`,OT=` +`,AT=` 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; @@ -54526,7 +54526,7 @@ lösung: vb-wald-loesung.visustruct -`,AT=` +`,PT=` 80;244;114;32;117;109;97;32;99;104;225;118;101;110;97;32;110;97;32;109;101;115;97; @@ -54534,7 +54534,7 @@ lösung: vb-wald-loesung.visustruct 81;117;101;114;32;97;231;250;99;97;114;63; - + 74;117;110;116;97;114;32;97;231;250;99;97;114; @@ -54547,7 +54547,7 @@ lösung: vb-wald-loesung.visustruct 67;104;225;32;97;105;110;100;97;32;100;101;109;97;115;105;97;100;111;32;113;117;101;110;116;101; - + 69;115;112;101;114;97;114;32;49;32;109;105;110;117;116;111; @@ -54556,7 +54556,7 @@ lösung: vb-wald-loesung.visustruct 66;101;98;101;114;32;111;32;99;104;225; -`,PT=` +`,jT=` 76;101;118;97;110;116;97;114; @@ -54571,7 +54571,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; -`,jT=` +`,CT=` 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; @@ -54592,17 +54592,17 @@ 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; -`,CT=` +`,BT=` 69;115;116;225;32;97;32;99;104;111;118;101;114;63; - + 76;101;118;97;114;32;103;117;97;114;100;97;45;99;104;117;118;97; - + 76;101;118;97;114;32;243;99;117;108;111;115;32;100;101;32;115;111;108; @@ -54611,12 +54611,12 @@ lösung: vb-wald-loesung.visustruct 83;97;105;114; -`,BT=` +`,DT=` 80;114;97;116;111;32;110;227;111;32;118;97;122;105;111; - + 68;97;114;32;117;109;97;32;103;97;114;102;97;100;97; @@ -54625,7 +54625,7 @@ lösung: vb-wald-loesung.visustruct 76;101;118;97;110;116;97;114;32;111;32;112;114;97;116;111; -`,DT=` +`,ZT=` 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; @@ -54645,7 +54645,7 @@ lösung: vb-wald-loesung.visustruct -`,ZT=` +`,MT=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -54665,7 +54665,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; -`,MT=` +`,LT=` 105;110;116;32;110;117;109;101;114;111;32;61;32;51; @@ -54682,7 +54682,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; -`,LT=` +`,WT=` 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; @@ -54708,7 +54708,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; -`,WT=` +`,ET=` 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; @@ -54743,7 +54743,7 @@ lösung: vb-wald-loesung.visustruct -`,ET=` +`,NT=` 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; @@ -54778,7 +54778,7 @@ lösung: vb-wald-loesung.visustruct -`,NT=` +`,FT=` 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; @@ -54807,7 +54807,7 @@ lösung: vb-wald-loesung.visustruct -`,FT=` +`,JT=` 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; @@ -54830,7 +54830,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;112;97;115;115;111;115; -`,JT=` +`,RT=` 105;110;116;32;110;117;109;101;114;111;32;61;32;48; @@ -54847,7 +54847,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; -`,RT=` +`,GT=` 105;110;116;32;105;32;61;32;49;48; @@ -54864,7 +54864,7 @@ lösung: vb-wald-loesung.visustruct -`,GT=` +`,HT=` 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; @@ -54890,7 +54890,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; -`,HT=` +`,VT=` 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; @@ -54916,7 +54916,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; -`,VT=` +`,QT=` 105;110;112;117;116;58;32;105;110;116;32;110;32;34;65;116;233;32;111;110;100;101;63;34; @@ -54936,7 +54936,7 @@ lösung: vb-wald-loesung.visustruct -`,QT=` +`,qT=` 105;110;116;32;110;111;116;97;32;61;32;48; @@ -54953,7 +54953,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; -`,qT=` +`,UT=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -54976,7 +54976,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,UT=` +`,$T=` 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; @@ -54995,7 +54995,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,$T=` +`,YT=` 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; @@ -55014,7 +55014,7 @@ lösung: vb-wald-loesung.visustruct -`,YT=` +`,XT=` 105;110;116;32;105;32;61;32;49; @@ -55027,7 +55027,7 @@ lösung: vb-wald-loesung.visustruct -`,XT=` +`,KT=` 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; @@ -55044,7 +55044,7 @@ lösung: vb-wald-loesung.visustruct -`,KT=` +`,eO=` 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; @@ -55061,7 +55061,7 @@ lösung: vb-wald-loesung.visustruct -`,eO=` +`,tO=` 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; @@ -55078,7 +55078,7 @@ lösung: vb-wald-loesung.visustruct -`,tO=` +`,nO=` 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; @@ -55100,7 +55100,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,nO=` +`,iO=` 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; @@ -55129,7 +55129,7 @@ lösung: vb-wald-loesung.visustruct -`,iO=` +`,aO=` 105;110;116;32;113;117;97;110;116;105;100;97;100;101;32;61;32;48; @@ -55161,7 +55161,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; -`,aO=` +`,sO=` 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; @@ -55193,7 +55193,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; -`,sO=` +`,rO=` 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; @@ -55209,7 +55209,7 @@ lösung: vb-wald-loesung.visustruct -`,rO=` +`,oO=` 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; @@ -55225,7 +55225,7 @@ lösung: vb-wald-loesung.visustruct -`,oO=` +`,lO=` 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; @@ -55241,7 +55241,7 @@ lösung: vb-wald-loesung.visustruct -`,lO=` +`,uO=` 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; @@ -55273,7 +55273,7 @@ lösung: vb-wald-loesung.visustruct -`,uO=` +`,mO=` 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; @@ -55289,7 +55289,7 @@ lösung: vb-wald-loesung.visustruct -`,mO=` +`,cO=` 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; @@ -55304,7 +55304,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; -`,cO=` +`,dO=` 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; @@ -55336,7 +55336,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; -`,dO=` +`,hO=` 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; @@ -55368,7 +55368,7 @@ lösung: vb-wald-loesung.visustruct -`,hO=` +`,gO=` 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; @@ -55397,7 +55397,7 @@ lösung: vb-wald-loesung.visustruct -`,gO=` +`,pO=` 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; @@ -55416,7 +55416,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; -`,pO=` +`,fO=` 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; @@ -55442,7 +55442,7 @@ lösung: vb-wald-loesung.visustruct -`,fO=` +`,xO=` 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; @@ -55493,7 +55493,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; -`,xO=` +`,bO=` 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; @@ -55534,7 +55534,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; -`,bO=` +`,vO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -55557,7 +55557,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; -`,vO=` +`,yO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -55587,7 +55587,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; -`,yO=` +`,wO=` 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; @@ -55602,7 +55602,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; -`,wO=` +`,zO=` 109;111;115;116;114;97;114;66;111;97;115;86;105;110;100;97;115;40;41; @@ -55614,7 +55614,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; -`,zO=` +`,IO=` 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; @@ -55646,7 +55646,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; -`,IO=` +`,kO=` 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; @@ -55678,7 +55678,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; -`,kO=` +`,SO=` 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; @@ -55700,7 +55700,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; -`,SO=` +`,_O=` 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; @@ -55712,7 +55712,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; -`,_O=` +`,TO=` 105;110;116;32;114;101;115;117;108;116;97;100;111;32;61;32;120;32;42;32;120; @@ -55721,7 +55721,7 @@ lösung: vb-wald-loesung.visustruct 114;101;116;117;114;110;32;114;101;115;117;108;116;97;100;111; -`,TO=` +`,OO=` 109;111;115;116;114;97;114;84;105;116;117;108;111;40;41; @@ -55733,7 +55733,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; -`,OO=` +`,AO=` 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; @@ -55742,7 +55742,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; -`,AO=` +`,PO=` 109;111;115;116;114;97;114;83;111;109;97;40;51;44;32;52;41; @@ -55754,7 +55754,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; -`,PO=` +`,jO=` 105;110;116;32;115;111;109;97;32;61;32;97;32;43;32;98; @@ -55763,7 +55763,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; -`,jO=` +`,CO=` 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; @@ -55786,7 +55786,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;33;34; -`,CO=` +`,BO=` 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; @@ -55809,7 +55809,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;74;225;34; -`,BO=` +`,DO=` 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; @@ -55831,7 +55831,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; -`,DO=` +`,ZO=` 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; @@ -55853,7 +55853,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; -`,ZO=` +`,MO=` 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; @@ -55882,7 +55882,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; -`,MO=` +`,LO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -55905,7 +55905,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,LO=` +`,WO=` 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; @@ -55927,7 +55927,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,WO=` +`,EO=` 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; @@ -55949,7 +55949,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;115;111;109;97; -`,EO=` +`,NO=` 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; @@ -55981,7 +55981,7 @@ lösung: vb-wald-loesung.visustruct -`,NO=` +`,FO=` 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; @@ -56003,7 +56003,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;102;97;116;111;114;105;97;108; -`,FO=` +`,JO=` 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; @@ -56035,13 +56035,13 @@ lösung: vb-wald-loesung.visustruct -`,JO=` +`,RO=` 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; -`,RO=` +`,GO=` 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; @@ -56053,7 +56053,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; -`,GO=` +`,HO=` 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; @@ -56065,7 +56065,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; -`,HO=` +`,VO=` 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; @@ -56084,7 +56084,7 @@ lösung: vb-wald-loesung.visustruct -`,VO=` +`,QO=` 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; @@ -56113,7 +56113,7 @@ lösung: vb-wald-loesung.visustruct -`,QO=` +`,qO=` 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; @@ -56133,7 +56133,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;34;70;105;109;34; -`,qO=` +`,UO=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -56166,7 +56166,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; -`,UO=` +`,$O=` 105;110;116;32;116;101;110;116;97;116;105;118;97;115;32;61;32;48; @@ -56199,7 +56199,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; -`,$O=` +`,YO=` 105;110;116;32;115;111;109;97;32;61;32;48; @@ -56241,7 +56241,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; -`,YO=` +`,XO=` 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; @@ -56263,7 +56263,7 @@ lösung: vb-wald-loesung.visustruct -`,XO=` +`,KO=` 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; @@ -56279,7 +56279,7 @@ lösung: vb-wald-loesung.visustruct -`,KO=` +`,eA=` 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; @@ -56318,7 +56318,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; -`,eA=` +`,tA=` 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; @@ -56357,7 +56357,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; -`,tA=` +`,nA=` 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; @@ -56392,7 +56392,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; -`,nA=` +`,iA=` 111;117;116;112;117;116;58;32;34;66;111;109;32;100;105;97;34; @@ -56401,13 +56401,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; -`,iA=` +`,aA=` 111;117;116;112;117;116;58;32;34;79;108;225;32;77;117;110;100;111;34; -`,aA=` +`,sA=` 111;117;116;112;117;116;58;32;34;79;108;225;34; @@ -56416,7 +56416,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; -`,sA=` +`,rA=` 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; @@ -56457,7 +56457,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; -`,rA=` +`,oA=` 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; @@ -56466,7 +56466,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; -`,oA=` +`,lA=` 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; @@ -56492,13 +56492,13 @@ lösung: vb-wald-loesung.visustruct 102;105;99;104;101;105;114;111;46;99;108;111;115;101;40;41; -`,lA=` +`,uA=` 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; -`,uA=` +`,mA=` 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; @@ -56537,7 +56537,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; -`,mA=` +`,cA=` 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; @@ -56546,7 +56546,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; -`,cA=` +`,dA=` 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; @@ -56581,7 +56581,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; -`,dA=` +`,hA=` 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; @@ -56590,7 +56590,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; -`,hA=` +`,gA=` 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; @@ -56644,7 +56644,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; -`,gA=` +`,pA=` 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; @@ -56653,7 +56653,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; -`,pA=` +`,fA=` 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; @@ -56694,7 +56694,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; -`,fA=` +`,xA=` 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; @@ -56703,7 +56703,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; -`,xA=` +`,bA=` 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; @@ -56742,7 +56742,7 @@ lösung: vb-wald-loesung.visustruct 108;101;105;116;111;114;46;99;108;111;115;101;40;41; -`,bA=` +`,vA=` 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; @@ -56751,7 +56751,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; -`,vA=` +`,yA=` 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; @@ -56801,7 +56801,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; -`,yA=` +`,wA=` 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; @@ -56819,7 +56819,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,wA=` +`,zA=` 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; @@ -56872,7 +56872,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; -`,zA=` +`,IA=` 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; @@ -56893,7 +56893,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,IA=` +`,kA=` 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; @@ -56937,7 +56937,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; -`,kA=` +`,SA=` 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; @@ -56958,7 +56958,7 @@ lösung: vb-wald-loesung.visustruct 115;97;105;100;97;46;99;108;111;115;101;40;41; -`,SA=` +`,_A=` 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; @@ -56970,7 +56970,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; -`,_A=` +`,TA=` 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; @@ -56982,7 +56982,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; -`,TA=` +`,OA=` 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; @@ -57006,7 +57006,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,OA=` +`,AA=` 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; @@ -57027,7 +57027,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,AA=` +`,PA=` 105;110;116;32;97;32;61;32;51; @@ -57051,7 +57051,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; -`,PA=` +`,jA=` 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; @@ -57110,7 +57110,7 @@ lösung: vb-wald-loesung.visustruct -`,jA=` +`,CA=` 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; @@ -57169,7 +57169,7 @@ lösung: vb-wald-loesung.visustruct -`,CA=` +`,BA=` 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; @@ -57243,7 +57243,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; -`,BA=` +`,DA=` 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; @@ -57292,7 +57292,7 @@ lösung: vb-wald-loesung.visustruct -`,DA=` +`,ZA=` 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; @@ -57341,7 +57341,7 @@ lösung: vb-wald-loesung.visustruct -`,ZA=` +`,MA=` 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; @@ -57399,7 +57399,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; -`,MA=` +`,LA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -57418,7 +57418,7 @@ lösung: vb-wald-loesung.visustruct -`,LA=` +`,WA=` 105;110;116;91;93;32;112;111;110;116;111;115;32;61;32;123;51;44;32;53;44;32;56;125; @@ -57437,7 +57437,7 @@ lösung: vb-wald-loesung.visustruct -`,WA=` +`,EA=` 105;110;116;32;105;32;61;32;48; @@ -57450,7 +57450,7 @@ lösung: vb-wald-loesung.visustruct -`,EA=` +`,NA=` 105;110;116;32;110;117;109;101;114;111;32;61;32;53; @@ -57474,7 +57474,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; -`,NA=` +`,FA=` 105;110;116;32;105;32;61;32;48; @@ -57487,7 +57487,7 @@ lösung: vb-wald-loesung.visustruct -`,FA=` +`,JA=` 120;32;61;32;120;32;42;32;50; @@ -57496,7 +57496,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; -`,JA=` +`,RA=` 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; @@ -57508,7 +57508,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; -`,RA=` +`,GA=` 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; @@ -57547,7 +57547,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,GA=` +`,HA=` 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; @@ -57569,7 +57569,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;105;110;118;101;114;116;105;100;97; -`,HA=` +`,VA=` 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; @@ -57588,7 +57588,7 @@ lösung: vb-wald-loesung.visustruct -`,VA=` +`,QA=` 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; @@ -57600,7 +57600,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; -`,QA=` +`,qA=` 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; @@ -57632,7 +57632,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; -`,qA=` +`,UA=` 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; @@ -57656,7 +57656,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; -`,UA=` +`,$A=` 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; @@ -57668,7 +57668,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; -`,$A=` +`,YA=` 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; @@ -57680,7 +57680,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; -`,YA=` +`,XA=` 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; @@ -57704,7 +57704,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,XA=` +`,KA=` 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; @@ -57725,7 +57725,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,KA=` +`,eP=` 105;110;116;32;97;32;61;32;51; @@ -57749,7 +57749,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; -`,eP=` +`,tP=` 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; @@ -57808,7 +57808,7 @@ lösung: vb-wald-loesung.visustruct -`,tP=` +`,nP=` 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; @@ -57867,7 +57867,7 @@ lösung: vb-wald-loesung.visustruct -`,nP=` +`,iP=` 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; @@ -57941,7 +57941,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; -`,iP=` +`,aP=` 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; @@ -57990,7 +57990,7 @@ lösung: vb-wald-loesung.visustruct -`,aP=` +`,sP=` 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; @@ -58039,7 +58039,7 @@ lösung: vb-wald-loesung.visustruct -`,sP=` +`,rP=` 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; @@ -58097,7 +58097,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; -`,rP=` +`,oP=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -58116,7 +58116,7 @@ lösung: vb-wald-loesung.visustruct -`,oP=` +`,lP=` 105;110;116;91;93;32;112;117;110;107;116;101;32;61;32;123;51;44;32;53;44;32;56;125; @@ -58135,7 +58135,7 @@ lösung: vb-wald-loesung.visustruct -`,lP=` +`,uP=` 105;110;116;32;105;32;61;32;48; @@ -58148,7 +58148,7 @@ lösung: vb-wald-loesung.visustruct -`,uP=` +`,mP=` 105;110;116;32;122;97;104;108;32;61;32;53; @@ -58172,7 +58172,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; -`,mP=` +`,cP=` 105;110;116;32;105;32;61;32;48; @@ -58185,7 +58185,7 @@ lösung: vb-wald-loesung.visustruct -`,cP=` +`,dP=` 120;32;61;32;120;32;42;32;50; @@ -58194,7 +58194,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; -`,dP=` +`,hP=` 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; @@ -58203,7 +58203,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; -`,hP=` +`,gP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;49;48; @@ -58229,7 +58229,7 @@ lösung: vb-wald-loesung.visustruct -`,gP=` +`,pP=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;66;40;41; @@ -58256,7 +58256,7 @@ lösung: vb-wald-loesung.visustruct -`,pP=` +`,fP=` 109;98;111;116;46;115;101;116;76;101;100;40;50;53;53;44;32;48;44;32;48;41; @@ -58274,7 +58274,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; -`,fP=` +`,xP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -58304,7 +58304,7 @@ lösung: vb-wald-loesung.visustruct -`,xP=` +`,bP=` 109;98;111;116;46;115;104;111;119;84;101;120;116;40;34;72;97;108;108;111;33;34;41; @@ -58316,7 +58316,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; -`,bP=` +`,vP=` 105;110;116;32;122;97;104;108;32;61;32;48; @@ -58368,7 +58368,7 @@ lösung: vb-wald-loesung.visustruct -`,vP=` +`,yP=` 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; @@ -58379,7 +58379,7 @@ lösung: vb-wald-loesung.visustruct -`,yP=` +`,wP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -58390,7 +58390,7 @@ lösung: vb-wald-loesung.visustruct -`,wP=` +`,zP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -58401,7 +58401,7 @@ lösung: vb-wald-loesung.visustruct -`,zP=` +`,IP=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;86;105;115;117;66;111;116;34; @@ -58420,7 +58420,7 @@ lösung: vb-wald-loesung.visustruct -`,IP=` +`,kP=` 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; @@ -58432,7 +58432,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; -`,kP=` +`,SP=` 105;110;116;32;105;32;61;32;48; @@ -58448,7 +58448,7 @@ lösung: vb-wald-loesung.visustruct -`,SP=` +`,_P=` 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; @@ -58476,7 +58476,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; -`,_P=` +`,TP=` 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; @@ -58492,7 +58492,7 @@ lösung: vb-wald-loesung.visustruct -`,TP=` +`,OP=` 109;98;111;116;46;103;101;116;67;111;108;111;114;40;41; @@ -58518,7 +58518,7 @@ lösung: vb-wald-loesung.visustruct -`,OP=` +`,AP=` 109;98;111;116;46;100;114;105;118;101;40;53;48;44;32;53;48;41; @@ -58535,7 +58535,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,AP=` +`,PP=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -58553,7 +58553,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;41; -`,PP=` +`,jP=` 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; @@ -58589,7 +58589,7 @@ lösung: vb-wald-loesung.visustruct -`,jP=` +`,CP=` 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; @@ -58608,7 +58608,7 @@ lösung: vb-wald-loesung.visustruct -`,CP=` +`,BP=` 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; @@ -58632,7 +58632,7 @@ lösung: vb-wald-loesung.visustruct -`,BP=` +`,DP=` 105;110;116;32;105;32;61;32;48; @@ -58654,7 +58654,7 @@ lösung: vb-wald-loesung.visustruct -`,DP=` +`,ZP=` 105;110;116;32;105;32;61;32;51; @@ -58673,7 +58673,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; -`,ZP=` +`,MP=` 105;110;116;32;105;32;61;32;49; @@ -58686,7 +58686,7 @@ lösung: vb-wald-loesung.visustruct -`,MP=` +`,LP=` 105;110;116;32;105;32;61;32;48; @@ -58719,7 +58719,7 @@ lösung: vb-wald-loesung.visustruct -`,LP=` +`,WP=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;62;32;54;48; @@ -58735,7 +58735,7 @@ lösung: vb-wald-loesung.visustruct -`,WP=` +`,EP=` 105;110;116;32;105;32;61;32;48; @@ -58754,7 +58754,7 @@ lösung: vb-wald-loesung.visustruct -`,EP=` +`,NP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -58798,7 +58798,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,NP=` +`,FP=` 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; @@ -58817,7 +58817,7 @@ lösung: vb-wald-loesung.visustruct -`,FP=` +`,JP=` 105;110;116;32;115;99;104;114;105;116;116;101;32;61;32;48; @@ -58847,7 +58847,7 @@ lösung: vb-wald-loesung.visustruct -`,JP=` +`,RP=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -58875,7 +58875,7 @@ lösung: vb-wald-loesung.visustruct -`,RP=` +`,GP=` 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; @@ -58884,7 +58884,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; -`,GP=` +`,HP=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;62;32;49;53; @@ -58898,7 +58898,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; -`,HP=` +`,VP=` 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; @@ -58914,7 +58914,7 @@ lösung: vb-wald-loesung.visustruct -`,VP=` +`,QP=` 109;98;111;116;46;103;101;116;76;111;117;100;110;101;115;115;40;41;32;60;32;53;48; @@ -58928,7 +58928,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,QP=` +`,qP=` 105;110;116;32;105;32;61;32;48; @@ -58963,7 +58963,7 @@ lösung: vb-wald-loesung.visustruct -`,qP=` +`,UP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -58997,7 +58997,7 @@ lösung: vb-wald-loesung.visustruct -`,UP=` +`,$P=` 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; @@ -59041,7 +59041,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,$P=` +`,YP=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41; @@ -59067,7 +59067,7 @@ lösung: vb-wald-loesung.visustruct -`,YP=` +`,XP=` 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; @@ -59083,7 +59083,7 @@ lösung: vb-wald-loesung.visustruct -`,XP=` +`,KP=` 105;110;116;32;105;32;61;32;48; @@ -59149,7 +59149,7 @@ lösung: vb-wald-loesung.visustruct -`,KP=` +`,ej=` 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; @@ -59165,7 +59165,7 @@ lösung: vb-wald-loesung.visustruct -`,ej=` +`,tj=` 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; @@ -59182,7 +59182,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; -`,tj=` +`,nj=` 105;110;112;117;116;58;32;105;110;116;32;110;111;116;101; @@ -59211,7 +59211,7 @@ lösung: vb-wald-loesung.visustruct -`,nj=` +`,ij=` 105;110;116;32;97;32;61;32;113;117;97;100;114;97;116;122;97;104;108;40;51;41; @@ -59226,13 +59226,13 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;98; -`,ij=` +`,aj=` 114;101;116;117;114;110;32;120;32;42;32;120; -`,aj=` +`,sj=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;76;117;100;119;105;103;34; @@ -59254,7 +59254,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; -`,sj=` +`,rj=` 105;110;116;32;108;97;101;110;103;101;32;61;32;54;48; @@ -59269,7 +59269,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;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; -`,rj=` +`,oj=` 105;110;116;91;93;32;110;111;116;101;110;32;61;32;123;50;44;32;49;44;32;51;44;32;50;125; @@ -59294,7 +59294,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;110;111;116;101;110;46;108;101;110;103;116;104; -`,oj=` +`,lj=` 109;98;111;116;46;102;111;114;119;97;114;100;40;41; @@ -59369,7 +59369,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,lj=` +`,uj=` 113;117;97;100;114;97;116;40;51;48;41; @@ -59378,7 +59378,7 @@ lösung: vb-wald-loesung.visustruct 113;117;97;100;114;97;116;40;53;48;41; -`,uj=` +`,mj=` 105;110;116;32;105;32;61;32;48; @@ -59433,7 +59433,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;116;117;114;110;82;105;103;104;116;40;41; -`,mj=` +`,cj=` 105;110;116;32;105;32;61;32;48; @@ -59449,7 +59449,7 @@ lösung: vb-wald-loesung.visustruct -`,cj=` +`,dj=` 105;110;116;32;105;32;61;32;48; @@ -59472,7 +59472,7 @@ lösung: vb-wald-loesung.visustruct -`,dj=` +`,hj=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -59486,7 +59486,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; -`,hj=` +`,gj=` 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; @@ -59502,7 +59502,7 @@ lösung: vb-wald-loesung.visustruct -`,gj=` +`,pj=` 105;110;116;32;105;32;61;32;48; @@ -59554,7 +59554,7 @@ lösung: vb-wald-loesung.visustruct -`,pj=` +`,fj=` 105;110;116;32;105;32;61;32;49; @@ -59570,7 +59570,7 @@ lösung: vb-wald-loesung.visustruct -`,fj=` +`,xj=` 33;109;98;111;116;46;105;115;66;117;116;116;111;110;65;40;41; @@ -59584,7 +59584,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;102;111;114;119;97;114;100;40;51;48;41; -`,xj=` +`,bj=` 109;98;111;116;46;112;108;97;121;84;111;110;101;40;50;54;50;44;32;51;48;48;41; @@ -59602,7 +59602,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; -`,bj=` +`,vj=` 105;110;116;32;105;32;61;32;48; @@ -59624,7 +59624,7 @@ lösung: vb-wald-loesung.visustruct -`,vj=` +`,yj=` 105;110;116;32;108;105;110;107;115;32;61;32;57;57; @@ -59656,7 +59656,7 @@ lösung: vb-wald-loesung.visustruct -`,yj=` +`,wj=` 105;110;116;32;115;101;105;116;101;32;61;32;51;48; @@ -59675,7 +59675,7 @@ lösung: vb-wald-loesung.visustruct -`,wj=` +`,zj=` 105;110;116;32;105;32;61;32;48; @@ -59708,7 +59708,7 @@ lösung: vb-wald-loesung.visustruct -`,zj=` +`,Ij=` 109;98;111;116;46;103;101;116;76;105;110;101;40;41;32;61;61;32;48; @@ -59747,7 +59747,7 @@ lösung: vb-wald-loesung.visustruct -`,Ij=` +`,kj=` 109;98;111;116;46;103;101;116;68;105;115;116;97;110;99;101;40;41;32;60;32;50;48; @@ -59763,7 +59763,7 @@ lösung: vb-wald-loesung.visustruct -`,kj=` +`,Sj=` 109;98;111;116;46;114;101;115;101;116;84;105;109;101;114;40;41; @@ -59783,7 +59783,7 @@ lösung: vb-wald-loesung.visustruct 109;98;111;116;46;115;116;111;112;40;41; -`,Sj=` +`,_j=` 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; @@ -59795,7 +59795,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; -`,_j=` +`,Tj=` 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; @@ -59834,7 +59834,7 @@ lösung: vb-wald-loesung.visustruct 111;117;116;112;117;116;58;32;116;101;120;116; -`,Tj=` +`,Oj=` 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; @@ -59856,7 +59856,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; -`,Oj=` +`,Aj=` 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; @@ -59875,7 +59875,7 @@ lösung: vb-wald-loesung.visustruct -`,Aj=` +`,Pj=` 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; @@ -59887,7 +59887,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; -`,Pj=` +`,jj=` 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; @@ -59919,7 +59919,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; -`,jj=` +`,Cj=` 83;116;114;105;110;103;32;119;111;114;116;32;61;32;34;71;101;105;223;98;111;99;107;34; @@ -59943,14 +59943,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; -`,Cj=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. +`,Bj=`// Labyrinth mit Ausgängen (nach Kara): jede Wandreihe hat genau eine Lücke, immer weiter rechts. Ein Zeichen = 30 cm. raster: 3 .......Z #####.## ........ ##.##### >....... -`,Bj=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. +`,Dj=`// Labyrinth mit Ausgängen, drei Reihen. Ein Zeichen = 30 cm. raster: 3 ........Z ######.## @@ -59959,20 +59959,20 @@ raster: 3 ......... .######## >........ -`,Dj=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. +`,Zj=`// Um die Ecke (Sequenz im Kurs, Lektion 5): ein Zeichen = 30 cm. raster: 3 Z.... ###.. ..... ..### ^.... -`,Zj=`// Fahre bis Rot: kurzer Weg +`,Mj=`// Fahre bis Rot: kurzer Weg ..... ..r.. ..... ..... ..^.. -`,Mj=`// Fahre bis Rot: erst kommt ein grünes Feld +`,Lj=`// Fahre bis Rot: erst kommt ein grünes Feld ..... ..r.. ..... @@ -59981,21 +59981,21 @@ Z.... ..... ..... ..^.. -`,Lj=`// Bis Blau, bei Grün piepen +`,Wj=`// Bis Blau, bei Grün piepen ..... ..b.. ..... ..g.. ..... ..^.. -`,Wj=`// Bis Blau, ohne grünes Feld +`,Ej=`// Bis Blau, ohne grünes Feld ..... ..b.. ..... ..... ..... ..^.. -`,Ej=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. +`,Nj=`// Hindernis ausweichen: ein Klotz im Weg, das rote Feld liegt dahinter. ......... .....r... .....o... @@ -60006,7 +60006,7 @@ Z.... ......... ......... ..^...... -`,Nj=`// Hindernis ausweichen: zwei Klötze im Weg. +`,Fj=`// Hindernis ausweichen: zwei Klötze im Weg. ......... .......r. .......o. @@ -60021,7 +60021,7 @@ Z.... ......... ......... .^....... -`,Fj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. +`,Jj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben links. ........... .Z......... ........... @@ -60033,7 +60033,7 @@ Z.... ........... .........<. ........... -`,Jj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. +`,Rj=`// Labyrinth: Gänge 30 cm breit, Wände 10 cm dick. Ziel oben rechts. ........... .........Z. ........... @@ -60045,7 +60045,7 @@ Z.... ........... .>......... ........... -`,Rj=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. +`,Gj=`// Linienfolger: Die Linie biegt nach rechts ab und endet vor der Wand. ######### ......... ......... @@ -60060,7 +60060,7 @@ Z.... ......... ..^...... linie: 2,12 2,8 4,5 4,0.6 -`,Gj=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. +`,Hj=`// Linienfolger: Die Linie biegt nach links ab und endet vor der Wand. ######### ......... ......... @@ -60075,7 +60075,7 @@ linie: 2,12 2,8 4,5 4,0.6 ......... ......^.. linie: 6,12 6,8 4,5 4,0.6 -`,Hj=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. +`,Vj=`// Linienfolger mit Stopp: Am Ende der Linie liegt ein rotes Feld. ......... .....r... .....o... @@ -60089,7 +60089,7 @@ linie: 6,12 6,8 4,5 4,0.6 ......... ..^...... linie: 2,11 2,8 5,4 5,1.5 -`,Vj=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. +`,Qj=`// Linienfolger mit Stopp: Die Linie schlängelt sich zum roten Feld. ........... ...r....... ...o....... @@ -60105,7 +60105,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 -`,Qj=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. +`,qj=`// Einparken: rechts parken Autos (Klötze), die blaue Markierung zeigt die Lücke. #....#### #....#### #....#### @@ -60118,7 +60118,7 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,qj=`// Einparken: Die Lücke liegt weiter vorn. +`,Uj=`// Einparken: Die Lücke liegt weiter vorn. #....#### #..b....# #.....o.# @@ -60131,14 +60131,14 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 #....#### #....#### #..^.#### -`,Uj=`// Bis zur Linie: der schwarze Rand ist nah +`,$j=`// Bis zur Linie: der schwarze Rand ist nah ..... ===== ..... ..... ..^.. ..... -`,$j=`// Bis zur Linie: der schwarze Rand ist weiter weg +`,Yj=`// Bis zur Linie: der schwarze Rand ist weiter weg ..... ===== ..... @@ -60148,17 +60148,17 @@ linie: 7,13 7,10 5,8 5,7 3,5 3,1.5 ..... ..^.. ..... -`,Yj=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. +`,Xj=`// Slalom: ein Zeichen = 30 cm. Vier Pylonen, abwechselnd oben und unten herum, Ziel am Ende. raster: 3 ......... >#.#.#.#Z ......... -`,Xj=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. +`,Kj=`// Tunnelsucher (nach Kara): Halt im ersten Feld mit Wand links UND rechts (hellgrün). Ein Zeichen = 30 cm. raster: 3 ..#..###. >....o... ....##### -`,Kj=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. +`,eC=`// Tunnelsucher, nach oben. Ein Zeichen = 30 cm. raster: 3 .#.#. .#o#. @@ -60166,12 +60166,12 @@ raster: 3 .#... ..... ..^.. -`,eC=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. +`,tC=`// Kleeblatt im Wald (nach Kara): Bäume liegen auf dem Weg zum Ziel, nie zwei nebeneinander. Ein Zeichen = 30 cm. raster: 3 .......... >..#.#..#Z .......... -`,tC=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. +`,nC=`// Kleeblatt im Wald, nach oben. Ein Zeichen = 30 cm. raster: 3 .Z. .#. @@ -60180,7 +60180,7 @@ raster: 3 ... ... .^. -`,nC=`// Wand vorn? Vor dem mBot2 ist viel Platz. +`,iC=`// Wand vorn? Vor dem mBot2 ist viel Platz. ##### ..... ..... @@ -60190,14 +60190,14 @@ raster: 3 ..... ..^.. ..... -`,iC=`// Bis zur Wand: kurzer Weg +`,aC=`// Bis zur Wand: kurzer Weg ##### ..... ..Z.. ..... ..... ..^.. -`,aC=`// Bis zur Wand: langer Weg +`,sC=`// Bis zur Wand: langer Weg ##### ..... ..Z.. @@ -60213,7 +60213,7 @@ raster: 3 ..... ..... ..^.. -`,sC=`// Bis zur Wand: mittlerer Weg +`,rC=`// Bis zur Wand: mittlerer Weg ##### ..... ..Z.. @@ -60224,26 +60224,26 @@ raster: 3 ..... ..... ..^.. -`,rC=`// Wand vorn? Die Wand steht direkt vor dem mBot2. +`,oC=`// Wand vorn? Die Wand steht direkt vor dem mBot2. ##### ..... ..^.. ..... -`,oC=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? +`,lC=`// Zwei Sekunden mit halber Kraft: Wo bleibt er stehen? ..... ..... ..... ..o.. ..... ..^.. -`,lC=`// Fahre bis zum Ziel: kurzer Weg, keine Wand +`,uC=`// Fahre bis zum Ziel: kurzer Weg, keine Wand ..... ..Z.. ..... ..... ..^.. ..... -`,uC=`// Fahre bis zum Ziel: langer Weg, keine Wand +`,mC=`// Fahre bis zum Ziel: langer Weg, keine Wand ..... ..Z.. ..... @@ -60256,37 +60256,37 @@ raster: 3 ..... ..^.. ..... -`,mC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,cC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,dC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,hC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,gC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,pC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,fC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,xC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,bC="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==",vC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",_C="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==",TC="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=",OC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,AC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,PC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,jC="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==",CC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,BC="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==",DC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,ZC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,MC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,LC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,WC="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==",EC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",JC="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",RC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",GC="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=",HC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",QC="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",qC="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",UC=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,$C=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,YC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,XC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,KC="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==",eB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",iB="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==",aB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",lB="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=",uB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,mB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,cB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,dB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,hB="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=",gB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,pB="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",fB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,xB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,bB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,vB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,yB="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",wB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,zB="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",IB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function kB(i){const e=[];for(const t of i.replace(/\r\n/g,` +`,cC=""+new URL("aufgabe-mehrwertsteuer-C-TFTrWz.svg",import.meta.url).href,dC=""+new URL("ben-shneiderman-Cev5hrqS.jpg",import.meta.url).href,hC=""+new URL("caesar-ascii-Bix93F5i.svg",import.meta.url).href,gC=""+new URL("caesar-scheibe-CMRPZI6Y.svg",import.meta.url).href,pC=""+new URL("caesar-verschiebung-DIR-lDbs.svg",import.meta.url).href,fC=""+new URL("aufgabe-mehrwertsteuer-CnrZ00ny.svg",import.meta.url).href,xC=""+new URL("kino-saal-C8zaJk4X.svg",import.meta.url).href,bC=""+new URL("kino-schleifen-D7sfo9iK.svg",import.meta.url).href,vC="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==",yC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V2hlcmUgZG9lcyB0aGUgZWxlbWVudCBsYW5kPzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij50b3AgaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIxMTUiIHk9Ijk3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMTU4MDNkIj5ib3R0b20gaGFsZjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+aW4gZnJvbnQ8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZ29lcyA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YWZ0ZXI8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjQwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjE2Ij7DuDwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjE1NyI+4oaSIDx0c3BhbiBmb250LXdlaWdodD0iNjAwIj5yZXBsYWNlczwvdHNwYW4+IGl0PC90ZXh0Pgo8L3N2Zz4K",wC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWdlID0gMTQ8L3RleHQ+CiAgPHBhdGggZD0iTTEzMCA3MCBMMTcwIDUwIEwzMDAgNTAgTDI2MCA3MCBaIiBmaWxsPSIjYzk4YTNjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE4MCIgeT0iMzQiIHdpZHRoPSI0NCIgaGVpZ2h0PSI1MCIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KICA8dGV4dCB4PSIyMDIiIHk9IjYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iNzAwIj4xNDwvdGV4dD4KICA8cmVjdCB4PSIxMzAiIHk9IjcwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2U5Yjg3MiIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cGF0aCBkPSJNMjYwIDcwIEwzMDAgNTAgTDMwMCAxNTAgTDI2MCAxNzAgWiIgZmlsbD0iI2Q0OWE0YyIgc3Ryb2tlPSIjOGE1YTFmIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8cmVjdCB4PSIxNTAiIHk9IjEwMCIgd2lkdGg9IjkwIiBoZWlnaHQ9IjMwIiByeD0iNCIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjOGE1YTFmIi8+CiAgPHRleHQgeD0iMTk1IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmFnZTwvdGV4dD4KICA8cmVjdCB4PSIxMzgiIHk9IjE0MiIgd2lkdGg9IjM0IiBoZWlnaHQ9IjIwIiByeD0iMTAiIGZpbGw9IiMwMDdhZmYiLz4KICA8dGV4dCB4PSIxNTUiIHk9IjE1NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2ZmZmZmZiIgZm9udC13ZWlnaHQ9IjYwMCI+aW50PC90ZXh0PgogIDxnIHN0cm9rZT0iIzZlNmU3MyI+CiAgICA8bGluZSB4MT0iMzEwIiB5MT0iNDgiIHgyPSIyMjYiIHkyPSI1MiIvPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjExNSIgeDI9IjI0MiIgeTI9IjExNSIvPgogICAgPGxpbmUgeDE9IjgwIiB5MT0iMTUyIiB4Mj0iMTM0IiB5Mj0iMTUyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjMxNiIgeT0iNTIiPlZhbHVlPC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0YSB0eXBlPC90ZXh0PgogIDx0ZXh0IHg9IjIwMCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgbmFtZSBnZXRzIHlvdSB0byB0aGUgdmFsdWUuPC90ZXh0Pgo8L3N2Zz4K",zC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9pbnRzPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCB3b3JrIG91dCB0aGUgcmlnaHQ6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIHN0b3JlIHRoZSByZXN1bHQgb24gdGhlIGxlZnQ8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9pbnRzIGJlZm9yZTogPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiPjEwPC90c3Bhbj4gICDihpIgICBwb2ludHMgYWZ0ZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",IC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjYwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjYwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiPgogICAgPHBhdGggZD0iTTQwIDExMCBMNDggMTgwIEwxMDIgMTgwIEwxMTAgMTEwIi8+CiAgICA8cGF0aCBkPSJNMTY1IDExMCBMMTczIDE4MCBMMjI3IDE4MCBMMjM1IDExMCIvPgogICAgPHBhdGggZD0iTTI5MCAxMTAgTDI5OCAxODAgTDM1MiAxODAgTDM2MCAxMTAiLz4KICA8L2c+CiAgPHBhdGggZD0iTTQ0IDEzNSBMNDggMTgwIEwxMDIgMTgwIEwxMDYgMTM1IFoiIGZpbGw9IiNmZGJhNzQiLz4KICA8cGF0aCBkPSJNMjk0IDEzNSBMMjk4IDE4MCBMMzUyIDE4MCBMMzU2IDEzNSBaIiBmaWxsPSIjOTNjNWZkIi8+CiAgPHRleHQgeD0iNzUiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+bGVmdDwvdGV4dD4KICA8dGV4dCB4PSI3NSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5qdWljZTwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+dGVtcDwvdGV4dD4KICA8dGV4dCB4PSIyMDAiIHk9IjIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+ZW1wdHk8L3RleHQ+CiAgPHRleHQgeD0iMzI1IiB5PSIyMDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnJpZ2h0PC90ZXh0PgogIDx0ZXh0IHg9IjMyNSIgeT0iMjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53YXRlcjwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxwYXRoIGQ9Ik04OCAxMDQgQzExMCA3MCwgMTYwIDcwLCAxODYgMTA0Ii8+CiAgICA8cGF0aCBkPSJNMzE4IDEwNCBDMjcwIDE1LCAxMzAgMTUsIDgyIDEwNCIvPgogICAgPHBhdGggZD0iTTIxNCAxMDQgQzI0MCA3MCwgMjkwIDcwLCAzMTIgMTA0Ii8+CiAgPC9nPgogIDxnIGZvbnQtd2VpZ2h0PSI3MDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPGNpcmNsZSBjeD0iMTM3IiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIxMzciIHk9Ijg1Ij4xPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjAwIiBjeT0iMzgiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyMDAiIHk9IjQzIj4yPC90ZXh0PgogICAgPGNpcmNsZSBjeD0iMjYzIiBjeT0iODAiIHI9IjExIiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiMxYzFjMWUiLz48dGV4dCB4PSIyNjMiIHk9Ijg1Ij4zPC90ZXh0PgogIDwvZz4KICA8ZyB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBNZW5sbywgQ29uc29sYXMsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiI+CiAgICA8dGV4dCB4PSI3MCIgeT0iMjQ3Ij4xOiB0ZW1wID0gbGVmdDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMjQ3Ij4yOiBsZWZ0ID0gcmlnaHQ8L3RleHQ+CiAgICA8dGV4dCB4PSIzMzAiIHk9IjI0NyI+MzogcmlnaHQgPSB0ZW1wPC90ZXh0PgogIDwvZz4KPC9zdmc+Cg==",kC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dmFsaWQ8L3RleHQ+CiAgPHRleHQgeD0iNDAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnZhbGlkPC90ZXh0Pjx0ZXh0IHg9IjM2MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludmFsaWQ8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPmdyYWRlICZndDs9IDEgJmFtcDsmYW1wOyBncmFkZSAmbHQ7PSA2PC90ZXh0PgogICAgPHRleHQgeD0iMjAwIiB5PSIxNDIiIGZpbGw9IiNiOTFjMWMiPmdyYWRlICZsdDsgMSB8fCBncmFkZSAmZ3Q7IDY8L3RleHQ+CiAgPC9nPgo8L3N2Zz4K",SC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Ib3cgdGhlIHdoaWxlIGxvb3AgcnVuczwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjQ0IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iMjAiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI2OSIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGNoZWNrIHRoZSBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgcnVuIHRoZSBpbnNpZGU8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5iYWNrPC90ZXh0PgogIDx0ZXh0IHg9IjM4IiB5PSIxMjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPnRvIHRoZSB0b3A8L3RleHQ+CiAgPHRleHQgeD0iMzQ4IiB5PSIxMzQiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmZhbHNlPC90ZXh0PgogIDx0ZXh0IHg9IjI3NiIgeT0iMjA1IiB0ZXh0LWFuY2hvcj0iZW5kIj5jb250aW51ZSBiZWxvdyB0aGUgbG9vcDwvdGV4dD4KPC9zdmc+Cg==",_C="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHJlLXRlc3QgKHdoaWxlKTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LXdlaWdodD0iNjAwIj5wb3N0LXRlc3QgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kaXRpb248L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBpbnNpZGU8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGluc2lkZTwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgY29uZGl0aW9uPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5JZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlIGF0IG9uY2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj50aGUgaW5zaWRlIHJ1bnMgPHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm5ldmVyPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5UaGUgaW5zaWRlIGFsd2F5cyBydW5zPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj48dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+YXQgbGVhc3Qgb25jZTwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",TC="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==",OC="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=",AC=""+new URL("mvc-klick-BIA_bYzu.svg",import.meta.url).href,PC=""+new URL("ss-binaere-suche-D02W1TH_.svg",import.meta.url).href,jC=""+new URL("ss-bubblesort-CmKEoNfO.svg",import.meta.url).href,CC="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==",BC=""+new URL("ss-vergleiche-UczNldcC.svg",import.meta.url).href,DC="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==",ZC=""+new URL("zk-zeichen-CgUEhNoK.svg",import.meta.url).href,MC=""+new URL("ike-nassi-D2w47gvX.jpg",import.meta.url).href,LC=""+new URL("kino-saal-CYMOok4_.svg",import.meta.url).href,WC=""+new URL("kino-schleifen-DrTQV7dq.svg",import.meta.url).href,EC="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==",NC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+V29oaW4gbGFuZGV0IGRhcyBFbGVtZW50PzwvdGV4dD4KICA8cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkYmVhZmUiLz4KICA8cmVjdCB4PSIyMCIgeT0iNzUiIHdpZHRoPSIxOTAiIGhlaWdodD0iMzUiIGZpbGw9IiNkY2ZjZTciLz4KICA8bGluZSB4MT0iMjAiIHkxPSI3NSIgeDI9IjIxMCIgeTI9Ijc1IiBzdHJva2U9IiM2ZTZlNzMiIHN0cm9rZS1kYXNoYXJyYXk9IjQgMyIvPgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI3MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjYyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMWQ0ZWQ4Ij5vYmVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPnVudGVyZSBIw6RsZnRlPC90ZXh0PgogIDx0ZXh0IHg9IjIyNCIgeT0iNjIiPuKGkiBrb21tdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGF2b3I8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIga29tbXQgPHRzcGFuIGZvbnQtd2VpZ2h0PSI2MDAiPmRhaGludGVyPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZXJzZXR6dDwvdHNwYW4+IGRlbiBQbGF0emhhbHRlcjwvdGV4dD4KPC9zdmc+Cg==",FC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgYWx0ZXIgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+YWx0ZXI8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5XZXJ0PC90ZXh0PgogIDx0ZXh0IHg9IjMxNiIgeT0iMTE5Ij5OYW1lPC90ZXh0PgogIDx0ZXh0IHg9IjgiIHk9IjE1NiI+RGF0ZW50eXA8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPsOcYmVyIGRlbiBOYW1lbiBrb21tc3QgZHUgYW4gZGVuIFdlcnQuPC90ZXh0Pgo8L3N2Zz4K",JC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cHVua3RlPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cHVua3RlICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCByZWNodHMgYXVzcmVjaG5lbjogMTAgKyA1ID0gMTU8L3RleHQ+CiAgPHBhdGggZD0iTTI1MCA4MiBDMjMwIDMwLCA5MCAzMCwgNjQgODQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwN2FmZiIgc3Ryb2tlLXdpZHRoPSIyLjUiIG1hcmtlci1lbmQ9InVybCgjYSkiLz4KICA8dGV4dCB4PSIxNjAiIHk9IjM2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjMDA3YWZmIj7ikaEgRXJnZWJuaXMgbGlua3Mgc3BlaWNoZXJuPC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSIxNjQiIHdpZHRoPSIzNjAiIGhlaWdodD0iMjYiIHJ4PSI2IiBmaWxsPSIjZjJmMmY3Ii8+CiAgPHRleHQgeD0iMjAwIiB5PSIxODIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPnB1bmt0ZSB2b3JoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xMDwvdHNwYW4+ICAg4oaSICAgcHVua3RlIG5hY2hoZXI6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",RC="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",GC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzEwIiB5PSI1MCIgd2lkdGg9IjcwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iOTAiIHk9IjUwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZGNmY2U3Ii8+CiAgPGxpbmUgeDE9IjIwIiB5MT0iNzQiIHgyPSIzODAiIHkyPSI3NCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8bGluZSB4MT0iNDYiIHkxPSI2OCIgeDI9IjQ2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iNDYiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4wPC90ZXh0PgogIDxsaW5lIHgxPSI5MCIgeTE9IjY4IiB4Mj0iOTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSI5MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjE8L3RleHQ+CiAgPGxpbmUgeDE9IjEzNCIgeTE9IjY4IiB4Mj0iMTM0IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMTM0IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MjwvdGV4dD4KICA8bGluZSB4MT0iMTc4IiB5MT0iNjgiIHgyPSIxNzgiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxNzgiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4zPC90ZXh0PgogIDxsaW5lIHgxPSIyMjIiIHkxPSI2OCIgeDI9IjIyMiIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjIyMiIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjQ8L3RleHQ+CiAgPGxpbmUgeDE9IjI2NiIgeTE9IjY4IiB4Mj0iMjY2IiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjY2IiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NTwvdGV4dD4KICA8bGluZSB4MT0iMzEwIiB5MT0iNjgiIHgyPSIzMTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIzMTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj42PC90ZXh0PgogIDxsaW5lIHgxPSIzNTQiIHkxPSI2OCIgeDI9IjM1NCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjM1NCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjc8L3RleHQ+CiAgPGNpcmNsZSBjeD0iOTAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMxMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+Z8O8bHRpZzwvdGV4dD4KICA8dGV4dCB4PSI0MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPnVuZ8O8bHRpZzwvdGV4dD48dGV4dCB4PSIzNjAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj51bmfDvGx0aWc8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGUgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGUgJmx0Oz0gNjwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RlICZsdDsgMSB8fCBub3RlICZndDsgNjwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",HC="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=",VC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5BYmxhdWYgZGVyIFdoaWxlLVNjaGxlaWZlPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iNDQiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSIyMCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjYjQ1MzA5IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjY5IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaAgQmVkaW5ndW5nIHByw7xmZW48L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMjgiIHdpZHRoPSIxNjAiIGhlaWdodD0iNDAiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgSW5oYWx0IGF1c2bDvGhyZW48L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj53aWVkZXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+bmFjaCBvYmVuPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+d2VpdGVyIHVudGVyIGRlciBTY2hsZWlmZTwvdGV4dD4KPC9zdmc+Cg==",QC="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+a29wZmdlc3RldWVydCAoV2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPmZ1w59nZXN0ZXVlcnQgKERvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBCZWRpbmd1bmc8L3RleHQ+CiAgPHJlY3QgeD0iMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBJbmhhbHQ8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluaGFsdDwvdGV4dD4KICA8cmVjdCB4PSIyMzUiIHk9IjEyNCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjMwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgQmVkaW5ndW5nPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5Jc3QgZGllIEJlZGluZ3VuZyBnbGVpY2ggZmFsc2UsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5sw6R1ZnQgZGVyIEluaGFsdCA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iIzFjMWMxZSI+bmllPC90c3Bhbj4uPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5EZXIgSW5oYWx0IGzDpHVmdCBpbW1lcjwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPm1pbmRlc3RlbnMgZWlubWFsPC90c3Bhbj4uPC90ZXh0Pgo8L3N2Zz4K",qC="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",UC="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",$C=""+new URL("mvc-klick-KmFKqxH-.svg",import.meta.url).href,YC=""+new URL("aufgabe-mehrwertsteuer-KUkerRBd.svg",import.meta.url).href,XC=""+new URL("kino-saal-BOvcmdzb.svg",import.meta.url).href,KC=""+new URL("kino-schleifen-Ci9yPnbo.svg",import.meta.url).href,eB="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==",tB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTkwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE5MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwIiB5PSIyNCIgZm9udC13ZWlnaHQ9IjYwMCI+T25kZSBmaWNhIG8gZWxlbWVudG8/PC90ZXh0PgogIDxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RiZWFmZSIvPgogIDxyZWN0IHg9IjIwIiB5PSI3NSIgd2lkdGg9IjE5MCIgaGVpZ2h0PSIzNSIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc1IiB4Mj0iMjEwIiB5Mj0iNzUiIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLWRhc2hhcnJheT0iNCAzIi8+CiAgPHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjcwIiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjExNSIgeT0iNjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxZDRlZDgiPm1ldGFkZSBkZSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjExNSIgeT0iOTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPm1ldGFkZSBkZSBiYWl4bzwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9IjYyIj7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+YW50ZXM8L3RzcGFuPjwvdGV4dD4KICA8dGV4dCB4PSIyMjQiIHk9Ijk3Ij7ihpIgZmljYSA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+ZGVwb2lzPC90c3Bhbj48L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI0MCIgZmlsbD0iI2ZlZjNjNyIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIxMTUiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiI+w7g8L3RleHQ+CiAgPHRleHQgeD0iMjI0IiB5PSIxNTciPuKGkiA8dHNwYW4gZm9udC13ZWlnaHQ9IjYwMCI+c3Vic3RpdHVpLW88L3RzcGFuPjwvdGV4dD4KPC9zdmc+Cg==",nB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjEwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIxMCIgZmlsbD0iI2ZmZmZmZiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlIiBmb250LXNpemU9IjE2Ij5pbnQgaWRhZGUgPSAxNDwvdGV4dD4KICA8cGF0aCBkPSJNMTMwIDcwIEwxNzAgNTAgTDMwMCA1MCBMMjYwIDcwIFoiIGZpbGw9IiNjOThhM2MiIHN0cm9rZT0iIzhhNWExZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHJlY3QgeD0iMTgwIiB5PSIzNCIgd2lkdGg9IjQ0IiBoZWlnaHQ9IjUwIiByeD0iMyIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlPSIjNmU2ZTczIiBzdHJva2Utd2lkdGg9IjEuNSIvPgogIDx0ZXh0IHg9IjIwMiIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMjAiIGZvbnQtd2VpZ2h0PSI3MDAiPjE0PC90ZXh0PgogIDxyZWN0IHg9IjEzMCIgeT0iNzAiIHdpZHRoPSIxMzAiIGhlaWdodD0iMTAwIiBmaWxsPSIjZTliODcyIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxwYXRoIGQ9Ik0yNjAgNzAgTDMwMCA1MCBMMzAwIDE1MCBMMjYwIDE3MCBaIiBmaWxsPSIjZDQ5YTRjIiBzdHJva2U9IiM4YTVhMWYiIHN0cm9rZS13aWR0aD0iMiIvPgogIDxyZWN0IHg9IjE1MCIgeT0iMTAwIiB3aWR0aD0iOTAiIGhlaWdodD0iMzAiIHJ4PSI0IiBmaWxsPSIjZmZmZmZmIiBzdHJva2U9IiM4YTVhMWYiLz4KICA8dGV4dCB4PSIxOTUiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+aWRhZGU8L3RleHQ+CiAgPHJlY3QgeD0iMTM4IiB5PSIxNDIiIHdpZHRoPSIzNCIgaGVpZ2h0PSIyMCIgcng9IjEwIiBmaWxsPSIjMDA3YWZmIi8+CiAgPHRleHQgeD0iMTU1IiB5PSIxNTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNmZmZmZmYiIGZvbnQtd2VpZ2h0PSI2MDAiPmludDwvdGV4dD4KICA8ZyBzdHJva2U9IiM2ZTZlNzMiPgogICAgPGxpbmUgeDE9IjMxMCIgeTE9IjQ4IiB4Mj0iMjI2IiB5Mj0iNTIiLz4KICAgIDxsaW5lIHgxPSIzMTAiIHkxPSIxMTUiIHgyPSIyNDIiIHkyPSIxMTUiLz4KICAgIDxsaW5lIHgxPSI4MCIgeTE9IjE1MiIgeDI9IjEzNCIgeTI9IjE1MiIvPgogIDwvZz4KICA8dGV4dCB4PSIzMTYiIHk9IjUyIj5WYWxvcjwvdGV4dD4KICA8dGV4dCB4PSIzMTYiIHk9IjExOSI+Tm9tZTwvdGV4dD4KICA8dGV4dCB4PSI4IiB5PSIxNTYiPlRpcG8gZGUgZGFkb3M8L3RleHQ+CiAgPHRleHQgeD0iMjAwIiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPlBlbG8gbm9tZSBjaGVnYXMgYW8gdmFsb3IuPC90ZXh0Pgo8L3N2Zz4K",iB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjAwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMDA3YWZmIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMjAiPgogICAgPHRleHQgeD0iNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjcwMCI+cG9udG9zPC90ZXh0PgogICAgPHRleHQgeD0iMTI1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMwMDdhZmYiIGZvbnQtd2VpZ2h0PSI3MDAiPj08L3RleHQ+CiAgICA8dGV4dCB4PSIyNjAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zICsgNTwvdGV4dD4KICA8L2c+CiAgPHJlY3QgeD0iMTgwIiB5PSI4NiIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjYwIiB5PSIxNDgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiMxNTgwM2QiPuKRoCBjYWxjdWxhciBhIGRpcmVpdGE6IDEwICsgNSA9IDE1PC90ZXh0PgogIDxwYXRoIGQ9Ik0yNTAgODIgQzIzMCAzMCwgOTAgMzAsIDY0IDg0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDdhZmYiIHN0cm9rZS13aWR0aD0iMi41IiBtYXJrZXItZW5kPSJ1cmwoI2EpIi8+CiAgPHRleHQgeD0iMTYwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzAwN2FmZiI+4pGhIGd1YXJkYXIgbyByZXN1bHRhZG8gw6AgZXNxdWVyZGE8L3RleHQ+CiAgPHJlY3QgeD0iMjAiIHk9IjE2NCIgd2lkdGg9IjM2MCIgaGVpZ2h0PSIyNiIgcng9IjYiIGZpbGw9IiNmMmYyZjciLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+cG9udG9zIGFudGVzOiA8dHNwYW4gZm9udC13ZWlnaHQ9IjcwMCI+MTA8L3RzcGFuPiAgIOKGkiAgIHBvbnRvcyBkZXBvaXM6IDx0c3BhbiBmb250LXdlaWdodD0iNzAwIj4xNTwvdHNwYW4+PC90ZXh0Pgo8L3N2Zz4K",aB="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==",sB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMTUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjE1MCIgZmlsbD0iI2ZmZmZmZiIvPgogIDxyZWN0IHg9IjIwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+PHJlY3QgeD0iMzAwIiB5PSI1MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjI0IiBmaWxsPSIjZmVlMmUyIi8+CiAgPHJlY3QgeD0iMTAwIiB5PSI1MCIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyNCIgZmlsbD0iI2RjZmNlNyIvPgogIDxsaW5lIHgxPSIyMCIgeTE9Ijc0IiB4Mj0iMzgwIiB5Mj0iNzQiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPGxpbmUgeDE9IjUwIiB5MT0iNjgiIHgyPSI1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MDwvdGV4dD4KICA8bGluZSB4MT0iMTAwIiB5MT0iNjgiIHgyPSIxMDAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIxMDAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj4xPC90ZXh0PgogIDxsaW5lIHgxPSIxNTAiIHkxPSI2OCIgeDI9IjE1MCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjE1MCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjI8L3RleHQ+CiAgPGxpbmUgeDE9IjIwMCIgeTE9IjY4IiB4Mj0iMjAwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+MzwvdGV4dD4KICA8bGluZSB4MT0iMjUwIiB5MT0iNjgiIHgyPSIyNTAiIHkyPSI4MCIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjIiLz48dGV4dCB4PSIyNTAiIHk9Ijk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj40PC90ZXh0PgogIDxsaW5lIHgxPSIzMDAiIHkxPSI2OCIgeDI9IjMwMCIgeTI9IjgwIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMiIvPjx0ZXh0IHg9IjMwMCIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPjU8L3RleHQ+CiAgPGxpbmUgeDE9IjM1MCIgeTE9IjY4IiB4Mj0iMzUwIiB5Mj0iODAiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PHRleHQgeD0iMzUwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+NjwvdGV4dD4KICA8Y2lyY2xlIGN4PSIxMDAiIGN5PSI3NCIgcj0iNiIgZmlsbD0iIzE1ODAzZCIvPjxjaXJjbGUgY3g9IjMwMCIgY3k9Ijc0IiByPSI2IiBmaWxsPSIjMTU4MDNkIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI0MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dsOhbGlkYTwvdGV4dD4KICA8dGV4dCB4PSI1MCIgeT0iNDAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiNiOTFjMWMiIGZvbnQtd2VpZ2h0PSI2MDAiPmludsOhbGlkYTwvdGV4dD48dGV4dCB4PSIzNTAiIHk9IjQwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5pbnbDoWxpZGE8L3RleHQ+CiAgPGcgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiPgogICAgPHRleHQgeD0iMjAwIiB5PSIxMjQiIGZpbGw9IiMxNTgwM2QiPm5vdGEgJmd0Oz0gMSAmYW1wOyZhbXA7IG5vdGEgJmx0Oz0gNTwvdGV4dD4KICAgIDx0ZXh0IHg9IjIwMCIgeT0iMTQyIiBmaWxsPSIjYjkxYzFjIj5ub3RhICZsdDsgMSB8fCBub3RhICZndDsgNTwvdGV4dD4KICA8L2c+Cjwvc3ZnPgo=",rB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMjAiIHk9IjI0IiBmb250LXdlaWdodD0iNjAwIj5Db21vIGZ1bmNpb25hIG8gY2ljbG8gd2hpbGU8L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSI0NCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSI0MCIgcng9IjIwIiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iNjkiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCB2ZXJpZmljYXIgYSBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjEyMCIgeT0iMTI4IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjQwIiByeD0iNiIgZmlsbD0iI2RiZWFmZSIgc3Ryb2tlPSIjMWQ0ZWQ4IiBzdHJva2Utd2lkdGg9IjIiLz4KICA8dGV4dCB4PSIyMDAiIHk9IjE1MyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIGV4ZWN1dGFyIG8gaW50ZXJpb3I8L3RleHQ+CiAgPGcgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMWMxYzFlIiBzdHJva2Utd2lkdGg9IjEuOCIgbWFya2VyLWVuZD0idXJsKCNhKSI+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iODQiIHgyPSIyMDAiIHkyPSIxMjYiLz4KICAgIDxwYXRoIGQ9Ik0xMjAgMTQ4IEM4MCAxNDgsIDgwIDY0LCAxMTggNjQiLz4KICAgIDxwYXRoIGQ9Ik0yODAgNjQgTDM0MCA2NCBMMzQwIDIwMCBMMjgyIDIwMCIvPgogIDwvZz4KICA8dGV4dCB4PSIyMDgiIHk9IjExMCIgZmlsbD0iIzE1ODAzZCIgZm9udC13ZWlnaHQ9IjYwMCI+dHJ1ZTwvdGV4dD4KICA8dGV4dCB4PSIzOCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj52b2x0YXI8L3RleHQ+CiAgPHRleHQgeD0iMzgiIHk9IjEyNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+cGFyYSBjaW1hPC90ZXh0PgogIDx0ZXh0IHg9IjM0OCIgeT0iMTM0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIyNzYiIHk9IjIwNSIgdGV4dC1hbmNob3I9ImVuZCI+Y29udGludWFyIHBvciBiYWl4byBkbyBjaWNsbzwvdGV4dD4KPC9zdmc+Cg==",oB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjMwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEzIiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjMwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHRleHQgeD0iMTAwIiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC13ZWlnaHQ9IjYwMCI+cHLDqS10ZXN0ZSAod2hpbGUpPC90ZXh0PgogIDx0ZXh0IHg9IjMwMCIgeT0iMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtd2VpZ2h0PSI2MDAiPnDDs3MtdGVzdGUgKGRvLXdoaWxlKTwvdGV4dD4KICA8bGluZSB4MT0iMjAwIiB5MT0iMTAiIHgyPSIyMDAiIHkyPSIyMjAiIHN0cm9rZT0iI2QxZDFkNiIvPgogIDxyZWN0IHg9IjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjE4IiBmaWxsPSIjZmVmM2M3IiBzdHJva2U9IiNiNDUzMDkiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iNjciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoCBjb25kacOnw6NvPC90ZXh0PgogIDxyZWN0IHg9IjM1IiB5PSIxMjQiIHdpZHRoPSIxMzAiIGhlaWdodD0iMzYiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjEwMCIgeT0iMTQ3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaEgaW50ZXJpb3I8L3RleHQ+CiAgPHJlY3QgeD0iMjM1IiB5PSI0NCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSIzNiIgcng9IjYiIGZpbGw9IiNkYmVhZmUiIHN0cm9rZT0iIzFkNGVkOCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSI2NyIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIGludGVyaW9yPC90ZXh0PgogIDxyZWN0IHg9IjIzNSIgeT0iMTI0IiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjM2IiByeD0iMTgiIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMzAwIiB5PSIxNDciIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoSBjb25kacOnw6NvPC90ZXh0PgogIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjMWMxZSIgc3Ryb2tlLXdpZHRoPSIxLjYiIG1hcmtlci1lbmQ9InVybCgjYSkiPgogICAgPGxpbmUgeDE9IjEwMCIgeTE9IjgwIiB4Mj0iMTAwIiB5Mj0iMTIyIi8+CiAgICA8cGF0aCBkPSJNMzUgMTQyIEM4IDE0MiwgOCA2MiwgMzMgNjIiLz4KICAgIDxsaW5lIHgxPSIzMDAiIHkxPSI4MCIgeDI9IjMwMCIgeTI9IjEyMiIvPgogICAgPHBhdGggZD0iTTM2NSAxNDIgQzM5MiAxNDIsIDM5MiA2MiwgMzY3IDYyIi8+CiAgPC9nPgogIDx0ZXh0IHg9IjEwNiIgeT0iMTA2IiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjM4MCIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0iZW5kIiBmaWxsPSIjMTU4MDNkIiBmb250LXdlaWdodD0iNjAwIj50cnVlPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMTkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5TZSBhIGNvbmRpw6fDo28gZm9yIGxvZ28gZmFsc2EsPC90ZXh0PgogIDx0ZXh0IHg9IjEwMCIgeT0iMjA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNmU2ZTczIj5vIGludGVyaW9yIDx0c3BhbiBmb250LXdlaWdodD0iNzAwIiBmaWxsPSIjMWMxYzFlIj5udW5jYTwvdHNwYW4+IMOpIGV4ZWN1dGFkby48L3RleHQ+CiAgPHRleHQgeD0iMzAwIiB5PSIxOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPk8gaW50ZXJpb3Igw6kgc2VtcHJlIGV4ZWN1dGFkbzwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9IjIwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+PHRzcGFuIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxYzFjMWUiPnBlbG8gbWVub3MgdW1hIHZlejwvdHNwYW4+LjwvdGV4dD4KPC9zdmc+Cg==",lB="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiBmb250LWZhbWlseT0ic3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCBTZWdvZSBVSSwgUm9ib3RvLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBmaWxsPSIjMWMxYzFlIj4KICA8ZGVmcz48bWFya2VyIGlkPSJhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjkiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAgMCBMMTAgNSBMMCAxMCBaIiBmaWxsPSIjMWMxYzFlIi8+PC9tYXJrZXI+PC9kZWZzPgogIDxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iMjUwIiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3QgeD0iMTIwIiB5PSIxNCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNmMmYyZjciIHN0cm9rZT0iIzZlNmU3MyIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIzNiIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGgIEluw61jaW8gPHRzcGFuIGZpbGw9IiM2ZTZlNzMiPihzw7MgdW1hIHZleik8L3RzcGFuPjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9Ijc2IiB3aWR0aD0iMTYwIiBoZWlnaHQ9IjM0IiByeD0iMTciIGZpbGw9IiNmZWYzYzciIHN0cm9rZT0iI2I0NTMwOSIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSI5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSI+4pGhIHZlcmlmaWNhciBhIGNvbmRpw6fDo288L3RleHQ+CiAgPHJlY3QgeD0iMTIwIiB5PSIxMzgiIHdpZHRoPSIxNjAiIGhlaWdodD0iMzQiIHJ4PSI2IiBmaWxsPSIjZGJlYWZlIiBzdHJva2U9IiMxZDRlZDgiIHN0cm9rZS13aWR0aD0iMiIvPgogIDx0ZXh0IHg9IjIwMCIgeT0iMTYwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj7ikaIgZXhlY3V0YXIgbyBpbnRlcmlvcjwvdGV4dD4KICA8cmVjdCB4PSIxMjAiIHk9IjIwMCIgd2lkdGg9IjE2MCIgaGVpZ2h0PSIzNCIgcng9IjYiIGZpbGw9IiNkY2ZjZTciIHN0cm9rZT0iIzE1ODAzZCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgPHRleHQgeD0iMjAwIiB5PSIyMjIiIHRleHQtYW5jaG9yPSJtaWRkbGUiPuKRoyBwYXNzbywgcC4gZXguIGkrKzwvdGV4dD4KICA8ZyBmaWxsPSJub25lIiBzdHJva2U9IiMxYzFjMWUiIHN0cm9rZS13aWR0aD0iMS44IiBtYXJrZXItZW5kPSJ1cmwoI2EpIj4KICAgIDxsaW5lIHgxPSIyMDAiIHkxPSI0OCIgeDI9IjIwMCIgeTI9Ijc0Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTEwIiB4Mj0iMjAwIiB5Mj0iMTM2Ii8+CiAgICA8bGluZSB4MT0iMjAwIiB5MT0iMTcyIiB4Mj0iMjAwIiB5Mj0iMTk4Ii8+CiAgICA8cGF0aCBkPSJNMTIwIDIxNyBDNjAgMjE3LCA2MCA5MywgMTE4IDkzIi8+CiAgICA8cGF0aCBkPSJNMjgwIDkzIEwzMzAgOTMiLz4KICA8L2c+CiAgPHRleHQgeD0iMjA4IiB5PSIxMjkiIGZpbGw9IiMxNTgwM2QiIGZvbnQtd2VpZ2h0PSI2MDAiPnRydWU8L3RleHQ+CiAgPHRleHQgeD0iNDgiIHk9IjE2MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzZlNmU3MyI+dm9sdGFyPC90ZXh0PgogIDx0ZXh0IHg9IjQ4IiB5PSIxNzYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM2ZTZlNzMiPmFvIOKRoTwvdGV4dD4KICA8dGV4dCB4PSIzMDAiIHk9Ijg0IiBmaWxsPSIjYjkxYzFjIiBmb250LXdlaWdodD0iNjAwIj5mYWxzZTwvdGV4dD4KICA8dGV4dCB4PSIzMzYiIHk9Ijk4Ij5maW08L3RleHQ+Cjwvc3ZnPgo=",uB="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=",mB=""+new URL("mvc-klick-DKonBpbs.svg",import.meta.url).href,cB=""+new URL("schiffe-versenken-iEBDHIxD.svg",import.meta.url).href,dB=""+new URL("ss-binaere-suche-DVVS2SNc.svg",import.meta.url).href,hB=""+new URL("ss-bubblesort-AFDcFDah.svg",import.meta.url).href,gB="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=",pB=""+new URL("ss-vergleiche-DWgkIvLr.svg",import.meta.url).href,fB="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",xB=""+new URL("zk-zeichen-8efNmpGx.svg",import.meta.url).href,bB=""+new URL("schiffe-versenken-CXt1SF0S.svg",import.meta.url).href,vB=""+new URL("ss-binaere-suche-CPsLGldq.svg",import.meta.url).href,yB=""+new URL("ss-bubblesort-Dic2ZfaT.svg",import.meta.url).href,wB="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",zB=""+new URL("ss-vergleiche-DRqzU2TZ.svg",import.meta.url).href,IB="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",kB=""+new URL("zk-zeichen-vYvc3iJg.svg",import.meta.url).href;function SB(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 SB=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ju(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 To extends Error{}function _B(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function TB(i,e,t){const n=h=>{throw new To(`${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):\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==="klicks"?c.clicks=w.split(",").map(S=>S.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(S=>S.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 x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` +`)){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 _B=i=>i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");function ju(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 To extends Error{}function TB(i){return i==="zuhoerer"||i==="vertrag"||i==="layout"||i==="bombe"||i==="frage"||i==="reihenfolge"}function OB(i,e,t){const n=h=>{throw new To(`${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):\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==="klicks"?c.clicks=w.split(",").map(I=>I.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(I=>I.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 x=c,b=/^-\s+(\[x\]\s+)?(.+)$/.exec(g);b?x.options.push({text:b[2].trim().replaceAll("\\n",` `),right:!!b[1]}):g.startsWith(">")?x.explanation+=(x.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(` -`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-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.`);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=>Bh(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=Dh(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);OB(f,h.clicks)}catch(f){if(f instanceof To)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 Bh(i,e="",t=n=>{throw new To(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 Za='"((?:[^"\\\\]|\\\\.)*)"';function Dh(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:Oo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Oo(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 Oo(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 Oo(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 Lh(i,e,n.name)}function Lh(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)??[])Wh(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function OB(i,e){const t=Zh(i);return e.map(n=>Mh(i,t,n))}function Wh(i,e,t,n){if(typeof i!="string"){for(const s of AB(i.condition,e,n)?i.then:i.otherwise)Wh(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(Qn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Qn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Bu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Bu(a[1],e),r=Number(Qn(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 AB(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(Qn(n[2],e,t))===String(Qn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Qn(n[1],e,t)),s=Number(Qn(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 Bu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Qn(i,e,t){const n=i.match(new RegExp(`${Za}|\\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 PB extends Error{}const cs="___";function jB(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 CB(i,e){const t=T=>{throw new PB(`${e}: ${T}`)},n=(T,j)=>{const C=/^(\d+)\s+(\d+)$/.exec(T.trim());return!C||Number(C[1])<1||Number(C[2])<1?t(`${j}: „${T}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(C[1])-1,col:Number(C[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const T of i){const j=T.trim();if(g&&(/^( {4}|\t)/.test(T)||j==="")){const P=T.replace(/^( {4}|\t)/,"");if(g==="station"){const A=c[c.length-1];A.code+=(A.code?` +`),x=h.wrongLine;(!x||!Number.isInteger(x)||x<1||x>f.length||!f[x-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.`);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=>Dh(f.text,`Runde ${g+1}`,n)),i==="zuhoerer")try{const f=Zh(h.code);for(const x of h.clicks)f.buttons.some(b=>b.caption===x)||n(`Runde ${g+1}: Knopf „${x}“ gibt es nicht.`);AB(f,h.clicks)}catch(f){if(f instanceof To)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 Dh(i,e="",t=n=>{throw new To(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 Za='"((?:[^"\\\\]|\\\\.)*)"';function Zh(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:Oo(c.join(" "))}}const u=l==="});"?o.replace(/\)\s*;\s*$/,""):o.replace(/;\s*$/,"");return{from:r,to:r,statements:Oo(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 Oo(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 Oo(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 Wh(i,e,n.name)}function Wh(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)??[])Eh(r,e,a,s);return{button:t,listener:n,texts:{...e.texts},console:a}}function AB(i,e){const t=Mh(i);return e.map(n=>Lh(i,t,n))}function Eh(i,e,t,n){if(typeof i!="string"){for(const s of PB(i.condition,e,n)?i.then:i.otherwise)Eh(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(Qn(a[2],e,n))}else if(a=/^System\.out\.println\((.*)\)$/.exec(i))t.push(String(Qn(a[1],e,n)));else if(a=/^(\w+)\s*(\+\+|--)$/.exec(i))e.ints[Bu(a[1],e)]+=a[2]==="++"?1:-1;else if(a=/^(\w+)\s*([+-]?=)\s*(.+)$/.exec(i)){const s=Bu(a[1],e),r=Number(Qn(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 PB(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(Qn(n[2],e,t))===String(Qn(n[3],e,t))!=(n[1]==="!");if(n=/^(.+?)\s*(==|!=|<=|>=|<|>)\s*(.+)$/.exec(i)){const a=Number(Qn(n[1],e,t)),s=Number(Qn(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 Bu(i,e){if(!(i in e.ints))throw new Error(`Variable ${i} ist nicht angelegt.`);return i}function Qn(i,e,t){const n=i.match(new RegExp(`${Za}|\\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 jB extends Error{}const cs="___";function CB(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 BB(i,e){const t=T=>{throw new jB(`${e}: ${T}`)},n=(T,j)=>{const C=/^(\d+)\s+(\d+)$/.exec(T.trim());return!C||Number(C[1])<1||Number(C[2])<1?t(`${j}: „${T}“ ist kein Feld (Zeile Spalte, ab 1).`):{row:Number(C[1])-1,col:Number(C[2])-1}};let a="",s="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZ",o="",l="",u="",m="";const c=[],d=[];let h=[],g,f="start";for(const T of i){const j=T.trim();if(g&&(/^( {4}|\t)/.test(T)||j==="")){const P=T.replace(/^( {4}|\t)/,"");if(g==="station"){const O=c[c.length-1];O.code+=(O.code?` `:"")+P}else u+=(u?` -`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,A]=C;if(P==="station")c.push({name:A,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=A,f="crossword";else if(P==="tor")l=A,f="gate",g="gate";else if(P==="titel")a=A;else if(P==="intro")s=A;else if(P==="alphabet")r=A;else if(P==="ende")m=A;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=A.split(",").map(W=>n(W,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const W=c[c.length-1];P==="frage"?W.question=A:P==="tipp"?W.hint=A:P==="zahl"?W.answer=/^-?\d+$/.test(A)?Number(A):t(`Station „${W.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(W,n(A,`Station „${W.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}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 x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),A=T.col+(T.across?C:0);v[P][A]&&v[P][A]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${A+1} nicht (dort steht ${v[P][A]}).`),v[P][A]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),S=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=v[T])==null?void 0:C[j])??""},k=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:S,solution:h,keyword:k,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const BB=/\[\[(.+?)\]\]/g;function DB(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=>ZB(o.slice(r),e,t.title))}),!MB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function ZB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(BB)){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 MB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function LB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Eh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,` +`:"")+P;continue}if(g=void 0,!j)continue;const C=/^(titel|intro|alphabet|station|frage|zahl|feld|tipp|kreuzwort|lösung|loesung|tor|ende):\s*(.*)$/.exec(j);if(C){const[,P,O]=C;if(P==="station")c.push({name:O,code:"",question:"",hint:"",explanation:""}),f="station",g="station";else if(P==="kreuzwort")o=O,f="crossword";else if(P==="tor")l=O,f="gate",g="gate";else if(P==="titel")a=O;else if(P==="intro")s=O;else if(P==="alphabet")r=O;else if(P==="ende")m=O;else if(P==="lösung"||P==="loesung")f!=="crossword"&&t("„lösung:“ gehört zum Kreuzworträtsel."),h=O.split(",").map(W=>n(W,"lösung"));else{f!=="station"&&t(`„${P}:“ gehört in eine Station.`);const W=c[c.length-1];P==="frage"?W.question=O:P==="tipp"?W.hint=O:P==="zahl"?W.answer=/^-?\d+$/.test(O)?Number(O):t(`Station „${W.name}“: „zahl:“ muss eine ganze Zahl sein.`):Object.assign(W,n(O,`Station „${W.name}“`))}continue}if(f==="crossword"){const P=/^-\s+([→↓])\s+(\d+)\s+(\d+)\s+([A-ZÄÖÜ]+):\s*(.+)$/u.exec(j);P||t(`Kreuzworträtsel: „${j}“ verstehe ich nicht (z. B. „- → 1 3 STRING: Hinweis“).`),d.push({across:P[1]==="→",row:Number(P[2])-1,col:Number(P[3])-1,word:P[4],clue:P[5]});continue}if(f==="station"&&j.startsWith(">")){const P=c[c.length-1];P.explanation+=(P.explanation?" ":"")+j.slice(1).trim();continue}t(`Unbekannte Zeile im Spiel: „${j}“`)}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 x=Math.max(...d.map(T=>T.row+(T.across?1:T.word.length))),b=Math.max(...d.map(T=>T.col+(T.across?T.word.length:1))),v=Array.from({length:x},()=>Array(b).fill(""));for(const T of d)[...T.word].forEach((j,C)=>{const P=T.row+(T.across?0:C),O=T.col+(T.across?C:0);v[P][O]&&v[P][O]!==j&&t(`Kreuzworträtsel: ${T.word} passt in Zeile ${P+1}, Spalte ${O+1} nicht (dort steht ${v[P][O]}).`),v[P][O]=j});const w=[...new Set(d.map(T=>T.row*b+T.col))].sort((T,j)=>T-j),I=d.map(T=>({...T,number:w.indexOf(T.row*b+T.col)+1})),z=(T,j)=>{var C;return((C=v[T])==null?void 0:C[j])??""},S=h.map(({row:T,col:j})=>z(T,j)||t(`lösung: In Zeile ${T+1}, Spalte ${j+1} ist kein Feld.`)).join(""),_=c.map(T=>{T.code||t(`Station „${T.name}“: Code fehlt.`),T.question||t(`Station „${T.name}“: „frage:“ fehlt.`),T.answer===void 0&&t(`Station „${T.name}“: „zahl:“ fehlt.`),T.row===void 0&&t(`Station „${T.name}“: „feld:“ fehlt.`);const j=r.charAt(T.answer);j||t(`Station „${T.name}“: alphabet.charAt(${T.answer}) gibt es nicht.`);const C=z(T.row,T.col);return C!==j&&t(`Station „${T.name}“: alphabet.charAt(${T.answer}) ist ${j}, im Feld ${T.row+1} ${T.col+1} steht aber „${C}“.`),T.code=T.code.replace(/\n+$/,""),T});return{title:a,intro:s,alphabet:r,stations:_,crosswordText:o,rows:x,cols:b,words:I,solution:h,keyword:S,gateText:l,gateCode:u.replace(/\n+$/,""),end:m}}const DB=/\[\[(.+?)\]\]/g;function ZB(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=>MB(o.slice(r),e,t.title))}),!LB(t).length)throw new Error(`${e}: Lückentext „${t.title}“ braucht mindestens eine Lücke [[…]].`);return t}function MB(i,e,t){const n=[];let a=0;for(const s of i.matchAll(DB)){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 LB(i){return i.blocks.flat().flatMap(e=>e.flatMap(t=>typeof t=="string"?[]:[t.answers]))}function WB(i,e){const t=n=>n.replace(/\s+/g,"");return t(e)!==""&&i.some(n=>t(n)===t(e))}class te extends Error{}function Nh(i,e){const t=/^---\n([\s\S]*?)\n---\n?/.exec(i.replace(/\r\n/g,` `));if(!t)throw new te(`${e}: Kopfzeilen (--- … ---) fehlen.`);const n=new Map;for(const a of t[1].split(` `)){const s=/^([a-zäöüß]+):\s*(.*)$/i.exec(a.trim());s&&n.set(s[1].toLowerCase(),s[2].trim())}return{meta:n,body:i.replace(/\r\n/g,` -`).slice(t[0].length)}}function WB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new te(`${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 EB(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 St))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 St[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Nh({inputs:[],expected:[],sensors:t},e[2])}function Nh(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=es(nh(t.join(", ")))),i}function NB(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):\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(WB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new te(`${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:es(nh(l))})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Nh({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new te(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new te(`${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:a3(l)})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(EB(l))}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new te(`${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 te(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";break}}else a&&s.trim()!==""?a==="task"?n.task+=` +`).slice(t[0].length)}}function EB(i,e){const t=i.split(/\s*(?:->|→)\s*/);if(t.length!==2)throw new te(`${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 NB(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 St))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 St[a[1]].simulated=="string")return r;throw new Error(`Messwert „${r}“ ist keine Zahl und nicht true/false.`)})}return Fh({inputs:[],expected:[],sensors:t},e[2])}function Fh(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=es(ih(t.join(", ")))),i}function FB(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):\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(EB(l,t));break;case"datei":{const u=/^([\w.-]+)\s*(?:->|→)\s*(.*)$/.exec(l.trim());if(!u||!n.tests.length)throw new te(`${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:es(ih(l))})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"welt":{const u=/^([\w-]+)\s*(?:->|→)\s*(.+)$/.exec(l.trim());if(u){try{n.tests.push(Fh({inputs:[],expected:[],world:u[1]},u[2]))}catch(m){throw new te(`${t}: Übung „${i}“: ${m.message}`)}break}for(const m of l.split(/\s*,\s*/).filter(Boolean)){if(!/^[\w-]+$/.test(m))throw new te(`${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:s3(l)})}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"messwerte":try{n.tests.push(NB(l))}catch(u){throw new te(`${t}: Übung „${i}“: ${u.message}`)}break;case"schleifentiefe":if(n.loopDepth=Number(l),!Number.isInteger(n.loopDepth)||n.loopDepth<1)throw new te(`${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 te(`${t}: Übung „${i}“: „code:“ kennt nur „java“.`);n.code="java";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 te(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new te(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function FB(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 te(`${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 te(`${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);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 te(`${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 te(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function Fh(i,e){const t=[],n=i.split(` +`)}if(!n.title)throw new te(`${t}: Übung „${i}“ hat keinen Titel.`);if(!n.task.trim())throw new te(`${t}: Übung „${i}“ hat keinen Auftrag.`);return n.task=n.task.trim(),n}function JB(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 te(`${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 te(`${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);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 te(`${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 te(`${e}: Quizfrage „${n.question}“ braucht mindestens zwei Antworten, davon eine richtige.`)}return t}function Jh(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 te(`${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 te(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new te(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:NB(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>JB(d.slice(2).trim()))});break;case"quiz":t.push({kind:"quiz",questions:FB(l,e)});break;case"bild":if(!c)throw new te(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new te(`${e}: „::: grafik“ braucht einen Dateinamen.`);t.push({kind:"graphic",file:c,caption:l.join(" ").trim()});break;case"angeberwissen":t.push({kind:"brag",text:l.join(` -`).trim()});break;case"spiel":try{if(_B(c))t.push({kind:"roundGame",game:TB(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:CB(l,e)});else{if(c)throw new te(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:Gx(l,e)})}}catch(d){throw new te(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:DB(l,e)})}catch(d){throw new te(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 te(`${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 te(`${e}: „::: diagramm“ braucht einen Dateinamen.`);t.push({kind:"diagram",file:c,caption:l.join(" ").trim()});break;case"übung":case"uebung":if(!c)throw new te(`${e}: „::: übung“ braucht eine Kennung.`);t.push({kind:"exercise",exercise:FB(c,l,e)});break;case"checkliste":t.push({kind:"checklist",items:l.map(d=>d.trim()).filter(d=>d.startsWith("- ")).map(d=>RB(d.slice(2).trim()))});break;case"quiz":t.push({kind:"quiz",questions:JB(l,e)});break;case"bild":if(!c)throw new te(`${e}: „::: bild“ braucht einen Dateinamen.`);t.push({kind:"images",files:c.split(/\s+/),caption:l.join(" ").trim()});break;case"grafik":if(!c)throw new te(`${e}: „::: grafik“ braucht einen Dateinamen.`);t.push({kind:"graphic",file:c,caption:l.join(" ").trim()});break;case"angeberwissen":t.push({kind:"brag",text:l.join(` +`).trim()});break;case"spiel":try{if(TB(c))t.push({kind:"roundGame",game:OB(c,l,e)});else if(c==="prinzessin")t.push({kind:"rescueGame",game:BB(l,e)});else{if(c)throw new te(`${e}: Unbekanntes Spiel „${c}“ (zuhoerer, vertrag, layout, bombe, frage, reihenfolge oder prinzessin).`);t.push({kind:"game",game:Hx(l,e)})}}catch(d){throw new te(d.message)}break;case"lückentext":case"lueckentext":try{t.push({kind:"cloze",cloze:ZB(l,e)})}catch(d){throw new te(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 te(`${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 te(`${e}: „::: mbot2“ kennt nur Zeilen „fokus:“, „ansicht:“ und „drehen:“.`);const f=g[1].toLowerCase();f==="fokus"||f==="focus"?d.focus=Du(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:Du(g[1],e)[0],question:g[2].trim()});else if(f)d.done=f[2].trim();else throw new te(`${e}: „::: mbot2quiz“ braucht Zeilen „- teil: Frage“ und optional „fertig: Text“.`)}if(!d.tasks.length)throw new te(`${e}: „::: mbot2quiz“ hat keine Fragen.`);t.push(d);break}case"datei":{if(!/^[\w.-]+\.(txt|csv|json)$/u.test(c))throw new te(`${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 te(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function JB(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function RB(i,e){const t=new Map(i.map((n,a)=>[n.title.toLowerCase(),a]));for(const n of i.flatMap(a=>a.blocks))if(n.kind==="checklist"){for(const a of n.items)if(a.ref!==void 0&&(a.step=t.get(a.ref.toLowerCase()),a.step===void 0))throw new te(`${e}: Checkliste verweist auf unbekannten Schritt „${a.ref}“.`)}}function GB(i,e){var c;const{meta:t,body:n}=Eh(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new te(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Fh(l.lines.join(` +`)});break}default:throw new te(`${e}: Unbekannter Block „::: ${o[1]}“.`)}r=u}return s(),t}function RB(i){const e=/^(.*?)\s+→\s+(.+)$/.exec(i);return e?{text:e[1],ref:e[2].trim()}:{text:i}}function GB(i,e){const t=new Map(i.map((n,a)=>[n.title.toLowerCase(),a]));for(const n of i.flatMap(a=>a.blocks))if(n.kind==="checklist"){for(const a of n.items)if(a.ref!==void 0&&(a.step=t.get(a.ref.toLowerCase()),a.step===void 0))throw new te(`${e}: Checkliste verweist auf unbekannten Schritt „${a.ref}“.`)}}function HB(i,e){var c;const{meta:t,body:n}=Nh(i,e),a=e.replace(/^.*\//,"").replace(/\.md$/,""),s=Number((c=/^(\d+)/.exec(a))==null?void 0:c[1]);if(!Number.isFinite(s))throw new te(`${e}: Dateiname muss mit der Nummer beginnen (z. B. 01-…).`);const r=[];let o=[],l;const u=()=>{l&&r.push({title:l.title,blocks:Jh(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 te(`${e}: Keine Schritte (## Überschrift) gefunden.`);RB(r,e);const m=t.get("titel");if(!m)throw new te(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function HB(i,e){const{meta:t,body:n}=Eh(i,e),a=t.get("titel");if(!a)throw new te(`${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:Fh(n,e)}}function Du(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!o3(n))throw new te(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${ih.join(", ")}.`);return t}const VB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Yx,"../../lessons/de/02-der-editor.md":Xx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":Kx,"../../lessons/de/04-variablen-und-datentypen.md":eb,"../../lessons/de/05-sequenz.md":tb,"../../lessons/de/06-eingabe-und-ausgabe.md":nb,"../../lessons/de/07-simulation-und-schreibtischtest.md":ib,"../../lessons/de/08-verzweigung.md":ab,"../../lessons/de/09-bedingungen-verknuepfen.md":sb,"../../lessons/de/10-fallauswahl.md":rb,"../../lessons/de/11-while-schleife.md":ob,"../../lessons/de/12-do-while-schleife.md":lb,"../../lessons/de/13-for-schleife.md":ub,"../../lessons/de/14-verschachteln.md":mb,"../../lessons/de/15-arrays.md":cb,"../../lessons/de/16-zweidimensionale-arrays.md":db,"../../lessons/de/17-zeichenketten.md":hb,"../../lessons/de/18-aufruf-und-aussprung.md":gb,"../../lessons/de/19-suchen-und-sortieren.md":pb,"../../lessons/de/20-java.md":fb,"../../lessons/de/21-python-und-javascript.md":xb,"../../lessons/de/22-try-und-catch.md":bb,"../../lessons/de/23-text-einlesen-und-speichern.md":vb,"../../lessons/de/24-zeile-fuer-zeile.md":yb,"../../lessons/de/25-tabellen-als-csv.md":wb,"../../lessons/de/26-json.md":zb,"../../lessons/de/27-formate-im-vergleich.md":Ib,"../../lessons/de/28-erstes-fenster.md":kb,"../../lessons/de/29-knopf-im-fenster.md":Sb,"../../lessons/de/30-der-knopf-reagiert.md":_b,"../../lessons/de/31-zahl-verdoppeln.md":Tb,"../../lessons/de/32-klickzaehler.md":Ob,"../../lessons/de/33-ampel.md":Ab,"../../lessons/de/34-notenrechner.md":Pb,"../../lessons/de/35-taschenrechner.md":jb,"../../lessons/de/36-zahlenraten.md":Cb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Bb,"../../lessons/de/38-innere-klassen.md":Db,"../../lessons/de/39-zwei-reiter.md":Zb,"../../lessons/de/40-model-view-controller.md":Mb,"../../lessons/de/begriffe.md":Lb,"../../lessons/de/nachschlagen.md":Wb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Eb,"../../lessons/en/02-der-editor.md":Nb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Fb,"../../lessons/en/04-variablen-und-datentypen.md":Jb,"../../lessons/en/05-sequenz.md":Rb,"../../lessons/en/06-eingabe-und-ausgabe.md":Gb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Hb,"../../lessons/en/08-verzweigung.md":Vb,"../../lessons/en/09-bedingungen-verknuepfen.md":Qb,"../../lessons/en/10-fallauswahl.md":qb,"../../lessons/en/11-while-schleife.md":Ub,"../../lessons/en/12-do-while-schleife.md":$b,"../../lessons/en/13-for-schleife.md":Yb,"../../lessons/en/14-verschachteln.md":Xb,"../../lessons/en/15-arrays.md":Kb,"../../lessons/en/16-zweidimensionale-arrays.md":e4,"../../lessons/en/17-zeichenketten.md":t4,"../../lessons/en/18-aufruf-und-aussprung.md":n4,"../../lessons/en/19-suchen-und-sortieren.md":i4,"../../lessons/en/20-java.md":a4,"../../lessons/en/21-python-und-javascript.md":s4,"../../lessons/en/22-try-und-catch.md":r4,"../../lessons/en/23-text-einlesen-und-speichern.md":o4,"../../lessons/en/24-zeile-fuer-zeile.md":l4,"../../lessons/en/25-tabellen-als-csv.md":u4,"../../lessons/en/26-json.md":m4,"../../lessons/en/27-formate-im-vergleich.md":c4,"../../lessons/en/28-erstes-fenster.md":d4,"../../lessons/en/29-knopf-im-fenster.md":h4,"../../lessons/en/30-der-knopf-reagiert.md":g4,"../../lessons/en/31-zahl-verdoppeln.md":p4,"../../lessons/en/32-klickzaehler.md":f4,"../../lessons/en/33-ampel.md":x4,"../../lessons/en/34-notenrechner.md":b4,"../../lessons/en/35-taschenrechner.md":v4,"../../lessons/en/36-zahlenraten.md":y4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":w4,"../../lessons/en/38-innere-klassen.md":z4,"../../lessons/en/39-zwei-reiter.md":I4,"../../lessons/en/40-model-view-controller.md":k4,"../../lessons/en/begriffe.md":S4,"../../lessons/en/nachschlagen.md":_4,"../../lessons/pt/01-was-ist-ein-struktogramm.md":T4,"../../lessons/pt/02-der-editor.md":O4,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":A4,"../../lessons/pt/04-variablen-und-datentypen.md":P4,"../../lessons/pt/05-sequenz.md":j4,"../../lessons/pt/06-eingabe-und-ausgabe.md":C4,"../../lessons/pt/07-simulation-und-schreibtischtest.md":B4,"../../lessons/pt/08-verzweigung.md":D4,"../../lessons/pt/09-bedingungen-verknuepfen.md":Z4,"../../lessons/pt/10-fallauswahl.md":M4,"../../lessons/pt/11-while-schleife.md":L4,"../../lessons/pt/12-do-while-schleife.md":W4,"../../lessons/pt/13-for-schleife.md":E4,"../../lessons/pt/14-verschachteln.md":N4,"../../lessons/pt/15-arrays.md":F4,"../../lessons/pt/16-zweidimensionale-arrays.md":J4,"../../lessons/pt/17-zeichenketten.md":R4,"../../lessons/pt/18-aufruf-und-aussprung.md":G4,"../../lessons/pt/19-suchen-und-sortieren.md":H4,"../../lessons/pt/20-java.md":V4,"../../lessons/pt/21-python-und-javascript.md":Q4,"../../lessons/pt/22-try-und-catch.md":q4,"../../lessons/pt/23-text-einlesen-und-speichern.md":U4,"../../lessons/pt/24-zeile-fuer-zeile.md":$4,"../../lessons/pt/25-tabellen-als-csv.md":Y4,"../../lessons/pt/26-json.md":X4,"../../lessons/pt/27-formate-im-vergleich.md":K4,"../../lessons/pt/28-erstes-fenster.md":ev,"../../lessons/pt/29-knopf-im-fenster.md":tv,"../../lessons/pt/30-der-knopf-reagiert.md":nv,"../../lessons/pt/31-zahl-verdoppeln.md":iv,"../../lessons/pt/32-klickzaehler.md":av,"../../lessons/pt/33-ampel.md":sv,"../../lessons/pt/34-notenrechner.md":rv,"../../lessons/pt/35-taschenrechner.md":ov,"../../lessons/pt/36-zahlenraten.md":lv,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":uv,"../../lessons/pt/38-innere-klassen.md":mv,"../../lessons/pt/39-zwei-reiter.md":cv,"../../lessons/pt/40-model-view-controller.md":dv,"../../lessons/pt/begriffe.md":hv,"../../lessons/pt/nachschlagen.md":gv}),QB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":pv,"../../lessons/de/aufgaben/ballwurf.md":fv,"../../lessons/de/aufgaben/bestenliste.md":xv,"../../lessons/de/aufgaben/binaerzahl.md":bv,"../../lessons/de/aufgaben/caesar.md":vv,"../../lessons/de/aufgaben/collatz.md":yv,"../../lessons/de/aufgaben/einheitenrechner.md":wv,"../../lessons/de/aufgaben/fibonacci.md":zv,"../../lessons/de/aufgaben/gerade-ungerade.md":Iv,"../../lessons/de/aufgaben/mehrwertsteuer.md":kv,"../../lessons/de/aufgaben/notendurchschnitt.md":Sv,"../../lessons/de/aufgaben/pin-pruefen.md":_v,"../../lessons/de/aufgaben/schiffe-versenken.md":Tv,"../../lessons/de/aufgaben/speisekarte.md":Ov,"../../lessons/de/aufgaben/summe-bilden.md":Av,"../../lessons/de/aufgaben/tafeldienst.md":Pv,"../../lessons/de/aufgaben/taschenrechner.md":jv,"../../lessons/de/aufgaben/verleih-menue.md":Cv,"../../lessons/de/aufgaben/vokabeltrainer.md":Bv,"../../lessons/de/aufgaben/volljaehrig.md":Dv,"../../lessons/de/aufgaben/wuerfel-mvc.md":Zv,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Mv,"../../lessons/en/aufgaben/alter-unterprogramm.md":Lv,"../../lessons/en/aufgaben/ballwurf.md":Wv,"../../lessons/en/aufgaben/bestenliste.md":Ev,"../../lessons/en/aufgaben/binaerzahl.md":Nv,"../../lessons/en/aufgaben/caesar.md":Fv,"../../lessons/en/aufgaben/collatz.md":Jv,"../../lessons/en/aufgaben/einheitenrechner.md":Rv,"../../lessons/en/aufgaben/fibonacci.md":Gv,"../../lessons/en/aufgaben/gerade-ungerade.md":Hv,"../../lessons/en/aufgaben/mehrwertsteuer.md":Vv,"../../lessons/en/aufgaben/notendurchschnitt.md":Qv,"../../lessons/en/aufgaben/pin-pruefen.md":qv,"../../lessons/en/aufgaben/schiffe-versenken.md":Uv,"../../lessons/en/aufgaben/speisekarte.md":$v,"../../lessons/en/aufgaben/summe-bilden.md":Yv,"../../lessons/en/aufgaben/tafeldienst.md":Xv,"../../lessons/en/aufgaben/taschenrechner.md":Kv,"../../lessons/en/aufgaben/verleih-menue.md":ey,"../../lessons/en/aufgaben/vokabeltrainer.md":ty,"../../lessons/en/aufgaben/volljaehrig.md":ny,"../../lessons/en/aufgaben/wuerfel-mvc.md":iy,"../../lessons/en/aufgaben/zahl-verdoppeln.md":ay,"../../lessons/pt/aufgaben/alter-unterprogramm.md":sy,"../../lessons/pt/aufgaben/ballwurf.md":ry,"../../lessons/pt/aufgaben/bestenliste.md":oy,"../../lessons/pt/aufgaben/binaerzahl.md":ly,"../../lessons/pt/aufgaben/caesar.md":uy,"../../lessons/pt/aufgaben/collatz.md":my,"../../lessons/pt/aufgaben/einheitenrechner.md":cy,"../../lessons/pt/aufgaben/fibonacci.md":dy,"../../lessons/pt/aufgaben/gerade-ungerade.md":hy,"../../lessons/pt/aufgaben/mehrwertsteuer.md":gy,"../../lessons/pt/aufgaben/notendurchschnitt.md":py,"../../lessons/pt/aufgaben/pin-pruefen.md":fy,"../../lessons/pt/aufgaben/schiffe-versenken.md":xy,"../../lessons/pt/aufgaben/speisekarte.md":by,"../../lessons/pt/aufgaben/summe-bilden.md":vy,"../../lessons/pt/aufgaben/tafeldienst.md":yy,"../../lessons/pt/aufgaben/taschenrechner.md":wy,"../../lessons/pt/aufgaben/verleih-menue.md":zy,"../../lessons/pt/aufgaben/vokabeltrainer.md":Iy,"../../lessons/pt/aufgaben/volljaehrig.md":ky,"../../lessons/pt/aufgaben/wuerfel-mvc.md":Sy,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":_y}),Zu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":Ty,"../../lessons/de/visubot/02-das-quadrat.md":Oy,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Ay,"../../lessons/de/visubot/04-sensoren.md":Py,"../../lessons/de/visubot/05-bis-zur-wand.md":jy,"../../lessons/de/visubot/06-abstand.md":Cy,"../../lessons/de/visubot/07-linie.md":By,"../../lessons/de/visubot/08-farben.md":Dy,"../../lessons/de/visubot/09-fallauswahl.md":Zy,"../../lessons/de/visubot/10-tasten-joystick.md":My,"../../lessons/de/visubot/11-licht.md":Ly,"../../lessons/de/visubot/12-lautstaerke.md":Wy,"../../lessons/de/visubot/13-neigung.md":Ey,"../../lessons/de/visubot/14-leds.md":Ny,"../../lessons/de/visubot/15-einzelne-leds.md":Fy,"../../lessons/de/visubot/16-lautsprecher.md":Jy,"../../lessons/de/visubot/17-arrays-melodie.md":Ry,"../../lessons/de/visubot/18-bildschirm.md":Gy,"../../lessons/de/visubot/19-zeichenketten.md":Hy,"../../lessons/de/visubot/20-motoren.md":Vy,"../../lessons/de/visubot/21-stoppuhr-akku.md":Qy,"../../lessons/de/visubot/22-eigene-methoden.md":qy,"../../lessons/de/visubot/nachschlagen.md":Uy,"../../lessons/en/visubot/01-der-mbot2.md":$y,"../../lessons/en/visubot/02-das-quadrat.md":Yy,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Xy,"../../lessons/en/visubot/04-sensoren.md":Ky,"../../lessons/en/visubot/05-bis-zur-wand.md":e9,"../../lessons/en/visubot/06-abstand.md":t9,"../../lessons/en/visubot/07-linie.md":n9,"../../lessons/en/visubot/08-farben.md":i9,"../../lessons/en/visubot/09-fallauswahl.md":a9,"../../lessons/en/visubot/10-tasten-joystick.md":s9,"../../lessons/en/visubot/11-licht.md":r9,"../../lessons/en/visubot/12-lautstaerke.md":o9,"../../lessons/en/visubot/13-neigung.md":l9,"../../lessons/en/visubot/14-leds.md":u9,"../../lessons/en/visubot/15-einzelne-leds.md":m9,"../../lessons/en/visubot/16-lautsprecher.md":c9,"../../lessons/en/visubot/17-arrays-melodie.md":d9,"../../lessons/en/visubot/18-bildschirm.md":h9,"../../lessons/en/visubot/19-zeichenketten.md":g9,"../../lessons/en/visubot/20-motoren.md":p9,"../../lessons/en/visubot/21-stoppuhr-akku.md":f9,"../../lessons/en/visubot/22-eigene-methoden.md":x9,"../../lessons/en/visubot/nachschlagen.md":b9}),qB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":v9,"../../lessons/de/visubot/aufgaben/ausgang.md":y9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":w9,"../../lessons/de/visubot/aufgaben/dreieck.md":z9,"../../lessons/de/visubot/aufgaben/einparken.md":I9,"../../lessons/de/visubot/aufgaben/hindernis.md":k9,"../../lessons/de/visubot/aufgaben/knight-rider.md":S9,"../../lessons/de/visubot/aufgaben/labyrinth.md":_9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":T9,"../../lessons/de/visubot/aufgaben/morsen.md":O9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":A9,"../../lessons/de/visubot/aufgaben/slalom.md":P9,"../../lessons/de/visubot/aufgaben/spirale.md":j9,"../../lessons/de/visubot/aufgaben/treppe.md":C9,"../../lessons/de/visubot/aufgaben/tunnel.md":B9,"../../lessons/de/visubot/aufgaben/wald.md":D9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":Z9,"../../lessons/en/visubot/aufgaben/ausgang.md":M9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":L9,"../../lessons/en/visubot/aufgaben/dreieck.md":W9,"../../lessons/en/visubot/aufgaben/einparken.md":E9,"../../lessons/en/visubot/aufgaben/hindernis.md":N9,"../../lessons/en/visubot/aufgaben/knight-rider.md":F9,"../../lessons/en/visubot/aufgaben/labyrinth.md":J9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":R9,"../../lessons/en/visubot/aufgaben/morsen.md":G9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":H9,"../../lessons/en/visubot/aufgaben/slalom.md":V9,"../../lessons/en/visubot/aufgaben/spirale.md":Q9,"../../lessons/en/visubot/aufgaben/treppe.md":q9,"../../lessons/en/visubot/aufgaben/tunnel.md":U9,"../../lessons/en/visubot/aufgaben/wald.md":$9}),UB=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":Y9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":ew,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":tw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":nw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":iw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":aw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":sw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":rw,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":ow,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":lw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":uw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":mw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":cw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":dw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":hw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":gw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":pw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":fw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":xw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":bw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":vw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":yw,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":ww,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":zw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":Iw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":kw,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":Sw,"../../lessons/diagramme/dt-buffered.visustruct":_w,"../../lessons/diagramme/dt-csv.visustruct":Tw,"../../lessons/diagramme/dt-json.visustruct":Ow,"../../lessons/diagramme/dt-lesen.visustruct":Aw,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":Pw,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":jw,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Cw,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Bw,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":Dw,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Zw,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":Mw,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":Lw,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":Ww,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":Ew,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":Nw,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Fw,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":Jw,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":Rw,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Gw,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":Hw,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":Vw,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":Qw,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":qw,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":Uw,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":$w,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":Yw,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Xw,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":Kw,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":e5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":t5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":n5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":i5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":a5,"../../lessons/diagramme/en/dt-buffered.visustruct":s5,"../../lessons/diagramme/en/dt-csv.visustruct":r5,"../../lessons/diagramme/en/dt-json.visustruct":o5,"../../lessons/diagramme/en/dt-lesen.visustruct":l5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":u5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":m5,"../../lessons/diagramme/en/kino-frei-start.visustruct":c5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":d5,"../../lessons/diagramme/en/kino-karte-start.visustruct":h5,"../../lessons/diagramme/en/kino-saalplan.visustruct":g5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":p5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":f5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":x5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":b5,"../../lessons/diagramme/en/l04-rechnen.visustruct":v5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":y5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":w5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":z5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":I5,"../../lessons/diagramme/en/l04-tauschen.visustruct":k5,"../../lessons/diagramme/en/l05-datentypen.visustruct":S5,"../../lessons/diagramme/en/l05-division.visustruct":_5,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":T5,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":O5,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":A5,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":P5,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":j5,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":C5,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":B5,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":D5,"../../lessons/diagramme/en/l06-eva.visustruct":Z5,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":M5,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":L5,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":W5,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":E5,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":N5,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":F5,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":J5,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":R5,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":G5,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":H5,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":V5,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":Q5,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":q5,"../../lessons/diagramme/en/l07-rabatt.visustruct":U5,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":$5,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":Y5,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":X5,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":K5,"../../lessons/diagramme/en/l08-jugendticket.visustruct":e6,"../../lessons/diagramme/en/l08-note.visustruct":t6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":n6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":i6,"../../lessons/diagramme/en/l09-ampel.visustruct":a6,"../../lessons/diagramme/en/l09-automat.visustruct":s6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":r6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":o6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":l6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":u6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":m6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":c6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":d6,"../../lessons/diagramme/en/l1-sequenz.visustruct":h6,"../../lessons/diagramme/en/l1-tee.visustruct":g6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":p6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":f6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":x6,"../../lessons/diagramme/en/l10-countdown.visustruct":b6,"../../lessons/diagramme/en/l10-endlos.visustruct":v6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":y6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":w6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":z6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":I6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":k6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":S6,"../../lessons/diagramme/en/l11-einmal.visustruct":_6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":O6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":A6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":j6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":D6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":Z6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":M6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":L6,"../../lessons/diagramme/en/l12-summe.visustruct":W6,"../../lessons/diagramme/en/l13-dreieck.visustruct":E6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":N6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":F6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":J6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":R6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":G6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":H6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":V6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":Q6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":q6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":U6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":$6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":Y6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":X6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":ez,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":tz,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":nz,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":iz,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":az,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":sz,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":rz,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":oz,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":lz,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":uz,"../../lessons/diagramme/en/l15-quadrat.visustruct":mz,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":cz,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":dz,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":hz,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":gz,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":pz,"../../lessons/diagramme/en/l16-countdown-start.visustruct":fz,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":xz,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":bz,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":vz,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":yz,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":wz,"../../lessons/diagramme/en/l16-summe-start.visustruct":zz,"../../lessons/diagramme/en/l17-beispiel.visustruct":Iz,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":kz,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":Sz,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":_z,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":Tz,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":Oz,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Az,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":Pz,"../../lessons/diagramme/en/l18-beispiel.visustruct":jz,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":Cz,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Bz,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Dz,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Zz,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Mz,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Lz,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Wz,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Ez,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Nz,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Fz,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Jz,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Rz,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Gz,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Hz,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Vz,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":Qz,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":qz,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":Uz,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":$z,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Yz,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Xz,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":Kz,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":e7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":t7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":n7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":i7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":a7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":s7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":r7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":o7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":l7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":u7,"../../lessons/diagramme/en/sim-kino-start.visustruct":m7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":c7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":d7,"../../lessons/diagramme/en/sim-tausch.visustruct":h7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":g7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":p7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":f7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":x7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":b7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":v7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":y7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":w7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":z7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":I7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":k7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":S7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":_7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":eI,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":tI,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":nI,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":iI,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":aI,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":sI,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":rI,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":oI,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":lI,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":uI,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":mI,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":cI,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":dI,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":hI,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":gI,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":pI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":fI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":xI,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":bI,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":vI,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":yI,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":wI,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":zI,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":II,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":kI,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":SI,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":_I,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":TI,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":OI,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":AI,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":PI,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":jI,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":CI,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":BI,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":DI,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":ZI,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":MI,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":LI,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":WI,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":EI,"../../lessons/diagramme/en/zk-mehr.visustruct":NI,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":FI,"../../lessons/diagramme/en/zk-split.visustruct":JI,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":RI,"../../lessons/diagramme/en/zk-zaehlen.visustruct":GI,"../../lessons/diagramme/en/zk-zeichen.visustruct":HI,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":VI,"../../lessons/diagramme/kino-frei-loesung.visustruct":QI,"../../lessons/diagramme/kino-frei-start.visustruct":qI,"../../lessons/diagramme/kino-karte-loesung.visustruct":UI,"../../lessons/diagramme/kino-karte-start.visustruct":$I,"../../lessons/diagramme/kino-saalplan.visustruct":YI,"../../lessons/diagramme/kino-verkaufen.visustruct":XI,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":KI,"../../lessons/diagramme/l04-java-fehler-start.visustruct":e8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":t8,"../../lessons/diagramme/l04-rechnen.visustruct":n8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":i8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":a8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":s8,"../../lessons/diagramme/l04-tauschen-start.visustruct":r8,"../../lessons/diagramme/l04-tauschen.visustruct":o8,"../../lessons/diagramme/l05-datentypen.visustruct":l8,"../../lessons/diagramme/l05-division.visustruct":u8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":m8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":c8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":d8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":h8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":g8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":p8,"../../lessons/diagramme/l05-sekunden-start.visustruct":f8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":x8,"../../lessons/diagramme/l06-eva.visustruct":b8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":v8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":y8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":w8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":z8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":I8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":k8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":S8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":_8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":T8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":O8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":A8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":P8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":j8,"../../lessons/diagramme/l07-rabatt.visustruct":C8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":B8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":D8,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":Z8,"../../lessons/diagramme/l08-java-fehler-start.visustruct":M8,"../../lessons/diagramme/l08-jugendticket.visustruct":L8,"../../lessons/diagramme/l08-note.visustruct":W8,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":E8,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":N8,"../../lessons/diagramme/l09-ampel.visustruct":F8,"../../lessons/diagramme/l09-automat.visustruct":J8,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":R8,"../../lessons/diagramme/l09-java-fehler-start.visustruct":G8,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":H8,"../../lessons/diagramme/l09-note-loesung.visustruct":V8,"../../lessons/diagramme/l09-rechner-loesung.visustruct":Q8,"../../lessons/diagramme/l09-verschachtelt.visustruct":q8,"../../lessons/diagramme/l1-grundbausteine.visustruct":U8,"../../lessons/diagramme/l1-sequenz.visustruct":$8,"../../lessons/diagramme/l1-tee.visustruct":Y8,"../../lessons/diagramme/l1-verzweigung.visustruct":X8,"../../lessons/diagramme/l1-wiederholung.visustruct":K8,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":ek,"../../lessons/diagramme/l10-countdown.visustruct":tk,"../../lessons/diagramme/l10-endlos.visustruct":nk,"../../lessons/diagramme/l10-fakultaet.visustruct":ik,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":ak,"../../lessons/diagramme/l10-java-fehler-start.visustruct":sk,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":rk,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":ok,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":lk,"../../lessons/diagramme/l11-einmal.visustruct":uk,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":mk,"../../lessons/diagramme/l11-java-fehler-start.visustruct":ck,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":dk,"../../lessons/diagramme/l11-note-loesung.visustruct":hk,"../../lessons/diagramme/l11-summe-loesung.visustruct":gk,"../../lessons/diagramme/l12-countdown-loesung.visustruct":pk,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":fk,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":xk,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":bk,"../../lessons/diagramme/l12-java-fehler-start.visustruct":vk,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":yk,"../../lessons/diagramme/l12-summe.visustruct":wk,"../../lessons/diagramme/l13-dreieck.visustruct":zk,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":Ik,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":kk,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":Sk,"../../lessons/diagramme/l13-java-fehler-start.visustruct":_k,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":Tk,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":Ok,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":Ak,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":Pk,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":jk,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Ck,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":Bk,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Dk,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":Zk,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":Mk,"../../lessons/diagramme/l14-summe-maximum.visustruct":Lk,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":Wk,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":Ek,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":Nk,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":Fk,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Jk,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Rk,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Gk,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":Hk,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Vk,"../../lessons/diagramme/l15-quadrat.visustruct":Qk,"../../lessons/diagramme/l15-titel-loesung.visustruct":qk,"../../lessons/diagramme/l15-unterprogramm.visustruct":Uk,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":$k,"../../lessons/diagramme/l15-zeige-summe.visustruct":Yk,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Xk,"../../lessons/diagramme/l16-countdown-start.visustruct":Kk,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":eS,"../../lessons/diagramme/l16-java-fehler-start.visustruct":tS,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":nS,"../../lessons/diagramme/l16-schreibtisch.visustruct":iS,"../../lessons/diagramme/l16-summe-loesung.visustruct":aS,"../../lessons/diagramme/l16-summe-start.visustruct":sS,"../../lessons/diagramme/l17-beispiel.visustruct":rS,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":oS,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":lS,"../../lessons/diagramme/l17-java-brief-start.visustruct":uS,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":mS,"../../lessons/diagramme/l17-java-fehler-start.visustruct":cS,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":dS,"../../lessons/diagramme/l17-ticket-loesung.visustruct":hS,"../../lessons/diagramme/l18-beispiel.visustruct":gS,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":pS,"../../lessons/diagramme/l18-java-fehler-start.visustruct":fS,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":xS,"../../lessons/diagramme/l18-js-loesung.visustruct":bS,"../../lessons/diagramme/l18-python-loesung.visustruct":vS,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":yS,"../../lessons/diagramme/l19-java-fehler-start.visustruct":wS,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":zS,"../../lessons/diagramme/l2-ausgabe.visustruct":IS,"../../lessons/diagramme/l2-hallo-loesung.visustruct":kS,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":SS,"../../lessons/diagramme/l20-countdown-loesung.visustruct":_S,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":TS,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":OS,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":AS,"../../lessons/diagramme/l23-java-nummern-start.visustruct":PS,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":jS,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":CS,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":BS,"../../lessons/diagramme/l24-java-laengster-start.visustruct":DS,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":ZS,"../../lessons/diagramme/l25-java-beste-start.visustruct":MS,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":LS,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":WS,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":ES,"../../lessons/diagramme/l26-java-namen-start.visustruct":NS,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":FS,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":JS,"../../lessons/diagramme/l27-java-json-loesung.visustruct":RS,"../../lessons/diagramme/l27-java-json-start.visustruct":GS,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":HS,"../../lessons/diagramme/l27-java-saetze-start.visustruct":VS,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":QS,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":qS,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":US,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":$S,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":YS,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":XS,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":KS,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":p_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":f_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":x_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":b_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":v_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":y_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":w_,"../../lessons/diagramme/pt/dt-buffered.visustruct":z_,"../../lessons/diagramme/pt/dt-csv.visustruct":I_,"../../lessons/diagramme/pt/dt-json.visustruct":k_,"../../lessons/diagramme/pt/dt-lesen.visustruct":S_,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":__,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":T_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":O_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":A_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":P_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":j_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":C_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":B_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":D_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":Z_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":M_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":L_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":W_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":E_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":N_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":F_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":J_,"../../lessons/diagramme/pt/l05-division.visustruct":R_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":G_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":V_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":Q_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":q_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":U_,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":$_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":Y_,"../../lessons/diagramme/pt/l06-eva.visustruct":X_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":eT,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":tT,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":nT,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":iT,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":aT,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":sT,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":rT,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":oT,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":lT,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":uT,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":mT,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":cT,"../../lessons/diagramme/pt/l07-rabatt.visustruct":dT,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":hT,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":gT,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":pT,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":fT,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":xT,"../../lessons/diagramme/pt/l08-note.visustruct":bT,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":vT,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":yT,"../../lessons/diagramme/pt/l09-ampel.visustruct":wT,"../../lessons/diagramme/pt/l09-automat.visustruct":zT,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":IT,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":kT,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":ST,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":_T,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":TT,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":OT,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":AT,"../../lessons/diagramme/pt/l1-sequenz.visustruct":PT,"../../lessons/diagramme/pt/l1-tee.visustruct":jT,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":CT,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":BT,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":DT,"../../lessons/diagramme/pt/l10-countdown.visustruct":ZT,"../../lessons/diagramme/pt/l10-endlos.visustruct":MT,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":LT,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":WT,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":ET,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":NT,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":FT,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":JT,"../../lessons/diagramme/pt/l11-einmal.visustruct":RT,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":GT,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":HT,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":VT,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":QT,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":qT,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":UT,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":$T,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":YT,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":XT,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":KT,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":eO,"../../lessons/diagramme/pt/l12-summe.visustruct":tO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":nO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":iO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":aO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":sO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":rO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":oO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":lO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":uO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":mO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":cO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":dO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":hO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":gO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":pO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":fO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":xO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":bO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":vO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":yO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":wO,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":zO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":IO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":kO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":SO,"../../lessons/diagramme/pt/l15-quadrat.visustruct":_O,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":TO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":OO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":AO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":PO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":jO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":CO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":BO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":DO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":ZO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":MO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":LO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":WO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":EO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":NO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":FO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":JO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":RO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":GO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":HO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":VO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":QO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":qO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":UO,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":$O,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":YO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":XO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":KO,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":eA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":tA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":nA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":iA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":aA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":sA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":rA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":oA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":lA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":uA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":mA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":cA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":dA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":hA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":gA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":pA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":fA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":xA,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":bA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":vA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":yA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":wA,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":zA,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":IA,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":kA,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":SA,"../../lessons/diagramme/pt/sim-kino-start.visustruct":_A,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":TA,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":OA,"../../lessons/diagramme/pt/sim-tausch.visustruct":AA,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":PA,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":jA,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":CA,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":BA,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":DA,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":ZA,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":MA,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":LA,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":WA,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":EA,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":NA,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":FA,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":JA,"../../lessons/diagramme/pt/zk-mehr.visustruct":RA,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":GA,"../../lessons/diagramme/pt/zk-split.visustruct":HA,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":VA,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":QA,"../../lessons/diagramme/pt/zk-zeichen.visustruct":qA,"../../lessons/diagramme/sim-kino-loesung.visustruct":UA,"../../lessons/diagramme/sim-kino-start.visustruct":$A,"../../lessons/diagramme/sim-tausch-loesung.visustruct":YA,"../../lessons/diagramme/sim-tausch-start.visustruct":XA,"../../lessons/diagramme/sim-tausch.visustruct":KA,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":eP,"../../lessons/diagramme/ss-absteigend-start.visustruct":tP,"../../lessons/diagramme/ss-binaere-suche.visustruct":nP,"../../lessons/diagramme/ss-bubblesort.visustruct":iP,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":aP,"../../lessons/diagramme/ss-lineare-suche.visustruct":sP,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":rP,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":oP,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":lP,"../../lessons/diagramme/uebergabe-haupt.visustruct":uP,"../../lessons/diagramme/uebergabe-leeren.visustruct":mP,"../../lessons/diagramme/uebergabe-verdopple.visustruct":cP,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":dP,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":hP,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":gP,"../../lessons/diagramme/vb-ampel-loesung.visustruct":pP,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":fP,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":xP,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":bP,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":vP,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":yP,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":wP,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":zP,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":IP,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":kP,"../../lessons/diagramme/vb-einparken-loesung.visustruct":SP,"../../lessons/diagramme/vb-farben-loesung.visustruct":_P,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":TP,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":OP,"../../lessons/diagramme/vb-gerade-loesung.visustruct":AP,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":PP,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":jP,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":CP,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":BP,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":DP,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":ZP,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":MP,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":LP,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":WP,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":EP,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":NP,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":FP,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":JP,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":RP,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":GP,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":HP,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":VP,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":QP,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":qP,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":UP,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":$P,"../../lessons/diagramme/vb-melodie-loesung.visustruct":YP,"../../lessons/diagramme/vb-morsen-loesung.visustruct":XP,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":KP,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":ej,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":tj,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":nj,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":ij,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":aj,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":sj,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":rj,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":oj,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":lj,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":uj,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":mj,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":cj,"../../lessons/diagramme/vb-rand-loesung.visustruct":dj,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":hj,"../../lessons/diagramme/vb-slalom-loesung.visustruct":gj,"../../lessons/diagramme/vb-spirale-loesung.visustruct":pj,"../../lessons/diagramme/vb-start-a-loesung.visustruct":fj,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":xj,"../../lessons/diagramme/vb-treppe-loesung.visustruct":bj,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":vj,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":yj,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":wj,"../../lessons/diagramme/vb-wald-loesung.visustruct":zj,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":Ij,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":kj,"../../lessons/diagramme/zk-initialen-loesung.visustruct":Sj,"../../lessons/diagramme/zk-mehr.visustruct":_j,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":Tj,"../../lessons/diagramme/zk-split.visustruct":Oj,"../../lessons/diagramme/zk-woerter-loesung.visustruct":Aj,"../../lessons/diagramme/zk-zaehlen.visustruct":Pj,"../../lessons/diagramme/zk-zeichen.visustruct":jj}),$B=Object.assign({"../../lessons/welten/ausgang-1.txt":Cj,"../../lessons/welten/ausgang-2.txt":Bj,"../../lessons/welten/ecke.txt":Dj,"../../lessons/welten/farbe-1.txt":Zj,"../../lessons/welten/farbe-2.txt":Mj,"../../lessons/welten/farbe-3.txt":Lj,"../../lessons/welten/farbe-4.txt":Wj,"../../lessons/welten/hindernis-1.txt":Ej,"../../lessons/welten/hindernis-2.txt":Nj,"../../lessons/welten/labyrinth-1.txt":Fj,"../../lessons/welten/labyrinth-2.txt":Jj,"../../lessons/welten/linie-1.txt":Rj,"../../lessons/welten/linie-2.txt":Gj,"../../lessons/welten/linie-rot-1.txt":Hj,"../../lessons/welten/linie-rot-2.txt":Vj,"../../lessons/welten/parken-1.txt":Qj,"../../lessons/welten/parken-2.txt":qj,"../../lessons/welten/rand-1.txt":Uj,"../../lessons/welten/rand-2.txt":$j,"../../lessons/welten/slalom.txt":Yj,"../../lessons/welten/tunnel-1.txt":Xj,"../../lessons/welten/tunnel-2.txt":Kj,"../../lessons/welten/wald-1.txt":eC,"../../lessons/welten/wald-2.txt":tC,"../../lessons/welten/wand-frei.txt":nC,"../../lessons/welten/wand-kurz.txt":iC,"../../lessons/welten/wand-lang.txt":aC,"../../lessons/welten/wand-mittel.txt":sC,"../../lessons/welten/wand-nah.txt":rC,"../../lessons/welten/zeit-1.txt":oC,"../../lessons/welten/ziel-kurz.txt":lC,"../../lessons/welten/ziel-lang.txt":uC}),YB=Object.assign({"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":mC,"../../lessons/bilder/ben-shneiderman.jpg":cC,"../../lessons/bilder/caesar-ascii.svg":dC,"../../lessons/bilder/caesar-scheibe.svg":hC,"../../lessons/bilder/caesar-verschiebung.svg":gC,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":pC,"../../lessons/bilder/en/kino-saal.svg":fC,"../../lessons/bilder/en/kino-schleifen.svg":xC,"../../lessons/bilder/en/l01-pap.svg":bC,"../../lessons/bilder/en/l02-einfuegen.svg":vC,"../../lessons/bilder/en/l04-variable.svg":yC,"../../lessons/bilder/en/l04-zuweisung.svg":wC,"../../lessons/bilder/en/l05-tauschen.svg":zC,"../../lessons/bilder/en/l08-zahlenstrahl.svg":IC,"../../lessons/bilder/en/l10-kopfgesteuert.svg":kC,"../../lessons/bilder/en/l11-vergleich.svg":SC,"../../lessons/bilder/en/l12-for-ablauf.svg":_C,"../../lessons/bilder/en/l14-array.svg":TC,"../../lessons/bilder/en/mvc-klick.svg":OC,"../../lessons/bilder/en/ss-binaere-suche.svg":AC,"../../lessons/bilder/en/ss-bubblesort.svg":PC,"../../lessons/bilder/en/ss-lineare-suche.svg":jC,"../../lessons/bilder/en/ss-vergleiche.svg":CC,"../../lessons/bilder/en/uebergabe.svg":BC,"../../lessons/bilder/en/zk-zeichen.svg":DC,"../../lessons/bilder/ike-nassi.jpg":ZC,"../../lessons/bilder/kino-saal.svg":MC,"../../lessons/bilder/kino-schleifen.svg":LC,"../../lessons/bilder/l01-pap.svg":WC,"../../lessons/bilder/l02-einfuegen.svg":EC,"../../lessons/bilder/l04-variable.svg":NC,"../../lessons/bilder/l04-zuweisung.svg":FC,"../../lessons/bilder/l05-tauschen.svg":JC,"../../lessons/bilder/l08-zahlenstrahl.svg":RC,"../../lessons/bilder/l09-wahrheitstabelle.svg":GC,"../../lessons/bilder/l10-kopfgesteuert.svg":HC,"../../lessons/bilder/l11-vergleich.svg":VC,"../../lessons/bilder/l12-for-ablauf.svg":QC,"../../lessons/bilder/l14-array.svg":qC,"../../lessons/bilder/mvc-klick.svg":UC,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":$C,"../../lessons/bilder/pt/kino-saal.svg":YC,"../../lessons/bilder/pt/kino-schleifen.svg":XC,"../../lessons/bilder/pt/l01-pap.svg":KC,"../../lessons/bilder/pt/l02-einfuegen.svg":eB,"../../lessons/bilder/pt/l04-variable.svg":tB,"../../lessons/bilder/pt/l04-zuweisung.svg":nB,"../../lessons/bilder/pt/l05-tauschen.svg":iB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":aB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":sB,"../../lessons/bilder/pt/l11-vergleich.svg":rB,"../../lessons/bilder/pt/l12-for-ablauf.svg":oB,"../../lessons/bilder/pt/l14-array.svg":lB,"../../lessons/bilder/pt/mvc-klick.svg":uB,"../../lessons/bilder/pt/schiffe-versenken.svg":mB,"../../lessons/bilder/pt/ss-binaere-suche.svg":cB,"../../lessons/bilder/pt/ss-bubblesort.svg":dB,"../../lessons/bilder/pt/ss-lineare-suche.svg":hB,"../../lessons/bilder/pt/ss-vergleiche.svg":gB,"../../lessons/bilder/pt/uebergabe.svg":pB,"../../lessons/bilder/pt/zk-zeichen.svg":fB,"../../lessons/bilder/schiffe-versenken.svg":xB,"../../lessons/bilder/ss-binaere-suche.svg":bB,"../../lessons/bilder/ss-bubblesort.svg":vB,"../../lessons/bilder/ss-lineare-suche.svg":yB,"../../lessons/bilder/ss-vergleiche.svg":wB,"../../lessons/bilder/uebergabe.svg":zB,"../../lessons/bilder/zk-zeichen.svg":IB}),Jh=i=>i.replace(/^.*\//,"");function F1(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])=>[Jh(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Mu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let w1="en",Ot=[],Tn=[],Ma="",La=[],ds="off";function Lu(i){i!==ds&&(ds=i,Ot=[],hs(w1))}function hs(i){var s,r,o;if(e3(i),i===w1&&Ot.length>0)return;w1=i;const e=F1(VB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>GB(Nu(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=HB(Nu(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=F1(QB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ds==="on"){const l=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=XB(Eu(e),Eu(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=F1(qB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Tn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),Tn=n(a,"aufgaben/");Tn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...Tn.flatMap(u=>u.blocks)])l.kind==="textFile"&&m3(l.name,l.content);if(Ma=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ds!=="off"){const l=(r=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ma=`${Ma.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 te(`${e}: Keine Schritte (## Überschrift) gefunden.`);GB(r,e);const m=t.get("titel");if(!m)throw new te(`${e}: „titel:“ fehlt.`);return{id:a,number:s,title:m,section:t.get("bereich")??"",summary:t.get("kurz")??o.join(" ").trim(),steps:r}}function VB(i,e){const{meta:t,body:n}=Nh(i,e),a=t.get("titel");if(!a)throw new te(`${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:Jh(n,e)}}function Du(i,e){const t=i.split(/\s*,\s*/).map(n=>n.trim()).filter(Boolean);for(const n of t)if(!l3(n))throw new te(`${e}: Unbekanntes Teil „${n}“. Bekannt: ${ah.join(", ")}.`);return t}const QB=Object.assign({"../../lessons/de/01-was-ist-ein-struktogramm.md":Xx,"../../lessons/de/02-der-editor.md":Kx,"../../lessons/de/03-speichern-oeffnen-exportieren.md":eb,"../../lessons/de/04-variablen-und-datentypen.md":tb,"../../lessons/de/05-sequenz.md":nb,"../../lessons/de/06-eingabe-und-ausgabe.md":ib,"../../lessons/de/07-simulation-und-schreibtischtest.md":ab,"../../lessons/de/08-verzweigung.md":sb,"../../lessons/de/09-bedingungen-verknuepfen.md":rb,"../../lessons/de/10-fallauswahl.md":ob,"../../lessons/de/11-while-schleife.md":lb,"../../lessons/de/12-do-while-schleife.md":ub,"../../lessons/de/13-for-schleife.md":mb,"../../lessons/de/14-verschachteln.md":cb,"../../lessons/de/15-arrays.md":db,"../../lessons/de/16-zweidimensionale-arrays.md":hb,"../../lessons/de/17-zeichenketten.md":gb,"../../lessons/de/18-aufruf-und-aussprung.md":pb,"../../lessons/de/19-suchen-und-sortieren.md":fb,"../../lessons/de/20-java.md":xb,"../../lessons/de/21-python-und-javascript.md":bb,"../../lessons/de/22-try-und-catch.md":vb,"../../lessons/de/23-text-einlesen-und-speichern.md":yb,"../../lessons/de/24-zeile-fuer-zeile.md":wb,"../../lessons/de/25-tabellen-als-csv.md":zb,"../../lessons/de/26-json.md":Ib,"../../lessons/de/27-formate-im-vergleich.md":kb,"../../lessons/de/28-erstes-fenster.md":Sb,"../../lessons/de/29-knopf-im-fenster.md":_b,"../../lessons/de/30-der-knopf-reagiert.md":Tb,"../../lessons/de/31-zahl-verdoppeln.md":Ob,"../../lessons/de/32-klickzaehler.md":Ab,"../../lessons/de/33-ampel.md":Pb,"../../lessons/de/34-notenrechner.md":jb,"../../lessons/de/35-taschenrechner.md":Cb,"../../lessons/de/36-zahlenraten.md":Bb,"../../lessons/de/37-viele-knoepfe-ein-zuhoerer.md":Db,"../../lessons/de/38-innere-klassen.md":Zb,"../../lessons/de/39-zwei-reiter.md":Mb,"../../lessons/de/40-model-view-controller.md":Lb,"../../lessons/de/begriffe.md":Wb,"../../lessons/de/nachschlagen.md":Eb,"../../lessons/en/01-was-ist-ein-struktogramm.md":Nb,"../../lessons/en/02-der-editor.md":Fb,"../../lessons/en/03-speichern-oeffnen-exportieren.md":Jb,"../../lessons/en/04-variablen-und-datentypen.md":Rb,"../../lessons/en/05-sequenz.md":Gb,"../../lessons/en/06-eingabe-und-ausgabe.md":Hb,"../../lessons/en/07-simulation-und-schreibtischtest.md":Vb,"../../lessons/en/08-verzweigung.md":Qb,"../../lessons/en/09-bedingungen-verknuepfen.md":qb,"../../lessons/en/10-fallauswahl.md":Ub,"../../lessons/en/11-while-schleife.md":$b,"../../lessons/en/12-do-while-schleife.md":Yb,"../../lessons/en/13-for-schleife.md":Xb,"../../lessons/en/14-verschachteln.md":Kb,"../../lessons/en/15-arrays.md":e4,"../../lessons/en/16-zweidimensionale-arrays.md":t4,"../../lessons/en/17-zeichenketten.md":n4,"../../lessons/en/18-aufruf-und-aussprung.md":i4,"../../lessons/en/19-suchen-und-sortieren.md":a4,"../../lessons/en/20-java.md":s4,"../../lessons/en/21-python-und-javascript.md":r4,"../../lessons/en/22-try-und-catch.md":o4,"../../lessons/en/23-text-einlesen-und-speichern.md":l4,"../../lessons/en/24-zeile-fuer-zeile.md":u4,"../../lessons/en/25-tabellen-als-csv.md":m4,"../../lessons/en/26-json.md":c4,"../../lessons/en/27-formate-im-vergleich.md":d4,"../../lessons/en/28-erstes-fenster.md":h4,"../../lessons/en/29-knopf-im-fenster.md":g4,"../../lessons/en/30-der-knopf-reagiert.md":p4,"../../lessons/en/31-zahl-verdoppeln.md":f4,"../../lessons/en/32-klickzaehler.md":x4,"../../lessons/en/33-ampel.md":b4,"../../lessons/en/34-notenrechner.md":v4,"../../lessons/en/35-taschenrechner.md":y4,"../../lessons/en/36-zahlenraten.md":w4,"../../lessons/en/37-viele-knoepfe-ein-zuhoerer.md":z4,"../../lessons/en/38-innere-klassen.md":I4,"../../lessons/en/39-zwei-reiter.md":k4,"../../lessons/en/40-model-view-controller.md":S4,"../../lessons/en/begriffe.md":_4,"../../lessons/en/nachschlagen.md":T4,"../../lessons/pt/01-was-ist-ein-struktogramm.md":O4,"../../lessons/pt/02-der-editor.md":A4,"../../lessons/pt/03-speichern-oeffnen-exportieren.md":P4,"../../lessons/pt/04-variablen-und-datentypen.md":j4,"../../lessons/pt/05-sequenz.md":C4,"../../lessons/pt/06-eingabe-und-ausgabe.md":B4,"../../lessons/pt/07-simulation-und-schreibtischtest.md":D4,"../../lessons/pt/08-verzweigung.md":Z4,"../../lessons/pt/09-bedingungen-verknuepfen.md":M4,"../../lessons/pt/10-fallauswahl.md":L4,"../../lessons/pt/11-while-schleife.md":W4,"../../lessons/pt/12-do-while-schleife.md":E4,"../../lessons/pt/13-for-schleife.md":N4,"../../lessons/pt/14-verschachteln.md":F4,"../../lessons/pt/15-arrays.md":J4,"../../lessons/pt/16-zweidimensionale-arrays.md":R4,"../../lessons/pt/17-zeichenketten.md":G4,"../../lessons/pt/18-aufruf-und-aussprung.md":H4,"../../lessons/pt/19-suchen-und-sortieren.md":V4,"../../lessons/pt/20-java.md":Q4,"../../lessons/pt/21-python-und-javascript.md":q4,"../../lessons/pt/22-try-und-catch.md":U4,"../../lessons/pt/23-text-einlesen-und-speichern.md":$4,"../../lessons/pt/24-zeile-fuer-zeile.md":Y4,"../../lessons/pt/25-tabellen-als-csv.md":X4,"../../lessons/pt/26-json.md":K4,"../../lessons/pt/27-formate-im-vergleich.md":ev,"../../lessons/pt/28-erstes-fenster.md":tv,"../../lessons/pt/29-knopf-im-fenster.md":nv,"../../lessons/pt/30-der-knopf-reagiert.md":iv,"../../lessons/pt/31-zahl-verdoppeln.md":av,"../../lessons/pt/32-klickzaehler.md":sv,"../../lessons/pt/33-ampel.md":rv,"../../lessons/pt/34-notenrechner.md":ov,"../../lessons/pt/35-taschenrechner.md":lv,"../../lessons/pt/36-zahlenraten.md":uv,"../../lessons/pt/37-viele-knoepfe-ein-zuhoerer.md":mv,"../../lessons/pt/38-innere-klassen.md":cv,"../../lessons/pt/39-zwei-reiter.md":dv,"../../lessons/pt/40-model-view-controller.md":hv,"../../lessons/pt/begriffe.md":gv,"../../lessons/pt/nachschlagen.md":pv}),qB=Object.assign({"../../lessons/de/aufgaben/alter-unterprogramm.md":fv,"../../lessons/de/aufgaben/ballwurf.md":xv,"../../lessons/de/aufgaben/bestenliste.md":bv,"../../lessons/de/aufgaben/binaerzahl.md":vv,"../../lessons/de/aufgaben/caesar.md":yv,"../../lessons/de/aufgaben/collatz.md":wv,"../../lessons/de/aufgaben/einheitenrechner.md":zv,"../../lessons/de/aufgaben/fibonacci.md":Iv,"../../lessons/de/aufgaben/gerade-ungerade.md":kv,"../../lessons/de/aufgaben/mehrwertsteuer.md":Sv,"../../lessons/de/aufgaben/notendurchschnitt.md":_v,"../../lessons/de/aufgaben/pin-pruefen.md":Tv,"../../lessons/de/aufgaben/schiffe-versenken.md":Ov,"../../lessons/de/aufgaben/speisekarte.md":Av,"../../lessons/de/aufgaben/summe-bilden.md":Pv,"../../lessons/de/aufgaben/tafeldienst.md":jv,"../../lessons/de/aufgaben/taschenrechner.md":Cv,"../../lessons/de/aufgaben/verleih-menue.md":Bv,"../../lessons/de/aufgaben/vokabeltrainer.md":Dv,"../../lessons/de/aufgaben/volljaehrig.md":Zv,"../../lessons/de/aufgaben/wuerfel-mvc.md":Mv,"../../lessons/de/aufgaben/zahl-verdoppeln.md":Lv,"../../lessons/en/aufgaben/alter-unterprogramm.md":Wv,"../../lessons/en/aufgaben/ballwurf.md":Ev,"../../lessons/en/aufgaben/bestenliste.md":Nv,"../../lessons/en/aufgaben/binaerzahl.md":Fv,"../../lessons/en/aufgaben/caesar.md":Jv,"../../lessons/en/aufgaben/collatz.md":Rv,"../../lessons/en/aufgaben/einheitenrechner.md":Gv,"../../lessons/en/aufgaben/fibonacci.md":Hv,"../../lessons/en/aufgaben/gerade-ungerade.md":Vv,"../../lessons/en/aufgaben/mehrwertsteuer.md":Qv,"../../lessons/en/aufgaben/notendurchschnitt.md":qv,"../../lessons/en/aufgaben/pin-pruefen.md":Uv,"../../lessons/en/aufgaben/schiffe-versenken.md":$v,"../../lessons/en/aufgaben/speisekarte.md":Yv,"../../lessons/en/aufgaben/summe-bilden.md":Xv,"../../lessons/en/aufgaben/tafeldienst.md":Kv,"../../lessons/en/aufgaben/taschenrechner.md":ey,"../../lessons/en/aufgaben/verleih-menue.md":ty,"../../lessons/en/aufgaben/vokabeltrainer.md":ny,"../../lessons/en/aufgaben/volljaehrig.md":iy,"../../lessons/en/aufgaben/wuerfel-mvc.md":ay,"../../lessons/en/aufgaben/zahl-verdoppeln.md":sy,"../../lessons/pt/aufgaben/alter-unterprogramm.md":ry,"../../lessons/pt/aufgaben/ballwurf.md":oy,"../../lessons/pt/aufgaben/bestenliste.md":ly,"../../lessons/pt/aufgaben/binaerzahl.md":uy,"../../lessons/pt/aufgaben/caesar.md":my,"../../lessons/pt/aufgaben/collatz.md":cy,"../../lessons/pt/aufgaben/einheitenrechner.md":dy,"../../lessons/pt/aufgaben/fibonacci.md":hy,"../../lessons/pt/aufgaben/gerade-ungerade.md":gy,"../../lessons/pt/aufgaben/mehrwertsteuer.md":py,"../../lessons/pt/aufgaben/notendurchschnitt.md":fy,"../../lessons/pt/aufgaben/pin-pruefen.md":xy,"../../lessons/pt/aufgaben/schiffe-versenken.md":by,"../../lessons/pt/aufgaben/speisekarte.md":vy,"../../lessons/pt/aufgaben/summe-bilden.md":yy,"../../lessons/pt/aufgaben/tafeldienst.md":wy,"../../lessons/pt/aufgaben/taschenrechner.md":zy,"../../lessons/pt/aufgaben/verleih-menue.md":Iy,"../../lessons/pt/aufgaben/vokabeltrainer.md":ky,"../../lessons/pt/aufgaben/volljaehrig.md":Sy,"../../lessons/pt/aufgaben/wuerfel-mvc.md":_y,"../../lessons/pt/aufgaben/zahl-verdoppeln.md":Ty}),Zu=Object.assign({"../../lessons/de/visubot/01-der-mbot2.md":Oy,"../../lessons/de/visubot/02-das-quadrat.md":Ay,"../../lessons/de/visubot/03-variablen-und-ausgabe.md":Py,"../../lessons/de/visubot/04-sensoren.md":jy,"../../lessons/de/visubot/05-bis-zur-wand.md":Cy,"../../lessons/de/visubot/06-abstand.md":By,"../../lessons/de/visubot/07-linie.md":Dy,"../../lessons/de/visubot/08-farben.md":Zy,"../../lessons/de/visubot/09-fallauswahl.md":My,"../../lessons/de/visubot/10-tasten-joystick.md":Ly,"../../lessons/de/visubot/11-licht.md":Wy,"../../lessons/de/visubot/12-lautstaerke.md":Ey,"../../lessons/de/visubot/13-neigung.md":Ny,"../../lessons/de/visubot/14-leds.md":Fy,"../../lessons/de/visubot/15-einzelne-leds.md":Jy,"../../lessons/de/visubot/16-lautsprecher.md":Ry,"../../lessons/de/visubot/17-arrays-melodie.md":Gy,"../../lessons/de/visubot/18-bildschirm.md":Hy,"../../lessons/de/visubot/19-zeichenketten.md":Vy,"../../lessons/de/visubot/20-motoren.md":Qy,"../../lessons/de/visubot/21-stoppuhr-akku.md":qy,"../../lessons/de/visubot/22-eigene-methoden.md":Uy,"../../lessons/de/visubot/nachschlagen.md":$y,"../../lessons/en/visubot/01-der-mbot2.md":Yy,"../../lessons/en/visubot/02-das-quadrat.md":Xy,"../../lessons/en/visubot/03-variablen-und-ausgabe.md":Ky,"../../lessons/en/visubot/04-sensoren.md":e9,"../../lessons/en/visubot/05-bis-zur-wand.md":t9,"../../lessons/en/visubot/06-abstand.md":n9,"../../lessons/en/visubot/07-linie.md":i9,"../../lessons/en/visubot/08-farben.md":a9,"../../lessons/en/visubot/09-fallauswahl.md":s9,"../../lessons/en/visubot/10-tasten-joystick.md":r9,"../../lessons/en/visubot/11-licht.md":o9,"../../lessons/en/visubot/12-lautstaerke.md":l9,"../../lessons/en/visubot/13-neigung.md":u9,"../../lessons/en/visubot/14-leds.md":m9,"../../lessons/en/visubot/15-einzelne-leds.md":c9,"../../lessons/en/visubot/16-lautsprecher.md":d9,"../../lessons/en/visubot/17-arrays-melodie.md":h9,"../../lessons/en/visubot/18-bildschirm.md":g9,"../../lessons/en/visubot/19-zeichenketten.md":p9,"../../lessons/en/visubot/20-motoren.md":f9,"../../lessons/en/visubot/21-stoppuhr-akku.md":x9,"../../lessons/en/visubot/22-eigene-methoden.md":b9,"../../lessons/en/visubot/nachschlagen.md":v9}),UB=Object.assign({"../../lessons/de/visubot/aufgaben/alarmanlage.md":y9,"../../lessons/de/visubot/aufgaben/ausgang.md":w9,"../../lessons/de/visubot/aufgaben/binaer-zaehlen.md":z9,"../../lessons/de/visubot/aufgaben/dreieck.md":I9,"../../lessons/de/visubot/aufgaben/einparken.md":k9,"../../lessons/de/visubot/aufgaben/hindernis.md":S9,"../../lessons/de/visubot/aufgaben/knight-rider.md":_9,"../../lessons/de/visubot/aufgaben/labyrinth.md":T9,"../../lessons/de/visubot/aufgaben/linienfolger-stopp.md":O9,"../../lessons/de/visubot/aufgaben/morsen.md":A9,"../../lessons/de/visubot/aufgaben/nachtwaechter.md":P9,"../../lessons/de/visubot/aufgaben/slalom.md":j9,"../../lessons/de/visubot/aufgaben/spirale.md":C9,"../../lessons/de/visubot/aufgaben/treppe.md":B9,"../../lessons/de/visubot/aufgaben/tunnel.md":D9,"../../lessons/de/visubot/aufgaben/wald.md":Z9,"../../lessons/en/visubot/aufgaben/alarmanlage.md":M9,"../../lessons/en/visubot/aufgaben/ausgang.md":L9,"../../lessons/en/visubot/aufgaben/binaer-zaehlen.md":W9,"../../lessons/en/visubot/aufgaben/dreieck.md":E9,"../../lessons/en/visubot/aufgaben/einparken.md":N9,"../../lessons/en/visubot/aufgaben/hindernis.md":F9,"../../lessons/en/visubot/aufgaben/knight-rider.md":J9,"../../lessons/en/visubot/aufgaben/labyrinth.md":R9,"../../lessons/en/visubot/aufgaben/linienfolger-stopp.md":G9,"../../lessons/en/visubot/aufgaben/morsen.md":H9,"../../lessons/en/visubot/aufgaben/nachtwaechter.md":V9,"../../lessons/en/visubot/aufgaben/slalom.md":Q9,"../../lessons/en/visubot/aufgaben/spirale.md":q9,"../../lessons/en/visubot/aufgaben/treppe.md":U9,"../../lessons/en/visubot/aufgaben/tunnel.md":$9,"../../lessons/en/visubot/aufgaben/wald.md":Y9}),$B=Object.assign({"../../lessons/diagramme/aufgabe-alter-haupt-loesung.visustruct":X9,"../../lessons/diagramme/aufgabe-alter-unterprogramm-loesung.visustruct":K9,"../../lessons/diagramme/aufgabe-ballwurf-loesung.visustruct":ew,"../../lessons/diagramme/aufgabe-ballwurf-start.visustruct":tw,"../../lessons/diagramme/aufgabe-bestenliste-loesung.visustruct":nw,"../../lessons/diagramme/aufgabe-binaer-loesung.visustruct":iw,"../../lessons/diagramme/aufgabe-caesar-array-loesung.visustruct":aw,"../../lessons/diagramme/aufgabe-caesar-array-start.visustruct":sw,"../../lessons/diagramme/aufgabe-caesar-ascii-loesung.visustruct":rw,"../../lessons/diagramme/aufgabe-caesar-entschluesseln-loesung.visustruct":ow,"../../lessons/diagramme/aufgabe-collatz-loesung.visustruct":lw,"../../lessons/diagramme/aufgabe-durchschnitt-loesung.visustruct":uw,"../../lessons/diagramme/aufgabe-fibonacci-loesung.visustruct":mw,"../../lessons/diagramme/aufgabe-gerade-loesung.visustruct":cw,"../../lessons/diagramme/aufgabe-mehrwertsteuer-loesung.visustruct":dw,"../../lessons/diagramme/aufgabe-pin-java-loesung.visustruct":hw,"../../lessons/diagramme/aufgabe-pin-loesung.visustruct":gw,"../../lessons/diagramme/aufgabe-rechner-loesung.visustruct":pw,"../../lessons/diagramme/aufgabe-schiffe-loesung.visustruct":fw,"../../lessons/diagramme/aufgabe-schiffe-start.visustruct":xw,"../../lessons/diagramme/aufgabe-speisekarte-loesung.visustruct":bw,"../../lessons/diagramme/aufgabe-summe-loesung.visustruct":vw,"../../lessons/diagramme/aufgabe-tafeldienst-loesung.visustruct":yw,"../../lessons/diagramme/aufgabe-verdoppeln-loesung.visustruct":ww,"../../lessons/diagramme/aufgabe-verleih-java-loesung.visustruct":zw,"../../lessons/diagramme/aufgabe-verleih-loesung.visustruct":Iw,"../../lessons/diagramme/aufgabe-vokabeln-loesung.visustruct":kw,"../../lessons/diagramme/aufgabe-vokabeln-start.visustruct":Sw,"../../lessons/diagramme/aufgabe-volljaehrig-loesung.visustruct":_w,"../../lessons/diagramme/dt-buffered.visustruct":Tw,"../../lessons/diagramme/dt-csv.visustruct":Ow,"../../lessons/diagramme/dt-json.visustruct":Aw,"../../lessons/diagramme/dt-lesen.visustruct":Pw,"../../lessons/diagramme/en/aufgabe-alter-haupt-loesung.visustruct":jw,"../../lessons/diagramme/en/aufgabe-alter-unterprogramm-loesung.visustruct":Cw,"../../lessons/diagramme/en/aufgabe-ballwurf-loesung.visustruct":Bw,"../../lessons/diagramme/en/aufgabe-ballwurf-start.visustruct":Dw,"../../lessons/diagramme/en/aufgabe-bestenliste-loesung.visustruct":Zw,"../../lessons/diagramme/en/aufgabe-binaer-loesung.visustruct":Mw,"../../lessons/diagramme/en/aufgabe-caesar-array-loesung.visustruct":Lw,"../../lessons/diagramme/en/aufgabe-caesar-array-start.visustruct":Ww,"../../lessons/diagramme/en/aufgabe-caesar-ascii-loesung.visustruct":Ew,"../../lessons/diagramme/en/aufgabe-caesar-entschluesseln-loesung.visustruct":Nw,"../../lessons/diagramme/en/aufgabe-collatz-loesung.visustruct":Fw,"../../lessons/diagramme/en/aufgabe-durchschnitt-loesung.visustruct":Jw,"../../lessons/diagramme/en/aufgabe-fibonacci-loesung.visustruct":Rw,"../../lessons/diagramme/en/aufgabe-gerade-loesung.visustruct":Gw,"../../lessons/diagramme/en/aufgabe-mehrwertsteuer-loesung.visustruct":Hw,"../../lessons/diagramme/en/aufgabe-pin-java-loesung.visustruct":Vw,"../../lessons/diagramme/en/aufgabe-pin-loesung.visustruct":Qw,"../../lessons/diagramme/en/aufgabe-rechner-loesung.visustruct":qw,"../../lessons/diagramme/en/aufgabe-schiffe-loesung.visustruct":Uw,"../../lessons/diagramme/en/aufgabe-schiffe-start.visustruct":$w,"../../lessons/diagramme/en/aufgabe-speisekarte-loesung.visustruct":Yw,"../../lessons/diagramme/en/aufgabe-summe-loesung.visustruct":Xw,"../../lessons/diagramme/en/aufgabe-tafeldienst-loesung.visustruct":Kw,"../../lessons/diagramme/en/aufgabe-verdoppeln-loesung.visustruct":e5,"../../lessons/diagramme/en/aufgabe-verleih-java-loesung.visustruct":t5,"../../lessons/diagramme/en/aufgabe-verleih-loesung.visustruct":n5,"../../lessons/diagramme/en/aufgabe-vokabeln-loesung.visustruct":i5,"../../lessons/diagramme/en/aufgabe-vokabeln-start.visustruct":a5,"../../lessons/diagramme/en/aufgabe-volljaehrig-loesung.visustruct":s5,"../../lessons/diagramme/en/dt-buffered.visustruct":r5,"../../lessons/diagramme/en/dt-csv.visustruct":o5,"../../lessons/diagramme/en/dt-json.visustruct":l5,"../../lessons/diagramme/en/dt-lesen.visustruct":u5,"../../lessons/diagramme/en/kino-einmaleins-loesung.visustruct":m5,"../../lessons/diagramme/en/kino-frei-loesung.visustruct":c5,"../../lessons/diagramme/en/kino-frei-start.visustruct":d5,"../../lessons/diagramme/en/kino-karte-loesung.visustruct":h5,"../../lessons/diagramme/en/kino-karte-start.visustruct":g5,"../../lessons/diagramme/en/kino-saalplan.visustruct":p5,"../../lessons/diagramme/en/kino-verkaufen.visustruct":f5,"../../lessons/diagramme/en/l04-java-fehler-loesung.visustruct":x5,"../../lessons/diagramme/en/l04-java-fehler-start.visustruct":b5,"../../lessons/diagramme/en/l04-java-steckbrief-loesung.visustruct":v5,"../../lessons/diagramme/en/l04-rechnen.visustruct":y5,"../../lessons/diagramme/en/l04-reihenfolge-loesung.visustruct":w5,"../../lessons/diagramme/en/l04-reihenfolge-start.visustruct":z5,"../../lessons/diagramme/en/l04-tauschen-loesung.visustruct":I5,"../../lessons/diagramme/en/l04-tauschen-start.visustruct":k5,"../../lessons/diagramme/en/l04-tauschen.visustruct":S5,"../../lessons/diagramme/en/l05-datentypen.visustruct":_5,"../../lessons/diagramme/en/l05-division.visustruct":T5,"../../lessons/diagramme/en/l05-einkauf-loesung.visustruct":O5,"../../lessons/diagramme/en/l05-java-fehler-loesung.visustruct":A5,"../../lessons/diagramme/en/l05-java-fehler-start.visustruct":P5,"../../lessons/diagramme/en/l05-java-kino-loesung.visustruct":j5,"../../lessons/diagramme/en/l05-rechteck-loesung.visustruct":C5,"../../lessons/diagramme/en/l05-sekunden-loesung.visustruct":B5,"../../lessons/diagramme/en/l05-sekunden-start.visustruct":D5,"../../lessons/diagramme/en/l06-begruessung-loesung.visustruct":Z5,"../../lessons/diagramme/en/l06-eva.visustruct":M5,"../../lessons/diagramme/en/l06-java-fehler-loesung.visustruct":L5,"../../lessons/diagramme/en/l06-java-fehler-start.visustruct":W5,"../../lessons/diagramme/en/l06-java-tage-loesung.visustruct":E5,"../../lessons/diagramme/en/l06-mittelwert-loesung.visustruct":N5,"../../lessons/diagramme/en/l06-rechner-loesung.visustruct":F5,"../../lessons/diagramme/en/l07-alter-pruefen.visustruct":J5,"../../lessons/diagramme/en/l07-betrag-loesung.visustruct":R5,"../../lessons/diagramme/en/l07-gerade-loesung.visustruct":G5,"../../lessons/diagramme/en/l07-java-fehler-loesung.visustruct":H5,"../../lessons/diagramme/en/l07-java-fehler-start.visustruct":V5,"../../lessons/diagramme/en/l07-java-pizza-loesung.visustruct":Q5,"../../lessons/diagramme/en/l07-java-pizza-start.visustruct":q5,"../../lessons/diagramme/en/l07-maximum-loesung.visustruct":U5,"../../lessons/diagramme/en/l07-rabatt.visustruct":$5,"../../lessons/diagramme/en/l08-gueltig-loesung.visustruct":Y5,"../../lessons/diagramme/en/l08-java-bestanden-loesung.visustruct":X5,"../../lessons/diagramme/en/l08-java-fehler-loesung.visustruct":K5,"../../lessons/diagramme/en/l08-java-fehler-start.visustruct":e6,"../../lessons/diagramme/en/l08-jugendticket.visustruct":t6,"../../lessons/diagramme/en/l08-note.visustruct":n6,"../../lessons/diagramme/en/l08-schaltjahr-loesung.visustruct":i6,"../../lessons/diagramme/en/l08-wochenende-loesung.visustruct":a6,"../../lessons/diagramme/en/l09-ampel.visustruct":s6,"../../lessons/diagramme/en/l09-automat.visustruct":r6,"../../lessons/diagramme/en/l09-java-fehler-loesung.visustruct":o6,"../../lessons/diagramme/en/l09-java-fehler-start.visustruct":l6,"../../lessons/diagramme/en/l09-java-schule-loesung.visustruct":u6,"../../lessons/diagramme/en/l09-note-loesung.visustruct":m6,"../../lessons/diagramme/en/l09-rechner-loesung.visustruct":c6,"../../lessons/diagramme/en/l09-verschachtelt.visustruct":d6,"../../lessons/diagramme/en/l1-grundbausteine.visustruct":h6,"../../lessons/diagramme/en/l1-sequenz.visustruct":g6,"../../lessons/diagramme/en/l1-tee.visustruct":p6,"../../lessons/diagramme/en/l1-verzweigung.visustruct":f6,"../../lessons/diagramme/en/l1-wiederholung.visustruct":x6,"../../lessons/diagramme/en/l10-bis-n-loesung.visustruct":b6,"../../lessons/diagramme/en/l10-countdown.visustruct":v6,"../../lessons/diagramme/en/l10-endlos.visustruct":y6,"../../lessons/diagramme/en/l10-fakultaet.visustruct":w6,"../../lessons/diagramme/en/l10-java-fehler-loesung.visustruct":z6,"../../lessons/diagramme/en/l10-java-fehler-start.visustruct":I6,"../../lessons/diagramme/en/l10-java-wuerfel-loesung.visustruct":k6,"../../lessons/diagramme/en/l10-verdoppeln-loesung.visustruct":S6,"../../lessons/diagramme/en/l11-eingabe-pruefen.visustruct":_6,"../../lessons/diagramme/en/l11-einmal.visustruct":T6,"../../lessons/diagramme/en/l11-java-fehler-loesung.visustruct":O6,"../../lessons/diagramme/en/l11-java-fehler-start.visustruct":A6,"../../lessons/diagramme/en/l11-java-gerade-loesung.visustruct":P6,"../../lessons/diagramme/en/l11-note-loesung.visustruct":j6,"../../lessons/diagramme/en/l11-summe-loesung.visustruct":C6,"../../lessons/diagramme/en/l12-countdown-loesung.visustruct":B6,"../../lessons/diagramme/en/l12-einmaleins-loesung.visustruct":D6,"../../lessons/diagramme/en/l12-eins-bis-fuenf.visustruct":Z6,"../../lessons/diagramme/en/l12-java-fehler-loesung.visustruct":M6,"../../lessons/diagramme/en/l12-java-fehler-start.visustruct":L6,"../../lessons/diagramme/en/l12-java-verdoppeln-loesung.visustruct":W6,"../../lessons/diagramme/en/l12-summe.visustruct":E6,"../../lessons/diagramme/en/l13-dreieck.visustruct":N6,"../../lessons/diagramme/en/l13-gerade-eingaben-loesung.visustruct":F6,"../../lessons/diagramme/en/l13-gerade-zaehlen.visustruct":J6,"../../lessons/diagramme/en/l13-java-fehler-loesung.visustruct":R6,"../../lessons/diagramme/en/l13-java-fehler-start.visustruct":G6,"../../lessons/diagramme/en/l13-java-quadrate-loesung.visustruct":H6,"../../lessons/diagramme/en/l13-rechteck-loesung.visustruct":V6,"../../lessons/diagramme/en/l14-array-durchlaufen.visustruct":Q6,"../../lessons/diagramme/en/l14-erster-letzter-loesung.visustruct":q6,"../../lessons/diagramme/en/l14-java-fehler-loesung.visustruct":U6,"../../lessons/diagramme/en/l14-java-fehler-start.visustruct":$6,"../../lessons/diagramme/en/l14-java-treppe-loesung.visustruct":Y6,"../../lessons/diagramme/en/l14-namen-eingeben.visustruct":X6,"../../lessons/diagramme/en/l14-rueckwaerts-loesung.visustruct":K6,"../../lessons/diagramme/en/l14-summe-max-loesung.visustruct":ez,"../../lessons/diagramme/en/l14-summe-maximum.visustruct":tz,"../../lessons/diagramme/en/l15-bis-null-loesung.visustruct":nz,"../../lessons/diagramme/en/l15-endlos-aussprung.visustruct":iz,"../../lessons/diagramme/en/l15-flaeche-loesung.visustruct":az,"../../lessons/diagramme/en/l15-flaeche-unterprogramm-loesung.visustruct":sz,"../../lessons/diagramme/en/l15-hauptprogramm.visustruct":rz,"../../lessons/diagramme/en/l15-java-fehler-loesung.visustruct":oz,"../../lessons/diagramme/en/l15-java-fehler-start.visustruct":lz,"../../lessons/diagramme/en/l15-java-noten-loesung.visustruct":uz,"../../lessons/diagramme/en/l15-quadrat-haupt.visustruct":mz,"../../lessons/diagramme/en/l15-quadrat.visustruct":cz,"../../lessons/diagramme/en/l15-titel-loesung.visustruct":dz,"../../lessons/diagramme/en/l15-unterprogramm.visustruct":hz,"../../lessons/diagramme/en/l15-zeige-summe-haupt.visustruct":gz,"../../lessons/diagramme/en/l15-zeige-summe.visustruct":pz,"../../lessons/diagramme/en/l16-countdown-loesung.visustruct":fz,"../../lessons/diagramme/en/l16-countdown-start.visustruct":xz,"../../lessons/diagramme/en/l16-java-fehler-loesung.visustruct":bz,"../../lessons/diagramme/en/l16-java-fehler-start.visustruct":vz,"../../lessons/diagramme/en/l16-java-punkte-loesung.visustruct":yz,"../../lessons/diagramme/en/l16-schreibtisch.visustruct":wz,"../../lessons/diagramme/en/l16-summe-loesung.visustruct":zz,"../../lessons/diagramme/en/l16-summe-start.visustruct":Iz,"../../lessons/diagramme/en/l17-beispiel.visustruct":kz,"../../lessons/diagramme/en/l17-fakultaet-loesung.visustruct":Sz,"../../lessons/diagramme/en/l17-java-brief-loesung.visustruct":_z,"../../lessons/diagramme/en/l17-java-brief-start.visustruct":Tz,"../../lessons/diagramme/en/l17-java-fehler-loesung.visustruct":Oz,"../../lessons/diagramme/en/l17-java-fehler-start.visustruct":Az,"../../lessons/diagramme/en/l17-java-passwort-loesung.visustruct":Pz,"../../lessons/diagramme/en/l17-ticket-loesung.visustruct":jz,"../../lessons/diagramme/en/l18-beispiel.visustruct":Cz,"../../lessons/diagramme/en/l18-java-fehler-loesung.visustruct":Bz,"../../lessons/diagramme/en/l18-java-fehler-start.visustruct":Dz,"../../lessons/diagramme/en/l18-java-kasse-loesung.visustruct":Zz,"../../lessons/diagramme/en/l18-js-loesung.visustruct":Mz,"../../lessons/diagramme/en/l18-python-loesung.visustruct":Lz,"../../lessons/diagramme/en/l19-java-fehler-loesung.visustruct":Wz,"../../lessons/diagramme/en/l19-java-fehler-start.visustruct":Ez,"../../lessons/diagramme/en/l19-java-zaehlen-loesung.visustruct":Nz,"../../lessons/diagramme/en/l2-ausgabe.visustruct":Fz,"../../lessons/diagramme/en/l2-hallo-loesung.visustruct":Jz,"../../lessons/diagramme/en/l2-zwei-zeilen-loesung.visustruct":Rz,"../../lessons/diagramme/en/l23-java-ergaenzen-loesung.visustruct":Gz,"../../lessons/diagramme/en/l23-java-ergaenzen-start.visustruct":Hz,"../../lessons/diagramme/en/l23-java-nummern-loesung.visustruct":Vz,"../../lessons/diagramme/en/l23-java-nummern-start.visustruct":Qz,"../../lessons/diagramme/en/l24-java-fuchs-loesung.visustruct":qz,"../../lessons/diagramme/en/l24-java-fuchs-start.visustruct":Uz,"../../lessons/diagramme/en/l24-java-laengster-loesung.visustruct":$z,"../../lessons/diagramme/en/l24-java-laengster-start.visustruct":Yz,"../../lessons/diagramme/en/l25-java-beste-loesung.visustruct":Xz,"../../lessons/diagramme/en/l25-java-beste-start.visustruct":Kz,"../../lessons/diagramme/en/l25-java-schnitt-loesung.visustruct":e7,"../../lessons/diagramme/en/l25-java-schnitt-start.visustruct":t7,"../../lessons/diagramme/en/l26-java-namen-loesung.visustruct":n7,"../../lessons/diagramme/en/l26-java-namen-start.visustruct":i7,"../../lessons/diagramme/en/l26-java-schreiben-loesung.visustruct":a7,"../../lessons/diagramme/en/l26-java-schreiben-start.visustruct":s7,"../../lessons/diagramme/en/l27-java-json-loesung.visustruct":r7,"../../lessons/diagramme/en/l27-java-json-start.visustruct":o7,"../../lessons/diagramme/en/l27-java-saetze-loesung.visustruct":l7,"../../lessons/diagramme/en/l27-java-saetze-start.visustruct":u7,"../../lessons/diagramme/en/sim-kino-loesung.visustruct":m7,"../../lessons/diagramme/en/sim-kino-start.visustruct":c7,"../../lessons/diagramme/en/sim-tausch-loesung.visustruct":d7,"../../lessons/diagramme/en/sim-tausch-start.visustruct":h7,"../../lessons/diagramme/en/sim-tausch.visustruct":g7,"../../lessons/diagramme/en/ss-absteigend-loesung.visustruct":p7,"../../lessons/diagramme/en/ss-absteigend-start.visustruct":f7,"../../lessons/diagramme/en/ss-binaere-suche.visustruct":x7,"../../lessons/diagramme/en/ss-bubblesort.visustruct":b7,"../../lessons/diagramme/en/ss-karte-suchen-loesung.visustruct":v7,"../../lessons/diagramme/en/ss-lineare-suche.visustruct":y7,"../../lessons/diagramme/en/uebergabe-bonus-loesung.visustruct":w7,"../../lessons/diagramme/en/uebergabe-bonus-start.visustruct":z7,"../../lessons/diagramme/en/uebergabe-bonus-unterprogramm-loesung.visustruct":I7,"../../lessons/diagramme/en/uebergabe-haupt.visustruct":k7,"../../lessons/diagramme/en/uebergabe-leeren.visustruct":S7,"../../lessons/diagramme/en/uebergabe-verdopple.visustruct":_7,"../../lessons/diagramme/en/vb-abstand-anzeigen-loesung.visustruct":T7,"../../lessons/diagramme/en/vb-abstand-halten-loesung.visustruct":O7,"../../lessons/diagramme/en/vb-alarmanlage-loesung.visustruct":A7,"../../lessons/diagramme/en/vb-ampel-loesung.visustruct":P7,"../../lessons/diagramme/en/vb-ausgang-loesung.visustruct":j7,"../../lessons/diagramme/en/vb-begruessung-loesung.visustruct":C7,"../../lessons/diagramme/en/vb-binaer-zaehlen-loesung.visustruct":B7,"../../lessons/diagramme/en/vb-bis-rot-loesung.visustruct":D7,"../../lessons/diagramme/en/vb-bis-wand-loesung.visustruct":Z7,"../../lessons/diagramme/en/vb-bis-ziel-loesung.visustruct":M7,"../../lessons/diagramme/en/vb-buchstaben-loesung.visustruct":L7,"../../lessons/diagramme/en/vb-drei-lichter-loesung.visustruct":W7,"../../lessons/diagramme/en/vb-dreieck-loesung.visustruct":E7,"../../lessons/diagramme/en/vb-einparken-loesung.visustruct":N7,"../../lessons/diagramme/en/vb-farben-loesung.visustruct":F7,"../../lessons/diagramme/en/vb-farbweiche-loesung.visustruct":J7,"../../lessons/diagramme/en/vb-gas-bis-wand-loesung.visustruct":R7,"../../lessons/diagramme/en/vb-gerade-loesung.visustruct":G7,"../../lessons/diagramme/en/vb-hindernis-loesung.visustruct":H7,"../../lessons/diagramme/en/vb-java-akku-loesung.visustruct":V7,"../../lessons/diagramme/en/vb-java-blau-gruen-loesung.visustruct":Q7,"../../lessons/diagramme/en/vb-java-blinken-loesung.visustruct":q7,"../../lessons/diagramme/en/vb-java-countdown-loesung.visustruct":U7,"../../lessons/diagramme/en/vb-java-hoeher-loesung.visustruct":$7,"../../lessons/diagramme/en/vb-java-joystick-loesung.visustruct":Y7,"../../lessons/diagramme/en/vb-java-laermampel-loesung.visustruct":X7,"../../lessons/diagramme/en/vb-java-lauflicht-loesung.visustruct":K7,"../../lessons/diagramme/en/vb-java-linienfolger-loesung.visustruct":eI,"../../lessons/diagramme/en/vb-java-nachtlicht-ton-loesung.visustruct":tI,"../../lessons/diagramme/en/vb-java-rand-loesung.visustruct":nI,"../../lessons/diagramme/en/vb-java-rechteck-loesung.visustruct":iI,"../../lessons/diagramme/en/vb-java-textlaenge-loesung.visustruct":aI,"../../lessons/diagramme/en/vb-java-wand-piep-loesung.visustruct":sI,"../../lessons/diagramme/en/vb-java-wasserwaage-loesung.visustruct":rI,"../../lessons/diagramme/en/vb-klatschen-loesung.visustruct":oI,"../../lessons/diagramme/en/vb-knight-rider-loesung.visustruct":lI,"../../lessons/diagramme/en/vb-labyrinth-loesung.visustruct":uI,"../../lessons/diagramme/en/vb-linienfolger-stopp-loesung.visustruct":mI,"../../lessons/diagramme/en/vb-linienmuster-loesung.visustruct":cI,"../../lessons/diagramme/en/vb-melodie-loesung.visustruct":dI,"../../lessons/diagramme/en/vb-morsen-loesung.visustruct":hI,"../../lessons/diagramme/en/vb-nachtlicht-loesung.visustruct":gI,"../../lessons/diagramme/en/vb-nachtwaechter-loesung.visustruct":pI,"../../lessons/diagramme/en/vb-ohne-noten-loesung.visustruct":fI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-loesung.visustruct":xI,"../../lessons/diagramme/en/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":bI,"../../lessons/diagramme/en/vb-ohne-rueckwaerts-loesung.visustruct":vI,"../../lessons/diagramme/en/vb-ohne-strecke-loesung.visustruct":yI,"../../lessons/diagramme/en/vb-ohne-summe-loesung.visustruct":wI,"../../lessons/diagramme/en/vb-quadrat-loesung.visustruct":zI,"../../lessons/diagramme/en/vb-quadrat-methode-loesung.visustruct":II,"../../lessons/diagramme/en/vb-quadrat-schleife-loesung.visustruct":kI,"../../lessons/diagramme/en/vb-quadrat-unterprogramm-loesung.visustruct":SI,"../../lessons/diagramme/en/vb-quadrat-verschachtelt-loesung.visustruct":_I,"../../lessons/diagramme/en/vb-rand-loesung.visustruct":TI,"../../lessons/diagramme/en/vb-schraeglage-loesung.visustruct":OI,"../../lessons/diagramme/en/vb-slalom-loesung.visustruct":AI,"../../lessons/diagramme/en/vb-spirale-loesung.visustruct":PI,"../../lessons/diagramme/en/vb-start-a-loesung.visustruct":jI,"../../lessons/diagramme/en/vb-tonleiter-loesung.visustruct":CI,"../../lessons/diagramme/en/vb-treppe-loesung.visustruct":BI,"../../lessons/diagramme/en/vb-tunnel-loesung.visustruct":DI,"../../lessons/diagramme/en/vb-variable-seite-loesung.visustruct":ZI,"../../lessons/diagramme/en/vb-vier-quadrate-loesung.visustruct":MI,"../../lessons/diagramme/en/vb-wald-loesung.visustruct":LI,"../../lessons/diagramme/en/vb-wand-vorn-loesung.visustruct":WI,"../../lessons/diagramme/en/vb-zwei-sekunden-loesung.visustruct":EI,"../../lessons/diagramme/en/zk-initialen-loesung.visustruct":NI,"../../lessons/diagramme/en/zk-mehr.visustruct":FI,"../../lessons/diagramme/en/zk-rueckwaerts-loesung.visustruct":JI,"../../lessons/diagramme/en/zk-split.visustruct":RI,"../../lessons/diagramme/en/zk-woerter-loesung.visustruct":GI,"../../lessons/diagramme/en/zk-zaehlen.visustruct":HI,"../../lessons/diagramme/en/zk-zeichen.visustruct":VI,"../../lessons/diagramme/kino-einmaleins-loesung.visustruct":QI,"../../lessons/diagramme/kino-frei-loesung.visustruct":qI,"../../lessons/diagramme/kino-frei-start.visustruct":UI,"../../lessons/diagramme/kino-karte-loesung.visustruct":$I,"../../lessons/diagramme/kino-karte-start.visustruct":YI,"../../lessons/diagramme/kino-saalplan.visustruct":XI,"../../lessons/diagramme/kino-verkaufen.visustruct":KI,"../../lessons/diagramme/l04-java-fehler-loesung.visustruct":e8,"../../lessons/diagramme/l04-java-fehler-start.visustruct":t8,"../../lessons/diagramme/l04-java-steckbrief-loesung.visustruct":n8,"../../lessons/diagramme/l04-rechnen.visustruct":i8,"../../lessons/diagramme/l04-reihenfolge-loesung.visustruct":a8,"../../lessons/diagramme/l04-reihenfolge-start.visustruct":s8,"../../lessons/diagramme/l04-tauschen-loesung.visustruct":r8,"../../lessons/diagramme/l04-tauschen-start.visustruct":o8,"../../lessons/diagramme/l04-tauschen.visustruct":l8,"../../lessons/diagramme/l05-datentypen.visustruct":u8,"../../lessons/diagramme/l05-division.visustruct":m8,"../../lessons/diagramme/l05-einkauf-loesung.visustruct":c8,"../../lessons/diagramme/l05-java-fehler-loesung.visustruct":d8,"../../lessons/diagramme/l05-java-fehler-start.visustruct":h8,"../../lessons/diagramme/l05-java-kino-loesung.visustruct":g8,"../../lessons/diagramme/l05-rechteck-loesung.visustruct":p8,"../../lessons/diagramme/l05-sekunden-loesung.visustruct":f8,"../../lessons/diagramme/l05-sekunden-start.visustruct":x8,"../../lessons/diagramme/l06-begruessung-loesung.visustruct":b8,"../../lessons/diagramme/l06-eva.visustruct":v8,"../../lessons/diagramme/l06-java-fehler-loesung.visustruct":y8,"../../lessons/diagramme/l06-java-fehler-start.visustruct":w8,"../../lessons/diagramme/l06-java-tage-loesung.visustruct":z8,"../../lessons/diagramme/l06-mittelwert-loesung.visustruct":I8,"../../lessons/diagramme/l06-rechner-loesung.visustruct":k8,"../../lessons/diagramme/l07-alter-pruefen.visustruct":S8,"../../lessons/diagramme/l07-betrag-loesung.visustruct":_8,"../../lessons/diagramme/l07-gerade-loesung.visustruct":T8,"../../lessons/diagramme/l07-java-fehler-loesung.visustruct":O8,"../../lessons/diagramme/l07-java-fehler-start.visustruct":A8,"../../lessons/diagramme/l07-java-pizza-loesung.visustruct":P8,"../../lessons/diagramme/l07-java-pizza-start.visustruct":j8,"../../lessons/diagramme/l07-maximum-loesung.visustruct":C8,"../../lessons/diagramme/l07-rabatt.visustruct":B8,"../../lessons/diagramme/l08-gueltig-loesung.visustruct":D8,"../../lessons/diagramme/l08-java-bestanden-loesung.visustruct":Z8,"../../lessons/diagramme/l08-java-fehler-loesung.visustruct":M8,"../../lessons/diagramme/l08-java-fehler-start.visustruct":L8,"../../lessons/diagramme/l08-jugendticket.visustruct":W8,"../../lessons/diagramme/l08-note.visustruct":E8,"../../lessons/diagramme/l08-schaltjahr-loesung.visustruct":N8,"../../lessons/diagramme/l08-wochenende-loesung.visustruct":F8,"../../lessons/diagramme/l09-ampel.visustruct":J8,"../../lessons/diagramme/l09-automat.visustruct":R8,"../../lessons/diagramme/l09-java-fehler-loesung.visustruct":G8,"../../lessons/diagramme/l09-java-fehler-start.visustruct":H8,"../../lessons/diagramme/l09-java-schule-loesung.visustruct":V8,"../../lessons/diagramme/l09-note-loesung.visustruct":Q8,"../../lessons/diagramme/l09-rechner-loesung.visustruct":q8,"../../lessons/diagramme/l09-verschachtelt.visustruct":U8,"../../lessons/diagramme/l1-grundbausteine.visustruct":$8,"../../lessons/diagramme/l1-sequenz.visustruct":Y8,"../../lessons/diagramme/l1-tee.visustruct":X8,"../../lessons/diagramme/l1-verzweigung.visustruct":K8,"../../lessons/diagramme/l1-wiederholung.visustruct":ek,"../../lessons/diagramme/l10-bis-n-loesung.visustruct":tk,"../../lessons/diagramme/l10-countdown.visustruct":nk,"../../lessons/diagramme/l10-endlos.visustruct":ik,"../../lessons/diagramme/l10-fakultaet.visustruct":ak,"../../lessons/diagramme/l10-java-fehler-loesung.visustruct":sk,"../../lessons/diagramme/l10-java-fehler-start.visustruct":rk,"../../lessons/diagramme/l10-java-wuerfel-loesung.visustruct":ok,"../../lessons/diagramme/l10-verdoppeln-loesung.visustruct":lk,"../../lessons/diagramme/l11-eingabe-pruefen.visustruct":uk,"../../lessons/diagramme/l11-einmal.visustruct":mk,"../../lessons/diagramme/l11-java-fehler-loesung.visustruct":ck,"../../lessons/diagramme/l11-java-fehler-start.visustruct":dk,"../../lessons/diagramme/l11-java-gerade-loesung.visustruct":hk,"../../lessons/diagramme/l11-note-loesung.visustruct":gk,"../../lessons/diagramme/l11-summe-loesung.visustruct":pk,"../../lessons/diagramme/l12-countdown-loesung.visustruct":fk,"../../lessons/diagramme/l12-einmaleins-loesung.visustruct":xk,"../../lessons/diagramme/l12-eins-bis-fuenf.visustruct":bk,"../../lessons/diagramme/l12-java-fehler-loesung.visustruct":vk,"../../lessons/diagramme/l12-java-fehler-start.visustruct":yk,"../../lessons/diagramme/l12-java-verdoppeln-loesung.visustruct":wk,"../../lessons/diagramme/l12-summe.visustruct":zk,"../../lessons/diagramme/l13-dreieck.visustruct":Ik,"../../lessons/diagramme/l13-gerade-eingaben-loesung.visustruct":kk,"../../lessons/diagramme/l13-gerade-zaehlen.visustruct":Sk,"../../lessons/diagramme/l13-java-fehler-loesung.visustruct":_k,"../../lessons/diagramme/l13-java-fehler-start.visustruct":Tk,"../../lessons/diagramme/l13-java-quadrate-loesung.visustruct":Ok,"../../lessons/diagramme/l13-rechteck-loesung.visustruct":Ak,"../../lessons/diagramme/l14-array-durchlaufen.visustruct":Pk,"../../lessons/diagramme/l14-erster-letzter-loesung.visustruct":jk,"../../lessons/diagramme/l14-java-fehler-loesung.visustruct":Ck,"../../lessons/diagramme/l14-java-fehler-start.visustruct":Bk,"../../lessons/diagramme/l14-java-treppe-loesung.visustruct":Dk,"../../lessons/diagramme/l14-namen-eingeben.visustruct":Zk,"../../lessons/diagramme/l14-rueckwaerts-loesung.visustruct":Mk,"../../lessons/diagramme/l14-summe-max-loesung.visustruct":Lk,"../../lessons/diagramme/l14-summe-maximum.visustruct":Wk,"../../lessons/diagramme/l15-bis-null-loesung.visustruct":Ek,"../../lessons/diagramme/l15-endlos-aussprung.visustruct":Nk,"../../lessons/diagramme/l15-flaeche-loesung.visustruct":Fk,"../../lessons/diagramme/l15-flaeche-unterprogramm-loesung.visustruct":Jk,"../../lessons/diagramme/l15-hauptprogramm.visustruct":Rk,"../../lessons/diagramme/l15-java-fehler-loesung.visustruct":Gk,"../../lessons/diagramme/l15-java-fehler-start.visustruct":Hk,"../../lessons/diagramme/l15-java-noten-loesung.visustruct":Vk,"../../lessons/diagramme/l15-quadrat-haupt.visustruct":Qk,"../../lessons/diagramme/l15-quadrat.visustruct":qk,"../../lessons/diagramme/l15-titel-loesung.visustruct":Uk,"../../lessons/diagramme/l15-unterprogramm.visustruct":$k,"../../lessons/diagramme/l15-zeige-summe-haupt.visustruct":Yk,"../../lessons/diagramme/l15-zeige-summe.visustruct":Xk,"../../lessons/diagramme/l16-countdown-loesung.visustruct":Kk,"../../lessons/diagramme/l16-countdown-start.visustruct":eS,"../../lessons/diagramme/l16-java-fehler-loesung.visustruct":tS,"../../lessons/diagramme/l16-java-fehler-start.visustruct":nS,"../../lessons/diagramme/l16-java-punkte-loesung.visustruct":iS,"../../lessons/diagramme/l16-schreibtisch.visustruct":aS,"../../lessons/diagramme/l16-summe-loesung.visustruct":sS,"../../lessons/diagramme/l16-summe-start.visustruct":rS,"../../lessons/diagramme/l17-beispiel.visustruct":oS,"../../lessons/diagramme/l17-fakultaet-loesung.visustruct":lS,"../../lessons/diagramme/l17-java-brief-loesung.visustruct":uS,"../../lessons/diagramme/l17-java-brief-start.visustruct":mS,"../../lessons/diagramme/l17-java-fehler-loesung.visustruct":cS,"../../lessons/diagramme/l17-java-fehler-start.visustruct":dS,"../../lessons/diagramme/l17-java-passwort-loesung.visustruct":hS,"../../lessons/diagramme/l17-ticket-loesung.visustruct":gS,"../../lessons/diagramme/l18-beispiel.visustruct":pS,"../../lessons/diagramme/l18-java-fehler-loesung.visustruct":fS,"../../lessons/diagramme/l18-java-fehler-start.visustruct":xS,"../../lessons/diagramme/l18-java-kasse-loesung.visustruct":bS,"../../lessons/diagramme/l18-js-loesung.visustruct":vS,"../../lessons/diagramme/l18-python-loesung.visustruct":yS,"../../lessons/diagramme/l19-java-fehler-loesung.visustruct":wS,"../../lessons/diagramme/l19-java-fehler-start.visustruct":zS,"../../lessons/diagramme/l19-java-zaehlen-loesung.visustruct":IS,"../../lessons/diagramme/l2-ausgabe.visustruct":kS,"../../lessons/diagramme/l2-hallo-loesung.visustruct":SS,"../../lessons/diagramme/l2-zwei-zeilen-loesung.visustruct":_S,"../../lessons/diagramme/l20-countdown-loesung.visustruct":TS,"../../lessons/diagramme/l23-java-ergaenzen-loesung.visustruct":OS,"../../lessons/diagramme/l23-java-ergaenzen-start.visustruct":AS,"../../lessons/diagramme/l23-java-nummern-loesung.visustruct":PS,"../../lessons/diagramme/l23-java-nummern-start.visustruct":jS,"../../lessons/diagramme/l24-java-fuchs-loesung.visustruct":CS,"../../lessons/diagramme/l24-java-fuchs-start.visustruct":BS,"../../lessons/diagramme/l24-java-laengster-loesung.visustruct":DS,"../../lessons/diagramme/l24-java-laengster-start.visustruct":ZS,"../../lessons/diagramme/l25-java-beste-loesung.visustruct":MS,"../../lessons/diagramme/l25-java-beste-start.visustruct":LS,"../../lessons/diagramme/l25-java-schnitt-loesung.visustruct":WS,"../../lessons/diagramme/l25-java-schnitt-start.visustruct":ES,"../../lessons/diagramme/l26-java-namen-loesung.visustruct":NS,"../../lessons/diagramme/l26-java-namen-start.visustruct":FS,"../../lessons/diagramme/l26-java-schreiben-loesung.visustruct":JS,"../../lessons/diagramme/l26-java-schreiben-start.visustruct":RS,"../../lessons/diagramme/l27-java-json-loesung.visustruct":GS,"../../lessons/diagramme/l27-java-json-start.visustruct":HS,"../../lessons/diagramme/l27-java-saetze-loesung.visustruct":VS,"../../lessons/diagramme/l27-java-saetze-start.visustruct":QS,"../../lessons/diagramme/pt/aufgabe-alter-haupt-loesung.visustruct":qS,"../../lessons/diagramme/pt/aufgabe-alter-unterprogramm-loesung.visustruct":US,"../../lessons/diagramme/pt/aufgabe-ballwurf-loesung.visustruct":$S,"../../lessons/diagramme/pt/aufgabe-ballwurf-start.visustruct":YS,"../../lessons/diagramme/pt/aufgabe-bestenliste-loesung.visustruct":XS,"../../lessons/diagramme/pt/aufgabe-binaer-loesung.visustruct":KS,"../../lessons/diagramme/pt/aufgabe-caesar-array-loesung.visustruct":e_,"../../lessons/diagramme/pt/aufgabe-caesar-array-start.visustruct":t_,"../../lessons/diagramme/pt/aufgabe-caesar-ascii-loesung.visustruct":n_,"../../lessons/diagramme/pt/aufgabe-caesar-entschluesseln-loesung.visustruct":i_,"../../lessons/diagramme/pt/aufgabe-collatz-loesung.visustruct":a_,"../../lessons/diagramme/pt/aufgabe-durchschnitt-loesung.visustruct":s_,"../../lessons/diagramme/pt/aufgabe-fibonacci-loesung.visustruct":r_,"../../lessons/diagramme/pt/aufgabe-gerade-loesung.visustruct":o_,"../../lessons/diagramme/pt/aufgabe-mehrwertsteuer-loesung.visustruct":l_,"../../lessons/diagramme/pt/aufgabe-pin-java-loesung.visustruct":u_,"../../lessons/diagramme/pt/aufgabe-pin-loesung.visustruct":m_,"../../lessons/diagramme/pt/aufgabe-rechner-loesung.visustruct":c_,"../../lessons/diagramme/pt/aufgabe-schiffe-loesung.visustruct":d_,"../../lessons/diagramme/pt/aufgabe-schiffe-start.visustruct":h_,"../../lessons/diagramme/pt/aufgabe-speisekarte-loesung.visustruct":g_,"../../lessons/diagramme/pt/aufgabe-summe-loesung.visustruct":p_,"../../lessons/diagramme/pt/aufgabe-tafeldienst-loesung.visustruct":f_,"../../lessons/diagramme/pt/aufgabe-verdoppeln-loesung.visustruct":x_,"../../lessons/diagramme/pt/aufgabe-verleih-java-loesung.visustruct":b_,"../../lessons/diagramme/pt/aufgabe-verleih-loesung.visustruct":v_,"../../lessons/diagramme/pt/aufgabe-vokabeln-loesung.visustruct":y_,"../../lessons/diagramme/pt/aufgabe-vokabeln-start.visustruct":w_,"../../lessons/diagramme/pt/aufgabe-volljaehrig-loesung.visustruct":z_,"../../lessons/diagramme/pt/dt-buffered.visustruct":I_,"../../lessons/diagramme/pt/dt-csv.visustruct":k_,"../../lessons/diagramme/pt/dt-json.visustruct":S_,"../../lessons/diagramme/pt/dt-lesen.visustruct":__,"../../lessons/diagramme/pt/kino-einmaleins-loesung.visustruct":T_,"../../lessons/diagramme/pt/kino-frei-loesung.visustruct":O_,"../../lessons/diagramme/pt/kino-frei-start.visustruct":A_,"../../lessons/diagramme/pt/kino-karte-loesung.visustruct":P_,"../../lessons/diagramme/pt/kino-karte-start.visustruct":j_,"../../lessons/diagramme/pt/kino-saalplan.visustruct":C_,"../../lessons/diagramme/pt/kino-verkaufen.visustruct":B_,"../../lessons/diagramme/pt/l04-java-fehler-loesung.visustruct":D_,"../../lessons/diagramme/pt/l04-java-fehler-start.visustruct":Z_,"../../lessons/diagramme/pt/l04-java-steckbrief-loesung.visustruct":M_,"../../lessons/diagramme/pt/l04-rechnen.visustruct":L_,"../../lessons/diagramme/pt/l04-reihenfolge-loesung.visustruct":W_,"../../lessons/diagramme/pt/l04-reihenfolge-start.visustruct":E_,"../../lessons/diagramme/pt/l04-tauschen-loesung.visustruct":N_,"../../lessons/diagramme/pt/l04-tauschen-start.visustruct":F_,"../../lessons/diagramme/pt/l04-tauschen.visustruct":J_,"../../lessons/diagramme/pt/l05-datentypen.visustruct":R_,"../../lessons/diagramme/pt/l05-division.visustruct":G_,"../../lessons/diagramme/pt/l05-einkauf-loesung.visustruct":H_,"../../lessons/diagramme/pt/l05-java-fehler-loesung.visustruct":V_,"../../lessons/diagramme/pt/l05-java-fehler-start.visustruct":Q_,"../../lessons/diagramme/pt/l05-java-kino-loesung.visustruct":q_,"../../lessons/diagramme/pt/l05-rechteck-loesung.visustruct":U_,"../../lessons/diagramme/pt/l05-sekunden-loesung.visustruct":$_,"../../lessons/diagramme/pt/l05-sekunden-start.visustruct":Y_,"../../lessons/diagramme/pt/l06-begruessung-loesung.visustruct":X_,"../../lessons/diagramme/pt/l06-eva.visustruct":K_,"../../lessons/diagramme/pt/l06-java-fehler-loesung.visustruct":eT,"../../lessons/diagramme/pt/l06-java-fehler-start.visustruct":tT,"../../lessons/diagramme/pt/l06-java-tage-loesung.visustruct":nT,"../../lessons/diagramme/pt/l06-mittelwert-loesung.visustruct":iT,"../../lessons/diagramme/pt/l06-rechner-loesung.visustruct":aT,"../../lessons/diagramme/pt/l07-alter-pruefen.visustruct":sT,"../../lessons/diagramme/pt/l07-betrag-loesung.visustruct":rT,"../../lessons/diagramme/pt/l07-gerade-loesung.visustruct":oT,"../../lessons/diagramme/pt/l07-java-fehler-loesung.visustruct":lT,"../../lessons/diagramme/pt/l07-java-fehler-start.visustruct":uT,"../../lessons/diagramme/pt/l07-java-pizza-loesung.visustruct":mT,"../../lessons/diagramme/pt/l07-java-pizza-start.visustruct":cT,"../../lessons/diagramme/pt/l07-maximum-loesung.visustruct":dT,"../../lessons/diagramme/pt/l07-rabatt.visustruct":hT,"../../lessons/diagramme/pt/l08-gueltig-loesung.visustruct":gT,"../../lessons/diagramme/pt/l08-java-bestanden-loesung.visustruct":pT,"../../lessons/diagramme/pt/l08-java-fehler-loesung.visustruct":fT,"../../lessons/diagramme/pt/l08-java-fehler-start.visustruct":xT,"../../lessons/diagramme/pt/l08-jugendticket.visustruct":bT,"../../lessons/diagramme/pt/l08-note.visustruct":vT,"../../lessons/diagramme/pt/l08-schaltjahr-loesung.visustruct":yT,"../../lessons/diagramme/pt/l08-wochenende-loesung.visustruct":wT,"../../lessons/diagramme/pt/l09-ampel.visustruct":zT,"../../lessons/diagramme/pt/l09-automat.visustruct":IT,"../../lessons/diagramme/pt/l09-java-fehler-loesung.visustruct":kT,"../../lessons/diagramme/pt/l09-java-fehler-start.visustruct":ST,"../../lessons/diagramme/pt/l09-java-schule-loesung.visustruct":_T,"../../lessons/diagramme/pt/l09-note-loesung.visustruct":TT,"../../lessons/diagramme/pt/l09-rechner-loesung.visustruct":OT,"../../lessons/diagramme/pt/l09-verschachtelt.visustruct":AT,"../../lessons/diagramme/pt/l1-grundbausteine.visustruct":PT,"../../lessons/diagramme/pt/l1-sequenz.visustruct":jT,"../../lessons/diagramme/pt/l1-tee.visustruct":CT,"../../lessons/diagramme/pt/l1-verzweigung.visustruct":BT,"../../lessons/diagramme/pt/l1-wiederholung.visustruct":DT,"../../lessons/diagramme/pt/l10-bis-n-loesung.visustruct":ZT,"../../lessons/diagramme/pt/l10-countdown.visustruct":MT,"../../lessons/diagramme/pt/l10-endlos.visustruct":LT,"../../lessons/diagramme/pt/l10-fakultaet.visustruct":WT,"../../lessons/diagramme/pt/l10-java-fehler-loesung.visustruct":ET,"../../lessons/diagramme/pt/l10-java-fehler-start.visustruct":NT,"../../lessons/diagramme/pt/l10-java-wuerfel-loesung.visustruct":FT,"../../lessons/diagramme/pt/l10-verdoppeln-loesung.visustruct":JT,"../../lessons/diagramme/pt/l11-eingabe-pruefen.visustruct":RT,"../../lessons/diagramme/pt/l11-einmal.visustruct":GT,"../../lessons/diagramme/pt/l11-java-fehler-loesung.visustruct":HT,"../../lessons/diagramme/pt/l11-java-fehler-start.visustruct":VT,"../../lessons/diagramme/pt/l11-java-gerade-loesung.visustruct":QT,"../../lessons/diagramme/pt/l11-note-loesung.visustruct":qT,"../../lessons/diagramme/pt/l11-summe-loesung.visustruct":UT,"../../lessons/diagramme/pt/l12-countdown-loesung.visustruct":$T,"../../lessons/diagramme/pt/l12-einmaleins-loesung.visustruct":YT,"../../lessons/diagramme/pt/l12-eins-bis-fuenf.visustruct":XT,"../../lessons/diagramme/pt/l12-java-fehler-loesung.visustruct":KT,"../../lessons/diagramme/pt/l12-java-fehler-start.visustruct":eO,"../../lessons/diagramme/pt/l12-java-verdoppeln-loesung.visustruct":tO,"../../lessons/diagramme/pt/l12-summe.visustruct":nO,"../../lessons/diagramme/pt/l13-dreieck.visustruct":iO,"../../lessons/diagramme/pt/l13-gerade-eingaben-loesung.visustruct":aO,"../../lessons/diagramme/pt/l13-gerade-zaehlen.visustruct":sO,"../../lessons/diagramme/pt/l13-java-fehler-loesung.visustruct":rO,"../../lessons/diagramme/pt/l13-java-fehler-start.visustruct":oO,"../../lessons/diagramme/pt/l13-java-quadrate-loesung.visustruct":lO,"../../lessons/diagramme/pt/l13-rechteck-loesung.visustruct":uO,"../../lessons/diagramme/pt/l14-array-durchlaufen.visustruct":mO,"../../lessons/diagramme/pt/l14-erster-letzter-loesung.visustruct":cO,"../../lessons/diagramme/pt/l14-java-fehler-loesung.visustruct":dO,"../../lessons/diagramme/pt/l14-java-fehler-start.visustruct":hO,"../../lessons/diagramme/pt/l14-java-treppe-loesung.visustruct":gO,"../../lessons/diagramme/pt/l14-namen-eingeben.visustruct":pO,"../../lessons/diagramme/pt/l14-rueckwaerts-loesung.visustruct":fO,"../../lessons/diagramme/pt/l14-summe-max-loesung.visustruct":xO,"../../lessons/diagramme/pt/l14-summe-maximum.visustruct":bO,"../../lessons/diagramme/pt/l15-bis-null-loesung.visustruct":vO,"../../lessons/diagramme/pt/l15-endlos-aussprung.visustruct":yO,"../../lessons/diagramme/pt/l15-flaeche-loesung.visustruct":wO,"../../lessons/diagramme/pt/l15-hauptprogramm.visustruct":zO,"../../lessons/diagramme/pt/l15-java-fehler-loesung.visustruct":IO,"../../lessons/diagramme/pt/l15-java-fehler-start.visustruct":kO,"../../lessons/diagramme/pt/l15-java-noten-loesung.visustruct":SO,"../../lessons/diagramme/pt/l15-quadrat-haupt.visustruct":_O,"../../lessons/diagramme/pt/l15-quadrat.visustruct":TO,"../../lessons/diagramme/pt/l15-titel-loesung.visustruct":OO,"../../lessons/diagramme/pt/l15-unterprogramm.visustruct":AO,"../../lessons/diagramme/pt/l15-zeige-summe-haupt.visustruct":PO,"../../lessons/diagramme/pt/l15-zeige-summe.visustruct":jO,"../../lessons/diagramme/pt/l16-countdown-loesung.visustruct":CO,"../../lessons/diagramme/pt/l16-countdown-start.visustruct":BO,"../../lessons/diagramme/pt/l16-java-fehler-loesung.visustruct":DO,"../../lessons/diagramme/pt/l16-java-fehler-start.visustruct":ZO,"../../lessons/diagramme/pt/l16-java-punkte-loesung.visustruct":MO,"../../lessons/diagramme/pt/l16-schreibtisch.visustruct":LO,"../../lessons/diagramme/pt/l16-summe-loesung.visustruct":WO,"../../lessons/diagramme/pt/l16-summe-start.visustruct":EO,"../../lessons/diagramme/pt/l17-beispiel.visustruct":NO,"../../lessons/diagramme/pt/l17-fakultaet-loesung.visustruct":FO,"../../lessons/diagramme/pt/l17-java-brief-loesung.visustruct":JO,"../../lessons/diagramme/pt/l17-java-brief-start.visustruct":RO,"../../lessons/diagramme/pt/l17-java-fehler-loesung.visustruct":GO,"../../lessons/diagramme/pt/l17-java-fehler-start.visustruct":HO,"../../lessons/diagramme/pt/l17-java-passwort-loesung.visustruct":VO,"../../lessons/diagramme/pt/l17-ticket-loesung.visustruct":QO,"../../lessons/diagramme/pt/l18-beispiel.visustruct":qO,"../../lessons/diagramme/pt/l18-java-fehler-loesung.visustruct":UO,"../../lessons/diagramme/pt/l18-java-fehler-start.visustruct":$O,"../../lessons/diagramme/pt/l18-java-kasse-loesung.visustruct":YO,"../../lessons/diagramme/pt/l18-js-loesung.visustruct":XO,"../../lessons/diagramme/pt/l18-python-loesung.visustruct":KO,"../../lessons/diagramme/pt/l19-java-fehler-loesung.visustruct":eA,"../../lessons/diagramme/pt/l19-java-fehler-start.visustruct":tA,"../../lessons/diagramme/pt/l19-java-zaehlen-loesung.visustruct":nA,"../../lessons/diagramme/pt/l2-ausgabe.visustruct":iA,"../../lessons/diagramme/pt/l2-hallo-loesung.visustruct":aA,"../../lessons/diagramme/pt/l2-zwei-zeilen-loesung.visustruct":sA,"../../lessons/diagramme/pt/l23-java-ergaenzen-loesung.visustruct":rA,"../../lessons/diagramme/pt/l23-java-ergaenzen-start.visustruct":oA,"../../lessons/diagramme/pt/l23-java-nummern-loesung.visustruct":lA,"../../lessons/diagramme/pt/l23-java-nummern-start.visustruct":uA,"../../lessons/diagramme/pt/l24-java-fuchs-loesung.visustruct":mA,"../../lessons/diagramme/pt/l24-java-fuchs-start.visustruct":cA,"../../lessons/diagramme/pt/l24-java-laengster-loesung.visustruct":dA,"../../lessons/diagramme/pt/l24-java-laengster-start.visustruct":hA,"../../lessons/diagramme/pt/l25-java-beste-loesung.visustruct":gA,"../../lessons/diagramme/pt/l25-java-beste-start.visustruct":pA,"../../lessons/diagramme/pt/l25-java-schnitt-loesung.visustruct":fA,"../../lessons/diagramme/pt/l25-java-schnitt-start.visustruct":xA,"../../lessons/diagramme/pt/l26-java-namen-loesung.visustruct":bA,"../../lessons/diagramme/pt/l26-java-namen-start.visustruct":vA,"../../lessons/diagramme/pt/l26-java-schreiben-loesung.visustruct":yA,"../../lessons/diagramme/pt/l26-java-schreiben-start.visustruct":wA,"../../lessons/diagramme/pt/l27-java-json-loesung.visustruct":zA,"../../lessons/diagramme/pt/l27-java-json-start.visustruct":IA,"../../lessons/diagramme/pt/l27-java-saetze-loesung.visustruct":kA,"../../lessons/diagramme/pt/l27-java-saetze-start.visustruct":SA,"../../lessons/diagramme/pt/sim-kino-loesung.visustruct":_A,"../../lessons/diagramme/pt/sim-kino-start.visustruct":TA,"../../lessons/diagramme/pt/sim-tausch-loesung.visustruct":OA,"../../lessons/diagramme/pt/sim-tausch-start.visustruct":AA,"../../lessons/diagramme/pt/sim-tausch.visustruct":PA,"../../lessons/diagramme/pt/ss-absteigend-loesung.visustruct":jA,"../../lessons/diagramme/pt/ss-absteigend-start.visustruct":CA,"../../lessons/diagramme/pt/ss-binaere-suche.visustruct":BA,"../../lessons/diagramme/pt/ss-bubblesort.visustruct":DA,"../../lessons/diagramme/pt/ss-karte-suchen-loesung.visustruct":ZA,"../../lessons/diagramme/pt/ss-lineare-suche.visustruct":MA,"../../lessons/diagramme/pt/uebergabe-bonus-loesung.visustruct":LA,"../../lessons/diagramme/pt/uebergabe-bonus-start.visustruct":WA,"../../lessons/diagramme/pt/uebergabe-bonus-unterprogramm-loesung.visustruct":EA,"../../lessons/diagramme/pt/uebergabe-haupt.visustruct":NA,"../../lessons/diagramme/pt/uebergabe-leeren.visustruct":FA,"../../lessons/diagramme/pt/uebergabe-verdopple.visustruct":JA,"../../lessons/diagramme/pt/zk-initialen-loesung.visustruct":RA,"../../lessons/diagramme/pt/zk-mehr.visustruct":GA,"../../lessons/diagramme/pt/zk-rueckwaerts-loesung.visustruct":HA,"../../lessons/diagramme/pt/zk-split.visustruct":VA,"../../lessons/diagramme/pt/zk-woerter-loesung.visustruct":QA,"../../lessons/diagramme/pt/zk-zaehlen.visustruct":qA,"../../lessons/diagramme/pt/zk-zeichen.visustruct":UA,"../../lessons/diagramme/sim-kino-loesung.visustruct":$A,"../../lessons/diagramme/sim-kino-start.visustruct":YA,"../../lessons/diagramme/sim-tausch-loesung.visustruct":XA,"../../lessons/diagramme/sim-tausch-start.visustruct":KA,"../../lessons/diagramme/sim-tausch.visustruct":eP,"../../lessons/diagramme/ss-absteigend-loesung.visustruct":tP,"../../lessons/diagramme/ss-absteigend-start.visustruct":nP,"../../lessons/diagramme/ss-binaere-suche.visustruct":iP,"../../lessons/diagramme/ss-bubblesort.visustruct":aP,"../../lessons/diagramme/ss-karte-suchen-loesung.visustruct":sP,"../../lessons/diagramme/ss-lineare-suche.visustruct":rP,"../../lessons/diagramme/uebergabe-bonus-loesung.visustruct":oP,"../../lessons/diagramme/uebergabe-bonus-start.visustruct":lP,"../../lessons/diagramme/uebergabe-bonus-unterprogramm-loesung.visustruct":uP,"../../lessons/diagramme/uebergabe-haupt.visustruct":mP,"../../lessons/diagramme/uebergabe-leeren.visustruct":cP,"../../lessons/diagramme/uebergabe-verdopple.visustruct":dP,"../../lessons/diagramme/vb-abstand-anzeigen-loesung.visustruct":hP,"../../lessons/diagramme/vb-abstand-halten-loesung.visustruct":gP,"../../lessons/diagramme/vb-alarmanlage-loesung.visustruct":pP,"../../lessons/diagramme/vb-ampel-loesung.visustruct":fP,"../../lessons/diagramme/vb-ausgang-loesung.visustruct":xP,"../../lessons/diagramme/vb-begruessung-loesung.visustruct":bP,"../../lessons/diagramme/vb-binaer-zaehlen-loesung.visustruct":vP,"../../lessons/diagramme/vb-bis-rot-loesung.visustruct":yP,"../../lessons/diagramme/vb-bis-wand-loesung.visustruct":wP,"../../lessons/diagramme/vb-bis-ziel-loesung.visustruct":zP,"../../lessons/diagramme/vb-buchstaben-loesung.visustruct":IP,"../../lessons/diagramme/vb-drei-lichter-loesung.visustruct":kP,"../../lessons/diagramme/vb-dreieck-loesung.visustruct":SP,"../../lessons/diagramme/vb-einparken-loesung.visustruct":_P,"../../lessons/diagramme/vb-farben-loesung.visustruct":TP,"../../lessons/diagramme/vb-farbweiche-loesung.visustruct":OP,"../../lessons/diagramme/vb-gas-bis-wand-loesung.visustruct":AP,"../../lessons/diagramme/vb-gerade-loesung.visustruct":PP,"../../lessons/diagramme/vb-hindernis-loesung.visustruct":jP,"../../lessons/diagramme/vb-java-akku-loesung.visustruct":CP,"../../lessons/diagramme/vb-java-blau-gruen-loesung.visustruct":BP,"../../lessons/diagramme/vb-java-blinken-loesung.visustruct":DP,"../../lessons/diagramme/vb-java-countdown-loesung.visustruct":ZP,"../../lessons/diagramme/vb-java-hoeher-loesung.visustruct":MP,"../../lessons/diagramme/vb-java-joystick-loesung.visustruct":LP,"../../lessons/diagramme/vb-java-laermampel-loesung.visustruct":WP,"../../lessons/diagramme/vb-java-lauflicht-loesung.visustruct":EP,"../../lessons/diagramme/vb-java-linienfolger-loesung.visustruct":NP,"../../lessons/diagramme/vb-java-nachtlicht-ton-loesung.visustruct":FP,"../../lessons/diagramme/vb-java-rand-loesung.visustruct":JP,"../../lessons/diagramme/vb-java-rechteck-loesung.visustruct":RP,"../../lessons/diagramme/vb-java-textlaenge-loesung.visustruct":GP,"../../lessons/diagramme/vb-java-wand-piep-loesung.visustruct":HP,"../../lessons/diagramme/vb-java-wasserwaage-loesung.visustruct":VP,"../../lessons/diagramme/vb-klatschen-loesung.visustruct":QP,"../../lessons/diagramme/vb-knight-rider-loesung.visustruct":qP,"../../lessons/diagramme/vb-labyrinth-loesung.visustruct":UP,"../../lessons/diagramme/vb-linienfolger-stopp-loesung.visustruct":$P,"../../lessons/diagramme/vb-linienmuster-loesung.visustruct":YP,"../../lessons/diagramme/vb-melodie-loesung.visustruct":XP,"../../lessons/diagramme/vb-morsen-loesung.visustruct":KP,"../../lessons/diagramme/vb-nachtlicht-loesung.visustruct":ej,"../../lessons/diagramme/vb-nachtwaechter-loesung.visustruct":tj,"../../lessons/diagramme/vb-ohne-noten-loesung.visustruct":nj,"../../lessons/diagramme/vb-ohne-quadratzahl-loesung.visustruct":ij,"../../lessons/diagramme/vb-ohne-quadratzahl-unterprogramm-loesung.visustruct":aj,"../../lessons/diagramme/vb-ohne-rueckwaerts-loesung.visustruct":sj,"../../lessons/diagramme/vb-ohne-strecke-loesung.visustruct":rj,"../../lessons/diagramme/vb-ohne-summe-loesung.visustruct":oj,"../../lessons/diagramme/vb-quadrat-loesung.visustruct":lj,"../../lessons/diagramme/vb-quadrat-methode-loesung.visustruct":uj,"../../lessons/diagramme/vb-quadrat-schleife-loesung.visustruct":mj,"../../lessons/diagramme/vb-quadrat-unterprogramm-loesung.visustruct":cj,"../../lessons/diagramme/vb-quadrat-verschachtelt-loesung.visustruct":dj,"../../lessons/diagramme/vb-rand-loesung.visustruct":hj,"../../lessons/diagramme/vb-schraeglage-loesung.visustruct":gj,"../../lessons/diagramme/vb-slalom-loesung.visustruct":pj,"../../lessons/diagramme/vb-spirale-loesung.visustruct":fj,"../../lessons/diagramme/vb-start-a-loesung.visustruct":xj,"../../lessons/diagramme/vb-tonleiter-loesung.visustruct":bj,"../../lessons/diagramme/vb-treppe-loesung.visustruct":vj,"../../lessons/diagramme/vb-tunnel-loesung.visustruct":yj,"../../lessons/diagramme/vb-variable-seite-loesung.visustruct":wj,"../../lessons/diagramme/vb-vier-quadrate-loesung.visustruct":zj,"../../lessons/diagramme/vb-wald-loesung.visustruct":Ij,"../../lessons/diagramme/vb-wand-vorn-loesung.visustruct":kj,"../../lessons/diagramme/vb-zwei-sekunden-loesung.visustruct":Sj,"../../lessons/diagramme/zk-initialen-loesung.visustruct":_j,"../../lessons/diagramme/zk-mehr.visustruct":Tj,"../../lessons/diagramme/zk-rueckwaerts-loesung.visustruct":Oj,"../../lessons/diagramme/zk-split.visustruct":Aj,"../../lessons/diagramme/zk-woerter-loesung.visustruct":Pj,"../../lessons/diagramme/zk-zaehlen.visustruct":jj,"../../lessons/diagramme/zk-zeichen.visustruct":Cj}),YB=Object.assign({"../../lessons/welten/ausgang-1.txt":Bj,"../../lessons/welten/ausgang-2.txt":Dj,"../../lessons/welten/ecke.txt":Zj,"../../lessons/welten/farbe-1.txt":Mj,"../../lessons/welten/farbe-2.txt":Lj,"../../lessons/welten/farbe-3.txt":Wj,"../../lessons/welten/farbe-4.txt":Ej,"../../lessons/welten/hindernis-1.txt":Nj,"../../lessons/welten/hindernis-2.txt":Fj,"../../lessons/welten/labyrinth-1.txt":Jj,"../../lessons/welten/labyrinth-2.txt":Rj,"../../lessons/welten/linie-1.txt":Gj,"../../lessons/welten/linie-2.txt":Hj,"../../lessons/welten/linie-rot-1.txt":Vj,"../../lessons/welten/linie-rot-2.txt":Qj,"../../lessons/welten/parken-1.txt":qj,"../../lessons/welten/parken-2.txt":Uj,"../../lessons/welten/rand-1.txt":$j,"../../lessons/welten/rand-2.txt":Yj,"../../lessons/welten/slalom.txt":Xj,"../../lessons/welten/tunnel-1.txt":Kj,"../../lessons/welten/tunnel-2.txt":eC,"../../lessons/welten/wald-1.txt":tC,"../../lessons/welten/wald-2.txt":nC,"../../lessons/welten/wand-frei.txt":iC,"../../lessons/welten/wand-kurz.txt":aC,"../../lessons/welten/wand-lang.txt":sC,"../../lessons/welten/wand-mittel.txt":rC,"../../lessons/welten/wand-nah.txt":oC,"../../lessons/welten/zeit-1.txt":lC,"../../lessons/welten/ziel-kurz.txt":uC,"../../lessons/welten/ziel-lang.txt":mC}),XB=Object.assign({"../../lessons/bilder/aufgabe-mehrwertsteuer.svg":cC,"../../lessons/bilder/ben-shneiderman.jpg":dC,"../../lessons/bilder/caesar-ascii.svg":hC,"../../lessons/bilder/caesar-scheibe.svg":gC,"../../lessons/bilder/caesar-verschiebung.svg":pC,"../../lessons/bilder/en/aufgabe-mehrwertsteuer.svg":fC,"../../lessons/bilder/en/kino-saal.svg":xC,"../../lessons/bilder/en/kino-schleifen.svg":bC,"../../lessons/bilder/en/l01-pap.svg":vC,"../../lessons/bilder/en/l02-einfuegen.svg":yC,"../../lessons/bilder/en/l04-variable.svg":wC,"../../lessons/bilder/en/l04-zuweisung.svg":zC,"../../lessons/bilder/en/l05-tauschen.svg":IC,"../../lessons/bilder/en/l08-zahlenstrahl.svg":kC,"../../lessons/bilder/en/l10-kopfgesteuert.svg":SC,"../../lessons/bilder/en/l11-vergleich.svg":_C,"../../lessons/bilder/en/l12-for-ablauf.svg":TC,"../../lessons/bilder/en/l14-array.svg":OC,"../../lessons/bilder/en/mvc-klick.svg":AC,"../../lessons/bilder/en/ss-binaere-suche.svg":PC,"../../lessons/bilder/en/ss-bubblesort.svg":jC,"../../lessons/bilder/en/ss-lineare-suche.svg":CC,"../../lessons/bilder/en/ss-vergleiche.svg":BC,"../../lessons/bilder/en/uebergabe.svg":DC,"../../lessons/bilder/en/zk-zeichen.svg":ZC,"../../lessons/bilder/ike-nassi.jpg":MC,"../../lessons/bilder/kino-saal.svg":LC,"../../lessons/bilder/kino-schleifen.svg":WC,"../../lessons/bilder/l01-pap.svg":EC,"../../lessons/bilder/l02-einfuegen.svg":NC,"../../lessons/bilder/l04-variable.svg":FC,"../../lessons/bilder/l04-zuweisung.svg":JC,"../../lessons/bilder/l05-tauschen.svg":RC,"../../lessons/bilder/l08-zahlenstrahl.svg":GC,"../../lessons/bilder/l09-wahrheitstabelle.svg":HC,"../../lessons/bilder/l10-kopfgesteuert.svg":VC,"../../lessons/bilder/l11-vergleich.svg":QC,"../../lessons/bilder/l12-for-ablauf.svg":qC,"../../lessons/bilder/l14-array.svg":UC,"../../lessons/bilder/mvc-klick.svg":$C,"../../lessons/bilder/pt/aufgabe-mehrwertsteuer.svg":YC,"../../lessons/bilder/pt/kino-saal.svg":XC,"../../lessons/bilder/pt/kino-schleifen.svg":KC,"../../lessons/bilder/pt/l01-pap.svg":eB,"../../lessons/bilder/pt/l02-einfuegen.svg":tB,"../../lessons/bilder/pt/l04-variable.svg":nB,"../../lessons/bilder/pt/l04-zuweisung.svg":iB,"../../lessons/bilder/pt/l05-tauschen.svg":aB,"../../lessons/bilder/pt/l08-zahlenstrahl.svg":sB,"../../lessons/bilder/pt/l10-kopfgesteuert.svg":rB,"../../lessons/bilder/pt/l11-vergleich.svg":oB,"../../lessons/bilder/pt/l12-for-ablauf.svg":lB,"../../lessons/bilder/pt/l14-array.svg":uB,"../../lessons/bilder/pt/mvc-klick.svg":mB,"../../lessons/bilder/pt/schiffe-versenken.svg":cB,"../../lessons/bilder/pt/ss-binaere-suche.svg":dB,"../../lessons/bilder/pt/ss-bubblesort.svg":hB,"../../lessons/bilder/pt/ss-lineare-suche.svg":gB,"../../lessons/bilder/pt/ss-vergleiche.svg":pB,"../../lessons/bilder/pt/uebergabe.svg":fB,"../../lessons/bilder/pt/zk-zeichen.svg":xB,"../../lessons/bilder/schiffe-versenken.svg":bB,"../../lessons/bilder/ss-binaere-suche.svg":vB,"../../lessons/bilder/ss-bubblesort.svg":yB,"../../lessons/bilder/ss-lineare-suche.svg":wB,"../../lessons/bilder/ss-vergleiche.svg":zB,"../../lessons/bilder/uebergabe.svg":IB,"../../lessons/bilder/zk-zeichen.svg":kB}),Rh=i=>i.replace(/^.*\//,"");function F1(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])=>[Rh(r),o]));return[...new Map([...n("en"),...t==="en"?[]:n(t)])]}function Mu(i){return i==="de"?"de":i==="pt-PT"?"pt":"en"}let w1="en",Ot=[],Tn=[],Ma="",La=[],ds="off";function Lu(i){i!==ds&&(ds=i,Ot=[],hs(w1))}function hs(i){var s,r,o;if(t3(i),i===w1&&Ot.length>0)return;w1=i;const e=F1(QB,/\/lessons\/([^/]+)\/[^/]+\.md$/,i),t=(l,u)=>l.filter(([m])=>/^\d+/.test(m)).map(([m,c])=>HB(Nu(c,u),`${i}/${m}`)).sort((m,c)=>m.number-c.number),n=(l,u,m)=>l.map(([c,d])=>{const h=VB(Nu(d,m),`${i}/${u}${c}`);return m&&h.after!==void 0?{...h,after:m.get(h.after)??h.after}:h}),a=F1(qB,/\/lessons\/([^/]+)\/aufgaben\/[^/]+\.md$/,i);if(ds==="on"){const l=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i),u=KB(Eu(e),Eu(l)),m=t(e,u.normal),c=h=>{var g;return((g=[...m].reverse().find(f=>u.normal.get(f.number)({...h,number:u.normal.get(h.number)})),...t(l,u.robot).map(h=>{const g=u.robot.get(h.number);return{...h,number:g,section:c(g),robot:!0}})].sort((h,g)=>h.number-g.number);const d=F1(UB,/\/lessons\/([^/]+)\/visubot\/aufgaben\/[^/]+\.md$/,i);Tn=[...n(a,"aufgaben/",u.normal),...n(d,"visubot/aufgaben/",u.robot).map(h=>({...h,robot:!0}))]}else Ot=t(e),Tn=n(a,"aufgaben/");Tn.sort((l,u)=>(l.after??0)-(u.after??0)||l.level-u.level||l.title.localeCompare(u.title,i));for(const l of[...Ot.flatMap(u=>u.steps.flatMap(m=>m.blocks)),...Tn.flatMap(u=>u.blocks)])l.kind==="textFile"&&c3(l.name,l.content);if(Ma=((s=e.find(([l])=>l==="nachschlagen.md"))==null?void 0:s[1])??"",ds!=="off"){const l=(r=F1(Zu,/\/lessons\/([^/]+)\/visubot\/[^/]+\.md$/,i).find(([u])=>u==="nachschlagen.md"))==null?void 0:r[1];l&&(Ma=`${Ma.trimEnd()} -${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const Wu={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},Eu=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function XB(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(Wu[o])?Wu[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function Nu(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}hs("en");function Rh(i,e){return w1==="de"?i.get(e)??i.get(`en/${e}`):(w1==="en"?void 0:i.get(`${w1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Gh=(i,e)=>i.slice(i.indexOf(e)+e.length),KB=new Map(Object.entries(UB).map(([i,e])=>[Gh(i,"/diagramme/"),e]));function X1(i){const e=Rh(KB,i);return e===void 0?void 0:Bl(e)}const eD=new Map(Object.entries(YB).map(([i,e])=>[Gh(i,"/bilder/"),e]));function Fu(i){return Rh(eD,i)}const tD=new Map(Object.entries($B).map(([i,e])=>[Jh(i).replace(/\.txt$/,""),e])),Ju=new Map;function Wa(i){const e=tD.get(i);if(e===void 0)return;let t=Ju.get(i);return t||Ju.set(i,t=Ox(e)),t}const Hh=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Re(i){const e=[];let t=Hh(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=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' 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 kn(i){const e=[],t=i.replace(/\r\n/g,` +${l}`)}La=SB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const Wu={1:3,2:5,3:5,4:8,5:11,6:11,7:11,8:11,9:11,10:11,11:11,12:11,13:11,14:11,15:11,16:14,17:15,18:15,19:17,20:17,21:17,22:18},Eu=i=>i.map(([e])=>{var t;return Number((t=/^(\d+)/.exec(e))==null?void 0:t[1])}).filter(Number.isFinite).sort((e,t)=>e-t);function KB(i,e){const t=[...i].reverse().find(o=>o<=19)??i.at(-1)??0,n=o=>i.includes(Wu[o])?Wu[o]:t,a=new Map,s=new Map;let r=1;for(const o of i){a.set(o,r++);for(const l of e.filter(u=>n(u)===o))s.set(l,r++)}return{normal:a,robot:s}}function Nu(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}hs("en");function Gh(i,e){return w1==="de"?i.get(e)??i.get(`en/${e}`):(w1==="en"?void 0:i.get(`${w1}/${e}`))??i.get(`en/${e}`)??i.get(e)}const Hh=(i,e)=>i.slice(i.indexOf(e)+e.length),eD=new Map(Object.entries($B).map(([i,e])=>[Hh(i,"/diagramme/"),e]));function X1(i){const e=Gh(eD,i);return e===void 0?void 0:Bl(e)}const tD=new Map(Object.entries(XB).map(([i,e])=>[Hh(i,"/bilder/"),e]));function Fu(i){return Gh(tD,i)}const nD=new Map(Object.entries(YB).map(([i,e])=>[Rh(i).replace(/\.txt$/,""),e])),Ju=new Map;function Wa(i){const e=nD.get(i);if(e===void 0)return;let t=Ju.get(i);return t||Ju.set(i,t=Ax(e)),t}const Vh=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function Re(i){const e=[];let t=Vh(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=/^(https?:|mailto:|#|\.{0,2}\/)/.test(s)?s:"#",o=/^https?:/.test(r)?' 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 kn(i){const e=[],t=i.replace(/\r\n/g,` `).split(` -`);let n=0;for(;n${Hh(l.join(` +`);let n=0;for(;n${Vh(l.join(` `))}`);continue}const s=/^(#{2,4})\s+(.*)$/.exec(a);if(s){const o=s[1].length;e.push(`${Re(s[2])}`),n++;continue}if(/^\s*([-*]|\d+\.)\s+/.test(a)){const o=/^\s*\d+\./.test(a),l=[];for(;n${Re(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=>Re(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(`

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

`)}return e.join(` -`)}const aa=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Ao="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",Kl="visustruct.learn.teacher";let e0=!1;function Ru(){if(e0)return!0;try{return localStorage.getItem(Kl)===Ao}catch{return!1}}async function nD(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 iD(i){let e=!1;try{e=await nD(i.trim())===Ao}catch{return!1}if(e){e0=!0;try{localStorage.setItem(Kl,Ao)}catch{}}return e}function aD(){e0=!1;try{localStorage.removeItem(Kl)}catch{}}function Vh(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 aa=""+new URL("ludwig-Cus1i402.webp",import.meta.url).href,Ao="f4ecc8e489ae7865308288c7d0fa313333cf2be3ff529b23bc214bee010310e0",Kl="visustruct.learn.teacher";let e0=!1;function Ru(){if(e0)return!0;try{return localStorage.getItem(Kl)===Ao}catch{return!1}}async function iD(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 aD(i){let e=!1;try{e=await iD(i.trim())===Ao}catch{return!1}if(e){e0=!0;try{localStorage.setItem(Kl,Ao)}catch{}}return e}function sD(){e0=!1;try{localStorage.removeItem(Kl)}catch{}}function Qh(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 Qh(i){return[...i].map(([e,t])=>Vh(e,t,!0))}function Kn(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 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 Ae=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),Gu=["0.2","0.5","1.0","1.5","2.0"],sD=i=>Number(i).toLocaleString(i1()==="java"?"en":i1(),{minimumFractionDigits:1}),fr="visustruct.simulation.stepDelay",Hu="visustruct.simulation.highlightMode";function xr(i){try{return localStorage.getItem(i)}catch{return null}}function Vu(i,e){try{localStorage.setItem(i,e)}catch{}}class rD{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",Gu.includes(xr(fr)??"")?xr(fr):"0.5");y(this,"highlightMode",xr(Hu)==="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,n3(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 qh(i){return[...i].map(([e,t])=>Qh(e,t,!0))}function Kn(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 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 Ae=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),Gu=["0.2","0.5","1.0","1.5","2.0"],rD=i=>Number(i).toLocaleString(i1()==="java"?"en":i1(),{minimumFractionDigits:1}),fr="visustruct.simulation.stepDelay",Hu="visustruct.simulation.highlightMode";function xr(i){try{return localStorage.getItem(i)}catch{return null}}function Vu(i,e){try{localStorage.setItem(i,e)}catch{}}class oD{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",Gu.includes(xr(fr)??"")?xr(fr):"0.5");y(this,"highlightMode",xr(Hu)==="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,i3(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=`

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

@@ -60302,7 +60302,7 @@ ${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

@@ -60311,22 +60311,22 @@ ${l}`)}La=kB(((o=e.find(([l])=>l==="begriffe.md"))==null?void 0:o[1])??"")}const

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

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

${Ae(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,Vu(Hu,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Vu(fr,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=`

${Ae(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(qh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

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

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...Qh(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=`

${Ae(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?Kn(r):"",o.hidden=!r}}function qh(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 f1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Jn=360/f1.length,oD="http://www.w3.org/2000/svg";function Me(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 ft(i,e={},t){const n=document.createElementNS(oD,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function lD(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 Qu(i,e){const t=ft("g",{class:e}),n=f1.map((a,s)=>{const r=ft("g",{transform:`rotate(${s*Jn})`});return r.append(ft("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function uD(i,e){let t=i,n=!1,a=-t*Jn;const s=Me("section",{class:"learn-game learn-caesar"});s.append(Me("div",{class:"learn-game-head"},Me("strong",{},p("web_learn_caesar_title")))),s.append(Me("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=ft("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(ft("circle",{r:196,class:"outer-disc"})),r.append(ft("path",{d:mD(196,92,Jn/2),class:"window"}));const o=Qu(168,"outer-letters");r.append(o.group);for(let A=0;A{o.cells.forEach((W,E)=>W.classList.toggle("marked",E===A)),u.cells.forEach((W,E)=>W.classList.toggle("marked",A!==void 0&&E===(A+t)%26))},_=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.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),x.classList.toggle("active",n),S.textContent=lD(v.value,n?-t:t)||" ";const A=Array.from(v.value.toUpperCase()).reverse().find(E=>f1.includes(E));if(A===void 0)return k();const W=f1.indexOf(A);k(n?(W-t+26)%26:W)},T=A=>{t=(A%26+26)%26,a=-t*Jn,_()};c.addEventListener("click",()=>T(t-1)),d.addEventListener("click",()=>T(t+1)),f.addEventListener("click",()=>{var A;n&&(v.value=((A=S.textContent)==null?void 0:A.trim())??""),n=!1,_()}),x.addEventListener("click",()=>{var A;n||(v.value=((A=S.textContent)==null?void 0:A.trim())??""),n=!0,_()}),v.addEventListener("input",_),o.cells.forEach((A,W)=>A.addEventListener("click",()=>k(W)));let j;const C=A=>{const W=r.getBoundingClientRect();return Math.atan2(A.clientY-(W.top+W.height/2),A.clientX-(W.left+W.width/2))*180/Math.PI};l.addEventListener("pointerdown",A=>{const W=A;j=C(W)-a,l.classList.add("dragging"),r.setPointerCapture(W.pointerId),W.preventDefault()}),r.addEventListener("pointermove",A=>{if(j===void 0)return;a=C(A)-j,l.setAttribute("transform",`rotate(${a})`);const W=Math.round(-a/Jn);if((W%26+26)%26!==t){t=(W%26+26)%26;const E=a;_(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{j!==void 0&&(j=void 0,l.classList.remove("dragging"),T(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),_(),s}function mD(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}`),Uh=new WeakMap;function $h(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=q(async()=>{const{Robot3D:c}=await import("./robot3d-ZT3VS0U0.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 x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.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 x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.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 Uh.set(a,m),m}function cD(i,e,t=!1){return $h(i,e,t).box}function dD(i){const e=i.querySelector(".visubot-model"),t=e&&Uh.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 hD(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=kn(`**${t+1}/${i.length}** ${i[t].question}`)},r=$h([],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=V("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,S=V("div",{class:"learn-bomb-fuse"},V("span",{})),z=V("span",{class:"learn-bomb-time"}),k=V("div",{class:"learn-bomb","aria-live":"polite"},V("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),z,S),_=V("div",{class:"learn-game-feedback",role:"status"}),T=v.code.split(` -`).map((E,Q)=>{const $=V("button",{class:"ln",type:"button"},E||" ");return $.disabled=!E.trim(),$.addEventListener("click",()=>A(Q+1===v.wrongLine?"right":"wrong",$)),$}),j=V("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...T),C=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const E=Math.max(0,w-(Date.now()-C)/1e3);z.textContent=p("web_game_time_fmt",Math.ceil(E)),S.firstChild.style.width=`${E/w*100}%`,k.classList.toggle("hurry",E<=5),E<=0&&A("time")},A=(E,Q)=>{m(),T.forEach((Te,xe)=>{Te.disabled=!0,xe+1===v.wrongLine&&Te.classList.add("right")}),Q&&E==="wrong"&&Q.classList.add("wrong");const $=E==="right";$&&l++,c(),k.classList.add($?"defused":"boom"),k.firstChild.textContent=$?"✂️":"💥",_.className=`learn-game-feedback ${$?"right":"wrong"}`;const he=d();_.replaceChildren(V("p",{},p($?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Nn("div",{class:"learn-game-explain"},v.explanation),V("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,V("code",{},v.fix.trim())),he),he.focus({preventScroll:!0})};s.replaceChildren(k,Nn("p",{class:"learn-game-question"},v.question),j,_),P();const W=window.setInterval(P,200);u.push(W)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(Uu(v.code).element),w.push(Nn("p",{class:"learn-game-question"},v.question),V("p",{class:"learn-order-hint"},p("web_game_order_hint")));const S=V("div",{class:"learn-game-options learn-order"}),z=V("div",{class:"learn-game-feedback",role:"status"});let k=0;const _=pD(v.options.length).map(j=>{const C=V("span",{class:"learn-order-badge","aria-hidden":"true"}),P=V("span",{});P.innerHTML=Re(v.options[j].text);const A=V("button",{},C,P);return A.addEventListener("click",()=>{if(j!==k)return A.classList.add("wrong"),T(!1);A.classList.add("right"),C.textContent=String(++k),A.disabled=!0,k===v.options.length&&T(!0)}),S.append(A),{k:j,b:A,badge:C}}),T=j=>{for(const{k:P,b:A,badge:W}of[..._].sort((E,Q)=>E.k-Q.k))A.disabled=!0,W.textContent=String(P+1),S.append(A);j&&l++,c(),z.className=`learn-game-feedback ${j?"right":"wrong"}`;const C=d();z.replaceChildren(V("p",{},p(j?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},v.explanation),C),C.focus({preventScroll:!0})};s.replaceChildren(...w,S,z)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=Uu(v.code),S=[];let z;i.kind==="zuhoerer"?(z=fD(Dh(v.code),w),S.push(V("div",{class:"learn-swing-row"},w.element,z.element)),v.clicks.length&&S.push(V("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((C,P)=>[...P?[" → "]:[],V("code",{},C)])))):v.code.trim()&&S.push(w.element),S.push(Nn("p",{class:"learn-game-question"},v.question));const k=V("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),_=V("div",{class:"learn-game-feedback",role:"status"}),T=v.options.map(C=>{const P=V("button",{});return i.kind==="layout"?P.append(bD(C.text)):C.text.includes(` -`)?P.append(xD(C.text)):P.innerHTML=Re(C.text),P.addEventListener("click",()=>j(C.right,P)),k.append(P),P}),j=(C,P)=>{T.forEach((W,E)=>{W.disabled=!0,v.options[E].right&&W.classList.add("right")}),C||P.classList.add("wrong"),C&&l++,c(),_.className=`learn-game-feedback ${C?"right":"wrong"}`;const A=d();_.replaceChildren(V("p",{},p(C?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},v.explanation)),_.append(A),z&&(u=z.replay(v.clicks,()=>A.before(V("p",{class:"learn-swing-try"},p("web_game_try"))))),A.focus({preventScroll:!0})};s.replaceChildren(...S,k,_)},x=()=>{m(),a.textContent="";const v=V("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(V("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),V("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=V("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Nn("p",{},i.intro),b),t}function pD(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 Uu(i){const e=i.split(` -`).map(n=>V("div",{class:"ln"},n||" "));return{element:V("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 fD(i,e){const t=Zh(i),n=V("div",{class:"learn-swing-window",dir:"ltr"});n.append(V("div",{class:"learn-swing-title"},i.title||" "));const a=V("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=V("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=V("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=V("p",{class:"learn-swing-event",role:"status"}),l=V("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,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} -`).join(""))},m=c=>u(Mh(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*qu));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(Lh(i,t,g.name)))}),d()},(c.length+.3)*qu)),h}}}function xD(i){return V("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function bD(i){const e=Bh(i),t=V("div",{class:"learn-layout-window",dir:"ltr"},V("div",{class:"learn-layout-title"})),n=V("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>V("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 R(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 yn(i,e,t){const n=R(i,e);return n.innerHTML=Re(t),n}function $u(i){return R("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` -`).map(e=>R("div",{class:"ln"},e||" ")))}function vD(i,e){const t=R("section",{class:"learn-game learn-rescue"}),n=R("div",{class:"learn-game-head"});n.append(R("img",{src:e,alt:"",width:"40",height:"40"}),R("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>R("span",{class:"learn-rescue-dot"})),r=R("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=R("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",R("span",{class:"learn-rescue-zora"},"🐐"),R("span",{class:"learn-rescue-fox"},"🦊")),l=R("span",{class:"learn-rescue-free"},"🐐"),u=R("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=R("p",{class:"learn-game-status"}),c=R("div",{class:"learn-game-stage"}),d=yD(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((z,k)=>z.classList.toggle("done",k{const z=[...i.alphabet].map((k,_)=>R("span",{class:"learn-rescue-letter"},R("b",{},k),R("small",{},String(_))));return{element:R("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...z),cells:z}},x=z=>{const k=i.stations[z];m.textContent=p("web_learn_rescue_station_fmt",z+1,a,k.name);const _=f(),T=R("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),j=R("button",{class:"primary"},p("web_learn_check")),C=R("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const A=T.value.trim();if(!/^-?\d+$/.test(A)){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_not_number")));return}if(Number(A)!==k.answer){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_wrong")),...k.hint?[yn("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${k.hint}`)]:[]),T.select();return}T.disabled=j.disabled=!0;const W=i.alphabet.charAt(k.answer);_.cells[k.answer].classList.add("hit"),d.give(k.row,k.col,W),h++,g();const E=z+1===a,Q=R("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));Q.addEventListener("click",()=>E?b():x(z+1)),C.className="learn-game-feedback right",C.replaceChildren(R("p",{},p("web_game_right")),R("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${k.answer})`,R("span",{"aria-hidden":"true"}," → "),R("code",{},`'${W}'`)),yn("div",{class:"learn-game-explain"},k.explanation),R("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Q),Q.focus({preventScroll:!0})};j.addEventListener("click",P),T.addEventListener("keydown",A=>{A.key==="Enter"&&P()}),c.replaceChildren($u(k.code),yn("p",{class:"learn-game-question"},k.question),R("div",{class:"learn-rescue-answer"},T,j),C,R("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),$u(`String alphabet = "${i.alphabet}";`),_.element,d.element),T.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const z=R("div",{class:"learn-game-feedback",role:"status"}),k=R("button",{class:"primary"},p("web_learn_check"));k.addEventListener("click",()=>{if(!d.check()){z.className="learn-game-feedback wrong",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_wrong")));return}k.disabled=!0,d.lock();const _=R("button",{class:"primary"},p("web_learn_rescue_to_gate"));_.addEventListener("click",v),z.className="learn-game-feedback right",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_done")),_),_.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(yn("p",{},i.crosswordText),d.element,k,z),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const z=R("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")}),k=i.gateCode.split(` -`).map(C=>{const P=C.indexOf(cs);return P<0?R("div",{class:"ln"},C||" "):R("div",{class:"ln"},C.slice(0,P),z,C.slice(P+cs.length))}),_=R("button",{class:"primary"},p("web_learn_rescue_open")),T=R("div",{class:"learn-game-feedback",role:"status"}),j=()=>{const C=z.value.trim();if(C!==i.keyword){const A=C.toUpperCase()===i.keyword.toUpperCase();T.className="learn-game-feedback wrong",T.replaceChildren(R("p",{},p(A?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),z.select();return}z.disabled=_.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=R("button",{},p("web_game_again"));P.addEventListener("click",w),T.className="learn-game-feedback right",T.replaceChildren(R("p",{},p("web_learn_rescue_freed")),yn("div",{class:"learn-game-explain"},i.end),P)};_.addEventListener("click",j),z.addEventListener("keydown",C=>{C.key==="Enter"&&j()}),c.replaceChildren(yn("p",{},i.gateText),R("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...k),_,T),z.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},S=R("button",{class:"primary"},p("web_game_start"));return S.addEventListener("click",w),c.append(yn("p",{},i.intro),S),t}function yD(i){const e=jB(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=R("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(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(R("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=R("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const _=o(f,b);_.some(T=>T.across===r)||(r=_[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",_=>{if(_.key==="Backspace"&&!w.value)l(f,b,-1);else if(_.key==="ArrowRight"||_.key==="ArrowLeft")r=!0,l(f,b,_.key==="ArrowRight"?1:-1);else if(_.key==="ArrowDown"||_.key==="ArrowUp")r=!1,l(f,b,_.key==="ArrowDown"?1:-1);else return;_.preventDefault()}),a.set(v,w);const S=t.get(v),z=R("span",{class:`learn-cw-cell${S!==void 0?" key":""}`}),k=n.get(v);k&&z.append(R("small",{class:"learn-cw-number"},String(k))),S!==void 0&&z.append(R("small",{class:"learn-cw-keyindex"},String(S+1))),z.append(w),s.append(z)}));const u=g=>{const f=R("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=yn("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return R("div",{},R("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>R("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=R("div",{class:"learn-cw"},R("div",{class:"learn-cw-board"},s,R("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,R("span",{class:"mono",dir:"ltr"},...m))),R("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.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,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.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()}}}function zt(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 Yu(i,e,t){const n=zt(i,e);return n.innerHTML=Re(t),n}function wD(i){const e=zt("section",{class:"learn-cloze"});e.append(zt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Yu("p",{},i.task)),e.append(zt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=zt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=zt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=zt("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(x=>x.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=zt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Yu("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=zt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=zt("button",{},p("web_learn_cloze_solution")),o=zt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=zt("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=LB(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(),c[...o.querySelectorAll("strong")])){const o=ju(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Cu(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(zD)||l.push(u)}for(let u of l)for(;;){const m=ju(a),c=m==null?void 0:m.exec(u.data),d=c?Cu(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 ID(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 Yh={leiste:".topbar > .toolbar",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]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},kD=new Set(["werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","exportieren","code","simulation"]),SD=new Set(["ausfuehren","konsole","einzelschritt"]);function n0(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function _D(i){return n0(i,new Set(["dateien"]))}function TD(i){return n0(i,kD)}function OD(i){return n0(i,SD)}function Ku(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Yh))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 AD(i){let e,t;const n=()=>{e==null||e.classList.remove("ui-spot"),e=void 0,window.clearTimeout(t)},a=(r,o)=>{n();const l=[...document.querySelectorAll(Yh[r.dataset.target??""]??":not(*)")].find(u=>u.getClientRects().length>0);l&&(e=l,l.classList.add("ui-spot"),o&&(t=window.setTimeout(n,2500)))},s=r=>{var o,l;return((l=(o=r.target)==null?void 0:o.closest)==null?void 0:l.call(o,".ui-pointer"))??void 0};return i.addEventListener("pointerover",r=>{const o=s(r);o&&r.pointerType==="mouse"&&a(o,!1)}),i.addEventListener("pointerout",r=>{s(r)&&r.pointerType==="mouse"&&n()}),i.addEventListener("click",r=>{const o=s(r);o&&a(o,!0)}),i.addEventListener("focusin",r=>{const o=s(r);o&&a(o,!1)}),i.addEventListener("focusout",r=>{s(r)&&n()}),i.addEventListener("keydown",r=>{const o=s(r);o&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(o,!0))}),{off:n}}const kt='',PD=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function O(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 gt(i,e,t){const n=O(i,e);return n.innerHTML=t,n}const jD=i=>p(`element_${I[i]}`);function CD(i){return{caption:i,elements:[ze(I.anweisung,{textLines:["ø"]})]}}function em(i){const e=i.start?X1(i.start):void 0;return e?{...e,caption:e.caption||i.title}:CD(i.title)}class BD{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=O("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=ID(this.element),this.pointers=AD(this.element),hs(Mu(i1())),this.restore()}restore(){const e=ge.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Tn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),hs(Mu(i1()));const e=O("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=O("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=gt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},kt);t.addEventListener("click",()=>this.host.collapse());const n=O("div",{class:"learn-head"},e,t);if(this.body=O("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Tn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=La.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,Vu(Hu,this.highlightMode)});const n=e("[data-sim=delay]");n.value=this.delay,n.addEventListener("change",()=>{this.delay=n.value,Vu(fr,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=`

${Ae(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(Uh(u)):m.textContent=we(u)}this.variables.replaceChildren(r)}e.outputLines.length===0&&e.files.size===0?this.output.innerHTML=`

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

`:(this.output.replaceChildren(...e.outputLines.map(r=>{const o=document.createElement("div");return o.textContent=r,o}),...qh(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=`

${Ae(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?Kn(r):"",o.hidden=!r}}function Uh(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 f1=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),Jn=360/f1.length,lD="http://www.w3.org/2000/svg";function Me(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 ft(i,e={},t){const n=document.createElementNS(lD,i);for(const[a,s]of Object.entries(e))n.setAttribute(a,String(s));return t!==void 0&&(n.textContent=t),n}function uD(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 Qu(i,e){const t=ft("g",{class:e}),n=f1.map((a,s)=>{const r=ft("g",{transform:`rotate(${s*Jn})`});return r.append(ft("text",{x:0,y:-i,"text-anchor":"middle","dominant-baseline":"central"},a)),t.append(r),r});return{group:t,cells:n}}function mD(i,e){let t=i,n=!1,a=-t*Jn;const s=Me("section",{class:"learn-game learn-caesar"});s.append(Me("div",{class:"learn-game-head"},Me("strong",{},p("web_learn_caesar_title")))),s.append(Me("p",{class:"learn-game-status"},p("web_learn_caesar_hint")));const r=ft("svg",{viewBox:"-200 -200 400 400",class:"learn-caesar-disc",role:"img"});r.append(ft("circle",{r:196,class:"outer-disc"})),r.append(ft("path",{d:cD(196,92,Jn/2),class:"window"}));const o=Qu(168,"outer-letters");r.append(o.group);for(let O=0;O{o.cells.forEach((W,E)=>W.classList.toggle("marked",E===O)),u.cells.forEach((W,E)=>W.classList.toggle("marked",O!==void 0&&E===(O+t)%26))},_=()=>{m.textContent=String(t),l.setAttribute("transform",`rotate(${a})`),r.setAttribute("aria-label",p("web_learn_caesar_key_fmt",t)),b.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),x.classList.toggle("active",n),I.textContent=uD(v.value,n?-t:t)||" ";const O=Array.from(v.value.toUpperCase()).reverse().find(E=>f1.includes(E));if(O===void 0)return S();const W=f1.indexOf(O);S(n?(W-t+26)%26:W)},T=O=>{t=(O%26+26)%26,a=-t*Jn,_()};c.addEventListener("click",()=>T(t-1)),d.addEventListener("click",()=>T(t+1)),f.addEventListener("click",()=>{var O;n&&(v.value=((O=I.textContent)==null?void 0:O.trim())??""),n=!1,_()}),x.addEventListener("click",()=>{var O;n||(v.value=((O=I.textContent)==null?void 0:O.trim())??""),n=!0,_()}),v.addEventListener("input",_),o.cells.forEach((O,W)=>O.addEventListener("click",()=>S(W)));let j;const C=O=>{const W=r.getBoundingClientRect();return Math.atan2(O.clientY-(W.top+W.height/2),O.clientX-(W.left+W.width/2))*180/Math.PI};l.addEventListener("pointerdown",O=>{const W=O;j=C(W)-a,l.classList.add("dragging"),r.setPointerCapture(W.pointerId),W.preventDefault()}),r.addEventListener("pointermove",O=>{if(j===void 0)return;a=C(O)-j,l.setAttribute("transform",`rotate(${a})`);const W=Math.round(-a/Jn);if((W%26+26)%26!==t){t=(W%26+26)%26;const E=a;_(),a=E,l.setAttribute("transform",`rotate(${a})`)}});const P=()=>{j!==void 0&&(j=void 0,l.classList.remove("dragging"),T(t))};return r.addEventListener("pointerup",P),r.addEventListener("pointercancel",P),_(),s}function cD(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}`),$h=new WeakMap;function Yh(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=q(async()=>{const{Robot3D:c}=await import("./robot3d-DuVc6opp.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 x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.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 x=s.getBoundingClientRect();o(f,g.clientX-x.left,g.clientY-x.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 $h.set(a,m),m}function dD(i,e,t=!1){return Yh(i,e,t).box}function hD(i){const e=i.querySelector(".visubot-model"),t=e&&$h.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 gD(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=kn(`**${t+1}/${i.length}** ${i[t].question}`)},r=Yh([],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=V("button",{class:"primary"},o+1{o++,o{const v=i.rounds[o],w=i.seconds,I=V("div",{class:"learn-bomb-fuse"},V("span",{})),z=V("span",{class:"learn-bomb-time"}),S=V("div",{class:"learn-bomb","aria-live":"polite"},V("span",{class:"learn-bomb-icon","aria-hidden":"true"},"💣"),z,I),_=V("div",{class:"learn-game-feedback",role:"status"}),T=v.code.split(` +`).map((E,Q)=>{const $=V("button",{class:"ln",type:"button"},E||" ");return $.disabled=!E.trim(),$.addEventListener("click",()=>O(Q+1===v.wrongLine?"right":"wrong",$)),$}),j=V("div",{class:"learn-game-code learn-bomb-code mono",dir:"ltr"},...T),C=Date.now(),P=()=>{if(!t.isConnected&&Date.now()-C>1e3)return m();const E=Math.max(0,w-(Date.now()-C)/1e3);z.textContent=p("web_game_time_fmt",Math.ceil(E)),I.firstChild.style.width=`${E/w*100}%`,S.classList.toggle("hurry",E<=5),E<=0&&O("time")},O=(E,Q)=>{m(),T.forEach((Te,xe)=>{Te.disabled=!0,xe+1===v.wrongLine&&Te.classList.add("right")}),Q&&E==="wrong"&&Q.classList.add("wrong");const $=E==="right";$&&l++,c(),S.classList.add($?"defused":"boom"),S.firstChild.textContent=$?"✂️":"💥",_.className=`learn-game-feedback ${$?"right":"wrong"}`;const he=d();_.replaceChildren(V("p",{},p($?"web_game_defused":E==="time"?"web_game_boom_time":"web_game_boom_wrong")),Nn("div",{class:"learn-game-explain"},v.explanation),V("p",{class:"learn-bomb-fix"},`${p("web_game_fix")} `,V("code",{},v.fix.trim())),he),he.focus({preventScroll:!0})};s.replaceChildren(S,Nn("p",{class:"learn-game-question"},v.question),j,_),P();const W=window.setInterval(P,200);u.push(W)},g=()=>{const v=i.rounds[o],w=[];v.code.trim()&&w.push(Uu(v.code).element),w.push(Nn("p",{class:"learn-game-question"},v.question),V("p",{class:"learn-order-hint"},p("web_game_order_hint")));const I=V("div",{class:"learn-game-options learn-order"}),z=V("div",{class:"learn-game-feedback",role:"status"});let S=0;const _=fD(v.options.length).map(j=>{const C=V("span",{class:"learn-order-badge","aria-hidden":"true"}),P=V("span",{});P.innerHTML=Re(v.options[j].text);const O=V("button",{},C,P);return O.addEventListener("click",()=>{if(j!==S)return O.classList.add("wrong"),T(!1);O.classList.add("right"),C.textContent=String(++S),O.disabled=!0,S===v.options.length&&T(!0)}),I.append(O),{k:j,b:O,badge:C}}),T=j=>{for(const{k:P,b:O,badge:W}of[..._].sort((E,Q)=>E.k-Q.k))O.disabled=!0,W.textContent=String(P+1),I.append(O);j&&l++,c(),z.className=`learn-game-feedback ${j?"right":"wrong"}`;const C=d();z.replaceChildren(V("p",{},p(j?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},v.explanation),C),C.focus({preventScroll:!0})};s.replaceChildren(...w,I,z)},f=()=>{if(m(),i.kind==="bombe"||i.kind==="reihenfolge"){c(),i.kind==="bombe"?h():g();return}const v=i.rounds[o];c();const w=Uu(v.code),I=[];let z;i.kind==="zuhoerer"?(z=xD(Zh(v.code),w),I.push(V("div",{class:"learn-swing-row"},w.element,z.element)),v.clicks.length&&I.push(V("p",{class:"learn-swing-clicks"},`${p("web_game_clicks")} `,...v.clicks.flatMap((C,P)=>[...P?[" → "]:[],V("code",{},C)])))):v.code.trim()&&I.push(w.element),I.push(Nn("p",{class:"learn-game-question"},v.question));const S=V("div",{class:`learn-game-options ${i.kind==="layout"?"pictures":""}`}),_=V("div",{class:"learn-game-feedback",role:"status"}),T=v.options.map(C=>{const P=V("button",{});return i.kind==="layout"?P.append(vD(C.text)):C.text.includes(` +`)?P.append(bD(C.text)):P.innerHTML=Re(C.text),P.addEventListener("click",()=>j(C.right,P)),S.append(P),P}),j=(C,P)=>{T.forEach((W,E)=>{W.disabled=!0,v.options[E].right&&W.classList.add("right")}),C||P.classList.add("wrong"),C&&l++,c(),_.className=`learn-game-feedback ${C?"right":"wrong"}`;const O=d();_.replaceChildren(V("p",{},p(C?"web_game_right":"web_game_wrong_short")),Nn("div",{class:"learn-game-explain"},v.explanation)),_.append(O),z&&(u=z.replay(v.clicks,()=>O.before(V("p",{class:"learn-swing-try"},p("web_game_try"))))),O.focus({preventScroll:!0})};s.replaceChildren(...I,S,_)},x=()=>{m(),a.textContent="";const v=V("button",{class:"primary"},p("web_game_again"));v.addEventListener("click",()=>{o=l=0,f()}),s.replaceChildren(V("p",{class:"learn-game-result"},p("web_game_done_fmt",l,r)),V("p",{},p(l===r?"web_game_perfect":l>=r*.7?"web_game_good":"web_game_practice_short")),v)},b=V("button",{class:"primary"},p("web_game_start"));return b.addEventListener("click",f),s.append(Nn("p",{},i.intro),b),t}function fD(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 Uu(i){const e=i.split(` +`).map(n=>V("div",{class:"ln"},n||" "));return{element:V("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 xD(i,e){const t=Mh(i),n=V("div",{class:"learn-swing-window",dir:"ltr"});n.append(V("div",{class:"learn-swing-title"},i.title||" "));const a=V("div",{class:"learn-swing-body"}),s=new Map;for(const c of i.labels){const d=V("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=V("button",{class:"learn-swing-button",disabled:""},t.texts[c.name]);return s.set(c.name,d),a.append(d),d}),o=V("p",{class:"learn-swing-event",role:"status"}),l=V("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,x]of Object.entries(c.texts)){const b=s.get(f);b&&b.textContent!==x&&(b.textContent=x,b.classList.remove("changed"),b.offsetWidth,b.classList.add("changed"))}c.console.length&&(l.hidden=!1,l.textContent+=c.console.map(f=>`${f} +`).join(""))},m=c=>u(Lh(i,t,c));return{element:n,replay(c,d){const h=c.map((g,f)=>window.setTimeout(()=>m(g),(f+.3)*qu));return h.push(window.setTimeout(()=>{i.buttons.forEach((g,f)=>{r[f].disabled=!1,r[f].addEventListener("click",()=>u(Wh(i,t,g.name)))}),d()},(c.length+.3)*qu)),h}}}function bD(i){return V("pre",{class:"learn-game-file mono",dir:"ltr"},i)}function vD(i){const e=Dh(i),t=V("div",{class:"learn-layout-window",dir:"ltr"},V("div",{class:"learn-layout-title"})),n=V("div",{class:`learn-layout-body ${e.kind}`}),a=(s,r)=>V("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 R(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 yn(i,e,t){const n=R(i,e);return n.innerHTML=Re(t),n}function $u(i){return R("pre",{class:"learn-game-code mono",dir:"ltr"},...i.split(` +`).map(e=>R("div",{class:"ln"},e||" ")))}function yD(i,e){const t=R("section",{class:"learn-game learn-rescue"}),n=R("div",{class:"learn-game-head"});n.append(R("img",{src:e,alt:"",width:"40",height:"40"}),R("strong",{},i.title));const a=i.stations.length,s=i.stations.map(()=>R("span",{class:"learn-rescue-dot"})),r=R("img",{class:"learn-rescue-ludwig",src:e,alt:"",width:"32",height:"32"}),o=R("span",{class:"learn-rescue-tower","aria-hidden":"true"},"🏰",R("span",{class:"learn-rescue-zora"},"🐐"),R("span",{class:"learn-rescue-fox"},"🦊")),l=R("span",{class:"learn-rescue-free"},"🐐"),u=R("div",{class:"learn-rescue-path","aria-hidden":"true"},r,...s,o),m=R("p",{class:"learn-game-status"}),c=R("div",{class:"learn-game-stage"}),d=wD(i);t.append(n,u,m,c);let h=0;const g=()=>{s.forEach((z,S)=>z.classList.toggle("done",S{const z=[...i.alphabet].map((S,_)=>R("span",{class:"learn-rescue-letter"},R("b",{},S),R("small",{},String(_))));return{element:R("div",{class:"learn-rescue-alphabet mono",dir:"ltr"},...z),cells:z}},x=z=>{const S=i.stations[z];m.textContent=p("web_learn_rescue_station_fmt",z+1,a,S.name);const _=f(),T=R("input",{type:"text",inputmode:"numeric",autocomplete:"off",class:"learn-rescue-number mono","aria-label":p("web_learn_rescue_number")}),j=R("button",{class:"primary"},p("web_learn_check")),C=R("div",{class:"learn-game-feedback",role:"status"}),P=()=>{const O=T.value.trim();if(!/^-?\d+$/.test(O)){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_not_number")));return}if(Number(O)!==S.answer){C.className="learn-game-feedback wrong",C.replaceChildren(R("p",{},p("web_learn_rescue_wrong")),...S.hint?[yn("div",{class:"learn-game-explain"},`**${p("web_learn_hint")}:** ${S.hint}`)]:[]),T.select();return}T.disabled=j.disabled=!0;const W=i.alphabet.charAt(S.answer);_.cells[S.answer].classList.add("hit"),d.give(S.row,S.col,W),h++,g();const E=z+1===a,Q=R("button",{class:"primary"},p(E?"web_learn_rescue_to_crossword":"web_game_next"));Q.addEventListener("click",()=>E?b():x(z+1)),C.className="learn-game-feedback right",C.replaceChildren(R("p",{},p("web_game_right")),R("p",{class:"learn-rescue-charat mono",dir:"ltr"},`alphabet.charAt(${S.answer})`,R("span",{"aria-hidden":"true"}," → "),R("code",{},`'${W}'`)),yn("div",{class:"learn-game-explain"},S.explanation),R("p",{class:"learn-rescue-moved"},p("web_learn_rescue_letter_moved")),Q),Q.focus({preventScroll:!0})};j.addEventListener("click",P),T.addEventListener("keydown",O=>{O.key==="Enter"&&P()}),c.replaceChildren($u(S.code),yn("p",{class:"learn-game-question"},S.question),R("div",{class:"learn-rescue-answer"},T,j),C,R("p",{class:"learn-rescue-label"},p("web_learn_rescue_alphabet")),$u(`String alphabet = "${i.alphabet}";`),_.element,d.element),T.focus({preventScroll:!0})},b=()=>{m.textContent=p("web_learn_rescue_crossword");const z=R("div",{class:"learn-game-feedback",role:"status"}),S=R("button",{class:"primary"},p("web_learn_check"));S.addEventListener("click",()=>{if(!d.check()){z.className="learn-game-feedback wrong",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_wrong")));return}S.disabled=!0,d.lock();const _=R("button",{class:"primary"},p("web_learn_rescue_to_gate"));_.addEventListener("click",v),z.className="learn-game-feedback right",z.replaceChildren(R("p",{},p("web_learn_rescue_cw_done")),_),_.focus({preventScroll:!0})}),d.unlock(),c.replaceChildren(yn("p",{},i.crosswordText),d.element,S,z),d.focusFirst()},v=()=>{m.textContent=p("web_learn_rescue_gate");const z=R("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(C=>{const P=C.indexOf(cs);return P<0?R("div",{class:"ln"},C||" "):R("div",{class:"ln"},C.slice(0,P),z,C.slice(P+cs.length))}),_=R("button",{class:"primary"},p("web_learn_rescue_open")),T=R("div",{class:"learn-game-feedback",role:"status"}),j=()=>{const C=z.value.trim();if(C!==i.keyword){const O=C.toUpperCase()===i.keyword.toUpperCase();T.className="learn-game-feedback wrong",T.replaceChildren(R("p",{},p(O?"web_learn_rescue_gate_case":"web_learn_rescue_gate_wrong"))),z.select();return}z.disabled=_.disabled=!0,t.classList.add("freed"),r.after(l),m.textContent="";const P=R("button",{},p("web_game_again"));P.addEventListener("click",w),T.className="learn-game-feedback right",T.replaceChildren(R("p",{},p("web_learn_rescue_freed")),yn("div",{class:"learn-game-explain"},i.end),P)};_.addEventListener("click",j),z.addEventListener("keydown",C=>{C.key==="Enter"&&j()}),c.replaceChildren(yn("p",{},i.gateText),R("div",{class:"learn-game-code mono learn-rescue-gate",dir:"ltr"},...S),_,T),z.focus({preventScroll:!0})},w=()=>{h=0,t.classList.remove("freed"),l.remove(),d.reset(),g(),x(0)},I=R("button",{class:"primary"},p("web_game_start"));return I.addEventListener("click",w),c.append(yn("p",{},i.intro),I),t}function wD(i){const e=CB(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=R("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(x=>x.across?x.row===g&&f>=x.col&&f=x.row&&g{var v;const b=r?`${g} ${f+x}`:`${g+x} ${f}`;(v=a.get(b))==null||v.focus()};e.forEach((g,f)=>g.forEach((x,b)=>{if(!x)return s.append(R("span",{class:"learn-cw-empty"}));const v=`${f} ${b}`,w=R("input",{type:"text",maxlength:"1",autocomplete:"off",autocapitalize:"characters",spellcheck:"false","aria-label":p("web_learn_rescue_cell_fmt",f+1,b+1)});w.disabled=!0,w.addEventListener("focus",()=>{const _=o(f,b);_.some(T=>T.across===r)||(r=_[0].across),w.select()}),w.addEventListener("input",()=>{w.value=w.value.slice(-1).toUpperCase(),w.classList.remove("wrong"),c(),w.value&&l(f,b,1)}),w.addEventListener("keydown",_=>{if(_.key==="Backspace"&&!w.value)l(f,b,-1);else if(_.key==="ArrowRight"||_.key==="ArrowLeft")r=!0,l(f,b,_.key==="ArrowRight"?1:-1);else if(_.key==="ArrowDown"||_.key==="ArrowUp")r=!1,l(f,b,_.key==="ArrowDown"?1:-1);else return;_.preventDefault()}),a.set(v,w);const I=t.get(v),z=R("span",{class:`learn-cw-cell${I!==void 0?" key":""}`}),S=n.get(v);S&&z.append(R("small",{class:"learn-cw-number"},String(S))),I!==void 0&&z.append(R("small",{class:"learn-cw-keyindex"},String(I+1))),z.append(w),s.append(z)}));const u=g=>{const f=R("ol",{class:"learn-cw-clues"});for(const x of i.words.filter(b=>b.across===g).sort((b,v)=>b.number-v.number)){const b=yn("li",{value:String(x.number)},`${x.clue} (${x.word.length})`);b.addEventListener("click",()=>{var v;r=x.across,(v=a.get(`${x.row} ${x.col}`))==null||v.focus()}),f.append(b)}return R("div",{},R("strong",{},p(g?"web_learn_rescue_across":"web_learn_rescue_down")),f)},m=i.solution.map(()=>R("span",{class:"learn-cw-keybox"})),c=()=>i.solution.forEach((g,f)=>m[f].textContent=a.get(`${g.row} ${g.col}`).value||" "),d=R("div",{class:"learn-cw"},R("div",{class:"learn-cw-board"},s,R("p",{class:"learn-cw-keyword"},`${p("web_learn_rescue_keyword")} `,R("span",{class:"mono",dir:"ltr"},...m))),R("div",{class:"learn-cw-cluebox"},u(!0),u(!1))),h=new Set;return{element:d,give(g,f,x){const b=a.get(`${g} ${f}`);b.value=x,b.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,x]of a){const[b,v]=f.split(" ").map(Number),w=x.value!==e[b][v];x.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()}}}function zt(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 Yu(i,e,t){const n=zt(i,e);return n.innerHTML=Re(t),n}function zD(i){const e=zt("section",{class:"learn-cloze"});e.append(zt("strong",{class:"learn-cloze-title"},i.title)),i.task&&e.append(Yu("p",{},i.task)),e.append(zt("p",{class:"learn-cloze-hint"},p("web_learn_cloze_hint")));const t=[];for(const m of i.blocks){const c=zt("pre",{class:"learn-cloze-code mono",dir:"ltr"});for(const d of m){const h=zt("div",{class:"ln"});for(const g of d){if(typeof g=="string"){h.append(g);continue}const f=zt("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(x=>x.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=zt("p",{class:"learn-cloze-status",role:"status"}),a=i.explanation?Yu("p",{class:"learn-explanation"},i.explanation):void 0;a&&(a.hidden=!0);const s=zt("button",{class:"learn-cloze-check"},p("web_learn_check")),r=zt("button",{},p("web_learn_cloze_solution")),o=zt("button",{},p("web_learn_cloze_again"));r.hidden=!0,o.hidden=!0;const l=zt("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=WB(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(),c[...o.querySelectorAll("strong")])){const o=ju(e),l=o==null?void 0:o.exec(r.textContent??""),u=l?Cu(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(ID)||l.push(u)}for(let u of l)for(;;){const m=ju(a),c=m==null?void 0:m.exec(u.data),d=c?Cu(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 kD(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 Xh={leiste:".topbar > .toolbar",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]",textgroesse:"[data-action=settings]",einstellungen:"[data-action=settings]",lernen:".learn .learn-hide",code:"[data-action=code]",simulation:"[data-action=simulate]"},SD=new Set(["werkzeuge","elemente","struktogramm","objektinspektor","reiter","titel","rueckgaengig","exportieren","code","simulation"]),_D=new Set(["ausfuehren","konsole","einzelschritt"]);function n0(i,e){return[...i.querySelectorAll(".ui-pointer")].some(t=>e.has(t.dataset.target??""))}function TD(i){return n0(i,new Set(["dateien"]))}function OD(i){return n0(i,SD)}function AD(i){return n0(i,_D)}function Ku(i){for(const e of i.querySelectorAll('a[href^="#zeige-"]')){const t=e.getAttribute("href").slice(7);if(!(t in Xh))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 PD(i){let e,t;const n=()=>{e==null||e.classList.remove("ui-spot"),e=void 0,window.clearTimeout(t)},a=(r,o)=>{n();const l=[...document.querySelectorAll(Xh[r.dataset.target??""]??":not(*)")].find(u=>u.getClientRects().length>0);l&&(e=l,l.classList.add("ui-spot"),o&&(t=window.setTimeout(n,2500)))},s=r=>{var o,l;return((l=(o=r.target)==null?void 0:o.closest)==null?void 0:l.call(o,".ui-pointer"))??void 0};return i.addEventListener("pointerover",r=>{const o=s(r);o&&r.pointerType==="mouse"&&a(o,!1)}),i.addEventListener("pointerout",r=>{s(r)&&r.pointerType==="mouse"&&n()}),i.addEventListener("click",r=>{const o=s(r);o&&a(o,!0)}),i.addEventListener("focusin",r=>{const o=s(r);o&&a(o,!1)}),i.addEventListener("focusout",r=>{s(r)&&n()}),i.addEventListener("keydown",r=>{const o=s(r);o&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(o,!0))}),{off:n}}const kt='',jD=()=>{const i=[];for(const e of Ot){const t=i.at(-1);t&&t.name===e.section?t.lessons.push(e):i.push({name:e.section,lessons:[e]})}return i};function A(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 gt(i,e,t){const n=A(i,e);return n.innerHTML=t,n}const CD=i=>p(`element_${k[i]}`);function BD(i){return{caption:i,elements:[ze(k.anweisung,{textLines:["ø"]})]}}function em(i){const e=i.start?X1(i.start):void 0;return e?{...e,caption:e.caption||i.title}:BD(i.title)}class DD{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=A("aside",{class:"learn","aria-label":p("web_learn_title")}),this.tips=kD(this.element),this.pointers=PD(this.element),hs(Mu(i1())),this.restore()}restore(){const e=ge.view();e&&(this.tab=["lessons","tasks","reference"].find(t=>t===e.tab)??"lessons",this.lessonId=Ot.some(t=>t.id===e.lesson)?e.lesson:void 0,this.taskId=Tn.some(t=>t.id===e.task)?e.task:void 0),this.render()}render(){this.tips.hide(),this.pointers.off(),hs(Mu(i1()));const e=A("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=A("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=gt("button",{class:"learn-hide",title:p("web_learn_hide"),"aria-label":p("web_learn_hide")},kt);t.addEventListener("click",()=>this.host.collapse());const n=A("div",{class:"learn-head"},e,t);if(this.body=A("div",{class:"learn-body"}),this.element.replaceChildren(n,this.body),this.tab==="lessons"){const a=Ot.find(s=>s.id===this.lessonId);a?this.renderLesson(a):this.renderLessonList()}else if(this.tab==="tasks"){const a=Tn.find(s=>s.id===this.taskId);a?this.renderTask(a):this.renderTaskList()}else{const a=La.map(r=>`- **${r.term}:** ${r.text}`).join(` `),s=gt("div",{class:"learn-text learn-reference"},kn(`${Ma} ## ${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=O("details",{class:"reference-group"});r.open=n.includes(s);const o=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(){ge.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(O("p",{class:"hint"},p("web_learn_intro")));for(const e of PD()){this.body.append(O("h3",{class:"learn-section"},e.name));const t=O("ol",{class:"learn-list"});for(const n of e.lessons){const a=ge.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=O("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},O("span",{class:"learn-num"},String(n.number)),O("span",{class:"learn-item-text"},O("strong",{},n.robot?`🤖 ${n.title}`:n.title),O("small",{},n.summary)),O("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(O("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=ge.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=O("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=O("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(O("div",{class:"learn-lesson-head"},O("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),O("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),O("h2",{class:"learn-title"},O("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,O("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=O("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))),Ku(this.body),dD(this.body),this.openNeededColumns(a.blocks),Xu(this.body,La),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=O("div",{class:a}),r=O("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=O("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{ge.updateLesson(e.id,{done:!0});const l=Ot.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){ge.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);TD(this.body)?this.host.showEditor():_D(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(),OD(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(O("p",{class:"hint"},p("web_learn_tasks_intro")));const e=O("ul",{class:"learn-list"});for(const t of Tn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>ge.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=O("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},O("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),O("span",{class:"learn-item-text"},O("strong",{},t.title),O("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),O("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(O("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=O("details",{class:"learn-teacher"},O("summary",{},p("web_learn_teacher")));if(Ru()){e.setAttribute("open","");const s=O("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{aD(),this.render()}),e.append(O("p",{},p("web_learn_teacher_on")),s),e}const t=O("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=O("p",{class:"learn-result",role:"status"}),a=O("form",{class:"group"},t,O("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await iD(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(O("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=O("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,O("h2",{class:"learn-title"},e.title)),n){const a=O("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(O("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Ku(this.body),this.openNeededColumns(e.blocks),Xu(this.body,La)}renderBlock(e,t,n){switch(e.kind){case"markdown":return gt("div",{class:"learn-text"},kn(e.text));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);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 this.renderGraphic(e.file,e.caption);case"game":return this.renderGame(e.game);case"roundGame":return gD(e.game,aa);case"rescueGame":return vD(e.game,aa);case"caesar":return uD(e.key,e.text);case"cloze":return wD(e.cloze);case"textFile":return Vh(e.name,e.content);case"robotModel":return cD(e.focus,e.view,e.spin);case"robotQuiz":return hD(e.tasks,e.done)}}renderBrag(e,t=!1){const n=O("aside",{class:"learn-brag"});n.append(O("img",{src:aa,alt:"",width:"48",height:"48"}));const a=O("div",{},O("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(gt("div",{class:"learn-text"},kn(e))),n.append(a),n}renderGame(e){const n=O("section",{class:"learn-game"}),a=O("div",{class:"learn-game-head"});a.append(O("img",{src:aa,alt:"",width:"40",height:"40"}),O("strong",{},p("web_game_title")));const s=O("p",{class:"learn-game-status"}),r=O("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=Ux(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=O("div",{class:"learn-game-values mono"});for(const[w,S]of $x(d))h.append(O("code",{},`${w} = ${S}`));const g=O("div",{class:"group learn-game-answers"}),f=O("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=O("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=O("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const S=w===d.answer;S&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${S?"right":"wrong"}`;const z=O("div",{class:"learn-game-steps mono"});Qx(d.condition,d.values).forEach((_,T)=>z.append(O("div",{},`${T?"→ ":""}${_}`)));const k=O("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));k.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(O("p",{},p(S?"web_game_right":"web_game_wrong")),z,k),k.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,O("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=O("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(O("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),O("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=O("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(O("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=O("figure",{class:"learn-figure"}),a=O("div",{class:"learn-images"});for(const s of e){const r=Fu(s);r&&a.append(O("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(gt("figcaption",{},Re(t))),n}renderGraphic(e,t){const n=O("figure",{class:"learn-figure"}),a=Fu(e);return a&&n.append(O("img",{class:"learn-graphic",src:a,alt:"",loading:"lazy"})),t&&n.append(gt("figcaption",{},Re(t))),n}renderDiagram(e,t){const n=X1(e),a=O("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(O("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(gt("figcaption",{},Re(t)));const r=O("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=O("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>ge.exercise(e.id),a=O("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(O("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),gt("div",{class:"learn-text"},kn(e.task)));const s=O("div",{class:"learn-result",role:"status"}),r=O("div",{class:"learn-hints"}),o=O("div",{class:"group"}),l=O("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=em(e);if(c)try{d=Bl(c)}catch{}this.host.openExercise(e,d)});const u=O("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(Al)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Jx(c,e.tests,this.host.subprogramsFor(e.id),Wa),h=Rx(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in I&&!h.has(I[b])),f=e.loopDepth!==void 0&&_o(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(ge.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=O("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(gt("aside",{class:"lesson-note"},kn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=O("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}ge.resetExercise(e.id),this.host.resetExercise(e.id,em(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),Ru()&&e.solution){const c=X1(e.solution);if(c){const d=O("details",{class:"learn-solution"},O("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(O("div",{class:"learn-preview",dir:"ltr"},h));const g=O("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=X1(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=X1(f),b=x&&this.host.preview(x);b&&d.append(O("div",{class:"learn-preview",dir:"ltr"},b))}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(O("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(O("p",{},`✗ ${p("web_learn_missing_fmt",jD(I[d]))}`));s&&e.append(O("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=O("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.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(([b,v])=>`mbot.${b}() = ${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}`],x=O("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(O("span",{},`${p("web_learn_expected")}: `,O("code",{},U1(d.test.drive)||"–")),O("span",{},`${p("web_learn_actual")}: `,O("code",{},U1(d.result.drive??[])||"–"))),d.test.actions&&x.append(O("span",{},`${p("web_learn_expected")}: `,O("code",{},U1(d.test.actions)||"–")),O("span",{},`${p("web_learn_actual")}: `,O("code",{},U1(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(O("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(O("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(O("span",{},`📺 ${p("web_learn_expected")}: `,O("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,O("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Wa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Wa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(O("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(O("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)&&x.append(O("span",{},`${p("web_learn_expected")}: `,O("code",{},d.test.expected.join(" | ")||"–")),O("span",{},`${p("web_learn_actual")}: `,O("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(O("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,O("code",{},b.lines.join(" | ")||"–")),O("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,O("code",{},Ch((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(O("span",{class:"learn-error"},Kn(d.result.error))),d.result.missingInput&&x.append(O("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(O("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(O("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(O("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderChecklist(e,t,n){const a=O("ul",{class:"learn-checklist"});return e.forEach((s,r)=>{var c;const o=`${t}-${r}`,l=O("input",{type:"checkbox"});l.checked=!!(n&&((c=ge.lesson(n.id).checks)!=null&&c[o])),l.addEventListener("change",()=>{if(!n)return;const d={...ge.lesson(n.id).checks??{},[o]:l.checked};ge.updateLesson(n.id,{checks:d})});const u=O("label",{},l);u.insertAdjacentHTML("beforeend"," "+Re(s.text));const m=O("li",{},u);if(n&&s.step!==void 0){const d=s.step,h=p("web_learn_step_fmt",d+1,n.steps[d].title),g=O("button",{class:"link-button learn-check-link",title:h,"aria-label":`${p("web_learn_review")}: ${h}`},p("web_learn_review"));g.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:ge.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,d)}),m.append(g)}a.append(m)}),a}renderQuiz(e,t,n){const a=O("div",{class:"learn-quiz"}),s=O("p",{class:"learn-score",role:"status"}),r=()=>n?ge.lesson(n.id).quiz??{}:{},o=()=>{const l=r(),u=(h,g)=>h.pairs?h.pairs.every((f,x)=>l[`${t}-${g}-${x}`]!==void 0):l[`${t}-${g}`]!==void 0,m=(h,g)=>{var f;return h.pairs?h.pairs.every((x,b)=>tm(h)[l[`${t}-${g}-${b}`]]===h.pairs[b].right):(f=h.options[l[`${t}-${g}`]])==null?void 0:f.correct},c=e.filter(u).length,d=e.filter(m).length;s.textContent=c===e.length?p("web_learn_score_fmt",d,e.length):""};return e.forEach((l,u)=>{const m=`${t}-${u}`,c=O("fieldset",{},gt("legend",{},Re(l.question))),d=gt("p",{class:"learn-explanation"},Re(l.explanation??""));if(l.pairs){c.append(this.renderMatch(l,m,r,n,d,o),d),a.append(c);return}const h=g=>{c.querySelectorAll("button").forEach((f,x)=>{f.classList.toggle("right",g!==void 0&&l.options[x].correct),f.classList.toggle("wrong",g===x&&!l.options[x].correct),f.setAttribute("aria-pressed",String(g===x))}),d.hidden=g===void 0||!l.explanation};l.options.forEach((g,f)=>{const x=gt("button",{class:"learn-option"},Re(g.text));x.addEventListener("click",()=>{n&&ge.updateLesson(n.id,{quiz:{...r(),[m]:f}}),h(f),o()}),c.append(x)}),c.append(d),h(r()[m]),a.append(c)}),a.append(s),o(),a}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=tm(e),u=O("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?ge.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=O("select",{class:"learn-match-select"});b.append(O("option",{value:""},"–")),l.forEach((w,S)=>b.append(O("option",{value:String(S)},w)));const v=gt("label",{class:"learn-match-left"},Re(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function tm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}const DD=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,i0="visustruct.visubot";function a0(){try{return localStorage.getItem(i0)}catch{return null}}function ri(){const i=a0();return i==="1"||i==="kurs"?"on":"off"}const Xh=()=>a0()==="2";function Kh(){try{localStorage.setItem(i0,"2")}catch{}}const ZD=()=>a0()!==null;function br(i){try{localStorage.setItem(i0,i==="on"?"1":"0")}catch{}}const MD=`VisuBot`,Rn=()=>ri()!=="off",nm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Po(){const i=Xh()?"object":ri(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_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=A("details",{class:"reference-group"});r.open=n.includes(s);const o=A("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(){ge.setView({tab:this.tab,lesson:this.lessonId,task:this.taskId})}openLesson(e){this.tab="lessons",this.lessonId=e,this.returnTo=void 0,this.persist(),this.render(),this.body.scrollTop=0}renderLessonList(){this.body.append(A("p",{class:"hint"},p("web_learn_intro")));for(const e of jD()){this.body.append(A("h3",{class:"learn-section"},e.name));const t=A("ol",{class:"learn-list"});for(const n of e.lessons){const a=ge.lesson(n.id),s=a.done?"✓":a.step>0?p("web_learn_step_of_fmt",a.step+1,n.steps.length):"",r=A("button",{class:"learn-item"+(a.done?" done":""),"data-lesson":n.id},A("span",{class:"learn-num"},String(n.number)),A("span",{class:"learn-item-text"},A("strong",{},n.robot?`🤖 ${n.title}`:n.title),A("small",{},n.summary)),A("span",{class:"learn-status"},s));r.addEventListener("click",()=>this.openLesson(n.id)),t.append(A("li",{},r))}this.body.append(t)}this.body.append(this.renderTeacherBox())}renderLesson(e){var u;const t=ge.lesson(e.id),n=Math.min(t.step,e.steps.length-1),a=e.steps[n],s=A("button",{class:"learn-back"},`← ${p("web_learn_all_lessons")}`);s.addEventListener("click",()=>this.openLesson(void 0));const r=A("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(A("div",{class:"learn-lesson-head"},A("div",{class:"learn-head-row"},s,this.stepNav(e,n,t.done,"learn-nav learn-nav-top")),A("p",{class:"learn-kicker"},`${p("web_learn_lesson_fmt",e.number)} · ${e.section}${e.robot?" · 🤖 VisuBot":""}`),A("h2",{class:"learn-title"},A("span",{class:"learn-num","aria-hidden":"true"},String(e.number)),e.title),r,A("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=A("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))),Ku(this.body),hD(this.body),this.openNeededColumns(a.blocks),Xu(this.body,La),this.body.append(this.stepNav(e,n,t.done,"learn-nav")),o&&this.body.append(l())}stepNav(e,t,n,a){const s=A("div",{class:a}),r=A("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=A("button",{class:"primary"},n?`✓ ${p("web_learn_done")}`:p("web_learn_finish"));o.addEventListener("click",()=>{ge.updateLesson(e.id,{done:!0});const l=Ot.find(u=>u.number===e.number+1);this.openLesson(l==null?void 0:l.id)}),s.append(o)}return s}goToStep(e,t){ge.updateLesson(e.id,{step:t}),this.render(),this.body.scrollTop=0}openNeededColumns(e){const t=e.flatMap(n=>n.kind==="exercise"?[n.exercise]:[]);OD(this.body)?this.host.showEditor():TD(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(),AD(this.body)&&this.host.showLiveCode()}renderTaskList(){this.body.append(A("p",{class:"hint"},p("web_learn_tasks_intro")));const e=A("ul",{class:"learn-list"});for(const t of Tn){const n=this.taskExercises(t),a=n.length>0&&n.every(o=>ge.exercise(o.id).done),s=Ot.find(o=>o.number===t.after),r=A("button",{class:"learn-item"+(a?" done":""),"data-task":t.id},A("span",{class:"learn-num","aria-label":p("web_learn_level_fmt",t.level)},"★".repeat(t.level)),A("span",{class:"learn-item-text"},A("strong",{},t.title),A("small",{},s?p("web_learn_after_fmt",s.number,s.title):"")),A("span",{class:"learn-status"},a?"✓":""));r.addEventListener("click",()=>{this.taskId=t.id,this.persist(),this.render(),this.body.scrollTop=0}),e.append(A("li",{},r))}this.body.append(e,this.renderTeacherBox())}renderTeacherBox(){const e=A("details",{class:"learn-teacher"},A("summary",{},p("web_learn_teacher")));if(Ru()){e.setAttribute("open","");const s=A("button",{},p("web_learn_teacher_off"));return s.addEventListener("click",()=>{sD(),this.render()}),e.append(A("p",{},p("web_learn_teacher_on")),s),e}const t=A("input",{type:"password",autocomplete:"off","aria-label":p("web_learn_teacher_code"),placeholder:p("web_learn_teacher_code")}),n=A("p",{class:"learn-result",role:"status"}),a=A("form",{class:"group"},t,A("button",{type:"submit"},p("web_learn_teacher_unlock")));return a.addEventListener("submit",async s=>{s.preventDefault(),await aD(t.value)?this.render():(n.className="learn-result info",n.textContent=p("web_learn_teacher_wrong"))}),e.append(A("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=A("button",{class:"learn-back"},`← ${p("web_learn_all_tasks")}`);t.addEventListener("click",()=>{this.taskId=void 0,this.persist(),this.render()});const n=Ot.find(a=>a.number===e.after);if(this.body.append(t,A("h2",{class:"learn-title"},e.title)),n){const a=A("button",{class:"link-button"},p("web_learn_after_fmt",n.number,n.title));a.addEventListener("click",()=>this.openLesson(n.id)),this.body.append(A("p",{class:"learn-kicker"},a))}e.blocks.forEach((a,s)=>this.body.append(this.renderBlock(a,`task-${s}`))),Ku(this.body),this.openNeededColumns(e.blocks),Xu(this.body,La)}renderBlock(e,t,n){switch(e.kind){case"markdown":return gt("div",{class:"learn-text"},kn(e.text));case"diagram":return this.renderDiagram(e.file,e.caption);case"exercise":return this.renderExercise(e.exercise);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 this.renderGraphic(e.file,e.caption);case"game":return this.renderGame(e.game);case"roundGame":return pD(e.game,aa);case"rescueGame":return yD(e.game,aa);case"caesar":return mD(e.key,e.text);case"cloze":return zD(e.cloze);case"textFile":return Qh(e.name,e.content);case"robotModel":return dD(e.focus,e.view,e.spin);case"robotQuiz":return gD(e.tasks,e.done)}}renderBrag(e,t=!1){const n=A("aside",{class:"learn-brag"});n.append(A("img",{src:aa,alt:"",width:"48",height:"48"}));const a=A("div",{},A("p",{class:"learn-brag-title"},p(t?"web_learn_ludwig_tip":"web_learn_brag")));return a.append(gt("div",{class:"learn-text"},kn(e))),n.append(a),n}renderGame(e){const n=A("section",{class:"learn-game"}),a=A("div",{class:"learn-game-head"});a.append(A("img",{src:aa,alt:"",width:"40",height:"40"}),A("strong",{},p("web_game_title")));const s=A("p",{class:"learn-game-status"}),r=A("div",{class:"learn-game-stage"});n.append(a,s,r);let o=0,l=0;const u=()=>{const d=$x(e,o,10);s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`;const h=A("div",{class:"learn-game-values mono"});for(const[w,I]of Yx(d))h.append(A("code",{},`${w} = ${I}`));const g=A("div",{class:"group learn-game-answers"}),f=A("button",{class:"learn-game-true"},`✓ ${p("web_game_true")}`),x=A("button",{class:"learn-game-false"},`✗ ${p("web_game_false")}`);g.append(f,x);const b=A("div",{class:"learn-game-feedback",role:"status"}),v=w=>{f.disabled=x.disabled=!0;const I=w===d.answer;I&&l++,s.textContent=`${p("web_game_round_fmt",o+1,10)} · ${p("web_game_score_fmt",l)}`,b.className=`learn-game-feedback ${I?"right":"wrong"}`;const z=A("div",{class:"learn-game-steps mono"});qx(d.condition,d.values).forEach((_,T)=>z.append(A("div",{},`${T?"→ ":""}${_}`)));const S=A("button",{class:"primary"},o+1<10?p("web_game_next"):p("web_game_finish"));S.addEventListener("click",()=>{o++,o<10?u():m()}),b.replaceChildren(A("p",{},p(I?"web_game_right":"web_game_wrong")),z,S),S.focus()};f.addEventListener("click",()=>v(!0)),x.addEventListener("click",()=>v(!1)),r.replaceChildren(h,A("div",{class:"learn-game-condition mono"},d.condition),g,b)},m=()=>{s.textContent="";const d=A("button",{class:"primary"},p("web_game_again"));d.addEventListener("click",()=>{o=l=0,u()}),r.replaceChildren(A("p",{class:"learn-game-result"},p("web_game_done_fmt",l,10)),A("p",{},p(l===10?"web_game_perfect":l>=10*.7?"web_game_good":"web_game_practice")),d)},c=A("button",{class:"primary"},p("web_game_start"));return c.addEventListener("click",u),r.append(A("p",{},p("web_game_intro")),c),n}renderImages(e,t){const n=A("figure",{class:"learn-figure"}),a=A("div",{class:"learn-images"});for(const s of e){const r=Fu(s);r&&a.append(A("img",{src:r,alt:"",loading:"lazy"}))}return n.append(a),t&&n.append(gt("figcaption",{},Re(t))),n}renderGraphic(e,t){const n=A("figure",{class:"learn-figure"}),a=Fu(e);return a&&n.append(A("img",{class:"learn-graphic",src:a,alt:"",loading:"lazy"})),t&&n.append(gt("figcaption",{},Re(t))),n}renderDiagram(e,t){const n=X1(e),a=A("figure",{class:"learn-figure"});if(!n)return a;const s=this.host.preview(n);s&&a.append(A("div",{class:"learn-preview",dir:"ltr"},s)),t&&a.append(gt("figcaption",{},Re(t)));const r=A("button",{},p("web_learn_open_in_editor"));return r.addEventListener("click",()=>this.host.openDiagram(n,e)),a.append(r),a}renderExercise(e){const t=A("section",{class:"learn-exercise","data-exercise":e.id}),n=()=>ge.exercise(e.id),a=A("span",{class:"learn-badge"},`✓ ${p("web_learn_solved")}`);a.hidden=!n().done,t.append(A("h4",{},`${p("web_learn_exercise")}: ${e.title}`,a),gt("div",{class:"learn-text"},kn(e.task)));const s=A("div",{class:"learn-result",role:"status"}),r=A("div",{class:"learn-hints"}),o=A("div",{class:"group"}),l=A("button",{class:"primary"},p("web_learn_open_exercise"));l.addEventListener("click",()=>{const c=n().xml;let d=em(e);if(c)try{d=Bl(c)}catch{}this.host.openExercise(e,d)});const u=A("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(Al)){s.className="learn-result info",s.textContent=p("web_learn_empty");return}this.host.stopSimulation();const d=Rx(c,e.tests,this.host.subprogramsFor(e.id),Wa),h=Gx(c),g=e.requires.map(b=>b==="forZaehlSchleife"?"forSchleife":b).filter(b=>b in k&&!h.has(k[b])),f=e.loopDepth!==void 0&&_o(c.elements)b.passed)&&g.length===0&&!f;this.showResult(s,d,g,x,f),x&&(ge.updateExercise(e.id,{done:!0}),a.hidden=!1)}),o.append(l,u),e.hints.length>0){const c=A("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(gt("aside",{class:"lesson-note"},kn(h+e.hints[d]))),c.textContent=p("web_learn_hint_more"),c.toggleAttribute("disabled",d+1>=e.hints.length)}),o.append(c)}const m=A("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}ge.resetExercise(e.id),this.host.resetExercise(e.id,em(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),Ru()&&e.solution){const c=X1(e.solution);if(c){const d=A("details",{class:"learn-solution"},A("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(A("div",{class:"learn-preview",dir:"ltr"},h));const g=A("button",{},p("web_learn_open_in_editor"));g.addEventListener("click",()=>{this.host.openDiagram(c,e.solution);for(const f of e.subprograms){const x=X1(f);x&&this.host.openDiagram(x,f)}});for(const f of e.subprograms){const x=X1(f),b=x&&this.host.preview(x);b&&d.append(A("div",{class:"learn-preview",dir:"ltr"},b))}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(A("p",{class:"learn-result-head"},a?`🎉 ${p("web_learn_passed")}`:p("web_learn_failed")));for(const d of n)e.append(A("p",{},`✗ ${p("web_learn_missing_fmt",CD(k[d]))}`));s&&e.append(A("p",{},`✗ ${p("web_visubot_depth_fmt",s)}`));const r=A("ul",{class:"learn-tests",dir:"auto"});for(const d of t){const h=d.test.world?t.filter(b=>b.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(([b,v])=>`mbot.${b}() = ${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}`],x=A("div",{class:"learn-test-detail"});if(d.test.drive&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.drive)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.drive??[])||"–"))),d.test.actions&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},U1(d.test.actions)||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},U1(d.result.actions??[])||"–"))),d.test.led!==void 0){const b=v=>p(v?"web_visubot_led_on":"web_visubot_led_off");x.append(A("span",{},`💡 ${p("web_learn_expected")}: ${b(d.test.led)} · ${p("web_learn_actual")}: ${b(d.result.led)}`))}if(d.test.tone!==void 0){const b=v=>p(v?"web_visubot_tone_yes":"web_visubot_tone_no");x.append(A("span",{},`🔊 ${p("web_learn_expected")}: ${b(d.test.tone)} · ${p("web_learn_actual")}: ${b(d.result.tone)}`))}d.test.screen!==void 0&&x.append(A("span",{},`📺 ${p("web_learn_expected")}: `,A("code",{},d.test.screen),` · ${p("web_learn_actual")}: `,A("code",{},d.result.screen??"–"))),d.test.world&&(((l=(o=Wa(d.test.world))==null?void 0:o.goals)!=null&&l.length||(m=(u=Wa(d.test.world))==null?void 0:u.targets)!=null&&m.length)&&x.append(A("span",{},d.result.atGoal?`✓ ${p("web_visubot_goal_reached")}`:`✗ ${p("web_visubot_goal_missed")}`)),d.result.bumps&&x.append(A("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)&&x.append(A("span",{},`${p("web_learn_expected")}: `,A("code",{},d.test.expected.join(" | ")||"–")),A("span",{},`${p("web_learn_actual")}: `,A("code",{},d.result.outputs.join(" | ")||"–")));for(const b of d.test.files??[])x.append(A("span",{},`📄 ${b.name}, ${p("web_learn_expected")}: `,A("code",{},b.lines.join(" | ")||"–")),A("span",{},`📄 ${b.name}, ${p("web_learn_actual")}: `,A("code",{},Bh((c=d.result.files)==null?void 0:c.get(b.name)).join(" | ")||"–")));d.result.error&&x.append(A("span",{class:"learn-error"},Kn(d.result.error))),d.result.missingInput&&x.append(A("span",{class:"learn-error"},p("web_learn_missing_input"))),d.result.tooManySteps&&x.append(A("span",{class:"learn-error"},p("web_learn_too_many_steps"))),!d.passed&&d.result.unusedInputs&&x.append(A("span",{class:"learn-error"},p("web_learn_unused_input"))),r.append(A("li",{class:d.passed?"ok":"fail"},...f,x))}e.append(r)}renderChecklist(e,t,n){const a=A("ul",{class:"learn-checklist"});return e.forEach((s,r)=>{var c;const o=`${t}-${r}`,l=A("input",{type:"checkbox"});l.checked=!!(n&&((c=ge.lesson(n.id).checks)!=null&&c[o])),l.addEventListener("change",()=>{if(!n)return;const d={...ge.lesson(n.id).checks??{},[o]:l.checked};ge.updateLesson(n.id,{checks:d})});const u=A("label",{},l);u.insertAdjacentHTML("beforeend"," "+Re(s.text));const m=A("li",{},u);if(n&&s.step!==void 0){const d=s.step,h=p("web_learn_step_fmt",d+1,n.steps[d].title),g=A("button",{class:"link-button learn-check-link",title:h,"aria-label":`${p("web_learn_review")}: ${h}`},p("web_learn_review"));g.addEventListener("click",()=>{this.returnTo={lesson:n.id,step:ge.lesson(n.id).step,scroll:this.body.scrollTop},this.goToStep(n,d)}),m.append(g)}a.append(m)}),a}renderQuiz(e,t,n){const a=A("div",{class:"learn-quiz"}),s=A("p",{class:"learn-score",role:"status"}),r=()=>n?ge.lesson(n.id).quiz??{}:{},o=()=>{const l=r(),u=(h,g)=>h.pairs?h.pairs.every((f,x)=>l[`${t}-${g}-${x}`]!==void 0):l[`${t}-${g}`]!==void 0,m=(h,g)=>{var f;return h.pairs?h.pairs.every((x,b)=>tm(h)[l[`${t}-${g}-${b}`]]===h.pairs[b].right):(f=h.options[l[`${t}-${g}`]])==null?void 0:f.correct},c=e.filter(u).length,d=e.filter(m).length;s.textContent=c===e.length?p("web_learn_score_fmt",d,e.length):""};return e.forEach((l,u)=>{const m=`${t}-${u}`,c=A("fieldset",{},gt("legend",{},Re(l.question))),d=gt("p",{class:"learn-explanation"},Re(l.explanation??""));if(l.pairs){c.append(this.renderMatch(l,m,r,n,d,o),d),a.append(c);return}const h=g=>{c.querySelectorAll("button").forEach((f,x)=>{f.classList.toggle("right",g!==void 0&&l.options[x].correct),f.classList.toggle("wrong",g===x&&!l.options[x].correct),f.setAttribute("aria-pressed",String(g===x))}),d.hidden=g===void 0||!l.explanation};l.options.forEach((g,f)=>{const x=gt("button",{class:"learn-option"},Re(g.text));x.addEventListener("click",()=>{n&&ge.updateLesson(n.id,{quiz:{...r(),[m]:f}}),h(f),o()}),c.append(x)}),c.append(d),h(r()[m]),a.append(c)}),a.append(s),o(),a}renderMatch(e,t,n,a,s,r){const o=e.pairs,l=tm(e),u=A("div",{class:"learn-match"});let m={};const c=()=>a?n():m,d=x=>a?ge.updateLesson(a.id,{quiz:x}):m=x,h=x=>c()[`${t}-${x}`],g=o.map(x=>{const b=A("select",{class:"learn-match-select"});b.append(A("option",{value:""},"–")),l.forEach((w,I)=>b.append(A("option",{value:String(I)},w)));const v=gt("label",{class:"learn-match-left"},Re(x.left));return v.append(b),u.append(v),b}),f=()=>{const x=o.every((b,v)=>h(v)!==void 0);g.forEach((b,v)=>{const w=h(v);b.value=w===void 0?"":String(w),b.classList.toggle("right",x&&l[w]===o[v].right),b.classList.toggle("wrong",x&&l[w]!==o[v].right)}),s.hidden=!x||!e.explanation};return g.forEach((x,b)=>x.addEventListener("change",()=>{const v={...c()};x.value===""?delete v[`${t}-${b}`]:v[`${t}-${b}`]=Number(x.value),d(v),f(),r()})),f(),u}}function tm(i){return(i.pairs??[]).map(e=>e.right).sort((e,t)=>e.localeCompare(t,"de"))}const ZD=""+new URL("visubot-CyGFOI9V.webp",import.meta.url).href,i0="visustruct.visubot";function a0(){try{return localStorage.getItem(i0)}catch{return null}}function ri(){const i=a0();return i==="1"||i==="kurs"?"on":"off"}const Kh=()=>a0()==="2";function eg(){try{localStorage.setItem(i0,"2")}catch{}}const MD=()=>a0()!==null;function br(i){try{localStorage.setItem(i0,i==="on"?"1":"0")}catch{}}const LD=`VisuBot`,Rn=()=>ri()!=="off",nm=i=>i.replace(/[&<>"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e]);function Po(){const i=Kh()?"object":ri(),e=(n,a)=>``,t={off:"web_visubot_world_visustruct_hint",on:"web_visubot_world_visubot_hint",object:"web_visuobject_world_hint"}[i];return`
${e("off","VisuStruct")}${e("on","🤖 VisuBot")}${e("object","VisuObject")}
- ${nm(p(t))}`}class LD{constructor(e=yi){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 us(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${WD()}${ED()}`,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=le.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=q(async()=>{const{Robot3D:e}=await import("./robot3d-ZT3VS0U0.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]??yi,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 us(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;le.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>le.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&&le.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!le.connected)break;const t=e.dataset.sensor,n=await le.ask(St[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof St[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 le.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await le.ask(St[a].python);typeof St[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof St[a].simulated=="string"?n[a]=typeof s=="string"?s:String(St[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){le.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=tg(),this.liveStatus.classList.toggle("connected",le.connected),this.check.hidden=!le.connected,le.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(Xl),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&&le.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 J1;function eg(i,e){try{J1??(J1=new AudioContext);const t=J1.createOscillator(),n=J1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(J1.destination);const a=J1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function WD(){const i=(t,n,a,s,r)=>``,e=(t,n,a)=>``;return`
🎛 ${p("web_visubot_controls")} + ${nm(p(t))}`}class WD{constructor(e=yi){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 us(e),this.element=document.createElement("section"),this.element.className="visubot",this.element.innerHTML=`

${p("web_visubot_world")}

${p("web_visubot_world_in_preview")}

${ED()}${ND()}`,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=le.listen(()=>this.updateLive()),this.setupControls(),this.check=this.element.querySelector(".visubot-check"),this.setupCheck(),this.updateLive(),this.updateStatus()}show(){this.loading??(this.loading=q(async()=>{const{Robot3D:e}=await import("./robot3d-DuVc6opp.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]??yi,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 us(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;le.run(e.dataset.py).then(()=>t?new Promise(a=>setTimeout(a,Number(n))).then(()=>le.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&&le.connected;){for(const e of this.check.querySelectorAll("[data-sensor]")){if(!this.check.open||!le.connected)break;const t=e.dataset.sensor,n=await le.ask(St[t].python).catch(()=>{});n!==void 0&&(e.textContent=typeof St[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 le.connected}async prepareLive(e,t=[]){const n={};for(const a of new Set(["getDistance","getLine",...t])){const s=await le.ask(St[a].python);typeof St[a].simulated=="boolean"?n[a]=s===!0||typeof s=="number"&&s!==0:typeof St[a].simulated=="string"?n[a]=typeof s=="string"?s:String(St[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){le.disconnect(e instanceof Error?e.message:String(e))}updateLive(){this.liveStatus.textContent=ng(),this.liveStatus.classList.toggle("connected",le.connected),this.check.hidden=!le.connected,le.connected||(this.check.open=!1),this.updateStatus()}follow(e,t){var a,s,r,o;for(;this.appliedl!==0);this.world.tick(Xl),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&&le.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 J1;function tg(i,e){try{J1??(J1=new AudioContext);const t=J1.createOscillator(),n=J1.createGain();t.type="square",t.frequency.value=Math.max(20,Math.min(2e4,i)),n.gain.value=.05,t.connect(n).connect(J1.destination);const a=J1.currentTime+Math.min(Math.max(e,0),5e3)/1e3;t.start(),t.stop(a)}catch{}}function ED(){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)} @@ -60338,23 +60338,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 ED(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=ng.map(a=>`${p(a.key)}…`).join("");return``}function ND(){const i=a=>a.replace(/"/g,"""),e=(a,s,r,o=1e3)=>``,t="mbot2.EM_stop('ALL')",n=ig.map(a=>`${p(a.key)}…`).join("");return``}function tg(){return le.connecting?p("web_visubot_connecting"):le.connected?`✓ ${p("web_visubot_connected")}`:le.error?`⚠︎ ${p("web_visubot_link_error")}: ${le.error}`:""}async function ND(){if(le.connected||le.connecting)return le.disconnect();try{await le.connect()}catch(i){await le.disconnect(i.name==="NotFoundError"?void 0:i.message)}}const ut=i=>()=>ze(I.anweisung,{textLines:[i]}),FD=[{key:"web_visubot_el_forward",group:"drive",type:I.anweisung,make:ut("mbot.forward()")},{key:"web_visubot_el_backward",group:"drive",type:I.anweisung,make:ut("mbot.backward()")},{key:"web_visubot_el_right",group:"drive",type:I.anweisung,make:ut("mbot.turnRight()")},{key:"web_visubot_el_left",group:"drive",type:I.anweisung,make:ut("mbot.turnLeft()")},{key:"web_visubot_el_drive",group:"wheels",type:I.anweisung,make:ut("mbot.drive(30, 30)")},{key:"web_visubot_el_stop",group:"wheels",type:I.anweisung,make:ut("mbot.stop()")},{key:"web_visubot_el_led",group:"output",type:I.anweisung,make:ut("mbot.setLed(255, 0, 0)")},{key:"web_visubot_el_led_off",group:"output",type:I.anweisung,make:ut("mbot.ledOff()")},{key:"web_visubot_el_led_color",group:"output",type:I.anweisung,make:ut('mbot.led(0).setColor("grün")')},{key:"web_visubot_el_tone",group:"output",type:I.anweisung,make:ut("mbot.playTone(440, 300)")},{key:"web_visubot_el_text",group:"output",type:I.anweisung,make:ut('mbot.showText("Hallo")')},{key:"web_visubot_el_wait",group:"wait",type:I.anweisung,make:ut("mbot.pause(100)")},{key:"web_visubot_el_emotion",group:"emotion",type:I.anweisung,make:ut('mbot.emotion("smile")')},{key:"web_visubot_el_timer",group:"wait",type:I.anweisung,make:ut("mbot.resetTimer()")}],ng=[{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("${eh("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()"}],sa=()=>typeof window.showDirectoryPicker=="function";class Hs{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 Hs(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 JD="visustruct-workspace";function RD(){return new Promise((i,e)=>{const t=indexedDB.open(JD,1);t.onupgradeneeded=()=>{t.result.createObjectStore("files"),t.result.createObjectStore("meta")},t.onsuccess=()=>i(t.result),t.onerror=()=>e(t.error)})}async function It(i,e,t){const n=await RD();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 s0{constructor(e,t){this.name=e,this.path=t}key(e){return this.path+e}async list(){const e=await It("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 It("files","readonly",s=>s.count(n))>0)){if(!t)throw new DOMException(e,"NotFoundError");await It("files","readwrite",s=>s.put("",n))}return new s0(e,n)}async read(e){const t=await It("files","readonly",n=>n.get(this.key(e)));if(typeof t!="string")throw new DOMException(e,"NotFoundError");return t}async write(e,t){await It("files","readwrite",n=>n.put(t,this.key(e)))}async has(e){const t=await It("files","readonly",a=>a.count(this.key(e))),n=await It("files","readonly",a=>a.count(this.key(e)+"/"));return t+n>0}async remove(e){const t=this.key(e);await It("files","readwrite",n=>n.delete(t)),await It("files","readwrite",n=>n.delete(IDBKeyRange.bound(t+"/",t+"/￿")))}}async function GD(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 It("meta","readwrite",a=>a.put(n,e)),{kind:"folder",root:new Hs(n)}}function im(){return{kind:"browser",root:new s0("VisuStruct","")}}async function HD(i="folder"){var e;try{const t=await It("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 am(i){var t;return(await((t=i.requestPermission)==null?void 0:t.call(i,{mode:"readwrite"}))??"granted")==="granted"?{kind:"folder",root:new Hs(i)}:void 0}async function VD(i="folder"){try{await It("meta","readwrite",e=>e.delete(i))}catch{}}const ra="learnProgress.json",oa="lernstand.json",la="visustruct.files.mode",sm="visustruct.files.expanded";function QD(i){try{const e=JSON.parse(ig(i)??"[]");return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}catch{return[]}}function ig(i){try{return localStorage.getItem(i)}catch{return null}}function ua(i,e){try{e===null?localStorage.removeItem(i):localStorage.setItem(i,e)}catch{}}const U=i=>i.replace(/&/g,"&").replace(//g,">").replace(/"/g,""");function rm(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 qD{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(QD(sm)));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(),ge.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){ua(sm,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 UD{constructor(e){y(this,"element");y(this,"body");y(this,"workspace");y(this,"pending");y(this,"expanded",new Set(qD(sm)));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(),ge.onChange(()=>this.progressChanged()),this.restore()}rememberExpanded(){ua(sm,JSON.stringify([...this.expanded]))}get ready(){return!!this.workspace}build(){this.element.innerHTML=`

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

@@ -60362,7 +60362,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(ig(la)==="browser")this.workspace=im();else if(sa()){const e=await HD();e!=null&&e.ready?this.workspace=await am(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?`

${U(m)}

`:""}`,n=sa()?[this.pending?t("reconnect",`${ne.open} ${U(p("web_learn_start_continue_fmt",this.pending.name))}`,!0):"",t("pick",`${ne.open} ${U(p("web_learn_start_open"))}`,!this.pending),t("create",`${ne.newFolder} ${U(p("web_learn_start_create_fmt",e))}`,!1,p("web_learn_start_create_hint"))]:[t("browser",U(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=se("button",{class:"learn-rail"}),this.labelLearnRail(),this.railButton.addEventListener("click",()=>this.setLearning(!0)),this.railButton}liveRail(){return this.liveRailButton=se("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=`${kt}</> ${L(p("web_live_title"))}`)}labelLearnRail(){this.railButton&&(this.railButton.title=p("web_learn_show"),this.railButton.innerHTML=`${kt}🎓 ${L(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)},openExercise:(e,t)=>{e.code==="java"?this.openJavaColumn():this.setEditorHidden(!1);const n=this.tabs.findIndex(s=>s.exerciseId===e.id);if(n>=0){this.switchTab(n),this.setSimulating(!1);return}const a=this.makeTab();a.doc=t,a.exerciseId=e.id,a.selected=t.elements.length>0?[0]:void 0,this.isPristine(this.tab)?this.tabs[this.tabIndex]=a:this.tabs.push(a),this.tabIndex=this.tabs.indexOf(a),this.setSimulating(!1),this.render()},openDiagram:(e,t)=>{this.setEditorHidden(!1),this.loadXML(o1(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,ge.updateExercise(e,{xml:o1(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=ed(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.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&&ge.updateExercise(e.exerciseId,{xml:o1(e.doc)})},300))}paletteIcon(e){const t=ve("svg",{viewBox:"0 0 28 20",width:28,height:20,class:"icon"}),n={fill:"none",stroke:"currentColor","stroke-width":1.5};t.append(ve("rect",{x:1,y:1,width:26,height:18,...n}));const a=s=>t.append(ve("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(Ua)};this.layout=this.engine.layout(e),this.flat=A2(this.layout.elements),this.selected&&!Nt(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=ve("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||!rr(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=vt(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?Nt(this.doc,e):void 0,n=this.inspector;if(!e||!t){n.replaceChildren(se("h2",{},p("web_inspector_title")),se("p",{class:"hint"},p("inspector_no_selection")),se("p",{class:"hint"},p("web_inspector_help_drop")),se("p",{class:"hint"},p("web_inspector_help_files")));return}if(n.replaceChildren(se("h2",{},`${p("web_inspector_title")} · ${Xr(t.type)}`)),t.type===k.anweisung){const a=Qa(t.textLines.join(` `)),s=se("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=se("button",{"aria-pressed":String(r===a)},o);l.addEventListener("click",()=>{var c,d;const u=((c=Nt(this.doc,e))==null?void 0:c.textLines.join(` -`))??"";if(r===Qa(u))return;const m=g2(r,u);this.commit(Qi(this.doc,e,m.split(` -`))),(d=this.inspector.querySelector("textarea"))==null||d.focus()}),s.append(l)}n.append(s,se("p",{class:"hint mono-hint"},yJ[a]))}if(t.type===I.forSchleife){const a=se("div",{class:"for-fields"}),s=Q0(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=se("input",{placeholder:l,spellcheck:"false",autocomplete:"off"});m.value=s[u],this.liveEdit(m,c=>{const d=Nt(this.doc,e);if(!d)return;const h=Q0(d.textLines);return h[u]=x2(c),Qi(this.doc,e,h)}),a.append(se("label",{},o,m))}),n.append(a)}else if(t.type!==I.leerElement){const a=vJ[t.type];a&&n.append(se("p",{class:"hint mono-hint"},a));const s=rd(t),r=se("textarea",{rows:"3",spellcheck:"false"}),o=t.textLines.join(` -`);r.value=s?V0(s,o):o,r.placeholder=wJ(t),r.addEventListener("focus",()=>{r.value.trim()==="ø"&&r.select()}),this.liveEdit(r,u=>{const m=rd(Nt(this.doc,e)??t),c=m?f2(m,V0(m,u)):u;return Qi(this.doc,e,c.split(` -`))});const l=se("div",{class:"editor-row"});s&&l.append(se("span",{class:"fixed-prefix"},s)),l.append(r),n.append(l)}this.renderCaseControls(e)}renderCaseControls(e){var l;const t=c2(e,this.doc);if(!t)return;const n=((l=Nt(this.doc,t))==null?void 0:l.cases)??[],a=d2(e,t),s=se("div",{class:"case-controls"});if(a!==void 0&&n[a]){const u=se("input",{placeholder:p("web_case_name_placeholder"),spellcheck:"false",autocomplete:"off"});u.value=n[a].name,this.liveEdit(u,m=>m.trim()===""?void 0:m2(this.doc,t,a,m)),s.append(se("label",{},p("web_case_name"),u))}const r=se("button",{},`+ ${p("inspector_add_case")}`);r.addEventListener("click",()=>{const u=l2(this.doc,t);this.commit(u.doc,u.path)});const o=se("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=u2(this.doc,t,a);this.commit(u.doc,u.path)}),s.append(se("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=jd(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?ne.stop:ne.play}${L(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(Sd(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,Fe(xd,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,Fe(yd,this.previewStacked?"1":"0"),this.previewStacked&&!this.liveCoding&&this.setLiveCoding(!0),this.placePreview()},this.previewStacked=Ue(yd)==="1";const t=Ue(fd);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&&Fe(zd,m===void 0?"":String(m))},r=Number(Ue(zd));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,Fe(fd,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||!Rn()||this.preview.update(this.doc,e=>this.findSubprogram(e),Sd(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(),Fe(pd,e?"1":"0"),this.keepAColumnOpen(),this.canvasHost&&this.render()}learnResizer(){return this.panelResizer(this.learn.element,"learn-resizer",gd,p("web_learn_resize"),1)}liveResizer(){return this.panelResizer(this.live.element,"live-resizer",kJ,p("web_live_resize"),-1,()=>this.root)}yieldingPanels(){return[{panel:this.preview.element,key:wd},{panel:this.learn.element,key:gd},{panel:this.files.element,key:hd}].filter(({panel:e})=>e.offsetParent!==null&&e.parentElement===this.live.element.parentElement)}panelResizer(e,t,n,a,s,r){const o=se("div",{class:t,role:"separator","aria-orientation":"vertical",tabindex:"0",title:a}),l=d=>{var x;const h=((x=e.parentElement)==null?void 0:x.getBoundingClientRect().width)??0;if(h===0)return AJ(d);const g=[this.files.element,this.learn.element,this.live.element,this.preview.element].filter(b=>b!==e&&b.offsetParent!==null&&getComputedStyle(b).flexGrow==="0").reduce((b,v)=>b+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&&Fe(n,d===void 0?"":String(l(d)))},m=Number(Ue(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 x=r?this.pushResize(e,n,r(),g):void 0,b=(S,z)=>(x??u)(g+f*(S.clientX-h),z),v=S=>b(S,!1),w=S=>{o.removeEventListener("pointermove",v),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),this.shell.classList.remove("resizing"),b(S,!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&&Fe(g.key,String(Math.round(g.start-f))))}e.style.width=`${d}px`,c&&Fe(t,String(d))}}findSubprogram(e,t=this.tab){const n=to(e);if(n==="")return;const a=this.tabs.find(s=>s!==t&&(to(s.doc.caption)===n||to(on(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=>lo(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=or(t??this.selected,e),this.render()}pushUndo(e){for(this.undoStack.push(e);this.undoStack.length>TJ;)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=or(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=or(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:a2(),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=on(n),r.title=n.fileName??on(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")}: ${on(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",`${on(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&&Nt(this.doc,this.selected);return e?(this.clipboard=structuredClone(e),this.showMessage(p("web_copied")),!0):!1}cutSelection(){this.selected&&rr(this.doc,this.selected)&&this.copySelection()&&this.deleteSelection()}paste(){this.clipboard&&this.insertNearSelection(structuredClone(this.clipboard))}deleteSelection(){!this.selected||!rr(this.doc,this.selected)||(this.commit(fi(this.doc,this.selected)),this.selected=void 0,this.render())}insertSensor(e,t=this.selected){if(!t||wn(this.doc,t))return;const n=At(this.doc,t);if(!ad.includes(n.type))return;const a=(n.textLines??[]).join(" ").trim();this.commit(Qi(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&&wn(this.doc,t))return this.commit(Pn(this.doc,t,e),t);if(t){const n=[...t.slice(0,-1),t[t.length-1]+1];return this.commit(io(this.doc,e,t),n)}if(this.doc.elements.length===1&&wn(this.doc,[0]))return this.commit(Pn(this.doc,[0],e),[0]);this.commit(ti(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===Qa(u))return;const m=p2(r,u);this.commit(Qi(this.doc,e,m.split(` +`))),(d=this.inspector.querySelector("textarea"))==null||d.focus()}),s.append(l)}n.append(s,se("p",{class:"hint mono-hint"},wJ[a]))}if(t.type===k.forSchleife){const a=se("div",{class:"for-fields"}),s=Q0(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=se("input",{placeholder:l,spellcheck:"false",autocomplete:"off"});m.value=s[u],this.liveEdit(m,c=>{const d=Nt(this.doc,e);if(!d)return;const h=Q0(d.textLines);return h[u]=b2(c),Qi(this.doc,e,h)}),a.append(se("label",{},o,m))}),n.append(a)}else if(t.type!==k.leerElement){const a=yJ[t.type];a&&n.append(se("p",{class:"hint mono-hint"},a));const s=od(t),r=se("textarea",{rows:"3",spellcheck:"false"}),o=t.textLines.join(` +`);r.value=s?V0(s,o):o,r.placeholder=zJ(t),r.addEventListener("focus",()=>{r.value.trim()==="ø"&&r.select()}),this.liveEdit(r,u=>{const m=od(Nt(this.doc,e)??t),c=m?x2(m,V0(m,u)):u;return Qi(this.doc,e,c.split(` +`))});const l=se("div",{class:"editor-row"});s&&l.append(se("span",{class:"fixed-prefix"},s)),l.append(r),n.append(l)}this.renderCaseControls(e)}renderCaseControls(e){var l;const t=d2(e,this.doc);if(!t)return;const n=((l=Nt(this.doc,t))==null?void 0:l.cases)??[],a=h2(e,t),s=se("div",{class:"case-controls"});if(a!==void 0&&n[a]){const u=se("input",{placeholder:p("web_case_name_placeholder"),spellcheck:"false",autocomplete:"off"});u.value=n[a].name,this.liveEdit(u,m=>m.trim()===""?void 0:c2(this.doc,t,a,m)),s.append(se("label",{},p("web_case_name"),u))}const r=se("button",{},`+ ${p("inspector_add_case")}`);r.addEventListener("click",()=>{const u=u2(this.doc,t);this.commit(u.doc,u.path)});const o=se("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=m2(this.doc,t,a);this.commit(u.doc,u.path)}),s.append(se("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=Cd(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?ne.stop:ne.play}${L(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(_d(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,Fe(bd,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,Fe(wd,this.previewStacked?"1":"0"),this.previewStacked&&!this.liveCoding&&this.setLiveCoding(!0),this.placePreview()},this.previewStacked=$e(wd)==="1";const t=$e(xd);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&&Fe(Id,m===void 0?"":String(m))},r=Number($e(Id));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,Fe(xd,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||!Rn()||this.preview.update(this.doc,e=>this.findSubprogram(e),_d(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(),Fe(fd,e?"1":"0"),this.keepAColumnOpen(),this.canvasHost&&this.render()}learnResizer(){return this.panelResizer(this.learn.element,"learn-resizer",pd,p("web_learn_resize"),1)}liveResizer(){return this.panelResizer(this.live.element,"live-resizer",SJ,p("web_live_resize"),-1,()=>this.root)}yieldingPanels(){return[{panel:this.preview.element,key:zd},{panel:this.learn.element,key:pd},{panel:this.files.element,key:gd}].filter(({panel:e})=>e.offsetParent!==null&&e.parentElement===this.live.element.parentElement)}panelResizer(e,t,n,a,s,r){const o=se("div",{class:t,role:"separator","aria-orientation":"vertical",tabindex:"0",title:a}),l=d=>{var x;const h=((x=e.parentElement)==null?void 0:x.getBoundingClientRect().width)??0;if(h===0)return PJ(d);const g=[this.files.element,this.learn.element,this.live.element,this.preview.element].filter(b=>b!==e&&b.offsetParent!==null&&getComputedStyle(b).flexGrow==="0").reduce((b,v)=>b+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&&Fe(n,d===void 0?"":String(l(d)))},m=Number($e(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 x=r?this.pushResize(e,n,r(),g):void 0,b=(I,z)=>(x??u)(g+f*(I.clientX-h),z),v=I=>b(I,!1),w=I=>{o.removeEventListener("pointermove",v),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),this.shell.classList.remove("resizing"),b(I,!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&&Fe(g.key,String(Math.round(g.start-f))))}e.style.width=`${d}px`,c&&Fe(t,String(d))}}findSubprogram(e,t=this.tab){const n=to(e);if(n==="")return;const a=this.tabs.find(s=>s!==t&&(to(s.doc.caption)===n||to(on(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=>lo(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=or(t??this.selected,e),this.render()}pushUndo(e){for(this.undoStack.push(e);this.undoStack.length>OJ;)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=or(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=or(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:s2(),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=on(n),r.title=n.fileName??on(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")}: ${on(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",`${on(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&&Nt(this.doc,this.selected);return e?(this.clipboard=structuredClone(e),this.showMessage(p("web_copied")),!0):!1}cutSelection(){this.selected&&rr(this.doc,this.selected)&&this.copySelection()&&this.deleteSelection()}paste(){this.clipboard&&this.insertNearSelection(structuredClone(this.clipboard))}deleteSelection(){!this.selected||!rr(this.doc,this.selected)||(this.commit(fi(this.doc,this.selected)),this.selected=void 0,this.render())}insertSensor(e,t=this.selected){if(!t||wn(this.doc,t))return;const n=At(this.doc,t);if(!sd.includes(n.type))return;const a=(n.textLines??[]).join(" ").trim();this.commit(Qi(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&&wn(this.doc,t))return this.commit(Pn(this.doc,t,e),t);if(t){const n=[...t.slice(0,-1),t[t.length-1]+1];return this.commit(io(this.doc,e,t),n)}if(this.doc.elements.length===1&&wn(this.doc,[0]))return this.commit(Pn(this.doc,[0],e),[0]);this.commit(ti(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=`

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

${L(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=Bl(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:sd()}),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([o1(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:sd()}),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=Xc(this.doc,on(this.tab));return this.offerDownload(`${s}.visustruct`,new Blob([o1(this.doc)],{type:"application/xml"}))}const t=Kc(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=Xc(this.doc,on(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([Rf(t)],{type:"image/svg+xml"}));break}case"png":{const s=await ed(t,a);await this.offerDownload(`${n}.png`,await rJ(s));break}case"pdf":{const s=await ed(t,Math.max(a,3)),r=await uJ(mJ(s),s.width,s.height,t,Jf(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==="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&&lo(n.idPath,this.selected);this.selected=n==null?void 0:n.idPath,this.render(),n&&e.pointerType!=="touch"&&!(wn(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=At(this.doc,e.path);t.textContent=`${Xr(n.type)}: ${Ol(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||wn(this.doc,s.idPath)?void 0:ad.includes(At(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:wn(this.doc,r)?{kind:"replace",path:r,frame:s.frame}:{kind:t"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e])}function Sd(i){if(!i)return[];for(const e of[...Ot.flatMap(t=>t.steps.flatMap(n=>n.blocks)),...Tn.flatMap(t=>t.blocks)])if(!(e.kind!=="exercise"||e.exercise.id!==i))return e.exercise.tests.flatMap(t=>{const n=t.world?Wa(t.world):void 0;return n?[n]:[]});return[]}let Et,Sl,_l;function _d(i){const e=i.dataset.tip;if(!e)return;Et??(Et=Object.assign(document.createElement("div"),{className:"tooltip",role:"tooltip"})),Et.isConnected||document.body.append(Et),Et.textContent=e,Et.hidden=!1;const t=i.getBoundingClientRect(),n=Et.offsetWidth,a=Et.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!==_l&&(no(),e&&(_l=e,Sl=window.setTimeout(()=>_d(e),350)))}),document.addEventListener("focusin",i=>{const e=i.target.closest("[data-tip]");no(),e!=null&&e.matches(":focus-visible")&&_d(e)});for(const i of["pointerdown","focusout","scroll","keydown"])document.addEventListener(i,no,!0)}const Tl="visustruct.reloadedAfterError";function Qf(){try{const i=Number(sessionStorage.getItem(Tl));if(i&&Date.now()-i<3e4)return!1;sessionStorage.setItem(Tl,String(Date.now()))}catch{return!1}return location.reload(),!0}function CJ(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=>{Qf()&&i.preventDefault()});const BJ=M2();Promise.all([qd(BJ,!1),Qd(D2(),!1)]).then(()=>{Vf(),jJ();const i=new URLSearchParams(location.search);i.has("visuobject")&&Kh();const e=document.getElementById("app");if(Xh()&&!i.has("visustruct")&&!i.has("visubot"))return q(async()=>{const{ObjectApp:t}=await import("./objectApp-CHHoJaVe.js").then(n=>n.g);return{ObjectApp:t}},[],import.meta.url).then(({ObjectApp:t})=>new t(e));new OJ(e)}).then(()=>{try{sessionStorage.removeItem(Tl)}catch{}}).catch(i=>{/dynamically imported module|Importing a module script failed|error loading dynamically/i.test(String(i))&&Qf()||CJ(i)});export{Vn as C,DF as J,jx as L,q as _,yF as a,RF as b,Zf as c,EJ as d,br as e,sa as f,_J as g,HD as h,ne as i,GD as j,i1 as k,WJ as m,WF as p,am as r,$D as s,p as t,Po as w}; +
`,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=Bl(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:rd()}),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([o1(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:rd()}),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=Kc(this.doc,on(this.tab));return this.offerDownload(`${s}.visustruct`,new Blob([o1(this.doc)],{type:"application/xml"}))}const t=ed(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=Kc(this.doc,on(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([Gf(t)],{type:"image/svg+xml"}));break}case"png":{const s=await td(t,a);await this.offerDownload(`${n}.png`,await oJ(s));break}case"pdf":{const s=await td(t,Math.max(a,3)),r=await mJ(cJ(s),s.width,s.height,t,Rf(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==="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&&lo(n.idPath,this.selected);this.selected=n==null?void 0:n.idPath,this.render(),n&&e.pointerType!=="touch"&&!(wn(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=At(this.doc,e.path);t.textContent=`${Xr(n.type)}: ${Ol(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||wn(this.doc,s.idPath)?void 0:sd.includes(At(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:wn(this.doc,r)?{kind:"replace",path:r,frame:s.frame}:{kind:t"]/g,e=>({"&":"&","<":"<",">":">",'"':"""})[e])}function _d(i){if(!i)return[];for(const e of[...Ot.flatMap(t=>t.steps.flatMap(n=>n.blocks)),...Tn.flatMap(t=>t.blocks)])if(!(e.kind!=="exercise"||e.exercise.id!==i))return e.exercise.tests.flatMap(t=>{const n=t.world?Wa(t.world):void 0;return n?[n]:[]});return[]}let Et,Sl,_l;function Td(i){const e=i.dataset.tip;if(!e)return;Et??(Et=Object.assign(document.createElement("div"),{className:"tooltip",role:"tooltip"})),Et.isConnected||document.body.append(Et),Et.textContent=e,Et.hidden=!1;const t=i.getBoundingClientRect(),n=Et.offsetWidth,a=Et.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!==_l&&(no(),e&&(_l=e,Sl=window.setTimeout(()=>Td(e),350)))}),document.addEventListener("focusin",i=>{const e=i.target.closest("[data-tip]");no(),e!=null&&e.matches(":focus-visible")&&Td(e)});for(const i of["pointerdown","focusout","scroll","keydown"])document.addEventListener(i,no,!0)}const Tl="visustruct.reloadedAfterError";function qf(){try{const i=Number(sessionStorage.getItem(Tl));if(i&&Date.now()-i<3e4)return!1;sessionStorage.setItem(Tl,String(Date.now()))}catch{return!1}return location.reload(),!0}function BJ(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=>{qf()&&i.preventDefault()});const DJ=L2();Promise.all([Ud(DJ,!1),qd(Z2(),!1)]).then(()=>{Qf(),CJ();const i=new URLSearchParams(location.search);i.has("visuobject")&&eg();const e=document.getElementById("app");if(Kh()&&!i.has("visustruct")&&!i.has("visubot"))return q(async()=>{const{ObjectApp:t}=await import("./objectApp-B5M5sW_m.js").then(n=>n.g);return{ObjectApp:t}},[],import.meta.url).then(({ObjectApp:t})=>new t(e));new AJ(e)}).then(()=>{try{sessionStorage.removeItem(Tl)}catch{}}).catch(i=>{/dynamically imported module|Importing a module script failed|error loading dynamically/i.test(String(i))&&qf()||BJ(i)});export{Vn as C,ZF as J,Cx as L,q as _,wF as a,GF as b,Mf as c,NJ as d,br as e,sa as f,TJ as g,VD as h,ne as i,HD as j,i1 as k,EJ as m,EF as p,am as r,YD as s,p as t,Po as w}; diff --git a/website/app/assets/objectApp-CHHoJaVe.js b/website/app/assets/objectApp-B5M5sW_m.js similarity index 99% rename from website/app/assets/objectApp-CHHoJaVe.js rename to website/app/assets/objectApp-B5M5sW_m.js index e50524fc..f8659fe1 100644 --- a/website/app/assets/objectApp-CHHoJaVe.js +++ b/website/app/assets/objectApp-B5M5sW_m.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./projectZip-5qU-R066.js","./index-C0CXDsrV.js","./index-B-A0tKyY.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,_ as wt,f as $t,h as Js,r as _t,j as Ks,k as ct}from"./index-C0CXDsrV.js";function Xs(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,_ as wt,f as $t,h as Js,r as _t,j as Ks,k as ct}from"./index-FLiLJX9D.js";function Xs(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 Gs(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=Xs(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=Gs(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 Zs(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 Qs=/^[\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 ei={"+":"public ","-":"private ","#":"protected ","~":""};function ti(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?"":ei[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.13.6"))} + ${b(d("web_about_version_fmt").replace("%@","0.13.7"))}
@@ -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}=Ci(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){e!=="object"&&(Us(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>xn&&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 Ui([...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-5qU-R066.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-5qU-R066.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);jn(`${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 Js(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 gn(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 $n(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 nn(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(mi(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(pi(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(tn(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>xn&&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 Ui([...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-NDe93a6D.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-NDe93a6D.js");return{projectToZip:s}},__vite__mapDeps([0,1,2]),import.meta.url),t=e(this.project);jn(`${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 Js(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 gn(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 $n(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 nn(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(mi(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(pi(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(tn(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-5qU-R066.js b/website/app/assets/projectZip-NDe93a6D.js similarity index 99% rename from website/app/assets/projectZip-5qU-R066.js rename to website/app/assets/projectZip-NDe93a6D.js index c591e41a..2eae08fa 100644 --- a/website/app/assets/projectZip-5qU-R066.js +++ b/website/app/assets/projectZip-NDe93a6D.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-CHHoJaVe.js";import"./index-C0CXDsrV.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-B5M5sW_m.js";import"./index-FLiLJX9D.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-ZT3VS0U0.js b/website/app/assets/robot3d-DuVc6opp.js similarity index 99% rename from website/app/assets/robot3d-ZT3VS0U0.js rename to website/app/assets/robot3d-DuVc6opp.js index 76f9aa36..b65ae274 100644 --- a/website/app/assets/robot3d-ZT3VS0U0.js +++ b/website/app/assets/robot3d-DuVc6opp.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-C0CXDsrV.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-FLiLJX9D.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 b03f0e58..1293539f 100644 --- a/website/app/index.html +++ b/website/app/index.html @@ -6,7 +6,7 @@ VisuStruct Web - +