var xf=Object.defineProperty;var gp=c=>{throw TypeError(c)};var Sf=(c,t,e)=>t in c?xf(c,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):c[t]=e;var r=(c,t,e)=>Sf(c,typeof t!="symbol"?t+"":t,e),Yh=(c,t,e)=>t.has(c)||gp("Cannot "+e);var M=(c,t,e)=>(Yh(c,t,"read from private field"),e?e.call(c):t.get(c)),J=(c,t,e)=>t.has(c)?gp("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(c):t.set(c,e),ee=(c,t,e,i)=>(Yh(c,t,"write to private field"),i?i.call(c,e):t.set(c,e),e),re=(c,t,e)=>(Yh(c,t,"access private method"),e);var Ho=(c,t,e,i)=>({set _(n){ee(c,t,n,e)},get _(){return M(c,t,i)}});import{j as y}from"./assets/jquery-Bu9idKpp.js";import{T as Np,B as qp,S as Rp,M as ln,u as Gp,P as me,G as it,a as tr,b as Tf,R as uc,A as Lo,C as Ks,c as Wh,d as za,e as Bo,f as $f,g as If,i as Hp}from"./assets/pixi.js-DMQUwG-p.js";import{e as Q,U as Ef,l as P,M as Zh,R as Df,K as fp,a as Zo,W as jf,b as Mf,c as Pf,d as Of,f as Lf}from"./assets/monaco-editor-DyICVdj8.js";/* empty css */import{e as Kp}from"./assets/dragdroptouch-B-sHm6CJ.js";import{h as Bf}from"./assets/howler-Dn3Ikqai.js";import{c as Vt}from"./assets/chalk-D1XV3AHK.js";import{V as Xe,T as hd,S as ud,N as Na,D as Ff,R as bp,U as Vf,a as Up,W as _f,b as yp,B as zf,c as Wf,d as Nf,A as qf,I as Rf,F as vp,e as Gf,f as qa,g as Hf,h as mc,M as ge,i as Kf,P as jd,j as Uf,O as Qp,C as Ls,k as Qf,l as Yf,m as Xh,n as Cd,o as Zf,p as rs,q as go,r as md,s as Xf,t as pd,u as gd,v as Ko,G as Jf,w as Yp,x as eb,y as tb,z as Md,E as pc,H as Jh,J as Ni,K as ib,L as nb,Q as xd,X as fd,Y as bd,Z as ec,_ as rb,$ as sb,a0 as tc,a1 as Ap,a2 as ab}from"./assets/three-CnfRzQzS.js";import{U as Fo}from"./assets/upng-js-BeSsTbPt.js";import{p as ob}from"./assets/p5-Byvg2QEa.js";import{p as wp}from"./assets/pako-COTvSS4P.js";import{J as Pd}from"./assets/jszip-eerVpFfC.js";import{d as Zp}from"./assets/diff-match-patch-BoheT17E.js";import"./assets/regular-table-CV9C_f8m.js";import{M as kp}from"./assets/markdown-it-BhORKj_N.js";import"./online-ide-embedded.js";import"./assets/eventemitter3-D_kXO2ei.js";import"./assets/earcut-CqlJ6MN1.js";import"./assets/ismobilejs-CHLuctl-.js";import"./assets/pixi-fQzusUms.js";import"./assets/parse-svg-path-Cdo3mi5v.js";import"./assets/mdurl-k9Sl0PQj.js";import"./assets/uc.micro-kMc2yuuw.js";import"./assets/entities-DOYUvOU8.js";import"./assets/linkify-it-swVJLcMX.js";import"./assets/punycode.js-Dj65hjkv.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))i(n);new MutationObserver(n=>{for(const s of n)if(s.type==="childList")for(const a of s.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&i(a)}).observe(document,{childList:!0,subtree:!0});function e(n){const s={};return n.integrity&&(s.integrity=n.integrity),n.referrerPolicy&&(s.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?s.credentials="include":n.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(n){if(n.ep)return;n.ep=!0;const s=e(n);fetch(n.href,s)}})();var Hw=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Kw(c){return c&&c.__esModule&&Object.prototype.hasOwnProperty.call(c,"default")?c.default:c}const lb="modulepreload",db=function(c,t){return new URL(c,t).href},Cp={},Uw=function(t,e,i){let n=Promise.resolve();if(e&&e.length>0){const a=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),h=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));n=Promise.allSettled(e.map(u=>{if(u=db(u,i),u in Cp)return;Cp[u]=!0;const m=u.endsWith(".css"),g=m?'[rel="stylesheet"]':"";if(!!i)for(let A=a.length-1;A>=0;A--){const C=a[A];if(C.href===u&&(!m||C.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${g}`))return;const b=document.createElement("link");if(b.rel=m?"stylesheet":lb,m||(b.as="script"),b.crossOrigin="",b.href=u,h&&b.setAttribute("nonce",h),document.head.appendChild(b),m)return new Promise((A,C)=>{b.addEventListener("load",A),b.addEventListener("error",()=>C(new Error(`Unable to preload CSS for ${u}`)))})}))}function s(a){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=a,window.dispatchEvent(l),!l.defaultPrevented)throw a}return n.then(a=>{for(const l of a||[])l.status==="rejected"&&s(l.reason);return t().catch(s)})};class Xp{constructor(t){r(this,"themes",[]);r(this,"currentTheme");this.rootElement=t,this.initThemes(),this.initEditorThemes(),this.currentTheme=this.themes[0]}switchTheme(t){for(let e of this.themes)if(e.name==t){this.internalSwitchTheme(e);break}}internalSwitchTheme(t){Q.setTheme(t.monacoTheme);for(const e of Object.keys(t.cssColors)){const i=t.cssColors[e];this.rootElement.style.setProperty(e,i)}this.currentTheme=t}initThemes(){this.themes.push({name:"dark",monacoTheme:"myCustomThemeDark",cssColors:{"--defaultPrintColor":"#ffffff","--backgroundDark":"#1e1e1e","--backgroundLight":"#252526","--backgroundHeading":"#37373d","--backgroundSelected":"#2a2d2e","--fontColorNormal":"#c2cccc","--fontColorLight":"#e7e7e7","--slider":"#414141","--loginButtonBackgrond":"#59a15d","--loginButtonFontColor":"#000000","--loginMessageColor":"rgb(122, 48, 48)","--loginButtonHover":"#63a867","--loginButtonActive":"#94ffd1","--scrollbar":"#1e1e1e","--scrollbar-thumb":"#3e3e3e","--scrollbar-thumb-hover":"#5e5e5e","--scrollbar-thumb-active":"#7e7e7e","--submenu-hover":"#094771","--submenu-color":"#ffffff","--menuitemsdivider":"#616162","--file-hover":"hsla(0, 0%, 38%, 0.125)","--file-active":"#094771","--file-active-hover":"rgba(9, 71, 113, 0.827)","--file-active-border":"#007fd4","--file-errorcount":"rgb(224, 93, 93)","--inplace-editor":"blue","--contextmenu-background":"#3c3c3c","--contextmenu-color":"rgb(212,212,212)","--contextmenu-hover-background":"#094771","--contextmenu-hover-color":"#ffffff","--error-filename":"#2a709e","--error-line-ative":"#094771","--error-line-hover":"rgba(96, 96, 96, 0.125)","--error-position":"#c0802d","--linecolumn":"#14c714","--reveal-error":"rgba(253, 101, 101, 0.745)","--reveal-method":"#2b2b7d2f","--reveal-errorline-background":"red","--reveal-error-whole-line":"rgba(255, 0, 0, 0.555)","--reveal-programpointer":"rgba(111, 214, 27, 0.337)","--reveal-syntaxelement":"rgba(122, 122, 122, 0.61)","--margin-breakpoint":"rgba(255, 0, 0, 0.623)","--speedcontrol-bar":"#9d9d9d","--speedcontrol-grip":"#588555","--speedcontrol-grip-hover":"#89d185","--speedcontrol-display-background":"#383838","--speedcontrol-display-border":"#9d9d9d","--editorTooltip-background":"#252526","--editorTooltip-border":"#454545","--renameInput-color":"#ffffff","--bottomdiv-tabheading-hover":"white","--bottomdiv-tabheading-active":"rgb(97,97,255)","--noErrorMessage":"rgb(37, 211, 37)","--console-top-borderbottom":"#c4c4c4","--console-top-background":"#1e1e1e","--consoleEntry-withBorder":"#303030","--consoleEntryValue":"white","--consoleEntryIdentifier":"rgb(156, 156, 235)","--consoleEntryNoValue":"gray","--consoleEntryCaption":"white","--error-Caption":"rgb(166, 165, 176)","--console-error":"rgb(155, 51, 51)","--deIdentifier":"rgb(156, 156, 235)","--deValue":"white","--debugger-fieldIdentifier":"#e6e92c","--debugger-localVariableIdentifier":"#4ffa2c","--memorytab-tableheadings":"#a7afe2","--helper-background-color":"#383838","--helper-border-color":"#d4d4d4","--arrowBoxButtonOuter-background":"#59a15d","--arrowBoxButtonOuter-border":"#3d3d3d","--arrowBoxButtonOuter-color":"black","--arrowBoxButtonOuter-button-hover":"#63a867","--arrowBox-after":"rgba(136, 183, 213, 0)","--arrowBox-before":"rgba(194, 225, 245, 0)","--defaultOutputColor":"#ffffff","--runInputColor":"#ffffff","--runBackgroundColor":"rgba(255, 255, 255, 0.2)","--console-fieldidentifier":"#e6e92c","--junit-details-color":"#a0a0a0","--junit-expected-color":"#2fed4f","--junit-actual-color":"#e06d4d"}});let t="#8080ff";this.themes.push({name:"light",monacoTheme:"myCustomThemeLight",cssColors:{"--defaultPrintColor":"#000000","--backgroundDark":"white","--backgroundLight":"#f3f3f3","--backgroundHeading":"#dcdcdc","--backgroundSelected":"#e8e8e8","--fontColorNormal":"#000","--fontColorLight":"#303030","--slider":"#b0b0b0","--loginButtonBackgrond":"#59a15d","--loginButtonFontColor":"#000000","--loginMessageColor":"rgb(122, 48, 48)","--loginButtonHover":"#63a867","--loginButtonActive":"#94ffd1","--scrollbar":"#e3e3e3","--scrollbar-thumb":"#bababa","--scrollbar-thumb-hover":"#8e8e8e","--scrollbar-thumb-active":"#616161","--submenu-hover":t,"--submenu-color":"#ffffff","--menuitemsdivider":"#cfcfcf","--file-hover":"#e8e8e8","--file-active":"rgba(171, 231, 255, 0.74)","--file-active-hover":"rgba(203, 212, 253, 0.61)","--file-active-border":"rgba(76, 204, 255, 0.74)","--file-errorcount":"red","--inplace-editor":"white","--contextmenu-background":"white","--contextmenu-color":"#756161","--contextmenu-hover-background":t,"--contextmenu-hover-color":"#a0a0ff","--error-filename":"#ff0000","--error-line-ative":"#ffa0a0","--error-line-hover":"#ffc0c0","--error-position":"#804040","--linecolumn":"#14c714","--reveal-error":"rgba(253, 101, 101, 0.745)","--reveal-method":"#babaec80","--reveal-errorline-background":"red","--reveal-error-whole-line":"rgba(255, 0, 0, 0.555)","--reveal-programpointer":"rgba(111, 214, 27, 0.337)","--reveal-syntaxelement":"rgba(244, 255, 96, 0.61)","--margin-breakpoint":"rgba(255, 0, 0, 0.623)","--speedcontrol-bar":"#9d9d9d","--speedcontrol-grip":"#588555","--speedcontrol-grip-hover":"#89d185","--speedcontrol-display-background":"#e0e0e0","--speedcontrol-display-border":"#9d9d9d","--editorTooltip-background":"#e0e0e0","--editorTooltip-border":"#9d9d9d","--renameInput-color":"#000000","--bottomdiv-tabheading-hover":"#424242","--bottomdiv-tabheading-active":"#424242","--noErrorMessage":"rgb(17, 180, 17)","--console-top-borderbottom":"#c4c4c4","--console-top-background":"white","--consoleEntry-withBorder":"#dbdbdbff","--consoleEntryValue":"#0000a0","--consoleEntryIdentifier":"black","--consoleEntryNoValue":"gray","--consoleEntryCaption":"#756161","--error-Caption":"rgb(166, 165, 176)","--console-error":"rgb(155, 21, 21)","--deIdentifier":"black","--deValue":"#0000a0","--debugger-fieldIdentifier":"#855c27ff","--debugger-localVariableIdentifier":"#25940fff","--memorytab-tableheadings":"#5364d8","--helper-background-color":"#f3f3f3","--helper-border-color":"#606060","--arrowBoxButtonOuter-background":"#59a15d","--arrowBoxButtonOuter-border":"#3d3d3d","--arrowBoxButtonOuter-color":"black","--arrowBoxButtonOuter-button-hover":"#63a867","--arrowBox-after":"rgba(136, 183, 213, 0)","--arrowBox-before":"rgba(194, 225, 245, 0)","--defaultOutputColor":"#303030","--runInputColor":"#000000","--runBackgroundColor":"rgba(0, 0, 0, 0.2)","--console-fieldidentifier":"#b37c35ff","--junit-details-color":"#6d6c6c","--junit-expected-color":"#1a8f2e","--junit-actual-color":"#964731"}})}initEditorThemes(){Q.defineTheme("myCustomThemeDark",{base:"vs-dark",inherit:!0,rules:[{token:"method",foreground:"#e7e543",fontStyle:"italic"},{token:"print",foreground:"#e7e543",fontStyle:"italic bold"},{token:"class",foreground:"#3DC9B0"},{token:"number",foreground:"#9ce870"},{token:"number.immediate",foreground:"#e0e0e0",fontStyle:"italic"},{token:"type",foreground:"#a566cd"},{token:"identifier",foreground:"#668aff"},{token:"identifier.pseudodirective",foreground:"#92929294"},{token:"statement",foreground:"#ca5c5c",fontStyle:"bold"},{token:"keyword",foreground:"#f78e17"},{token:"datadirective",foreground:"#91720c93",fontStyle:"bold"},{token:"string3",foreground:"#ff0000"},{token:"property",foreground:"ffffff",fontStyle:"bold"}],colors:{"editor.background":"#1e1e1e",jo_highlightMethod:"#2b2b7d"}}),Q.defineTheme("myCustomThemeLight",{base:"vs",inherit:!0,rules:[{token:"method",foreground:"#694E16",fontStyle:"italic bold"},{token:"print",foreground:"#811f3f",fontStyle:"italic bold"},{token:"class",foreground:"#a03030"},{token:"number",foreground:"#505050"},{token:"number.immediate",foreground:"#202020",fontStyle:"italic"},{token:"type",foreground:"#a566cd",fontStyle:"bold"},{token:"identifier",foreground:"#001080"},{token:"identifier.pseudodirective",foreground:"#85858594"},{token:"statement",foreground:"#8000e0",fontStyle:"bold"},{token:"keyword",foreground:"#00a000",fontStyle:"bold"},{token:"datadirective",foreground:"#91720c93",fontStyle:"bold"},{token:"comment",foreground:"#808080",fontStyle:"italic"}],colors:{"editor.background":"#FFFFFF","editor.foreground":"#000000","editor.inactiveSelectionBackground":"#E5EBF1","editorIndentGuide.background":"#D3D3D3","editorIndentGuide.activeBackground":"#939393","editor.selectionHighlightBackground":"#ADD6FF80","editorSuggestWidget.background":"#F3F3F3","activityBarBadge.background":"#007ACC","sideBarTitle.foreground":"#6F6F6F","list.hoverBackground":"#E8E8E8","input.placeholderForeground":"#767676","searchEditor.textInputBorder":"#CECECE","settings.textInputBorder":"#CECECE","settings.numberInputBorder":"#CECECE","statusBarItem.remoteForeground":"#FFF","statusBarItem.remoteBackground":"#16825D",jo_highlightMethod:"#babaec"}})}}function hb(c){let t=0,e;for(let i=0;i"u"?"":c.replace(/['"]+/g,"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Jp(c,t=!1){let e=`${fs(c.getDate())}.${fs(c.getMonth()+1)}.${c.getFullYear()}, ${fs(c.getHours())}:${fs(c.getMinutes())}`;return t&&(e+=`, ${fs(c.getHours())}:${fs(c.getMinutes())}`),e}function cb(c){return`${fs(c.getDate())}.${fs(c.getMonth()+1)}.${c.getFullYear()}`}function fs(c){return c<10?"0"+c:""+c}function yd(c){return c<10?" "+c:c<100?" "+c:""+c}function ub(c){let t=c.match(/^(\d{2})\.(\d{2})\.(\d{4}), (\d{2}):(\d{2})$/);return t?new Date(Number.parseInt(t[3]),Number.parseInt(t[2])-1,Number.parseInt(t[1]),Number.parseInt(t[4]),Number.parseInt(t[5])):void 0}function mb(c,t){return c.replace(new RegExp(`(?![^\\n]{1,${t}}$)([^\\n]{1,${t}})\\s`,"g"),`$1 `)}function pb(c,t=""){let e="";if(typeof t=="string")e=t;else for(let i=0;i');a.css({color:t.css("color"),position:t.css("position"),"background-color":t.css("background-color"),"font-size":t.css("font-size"),"font-weight":t.css("font-weight"),"line-height":t.css("line-height"),flex:t.css("flex"),"box-sizing":"border-box"});let l=t.css("height");l!=null&&l!="0px"&&a.css("height",l);let h=t.css("width");h!=null&&h!="0px"&&a.css("width",h),a.val(c.text()),a.on(s+"down",u=>{u.stopPropagation()}),a.on(s+"up",u=>{u.stopPropagation()}),a[0].addEventListener("touchstart",u=>{u.stopPropagation(),a[0].focus()},{passive:!0}),a.on("click",u=>{u.stopPropagation(),a[0].focus()}),i!=null&&a[0].setSelectionRange(i.start,i.end),t.after(a),t.hide(),setTimeout(()=>{a[0].focus();let u=new KeyboardEvent("touchstart",{bubbles:!0});a[0].dispatchEvent(u)},300),a.on("keydown.me",u=>{if(u.key=="Enter"||u.key=="Escape"){a.off("keydown.me"),a.off("focusout.me"),a.remove(),n.show();let m=gc(a.val());e(m);return}}),a.on("focusout.me",u=>{a.off("keydown.me"),a.off("focusout.me"),a.remove(),n.show();let m=gc(a.val());e(m)})}function pn(c,t,e,i=!1){let n=window.PointerEvent?"pointer":"mouse";i||y(".jo_contextmenu").remove();let s=y('
'),a=y(".joeCssFence")[0],l=a.style.getPropertyValue("--contextmenu-background");s.css("background-color",l);let h=a.style.getPropertyValue("--fontColorNormal"),u,m;for(let x of c){if(x.caption.trim()=="-"){s.append(y('
'));continue}let q=x.iconClass?``:"",D=x.caption;x.link!=null&&(D=`${x.caption}`);let G=y(`
${q}`+D+(x.subMenu!=null?'     >':"")+"
");if(G.find("a").attr("style","color: "+h+" !important"),G.attr("style","color: "+h+" !important"),x.color!=null&&G.css("color",x.color),x.link==null)G.on(n+"up.contextmenu",K=>{K.stopPropagation(),x.subMenu?G.trigger("move.contextmenu"):(y(".jo_contextmenu").remove(),y(document).off(n+"up.contextmenu"),y(document).off(n+"down.contextmenu"),y(document).off("keydown.contextmenu"),x.callback())}),G.on(n+"down.contextmenu",K=>{K.stopPropagation()});else{let K=G.find("a");K.on(n+"up",Z=>{Z.stopPropagation(),setTimeout(()=>{G.hide()},500)}),K.on(n+"down",Z=>{Z.stopPropagation()})}G.on(n+"move.contextmenu",()=>{x!=m&&u!=null&&(u.remove(),m=void 0,u=void 0),x.subMenu!=null&&(u=pn(x.subMenu,G.offset().left+G.width(),G.offset().top,!0))}),s.append(G)}y(document).on(n+"down.contextmenu",x=>{y(document).off(n+"down.contextmenu"),y(document).off("keydown.contextmenu"),y(".jo_contextmenu").remove()}),y(document).on("keydown.contextmenu",x=>{x.key=="Escape"&&(y(document).off(n+"up.contextmenu"),y(document).off("keydown.contextmenu"),y(".jo_contextmenu").remove())});let g=t>window.innerWidth*.8?"right":"left",f=t>window.innerWidth*.8?window.innerWidth-t:t,b="top";y("body").append(s),s.show();let A={},C=e,w=s.height()||0;return e+w>window.innerHeight&&(C=e-(w-(window.innerHeight-e))-20),w>window.innerHeight-20&&(C=10,A["max-height"]=window.innerHeight-20+"px",A.overflow="auto"),A[g]=f+"px",A[b]=C+"px",s.css(A),s.on(n+"down.contextmenu",x=>{x.stopPropagation()}),s}function tg(c){let t=c.find(".jo_tabheadings>div").not(".jo_noHeading"),e=c.find(".jo_tabs>div"),i=window.PointerEvent?"pointer":"mouse";t.on(i+"down",n=>{let s=y(n.target);t.removeClass("jo_active"),s.addClass("jo_active");let a=c.find("."+s.data("target"));e.removeClass("jo_active"),e.trigger("myhide"),a.addClass("jo_active"),a.trigger("myshow")})}function Od(c){return c=c.replace("px","").trim(),Number.parseInt(c)}function L(c,t="",e="",i,n){let s="";c!=null&&c!=""&&(s+=` id="${c}"`),t!=null&&t!=""&&(s+=` class="${t}"`);let a=y(``);return i!=null&&a.css(i),e!=null&&e!=""&&a.text(e),n!=null&&n.append(a),a}function Ns(c,t,e){c.empty(),t.forEach(i=>{let n=i.value==e?' selected="selected"':"",s=y(``);c.append(s),s.data("object",i.object)}),c.data("items",t)}function as(c){var i;let t=c.data("items"),e=c.val();return(i=t.find(n=>n.value==e))==null?void 0:i.object}function fb(){matchMedia("(pointer:fine)").matches}function Sr(c,t,e=!1){var i=e?c:new Blob([typeof c=="string"?c:JSON.stringify(c,void 0,3)],{type:"text/plain"});if(window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(i,t);else{var n=document.createEvent("MouseEvents"),s=document.createElement("a");s.download=t,s.href=window.URL.createObjectURL(i),s.dataset.downloadurl=["text/plain",s.download,s.href].join(":"),n.initEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),s.dispatchEvent(n),s.remove()}}function bb(c){var t=document.createElement("textarea");t.value=c,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")}catch(e){console.error("Fallback: Oops, unable to copy",e)}document.body.removeChild(t)}function Ld(c){if(!navigator.clipboard){bb(c);return}navigator.clipboard.writeText(c).then(function(){},function(t){console.error("Async: Could not copy text: ",t)})}function yb(c,t){var e=c>>16,i=c>>8&255,n=c&255;e=Math.round((255-e)*t)+e&255,i=Math.round((255-i)*t)+i&255,n=Math.round((255-n)*t)+n&255;var s=n|i<<8|e<<16;return s}function fc(c){var t=null,e=[];return location.search.substring(1).split("&").forEach(function(i){e=i.split("="),e[0]===c&&(t=decodeURIComponent(e[1]))}),t}function Ga(c,t){if(c&&t)for(;c.children.length>0;){let e=c.children[0];t.append(e)}}function vd(){return!!(navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints)}class ig{}r(ig,"alertMessage",()=>d({de:"Sie müssen sich aus- und wiedereinloggen, damit die gewählte Sprache aktiv wird.",en:"You have to logout/login to activate the selected language."}));var Vs="de",fa=[{id:"de",name:"deutsch",iconClass:"img_flag-german"},{id:"en",name:"english",iconClass:"img_flag-english"}];function d(c){let t=c[Vs];if(!t){for(let e of fa)if(t=c[e.id],t)break;if(!t)return"Missing template for language "+Vs}return t}function ic(c){let t=c[Vs];if(!t){for(let e of fa)if(t=c[e.id],t)break;if(!t)return[0,0]}return t}function j(c){let t=c[Vs];if(!t){for(let i of fa)if(t=c[i.id],t)break;if(!t)return{id:"MissingTemplate",message:"Missing template for language "+Vs}}let e=c.id||"no id";return{message:t,id:e}}class vb{constructor(t,e){r(this,"selectorDivEventListener");this.main=t,this.rootHtmlElement=e}setupLanguageSelector(){let t=this.rootHtmlElement.getElementsByClassName("languageElement");if(t.length==0)return;let e=t.item(0),i=fa.find(n=>n.id==Vs);e.classList.add(i.iconClass),this.selectorDivEventListener&&(e.removeEventListener("click",this.selectorDivEventListener),this.selectorDivEventListener=void 0),e.addEventListener("click",this.selectorDivEventListener=n=>{pn(fa.filter(s=>s.id!=Vs).map(s=>({callback:()=>{this.setLanguage(s.id),alert(ig.alertMessage())},caption:s.name,iconClass:s.iconClass})),n.pageX+2,n.pageY+2)})}setLanguage(t){let e=fa[0];t&&(e=fa.find(i=>i.id.toLowerCase()==t.toLowerCase())),Vs=e.id,this.setupLanguageSelector(),this.main.guiState.language!=e.id&&(this.main.guiState.language=e.id,this.main.gui_state_dirty=!0)}}class Fn{}r(Fn,"wholeWindow",()=>d({de:"Auf Fenstergröße vergrößern",en:"Whole window"})),r(Fn,"backToNormalSize",()=>d({de:"Auf normale Größe zurückführen",en:"Back to normal size"})),r(Fn,"programEnd",()=>d({de:"Programm beendet",en:"Program end"})),r(Fn,"inputNumber",()=>d({de:"Bitte geben Sie eine Zahl ein!",en:"Input any number!"})),r(Fn,"classDiagram",()=>d({de:"Klassendiagramm",en:"Class diagram"})),r(Fn,"output",()=>d({de:"Ausgabe",en:"Output"}));class fo{}r(fo,"code",()=>d({de:"Code",en:"Code"})),r(fo,"testRunner",()=>d({de:"Testrunner",en:"Test runner"})),r(fo,"waitForDatabase",()=>d({de:"Warten auf Datenbank...",en:""}));class Cr{}r(Cr,"errors",()=>d({de:"Fehler",en:"Errors"})),r(Cr,"noErrorsFound",()=>d({de:"Keine Fehler gefunden :-)",en:"No errors found :-)"})),r(Cr,"warning",()=>d({de:"Warnung",en:"Warning"})),r(Cr,"info",()=>d({de:"Info",en:"Info"})),r(Cr,"error",()=>d({de:"Fehler",en:"Error"}));class Bs{}r(Bs,"console",()=>d({de:"Console",en:"Console"})),r(Bs,"emptyConsole",()=>d({de:"Console leeren",en:"Empty console"})),r(Bs,"copyToClipboard",()=>d({de:"Anweisungen aus der Console in die Zwischenablage kopieren",en:"Copy console statements to clipboard"})),r(Bs,"error",()=>d({de:"Fehler",en:"Error"}));class vi{}r(vi,"homework",()=>d({de:"Hausaufgaben",en:"Homework"})),r(vi,"defaultView",()=>d({de:"Normalansicht",en:"default view"})),r(vi,"showRemarks",()=>d({de:"Korrekturen zeigen",en:"Show remarks"})),r(vi,"filingDays",()=>d({de:"Abgabetage",en:""})),r(vi,"givenFiles",()=>d({de:"Abgegebene Dateien",en:"Files"})),r(vi,"workspace",()=>d({de:"Workspace",en:"Workspace"})),r(vi,"file",()=>d({de:"Datei",en:"File"})),r(vi,"dateFiled",()=>d({de:"Abgabe",en:"Date"}));class an{}r(an,"evaluation",()=>d({de:"Bewertung",en:"Evaluation"})),r(an,"points",()=>d({de:"Punkte",en:"Points"})),r(an,"grade",()=>d({de:"Note",en:"Grade"})),r(an,"attendance",()=>d({de:"Anwesend",en:"Attendance"})),r(an,"yes",()=>d({de:"Ja",en:"yes"})),r(an,"no",()=>d({de:"Nein",en:"no"})),r(an,"remark",()=>d({de:"Bemerkung",en:"Remark"}));class X{}r(X,"confirmDeleteFileFolderRecursively",t=>d({de:`Sie sind dabei, einen Ordner mitsamt aller darin enthaltenen Dateien und Unterordner rekursiv zu löschen. Insgesamt betrifft dies ${t} Dateien und Ordner. Diese Opertion kann nicht wieder rückgängig gemacht werden! Sind Sie sicher?`,en:`You are about to delete a folder with all its files and subfolders recursively. This affects a total of ${t} files and folders. This operation cannot be undone! Are you sure?`})),r(X,"confirmDeleteWorkspaceFolderRecursively",t=>d({de:`Sie sind dabei, einen Ordner mitsamt aller darin enthaltenen Workspaces und Unterordner rekursiv zu löschen. Insgesamt betrifft dies ${t} Workspaces und Ordner. Diese Opertion kann nicht wieder rückgängig gemacht werden! Sind Sie sicher?`,en:`You are about to delete a folder with all its workspaces and subfolders recursively. This affects a total of ${t} workspaces and folders. This operation cannot be undone! Are you sure?`})),r(X,"noWorkspaceSelected",()=>d({de:"Kein Workspace ausgewählt",en:"No workspace selected"})),r(X,"newFile",()=>d({de:"Neue Datei...",en:"New file..."})),r(X,"firstChooseWorkspace",()=>d({de:"Bitte wählen Sie zuerst einen Workspace aus.",en:"Choose workspace first."})),r(X,"firstChooseWorkspaceBecauseFolderIsSelected",()=>d({de:"Bitte wählen Sie zuerst einen Workspace aus. Selektiert ist aktuell ein Ordner, kein Workspace.",en:"Choose workspace first. Currently a folder is selected, not a workspace."})),r(X,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar!",en:"Server not reachable!"})),r(X,"noFile",()=>d({de:`Keine Datei vorhanden. !!!! ! ! ! ! Hilf mit beim Datenschutz: ! ! ! ! Bitte achte darauf, keine !!!! personenbezogenen Daten im Programmtext einzugeben! !!!! ! ! !!!!`,en:`No file present. !!!! ! ! ! ! Help with data protection: ! ! ! ! Please make sure not to enter any !!!! personal data in the program text! !!!! ! ! !!!!`})),r(X,"duplicate",()=>d({de:"Duplizieren",en:"Duplicate"})),r(X,"exportAsFile",()=>d({de:"Als Datei exportieren",en:"Export as file"})),r(X,"copy",()=>d({de:"Kopie",en:"copy"})),r(X,"markAsAssignment",()=>d({de:"Als Hausaufgabe markieren",en:"Label as assignment"})),r(X,"removeAssignmentLabel",()=>d({de:"Hausaufgabenmarkierung entfernen",en:"Remove assignment label"})),r(X,"synchronizeWorkspaceWithRepository",()=>d({de:"Workspace mit Repository synchronisieren",en:"Synchronize workspace with repository"})),r(X,"labeledAsAssignment",()=>d({de:"Wurde aus Hausaufgabe abgegeben",en:"Labeled as assignment"})),r(X,"assignmentIsCorrected",()=>d({de:"Korrektur liegt vor",en:"Assignment is corrected",fr:"Devoir corrigé"})),r(X,"WORKSPACES",()=>d({de:"WORKSPACES",en:"WORKSPACES"})),r(X,"newWorkspace",()=>d({de:"Neuer Workspace",en:"New workspace"})),r(X,"selectWorkspace",()=>d({de:"Bitte Workspace selektieren",en:"Select workspace"})),r(X,"error",()=>d({de:"Fehler",en:"Error"})),r(X,"displayOwnWorkspaces",()=>d({de:"Meine eigenen Workspaces anzeigen",en:"Display own workspaces"})),r(X,"importWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace"})),r(X,"exportFolder",()=>d({de:"Ordner exportieren",en:"Export folder"})),r(X,"exportRepository",()=>d({de:"Repository als Datei exportieren",en:"Export repository to file"})),r(X,"exportToFile",()=>d({de:"Workspace als Datei exportieren",en:"Export workspace to file"})),r(X,"distributeToClass",()=>d({de:"An Klasse austeilen",en:"Distribute to class"})),r(X,"workspaceDistributed",(t,e)=>d({de:"Der Workspace "+t+" wurde an die Klasse "+e+` ausgeteilt. Er wird sofort in der Workspaceliste der Schüler/innen erscheinen. Falls das bei einer Schülerin/einem Schüler nicht klappt, bitten Sie sie/ihn, sich kurz aus- und wieder einzuloggen.`,en:"Workspace "+t+" gets distributed to class "+e+" . If it's not visible for a given student, she/he might logout and login to see it."})),r(X,"distributeToStudents",()=>d({de:"An einzelne Schüler/-innen austeilen...",en:"Distribute to individual students..."})),r(X,"createRepository",()=>d({de:"Repository anlegen...",en:"Create repository..."})),r(X,"detachFromRepository",()=>d({de:"Vom Repository loslösen",en:"Detach from Repository"})),r(X,"settings",()=>d({de:"Einstellungen",en:"Settings"})),r(X,"noWorkspace",()=>d({de:"Kein Workspace vorhanden",en:"No workspace"})),r(X,"myWorkspaces",()=>d({de:"Meine WORKSPACES",en:"Own Workspaces"}));class qi{}r(qi,"students",()=>d({de:"Schüler/-innen",en:"Students"})),r(qi,"classes",()=>d({de:"Klassen",en:"classes"})),r(qi,"tests",()=>d({de:"Prüfungen",en:"tests"})),r(qi,"createNewTest",()=>d({de:"Prüfungen verwalten",en:"Manage tests"})),r(qi,"testIsInState",t=>d({de:'Die Prüfung befindet sich im Zustand "'+t+`, daher kann noch keine Schülerliste zur Korrektur angezeigt werden. Klicken Sie auf das Zahnrad rechts oberhalb der Prüfungsliste, um zur Prüfungsverwaltung zu gelangen. Dort können Sie den Zustand der Prüfung ändern.`,en:'This test is in state "'+t+`, therefore a list of participating students cannot be displayed yet. Click on the cogwheel right above this list of tests to go to test administration. There you can manage each tests state.`})),r(qi,"noFile",()=>d({de:"Keine Datei vorhanden",en:"No file"}));class Yn{}r(Yn,"createFolderTopmostLevel",()=>d({de:"Neuen Ordner auf oberster Ebene anlegen",en:"Create folder at topmost level"})),r(Yn,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Yn,"newFolder",()=>d({de:"Neuer Ordner",en:"New Folder"})),r(Yn,"collapseAllFoders",()=>d({de:"Alle Ordner zusammenfalten",en:"Collapse all folders"})),r(Yn,"rename",()=>d({de:"Umbenennen",en:"Rename"})),r(Yn,"createNewFolderBelow",t=>d({de:"Neuen Unterordner anlegen (unterhalb '"+t+"')...",en:"Create new folder (below "+t+"')..."})),r(Yn,"sureDelete",()=>d({de:"Ich bin mir sicher: löschen!",en:"I'm sure: delete!"})),r(Yn,"cannotDeleteNonEmptyFolder",()=>d({de:"Dieser Ordner kann nicht gelöscht werden, da er nicht leer ist.",en:"Can't delete folder as it is not empty."}));class Ai{}r(Ai,"distributeWorkspaceToIndividualStudents",()=>d({de:"Austeilen eines Workspace an einzelne Schüler/-innen",en:"Distribute workspace to individual students"})),r(Ai,"workspace",()=>d({de:"Workspace",en:"Workspace"})),r(Ai,"filterList",()=>d({de:"Liste filtern",en:"Filter list"})),r(Ai,"selectMultiple",()=>d({de:"(Mehrfachauswahl ist durch Halten der Shift- oder Strg-/Cmd-Taste möglich.)",en:"(Select multiple students by holding Shift or Ctrl/Cmd key.)"})),r(Ai,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Ai,"distribute",()=>d({de:"Austeilen",en:"Distribute"})),r(Ai,"studentsSelected",()=>d({de:"Schüler/-in/nen selektiert",en:"student(s) selected"})),r(Ai,"workspaceDistributed",(t,e,i)=>d({de:`Der Workspace ${t} wurde an ${e} Schüler/innen ausgeteilt. Er wird in maximal ${i} s bei jedem Schüler ankommen.`,en:`Workspace ${t} has been distributed to ${e} students. It will be there in max ${i} s.`}));class ii{}r(ii,"reportBug",()=>d({de:"Fehler melden",en:"Report bug"})),r(ii,"bugReport",()=>d({de:"Beschreibung des Fehlers",en:"Bug report"})),r(ii,"sendCopyOfWorkspace",()=>d({de:"Der Fehlermeldung eine Kopie des aktuell offenen Workspaces beifügen",en:"Send copy of workspace"})),r(ii,"email",()=>d({de:"E-Mail-Adresse (für Rückfragen, optional)",en:"Mail (optional)"})),r(ii,"firstName",()=>d({de:"Rufname (für Rückfragen, optional)",en:"First name (optional)"})),r(ii,"lastName",()=>d({de:"Familienname (für Rückfragen, optional)",en:"Last name (optional)"})),r(ii,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(ii,"send",()=>d({de:"Senden",en:"Send"})),r(ii,"thanks",()=>d({de:`Danke für die Fehlermeldung! Der Fehler wurde erfolgreich übermittelt.`,en:"Thank you!"}));class is{}r(is,"speedControl",()=>d({de:"Geschwindigkeitsregler",en:"Speed control"})),r(is,"stepsPerSecond",()=>d({de:"Schritte/s",en:"steps/s"})),r(is,"maximumSpeed",()=>d({de:"Maximale Geschwindigkeit",en:"Maximum speed"})),r(is,"millions",()=>d({de:"Millionen",en:"million"}));class xt{}r(xt,"changePassword",()=>d({de:"Passwort ändern",en:"Change password"})),r(xt,"changePasswordDescription",()=>d({de:"Bitte geben Sie Ihr bisheriges Passwort und darunter zweimal Ihr neues Passwort ein.
Das Passwort muss mindestens 8 Zeichen lang sein und sowohl Buchstaben als auch Zahlen oder Sonderzeichen enthalten.",en:"Please input your old password and your new one (two times).
Your password has to be at least 8 charachters long and must contain letters, digits and special chars."})),r(xt,"oldPassword",()=>d({de:"Altes Passwort",en:"Old password"})),r(xt,"newPassword",()=>d({de:"Neues Passwort",en:"New password"})),r(xt,"repeatNewPassword",()=>d({de:"Neues Passwort wiederholen",en:"Repeat new password"})),r(xt,"pleaseWait",()=>d({de:"Bitte warten...",en:"Please wait..."})),r(xt,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(xt,"ok",()=>d({de:"OK",en:"OK"})),r(xt,"passwordsDontMatch",()=>d({de:"Die zwei eingegebenen neuen Passwörter stimmen nicht überein.",en:"New passwords don't match."})),r(xt,"settingPasswordSuccessful",()=>d({de:"Das Passwort wurde erfolgreich geändert.",en:"Setting new password was successful."}));class Ln{}r(Ln,"fullWidth",()=>d({de:"Editor in voller Breite",en:"Expand editor to full width"})),r(Ln,"defaultWidth",()=>d({de:"Editor in normaler Breite",en:"Shrink editor to default width"})),r(Ln,"presentation",()=>d({de:"Präsentation (Beamer)",en:"Presentation (Beamer)"})),r(Ln,"monitor",()=>d({de:"Monitor",en:"Monitor"}));class Fs{}r(Fs,"workspaceSettings",t=>d({de:"Einstellungen zum Workspace "+t,en:"Settings for workspace "+t})),r(Fs,"usedLibraries",()=>d({de:"A. Verwendete Bibliotheken",en:"A. Used libraries"})),r(Fs,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(Fs,"OK",()=>d({de:"OK",en:"OK"}));class z{static clear(t){for(;t.firstChild;)t.removeChild(t.firstChild);t.textContent=""}static clearAllButGivenClasses(t,...e){let i=[],n;for(;n=t.firstChild;){for(let s of e)if(n.classList.contains(s)){i.push(n);break}t.removeChild(n)}t.textContent="",i.forEach(s=>t.appendChild(s))}static makeDiv(t,...e){let i=document.createElement("div");return e!=null&&i.classList.add(...e.filter(n=>n!=null)),t&&t.appendChild(i),i}static makeElement(t,e,...i){let n=document.createElement(e);return i!=null&&n.classList.add(...i),t&&t.appendChild(n),n}static makeSpan(t,...e){let i=document.createElement("span");return e!=null&&i.classList.add(...e),t.appendChild(i),i}}const $h=class $h{constructor(t,e,i){r(this,"divElement");r(this,"_state","collapsed");r(this,"darkLightState","dark");r(this,"currentIconClass");this._parent=t,this.listener=e,this.divElement=z.makeDiv(t,"jo_exandCollapseComponent"),this.divElement.onpointerup=n=>{n.stopPropagation(),this.toggleState()},this._state=i,this.render()}get state(){return this._state}toggleState(){switch(this._state){case"collapsed":this.setState("expanded",!0);break;case"expanded":this.setState("collapsed",!0);break}}get parent(){return this._parent}setState(t,e=!0){this._state=t,this.render(),e&&this.listener(t)}render(){this.currentIconClass&&this.divElement.classList.remove(this.currentIconClass),this.currentIconClass=$h.iconClasses[this.darkLightState][this._state],this.divElement.classList.add(this.currentIconClass)}setDarkLightState(t){this.darkLightState=t,this.render()}hide(){this.divElement.style.display="none"}show(){this.divElement.style.display=""}};r($h,"iconClasses",{light:{expanded:"img_chevron-down",collapsed:"img_chevron-right"},dark:{expanded:"img_chevron-down-dark",collapsed:"img_chevron-right-dark"}});let Bd=$h;class Vo{constructor(t,e,i,n=[],s=!1,a="prepend"){r(this,"divElement");r(this,"darkLightState","dark");r(this,"isActive",!0);r(this,"currentIconClass");r(this,"currentState",0);r(this,"tag");r(this,"_iconClasses");r(this,"_toolTips");r(this,"_toggleBetweenStates");switch(this._parent=t,this.listener=i,this._toggleBetweenStates=s,this.divElement=z.makeDiv(void 0,"jo_iconButton"),a){case"prepend":t.prepend(this.divElement);break;case"append":t.append(this.divElement);break}Array.isArray(n)||(n=[n]),this._toolTips=n,this.divElement.onpointerup=l=>{l.stopPropagation(),this._toggleBetweenStates&&(this.currentState=(this.currentState+1)%this._iconClasses.length,this.render()),this.listener&&this.listener(l,this.currentState)},Array.isArray(e)||(e=[e]),this._iconClasses=e.map(l=>this.stripDark(l)),this.render()}get parent(){return this._parent}set title(t){this.divElement.title=t}getBottomRight(){const t=this.divElement.getBoundingClientRect();return{bottom:t.bottom,right:t.right}}stripDark(t){return t.endsWith("-dark")?t.substring(0,t.length-5):t}set iconClass(t){t=this.stripDark(t),this._iconClasses[0]=t,this.render()}set state(t){this.currentState=t,this.render()}render(){this.currentIconClass&&this.divElement.classList.remove(this.currentIconClass),this.currentIconClass=this._iconClasses[this.currentState],this.darkLightState=="dark"&&(this.currentIconClass+="-dark"),this.divElement.classList.add(this.currentIconClass),this._toolTips.length>0&&(this._toolTips.length==1?this.divElement.title=this._toolTips[0]:this.divElement.title=this._toolTips[this.currentState])}setDarkLightState(t){this.darkLightState=t,this.render()}setActive(t){this.isActive!=t&&(this.divElement.classList.toggle("jo_iconButton_active"),this.isActive=t)}setVisible(t){this.divElement.style.display=t?"":"none"}remove(){this.divElement.remove()}}class ct{}r(ct,"caption",()=>d({de:"Überschrift",en:"Caption"})),r(ct,"newElement",()=>d({de:"Neues Element anlegen...",en:"Create new element..."})),r(ct,"newFolder",t=>d({de:"Neuen Ordner anlegen (unterhalb "+t+")",en:"Create new folder (as subfolder of "+t+")..."})),r(ct,"rename",()=>d({de:"Umbenennen",en:"Rename"})),r(ct,"delete",()=>d({de:"Löschen",en:"Delete"})),r(ct,"confirmDelete",()=>d({de:"Wirklich löschen?",en:"Are you sure to delete this elements/folders?"})),r(ct,"addElements",()=>d({de:"Elemente hinzufügen",en:"Add elements"})),r(ct,"addFolder",()=>d({de:"Ordner hinzufügen (auf oberster Ebene)",en:"Add folder (at root level)"})),r(ct,"collapseAll",()=>d({de:"Alle Ordner zusammenfalten",en:"Collapse all folders"})),r(ct,"elementsFolders",()=>d({de:"Elemente/Ordner",en:"elements/folders"}));class Fd{constructor(t,e,i,n,s,a,l=!1,h=!1){r(this,"_hasFocus",!1);r(this,"_isRootNode",!1);r(this,"contextmenuHandler");r(this,"_isSelected",!1);r(this,"_readOnly",!1);r(this,"children",[]);r(this,"parent");r(this,"childrenDiv");r(this,"nodeWithChildrenDiv");r(this,"dragAndDropDestinationDiv");r(this,"dropzoneDiv");r(this,"nodeLineDiv");r(this,"marginLeftDiv");r(this,"expandCollapseDiv");r(this,"iconDiv");r(this,"captionDiv");r(this,"rightPartOfCaptionDiv");r(this,"buttonsDiv");r(this,"alwaysVisibleButtonsDiv");r(this,"buttons",[]);r(this,"expandCollapseComponent");r(this,"childrenLineDiv");r(this,"tooltip");r(this,"_iconClass");r(this,"_onClickHandler");r(this,"_iconOnClickHandler");r(this,"_onExpandListener",[]);this._treeview=t,this._isFolder=e,this._caption=i,this._externalObject=s,this._parentKey=a,this._renderCaptionAsHtml=l,this._isRootNode=h;let u=this._treeview.config.parentKeyExtractor;typeof this._parentKey>"u"&&u&&this._externalObject&&(this._parentKey=u(s)),t.addNodeInternal(this),this.render(),this.iconClass=n}get hasFocus(){return this._hasFocus}setFocus(t){t&&this.treeview.unfocusAllNodes(),this._hasFocus=t,this.nodeLineDiv&&this.nodeLineDiv.classList.toggle("jo_treeview_focus",t)}get isSelected(){return this._isSelected}setSelected(t){this._isSelected=t,this.nodeLineDiv&&this.nodeLineDiv.classList.toggle("jo_treeview_selected",t)}get readOnly(){return this._treeview.config.readOnlyExtractor&&this._externalObject?this._treeview.config.readOnlyExtractor(this._externalObject):this._readOnly?!0:this.isRootNode()?!1:this.parent?this.parent.readOnly:!1}set readOnly(t){this._readOnly=t}scrollIntoView(){let t=this.parent;for(;t;)t.expandCollapseComponent.setState("expanded"),t=t.parent;this.getMainDiv().scrollIntoView({behavior:"instant",block:"center"})}get parentKey(){return this._parentKey}get ownKey(){return this._externalObject?this._treeview.config.keyExtractor(this._externalObject):null}set onClickHandler(t){this._onClickHandler=t}set onIconClicked(t){this._iconOnClickHandler=t,this.iconDiv.classList.add("jo_iconButton")}set renderCaptionAsHtml(t){this._renderCaptionAsHtml=t}findAndCorrectParent(){var e;let t=this.treeview.findParent(this);this.parent!=t&&((e=this.parent)==null||e.remove(this),this.parent=t,t==null||t.add(this),this.adjustLeftMarginToDepth())}getMainDiv(){return this.nodeWithChildrenDiv}getParent(){return this.parent}render(){this.nodeWithChildrenDiv||this.buildHtmlScaffolding(),!this.parent&&!this.isRootNode()&&this.findAndCorrectParent(),this.isRootNode()&&(this.treeview.getNodeDiv().appendChild(this.nodeWithChildrenDiv),this.nodeWithChildrenDiv.style.flex="1"),this.tooltip&&(this.nodeLineDiv.title=this.tooltip),!this.isRootNode()&&(this._renderCaptionAsHtml?(this.captionDiv.innerHTML=this.caption,this.captionDiv.classList.toggle("jo_treeview_caption_bold",!1)):(this.captionDiv.textContent=this.caption,this.captionDiv.classList.toggle("jo_treeview_caption_bold",this.isFolder)),this.adjustLeftMarginToDepth())}get externalObject(){return this._externalObject}set externalObject(t){this._externalObject=t}get iconClass(){return this._iconClass}set iconClass(t){this._iconClass!=t&&this.iconDiv&&(this._iconClass&&this.iconDiv.classList.remove(this._iconClass),this.iconDiv.classList.add(t)),this._iconClass=t}set iconTooltip(t){this.iconDiv.title=t}get caption(){return this._caption}set caption(t){this._caption=t,this._renderCaptionAsHtml?this.captionDiv.innerHTML=t:this.captionDiv.textContent=t}get isFolder(){return this._isFolder}set isFolder(t){this._isFolder=t,t?this.expandCollapseComponent.show():this.expandCollapseComponent.hide()}get treeview(){return this._treeview}set treeview(t){this._treeview=t}isRootNode(){return this._isRootNode}buildHtmlScaffolding(){this.nodeWithChildrenDiv=z.makeDiv(void 0,"jo_treeviewNodeWithChildren"),this.isFolder&&(this.dropzoneDiv=z.makeDiv(this.nodeWithChildrenDiv,this._isFolder?"jo_treeviewNode_dropzone":"")),this.dragAndDropDestinationDiv=z.makeDiv(this.nodeWithChildrenDiv,"jo_treeviewNode_dragAndDropDestinationLine"),this.dragAndDropDestinationDiv.style.display="none",this.isRootNode()||(this.nodeLineDiv=z.makeDiv(this.nodeWithChildrenDiv,"jo_treeviewNode"),this.marginLeftDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_marginLeft"),this.expandCollapseDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_expandCollapse"),this.iconDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_icon"),this.iconDiv.onclick=t=>{this._iconOnClickHandler&&(this._iconOnClickHandler(this.externalObject),t.stopPropagation())},this.captionDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_caption"),this.rightPartOfCaptionDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_errors"),this.buttonsDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_buttons"),this.alwaysVisibleButtonsDiv=z.makeDiv(this.nodeLineDiv,"jo_treeviewNode_buttons","jo_treeviewNode_buttons_always_visible"),this.nodeLineDiv.onpointerup=t=>{if(this.treeview.startStopDragDrop(!1),this.treeview.removeDragGhost(),t.button!=2&&this.treeview.config.withSelection)if(t.stopPropagation(),(t.shiftKey||t.ctrlKey)&&this.treeview.config.selectMultiple&&this.treeview.getCurrentlySelectedNodes().length>0)t.shiftKey?this.treeview.expandSelectionTo(this):this.hasFocus||(this.isSelected?this.treeview.removeFromSelection(this):this.treeview.addToSelection(this));else{if(this.treeview.unselectAllNodes(!0),this.setSelected(!0),this.treeview.addToSelection(this),this.setFocus(!0),this.treeview.setLastSelectedElement(this),this.isFolder&&this.expandCollapseComponent.toggleState(),this.treeview.config.selectWholeFolders&&this.isFolder)for(let e of this.getOrderedNodeListRecursively())e.setSelected(!0),this.treeview.addToSelection(e);this._onClickHandler&&this._onClickHandler(this._externalObject),this.treeview.nodeClickedCallback&&this.treeview.nodeClickedCallback(this._externalObject)}}),this.childrenDiv=z.makeDiv(this.nodeWithChildrenDiv,"jo_treeviewChildren"),this.childrenLineDiv=z.makeDiv(this.childrenDiv,"jo_treeviewChildrenLineDiv"),this.expandCollapseComponent=new Bd(this.expandCollapseDiv,t=>{t=="expanded"&&this._onExpandListener.slice().forEach(e=>{e.listener(t),e.once&&this._onExpandListener.splice(this._onExpandListener.indexOf(e),1)}),this.toggleChildrenDiv(t)},"expanded"),this.isRootNode()||(this.captionDiv.onpointerup=()=>{}),this._isFolder||this.expandCollapseComponent.hide(),this.treeview.config.withDeleteButtons&&!this.isRootNode()&&!this.readOnly&&this.addIconButton("img_delete",(t,e,i)=>{let n=async()=>{this.treeview.deleteCallback?await this.treeview.deleteCallback(this.externalObject,this)&&this.treeview.removeNodeAndItsFolderContents(this):this.treeview.removeNodeAndItsFolderContents(this)};this._treeview.config.confirmDelete?pn([{caption:Yn.cancel(),callback:()=>{}},{caption:Yn.sureDelete(),color:"#ff6060",callback:()=>{n()}}],i.pageX+2,i.pageY+2):n()},"Löschen"),this.adjustLeftMarginToDepth(),this.initDragAndDrop(),this.initContextMenu(),vd()&&!this.isRootNode()&&this.addIconButton("img_ellipsis-dark",(t,e,i)=>{this.contextmenuHandler(i)},"Kontextmenü aufrufen",!0)}select(t=!0){this.treeview.unselectAllNodes(!0),this.setSelected(!0),this.treeview.addToSelection(this),t&&(this._onClickHandler&&this._onClickHandler(this._externalObject),this.treeview.nodeClickedCallback&&this.treeview.nodeClickedCallback(this._externalObject))}initContextMenu(){if(this.isRootNode())return;this.contextmenuHandler=i=>{let n=[];if(this.readOnly||(this.treeview.renameCallback!=null&&n.push({caption:ct.rename(),callback:()=>{this.renameNode()}}),vd()&&n.push({caption:ct.delete(),callback:()=>{this.treeview.config.confirmDelete?confirm(ct.confirmDelete())&&this.treeview.removeNodeAndItsFolderContents(this):this.treeview.removeNodeAndItsFolderContents(this)}}),this.isFolder&&this.treeview.config.buttonAddFolders&&(n=n.concat([{caption:ct.newFolder(this.caption),callback:()=>{this._treeview.addNewNode(!0,this)}}]))),this.treeview.contextMenuProvider!=null)for(let s of this.treeview.contextMenuProvider(this._externalObject,this))n.push({caption:s.caption,callback:()=>{s.callback(this._externalObject,this)},color:s.color,subMenu:s.subMenu==null?void 0:s.subMenu.map(a=>({caption:a.caption,callback:()=>{a.callback(this._externalObject,this)},color:a.color}))});i.preventDefault(),i.stopPropagation(),n.length>0&&(this._treeview.contextMenu=pn(n,i.pageX,i.pageY))},this.nodeLineDiv.addEventListener("contextmenu",i=>{this.contextmenuHandler(i)},!1);let t=0,e=0;vd()&&(this.nodeLineDiv.addEventListener("touchstart",i=>{if(this._treeview.contextMenuTimer&&clearTimeout(this._treeview.contextMenuTimer),this._treeview.contextMenuTimer=void 0,i.touches.length>1)return;let n=i.touches[0];t=n.clientX,e=n.clientY,this._treeview.contextMenuTimer=setTimeout(()=>{let s={pageX:n.pageX,pageY:n.pageY,preventDefault:()=>{},stopPropagation:()=>{}};this.contextmenuHandler(s)},900)}),this.nodeLineDiv.addEventListener("touchend",i=>{this._treeview.contextMenuTimer&&clearTimeout(this._treeview.contextMenuTimer),this._treeview.contextMenuTimer=void 0}),this.nodeLineDiv.addEventListener("touchmove",i=>{let n=i.touches[0];(Math.abs(n.clientX-t)>10||Math.abs(n.clientY-e)>10)&&this._treeview.contextMenuTimer&&clearTimeout(this._treeview.contextMenuTimer)}))}renameNode(){eg(this.captionDiv,void 0,async t=>{var e,i;if(t!=this._caption){if(this.treeview.renameCallback){let n=await this.treeview.renameCallback(this._externalObject,t,this);n.success?(this.caption=n.correctedName??t,this.treeview.config.comparator&&this.treeview.config.orderBy=="comparator"&&((e=this.parent)==null||e.sort())):this.caption=this._caption;return}this.caption=t,this.treeview.config.comparator&&this.treeview.config.orderBy=="comparator"&&((i=this.parent)==null||i.sort())}},{start:0,end:this._caption.length})}findNonFolderElementContainingPoint(t){let e=null;for(let i of this.children.filter(n=>!n.isFolder)){let n=i.nodeLineDiv.getBoundingClientRect();if(t>=n.top&&t<=n.top+n.height){e=i;break}}return e}getDragAndDropIndexForInsertKindAsElement(t,e){let n=this.nodeWithChildrenDiv.getBoundingClientRect().top;if(!this.isRootNode()){let a=this.nodeLineDiv.getBoundingClientRect();if(!this.isFolder&&e<=a.top+a.height/2)return{index:-1,insertPosY:a.top-n}}for(let a=0;a0&&(s=this.children[this.children.length-1].nodeWithChildrenDiv.getBoundingClientRect().bottom-n),{index:this.children.length,insertPosY:s}}containsNode(t){if(this==t)return!0;for(let e of this.children)if(e.containsNode(t))return!0;return!1}selectionContainsThisNode(){for(let t of this.treeview.getCurrentlySelectedNodes())if(t.containsNode(this))return!0;return!1}initDragAndDrop(){vd(),this.treeview.config.isDragAndDropSource&&this.nodeWithChildrenDiv.setAttribute("draggable","true"),this.nodeWithChildrenDiv.ondragstart=t=>{var e;if(t.stopPropagation(),(e=this._treeview.contextMenu)==null||e.hide(),this.treeview.isSelected(this)||(this.treeview.unselectAllNodes(!0),this.treeview.addToSelection(this),this.setFocus(!0)),this.treeview.config.selectWholeFolders&&this.isFolder)for(let i of this.getOrderedNodeListRecursively())i.setSelected(!0),this.treeview.addToSelection(i);li.currentDragSource=this._treeview,t.dataTransfer&&(t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage(this.treeview.getDragGhost(),-10,10)),setTimeout(()=>{this.treeview.startStopDragDrop(!0)},100)},this.nodeWithChildrenDiv.ondragend=()=>{this.treeview.startStopDragDrop(!1),this.treeview.removeDragGhost()},(this.isFolder||this.isRootNode())&&(this.dropzoneDiv.ondragover=t=>{var i,n;(i=this._treeview.contextMenu)==null||i.hide();let e=this._treeview.getCurrentDragAndDropSource();if(e){if(t.dataTransfer)if(e){let s=e.defaultDragKind;t.shiftKey&&e.dragKindWithShift&&(s=e.dragKindWithShift),t.ctrlKey&&e.dragKindWithCtrl&&(s=e.dragKindWithCtrl),t.dataTransfer.dropEffect=s}else return;switch(e.dropInsertKind){case"asElement":this.dragAndDropDestinationDiv.classList.toggle("jo_treeview_invald_dragdestination",!1);let s=this.getDragAndDropIndexForInsertKindAsElement(t.pageX,t.pageY);if(s.index<0){(n=this.parent)!=null&&n.dropzoneDiv.ondragover&&(this.parent.dropzoneDiv.ondragover(t),this.dropzoneDiv.ondragleave(t));return}if(this.dragAndDropDestinationDiv.style.top=s.insertPosY-1+"px",this.dragAndDropDestinationDiv.style.display="block",this.selectionContainsThisNode()&&e.treeview==this.treeview){this.dragAndDropDestinationDiv.classList.toggle("jo_treeview_invald_dragdestination",!0);return}this.nodeWithChildrenDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!0);break;case"intoElement":let l=this.findNonFolderElementContainingPoint(t.pageY);if(!l)return;for(let h of this.children)h.nodeLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",h==l);break}t.stopPropagation(),t.preventDefault()}},this.dropzoneDiv.ondragleave=t=>{if(t.target.classList.contains("jo_treeviewNode_caption")){t.stopPropagation();return}this.dragAndDropDestinationDiv.style.display="none",this.nodeWithChildrenDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);for(let e of this.children)e.nodeLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);t.stopPropagation()},this.dropzoneDiv.onpointerdown=()=>{this._treeview.startStopDragDrop(!1)},this.dropzoneDiv.ondrop=async t=>{var n,s;this.dragAndDropDestinationDiv.style.display="none",this.nodeWithChildrenDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);for(let a of this.children)a.nodeLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1);t.preventDefault(),t.stopPropagation();let e=this._treeview.getCurrentDragAndDropSource();if(!e)return;let i=e.defaultDragKind;switch(t.shiftKey&&e.dragKindWithShift&&(i=e.dragKindWithShift),t.ctrlKey&&e.dragKindWithCtrl&&(i=e.dragKindWithCtrl),e.dropInsertKind){case"asElement":let a=this.getDragAndDropIndexForInsertKindAsElement(t.pageX,t.pageY).index;if(a<0&&(s=(n=this.parent)==null?void 0:n.dropzoneDiv)!=null&&s.ondrop){this.parent.dropzoneDiv.ondrop(t);return}this._treeview.notifyDropEvent(e.treeview,this,a,i);break;case"intoElement":let l=this.findNonFolderElementContainingPoint(t.pageY);l&&this._treeview.notifyDropEvent(e.treeview,l,0,i);break}})}insertNodes(t,e){this.isFolder&&(e.forEach(i=>{i.parent&&i.parent.remove(i),i.parent=this}),this.children.splice(t,0,...e),this.children.forEach(i=>{this.childrenDiv.appendChild(i.nodeWithChildrenDiv)}),this._treeview.adjustAllLeftMarginsToDepth(),this._treeview.config.orderBy=="comparator"&&this.sort())}async reorder(){let t=this._treeview.config.orderSetter;if(t){for(let e=0;e{e(this._externalObject,this,l)},i);return this.buttons.push(a),a}getIconButtonByTag(t){return this.buttons.find(e=>e.tag==t)}destroy(t=!0){var e;(e=this.parent)==null||e.remove(this),this.nodeWithChildrenDiv.remove(),t&&this.treeview.removeNodeAndItsFolderContents(this)}add(t){let e=this.treeview.config.comparator,i=this._treeview.config.orderExtractor;if(this._treeview.config.orderBy=="user-defined"&&i&&(e=(n,s)=>Math.sign(i(n)-i(s))),this.children.indexOf(t)<0){let n=this.children.length;if(e&&t.externalObject){for(;n>0&&e(t.externalObject,this.children[n-1].externalObject)<0;)n--;this.children.splice(n,0,t)}else this.children.push(t);if(this.childrenDiv&&t.getMainDiv())if(n=0&&this.children.splice(e,1),t.getMainDiv().remove()}sort(t){if(!t){let e=this._treeview.config.comparator;t=e;let i=this._treeview.config.orderExtractor;this._treeview.config.orderBy=="user-defined"&&i&&(t=(n,s)=>{let a=Math.sign(i(n)-i(s));return a==0&&this._treeview.config.comparator&&(a=e(n,s)),a})}t&&(this.children=this.children.sort((e,i)=>t(e.externalObject,i.externalObject)),z.clearAllButGivenClasses(this.childrenDiv,"jo_treeviewChildrenLineDiv"),this.children.forEach(e=>{this.childrenDiv.appendChild(e.getMainDiv()),e.sort(t)}))}getDepth(){return this.parent?this.parent.getDepth()+1:0}getOrderedNodeListRecursively(){let t=[];return this.children.forEach(e=>{t.push(e),t=t.concat(e.getOrderedNodeListRecursively())}),t}removeChildren(){this.children=[],z.clear(this.childrenDiv)}detach(){this.parent==this.treeview.rootNode&&this.nodeWithChildrenDiv.parentNode&&this.treeview.rootNode.childrenDiv.removeChild(this.nodeWithChildrenDiv);let t=this.parent.children.indexOf(this);t>=0&&this.parent.children.splice(t,1),this.treeview.nodes.splice(this.treeview.nodes.indexOf(this),1)}attachAfterDetaching(){var t;this.treeview.nodes.indexOf(this)<0&&(this.treeview.nodes.push(this),(t=this.parent)==null||t.add(this))}addExpandListener(t,e=!1){this._onExpandListener.push({listener:t,once:e})}removeAllExpandListeners(){this._onExpandListener=[]}setTooltip(t){this.tooltip=t,this.nodeLineDiv&&(this.nodeLineDiv.title=t)}getChildren(){return this.children}pulse(){this.nodeLineDiv.classList.toggle("jo_treeview_pulse",!0)}setCaptionColor(t){this.captionDiv.style.color=t}expand(){this.parent&&this.parent.expand(),this.expandCollapseComponent.setState("expanded")}collapse(){this.expandCollapseComponent.setState("collapsed")}}class Ab{constructor(t,e){r(this,"div");r(this,"yStart");r(this,"divsStartHeights",[]);r(this,"transparentOverlay");this.accordion=t,this.treeviewBelowIndex=e;let i=t.ElementList[e].getOuterDiv();this.div=z.makeDiv(i,"jo_treeview_splitter"),this.div.style.display="none",this.enable()}enable(){this.div.style.display="",this.div.onpointerdown=t=>{this.div.style.backgroundColor="#800000",this.yStart=t.pageY;let e=this.accordion.ElementList;this.divsStartHeights=[];for(let i of e){let n=i.getOuterDiv().getBoundingClientRect().height;this.divsStartHeights.push(n),i.getOuterDiv().style.height=n+"px",i.getOuterDiv().style.flex="none"}this.transparentOverlay=z.makeDiv(document.body),this.transparentOverlay.style.cursor="ns-resize",this.transparentOverlay.style.position="absolute",this.transparentOverlay.style.left="0",this.transparentOverlay.style.top="0",this.transparentOverlay.style.bottom="0",this.transparentOverlay.style.right="0",this.transparentOverlay.style.zIndex="1000",this.transparentOverlay.onpointermove=i=>{this.onPointerMove(i.pageY),i.stopPropagation()},this.transparentOverlay.onmousemove=i=>{i.stopPropagation()},this.transparentOverlay.onpointerup=()=>{this.transparentOverlay.remove(),this.div.style.backgroundColor=""}}}onPointerMove(t){let e=t-this.yStart,i=this.accordion.ElementList,n=this.divsStartHeights.slice();if(e>0){let s=e;for(let a=this.treeviewBelowIndex;a=s){n[a]-=s,s=0;break}else s-=h,n[a]-=h}n[this.treeviewBelowIndex-1]+=e-s}else{let s=e;for(let a=this.treeviewBelowIndex-1;a>=0;a--){let l=i[a];if(l.isCollapsed())continue;let h=l.getMinHeight()-n[a];if(!(h>=0))if(h<=s){n[a]+=s,s=0;break}else s-=h,n[a]+=h}n[this.treeviewBelowIndex]-=e-s}for(let s=0;s{clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.onResize(!1)},200)}).observe(document.body)}get mainDiv(){return this._mainDiv}set mainDiv(t){this._mainDiv=t}remove(){this._mainDiv.remove()}hide(){this._mainDiv.style.display="none"}show(){this._mainDiv.style.display="",this.onResize(!0)}onResize(t){let e=this.outerElementWithCorrectSize.getBoundingClientRect().height-this.ElementList.length*1,i=0,n=0;for(let a of this.ElementList)a.isCollapsed()||(n+=a.getTargetVariableHeight()),i+=a.getFixedHeight();let s=n==0?0:(e-i)/n;for(let a of this.ElementList)a.getOuterDiv().style.flexBasis="",a.getOuterDiv().style.flexGrow="";for(let a of this.ElementList){let l=(a.isCollapsed()?0:a.getTargetVariableHeight())*s+a.getFixedHeight();a.getOuterDiv().style.height=l+"px",t&&!a.isCollapsed()&&(a._lastExpandedHeight=l)}}addTreeview(t){this.ElementList.push(t),this.ElementList.length>1&&this.splitterList.push(new Ab(this,this.ElementList.length-1));let e=this._mainDiv.getElementsByClassName("jo_treeview_dummy");for(let i=0;i{this.isCollapsed()?(this._lastExpandedHeight=this._outerDiv.getBoundingClientRect().height,this.innerDiv.style.display="none"):this.innerDiv.style.display="",this.treeviewAccordion&&this.treeviewAccordion.onResize(!1)},"expanded")}captionLineAddIconButton(t,e,i,n){switch(e){case"left":return new Vo(this.captionLineButtonsLeftDiv,t,i,n);case"right":return new Vo(this.captionLineButtonsRightDiv,t,i,n)}}captionLineAddElementToButtonDiv(t,e){switch(e){case"left":this.captionLineButtonsLeftDiv.prepend(t);break;case"right":this.captionLineButtonsRightDiv.prepend(t);break}}setCaption(t){this.captionLineTextDiv.textContent=t}isCollapsed(){return this.captionLineExpandCollapseComponent.state=="collapsed"}setFlexWeight(t){this._outerDiv.style.flexGrow=t,this.accordionElementConfig.minHeight>0&&(this._outerDiv.style.flexBasis=this.accordionElementConfig.minHeight+"px")}}const Ih=class Ih extends Qm{constructor(e,i){super(e,i);r(this,"contextMenuTimer");r(this,"contextMenu");r(this,"nodes",[]);r(this,"rootNode");r(this,"currentSelection",[]);r(this,"lastSelectedElement");r(this,"dragDropDestinations",[]);r(this,"dragDropSources",[]);r(this,"addElementsButton");r(this,"addFolderButton");r(this,"config");r(this,"_dropEventCallback");r(this,"_renameCallback");r(this,"_newNodeCallback");r(this,"_deleteCallback");r(this,"_contextMenuProvider");r(this,"_nodeClickedCallback");r(this,"_orderChangedCallback");Kp(this.parentElement,this.parentElement,{forceListen:!1,dragThresholdPixels:15,isPressHoldMode:!0});let n={keyExtractor:s=>s,parentKeyExtractor:void 0,orderBy:"comparator",captionLine:{enabled:!0,text:ct.caption()},withFolders:!0,withDeleteButtons:!0,confirmDelete:!1,isDragAndDropSource:!0,contextMenu:{messageNewNode:ct.newElement(),messageNewFolder:s=>ct.newFolder(s),messageRename:ct.rename()},minHeight:150,initialExpandCollapseState:"expanded",buttonAddFolders:!0,buttonCollapseAll:!0,buttonAddElements:!0,buttonAddElementsCaption:ct.addElements(),withSelection:!0,selectMultiple:!0,selectWholeFolders:!1};this._lastExpandedHeight=(i==null?void 0:i.minHeight)??100,i?(i.contextMenu&&(i.contextMenu=Object.assign(n.contextMenu,i.contextMenu)),this.config=Object.assign(n,i)):this.config=n,this.rootNode=new Fd(this,!0,"Root",void 0,void 0,null,null,!0),this.buildCaption()}get dropEventCallback(){return this._dropEventCallback}set dropEventCallback(e){this._dropEventCallback=e}get renameCallback(){return this._renameCallback}set renameCallback(e){this._renameCallback=e}get newNodeCallback(){return this._newNodeCallback}set newNodeCallback(e){this._newNodeCallback=e}get deleteCallback(){return this._deleteCallback}set deleteCallback(e){this._deleteCallback=e}get contextMenuProvider(){return this._contextMenuProvider}set contextMenuProvider(e){this._contextMenuProvider=e}set nodeClickedCallback(e){this._nodeClickedCallback=e}get nodeClickedCallback(){return this._nodeClickedCallback}get orderChangedCallback(){return this._orderChangedCallback}set orderChangedCallback(e){this._orderChangedCallback=e}configureCaptionAsDropDestination(){this.captionLineDiv.ondragover=e=>{let i=this.getCurrentDragAndDropSource();if(i&&i.dropInsertKind!="intoElement"){if(e.dataTransfer)if(i){let n=i.defaultDragKind;e.shiftKey&&i.dragKindWithShift&&(n=i.dragKindWithShift),e.ctrlKey&&i.dragKindWithCtrl&&(n=i.dragKindWithCtrl),e.dataTransfer.dropEffect=n}else return;this.captionLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!0),this.innerDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!0),e.stopPropagation(),e.preventDefault()}},this.captionLineDiv.ondragleave=e=>{this.captionLineDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1),this.innerDiv.classList.toggle("jo_treeviewNode_highlightDragDropDestination",!1)},this.captionLineDiv.ondrop=e=>{this.captionLineDiv.ondragleave(e),e.preventDefault(),e.stopPropagation();let i=this.getCurrentDragAndDropSource();if(!i)return;let n=i.defaultDragKind;e.shiftKey&&i.dragKindWithShift&&(n=i.dragKindWithShift),e.ctrlKey&&i.dragKindWithCtrl&&(n=i.dragKindWithCtrl),i.dropInsertKind!="intoElement"&&this.notifyDropEvent(i.treeview,this.rootNode,0,n)}}addDragDropSource(e){this.dragDropSources.push(e),e.treeview.dragDropDestinations.push(this),this.dragDropSources.length==1&&this.configureCaptionAsDropDestination()}getNodeDiv(){return this._innerDiv}buildCaption(){this.config.buttonAddFolders&&(this.addFolderButton=this.captionLineAddIconButton("img_add-folder-dark","right",()=>{this.addNewNode(!0)},ct.addFolder())),this.config.buttonAddElements&&(this.addElementsButton=this.captionLineAddIconButton("img_add-dark","right",()=>{let e=this.addElementsButton.getBottomRight();this.buttonAddElementsClicked(e.right,e.bottom)},this.config.buttonAddElementsCaption)),this.config.buttonAddFolders&&this.config.buttonCollapseAll&&this.captionLineAddIconButton("img_collapse-all-dark","left",()=>{this.collapseAllButRootnode()},ct.collapseAll())}buttonAddElementsClicked(e,i){let n=[];if(this.config.addElementsOptions&&this.config.addElementsOptions().length>1){for(let s of this.config.addElementsOptions())n.push({caption:s.caption,iconClass:s.iconClass,callback:()=>{s.object,this.addNewNode(!1,void 0,s.object)}});pn(n,e,i)}else this.addNewNode(!1)}addNewNode(e,i,n){if(!i){let a=this.getCurrentlySelectedNodes();if(a.length>0){let l=a[0];for(;!l.isFolder&&l.getParent();)l=l.getParent();l.isFolder&&(i=l)}}i&&i.expand();let s=this.addNode(e,"",e?void 0:this.config.defaultIconClass,null,i==null?void 0:i.ownKey);eg(s.captionDiv,s.captionDiv,async a=>{if(s.caption=a,this.newNodeCallback){let l=await this.newNodeCallback(a,s,n);l==null?this.removeNodeAndItsFolderContents(s):(s.externalObject=l,this.selectNodeAndSetFocus(s,!1),i&&i.sort(),s.scrollIntoView())}})}addNode(e,i,n,s,a){let l=new Fd(this,e,i,n,s,a);return this.adjustFoldersByExternalObjectRelations(),l}addNodeInternal(e){this.nodes.indexOf(e)<0&&this.nodes.push(e)}findParent(e){let i=e.parentKey==null?this.rootNode:this.nodes.find(n=>n.ownKey==e.parentKey);if(i==e&&(i=null),i!=null){if(i.isRootNode())return i;let n=i;do n=n.getParent();while(n!=null&&n!=i&&n!=e&&!n.isRootNode());n!=null&&!n.isRootNode()&&(i=void 0)}return i??this.rootNode}unfocusAllNodes(){this.nodes.forEach(e=>e.setFocus(!1))}selectElement(e,i){if(!e){this.unselectAllNodes(!0);return}let n=this.findNodeByElement(e);this.selectNodeAndSetFocus(n,i)}selectNodeAndSetFocus(e,i){e&&(e.select(i),e.setFocus(!0),this.lastSelectedElement=e,e.expand(),(typeof this.config.scrollToSelectedElement>"u"||this.config.scrollToSelectedElement)&&e.scrollIntoView())}unselectAllNodes(e){this.nodes.forEach(i=>{i.setSelected(!1)}),this.currentSelection=[]}addToSelection(e){this.currentSelection.indexOf(e)<0&&this.currentSelection.push(e),e.setSelected(!0)}removeFromSelection(e){let i=this.currentSelection.indexOf(e);i>=0&&(this.currentSelection.splice(i,1),e.setSelected(!1))}setLastSelectedElement(e){this.lastSelectedElement=e}getOrderedNodeListRecursively(){return this.rootNode.getOrderedNodeListRecursively()}expandSelectionTo(e){if(this.lastSelectedElement){let i=this.rootNode.getOrderedNodeListRecursively(),n=i.indexOf(this.lastSelectedElement),s=i.indexOf(e);if(n>=0&&s>=0){if(s=0&&this.nodes.splice(i,1),e.destroy(!1)}removeElementAndItsFolderContents(e){let i=this.findNodeByElement(e);i&&this.removeNodeAndItsFolderContents(i)}findNodeByElement(e){return this.nodes.find(i=>i.externalObject==e)}setIconClassForElement(e,i){let n=this.findNodeByElement(e);n&&(n.iconClass=i)}getCurrentlySelectedNodes(){return this.currentSelection}getOrderedListOfCurrentlySelectedNodes(){let e=[];for(let i of this.getOrderedNodeListRecursively())this.currentSelection.indexOf(i)>=0&&e.push(i);return e}startStopDragDrop(e){this._outerDiv.classList.toggle("jo_dragdrop",e);for(let i of this.dragDropDestinations)i._outerDiv.classList.toggle("jo_dragdrop",e);e||this.nodes.forEach(i=>i.stopDragAndDrop())}getDragGhost(){let e=document.createElement("div");return e.classList.add("jo_treeview_drag_ghost"),e.style.top="-10000px",this.currentSelection.length==1?e.textContent=this.currentSelection[0].caption:e.textContent=this.currentSelection.length+" "+ct.elementsFolders(),document.body.appendChild(e),e}removeDragGhost(){let e=document.getElementsByClassName("jo_treeview_drag_ghost");for(let i=0;i=0}clear(){this.nodes=[this.rootNode],this.rootNode.removeChildren()}detachAllNodes(){for(let e of this.nodes.slice())e!==this.rootNode&&e.detach()}sort(){var e;(e=this.rootNode)==null||e.sort()}adjustFoldersByExternalObjectRelations(){let e=this.nodes.filter(a=>!a.isRootNode()&&a.parentKey!=null&&a.getParent()==this.rootNode);if(e.length==0)return;let i=new Map;for(let a of this.rootNode.getOrderedNodeListRecursively())a.isFolder&&e.indexOf(a)<0&&i.set(a.ownKey,a);let n=[],s=-1;for(;n.length>s;){s=n.length;for(let a of e.slice())i.get(a.parentKey)!=null&&(n.push(a),a.isFolder&&i.set(a.ownKey,a),e.splice(e.indexOf(a),1))}for(let a of n)a.findAndCorrectParent();this.adjustAllLeftMarginsToDepth()}adjustAllLeftMarginsToDepth(){for(let e of this.nodes)e.adjustLeftMarginToDepth()}setVisible(e){this._outerDiv.style.display=e?"":"none"}size(e){return e?this.nodes.length:this.nodes.filter(i=>!i.isFolder).length}notifyDropEvent(e,i,n,s){this.dropEventCallback&&this.dropEventCallback(e,i,n,s)}getCurrentDragAndDropSource(){return this.dragDropSources.find(e=>e.treeview==Ih.currentDragSource)}hasDragAndDropSources(){return this.dragDropSources.length>0}collapseAllButRootnode(){for(let e of this.nodes.filter(i=>!i.isRootNode()))e.expandCollapseComponent.setState("collapsed")}getAllExternalObjects(){return this.nodes.filter(e=>!e.isRootNode()&&e.externalObject).map(e=>e.externalObject)}reduceNodesToMove(e){let i=e.slice();for(let n of e)n.isFolder&&(i=i.filter(s=>s.getParent()!=n));return i}};r(Ih,"currentDragSource",null);let li=Ih;var Re={Java:{name:"Java",monacoLanguageSelector:"myJava",fileEndingWithOutDot:"java",translatedName:()=>"Java",workspaceCssClass:c=>c?"img_workspace-java-repository-dark":"img_workspace-java-dark"},ByAssembly:{name:"ByAssembly",monacoLanguageSelector:"ByAssembly",fileEndingWithOutDot:"asm",translatedName:()=>d({de:"Einfache Maschinensprache (Assembler)",en:"Simple Machine language (Assembler)",fr:"Langage machine simple (assembleur)"}),workspaceCssClass:c=>c?"img_workspace-assembly-repository-dark":"img_workspace-assembly-dark"}};class Gi{static fileTypeToIconClass(t){for(let e of this.filetypes)if(e.file_type==t)return e.iconclass;return"java"}static filenameToFileType(t,e){for(let i of this.filetypes)if(t.endsWith(i.suffix))return i;if(e){let i=this.filetypes.find(n=>n.suffix=="."+e.fileEndingWithOutDot);if(i)return i}return this.filetypes[0]}}r(Gi,"filetypes",[{name:"Textdatei",file_type:1,iconclass:"img_file-dark-text",language:"text",suffix:".txt"},{name:"Java-Quelltext",file_type:0,iconclass:"img_file-dark-java",language:Re.Java.monacoLanguageSelector,suffix:"."+Re.Java.fileEndingWithOutDot},{name:"JSON-Datei",file_type:1,iconclass:"img_file-dark-json",language:"json",suffix:".json"},{name:"XML-Datei",file_type:1,iconclass:"img_file-dark-xml",language:"xml",suffix:".xml"},{name:"CSV-Datei",file_type:1,iconclass:"img_file-dark-csv",language:"csv",suffix:".csv"},{name:"Markup",file_type:1,iconclass:"img_file-dark-md",language:"md",suffix:".md"},{name:"Assembler-Quelltext",file_type:0,iconclass:"img_file-dark-assembly",language:Re.ByAssembly.monacoLanguageSelector,suffix:"."+Re.ByAssembly.fileEndingWithOutDot}]);class wi{}r(wi,"watch",()=>d({de:"BEOBACHTEN",en:"WATCH"})),r(wi,"files",()=>d({de:"DATEIEN",en:"FILES"})),r(wi,"threads",()=>d({de:"THREADS",en:"THREADS"})),r(wi,"callStack",()=>d({de:"CALL STACK",en:"CALL STACK"})),r(wi,"variables",()=>d({de:"VARIABLEN",en:"VARIABLES"})),r(wi,"more",()=>d({de:"weitere ...",en:"more ..."})),r(wi,"object",()=>d({de:"Objekt",en:"object"})),r(wi,"mainProgram",()=>d({de:"Hauptprogramm",en:"main program"}));class ng{constructor(t,e){r(this,"treeviewAccordion");r(this,"fileTreeview");this.debuggerDiv=t,this.main=e,this.treeviewAccordion=new Um(t,t.parentElement.parentElement)}remove(){this.treeviewAccordion.remove()}hide(){var t;this.debuggerDiv.style.display="none",this.treeviewAccordion.hide(),(t=this.fileTreeview)==null||t.clear()}show(){if(this.fileTreeview){let t=this.main.getCurrentWorkspace();if(this.fileTreeview.clear(),t){let e=t.getFiles().slice();for(let i of e)this.fileTreeview.addNode(i.isFolder,i.name,i.isFolder?void 0:Gi.filenameToFileType(i.name,this.main.getCurrentProgrammingLanguage()).iconclass,i);this.fileTreeview.sort()}}this.debuggerDiv.style.display="block",this.treeviewAccordion.show()}initFileTreeview(){this.fileTreeview=new li(this.treeviewAccordion,{captionLine:{enabled:!0,text:wi.files()},buttonAddElements:!1,flexWeight:"1",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,withSelection:!0,minHeight:50,defaultIconClass:"img_file-dark-java",comparator:(t,e)=>t.name>e.name?1:t.namet.id,parentKeyExtractor:t=>t.parent_folder_id,orderExtractor:t=>(t==null?void 0:t.sorting_order)||0,orderSetter(t,e){t.sorting_order=e},orderBy:this.main.getSettings().getValue("explorer.fileOrder")}),this.fileTreeview.nodeClickedCallback=t=>{var e,i;if(!t.isFolder){let n=this.main.getMainEditor();(e=this.main.projectExplorer.lastOpenFile)==null||e.saveViewState(n),n.updateOptions({readOnly:(i=this.main.getCurrentWorkspace())==null?void 0:i.readonly}),n.setModel(t.getMonacoModel()),t.restoreViewState(n)}}}}class He{}r(He,"AssemblyDebuggerRegistersCaption",()=>d({de:"Register",en:"Registers",fr:"Registres"})),r(He,"StatusRegisterCaption",()=>d({de:"Statusregister",en:"Status Register",fr:"Registre de statut"})),r(He,"FlagString",t=>d({de:`${t}-flag:`,en:`${t} flag:`,fr:`${t}-flag:`})),r(He,"AssemblyDebuggerCurrentInstructionCaption",()=>d({de:"Aktuelle Anweisung",en:"Current Instruction",fr:"Instruction actuelle"})),r(He,"NoInstructionAtCurrentPosition",()=>d({de:"Keine Anweisung an aktueller Position",en:"No instruction at current position",fr:"Aucune instruction à la position actuelle"})),r(He,"InMemory",()=>d({de:"Im Speicher:",en:"In memory:",fr:"En mémoire:"})),r(He,"Assembly",()=>d({de:"Assembler:",en:"Assembly:",fr:"Assembleur:"})),r(He,"Description",()=>d({de:"Beschreibung:",en:"Description:",fr:"Description:"})),r(He,"MemoryTabCaption",()=>d({de:"Speicher",en:"Memory",fr:"Mémoire"})),r(He,"MemoryTabFrom",()=>d({de:"Von:",en:"From:",fr:"De:"})),r(He,"MemoryTabTo",()=>d({de:"Bis:",en:"To:",fr:"À:"})),r(He,"MemoryTabDecimal",()=>d({de:"Dezimal",en:"Decimal",fr:"Décimal"})),r(He,"MemoryTabHexadecimal",()=>d({de:"Hexadezimal",en:"Hexadecimal",fr:"Hexadécimal"})),r(He,"MemoryTabShowProgramLocation",()=>d({de:"Lage des Programms im Speicher anzeigen",en:"Show program location in memory",fr:"Afficher l'emplacement du programme dans la mémoire"}));class wb extends Qm{constructor(e){super(e,{captionLine:{enabled:!0,text:He.AssemblyDebuggerCurrentInstructionCaption()}});r(this,"inMemoryHeading");r(this,"inMemoryDiv");r(this,"assemblyHeading");r(this,"assemblyDiv");r(this,"descriptionHeading");r(this,"descriptionDiv")}updateView(e){this.initView(e);let i=e.getMemory().dump(),n=e.getStatementLengthAtProgramCounter()-1,s=i.slice(e.getProgramCounter(),e.getProgramCounter()+1+n);if(s.length===0){this.noInstructionAtCurrentPosition();return}this.inMemoryDiv.textContent=`${s.map(h=>h.toString(10)).join(", ")}`;let a=e.getDescriptionForCurrentInstruction();a=a||"",a=a.replaceAll("//","");let l=a.indexOf(":");if(l>0&&l<30){let h=a.substring(l+1).trim(),u=a.substring(0,l).trim();this.descriptionDiv.textContent=h,Q.colorize(u,Re.ByAssembly.monacoLanguageSelector,{}).then(m=>{this.assemblyDiv.innerHTML=m})}else this.descriptionDiv.textContent=a,this.assemblyDiv.textContent=""}noInstructionAtCurrentPosition(){this.inMemoryDiv.textContent=He.NoInstructionAtCurrentPosition(),this.descriptionDiv.textContent=""}initView(e){this.inMemoryDiv||(this.innerDiv.classList.add("jo_assembly-current-instruction-view"),this.inMemoryHeading=z.makeDiv(this.innerDiv,"jo_assembly-inmemory-heading"),this.inMemoryHeading.textContent=He.InMemory(),this.inMemoryDiv=z.makeDiv(this.innerDiv,"jo_assembly-inmemory-div"),this.assemblyHeading=z.makeDiv(this.innerDiv,"jo_assembly-assembly-heading"),this.assemblyHeading.textContent=He.Assembly(),this.assemblyDiv=z.makeDiv(this.innerDiv,"jo_assembly-assembly-div"),this.descriptionHeading=z.makeDiv(this.innerDiv,"jo_assembly-statement-description-heading"),this.descriptionHeading.textContent=He.Description(),this.descriptionDiv=z.makeDiv(this.innerDiv,"jo_assembly-statement-description-div"))}}class kb{constructor(t,e){r(this,"valueDiv");let i=z.makeDiv(t,"jo_register-div"),n=z.makeDiv(i,"jo_register-name-div");n.textContent=e,this.valueDiv=z.makeDiv(i,"jo_register-value-div"),this.valueDiv.textContent="0"}setValue(t,e=10){this.valueDiv.textContent=t.toString()+" (hex: 0x"+t.toString(16).toUpperCase()+")"}}class Cb{constructor(t,e){r(this,"registerNameDiv");r(this,"valueDivs");r(this,"registerDiv");this.registerDiv=z.makeDiv(t,"jo_register-div"),this.registerNameDiv=z.makeDiv(this.registerDiv,"jo_register-name-div"),this.registerNameDiv.textContent=He.StatusRegisterCaption()}updateValues(t){this.initValueDivs(t);for(let e=0;e{let n=this.main;n.workspacesOwnerId!=n.user.id?i.isUndoing||i.isRedoing||(this.text_before_revision==null||this.student_edited_after_revision)&&(this.student_edited_after_revision=!1,this.monacoModel.undo(),this.text_before_revision=this.monacoModel.getValue(Q.EndOfLinePreference.LF),this.monacoModel.redo(),this.setSaved(!1),n.networkManager.sendUpdatesAsync(!1).then(()=>{n.bottomDiv.homeworkManager.showHomeWorkRevisionButton(),n.projectExplorer.renderHomeworkButton(this)})):this.student_edited_after_revision=!0}),this.monacoModel}getText(){return this.monacoModel?this.monacoModel.getValue(Q.EndOfLinePreference.LF):super.getText()}setText(e){this.monacoModel?(this.monacoModel.setValue(e),this.notifyListeners()):super.setText(e)}createMonacolModel(){let e=this.name;e=e.replaceAll("//","_");let i=Qa.uriMap[e];i==null?i=0:i++,Qa.uriMap[e]=i,i>0&&(e+=" ("+i+")");let n=Ef.from({path:e,scheme:"inmemory"}),s=Gi.filenameToFileType(this.name,this.main.getCurrentProgrammingLanguage()).language,a=this.isSaved();this.monacoModel=Q.createModel(super.getText(),s,n),this.monacoModel.updateOptions({tabSize:3,bracketColorizationOptions:{enabled:!0,independentColorPoolPerBracketType:!1}}),this.monacoModel.onDidChangeContent(()=>{this.notifyListeners()}),this.setSaved(a)}disposeMonacoModel(){var e;this.monacoModel&&(this.localVersion=this.monacoModel.getAlternativeVersionId(),super.setText(this.monacoModel.getValue()),(e=this.monacoModel)==null||e.dispose(),this.monacoModel=void 0)}getLocalVersion(){return this.monacoModel&&!this.monacoModel.isDisposed()?this.monacoModel.getAlternativeVersionId():this.localVersion}hasMonacoModel(){return typeof this.monacoModel<"u"&&!this.monacoModel.isDisposed()}getFolderContentsRecursively(e){let i=e.filter(n=>n.parent_folder_id==this.id);for(let n of i.slice())n.isFolder&&(i=i.concat(n.getFolderContentsRecursively(e)));return i}};r(Qa,"uriMap",{});let Je=Qa;class Sb{constructor(t){r(this,"breakpoints",[]);r(this,"breakpointDecorators",[]);r(this,"decoratorIdToBreakpointMap",{});this.module=t}}var Ul,St,yc,Sd,ag,og,lg,Td,dg;class sg{constructor(t){J(this,St);J(this,Ul,new Map);this.main=t;let e=t.getMainEditor();e.onMouseDown(i=>{i.target.type!==Q.MouseTargetType.GUTTER_GLYPH_MARGIN&&i.target.type!==Q.MouseTargetType.GUTTER_LINE_NUMBERS||(this.toggleBreakpoint(i.target.position.lineNumber),t.getMainEditor().focus())}),e.onDidChangeModel(()=>{re(this,St,yc).call(this)})}attachToInterpreter(t){t.eventManager.on("resetRuntime",()=>{re(this,St,dg).call(this)})}toggleBreakpoint(t){const e=re(this,St,Td).call(this);e&&(re(this,St,ag).call(this,t,e),re(this,St,yc).call(this))}}Ul=new WeakMap,St=new WeakSet,yc=function(){let t=re(this,St,Td).call(this);if(!t)return;re(this,St,Sd).call(this,t);let e=[];for(let n of t.breakpoints){let s=!!n.step;e.push({range:{startLineNumber:n.lineNumber,endLineNumber:n.lineNumber,startColumn:1,endColumn:1},options:{isWholeLine:!0,className:s?"jo_decorate_breakpoint":"jo_decorate_breakpoint_inactive",overviewRuler:{color:"#580000",position:Q.OverviewRulerLane.Left},minimap:{color:"#580000",position:Q.MinimapPosition.Inline},marginClassName:s?"jo_margin_breakpoint":"jo_margin_breakpoint_inactive",stickiness:Q.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges},breakpoint:n})}let i=t.module.file;if(i instanceof Je){t.breakpointDecorators=i.getMonacoModel().deltaDecorations(t.breakpointDecorators,e),t.decoratorIdToBreakpointMap={};for(let n=0;n=0){let a=t.decoratorIdToBreakpointMap[n.id];a!=null&&(a.lineNumber=n.range.startLineNumber)}}},ag=function(t,e){re(this,St,Sd).call(this,e),re(this,St,lg).call(this,t,e)||re(this,St,og).call(this,t,e)},og=function(t,e){var n;let i={lineNumber:t,step:e.module.findStep(t)};return e.breakpoints.push(i),(n=i.step)==null||n.setBreakpoint(t),i},lg=function(t,e){var i;for(let n=0;nj({de:"Der Typ des linken Operanden kann nicht bestimmt werden.",en:"Couldn't compute type of left operand.",fr:"Le type de l'opérande gauche ne peut pas être déterminé."})),r(v,"typeRightOperandNotFound",()=>j({de:"Der Typ des rechten Operanden kann nicht bestimmt werden.",en:"Couldn't compute type of right operand.",fr:"Le type de l'opérande droite ne peut pas être déterminé."})),r(v,"operatorNotFeasibleForOperands",(t,e,i)=>j({de:"Der Operator "+t+" ist für die Typen "+e+" und "+i+" nicht geeignet.",en:"Operator "+t+" is not defined for operands of type "+e+" and "+i+".",fr:`L'opérateur ${t} n'est pas défini pour les opérandes de type ${e} et ${i}.`})),r(v,"rightSideOfInstanceofError",()=>j({de:"Rechts vom Operator instanceof muss eine Klasse/ein Interface/ein Enum-Typ stehen.",en:"Class/interface/enum-type expected on right hand side of operator instanceof.",fr:"Type classe/interface/enum attendu à droite de l'opérateur instanceof."})),r(v,"leftSideOfInstanceofError",()=>j({de:"Links vom Operator instanceof muss ein Objekt stehen.",en:"Object expected on right hand side of operator instanceof.",fr:"Objet attendu à gauche de l'opérateur instanceof."})),r(v,"cantAssignValueToTerm",()=>j({de:"Dem Term auf der linken Seite des Zuweisungsoperators kann nichts zugewiesen werden.",en:"Can't assign value to expression on left side of assignment operator.",fr:"Impossible d'affecter une valeur à l'expression à gauche de l'opérateur d'affectation."})),r(v,"cantCastRightSideToString",()=>j({de:"Der Term auf der rechten Seite des Zuweisungsoperators kann nicht in den Typ String umgewandelt werden.",en:"Can't cast expression on right side of assignment operator to type String.",fr:"Impossible de convertir l'expression à droite de l'opérateur d'affectation en type String."})),r(v,"leftOperatorNotFitForAttribute",t=>j({de:"Mit dem Attribut/der Variablen auf der linken Seite des Zuweisungsoperators kann die Berechnung "+t+" nicht durchgeführt werden.",en:"Field/variable on left side of operator "+t+" is not usable for this operation.",fr:`Le champ/la variable à gauche de l'opérateur ${t} ne peut pas être utilisé(e) pour cette opération.`})),r(v,"rightOperatorNotFitForAttribute",t=>j({de:"Mit dem Attribut/der Variablen auf der rechten Seite des Zuweisungsoperators kann die Berechnung "+t+" nicht durchgeführt werden.",en:"Field/variable on right side of operator "+t+" is not usable for this operation.",fr:`Le champ/la variable à droite de l'opérateur ${t} ne peut pas être utilisé(e) pour cette opération.`})),r(v,"cantUseOperatorForLeftRightTypes",t=>j({de:"Der Wert des Datentyps auf der rechten Seite des Operators "+t+" kann mit der Variablen/dem Attribut auf der linken Seite nicht verrechnet werden.",en:"Can't use operator "+t+" for types of given left/right side operands.",fr:`Impossible d'utiliser l'opérateur ${t} pour les types des opérandes gauche/droite donnés.`})),r(v,"cantCastType",(t,e)=>j({de:"Der Typ "+t+" kann nicht in den Typ "+e+" gecastet werden.",en:`Can't cast ${t} to ${e}.`,fr:`Impossible de convertir ${t} en ${e}.`})),r(v,"unneccessaryCast",()=>j({de:"Unnötiges Casten",en:"Unneccessary cast",fr:"Cast inutile"})),r(v,"leftExpressionHasNoType",t=>j({de:"Der Term auf der linken Seite des '"+t+"' - Operators hat keinen Datentyp. ",en:`Expression on left side of operator '${t}' has no type.`,fr:`L'expression à gauche de l'opérateur '${t}' n'a pas de type.`})),r(v,"rightExpressionHasNoType",t=>j({de:"Der Term auf der rechten Seite des '"+t+"' - Operators hat keinen Datentyp. ",en:`Expression on right side of operator '${t}' has no type.`,fr:`L'expression à droite de l'opérateur '${t}' n'a pas de type.`})),r(v,"cantGetTypeOfExpression",()=>j({de:"Der Typ des Terms kann nicht bestimmt werden.",en:"Can't compute type of this expression.",fr:"Impossible de déterminer le type de cette expression."})),r(v,"operatorNotUsableForOperands",(t,e)=>j({de:"Der Operator "+t+" ist nicht für den Operanden des Typs "+e+"geeignet.",en:`Operator ${t} is not usable for operands of type ${e}.`,fr:`L'opérateur ${t} ne peut pas être utilisé pour les opérandes de type ${e}.`})),r(v,"notOperatorNeedsBooleanOperands",t=>j({de:"Der Operator ! (not) ist nur für boolesche Operanden geeignet, nicht für Operanden des Typs "+t+".",en:`Operator ! (not) needs boolean operands, but given operands are of type ${t}.`,fr:`L'opérateur ! (not) nécessite des opérandes booléens, mais les opérandes donnés sont de type ${t}.`})),r(v,"plusPlusMinusMinusOnlyForLeftyOperands",t=>j({de:"Der Operator "+t+" ist nur für Variablen/Attribute geeignet, deren Wert verändert werden kann.",en:`Operator ${t} can only be used for fields/variables which are writable.`,fr:`L'opérateur ${t} ne peut être utilisé que pour les champs/variables qui sont modifiables.`})),r(v,"badOperandTypesForBinaryOperator",(t,e,i)=>j({de:"Der Operator "+t+" ist für Operanden der Typen "+e+" und "+i+" nicht definiert.",en:`Operator ${t} is not defined for operands of type ${e} and ${i}.`,fr:`L'opérateur ${t} n'est pas défini pour les opérandes de type ${e} et ${i}.`})),r(v,"interfaceOnlyDefaultMethodsHaveBody",()=>j({de:"In Interfaces können nur default-Methoden einen Methodenrumpf haben.",en:"In interfaces only default methods have a method body. ",fr:"Dans les interfaces, seules les méthodes par défaut peuvent avoir un corps de méthode."})),r(v,"enumConstructorsMustBePrivate",()=>j({de:"Konstruktoren von enums müssen die Sichtbarkeit private haben.",en:"Enum constructors must be private.",fr:"Les constructeurs d'enums doivent être privés."})),r(v,"interfaceFieldsMustBeStatic",()=>j({de:"Interfaces können nur statische konstante (final) Attribute besitzen.",en:"Interface fields must be static final.",fr:"Les champs d'interface doivent être statiques et finaux."})),r(v,"cantFindConstructor",()=>j({de:"Es konnte kein passender Konstruktor mit dieser Signatur gefunden werden.",en:"Cant find constructor.",fr:"Impossible de trouver un constructeur correspondant à cette signature."})),r(v,"cantInstantiateFromAbstractClass",()=>j({de:"Von einer abstrakten Klasse kann man keine Objekte instanzieren.",en:"You can't create objects of an abstract class.",fr:"Vous ne pouvez pas instancier d'objets à partir d'une classe abstraite."})),r(v,"cantInstantiateFromType",t=>j({de:`Vom Datentyp ${t} können keine Objekte instanziiert werden.`,en:`You can't create objects of type ${t}.`,fr:`Vous ne pouvez pas instancier d'objets à partir de ce type ${t}.`})),r(v,"interfacesDontHaveConstructors",()=>j({de:"Interfaces haben keinen Konstruktor.",en:"Interfaces don't have construtctors.",fr:"Les interfaces n'ont pas de constructeurs."})),r(v,"methodImitatesConstructor",t=>j({de:"Die Methode "+t+" trägt denselben Bezeichner wie die Klasse, hat aber einen Rückgabewert und ist damit KEIN Konstruktor. Das ist irreführend.",en:"Method "+t+" has same identifier as class and an return type. Therefore it is no constructor. This is irritating.",fr:`La méthode ${t} a le même identifiant que la classe, mais elle a un type de retour. Ce n'est donc PAS un constructeur. C'est trompeur.`})),r(v,"abstractMethodsDontHaveMethodBodies",()=>j({de:"Eine abstrakte Methode kann keinen Methodenrumpf besitzen.",en:"Abstract methods don't have method bodies.",fr:"Les méthodes abstraites ne peuvent pas avoir de corps de méthode."})),r(v,"superCallInConstructorMissing",t=>j({de:`Da die Oberklasse ${t} keinen parameterlosen Konstruktor hat, muss in jedem Konstruktor einer Unterklasse gleich zu Beginn der Aufruf eines Konstruktors der Oberklasse erfolgen (super(...)).`,en:"",fr:`Puisque la super-classe ${t} n'a pas de constructeur sans paramètres, chaque constructeur d'une sous-classe doit commencer par un appel au constructeur de la super-classe (super(...)).`})),r(v,"lambdaFunctionHereNotPossible",()=>j({de:"Eine Lambda-Funktion darf nur an einer Stelle im Code stehen, an der ein functional interface (d.h. ein Interface mit genau einer Methode) erwartet wird.",en:"Lambda functions are only usable in places where a functional interface (that is: a interface with only one method) is expected.",fr:"Les fonctions lambda ne peuvent être utilisées qu'aux endroits où une interface fonctionnelle (c'est-à-dire une interface avec une seule méthode) est attendue."})),r(v,"lambdaFunctionWrongParameterCount",(t,e,i)=>j({de:`Die Anzahl der Parameter der Lambda-Funktion (${t}) stimmt nicht mit der des functional interfaces ${i} (${e}) überein.`,en:`Number of parameters of lambda function (${t}) doesn't match number of parameters of functional interfaces ${i} (${e}).`,fr:`Le nombre de paramètres de la fonction lambda (${t}) ne correspond pas à celui de l'interface fonctionnelle ${i} (${e}).`})),r(v,"lambdaFunctionWrongParameterType",(t,e)=>j({de:`Der Datentyp des Parameters ${t} passt nicht zum erwarteten Datentyp ${e}.`,en:`Parameter ${t} has wrong type. Expected type: ${e}.`,fr:`Le paramètre ${t} a un type incorrect. Type attendu : ${e}.`})),r(v,"arrayLiteralTypeUnknown",()=>j({de:`Der erwartete Datentyp der Array-Elemente kann nicht ermittelt werden. Tipp: Versuchen Sie es mit der Syntax 'new int[]{1, 2, 3}'`,en:`Can't figure out exptected type of array elements. Hint: Try syntax 'new int[]{1, 2, 3}'.`,fr:`Impossible de déterminer le type attendu des éléments du tableau. Indice : Essayez la syntaxe 'new int[]{1, 2, 3}'.`})),r(v,"missingProgram",()=>j({de:"//Kein Programm vorhanden.",en:"//Missing program.",fr:"//Programme manquant."})),r(v,"variableNotInitialized",t=>j({de:"Die Variable/der Parameter "+t+" ist vor diesem lesenden Zugriff noch nicht initialisiert worden.",en:`Variable/field ${t} had not been initialized before first read access.`,fr:`La variable/le champ ${t} n'a pas été initialisé(e) avant le premier accès en lecture.`})),r(v,"noReadAccessForVariable",t=>j({de:"Auf die Variable/den Parameter "+t+" wird nie lesend zugegriffen.",en:`No read access on variable/field ${t}.`,fr:`Aucun accès en lecture sur la variable/le champ ${t}.`})),r(v,"returnStatementMissing",(t,e)=>j({de:"Die Methode "+t+" muss einen Wert vom Typ "+e+" zurückliefern. In einem der Ausführungszweige fehlt ein entsprechendes return-statement.",en:`Method ${t} must return value of type ${e}. Return statement is missing in at least one program branch.`,fr:`La méthode ${t} doit retourner une valeur de type ${e}. Une instruction return est manquante dans au moins une branche du programme.`})),r(v,"throwExpressionTypeMustBeThrowable",t=>j({de:`Der Wert des Terms hinter throw muss das Objekt einer Unterklasse von Throwable sein, hier ist aber ${t} angegeben.`,en:`Expression after throw must be an object of a subclass of Throwable, but found type ${t}.`,fr:`L'expression après throw doit être un objet d'une sous-classe de Throwable, mais le type ${t} a été trouvé.`})),r(v,"cantRedeclareVariableError",t=>j({de:"Die Variable "+t+" wurde zweifach deklariert.",en:"Variable "+t+" had been declared twice.",fr:`La variable ${t} a été déclarée deux fois.`})),r(v,"shadowedVariableError",(t,e)=>j({de:"Die Variable "+t+" überdeckt eine gleichnamige Variable in einem äußeren Sichtbarkeitsbereich (definiert in Zeile "+e+").",en:"Variable "+t+" shadowes a variable with same identifier in outer scope (defined in line "+e+").",fr:`La variable ${t} masque une variable du même identifiant dans une portée externe (définie à la ligne ${e}).`})),r(v,"breakNotExpected",()=>j({de:"An dieser Stelle kann kein break stehen, da der Ausdruck nicht innerhalb einer Schleife (for, while, do) oder switch-case Anweisung steht.",en:"break statement is only expected inside loops (for, while, do...while) and switch-statements.",fr:"L'instruction break n'est attendue qu'à l'intérieur des boucles (for, while, do...while) et des instructions switch."})),r(v,"noVariableDeclarationWhileProgramIsRunning",()=>j({de:"Während ein Programm läuft (oder pausiert ist) kann keine Variable in der Konsole deklariert werden.",en:"You can't declare a variable while a program is running (or paused).",fr:"Vous ne pouvez pas déclarer de variable pendant qu'un programme est en cours d'exécution (ou en pause)."})),r(v,"emptyStatementAfterIf",()=>j({de:"Hinter if(...) steht eine leere Anweisung. Dies ist sicher nicht so gewollt.",en:"There's an empty statement after if(...). This may be unintentional."})),r(v,"continueNotExpected",()=>j({de:"An dieser Stelle kann kein continue stehen, da der Ausdruck nicht innerhalb einer Schleife (for, while, do) oder switch-case Anweisung steht.",en:"continue statement is only expected inside loops (for, while, do...while) and switch-statements.",fr:"L'instruction continue n'est attendue qu'à l'intérieur des boucles (for, while, do...while) et des instructions switch."})),r(v,"returnNotExpected",()=>j({de:"Eine return-Anweisung ist nur innerhalb einer Methode sinnvoll.",en:"return statement outside method context",fr:"Instruction return en dehors du contexte de la méthode."})),r(v,"returnValueNotExpected",()=>j({de:"Die Methode erwartet keinen Rückgabewert, hier ist aber einer angegeben.",en:"Method doesn't expect return value.",fr:"La méthode n'attend pas de valeur de retour, mais une est spécifiée ici."})),r(v,"returnValueExpected",t=>j({de:"Die Methode erwartet einen Rückgabewert vom Typ "+t+", hier wird aber keiner übergeben.",en:`Missing return value of type ${t}.`,fr:`Valeur de retour de type ${t} attendue.`})),r(v,"wrongReturnValueType",(t,e)=>j({de:"Die Methode erwartet einen Rückgabewert vom Typ "+t+", der Wert des Terms hat aber den Datentyp "+e+".",en:`Expression of type ${e} found, but return value of type ${t} expected.`,fr:`Expression de type ${e} trouvée, mais valeur de retour de type ${t} attendue.`})),r(v,"wrongArrayElementType",(t,e,i)=>j({de:`Der Typ ${t} des Elements ${e} muss mit dem Elementtyp des Arrays (${i}) übereinstimmen. Tipp: Verwende das var-Schlüsselwort, also for(var element: array){...}`,en:`Type ${t} of element ${e} doesn't fit to element type of array (${i}). Hint: use var-keyword (for(var element: array)){...}`,fr:`Le type ${t} de l'élément ${e} ne correspond pas au type d'élément du tableau (${i}). Astuce : utilisez le mot-clé var, par exemple for(var element: array){...}`})),r(v,"wrongCollectionElementType",(t,e,i)=>j({de:`Der Typ ${t} des Elements ${e} muss mit dem Elementtyp des Collections (${i}) übereinstimmen. Tipp: Verwende das var-Schlüsselwort, also for(var element: collection){...}`,en:`Type ${t} of element ${e} doesn't fit to element type of collection (${i}). Hint: use var-keyword (for(var element: collection)){...}`,fr:`Le type ${t} de l'élément ${e} ne correspond pas au type d'élément de la collection (${i}). Astuce : utilisez le mot-clé var, par exemple for(var element: collection){...}`})),r(v,"cantComputeArrayElementType",t=>j({de:`Der Elementtyp des Arrays ${t} kann nicht bestimmt werden.`,en:`Can't compute element type of array ${t}.`,fr:`Impossible de déterminer le type d'élément du tableau ${t}.`})),r(v,"cantComputeCollectionElementType",t=>j({de:`Der Elementtyp der Collection ${t} kann nicht bestimmt werden.`,en:`Can't compute element type of collection ${t}.`,fr:`Impossible de déterminer le type d'élément de la collection ${t}.`})),r(v,"elementTypeDoesntFitToIterable",(t,e,i)=>j({de:`Der Typ ${t} des Elements ${e} muss mit dem Elementtyp des Iterables(${i}) übereinstimmen. Tipp: Verwende das var-Schlüsselwort, also for(var element: array){...}`,en:`Type ${t} of element ${e} must be identical to type of Iterable (${i}). Hint: use var keyword, for example: for(var element: iterable){...}`,fr:`Le type ${t} de l'élément ${e} doit être identique au type de l'Itérable (${i}). Astuce : utilisez le mot-clé var, par exemple : for(var element: iterable){...}`})),r(v,"enhancedForLoopOnlyForArraysCollectionsIterables",()=>j({de:"Die vereinfachte for-loop kann nur über Arrays iterieren oder über Klassen, die das Interface Iterable implementieren.",en:"Enhanced for-loops are only possible for arrays, collections and iterables.",fr:"Les boucles for améliorées ne sont possibles que pour les tableaux, les collections et les itérables."})),r(v,"booleanTermExpected",t=>j({de:"Hier wird eine Bedingung erwartet, deren Wert true oder false ergibt. Der Datentyp dieses Terms ist "+t,en:`Boolean value expected, but expression of type ${t} found.`,fr:`Valeur booléenne attendue, mais expression de type ${t} trouvée.`})),r(v,"assignmentInsteadOfComparisonOperator",()=>j({de:"Hier wird ein boolescher Wert erwartet. Du musst statt des Zuweisungsoperators = den Vergleichsoperator == benutzen.",en:"Boolean value expected. Use comparison operator == instead of assignment operator =.",fr:"Valeur booléenne attendue. Utilisez l'opérateur de comparaison == au lieu de l'opérateur d'affectation =."})),r(v,"comparisonOperatorInsteadOfAssignment",()=>j({de:"Hier wird ein Zuweisungsoperator erwartet. Du musst statt des Vergleichsoperators == den Zuweisungsoperator = benutzen.",en:"Assignment operator expected. Use assignment operator = instead of comparison operator =.",fr:"Opérateur d'affectation attendu. Utilisez l'opérateur d'affectation = au lieu de l'opérateur de comparaison ==."})),r(v,"enumIdentifierUnknown",(t,e)=>j({de:`Der Enum-Typ ${t} hat kein Element mit dem Bezeichner ${e}.`,en:`Enum-type ${t} has no element with identifier ${e}.`,fr:`Le type enum ${t} n'a pas d'élément avec l'identifiant ${e}.`})),r(v,"valueNotComputable",()=>j({de:"Der Wert des Ausdrucks ist nicht ermittelbar.",en:"Can't compute value.",fr:"Impossible de calculer la valeur."})),r(v,"constantValueExpectedAfterCase",()=>j({de:"Nach case dürfen nur konstante Ausdrücke stehen, z.B. eine feste Zahl oder Zeichenkette. Wenn du an dieser Stelle etwas anderes (einen Term oder eine Variable) verwenden möchtest, informiere dich über sogenannten constant expressions in Java.",en:"Constant value expected.",fr:"Valeur constante attendue."})),r(v,"caseValueDoesntFitToSwitchValue",(t,e)=>j({de:`Ich erwarte hier einen Ausdruck vom Typ ${t} - dem Datentyp des Switch-Ausdrucks - bekomme aber einen Ausdruck vom Typ ${e}.`,en:`Value of type ${t} expected (this is type inside switch()-expression), but found value of type ${e}.`,fr:`Valeur de type ${t} attendue (c'est le type de l'expression switch()), mais valeur de type ${e} trouvée.`})),r(v,"switchOnlyFeasibleForTypes",()=>j({de:"Die Anweisung switch(x) ist nur möglich, wenn x den Typ int, String, oder enum hat.",en:"Switch statement (switch) is only feasible for expression x of type int, String or enum.",fr:"L'instruction switch(x) n'est possible que si x est de type int, String ou enum."})),r(v,"cantAssignArrayLiteralToNonArrayVariable",()=>j({de:"Der Typ der deklarierten Variable ist kein Array, daher kann ihr auch kein Array-Literal zugewiesen werden.",en:"Declared variable has no array type, therefore you can't assign a array literal.",fr:"La variable déclarée n'est pas de type tableau, vous ne pouvez donc pas lui affecter un littéral de tableau."})),r(v,"localVariableDeclarationWrongInitializerType",(t,e)=>j({id:"cantAssignValueToLocalVariable",de:"Der Term auf der rechten Seite des Zuweisungsoperators hat den Datentyp "+t+" und kann daher der Variablen auf der linken Seite (Datentyp "+e+") nicht zugewiesen werden.",en:`Can't assign value of type ${t} to local variable of type ${e}.`,fr:`Impossible d'affecter une valeur de type ${t} à la variable locale de type ${e}.`})),r(v,"packageCannotBeUsedAsType",t=>j({de:`Der Name ${t} ist ein Package-Name und kann daher nicht als Datentyp verwendet werden. Wahrscheinlich sollte nach dem Package-Namen noch ein Punkt und danach der Name einer Klasse stehen.`,en:`Package name ${t} can't be used as type. Probably you forgot to write a dot and the name of a class after the package name.`,fr:`Le nom de package ${t} ne peut pas être utilisé comme type. Vous avez probablement oublié d'écrire un point et le nom d'une classe après le nom du package.`})),r(v,"voidTypeNotAllowedAsParameterType",t=>j({de:`Der Datentyp void ist nicht als Typ eines Parameters der Methode ${t} erlaubt.`,en:`Void type is not allowed as parameter type of method ${t}.`,fr:`Le type void n'est pas autorisé comme type de paramètre de la méthode ${t}.`})),r(v,"localVariableUsedBeforeDeclaration",t=>j({de:`Die Variable ${t} wurde vor ihrer Deklaration verwendet.`,en:`Variable ${t} is used before it's declaration.`,fr:`La variable ${t} est utilisée avant sa déclaration.`})),r(v,"superOnlyInClassesOrEnums",()=>j({de:"Das Schlüsselwort super ist nur innerhalb einer Klasse oder eines Enum sinnvoll.",en:"Keyword super is only usable in classes and enums.",fr:"Le mot-clé super n'est utilisable que dans les classes et les enums."})),r(v,"thisOnlyInClassesOrEnums",()=>j({de:"Das Schlüsselwort this ist nur innerhalb einer Klasse oder eines Enum sinnvoll.",en:"Keyword this is only usable in classes and enums.",fr:"Le mot-clé this n'est utilisable que dans les classes et les enums."})),r(v,"cantCastFromTo",(t,e)=>j({de:`Casten von ${t} nach ${e} ist nicht möglich.`,en:`Can't cast from ${t} to ${e}.`,fr:`Impossible de convertir de ${t} à ${e}.`})),r(v,"objectContextNeededForInstantiation",(t,e)=>j({de:`Zum Instanzieren eines Objekts der Klasse ${t} wird ein Objektkontext der Klasse ${e} benötigt.`,en:`You need objectcontext ${e} to instantiate a object of type ${t}.`,fr:`Vous avez besoin d'un contexte d'objet ${e} pour instancier un objet de type ${t}.`})),r(v,"noArrayBracketAfterType",t=>j({de:`Vor [ muss ein Array stehen. Dieser Term hat aber den Typ ${t}`,en:`Type ${t} is no array type, therefore [ is not expected here.`,fr:`Le type ${t} n'est pas un type tableau, par conséquent [ n'est pas attendu ici.`})),r(v,"wrongArrayDimensionCount",(t,e)=>j({de:`Das Array hat die Dimension ${t}, hier stehen aber ${e} Längenangaben in den eckigen Klammern.`,en:`Array has dimension ${t}, but ${e} length-values found inside square brackets ([...]).`,fr:`Le tableau a la dimension ${t}, mais ${e} valeurs de longueur ont été trouvées entre crochets ([...]).`})),r(v,"indexMustHaveIntegerValue",()=>j({de:"Als Array-Index wird ein ganzzahliger Wert erwartet.",en:"Array-Index must have integer value.",fr:"L'indice de tableau doit avoir une valeur entière."})),r(v,"integerValueExpected",t=>j({de:"Hier wird eine Ganzzahl erwartet (Datentypen byte, short, int, long). Gefunden wurde "+t+".",en:`Integer value expected (type byte, short, int or long), but found: ${t}`,fr:`Valeur entière attendue (types byte, short, int ou long), mais trouvé : ${t}.`})),r(v,"declaredArrayDimensionDoesNotFitArrayLiteral",(t,e)=>j({de:`Die Dimension ${t} bei der Deklaration des Arrays stimmt nicht mit der des Array-Literals (${e} überein.)`,en:`Dimension ${t} does not match dimension of array literal (${e}).`,fr:`La dimension ${t} ne correspond pas à la dimension du littéral de tableau (${e}).`})),r(v,"arrayLiteralElementsNotSameDimension",()=>j({de:"Die Elemente des Array-Literals haben unterschiedliche Dimension.",en:"Elements of array literal don't have same dimension.",fr:"Les éléments du littéral de tableau n'ont pas la même dimension."})),r(v,"arrayLiteralElementDimensionWrong",()=>j({de:"Dieses Element des Array-Literals sollte kein Array sein.",en:"This particular element of the array literal must be no array itself.",fr:"Cet élément particulier du littéral de tableau ne doit pas être un tableau lui-même."})),r(v,"cantCastTermTo",t=>j({de:`Der Term kann nicht in den Typ ${t} umgewandelt werden.`,en:`Can't cast expression to type ${t}.`,fr:`Impossible de convertir l'expression en type ${t}.`})),r(v,"cantUseNonstaticFieldsToInitializeStaticOne",()=>j({de:"Zum Initialisieren eines statischen Attributs können keine nichtstatischen Attribute benutzt werden.",en:"Can't use non-static fields to initialize static field.",fr:"Impossible d'utiliser des champs non statiques pour initialiser un champ statique."})),r(v,"attributeHasWrongVisibility",(t,e)=>j({de:"Das Attribut "+t+" hat die Sichtbarkeit "+e+" und kann daher hier nicht verwendet werden.",en:"Field "+t+" has Visibility "+e+", therefore it is not visible here.",fr:`Le champ ${t} a la visibilité ${e}, il n'est donc pas visible ici.`})),r(v,"identifierNotKnown",t=>j({de:"Der Bezeichner "+t+" ist an dieser Stelle nicht definiert.",en:"Identifier "+t+" unknown.",fr:`L'identifiant ${t} est inconnu.`})),r(v,"plusPlusMinusMinusOnlyForVariables",()=>j({de:"Die Operatoren ++ und -- können nur bei Variablen benutzt werden, die veränderbar sind.",en:"Operators ++ and -- can only operate on variables.",fr:"Les opérateurs ++ et -- ne peuvent s'appliquer qu'aux variables."})),r(v,"colonExpectedAfterTernaryOperator",()=>j({de:"Nach dem Fragezeichenoperator ? ('ternary operator') wird ein : erwartet. Beispiel: Der Term a < b ? 10 : 12 hat den Wert 10, wenn a < b ist und 12 andernfalls.",en:"Colon (:) expected after ternary operator (?). Example: The value of a < b ? 10 : 12 is 10 if a < b and 12 otherwise.",fr:"Deux-points (:) attendus après l'opérateur ternaire (?). Exemple : La valeur de a < b ? 10 : 12 est 10 si a < b et 12 sinon."})),r(v,"booleanOperandOnTernaryOperatorLefthand",()=>j({de:"Der Term links vom Fragezeichenoperator ? (ternary operator) muss einen booleschen Wert besitzen.",en:"Boolean value expected on left side of ternary operator (?).",fr:"Valeur booléenne attendue à gauche de l'opérateur ternaire (?)."})),r(v,"ternaryOperatorTypesNotCompatible",()=>j({de:"Die Typen der Operanden b und c beim Ausdruck a ? b : c sind im gegebenen Fall zu unterschiedlich.",en:"Types b and c in expression a ? b : c are not compatible to each other.",fr:"Les types b et c dans l'expression a ? b : c ne sont pas compatibles entre eux."})),r(v,"plusPlusMinusMinusOnlyForTypes",()=>j({de:"Die Operatoren ++ und -- können nur bei Variablen mit den Datentypen byte, short, int, long, float und double benutzt werden.",en:"Operators ++ and -- can only operate on types byte, short, int, long, float and double.",fr:"Les opérateurs ++ et -- ne peuvent s'appliquer qu'aux variables de types byte, short, int, long, float et double."})),r(v,"arraysOnlyHaveLengthField",t=>j({de:"Arrays haben nur das Attribut length. Das Attribut "+t+" ist bei Arrays nicht vorhanden.",en:`Arrays don't have field ${t}. They have field length ...`,fr:`Les tableaux n'ont pas de champ ${t}. Ils ont un champ length...`})),r(v,"typeHasNoFields",t=>j({de:`Der Datentyp ${t} hat keine Attribute.`,en:`Type ${t} has no fields.`,fr:`Le type de données ${t} n'a pas de champs.`})),r(v,"fieldUnknown",t=>j({de:`Das Objekt hat kein Attribut mit dem Bezeichner ${t}.`,en:`Object has no field ${t}.`,fr:`L'objet n'a pas de champ avec l'identifiant ${t}.`})),r(v,"methodCallOutsideClassNeedsDotSyntax",()=>j({de:"Außerhalb einer Klasse kann eine Methode nur mit Punktschreibweise (Object.Methode(...)) aufgerufen werden.",en:"Method call outside class is only possible with dot syntax.",fr:"L'appel de méthode en dehors de la classe n'est possible qu'avec la syntaxe par points (Object.method(...))."})),r(v,"methodHasWrongVisibility",(t,e)=>j({de:"Die Methode "+t+" hat die Sichtbarkeit "+e+" und kann daher hier nicht aufgerufen werden.",en:"Method "+t+" has Visibility "+e+", therefore it is not visible here.",fr:`La méthode ${t} a la visibilité ${e}, elle n'est donc pas visible ici.`})),r(v,"cantFindMethod",()=>j({de:"Es konnte keine passende Methode mit diesem Bezeichner/mit dieser Signatur gefunden werden.",en:"Can't find method with this identifier and signature.",fr:"Impossible de trouver une méthode correspondant à cet identifiant et à cette signature."})),r(v,"cantCallAbstractMethodOfBaseClass",t=>j({de:"Die abstrakte Methode "+t+" der Oberklasse kann nicht aufgerufen werden.",en:`Can't call abstract method ${t} of base class.`,fr:`Impossible d'appeler la méthode abstraite ${t} de la classe de base.`})),r(v,"assertCodeReachedNeedsStringParameter",()=>j({de:"Die Methode assertCodeReached benötigt genau einen konstanten Parameter vom Typ String.",en:"Method assertCodeReached needs parameter of type String.",fr:"La méthode assertCodeReached nécessite exactement un paramètre constant de type String."})),r(v,"expectingEndOfCharConstant",()=>j({de:"Das Ende der char-Konstante wird erwartet (').",en:"Expecting end of char literal (').",fr:"Fin du littéral de caractère (') attendue."})),r(v,"endOfLineInsideStringLiteral",()=>j({de:"Innerhalb einer String-Konstante wurde das Zeilenende erreicht.",en:"End of line inside String literal.",fr:"Fin de ligne atteinte à l'intérieur du littéral de chaîne."})),r(v,"endOfTextInsideStringLiteral",()=>j({de:"Innerhalb einer String-Konstante wurde das Textende erreicht.",en:"End of text inside String literal.",fr:"Fin du texte atteinte à l'intérieur du littéral de chaîne."})),r(v,"endOfTextInsideJavadocComment",()=>j({de:"Innerhalb eines Mehrzeilenkommentars (/*... */) wurde das Dateiende erreicht.",en:"End of text inside JavaDoc comment (/*... */).",fr:"Fin du texte atteinte à l'intérieur du commentaire JavaDoc (/*... */)."})),r(v,"charactersAfterMultilineStringLiteralStart",()=>j({de:'Eine Java-Multiline-Stringkonstante beginnt immer mit """ und einem nachfolgenden Zeilenumbruch. Alle nach """ folgenden Zeichen werden überlesen!',en:'A multiline String-literal starts with """ followed by a line braek. Characters in between """ and line break are discarded.',fr:`Un littéral de chaîne multiligne commence toujours par """ suivi d'un saut de ligne. Tous les caractères après """ et le saut de ligne sont ignorés !`})),r(v,"unknownEscapeSequence",t=>j({de:"Die Escape-Sequenz \\"+t+" gibt es nicht.",en:`Unknown escape sequence \\${t}`,fr:`Séquence d'échappement inconnue \\${t}.`})),r(v,"wrongFloatConstantBegin",()=>j({de:"Eine float/double-Konstante darf nicht mit 0, 0b oder 0x beginnen.",en:"Float literals must not start with 0, 0b or 0x.",fr:"Les littéraux float ne doivent pas commencer par 0, 0b ou 0x."})),r(v,"importStatementMustStartWithIdentifier",()=>j({de:"Nach dem Schlüsselwort 'import' wird der Bezeichner eines packages erwartet.",en:"Import statement must start with identifier.",fr:"L'instruction import doit commencer par un identifiant."})),r(v,"importStatementCannotHaveMultipleWildcards",()=>j({de:"In einer import-Anweisung darf höchstens ein Sternchen (*) vorkommen.",en:"Import statement can't have multiple wildcards (*).",fr:"L'instruction import ne peut pas avoir plusieurs jokers (*)."})),r(v,"identifierOrAsteriskExpectedInImportStatement",()=>j({de:"Nach dem Bezeichner des packages wird entweder ein Bezeichner (für eine Klasse oder ein Unterpackage) oder ein Sternchen (*) erwartet.",en:"Identifier or asterisk expected in import statement.",fr:"Un identifiant ou un astérisque est attendu dans l'instruction import."})),r(v,"unexpectedToken",t=>j({de:"Mit dem Token "+t+" kann der Compiler nichts anfangen.",en:`Unexpected token: ${t}`,fr:`Jeton inattendu : ${t}.`})),r(v,"superCallInsideConstructorAfterFirstStatement",()=>j({de:"Der Aufruf des Konstruktors der Oberklasse mit super(...) kann nur als erste Anweisung im Konstruktor erfolgen.",en:"Call to constructors base class via super(...) must be first statement in constructor.",fr:"L'appel au constructeur de la classe de base via super(...) doit être la première instruction du constructeur."})),r(v,"thisCallInsideConstructorAfterFirstStatement",()=>j({de:"Der Aufruf eines anderen Konstruktors mit this(...) kann nur als erste Anweisung im Konstruktor erfolgen.",en:"Call to other constructors of this class via this(...) must be the first statement in a constructor.",fr:"L'appel à d'autres constructeurs de cette classe via this(...) doit être la première instruction d'un constructeur."})),r(v,"fieldDefinitionDoesntStartWithGenericParamter",()=>j({de:"Vor Attributen kann keine Definition generischer Parameter stehen.",en:"Field definition mustn't start with generic parameter definition.",fr:"La définition de champ ne doit pas commencer par une définition de paramètre générique."})),r(v,"methodDeclarationWithoutReturnType",t=>j({de:`Bei der Deklaration der methode ${t} fehlt der Rückgabedatentyp. Falls die Methode keinen Wert zurückgibt, muss vor dem Bezeichner ${t} der Typ void stehen.`,en:`Declaration of method ${t} is missing a return type. If this method doesn't return a value then precede ${t} with type void.`,fr:`La déclaration de la méthode ${t} manque un type de retour. Si cette méthode ne retourne pas de valeur, le type void doit précéder l'identifiant ${t}.`})),r(v,"multipleVisibilityModifiers",t=>j({de:`Es ist nicht zulässig, mehrere visibility-modifiers gleichzeitig zu setzen (hier: ${t}).`,en:`More than one visibility modifier found: ${t}`,fr:`Plusieurs modificateurs de visibilité trouvés : ${t}.`})),r(v,"noSemicolonAsMethodBody",()=>j({de:"Diese Methode ist nicht abstrakt, daher ist ein Strichpunkt hier nicht zulässig.",en:"This method is not abstract, therefore no semicolon is expected here.",fr:"Cette méthode n'est pas abstraite, par conséquent aucun point-virgule n'est attendu ici."})),r(v,"abstractMethodOnlyInAbstractClass",()=>j({de:"Eine abstrakte Methode ist nur in einer abstrakten Klasse zulässig.",en:"You can't have abstract methods in non-abstract classes.",fr:"Vous ne pouvez pas avoir de méthodes abstraites dans des classes non abstraites."})),r(v,"methodNeedsMethodBody",t=>j({de:`Die Methode ${t} braucht hier noch einen Methodenrumpf, d.h. sie braucht Anweisungen, die in { ... } eingeschlossen sind.`,en:`Method ${t} needs a body here, i.e. it needs statements enclosed in { ... }.`})),r(v,"useOfStringWithSmallLetterAsIdentifier",()=>j({de:'Der Bezeichner String mit kleinem Anfangsbuchstaben ist nicht zulässig. Vermutlich wolltest du die Klasse "String" verwenden.',en:'Identifier String with small letter is not allowed. Probably you wanted to use String-class "String".',fr:`L'identifiant String avec une petite lettre n'est pas autorisé. Vous vouliez probablement utiliser la classe String "String".`})),r(v,"upperCaseStringQuickfixMessage",()=>d({de:"Ersetze string durch String",en:"Replace string with String",fr:"Remplacer string par String"})),r(v,"loopOverEmptyStatement",()=>j({de:"Hier wird eine leere Anweisung (; oder { }) wiederholt.",en:"Loop over empty statement (; or { }).",fr:"Boucle sur une instruction vide (; ou { })."})),r(v,"noMethodDeclarationAllowedHere",()=>j({de:"Hier ist keine Methodendeklaration möglich.",en:"No method declaration allowed here.",fr:"Aucune déclaration de méthode n'est autorisée ici."})),r(v,"constantMissingInCaseStatement",()=>j({de:"In diesem Case-Block fehlt zwischen case und dem Doppelpunkt die Konstante.",en:"Constant missing between case and colon.",fr:"Constante manquante entre case et le deux-points."})),r(v,"statementOrBlockExpected",()=>j({de:"Hier wird eine Anweisung oder ein Anweisungsblock (in geschweiften Klammern) erwartet.",en:"Statement or block-Statement in curly braces { ... } expected.",fr:"Instruction ou bloc d'instructions entre accolades { ... } attendu."})),r(v,"wrongSyntaxAfterKeywordNew",()=>j({de:"Es wird die Syntax new Klasse(Parameter...) oder new Typ[ArrayLänge]... erwartet.",en:"Keyword new has syntax new Class(parameters...) or new ArrayType[length].",fr:"Le mot-clé new a la syntaxe new Classe(paramètres...) ou new TypeTableau[longueur]."})),r(v,"secondOperandExpected",t=>j({de:"Rechts vom binären Operator "+t+" wird ein zweiter Operand erwartet.",en:`Expecting second Operand on right side of binary operator ${t}.`,fr:`Deuxième opérande attendue à droite de l'opérateur binaire ${t}.`})),r(v,"dotOperatorNotExpected",()=>j({de:"Der Punkt-Operator wird hier nicht erwartet.",en:"Dot operator (.) not expected",fr:"Opérateur point (.) non attendu."})),r(v,"squareBracketExpected",()=>j({de:"[ oder [] erwartet.",en:"[ or [] expected",fr:"[ ou [] attendu."})),r(v,"firstArrayDimensionMustNotBeZero",()=>j({de:"Die Länge der ersten Array-Dimension darf nicht 0 sein.",en:"Length of first array dimension must not be 0.",fr:"La longueur de la première dimension du tableau ne doit pas être 0."})),r(v,"expectedOtherToken",(t,e)=>j({de:`Erwartet wird: ${t} - Gefunden wurde: ${e}`,en:`Expected token: ${t} - Found: ${e}`,fr:`Jeton attendu : ${t} - Trouvé : ${e}`})),r(v,"expectedOtherTokens",(t,e)=>j({de:`Erwartet wird eines der Token: ${t} - Gefunden wurde: ${e}`,en:`Expected tokens: ${t} - Found: ${e}`,fr:`Jetons attendus : ${t} - Trouvé : ${e}`})),r(v,"insertSemicolonHere",()=>d({de:"Strichpunkt hier einfügen",en:"Insert semicolon here",fr:"Insérer un point-virgule ici"})),r(v,"semicolonExpected",t=>j({de:`Erwartet wird ein Strichpunkt (Semicolon). Gefunden wurde: ${t}`,en:`Semicolon (;) expected. Found: ${t}`,fr:`Point-virgule (;) attendu. Trouvé : ${t}.`})),r(v,"typeExpected",t=>j({de:`Erwartet wird ein Datentyp. Gefunden wurde: ${t}`,en:`Data type expected. Found: ${t}`,fr:`Type de données attendu. Trouvé : ${t}.`})),r(v,"identifierExpected",t=>j({de:`Erwartet wird ein Bezeichner (engl.: 'identifier'), d.h. der Name einer Klasse, Variable, ... . Gefunden wurde: ${t}`,en:`Identifier (that is: name of variable, class, ...) expected. Found: ${t}`,fr:`Identifiant (c'est-à-dire : nom de variable, de classe, ...) attendu. Trouvé : ${t}.`})),r(v,"importedTypesNotFound",t=>j({de:`Die importierten Typen ${t} konnten nicht gefunden werden.`,en:`Imported types ${t} not found.`,fr:`Les types importés ${t} n'ont pas été trouvés.`})),r(v,"multipleFieldsWithSameIdentifier",(t,e)=>j({de:`Es gibt in dieser Klasse/diesem enum ein weiteres Attribut mit dem Bezeichner ${t} in Zeile ${e}.`,en:`There's another field with signature ${t} in this class/this enum (line ${e}).`,fr:`Il existe un autre champ avec la signature ${t} dans cette classe/cet enum (ligne ${e}).`})),r(v,"multipleMethodsWithSameSignature",(t,e)=>j({de:`Es gibt in dieser Klasse/diesem Interface/diesem enum eine weitere Methode mit der Signatur ${t} in Zeile ${e}.`,en:`There's another method for this class/interface/enum with signature ${t} in line ${e}.`,fr:`Il existe une autre méthode pour cette classe/interface/enum avec la signature ${t} à la ligne ${e}.`})),r(v,"typenameAlreadyInUse",(t,e,i)=>j({de:`Es gibt einen weiteren Datentyp mit Bezeichner ${t}. Er findet sich in der Datei ${i} in Zeile ${e.startLineNumber}.`,en:`Identifier ${t} for this type is already in use. See File ${i}, line ${e.startLineNumber}.`,fr:`L'identifiant ${t} pour ce type est déjà utilisé. Voir le fichier ${i}, ligne ${e.startLineNumber}.`})),r(v,"typenameUsedInLibrary",t=>j({de:`Es gibt in der API bereits einen Typ (Klasse/Interface/Enum) mit dem Bezeichner ${t}.`,en:`Identifier ${t} is already used in the API.`,fr:`L'identifiant ${t} est déjà utilisé dans l'API.`})),r(v,"typeIsNotGeneric",t=>j({de:`Der Datentyp ${t} ist nicht generisch, daher können keine Typparameter in <...> angegeben werden.`,en:`Type ${t} is not generic, therefore type parameters in <...> are not possible.`,fr:`Le type de données ${t} n'est pas générique, par conséquent, les paramètres de type entre <...> ne sont pas possibles.`})),r(v,"genericTypeWithNonGenericReference",t=>j({de:`Der Datentyp ${t} ist generisch, wird hier aber in nicht-generischer Art gebraucht. Es sollten die Werte der generischen Typparameter in <...> angegeben werden.`,en:`Type ${t} is generic, but used in a non-generic way here. You should add type parameter values in <...>.`,fr:`Le type ${t} est générique, mais il est utilisé de manière non générique ici. Vous devriez ajouter les valeurs des paramètres de type entre <...>.`})),r(v,"wrongNumberOfGenericParameters",(t,e,i)=>j({de:`Der Datentyp ${t} hat ${e} generische Parameter, hier werden aber ${i} konkrete Datentypen dafür angegeben.`,en:`Type ${t} has ${e} generic parameters. Found: ${i} types.`,fr:`Le type ${t} a ${e} paramètres génériques, mais ${i} types concrets sont spécifiés ici.`})),r(v,"noPrimitiveTypeForGenericParameter",t=>j({de:`Als konkreter Typ für einen generischen Typparameter kann kein primitiver Datentyp (hier: ${t}) verwendet werden.`,en:`Can't use primitive Type ${t} for generic parameter.`,fr:`Un type de données primitif (ici : ${t}) ne peut pas être utilisé comme type concret pour un paramètre de type générique.`})),r(v,"actualGenericParameterNotSpecified",(t,e)=>j({de:`Für den generischen Parameter ${e} der Klasse/des Interfaces ${t} muss ein konkreter Typ angegeben werden.`,en:`Actual Type missing for generic Parameter ${e} of class/interface ${t}.`,fr:`Le type réel est manquant pour le paramètre générique ${e} de la classe/interface ${t}.`})),r(v,"cantReplaceGenericParamterBy",(t,e)=>j({de:`Der generische Typparameter ${t} kann nicht durch den Typ ${e} ersetzt werden.`,en:`Can't replace generic typeparameter ${t} with type ${e}.`,fr:`Impossible de remplacer le paramètre de type générique ${t} par le type ${e}.`})),r(v,"onlyClassesOrInterfacesAsUpperBounds",()=>j({de:"Nur Klassen und Interfaces können als upper bound für einen generischen Typparameter verwendet werden.",en:"Only classes and interfaces can be used as upper bound for generic parameter.",fr:"Seules les classes et les interfaces peuvent être utilisées comme borne supérieure pour un paramètre générique."})),r(v,"onlyClassesOrInterfacesAsLowerBounds",()=>j({de:"Nur Klassen und Interfaces können als lower bound für einen generischen Typparameter verwendet werden.",en:"Only classes and interfaces can be used as lower bound for generic parameter.",fr:"Seules les classes et les interfaces peuvent être utilisées comme borne inférieure pour un paramètre générique."})),r(v,"afterExtendsClassNeeded",()=>j({de:"Hinter extends muss eine Klasse stehen.",en:"After extends a class identifier is needed.",fr:"Un identifiant de classe est nécessaire après extends."})),r(v,"onlyInterfacesAfterImplements",()=>j({de:"Hinter implements können nur Interfaces stehen.",en:"Only interface identifiers are allowed after implements.",fr:"Seuls les identifiants d'interface sont autorisés après implements."})),r(v,"onlyInterfacesAfterExtends",()=>j({de:"Hinter extends können nur Interfaces stehen.",en:"Only interface identifiers are allowed after extends.",fr:"Seuls les identifiants d'interface sont autorisés après extends."})),r(v,"typeNotDefined",t=>j({de:`Der Datentyp ${t} ist hier nicht definiert.`,en:`Type ${t} is not defined here.`,fr:`Le type de données ${t} n'est pas défini ici.`})),r(v,"typeHasNoSubtype",(t,e)=>j({de:`Der Datentyp ${t} hat keinen Unterdatentyp ${e}.`,en:`Type ${t} has no subtype ${e}.`,fr:`Le type ${t} n'a pas de sous-type ${e}.`})),r(v,"typeIsNotVisible",t=>j({de:`Der Datentyp ${t} ist an dieser Stelle nicht sichtbar, da er nicht die Sichtbarkeit public besitzt.`,en:`Type ${t} is not visible here.`,fr:`Le type ${t} n'est pas visible ici.`})),r(v,"cantExtendFinalClass",()=>j({de:"Von einer final class können keine Unterklassen gebildet werden.",en:"You can't subclass a final class.",fr:"Vous ne pouvez pas créer de sous-classe à partir d'une classe finale."})),r(v,"abstractMethodsNotImplemented",(t,e)=>j({de:"Die Klasse "+t+" muss noch folgende Methoden ihrer abstrakten Oberklassen implementieren: "+e,en:"Class "+t+" has to implement methods of it's abstract base class: "+e,fr:`La classe ${t} doit encore implémenter les méthodes suivantes de ses classes de base abstraites : ${e}.`})),r(v,"interfaceMethodsNotImplemented",(t,e,i)=>j({de:"Die Klasse "+t+" muss noch folgende Methoden des Interfaces "+e+"implementieren: "+i,en:"Class "+t+" has to implement methods of interface "+e+": "+i,fr:`La classe ${t} doit encore implémenter les méthodes suivantes de l'interface ${e} : ${i}.`})),r(v,"methodOverridesFinalMethod",(t,e)=>j({de:`Die Methode ${t} überschreibt eine als final gekennzeichnete Methode der Oberklasse ${e}.`,en:`Method ${t} overrides final method of base class ${e}.`,fr:`La méthode ${t} surcharge une méthode marquée comme finale de la classe de base ${e}.`})),r(v,"overrideAnnotationNotNecessary",t=>j({de:`Die Methode ${t} überschreibt keine Methode mit gleicher Signatur einer Oberklasse, daher ist die @Override-Annotation unnötig.`,en:`Method ${t} doesn't override a method with identical signature in base class, therefore @Override is not necessary here.`,fr:`La méthode ${t} ne surcharge aucune méthode avec une signature identique dans une classe de base, par conséquent l'annotation @Override est inutile ici.`})),r(v,"parameterNotDefined",t=>j({de:`Der generische Parameter ${t} ist bei diesem Methodenaufruf unbestimmt.`,en:`Generic parameter ${t} is not bound in this method invocation.`,fr:`Le paramètre générique ${t} n'est pas lié dans cet appel de méthode.`})),r(v,"parameterContradictoryBound",(t,e)=>j({de:`Der generische Parameter ${t} hat bei diesem Methodenaufruf widersprüchliche Ausprägungen: ${e}`,en:`Generic parameter ${t} is bound in a contradictory way in this method call.`,fr:`Le paramètre générique ${t} est lié de manière contradictoire dans cet appel de méthode.`})),r(v,"cycleInInheritenceHierarchy",t=>j({de:`In der Vererbungshierarchie gibt es einen Zyklus: ${t} + " Daher kann leider nicht weiterkompiliert werden.`,en:`There's a inheritence-cycle: ${t} ... => compilation had to be cancelled.`,fr:`Il y a un cycle d'héritage : ${t} ... => la compilation a dû être annulée.`})),r(v,"internalError",()=>j({de:"Interner Fehler, siehe Konsolenausgabe des Browsers",en:"Internal error, see browser console output",fr:"Erreur interne, voir la sortie de la console du navigateur"})),r(v,"cyclicReferencesAmongStaticVariables",t=>j({de:`Die Initialisierung mehrerer statischer Attribute aus verschiedenen Klassen ist zyklisch: ${t}`,en:`Initialization of several static fields is cyclic: ${t}`,fr:`L'initialisation de plusieurs champs statiques est cyclique : ${t}.`})),r(v,"charIndexOutOfBounds",()=>d({de:"Zugriff auf Zeichen außerhalb des zulässingen Bereichs",en:"char index out of bounds",fr:"Index de caractère hors limites"})),r(v,"divideByZero",()=>d({de:"Teilen durch 0 nicht möglich",en:"division by zero not allowed",fr:"Division par zéro non autorisée"})),r(v,"threadWantsToWaitAndHasNoLockOnObject",()=>d({de:"Es wurde wait für ein Objekt aufgerufen, für das der aktuelle Thread kein Lock besitzt.",en:"Wait called on Object for which thread holds no lock.",fr:"Wait a été appelé sur un objet pour lequel le thread actuel ne possède aucun verrou."})),r(v,"threadWantsToNotifyAndHasNoLockOnObject",()=>d({de:"Es wurde notify für ein Objekt aufgerufen, für das der aktuelle Thread kein Lock besitzt.",en:"Notify called on Object for which thread holds no lock.",fr:"Notify a été appelé sur un objet pour lequel le thread actuel ne possède aucun verrou."})),r(v,"identifier",()=>d({de:"Bezeichner (engl.: identifier)",en:"identifier",fr:"identifiant"})),r(v,"floatingPointLiteral",()=>d({de:"Fließkomma-Konstante",en:"floating point literal",fr:"littéral à virgule flottante"})),r(v,"booleanLiteral",()=>d({de:"boolesche Konstante (d.h. true oder false)",en:"boolean literal (that is: true or false)",fr:"littéral booléen (c'est-à-dire : true ou false)"})),r(v,"stringLiteral",()=>d({de:"Zeichenketten-Konstante",en:"String literal",fr:"littéral de chaîne"})),r(v,"charLiteral",()=>d({de:"Char-Konstante",en:"char literal",fr:"littéral de caractère"})),r(v,"space",()=>d({de:"ein Leerzeichen",en:"space character",fr:"un caractère d'espace"})),r(v,"tab",()=>d({de:"ein Tabulatorzeichen",en:"tab character",fr:"un caractère de tabulation"})),r(v,"linebreak",()=>d({de:"ein Zeilenumbruch",en:"line break",fr:"un saut de ligne"})),r(v,"aToZ",()=>d({de:"eines der Zeichen a..z, A..Z, _",en:"one of a..z, A..Z, _",fr:"un des caractères a..z, A..Z, _"})),r(v,"comment",()=>d({de:"eine Kommentar",en:"a comment",fr:"un commentaire"})),r(v,"endOfText",()=>d({de:"das Ende des Programms",en:"end of sourcecode",fr:"fin du code source"})),r(v,"dd",()=>d({de:"",en:"",fr:""})),r(v,"primitiveType",()=>d({de:"Primitiver Datentyp",en:"primitive type",fr:"type primitif"})),r(v,"genericType",()=>d({de:"Generischer Datentyp",en:"generic type",fr:"type générique"})),r(v,"class",()=>d({de:"Klass",en:"class",fr:"classe"})),r(v,"enum",()=>d({de:"Enum",en:"enum",fr:"enum"})),r(v,"interface",()=>d({de:"Interface",en:"interface",fr:"interface"})),r(v,"nullType",()=>d({de:"Der Wert null",en:"null value",fr:"valeur nulle"})),r(v,"ReplaceTokenQuickfixDefaultMessage",(t,e)=>d({de:`Ersetze ${t} durch ${e}.`,en:`Replace ${t} by ${e}.`,fr:`Remplacez ${t} par ${e}.`})),r(v,"diAnnotationRequiresParameter",t=>j({id:"diAnnotationRequiresParameter",de:`Die Annotation @${t} benötigt einen Parameter (z.B. @${t}("meinName")).`,en:`Annotation @${t} requires a parameter (e.g. @${t}("myName")).`,fr:`L'annotation @${t} nécessite un paramètre (ex. @${t}("monNom")).`})),r(v,"diInstanceOnNonClass",()=>j({id:"diInstanceOnNonClass",de:"@Instance darf nur auf Klassen angewendet werden, nicht auf Interfaces oder Enums.",en:"@Instance can only be applied to classes, not to interfaces or enums.",fr:"@Instance ne peut être appliqué qu'aux classes, pas aux interfaces ou aux enums."})),r(v,"diInstanceOnAbstractClass",t=>j({id:"diInstanceOnAbstractClass",de:`@Instance kann nicht auf die abstrakte Klasse '${t}' angewendet werden, da sie nicht instanziiert werden kann.`,en:`@Instance cannot be applied to abstract class '${t}' because it cannot be instantiated.`,fr:`@Instance ne peut pas être appliqué à la classe abstraite '${t}' car elle ne peut pas être instanciée.`})),r(v,"diInstanceOnMainClass",()=>j({id:"diInstanceOnMainClass",de:"@Instance kann nicht auf die Hauptklasse angewendet werden.",en:"@Instance cannot be applied to the main class.",fr:"@Instance ne peut pas être appliqué à la classe principale."})),r(v,"diDuplicateInstanceName",t=>j({id:"diDuplicateInstanceName",de:`Der Instanzname '${t}' wird bereits von einer anderen Klasse verwendet.`,en:`The instance name '${t}' is already used by another class.`,fr:`Le nom d'instance '${t}' est déjà utilisé par une autre classe.`})),r(v,"diInstanceNoDefaultConstructor",t=>j({id:"diInstanceNoDefaultConstructor",de:`Die Klasse '${t}' hat keinen zugänglichen parameterlosen Konstruktor und kann daher nicht als @Instance verwendet werden.`,en:`Class '${t}' has no accessible no-argument constructor and therefore cannot be used as @Instance.`,fr:`La classe '${t}' n'a pas de constructeur sans paramètres accessible et ne peut donc pas être utilisée comme @Instance.`})),r(v,"diInjectOnStaticField",()=>j({id:"diInjectOnStaticField",de:"@Inject darf nicht auf statischen Feldern verwendet werden.",en:"@Inject must not be used on static fields.",fr:"@Inject ne doit pas être utilisé sur des champs statiques."})),r(v,"diInjectUnknownName",t=>j({id:"diInjectUnknownName",de:`Es gibt keine @Instance("${t}")-Klasse. Bitte überprüfe den Namen oder füge @Instance("${t}") zu einer Klasse hinzu.`,en:`There is no @Instance("${t}") class. Please check the name or add @Instance("${t}") to a class.`,fr:`Il n'y a pas de classe @Instance("${t}"). Vérifiez le nom ou ajoutez @Instance("${t}") à une classe.`})),r(v,"diCircularDependency",t=>j({id:"diCircularDependency",de:`Zirkuläre @Inject-Abhängigkeit erkannt: ${t}. Bitte entferne die zirkuläre Abhängigkeit.`,en:`Circular @Inject dependency detected: ${t}. Please remove the circular dependency.`,fr:`Dépendance circulaire @Inject détectée: ${t}. Veuillez supprimer la dépendance circulaire.`}));var p=(c=>(c[c.identifier=0]="identifier",c[c.shortConstant=1]="shortConstant",c[c.integerLiteral=2]="integerLiteral",c[c.longConstant=3]="longConstant",c[c.floatLiteral=4]="floatLiteral",c[c.doubleConstant=5]="doubleConstant",c[c.booleanLiteral=6]="booleanLiteral",c[c.stringLiteral=7]="stringLiteral",c[c.charLiteral=8]="charLiteral",c[c.true=9]="true",c[c.false=10]="false",c[c.keywordImport=11]="keywordImport",c[c.keywordPrint=12]="keywordPrint",c[c.keywordPrintln=13]="keywordPrintln",c[c.keywordClass=14]="keywordClass",c[c.keywordThis=15]="keywordThis",c[c.keywordSuper=16]="keywordSuper",c[c.keywordNew=17]="keywordNew",c[c.keywordInterface=18]="keywordInterface",c[c.keywordEnum=19]="keywordEnum",c[c.keywordVoid=20]="keywordVoid",c[c.keywordAbstract=21]="keywordAbstract",c[c.keywordPublic=22]="keywordPublic",c[c.keywordProtected=23]="keywordProtected",c[c.keywordPrivate=24]="keywordPrivate",c[c.keywordTransient=25]="keywordTransient",c[c.keywordStatic=26]="keywordStatic",c[c.keywordSynchronized=27]="keywordSynchronized",c[c.keywordExtends=28]="keywordExtends",c[c.keywordImplements=29]="keywordImplements",c[c.keywordWhile=30]="keywordWhile",c[c.keywordDo=31]="keywordDo",c[c.keywordFor=32]="keywordFor",c[c.keywordSwitch=33]="keywordSwitch",c[c.keywordCase=34]="keywordCase",c[c.keywordDefault=35]="keywordDefault",c[c.keywordIf=36]="keywordIf",c[c.keywordThen=37]="keywordThen",c[c.keywordElse=38]="keywordElse",c[c.keywordReturn=39]="keywordReturn",c[c.keywordBreak=40]="keywordBreak",c[c.keywordContinue=41]="keywordContinue",c[c.keywordNull=42]="keywordNull",c[c.keywordFinal=43]="keywordFinal",c[c.keywordInstanceof=44]="keywordInstanceof",c[c.keywordThrow=45]="keywordThrow",c[c.keywordTry=46]="keywordTry",c[c.keywordCatch=47]="keywordCatch",c[c.keywordFinally=48]="keywordFinally",c[c.keywordVar=49]="keywordVar",c[c.leftBracket=50]="leftBracket",c[c.rightBracket=51]="rightBracket",c[c.leftSquareBracket=52]="leftSquareBracket",c[c.rightSquareBracket=53]="rightSquareBracket",c[c.leftCurlyBracket=54]="leftCurlyBracket",c[c.rightCurlyBracket=55]="rightCurlyBracket",c[c.leftRightSquareBracket=56]="leftRightSquareBracket",c[c.minusMinus=57]="minusMinus",c[c.plusPlus=58]="plusPlus",c[c.dot=59]="dot",c[c.modulo=60]="modulo",c[c.minus=61]="minus",c[c.plus=62]="plus",c[c.multiplication=63]="multiplication",c[c.division=64]="division",c[c.lower=65]="lower",c[c.greater=66]="greater",c[c.lowerOrEqual=67]="lowerOrEqual",c[c.greaterOrEqual=68]="greaterOrEqual",c[c.equal=69]="equal",c[c.notEqual=70]="notEqual",c[c.assignment=71]="assignment",c[c.plusAssignment=72]="plusAssignment",c[c.minusAssignment=73]="minusAssignment",c[c.multiplicationAssignment=74]="multiplicationAssignment",c[c.divisionAssignment=75]="divisionAssignment",c[c.moduloAssignment=76]="moduloAssignment",c[c.and=77]="and",c[c.or=78]="or",c[c.ampersand=79]="ampersand",c[c.lambdaOperator=80]="lambdaOperator",c[c.singleQuote=81]="singleQuote",c[c.doubleQuote=82]="doubleQuote",c[c.ANDAssigment=83]="ANDAssigment",c[c.XORAssigment=84]="XORAssigment",c[c.ORAssigment=85]="ORAssigment",c[c.shiftLeftAssigment=86]="shiftLeftAssigment",c[c.shiftRightAssigment=87]="shiftRightAssigment",c[c.shiftRightUnsignedAssigment=88]="shiftRightUnsignedAssigment",c[c.OR=89]="OR",c[c.XOR=90]="XOR",c[c.tilde=91]="tilde",c[c.shiftRightUnsigned=92]="shiftRightUnsigned",c[c.shiftRight=93]="shiftRight",c[c.shiftLeft=94]="shiftLeft",c[c.ternaryOperator=95]="ternaryOperator",c[c.colon=96]="colon",c[c.ellipsis=97]="ellipsis",c[c.not=98]="not",c[c.semicolon=99]="semicolon",c[c.comma=100]="comma",c[c.backslash=101]="backslash",c[c.at=102]="at",c[c.space=103]="space",c[c.tab=104]="tab",c[c.newline=105]="newline",c[c.linefeed=106]="linefeed",c[c.identifierChar=107]="identifierChar",c[c.comment=108]="comment",c[c.endofSourcecode=109]="endofSourcecode",c[c.binaryOp=110]="binaryOp",c[c.unaryPrefixOp=111]="unaryPrefixOp",c[c.localVariableDeclaration=112]="localVariableDeclaration",c[c.localVariableDeclarations=113]="localVariableDeclarations",c[c.dereferenceAttribute=114]="dereferenceAttribute",c[c.literal=115]="literal",c[c.arrayLiteral=116]="arrayLiteral",c[c.castValue=117]="castValue",c[c.selectArrayElement=118]="selectArrayElement",c[c.methodCall=119]="methodCall",c[c.newObject=120]="newObject",c[c.initialFieldAssignementInMainProgram=121]="initialFieldAssignementInMainProgram",c[c.firstMainProgramStatement=122]="firstMainProgramStatement",c[c.global=123]="global",c[c.program=124]="program",c[c.block=125]="block",c[c.synchronizedBlock=126]="synchronizedBlock",c[c.multiNode=127]="multiNode",c[c.plusPlusMinusMinusSuffix=128]="plusPlusMinusMinusSuffix",c[c.genericParameterDefinition=129]="genericParameterDefinition",c[c.symbol=130]="symbol",c[c.annotation=131]="annotation",c[c.enhancedForLoop=132]="enhancedForLoop",c[c.astProgram=133]="astProgram",c[c.instanceInitializerBlock=134]="instanceInitializerBlock",c[c.staticInitializerBlock=135]="staticInitializerBlock",c[c.anonymousClass=136]="anonymousClass",c[c.fieldDeclaration=137]="fieldDeclaration",c[c.methodDeclaration=138]="methodDeclaration",c[c.parameterDeclaration=139]="parameterDeclaration",c[c.newArray=140]="newArray",c[c.print=141]="print",c[c.println=142]="println",c[c.initializeEnumValue=143]="initializeEnumValue",c[c.type=144]="type",c[c.baseType=145]="baseType",c[c.wildcardType=146]="wildcardType",c[c.voidType=147]="voidType",c[c.varType=148]="varType",c[c.arrayType=149]="arrayType",c[c.genericTypeInstantiation=150]="genericTypeInstantiation",c))(p||{}),$e={0:"Bezeichner",2:v.identifier(),4:v.floatingPointLiteral(),6:v.booleanLiteral(),7:v.stringLiteral(),8:v.charLiteral(),9:"true",10:"false",14:"class",15:"this",16:"super",17:"new",18:"interface",19:"enum",20:"void",21:"abstract",22:"public",23:"protected",24:"private",25:"transient",26:"static",27:"synchronized",28:"extends",29:"implements",30:"while",31:"do",32:"for",33:"switch",34:"case",35:"default",36:"if",37:"then",38:"else",39:"return",40:"break",41:"continue",42:"null",43:"final",44:"instanceof",45:"throw",46:"try",47:"catch",48:"finally",49:"var",11:"import",12:"print",13:"println",50:"(",51:")",52:"[",53:"]",54:"{",55:"}",56:"[]",59:".",61:"-",60:"%",62:"+",63:"*",64:"/",81:"'",82:'"',57:"--",58:"++",65:"<",66:">",67:"<=",68:">=",69:"==",70:"!=",71:"=",72:"+=",73:"-=",74:"*=",75:"/=",76:"%=",79:"&",80:"->",77:"&&",78:"||",98:"!",83:"&=",84:"^=",85:"|=",86:"<<=",87:">>=",88:">>>=",89:"|",90:"^",91:"~",94:"<<",93:">>",92:">>>",95:"?",99:";",96:":",97:"...",100:",",101:"\\",102:"@",103:v.space(),104:v.tab(),105:v.linebreak(),107:v.aToZ(),108:v.comment(),109:v.endOfText()},nc={"(":50,")":51,"[":52,"]":53,"{":54,"}":55,".":59,",":100,"-":61,"%":60,"+":62,"*":63,"/":64,"\\":101,"@":102,"'":81,'"':82,"<":65,">":66,"=":71,"&":77,"|":78,"!":98,"?":95,"^":90,"~":91,";":99,":":96,"...":97," ":103,슠:103," ":103," ":104,"\n":105,"\r":106},Tb={class:14,this:15,super:16,new:17,interface:18,enum:19,void:20,abstract:21,public:22,protected:23,private:24,transient:25,static:26,synchronized:27,extends:28,implements:29,while:30,do:31,for:32,switch:33,case:34,default:35,if:36,then:37,else:38,return:39,break:40,continue:41,null:42,final:43,instanceof:44,throw:45,try:46,catch:47,finally:48,var:49,true:9,false:10,import:11,print:12,println:13},rc={n:` `,r:"\r",t:" ",'"':'"',"'":"'","\\":"\\"};class Ke{static intColorToHexRGB(t){if(t==null)return"---";{let e=t.toString(16);for(;e.length<6;)e="0"+e;return"#"+e}}static rgbColorToHexRGB(t,e,i){let s=(t*65536+e*256+i).toString(16);for(;s.length<6;)s="0"+s;return"#"+s}static intColorToRGB(t){return t==null?"---":"rgb("+((t&16711680)>>16)+", "+((t&65280)>>8)+", "+(t&255)+")"}static parseColorToOpenGL(t){if(t==null)return{color:void 0,alpha:1};let e=this.predefinedColors[t];if(e!=null)return{color:e,alpha:1};let i=t.match(/^#([0-9a-f]{6})$/i);if(i&&i.length>1){let a=i[1];if(a)return{color:65536*parseInt(a.substr(0,2),16)+256*parseInt(a.substr(2,2),16)+parseInt(a.substr(4,2),16),alpha:1}}let n=t.match(/^#([0-9a-f]{8})$/i);if(n&&n.length>1){let a=n[1];if(a)return{color:65536*parseInt(a.substr(0,2),16)+256*parseInt(a.substr(2,2),16)+parseInt(a.substr(4,2),16),alpha:parseInt(a.substr(6,2),16)/255}}let s=t.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);return s?{color:parseInt(s[1])*65536+parseInt(s[2])*256+parseInt(s[3]),alpha:1}:(s=t.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+\.?\d+)\s*\)$/i),s?{color:parseInt(s[1])*65536+parseInt(s[2])*256+parseInt(s[3]),alpha:parseFloat(s[4])}:{color:16711680,alpha:1})}}r(Ke,"predefinedColors",{aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedAlmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgrey:11119017,darkgreen:25600,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,grau:8421504,green:32768,greenyellow:11403055,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgrey:13882323,lightgreen:9498256,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldLace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,sand:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});class hg{}r(hg,"staticInitializerComment",()=>d({de:"Code zum Initialisieren der statischen Attribute",en:"Code to initialize static fields"}));class er{constructor(t,e){r(this,"lineNumber");r(this,"column");this.lineNumber=t,this.column=e}with(t=this.lineNumber,e=this.column){return t===this.lineNumber&&e===this.column?this:new er(t,e)}delta(t=0,e=0){return this.with(this.lineNumber+t,this.column+e)}equals(t){return er.equals(this,t)}static equals(t,e){return!t&&!e?!0:!!t&&!!e&&t.lineNumber===e.lineNumber&&t.column===e.column}isBefore(t){return er.isBefore(this,t)}static isBefore(t,e){return t.lineNumberi||t===i&&e>n?(this.startLineNumber=i,this.startColumn=n,this.endLineNumber=t,this.endColumn=e):(this.startLineNumber=t,this.startColumn=e,this.endLineNumber=i,this.endColumn=n)}isEmpty(){return U.isEmpty(this)}static isEmpty(t){return t.startLineNumber===t.endLineNumber&&t.startColumn===t.endColumn}containsPosition(t){return U.containsPosition(this,t)}static containsPosition(t,e){return!(e.lineNumbert.endLineNumber||e.lineNumber===t.startLineNumber&&e.columnt.endColumn)}static strictContainsPosition(t,e){return!(e.lineNumbert.endLineNumber||e.lineNumber===t.startLineNumber&&e.column<=t.startColumn||e.lineNumber===t.endLineNumber&&e.column>=t.endColumn)}containsRange(t){return U.containsRange(this,t)}static containsRange(t,e){return!(e.startLineNumbert.endLineNumber||e.endLineNumber>t.endLineNumber||e.startLineNumber===t.startLineNumber&&e.startColumnt.endColumn)}strictContainsRange(t){return U.strictContainsRange(this,t)}static strictContainsRange(t,e){return!(e.startLineNumbert.endLineNumber||e.endLineNumber>t.endLineNumber||e.startLineNumber===t.startLineNumber&&e.startColumn<=t.startColumn||e.endLineNumber===t.endLineNumber&&e.endColumn>=t.endColumn)}plusRange(t){return U.plusRange(this,t)}static plusRange(t,e){let i,n,s,a;return e.startLineNumbert.endLineNumber?(s=e.endLineNumber,a=e.endColumn):e.endLineNumber===t.endLineNumber?(s=e.endLineNumber,a=Math.max(e.endColumn,t.endColumn)):(s=t.endLineNumber,a=t.endColumn),new U(i,n,s,a)}intersectRanges(t){return U.intersectRanges(this,t)}static intersectRanges(t,e){let i=t.startLineNumber,n=t.startColumn,s=t.endLineNumber,a=t.endColumn;const l=e.startLineNumber,h=e.startColumn,u=e.endLineNumber,m=e.endColumn;return iu?(s=u,a=m):s===u&&(a=Math.min(a,m)),i>s||i===s&&n>a?null:new U(i,n,s,a)}equalsRange(t){return U.equalsRange(this,t)}static equalsRange(t,e){return!t&&!e?!0:!!t&&!!e&&t.startLineNumber===e.startLineNumber&&t.startColumn===e.startColumn&&t.endLineNumber===e.endLineNumber&&t.endColumn===e.endColumn}getEndPosition(){return U.getEndPosition(this)}static getEndPosition(t){return new er(t.endLineNumber,t.endColumn)}getStartPosition(){return U.getStartPosition(this)}static getStartPosition(t){return new er(t.startLineNumber,t.startColumn)}toString(){return"["+this.startLineNumber+","+this.startColumn+" -> "+this.endLineNumber+","+this.endColumn+"]"}setEndPosition(t,e){return new U(this.startLineNumber,this.startColumn,t,e)}setStartPosition(t,e){return new U(t,e,this.endLineNumber,this.endColumn)}collapseToStart(){return U.collapseToStart(this)}static collapseToStart(t){return new U(t.startLineNumber,t.startColumn,t.startLineNumber,t.startColumn)}collapseToEnd(){return U.collapseToEnd(this)}static collapseToEnd(t){return new U(t.endLineNumber,t.endColumn,t.endLineNumber,t.endColumn)}delta(t){return new U(this.startLineNumber+t,this.startColumn,this.endLineNumber+t,this.endColumn)}static fromPositions(t,e=t){return new U(t.lineNumber,t.column,e.lineNumber,e.column)}static lift(t){return t?new U(t.startLineNumber,t.startColumn,t.endLineNumber,t.endColumn):null}static isIRange(t){return t&&typeof t.startLineNumber=="number"&&typeof t.startColumn=="number"&&typeof t.endLineNumber=="number"&&typeof t.endColumn=="number"}static areIntersectingOrTouching(t,e){return!(t.endLineNumbert.startLineNumber}toJSON(){return this}}class qh{constructor(t,e,i){r(this,"documentation");r(this,"hiddenWhenDebugging");this.identifier=t,this.identifierRange=e,this.module=i}onStackframe(){return!1}getDocumentation(){if(this.documentation)return typeof this.documentation=="string"?this.documentation:this.documentation()}}class Rh extends qh{constructor(){super(...arguments);r(this,"stackframePosition");r(this,"isFinal",!1)}onStackframe(){return!0}getValue(e,i){return e[i+this.stackframePosition]}}class $b{constructor(t,e){r(this,"childTables",[]);r(this,"stackframe");r(this,"identifierToSymbolMap",new Map);r(this,"hiddenWhenDebugging");this.range=t,this.parent=e,e&&e.childTables.push(this)}addSymbol(t){this.identifierToSymbolMap.set(t.identifier,t)}findSymbolTableAtPosition(t){if(!U.containsPosition(this.range,t))return;let e=this;for(let i of this.childTables){let n=i.findSymbolTableAtPosition(t);n&&(e=n)}return e}}class Ib{constructor(t){r(this,"nextFreePosition",0);r(this,"numberOfThisObjects",0);r(this,"numberOfParameters",0);r(this,"numberOfLocalVariables",0);r(this,"numberOfReplLocalVariables",0);r(this,"positionToSymbolMap",{});this.nextFreePosition=t,this.numberOfThisObjects=t}addSymbol(t,e){switch(e){case"parameter":this.numberOfParameters++;break;case"localVariable":this.numberOfLocalVariables++;break}let i=this.nextFreePosition++;t.stackframePosition=i,this.positionToSymbolMap[i]=t}insertInvisibleParameter(){this.numberOfParameters++}insertInvisibleLocalVariableAndGetItsIndex(){let t=this.nextFreePosition++;return this.numberOfLocalVariables++,t}}class Eb extends qh{}class Hi extends Eb{constructor(e,i,n,s,a=p.keywordPublic){super(e,i,n);r(this,"_isStatic",!1);r(this,"_isFinal",!1);r(this,"_isTransient",!1);r(this,"classEnum");r(this,"internalName");r(this,"template");r(this,"initialValue");r(this,"initialValueIsConstant",!1);r(this,"initializedBeforeConstructor");r(this,"isInnerClassCopyOfOuterClassLocalVariable");this.module=n,this.type=s,this.visibility=a}getFieldIndentifier(){return this.getInternalName()}getCopyWithConcreteType(e){let i=this.type.getCopyWithConcreteType(e);if(i==this.type)return this;let n=new Hi(this.identifier,this.identifierRange,this.module,i,this.visibility);return n.documentation=this.documentation,n.internalName=this.getInternalName(),n}getInternalName(){if(!this.internalName&&(this.internalName="$f_"+this.identifier,this.classEnum instanceof Le)){let e=this.classEnum.getExtends();for(;e;)e.getFields().find(i=>i.identifier==this.identifier)&&(this.internalName="_"+this.internalName),e=e.getExtends()}return this.internalName}getValue(e,i){throw new Error("Method not implemented.")}getDeclaration(){var i,n;if((i=this.classEnum)!=null&&i.isMainClass)return this.toString();let e=$e[this.visibility]+" ";return this._isStatic&&(e+="static "),this._isFinal&&(e+="final "),e+((n=this.type)==null?void 0:n.toString())+" "+this.identifier}toString(){var e;return((e=this.type)==null?void 0:e.toString())+" "+this.identifier}getType(){return this.type}isStatic(){return this._isStatic}isFinal(){return this._isFinal}isTransient(){return this._isTransient}}class Db extends qh{constructor(t,e,i){super(t,e,i)}getType(){return this}}class No extends Db{constructor(e,i,n){super(e,i,n);r(this,"isPrimitive");r(this,"genericTypeParameters");this.isPrimitive=!1}hasGenericParameters(){return this.isPrimitive||!this.genericTypeParameters?!1:this.genericTypeParameters.length>0}isUsableAsIndex(){return this.isPrimitive&&this.isUsableAsIndex()}registerExtendsImplementsOnAncestors(){}getInternalName(){return this.identifier}getChildTypeByIdentifier(e){}getPath(){return[this.identifier]}}class ei extends No{constructor(e){super(e.identifier,e.identifierRange,e.module);r(this,"isMainClass",!1);r(this,"innerTypes",[]);this.nonPrimitiveType=e}getAbsoluteName(){return this.nonPrimitiveType.getAbsoluteName()}getCompletionItemDetail(){return""}get runtimeClass(){return this.nonPrimitiveType.runtimeClass}get outerType(){return this.nonPrimitiveType.outerType}getCompletionItems(e,i,n,s,a){return this.nonPrimitiveType.getCompletionItems(e,i,n,s,a,!0)}fastExtendsImplements(e){return this.nonPrimitiveType.fastExtendsImplements(e)}getCopyWithConcreteType(e){return this}getDefaultValue(){return null}getPossibleMethods(e,i,n){return this.nonPrimitiveType.getPossibleMethods(e,i,n)}getField(e,i){return this.nonPrimitiveType.getField(e,i,!0)}canImplicitlyCastTo(e){return!1}toString(){return this.nonPrimitiveType.toString()}getDeclaration(){return this.nonPrimitiveType.getDeclaration()}getFields(){return this.nonPrimitiveType.getFields().filter(e=>e._isStatic)}}class o{}r(o,"objectConstructorComment",()=>d({de:"Erstellt ein neues Objekt.",en:"Creates a new object instance."})),r(o,"objectToStringComment",()=>d({de:"Wandelt das Objekt in eine Zeichenkette um und liefert diese zurück.",en:"Returns a String representation of this object."})),r(o,"objectEqualsComment",()=>d({de:"Gibt genau dann true zurück, wenn das Objekt und das übergebene Objekt 'gleich' sind.",en:'Indicates whether some other object is "equal to" this one.'})),r(o,"objectWaitComment",()=>d({de:"Bewirkt, dass der aktuelle Thread wartet bis in einem anderen Thread die Methode notify() oder notifyAll() dieses Objekts aufgerufen wird.",en:"Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object."})),r(o,"objectWaitWithTimeoutComment",()=>d({de:"Bewirkt, dass der aktuelle Thread wartet bis in einem anderen Thread die Methode notify() oder notifyAll() dieses Objekts aufgerufen wird oder das übergebene Timeout (in ms) abläuft.",en:"Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object or given timeout elapsed."})),r(o,"objectNotifyComment",()=>d({de:"Weckt einen der Threads auf, der auf den Monitor dieses Objektes wartet.",en:"Wakes up a single thread that is waiting on this object's monitor."})),r(o,"objectNotifyAllComment",()=>d({de:"Weckt alle Threads auf, die auf den Monitor dieses Objektes warten.",en:"Wakes up all threads that are waiting on this object's monitor."})),r(o,"objectGetClassComment",()=>d({de:"Gibt das Class-Objekt zurück, das der Klasse dieses Objekts zugeordnet ist.",en:"Returns the runtime class of this Object."})),r(o,"classFieldComment",()=>d({de:"Gibt das Class-Objekt zurück, das der Klasse dieses Objekts zugeordnet ist.",en:"Returns the runtime class of this Object."})),r(o,"classClassComment",()=>d({de:"Jeder Klasse/jedem enum ist ein Objekt der Klasse Class zugeordnet.",en:"To each class/enum belongs an object of class Class."})),r(o,"classGetNameComment",()=>d({de:"Gibt den Bezeichner der Klasse zurück.",en:"Returns the name of the class/enum."})),r(o,"stringClassComment",()=>d({de:"Ein String ist eine Zeichenkette.",en:"A String is a character sequence."})),r(o,"stringCompareToNullpointerException",()=>d({de:"Der Vergleich mit null ist nicht zulässig.",en:"Comparison with null is not possible."})),r(o,"stringConstructorComment",()=>d({de:"Erzeugt ein neues, leeres String-Objekt.",en:"Creates a new empty string object."})),r(o,"stringConstructorComment2",()=>d({de:"Erzeugt ein String-Objekt auf Grundlage des übergebenen.",en:"Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string."})),r(o,"stringConstructorComment3",()=>d({de:"Erzeugt ein String-Objekt auf Grundlage des übergebenen char[].",en:"Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string."})),r(o,"stringLengthComment",()=>d({de:"Gibt die Länge des Strings (== Anzahl an Zeichen) zurück.",en:"Returns the length of this string (number of characters)."})),r(o,"stringIndexOfComment1",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String zum ersten Mal auftritt. Gibt -1 zurück, falls dieser nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified substring. Returns -1 if String does not contain given String."})),r(o,"stringIndexOfComment2",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String NACH fromIndex zum ersten Mal auftritt. Gibt -1 zurück, falls dieser NACH fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified substring, starting at the specified index. Returns -1 if String does not contain given String after given Index."})),r(o,"stringIndexOfComment3",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen zum ersten Mal auftritt. Gibt -1 zurück, falls dieses nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified character. Returns -1 if String does not contain given character."})),r(o,"stringIndexOfComment4",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen NACH fromIndex zum ersten Mal auftritt. Gibt -1 zurück, falls dieses NACH fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the first occurrence of the specified character, starting at the specified index. Returns -1 if String does not contain given character after given Index."})),r(o,"stringCharAtComment",()=>d({de:"Gibt das Zeichen an der angegebenen Position zurück. Das erste Zeichen im String hat Position 0.",en:"Returns the char value at the specified index. An index ranges from 0 to length() - 1. The first char value of the sequence is at index 0, the next at index 1, and so on, as for array indexing."})),r(o,"compareToIgnoreCaseComment",()=>d({de:"Vergleicht die beiden Zeichenketten lexikalisch ohne Berücksichtigung von Klein- und Großschreibung und gibt entsprechend -1, 0 oder 1 zurück.",en:"Compares two strings lexicographically, ignoring case differences. This method returns an integer whose sign is that of calling compareTo with normalized versions of the strings where case differences have been eliminated by calling Character.toLowerCase(Character.toUpperCase(character)) on each character."})),r(o,"stringConcatComment",()=>d({de:"Gibt einen String zurück, der entsteht, indem man den übergebenen String hinter diesen hängt. Verändert den String dabei aber nicht.",en:"Concatenates the specified string to the end of this string"})),r(o,"stringContainsComment",()=>d({de:"Gibt genau dann true zurück, wenn der String den übergebenen String enthält.",en:"Returns true if this String contains given String."})),r(o,"stringEndsWithComment",()=>d({de:"Gibt genau dann true zurück, wenn der String mit dem übergebenen String endet.",en:"Tests if this string ends with the specified suffix."})),r(o,"stringStartsWithComment",()=>d({de:"Gibt genau dann true zurück, wenn der String mit dem übergebenen String beginnt.",en:"Tests if this string starts with the specified prefix."})),r(o,"stringEqualsIgnoreCaseComment",()=>d({de:"Gibt genau dann true zurück, wenn der übergebene String diesem String bis auf Klein- und Großschreibung gleicht.",en:"Compares this String to another String, ignoring case considerations. Two strings are considered equal ignoring case if they are of the same length and corresponding characters in the two strings are equal ignoring case."})),r(o,"stringIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn der String leer ist, sich also keine Zeichen darin befinden. Das ist wiederum genau dann der Fall, wenn die Länge des Strings 0 beträgt.",en:"Returns true if, and only if, length() is 0."})),r(o,"stringLastIndexOfComment1",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String zum letzten Mal auftritt. Gibt -1 zurück, falls dieser nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified substring. Returns -1 if String does not contain given String."})),r(o,"stringLastIndexOfComment2",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem der übergebene String VOR fromIndex zum letzten Mal auftritt. Gibt -1 zurück, falls dieser VOR fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified substring, starting at the specified index backwards. Returns -1 if String does not contain given String before given Index."})),r(o,"stringLastIndexOfComment3",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen zum letzten Mal auftritt. Gibt -1 zurück, falls dieses nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified character. Returns -1 if String does not contain given character."})),r(o,"stringLastIndexOfComment4",()=>d({de:"Gib den Index innerhalb dieses Strings zurück, ab dem das übergebene Zeichen VOR fromIndex zum letzten Mal auftritt. Gibt -1 zurück, falls dieses VOR fromIndex nicht im String enthalten ist.",en:"Returns the index within this string of the last occurrence of the specified character, starting at the specified index backwards. Returns -1 if String does not contain given character before given Index."})),r(o,"stringToLowerCaseComment",()=>d({de:"Gibt einen String zurück, der den String in Kleinschreibung enthält.",en:"Converts all of the characters in this String to lower case using the rules of the default locale."})),r(o,"stringToUpperCaseComment",()=>d({de:"Gibt einen String zurück, der den String in Großschreibung enthält.",en:"Converts all of the characters in this String to upper case using the rules of the default locale."})),r(o,"stringSubstringComment1",()=>d({de:"Gibt den Teilstring ab der übergebenen Position zurück. Position 0 ist der Beginn des Strings.",en:"Returns a string that is a substring of this string from given position on. Position 0 is start of string."})),r(o,"stringSubstringComment2",()=>d({de:"Gibt den Teilstring zwischen den beiden übergebenen Positionen zurück. Position 0 ist der Beginn des Strings.",en:"Returns a string that is a substring of this string between given positions. Position 0 is start of string."})),r(o,"stringTrimComment",()=>d({de:"Gibt den String zurück, der entsteht, wenn man an Beginn und Ende alle unsichtbaren Zeichen (d.h. Leerzeichen, tabs und Zeilenumbrüche) entfernt.",en:"Returns a string whose value is this string, with any leading and trailing whitespace removed."})),r(o,"stringReplaceComment",()=>d({de:"Ersetzt alle Vorkommen von **target** durch **replacement** und gibt die entstandene Zeichenkette zurück. Die Zeichenkette selbst wird nicht verändert.",en:"Replaces each substring of this string that matches the literal target sequence with the specified literal replacement sequence."})),r(o,"stringReplaceAllComment",()=>d({de:"Durchsucht den String mit dem regulären Ausdruck (regex) und ersetzt **alle** Fundstellen durch **replacement**.",en:"Replaces each substring of this string that matches the given regular expression with the given replacement."})),r(o,"stringMatchesComment",()=>d({de:"Gibt genau dann true zurück, wenn der Wert der Zeichenkette dem regulären Ausdruck (regex) entspricht.",en:"Tells whether or not this string matches the given regular expression."})),r(o,"stringReplaceFirstComment",()=>d({de:"Durchsucht den String mit dem regulären Ausdruck (regex) und ersetzt **die erste** Fundstelle durch **replacement**.",en:"Replaces the first substring of this string that matches the given regular expression with the given replacement."})),r(o,"stringSplitComment",()=>d({de:"Teilt die Zeichenkette an den Stellen, die durch den regulären Ausdruck (regex) definiert sind, in Teile auf. Die Fundstellen des regex werden dabei weggelassen. Gibt die Teile als String-Array zurück.",en:"Splits this string around matches of the given regular expression."})),r(o,"hashCodeComment",()=>d({de:"Gibt den Hashcode des String zurück. Er wird wie folgt berechnet: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]. Dabei ist s[i] das i-te Zeichen des Strings.",en:"Returns a hash code for this string. The hash code for a String object is computed as s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]"})),r(o,"stringToCharArrayComment",()=>d({de:"Wandelt den String in ein char[] um.",en:"Converts given String to char[]."})),r(o,"stringValueOfComment",()=>d({de:"Wandelt den Parameterwert in eine Zeichenkette um.",en:"Returns the string representation of given value."})),r(o,"world3dSetBackgroundColorIntComment",()=>d({de:"Setzt die Hintergrundfarbe. Die Farbe wird als integer-Zahl erwartet. Am besten schreibt man sie als Hexadezimalzahl, also z.B. setBackgroundColor(0xff8080).",en:"Sets world's background color. Color is coded as integer number, e.g. in hexadecimal writing (setBackgroundColor(0xff8080))."})),r(o,"worldSetBackgroundColorColorComment",()=>d({de:"Setzt die Hintergrundfarbe. Die Farbe wird als Color-Objekt erwartet.",en:"Sets world's background color. Color is coded as color object."})),r(o,"world3dSetBackgroundColorStringComment",()=>d({de:'Setzt die Hintergrundfarbe. Die Farbe ist entweder eine vordefinierte Farbe ("schwarz", "rot", ...) oder eine css-Farbe der Art "#ffa7b3" (ohne alpha), "#ffa7b380" (mit alpha), "rgb(172, 22, 18)" oder "rgba(123, 22,18, 0.3)',en:`Sets world's background color. Color is coded as predefined color ("black", "red", ...) or css color like "#ffa7b3" (ohne alpha), "#ffa7b380" (mit alpha), "rgb(172, 22, 18)" oder "rgba(123, 22,18, 0.3).`})),r(o,"baseWorldAddMouseListenerComment",()=>d({de:"Fügt einen neuen MouseListener hinzu, dessen Methoden bei Mausereignissen aufgerufen werden.",en:"Adds a MouseLister object. It's methods are called every time a mouse event occurs."})),r(o,"baseWorldLockPointerComment",()=>d({de:"Versteckt den Mauscursor und fängt ihn ein, so dass er sich nicht mehr aus dem Grafikbereich bewegen kann. Diese Methode ist z.B. für Spiele nützlich. Um den Cursor wieder sichtbar zu machen und die Einschränkung aufzuheben, rufen Sie unlockPointer() auf.",en:"Hides the mouse cursor and captures it, preventing it from moving outside the graphics area. This method is useful for games. To make the cursor visible again and remove the restriction, call unlockPointer()."})),r(o,"baseWorldUnlockPointerComment",()=>d({de:"Macht den Mauscursor wieder sichtbar und hebt die Einschränkung auf, so dass er sich wieder frei bewegen kann.",en:"Makes the mouse cursor visible again and removes the restriction, allowing it to move freely."})),r(o,"worldGetLightsComment",()=>d({de:"Gibt ein Array mit allen Light3d-Objekten zurück.",en:"Returns an array containing all Light3d objects"})),r(o,"worldRemoveAllLightsComment",()=>d({de:"Entfernt alle Light3d-Objekte.",en:"Removes all Light3d objects."})),r(o,"worldRemoveLightComment",()=>d({de:"Entfernt das Light3d-Objekt. Die Lichtquelle ist dann nicht mehr aktiv.",en:"Removes given Light3d object."})),r(o,"worldAddLightComment",()=>d({de:"Fügt der Szene die gegebene Lichtquelle hinzu.",en:"Adds given Light3d object."})),r(o,"worldMoveComment",()=>d({de:`Verschiebt alle Objekte der Welt um dx nach rechts und dy nach unten. Tipp: Falls Objekte NICHT mitverschoben werden sollen, rufe die Methode setStatic(true) auf.`,en:`Moves all objects in this word by dx to the right and by dy down. Hint: If objects should NOT move with world, invoke method setStatic(true) for them.`})),r(o,"worldRotateComment",()=>d({de:`Rotiert die Welt um den angegebenen Winkel (in Grad!) im Uhrzeigersinn. Drehpunkt ist der Punkt (centerX, centerY). Tipp: Falls Objekte NICHT mitgedreht werden sollen, rufe die Methode setStatic(true) auf.`,en:`Rotates world by angleInDeg clockwise. Hint: If objects should NOT rotate with world, invoke method setStatic(true) for them.`})),r(o,"worldScaleComment",()=>d({de:`Streckt die Welt um den angegebenen Faktor. Zentrum der Streckung ist (CenterX, centerY). Drehpunkt ist der Punkt (centerX, centerY). Tipp: Falls Objekte NICHT mitgedreht werden sollen, rufe die Methode setStatic(true) auf.`,en:`Scales world by given factor. Pivot of scaling is (centerX, centerY). Hint: If objects should NOT scale with world, invoke method setStatic(true) for them.`})),r(o,"worldFlipYComment",()=>d({de:"Spiegelt die Welt an der horizontalen Achse. Mit dieser Methode kann erreicht werden, dass der Ursprung (0,0) unten links ist und die Y-Koordinaten nach oben hin größer werden.",en:"Flips the world along the horizontal axis. With this method it is possible to have the origin (0,0) at bottom-left and Y-coordinates increasing upwards."})),r(o,"worldSetCoordinateSystemComment",()=>d({de:"Setzt das Koordinatensystem der Welt so, dass (left, top) die linke obere Ecke des sichtbaren Bereiches ist, width seine Breite und height seine Höhe.",en:"Sets coordinate system of world in a way so that (left, top) is top-left corner of visible view, width is it's width and height it's height."})),r(o,"world3dSetCursorComment",()=>d({de:"Ändert die Form des Mauscursors im gesamten Grafikbereich. Mögliche Werte: siehe https://developer.mozilla.org/en-US/docs/Web/CSS/cursor.",en:"Sets mouse cursor image inside graphic window. For valid values see: https://developer.mozilla.org/en-US/docs/Web/CSS/cursor"})),r(o,"world3dClearComment",()=>d({de:"Löscht alle Grafikobjekte in der Welt, indem es ihre destroy()-Methode aufruft.",en:"Clears all graphic objects inside this world by calling it's destroy() method."})),r(o,"worldGetWidthComment",()=>d({de:"Gibt die Breite des sichtbaren Bereichs der Welt zurück.",en:"Returns width of visible part of world."})),r(o,"worldGetHeightComment",()=>d({de:"Gibt die Höhe des sichtbaren Bereichs der Welt zurück.",en:"Returns height of visible part of world."})),r(o,"worldGetLeftComment",()=>d({de:"Gibt die X-Koordinate der linken oberen Ecke des sichtbaren Bereichs der Welt zurück.",en:"Returns x-coordinate of top-left corner of visible part of world."})),r(o,"worldGetTopComment",()=>d({de:"Gibt die Y-Koordinate der linken oberen Ecke des sichtbaren Bereichs der Welt zurück.",en:"Returns y-coordinate of top-left corner of visible part of world."})),r(o,"worldGetDefaultGroupComment",()=>d({de:"Gibt die Gruppe zurück, zu der aktuell alle neuen Objekte automatisch hinzugefügt werden. Falls gerade keine defaultGroup festgelegt ist, wird null zurückgegeben.",en:"Returns group to which all new graphic objects are added by default. If no default group is set, this method returns null."})),r(o,"worldFollowComment",()=>d({de:"Verschiebt die Welt so, dass das übergebene graphische Objekt (shape) sichtbar wird. Verschoben wird nur, wenn das Objekt weniger als frameWidth vom Rand (margin) entfernt ist und die Welt nicht über die gegebenen Koordinaten xMin, xMax, yMin und yMax hinausragt.",en:"Moves world coordinate system to make given shape visible again. It is only moved if the shape is less than frameWidth from the edge and the world does not extend beyond the given coordinates xMin, xMax, yMin and yMax."})),r(o,"worldSetDefaultGroupComment",()=>d({de:"Legt die Gruppe fest, zu der aktuell alle neuen Objekte automatisch hinzugefügt werden. Falls keine defaultGroup gewünscht ist, rufen Sie setDefaultGroup(null) auf.",en:"Sets group to which all new graphic objects are added by default. For 'no default group' call setDefaultGroup(null)."})),r(o,"actorWorld2dDoesntexistException",()=>d({de:"Es ist derzeit kein World-Objekt vorhanden. Diese wird automatisch erstellt, sobald ein Grafikobjekt erstellt wird.",en:"There is currently no World object. It will be automatically created once a graphics object is created."})),r(o,"actorWorld2dDoesntexistOn3dObjectException",()=>d({de:"Es ist derzeit kein World-Objekt vorhanden. Diese wird automatisch erstellt, sobald ein Grafikobjekt erstellt wird. Um das World3d-Objekt zu erhalten, nutze stattdessen .get3dWorld().",en:"There is currently no World object. It will be automatically created once a graphics object is created. To get the World3d object, use .getWorld3d() instead."})),r(o,"actorWorld3dDoesntexistException",()=>d({de:"Es ist derzeit kein World3d-Objekt vorhanden. Dieses wird automatisch erstellt, sobald ein 3d-Grafikobjekt erstellt wird.",en:"There is currently no World3d object. It will be automatically created once a 3d graphics object is created."})),r(o,"actorActMethodComment",()=>d({de:"Die Methode act wird 30-mal pro Sekunde aufgerufen. Wenn Sie sie in einer Unterklasse überschreiben, so wird Ihre Methode 30-mal pro Sekunde aufgerufen.",en:"Method act is called 30 times per second. Overwrite it to get your own method being called 30 times per second."})),r(o,"actorActMethodComment2",()=>d({de:"Die Methode act wird 30-mal pro Sekunde aufgerufen. Wenn Sie sie in einer Unterklasse überschreiben, so wird Ihre Methode 30-mal pro Sekunde aufgerufen. DeltaTime ist die seit dem letzten Aufruf verstrichene Zeit in ms.",en:"Method act gets called 30 times per second. Overwrite it to get your own method being called 30 times per second. DeltaTime is time since last call in ms."})),r(o,"actorOnKeyTypedComment",()=>d({de:"onKeyTyped wird jedes Mal dann aufgerufen, wenn eine Taste heruntergedrückt und anschließend losgelassen wird. Der Parameter key enthält die gedrückte Taste. Im Fall von Sondertasten (Enter, Pfeiltasten...) wird eine der Konstanten Key.Enter, Key.ArrowUp, ... übergeben.",en:"onKeyTyped gets called after a key had been pressed and subsequently released. The key is stored in parameter key. For special keys (like enter, arrow keys, ...) use constants Key.Enter, Key.ArrowUp, ..."})),r(o,"actorOnKeyUpComment",()=>d({de:"onKeyUp wird jedes Mal dann aufgerufen, wenn eine Taste losgelassen wird. Der Parameter key enthält die gedrückte Taste. Im Fall von Sondertasten (Enter, Pfeiltasten...) wird eine der Konstanten Key.Enter, Key.ArrowUp, ... übergeben.",en:"onKeyUP gets called after a key had been released. The key is stored in parameter key. For special keys (like enter, arrow keys, ...) use constants Key.Enter, Key.ArrowUp, ..."})),r(o,"actorOnKeyDownComment",()=>d({de:"onKeyDown wird jedes Mal dann aufgerufen, wenn eine Taste gedrückt wird. Der Parameter key enthält die gedrückte Taste. Im Fall von Sondertasten (Enter, Pfeiltasten...) wird eine der Konstanten Key.Enter, Key.ArrowUp, ... übergeben.",en:"onKeyDown gets called after a key had been pressed down. The key is stored in parameter key. For special keys (like enter, arrow keys, ...) use constants Key.Enter, Key.ArrowUp, ..."})),r(o,"actorIsKeyUpComment",()=>d({de:"Gibt genau dann true zurück, wenn die Taste key gerade nicht gedrückt ist.",en:"Returns true if key is currently not pressed down."})),r(o,"actorIsKeyDownComment",()=>d({de:"Gibt genau dann true zurück, wenn die Taste key gerade gedrückt ist.",en:"Returns true if key is currently pressed down."})),r(o,"getWorldComment",()=>d({de:"Gibt das aktuelle World-Objekt zurück.",en:"Returns current World object."})),r(o,"getAllShapesComment",()=>d({de:"Gibt ein Array zurück, das alle graphischen Objekte der Welt enthält.",en:"Returns an array containing all objects in this world."})),r(o,"getWorld3dComment",()=>d({de:"Gibt das aktuelle World3d-Objekt zurück.",en:"Returns current World3d object."})),r(o,"world3dGetVectorFromCameraThroughScreenPointComment",()=>d({de:"Gibt einen Vektor zurück, der von der Kamera durch den Punkt (screenXRelative, screenYRelative) auf dem Bildschirm verläuft. Dieser kann z.B. dazu verwendet werden, herauszufinden, auf welches Objekt gerade mit der Maus gezeigt wird.",en:"Returns a vector that goes from camera through point (screenXRelative, screenYRelative) on screen. This can be used for example to find out which object is currently pointed to by mouse."})),r(o,"actorIsActingComment",()=>d({de:"Gibt genau dann true zurück, wenn die act-Methode 30-mal pro Sekunden aufgerufen wird. Nutzen Sie die Methoden stopActing und restartActing um dies zu deaktivieren bzw. zu aktivieren.",en:"Returns true if act method is called regularly 30 times per second. Use Methods stopActing and restartActing to disable/enable this behaviour."})),r(o,"actorIsDestroyedComment",()=>d({de:"Gibt genau dann true zurück, wenn das Objekt durch Aufruf der Methode destroy() zerstört worden ist.",en:"Returns true if object had been destroyed by calling method destroy()."})),r(o,"actorStopActingComment",()=>d({de:"Sorgt dafür, dass die act-Methode dieses Objekts zukünftig nicht mehr 30-mal pro Sekunde aufgerufen wird.",en:"Stops the act method of this object being called 30 times per second."})),r(o,"actorRestartActingComment",()=>d({de:"Sorgt dafür, dass die act-Methode dieses Objekts zukünftig wieder 30-mal pro Sekunde aufgerufen wird.",en:"Restarts the act method of this object being called 30 times per second."})),r(o,"actorIsGamepadConnectedComment",()=>d({de:"Gibt true zurück, falls das Gamepad mit dem übergebenen Index angeschlossen ist. VORSICHT: Das erste Gamepad hat Index 0.",en:"If it returns true, the gamepad is connected to the passed index. CAUTION: The first gamepad has index 0."})),r(o,"actorIsGamepadButtonDownComment",()=>d({de:"Gibt genau dann true zurück, wenn der Button buttonIndex des Gamepads GamepadIndex gedrückt ist.",en:"Returns true if button with given index is held down. Caution: First Gamepad has index 0!"})),r(o,"actorGetGamepadAxisValueComment",()=>d({de:"Gibt den Wert des Gamepad-Steuerknüppels mit Index axisIndex zurück.",en:"Returns value of Gamepad-stick with given index on given axis."})),r(o,"world3dColorNull",()=>d({de:"Null kann nicht als Farbe übergeben werden.",en:"Null cannot be used as a color."})),r(o,"shapeClassComment",()=>d({de:"Die Klasse Shape ist Oberklasse aller graphischen Objekte.",en:"Class Shape is base class of all graphical objects."})),r(o,"shapeOnMouseUpComment",()=>d({de:"Wird aufgerufen, wenn sich der Mauspfeil über dem Objekt befindet und der Benutzer eine Maustaste loslässt.",en:"Is called if mouse cursor is on object and user releases a mouse button."})),r(o,"shapeOnMouseDownComment",()=>d({de:"Wird aufgerufen, wenn sich der Mauspfeil über dem Objekt befindet und der Benutzer eine Maustaste drückt.",en:"Is called if mouse cursor is on object and user presses a mouse button."})),r(o,"shapeOnMouseMoveComment",()=>d({de:"Wird aufgerufen, wenn sich der Mauspfeil über dem Objekt befindet und der Benutzer die Maus bewegt.",en:"Is called if mouse cursor is on object and user moves mouse."})),r(o,"shapeStartTrackingEveryMouseMovementComment",()=>d({de:'Sorgt dafür, dass ab jetzt JEDE Bewegung des Mauszeigers (auch wenn sich dieser außerhalb des Objekts befindet) ein MouseMove-Ereignis für dieses Objekt auslöst. -> Praktisch zur Umsetzung des "Ziehens" von Objekten mit der Maus!',en:"Makes the object react to mouse move events even if it doesn't contain the mouse pointer. Hint: use this method to create drag/drop-functionality."})),r(o,"shapeSetHitPolygonComment",()=>d({de:"Setzt das Hit-Polygon des Objekts auf das übergebene Polygon (in der Form [[x1, y1], [x2, y2], ...]). Die Koordinaten der Punkte beziehen sich auf das Welt-Koordinatensystem, sind also abhängig davon, wo sich das Objekt gerade befindet. Das Polygon muss nicht geschlossen sein.",en:"Sets the hit polygon of the object to the given polygon (in the form [[x1, y1], [x2, y2], ...]). The coordinates of the points are relative to the world's coordinate system, depending on the object's current position. The polygon does not need to be closed."})),r(o,"shapeCopyComment",()=>d({de:"Erstellt eine Kopie des Grafikobjekts und gibt sie zurück.",en:"Creates and returns a copy of this object."})),r(o,"shapeStopTrackingEveryMouseMovementComment",()=>d({de:'Sorgt dafür, dass ab jetzt nur noch dann Bewegungen des Mauszeigers ein MouseMove- Ereignis für dieses Objekt auslösen, wenn sich der Mauszeiger über dem Objekt befindet. -> Praktisch zur Umsetzung des "Ziehens" von Objekten mit der Maus!',en:"Makes the object react to mouse move events only if it contains the mouse pointer.Hint: use this method to create drag / drop - functionality."})),r(o,"shapeOnMouseEnterComment",()=>d({de:"Wird aufgerufen, wenn der Mauspfeil das Objekt betritt.",en:"Is called if mouse cursor enters object."})),r(o,"shapeOnMouseLeaveComment",()=>d({de:"Wird aufgerufen, wenn der Mauspfeil das Objekt verlässt.",en:"Is called if mouse cursor leaves object."})),r(o,"shapeMoveComment",()=>d({de:"Verschiebt das Grafikobjekt um dx Pixel nach rechts und um dy Pixel nach unten.",en:"Moves object dx pixels to the right and dy pixels down "})),r(o,"shapeRotateComment1",()=>d({de:"Dreht das Grafikobjekt um den angegebenen Winkel (in Grad!). Drehpunkt ist (centerX, centerY).",en:"Rotates object by given angle (in degrees!). Center of rotation is (centerX, centerY)"})),r(o,"shapeRotateComment2",()=>d({de:"Dreht das Grafikobjekt um den angegebenen Winkel (in Grad!). Der Drehpunkt ist die 'Mitte' des Objekts (abhängig von seiner Form).",en:"Rotates object by given angle (in degrees!). Pivot point is 'center' of object (depends on it's shape)."})),r(o,"shapeScaleComment1",()=>d({de:"Streckt das Grafikobjekt um den angegebenen Faktor. Das Zentrum der Streckung ist der Punkt (centerX, centerY)",en:"Scales object by given factor. Center of scaling is at (centerX, centerY)."})),r(o,"shapeSetScaleComment",()=>d({de:"Streckt das Grafikobjekt auf den angegebenen Faktor. Das Zentrum der Streckung ist die 'Mitte' des Objekts (abhängig von seiner Form).",en:"Scales object to given factor. Center of scaling is 'center' of object (depends on it's shape)."})),r(o,"shapeScaleComment2",()=>d({de:"Streckt das Grafikobjekt um den angegebenen Faktor. Das Zentrum der Streckung ist die 'Mitte' des Objekts (abhängig von seiner Form).",en:"Scales object by given factor. Center of scaling is 'center' of object (depends on it's shape)."})),r(o,"shapeMirrorXComment",()=>d({de:"Spiegelt das Objekt in X-Richtung",en:"Mirrors object in x-direction"})),r(o,"shapeMirrorYComment",()=>d({de:"Spiegelt das Objekt in Y-Richtung",en:"Mirrors object in y-direction"})),r(o,"shapeOutsideViewComment",()=>d({de:"Gibt genau dann true zurück, wenn sich die Bounding Box des Objekts außerhalb des sichtbaren Bereichs befindet.",en:"Returns true if and only if bounding box of object is outside world boundaries."})),r(o,"shapeDefineDirectionComment",()=>d({de:`Setzt die Blickrichtung des graphischen Objekts. Dies ist die Richtung, in die es durch Aufruf der Methode forward bewegt wird. Bemerkung: die Methode rotate ändert auch die Blickrichtung!`,en:"Defines direction of object. Direction is used when calling method 'forward'."})),r(o,"shapeDirectionRelativeToComment",()=>d({de:"Gibt die Richtung(top, right, bottom oder left) zurück, in der das graphische Objekt relativ zum übergebenen graphischen Objekt steht.",en:"Returns direction(top, right, bottom, left) of this shape's position relative to the other shape's position."})),r(o,"shapeAlreadyDestroyedError",()=>d({de:"Das im Parameter übergebene Shape wurde mit der Methode destroy() bereits zerstört.",en:"Shape given in parameter is already destroyed."})),r(o,"shapeNullError",()=>d({de:"Das im Parameter übergebene Shape hat den Wert null.",en:"Shape given in parameter has value null."})),r(o,"shapeMoveBackFromComment",()=>d({de:"Rückt das Objekt entlang der letzten durch Aufruf der Methode move() vorgegebenen Richtung zurück, bis es das übergebene Objekt gerade noch(keepColliding == true) bzw.gerade nicht mehr(keepColliding == false) berührt.",en:"Moves the object back along the last direction specified by calls to method move() until it just(keepColliding == true) or no longer touches the passed object(keepColliding == false)."})),r(o,"shapeForwardComment",()=>d({de:`Bewegt das Objekt um die angegebene Länge in Richtung seiner Blickrichtung. Bemerkung: Die Blickrichtung kann mit defineDirection gesetzt werden.`,en:`Moves object forward by given distance. Hint: Set forward direction with method 'defineDirection'.`})),r(o,"shapeAngleComment",()=>d({de:"Richtung des Objekts (in Grad)",en:"Angle of object (in degrees)"})),r(o,"shapeSetAngleComment",()=>d({de:"Dreht das Objekt hin zur angegebenen Richtung (in Grad)",en:"Rotates object to given angle."})),r(o,"shapeCenterXComment",()=>d({de:"X-Koordinate des Diagonalenschnittpunkts der BoundingBox des Objekts",en:"X coordinate of the diagonal intersection of the object's BoundingBox"})),r(o,"shapeCenterYComment",()=>d({de:"Y-Koordinate des Diagonalenschnittpunkts der BoundingBox des Objekts",en:"Y coordinate of the diagonal intersection of the object's BoundingBox"})),r(o,"shapeGetTopLeftXComment",()=>d({de:"Gibt die X-Koordinate der linken oberen Ecke des Objekts zurück. Wurde das Objekt gedreht, so wird die X-Koordinate der gedrehten Ecke zurückgegeben.",en:"Returns x-coordinate of object. If the object is rotated, the x-coordinate of the rotated corner is returned."})),r(o,"shapeGetTopLeftYComment",()=>d({de:"Gibt die Y-Koordinate der linken oberen Ecke des Objekts zurück. Wurde das Objekt gedreht, so wird die Y-Koordinate der gedrehten Ecke zurückgegeben.",en:"Returns y-coordinate of object. If the object is rotated, the y-coordinate of the rotated corner is returned."})),r(o,"shapeScaleFactorComment",()=>d({de:"Streckungsfaktor des Shapes",en:"Scale factor of this Shape object"})),r(o,"shapeContainsPointComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur den angegebenen Punkt enthält.",en:"Returns true if and only if this shape contains given point."})),r(o,"shapeMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich sein 'Mittelpunkt' an den angegebenen Koordinaten befindet.",en:"Moves object in a way so that it's 'center' is at (x,y)."})),r(o,"shapeSetYComment",()=>d({de:"Setzt die Y-Koordinate des Objekts.",en:"Sets the Y coordinate of the object."})),r(o,"shapeSetXComment",()=>d({de:"Setzt die X-Koordinate des Objekts.",en:"Sets the X coordinate of the object."})),r(o,"shapeDefineCenterComment",()=>d({de:"Setzt fest, wo der 'Mittelpunkt' des Objekts liegen soll. Dieser Punkt wird als Drehpunkt der Methode rotate, als Zentrum der Methode Scale und als Referenzpunkt der Methode moveTo benutzt.",en:"Defines 'center' of object. This center is used in methods rotate, scale and moveTo."})),r(o,"shapeDefineCenterRelativeComment",()=>d({de:`Setzt fest, wo der 'Mittelpunkt' des Objekts liegen soll. Dabei bedeutet (XRel/YRel) = (0/0) die linke obere Ecke der Bounding Box des Objekts, (XRel/YRel) = (1/1) die rechte untere Ecke. Defaultwert ist (XRel/YRel) = (0.5/0.5), also der Diagonalenschnittpunkt der Bounding Box. Dieser Punkt wird als Drehpunkt der Methode rotate, als Zentrum der Methode Scale und als Referenzpunkt der Methode moveTo benutzt. VORSICHT: Diese Methode arbeitet nicht mehr korrekt, wenn das Objekt schon gedreht wurde!`,en:"Define center of object relative to it's bounding box. (0,0) means: center at top left oft bounding box, (1/1) means: center at bottom right of bounding box. Beware: this method doesn't work as expected if object had been rotated."})),r(o,"shapeSetDefaultVisibilityComment",()=>d({de:"Setzt den Standardwert für das Attribut 'visible'. Dieser wird nachfolgend immer dann verwendet, wenn ein neues grafisches Objekt instanziiert wird.",en:"Sets default value for field 'visibility' for all subsequently instantiated graphic objects."})),r(o,"shapeSetVisibleComment",()=>d({de:"Macht das Grafikobjekt sichtbar (visible == true) bzw. unsichtbar (visible == false).",en:"Sets graphic object visible or invisible."})),r(o,"shapeSetStaticComment",()=>d({de:"setStatic(true) hat zur Folge, dass die Ansicht des Objekts durch Transformationen des World-Objekts nicht verändert wird.",en:"setStatic(true) makes the object not follow subsequent transformations of world object."})),r(o,"shapeCollidesWithComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur mit der anderen Figur überlappt.",en:"Returns true if graphic objects collide."})),r(o,"shapeCollidesWithAnyShapeComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur mit irgendeiner anderen Figur überlappt.",en:"Returns true if graphic object collides with any other graphic object."})),r(o,"shapeGetFirstCollidingShapeComment",()=>d({de:"Falls die Figur mit mindestens einer anderen Figur überlappt, wird die erste gefundene zurückgegeben. Ansonsten wird null zurückgegeben.",en:"If this graphic object collides with one/several other graphic objects then return the first one found. Otherwise return null."})),r(o,"shapeReactToMouseEventsWhenInvisibleComment",()=>d({de:"Legt fest, ob das Objekt auf Mausevents(buttondown, mouse move, ...) reagiert, wenn es unsichtbar ist.",en:"Defines whether object reacts to mouse events(buttondown, mouse move, ...) when it is invisible."})),r(o,"shapeCollidesWithFillColorComment",()=>d({de:"Gibt genau dann true zurück, wenn die Figur mit irgendeiner anderen Figur mit der angegebenen Füllfarbe überlappt.",en:"Returns true if graphic object collides with any other graphic object with given fillColor."})),r(o,"shapeGetFirstCollidingSpriteComment",()=>d({de:"Falls dieses Grafikobjekt gerade mindestens ein Sprite mit dem übergebenen Bildindex (-1 bedeutet: mit irgendeinem BildIndex) berührt, wird das erste dieser Sprites zurückgegeben.",en:"If this graphic object collides with any sprite with given imageIndex then this method returns the first one. Use imageIndex == -1 to search for ANY colliding Sprite."})),r(o,"shapeGetCollidingShapesGroupComment",()=>d({de:"Gibt alle Elemente der Group zurück, die mit diesem graphischen Objekt kollidieren.",en:"Returns each element of given Group whicht collide with this object."})),r(o,"shapeGetCollidingShapesArrayListComment",()=>d({de:"Gibt ein Array mit allen Grafikobjekten der Liste zurück, die mit diesem Grafikobjekt kollidieren.",en:"Returns an array containing all graphic objects of given list that collide with this object."})),r(o,"shapeBringToFrontComment",()=>d({de:"Setzt das Grafikobjekt vor alle anderen innerhalb der Gruppe.",en:"Displays this object in front of all others inside the same group."})),r(o,"shapeSendToBackComment",()=>d({de:"Setzt das Grafikobjekt hinter alle anderen innerhalb der Gruppe.",en:"Displays this object behind all others inside the same group."})),r(o,"shapeTintComment",()=>d({de:"Überzieht das Grafikobjekt mit der angegebenen Farbe.Diese Methode wirkt nur bei denjenigen Grafikobjekten, die die Methode tint unterstützen.",en:"Sets tint color of this object."})),r(o,"fsGetFillColorComment",()=>d({de:"Gibt die Füllfarbe dieses Objekts als Color-Objekt zurück.",en:"Returns fill color of this object as a Color object."})),r(o,"fsGetFillColorAsIntComment",()=>d({de:"Gibt die Füllfarbe dieses Objekts als integer-Wert zurück.",en:"Returns fill color of this object as int value."})),r(o,"fsSetFillColorCommentInt",()=>d({de:`Setzt die Füllfarbe des Objekts. Die Farbe wird als integer-Wert angegeben. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set fill color from int value. Hint: If you write fillcolor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetFillColorCommentColor",()=>d({de:"Setzt die Füllfarbe des Objekts. Die Farbe wird als Color-Objekt angegeben.",en:"Set fill color from Color object value."})),r(o,"fsColorIsNullException",()=>d({de:"Die angegebene Farbe ist null.",en:"Color is null."})),r(o,"fsSetFillColorCommentIntDouble",()=>d({de:`Setzt die Füllfarbe des Objekts. Die Farbe wird als integer-Wert angegeben, der alpha-Wert (Durchsichtigkeit) als double-Wert. 0.0 bedeutet komplett durchsichtig, 1.0 bedeutet komplett undurchsichtig. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set fill color from int value. Alpha-value is given as double value: 0.0 means completely transparent, 1.0 means completely opaque. Hint: If you write fillcolor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetFillColorCommentString",()=>d({de:'Setzt die Füllfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben. Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set fill color from string value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsSetFillColorCommentStringDouble",()=>d({de:'Setzt die Füllfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben, der Alpha-Wert (Undurchsichtigkeit) als double-Wert zwischen 0.0 (komplett durchsichtig) und 1.0 (komplett undurchsichtig). Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set fill color from string value, alpha-Value (opacity between 0.0 and 1.0) as double value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsGetBorderColorComment",()=>d({de:"Gibt die Randfarbe dieses Objekts als Color-Objekt zurück.",en:"Returns border color of this object as "})),r(o,"fsSetBorderColorCommentInt",()=>d({de:`Setzt die Randfarbe des Objekts. Die Farbe wird als integer-Wert angegeben. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set border color as int value. Hint: If you write BorderColor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetBorderColorCommentColor",()=>d({de:"Setzt die Randfarbe des Objekts. Die Farbe wird als Color-Objekt angegeben.",en:"Set border color from color object."})),r(o,"fsSetBorderColorCommentIntDouble",()=>d({de:`Setzt die Randfarbe des Objekts. Die Farbe wird als integer-Wert angegeben, der alpha-Wert (Durchsichtigkeit) als double-Wert. 0.0 bedeutet komplett durchsichtig, 1.0 bedeutet komplett undurchsichtig. Tipp: Schreibe die Farbe in der Form 0xffffff, dann zeigt die IDE ein kleines Farbquadrat, mit dem Du einen Color Picker öffnen kannst.`,en:`Set border color as int value. Alpha-value is given as double value: 0.0 means completely transparent, 1.0 means completely opaque. Hint: If you write BorderColor as hex value like 0xffffff then the IDE shows a little color patch. Hover over it to open a color picker.`})),r(o,"fsSetBorderColorCommentString",()=>d({de:'Setzt die Randfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben. Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set border color as string value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsSetBorderColorCommentStringDouble",()=>d({de:'Setzt die Randfarbe des Objekts. Die Farbe wird als Zeichenkette angegeben, der Alpha-Wert (Undurchsichtigkeit) als double-Wert zwischen 0.0 (komplett durchsichtig) und 1.0 (komplett undurchsichtig). Möglich sind Farbkonstanten ("rot", "red", ...) oder css-Syntax wie "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)".',en:'Set border color as string value, alpha-Value (opacity between 0.0 and 1.0) as double value. Possible values are color constants like "red", "green", "blue", ... and css syntax like "#ff034a", "rgb(100, 200, 10)" oder "rgba(100, 10, 10, 0.8)"'})),r(o,"fsSetBorderWidthComment",()=>d({de:"Setzt die Randbreite des Objekts in Pixeln.",en:"Sets border width of this object in pixels."})),r(o,"fsGetBorderWidthComment",()=>d({de:"Gibt die Randbreite dieses Objekts in Pixeln zurück.",en:"Returns border width of this object in pixels."})),r(o,"fsSetAlphaComment",()=>d({de:"Setzt den Alpha-Wert des Objekts. Dabei bedeutet 0.0 ganz durchsichtig, 1.0 ganz undurchsichtig.",en:"Sets alpha value (opacity) of this object. 0.0 means completely transparent, 1.0 means completely opaque."})),r(o,"fsGetAlphaComment",()=>d({de:"Gibt den Alpha-Wert des Objekts zurück. Dabei bedeutet 0.0 ganz durchsichtig, 1.0 ganz undurchsichtig.",en:"Returns alpha value (opacity) of this object. 0.0 means completely transparent, 1.0 means completely opaque."})),r(o,"fsSetDefaultBorderComment1",()=>d({de:"Setzt die Default-Werte für Randbreite und Randfarbe. Allen danach neu erzeugten Objekten werden anfangs diese Eigenschaften zugewiesen.",en:"Sets default border width and border color. All subsequently created objects get these border width and border color."})),r(o,"fsSetDefaultBorderComment2",()=>d({de:"Setzt die Default-Werte für Randbreite, Randfarbe und alpha-Wert (Durchsichtigkeit). Allen danach neu erzeugten Objekten werden anfangs diese Eigenschaften zugewiesen.",en:"Sets default border width and border color and alpha value. All subsequently created objects get these border width and border color."})),r(o,"fsSetDefaultFillColor",()=>d({de:"Setzt den Defaultwert für die Füllfarbe. Allen danach neu erzeugten Objekten wird anfangs diese Eigenschaft zugewiesen.",en:"Sets default fill color. All subsequently created objects get this fill color."})),r(o,"groupClassComment",()=>d({de:"Eine Gruppe kann mehrere graphische Objekte (auch andere Gruppen) enthalten und miteinander verschieben, drehen, ...",en:"A group can contain several graphic objects (also other groups) and move, rotate, ... them together."})),r(o,"groupConstructorComment",()=>d({de:"Erstellt eine neue Gruppe",en:"Creates a new Group"})),r(o,"groupAddComment",()=>d({de:"Fügt der Gruppe graphische Elemente hinzu. Tipp: Diese Methode kann beliebig viele Parameter haben.",en:"Adds graphic elements to this group. Hint: This method can have multiple parameters. "})),r(o,"groupRemoveComment",()=>d({de:"Entfernt das übergebene Objekt aus der Gruppe. Das Objekt wird dadurch nicht verändert.",en:"Removes given object from this group."})),r(o,"groupRemoveWithIndexComment",()=>d({de:"Entfernt das Element mit dem gegebenen Index aus der Gruppe. Das erste Element hat Index 0.",en:"Removes element with given index from group. First element has index 0."})),r(o,"groupGetComment",()=>d({de:"Gibt das Element mit dem angegebenen Index zurück. Das erste Element der Gruppe hat Index 0.",en:"Returns element with given index. First element in group has index 0."})),r(o,"groupIndexOfComment",()=>d({de:"Gibt den Index des elements innerhalb der Gruppe zurück. Falls das Element nicht in der Gruppe enthalten ist, wird -1 zurückgegeben.",en:"Returns index of given element inside group. First element in group has index 0."})),r(o,"groupSizeComment",()=>d({de:"Gibt die Anzahl der Elemente in dieser Gruppe zurück.",en:"Returns the number of elements in this group."})),r(o,"groupEmptyComment",()=>d({de:"Leert die Gruppe. Die in der Gruppe enthaltenen Elemente werden dadurch nicht verändert.",en:"Removes all elements from this group. This operation doesn't affect the elements themselves."})),r(o,"groupDestroyAllChildrenComment",()=>d({de:"Zerstört alle Elemente der Gruppe, nicht aber die Gruppe selbst.",en:"Destroys all elements inside this group, but not this group itself."})),r(o,"groupRenderAsStaticBitmapComment",()=>d({de:"Erstellt eine Bitmap(Textur) und zeichnet alle in der Gruppe enthaltenen Elemente darauf.Zeichnet ab diesem Zeitpunkt statt der enthaltenen Elemente nur noch die Bitmap(=> schneller!).Alle enthaltenen Elemente werden bei dieser Operation zerstört.",en:"Creates a bitmap(texture) and draws all elements onto it.Then it uses this bitmap to draw to screen instead of the elements(=> faster!).All elements are destroyed afterwards."})),r(o,"groupCopyComment",()=>d({de:"Erstellt eine Kopie dieser Gruppe inclusive Kopien aller ihrer Elemente.",en:"Creates a copy of this group containing copies of it's elements."})),r(o,"groupGetCollidingShapesComment",()=>d({de:"Gibt die Elemente der Gruppe zurück, die mit dem übergebenen Shape kollidieren.",en:"Returns all elements of this group which collide with given Shape."})),r(o,"groupGetCollisionPairsComment",()=>d({de:"Überprüft, welche Objekte der Gruppe mit welchen der anderen kollidieren. Gibt für jede Kollision ein Collisionpair-Objekt zurück, das die beiden kollidierenden Objekte enthält. Falls maxOneCollisionPerShape == true ist jedes Objekt dabei aber nur in max. einem Collisionpair-Objekt enthalten.",en:"Checks which elements of this group collide with elements of the other one. For each detected collision it returns a Collisionpair-object that contains both elements. If maxOneCollisionPerShape == true then no shape of this group is contained two or more of the returned collisionpair-objects."})),r(o,"collisionPairClassComment",()=>d({de:"Speichert die Referenzen auf zwei Figuren, die gerade kollidiert sind. Diese Klasse von den Kollisionsmethden der Klasse Group benutzt.",en:"Saves pointers to two graphical objects which have collided. This class is used by Group.getCollisionPairs(Group otherGroup)."})),r(o,"collisionPairShapeAComment",()=>d({de:"Die erste der beiden kollidierenden Figuren. Sie gehört zu group1 des Methodenaufrufs group1.getCollisionPairs(group2).",en:"First colliding Shape. It belongs to group1 of method call group1.getCollisionPairs(group2)."})),r(o,"collisionPairShapeBComment",()=>d({de:"Die zweite der beiden kollidierenden Figuren. Sie gehört zu group2 des Methodenaufrufs group1.getCollisionPairs(group2).",en:"Second colliding Shape. It belongs to group2 of method call group1.getCollisionPairs(group2)."})),r(o,"collisionPairConstructorComment",()=>d({de:"Erzeugt ein paar zweier Shape-objekte.",en:"Creates a tuple of two shapes."})),r(o,"circleClassComment",()=>d({de:"Kreis",en:"Circle"})),r(o,"circleEmptyConstructorComment",()=>d({de:"Instanziiert einen neuen Kreis mit Mittelpunkt (50, 50) und Radius 50.",en:"Creates a new Circle object with center at (50, 50) and radius 50."})),r(o,"circleConstructorComment",()=>d({de:"Instanziiert einen neuen Kreis. (mx, my) ist der Mittelpunkt, r sein Radius.",en:"Creates a new Circle object with center at (mx, my) and given radius."})),r(o,"circleSetRadiusComment",()=>d({de:"Setzt den Radius des Kreises.",en:"Set radius."})),r(o,"circleGetRadiusComment",()=>d({de:"Gibt den Radius des Kreises zurück.",en:"Gets radius."})),r(o,"circleCopyComment",()=>d({de:"Erstellt eine Kopie des Circle-Objekts und git sie zurück.",en:"Creates a exact copy of this circle object and returns it."})),r(o,"ArcClassComment",()=>d({de:"Kreisbogenumriss (wahlweise gefüllt)",en:"Arc (filled/not filled)"})),r(o,"ArcConstructorComment1",()=>d({de:"Instanziiert einen neuen Kreisbogen.",en:"Creates a new Arc."})),r(o,"ArcConstructorComment",()=>d({de:"Instanziiert einen neuen Kreisbogen. (mx, my) ist der Mittelpunkt, ri sein Innenradius, ra sein Außenradius. Der Kreisbogen wird von startAngle bis endAngle (beides in Grad) gegen den Uhrzeigersinn gezogen.",en:"Creates a new Arc. (mx, my) is it's center, ri it's inner radius, ra it's outer radius. The arc will be drawn from startAngle up to endAngle (both in degrees) counterclockwise."})),r(o,"ArcSetInnerRadiusComment",()=>d({de:"Setzt den Innenradius des Kreisbogens.",en:"Sets inner radius of arc."})),r(o,"ArcSetOuterRadiusComment",()=>d({de:"Setzt den Außenradius des Kreisbogens.",en:"Sets outer radius of arc."})),r(o,"ArcSetStartAngleComment",()=>d({de:"Setzt den Startwinkel des Kreisbogens (in Grad).",en:"Sets start angle of arc (in degrees)."})),r(o,"ArcSetEndAngleComment",()=>d({de:"Setzt den Endwinkel des Kreisbogens (in Grad).",en:"Sets end angle of arc (in degrees)."})),r(o,"ArcGetInnerRadiusComment",()=>d({de:"Liefert den Innenradius des Kreisbogens.",en:"Gets inner radius of arc."})),r(o,"ArcGetOuterRadiusComment",()=>d({de:"Liefert den Außenradius des Kreisbogens.",en:"Gets outer radius of arc."})),r(o,"ArcGetStartAngleComment",()=>d({de:"Liefert den Startwinkel des Kreisbogens (in Grad).",en:"Gets start angle of arc (in degrees)."})),r(o,"ArcGetEndAngleComment",()=>d({de:"Liefert den Endwinkel des Kreisbogens (in Grad).",en:"Gets end angle of arc (in degrees)."})),r(o,"ArcCopyComment",()=>d({de:"Erstellt eine Kopie des arc-Objekts und git sie zurück.",en:"Creates a exact copy of this arc object and returns it."})),r(o,"TextClassComment",()=>d({de:"Text, der innerhalb der Grafikausgabe dargestellt werden kann",en:"Text inside graphic panel"})),r(o,"TextEmptyConstructorComment",()=>d({de:"Instanziiert ein neues Textobjekt. Der Textanker (default: links oben) liegt bei (0, 0).",en:"Creates a new Text object. It's anchor (default: top left) is positioned at (0, 0)."})),r(o,"TextConstructorComment1",()=>d({de:"Instanziiert ein neues Textobjekt. (x, y) sind die Koordinaten des Textankers (default: links oben), fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Text object. (x, y) is it's anchor's position, fontSize it's height in pixels."})),r(o,"TextCopyComment",()=>d({de:"Erstellt eine Kopie dieses Text-Objekts",en:"Creates a copy of this text object"})),r(o,"TextSetFontsizeComment",()=>d({de:"Setzt die Schriftgröße des Textes (Einheit: Pixel).",en:"Sets fontsize of text (unit: pixels)."})),r(o,"TextSetAlignmentComment",()=>d({de:"Setzt die Ausrichtung des Textes, z.B. Alignment.center, Alignment.right.",en:"Sets Alignment of text, e.g. Alignment.center, Alignment.right."})),r(o,"TextSetTextComment",()=>d({de:"Setzt den Text dieses graphischen Text-Objektes.",en:"Sets text of this graphical Text object."})),r(o,"TextGetWidthComment",()=>d({de:"Gibt die Breite des Textes zurück.",en:"Returns width of this text."})),r(o,"TextGetHeightComment",()=>d({de:"Gibt die Höhe des Textes zurück.",en:"Returns height of this text."})),r(o,"TextGetFontsizeComment",()=>d({de:"Gibt die Schriftgröße zurück.",en:"Returns fontsize."})),r(o,"TextGetTextComment",()=>d({de:"Gibt den Textinhalt zurück.",en:"Returns text content (as string)."})),r(o,"TextSetStyleComment",()=>d({de:"Setzt den Stil des Textes: isBold (Fettschrift) und isItalic (Schrägschrift).",en:"Sets style of this text (bold, italic)."})),r(o,"TextMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich sein 'Mittelpunkt' an den angegebenen Koordinaten befindet.",en:"Moves this text object. After moving it's 'center' lies at given coordinates."})),r(o,"DayOfWeekEnumComment",()=>d({de:"Wochentag",en:"day of week"})),r(o,"DayOfWeekMondayConst",()=>d({de:"Montag",en:"Monday"})),r(o,"DayOfWeekTuesdayConst",()=>d({de:"Dienstag",en:"Tuesday"})),r(o,"DayOfWeekWednesdayConst",()=>d({de:"Mittwoch",en:"Wednesday"})),r(o,"DayOfWeekThursdayConst",()=>d({de:"Donnerstag",en:"Thursday"})),r(o,"DayOfWeekFridayConst",()=>d({de:"Freitag",en:"Friday"})),r(o,"DayOfWeekSaturdayConst",()=>d({de:"Samstag",en:"Saturday"})),r(o,"DayOfWeekSundayConst",()=>d({de:"Sonntag",en:"Sunday"})),r(o,"LocalDateTimeClassComment",()=>d({de:"Ein LocalDate-Objekt speichert einen Zeitpunkt (Datum und Uhrzeit) und kann auch die Systemzeit auslesen.",en:"LocalDateTime is an immutable date-time object that represents a date-time, often viewed as year-month-day-hour-minute-second."})),r(o,"LocalDateTimeEmptyConstructorComment",()=>d({de:"Holt den aktuellen Zeitpunkt von der Systemuhr des Rechners und gibt ihn als LocalDateTime-Objekt zurück.",en:"Fetches current timestamp from system clock and returns it as LocalDateTime-Object"})),r(o,"LocalDateTimeNowComment",()=>d({de:"Holt den aktuellen Zeitpunkt von der Systemuhr des Rechners und gibt ihn als LocalDateTime-Objekt zurück.",en:"Fetches current timestamp from system clock and returns it as LocalDateTime-Object"})),r(o,"LocalDateTimeOfComment",()=>d({de:"Gibt ein LocalDateTime-Objekt zurück, das den durch year, month (1 - 12), dayOfMonth, hour, minute, second beschriebenen Zeitpunkt repräsentiert.",en:"Returns a new LocalDateTime-object given by year, month (1 - 12), dayOfMonth, hour, minute and second."})),r(o,"LocalDateTimePlusDaysComment",()=>d({de:"Gibt ein neues LocalDateTime-Objekt zurück, das einen Zeitpunkt repräsentiert, der um die übergebene Anzahl von Tagen später liegt.",en:"Returns a NEW LocalDateTime-object which timestamp is given days later than this one's."})),r(o,"LocalDateTimeMinusDaysComment",()=>d({de:"Gibt ein neues LocalDateTime-Objekt zurück, das einen Zeitpunkt repräsentiert, der um die übergebene Anzahl von Tagen früher liegt.",en:"Returns a NEW LocalDateTime-object which timestamp is given days prior to this one's."})),r(o,"LocalDateTimeUntilComment",()=>d({de:"Gibt zurück, wie viele Tage (gerundet) zwischen den beiden Zeitpunkten liegen.",en:""})),r(o,"LocalDateTimeGetYearComment",()=>d({de:"Jahr",en:"Year"})),r(o,"LocalDateTimeGetMonthComment",()=>d({de:"Gibt den Monat als Zahl zurück (Januar == 1, Februar == 2, ..., Dezember == 12).",en:"Month (January == 1, February == 2, ...)"})),r(o,"LocalDateTimeGetDayOfMonthComment",()=>d({de:"Gibt den Tag innerhalb des Monats zurück (Zahl von 1 bis 31).",en:"Day of month (1, ..., 31)"})),r(o,"LocalDateTimeGetHourComment",()=>d({de:"Stunde",en:"Hour"})),r(o,"LocalDateTimeGetMinuteComment",()=>d({de:"Minute",en:"Minute"})),r(o,"LocalDateTimeGetSecondComment",()=>d({de:"Sekunde",en:"Second"})),r(o,"AlignmentEnumComment",()=>d({de:"Ausrichtung",en:"Alignment"})),r(o,"SectorClassComment",()=>d({de:"Kreisbogen/Kreissektor",en:"Sector"})),r(o,"SectorConstructorComment1",()=>d({de:"Instanziiert einen neuen Kreisbogen.",en:"Creates a new Sector. (mx, my) is it's center, ri it's inner radius, ra it's outer radius. The sector will be drawn from startAngle up to endAngle (both in degrees) counterclockwise."})),r(o,"SectorConstructorComment",()=>d({de:"Instanziiert einen neuen Kreisbogen. (mx, my) ist der Mittelpunkt, ri sein Innenradius, ra sein Außenradius. Der Kreisbogen wird von startAngle bis endAngle (beides in Grad) gegen den Uhrzeigersinn gezogen.",en:"Creates a new Sector. (mx, my) is it's center, ri it's inner radius, ra it's outer radius. The sector will be drawn from startAngle up to endAngle (both in degrees) counterclockwise."})),r(o,"SectorSetRadiusComment",()=>d({de:"Setzt den Innenradius des Kreisbogens.",en:"Sets inner radius of sector."})),r(o,"SectorSetOuterRadiusComment",()=>d({de:"Setzt den Außenradius des Kreisbogens.",en:"Sets outer radius of sector."})),r(o,"SectorSetStartAngleComment",()=>d({de:"Setzt den Startwinkel des Kreisbogens (in Grad).",en:"Sets start angle of sector (in degrees)."})),r(o,"SectorSetEndAngleComment",()=>d({de:"Setzt den Endwinkel des Kreisbogens (in Grad).",en:"Sets end angle of sector (in degrees)."})),r(o,"SectorGetRadiusComment",()=>d({de:"Liefert den Innenradius des Kreisbogens.",en:"Gets inner radius of sector."})),r(o,"SectorGetOuterRadiusComment",()=>d({de:"Liefert den Außenradius des Kreisbogens.",en:"Gets outer radius of sector."})),r(o,"SectorGetStartAngleComment",()=>d({de:"Liefert den Startwinkel des Kreisbogens (in Grad).",en:"Gets start angle of sector (in degrees)."})),r(o,"SectorGetEndAngleComment",()=>d({de:"Liefert den Endwinkel des Kreisbogens (in Grad).",en:"Gets end angle of sector (in degrees)."})),r(o,"SectorDrawRadiiComment",()=>d({de:"Legt fest, ob beim Zeichnen des Umrisses auch die beiden Radii ( = Strecken vom Mittelpunkt zur Kreislinie) mitgezeichnet werden sollen.",en:"Set to true if drawn border should also contain the radii ( = lines from center to the arc perimeter )"})),r(o,"SectorCopyComment",()=>d({de:"Erstellt eine Kopie des sector-Objekts und git sie zurück.",en:"Creates a exact copy of this sector object and returns it."})),r(o,"PolygonClassComment",()=>d({de:"Polygon",en:"polygon"})),r(o,"PolygonEmptyConstructorComment",()=>d({de:`Instanziiert ein neues Polygon. Der Standardkonstruktor ohne Parameter instanziiert ein regelmäßiges Sechseck. Tipp: Es gibt auch Konstruktoren, denen man ein Array von Koordinaten bzw. einzelne Koordinaten übergeben kann!`,en:`Creates a polygon. The parameterless constructor creates a regular hexagon. Hint: There are constructors that take (an array of) coordinates.`})),r(o,"PolygonConstructor1Comment",()=>d({de:"Instanziiert ein neues Polygon. Die Punkte werden als Array von double-Werten der Form {x1, y1, x2, y2, ...} übergeben.",en:"Creates a polygon. Points are given as array of double-values in this order: {x1, y1, x2, y2, ...}"})),r(o,"PolygonConstructor2Comment",()=>d({de:"Instanziiert ein neues Polygon. Die Punkte werden als double-Werte der Form x1, y1, x2, y2, ... übergeben.",en:"Creates a polygon. Points are given as double-values in this order: x1, y1, x2, y2, ..."})),r(o,"PolygonConstructorShapeComment",()=>d({de:"Instanziiert ein neues Polygon. Seine Punkte sind die Punkte des Hitpolygons der übergebenen Figur.",en:"Creates a polygon based on given shape's hitpolygon."})),r(o,"PolygonCopyComment",()=>d({de:"Erstellt eine Kopie des polygon-Objekts und git sie zurück.",en:"Creates a exact copy of this polygon object and returns it."})),r(o,"PolygonAddPointComment",()=>d({de:"Fügt dem Polygon einen Punkt hinzu.",en:"Adds a point to the polygon."})),r(o,"PolygonSetPointsComment",()=>d({de:"Löscht alle Punkte des Polygons und setzt komplett neue. Diese werden in einem double[] übergeben, das abwechselnd die x- und y-Koordinaten enthält.",en:"Remove all points from polygon and replace them by given ones. Given double-array contains alternating x- and y-coordinates."})),r(o,"PolygonAddPointsComment",()=>d({de:"Fügt dem Polygon mehrere Punkte hinzu. Diese werden in einem double[] übergeben, das abwechselnd die x- und y-Koordinaten enthält.",en:"Add given points to polygon. Given double-array contains alternating x- and y-coordinates."})),r(o,"PolygonInsertPointComment",()=>d({de:"Fügt dem Polygon einen Punkt als 'index-ter' Punkt hinzu. index == 0 => ganz am Anfang; index == Anzahl der bisherigen Punkte => ganz am Ende;",en:"Insert point on given index into polygon. Index == 0 means 'at the beginning', index == number of points means 'at the end'."})),r(o,"PolygonMovePointToComment",()=>d({de:"Verschiebt Punkt mit dem angegebenen Index nach (x, y). Index == 0 => erster Punkt, index == 1 => zweiter Punkt usw.",en:"Moves point with given index to position (x, y). Index == 0 means 'at the beginning', index == number of points means 'at the end'."})),r(o,"PolygonCloseComment",()=>d({de:"Schließt das Polygon, indem es den ersten und letzten Punkt mit einer Strecke verbindet. Diese Methode hat bei gefüllten Polygonen keinen Effekt.",en:"Closes polygon by joining first and last point with a straight line. This method does nothing when polygon is filled."})),r(o,"PolygonOpenComment",()=>d({de:"Öffnet das Polygon, indem es die Strecke zwischen erstem und letztem Punkt entfernt. Diese Methode hat bei gefüllten Polygonen keinen Effekt.",en:"Opens polygon by removing the line between first and last point. This method does nothing when polygon is filled."})),r(o,"EllipseClassComment",()=>d({de:"Ellipse",en:"ellipse"})),r(o,"EllipseEmptyConstructorComment",()=>d({de:"Instanziiert einen neuen Ellipse mit Mittelpunkt (200, 100) und den Radien 100 und 50.",en:"Creates a new ellipse object with center at (200, 100) and radii 100, 50."})),r(o,"EllipseConstructorComment",()=>d({de:"Instanziiert eine neuen Ellipse. (mx, my) ist der Mittelpunkt, rx ihr Radius in x-Richtung, ry ihr Radius in y-Richtung.",en:"Creates a new ellipse object with center at (mx, my) and given radii in rx, ry."})),r(o,"EllipseSetRadiusXComment",()=>d({de:"Setzt den Radius der Ellipse in X-Richtung.",en:"Set radius of ellipse in x-direction."})),r(o,"EllipseSetRadiusYComment",()=>d({de:"Setzt den Radius der Ellipse in Y-Richtung.",en:"Set radius of ellipse in y-direction."})),r(o,"EllipseGetRadiusXComment",()=>d({de:"Gibt den x-Radius der Ellipse zurück.",en:"Gets x-radius."})),r(o,"EllipseGetRadiusYComment",()=>d({de:"Gibt den y-Radius der Ellipse zurück.",en:"Gets y-radius."})),r(o,"EllipseCopyComment",()=>d({de:"Erstellt eine Kopie des ellipse-Objekts und git sie zurück.",en:"Creates a exact copy of this ellipse object and returns it."})),r(o,"TurtleClassComment",()=>d({de:"Turtle-Klasse zum Zeichnen von Streckenzügen oder gefüllten Figuren. Wichtig sind vor allem die Methoden forward(double length) und turn(double angleDeg), die die Turtle nach vorne bewegen bzw. ihre Blickrichtung ändern.",en:"Turtle class to draw straight lines or filled shapes. Most important methods are forward(double length) and turn(angleInDegrees)."})),r(o,"TurtleEmptyConstructorComment",()=>d({de:"Instanziiert ein neues Turtle-Objekt ohne Punkte. Die Turtle blickt anfangs nach rechts. Am Ende des Streckenzugs wird eine 'Schildkröte' (kleines Dreieck) gezeichnet.",en:"Creates a new Turtle object without points/lines. Initially the turtle's viewing direction is to the right. A small red triangle shows the turtle's current position. "})),r(o,"TurtleConstructorComment1",()=>d({de:"Instanziiert ein neues Turtle-Objekt ohne Punkte. (x, y) is die Startposition der Turtle. Die Turtle blickt anfangs nach rechts. Am Ende des Streckenzugs wird eine 'Schildkröte' (kleines Dreieck) gezeichnet.",en:"Creates a new Turtle object without points/lines at position (x, y). Initially the turtle's viewing direction is to the right. A small red triangle shows the turtle's current position. "})),r(o,"TurtleConstructorComment2",()=>d({de:"Instanziiert ein neues Turtle-Objekt ohne Punkte. (x, y) is die Startposition der Turtle. Die Turtle blickt anfangs nach rechts. Falls showTurtle == true wird am Ende des Streckenzugs eine 'Schildkröte' (kleines Dreieck) gezeichnet.",en:"Creates a new Turtle object without points/lines at position (x, y). Initially the turtle's viewing direction is to the right. If showTurtle == true a small red triangle shows the turtle's current position. "})),r(o,"TurtleCopyComment",()=>d({de:"Erstellt eine Kopie der Turtle.",en:"Creates a copy of this turtle object."})),r(o,"TurtleForwardComment",()=>d({de:"Weist die Turtle an, die angegebene Länge vorwärts zu gehen. Ihr zurückgelegter Weg wird als gerade Strecke mit der aktuellen BorderColor gezeichnet. Mit setBorderColor(null) bewirkst Du, dass ein Stück ihres Weges nicht gezeichnet wird.",en:"Makes the turtle walk forward given length. While walking it draws a line with current BorderColor. Use setBorderColor(null) to get invisible lines."})),r(o,"TurtleTurnComment",()=>d({de:"Bewirkt, dass sich die Turtle um den angegebenen Winkel (in Grad!) dreht, d.h. ihre Blickrichtung ändert. Ein positiver Winkel bewirkt eine Drehung gegen den Uhrzeigersinn. Diese Methode wirkt sich NICHT auf die bisher gezeichneten Strecken aus. Willst Du alles bisher Gezeichnete inklusive Turtle drehen, so nutze die Methode rotate.",en:"Makes the turtle (NOT the lines drawn by it) turn counterclockwise by given angle in Degrees. If you want to rotate all lines drawn by the turtle, then use method rotate instead."})),r(o,"TurtlePenUpComment",()=>d({de:"Bewirkt, dass die Turtle beim Gehen ab jetzt nicht mehr zeichnet.",en:"After this method call the turtle will stop drawing when it walks."})),r(o,"TurtlePenDownComment",()=>d({de:"Bewirkt, dass die Turtle beim Gehen ab jetzt wieder zeichnet.",en:"After this method call the turtle will restart drawing when it walks."})),r(o,"TurtleCloseAndFillComment",()=>d({de:"closeAndFill == true bewirkt, dass das von der Turtlezeichnung umschlossene Gebiet gefüllt wird.",en:"If closeAndFill == true then the area surrounded by the turtle's drawing is filled."})),r(o,"TurtleShowTurtleComment",()=>d({de:"showTurtle == true bewirkt, dass am Ort der Turtle ein rotes Dreieck gezeichnet wird.",en:"If showTurtle == true then a small triangle indicates the turtle's position."})),r(o,"TurtleClearComment",()=>d({de:"Löscht alle bis jetzt mit der Turtle gezeichneten Strecken.",en:"Erases all lines drawn previously."})),r(o,"TurtleCollidesWithBorderColorComment",()=>d({de:'Gibt genau dann true zurück, wenn sich der "Mittelpunkt" des Turtle-Dreiecks auf dem Rand eines anderen graphischen Objekts mit der angegebenen Farbe befindet.',en:"Returns true if and only if current position of turtle is on the border of another shape with given borderColor."})),r(o,"TurtleGetLastSegmentLengthComment",()=>d({de:"Gibt die Länge des letzten gezeichneten Streckenzugs zurück.",en:"Returns length of last drawn line segment."})),r(o,"TurtleGetXComment",()=>d({de:"Gibt die x-Koordinate der aktuellen Turtleposition zurück.",en:"Returns x-coordinate of current turtle position."})),r(o,"TurtleGetYComment",()=>d({de:"Gibt die y-Koordinate der aktuellen Turtleposition zurück.",en:"Returns y-coordinate of current turtle position."})),r(o,"TurtleMoveToComment",()=>d({de:"Bewirkt, dass die Turtle zum Punkt (x, y) geht.",en:"Makes Turtle walk to position (x, y)."})),r(o,"TurtleGetTurtleAngleComment",()=>d({de:"Gibt den Blickwinkel der Turtle in Grad zurück.",en:"Returns turtle's viewing angle in degrees."})),r(o,"mouseListenerInterfaceComment",()=>d({de:"Interface mit Methoden, die aufgerufen werden, wenn Maus-Ereignisse eintreten. Ein Objekt, das dieses Interface implementiert muss zuvor aber mit world.addMouseListener() registriert werden, wobei world das aktuelle World-Objekt ist.",en:"A MouseListener's methods are called whenever a mouse event occurs. Objects implementing this interface need registering at world by world.addMouseListener()."})),r(o,"mouseListenerOnMouseUpComment",()=>d({de:"Wird aufgerufen, wenn eine Maustaste über dem Grafikbereich losgelassen wird.",en:"This method gets called if user releases a mouse button."})),r(o,"mouseListenerOnMouseDownComment",()=>d({de:"Wird aufgerufen, wenn eine Maustaste über dem Grafikbereich gedrückt wird.",en:"This method gets called if user presses a mouse button."})),r(o,"mouseListenerOnMouseMoveComment",()=>d({de:"Wird aufgerufen, wenn der Mauszeiger über dem Grafikbereich bewegt wird. Wenn PointerLock aktiv ist, dann werden der Methode Delta-Koordinatenwerte übergeben, ansonsten die absolute Position innerhalb des Grafikbereichts.",en:"This method gets called if user moves mouse. If pointer lock is active then method receives delta coordinates, otherwise absolute position within graphic view."})),r(o,"mouseListenerOnMouseEnterComment",()=>d({de:"Wird aufgerufen, wenn der Mauszeiger in den Grafikbereich hineinbewegt wird.",en:"This method gets called if mouse cursor enters graphic view."})),r(o,"mouseListenerOnMouseLeaveComment",()=>d({de:"Wird aufgerufen, wenn der Mauszeiger den Grafikbereich verlässt.",en:"This method gets called if mouse cursor leaves graphic view."})),r(o,"rectangleClassComment",()=>d({de:"Ein Objekt der Klasse Rectangle zeichnet ein Rechteck in den Grafikbereich.",en:"Objects of class Rectangle draw rectangles."})),r(o,"rectangleEmptyConstructorComment",()=>d({de:"Instanziiert ein Rectangle-Objekt mit Standardmaßen. Seine linke obere Ecke liegt bei (0/0). Breite und Höhe betragen jeweils 100. Die Rechteckseiten sind zunächst parallel zu den Koordinatenachsen.",en:"Instantiates a rectangle object with default geometry. It's left top edge is located at (0/0). Width and height are 100 each. Initial orientation is parallel to x- and y-axis."})),r(o,"rectangleConstructorComment",()=>d({de:"Instanziiert ein Rectangle-Objekt. Seine linke obere Ecke liegt bei (top/left). Width ist seine Breite, height seine Höhe. Das Rechteck ist zunächst achsenparallel.",en:"Instantiates a rectangle object with given width and height. It's left top edge is located at (top/left). Initial orientation is parallel to x- and y-axis."})),r(o,"rectangleSetWidthComment",()=>d({de:"setzt die Breite des Rechtecks.",en:"sets width of rectangle"})),r(o,"rectangleSetHeightComment",()=>d({de:"setzt die Höhe des Rechtecks.",en:"sets height of rectangle"})),r(o,"rectangleGetWidthComment",()=>d({de:"gibt die Breite des Rechtecks zurück",en:"gets rectangle width"})),r(o,"rectangleGetHeightComment",()=>d({de:"gibt die Höhe des Rechtecks zurück",en:"gets rectangle height"})),r(o,"rectangleCopyComment",()=>d({de:"Erstellt eine Kopie des Rectangle-Objekts und git sie zurück.",en:"returns a copy of this rectangle object"})),r(o,"rectangleMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich seine linke obere Ecke an den angegebenen Koordinaten befindet.",en:"Moves the graphic object so that its top-left edge is at the specified coordinates"})),r(o,"RoundedRectangleClassComment",()=>d({de:"Ein Objekt der Klasse RoundedRectangle zeichnet ein Rechteck in den Grafikbereich.",en:"Objects of class RoundedRectangle draw RoundedRectangles."})),r(o,"RoundedRectangleEmptyConstructorComment",()=>d({de:"Instanziiert ein Rectangle-Objekt mit Standardmaßen. Seine linke obere Ecke liegt bei (0/0). Breite und Höhe betragen jeweils 100. Die Rechteckseiten sind zunächst parallel zu den Koordinatenachsen.",en:"Instantiates a RoundedRectangle object with default geometry. It's left top edge is located at (0/0). Width and height are 100 each. Initial orientation is parallel to x- and y-axis."})),r(o,"RoundedRectangleConstructorComment",()=>d({de:"Instanziiert ein Rectangle-Objekt. Seine linke obere Ecke liegt bei (top/left). Width ist seine Breite, height seine Höhe. Das Rechteck ist zunächst achsenparallel.",en:"Instantiates a RoundedRectangle object with given width and height. It's left top edge is located at (top/left). Initial orientation is parallel to x- and y-axis."})),r(o,"RoundedRectangleSetWidthComment",()=>d({de:"setzt die Breite des Rechtecks.",en:"sets width of RoundedRectangle"})),r(o,"RoundedRectangleSetHeightComment",()=>d({de:"setzt die Höhe des Rechtecks.",en:"sets height of RoundedRectangle"})),r(o,"RoundedRectangleGetWidthComment",()=>d({de:"gibt die Breite des Rechtecks zurück",en:"gets RoundedRectangle width"})),r(o,"RoundedRectangleGetHeightComment",()=>d({de:"gibt die Höhe des Rechtecks zurück",en:"gets RoundedRectangle height"})),r(o,"RoundedRectangleCopyComment",()=>d({de:"Erstellt eine Kopie des RoundedRectangle-Objekts und git sie zurück.",en:"returns a copy of this RoundedRectangle object"})),r(o,"RoundedRectangleMoveToComment",()=>d({de:"Verschiebt das Grafikobjekt so, dass sich sein Diagonalenschnittpunkt an den angegebenen Koordinaten befindet.",en:"Moves the graphic object so that its diagonal intersection is at the specified coordinates"})),r(o,"TriangleClassComment",()=>d({de:"Dreieck",en:"triangle"})),r(o,"TriangleConstructorComment",()=>d({de:"Erstellt ein Dreieck mit den gegebenen drei Eckpunkten.",en:"Creates a triangle from given points."})),r(o,"TriangleSetPointsComment",()=>d({de:"Setzt die Koordinaten der Eckpunkte des Dreiecks.",en:"Set coordinates of triangle-edges."})),r(o,"TriangleConstructorComment1",()=>d({de:"Erstellt ein Dreieck mit den Eckpunkten (0,0), (100, 0) und (0, 100).",en:"Creates a triangle from given points."})),r(o,"TriangleCopyComment",()=>d({de:"Erstellt eine Kopie des Dreiecks.",en:"Creates a copy of this triangle."})),r(o,"LineClassComment",()=>d({de:"Die Klasse Line repräsentiert eine Strecke",en:"Line"})),r(o,"LineEmptyConstructorComment",()=>d({de:"Erstellt eine gerade Strecke vom Punkt (0, 0) zum Punkt (100, 100).",en:"Creates a straight line from (0, 0) to (100, 100)."})),r(o,"LineConstructorComment1",()=>d({de:"Erstellt eine gerade Strecke von (x1, y1) nach (x2, y2).",en:"Creates a straight line from (x1, y1) to (x2, y2)."})),r(o,"LineSetPointsComment",()=>d({de:"Ändert Start- und Endpunkt der Linie.",en:"Sets start- and endpoint of this line."})),r(o,"LineCopyComment",()=>d({de:"Erstellt eine Kopie der Linie.",en:"Creates a copy of this line."})),r(o,"BitmapClassComment",()=>d({de:"Rechteckige Bitmap in der Grafikausgabe",en:"Rectangular Bitmap"})),r(o,"BitmapConstructorComment",()=>d({de:"Instanziiert eine neue Bitmap. pointsX bzw. pointsY bezeichnet Anzahl der Bildpunkte in x bzw. y-Richtung, (left, top) sind die Koordinaten der linken oberen Ecke.",en:"Creates a new Bitmap. pointsX and pointsY are it's resolution, (left, top) is it's top-left corner."})),r(o,"BitmapCopyComment",()=>d({de:"Erzeugt eine Kopie dieser Bitmap.",en:"Creates a copy of this bitmap."})),r(o,"BitmapCoordinatesOutOfBoundsException",(t,e,i,n)=>d({de:`Die Koordinaten x: ${t}, y: ${e} liegen außerhalb der Bitmap mit der Auflösung ${i}, ${n}.`,en:`Coordinates x: ${t}, y: ${e} are out of bounds ${i}, ${n}.`})),r(o,"BitmapSetColorComment",()=>d({de:"Setzt die Farbe des angegebenen Bildpunkts auf der Bitmap.",en:"Sets color of given point on Bitmap."})),r(o,"BitmapGetResolutionXComment",()=>d({de:"Gibt die Auflösung ( = Anzahl an Punkten) der Bitmap in X-Richtung zurück.",en:"Returns resolution ( = number of pixels) in x-direction."})),r(o,"BitmapGetResolutionYComment",()=>d({de:"Gibt die Auflösung ( = Anzahl an Punkten) der Bitmap in y-Richtung zurück.",en:"Returns resolution ( = number of pixels) in y-direction."})),r(o,"BitmapGetPixelAlphaComment",()=>d({de:"Gibt die Transparenz des Pixels an der angegebenen Position innerhalb der Bitmap zurück.",en:"Returns alpha value of pixel at given position inside bitmap."})),r(o,"BitmapGetColorComment",()=>d({de:"Gibt die Farbe des angegebenen Punktes als Color-Objekt zurück.",en:"Returns color of given point as Color-object."})),r(o,"BitmapIsColorComment",()=>d({de:"Gibt genau dann true zurück, wenn die Farbe am angegebenen Punkt (x,y) mit der übergebenen Farbe übereinstimmt.",en:"Returns true if and only if color at point (x, y) matches given color."})),r(o,"BitmapWorldCoordinatesToBitmapCoordinatesComment",()=>d({de:"Wandelt die Weltkoordinaten (x,y) in Koordinaten innerhalb der Bitmap um.",en:"Converts world coordinates to coordinates inside this bitmap."})),r(o,"BitmapFillAllComment",()=>d({de:"Füllt die ganze Bitmap mit der angegebenen Farbe.",en:"Fills whole Bitmap with given color."})),r(o,"BitmapDownloadAsPngFileComment",()=>d({de:"Lädt die Bitmap als PNG-Datei mit dem angegebenen Dateinamen herunter.",en:"Downloads the bitmap as a PNG file with the given filename."})),r(o,"DirectionEnumComment",()=>d({de:"Richtung (top, right, bottom, left)",en:"Direction (top, right, bottom, left)"})),r(o,"spriteGetPixelColorOutOfBoundsError",(t,e,i,n)=>d({de:"Die Koordinaten ("+t+", "+e+") liegen außerhalb des Sprites mit der Breite "+i+" und der Höhe "+n,en:"Coordinates ("+t+", "+e+") are out of bounds of sprite with width "+i+" and height "+n})),r(o,"spriteClassComment",()=>d({de:"Ein Sprite ist eine kleine Pixelgrafik, die verschoben, gedreht und skaliert werden kann. Zudem besitzt es Methoden zum Erkennen von Kollisionen mit anderen grafischen Objekten.",en:"A sprite is a small image which may be moved, rotated or scaled. It is able to detect collisions with other graphic objects."})),r(o,"spriteConstructorComment1",()=>d({de:"Instanziiert ein neues Sprite und stellt es an der Position (x, y) dar (== Diagonalenschnittpunkt der Boundingbox). SpriteLibrary ist ein Aufzählungstyp (enum). Gib einfach SpriteLibraryEntry gefolgt von einem Punkt ein, dann erhältst Du ein Auswahl von Bildern. Einen Überblick über die Bilder bekommst Du auch über den Menüpunkt Hilfe->Sprite-Bilderübersicht.",en:"Instantiate a new sprite object and move it to position (x,y) (== diagonal intersection of bounding box). SpriteLibrary is a enum. Just enter SpriteLibraryEntry followed by a dot to get a list of library identifiers. To view all sprite libraries got to Help->Sprite Libraries."})),r(o,"spriteConstructorComment2",()=>d({de:"Zeichnet das graphische Objekt (shape) in eine Bitmap und macht daraus ein Sprite. Dieses wird an der Position (0, 0) dargestellt.",en:"Renders given Shape object into a bitmap and creates a Sprite object from it. This Sprite object is shown at position (0, 0)."})),r(o,"spriteErrorImageNotFound",(t,e)=>d({de:"Das Spritesheet "+t+" hat kein Bild mit Index "+e,en:"Spritesheet "+t+" has no image with index "+e})),r(o,"tileClassComment",()=>d({de:"Eine Kachel in einem Sprite, das mithilfe der Methode makeTiling zu einer Kachelfläche gemacht wurde.",en:"A tile inside a sprite which had been converted to a tiled sprite with method makeTiling."})),r(o,"tileMoveComment",()=>d({de:"Verschiebt das Grafikobjekt um dx Pixel nach rechts und um dy Pixel nach unten.",en:"Moves tile by dx pixels right and dy pixels down."})),r(o,"tileScaleComment",()=>d({de:"Streckt das Grafikobjekt um den angegebenen Faktor. Das Zentrum der Streckung ist der 'Mittelpunkt' des Objekts.",en:"Scales tile by given factor. Scale origin is the diagonal intersection of this tile."})),r(o,"tileMirrorXComment",()=>d({de:"Spiegelt das Objekt in X-Richtung.",en:"Mirrors tile in x-direction."})),r(o,"tileMirrorYComment",()=>d({de:"Spiegelt das Objekt in Y-Richtung.",en:"Mirrors tile in y-direction."})),r(o,"spriteShapeIsNullError",()=>d({de:"Die übergebene Figur hat den Wert null.",en:"Given shape is null."})),r(o,"spriteSetImageComment",()=>d({de:"Ändert das Bild des Sprites. SpriteLibraryEntry ist ein Aufzählungstyp (enum). Gib einfach SpriteLibraryEntry gefolgt von einem Punkt ein, dann erhältst Du ein Auswahl von Bildern. Einen Überblick über die Bilder bekommst Du auch über den Menüpunkt Hilfe->Sprite-Bilderübersicht.",en:"sets the image of this sprite. SpriteLibrary is a enum. Just enter SpriteLibraryEntry followed by a dot to get a list of library identifiers. To view all sprite libraries got to Help->Sprite Libraries."})),r(o,"spriteSetImageIndexComment",()=>d({de:"Ändert den Bildindex des Sprites, so dass ein anderes Bild der SpriteLibrary dargestellt wird.",en:"Changes image index of sprite. This makes the sprite show the corresponding image of current SpriteLibrary."})),r(o,"spritePlayAnimationComment",()=>d({de:"Spielt eine Animation ab.",en:"plays an animation"})),r(o,"spriteStopAnimationComment",()=>d({de:"Stoppt die gerade laufende Animation",en:"stops currently playing animation"})),r(o,"spritePauseAnimationComment",()=>d({de:"Pausiert die gerade laufende Animation",en:"pauses currently playing animation"})),r(o,"spriteResumeAnimationComment",()=>d({de:"Fährt mit einer pausierten Animation wieder fort.",en:"resumes currently paused animation"})),r(o,"spriteSetAsBackgroundImageComment",()=>d({de:"Streckt und verschiebt das Sprite so, dass es die gesamte Zeichenfläche überdeckt.",en:"Scale and move sprite to cover whole canvas."})),r(o,"spriteSetAlphaComment",()=>d({de:"Setzt die Durchsichtigkeit. 0.0 bedeutet vollkommen durchsichtig, 1.0 bedeutet vollkommen undurchsichtig.",en:"Sets alpha value of sprite. Alpha value of 0.0 makes sprite completely transparent, value of 1.0 makes it complete opaque."})),r(o,"spriteCopyComment",()=>d({de:"Erstellt eine Kopie des Sprite-Objekts und git sie zurück.",en:"Creates a copy of this Sprite object and returns it."})),r(o,"spriteGetWidthComment",()=>d({de:"Gibt die Breite des Sprites in Pixeln zurück.",en:"Returns width of sprite in pixels."})),r(o,"spriteGetHeightComment",()=>d({de:"Gibt die Höhe des Sprites in Pixeln zurück.",en:"Returns height of sprite in pixels."})),r(o,"spriteGetImageIndexComment",()=>d({de:"Gibt den Index des Bildes innerhalb der Sprite-Library zurück.",en:"Returns index of currently displayed image within sprite library."})),r(o,"spriteMakeTilingComment1",()=>d({de:`Fügt das identische Bild nach rechts und unten kachelartig ('tile'!) so oft hinzu, bis die angegebene Breite erreicht ist. TIPP: Mit der Methode getTileImage() erhält man ein Tile-Objekt, dessen Methoden move, scale, mirrorX und mirrorY sich gleichzeitig auf jede einzelne Kachel auswirken.`,en:`Adds the identical image (-> 'tiles') at right and bottom of image until given width and height is reached. HINT: Use method getTileImage() to obtain a tile object which can move, scale and mirror all the tiles at once.`})),r(o,"spriteMakeTilingComment2",()=>d({de:`Fügt das identische Bild nach rechts und unten kachelartig ('tile'!) so oft hinzu, bis die angegebene Breite erreicht ist. GapX und GapY sind die Abstände, die zwischen den einzelnen Kacheln eingehalten werden. TIPP: Mit der Methode getTileImage() erhält man ein Tile-Objekt, dessen Methoden move, scale, mirrorX und mirrorY sich gleichzeitig auf jede einzelne Kachel auswirken.`,en:`Adds the identical image (-> 'tiles') at right and bottom of image until given width and height is reached. GapX and GapY are distances between the tiles. HINT: Use method getTileImage() to obtain a tile object which can move, scale and mirror all the tiles at once.`})),r(o,"spriteGetTileImageComment",()=>d({de:"Nachdem das Sprite mittels der Methode 'makeTiling' zum TileSprite gemacht wurde, kann wirken die Methoden move, scale und rotate immer auf den ganzen gekachelten Bereich. Will man das verfielfachte Bild ändern, so bekommt man über diese Methode das Sprite-Objekt, das diesem Bild entspricht. Ruft man für dieses Objekt die Methoden move, rotate oder scale auf, so wirken sie auf jede der einzelnen Kacheln.",en:"After sprite is converted to tilesprite via method 'makeTiling' you can modify the tiles with the TileImage object returned by this method."})),r(o,"spriteSpriteIsNoTiledSpriteError",()=>d({de:"Das Sprite hat kein TileImage. Sie müssen es zuerst mit der Methode makeTiling in ein Kachel-Sprite umwandeln.",en:"This sprite has no tileImage as it had not been converted to a TileSprite via method 'makeTiling'."})),r(o,"spriteGetPixelColorComment",()=>d({de:"Gibt die Farbe des Pixels an der angegebenen Position innerhalb des Sprites zurück.",en:"Returns color of pixel at given position inside sprite."})),r(o,"spriteGetPixelAlphaComment",()=>d({de:"Gibt die Transparenz des Pixels an der angegebenen Position innerhalb des Sprites zurück.",en:"Returns alpha value of pixel at given position inside sprite."})),r(o,"scaleModeEnumComment",()=>d({de:"Art der Interpolation der Pixelfarben beim Skalieren von Sprites",en:"interpolation type used for scaling Sprites"})),r(o,"repeatTypeEnumComment",()=>d({de:"Gibt an, auf welche Art eine Sprite-Animation wiederholt werden soll. Wichtig: RepeatType.once zerstört das Sprite-Objekt nach Ausführung der Animation!",en:"Enumerates how a sprite animation may be repeated. RepeatType.once destroys Sprite after animation."})),r(o,"spriteLibraryComment",()=>d({de:"Aufzählung der Sprite-Grafikbibliotheken",en:"enum of sprite libraries"})),r(o,"collectionToArrayComment",()=>d({de:"Wandelt die Collection in ein Array um und gibt dieses zurück.",en:"Returns an array containing all of the elements in this list in proper sequence (from first to last element)."})),r(o,"collectionToArrayComment2",()=>d({de:"Wandelt die Collection in ein Array um und gibt dieses zurück. Als Parameter muss ein Muster-Array übergeben werden, das den Typ des zurückgegebenen Arrays bestimmt.",en:"Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array."})),r(o,"collectionStreamComment",()=>d({de:"Gibt einen Stream zurück, der diese Collection als Quelle hat.",en:"Returns a stream with this collection as source."})),r(o,"collectionAddElementComment",()=>d({de:"Fügt das übergebene Element ans Ende der Liste an.",en:"Appends the specified element to the end of this list."})),r(o,"collectionAddAllComment",()=>d({de:"Fügt alle Elemente der übergebenen Collection ans Ende der Liste an.",en:"Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's Iterator."})),r(o,"collectionClearComment",()=>d({de:"Entleert die Liste. Die Liste ist nach Aufruf dieser Methode leer. Die Elemente der Liste werden dadurch nicht beeinträchtigt.",en:"Removes all of the elements from this list. The list will be empty after this call returns."})),r(o,"collectionContainsComment",()=>d({de:"Gibt genau dann true zurück, wenn die Liste das angegebene Element enthält.",en:"Returns true if this list contains the specified element."})),r(o,"collectionContainsAllComment",()=>d({de:"Gibt genau dann true zurück, wenn die Liste alle Elemente der übergebenen Collection enthält.",en:"Returns true if this collection contains all of the elements in the specified collection."})),r(o,"collectionIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn die Liste leer ist, d.h. keine Elemente enthält.",en:"Returns true if this list contains no elements."})),r(o,"collectionRemoveObjectComment",()=>d({de:"Falls die Liste das übergebene Element enthält, entnimmt diese Methode der Liste das erste solche Element. Die Methode gibt genau dann true zurück, wenn die Liste das Element enthalten hat.",en:"Removes the first occurrence of the specified element from this list, if it is present. Returns true if element is found."})),r(o,"collectionRemoveAllComment",()=>d({de:"Entnimmt der Liste alle Vorkommen aller Elemente der übergebenen Collection.",en:"Removes from this list all of its elements that are contained in the specified collection."})),r(o,"collectionSizeComment",()=>d({de:"Gibt die Anzahl der in der Liste enthaltenen Elemente zurück. Ist ein Element mehrfach enthalten, so wird es dabei mehrfach gezählt.",en:"Returns the number of elements in this list."})),r(o,"collectionAddAllNullPointerException",()=>d({de:"addAll wurde mit null als Argument aufgerufen.",en:"addAll had been called with null as argument."})),r(o,"arrayListConstructorNullPointerException",()=>d({de:"Der Konstruktor wurde mit null als Argument aufgerufen.",en:"The constructor had been called with null as argument."})),r(o,"collectionContainsAllNullPointerException",()=>d({de:"containsAll wurde mit null als Argument aufgerufen.",en:"containsAll had been called with null as argument."})),r(o,"collectionRemoveAllNullPointerException",()=>d({de:"removeAll wurde mit null als Argument aufgerufen.",en:"removeAll had been called with null as argument."})),r(o,"listAddElementComment",()=>d({de:"Fügt das angegebene Element an der angegebenen Position in die Liste ein. Alle nachfolgende Elemente werden um eine Position nach hinten verschoben.",en:"Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices)."})),r(o,"listAddAllElementsComment",()=>d({de:"Fügt alle Elemente der übergebenen Collection an der angegebenen Position in die Liste ein. Alle nachfolgende Elemente werden entsprechend nach hinten verschoben.",en:"Inserts all of the elements in the specified collection into this list, starting at the specified position. Shifts the element currently at that position (if any) and any subsequent elements to the right (increases their indices). The new elements will appear in the list in the order that they are returned by the specified collection's iterator."})),r(o,"listGetComment",()=>d({de:`Gibt das Element an der angegebenen Position zurück. Das erste Element der Liste hat Position 0.`,en:"Returns the element at the specified position in this list. First element in list has position 0."})),r(o,"listIndexOfComment",()=>d({de:`Gibt den Index des angegebenen Elements in der Liste zurück. Falls das Element nicht in der Liste enthalten ist, wird -1 zurückgegeben. Tipp: Das erste Element der Liste hat Index 0.`,en:`Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element. Hint: First element in List has index 0.`})),r(o,"listRemoveComment",()=>d({de:`Entfernt das Element mit dem angegebenen Index aus der Liste. Tipp: Das erste Element der Liste hat Index 0.`,en:`Removes the element at the specified position in this list. Hint: First element in list has index 0.`})),r(o,"listSetComment",()=>d({de:"Setzt das übergebene Element an der angegebenen Position in die Liste anstatt des bisher dort vorhandenen.",en:"Replaces the element at the specified position in this list with the specified element."})),r(o,"listSortComment",()=>d({de:"Sortiert die Liste anhand des übergebenen Comparator-Objekts.",en:"Sorts this list according to the order induced by the specified Comparator."})),r(o,"arrayListClassComment",()=>d({de:"Die Klasse ArrayList ist eine Liste, deren Elemente in einem Array gespeichert sind. Wird das Array zu klein, kopiert die ArrayList es automatisch in ein größeres Array.",en:"An ArrayList is a List backed by an array. If the array gets too small it's automatically copied into a larger one."})),r(o,"arrayListConstructorComment",()=>d({de:"Instanziiert (d.h. erzeugt) eine neue, leere Liste.",en:"Constructs an empty list."})),r(o,"arrayListConstructorComment1",()=>d({de:"Instanziiert (d.h. erzeugt) eine neue Liste und fügt alle Elemente der übergebenen Collection hinzu.",en:"Constructs a new list and adds all elements from the specified collection."})),r(o,"arrayListIteratorComment",()=>d({de:"Gibt ein Iterator-Objekt zurück, mit dem über alle Elemente der Liste in der gespeicherten Reihenfolge iteriert werden kann.",en:"Returns an iterator over the elements in this list in proper sequence."})),r(o,"arrayListForeachComment",()=>d({de:`Führt die angegebene Methode (Aktion) für jedes Element der ArrayList aus. Tipp: Die Aktion kann in Lambda-Schreibweise angegeben werden, z.B. foreach((element) -> {...})`,en:"Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified)."})),r(o,"vectorConstructorComment",()=>d({de:"Instanziiert (d.h. erzeugt) eine neue, leere Liste.",en:"Constructs an empty list."})),r(o,"vectorFirstElementComment",()=>d({de:"Gibt das erste Element der Liste zurück.",en:"Returns the first element of this list."})),r(o,"vectorLastElementComment",()=>d({de:"Gibt das letzte Element der Liste zurück.",en:"Returns the last element of this list."})),r(o,"vectorRemoveElementAtComment",()=>d({de:"Entfernt das Element an der angegebenen Position aus der Liste. index == 0 bedeutet das erste Element der Liste.",en:"Removes the element at the specified position in this list. index == 0 means first element of the list."})),r(o,"vectorIteratorComment",()=>d({de:"Gibt ein Iterator-Objekt zurück, mit dem über alle Elemente der Liste in der gespeicherten Reihenfolge iteriert werden kann.",en:"Returns an iterator over the elements in this list in proper sequence."})),r(o,"vectorForeachComment",()=>d({de:`Führt die angegebene Methode (Aktion) für jedes Element der ArrayList aus. Tipp: Die Aktion kann in Lambda-Schreibweise angegeben werden, z.B. foreach((element) -> {...})`,en:"Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception. Unless otherwise specified by the implementing class, actions are performed in the order of iteration (if an iteration order is specified)."})),r(o,"indexOutOfBoundsException",(t,e)=>d({de:`Der Index ${t} liegt außerhalb des zulässigen Bereichs (0 bis ${e})`,en:`Index ${t} is out of bounds (from 0 up to ${e})`})),r(o,"comparableInterfaceComment",()=>d({en:`This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method. Lists (and arrays) of objects that implement this interface can be sorted automatically by Collections.sort (and Arrays.sort). Objects that implement this interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator.`,de:"Klassen, die dieses Interface implementieren, haben eine Methode compareTo, mit der sich zwei Objekte der Klasse vergleichen lassen."})),r(o,"comparableCompareToComment",()=>d({de:"Vergleicht das Objekt mit dem übergebenen Objekt. Liefert eine negative Zahl zurück, wenn das Objekt 'kleiner' ist als das übergebene, eine positive, falls es größer ist und 0, wenn beide Objekte gleich sind.",en:"Compares this object with the specified object for order. Returns a negative value if this object is 'smaller' than the specified object, a positive value if it is 'larger' and 0 if they are equal."})),r(o,"comparatorInterfaceComment",()=>d({de:"A Comparator is a object that can compare objects of class T.",en:"A comparison function, which imposes a total ordering on some collection of objects."})),r(o,"compataratorCompareComment",()=>d({de:"Vergleicht die zwei angegebenen Objekte. Gibt eine negative Zahl zurück, falls das erste 'kleiner' ist als das zweite, eine positive Zahl, falls es 'größer' ist und 0 falls die beiden Objekte 'gleich' sind.",en:"Compares its two arguments for order. Returns a negative value if the first object is 'smaller' than the second, a positive value if it is 'larger' than the second one and 0 if they are 'equal'."})),r(o,"iterableInterfaceComment",()=>d({de:"Objekte von Klassen, die dieses Interface implementieren, können in einer vereinfachten for-loop (for(object o: list){...}) verwendet werden.",en:"Implementing this interface allows an object to be the target of the 'for-each loop' statement. See For-each Loop"})),r(o,"iterableIteratorComment",()=>d({de:"Gibt ein Iterator-Objekt für dieses Iterable-Objekt zurück.",en:"Returns an iterator over elements of type T."})),r(o,"iterableForEachComment",()=>d({de:"Führt die angegebene Aktion für jedes Element dieses Iterable-Objekts aus.",en:"Performs the given action for each element of the Iterable until all elements have been processed."})),r(o,"iteratorInterfaceComment",()=>d({de:"Ein Iterator ist ein Objekt, das die Elemente einer Liste der Reihe nach einzeln liefern kann.",en:"An Iterator can return all objects of a list one at a time."})),r(o,"iteratorHasNextComment",()=>d({de:"Liefert true zurück falls es noch weitere Elemente gibt, die mit der Methode next() abgerufen werden können.",en:"Returns true if the iteration has more elements."})),r(o,"iteratorNextComment",()=>d({de:"Liefert das nächste Element.",en:"Returns the next element of the iteration."})),r(o,"mathPIComment",()=>d({de:"Die Zahl Pi (3.14159...) in double-Genauigkeit (ca. 15 Nachkommastellen)",en:"Number Pi (3.14159...) in double precision (around 15 digits)"})),r(o,"mathEComment",()=>d({de:"Die Zahl e (2.718281828459045...) in double-Genauigkeit (ca. 15 Nachkommastellen)",en:"Number e (2.718281828459045...) in double precision (around 15 digits)"})),r(o,"mathAbsComment",()=>d({de:"Betrag der übergebenen Zahl",en:"Absolute value of given number"})),r(o,"mathSinComment",()=>d({de:"Sinus des übergebenen Winkels (im Bogenmaß)",en:"Sine of given angle (in radians)"})),r(o,"mathCosinComment",()=>d({de:"Cosinus des übergebenen Winkels (im Bogenmaß)",en:"Cosine of given angle (in radians)"})),r(o,"mathTanComment",()=>d({de:"Tangens des übergebenen Winkels (im Bogenmaß)",en:"Tangens of given angle (in radians)"})),r(o,"mathArcsinComment",()=>d({de:"Arcussinus der übergebenen Zahl",en:"Arc sine of given number"})),r(o,"mathArccosComment",()=>d({de:"Arcuscosinus der übergebenen Zahl",en:"Arc cosinus of given number"})),r(o,"mathArctanComment",()=>d({de:"Arcustangens der übergebenen Zahl",en:"Arc tan of given number"})),r(o,"mathAtan2Comment",()=>d({de:"Gibt den Winkel (im Bogenmaß) von der positiven x-Achse aus zum Vektor (x/y) zurück.",en:"Returns angle (in radians) from positive x-axis to vector (x/y)."})),r(o,"mathRoundComment",()=>d({de:"Rundet die übergebene Zahl auf eine ganze Zahl. Ab '...,5' wird aufgerundet.",en:"Rounds given number."})),r(o,"mathFloorComment",()=>d({de:"Rundet die übergebene Zahl auf eine ganze Zahl ab, d.h. aus 45.9 wird beispielsweise 45.",en:"Rounds given number down."})),r(o,"mathCeilComment",()=>d({de:"Rundet die übergebene Zahl auf eine ganze Zahl auf, d.h. aus 45.1 wird beispielsweise 46.",en:"Rounds given number up."})),r(o,"mathSignComment",()=>d({de:"Vorzeichen einer Zahl, d.h. -1 falls die Zahl negativ ist, +1 falls die Zahl positiv ist und 0, falls die Zahl 0 ist.",en:"Sign of the given number: -1 if number is less then 0, +1 if number is > 0 and 0 if number is 0."})),r(o,"mathSqrtComment",()=>d({de:"Quadratwurzel der Zahl",en:"Square root of given number"})),r(o,"mathRandomComment",()=>d({de:"Zufallszahl aus dem Bereich [0; 1[",en:"Random number out of [0; 1["})),r(o,"mathPowComment",()=>d({de:"Potenz 'Basis hoch Exponent'",en:"base to the power of exponent"})),r(o,"mathToDegreesComment",()=>d({de:"Wandelt den übergebenen Winkel vom Bogenmaß ins Gradmaß um, d.h. berechnet angle/pi * 180.",en:"Transforms given angle from radians to degrees."})),r(o,"mathToRadiansComment",()=>d({de:"Wandelt den übergebenen Winkel vom Gradmaß ins Bogenmaß um, d.h. berechnet angle/180 * pi.",en:"Transforms given angle from degrees to radians."})),r(o,"mathExpComment",()=>d({de:"Berechnet 'e hoch zahl'",en:"Calculates 'e to the power of given number'"})),r(o,"mathLogComment",()=>d({de:"Berechnet den natürlichen Logarithmus der Zahl",en:"Returns the natural logarithm (base e) of a double value."})),r(o,"mathLog10Comment",()=>d({de:"Berechnet den Logarithmus der Zahl zur Basis 10.",en:"Returns the base 10 logarithm of a double value."})),r(o,"mathMaxComment",()=>d({de:"Gibt die größere der beiden Zahlen zurück.",en:"Returns the greater of two values."})),r(o,"mathMinComment",()=>d({de:"Gibt die kleinere der beiden Zahlen zurück.",en:"Returns the smaller of two values."})),r(o,"RandomClassComment",()=>d({de:"Die Klasse Random stellt Methoden zur Erzeugung von Zufallszahlen zur Verfügung.",en:"Class Random provides methods to generate random numbers."})),r(o,"randomRandIntComment",()=>d({de:"Gibt eine ganze Zufallszahl aus dem Bereich {from, from + 1, ... , to} zurück.",en:"Returns a natural random value out of {from, from + 1, ... , to}."})),r(o,"randomRandDoubleComment",()=>d({de:"Gibt eine ganze Zufallszahl aus dem Bereich [from, to[ zurück.",en:"Returns a natural random value out of [from, to[."})),r(o,"randomNextIntComment",()=>d({de:"Gibt eine ganzzahlige Zufallszahl aus der Menge {0, 1, ..., bound - 1} zurück.",en:"Returns a natural number out of {0, 1, ..., bound - 1}."})),r(o,"DecimalFormatClassComment",()=>d({de:"Die Klasse DecimalFormat wird zum Formatieren von Zahlen genutzt.",en:"Class DecimalFormat provides methods to format numbers."})),r(o,"decimalFormatConstructorComment",()=>d({de:"Erzeugt ein neues DecimalFormat-Object. Zur Bedeutung von format siehe https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html",en:"Creates a new DecimalFormat object. For possible values for format see https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html"})),r(o,"decimalFormatFormatComment",()=>d({de:"Die Methode Format gibt die Zahl formatiert als String zurück.",en:"Formats a number to produce a string."})),r(o,"optionalClassComment",()=>d({de:"Ein Container-Objekt das einen Nicht-null-Wert enthalten kann oder auch nicht. Falls es eine Wert enthält liefert isPresent() true und get() den Wert.",en:"A container object which may or may not contain a non-null value. If a value is present, isPresent() will return true and get() will return the value."})),r(o,"optionalEmptyComment",()=>d({de:"Gibt ein leeres Optional-Objekt zurück.",en:"Returns an empty Optional instance."})),r(o,"optionalEqualsComment",()=>d({de:"Gibt genau dann true zurück, wenn beide Optional-Objekte leer sind oder wenn die enthaltenen Objekte gleich sind, ausgehend von deren equals-Funktion.",en:`Indicates whether some other object is "equal to" this Optional. The other object is considered equal if: it is also an Optional and; both instances have no value present or; the present values are "equal to" each other via equals().`})),r(o,"optionalIsEmptyComment",()=>d({de:"Gibt genau dann zurück, wenn im Optional-Objekt kein Wert enthalten ist.",en:"If a value is not present, returns true, otherwise false."})),r(o,"optionalMapComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält liefert diese Methode Optional.of(f(Wert)) zurück, ansonsten ein leeres Optional-Objekt.",en:"If a value is present, returns an Optional describing (as if by ofNullable(T)) the result of applying the given mapping function to the value, otherwise returns an empty Optional."})),r(o,"optionalFlatMapComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält liefert diese Methode f(Wert) zurück, ansonsten ein leeres Optional-Objekt.",en:"If a value is present, returns the result of applying the given Optional-bearing mapping function to the value, otherwise returns an empty Optional."})),r(o,"optionalOfComment",()=>d({de:"Gibt ein Optional-Objekt zurück das den gegebenen (von null verschiedenen) Wert enthält.",en:"Returns an Optional describing the given non-null value."})),r(o,"optionalOrElseComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält liefert die Methode diesen zurück, ansonsten den übergebenen Wert t.",en:"If a value is present, returns the value, otherwise returns other."})),r(o,"optionalIfPresentComment",()=>d({de:"Wenn das Optional-Objekt einen Wert enthält wird damit die übergebene Aktion ausgeführt, ansonsten wird nichts gemacht.",en:"If a value is present, performs the given action with the value, otherwise does nothing."})),r(o,"optionalToStringComment",()=>d({de:"Gibt eine nichtleere String-Darstellung des Optional-Objekts zurück, passend zum Debuggen.",en:"Returns a non-empty string representation of this Optional suitable for debugging."})),r(o,"RunnableInterfaceComment",()=>d({de:"Das Runnable-Interface wird von Klassen implementiert, die eine Methode run() besitzen, die in einem neuen Thread ausgeführt werden soll.",en:"The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run."})),r(o,"runnableRunComment",()=>d({de:"WEnn ein Objekt, das das Interface Runnable implementiert, benutzt wird, um einen Thread zu erstellen, bewirkt das Starten des Threads die Ausführung der run()-Methode in diesem Thread.",en:"When an object implementing interface Runnable is used to create a thread, starting the thread causes the object's run method to be called in that separately executing thread."})),r(o,"semaphoreClassComment",()=>d({de:"Ein zählender Semaphor",en:"A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acquire() blocks if necessary until a permit is available, and then takes it. Each release() adds a permit, potentially releasing a blocking acquirer. "})),r(o,"semaphoreConstructorComment",()=>d({de:"Erstellt einen Semaphor mit der angegebenen Zahl von Permits.",en:"Creates a Semaphore with the given number of permits."})),r(o,"semaphoreAvailablePermitsComment",()=>d({de:"Gibt die Anzahl an Permits zurück, die in diesem Semaphor aktuell vorhanden ist.",en:"Returns the current number of permits available in this semaphore."})),r(o,"semaphoreAcquireComment",()=>d({de:"Beschafft ein Permit. Falls keines vorhanden sind wird der Thread blockiert. Der Thread bleibt blockiert bis wieder ein Permit vorhanden ist oder der Thread unterbrochen (interrupted) wird.",en:"Acquires a permit from this semaphore, blocking until one is available, or the thread is interrupted."})),r(o,"semaphoreReleaseComment",()=>d({de:"Gibt ein Permit frei und führt es dem Semaphor wieder zu.",en:"Releases a permit, returning it to the semaphore."})),r(o,"threadClassComment",()=>d({de:"Ein Thread ist ein 'Ausführungsstrang' in einem Programm. Die Online IDE ermöglicht die gleichzeitige Ausführung mehrerer Threads.",en:"A thread is a thread of execution in a program. The Online IDE allows an application to have multiple threads of execution running concurrently."})),r(o,"threadConstructorComment",()=>d({de:"Erstellt ein neues Thread-Objekt, startet den Thread aber noch nicht.",en:"Creates a new Thread object."})),r(o,"threadConstructorRunnableComment",()=>d({de:"Erstellt ein neues Thread-Objekt. Wird der Thread gestartet, so wird die run()-Methode des übergebenen Runnable-Objekts ausgeführt.",en:"Creates a new Thread object. When starting this thread method run() of given Runnable-object ist called concurrently to the existing threads."})),r(o,"threadGetStateComment",()=>d({de:"Gibt den state des threads zurück.",en:"Returns the state of this thread."})),r(o,"threadRunComment",()=>d({de:"Führt die run()-Methode des bei diesem Thread gespeicherten Runnable-Objekts im AKTUELLEN thread aus. Die Wirkung ist dieselbe, als würde man die run()-Methode des Runnable-Objekts einfach aufrufen.",en:"Calls run()-Method of this thread's Runnable object in CURRENT thread."})),r(o,"threadStartComment",()=>d({de:"Führt die run()-Methode des bei diesem Thread gespeicherten Runnable-Objekts nebenläufig (parallel) zum aktuellen Thread aus.",en:"Runs the run()-Method of this thread's runnable object CONCURRENTLY to the current thread."})),r(o,"threadJoinComment",()=>d({de:"Wartet bis der Thread beendet (terminated) ist.",en:"Waits for this thread to die (state: terminated)."})),r(o,"threadJoinComment2",()=>d({de:"Wartet bis der Thread beendet (terminated) ist, längstens aber die übergebene Zahl an Millisekunden.",en:"Waits for this thread to die (state: terminated), at most given milliseconds."})),r(o,"threadGetNameComment",()=>d({de:"Gibt den Namen des Threads zurück.",en:"Returns the name of this thread."})),r(o,"threadSetNameComment",()=>d({de:"Ändert den Namen dieses Threads.",en:"Sets the name of this thread."})),r(o,"threadSetSpeedComment",()=>d({de:"Setzt die gewünschte Ausführungsgeschwindigkeit des Threads in Schritten/Sekunde. Werte <= 0 bewirken die Ausführung mit maximaler Geschwindigkeit.",en:"Sets speed of thread in steps/second. Values <= 0 mean 'maximum speed'."})),r(o,"threadSleepComment",()=>d({de:"Bewirkt, dass der gerade ausgeführte Thread für die angegebene Zeit (in Millisekunden) pausiert (schläft). Die genaue Länge des 'Schlafes' hängt von der Genauigkeit des Laufzeitsystems und vom Scheduler ab.",en:"Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers."})),r(o,"threadCurrentThreadComment",()=>d({de:"Gibt das Thread-Objekt für den gerade ausgeführten Thread zurück.",en:"Returns the Thread object for the current thread."})),r(o,"millisecondsNotPositiveError",()=>d({de:"Die angegebene Zeit in Millisekunden muss größer als 0 sein.",en:"Given time in milliseconds has to be positive."})),r(o,"PAppletClassComment",()=>d({de:"Wenn Du Deine Klasse von PApplet ableitest (class Test extends PApplet{...}), kannst Du auf diese Weise ein Processing-Applet erstellen (siehe https://processing.org), indem Du ihre Methoden draw(), mousePressed(), usw. überschreibst und mit Inhalt füllst. Du startest das Applet, indem Du ein Objekt Deiner Klasse instanzierst und davon die main-Methode aufrufst: new Test().main();",en:"You can create a processing-Applet by extending class PApplet (class Test extends PApplet{...}), see https://processing.org. Overwrite it's methods draw(), mousePressed(), ... to get graphic output and interaction."})),r(o,"PAppletConstructorComment",()=>d({de:"Legt eine neues Processing-Applet an.",en:"Creates a new processing Applet."})),r(o,"PAppletLoopComment",()=>d({de:"Startet nach noLoop() die Renderer-Loop wieder neu, so dass draw() wieder periodisch aufgerufen wird.",en:""})),r(o,"PAppletNoLoopComment",()=>d({de:"Stoppt die Render-Loop, so dass draw() nicht mehr aufgerufen wird. Kann mit loop() wieder gestartet werden.",en:""})),r(o,"PAppletSizeComment",()=>d({de:"Definiert die Abmessungen des Processing-Ausgabebereichs in Pixeln.",en:""})),r(o,"PAppletCreateCanvasComment",()=>d({de:"Definiert die Abmessungen des Processing-Ausgabebereichs in Pixeln.",en:""})),r(o,"PAppletSetupComment",()=>d({de:"Diese Methode wird nach Aufruf von main() genau ein Mal aufgerufen.",en:"This method is called once after main() had been called."})),r(o,"PAppletSettingsComment",()=>d({de:"Diese Methode wird nach Aufruf von main() genau ein Mal aufgerufen.",en:"This method is called once after main() had been called."})),r(o,"PAppletPreloadComment",()=>d({de:"Diese Methode wird nach Aufruf von main() genau ein Mal aufgerufen.",en:"This method is called once after main() had been called."})),r(o,"PAppletDrawComment",()=>d({de:"Diese Methode wird 60-mal pro Sekunde aufgerufen. Ihr Zweck ist es, die Grafikausgabe zu zeichnen.",en:"This method is called 60 times per second. It's purpose is to draw."})),r(o,"PAppletMousePressedComment",()=>d({de:"Die mousePressed-Methode wird immer dann aufgerufen, wenn gerade eine Maustaste heruntergedrückt wurde. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die gerade heruntergedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseReleasedComment",()=>d({de:"Die mouseReleased-Methode wird immer dann aufgerufen, wenn gerade eine Maustaste losgelassen wurde. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die gerade heruntergedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseClickedComment",()=>d({de:"Die mouseClicked-Methode wird immer dann aufgerufen, wenn gerade eine Maustaste auf dem Zeichenbereich gedrückt und anschließend losgelassen wurde. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die gerade heruntergedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseDraggedComment",()=>d({de:"Die mouseDragged-Methode wird immer dann aufgerufen, wenn eine Maustaste gerade heruntergedrückt ist und die Position des Mauszeigers sich verändert hat. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die zuletzt gedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseMovedComment",()=>d({de:"Die mouseMoved-Methode wird immer dann aufgerufen, wenn die Position des Mauszeigers sich verändert hat. Die aktuellen Koordinaten des Mauszeigers liegen in den Attributen mouseX und mouseY vor, die zuletzt gedrückte Maustaste kann dem Attribut mouseButton entnommen werden.",en:""})),r(o,"PAppletMouseEnteredComment",()=>d({de:"Die mouseEntered-Methode wird immer dann aufgerufen, wenn der Mauszeiger von außen neu in den Zeichenbereich hineinfährt.",en:""})),r(o,"PAppletMouseExitedComment",()=>d({de:"Die mouseExited-Methode wird immer dann aufgerufen, wenn der Mauszeiger den Zeichenbereich gerade verlassen hat.",en:""})),r(o,"PAppletKeyPressedComment",()=>d({de:"Die keyPressed-Methode wird immer dann aufgerufen, wenn eine Taste gerade heruntergedrückt wurde. Informationen zur Taste können den Attributen key (String) und keyCode (int) entnommen werden.",en:""})),r(o,"PAppletKeyReleasedComment",()=>d({de:"Die keyReleased-Methode wird immer dann aufgerufen, wenn eine Taste gerade losgelassen wurde. Informationen zur Taste können den Attributen key (String) und keyCode (int) entnommen werden.",en:""})),r(o,"PAppletMainComment",()=>d({de:"Rufen Sie die Methode main() auf, um das Processing-Applet zu starten.",en:"Call method main() to start this processing Applet."})),r(o,"PAppletMouseXComment",()=>d({de:"aktuelle x-Koordinate des Mauszeigers",en:"current x-coordinate of mouse pointer"})),r(o,"PAppletMouseYComment",()=>d({de:"aktuelle y-Koordinate des Mauszeigers",en:"current y-coordinate of mouse pointer"})),r(o,"PAppletPMouseXComment",()=>d({de:"x-Koordinate des Mauszeigers im vorherigen Frame",en:"x-coordinate of mouse pointer in previous frame"})),r(o,"PAppletPMouseYComment",()=>d({de:"y-Koordinate des Mauszeigers im vorherigen Frame",en:"y-coordinate of mouse pointer in previous frame"})),r(o,"PAppletLEFTComment",()=>d({de:"links",en:"left"})),r(o,"PAppletCENTERComment",()=>d({de:"Mitte",en:"center"})),r(o,"PAppletRIGHTComment",()=>d({de:"rechts",en:"right"})),r(o,"PAppletTOPComment",()=>d({de:"obenbündig",en:"top"})),r(o,"PAppletBASELINEComment",()=>d({de:"bündig auf der Grundlinie",en:"baseline"})),r(o,"PAppletBOTTOMComment",()=>d({de:"untenbündig",en:"bottom"})),r(o,"PAppletWidthComment",()=>d({de:"Breite des Zeichenbereichs",en:"width of canvas"})),r(o,"PAppletHeightComment",()=>d({de:"Höhe des Zeichenbereichs",en:"height of canvas"})),r(o,"PAppletKeyCodeComment",()=>d({de:"Zahlencode der zuletzt gedrückten Taste",en:"keycode of previously pressed key"})),r(o,"PAppletMouseButtonComment",()=>d({de:"Zuletzt gedrückte Maustaste, kann die Werte LEFT, RIGHT und CENTER annehmen.",en:"Previously pressed mouse button. Possible values are LEFT, RIGHT or CENTER."})),r(o,"PAppletCORNERComment",()=>d({de:"Modus zum Zeichnen von Rechtecken.",en:"Mode to draw rectangles."})),r(o,"PAppletCORNERSComment",()=>d({de:"Modus zum Zeichnen von Rechtecken.",en:"Mode to draw rectangles."})),r(o,"PAppletRADIUSComment",()=>d({de:"Modus zum Zeichnen von Rechtecken.",en:"Mode to draw rectangles."})),r(o,"PAppletPOINTSComment",()=>d({de:"zeichne nachfolgend Einzelpunkte",en:"draw points only"})),r(o,"PAppletLINESComment",()=>d({de:"zeichne nachfolgend einzelne Linien",en:"draw lines subsequently"})),r(o,"PAppletTRIANGLESComment",()=>d({de:"zeichne nachfolgend einzelne Dreiecke",en:"draw triangles subsequently"})),r(o,"PAppletTRIANGLE_STRIPComment",()=>d({de:"zeichne nachfolgend einen Triangle-Strip",en:"draw triangle-strip subsequently"})),r(o,"PAppletTRIANGLE_FANComment",()=>d({de:"zeichne nachfolgend einen Triangle-Fan",en:"draw triangle-fan subsequently"})),r(o,"PAppletQUADSComment",()=>d({de:"zeichne nachfolgend Vierecke",en:"draw quads subsequently"})),r(o,"PAppletQUAD_STRIPComment",()=>d({de:"zeichne nachfolgend einen Quad-Strip",en:"draw quad-strip subsequently"})),r(o,"PAppletTESSComment",()=>d({de:"zeichne nachfolgend ein TESS - geht nur bei createCanvas(width, height, WEBGL)",en:"draw TESS subsequently - only possible with createCanvas(width, height, WEBGL)"})),r(o,"PAppletCLOSEComment",()=>d({de:"endShape(CLOSE) schließt den Linienzug",en:"endShape(CLOSE) closes line-strip"})),r(o,"PAppletDEGREESComment",()=>d({de:"angleMode(DEGREES) sorgt dafür, dass nachfolgende Winkelangaben in Grad interpretiert werden.",en:"angleMode(DEGREES) makes processing interpret subsequent angle values as degrees"})),r(o,"PAppletRADIANSComment",()=>d({de:"angleMode(RADIANS) sorgt dafür, dass nachfolgende Winkelangaben im Bogenmaß interpretiert werden.",en:"angleMode(RADIANS) makes processing interpret subsequent angle values as radians"})),r(o,"PAppletWEBGLComment",()=>d({de:"WebGL-Renderer zur 3D-Ausgabe",en:"WebGL-Renderer for 3D-output"})),r(o,"PAppletP2DComment",()=>d({de:"Renderer zur zweidimensionalen Ausgabe",en:"Renderer for 2D-Output"})),r(o,"PAppletRGBComment",()=>d({de:"Color-Mode RGB (rot, grün, blau)",en:"color mode RGB (red, green, blue)"})),r(o,"PAppletHSLComment",()=>d({de:"Color-Mode HSL",en:"color mode HSL"})),r(o,"PAppletHSBComment",()=>d({de:"Color-Mode HSB",en:"color mode HSB"})),r(o,"PAppletKeyComment",()=>d({de:"Letzte gedrückte Taste",en:"previously pressed key"})),r(o,"PAppletClear0Comment",()=>d({de:"Löscht die Zeichenfläche.",en:"Clears the pixels on the canvas. clear() makes every pixel 100% transparent."})),r(o,"PAppletBackground1Comment",()=>d({de:"Übermalt die komplette Zeichenfläche mit der übergebenen Farbe.",en:"Sets the color used for the background of the canvas."})),r(o,"PAppletBackground2Comment",()=>d({de:"Übermalt die komplette Zeichenfläche mit der übergebenen Farbe. Übergeben wird eine Zeichenkette der Form 'rgb(0,0,255)' oder 'rgb(0%, 0%, 100%)' oder 'rgba(0, 0, 255, 1)' oder 'rgba(0%, 0%, 100%, 1)' und all diese Kombinationen statt rgb auch mit hsl und hsb.",en:"Sets the color used for the background of the canvas. Write color as 'rgb(0,0,255)' or 'rgb(0%, 0%, 100%)' or 'rgba(0, 0, 255, 1)' or 'rgba(0%, 0%, 100%, 1)' or use hsl or hsb instead of rgb."})),r(o,"PAppletBackground3Comment",()=>d({de:"Übermalt die komplette Zeichenfläche mit der übergebenen Farbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used for the background of the canvas. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletFill1Comment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill1aComment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill2Comment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill3Comment",()=>d({de:"Setzt die Füllfarbe.",en:"Sets the color used to fill shapes."})),r(o,"PAppletFill4Comment",()=>d({de:"Setzt die Füllfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to fill shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletFill5Comment",()=>d({de:"Setzt die Füllfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to fill shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletNoFill0Comment",()=>d({de:"Die nachfolgend gezeichneten Figuren werden nicht gefüllt.",en:"Subsequently drawn shapes will not get filled."})),r(o,"PAppletStroke1Comment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke1aComment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke2Comment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke3Comment",()=>d({de:"Setzt die Linienfarbe.",en:"Sets the color used to draw points, lines, and the outlines of shapes."})),r(o,"PAppletStroke4Comment",()=>d({de:"Setzt die Linienfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to draw points, lines, and the outlines of shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletStroke5Comment",()=>d({de:"Setzt die Linienfarbe. v1, v2 und v3 sind - abhängig vom aktuellen color mode - rot, grün und blauwert oder Farbe, Sättigung und Helligkeit",en:"Sets the color used to draw points, lines, and the outlines of shapes. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletStrokeWeight1Comment",()=>d({de:"Setzt die Linienbreite.",en:"Sets the width of the stroke used for points, lines, and the outlines of shapes."})),r(o,"PAppletNoStroke0Comment",()=>d({de:"Die nachfolgend gezeichneten Figuren werden ohne Rand gezeichnet.",en:""})),r(o,"PAppletColor1Comment",()=>d({de:"Gibt den Grauton als String-kodierte Farbe zurück.",en:"Disables drawing points, lines, and the outlines of shapes."})),r(o,"PAppletColor2Comment",()=>d({de:"Gibt die Farbe zurück. Übergeben kann eine Zeichenkette der Form 'rgb(0,0,255)' oder 'rgb(0%, 0%, 100%)' oder 'rgba(0, 0, 255, 1)' oder 'rgba(0%, 0%, 100%, 1)' und all diese Kombinationen statt rgb auch mit hsl und hsb.",en:"Converts string like 'rgb(0,0,255)' or 'rgb(0%, 0%, 100%)' or 'rgba(0, 0, 255, 1)' or 'rgba(0%, 0%, 100%, 1)' to a color."})),r(o,"PAppletColor3Comment",()=>d({de:"Gibt den Grauton als String-kodierte Farbe zurück.",en:"Returns gray value of given color"})),r(o,"PAppletColor4Comment",()=>d({de:"Gibt die aus v1, v2, v3 gebildete Farbe String-kodiert zurück.",en:"Returns color given by v1, v2 and v3. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletColor5Comment",()=>d({de:"Gibt die aus v1, v2, v3 und alpha gebildete Farbe String-kodiert zurück.",en:"Returns color given by v1, v2 and v3. v1, v2 and v3 are red, green and blue or - dependent on current color mode - color, saturation and luminescence."})),r(o,"PAppletLerpColor3Comment",()=>d({de:"Gibt eine Zwischenfarbe zwischen colorA und colorB zurück. t == 0 bedeutet: colorA, t == 1 bedeutet: colorB, t == 0.5 bedeutet: genau zwischen beiden, usw.",en:"Blends two colors to find a third color between them. The amt parameter specifies the amount to interpolate between the two values. 0 is equal to the first color, 0.1 is very near the first color, 0.5 is halfway between the two colors, and so on."})),r(o,"PAppletColorMode1Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletColorMode2Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB für Mode. Max ist der Maximalwert jeder Farbkomponente.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletColorMode4Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB für Mode. Max ist der Maximalwert jeder Farbkomponente.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletColorMode5Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von color(...) interpretiert werden. Möglich sind die Werte RGB, HSL und HSB für Mode. Max ist der Maximalwert jeder Farbkomponente.",en:`Changes the way color values are interpreted. By default, the Number parameters for fill(), stroke(), background(), and color() are defined by values between 0 and 255 using the RGB color model. This is equivalent to calling colorMode(RGB, 255). Pure red is color(255, 0, 0) in this model. Calling colorMode(RGB, 100) sets colors to use RGB color values between 0 and 100. Pure red is color(100, 0, 0) in this model. Calling colorMode(HSB) or colorMode(HSL) changes to HSB or HSL system instead of RGB. Pure red is color(0, 100, 100) in HSB and color(0, 100, 50) in HSL.`})),r(o,"PAppletRectMode1Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von rect(...) interpretiert werden. Möglich sind die Werte CORNER, CORNERS, RADIUS und CENTER.",en:`Changes where rectangles and squares are drawn. By default, the first two parameters of rect() and square(), are the x- and y-coordinates of the shape's upper left corner. The next parameters set the shape's width and height. This is the same as calling rectMode(CORNER). rectMode(CORNERS) also uses the first two parameters as the location of one of the corners. The next parameters are the location of the opposite corner. This mode only works for rect(). rectMode(CENTER) uses the first two parameters as the x- and y-coordinates of the shape's center. The next parameters are its width and height. rectMode(RADIUS) also uses the first two parameters as the x- and y-coordinates of the shape's center. The next parameters are half of the shape's width and height.`})),r(o,"PAppletRect1Comment",()=>d({de:"Zeichnet ein Rechteck. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks.",en:"Draws a rectangle."})),r(o,"PAppletRect1aComment",()=>d({de:"Zeichnet ein Rechteck mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks.",en:"Draws a rectangle with rounded edges."})),r(o,"PAppletRect1bComment",()=>d({de:"Zeichnet ein Rechteck mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks.",en:"Draws a rectangle with rounded edges."})),r(o,"PAppletSquare1Comment",()=>d({de:"Zeichnet ein Quadrat. (left, top) ist die linke obere Ecke, width Seitenlänge des Quadrats.",en:"Draws a square."})),r(o,"PAppletSquare1aComment",()=>d({de:"Zeichnet ein Quadrat mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width Seitenlänge des Quadrats. Radius ist der Eckenradius.",en:"Draws a sqare with rounded eges."})),r(o,"PAppletSquare1bComment",()=>d({de:"Zeichnet ein Quadrat mit abgerundeten Ecken. (left, top) ist die linke obere Ecke, width Seitenlänge des Quadrats. Radius ist der Eckenradius.",en:"Draws a sqare with rounded eges."})),r(o,"PAppletRect1cComment",()=>d({de:"Zeichnet ein Rechteck. (left, top) ist die linke obere Ecke, width die Breite und height die Höhe des Rechtecks. Radius ist der Eckenradius",en:"Draws a rectangle with rounded edges."})),r(o,"PAppletEllipse1Comment",()=>d({de:"Zeichnet eine Ellipse. (left, top) ist die linke obere Ecke der Boundingbox der Ellipse, width ihre Breite und height ihre Höhe. Das lässt sich aber mit ellipseMode(...) ändern!",en:"Draws an ellipse."})),r(o,"PAppletCircle1Comment",()=>d({de:"Zeichnet einen Kreis. (x, y) ist der Mittelpunkt des Kreises, extent der doppelte Radius.",en:"Draws a circle with center at (x, y). Extent is it's double radius."})),r(o,"PAppletEllipseMode1Comment",()=>d({de:"Setzt den Modus, in dem nachfolgende Aufrufe von ellipse(...) interpretiert werden. Möglich sind die Werte CORNER, CORNERS, RADIUS und CENTER.",en:""})),r(o,"PAppletLine1Comment",()=>d({de:"Zeichnet eine Strecke von (x1, y1) nach (x2, y2).",en:""})),r(o,"PAppletLine1aComment",()=>d({de:"Zeichnet eine Strecke von (x1, y1, z1) nach (x2, y2, z2).",en:""})),r(o,"PAppletTriangle1Comment",()=>d({de:"Zeichnet eine Dreieck mit den Eckpunkten (x1, y1), (x2, y2) und (x3, y3).",en:""})),r(o,"PAppletQuad1Comment",()=>d({de:"Zeichnet eine Viereck mit den Eckpunkten (x1, y1), (x2, y2), (x3, y3) und (x4, y4).",en:""})),r(o,"PAppletBezier1Comment",()=>d({de:"Zeichnet eine kubische Bezierkurve mit den Ankerpunkten (x1, y1), (x4, y4) und den Kontrollpunkten (x2, y2), (x3, y3).",en:""})),r(o,"PAppletCurve1Comment",()=>d({de:"Zeichnet eine Catmull-Rom-Kurve vom Punkt (x2, y2) nach (x3, y3) so, als würde sie von (x1, x2) kommen und es am Ende zu (x4, y4) weitergehen.",en:""})),r(o,"PAppletCurvePoint1Comment",()=>d({de:"Will man die Zwischenpunkte einer Curve erhalten (Beginn b, Ende c, als würde sie von a kommen und nach d gehen), so verwendet man sowohl für die x- als auch für die y-Koordinate diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletCurveTangent1Comment",()=>d({de:"Will man die Zwischentangenten einer Curve erhalten (Beginn b, Ende c, als würde sie von a kommen und nach d gehen), so verwendet man sowohl für die x- als auch für die y-Koordinate diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletBezierPoint1Comment",()=>d({de:"Will man die Zwischenpunkte einer Bezierkurve erhalten (Ankerkoordinaten x1, x4 und Stützkoordinaten x2, x3), so nutzt man - einzeln sowohl für die x- also auch für die y-Koordinate - diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletBezierTangent1Comment",()=>d({de:"Will man die Zwischentangenten einer Bezierkurve erhalten (Ankerkoordinaten x1, x4 und Stützkoordinaten x2, x3), so nutzt man - einzeln sowohl für die x- also auch für die y-Koordinate - diese Funktion. t gibt an, welchen Punkt der Kurve man haben möchte. t hat Werte zwischen 0 (Startpunkt) und 1 (Endpunkt).",en:""})),r(o,"PAppletBeginShape0Comment",()=>d({de:"Beginnt mit dem Zeichnen eines Polygons. Die einzelnen Punkte werden mit der Methode vertex(x, y) gesetzt.",en:""})),r(o,"PAppletEndShape0Comment",()=>d({de:"Endet das Zeichnen eines Polygons.",en:""})),r(o,"PAppletBeginShape1Comment",()=>d({de:"Beginnt mit dem Zeichnen eines Polygons. Die einzelnen Punkte werden mit der Methode vertex(x, y) gesetzt. Mögliche Werte für kind sind: POINTS, LINES, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN, QUADS, QUAD_STRIP",en:""})),r(o,"PAppletEndShape1Comment",()=>d({de:"endShape(CLOSE) schließt den Linienzug.",en:""})),r(o,"PAppletVertex1Comment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt.",en:""})),r(o,"PAppletPoint1Comment",()=>d({de:"Zeichnet einen Punkt.",en:""})),r(o,"PAppletSet3Comment",()=>d({de:"Setzt die Farbe des Pixels bei (x, y).",en:""})),r(o,"PAppletVertex1aComment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt.",en:""})),r(o,"PAppletPoint1aComment",()=>d({de:"Zeichnet einen Punkt.",en:""})),r(o,"PAppletCurveVertex1Comment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt. Processing zeichnet damit eine Kurve nach dem Catmull-Rom-Algorithmus.",en:""})),r(o,"PAppletCurvevertex1Comment",()=>d({de:"Setzt zwischen beginShape() und endShape() einen Punkt. Processing zeichnet damit eine Kurve nach dem Catmull-Rom-Algorithmus.",en:""})),r(o,"PAppletBox1Comment",()=>d({de:"Zeichnet einen 3D-Würfel mit der Seitenlänge size.",en:""})),r(o,"PAppletBox1aComment",()=>d({de:"Zeichnet einen 3D-Würfel mit den angegebenen Seitenlängen.",en:""})),r(o,"PAppletResetMatrix0Comment",()=>d({de:"Setzt alle erfolgten Transformationen zurück.",en:""})),r(o,"PAppletPush0Comment",()=>d({de:"Sichert den aktuellen Zeichenzustand, d.h. die Farben und Transformationen, auf einen Stack.",en:""})),r(o,"PAppletPop0Comment",()=>d({de:"Holt den obersten Zeichenzustand, d.h. die Farben und Transformationen, vom Stack.",en:""})),r(o,"PAppletScale1Comment",()=>d({de:"Streckt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletScale1aComment",()=>d({de:"Streckt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletScale1bComment",()=>d({de:"Streckt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletTranslate1Comment",()=>d({de:"Verschiebt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletTranslate1aComment",()=>d({de:"Verschiebt die nachfolgend gezeichneten Figuren.",en:""})),r(o,"PAppletRotate1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletRotateX1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren um die X-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletRotateY1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren um die Y-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletShearX1Comment",()=>d({de:"Schert die nachfolgend gezeichneten Figuren in Richtung derX-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletShearY1Comment",()=>d({de:"Schert die nachfolgend gezeichneten Figuren in Richtung der Y-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletRotateZ1Comment",()=>d({de:"Rotiert die nachfolgend gezeichneten Figuren um die Z-Achse. Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie angle interpretiert wird. Default ist RADIANS.",en:""})),r(o,"PAppletAngleMode1Comment",()=>d({de:"Mit angleMode(RADIANS) bzw. angleMode(DEGREES) kann beeinflusst werden, wie winkel bei Rotationen interpretiert werden. Default ist RADIANS.",en:""})),r(o,"PAppletTextSize1Comment",()=>d({de:"Setzt die Schriftgröße in Pixel.",en:""})),r(o,"PAppletTextAlign1Comment",()=>d({de:"Setzt die Ausrichtung des nächsten ausgegebenen Textes in x-Richtung. Mögliche Werte sind CENTER, LEFT, RIGHT",en:""})),r(o,"PAppletTextAlign1aComment",()=>d({de:"Setzt die Ausrichtung des nächsten ausgegebenen Textes. Mögliche Werte für alignX sind CENTER, LEFT, RIGHT, mögliche Werte für alignY sind TOP, CENTER, BASELINE, BOTTOM",en:""})),r(o,"PAppletText3Comment",()=>d({de:"Gibt Text aus.",en:""})),r(o,"PAppletText5Comment",()=>d({de:"Gibt Text aus. x2 und y2 sind die Breite und Höhe des Textausgabebereichs. Hat der Text horizontal nicht Platz, so wird er entsprechend umgebrochen.",en:""})),r(o,"PAppletRandom1Comment",()=>d({de:"Gibt eine Zufallszahl zwischen low und high zurück.",en:""})),r(o,"PAppletRandom1aComment",()=>d({de:"Gibt eine Zufallszahl zwischen 0 und high zurück.",en:""})),r(o,"PAppletSqrt1Comment",()=>d({de:"Gibt die Quadratwurzel von n zurück.",en:""})),r(o,"PAppletPow1Comment",()=>d({de:'Gibt die den Wert der Potenz ("basis hoch exponent") zurück.',en:""})),r(o,"PAppletMax1Comment",()=>d({de:"Gibt den größeren der beiden Werte zurück.",en:""})),r(o,"PAppletMin1Comment",()=>d({de:"Gibt den kleineren der beiden Werte zurück.",en:""})),r(o,"PAppletAbs1Comment",()=>d({de:"Gibt den Betrag des Wertes zurück.",en:""})),r(o,"PAppletSin1Comment",()=>d({de:"Gibt den Sinus des Wertes zurück.",en:""})),r(o,"PAppletCos1Comment",()=>d({de:"Gibt den Cosinus des Wertes zurück.",en:""})),r(o,"PAppletTan1Comment",()=>d({de:"Gibt den Tangens des Wertes zurück.",en:""})),r(o,"PAppletAsin1Comment",()=>d({de:"Gibt den Arcussinus des Wertes zurück.",en:""})),r(o,"PAppletAcos1Comment",()=>d({de:"Gibt den Arcussosinus des Wertes zurück.",en:""})),r(o,"PAppletRadians1Comment",()=>d({de:"Wandelt einen Winkel vom Gradmaß ins Bogenmaß um.",en:""})),r(o,"PAppletDegrees1Comment",()=>d({de:"Wandelt einen Winkel vom Bogenmaß ins Gradmaß um.",en:""})),r(o,"PAppletAtan1Comment",()=>d({de:"Gibt den Arcussangens des Wertes zurück.",en:""})),r(o,"PAppletAtan21Comment",()=>d({de:"Gibt den Arcussangens des Wertes zurück.",en:""})),r(o,"PAppletSqrt1aComment",()=>d({de:"Gibt die Quadratwurzel des Wertes zurück.",en:""})),r(o,"PAppletSq1Comment",()=>d({de:"Gibt das Quadrat des Wertes zurück.",en:""})),r(o,"PAppletAbs1aComment",()=>d({de:"Gibt den Betrag des Wertes zurück.",en:""})),r(o,"PAppletRound1Comment",()=>d({de:"Rundet den Wert auf eine ganze Zahl.",en:""})),r(o,"PAppletCeil1Comment",()=>d({de:"Rundet den Wert auf eine ganze Zahl (Aufrunden!).",en:""})),r(o,"PAppletFloor1Comment",()=>d({de:"Rundet den Wert auf eine ganze Zahl (Abfrunden!).",en:""})),r(o,"PAppletDist1Comment",()=>d({de:"Berechnet den Abstand der Punkte (x1, y1) und (x2, y2).",en:""})),r(o,"PAppletLerp1Comment",()=>d({de:"Berechnet den a + (b - a)*t. Wählt man t zwischen 0 und 1, so kann man damit die Zwischenwerte zwischen a und b errechnen.",en:""})),r(o,"PAppletConstrain1Comment",()=>d({de:"Beschränkt value auf den Bereich [min, max], genauer: Ist value < min, so wird min zurückgegeben. Ist value > max, so wird max zurückgegeben. Ansonsten wird value zurückgegeben.",en:""})),r(o,"PAppletYear0Comment",()=>d({de:"Aktuelle Jahreszahl",en:""})),r(o,"PAppletMonth0Comment",()=>d({de:"Monat: 1 == Januar, 12 == Dezember",en:""})),r(o,"PAppletDay0Comment",()=>d({de:"Tag (innerhalb des Monats) des aktuellen Datums",en:""})),r(o,"PAppletHour0Comment",()=>d({de:"Stundenzahl der aktuellen Uhrzeit",en:""})),r(o,"PAppletMinute0Comment",()=>d({de:"Minutenzahl der aktuellen Uhrzeit",en:""})),r(o,"PAppletSecond0Comment",()=>d({de:"Sekundenzahl der aktuellen Uhrzeit",en:""})),r(o,"PAppletFrameRate1Comment",()=>d({de:"Setzt die Framerate (Anzahl der Aufrufe von draw() pro Sekunde)",en:""})),r(o,"PAppletTextWidth1Comment",()=>d({de:"Gibt die Breite des Texts zurück.",en:""})),r(o,"PAppletTextAscent1Comment",()=>d({de:"Gibt den Ascent Textes zurück ( = Höhe des größten Zeichens über der Grundlinie).",en:""})),r(o,"PAppletTextDescent1Comment",()=>d({de:"Gibt den Descent Textes zurück ( = Tiefe des tiefsten Zeichens unter der Grundlinie).",en:""})),r(o,"PAppletTextLeading1Comment",()=>d({de:"Setzt den Abstand zweier aufeinanderfolgender Textzeilen.",en:""})),r(o,"PAppletCursor1Comment",()=>d({de:'Ändert das Aussehen des Mauscursors. Type ist einer der Werte "arrow", "cross", "text", "move", "hand", "wait", "progress".',en:""})),r(o,"PAppletNoCursor1Comment",()=>d({de:"Hat zur Folge, dass der Mauscursor über dem Zeichenbereich unsichtbar ist.",en:""})),r(o,"PAppletCopy1Comment",()=>d({de:"Kopiert den rechteckigen Bereich mit der linken oberen Ecke (sx, sy) sowie der Breite sw und der Höhe sh in den Bereich mit der linken oberen Ecke (dx, dy), der Breite dw und der Höhe dh.",en:""})),r(o,"PAppletMillis0Comment",()=>d({de:"Gibt die Millisekunden zurück, die vergangen sind, seit setup() aufgerufen wurde.",en:""})),r(o,"PAppletRedraw0Comment",()=>d({de:"Führt draw() genau ein Mal aus. Macht ggf. Sinn, wenn die Render-Loop zuvor mit noLoop() gestoppt wurde.",en:""})),r(o,"JavaKaraWorldClassComment",()=>d({de:"JavaKara-Welt",en:"JavaKara-World"})),r(o,"JavaKaraWorldConstructorComment",()=>d({de:"",en:""})),r(o,"JavaKaraWorldGetSizeXComment",()=>d({de:"Gibt zurück, wie viele Felder breit die Welt ist.",en:"Returns number of tiles in x-direction."})),r(o,"JavaKaraWorldGetSizeYComment",()=>d({de:"Gibt zurück, wie viele Felder hoch die Welt ist.",en:"Returns number of tiles in y-direction."})),r(o,"JavaKaraWorldClearAllComment",()=>d({de:"Löscht alles aus der Welt bis auf Kara.",en:"Removes everything except Kara the beatle."})),r(o,"JavaKaraWorldSetLeafComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) ein Kleeblatt.",en:"Adds or removes a leaf at position (x, y)."})),r(o,"JavaKaraWorldSetTreeComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) einen Baumstumpf.",en:"Adds or removes a tree stump at position (x, y)."})),r(o,"JavaKaraWorldSetMushroomComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) einen Pilz.",en:"Adds or removes a mushroom at position (x, y)."})),r(o,"JavaKaraWorldIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn sich auf dem angegebenen Feld nichts befindet (auch nicht Kara).",en:"Returns true if and only if there's nothing at position (x, y)."})),r(o,"JavaKaraWorldInitComment",()=>d({de:"Baut die Welt mithilfe eines mehrzeiligen Strings. Dabei bedeutet \\n einen Zeilenumbruch, l ein Kleeblatt, t einen Baumstumpf und m einen Pilz.",en:"Creates world based on a multiline string. \\n is a line break, l a leaf, t a tree stump and m a Mushroom."})),r(o,"KaraClassComment",()=>d({de:"JavaKara-Marienkäfer",en:"Kara, the beatle"})),r(o,"KaraConstructorComment",()=>d({de:"Instanziiert ein neues Kara-Objekt.",en:"Creates a new Kara beatle."})),r(o,"KaraGetPositionComment",()=>d({de:"Gibt Karas Position zurück. Dabei ist (0/0) die Position der linken oberen Ecke.",en:"Returns Kara's position. (0/0) is position at top left corner."})),r(o,"KaraMoveComment",()=>d({de:"Bewegt Kara um ein Feld nach vorne.",en:"Moves Kara one tile forward."})),r(o,"KaraGetWorldComment",()=>d({de:"Gibt das JavaKaraWorld-Objekt zurück, in dem sich Kara befindet.",en:"Returns world-object."})),r(o,"KaraGetDirectionComment",()=>d({de:"Gibt die Blickrichtung von Kara zurück: 0 == Norden, 1 == Westen, 2 == Süden, 3 == Osten",en:"Returns direction of beatle Kara. 0 == north, 1 == west, 2 == south, 3 == east."})),r(o,"KaraOnLeafComment",()=>d({de:"Gibt genau dann true zurück, wenn sich Kara auf einem Kleeblatt befindet.",en:"Returns true if and only if Kara is located on a leaf."})),r(o,"KaraTreeFrontComment",()=>d({de:"Gibt genau dann true zurück, wenn sich vor Kara ein Baumstumpf befindet.",en:"Returns true if and only if on the tile IN FRONT OF Kara there is a tree stump."})),r(o,"KaraTreeLeftComment",()=>d({de:"Gibt genau dann true zurück, wenn sich auf dem Feld unmittelbar links von Kara ein Baumstumpf befindet.",en:"Returns true if and only if directly left of Kara there is a tree stump."})),r(o,"KaraTreeRightComment",()=>d({de:"Gibt genau dann true zurück, wenn sich auf dem Feld unmittelbar rechts von Kara ein Baumstumpf befindet.",en:"Returns true if and only if directly right of Kara there is a tree stump."})),r(o,"KaraMushroomFrontComment",()=>d({de:"Gibt genau dann true zurück, wenn sich vor Kara ein Pilz befindet.",en:"Returns true if and only if on the tile IN FRONT OF Kara there is a mushroom."})),r(o,"KaraTurnLeftComment",()=>d({de:"Dreht Kara um 90° nach links (d.h. gegen den Uhrzeigersinn).",en:"Turns Kara 90° leftwards (that is: counterclockwise)."})),r(o,"KaraTurnRightComment",()=>d({de:"Dreht Kara um 90° nach rechts (d.h. im Uhrzeigersinn).",en:"Turns Kara 90° rightwards (that is: clockwise)."})),r(o,"KaraPutLeafComment",()=>d({de:"Legt ein Kleeblatt auf die Position, an der Kara gerade steht.",en:"Deposits a leaf beneath Kara."})),r(o,"KaraRemoveLeafComment",()=>d({de:"Kara nimmt das Kleeblatt, das sich auf seiner aktuellen Position befindet.",en:"Removes a leaf beneath Kara."})),r(o,"HamsterWorldClassComment",()=>d({de:"JavaHamster-Welt"})),r(o,"HamsterWorldConstructorComment",()=>d({de:"Instanziiert eine neue JavaHamster-Welt"})),r(o,"HamsterWorldGetBreiteComment",()=>d({de:"Gibt zurück, wie viele Felder breit die Welt ist.",en:""})),r(o,"HamsterWorldGetHoeheComment",()=>d({de:"Gibt zurück, wie viele Felder hoch die Welt ist.",en:""})),r(o,"HamsterWorldLoescheAllesComment",()=>d({de:"Löscht alles aus der Welt bis auf den Hamster.",en:""})),r(o,"HamsterWorldSetzeMauerComment",()=>d({de:"Setzt oder entfernt an der Position (x, y) eine Mauer.",en:""})),r(o,"HamsterWorldSetzeGetreideComment",()=>d({de:"Setzt an der Position (x, y) die Anzahl der Getreidekörner.",en:""})),r(o,"HamsterWorldInitComment",()=>d({de:"Baut die Welt mithilfe eines mehrzeiligen Strings. Dabei bedeutet \\n einen Zeilenumbruch, m eine Mauer und 1 ... 9, a ... f die entsprechende Anzahl an Getreidekörnern.",en:""})),r(o,"HamsterClassComment",()=>d({de:"JavaHamster-Hamster"})),r(o,"HamsterConstructorComment",()=>d({de:"Instanziiert ein neues Hamster-Objekt",en:""})),r(o,"HamsterVorComment",()=>d({de:"Bewegt den Hamster um ein Feld nach vorne.",en:""})),r(o,"HamsterGetWorldComment",()=>d({de:"Gibt das JavaHamsterWorld-Objekt zurück, in dem sich Hamster befindet.",en:""})),r(o,"HamsterGetBlickrichtungComment",()=>d({de:"Gibt die Blickrichtung von Hamster zurück: 0 == Norden, 1 == Osten, 2 == Süden, 3 == Westen",en:""})),r(o,"HamsterGetReiheComment",()=>d({de:"Gibt die Reihe zurück, in der sich der Hamster gerade befindet. Reihe 0 ist ganz oben.",en:""})),r(o,"HamsterGetSpalteComment",()=>d({de:"Gibt die Spalte zurück, in der sich der Hamster gerade befindet. Reihe 0 ist ganz links.",en:""})),r(o,"HamsterGetKoernerComment",()=>d({de:"Gibt die Anzahl der Körner zurück, die der Hamster gerade im Mund hat.",en:""})),r(o,"HamsterLinksUmComment",()=>d({de:"Dreht Hamster um 90° nach links",en:""})),r(o,"HamsterRechtsUmComment",()=>d({de:"Dreht Hamster um 90° nach rechts",en:""})),r(o,"HamsterGibComment",()=>d({de:"Der Hamster legt ein Korn in der Zelle ab, in der er sich gerade befindet.",en:""})),r(o,"HamsterNimmComment",()=>d({de:"Der Hamster nimmt ein Korn aus der Zelle, in der er sich gerade befindet.",en:""})),r(o,"HamsterVornFreiComment",()=>d({de:"Liefert genau dann true, wenn sich in Blickrichtung vor dem aufgerufenen Hamster keine Mauer befindet (wenn sich der Hamster in Blickrichtung am Rand des Territoriums befindet, wird false geliefert)",en:""})),r(o,"HamsterMaulLeerComment",()=>d({de:"Liefert genau dann true, wenn der Hamster keine Körner im Mund hat.",en:""})),r(o,"HamsterKornDaComment",()=>d({de:"Liefert genau dann true, wenn sich in der Zelle, auf der der Hamster sich befindet, mindestens ein Korn befindet.",en:""})),r(o,"HamsterSchreibComment",()=>d({de:"Gibt den Text auf dem Bildschirm aus.",en:""})),r(o,"PositionClassComment",()=>d({de:"Repräsentiert einen Position auf einem Gitternetz (nur ganzzahlige Koordinaten)",en:"Position inside a grid (only integer coordinates)"})),r(o,"PositionXComment",()=>d({de:"x-Komponente der Position",en:"x-component of Position"})),r(o,"PositionYComment",()=>d({de:"y-Komponente der Position",en:"y-component of Position"})),r(o,"PositionConstructorComment",()=>d({de:"Instanziiert eine neue Position den Komponenten x und y.",en:"Creates a new Position object with components x and y"})),r(o,"BigIntegerClassComment",()=>d({de:"Repräsentiert eine ganze Zahl mit 'beliebig' vielen Stellen.",en:"Integer number with arbitrary number of digits."})),r(o,"BigIntegerConstructorComment",()=>d({de:"Instanziiert ein neues BigInteger-Objekt.",en:"Creates a new BigInteger-object."})),r(o,"BigIntegerAddComment",()=>d({de:"Addiert das übergebene BigInteger-Objekt zum aktuellen BigInteger-Objekt und gibt ein neues BigInteger-Objekt zurück, dessen Wert die errechnete Summe ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Adds given BigInteger-object to this BigInteger-object and returns a NEW BigInteger-object whose value is the sum of the two."})),r(o,"BigIntegerSubtractComment",()=>d({de:"Subtrahiert das übergebene BigInteger-Objekt vom aktuellen BigInteger-Objekt und gibt ein neues BigInteger-Objekt zurück, dessen Wert die errechnete Differenz ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Subtracts given BigInteger-object from this BigInteger-object and returns a NEW BigInteger-object whose value is the difference of the two."})),r(o,"BigIntegerDivideComment",()=>d({de:"Dividiert das BigInteger-Objekt durch das übergebene und gibt ein neues BigInteger-Objekt zurück, dessen Wert der errechnete Quotient ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Divides this BigInteger-object by given one and returns a NEW BigInteger-object whose value is the quotient of the two."})),r(o,"BigIntegerRemainderComment",()=>d({de:"Dividiert das BigInteger-Objekt durch das übergebene und gibt ein neues BigInteger-Objekt zurück, dessen Wert der Rest der Division ist. Die Methode add ändert nicht das aktuelle BigInteger-Objekt!",en:"Divides this BigInteger-object by given one and returns a NEW BigInteger-object whose value is the remainder of this division."})),r(o,"BigIntegerMultiplyComment",()=>d({de:"Multipliziert das aktuelle Objekt mit dem übergebenen BigInteger-Objekt und gibt ein neues BigInteger-Objekt zurück, dessen Wert das Produkt der beiden Zahlen ist. Die Methode multiply ändert nicht das aktuelle BigInteger-Objekt!",en:"Multiplies this BigInteger-object by given one and returns a NEW BigInteger-object whose value is the product of the two."})),r(o,"BigIntegerToStringComment",()=>d({de:"Gibt das BigInteger-Objekt als Zeichenkette (dezimal!) zurück.",en:"Returns this BigInteger-object as string in decimal representation."})),r(o,"BigIntegerIntValueComment",()=>d({de:"Gibt das BigInteger-Objekt mod (2^53) als int-Wert zurück.",en:"Returns this BigInteger-object mod (2^53) as int-value."})),r(o,"ConsoleClassComment",()=>d({de:"Klasse zur Ausgabe von Objekten in der Konsole des Browsers.",en:"Class to Output text in console."})),r(o,"ConsoleLogComment",()=>d({de:"Gibt das in die Konsole des Browsers.",en:"Writes Object to Console."})),r(o,"Vector2ClassComment",()=>d({de:"Ein zweidimensionaler Vektor mit double-Koordinaten.",en:"2-dimensional vector with double-precision."})),r(o,"Vector2ConstructorComment",()=>d({de:"Erstellt einen neuen Vektor mit den Koordinaten (x, y).",en:"Creates a new vector with given coordinates."})),r(o,"Vector2ToStringComment",()=>d({de:"Wandelt den Vektor in einen String der Form (x, y) um.",en:"Transforms vector into String (x, y)."})),r(o,"Vector2FromPolarCoordinatesComment",()=>d({de:"Gibt einen neuen zweidimensionalen Vektor zurück, der mit den Polarkoordinaten (r/alphaDeg) gebildet wird. Datei ist r (Abstand zum Ursprung des Koordinatensystems) und alphaDeg (Winkel zur positiven x-Achse in Grad).",en:"Creates a new Vector2-object from given polar coordinates r, alphaDeg. r is it's length, alphaDeg it's angle towards the positive x-axis."})),r(o,"Vector2GetAngleDegComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse in Grad zurück.",en:"Returns angle towards positive x-axis in degrees."})),r(o,"Vector2GetAngleRadComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse im Bogenmaß (rad) zurück.",en:"Returns angle towards positive x-axis in radians."})),r(o,"Vector2GetLengthComment",()=>d({de:"Gibt die Länge des Vektors zurück.",en:"Returns length of this vector."})),r(o,"Vector2GetUnitVectorComment",()=>d({de:"Gibt einen NEUEN Vektor zurück, der parallel zu diesem ist aber die Länge 1 besitzt.",en:"Returns a NEW Vector parallel to this one but with length 1."})),r(o,"Vector2CloneComment",()=>d({de:"Gibt eine identische Kopie dieses Vektors zurück.",en:"Returns an identical copy of this Vector2 object."})),r(o,"Vector2SetLengthComment",()=>d({de:"Streckt/staucht das Vector2-Objekt auf die angegebene Länge und gibt es zurück (für Method-Chaining!). Das Vector2-Objekt wird dabei verändert!",en:"Scales this Vector2-object to given length and returns it for method chaining."})),r(o,"Vector2ScaledByComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das parallel zu diesem ist aber um den angegebenen Faktor gestreckt ist.",en:"Returns a NEW Vector2-object parallel to this one but with given length."})),r(o,"Vector2ScaleComment",()=>d({de:"Streckt das Vector2-Objekt um den angegebenen Faktor und gibt es zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Scales Vector2-object by given factor and returns it (for method chaining). This method ALTERS this object!"})),r(o,"Vector2RotateComment",()=>d({de:"Rotiert das Vector2-Objekt um den angegebenen Winkel (in Grad) und gibt es zurück (für Method-Chaining!). Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Rotates this Vector2-object by given angle (in degrees) and returns it for method chaining. Positive angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector2RotatedByComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das um den angegebenen Winkel (in Grad) gedreht ist. Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Returns a NEW Vector2-object rotated by given angle (in degrees). Positive angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector2PlusComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das aus Addition der beiden Vektoren entsteht.",en:"Returns a NEW Vector2-object which is the sum of the two vectors."})),r(o,"Vector2MinusComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das aus Subtraktion der beiden Vektoren entsteht.",en:"Returns a NEW Vector2-object which is the difference of the two vectors."})),r(o,"Vector2AddComment",()=>d({de:"Addiert den übergebenen Vektor zu diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Adds given vector to this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector2SubComment",()=>d({de:"Subtrahiert den übergebenen Vektor von diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Subtracts given vector from this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector2NormalizeComment",()=>d({de:"Normalisiert das Vector2-Objekt (d.h. es wird auf die Länge 1 gestreckt) und gibt es zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Normalizes this Vector2-object (that is: scales it to length 1) and returns it for method chaining. This Method ALTERS this object!"})),r(o,"Vector2NormalizedComment",()=>d({de:"Gibt ein NEUES Vector2-Objekt zurück, das parallel zu diesem ist aber die Länge 1 besitzt.",en:"Returns a NEW Vector2-object parallel to this one but with length 1."})),r(o,"Vector2ScalarProductComment",()=>d({de:"Gibt das Skalarprodukt der beiden Vektoren zurück.",en:"Returns scalar product of vectors."})),r(o,"Vector2DistanceComment",()=>d({de:"Berechnet den Abstand der beiden Punkte (x1, y1) und (x2, y2).",en:"Returns distance of given points (x1, y1) and (x2, y2)."})),r(o,"Vector2DistanceToComment",()=>d({de:"Berechnet die Länge der Differenz der beiden Vektoren.",en:"Returns the length of the difference of both vectors."})),r(o,"Vector2XComment",()=>d({de:"X-Komponente des Vektors",en:"x-component"})),r(o,"Vector2YComment",()=>d({de:"Y-Komponente des Vektors",en:"y-component"})),r(o,"Matrix4ClassComment",()=>d({de:"Eine 4x4-Matrix, die insbesondere verwendet werden kann, um eine affine Abbildung im R³ zu beschreiben und räumliche Körper zu transformieren.",en:"Matrix4 represents a 4x4-Matrix. It may be used to describe affine mappings in R³ and to transform bodys in 3d."})),r(o,"Matrix4ConstructorIdentityComment",()=>d({de:"Erstellt eine 4x4-Einheitsmatrix, d.h. eine Matrix mit 1-sen in der Diagonalen und ansonsten 0-en.",en:"Creates a 4x4 identity matrix."})),r(o,"Matrix4ConstructorTupleComment",()=>d({de:"Erstellt eine 4x4-Matrix mit den gegebenen Komponenten (zeilenweise).",en:"Creates a 4x4 matrix with the given arguments in row-major order."})),r(o,"Matrix4ConstructorOtherMatrixComment",()=>d({de:"Erstellt eine Kopie der übergebenen Matrix.",en:"Creates a copy of given Matrix."})),r(o,"Matrix4MakeRotationXComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die X-Achse mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the X axis by angle degrees."})),r(o,"Matrix4MakeRotationYComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die Y-Achse mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the Y axis by angle degrees."})),r(o,"Matrix4MakeRotationZComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die Z-Achse mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the Z axis by angle degrees."})),r(o,"Matrix4MakeRotationAxisComment",()=>d({de:"Ersetzt diese Matrix durch eine, die eine Rotation um die gegebene mit gegebenem Winkel (in Grad) repräsentiert.",en:"Sets this matrix as a rotational transformation around the given axis by angle degrees."})),r(o,"Matrix4MakeScaleComment",()=>d({de:"Ersetzt diese Matrix durch eine, die die Streckung um die gegebenen Faktoren in x-, y- und z-Richtung repräsentiert.",en:"Sets this matrix as scale transform with given factors in x-, y- and z-diretion."})),r(o,"Matrix4MakeTranslationComment",()=>d({de:"Ersetzt diese Matrix durch eine, die die Verschiebung um den gegebenen Vektor repräsentiert.",en:"Sets this matrix as scale transform with given vector."})),r(o,"Matrix4MultiplyScalarComment",()=>d({de:"Multipliziert die Matrix mit dem gegebenen Faktor (Skalarmultiplikation).",en:"Multiplies every component of the matrix by given scalar value."})),r(o,"Matrix4InvertComment",()=>d({de:"Invertiert diese Matrix. Is sie nicht invertierbar, so wird sie auf die Nullmatrix gesetzt.",en:"Inverts this matrix, using the analytic method. You can not invert with a determinant of zero. If you attempt this, the method produces a zero matrix instead."})),r(o,"Matrix4DeterminantComment",()=>d({de:"Berechnet die Determinante dieser Matrix.",en:"Computes and returns the determinant of this matrix."})),r(o,"Matrix4CloneComment",()=>d({de:"Erzeugt eine Kopie dieser Matrix.",en:"Creates a clone of this matrix."})),r(o,"Matrix4CopyFromComment",()=>d({de:"Kopiert die gegebene Matrix in diese hinein.",en:"Copies the elements of matrix m into this matrix."})),r(o,"Matrix4MultiplyComment",()=>d({de:"Multipliziert diese Matrix von rechts mit der gegebene Matrix und schreibt das Ergebnis in diese Matrix.",en:"Post-multiplies this matrix by m."})),r(o,"Matrix4preMultiplyComment",()=>d({de:"Multipliziert diese Matrix von links mit der gegebene Matrix und schreibt das Ergebnis in diese Matrix.",en:"Pre-multiplies this matrix by m."})),r(o,"Vector3ClassComment",()=>d({de:"Ein zweidimensionaler Vektor mit double-Koordinaten.",en:"2-dimensional vector with double-precision."})),r(o,"Vector3ConstructorComment",()=>d({de:"Erstellt einen neuen Vektor mit den Koordinaten (x, y).",en:"Creates a new vector with given coordinates."})),r(o,"Vector3ToStringComment",()=>d({de:"Wandelt den Vektor in einen String der Form (x, y) um.",en:"Transforms vector into String (x, y)."})),r(o,"Vector3FromPolarCoordinatesComment",()=>d({de:"Gibt einen neuen zweidimensionalen Vektor zurück, der mit den Polarkoordinaten (r/alphaDeg) gebildet wird. Datei ist r (Abstand zum Ursprung des Koordinatensystems) und alphaDeg (Winkel zur positiven x-Achse in Grad).",en:"Creates a new Vector3-object from given polar coordinates r, alphaDeg. r is it's length, alphaDeg it's angle towards the positive x-axis."})),r(o,"Vector3GetAngleDegComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse in Grad zurück.",en:"Returns angle towards positive x-axis in degrees."})),r(o,"Vector3GetAngleRadComment",()=>d({de:"Gibt den Winkel zur positiven x-Achse im Bogenmaß (rad) zurück.",en:"Returns angle towards positive x-axis in radians."})),r(o,"Vector3GetLengthComment",()=>d({de:"Gibt die Länge des Vektors zurück.",en:"Returns length of this vector."})),r(o,"Vector3GetUnitVectorComment",()=>d({de:"Gibt einen NEUEN Vektor zurück, der parallel zu diesem ist aber die Länge 1 besitzt.",en:"Returns a NEW Vector parallel to this one but with length 1."})),r(o,"Vector3CloneComment",()=>d({de:"Gibt eine identische Kopie dieses Vector3-Objekts zurück.",en:"Returns an identical copy of this Vector3-object."})),r(o,"Vector3SetLengthComment",()=>d({de:"Streckt/staucht das Vector3-Objekt auf die angegebene Länge und gibt es zurück (für Method-Chaining!). Das Vector3-Objekt wird dabei verändert!",en:"Scales this Vector3-object to given length and returns it for method chaining."})),r(o,"Vector3ScaledByComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das parallel zu diesem ist aber um den angegebenen Faktor gestreckt ist.",en:"Returns a NEW Vector3-object parallel to this one but with given length."})),r(o,"Vector3ScaleComment",()=>d({de:"Streckt das Vector3-Objekt um den angegebenen Faktor und gibt es zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Scales Vector3-object by given factor and returns it (for method chaining). This method ALTERS this object!"})),r(o,"Vector3RotateComment",()=>d({de:"Rotiert das Vector3-Objekt um den angegebenen Winkel (in Grad) und gibt es zurück (für Method-Chaining!). Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Rotates this Vector3-object by given angle (in degrees) and returns it for method chaining. Positive angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector3RotatedByComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das um den angegebenen Winkel (in Grad) gedreht ist. Positive Winkel bedeuten eine Drehung ENTGEGEN dem Uhrzeigersinn.",en:"Returns a NEW Vector3-object rotated by given angle (in degrees). Positive angles lead to COUNTERCLOCKWISE rotation."})),r(o,"Vector3PlusComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das aus Addition der beiden Vektoren entsteht.",en:"Returns a NEW Vector3-object which is the sum of the two vectors."})),r(o,"Vector3MinusComment",()=>d({de:"Gibt ein NEUES Vector3-Objekt zurück, das aus Subtraktion der beiden Vektoren entsteht.",en:"Returns a NEW Vector3-object which is the difference of the two vectors."})),r(o,"Vector3AddComment",()=>d({de:"Addiert den übergebenen Vektor zu diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Adds given vector to this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector3SubComment",()=>d({de:"Subtrahiert den übergebenen Vektor von diesem und gibt diesen zurück (für Method-Chaining!). Diese Methode VERÄNDERT dieses Objekt!",en:"Subtracts given vector from this one and returns this one. This Method ALTERS this object!"})),r(o,"Vector3ScalarProductComment",()=>d({de:"Gibt das Skalarprodukt der beiden Vektoren zurück.",en:"Returns scalar product of vectors."})),r(o,"Vector3DistanceComment",()=>d({de:"Berechnet den Abstand der beiden Punkte (x1, y1) und (x2, y2).",en:"Returns distance of given points (x1, y1) and (x2, y2)."})),r(o,"Vector3DistanceToComment",()=>d({de:"Berechnet die Länge der Differenz der beiden Vektoren.",en:"Returns the length of the difference of both vectors."})),r(o,"Vector3XComment",()=>d({de:"X-Komponente des Vektors",en:"x-component"})),r(o,"Vector3YComment",()=>d({de:"Y-Komponente des Vektors",en:"y-component"})),r(o,"Vector3ApplyMatrix4Comment",()=>d({de:"Multipliziert diesen Vektor (von links) mit der gegebenen Matrix (mit ergänzter 1 in der 4. Dimension) und teilt durch den perspektivischen Faktor.",en:"Multiplies this vector (with an implicit 1 in the 4th dimension) by m, and divides by perspective."})),r(o,"Vector3xyNullPointerComment",t=>d({de:`Der Parameter ${t} darf nicht null sein!`,en:`The parameter ${t} must not be null!`})),r(o,"Line3ClassComment",()=>d({de:"Line3 repräsentiert eine Strecke im 3D-Raum, definiert durch einen Start- und Endpunkt vom Typ Vector3. Es ist ein mathematisches Hilfsmittel für geometrische Berechnungen, Raycasting und Schnittests, und kein direkt renderbares Objekt im Szenengraphen.",en:"Line3 represents an analytical line segment in 3D space, defined by a start and end Vector3. It is a mathematical utility used for geometric calculations, raycasting, and intersection testing, rather than a renderable object in the scene graph."})),r(o,"Line3ConstructorComment",()=>d({de:"Erstellt ein neues Line3-Objekt mit gegebenen Start- und Endpunkten.",en:"Creates a new Line3 object with given start and end points."})),r(o,"Line3GetLengthComment",()=>d({de:"Gibt die Länge der Strecke zurück.",en:"Returns the length of the line."})),r(o,"Line3CloneComment",()=>d({de:"Gibt eine identische Kopie dieses Line3-Objekts zurück.",en:"Returns an identical copy of this Line3 object."})),r(o,"Line3ApplyMatrix4Comment",()=>d({de:" Wendet eine 4x4-Matrix auf diese Linie an.",en:"Applies a 4x4 matrix to this line."})),r(o,"Line3ClosestPointToComment",()=>d({de:"Gibt den Punkt auf der Linie zurück, der dem gegebenen Punkt am nächsten ist. ClampeToLine bestimmt, ob der zurückgegebene Punkt innerhalb der Strecke liegen muss oder ob er auch außerhalb der Endpunkte liegen darf.",en:"Returns the point on the line that is closest to the given point. clampToLine determines whether the returned point must lie within the line segment or if it can also lie outside the endpoints."})),r(o,"Line3DistanceToPointComment",()=>d({de:"Gibt den Abstand des gegebenen Punkts zur Linie zurück. ClampeToLine bestimmt, ob der Abstand zum nächsten Punkt auf der Strecke oder zur unendlich verlängerten Linie berechnet wird.",en:"Returns the distance from the given point to the line. ClampToLine determines whether the distance is calculated to the nearest point on the line segment or to the infinitely extended line."})),r(o,"Line3ToStringComment",()=>d({de:"Gibt eine String-Repräsentation der Linie zurück.",en:"Returns a string representation of the line."})),r(o,"Line3AtComment",()=>d({de:"Gibt den Punkt zurück, der sich bei einem bestimmten Parameter t auf der Linie befindet. t=0 entspricht dem Startpunkt, t=1 dem Endpunkt, und Werte außerhalb des Bereichs [0, 1] liegen entsprechend außerhalb der Strecke.",en:"Returns the point at a given parameter t along the line. t=0 corresponds to the start point, t=1 to the end point, and values outside the range [0, 1] lie accordingly outside the line segment."})),r(o,"Line3StartComment",()=>d({de:"Gibt den Startpunkt der Linie zurück.",en:"Returns the start point of the line."})),r(o,"Line3EndComment",()=>d({de:"Gibt den Endpunkt der Linie zurück.",en:"Returns the end point of the line."})),r(o,"Group3dAddComment",()=>d({de:"Fügt der Gruppe ein 3d-Objekt hinzu.",en:"Adds a 3d-object to this group."})),r(o,"Group3dRemoveComment",()=>d({de:"Entfernt ein 3d-Objekt aus dieser Gruppe.",en:"Removes a 3d-object from this group."})),r(o,"Group3dSizeComment",()=>d({de:"Gibt die Anzahl der 3d-Objekte in dieser Gruppe zurück.",en:"Returns the size of this group."})),r(o,"Group3dGetComment",()=>d({de:"Gibt das Element mit dem gegebenen Index zurück. Das erste Element hat Index 0.",en:"Returns element with given index. First element has index 0."})),r(o,"Group3dClassComment",()=>d({de:"Ein Group3d-Objekt gruppiert mehrere 3d-Objekte zusammen, so dass sie miteinander gedreht verschoben, ... werden können.",en:"A Group of 3d objects."})),r(o,"Comment",()=>d({de:"",en:""})),r(o,"MathToolsClassComment",()=>d({de:"Klasse mit mathematischen Hilfsfunktionen als statische Methoden",en:"Class with mathematical/geometrical tools."})),r(o,"MathToolsIntersectCircleWithPolygonComment",()=>d({de:"Zu einem gegebenen Kreis werden die Punkte berechnet, die auf den Seiten eines gegebenen Polygons liegen.",en:"Intersects given circle with given polygon."})),r(o,"MathToolsIntersectLineSegmentsComment",()=>d({de:"Berechnet den Schnittpunkt der Strecken [p0, p1] und [p2, p3]. Gibt null zurück, wenn sich die Strecken nicht schneiden oder wenn sie parallel sind und teilweise aufeinander liegen.",en:"Calculates intersection of Line segments [p0, p1] and [p2, p3]. Returns null if line segments don't intersect."})),r(o,"MathToolsPolygonContainsPointComment",()=>d({de:"Gibt genau dann true zurück, wenn das Polygon den Punkt enthält.",en:"Returns true if and only if given Polygon contains given point."})),r(o,"MathToolsDistancePointToLineComment",()=>d({de:"Berechnet den Abstand des Punktes P zur Gerade AB.",en:"Calculates distance from point P to line AB."})),r(o,"MathToolsDistancePointToLineSegmentComment",()=>d({de:"Berechnet den Abstand des Punktes P zur Gerade AB.",en:"Calculates distance from point P to line segment [AB]."})),r(o,"SystemClassComment",()=>d({de:"Klasse mit statischen Methoden für Systemfunktionen.",en:"Class with static methods for system function."})),r(o,"SystemExitComment",()=>d({de:"Beendet das Programm und gibt den übergebenen Wert in der Konsole aus.",en:"Exits program and prints given value to console."})),r(o,"SystemCurrentTimeMillisComment",()=>d({de:"Gibt die Anzahl der Millisekunden, die seit dem 01.01.1970 00:00:00 UTC vergangen sind, zurück.",en:"Milliseconds since 1970-01-01 00:00:00 UTC."})),r(o,"SystemNanoTimeComment",()=>d({de:"Gibt die Anzahl an Nanosekunden seit einem nicht näher definierten Startzeitpunkt zurück.",en:"Nanoseconds since arbitrary start timestamp."})),r(o,"SystemOutComment",()=>d({de:"PrintStream-Objekt, mit dem Text ausgegeben werden kann.",en:"PrintStream-object to print text."})),r(o,"PrintStreamClassComment",()=>d({de:"Interne Hilfsklasse, um System.out.println zu ermöglichen. Das Objekt System.out ist von der Klasse PrintStream.",en:"Internal auxiliary class to make System.out.println possible. Object System.out is of class PrintStream."})),r(o,"PrintStreamPrintComment",()=>d({de:"Gibt den Text aus.",en:"Prints Text."})),r(o,"PrintStreamPrintlnComment",()=>d({de:"Gibt den Text aus, gefolgt von einem Zeilenumbruch.",en:"Prints Text followed by a line break."})),r(o,"PrintStreamPrintlnComment2",()=>d({de:"Gibt einen Zeilenumbruch aus.",en:"Prints a line break."})),r(o,"GamepadClassComment",()=>d({de:"Klasse mit statischen Methoden zur Abfrage der Gamepads.",en:"class with static methods to get gamepad state."})),r(o,"GamepadIsButtonDownComment",()=>d({de:"Gibt genau dann true zurück, wenn der Button buttonIndex des Gamepads GamepadIndex gedrückt ist. VORSICHT: Das erste Gamepad hat Index 0.",en:"Returns true if and only if button buttonIndex is pressed on gamepad with index gamepadIndex. BEWARE: First gamepad has index 0."})),r(o,"GamepadIsConnectedComment",()=>d({de:"Gibt true zurück, falls das Gamepad mit dem übergebenen Index angeschlossen ist. VORSICHT: Das erste Gamepad hat Index 0.",en:"Returns true if gamepad with given index is connected. BEWARE: First gamepad has index 0."})),r(o,"GamepadGetAxisValueComment",()=>d({de:"Gibt den Wert des Gamepad-Steuerknüppels mit Index axisIndex zurück.",en:"Returns value of gamepad-stick with given index"})),r(o,"SystemToolsClassComment",()=>d({de:"Klasse mit statischen Methoden für Systemfunktionen, z.B. Löschen der Ausgabe, Registrieren eines Tastaturlisteners usw.",en:"Class with static system Methods, e.g. clear text output, register keyboard listener"})),r(o,"SystemToolsClearScreenComment",()=>d({de:"Löscht den Textausgabe-Bildschirm",en:"Clears text output."})),r(o,"SystemToolsSetSpeedComment",()=>d({de:"Setzt die Ausführungsgeschwindigkeit. Der Parameter speed wir in Steps/Sekunde angegeben. Eine negative Zahl bedeutet: 'maximal'.",en:"Sets speed in which program is executed. Parameter speed is given in steps/second. A negative value for speed means: maximum speed."})),r(o,"SystemToolsGetSpeedComment",()=>d({de:"Gibt die Ausführungsgeschwindigkeit in Steps pro Sekunde zurück.",en:"Returns execution speed in steps/second."})),r(o,"SystemToolsGetNumberOfProcessorCoresComment",()=>d({de:"Gibt die Anzahl der Prozessorkerne des Systems zurück.",en:"Returns the number of logical processors available to run threads on the user's computer."})),r(o,"StartLoggingPrintOutputComment",()=>d({de:"Beginnt damit, ab diesem Zeitpunkt alle print-Ausgaben aufzuzeichnen. Sie können dann mittels SystemTools.getPrintLog() ausgewertet werden."})),r(o,"StopLoggingPrintOutputComment",()=>d({de:"Beendet die Aufzeichnung der print-Ausgaben."})),r(o,"GetPrintLogComment",()=>d({de:"Gibt die aufgezeichneten print-Ausgaben zurück."})),r(o,"SystemToolsSetCallActMethodFrequency",()=>d({de:"Legt fest, wie oft pro Sekunde die Methode act() von Actor-Objekten aufgerufen wird. Der Parameter frequency wird in Aufrufen pro Sekunde angegeben. Die Frequenz ist für alle Actor-Objekte gleich.",en:"Sets how often per second the method act() of Actor-objects is called. Parameter frequency is given in calls/second. Frequency is the same for all Actor-objects."})),r(o,"SystemToolsPauseComment",()=>d({de:"Pausiert das Programm für die angegebene Zeit in ms.",en:"Makes current thread pause execution for given time in ms."})),r(o,"SystemToolsGetStepCountComment",()=>d({de:"Gibt die Anzahl der seit dem Start des Programms ausgeführten Steps (== Programmschritte) zurück.",en:"Gets number of steps since program start."})),r(o,"SystemToolsAddKeyListenerComment",()=>d({de:"Fügt einen KeyListener hinzu, dessen Methode keyTyped immer dann aufgerufen wird, wenn eine Taste gedrückt und anschließend losgelassen wird.",en:"Adds a KeyListener whose method keyTyped is called every time a key was pressed and subsequently released."})),r(o,"SystemToolsPauseTimeLower0",()=>d({de:"Der Parameter milliseconds der Methode SystemTools.pause muss >= 0 sein.",en:"Parameter milliseconds of method SystemTools.pause has to be >= 0."})),r(o,"KeyListenerInterfaceComment",()=>d({de:"Interface mit Methode onKeyTyped. Eine Klasse, die dieses Interface implementiert, kann auf Tastatureingaben reagieren. Ein Objekt dieser Klasse muss zuvor aber mit System.addKeyListener() registriert werden.",en:"Interface with method onKeyTyped. Register a KeyListener with SystemTools.addKeyListener()."})),r(o,"KeyListenerOnKeyTypedComment",()=>d({de:"Wird aufgerufen, nachdem eine Taste gedrückt und wieder losgelassen wurde.",en:"Is called if a key was pressed and then released."})),r(o,"TimerClassComment",()=>d({de:"Timer Klasse zur periodischen Ausführung von Methoden",en:"Class Timer to execute methods periodically"})),r(o,"TimerClassRepeatComment",()=>d({de:"Fügt ein neues Runnable-Objekt hinzu und ruft dessen tick-Methode immer wieder auf.",en:"Adds a new Runnable object and call it's run-method periodically."})),r(o,"TimerClassPauseComment",()=>d({de:"Hält den Timer an. Er kann später mit der Methode restart() wieder gestartet werden.",en:"Pauses timer. Use method restart() to restart it later."})),r(o,"TimerClassRestartComment",()=>d({de:"Startet den Timer erneut, nachdem er mit pause() pausiert wurde.",en:"Restart timer if it had been paused with pause()-method."})),r(o,"TimerClassExecuteLaterComment",()=>d({de:"Führt die übergebene Methode nach dt millisekunden ein Mal aus.",en:"Waits dt milliseconds and then executes given method once."})),r(o,"InputClassComment",()=>d({de:"Klasse mit statischen Methoden zur Eingabe von Text per Tastatur",en:"Class with static Method to retrieve input from keyboard."})),r(o,"InputClassReadCharComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp char",en:"Takes char-input from user."})),r(o,"InputWaitForKeyComment",()=>d({de:"Wartet, bis die Benutzerin/der Benutzer eine der angegebenen Tasten gedrückt hat.",en:"Waits until the user presses one of given keys."})),r(o,"InputWaitForAnyKeyComment",()=>d({de:"Wartet, bis die Benutzerin/der Benutzer eine beliebige Taste gedrückt hat.",en:"Waits until the user presses any key."})),r(o,"InputIsKeyDownComment",()=>d({de:"Gibt genau dann true zurück, wenn die angegebene Taste gerade heruntergedrückt ist. N.B.: Für Sondertasten gibt es die vordefinierten statische Konstanten der Klasse Key, z.B. prüft Input.isKeyDown(Key.ArrowLeft), ob gerade die Pfeil-nach-links-Taste heruntergedrückt ist. ",en:"Returns true if and only if given key is pressed down currently. N.B.: There are predefined static constants in Klass Key for special key, e.g. Input.isKeyDown(Key.ArrowLeft)"})),r(o,"InputClassReadIntComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp int",en:"Takes int-input from user."})),r(o,"InputClassReadDoubleComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp double",en:"Takes double-input from user."})),r(o,"InputClassReadFloatComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp float",en:"Takes float-input from user."})),r(o,"InputClassReadBooleanComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp boolean",en:"Takes boolean-input from user."})),r(o,"InputClassReadStringComment",()=>d({de:"Erwartet vom Benutzer die Eingabe eines Wertes vom Datentyp String",en:"Takes String-input from user."})),r(o,"InputClassBooleanError",()=>d({de:"Erwartet wird true oder false.",en:"true or false expected."})),r(o,"InputClassFloatError",()=>d({de:"Erwartet wird eine Fließkommazahl mit Dezimalpunkt, z.B. 1.2 oder 1.34e-10 oder -3e-10.",en:"Floating point value with decimal point expected, e.g. 1.2 or 1.34e-10 or -3e-10."})),r(o,"InputClassCharError",()=>d({de:"Erwartet wird ein einzelnes Zeichen.",en:"Single character expected."})),r(o,"InputClassIntError",()=>d({de:"Erwartet wird eine ganze Zahl.",en:"Integer value expected."})),r(o,"GUIComponentClassComment",()=>d({de:"Oberklasse für alle GUI-Komponenten",en:"Base class of all GUI components"})),r(o,"GUIComponentOnChangeComment",()=>d({de:"Wird aufgerufen, wenn sich der Wert der GUI-Komponente aufgrund von Benutzeraktionen ändert.",en:"Gets called whenever this GUI-Component changes it's value."})),r(o,"GUIComponentAddChangeListenerComment",()=>d({de:"Fügt einen ChangeListener hinzu, dessen onChange-Methode immer dann aufgerufen wird, wenn sich der Wert der GUI-Komponente aufgrund von Benutzeraktionen ändert.",en:"Adds a ChangeListener whose onChange-method gets called whenever this component's value changes."})),r(o,"GUIComponentGetWidthComment",()=>d({de:"Gibt die Breite des GUI-Objekts zurück.",en:"Returns width of this GUI object."})),r(o,"GUIComponentGetHeightComment",()=>d({de:"Gibt die Höhe des GUI-Objekts zurück.",en:"Returns height of this GUI object."})),r(o,"GuiTextComponentClassComment",()=>d({de:"Abstrakte Oberklasse für alle Gui-Komponenten mit Textanteil",en:"Abstract base class for all GUI components that display text"})),r(o,"GuiTextComponentSetFontsizeComment",()=>d({de:"Setzt die Schriftgröße des Textes (Einheit: Pixel).",en:"Set fontsize in pixels."})),r(o,"GuiTextComponentGetFontsizeComment",()=>d({de:"Gibt die Schriftgröße zurück.",en:"Returns fontsize."})),r(o,"GuiTextComponentSetTextComment",()=>d({de:"Setzt den Text.",en:"Set text of this component."})),r(o,"GuiTextComponentGetTextComment",()=>d({de:"Gibt den Text zurück.",en:"Returns text of this component."})),r(o,"GuiTextComponentSetStyleComment",()=>d({de:"Setzt die Eigenschaften Fettdruck (bold) und Schrägschrift (italic).",en:"Set style of text (bold, italic)."})),r(o,"GuiTextComponentSetTextColor",()=>d({de:"Setzt die Textfarbe. Die Farbe wird als int-Wert gegeben, wobei farbe == 256*256*rot + 256*grün + blau",en:"Set text color. Color is given as int value: color == 256*256*red + 256*green + blue"})),r(o,"ChangeListenerInterfaceComment",()=>d({de:"Listener-Interface für GUI-Klassen (Button, TextField, Checkbox, Radiobutton)",en:"Listener interface for GUI classes (Button, TextField, Checkbox, Radiobutton)"})),r(o,"ChangeListenerOnChangeComment",()=>d({de:"Wird immer dann aufgerufen, wenn sich das GUI-Objekt verändert hat.",en:"Gets called whenever the GUI-object has changed."})),r(o,"ButtonClassComment",()=>d({de:"Button, der innerhalb der Grafikausgabe dargestellt werden kann",en:"Button inside graphics pane"})),r(o,"ButtonConstructorComment",()=>d({de:"Instanziiert ein neues Button-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Button object. (x,y) is it's top left corner, fontsize the height of it's caption in pixels."})),r(o,"ButtonCopyComment",()=>d({de:"Erstellt eine Kopie des Button-Objekts und git sie zurück.",en:"Creates a copy of this button and returns it."})),r(o,"ButtonIsDownComment",()=>d({de:"Gibt genau dann true zurück, wenn der Button gerade heruntergedrückt ist.",en:"Returns true if and only if button currently is pressed down."})),r(o,"CheckBoxClassComment",()=>d({de:"Checkbox, die innerhalb der Grafikausgabe dargestellt werden kann",en:"Checkbox inside graphics pane"})),r(o,"CheckBoxConstructorComment",()=>d({de:"Instanziiert ein neues CheckBox-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new CheckBox object. (x,y) is it's top left corner, fontsize the height of it's caption in pixels."})),r(o,"CheckBoxCopyComment",()=>d({de:"Erstellt eine Kopie der CheckBox.",en:"Creates a copy of this CheckBox."})),r(o,"CheckBoxSetCrossColorComment",()=>d({de:"Setzt die Farbe des Kreuzchens. Die Farbe wird als int-Wert gegeben, wobei farbe == 256*256*rot + 256*grün + blau",en:"Sets color of cross. Color is given as int value: color = 256<*256*red + 256*green + blue."})),r(o,"CheckBoxSetCheckedComment",()=>d({de:"Setzt den Zustand der Checkbox: angekreuzt bzw. nicht angekreuzt",en:"Sets state checked/unchecked of this checkbox."})),r(o,"CheckBoxIsCheckedComment",()=>d({de:"Gibt genau dann true zurück, falls die Checkbox angekreuzt ist.",en:"Returns true if and only if this checkbox is checked."})),r(o,"RadiobuttonClassComment",()=>d({de:"Radiobutton, der innerhalb der Grafikausgabe dargestellt werden kann",en:"Radiobutton inside graphics pane"})),r(o,"RadiobuttonConstructorComment",()=>d({de:"Instanziiert ein neues Radiobutton-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Radiobutton object. (x,y) is it's top left corner, fontsize the height of it's caption in pixels."})),r(o,"RadiobuttonCopyComment",()=>d({de:"Erstellt eine Kopie des Radiobutton.",en:"Creates a copy of this Radiobutton."})),r(o,"RadiobuttonGetIndexComment",()=>d({de:"Gibt den Index des Radiobuttons zurück.",en:"Returns this radiobutton's index."})),r(o,"RadiobuttonGetIndexOfSelectedRadiobuttonComment",()=>d({de:"Sind mehrere Radiobuttons mittels connectTo logisch verbunden, so ist genau einer davon selektiert. Diese Methode gibt den Index dieses selektierten Radiobuttons zurück.",en:"If there are several radiobuttons grouped together via method connectTo then this method returns the selected radiobutton's index."})),r(o,"RadiobuttonGetTextOfSelectedRadiobuttonComment",()=>d({de:"Sind mehrere Radiobuttons mittels connectTo logisch verbunden, so ist genau einer davon selektiert. Diese Methode gibt den Text dieses selektierten Radiobuttons zurück.",en:"If there are several radiobuttons grouped together via method connectTo then this method returns the selected radiobutton's text."})),r(o,"RadiobuttonSetIndexComment",()=>d({de:"Setzt den Index des Radiobuttons.",en:"Set this radiobutton's index."})),r(o,"RadiobuttonSetDotColorComment",()=>d({de:"Setzt die Farbe des Punktes. Die Farbe wird als int-Wert gegeben, wobei farbe == 256*256*rot + 256*grün + blau",en:"Sets dot color of this radiobutton. Color is given as int-value: color = 256*256*red + 256*green + blue"})),r(o,"RadiobuttonConnectToComment",()=>d({de:"Verbindet diesen Radiobutton logisch mit den anderen Radiobuttons. Wird anschließend auf einen davon geklickt, so wird dieser selektiert, die anderen deselektiert.",en:"Connects this radiobutton with given radiobuttons to a radiobutton group. If you click at one of them subsequently then all others get deselected so that only one of them is selected at any given time."})),r(o,"RadiobuttonIsSelectedComment",()=>d({de:"Gibt genau dann true zurück, falls die RadioButton selektiert ist.",en:"Returns true if and only if this radiobutton is selected."})),r(o,"RadiobuttonSelectComment",()=>d({de:"Selektiert diesen Radiobutton und deselektiert alle via connectTo mit ihm verbundenen Radiobuttons.",en:"Selects this Radiobutton and deselects all Radiobuttons in same group as this one."})),r(o,"TextfieldClassComment",()=>d({de:"Textfeld, das innerhalb der Grafikausgabe dargestellt werden kann",en:"Textfield inside graphic panel"})),r(o,"TextfieldConstructorComment",()=>d({de:"Instanziiert ein neues TextField-Objekt. (x, y) sind die Koordinaten der linken oberen Ecke, fontsize die Höhe des Textes in Pixeln.",en:"Creates a new Textfield. (x, y) is it's top left edge, fontsize it's text height in pixels."})),r(o,"TextfieldCopyComment",()=>d({de:"Erzeugt eine Kopie des Textfield-Objekts",en:"Creates a clone of this Textfield object"})),r(o,"TextfieldSetPaddingComment",()=>d({de:"'Setzt den Innenabstand (padding) des Textes zum umgebenden Rechteck.",en:"Sets the padding between text and surrounding rectangle."})),r(o,"TextfieldGetTextComment",()=>d({de:"Gibt den Inhalt des Textfeldes zurück.",en:"Returns content of this Textfield object."})),r(o,"SoundClassComment",()=>d({de:"Klasse mit statischen Methoden und statischen Konstanten zur Ausgabe von Sound",en:"Class with static methods and static constants to play sound."})),r(o,"SoundGetVolumeComment",()=>d({de:"Gibt die aktuelle Mikrofonlautstärke zurück. Beim ersten Aufruf muss der Benutzer dem Browser die Erlaubnis zur Benutzung des Mikrofons geben. Solange dies noch nicht erfolgt ist, gibt die Funktion den Wert -1 zurück.",en:"Returns current microphone level."})),r(o,"SoundPlaySoundComment",()=>d({de:"Spielt einen Sound ab. Die Möglichen Sounds sind als statische Variablen der Klasse Sound hinterlegt. Tippe als Parameter also Sound gefolgt von einem Punkt ein, um eine Auswahl zu sehen!",en:"Plays given sound. Possible sounds are given by static fields of Sound class."})),r(o,"FileNotFoundExceptionComment",t=>d({de:"Konnte die Datei '"+t+"' nicht finden.",en:"File not found: '"+t+"'"})),r(o,"FilesClassComment",()=>d({de:"Klasse mit statischen Methoden zum Lesen/Schreiben von Dateien.",en:"Class with static methods to read/write files."})),r(o,"FilesReadComment",()=>d({de:"Gibt den Inhalt der Workspacedatei zurück.",en:"Returns content of workspace file with given filename."})),r(o,"FilesWriteComment",()=>d({de:"Schreibt den Text in die Workspacedatei.",en:"Erases workspace file and then writes given text into it."})),r(o,"FilesAppendComment",()=>d({de:"Fügt den Text hinten an die Workspacedatei an.",en:"Appends given text to workspace file."})),r(o,"JsonElementClassComment",()=>d({de:"Repräsentiert einen Knoten in einem Json-Objektbaum.",en:"Represents a single node inside a json object tree."})),r(o,"JsonElementGetTypeComment",()=>d({de:'Gibt den Typ des Json-Elements zurück. Mögliche Werte sind "string", "number", "array", "boolean" und "object".',en:'Returns the type of this Json-Element. Possible values are "string", "number", "array", "boolean" and "object".'})),r(o,"JsonElementGetArrayValuesComment",()=>d({de:"Falls das Json-Element ein Array ist, gibt diese Funktion es als Array von Json-Elementen zurück, andernfalls wirft sie eine Exception.",en:"If this Json element is an array, this method returns the corresponding array of json elements, otherwise it throws an Exception."})),r(o,"JsonElementNoArrayException",()=>d({de:"Das Json-Element ist kein Array, daher kann getArrayValues() kein Array zurückgeben.",en:"This json element is no array, therefore getArrayValues() cannot return an array of json elements."})),r(o,"JsonElementNoObjectException",()=>d({de:"Das Json-Element ist kein Objekt, daher kann getAttributeValue() keinen Attributwert zurückgeben.",en:"This json element is no object, therefore getAttributeValue() cannot return an attribute value."})),r(o,"JsonElementGetAttributeValueComment",()=>d({de:"Falls das Json-Element ein Objekt ist, gibt diese Funktion den Wert seines Attributs mit dem übergebenen Bezeichner als JsonElement zurück.",en:"If this json element is an object, this method returns the value of it's field with given identifier."})),r(o,"JsonElementGetAsStringComment",()=>d({de:"Gibt den String-Wert des JSon-Elements zurück.",en:"Returns string-value of this json element."})),r(o,"JsonElementNoStringExceptionComment",()=>d({de:"Das Json-Element ist kein String, daher kann getAsString() keinen Wert zurückgeben.",en:"This json element is no string, therefore method getAsString() cannot return a string value."})),r(o,"JsonElementGetAsIntComment",()=>d({de:"Gibt den int-Wert des JSon-Elements zurück.",en:"Returns int value of this json element."})),r(o,"JsonElementNoIntValueException",()=>d({de:"Das Json-Element ist keine Zahl, daher kann getAsInt() keinen Wert zurückgeben.",en:"This json element is no number, therefore getAsInt() cannot return an int value."})),r(o,"JsonElementToJsonComment",()=>d({de:"Gibt den Wert des Json-Elements als Json-codierten String zurück.",en:"Returns value of this json element as json encoded string."})),r(o,"JsonElementGetAsDoubleComment",()=>d({de:"Gibt den double-Wert des JSon-Elements zurück.",en:"Returns double value of this json element."})),r(o,"JsonElementNoDoubleException",()=>d({de:"Das Json-Element ist keine Zahl, daher kann getAsDouble() keinen Wert zurückgeben.",en:"This json element is no number, therefore method getAsDouble() cannot return a double value."})),r(o,"JsonElementGetAsBooleanComment",()=>d({de:"Gibt den boolean-Wert des JSon-Elements zurück.",en:"Returns boolean value of this json element."})),r(o,"JsonElementNoBooleanException",()=>d({de:"Das Json-Element ist kein boolescher Wert, daher kann getAsBoolean() keinen Wert zurückgeben.",en:"This json element is no boolean value, therefore method getAsBoolean() cannot return a boolean value."})),r(o,"JsonElementGetAttributeIdentifiersComment",()=>d({de:"Falls das Json-Element ein Objekt ist, gibt diese Funktion ein Array mit seinen Attributbezeichnern zurück.",en:"If this json element is an object, this method returns an array with it's field identifiers."})),r(o,"JsonElementGetAttributeIdentifiersException",()=>d({de:"Das Json-Element ist kein Objekt, daher kann diese Methode kein Array von Attributbezeichnern liefern.",en:"This json element is no object, therefore this method cannot return an array with field identifiers."})),r(o,"HttpHeaderComment",()=>d({de:"Ein Http-Header ist ein Schlüssel-Wert-Paar (key-value-pair).",en:"A Http-header is a key-value-pair."})),r(o,"HttpHeaderKeyComment",()=>d({de:"Schlüssel (key) des Http-Headers",en:"key of this header"})),r(o,"HttpHeaderValueComment",()=>d({de:"Wert (value) des Http-Headers",en:"value of this header"})),r(o,"JsonParserClassComment",()=>d({de:"Parst Json-Code und gibt ihn als Objektbaum zurück.",en:"Parses Json-code and builds object tree."})),r(o,"JsonParserParseComment",()=>d({de:"Wandelt einen Json-String in einen Objektbaum um.",en:"Transforms Json-string to object tree."})),r(o,"JsonParserParseException",t=>d({de:"Fehler beim Parsen des Json-Strings: "+t,en:"Error parsing json-string: "+t})),r(o,"HttpRequestClassComment",()=>d({de:"Ein Objekt der Klasse HttpRequest umfasst die URI, den Header und die Daten eines Http-Requests.",en:"An object of class HttpRequest consists of URI, Header and data (body)."})),r(o,"HttpRequestConstructorComment",()=>d({de:"Instanziiert ein neues HttpRequest-Objekt.",en:"Creates a new HttpRequest-object."})),r(o,"HttpRequestUriComment",()=>d({de:"Legt die URI des Requests fest. Gibt ein HttpRequest-Objekt zurück (zum method-chaining).",en:"Sets the URI of this request. Returns a HttpRequest-object for method chaining."})),r(o,"HttpRequestHeaderComment",()=>d({de:"Fügt dem Request einen Header hinzu.",en:"Adds a header to this request."})),r(o,"HttpRequestPOSTComment",()=>d({de:"Setzt die Request-Methode auf POST und fügt dem Request die übergebenen Daten hinzu.",en:"Sets request method to POST and adds given data to this request."})),r(o,"HttpRequestGETComment",()=>d({de:"Setzt die Request-Methode auf GET.",en:"Sets request method to GET."})),r(o,"HttpResponseClassComment",()=>d({de:"Ein Objekt der Klasse HttpResponse umfasst den Statuscode, die Header und den Body (d.h. die Daten) eines http-Response.",en:"An object of class HttpResponse consists of status code, headers and body (that is: data) of an http-response."})),r(o,"HttpResponseUriComment",()=>d({de:"Gibt die URI des Responses zurück.",en:"Returns the URI of this response."})),r(o,"HttpResponseBodyComment",()=>d({de:"Gibt den Body dieses Responses zurück.",en:"Returns the body of this response."})),r(o,"HttpResponseStatusCodeComment",()=>d({de:"Gibt den Statuscode dieses Responses zurück.",en:"Returns the status code of this response."})),r(o,"HttpResponseStatusTextComment",()=>d({de:"Gibt den den http-Status dieses Responses in Textform zurück.",en:"Returns the status of this response as text (string)."})),r(o,"HttpResponseRequestComment",()=>d({de:"Gibt das Request-Objekt zurück, das diesen Response zur Folge hatte.",en:"Returns the request-object which lead to this response."})),r(o,"HttpResponseHeadersComment",()=>d({de:"Gibt die Header dieses Responses zurück.",en:"Returns the headers of this response."})),r(o,"HttpClientComment",()=>d({de:"Ein Objekt der Klasse HttpClient kann Http-Requests senden.",en:"An object of class HttpClient can send HTTP-requests."})),r(o,"HttpClientSendComment",()=>d({de:"Sendet den Request an den Server.",en:"Sends request to server."})),r(o,"HttpClientConstructorComment",()=>d({de:"Instanziiert ein neues HttpClient-Objekt.",en:"Creates a new HttpClient-object."})),r(o,"URLEncoderClassComment",()=>d({de:"Klasse mit einer statischen Methode zum Encodieren von URLs.",en:"Class with static methods to encode URLs"})),r(o,"URLEncoderEncodeComment",()=>d({de:"Encodiert eine URL gemäß RFC3986.",en:"Encodes URL as described in RFC3986."})),r(o,"WebSocketClassComment",()=>d({de:"Ein Objekt der Klasse WebSocket kann Daten über das Internet senden und empfangen. Um die Klasse benutzen zu können, musst Du eine eigene Klasse schreiben, die die Klasse WebSocket erweitert und die Methoden onConnect, onMessage, onOtherClientConnected und onOtherClientDisconnected überschreibt.",en:"An Object of class WebSocket can send/receive data over the internet. To use this class you have to write your own class extending this one. By overwriting methods onConnect, onMessage, onOtherClientConnected and onOtherClientDisconnected you can react to these events."})),r(o,"WebSocketConstructorComment",()=>d({de:"Instanziiert ein neues WebSocket-Objekt.",en:"Creates a new WebSocket object."})),r(o,"WebSocketOpenComment",()=>d({de:"Startet die Verbindung mit dem Server. Den SessionCode kannst Du frei wählen. Mit allen anderen Clients, die eine Verbindung mit demselben SessionCode aufbauen, kannst Du anschließend Daten austauschen. Auch der Nickname ist frei wählbar. Er ist für alle anderen Clients sichtbar.",en:"Starts the connection to the server. You can freely choose the session code. You can then exchange data with all other clients that establish a connection with the same session code. The nickname can also be freely chosen. It is visible to all other clients."})),r(o,"WebSocketSendToAllComment",()=>d({de:"Sendet Daten (message) an alle anderen Clients. Den messageType kannst Du frei wählen. Die empfangenden Clients bekommen ihn zusammen mit den Daten übermittelt. Tipp: Du kannst auch Objekte senden, musst sie dazu aber vorher serialisieren, d.h. mithilfe der Methode toJson in eine Zeichenkette verwandeln.",en:"Sends data (message) to all other clients. You can freely choose the message type. The receiving clients receive it together with the data. Tip: You can also send objects, but you have to serialize them first, i.e. convert them into a string using the toJson method."})),r(o,"WebSocketFindClientsComment",()=>d({de:'Sucht die übergebene Anzahl von "kontaktbereiten" Clients, d.h. solchen Clients, die exakt dieselbe Suchanfrage abgegeben haben. Findet der Server die Clients, so ruft er bei allen beteiligten Clients onClientsFound auf.',en:'Searches for the number of "ready to contact" clients, i.e. those clients that have submitted exactly the same search query. If the server finds the clients, it calls onClientsFound for all clients involved.'})),r(o,"WebSocketFindClientsByNicknamesComment",()=>d({de:"Sucht die Clients mit den angegebenen Nicknames. Haben sie eine entsprechende Suchanfrage (d.h. dieselben Nicknames) abgegeben, so so ruft der Server bei allen beteiligten Clients onClientsFound auf.",en:"Searches for the clients with the specified nicknames. If you have submitted a corresponding search query (i.e. the same nickname), the server calls onClientsFound for all clients involved."})),r(o,"WebSocketFindClientComment",()=>d({de:"Sucht den Client mit dem angegebenen Nickname. Hat er eine entsprechende Suchanfrage (d.h. mit dem Nickname DIESES clients) abgegeben, so so ruft der Server bei beiden Clients onClientsFound auf.",en:"Searches for the client with the specified nickname. If he has submitted a corresponding search query (i.e. with the nickname THIS client), the server calls onClientsFound for both clients."})),r(o,"WebSocketCloseComment",()=>d({de:"Beendet die Verbindung. Bei allen anderen Clients, die sich mit derselben sessionId verbunden haben, wird daraufhin die Methode onOtherClientDisconnected aufgerufen.",en:"Terminates the connection. The onOtherClientDisconnected method is then called for all other clients that have connected with the same sessionId."})),r(o,"WebSocketGetOtherClientsComment",()=>d({de:"Gibt alle bisher bei der selben Session angemeldeten Clients zurück.",en:"Returns an Array of all clients connected to the same session."})),r(o,"WebSocketOnOpenComment",()=>d({de:"Wird aufgerufen, sobald die Verbindung mit dem Server zustandegekommen ist.",en:"Is called as soon as the connection to the server has been established."})),r(o,"WebSocketOnCloseComment",()=>d({de:"Wird aufgerufen, nachdem die Verbindung geschlossen wurde.",en:"This method is called after connection had been closed."})),r(o,"WebSocketOnMessageComment",()=>d({de:"Wird immer dann aufgerufen, wenn eine Nachricht eines anderen Clients empfangen wurde.",en:"Called whenever a message from another client has been received."})),r(o,"WebSocketOnOtherClientDisconnectedComment",()=>d({de:"Wird immer dann aufgerufen, wenn ein anderer Client unter Nutzung desselben sessionCodes die Verbindung mit dem Server beendet hat.",en:"Is always called when another client using the same sessionCode has terminated the connection to the server."})),r(o,"WebSocketOnOtherClientConnectedComment",()=>d({de:"Wird immer dann aufgerufen, wenn ein anderer Client unter Nutzung desselben sessionCodes die Verbindung mit dem Server öffnet.",en:"Is always called when another client using the same sessionCode connects to the server."})),r(o,"WebSocketOnClientsFoundComment",()=>d({de:"Wird aufgerufen, wenn die durch die Methoden findClient bzw. findClients zuvor gesuchten Clients gefunden wurden.",en:"Called when the clients previously searched for by the findClient or findClients methods have been found."})),r(o,"WebSocketFunctionalityNotInEmbeddedModeException",()=>d({de:"Die Netzwerkfunktionalitäten stehen nur eingeloggten Nutzern in der Entwicklungsumgebung zur Verfügung und können daher leider hier nicht ausprobiert werden.",en:"The network functionalities are only available to logged in users at www.online-ide.de and therefore unfortunately cannot be tried out here."})),r(o,"WebSocketCommunicationError",()=>d({de:"Kommunikationsfehler beim WebSocket: ",en:"The WebSocket object had a communication error: "})),r(o,"WebSocketClientClassComment",()=>d({de:"Ein Objekt der Klasse WebSocketClient repräsentiert einen anderen Rechner, mit dem dieser Rechner über den WebSocket in Kontakt steht.",en:"An Object of class WebSocketClient represents an other "})),r(o,"WebSocketClientSendComment",()=>d({de:"Sendet Daten (message) an diesen Client. Den messageType kannst Du frei wählen. Die client bekommt ihn zusammen mit den Daten übermittelt. Tipp: Du kannst auch Objekte senden, musst sie dazu aber vorher serialisieren, d.h. mithilfe der Methode toJson in eine Zeichenkette verwandeln.",en:"Sends data (message) to this client. You may choose messageType freely. Receiving client gets it along with the sent data. Hint: You may send objects if you serialize them beforehand by calling toJSon on them. This creates a string representing this object."})),r(o,"WebSocketClientSetUserDataComment",()=>d({de:"Mit dieser Methode kannst Du beliebige Objektreferenzen in diesem WebSocketClient-Objekt speichern. Den Schlüssel kannst Du dabei frei wählen und später nutzen, um den Wert durch die Methode getUserData wieder zu holen.",en:"This method lets you save arbitrary object references alongside this WebSocketClient-object. You may choose the key freely and use it later on to retrieve the value by calling getUserData."})),r(o,"WebSocketClientGetUserDataComment",()=>d({de:"Mit dieser Methode kannst Du eine Objektreferenz erhalten, die Du zuvor mit der Methode setUserData gespeichert hast. Bemerkung1: Diese Methode entfernt die Objekreferenz nicht aus dem WebSocketClient-Objekt. Bemerkung2: Damit Du alle Methoden des erhaltenen Objekts aufrufen kannst, musst Du dem Computer mitteilen, von welcher Klasse es ist ('casten'). Das geht für die Klasse MeineNutzerDaten bspw. so: MeineNutzerDaten mnd = (MeineNutzerDaten)client.getUserData('schlüssel');",en:`Method GetUserData lets you retrieve object references you stored beforehand with method setUserData. Hint: you can cast the object to it's proper data type like so: (String) getUserData("key")`})),r(o,"WebSocketClientGetNumberComment",()=>d({de:"Gehört ein Client zu einer mit findClient bzw. findClients gefundenen Gruppe, so erhältst Du mit dieser Methode die 'Rangfolge' dieses Clients in dieser Gruppe. Allen Clients wird dieselbe Rangfolgeordnung vom Server mitgeteilt. So lässt sich bspw. einfach festlegen, welcher Client eine besondere Rolle (Server) in der Gruppe erhalten soll (z.B. Client mit Nummer 1). Bemerkung: Die Nummer ist eine Zahl zwischen 1 und der Anzahl der Clients in der Gruppe.",en:"If this client belongs to a group obtained by method findClient or findClients then you get this client's order with this method. This order is given each client by the server so you get the identical value on every computer."})),r(o,"WebSocketClientGetIndexComment",()=>d({de:"Diese Methode ist veraltet. Benutze stattdessen getNumber.",en:"This method is deprecated. Use getNumber instead."})),r(o,"WebSocketNotInEmbeddedException",()=>d({de:"Die Netzwerkfunktionalitäten stehen nur eingeloggten Nutzern in der Entwicklungsumgebung zur Verfügung und können daher leider hier nicht ausprobiert werden.",en:"Network functionality doesn't run in embedded mode."})),r(o,"CollectionsClassComment",()=>d({de:"Diese Klasse besteht aus Methoden, die auf Collections operieren oder Collections zurückgeben.",en:"This class consists exclusively of static methods that operate on or return collections. It contains polymorphic algorithms that operate on collections, 'wrappers', which return a new collection backed by a specified collection, and a few other odds and ends."})),r(o,"CollectionsShuffleComment",()=>d({de:"Vertauscht die Elemente der Liste in zufälliger Weise.",en:"Randomly permutes the specified list."})),r(o,"CollectionsSortComparableListComment",()=>d({de:"Sortiert eine Liste von Elementen, die das Interface Comparable implementieren.",en:"Sorts a List of Comparable elements."})),r(o,"queueInterfaceComment",()=>d({de:"",en:""})),r(o,"queueRemoveComment",()=>d({de:"Entfernt das Element am Kopf der Liste und gibt es zurück. Führt zum Fehler, wenn die Liste leer ist.",en:"Retrieves and removes the head of this queue."})),r(o,"queuePollComment",()=>d({de:"Entfernt das Element am Kopf der Liste und gibt es zurück. Gibt null zurück, wenn die Liste leer ist.",en:"Retrieves and removes the head of this queue, or returns null if this queue is empty."})),r(o,"queuePeekComment",()=>d({de:"Gibt das Element am Kopf der Liste zurück, entfernt es aber nicht. Gib null zurück, wenn die Liste leer ist.",en:"Retrieves, but does not remove, the head of this queue, or returns null if this queue is empty."})),r(o,"queueOfferComment",()=>d({de:"Fügt ein Element hinten an die Liste an. Gibt true zurück, wenn das Element eingefügt werden konnte, ansonsten false.",en:"Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions. When using a capacity-restricted queue, this method is generally preferable to add(E), which can fail to insert an element only by throwing an exception."})),r(o,"dequeInterfaceComment",()=>d({de:"Interface für Liste mit zweiseitigem Zugriff (insbesondere Anfügen an beiden Enden). Der Name steht für 'double ended queue' und wird meist 'deck' ausgesprochen.",en:'A linear collection that supports element insertion and removal at both ends. The name deque is short for "double ended queue" and is usually pronounced "deck"'})),r(o,"dequeRemoveFirstOccurrenceComment",()=>d({de:"Löscht das erste Vorkommen des Objekts. Gibt true zurück, wenn die Liste dadurch verändert wurde.",en:"Removes the first occurrence of the specified element from this deque."})),r(o,"dequeRemoveLastOccurrenceComment",()=>d({de:"Löscht das letzte Vorkommen des Objekts. Gibt true zurück, wenn die Liste dadurch verändert wurde.",en:"Removes the last occurrence of the specified element from this deque."})),r(o,"dequeAddFirstComment",()=>d({de:"Fügt das Element am Anfang der Liste ein.",en:"Inserts the specified element at the front of this deque."})),r(o,"dequeAddLastComment",()=>d({de:"Fügt das Element am Ende der Liste ein.",en:"Inserts the specified element at the end of this deque."})),r(o,"dequeRemoveFirstComment",()=>d({de:"Entfernt das Element am Anfang der Liste und gibt es zurück. Führt zum Fehler, wenn die Liste leer ist.",en:"Retrieves and removes the first element of this deque."})),r(o,"dequeRemoveLastComment",()=>d({de:"Entfernt das Element am Ende der Liste und gibt es zurück. Führt zum Fehler, wenn die Liste leer ist.",en:"Retrieves and removes the last element of this deque."})),r(o,"dequePeekFirstComment",()=>d({de:"Gibt das Element am Anfang der Liste zurück, entfernt es aber nicht. Gib null zurück, wenn die Liste leer ist.",en:"Retrieves, but does not remove, the first element of this deque, or returns null if this deque is empty."})),r(o,"dequePeekLastComment",()=>d({de:"Gibt das Element am Ende der Liste zurück, entfernt es aber nicht. Gib null zurück, wenn die Liste leer ist.",en:"Retrieves, but does not remove, the last element of this deque, or returns null if this deque is empty."})),r(o,"dequePushComment",()=>d({de:"Fügt das Element am Ende der Liste hinzu.",en:"Pushes an element onto the stack represented by this deque (in other words, at the head of this deque)."})),r(o,"dequePopComment",()=>d({de:"Gibt das Element am Ende der Liste zurück und entfernt es von der Liste. Erzeugt einen Fehler, wenn die Liste leer ist.",en:"Pops an element from the stack represented by this deque."})),r(o,"dequeDescendingIteratorComment",()=>d({de:"Gibt einen Iterator über die Elemente dieser Collection zurück, der die Liste in umgekehrter Reihenfolge (Ende -> Anfang) durchläuft.",en:"Returns an iterator over the elements in this deque in reverse sequential order."})),r(o,"linkedListConstructorComment",()=>d({de:"Erzeugt eine neue, leere LinkedList.",en:"Creates a new empty LinkedList."})),r(o,"linkedListIsEmptyError",()=>d({de:"Die Liste ist leer, daher kann kein Element entnommen werden.",en:"Empty list, therefore you can't remove an element from it."})),r(o,"mapInterfaceComment",()=>d({de:"Eine Map ist ein Schlüssel-Wert-Speicher (key-value store). Eine Map kann keinen Schlüssel mehrfach enthalten.",en:"An object that maps keys to values. A map cannot contain duplicate keys; each key can map to at most one value."})),r(o,"mapSizeComment",()=>d({de:"Gibt die Anzahl der Schlüssel-Wert-Paare der Map zurück.",en:"Returns the number of key-value mappings in this map."})),r(o,"mapIsEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn die Map keine Schlüssel-Wert-Paare enthält.",en:"Returns true if this map contains no key-value mappings."})),r(o,"mapContainsValueComment",()=>d({de:"Gibt genau dann true zurück, wenn die Map den Wert enthält.",en:"Returns true if this map maps one or more keys to the specified value. More formally, returns true if and only if this map contains at least one mapping to a value v such that Objects.equals(value, v). This operation will probably require time linear in the map size for most implementations of the Map interface."})),r(o,"mapContainsKeyComment",()=>d({de:"Gibt genau dann true zurück, wenn die Map zum Schlüssel key einen Wert enthält.",en:"Returns true if this map contains a mapping for the specified key."})),r(o,"mapGetComment",()=>d({de:"Gibt den Wert zum Schlüssel key zurück. Gibt null zurück, falls die Map zum Schlüssel key keinen Wert enthält.",en:`Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. More formally, if this map contains a mapping from a key k to a value v such that Objects.equals(key, k), then this method returns v; otherwise it returns null.`})),r(o,"mapPutComment",()=>d({de:"Speichert das key-value pair in der Map. Falls zum key vorher schon ein Value gespeichert war, wird dieser zurückgegeben. In der Map wird er dann durch den neuen Value überschrieben. Falls es zum key noch keinen value in der Map gab, wird null zurückgegeben.",en:"Associates the specified value with the specified key in this map (optional operation). If the map previously contained a mapping for the key, the old value is replaced by the specified value. Returns the previous value associated with key, or null if there was no mapping for key."})),r(o,"mapClearComment",()=>d({de:"Entfernt alle Schlüssel-Wert-Paare aus der Map.",en:"Removes all of the mappings from this map"})),r(o,"mapForeachComment",()=>d({de:"Führt die angegebene Aktion für jedes Schlüssel-Wert-Paar dieser Map aus.",en:"Performs the given action for each key-value pair in this map until all entries have been processed."})),r(o,"mapValuesComment",()=>d({de:"Gibt eine Collection zurück, die alle Werte der Map enthält (ggf. auch mehrfach).",en:"Returns a Collection containing all values of this map."})),r(o,"mapKeySetComment",()=>d({en:"Returns a Set containing all keys of this map.",de:"Gibt ein Set zurück, das alle Schlüssel dieser Map enthält."})),r(o,"mapRemoveComment1",()=>d({en:"Removes the mapping for a key from this map if it is present (optional operation). Returns the previous value associated with key, or null if there was no mapping for key.",de:"Entfernt das Mapping für den gegebenen Schlüssel (falls vorhanden). Gibt ggf. den zu diesem Schlüssel gespeicherten Wert zurück oder null, falls zum Schlüssel kein Wert gespeichert war."})),r(o,"mapRemoveComment2",()=>d({en:"Removes the entry for the specified key only if it is currently mapped to the specified value. Returns true if the value was removed.",de:"Entfernt das Mapping für den gegebenen Schlüssel falls es vorhanden ist und zum Schlüssel der gegebenen Wert gehört. Gibt genau dann true zurück, wenn ein Schlüssel-Wert-Paar ('Mapping') entfernt wurde."})),r(o,"hashMapClassComment",()=>d({de:"Map-Klasse mit Zugriffszeit proportional zu log(Anzahl der Elemente)",en:"A mutable hash map providing O(1) lookup."})),r(o,"hashMapConstructorComment",()=>d({de:"Erstellt ein neues HashMap-Objekt",en:"Creates a new HashMap-object."})),r(o,"setInterfaceComment",()=>d({de:"Interface mit Methoden eines Set, d.h. einer Menge, die jedes Element maximal einmal enthält",en:"A collection that contains no duplicate elements."})),r(o,"setContainsComment",()=>d({de:"Gibt genau dann true zurück, wenn das Set das Element enthält.",en:"Returns true if this set contains the specified element."})),r(o,"setContainsAllComment",()=>d({de:"Gibt genau dann true zurück, wenn das Set alle Elemente der übergebenen Collection enthält.",en:"Returns true if this set contains all of the elements of the specified collection."})),r(o,"hashSetClassComment",()=>d({de:"Set mit konstanter Zugriffszeit",en:"This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that the order will remain constant over time. This class permits the null element."})),r(o,"hashSetConstructorComment",()=>d({de:"Erstellt ein neues HashSet-Objekt.",en:"Creates a new HashSet object."})),r(o,"stackClassComment",()=>d({de:"Stack (Stapelspeicher/Kellerspeicher)",en:"Stack implementation using Javascript array"})),r(o,"stackConstructorComment",()=>d({de:"Erstellt ein neues, leeres Stack-Objekt.",en:"Creates a new, empty stack object."})),r(o,"stackPushComment",()=>d({de:"Legt ein Element 'oben' auf den Stack.",en:"Pushes an element on top of this stack."})),r(o,"stackPopComment",()=>d({de:"Nimmt ein Element 'von oben' vom Stack.",en:"Pops an element from the top of this stack."})),r(o,"stackPeekComment",()=>d({de:"Gibt das oberste Elements des Stacks zurück ohne es vom Stack zu nehmen.",en:"Returns element at top of this stack without removing it from this stack."})),r(o,"stackEmptyComment",()=>d({de:"Gibt genau dann true zurück, wenn der Stack leer ist.",en:"Returns true if and only if this stack is empty."})),r(o,"stackSearchComment",()=>d({de:"Sucht das Element vom 'Boden' des Stack aus und gibt seinen Index zurück, falls das Element gefunden wurde. Das unterste Element hat Index 0. Falls das Element nicht gefunden wurde, wird -1 zurückgegeben.",en:"Returns the index of the first occurrence of the specified element in this vector, or -1 if this vector does not contain the element."})),r(o,"emptyStackException",()=>d({de:"Der Stack ist leer, daher kann diese Methode nicht aufgerufen werden.",en:"This stack is empty."})),r(o,"Object3dClassComment",()=>d({de:"Basisklasse für alle 3d-Objekte",en:"Base class of all 3d objects"})),r(o,"Mesh3dClassComment",()=>d({de:"Basisklasse für alle 3d-Meshes, d.h. Objekte, die aus Dreiecken bestehen.",en:"Base class of all 3d meshes (objects consisting of triangles)"})),r(o,"GraphicSystemNotAvailableError",(t,e)=>d({de:"Die Grafikausgabe ist schon in Gebrauch durch "+t+", daher kann das Grafiksystem "+e+" nicht gestartet werden.",en:"Graphic output is in use by "+t+", therefore it is not available for "+e+"."})),r(o,"databaseManagerClassComment",()=>d({de:"Über die statische Methode DatabaseManager.getConnection(String code) kann die Verbindung zu einer Datenbank auf www.sql-ide.de aufgebaut werden.",en:"A connection to a database on www.sql-ide.de can be established using the static method DatabaseManager.getConnection(String code)."})),r(o,"databaseManagerNotInEmbeddedVersionException",()=>d({de:"Verbindung zu einer Datenbank kann nur von www.online-ide.de aus aufgebaut werden.",en:"You can reach databases at www.sql-ide.de only from the ide in www.online-ide.de."})),r(o,"databaseManagerGetConnectionComment",()=>d({de:"Baut eine Verbindung mit einer Datenbank auf www.sql-ide.de auf. Gibt ein Connection-Objekt zurück, das diese Verbindung repräsentiert.",en:"Sets up a connection to a database on www.sql-ide.de. Returns a Connection object representing this connection."})),r(o,"connectionClassComment",()=>d({de:"Ein Connection-Objekt repräsentiert die Verbindung zu einer Datenbank auf www.sql-ide.de",en:"A connection object represents the connection to a database on www.sql-ide.de"})),r(o,"connectionCreateStatementComment",()=>d({de:"Erstellt ein Statement-Objekt, mit dem Statements zur Datenbank geschickt werden können.",en:"Creates a Statement object that can be used to send statements to the database."})),r(o,"connectionPrepareStatementComment",()=>d({de:"Erstellt ein PreparedStatement-Objekt, mit dem Anweisungen zur Datenbank geschickt werden können.",en:"Creates a PreparedStatement object that can be used to send statements to the database."})),r(o,"connectionCloseComment",()=>d({de:"Schließt die Verbindung zur Datenbank.",en:"Closes connection to the database."})),r(o,"connectionDatabaseConnectionError",()=>d({de:"Es besteht keine Verbindung zur Datenbank.",en:"Connection to database lost."})),r(o,"connectionAlreadyClosedError",()=>d({de:"Die Verbindung wurde bereits mit der Methode close() geschlossen.",en:"Connection has already been closed with method close()."})),r(o,"statementClassComment",()=>d({de:"Ein Statement-Objekt repräsentiert eine Anweisung an die Datenbank.",en:"A Statement object represents a statement to the database."})),r(o,"statementOnlySelectionStatementsWithQueryException",()=>d({de:"Mit der Methode executeQuery können nur select-Anweisungen ausgeführt werden. Benutze für datenverändernde Anweisungen die Methode executeUpdate.",en:"The executeQuery method can only execute select statements. For data changing statements, use the executeUpdate method."})),r(o,"statementExecuteQueryComment",()=>d({de:"Führt ein SQL-Statement aus, das eine selcet-Anweisung enthält.",en:"Executes a SQL-statement containing a select-query."})),r(o,"statementExecuteUpdateException",()=>d({de:"Mit der Methode executeUpdate können nur datenverändernde Anweisungen ausgeführt werden. Benutze für select-Anweisungen die Methode executeQuery.",en:"Only statements that change data can be executed with the executeUpdate method. Use the executeQuery method for select statements."})),r(o,"statementExecuteUpdateComment",()=>d({de:"Führt ein SQL-Statement aus, das eine datenverändernde Anweisung enthält.",en:"Executes a SQL-statement which manipulates data."})),r(o,"resultSetClassComment",()=>d({de:"Ein ResultSet-Objekt speichert das Ergebnis einer Abfrage an die Datenbank.",en:"A ResulSet object contains the result of a database query."})),r(o,"resultSetNextComment",()=>d({de:'Bewegt den "Cursor" zum nächsten Datensatz und gibt genau dann true zurück, wenn noch ein Datensatz da ist.',en:'Moves the "cursor" to the next record and returns true if there is another record.'})),r(o,"resultSetSizeComment",()=>d({de:"Gibt die Anzahl der Zeilen der Ergebnistabelle zurück.",en:"Returns number of rows of result table."})),r(o,"resultSetGetIndexComment",()=>d({de:'Gibt den Index zurück, auf dem der "Cursor" in der Liste der Zeilen der Ergebnistabelle steht. Vor dem ersten Aufruf von next() wird -1 zurückgegeben.',en:'Returns the index where the "cursor" is located in the list of rows of the result table. -1 is returned before the first call to next().'})),r(o,"resultSetWasNullComment",()=>d({de:"Gibt genau dann true zurück, wenn der zuletzt gelesene Wert null war.",en:"Returns true if and only if the last value read was null."})),r(o,"resultSetGetByIndexComment",t=>d({de:`Gibt den Wert der Spalte mit dem angegebenen Spaltenindex als ${t} zurück.`,en:`Returns value of column with given index as ${t}.`})),r(o,"resultSetGetByLabelComment",t=>d({de:`Gibt den Wert der Spalte mit dem angegebenen Spaltenlabel als ${t} zurück.`,en:`Returns value of column with given label as ${t}.`})),r(o,"resultHasNoColumnWithGivenIndexException",()=>d({de:"Die Ergebnistabelle hat keine Spalte mit dem angegebenen Index.",en:"Resultset-table has no column with given index."})),r(o,"cursorAfterLastRecordException",()=>d({de:"Der Cursor befindet sich hinter dem letzten Datensatz der Ergebnistabelle.",en:"Cursor is located after last record of resultset table."})),r(o,"preparedStatementClassComment",()=>d({de:"Ein PreparedStatement-Objekt repräsentiert eine parametrisierte Anweisung an die Datenbank.",en:"A SQL statement is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times."})),r(o,"preparedStatementSetComment",t=>d({de:`Ersetzt den Parameter mit dem angegebenen Index durch den ${t}-Wert.`,en:`Replaces parameter with given index with given ${t}-value.`})),r(o,"preparedStatementParametersMissingException",()=>d({de:"Es gibt keine Parameter (mit ? besetzte Stellen) in dieser Anweisung.",en:"There are no parameters (given as ?) in this statement."})),r(o,"preparedStatementWrongParameterIndex",(t,e)=>d({de:"Es gibt nur die Parameterpositionen 1 bis "+t+" in der SQL-Anweisung, keine Position "+e+".",en:`In this statement parameter positions are numbered 1 ... ${t}. There's no parameter with position ${e}.`})),r(o,"robotClassComment",()=>d({de:"Robot Karol",en:"Carol the robot"})),r(o,"robotEmptyConstructorComment",()=>d({de:"Instanziiert ein neues Robot-Objekt. Der Roboter steht anfangs an der Stelle (1/1)'",en:"Creates a new Robot object. Start position is at (1, 1)."})),r(o,"robotConstructorStartXStartY",()=>d({de:"Instanziiert ein neues Robot-Objekt. Der Roboter wird anfangs an die Stelle (startX/startY) gesetzt.",en:"Creates a new Robot object. Start position is at (startX, startY)."})),r(o,"robotConstructorStartXStartYWorldXWorldY",()=>d({de:"Instanziiert ein neues Robot-Objekt. Der Roboter wird anfangs an die Stelle (startX/startY) gesetzt. WorldX und WorldY sind die Ausmaße der Welt.",en:"Creates a new Robot object. Start position is at (startX, startY). WorldX and WorldY define the extent of the world."})),r(o,"robotConstructorStartXStartYinitialWorld",()=>d({de:"Instanziiert ein neues Robot-Objekt. Der Roboter wird anfangs an die Stelle (startX/startY) gesetzt. Wenn die RobotWorld noch nicht instanziiert ist, wird sie auf Grundlage des Strings initialeWelt erstellt.",en:"Creates a new Robot object. Start position is at (startX, startY). World is generated from string initialWorld."})),r(o,"robotGetWelt",()=>d({de:"Gibt das RobotWorld-Objekt zurück"})),r(o,"robotRechtsDrehen",()=>d({de:"Dreht den Roboter um 90° nach rechts."})),r(o,"robotLinksDrehen",()=>d({de:"Dreht den Roboter um 90° nach links."})),r(o,"robotSchritt",()=>d({de:"Lässt den Roboter einen Schritt nach vorne gehen."})),r(o,"robotHitWall",()=>d({de:"Der Roboter ist gegen eine Wand geprallt.",en:""})),r(o,"robotMaximumJumpHeightUp",()=>d({de:"Der Roboter kann maximal einen Ziegel hoch springen.",en:""})),r(o,"robotMaximumJumpHeightDown",()=>d({de:"Der Roboter kann maximal einen Ziegel nach unten springen.",en:""})),r(o,"robotCantPlaceBricksIntoWall",()=>d({de:"Der Roboter steht direkt vor einer Wand. Da kann er keine Ziegel hinlegen.",en:""})),r(o,"robotPickUpBricksFromWall",()=>d({de:"Der Roboter steht direkt vor einer Wand. Da kann er keine Ziegel aufheben.",en:""})),r(o,"robotColorUnknown",()=>d({de:"Es gibt nur Ziegel der Farben rot, gelb, blau und grün.",en:""})),r(o,"robotOutOfBricks",()=>d({de:"Der Roboter hat keine Ziegel mehr bei sich und kann daher keinen mehr hinlegen.",en:""})),r(o,"robotNoBricksToPickUp",()=>d({de:"Vor dem Roboter liegt kein Ziegel, er kann daher keinen aufheben.",en:""})),r(o,"robotCapacityExceeded",()=>d({de:"Der Roboter kann nicht mehr Steine aufheben, da er keinen Platz mehr in seinem Rucksack hat.",en:""})),r(o,"robotMaximumHeightExceeded",t=>d({de:`Der Ziegelstapel darfd die maximale Höhe von ${t} nicht überschreiten.`,en:""})),r(o,"robotStoppedProgram",()=>d({de:"Das Programm wurde durch einen Roboter angehalten.",en:""})),r(o,"robotSchrittAnzahl",()=>d({de:"Lässt den Roboter anzahl Schritte nach vorne gehen."})),r(o,"robotHinlegen",()=>d({de:"Lässt den Roboter einen roten Ziegel vor sich hinlegen."})),r(o,"robotMarkeLöschen",()=>d({de:"Lässt den Roboter eine Marke, die direkt unter ihm liegt, löschen."})),r(o,"robotMarkeSetzen",()=>d({de:"Lässt den Roboter eine gelbe Marke direkt unter sich setzen."})),r(o,"robotMarkeSetzenFarbe",()=>d({de:"Lässt den Roboter eine Marke der angegebenen Farbe direkt unter sich setzen."})),r(o,"robotHinlegenAnzahl",()=>d({de:"Lässt den Roboter Anzahl rote Ziegel vor sich hinlegen."})),r(o,"robotHinlegenFarbe",()=>d({de:"Lässt den Roboter einen Ziegel der angegebenen Farbe vor sich hinlegen."})),r(o,"robotAufheben",()=>d({de:"Lässt den Roboter einen roten Ziegel vor sich aufheben."})),r(o,"robotAufhebenAnzahl",()=>d({de:"Lässt den Roboter Anzahl rote Ziegel vor sich aufheben."})),r(o,"robotWarten",()=>d({de:"Pausiert das Programm für die angegebene Zeit in ms."})),r(o,"robotSchnell",()=>d({de:"Setzt die Ausführungsgeschwindigkeit auf 'maximal'."})),r(o,"robotBeenden",()=>d({de:"Beendet das Programm"})),r(o,"robotIstWand",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter direkt vor einer Wand steht."})),r(o,"robotNichtIstWand",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nicht direkt vor einer Wand steht."})),r(o,"robotIstZiegel",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter mindestens ein Ziegel liegt."})),r(o,"robotIstZiegelAnzahl",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter genau Anzahl Ziegel liegen."})),r(o,"robotIstZiegelFarbe",()=>d({de:"Gibt genau dann true zurück, wenn auf dem Ziegelstapel direkt vor dem Roboter mindestens ein Ziegel mit der angegebenen Farbe liegt."})),r(o,"robotNichtIstZiegel",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter kein Ziegel liegt."})),r(o,"robotNichtIstZiegelAnzahl",()=>d({de:"Gibt genau dann true zurück, wenn direkt vor dem Roboter nicht genau Anzahl Ziegel liegen."})),r(o,"robotNichtIstZiegelFarbe",()=>d({de:"Gibt genau dann true zurück, wenn auf dem Ziegelstapel direkt vor dem Roboter kein Ziegel mit der angegebenen Farbe liegt."})),r(o,"robotIstMarke",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter eine Marke (egal in welcher Farbe) liegt."})),r(o,"robotIstMarkeFarbe",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter eine Marke in der angegebenen Farbe liegt."})),r(o,"robotNichtIstMarkeFarbe",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter keine Marke in der angegebenen Farbe liegt."})),r(o,"robotNichtIstMarke",()=>d({de:"Gibt genau dann true zurück, wenn unter dem Roboter keine Marke (egal in welcher Farbe) liegt."})),r(o,"robotIstNorden",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Norden blickt."})),r(o,"robotIstWesten",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Westen blickt."})),r(o,"robotIstSueden",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Süden blickt."})),r(o,"robotIstOsten",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter nach Osten blickt."})),r(o,"robotIstLeer",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter keinen Stein mit sich trägt."})),r(o,"robotIstVoll",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter die maximale Anzahl von Steinen mit sich trägt."})),r(o,"robotNichtIstLeer",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter mindestens einen Stein mit sich trägt."})),r(o,"robotHatZiegel",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter mindestens einen Stein mit sich trägt."})),r(o,"robotHatZiegelAnzahl",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter mindestens Anzahl Steine mit sich trägt."})),r(o,"robotNichtIstVoll",()=>d({de:"Gibt genau dann true zurück, wenn der Roboter weniger als die maximale Anzahl von Steinen mit sich trägt."})),r(o,"robotSetzeAnzahlSteine",()=>d({de:"Befüllt den Rucksack des Roboters mit genau Anzahl Steinen."})),r(o,"robotSetzeRucksackGroesse",()=>d({de:"Gibt dem Roboter einen Rucksack, der maximal Anzahl Steine fasst."})),r(o,"robotWorldClassComment",()=>d({de:"Welt für Robot Karol"})),r(o,"robotWorldConstructorWorldXWorldY",()=>d({de:"Instanziiert eine neue Robot-Welt"})),r(o,"robotWorldConstructorInitialWorld",()=>d({de:"Instanziiert eine neue Robot-Welt"})),r(o,"robotWorldSetzeMaximalHoehe",()=>d({de:"Ändert die maximale Höhe der Ziegelstapel."})),r(o,"robotWorldSetzeZiegel",()=>d({de:"Setzt Anzahl Ziegel an der angegebenen Position mit der angegebenen Farbe. Die x- und y-Koordinaten beginnen bei 1."})),r(o,"robotWorldSetzeMarke",()=>d({de:"Setzt einen Marker an der angegebenen Position mit der angegebenen Farbe. Die x- und y-Koordinaten beginnen bei 1."})),r(o,"robotWorldPositionOutsideWorldError",(t,e)=>d({de:`Die Position (${t}/${e}) ist außerhalb der Weltgrenzen.`,en:""})),r(o,"box3dClassComment",()=>d({de:"Würfel (3D)",en:"Box (3D)"})),r(o,"box3dConstructorXYZComment",()=>d({de:"Erzeugt einen neuen Würfel mit der Kantenlänge 1. (x, y, z) ist der Ort seines Mittelpunkts (genauer: seines Diagonalenschnittpunkts).",en:"Creates a new Box with edge length 1. (x, y, z) is it's center."})),r(o,"box3dConstructorComment",()=>d({de:"Erzeugt einen neuen Würfel mit der Kantenlänge 1. Sein Mittelpunkt befindet sich bei (0, 0, 0)",en:"Creates a new Box with edge length 1 and center (0, 0, 0)."})),r(o,"box3dYouNeedSixTexturesError",()=>d({de:"Es ist ein Array mit exakt sechs Indices für diese Art von Methodenaufruf nötig.",en:"You need an array with exactly six indices for this method call."})),r(o,"textureNotFoundError",(t,e)=>d({de:`Die Textur mit Identifier ${t} und Index ${e} konnte nicht gefunden werden.`,en:`Can't find texture with identifier ${t} and index ${e}.`})),r(o,"canvasContext2dNotAvailableError",()=>d({de:"Der Canvas-Context 2d ist nicht verfügbar.",en:"Canvas context 2d is not available."})),r(o,"material3dClassComment",()=>d({de:"Oberklasse aller Material3d-Klassen",en:"Base class of all Material3d classes"})),r(o,"material3dSetColorComment",()=>d({de:"Setzt die Farbe des Materials. Zum Setzen der Durchsichtigkeit (Alpha-Value) benutze setAlpha.",en:"Set material color. To set alpha-value (transparency) use setAlpha."})),r(o,"material3dGetColorComment",()=>d({de:"Gibt die Farbe als int-Wert zurück.",en:"Returns the color of this material as int-value."})),r(o,"material3dIsTransparentComment",()=>d({de:"Gibt true zurück, falls transparente Teile des Körpers auch transparent gezeichnet werden sollen.",en:"Returns true if transparent parts of the 3d-object get rendered transparent."})),r(o,"material3dSetTransparentComment",()=>d({de:"Falls der Wert true ist, werden transparente Teile des 3d-Körpers auch transparent gezeichnet. Nachteil ist eine etwas geringere Performance.",en:"If this value is true, then transparent parts of the 3d object get rendered transparent. Setting 'true' is less performant than setting 'false'."})),r(o,"material3dAlphaComment",()=>d({de:"Der Alphawert (0 ... 1) bestimmt die Durchsichtigkeit des Objekts. Tipp: Damit die Durchsichtigkeit sichtbar wird, musst Du noch setTransparent(true) aufrufen.",en:"The alpha value (0 ... 1) determines the transparency of the object. Hint: To make the transparency visible, you have to call setTransparent(true)."})),r(o,"material3dFlatShadingComment",()=>d({de:"Wenn flatShading == true ist, wird der Farbwert nur jeweils pro gerendertem Dreieck berechnet, nicht per Fragment (Pixel). Das hat eine etwas höhere Performance zur Folge.",en:"If flatShading == true then color is calculated for each triangle, not for each fragment (pixel). This leads to increased performance."})),r(o,"basicMaterial3dClassComment",()=>d({de:"Ein Material, das keine Lichtquelle berücksichtigt, sondern jede Fläche einfach nur mit ihrer Farbe füllt. Geeignet vor allem für Wireframe-Darstellung. Im Vergleich zu den anderen Materialien bietet es die beste Performance.",en:"This material doesn't take light into account but fills every surface with it's given color. Usesful for drawing wireframes. Compared to all other materials this one has best performance."})),r(o,"basicMaterial3dConstructorComment",()=>d({de:"Erzeugt ein BasicMaterial-Objekt. Wireframe == true bewirkt, dass nur die Kanten gezeichnet werden.",en:"Creates a BasicMaterial object. Wireframe == true leads to surfaces not being filled."})),r(o,"basicMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein BasicMaterial-Objekt mit einer Textur, z.B. new BasicMaterial(Texture.earth2k).",en:"Creates a BasicMaterial object with a texture, e.g. new BasicMaterial(Texture.earth2k)."})),r(o,"basicMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein BasicMaterial-Objekt mit einer Textur, z.B. new BasicMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a BasicMaterial object with a texture, e.g. new BasicMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"lambertMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein LambertMaterial-Objekt mit einer Textur, z.B. new LambertMaterial(Texture.earth2k).",en:"Creates a LambertMaterial object with a texture, e.g. new LambertMaterial(Texture.earth2k)."})),r(o,"lambertMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein LambertMaterial-Objekt mit einer Textur, z.B. new LambertMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a LambertMaterial object with a texture, e.g. new LambertMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"phongMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein PhongMaterial-Objekt mit einer Textur, z.B. new PhongMaterial(Texture.earth2k).",en:"Creates a PhongMaterial object with a texture, e.g. new PhongMaterial(Texture.earth2k)."})),r(o,"phongMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein PhongMaterial-Objekt mit einer Textur, z.B. new PhongMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a PhongMaterial object with a texture, e.g. new PhongMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"physicallyBasedMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein PhysicallyBasedMaterial-Objekt mit einer Textur, z.B. new PhysicallyBasedMaterial(Texture.earth2k).",en:"Creates a PhysicallyBasedMaterial object with a texture, e.g. new PhysicallyBasedMaterial(Texture.earth2k)."})),r(o,"physicallyBasedMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein PhysicallyBasedMaterial-Objekt mit einer Textur, z.B. new PhysicallyBasedMaterial(SpriteLibrary.plattforms, 20).",en:"Creates a PhysicallyBasedMaterial object with a texture, e.g. new PhysicallyBasedMaterial(SpriteLibrary.plattforms, 20)."})),r(o,"colorMustNotBeNull",()=>d({de:"Der Wert null ist als Farbe hier nicht möglich.",en:"color must not be null."})),r(o,"spriteMaterial3dClassComment",()=>d({de:"Ein Material, das mit Hilfe eines Sprite dargestellt werden kann.",en:"A material used for sprites."})),r(o,"spriteMaterial3dConstructorSpriteLibraryComment",()=>d({de:"Erzeugt ein Sprite3dMaterial-Objekt mithilfe einer Grafik aus der Sprite Library, z.B. new SpriteMaterial3d(SpriteLibrary.plattforms, 20)",en:"Creates a Sprite3dMaterial using a texture from sprite libary, e.g. new SpriteMaterial3d(SpriteLibrary.plattforms, 20)"})),r(o,"spriteMaterial3dConstructorTextureComment",()=>d({de:"Erzeugt ein Sprite3dMaterial-Objekt mithilfe einer Textur-Grafik, z.B. new SpriteMaterial3d(Texture.2kmoon)",en:"Creates a Sprite3dMaterial using a texture, e.g. new SpriteMaterial3d(Texture.2kmoon)"})),r(o,"phongMaterial3dClassComment",()=>d({de:"Dieses Material verwendet ein nichtphysikalisches Blinn-Phong-Modell zur Berechnung des Reflexionsgrads. kann glänzende Oberflächen mit spiegelnden Glanzlichtern simulieren (z. B. lackiertes Holz). MeshPhongMaterial berechnet die Schattierung je Fragment (entspricht ca. einem Bildschirmpixel). Der Parameter Shininess (0...1000) definiert die Intensität dieser Glanzlichter.",en:"This material uses a non-physically based Blinn-Phong model for calculating reflectance. can simulate shiny surfaces with specular highlights (such as varnished wood). MeshPhongMaterial uses per-fragment shading. Parameter shininess (0...1000) defines the intensity of these specular highlights."})),r(o,"phongMaterial3dConstructorComment",()=>d({de:"Erzeugt ein PhongMaterial-Objekt. Der Parameter Shininess (0...1000) definiert die Intensität der Glanzlichter.",en:"Creates a PhongMaterial object. The Shininess parameter (0...1000) defines the intensity of the highlights."})),r(o,"phongMaterial3dShininessComment",()=>d({de:"Die Shininess (0...1000) des Materials definiert die Intensität der Glanzlichter.",en:"The shininess value (0...1000) defines the intensity of the highlights."})),r(o,"phongMaterial3dSpecularComment",()=>d({de:"Farbe der Glanzlichter",en:"Color of specular highlights"})),r(o,"material3dEmissiveComment",()=>d({de:"Farbe, mit der das Objekt selbst leuchtet.",en:"Color with which the object itself emits light."})),r(o,"materialWireframeComment",()=>d({de:"Legt fest, ob das Objekt ungefüllt (nur als Gitter) gezeichnet werden soll.",en:"If true, then the object is renderd as wireframe (without filling)."})),r(o,"toonMaterialClassComment",()=>d({de:"Comic-ähnliches Material",en:"A material implementing toon shading."})),r(o,"toonMaterialConstructorComment",()=>d({de:"",en:""})),r(o,"lambertMaterial3dClassComment",()=>d({de:`Das Material verwendet ein nichtphysikalisches Lambertmodell zur Berechnung des Reflexionsgrads. Dadurch können einige Oberflächen (z. B. unbehandeltes Holz oder Stein) gut simuliert werden. Glänzende Oberflächen mit Glanzlichtern (z. B. lackiertes Holz) können jedoch nicht simuliert werden. MeshLambertMaterial berechnet die Schattierung je Fragment (d.h. ca. je Bildschirmpixel). Aufgrund der Einfachheit der Reflexions- und Beleuchtungsmodelle ist die Performance bei Verwendung dieses Materials höher als bei PhongMaterial oder StandardMaterial, allerdings auf Kosten einer gewissen grafischen Genauigkeit. `,en:`The material uses a non-physically based Lambertian model for calculating reflectance. This can simulate some surfaces (such as untreated wood or stone) well, but cannot simulate shiny surfaces with specular highlights (such as varnished wood). MeshLambertMaterial uses per-fragment shading. Due to the simplicity of the reflectance and illumination models, performance will be greater when using this material over the PhongMaterial or StandardMaterial, at the cost of some graphical accuracy.`})),r(o,"lambertMaterial3dConstructorComment",()=>d({de:"Erzeugt ein neues LambertMaterial-Objekt",en:"Creates a new LambertMaterial object."})),r(o,"physicallyBasedMaterial3dClassComment",()=>d({de:`in Standardmaterial auf physikalischer Basis. Physically Based Rendering (PBR) ist in vielen 3D-Anwendungen wie Unity, Unreal und 3D Studio Max in letzter Zeit zum Standard geworden. Dieser Ansatz unterscheidet sich von älteren Ansätzen dadurch, dass statt Näherungen für die Art und Weise, wie Licht mit einer Oberfläche interagiert, ein physikalisch korrektes Modell verwendet wird. In der Praxis liefert dies ein genaueres und realistischeres Ergebnis als LambertMaterial oder PhongMaterial, allerdings ist der Rechenaufwand etwas höher.`,en:`A standard physically based material, using Metallic-Roughness workflow. Physically based rendering (PBR) has recently become the standard in many 3D applications, such as Unity, Unreal and 3D Studio Max. This approach differs from older approaches in that instead of using approximations for the way in which light interacts with a surface, a physically correct model is used. In practice this gives a more accurate and realistic looking result than the LambertMaterial or PhongMaterial, at the cost of being somewhat more computationally expensive.`})),r(o,"physicallyBasedMaterial3dConstructorComment",()=>d({de:"Erzeugt ein neues PhysicallyBasedMaterial-Objekt",en:"Creates a new PhysicallyBasedMaterial object."})),r(o,"physicallyBasedMaterial3dRoughnessComment",()=>d({de:"Rauheit des Materials (Wert zwischen 0 und 1)",en:"Roughness value between 0 and 1"})),r(o,"physicallyBasedMaterial3dMetalnessComment",()=>d({de:"Metallisches Reflektieren des Materials (Wert zwischen 0 und 1)",en:"Metalness value between 0 and 1"})),r(o,"TexturesEnumComment",()=>d({de:"Texturen, die mit den 3d-Klassen (z.B. Sphere3d, Box3d) genutzt werden können, z.B. new Spere3d().setTexture(Textures.earth)",en:"You may use these textures with 3d classes (Sphere3d, Box3d, ...), e.g. new Spere3d().setTexture(Textures.earth)"})),r(o,"Sprite3dClassComment",()=>d({de:"Ein 3d-Sprite ist ein Rechteck mit Textur, das immer automatisch zur Kamera hingewandt ist.",en:"A sprite is a plane that always faces towards the camera, generally with a partially transparent texture applied."})),r(o,"Sprite3dConstructorComment",()=>d({de:"Erzeugt ein neues 3d-Sprite am gegebenen Ort mit der gegebenen Textur.",en:"Creates a new 3d sprite at given position with given texture."})),r(o,"RedValueOutOfBoundsException",()=>d({de:"Der Rotwert muss sich zwischen 0 und 255 befinden.",en:"Red component has to be from 0 to 255."})),r(o,"GreenValueOutOfBoundsException",()=>d({de:"Der Grünwert muss sich zwischen 0 und 255 befinden.",en:"Green component has to be from 0 to 255."})),r(o,"BlueValueOutOfBoundsException",()=>d({de:"Der Blauwert muss sich zwischen 0 und 255 befinden.",en:"Blue component has to be from 0 to 255."})),r(o,"AlphaValueOutOfBoundsException",()=>d({de:'Der Alphawert ("Undurchsichtigkeit") muss sich zwischen 0 und 1 befinden.',en:"Alpha component (opacity) has to be from 0 to 1."})),r(o,"ColorFromRGB",()=>d({de:"Erzeugt aus den Werten für Rot, Grün und Blau (jeweils zwischen 0 und 255) ein Color-Objekt.",en:"Creates a Color object from red, green and blue value. Values between 0 and 255."})),r(o,"ColorConstructorFromRGB",()=>d({de:"Erzeugt aus den Werten für Rot, Grün und Blau (jeweils zwischen 0 und 255) ein Color-Objekt.",en:"Creates a Color object from red, green and blue value. Values between 0 and 255."})),r(o,"ColorFromRGBA",()=>d({de:"Erzeugt aus den Werten für Rot, Grün, Blau (jeweils zwischen 0 und 255) und Alpha (zwischen 0 und 1) ein Color-Objekt.",en:"Creates a Color object from red, green, blue (0...255) and alpha (0 - 1) value."})),r(o,"ColorConstructorFromRGBA",()=>d({de:"Erzeugt aus den Werten für Rot, Grün, Blau (jeweils zwischen 0 und 255) und Alpha (zwischen 0 und 1) ein Color-Objekt.",en:"Creates a Color object from red, green, blue (0...255) and alpha (0 - 1) value."})),r(o,"ColorFromHSLA",()=>d({de:"Erzeugt aus den Werten für hue (Farbton, zwischen 0 und 360), saturation (Sättigung, zwischen 0 und 100), luminescence (Helligkeit, zwischen 0 und 100) und alpha (zwischen 0 und 1) ein Color-Objekt.",en:"Creates a Color object from values for hue (between 0 and 360), saturation (between 0 and 100), luminescence (between 0 and 100) and alpha (between 0 and 1) value."})),r(o,"ColorFromHSL",()=>d({de:"Erzeugt aus den Werten für hue (Farbton, zwischen 0 und 360), saturation (Sättigung, zwischen 0 und 100) und luminescence (Helligkeit, zwischen 0 und 100) ein Color-Objekt.",en:"Creates a Color object from values for hue (between 0 and 360), saturation (between 0 and 100) and luminescence (between 0 and 100) value."})),r(o,"ColorGetRed",()=>d({de:"Gibt den Rotwert der Farbe zurück (zwischen 0 und 255).",en:"Returns this color's red component (between 0 and 255)."})),r(o,"ColorGetGreen",()=>d({de:"Gibt den Grünwert der Farbe zurück (zwischen 0 und 255).",en:"Returns this color's green component (between 0 and 255)."})),r(o,"ColorGetBlue",()=>d({de:"Gibt den Blauwert der Farbe zurück (zwischen 0 und 255).",en:"Returns this color's blue component (between 0 and 255)."})),r(o,"ColorToInt",()=>d({de:"Gibt die Farbe (ohne Berücksichtigung des Alpha-Wertes) als int-Zahl zurück.",en:"Returns this color as int value (without alpha)."})),r(o,"ColorToString",()=>d({de:"Gibt die Farbe als Zeichenkette zurück.",en:"Returns this color as String value."})),r(o,"ColorRandomColor0",()=>d({de:"Erzeugt eine zufällige Farbe.",en:"Returns a random color."})),r(o,"ColorRandomColor1",()=>d({de:"Erzeugt eine zufällige Farbe mit der angegebenen Maximalhelligkeit (zwischen 0 und 255).",en:"Returns a random color with given maximum brightness (between 0 and 255)."})),r(o,"ColorRandomColor2",()=>d({de:"Erzeugt eine zufällige Farbe mit der angegebenen Minimal- und Maximalhelligkeit (zwischen 0 und 255).",en:"Returns a random color with given minimum and maximum brightness (between 0 and 255)."})),r(o,"Object3dBatchClassComment",()=>d({de:"Eine Sammlung von 3d-Objekten, mit einheitlicher Form und Textur, die sehr schnell gerendert werden können.",en:"A collection of 3d-objects with same shape and texture, that can be rendered very fast.",fr:"Une collection d'objets 3D avec la même forme et la même texture, qui peuvent être rendus très rapidement."})),r(o,"Object3dBatchConstructorComment",()=>d({de:"Erzeugt ein neues Object3dBatch-Objekt mit der Form und Textur der angegebenen Vorlage. MaxInstanceCount ist die maximale Anzahl gleichartiger Objekte, die mit der gegebenen Vorlage erzeugt wereden sollen.",en:"Creates a new Object3dBatch object with the shape and texture of the given template. MaxInstanceCount is the maximum number of similar objects that should be created with the given template.",fr:"Crée un nouvel objet Object3dBatch avec la forme et la texture du modèle donné. MaxInstanceCount est le nombre maximum d'objets similaires qui doivent être créés avec le modèle donné."})),r(o,"BatchedObject3dClassComment",()=>d({de:"Ein einzelnes Objekt, das Teil eines Object3dBatch ist.",en:"A single object that is part of an Object3dBatch.",fr:"Un seul objet qui fait partie d'un Object3dBatch."})),r(o,"Object3dBatchCreateInstanceComment",()=>d({de:"Erzeugt eine neue Instanz eines BatchedObject3d.",en:"Creates a new instance of a BatchedObject3d.",fr:"Crée une nouvelle instance d'un BatchedObject3d."})),r(o,"Object3dBatchSetOpacityComment",()=>d({de:"Setzt die Durchsichtigkeit (Alpha-Wert) aller Objekte in diesem Object3dBatch. Wert zwischen 0 und 1.",en:"Sets the opacity (alpha value) of all objects in this Object3dBatch. Value between 0 and 1.",fr:"Définit l'opacité (valeur alpha) de tous les objets de cet Object3dBatch. Valeur entre 0 et 1."})),r(o,"ArraysClassComment",()=>d({de:"Hilfsklasse für Arrays",en:"Helper class for arrays",fr:"Classe d'aide pour les tableaux"})),r(o,"ArraysClassAsListComment",()=>d({de:"Gibt das Array als Liste zurück.",en:"Returns the array as a list.",fr:"Renvoie le tableau sous forme de liste."}));class xr{}r(xr,"fullspeed",()=>d({de:"Zeigt an, dass die annotierte Methode oder alle Methoden der annotierten Klasse mit voller Geschwindigkeit ausgeführt werden sollen.",en:"Indicates that the annotated method or all methods of the annotated class should be executed in full speed mode, ignoring any speed settings."})),r(xr,"override",()=>d({de:"Zeigt an, dass eine Methode eine Methode in einer Superklasse überschreiben soll.",en:"Indicates that a method is intended to override a method in a superclass."})),r(xr,"test",()=>d({de:"Zeigt an, dass eine Methode eine Testmethode ist oder eine Klasse Testmethoden enthält.",en:"Indicates that a method is a test method or that a class contains test methods."})),r(xr,"instance",()=>d({de:'Erzeugt eine globale Singleton-Instanz dieser Klasse unter dem angegebenen Namen. Beispiel: @Instance("meinSpeicher")',en:'Creates a global singleton instance of this class under the given name. Example: @Instance("myStorage")'})),r(xr,"inject",()=>d({de:'Injiziert die globale Instanz mit dem angegebenen Namen in dieses Feld. Beispiel: @Inject("meinSpeicher")',en:'Injects the global instance with the given name into this field. Example: @Inject("myStorage")'}));var Ym={Fullspeed:{identifier:"Fullspeed",description:xr.fullspeed(),beforeClass:!0,beforeMethod:!0,beforeMethodOfMainClass:!0,beforeField:!1},Override:{identifier:"Override",description:xr.override(),beforeClass:!1,beforeMethod:!0,beforeMethodOfMainClass:!1,beforeField:!1},Test:{identifier:"Test",description:xr.test(),beforeClass:!0,beforeMethod:!0,beforeMethodOfMainClass:!0,beforeField:!1},Instance:{identifier:"Instance",description:xr.instance(),beforeClass:!0,beforeMethod:!1,beforeMethodOfMainClass:!1,beforeField:!1},Inject:{identifier:"Inject",description:xr.inject(),beforeClass:!1,beforeMethod:!1,beforeMethodOfMainClass:!1,beforeField:!0}},Ad=Object.values(Ym);class we extends No{constructor(e,i,n,s){super(e,i,s);r(this,"_isMainClass");r(this,"visibility",p.keywordPublic);r(this,"isStatic",!1);r(this,"isFinal",!1);r(this,"_outerType");r(this,"isPrimitiveTypeWrapper",!1);r(this,"innerTypes",[]);r(this,"runtimeClass_");r(this,"isLibraryType",!1);r(this,"extendsImplements",{});r(this,"staticInitializer");r(this,"diInstanceName");r(this,"diInitializer");r(this,"staticConstructorsDependOn",new Map);r(this,"pathAndIdentifierAsDotSeparatedString");r(this,"pathAndIdentifierAsArray");r(this,"staticType");r(this,"annotations",[]);this.isPrimitive=!1,this.pathAndIdentifierAsDotSeparatedString=n||e,this.pathAndIdentifierAsArray=this.pathAndIdentifierAsDotSeparatedString.split("."),this.extendsImplements[this.pathAndIdentifierAsDotSeparatedString]=!0,this.extendsImplements.Object=!0,this.staticType=new ei(this)}set isMainClass(e){this._isMainClass=!0}get isMainClass(){return this._isMainClass!=null}getOwnAndInheritedFields(){return this.getFields()}set outerType(e){this._outerType=e,e.innerTypes.push(this)}get outerType(){return this._outerType}get runtimeClass(){return this.runtimeClass_}set runtimeClass(e){this.runtimeClass_=e}getExtendedImplementedIdentifiers(){return Object.getOwnPropertyNames(this.extendsImplements)}fastExtendsImplements(e){return!!this.extendsImplements[e]}registerChildType(e){e.extendsImplements[this.pathAndIdentifierAsDotSeparatedString]=!0}getDefaultValue(){return null}initRuntimeClass(e){var n;let i=this;this.runtimeClass=(n=class extends e{constructor(){super()}},r(n,"type",i),n)}getPossibleMethods(e,i,n){let s=[];if(i){let a=this;for(;a;){let l=a.getOwnMethods().filter(h=>h.isConstructor);if(s=s.concat(l),a.getExtends&&l.length==0)a=a.getExtends();else break}}else{s=this.getOwnMethods().filter(l=>!l.isConstructor&&l.identifier==e&&(!n||l.isStatic));let a=this.getExtends();if(a){Array.isArray(a)||(a=[a]);for(let l of a)s=s.concat(l.getPossibleMethods(e,i,n))}}return s}isVisibleFrom(e){return!!(this.visibility==p.keywordPublic||!e||this.outerType==e||this.innerTypes.includes(e)||this.visibility==p.keywordProtected&&this.outerType&&e.extendsImplements[this.outerType.pathAndIdentifierAsDotSeparatedString])}hasFullSpeedMethods(){return this.hasAnnotation(Ym.Fullspeed.identifier)}hasAnnotation(e){return this.annotations.find(i=>i.identifier==e)!=null}getAnnotation(e){return this.annotations.find(i=>i.identifier==e)}setAnnotations(e){this.annotations=e}createClassField(e){const i=new Hi("class",oe.instance,this.module,this,p.keywordPublic);i._isStatic=!0,i.template="§1.type.getClassObject()",i.classEnum=this,i.documentation=o.classFieldComment,i.hiddenWhenDebugging=!0;let n=new Map;return n.set(e.genericTypeParameters[0],this),i.type=new di(e,n),i}getArraySnippetEnding(e){let i="";for(let n=0;ni.identifier==e)}getPath(){return this.pathAndIdentifierAsArray}}const Xs=class Xs extends we{constructor(e,i,n,s=[],a){super(e,n,e+"@"+Xs.uniqueID++,i);r(this,"isWildcard");r(this,"fieldCache");r(this,"methodCache");r(this,"catches");this.upperBounds=s,this.lowerBound=a,this.isWildcard=this.identifier=="?"}getClassObject(){return null}getField(e,i,n){}getDeclaration(){return this.getDefinition()}getDefinition(){var e;return this.identifier+(this.lowerBound?" super "+((e=this.lowerBound)==null?void 0:e.identifier):"")+(this.upperBounds.length>0&&this.upperBounds[0].identifier!="Object"?" extends "+this.upperBounds.filter(i=>i.identifier!="Object").map(i=>i.toString()).join(" & "):"")}toString(){return this.identifier}getAbsoluteName(){var e;return this.pathAndIdentifierAsDotSeparatedString+(this.lowerBound?" super "+((e=this.lowerBound)==null?void 0:e.pathAndIdentifierAsDotSeparatedString):"")+(this.upperBounds.length>0?" extends "+this.upperBounds.map(i=>i.pathAndIdentifierAsDotSeparatedString).join(" & "):"")}isGenericVariant(){return!1}isGenericTypeParameter(){return!0}getFile(){return this.module.file}getFields(){return this.fieldCache||(this.upperBounds.length==0?this.fieldCache=[]:this.fieldCache=this.upperBounds[0].getFields()),this.fieldCache}getOwnMethods(){if(!this.methodCache){this.methodCache=[];for(let e of this.upperBounds)this.methodCache=this.methodCache.concat(e.getAllMethods())}return this.methodCache}getAllMethods(){return this.getOwnMethods()}getPossibleMethods(e,i,n){return this.getAllMethods().filter(s=>s.identifier==e&&s.isConstructor==i&&(s.isStatic||!n))}getCopyWithConcreteType(e){let i=e.get(this);if(i)return i;let n=new Xs(this.identifier,this.module,this.identifierRange);e.set(this,n),n.catches=this.catches,this.lowerBound&&(n.lowerBound=this.lowerBound.getCopyWithConcreteType(e));for(let s of this.upperBounds)n.upperBounds.push(s.getCopyWithConcreteType(e));return e.delete(this),n}canBeReplacedByConcreteType(e){if(!(e instanceof we))return!1;for(let i of this.upperBounds)if(!e.fastExtendsImplements(i.identifier))return!1;return!(this.lowerBound&&!this.lowerBound.fastExtendsImplements(e.identifier))}canImplicitlyCastTo(e){if(e.isPrimitive)return!1;if(e==this)return!0;if(e instanceof Xs){if(e.catches)return e.catches.push(this),!0;if(!e.lowerBound)return!1;for(let i of this.upperBounds)if(i.canImplicitlyCastTo(e.lowerBound))return!0;return!1}for(let i of this.upperBounds)if(i.canImplicitlyCastTo(e))return!0;return!1}canExplicitlyCastTo(e){if(e.isPrimitive)return!1;if(e==this)return!0;if(e instanceof Xs){if(!e.lowerBound)return!1;for(let i of this.upperBounds)if(i.canExplicitlyCastTo(e.lowerBound))return!0;return!1}for(let i of this.upperBounds)if(i.canExplicitlyCastTo(e))return!0;return!1}initCatches(){this.catches=[]}checkCatches(e,i){if(!this.catches||this.catches.length==0){let a=v.parameterNotDefined(this.identifier);e.push({message:a.message,id:a.id,level:"error",range:i});return}let n=this.catches.filter(a=>typeof a<"u").map(a=>a.toString()),s=!0;for(let a=0;as.identifier==t&&s.visibility<=e&&(s._isStatic||!i));if(n)return n;e==p.keywordPrivate&&(e=p.keywordProtected);for(let s of this.getExtends())if(n=s.getField(t,e,i),n)return n}toString(){let t=this.identifier;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.toString()).join(", ")+">"),t}getAbsoluteName(){let t=this.pathAndIdentifierAsDotSeparatedString;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.getAbsoluteName()).join(", ")+">"),t}getCompletionItems(t,e,i,n,s,a){let l=[];for(let h of this.getAllMethods().filter(u=>(u.classEnumInterface==this||u.visibility!=p.keywordPrivate)&&(u.isStatic||!a)))l.push({label:h.getCompletionLabel(),filterText:h.identifier,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},kind:P.CompletionItemKind.Method,insertText:h.getCompletionSnippet(e),detail:h.returnParameterType?h.returnParameterType.getDeclaration():"void",range:n,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,documentation:h.documentation==null?void 0:{value:typeof h.documentation=="string"?h.documentation:h.documentation()}});return l}}class ni extends Bt{constructor(e,i,n,s){super(e,i,n,s);r(this,"methods",[]);r(this,"fields",[]);r(this,"extends",[]);r(this,"cachedAllImplementedInterfaces");this.genericTypeParameters=[]}isFunctionalInterface(){return this.methods.length==1}getFields(){return this.fields}isGenericVariant(){return!1}isGenericTypeParameter(){return!1}addExtends(e){Array.isArray(e)||(e=[e]),this.extends=this.extends.concat(e)}registerExtendsImplementsOnAncestors(e){e&&this.registerChildType(e),e=e||this;for(let i of this.extends)i.registerExtendsImplementsOnAncestors(e)}getCopyWithConcreteType(e){return this.genericTypeParameters.length==0?this:new nr(this,e)}getExtends(){return this.extends}getAllImplementedInterfaces(){var e;if(!this.cachedAllImplementedInterfaces){this.cachedAllImplementedInterfaces=[];for(let i of this.getExtends())this.cachedAllImplementedInterfaces.push(i),this.cachedAllImplementedInterfaces=(e=this.cachedAllImplementedInterfaces)==null?void 0:e.concat(i.getAllImplementedInterfaces())}return this.cachedAllImplementedInterfaces}getOwnMethods(){return this.methods}getAllMethods(){let e=this.methods;for(let i of this.extends)e=e.concat(i.getAllMethods());return e}getAllInheritedMethodsHelper(e){for(let i of this.methods){let n=i.getInternalName("java");e.get(n)||e.set(n,i)}for(let i of this.extends)i.getAllInheritedMethodsHelper(e)}getAllInheritedMethods(){let e=new Map;this.getAllInheritedMethodsHelper(e);let i=[];return e.forEach((n,s)=>i.push(n)),i}canImplicitlyCastTo(e){if(e instanceof nt){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return e.catches&&e.catches.push(this),!0}if(!(e instanceof ni))return!1;if(e==this)return!0;for(let i of this.extends)if(i.canImplicitlyCastTo(e))return!0;return e.identifier=="Object"}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)?!0:e instanceof we?e.canImplicitlyCastTo(this):!1}getDeclaration(){let e=$e[this.visibility]+" ";return e+="interface "+this.identifier,this.genericTypeParameters&&this.genericTypeParameters.length>0&&(e+="<"+this.genericTypeParameters.map(i=>i.getDeclaration()).join(", ")+">"),this.getExtends().length>0&&(e+=" extends "+this.getExtends().map(i=>i.toString()).join(", ")),e}getCompletionItems(e,i,n,s,a,l){const h=super.getCompletionItems(e,i,n,s,a,l);for(let u of this.genericTypeParameters)h.push({label:u.identifier,detail:u.getDeclaration(),kind:P.CompletionItemKind.TypeParameter,range:s,insertText:u.identifier});return h}}class nr extends Bt{constructor(e,i){super(e.identifier,e.identifierRange,e.pathAndIdentifierAsDotSeparatedString,e.module);r(this,"cachedMethods");r(this,"cachedExtends");r(this,"cachedAllImplementedInterfaces");this.isGenericVariantOf=e,this.typeMap=i,this.runtimeClass=e.runtimeClass}getFirstTypeParametersType(){let e=this.isGenericVariantOf.genericTypeParameters;if(e&&e.length>0)return this.typeMap.get(e[0])}isFunctionalInterface(){return this.isGenericVariantOf.isFunctionalInterface()}toString(){let e=this.identifier,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.toString()}).join(", ")+">"),e}getAbsoluteName(){let e=this.pathAndIdentifierAsDotSeparatedString,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.getAbsoluteName()}).join(", ")+">"),e}getDeclaration(){let e=$e[this.visibility]+" ";this.isStatic&&(e+="static "),e+="interface "+this.identifier;let i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.getDeclaration()}).join(", ")+">"),this.getExtends().length>0&&(e+=" extends "+this.getExtends().map(n=>n.toString()).join(", ")),e}isGenericVariant(){return!0}isGenericTypeParameter(){return!1}getCopyWithConcreteType(e){let i=new Map,n=!1;return this.typeMap.forEach((s,a)=>{let l=s.getCopyWithConcreteType(e);s!=l&&(n=!0),i.set(a,l)}),n?new nr(this.isGenericVariantOf,i):this}getOwnMethods(){if(!this.cachedMethods){this.cachedMethods=[];for(let e of this.isGenericVariantOf.getOwnMethods())this.cachedMethods.push(e.getCopyWithConcreteType(this.typeMap,this))}return this.cachedMethods}getAllMethods(){let e=this.getOwnMethods();for(let i of this.getExtends())e=e.concat(i.getAllMethods());return e}getExtends(){return this.cachedExtends||(this.cachedExtends=this.isGenericVariantOf.getExtends().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedExtends}getAllImplementedInterfaces(){return this.cachedAllImplementedInterfaces||(this.cachedAllImplementedInterfaces=this.isGenericVariantOf.getAllImplementedInterfaces().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedAllImplementedInterfaces}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)?!0:e instanceof we?e.canImplicitlyCastTo(this):!1}canImplicitlyCastTo(e){if(e instanceof nt){for(let s of e.upperBounds)if(!this.canImplicitlyCastTo(s))return!1;return e.catches&&e.catches.push(this),!0}if(!(e instanceof Bt))return!1;if(e instanceof ni)return!!this.isGenericVariantOf.canImplicitlyCastTo(e);let i=e;if(!this.isGenericVariantOf.canImplicitlyCastTo(i.isGenericVariantOf))return!1;let n=this.findSuperTypeOfMeWhichIsGenericVariantOf(i);if(n==null)return!1;for(let s of n.isGenericVariantOf.genericTypeParameters){let a=n.typeMap.get(s),l=i.typeMap.get(s);if(!a||!l)return!1;let h=l instanceof nt&&l.isWildcard;if(!(a.canImplicitlyCastTo(l)&&(h||l.canImplicitlyCastTo(a))))return!1}return!0}findSuperTypeOfMeWhichIsGenericVariantOf(e){if(e.isGenericVariantOf==this.isGenericVariantOf)return this;for(let n of this.getExtends())if(n instanceof nr){let s=n.findSuperTypeOfMeWhichIsGenericVariantOf(e);if(s!=null)return s}return null}registerExtendsImplementsOnAncestors(e){this.isGenericVariantOf.registerExtendsImplementsOnAncestors(e)}}class Ie extends No{constructor(t,e,i,n){for(super(t.identifier+"[]".repeat(e),n,i),this.elementType=t,this.dimension=e;this.elementType instanceof Ie;)this.dimension+=this.elementType.dimension,this.elementType=this.elementType.elementType;this.isPrimitive=!1,this.genericTypeParameters=void 0}getCompletionItemDetail(){return""}getDefaultValue(){return null}getCastFunction(t){}getCopyWithConcreteType(t){let e;return(this.elementType instanceof di||this.elementType instanceof nr)&&(e=this.elementType.getCopyWithConcreteType(t)),this.elementType instanceof nt&&(e=t.get(this.elementType)),e?new Ie(e,this.dimension,this.module,this.identifierRange):this}getFile(){throw new Error("Method not implemented.")}getBinaryResultType(t,e,i){}getBinaryOperation(t,e){}getUnaryResultType(t){}getUnaryOperation(t){}toString(){let t=this.elementType.toString();for(let e=0;e{this.addAll(e.codeReachedAssertions)})}addAll(t){t.assertions.forEach((e,i)=>this.assertions.set(i,e))}registerAssertion(t){this.assertions.set(t.key,t)}registerAssertionReached(t){let e=this.assertions.get(t);e&&(e.reached=!0)}getUnreachedAssertions(){let t=[];return this.assertions.forEach((e,i)=>{e.reached||t.push(e)}),t}}const ys=class ys extends we{constructor(){super("This",oe.instance,"This",null)}static this(){return ys._this||(ys._this=new ys),ys._this}isGenericVariant(){return!1}isGenericTypeParameter(){return!1}canExplicitlyCastTo(t){return!1}canImplicitlyCastTo(t){return!1}getFields(){return[]}getOwnMethods(){return[]}getAllMethods(){return[]}getField(t,e,i){}getCompletionItems(t,e,i,n,s,a){return[]}getCopyWithConcreteType(t){return this}toString(){return"This"}getAbsoluteName(){return"This"}getCompletionItemDetail(){return"This"}getDeclaration(){return"This"}};r(ys,"_this"),r(ys,"identifier","This");let La=ys;class Ui extends qh{constructor(e,i,n,s=p.keywordPublic){super(e,i,n);r(this,"isStatic",!1);r(this,"isFinal",!1);r(this,"isAbstract",!1);r(this,"isConstructor",!1);r(this,"isDefault",!1);r(this,"isSynchronized",!1);r(this,"annotations",[]);r(this,"program");r(this,"parameters",[]);r(this,"hasOuterClassParameter",!1);r(this,"template");r(this,"constantFoldingFunction");r(this,"returnParameterType");r(this,"implementedMethod");r(this,"internalNameCache",{});r(this,"internalNameCacheWithGenericParameterIdentifiers",{});r(this,"hasImplementationWithNativeCallingConvention",!1);r(this,"classEnumInterface");r(this,"programStub");r(this,"callbackAfterCodeGeneration",[]);r(this,"isCopyOf");this.visibility=s}canTakeNumberOfParameters(e){return this.parameters.length==0?e==0:this.parameters[this.parameters.length-1].isEllipsis?e>=this.parameters.length-1:e==this.parameters.length}getCopyWithConcreteType(e,i){let n=!1,s=[];for(let h of this.parameters){let u=h.getCopyWithConcreteType(e);s.push(u),u!=h&&(n=!0)}let a=this.returnParameterType;if(this.returnParameterType&&!this.returnParameterType.isPrimitive&&(a=this.returnParameterType.getCopyWithConcreteType(e)),a!=this.returnParameterType&&(n=!0),!n)return this;let l=new Ui(this.identifier,this.identifierRange,this.module,this.visibility);return l.isConstructor=this.isConstructor,l.isFinal=this.isFinal,l.isAbstract=this.isAbstract,l.isDefault=this.isDefault,l.hasOuterClassParameter=this.hasOuterClassParameter,l.parameters=s,l.returnParameterType=a,l.hasImplementationWithNativeCallingConvention=this.hasImplementationWithNativeCallingConvention,l.template=this.template,l.classEnumInterface=i,l.isCopyOf=this,l.documentation=this.documentation,l.isStatic=this.isStatic,this.getInternalName("java"),this.getInternalName("native"),l.internalNameCacheWithGenericParameterIdentifiers=this.internalNameCache,l}getCopy(){let e=[];for(let n of this.parameters)e.push(n.getCopy());let i=new Ui(this.identifier,this.identifierRange,this.module,this.visibility);return i.isConstructor=this.isConstructor,i.isFinal=this.isFinal,i.isAbstract=this.isAbstract,i.returnParameterType=this.returnParameterType,i.parameters=e,i.isCopyOf=this,i.classEnumInterface=this.classEnumInterface,i.isStatic=this.isStatic,i}getInternalName(e){if(!this.internalNameCache[e]){let i=e=="java"?"j":"n",s=`_${this.isConstructor?"c":"m"}${i}$${this.isConstructor?"_constructor_":this.identifier.replace(/\./g,"_")}$${this.returnParameterType?this.returnParameterType.getInternalName():"void"}$`;s+=this.parameters.map(a=>a.type.getInternalName()).join("$"),this.internalNameCache[e]=s}return this.internalNameCache[e]}getInternalNameWithGenericParameterIdentifiers(e){return this.internalNameCacheWithGenericParameterIdentifiers[e]||(this.internalNameCacheWithGenericParameterIdentifiers[e]=this.getInternalName(e)),this.internalNameCacheWithGenericParameterIdentifiers[e]}takeInternalJavaNameWithGenericParamterIdentifiersFrom(e){this.internalNameCacheWithGenericParameterIdentifiers.java=e.getInternalNameWithGenericParameterIdentifiers("java")}getSignature(){var e;if(this.isConstructor)return this.identifier+"("+this.parameters.map(i=>i.type.identifier).join(", ")+")";{let i=(e=this.returnParameterType)==null?void 0:e.identifier;return this.returnParameterType==La.this()&&(i=this.classEnumInterface.identifier),i+" "+this.identifier+"("+this.parameters.map(n=>n.type.identifier).join(", ")+")"}}getSignatureWithoutReturnParameter(){return this.isConstructor?this.identifier+"("+this.parameters.map(e=>e.type.identifier).join(", ")+")":this.identifier+"("+this.parameters.map(e=>e.type.identifier).join(", ")+")"}getDeclaration(e){var n;let i=$e[this.visibility]+" ";if(this.isStatic&&(i+="static "),this.isFinal&&(i+="final "),!this.isConstructor){let s=(n=this.returnParameterType)==null?void 0:n.toString();this.returnParameterType==La.this()&&(s=e||this.classEnumInterface.identifier),i+=s+" "}return i+=this.identifier,i+"("+this.parameters.map(s=>s.getDeclaration()).join(", ")+")"}getPathWithMethodIdentifier(){return this.classEnumInterface.pathAndIdentifierAsDotSeparatedString+"."+this.getInternalNameWithGenericParameterIdentifiers("java")}getCompletionLabel(e=!0){let i="";i+=this.identifier+"(";let n=this.parameters;for(let s=0;si.identifier==e)!=null}getAnnotation(e){return this.annotations.find(i=>i.identifier==e)}setAnnotations(e){this.annotations=e}getType(){return this.returnParameterType}isMainMethod(){return this.identifier.startsWith(os.mainMethodIdentifier)}}class Ma extends Ui{constructor(t,e,i,n=p.keywordPublic,s){super(t,e,i,n),this.genericTypeParameters=s}initCatches(){for(let t of this.genericTypeParameters)t.catches=[]}checkCatches(t){let e=[];for(let i of this.genericTypeParameters)i.checkCatches(e,t);return e}getNonGenericCopyWithConcreteTypes(){let t=new Map,e=!1;for(let i of this.genericTypeParameters)i.catches[0]?t.set(i,i.catches[0]):e=!0;return e?this.getCopyWithConcreteType(t,this.classEnumInterface):super.getCopyWithConcreteType(t,this.classEnumInterface)}getNonGenericCopyOfReturnParameterType(){if(!this.returnParameterType)return;if(this.returnParameterType.isPrimitive)return this.returnParameterType;let t=new Map;for(let e of this.genericTypeParameters)e.catches[0]&&t.set(e,e.catches[0]);return this.returnParameterType.getCopyWithConcreteType(t)}getCopyWithConcreteType(t,e){let i=[];for(let h of this.genericTypeParameters){let u=h.getCopyWithConcreteType(t);i.push(u),t.set(h,u)}let n=!1,s=[];for(let h of this.parameters){let u=h.getCopyWithConcreteType(t);s.push(u),u!=h&&(n=!0)}let a=this.returnParameterType;if(this.returnParameterType&&!this.returnParameterType.isPrimitive&&(a=this.returnParameterType.getCopyWithConcreteType(t)),a!=this.returnParameterType&&(n=!0),!n)return this;let l=new Ma(this.identifier,this.identifierRange,this.module,this.visibility,i);return l.isConstructor=this.isConstructor,l.isFinal=this.isFinal,l.isAbstract=this.isAbstract,l.isDefault=this.isDefault,l.hasOuterClassParameter=this.hasOuterClassParameter,l.parameters=s,l.returnParameterType=a,l.hasImplementationWithNativeCallingConvention=this.hasImplementationWithNativeCallingConvention,l.template=this.template,l.classEnumInterface=e,l.isCopyOf=this,l.documentation=this.documentation,l.isStatic=this.isStatic,this.getInternalName("java"),this.getInternalName("native"),l.internalNameCacheWithGenericParameterIdentifiers=this.internalNameCache,l}getDeclaration(){var e;let t=$e[this.visibility]+" ";return this.isStatic&&(t+="static "),this.isFinal&&(t+="final "),t+="<"+this.genericTypeParameters.map(i=>i.identifier).join(", ")+"> ",t+=((e=this.returnParameterType)==null?void 0:e.toString())+" "+this.identifier,t+"("+this.parameters.map(i=>i.getDeclaration()).join(", ")+")"}}class Mb{constructor(t,e,i){this.symbol=t,this.file=e,this.range=i}}class Sp{constructor(t){r(this,"lineToUsagePositionListMap",new Map);r(this,"symbolToUsagePositionListMap",new Map);r(this,"dependsOnModules",new Map);this.module=t}clear(){this.lineToUsagePositionListMap.clear(),this.symbolToUsagePositionListMap.clear(),this.dependsOnModules.clear()}registerUsagePosition(t,e,i){if(!i)return;if(t instanceof Ui&&t.implementedMethod){t.implementedMethod.module.prepareSystemModule?this.module.systemSymbolsUsageTracker.registerUsagePosition(t.implementedMethod,this.module.file,i):this.module.compiledSymbolsUsageTracker.registerUsagePosition(t.implementedMethod,this.module.file,i);return}let n=new Mb(t,e,i);for(let a=i.startLineNumber;a<=i.endLineNumber;a++){let l=this.lineToUsagePositionListMap.get(a);l||(l=[],this.lineToUsagePositionListMap.set(a,l)),l.push(n)}let s=this.symbolToUsagePositionListMap.get(t);s||(s=[],this.symbolToUsagePositionListMap.set(t,s)),s.push(n),t.module.isLibraryModule||this.dependsOnModules.set(t.module,!0)}findSymbolAtPosition(t){let e=this.lineToUsagePositionListMap.get(t.lineNumber);if(!e)return;let i;for(let n of e)U.containsPosition(n.range,t)&&(i==null||n.range.endColumn-n.range.startColumn<=i.range.endColumn-i.range.startColumn)&&(i=n);return i}getUsagePositionsForSymbol(t){return this.symbolToUsagePositionListMap.get(t)}getModulesWhichThisModuleDependsOn(){let t=[];return this.dependsOnModules.forEach((e,i)=>{t.push(i)}),t}getDependsOnModulesDebugInformation(){let t="";return this.dependsOnModules.forEach((e,i)=>{e.toString().length>0&&(t+="Depends on module "+i.file.name+`: `,t+=e.toString())}),t}existsDependencyToOtherDirtyModule(){for(let t of this.dependsOnModules.entries())if(t[0].isDirty())return!0;return!1}existsDependencyToOtherModuleWithErrors(){for(let t of this.dependsOnModules.entries())if(t[0].dependsOnModuleWithErrorsFlag)return!0;return!1}existsDependencyToModule(t){return this.dependsOnModules.get(t)==!0}}var Dh,ug;class Zm{constructor(t,e){J(this,Dh);r(this,"errors",[]);r(this,"bracketError");r(this,"colorInformation",[]);r(this,"quickfixes",[]);r(this,"lastCompiledMonacoVersion",-2);r(this,"programsToCompileToFunctions",[]);r(this,"compiledSymbolsUsageTracker",new Sp(this));r(this,"systemSymbolsUsageTracker",new Sp(this));r(this,"returnType");r(this,"dependsOnModuleWithErrorsFlag",!1);this.file=t,this.isLibraryModule=e}isStartable(){return this.hasMainProgram()?!this.hasErrors()&&!this.isDirty()&&!this.dependsOnModuleWithErrorsFlag:!1}hasErrors(){return!!this.errors.find(t=>t.level=="error")}getLastCompiledMonacoVersion(){return this.lastCompiledMonacoVersion}findSymbolAtPosition(t){let e=this.compiledSymbolsUsageTracker.findSymbolAtPosition(t);return e||this.systemSymbolsUsageTracker.findSymbolAtPosition(t)}registerTypeUsage(t,e){t.module.isLibraryModule?this.systemSymbolsUsageTracker.registerUsagePosition(t,this.file,e):this.compiledSymbolsUsageTracker.registerUsagePosition(t,this.file,e)}findStep(t){let e;for(let i of this.programsToCompileToFunctions){let n=i.findStep(t);n&&(e?Math.abs(n.range.startLineNumber-t)1}setDirty(t){t?this.lastCompiledMonacoVersion=this.file.getLocalVersion()-1:this.lastCompiledMonacoVersion=this.file.getLocalVersion()}getSortedAndFilteredErrors(){const t=this.errors.slice();t.sort((e,i)=>U.compareRangesUsingStarts(e.range,i.range));for(let e=0;en.range.startColumn&&(re(this,Dh,ug).call(this,i.level,n.level)==1?t.splice(e+1,1):t.splice(e,1),e--)}return t}}Dh=new WeakSet,ug=function(t,e){return t=="error"?1:e=="error"?-1:t=="warning"?1:e=="warning"?-1:1};class Xm extends Zm{constructor(){super(...arguments);r(this,"types",[]);r(this,"codeReachedAssertions",new cg)}registerTypesAtTypestore(e){for(let i of this.types)e.addType(i)}hasMainProgram(){return!1}startMainProgram(e,i){return!1}}class $r extends Xm{constructor(e,i){super(e,!1);r(this,"tokens");r(this,"ast");r(this,"mainClass");r(this,"errors",[]);r(this,"symbolTables",[]);r(this,"typePositions",{});r(this,"methodCallPositions",{});r(this,"methodDeclarationRanges",[]);r(this,"inlayHints",[]);r(this,"hasDependencyInjectionAnnotations",!1);r(this,"importedTypes",new Map);r(this,"imports",[]);this.moduleManager=i}getCodeFragments(){var n;let e=[],i=(n=this.mainClass)==null?void 0:n.resolvedType;i&&this.types.indexOf(i)<0&&this.getCodeFragmentsForType(i,e);for(let s of this.types)s instanceof we&&this.getCodeFragmentsForType(s,e);return e}getCodeFragmentsForType(e,i){e.staticInitializer&&e.staticInitializer.stepsSingle.length>0&&i.push({type:e,signature:hg.staticInitializerComment(),program:e.staticInitializer,methodDeclarationRange:e.identifierRange});for(let n of e.getOwnMethods())n.program&&i.push({type:e,signature:n.getSignature(),program:n.program,methodDeclarationRange:n.identifierRange})}isReplModule(){return!1}storeLexerOutput(e){this.tokens=e.tokens,this.errors=e.errors,this.colorInformation=e.colorInformation}addTypePosition(e,i){if(i instanceof we||i instanceof ei||i instanceof Ie||i instanceof ti){let n=this.typePositions[e.lineNumber];n==null&&(n=[],this.typePositions[e.lineNumber]=n),n.push({type:i,position:e})}}getTypeAtPosition(e,i){var n,s;return(s=(n=this.typePositions[e])==null?void 0:n.find(a=>a.position.column==i))==null?void 0:s.type}findSteps(e){let i=this.types;this.mainClass&&(i=this.types.slice(),i.push(this.mainClass.resolvedType));for(let n of i)if(n instanceof we){if(n.staticInitializer){let a=n.staticInitializer.findStep(e);if(a)return[a]}let s=[];for(let a of n.getOwnMethods())if(a.program){let l=a.program.findStep(e);l&&s.push(l)}return s}return[]}clearAllBreakpoints(){var e;for(let i of this.programsToCompileToFunctions)for(let n of i.stepsSingle)n.clearBreakpoint((e=n.range)==null?void 0:e.startLineNumber)}resetBeforeCompilation(){this.tokens=void 0,this.ast=void 0,this.types=[],this.errors=[],this.compiledSymbolsUsageTracker.clear(),this.systemSymbolsUsageTracker.clear(),this.typePositions={},this.methodCallPositions={},this.symbolTables=[],this.methodDeclarationRanges=[],this.quickfixes=[],this.inlayHints=[],this.importedTypes.clear(),this.imports=[]}hasMainProgram(){return this.getClassWithStartableMainMethod()!=null}getClassWithStartableMainMethod(){if(this.mainClass){let e=this.mainClass.methods.find(i=>i.identifier==os.mainMethodIdentifier);if(e&&e.statement.statements.length>1)return this.mainClass.resolvedType}if(this.ast){for(let e of this.ast.innerTypes)if(!(e.kind!=p.keywordClass||e.isMainClass||!e.resolvedType)&&e.resolvedType.getMainMethod())return e.resolvedType}}startMainProgram(e,i){let n=this.getClassWithStartableMainMethod();if(!n)return!1;let s=n.runtimeClass;if(!s)return!1;let a=n.getMainMethod();if(!a)return!1;let l=s[a.getInternalNameWithGenericParameterIdentifiers("java")];if(!l)return!1;let h=s;if(l.call(h,e,e.s),i){let u=e.programStack[e.programStack.length-1];if(u){let m=u.currentStepList.find(g=>g.range.startLineNumber>=0);m&&m.setBreakpoint(m.range.startLineNumber,!0)}}return!0}dependsOnOtherDirtyModule(){return this.compiledSymbolsUsageTracker.existsDependencyToOtherDirtyModule()}dependsOnModuleWithErrors(){return this.compiledSymbolsUsageTracker.existsDependencyToOtherModuleWithErrors()}dependsOnModule(e){return this.compiledSymbolsUsageTracker.existsDependencyToModule(e)}findSymbolTableAtPosition(e){let i,n=Number.MAX_SAFE_INTEGER;for(let s of this.symbolTables){let a=s.findSymbolTableAtPosition(e);if(a){let l=a.range.endLineNumber-a.range.startLineNumber+1;l" "+n.getDeclaration()+`{ //TODO! } `).join(` `)},versionId:t.getVersionId()}]}}}}class on{static quickArrayOutput(t,e,i,n){let s={text:""};return this.quickArrayOutputHelper(t,s,e,i,n),s.text}static quickArrayOutputHelper(t,e,i,n,s){let a=0;for(e.text+="[";a",">"),g&&(u=`${u}`)}e.text+=u}a!l.hiddenWhenDebugging),a=0;for(;a(c[c.new=0]="new",c[c.running=1]="running",c[c.stoppedAtBreakpoint=2]="stoppedAtBreakpoint",c[c.runnable=3]="runnable",c[c.waiting=4]="waiting",c[c.timedWaiting=5]="timedWaiting",c[c.terminated=6]="terminated",c[c.terminatedWithException=7]="terminatedWithException",c[c.immediatelyAfterReplStatement=8]="immediatelyAfterReplStatement",c[c.changeSpeedRequested=9]="changeSpeedRequested",c))(F||{});const bn=class bn{constructor(){r(this,"runnableOrWaitingThreads");r(this,"threadHoldingLockToThisObject");r(this,"reentranceCounter")}_mj$wait$void$(t,e,i){this.threadHoldingLockToThisObject!=t&&this.throwIllegalMonitorException(t,v.threadWantsToWaitAndHasNoLockOnObject());let n=this;i?(t.state=F.timedWaiting,setTimeout(()=>{t.state==F.timedWaiting&&(t.state=F.runnable),this.threadHoldingLockToThisObject||this.restoreOneRunnalbeThreadToRunning()},i)):t.state=F.waiting,n.runnableOrWaitingThreads||(n.runnableOrWaitingThreads=[]),n.runnableOrWaitingThreads.indexOf(t)<0&&n.runnableOrWaitingThreads.push(t),this.threadHoldingLockToThisObject=void 0,t.lastReentrenceCounter=this.reentranceCounter,this.reentranceCounter=void 0,t.scheduler.suspendThread(t),this.restoreOneRunnalbeThreadToRunning(),e&&e()}_mj$notify$void$(t,e){if(this.threadHoldingLockToThisObject!=t&&this.throwIllegalMonitorException(t,v.threadWantsToNotifyAndHasNoLockOnObject()),this.runnableOrWaitingThreads){for(let i=0;i=0){this.runnableOrWaitingThreads[i].state=F.runnable;break}}e&&e()}_mj$notifyAll$void$(t,e){if(this.threadHoldingLockToThisObject!=t&&this.throwIllegalMonitorException(t,v.threadWantsToNotifyAndHasNoLockOnObject()),this.runnableOrWaitingThreads)for(let i of this.runnableOrWaitingThreads)i.state=F.runnable;e&&e()}restoreOneRunnalbeThreadToRunning(){if(this.runnableOrWaitingThreads)for(let t=0;t0,this.reentranceCounter++,t.registerEnteringSynchronizedBlock(this),1)}leaveSynchronizedBlock(t,e=!0){this.reentranceCounter--,this.reentranceCounter<=0&&(this.reentranceCounter<0&&console.error("Thread "+t.name+" left synchronized block with reentranceCounter = "+this.reentranceCounter),e&&t.registerLeavingSynchronizedBlock(),this.threadHoldingLockToThisObject=void 0,this.reentranceCounter=void 0,t.lastReentrenceCounter=void 0,this.restoreOneRunnalbeThreadToRunning())}__internalHashCode(){return this}};r(bn,"__javaDeclarations",[{type:"declaration",signature:"class Object"},{type:"method",signature:"public Object()",native:bn.prototype._constructor},{type:"method",signature:"public String toString()",java:bn.prototype._mj$toString$String$,comment:o.objectToStringComment},{type:"method",signature:"public boolean equals(Object otherObject)",java:bn.prototype._mj$equals$boolean$Object,comment:o.objectEqualsComment},{type:"method",signature:"public final void wait()",java:bn.prototype._mj$wait$void$,comment:o.objectWaitComment},{type:"method",signature:"public final void wait(long milliseconds)",java:bn.prototype._mj$wait$void$,comment:o.objectWaitWithTimeoutComment},{type:"method",signature:"public final void notify()",java:bn.prototype._mj$notify$void$,comment:o.objectNotifyComment},{type:"method",signature:"public final void notifyAll()",java:bn.prototype._mj$notifyAll$void$,comment:o.objectNotifyAllComment},{type:"method",signature:"public final Class getClass()",native:bn.prototype._getClass,comment:o.objectGetClassComment}]),r(bn,"type");let R=bn;const se=class se extends R{constructor(e){super();r(this,"value");this.value=e||""}debugOutput(){return JSON.stringify(this.value)}__internalHashCode(){return this.value}_emptyConstructor(){return this}_constructor2(e){return this.value=e,this}_constructor3(e){return this.value=e.join(""),this}_nSplit(e){return this.value.split(new RegExp(e,""))}_nToString(){return this}_nLength(){return this.value.length}_nIndexOf1(e){return this.value.indexOf(e)}_nIndexOf2(e,i){return this.value.indexOf(e,i)}_nLastIndexOf1(e){return this.value.lastIndexOf(e)}_nLastIndexOf2(e,i){return this.value.lastIndexOf(e,i)}_nCharAt(e){return e<0||e>this.value.length-1?"":this.value.charAt(e)}_nConcat(e){return this.value.concat(e)}_nContains(e){return this.value.indexOf(e)>=0}_nEndsWith(e){return this.value.endsWith(e)}_nStartsWith(e){return this.value.startsWith(e)}_nEqualsIgnoreCase(e){return e==null?!1:this.value.toLocaleUpperCase()==e.toLocaleUpperCase()}_nIsEmpty(){return this.value.length==0}_nToLowerCase(){return this.value.toLocaleLowerCase()}_nToUpperCase(){return this.value.toLocaleUpperCase()}_nSubstring1(e){return this.value.substring(e)}_nSubstring2(e,i){return this.value.substring(e,i)}_nTrim(){return this.value.trim()}_nReplace(e,i){return this.value.replace(e,()=>i)}_nReplaceAll(e,i){return this.value.replace(new RegExp(e,"g"),()=>i)}_nReplaceFirst(e,i){return this.value.replace(new RegExp(e,""),()=>i)}_nMatches(e){return this.value==null?!1:new RegExp("^(?:"+e+")$").test(this.value)}add(e){return new se(this.value+e)}_mj$equals$boolean$Object(e,i,n){let s=!1;n instanceof se&&(s=this.value==n.value),e.s.push(s),i&&i()}_mj$compareTo$int$T(e,i,n){if(n===null)throw new e.classes.NullPointerException(o.stringCompareToNullpointerException());e.s.push(this.value.localeCompare(n.value)),i&&i()}_mj$compareToIgnoreCase$int$T(e,i,n){if(n===null)throw new e.classes.NullPointerException(o.stringCompareToNullpointerException());e.s.push(this.value.localeCompare(n.value,void 0,{sensitivity:"accent"})),i&&i()}_nHashCode(){return Array.from(this.value).reduce((e,i)=>Math.imul(31,e)+i.charCodeAt(0)|0,0)}_nToCharArray(){return Array.from(this.value)}_valueOf(e){return""+e}_valueOfCharArray(e){return e==null?"":e.join("")}_mj$valueOfObject$String$Object(e,i){if(i==null)return"null";i._mj$toString$String$(e,()=>{})}};r(se,"isPrimitiveTypeWrapper",!0),r(se,"__javaDeclarations",[{type:"declaration",signature:"final class String extends Object implements Comparable",comment:o.stringClassComment},{type:"method",signature:"public String()",native:se.prototype._emptyConstructor,comment:o.stringConstructorComment},{type:"method",signature:"public String(String original)",native:se.prototype._constructor2,comment:o.stringConstructorComment2},{type:"method",signature:"public String(char[] value)",native:se.prototype._constructor3,comment:o.stringConstructorComment3},{type:"method",signature:"public final String toString()",native:se.prototype._nToString,template:"§1",comment:o.objectToStringComment},{type:"method",signature:"public final int length()",native:se.prototype._nLength,template:"§1.value.length",comment:o.stringLengthComment},{type:"method",signature:"public final int indexOf(string str)",native:se.prototype._nIndexOf1,template:"§1.value.indexOf(§2)",comment:o.stringIndexOfComment1},{type:"method",signature:"public final int indexOf(string str, int fromIndex)",native:se.prototype._nIndexOf2,template:"§1.value.indexOf(§2, §3)",comment:o.stringIndexOfComment2},{type:"method",signature:"public final int indexOf(char c)",native:se.prototype._nIndexOf1,template:"§1.value.indexOf(§2)",comment:o.stringIndexOfComment3},{type:"method",signature:"public final int indexOf(char c, int fromIndex)",native:se.prototype._nIndexOf2,template:"§1.value.indexOf(§2, §3)",comment:o.stringIndexOfComment4},{type:"method",signature:"public final char charAt(int index)",native:se.prototype._nCharAt,template:`(§1.value.charAt(§2) || __t.IOBE("String charAt: ${v.charIndexOutOfBounds()}."))`,comment:o.stringCharAtComment},{type:"method",signature:"public final int compareTo(String otherString)",java:se.prototype._mj$compareTo$int$T,comment:o.comparableCompareToComment},{type:"method",signature:"public final int compareToIgnoreCase(String otherString)",java:se.prototype._mj$compareToIgnoreCase$int$T,comment:o.compareToIgnoreCaseComment},{type:"method",signature:"public final string concat(string otherString)",native:se.prototype._nConcat,template:"§1.value.concat(§2)",comment:o.stringConcatComment},{type:"method",signature:"public final boolean contains(string otherString)",native:se.prototype._nContains,template:"(§1.value.indexOf(§2) >= 0)",comment:o.stringContainsComment},{type:"method",signature:"public final boolean endsWith(string otherString)",native:se.prototype._nEndsWith,template:"§1.value.endsWith(§2)",comment:o.stringEndsWithComment},{type:"method",signature:"public final boolean startsWith(string otherString)",native:se.prototype._nStartsWith,template:"§1.value.startsWith(§2)",comment:o.stringStartsWithComment},{type:"method",signature:"public boolean equals(Object otherObject)",java:se.prototype._mj$equals$boolean$Object,comment:o.objectEqualsComment},{type:"method",signature:"public boolean equals(String otherObject)",java:se.prototype._mj$equals$boolean$Object,comment:o.objectEqualsComment},{type:"method",signature:"public final boolean equalsIgnoreCase(string otherString)",native:se.prototype._nEqualsIgnoreCase,template:"§1.value.toLocaleUpperCase() == §2.toLocaleUpperCase()",comment:o.stringEqualsIgnoreCaseComment},{type:"method",signature:"public final boolean isEmpty()",native:se.prototype._nIsEmpty,template:"(§1.value.length == 0)",comment:o.stringIsEmptyComment},{type:"method",signature:"public final int lastIndexOf(string str)",native:se.prototype._nLastIndexOf1,template:"§1.value.lastIndexOf(§2)",comment:o.stringLastIndexOfComment1},{type:"method",signature:"public final int lastIndexOf(string str, int fromIndex)",native:se.prototype._nLastIndexOf2,template:"§1.value.lastIndexOf(§2, §3)",comment:o.stringLastIndexOfComment2},{type:"method",signature:"public final int lastIndexOf(char c)",native:se.prototype._nLastIndexOf1,template:"§1.value.lastIndexOf(§2)",comment:o.stringLastIndexOfComment3},{type:"method",signature:"public final int lastIndexOf(char c, int fromIndex)",native:se.prototype._nLastIndexOf2,template:"§1.value.lastIndexOf(§2, §3)",comment:o.stringLastIndexOfComment4},{type:"method",signature:"public final string toLowerCase()",native:se.prototype._nToLowerCase,template:"§1.value.toLocaleLowerCase()",comment:o.stringToLowerCaseComment},{type:"method",signature:"public final string toUpperCase()",native:se.prototype._nToUpperCase,template:"§1.value.toLocaleUpperCase()",comment:o.stringToUpperCaseComment},{type:"method",signature:"public final string substring(int beginIndex)",native:se.prototype._nSubstring1,template:"§1.value.substring(§2)",comment:o.stringSubstringComment1},{type:"method",signature:"public final string substring(int beginIndex, int endIndex)",native:se.prototype._nSubstring2,template:"§1.value.substring(§2, §3)",comment:o.stringSubstringComment2},{type:"method",signature:"public final string trim()",native:se.prototype._nTrim,template:"§1.value.trim()",comment:o.stringTrimComment},{type:"method",signature:"public final string replace(string target, string replacement)",native:se.prototype._nReplace,template:"§1.value.replace(§2, §3)",comment:o.stringReplaceComment},{type:"method",signature:"public final string replaceAll(string regex, string replacement)",native:se.prototype._nReplaceAll,template:"§1.value.replace(new RegExp(§2, 'g'), §3)",comment:o.stringReplaceAllComment},{type:"method",signature:"public final boolean matches(string regex)",native:se.prototype._nMatches,comment:o.stringMatchesComment},{type:"method",signature:"public final string replaceFirst(string regex, string replacement)",native:se.prototype._nReplaceFirst,template:"§1.value.replace(new RegExp(§2, ''), §3)",comment:o.stringReplaceFirstComment},{type:"method",signature:"public final string[] split(string regex)",native:se.prototype._nSplit,comment:o.stringSplitComment},{type:"method",signature:"public final int hashCode()",native:se.prototype._nHashCode,template:"Array.from(§1.value).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)",comment:o.hashCodeComment},{type:"method",signature:"public final char[] toCharArray()",native:se.prototype._nToCharArray,template:"Array.from(§1.value)",comment:o.stringToCharArrayComment},{type:"method",signature:"public static string valueOf(boolean b)",native:se.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(char c)",native:se.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(int i)",native:se.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(long l)",native:se.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(float f)",native:se.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(double d)",native:se.prototype._valueOf,template:'("" + §1)',comment:o.stringValueOfComment},{type:"method",signature:"public static string valueOf(char[] data)",native:se.prototype._valueOfCharArray,comment:o.stringValueOfComment},{type:"method",signature:"public static String valueOf(Object o)",java:se.prototype._mj$valueOfObject$String$Object,comment:o.stringValueOfComment}]),r(se,"type"),r(se,"null",new se("null"));let Y=se;const rl=class rl extends R{constructor(t){super(),this.type=t}_getName(){return this.type.identifier}};r(rl,"__javaDeclarations",[{type:"declaration",signature:"class Class",comment:o.classClassComment},{type:"method",signature:"string getName()",native:rl.prototype._getName,comment:o.classGetNameComment}]),r(rl,"type");let Vd=rl;class ep extends we{constructor(e,i,n,s){super(e,i,n,s);r(this,"instanceInitializer",[]);r(this,"classObject");this.initClassObject()}initClassObject(){this.classObject=new Vd(this)}getClassObject(){return this.classObject}}class mt extends ep{constructor(t,e,i,n){super(t,e,i,n),this.isPrimitive=!1}getOwnAndInheritedFields(){let t=this.getFields(),e=this.getExtends();return e&&(t=t.concat(e.getOwnAndInheritedFields())),t}getCompletionItemDetail(){return v.class()}getCompletionItems(t,e,i,n,s,a){let l=[];for(let h of this.getFields().filter(u=>u.visibility<=t&&(u._isStatic||!a))){let u=this.identifier=="Color"&&h._isStatic;if(l.push({label:h.identifier,kind:u?P.CompletionItemKind.Color:P.CompletionItemKind.Field,detail:u?Ke.intColorToHexRGB(Ke.predefinedColors[h.identifier]):h.type?h.type.toString():"",insertText:h.identifier,range:n,documentation:h.documentation==null?void 0:{value:typeof h.documentation=="string"?h.documentation:h.documentation()},signature:h.toString()}),h!=null&&h.type&&h.type.dimension!==void 0){let m=h.type.dimension;l.push({label:h.identifier+"[]".repeat(m),kind:P.CompletionItemKind.Field,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,detail:h.getDeclaration(),insertText:h.identifier+this.getArraySnippetEnding(m),filterText:h.identifier,range:n})}}for(let h of this.getOwnMethods().filter(u=>(u.classEnumInterface==this||u.visibility!=p.keywordPrivate)&&(u.isStatic||!a))){if(h.isConstructor)if(s!=null&&s.isConstructor&&s!=h&&h.classEnumInterface==this.getExtends()){this.pushSuperCompletionItem(l,h,e,n);continue}else continue;l.push({label:h.getCompletionLabel(),filterText:h.identifier,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},detail:h.returnParameterType?h.returnParameterType.getDeclaration():"void",kind:P.CompletionItemKind.Method,insertText:h.getCompletionSnippet(e),range:n,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,documentation:h.documentation==null?void 0:{value:typeof h.documentation=="string"?h.documentation:h.documentation()},sortText:h.identifier,signature:h.getSignature()})}if(this.getExtends()&&(t==p.keywordPrivate&&(t=p.keywordProtected),l=l.concat(this.getExtends().getCompletionItems(t,e,i,n,s,a))),this.isMainClass){let h=["args","$main","fromJson","class"];l=l.filter(u=>!(h.indexOf(u.filterText)>=0||h.indexOf(u.insertText)>=0))}return l}pushSuperCompletionItem(t,e,i,n){t.push({label:e.getCompletionLabel().replace(e.identifier,"super"),filterText:"super",command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},kind:P.CompletionItemKind.Method,insertText:e.getCompletionSnippet(i).replace(e.identifier,"super"),range:n,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,documentation:e.documentation==null?void 0:{value:typeof e.documentation=="string"?e.documentation:e.documentation()}})}findImplementedInterface(t){var e;for(let i of this.getImplements()){let n=i.findImplementedInterface(t);if(n)return n}if(this.getExtends())return(e=this.getExtends())==null?void 0:e.findImplementedInterface(t)}getField(t,e,i=!1){let n=this.getFields().find(a=>a.identifier==t&&a.visibility<=e&&(a._isStatic||!i));if(n)return n;e==p.keywordPrivate&&(e=p.keywordProtected);let s=this.getExtends();if(s)return s.getField(t,e,i)}toString(){let t=this.identifier;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.toString()).join(", ")+">"),t}getAbsoluteName(){let t=this.pathAndIdentifierAsDotSeparatedString;return this.genericTypeParameters&&this.genericTypeParameters.length>0&&(t+="<"+this.genericTypeParameters.map(e=>e.getAbsoluteName()).join(", ")+">"),t}hasAncestorOrIs(t){if(this==t)return!0;let e=this.getExtends();return e==null?!1:e==t?!0:e.hasAncestorOrIs(t)}findMethodWithSignature(t){let e=t.identifier,i=t.parameters.length;for(let n of this.getOwnMethods())if(n.identifier==e&&n.parameters.length==i){let s=!0;for(let a=0;a0){let i=v.abstractMethodsNotImplemented(this.identifier,e.map(s=>s.getSignature()).join(", ")),n={message:i.message,id:i.id,level:"error",range:this.identifierRange};this.module.errors.push(n),this.module instanceof $r&&this.module.quickfixes.push(new Tp(this,e,this.extends,n))}}}takeSignaturesFromOverriddenMethods(e){let i=this.getExtends(),n=i==null?void 0:i.getAllMethods();if(n)for(let s of this.methods){let a=s.getInternalName("java"),l=n==null?void 0:n.filter(u=>u.getInternalName("java")==a);if(l.length>0){let u=l[0];if(s.takeInternalJavaNameWithGenericParamterIdentifiersFrom(u),u.isFinal){let m=v.methodOverridesFinalMethod(s.getSignature(),u.classEnumInterface.identifier);s.classEnumInterface.module.errors.push({message:m.message,id:m.id,level:"error",range:s.identifierRange})}}l.forEach(u=>e[u.getPathWithMethodIdentifier()]=!0);let h=s.annotations.find(u=>u.identifier=="Override");if(h&&l.length==0){let u=v.overrideAnnotationNotNecessary(s.getSignature());s.classEnumInterface.module.errors.push({message:u.message,id:u.id,level:"warning",range:h.range})}}}checkIfInterfacesAreImplementedAndSupplementDefaultMethods(){for(let e of this.getImplements()){let i=e,n=[];for(let s of i.getOwnMethods()){let a=this.findMethodWithSignature(s);if(a)a.takeInternalJavaNameWithGenericParamterIdentifiersFrom(s),a.implementedMethod=s;else if(s.isDefault){let l=s.getCopy();this.methods.push(l);let h=()=>{let u=this.runtimeClass,m=i.runtimeClass,g=l.getInternalNameWithGenericParameterIdentifiers("java");u.prototype[g]=m.prototype[g]};this.isLibraryType?h():s.callbackAfterCodeGeneration.push(h)}else n.push(s)}if(n.length>0){let s=v.interfaceMethodsNotImplemented(this.identifier,i.identifier,n.map(l=>l.getSignature()).join(", ")),a={message:s.message,id:s.id,level:"error",range:this.identifierRange};this.module.errors.push(a),this.module instanceof $r&&this.module.quickfixes.push(new Tp(this,n,i,a))}}}isGenericVariant(){return!1}isGenericTypeParameter(){return!1}setExtends(e){this.extends=e}addImplements(e){Array.isArray(e)||(e=[e]),this.implements=this.implements.concat(e)}getCopyWithConcreteType(e){return this.genericTypeParameters.length==0?this:new di(this,e)}getExtends(){return this.extends}getImplements(){return this.implements}getAllImplementedInterfaces(){if(!this.cachedAllImplementedInterfaces){this.cachedAllImplementedInterfaces=[];for(let i of this.getImplements())this.cachedAllImplementedInterfaces.push(i),this.cachedAllImplementedInterfaces=this.cachedAllImplementedInterfaces.concat(i.getAllImplementedInterfaces());let e=this.getExtends();e&&(this.cachedAllImplementedInterfaces=this.cachedAllImplementedInterfaces.concat(e.getAllImplementedInterfaces()))}return this.cachedAllImplementedInterfaces}isAbstract(){return this._isAbstract}getFields(){return this.fields}getOwnMethods(){return this.methods}getAllMethods(){var e;return this.extends?this.methods.concat((e=this.extends)==null?void 0:e.getAllMethods()):this.methods}registerExtendsImplementsOnAncestors(e){var i;e&&this.registerChildType(e),e=e||this,(i=this.extends)==null||i.registerExtendsImplementsOnAncestors(e);for(let n of this.implements)n.registerExtendsImplementsOnAncestors(e)}canImplicitlyCastTo(e){if(e==this||e.identifier==this.identifier)return!0;if(e instanceof nt){if(e.isWildcard){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return e.lowerBound?this.canImplicitlyCastTo(e.lowerBound):!0}return e.catches?(e.catches.push(this),!0):!1}if(e instanceof Bt){for(let i of this.implements)if(i.canImplicitlyCastTo(e))return!0;return this.extends?this.extends.canImplicitlyCastTo(e):!1}if(e instanceof Le)return e==this?!0:this.extends?this.extends.canImplicitlyCastTo(e):!1;if(e instanceof di)return this.canImplicitlyCastTo(e.isGenericVariantOf);if(e instanceof nt){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return!(e.lowerBound&&!e.lowerBound.canImplicitlyCastTo(this))}return!1}canExplicitlyCastTo(e){return e.isPrimitive?!1:e==this||this.canImplicitlyCastTo(e)?!0:e instanceof we?e.canImplicitlyCastTo(this):!1}getDeclaration(){let e=$e[this.visibility]+" ";return this.isStatic&&(e+="static "),this.isAbstract()&&(e+="abstract "),e+="class "+this.identifier,this.genericTypeParameters&&this.genericTypeParameters.length>0&&(e+="<"+this.genericTypeParameters.map(i=>i.getDeclaration())+">"),this.extends&&this.extends.identifier!="Object"&&(e+=" extends "+this.extends.toString()),this.implements.length>0&&(e+=" implements "+this.implements.map(i=>i.toString()).join(", ")),e}getMinimumConcreteGenericType(e){var n;let i=new Map;if(!(((n=this.genericTypeParameters)==null?void 0:n.length)>0))return this;for(let s of this.genericTypeParameters)s.upperBounds.length>0?i.set(s,s.upperBounds[0]):i.set(s,e.getType("Object"));return new di(this,i)}getMainMethod(){let e=this.methods.find(i=>i.identifier==os.mainMethodIdentifier);return e||this.methods.find(i=>i.isStatic&&i.identifier=="main"&&i.getSignature().toLocaleLowerCase()=="void main(string[])")}getCompletionItems(e,i,n,s,a,l){const h=super.getCompletionItems(e,i,n,s,a,l);for(let u of this.genericTypeParameters)h.push({label:u.identifier,detail:u.getDeclaration(),kind:P.CompletionItemKind.TypeParameter,range:s,insertText:u.identifier});return h}}class di extends mt{constructor(e,i){super(e.identifier,e.identifierRange,e.pathAndIdentifierAsDotSeparatedString,e.module);r(this,"cachedFields");r(this,"cachedMethods");r(this,"cachedExtends");r(this,"cachedImplements");r(this,"cachedAllImplementedInterfaces");this.isGenericVariantOf=e,this.typeMap=i,this.isFinal=this.isGenericVariantOf.isFinal,this.documentation=this.isGenericVariantOf.documentation}get runtimeClass(){var e;return(e=this.isGenericVariantOf)==null?void 0:e.runtimeClass}getClassObject(){return this.isGenericVariantOf.getClassObject()}toString(){let e=this.identifier,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.toString()}).join(", ")+">"),e}getAbsoluteName(){let e=this.pathAndIdentifierAsDotSeparatedString,i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.getAbsoluteName()}).join(", ")+">"),e}getDeclaration(){let e=$e[this.visibility]+" ";this.isStatic&&(e+="static "),this.isAbstract()&&(e+="abstract "),e+="class "+this.identifier;let i=this.isGenericVariantOf.genericTypeParameters;return i&&i.length>0&&(e+="<"+i.map(n=>{let s=this.typeMap.get(n);return s==null?void 0:s.toString()}).join(", ")+">"),this.getExtends()&&(e+=" extends "+this.getExtends().toString()),this.getImplements().length>0&&(e+=" implements "+this.getImplements().map(n=>n.toString()).join(", ")),e}registerExtendsImplementsOnAncestors(e){this.isGenericVariantOf.registerExtendsImplementsOnAncestors(e)}getFirstTypeParametersType(){let e=this.isGenericVariantOf.genericTypeParameters;if(e&&e.length>0)return this.typeMap.get(e[0])}isAbstract(){return this.isGenericVariantOf.isAbstract()}isGenericVariant(){return!0}isGenericTypeParameter(){return!1}getCopyWithConcreteType(e){let i=new Map,n=!1;return this.typeMap.forEach((s,a)=>{let l=s.getCopyWithConcreteType(e);s!=l&&(n=!0),i.set(a,l)}),n?new di(this.isGenericVariantOf,i):this}getFields(){if(!this.cachedFields){this.cachedFields=[];for(let e of this.isGenericVariantOf.getFields())this.cachedFields.push(e.getCopyWithConcreteType(this.typeMap))}return this.cachedFields}getOwnMethods(){if(!this.cachedMethods){this.cachedMethods=[];for(let e of this.isGenericVariantOf.getOwnMethods())this.cachedMethods.push(e.getCopyWithConcreteType(this.typeMap,this))}return this.cachedMethods}getAllMethods(){let e=this.getExtends();return e?this.getOwnMethods().concat(e.getAllMethods()):this.getOwnMethods()}getExtends(){let e=this.isGenericVariantOf.getExtends();return!this.cachedExtends&&e&&(this.cachedExtends=e.getCopyWithConcreteType(this.typeMap)),this.cachedExtends}getImplements(){return this.cachedImplements||(this.cachedImplements=this.isGenericVariantOf.getImplements().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedImplements}getAllImplementedInterfaces(){return this.cachedAllImplementedInterfaces||(this.cachedAllImplementedInterfaces=this.isGenericVariantOf.getAllImplementedInterfaces().map(e=>e.getCopyWithConcreteType(this.typeMap))),this.cachedAllImplementedInterfaces}canImplicitlyCastTo(e){if(e instanceof nt){for(let i of e.upperBounds)if(!this.canImplicitlyCastTo(i))return!1;return e.catches&&e.catches.push(this),!0}if(!(e instanceof we))return!1;if(e instanceof ni||e instanceof Le)return!!(e.toString()=="Object"||this.isGenericVariantOf.canExplicitlyCastTo(e));if(e instanceof nr){let i=e;if(!this.isGenericVariantOf.canImplicitlyCastTo(i.isGenericVariantOf))return!1;let n=this.findInterfaceImplementedByMeWhichIsGenericVariantOf(i);if(n==null)return!1;for(let s of n.isGenericVariantOf.genericTypeParameters){let a=n.typeMap.get(s),l=i.typeMap.get(s);if((a==null?void 0:a.toString())!=(l==null?void 0:l.toString())&&l instanceof nt)if(l.isWildcard){for(let h of l.upperBounds)if(a!=null&&a.canImplicitlyCastTo(h))return!0}else l.catches&&l.catches.push(a)}return!0}if(e instanceof di){let i=e;if(!this.isGenericVariantOf.canImplicitlyCastTo(i.isGenericVariantOf))return!1;let n=this.findSuperTypeOfMeWhichIsGenericVariantOf(i);if(n==null)return!1;for(let s of n.isGenericVariantOf.genericTypeParameters){let a=n.typeMap.get(s),l=i.typeMap.get(s);if((a==null?void 0:a.toString())!=(l==null?void 0:l.toString())){if(l instanceof nt&&l.isWildcard){for(let h of l.upperBounds)if(a!=null&&a.canImplicitlyCastTo(h))return!0}l instanceof nt&&l.catches&&l.catches.push(a)}}return!0}return!1}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)?!0:e instanceof we?e.canImplicitlyCastTo(this):!1}findInterfaceImplementedByMeWhichIsGenericVariantOf(e){for(let i of this.getAllImplementedInterfaces())if(i instanceof nr){let n=i.findSuperTypeOfMeWhichIsGenericVariantOf(e);if(n!=null)return n}return null}findSuperTypeOfMeWhichIsGenericVariantOf(e){if(e.isGenericVariantOf==this.isGenericVariantOf)return this;let n=this.getExtends();return n&&n instanceof di?n.findSuperTypeOfMeWhichIsGenericVariantOf(e):null}}class mg{constructor(t,e){r(this,"currentModule");r(this,"currentType");r(this,"disassembledSteps",[]);r(this,"stepToHtmlElementMap",new Map);r(this,"currentElementAtProgramPointer");r(this,"disassemblerDiv");r(this,"lastMarkedElement");this.main=e,t.innerHTML="",this.disassemblerDiv=z.makeDiv(t,"jo_disassemblerDiv","jo_scrollable"),this.main.getInterpreter().eventManager.on("showProgramPointer",()=>{let i=this.main.getInterpreter().scheduler.getNextStep();i?this.showProgramPointer(i):this.hideProgramPointer()}),this.main.getInterpreter().eventManager.on("stop",()=>{this.unmarkException()}),this.main.getInterpreter().eventManager.on("hideProgramPointer",()=>{this.hideProgramPointer()}),this.disassemble()}disassemble(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedModule();t&&this.disassembleModule(t)}disassembleModule(t){if(t){this.clear(),this.currentModule=t,this.currentType=void 0;for(let e of t.getCodeFragments())this.dissassembleFragment(e,0)}}markProgramPointer(t){this.unmarkProgramPointer(),t.classList.add("jo_revealDisassemblerPosition"),this.lastMarkedElement=t}unmarkProgramPointer(){for(let t of this.disassemblerDiv.children)t.classList.remove("jo_revealDisassemblerPosition")}markException(t){this.unmarkException();let e=this.findHtmlElementForStep(t);e==null||e.classList.add("jo_revealDisassemblerException"),e==null||e.scrollIntoView({block:"nearest",inline:"nearest"})}unmarkException(){for(let t of this.disassemblerDiv.children)t.classList.remove("jo_revealDisassemblerException")}showElementpositionInMonacoModel(t,e){if(!t||!e)return;let i=this.main.getInterpreter().programPointerManager;if(!i)return;let n={programOrmoduleOrFile:t,range:e};i.show(n,{key:"disassemblerPosition",isWholeLine:!0,className:"jo_revealDisassemblerPosition",minimapColor:"#d6c91b56",rulerColor:"#d6c91b56",beforeContentClassName:"jo_revealDisassemblerPositionBefore"})}hideElementPositionsInMonacoModel(){var t;(t=this.main.getInterpreter().programPointerManager)==null||t.hide("disassemblerPosition")}showProgramPointer(t){this.hideProgramPointer(),this.currentElementAtProgramPointer=this.findHtmlElementForStep(t),this.currentElementAtProgramPointer&&(this.currentElementAtProgramPointer.classList.add("jo_revealProgramPointer"),this.currentElementAtProgramPointer.scrollIntoView({block:"nearest",inline:"nearest"}))}findHtmlElementForStep(t){let e=this.stepToHtmlElementMap.get(t);return e||(this.currentModule=void 0,this.disassembleModule(t.module),this.stepToHtmlElementMap.get(t))}hideProgramPointer(){this.currentElementAtProgramPointer&&this.currentElementAtProgramPointer.classList.remove("jo_revealProgramPointer"),this.currentElementAtProgramPointer=void 0}clear(){this.currentModule=void 0,this.disassemblerDiv.innerHTML="",this.disassembledSteps=[],this.stepToHtmlElementMap.clear(),this.currentType=void 0}dissassembleFragment(t,e){typeof this.currentType<"u"&&this.currentType!=t.type&&this.insertHorizontalLine(2),this.currentType!=t.type&&(this.currentType=t.type,this.insertTypeHeading(t.type,e)),this.insertSignature(t.signature,t.methodDeclarationRange,e),this.insertCode(t,e)}insertHorizontalLine(t){let e=z.makeDiv(this.disassemblerDiv,"jo_disassemblerHorizontalLine");e.style.borderTopWidth=t+"px"}insertTypeHeading(t,e){let i=z.makeDiv(this.disassemblerDiv,"jo_disassemblerHeading");i.style.marginLeft=e+"px",t instanceof Le&&t.isMainClass?i.textContent="Main method:":i.textContent=t.getDeclaration();let n=t.module;t.identifierRange&&n&&(i.addEventListener("pointerdown",s=>{this.showElementpositionInMonacoModel(n.file,t.identifierRange),this.markProgramPointer(i)}),i.classList.add("jo_disassemblerLink"))}insertSignature(t,e,i){let n=z.makeDiv(this.disassemblerDiv,"jo_disassemblerSignature");Q.colorize(t,"myJava",{tabSize:3}).then(a=>{n.innerHTML=a});let s=this.currentModule;e&&s&&(n.addEventListener("pointerdown",a=>{this.showElementpositionInMonacoModel(s==null?void 0:s.file,e),this.markProgramPointer(n)}),n.classList.add("jo_disassemblerLink"),n.style.marginLeft=i+"px")}insertCode(t,e){let i=0;for(let n of t.program.stepsSingle){let s=z.makeDiv(this.disassemblerDiv,"jo_disassemblerStep");s.style.marginLeft=e+"px";let a=z.makeSpan(s,"jo_disassemblerStepIndex");a.textContent=i+":";let l=z.makeSpan(s,"jo_disassemblerCodeSpan"),h=n.codeAsString.trim(),u=new RegExp("(.*)return "+(i+1)+";(s*)$","s"),m=h.match(u);m&&(h=m[1].trim());let g=h.replaceAll(/\/\/ Label \d*\s*/g,"");g!==h&&a.classList.add("jo_disassemblerStepWithLabel"),g=g.replaceAll(/(return) (\d*)/g,"jumpTo($2)"),h=g,i++,Q.colorize(h,"javascript",{tabSize:3}).then(b=>{b=b.replaceAll(" "," "),l.innerHTML=b});let f=n.range;if(f){f.startLineNumber&&f.endLineNumber&&f.startColumn&&f.endColumn&&(this.disassembledSteps.push({element:s,range:f}),this.stepToHtmlElementMap.set(n,s));let b=this.currentModule;f.startLineNumber&&f.startColumn&&(s.addEventListener("pointerdown",A=>{this.showElementpositionInMonacoModel(b.file,f),this.markProgramPointer(s)}),s.classList.add("jo_disassemblerLink"))}(n.lambdaObject||n.innerClass)&&this.insertLambdaOrInnerClass(n,e+10)}}insertLambdaOrInnerClass(t,e){if(!t.innerClass)return;let i=t.innerClass;t.lambdaObject&&(i=t.lambdaObject.constructor);let n=i.type,s=t.innerClass?"Inner class:":"Lambda object:";this.insertHorizontalLine(1);let a=z.makeDiv(this.disassemblerDiv,"jo_disassemblerLambdaHeading");a.style.marginLeft=e+"px",a.textContent=s,this.insertSignature(n.getDeclaration(),n.identifierRange,e);let l=n.getOwnMethods().filter(h=>typeof h.program<"u").map(h=>({type:n,program:h.program,signature:h.getSignature(),methodDeclarationRange:h.identifierRange}));for(let h of l)this.insertSignature(h.signature,h.methodDeclarationRange,e),this.insertCode(h,e);this.insertHorizontalLine(1)}}const Pb=""+new URL("assets/nearby_explosion-CBRHJi0z.mp3",import.meta.url).href,Ob=""+new URL("assets/nearby_explosion-CBRHJi0z.mp3",import.meta.url).href,Lb=""+new URL("assets/far_bomb-BLxJuQK3.mp3",import.meta.url).href,Bb=""+new URL("assets/cannon_boom-CSFCP929.mp3",import.meta.url).href,Fb=""+new URL("assets/far_explosion-DsmCe43l.mp3",import.meta.url).href,Vb="data:audio/mpeg;base64,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FVqGAoxgMzHq2//9//uQxP8AEiDbVZW1gAwbM2t/N4AAIVGYvumEl6YfLxmUFGfG+ZmXJmAVf//8ASR7muujDg8CjAYSGQGShhrpd7///+H3KdF/JbD0AggNhYBpYgEFAkEJhsE////+OwLLoaj8OP7HpWymDFs5u6X2Wk87Df/////84diU1PzkMzEvl0pYC/kbcKCVFolAylLSYE///////5JhFqsppKOGq8osxqS53nKZVDcARmJLAwDCWBNKi7+tJiH//////////5d5vW+4/rvP/////////2w9jK8olImAtJhyffaStiVMQU1FMy45OVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//twxPkAJhHrkfnuPgAAADSDgAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuOTlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy45OVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMTWA8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQxNYDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xDE1gPAAAGkAAAAIAAANIAAAARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMTWA8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQxNYDwAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQUczNDQzMTBfX211c2ljbGVnZW5kc19fbGFzZXItc2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATg==",_b=""+new URL("assets/short_bell-Bb-qOKg0.mp3",import.meta.url).href,zb=""+new URL("assets/flamethrower-BXqNKyZC.mp3",import.meta.url).href,Wb=""+new URL("assets/digging-DcKxpXZS.mp3",import.meta.url).href,Nb=""+new URL("assets/short_digging-fTvW-CdM.mp3",import.meta.url).href,qb="data:audio/mpeg;base64,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",Rb="data:audio/mpeg;base64,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tuy7scASQkAoEY2WJaai6tSP/pSkKCkNCQdnTpF3Zc5vt2G31WsVtay/rVVTVVVOr762yMFsnxm580RT0TqNHMYhi5MSnXuWZn7R2r7LC+zb1X157bVZu7U1bSkBbcUxX7rUQab5qT15NBFo7/bliyNIzE2XBG8PWHNHgoNrKoa1sNILVE80GHbFXSuYONBFf0R2ghexn18nVmAAAACh/ZGHCl8Rmf/iifV6/eh/Z/IX/5/X//7dP1bvLtMzEzUS/+jiaVXnCANYZnVYoyHx4cxDQcALKK4gLwkNC8cuJPO3mKMlVevYX7CSnefJns49cJyR6mNo4xqjnJ/cVFR6r14X1Fo457nOSIukd1KFBez0isk3Q1siiwULQx6fbe26mfzhO/Vbe/7///0qKZmYiXdvZEiSkJT6g7xMxAOhgqmtJdLQRkPBGJykdw8BcglI5PjVWsb4UocisrrQVtMAqvH+wuC46WxZiaM4c01LecbNbc/mna4eEgMVBkSDn88dOuiYFiK90CrYOJC1+jrmen0fat3NVNTM6/WxKGEjghsg8gRcu43d9ntaAu9ljRX0iLvQc959K2kCMgOjUXLjB5RtZFw8o7FnlF5CTPNZ3RJdZHNdt//7gGT8gAJ7G1D7BhwobaipnzDDx0Q8AzHsgAAhwhol/MMLHQlRu+cZ4p6+biwmchJ2apsjmxbPRvOqqrc1kWJeSkU543cjZ6n3q9P/q3sloA44AAHASkAExI9wgkIzLvrb5p93////////xZjvoCtlrkoAlAAm3AKMI2BxhQCKB40PFf8WEZnb////ijdf+LMd+Ki2sU/xfqZVTEFNRTMuOTlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//twRPkAAzUsSnsMMkhsJ3l/YSZ1BEQPIaYkIGCpAiP0kQhEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRBR3Nob290X3Nob3J0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABO",Gb="data:audio/mpeg;base64,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",Hb="data:audio/mpeg;base64,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",Kb="data:audio/wav;base64,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xgDnAAsBtAC6APQA3ACzANMAzADwAM8ArgDlAO4AEAHlANMA5wDgAAYB7AAGAeUA4gALAesA7gArAfQAygCcAPIAGAH9APgAGQHgAH4AuwDJANEA3ACyAOUA6QD4AMQAvwDkANEA1gDEAJkAsADWAOQA+wAIAQoB/wDNALoA6ADjAMYA7QD2ANYA6ADaANsA9gD1AA0B2gDWAPoA4wDNANUA8QDPAL8AjwCPALoAuACrAKoAzwDfAMwA6wDjAK4AoQCuALMArgC8ALwAoQDEAPAAwACdAMEAwwDKAIEArgC4AI4AqgDOAOQA0wD0ANsA8gCyAOkA4ADTANcA4ADAAKkAjgDXAK0A4ACkAKQArgCpALYAsgCVAIcA6ACkAJkAfwB5ANEAlQB6ANEArQCtAIMAogC6AN8AtgDEALoApwDGAMgApwCUAKIA4wDRAN4AqwB9ALQA1QDVAJQAugCwAK8AfACYAMwAvQChAIEAhgCLALQA7AC9ANUAjwCPAKYAvADGAKAAwQChALgA0wCXAM4ArwCuAGgAhQCIALMA1QCuAMoAqgDKAOkAxADJAIMAdQBtAIgApQCkAJcArQCXAKQAqQCeAKAAoACRAJ4AogCpAO0A3wDtANYApACwALQA0gDAAJAAvwC7AJ4AggCiAHkAjwCCAHQAlACHAL0AfQCLAMgAugCHAIYAugB5ALgAkACrAMMAqwDMANkA0wCZAKIAmACqAKoAnQCdAKEAygChALgA+QDMAMEAswDPAMUAwQClAMUACwGXAK4AyQC7ANcA0wCqAIUAqQDJAKoAmwDlAPQAygDEAM4A0gDNAL8AxADOAKQAkQCOAG0AwABwAJAAjACQAK0AdQCDAIMAoACDAHAAlACZAIsAlQCvALAAxACeAJQAyADxAK0ArQDxAJQArwCrAMMAnQCUAMYAiwCwALoAggChAIsAqwCTAG8AgQCPALgArwDGAK4ArwDGAKYAqwCYALQArwCBAKEAzgCPAHwAgQBvAKoAeACFAGAAWwCFAKcAaABEAF8AXwBEAFcAhQCBAKEATQByAGQAbQB8AG0AkwBfAIsAfADMAOIAnADKAG0AaQCPAGQAcQCgAJcAUgCFAKQAfwCIAJMAoACuAJwAsgCMAHIAdgB1AGQAkQCIAIMAqQCTAIcAswCDAG0AegCpAJwAegCMAIMAVQBVAHoAxAC8AH8AhwBnAJEAiAB6AJkAlwCyANEArQBjAIYAngBZAIIAmwBBAFAAKgBeAHkAVQBMAGcApwBnADgARQCZAHAAZwBQAFUAWQA+AH4AYwCMAGsAOABHAGcAXgBQAFkAUwBKAHAAeQBZAHAAkABnAF0AgQBmAFMAYgA8AGYAYgCkAGIAZgBmAGYApgCZAIoAlACYAFIAawBmACUARQBdAD8AVwBOAIYAeABkAFsAZwCLACQALgB4AFcAZAByAG0ANgBgAHIAeAB9AFMAYABmAHIAhgB8AKEAtwC9AK8ArwCqAK4AhQBtAE0AaACFAFsAQwBHAE0ATABfAG0ATQBtAGMAkQBIAGMAgwA2AGgAgwB/AEQANgBZACUAWQBRAEgAKABKAH4AVQBfAGcAWQBeAFUAfwCLAF4AUACbAGsAdQBnAEwAUABQAEoAPgBiAJUAhwBiAHkAdQCHAFAAGAA3AFkAMwBBAE4AiACHAGcASgAqAFUAYgBOAFUAXgBnAE4AVQBiAC4AKwBTADgAOABdABwAMwAlABwASgBQAF4AdAB+AGcAYgBdAHUAawA4AFkASgBiAEoARQB9AHQAfQBnAFkAbwB0AGIAKQBSAHQAbwBbAEUAfgBXAGcAVwBSAJwAawBtAGYAXQCdAGsAUgBvAGkAPABAAIEAbwBNAF0AUgBmAIEAYAB9AGAAXwB0AHgAcgBJAE4APwBmAFIANgByAD8AUgB8AHwAbQCFAIEAcgB8AGkAYwBjAJsAegBoADsAcgBoAFcARABWAF8AdgBtAHYAcQCBAEMATQCOAEgAngBVAGcAVgBoAJcAWQB1AGgAPgBMAF8AbABfAD8AVgBHAHoATABIAIMAQwBaAF4AawBfADYAkQBIAFAAdQBHAJsAWQCHAGwAlQBsAFkAgwBZAHkAawAzADsAMwBTAB0A6/8TAB8AKQAlAEAAFwDl//3/xf/p/3NtcGw8AAAAAAAAAAAAAACTWAAAPAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAVQgAAAAAAAAAAAAA",Ub="data:audio/wav;base64,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HfTO733qSOqt7qryIfJm7m/sk+4N8kfzLfEK71jv0/HP8xnzefGo8DXyQPSE9IfzcPJL88z05PVr9UD0ZvSM9aL2pvYd9tL1k/ZC98j3qvdi99P3gvgn+UP5Evkg+WT5TPq0+q/6p/re+8P+GwM3B0YJgghJBpcEtwTfBbAG8QWZBPkDJASDBEAEqwMLA/0C9AL9ArkCIALsAeMB1wE+AUcBYgE0AUsBDQFCAVMBPQFrAW8BXAFcAScBQQFPAUYBQQFGAZABdgFuAXYBTQFSAV8BSgFnATwBKAGIAUMBNwFaATcBOwFHAVIBXwE7AT4BcgEyAVEBIwEVATYBPgGFAZgBWgFVAWEBIwESAWUBQgFlAU8BNAFGAUEBSwFCAWoBYQFbAR4BPAFLAW4BRQFNAUEBKQFAATcBcQGPAUgBQAGNAUABMQE+AV0BLAEsATsBXQFMATsBQgFwAVABHwE7AQkBPQFlAWEBTAEsAUMBEAEsAS8BRwF8AUcBaQE9AT0BOAE4AYQBewFPATIBNwFKAU0BWwFIAS8BQAGGAYYBYgFnAXEBSAEjAVYBawFAAS0BSAFVAUwBQgE2AU0BUwEjASQBGgESARUBCAHbAOkADQEjAfYA5AD7AA0BGgEeARIBKwEdARUB9QD5AOgA9QAHARkBHQH+AC4BPAHfAOgA2gDHANYAAgEHAeMA9AD5ABgBGAEdAUABNgE7ASkBGgHmAAUBMgETAQoB2QAtASEB5gDGAL0A5gC1AMIA5QDpAMoA0gD2AMYA/wDfAMEA8wDcANcA7gD6ABIBJwEtARUBEAHUANsA9QDsABABHgEQAfEA9QBuASkBDAEdAfAA7ADEAOMA6QD/AN8A0QChAKkAqADHABMBvwDNALsArQD9AOEAsQDQAOsA4QDoAOMAywDAAPMA1QCWAOYA0ADhANQAywDPAMsACQHhABcB7wDLAO4A1AASARcB8QDbABcB5QCsAM0A4AC1AL0ABwHcAO4A0gC8AJ4AzwChAIcAjACMAMoAzQDpANYAnQCdANsA+gDKAOQA7ADEALwAqQC7ANIA2wC/AL8AzQCOALIAzQCtALIApQClAJMAxwClAH0AtgCtALEAxwCjAKUA1QC7AIgAkwDJAMQA0ADRAMsA4QDqAMcAsQAOAcsAmQDlAOsADgHKAMIAowDKALUAxgCwALgAxgDhAOUA6gAeAcEA2wDoAL0AzwDJAN8AqwDSALcAzwDoAMkArgCpAKkA1gCgAKAA0gCyAMkAswDNAOQAoQDQANoA6wDEAMkAxADMAN4A6wC6ALsAuwCbANAA6gDEAMsA0AC/ALIAywDHALEAtQCyAMIA4QCjAIwAmwC1AL0AlACsAKcAxgDUAKsAzwDLALwAvwBtAH4AwQCRAIwAfwCZAJ4ApwCWAHoAzwCZAGgApwCRAMUAwQDpALwAzQCuALIAvADpAMUAvwDJAKkAwQDMAJwA6QCdAJwA5AC/AK0ArgCyALcA2gD1ANkAuwAKAfUA0QDMAKAAlwCgAK0ArQCxALUAuwC2ALYAxgCnAIgAmwCnAMIA0ACoAJkArQC1ALEAlgCSAKwAlgDHAKMAlgCgAKwAsACsALEAmQCeANwArACDALgA1wDWAJQAogCzAKwApgChAMsAlACiALwAnQCZAIgAxQDNANIAyQDGAOUAtwDFABAB9gDxAPUA0gCuANsA0gDNANYAxQDaAPUA0QDEANsA1gCsAMkA2gDJAPAAsgC/ALsAuwCxAIkAvAC2AIQAoACXAJwAoACXAKgAvwCGAJsAfwCbAMQAnACNAIkAiQC6AMcAzACeAMQA3AC/AKwAqACbAJ4AsQCWAKAAeACWAJ4AowC9AKsAzwCNANQAkQCjALgAtgDjALEA0ACwAKwAxgC6AJQAcgCMAKgAtQCiAJkAngCWAKcAvQCzALMAkQCrAKsAxgDKAMoA1AC8AM0A+gDgAKsApgC9ANwA5ADuAOAA1wD/AP8AzwDaANIAvACmAKkAoADNALwA3wDpAMkA9QDJAMAAqQCYAMQAwADVAKUAtwCtAMwA8ADUALIAnADRAJsAuwDQAMsAsgC6AKcAgQCgAKwAowCsAMIAkgB6ALUA1QCIAKMAsQCRAKcAvQCiALUAxgC4ALoAwgCwAI8A1ACZAIgAsACRAJEAdQCPAKcAuACZALgAxQDKAO4AjADBANcAzwAIAYoAcACYAFYAqwDFAMoAzQCzAJMAkwCKAJgAqQDPAMUArQChAFQArgC3AIoAmACKAIIAkwCGAIIAvwCBAIQAzQCYAKAAmwCGAKAAJwCYAMwAgQCSAKMAlgCOAL8AkwClAKAAmwDHAJsAxACoAKMAowC7ANQArACXAIMApwCjAJsAfwB8AHIAugCwAIgAzwCZAIMArACIAJEAngCdAJQAogC8AIgAogC1AKIAfwDKAMoAwQC4AKYAvADRALgAswC3AMAAwADFAMwAvADJAKEAgQB8AK0AxQCHAKEAzQDRAK0AtgCbAK0AtgC2AN4AvwCTAI0AsQDCANEAlwByAMcAxADMANAAuwDZALoAfwCSAKMAhgDPAMsAsAC6AKIAvQCoAH8AgwCbAKMAxgDjANQAvQC9AKgAiQCUAJ0AmQC1ALgAngCmAKIAugCzALgApwB6AKsAvACdAJ0AmACdAIoArgCuAMEAnQCpAKsAUQCgAMEAswC3AJgAqQB5AKEAnACPAMkAuwDVAIkAjgCOAH8AoQCBAIYAmwCBAK0ArgCXAJcAwAC9AI4AoADMAIoAkwDMANUArQC6ANcA0QDcAMIAiABuALUAsACMAL0ApwDLAJEAggDBAJ0AmQB1AG0AfgCNAJQAvQCmAMUAxQDFAMAA7ADbAKIAGQHAALcAnQBrAKkAqQDRALsAyQCpALYAkwCSALYArQClAIkAiQB8AI4ApQCcALsApQCIAIYAoQDcALUAxwDLAJ4AiACSAIQAqACeAG0AwgC6AMsAjQCbAM8ApgDHAHkAtQCzAJYApgCUAJ4AqwCUAIIAhwCrAJwAoQCZAJMAmAB+AKAAmACmAI8AdQChAKEAmADAAKkApQDjAN4ApgCcAMIArQDHAMAAxACoAJcAqACGAI4AjQCSAMcAuwDGAJYAlwCJAF0AmQCjANkAxgDHANQAuAC6AKwAegCeANQAsACnAKIAlAC1AM0AlAB1AHkAfgCUALMAaABjAHAAjwCGAIoAjwBjAJMAfgBMAF4AkwCOAIEAlwB0AHgAggB9AGYAbgCGALcAuwCgAJcAlwCXAKkAjQCgAI0AowCJAIkAvwCWAKgAmQByAMsAxADcAAQBqACWAIMAbQCwAI0AowC9AHoAogB/AJYAswDNALgAlACeAM8AtQCdAIoAfgChAKkApgDAALIAqQDAAIoAuwChAIYAoQCGAJgApQCcAHMAfQBvAJcAqACbAJcAjgCEAFQAZgCIAKwAcwBzAKMAjgBqAGAAPgBYAG8AWQBtAG4AoABlAGkAkQCbAHwAZACMAG0AagB/AJEAhwCDAGkAcgBOAFUAmABkAJEAnQCHAJQAVgCIAHkAmAB9AHIAZABaAHUAXwBwAJkAfQB1AFoAaABmAHoAeQCHAHAAVQBrAI4AhwCBAHQAYgCPAHQAWgClAKEAWQBvAIQAqACjAGoAmwB8AF0AiQCGAGoApQDZALUAxwCyAJsAogCxALYAvQCeAJEAogCzAHIAdwBpAJ4A4QC3AKIAZACzAI0AnQBkAGQAswCCAIoAmADAAKEAqQCMAF4AfQCKAJMAggCOAN8AoACcAKEAdACCAK0AnACGAIkAagB9AI4ApQCoAIIAZQBVAGAAaQCSAIEAgQClAJIAcgBKAGoAugCNAH8AoABzAHIAaQCDAG4AYABOAE4ARQBgAE4ANABgAJYAZABwAHoAmQBtAHIAWABdAH8AXwBMAEkAXwBWAHUAlABbAFYAcAAqAGMAbwBwAH4AYwBWAC0AMgAxACUATABOABwAMQBMAFoARAAyADsAOwAoABYALAAoAFUAUQBRAH0AYgBVADYAdAB+ADEAWABrAJMAQwBUAKEARABgAG8AdACBAFQAPgAoADYAbwBGAFQANQBmACcAFgBgAEYAQwBYAEsAYABgAEcA6P8XANH/yf9zbXBsPAAAAAAAAAAAAAAAk1gAADwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAHcJAAAAAAAAAAAAAA==",hi=class hi{static init(){if(!hi.isInitialized){hi.isInitialized=!0;for(let t of hi.sounds)t.player=new Bf.Howl({src:[t.url],preload:!0}),hi.soundMap.set(t.name,t)}}static play(t){let e=hi.soundMap.get(t);e&&e.player.play()}static startDetectingVolume(){hi.volumeDetectionRunning||(hi.volumeDetectionRunning=!0,console.log("starting..."),navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia,navigator.getUserMedia?navigator.getUserMedia({audio:!0},function(t){let e=new AudioContext,i=e.createAnalyser(),n=e.createMediaStreamSource(t);i.smoothingTimeConstant=.8,i.fftSize=1024,n.connect(i),hi.getVolume=()=>{if(!hi.volumeDetectionRunning)return 0;var s=new Float32Array(i.frequencyBinCount);i.getFloatTimeDomainData(s);let a=0;for(let l=0;l-1),r(hi,"isInitialized",!1),r(hi,"volumeDetectionRunning",!1);let ns=hi;class pg{constructor(t){r(this,"actions",{});r(this,"keyEntries",{});r(this,"buttons",{});r(this,"editorContextKeys",new Map);this.$mainElement=t}init(){let t=this.$mainElement;t||(t=y(document));let e=this;t.on("keydown",function(i){i!=null&&e.executeKeyDownEvent(i)})}trigger(t){let e=this.actions[t];e!=null&&e.actionListeners.forEach(i=>i(t,void 0,""))}registerActionListener(t,e){let i=this.actions[t];if(!i){console.trace("ActionManager.registerActionListener: ActionEntry "+t+" not registered yet.");return}i.actionListeners.push(e)}registerAction(t,e,i="",n){let s={actionListeners:[],identifier:t,keys:e,text:i,active:!0};this.actions[t]=s;for(let l of e)this.keyEntries[l.toLowerCase()]==null&&(this.keyEntries[l.toLowerCase()]=[]),this.keyEntries[l.toLowerCase()].push(s);let a=this.buttons[t];if(a!=null)for(let l of a)this.setButtonTitle(l,s);n&&this.registerActionListener(t,n)}registerButton(t,e){this.buttons[t]==null&&(this.buttons[t]=[]),this.buttons[t].push(e);let i=this.actions[t];i&&this.setButtonTitle(e,i);let n=window.PointerEvent?"pointer":"mouse";e.on(n+"down",()=>{let s=this.actions[t];s&&(s.active&&s.actionListeners.forEach(a=>a(t,void 0,"mousedown")),t=="interpreter.start"&&ns.init())})}setButtonTitle(t,e){let i=e.text;i||(i=""),e.keys.length>0&&(i+=" ["+e.keys.join(", ")+"]"),t.attr("title",i)}isActive(t){let e=this.actions[t];return e==null?!1:e.active}setActive(t,e){let i=this.actions[t];i!=null&&(i.active=e);let n=this.buttons[t];if(n!=null)for(let s of n)e?s.addClass("jo_active"):s.removeClass("jo_active")}setVisible(t,e){let i=this.buttons[t];if(i!=null)for(let n of i)e?n.show():n.hide()}executeKeyDownEvent(t){var n;if(((n=document.activeElement)==null?void 0:n.tagName.toLowerCase())=="input"||t.keyCode<=18&&t.keyCode>=16)return;let e="";t.ctrlKey&&(e+="ctrl+"),t.shiftKey&&(e+="shift+"),t.altKey&&(e+="alt+"),t.key!=null&&(e+=t.key.toLowerCase());let i=this.keyEntries[e];if(i!=null){for(let s of i)if(s.active){t.stopPropagation(),t.preventDefault(),s.actionListeners.forEach(a=>a(s.identifier,void 0,e));break}}}hideButtons(t){let e=this.buttons[t];e&&e.forEach(i=>i.hide())}showHideButtons(t,e){let i=this.buttons[t];i&&i.forEach(n=>{e?n.show():n.hide()})}registerEditorContextKey(t,e){this.editorContextKeys.set(t,e)}setEditorContext(t,e){var i;(i=this.editorContextKeys.get(t))==null||i.set(e)}}class gg{constructor(t){r(this,"key","ExceptionMarker");this.main=t}markExceptionByFileAndRange(t,e){if(this.removeExceptionMarker(),!t||!e)return;let i=this.main.getInterpreter().programPointerManager;if(!i)return;this.main.showFile(t);let n={programOrmoduleOrFile:t,range:e};i.show(n,{key:this.key,isWholeLine:!0,className:"jo_revealExceptionPosition",minimapColor:"#d61bd056",rulerColor:"#d61bd056",beforeContentClassName:"jo_revealExceptionPositionBefore"}),setTimeout(()=>{this.main.getInterpreter().eventManager.once("stop",()=>{this.removeExceptionMarker()})},1100)}markException(t,e){let i=t.file,n=t.range;this.markExceptionByFileAndRange(i,n),setTimeout(()=>{var s;(s=this.main.getDisassembler())==null||s.markException(e)},1e3)}removeExceptionMarker(){var t,e;(e=(t=this.main.getInterpreter())==null?void 0:t.programPointerManager)==null||e.hide(this.key)}}class fg{constructor(t,e){r(this,"pixiSpritesheetData");r(this,"pngImageData");r(this,"pixiUserSpritesheet");r(this,"graphicSystems",[]);r(this,"interpreter");this.graphicsDiv=t,this.coordinatesDiv=e}registerGraphicSystem(t){this.graphicSystems.push(t)}setInterpreter(t){this.interpreter=t,t.eventManager.on("resetRuntime",()=>{this.graphicSystems=[],this.graphicsDiv.style.height="0px"})}setUserData(t,e){this.pixiSpritesheetData=t,this.pngImageData=e,this.pixiUserSpritesheet&&(this.pixiUserSpritesheet.destroy(),this.pixiUserSpritesheet=void 0)}async initPixiUserSpritesheet(){if(!this.pixiUserSpritesheet&&this.pixiSpritesheetData&&this.pngImageData){let t=Np.from(new qp({resource:this.pngImageData,width:this.pixiSpritesheetData.meta.size.w,height:this.pixiSpritesheetData.meta.size.h,alphaMode:"no-premultiply-alpha",minFilter:"nearest",magFilter:"nearest"}));this.pixiUserSpritesheet=new Rp(t,this.pixiSpritesheetData),await this.pixiUserSpritesheet.parse()}return this.pixiUserSpritesheet}resizeGraphicsDivHeight(){let t=this.graphicsDiv.getElementsByTagName("canvas"),e=0;for(let i=0;ie&&(e=s)}this.graphicsDiv.style.height=e+"px"}shrinkGraphicsDiv(){this.graphicsDiv.style.height="0px"}}const sc=["act","actWithTime","keyPressed","keyUp","keyDown"];var qn;let Tt=(qn=class{},r(qn,"ArrayLengthNegative",()=>d({de:"Negative Array-Längen sind nicht möglich.",en:"Negative array length is not feasible."})),r(qn,"SystemException",()=>d({de:"Interner Fehler: ",en:"System exception: "})),r(qn,"NullPointerException",()=>d({de:"Auf ein Attribut/eine Methode von null kann nicht zugegriffen werden.",en:"Can't access field/method of null."})),r(qn,"ClassCastException",(t,e)=>d({de:`Ein Objekt der Klasse ${t} ist kein Objekt der Klasse ${e} und kann daher nicht in diesen Typ gecastet werden.`,en:`An object of class ${t} is no object of class ${e}, therefore casting ist not possible.`})),r(qn,"CastToArrayException",t=>d({de:`Ein Objekt der Klasse ${t} ist kein Array und kann daher nicht in einen Array-Typ gecastet werden.`,en:`An object of class ${t} is no array, therefore casting to an array type is not possible.`})),r(qn,"SimpleArrayIndexOutOfBoundsException",()=>d({de:"Zugriff auf ein Element außerhalb des Arrays (d.h. index < 0 oder >= Anzahl der Elemente)",en:"The index is out of bounds of this array."})),r(qn,"ArrayIndexOutOfBoundsException",(t,e,i)=>d({de:`Der Index ${t}${i>1?" ("+i+". Dimension)":""} liegt außerhalb der Grenzen des Arrays. Mögliche Werte für den Index sind 0 ... ${e-1}.`,en:`Index ${t}${i>1?" (dimension "+i+")":""} is out of bounds of this array. Possible values for this index are 0 ... ${e-1}.`})),r(qn,"MethodOfDestroyedGraphicObjectCalled",()=>d({de:"Es wurde eine Methode eines schon mittels destroy() zerstörten Grafikobjekts aufgerufen.",en:"A method of an already destroyed graphical object has been called."})),r(qn,"ExecutionTime",()=>d({de:"Ausführungszeit",en:"Execution time"})),qn);const Rn=class Rn extends R{constructor(e,i){super();r(this,"stacktrace",[]);r(this,"range");r(this,"file");r(this,"thread");this.message=e,this.cause=i,this.message=this.message||""}getThread(){return this.thread}getFile(){return this.file}getIdentifier(){return this.getClassName()}getExtendedImplementedIdentifiers(){return Rn.type.getExtendedImplementedIdentifiers()}getMessage(){return this.message||""}_constructor_m(e){return this.message=e.value,this}_constructor_c(e){return this.cause=e,this}_constructor_m_c(e,i){return this.message=e.value,this.cause=i,this}_toString(){return new Y(this.getClassName()+": "+this.message?this.message:"")}_getMessage(){return new Y(this.message?this.message:"")}};r(Rn,"__javaDeclarations",[{type:"declaration",signature:"class Throwable extends Object"},{type:"method",signature:"public Throwable()",native:Rn.prototype._constructor},{type:"method",signature:"public Throwable(String message)",native:Rn.prototype._constructor_m},{type:"method",signature:"public Throwable(Throwable cause)",native:Rn.prototype._constructor_c},{type:"method",signature:"public Throwable(String message, Throwable cause)",native:Rn.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:Rn.prototype._toString},{type:"method",signature:"public String getMessage()",native:Rn.prototype._getMessage}]),r(Rn,"type");let De=Rn;const sl=class sl extends De{constructor(e,i){super();r(this,"stacktrace",[]);this.cause=i}};r(sl,"__javaDeclarations",[{type:"declaration",signature:"class Exception extends Throwable"},{type:"method",signature:"public Exception()",native:sl.prototype._constructor},{type:"method",signature:"public Exception(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public Exception(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public Exception(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(sl,"type");let Qi=sl;class W extends Qi{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(W,"__javaDeclarations",[{type:"declaration",signature:"class RuntimeException extends Exception"},{type:"method",signature:"public RuntimeException()",native:Qi.prototype._constructor},{type:"method",signature:"public RuntimeException(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public RuntimeException(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public RuntimeException(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(W,"type");class _d extends W{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(_d,"__javaDeclarations",[{type:"declaration",signature:"class MethodOfDestroyedObjectCalledException extends RuntimeException"}]),r(_d,"type");const jh=class jh{constructor(){}static getInstance(){const t={get(e,i,n){if(i=="getWorldTransform")return ln.IDENTITY;throw new _d(Tt.MethodOfDestroyedGraphicObjectCalled())}};return new Proxy({},t)}};r(jh,"instance",jh.getInstance());let zd=jh;var Ca,Ql,vc;class bg{constructor(t){J(this,Ql);r(this,"is30HzFrequency",!0);J(this,Ca,null);r(this,"timerFrequency",30);r(this,"actors",{act:[],actWithTime:[],keyDown:[],keyUp:[],keyPressed:[]});r(this,"keyDownListener",(t,e,i,n)=>{this.onKeyDown(t,e,i,n)});r(this,"keyUpListener",t=>{this.onKeyUp(t)});r(this,"keyTypedListener",t=>{this.onKeyPressed(t)});r(this,"shapesToDestroySafely",[]);r(this,"runningactThread");r(this,"tickHappenedWhenThreadNotEmpty",!1);this.interpreter=t,this.clear(),this.registerKeyboardListeners(t),t.eventManager.on("stop",()=>{this.setTimerFrequency(30)})}registerKeyboardListeners(t){t.keyboardManager&&(t.keyboardManager.addKeyDownListener(this.keyDownListener),t.keyboardManager.addKeyUpListener(this.keyUpListener),t.keyboardManager.addKeyPressedListener(this.keyTypedListener))}destroy(){this.interpreter.keyboardManager&&(this.interpreter.keyboardManager.removeKeyDownListener(this.keyDownListener),this.interpreter.keyboardManager.removeKeyUpListener(this.keyUpListener),this.interpreter.keyboardManager.removeKeyPressedListener(this.keyTypedListener))}registerActor(t,e){this.actors[e].push(t)}callActMethods(t){this.is30HzFrequency&&re(this,Ql,vc).call(this,t)}setTimerFrequency(t){if(M(this,Ca)&&(clearInterval(M(this,Ca)),ee(this,Ca,null)),this.timerFrequency=t,t==30){this.is30HzFrequency=!0;return}this.is30HzFrequency=!1,ee(this,Ca,setInterval(()=>{re(this,Ql,vc).call(this,1e3/t)},1e3/t))}clear(){sc.forEach(t=>this.actors[t]=[])}unregisterActor(t){sc.forEach(e=>{let i=this.actors[e],n=i.indexOf(t);n>=0&&i.splice(n,1)})}hasActors(){for(let t of sc)if(this.actors[t].length>0)return!0;return!1}onKeyPressed(t){if(this.actors.keyPressed.length==0)return;let e=this.interpreter.scheduler.createThread("key pressed event thread");for(let i of this.actors.keyPressed)i._mj$onKeyTyped$void$String(e,void 0,new Y(t));e.state=F.running}onKeyUp(t){if(this.actors.keyUp.length==0)return;let e=this.interpreter.scheduler.createThread("key up event thread");for(let i of this.actors.keyUp)i._mj$onKeyUp$void$String(e,void 0,new Y(t));e.state=F.running}onKeyDown(t,e,i,n){if(this.actors.keyDown.length==0)return;let s=this.interpreter.scheduler.createThread("key down event thread");for(let a of this.actors.keyDown)a._mj$onKeyDown$void$String(s,void 0,new Y(t));s.state=F.running}}Ca=new WeakMap,Ql=new WeakSet,vc=function(t){if(this.runningactThread&&[F.running,F.waiting].indexOf(this.runningactThread.state)>=0){this.tickHappenedWhenThreadNotEmpty=!0;return}if(this.shapesToDestroySafely.forEach(e=>{e!=null&&e.container&&e.container!=zd.instance&&(e.container.destroy(),e.container=zd.instance)}),this.shapesToDestroySafely=[],this.tickHappenedWhenThreadNotEmpty=!1,!(this.actors.act.length==0&&this.actors.actWithTime.length==0)){this.runningactThread=this.interpreter.scheduler.createThread("act method-thread");for(let e of this.actors.act)e.isActing&&e._mj$act$void$(this.runningactThread,void 0);for(let e of this.actors.actWithTime)e.isActing&&e._mj$act$void$double(this.runningactThread,void 0,t);this.runningactThread.programStack.length>0?(this.runningactThread.state=F.running,this.runningactThread.callbackAfterTerminated=()=>{this.tickHappenedWhenThreadNotEmpty&&this.callActMethods(t)}):(this.interpreter.scheduler.removeThread(this.runningactThread),this.runningactThread=void 0)}};class tp{constructor(){r(this,"eventTypeToCallbackMap",new Map);r(this,"callbackToEventTypeMap",new Map);r(this,"onceMap",new Map)}async waitFor(t){return new Promise((i,n)=>{this.on(t,()=>{i()})})}on(t,e,i){let n=this.eventTypeToCallbackMap.get(t);n||(n=[],this.eventTypeToCallbackMap.set(t,n)),n.find(s=>s.f==e)||(n.push({f:e,thisArg:i}),this.callbackToEventTypeMap.set(e,t))}off(t){let e=this.callbackToEventTypeMap.get(t);if(!e)return;this.callbackToEventTypeMap.delete(t),this.onceMap.delete(t);let i=this.eventTypeToCallbackMap.get(e);if(!i)return;let n=i.findIndex(s=>s.f==t);n>=0&&i.splice(n,1),i.length==0&&this.eventTypeToCallbackMap.delete(e)}once(t,e,i){this.on(t,e,i),this.onceMap.set(e,!0)}fire(t,...e){let i=this.eventTypeToCallbackMap.get(t);if(!i)return;let n=[];for(let s of i.slice())s.f.call(s.thisArg,...e),this.onceMap.get(s.f)&&(n.push(s),this.onceMap.delete(s.f));n.forEach(s=>this.off(s.f))}removeAllListeners(){this.eventTypeToCallbackMap.clear(),this.callbackToEventTypeMap.clear(),this.onceMap.clear()}}var xa,wo;class yg{constructor(){J(this,xa,"");J(this,wo,!1)}print(t,e,i){this.printIntern(t,e,i),M(this,wo)&&(ee(this,xa,M(this,xa)+t),e&&ee(this,xa,M(this,xa)+` `))}startLogging(){ee(this,xa,""),ee(this,wo,!0)}stopLogging(){ee(this,wo,!1)}getLog(){return M(this,xa)}}xa=new WeakMap,wo=new WeakMap;class vg extends yg{printHtmlElement(t){throw new Error("Method not implemented.")}printIntern(t,e,i){}flush(){}clear(){}isTestPrintManager(){return!1}}var Zn=(c=>(c[c.nothingMoreToDo=0]="nothingMoreToDo",c[c.giveMeAdditionalTime=1]="giveMeAdditionalTime",c))(Zn||{}),ie=(c=>(c[c.not_initialized=0]="not_initialized",c[c.running=1]="running",c[c.paused=2]="paused",c[c.stopped=3]="stopped",c[c.error=4]="error",c))(ie||{});class Qb{constructor(t,e){r(this,"maxLoadFactor",.8);r(this,"numberOfStepsPerBatch",1e4);r(this,"lastTickTime");this.scheduler=t,this.interpreter=e}tick(t){let e=performance.now();this.lastTickTime&&(e-this.lastTickTime>t+20&&(t=t*.8),t=Math.min(t,40)),this.lastTickTime=e;let i=0;for(;(performance.now()-e)/t2&&this.scheduler.stepCountSinceStartOfProgram>1e4&&(this.numberOfStepsPerBatch+=1e4)}}class Yb{printProgram(t){if(!t)return v.missingProgram().message;let e="";for(let i=0;i" * "+i).join(` `),e+=` */ `,e}}class Tl extends W{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Tl,"__javaDeclarations",[{type:"declaration",signature:"class ArithmeticException extends RuntimeException"},{type:"method",signature:"public ArithmeticException()",native:Qi.prototype._constructor},{type:"method",signature:"public ArithmeticException(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public ArithmeticException(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public ArithmeticException(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(Tl,"type");class $l extends W{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r($l,"__javaDeclarations",[{type:"declaration",signature:"class ClassCastException extends RuntimeException"}]),r($l,"type");class Ve extends W{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Ve,"__javaDeclarations",[{type:"declaration",signature:"class IndexOutOfBoundsException extends RuntimeException"}]),r(Ve,"type");class qt extends W{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(qt,"__javaDeclarations",[{type:"declaration",signature:"class NullPointerException extends RuntimeException"}]),r(qt,"type");class Zb{static arrayOfObjectsToString(t,e,i,n,s=200){if(i==null){e.s.push("null"),n&&n();return}if(i.length==0){t.text+="[ ]",n&&n();return}t.text+="[";let a=i.slice();e.s.push(a);let l=h=>{let u=e.s.pop();if(t.text.length>s){h&&h();return}if(u.length>0){let m=u.shift();if(m==null)if(t.text+="null",u.length>0){t.text+=", ",e.s.push(u),l(h);return}else{t.text+="]",h&&h();return}else if(Array.isArray(m)){e.s.push(m),this.arrayOfObjectsToString(t,e,m,()=>{if(u.length>0){t.text+=", ",e.s.push(u),l(h);return}else{t.text+="]",h&&h();return}},s);return}else if(typeof m=="object")m._mj$toString$String$(e,()=>{var f,b;let g=e.s.pop().value;if(((b=(f=m.constructor)==null?void 0:f.type)==null?void 0:b.identifier)=="String"&&(g='"'+g+'"'),t.text+=g,u.length>0){t.text+=", ",e.s.push(u),l(h);return}else{t.text+="]",h&&h();return}});else if(typeof m=="string"?t.text+='"'+m+'"':t.text+=""+m,u.length>0){t.text+=", ",e.s.push(u),l(h);return}else{t.text+="]",h&&h();return}}};l(()=>{n&&n()})}}class Gh{static printWithLinks(t,e,i,n){if(!i||!n)return;let s=this.getHtmlWithLinks(t,e,n);s.style.marginTop="10px",i.printHtmlElement(s)}static getHtmlWithLinks(t,e,i){let n=z.makeDiv(void 0,"jo_exceptionPrinter_outer"),s=z.makeDiv(n,"jo_exceptionPrinter_heading");if(!t.getThread){console.error(t);return}let a=t.getThread()?" in thread "+t.getThread().name:"";s.textContent=`${t.getIdentifier()}${a}: ${t.getMessage()}`;for(let l of e){if(!l.range)continue;let h=z.makeDiv(n,"jo_exceptionPrinter_stacktrace");l.methodIdentifierWithClass.endsWith("."+os.mainMethodIdentifier)?h.innerHTML=`in main program (File ${l.file.name} ${l.range.startLineNumber}:${l.range.startColumn})`:l.methodIdentifierWithClass.startsWith("$MainClass")?h.innerHTML=`in ${l.methodIdentifierWithClass.split(".")[1]} (File ${l.file.name} ${l.range.startLineNumber}:${l.range.startColumn})`:h.innerHTML=`at ${l.methodIdentifierWithClass} (File ${l.file.name} ${l.range.startLineNumber}:${l.range.startColumn})`,h.getElementsByClassName("jo_stacktraceLink")[0].addEventListener("click",()=>{i==null||i.showProgramPosition(l.file,l.range)})}return n}static getHTMLWithLinksForMessage(t,e,i,n){let s=z.makeDiv(void 0,"jo_exceptionPrinter_outer"),a=z.makeDiv(s,"jo_exceptionPrinter_heading");if(a.textContent=t,e){let l=z.makeDiv(s,"jo_exceptionPrinter_stacktrace");l.innerHTML=`at File ${i.name} ${e.startLineNumber}:${e.startColumn}`,l.getElementsByClassName("jo_stacktraceLink")[0].addEventListener("click",()=>{n.showProgramPosition(i,e)})}return s}}class Xb{constructor(t,e){r(this,"cause");r(this,"stacktrace",[]);r(this,"file");r(this,"range");r(this,"thread");this.identifier=t,this.message=e}getIdentifier(){return this.identifier}getExtendedImplementedIdentifiers(){return[]}getMessage(){return this.message}getFile(){return this.file}getThread(){return this.thread}}var Sa,Ms,Mn,ko,Co,xo,Ta,Ps,Ki,Ag,Ac,$d,wc;class ve{constructor(t,e,i){J(this,Ki);r(this,"s",[]);r(this,"programStack",[]);r(this,"currentProgramState");J(this,Sa);J(this,Ms,F.new);r(this,"exception");r(this,"stackTrace");J(this,Mn,-1);J(this,ko,Number.MAX_SAFE_INTEGER);r(this,"haltAtNextBreakpoint",!0);J(this,Co);r(this,"classes");r(this,"maxStepsPerSecond");r(this,"lastTimeThreadWasRun",performance.now());J(this,xo,!1);J(this,Ta,0);r(this,"replReturnValue");r(this,"numberOfSteps",0);J(this,Ps,[]);r(this,"callbackAfterTerminated");r(this,"threadObject");r(this,"lastReentrenceCounter");r(this,"fullspeedCounter",0);r(this,"__cpu");this.scheduler=t,this.name=e,this.s=i,this.classes=t.classObjectRegistry}get state(){return M(this,Ms)}get assertionObservers(){return this.scheduler.interpreter.assertionObserverList}run(t){this.numberOfSteps=0;let e=this.s,i,n,s;if(!this.currentProgramState)return this.state=F.terminated,{state:this.state,stepsExecuted:0};try{for(;this.numberOfSteps=0){for(;this.numberOfSteps{ee(this,Mn,-1),t()})}unmarkStep(){ee(this,Mn,-1)}markStepOut(t){ee(this,Mn,this.programStack.length-1),ee(this,ko,-1),ee(this,Co,()=>{ee(this,Mn,-1),t()})}startIfNotEmptyOrDestroy(){this.programStack.length==0&&(this.scheduler.removeThread(this),this.return),[F.new,F.runnable].indexOf(this.state)>=0&&(this.state=F.running)}getExceptionAndTrimStack(t){let e=this.currentProgramState.recentlyThrownException;if(e)return t&&(this.currentProgramState.recentlyThrownException=void 0),this.s.length=this.currentProgramState.afterExceptionTrimStackToSize,e}beginTryBlock(t){t.stackSize=this.s.length,this.currentProgramState.exceptionInfoList.push(t)}endCatchTryBlock(){this.currentProgramState.exceptionInfoList.pop()}return(t){var i;for(;this.s.length>this.currentProgramState.stackBase;)this.s.pop();let e=(i=this.programStack.pop())==null?void 0:i.callbackAfterFinished;typeof t<"u"&&this.s.push(t),e!=null&&e(),this.programStack.length>0?this.currentProgramState=this.programStack[this.programStack.length-1]:this.state=F.terminated}startREPLProgram(){ee(this,Ta,this.s.length),ee(this,xo,!0)}returnFromREPLProgram(t,e){ee(this,xo,!1);let i=this.programStack.pop();for(;i&&!i.program.isReplProgram;)i=this.programStack.pop();this.replReturnValue=void 0;let n=this.s.length>M(this,Ta)+1?this.s.pop():void 0,s=this.s.length>M(this,Ta)?this.s.pop():void 0;for(this.replReturnValue={value:s,text:n,type:i==null?void 0:i.program.module.returnType};this.s.length>M(this,Ta);)this.s.pop();i!=null&&i.callbackAfterFinished&&i.callbackAfterFinished(),this.currentProgramState=this.programStack[this.programStack.length-1],this.state=F.immediatelyAfterReplStatement,this.currentProgramState||(this.currentProgramState={currentStepList:[],stepIndex:0,exceptionInfoList:[],program:void 0,stackBase:0})}pushProgram(t,e){let i={program:t,currentStepList:t.stepsSingle,stackBase:this.s.length-t.numberOfParameters-t.numberOfThisObjects,stepIndex:0,callbackAfterFinished:e,exceptionInfoList:[]};for(let n=0;n{this.s.push(new Y(this.s.pop())),e&&e()},n);return}if(typeof i=="object"){i._mj$toString$String$(t,e);return}t.s.push(""+i),e&&e()}NullstringIfNull(t){return t==null?"null":t.value}EnterFullspeedMode(){this.fullspeedCounter++}ExitFullspeedMode(){this.fullspeedCounter--,this.fullspeedCounter==0&&(this.state=F.changeSpeedRequested)}exit(){this.state=F.terminated}registerCodeReached(t){this.scheduler.interpreter.registerCodeReached(t)}registerEnteringSynchronizedBlock(t){let e=this.programStack[this.programStack.length-1];if(e.exceptionInfoList.length>0){let i=e.exceptionInfoList[e.exceptionInfoList.length-1];i.aquiredObjectLocks||(i.aquiredObjectLocks=[]),i.aquiredObjectLocks.push(t)}else e.aquiredObjectLocks||(e.aquiredObjectLocks=[]),e.aquiredObjectLocks.push(t)}registerLeavingSynchronizedBlock(){let t=this.programStack[this.programStack.length-1];if(t.exceptionInfoList.length>0){let e=t.exceptionInfoList[t.exceptionInfoList.length-1];e.aquiredObjectLocks&&e.aquiredObjectLocks.length>0&&e.aquiredObjectLocks.pop()}else t.aquiredObjectLocks&&t.aquiredObjectLocks.length>0&&t.aquiredObjectLocks.pop()}leaveAllSynchronizedBlocksInCurrentMethod(){let t=this.programStack[this.programStack.length-1];for(;(t==null?void 0:t.exceptionInfoList.length)>0;){let e=t.exceptionInfoList.pop();if(e.aquiredObjectLocks)for(;e.aquiredObjectLocks.length>0;)e.aquiredObjectLocks.pop().leaveSynchronizedBlock(this,!1)}if(t.aquiredObjectLocks)for(;t.aquiredObjectLocks.length>0;)t.aquiredObjectLocks.pop().leaveSynchronizedBlock(this,!1)}_arrayOfObjectsToString(t,e,i=200){let n={text:""};Zb.arrayOfObjectsToString(n,this,t,()=>{this.s.push(n.text),e&&e()},i)}_primitiveElementOrArrayToString(t){return Array.isArray(t)?"["+t.map(e=>this._primitiveElementOrArrayToString(e)).join(", ")+"]":typeof t=="string"?'"'+t+'"':""+t}IOBE(t,e,i,n){let s={startLineNumber:t,startColumn:e,endLineNumber:i,endColumn:n},a=new Ve(Tt.SimpleArrayIndexOutOfBoundsException());throw a.range=s,a}ArrayValue1(t,e){if(e<0||e>=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(e,t.length,1));return t[e]}ArrayValue2(t,e,i){if(e<0||e>=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(e,t.length,1));let n=t[e];if(i<0||i>=n.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(i,n.length,2));return n[i]}ArrayValue3(t,e,i,n){if(e<0||e>=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(e,t.length,1));let s=t[e];if(i<0||i>=s.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(i,s.length,2));if(s=s[i],n<0||n>=s.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(n,s.length,3));return s[n]}ArrayValueN(t,...e){for(let i=0;i=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(n,t.length,i+1));t=t[n]}return t}Array0(t){return M(this,Ps).push(t),t}Array1(t,e){if(e<0||e>=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(e,t.length,1));let i=t[e];return M(this,Ps).push(i),i}Array2(t,e,i){if(e<0||e>=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(e,t.length,1));let n=t[e];if(i<0||i>=n.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(i,n.length,2));let s=n[i];return M(this,Ps).push(s),s}ArrayN(t,...e){for(let n=0;n=t.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(s,t.length,n+1));t=t[s]}let i=t;return M(this,Ps).push(i),i}primitiveStringToStringObject(t){return t==null?null:new Y(t)}CheckLastIndex(t,e){let i=M(this,Ps).pop();if(t<0||t>=i.length)throw new Ve(Tt.ArrayIndexOutOfBoundsException(t,i.length,e));return t}hasCPU(){return!!this.__cpu}}Sa=new WeakMap,Ms=new WeakMap,Mn=new WeakMap,ko=new WeakMap,Co=new WeakMap,xo=new WeakMap,Ta=new WeakMap,Ps=new WeakMap,Ki=new WeakSet,Ag=function(t,e,i){console.log(t),console.log(e.codeAsString),re(this,Ki,$d).call(this,new Xb("SystemException",Tt.SystemException()+t),e)},Ac=function(){if(this.programStack.length==M(this,Mn)){let t=this.currentProgramState.program.stepsSingle[this.currentProgramState.stepIndex];if(t&&t.range&&M(this,Sa)&&M(this,Sa).startLineNumber==t.range.startLineNumber&&M(this,Sa).startColumn==t.range.startColumn)return!1}return this.programStack.length0;){let m=u.exceptionInfoList.pop();if(m.aquiredObjectLocks)for(;m.aquiredObjectLocks.length>0;)re(this,Ki,wc).call(this,m.aquiredObjectLocks.pop());for(let g of i){for(let f of m.catchBlockInfos)if(f.exceptionTypes[g]){a=f;break}if(a)break}if(a){n.push(Object.assign({},u)),t.stacktrace=n.map(f=>({methodIdentifierWithClass:f.program.methodIdentifierWithClass,range:f.currentStepList[f.stepIndex].range,file:f.program.module.file}));let g=Object.assign({},u);g.stepIndex=a.catchBlockBeginsWithStepIndex,g.recentlyThrownException=t,g.afterExceptionTrimStackToSize=m.stackSize,s.push(g);break}else if(m.finallyBlockIndex){let g=Object.assign({},u);g.stepIndex=m.finallyBlockIndex,g.recentlyThrownException=t,g.afterExceptionTrimStackToSize=m.stackSize,s.push(g)}}if(u!=null&&u.aquiredObjectLocks)for(;u.aquiredObjectLocks.length>0;)re(this,Ki,wc).call(this,u.aquiredObjectLocks.pop());n.push(u),this.programStack.pop()}while(this.programStack.length>0&&!a);if(this.programStack.length==0&&!a)this.stackTrace=n.filter(u=>u!=null).map(u=>({range:u.lastExecutedStep?u.lastExecutedStep.getValidRangeOrUndefined():u.currentStepList[u.stepIndex].getValidRangeOrUndefined(),methodIdentifierWithClass:u.program.methodIdentifierWithClass,file:u.program.module.file})),this.stackTrace.length>0&&(this.stackTrace[0].range=t.range),this.exception=t,Gh.printWithLinks(t,this.stackTrace,this.scheduler.interpreter.printManager,(l=this.scheduler.interpreter.breakpointManager)==null?void 0:l.main),(h=this.scheduler.interpreter.exceptionMarker)==null||h.markException(t,e),this.scheduler.interpreter.exception=t,this.state=F.terminatedWithException,this.currentProgramState=void 0;else{for(;s.length>0;)this.programStack.push(s.pop());this.currentProgramState=this.programStack[this.programStack.length-1]}M(this,xo)&&this.returnFromREPLProgram(t,e)},wc=function(t){t.leaveSynchronizedBlock(this)};class V{}r(V,"thread","__t"),r(V,"stack","__s"),r(V,"stackBase","__sb");const he=class he{static elementRelativeToStackbase(t){return V.stack+"["+V.stackBase+(t!=0?" + "+t:"")+"]"}static checkNPE(t,e){return`(${t} ?? ${he.throwNPE}(${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn}))`}};r(he,"cpu",V.thread+".__cpu"),r(he,"classes",V.thread+".classes"),r(he,"newArray",V.thread+"."+ve.prototype.newArray.name),r(he,"print",V.thread+"."+ve.prototype.print.name),r(he,"println",V.thread+"."+ve.prototype.println.name),r(he,"return",V.thread+"."+ve.prototype.return.name),r(he,"threadStack",V.thread+".s"),r(he,"pushProgram",V.thread+"."+ve.prototype.pushProgram.name),r(he,"getExceptionAndTrimStack",V.thread+"."+ve.prototype.getExceptionAndTrimStack.name),r(he,"beginTryBlock",V.thread+"."+ve.prototype.beginTryBlock.name),r(he,"endTryBlock",V.thread+"."+ve.prototype.endCatchTryBlock.name),r(he,"throwArithmeticException",V.thread+"."+ve.prototype.AE.name),r(he,"IOBE",V.thread+"."+ve.prototype.IOBE.name),r(he,"arrayValue1",V.thread+"."+ve.prototype.ArrayValue1.name),r(he,"arrayValue2",V.thread+"."+ve.prototype.ArrayValue2.name),r(he,"arrayValue3",V.thread+"."+ve.prototype.ArrayValue3.name),r(he,"arrayValueN",V.thread+"."+ve.prototype.ArrayValueN.name),r(he,"array0",V.thread+"."+ve.prototype.Array0.name),r(he,"array1",V.thread+"."+ve.prototype.Array1.name),r(he,"array2",V.thread+"."+ve.prototype.Array2.name),r(he,"arrayN",V.thread+"."+ve.prototype.ArrayN.name),r(he,"primitiveStringToStringObject",V.thread+"."+ve.prototype.primitiveStringToStringObject.name),r(he,"checkLastIndex",V.thread+"."+ve.prototype.CheckLastIndex.name),r(he,"throwNPE",V.thread+"."+ve.prototype.NPE.name),r(he,"checkCast",V.thread+"."+ve.prototype.CheckCast.name),r(he,"checkCastToArray",V.thread+"."+ve.prototype.CheckCastToArray.name),r(he,"instanceof",V.thread+"."+ve.prototype.Instanceof.name),r(he,"toString",V.thread+"."+ve.prototype.ToString.name),r(he,"exit",V.thread+"."+ve.prototype.exit.name),r(he,"enterFullspeedMode",V.thread+"."+ve.prototype.EnterFullspeedMode.name),r(he,"exitFullspeedMode",V.thread+"."+ve.prototype.ExitFullspeedMode.name),r(he,"assertionObservers",V.thread+".assertionObservers"),r(he,"registerCodeReached",V.thread+"."+ve.prototype.registerCodeReached.name),r(he,"nullstringIfNull",V.thread+"."+ve.prototype.NullstringIfNull.name),r(he,"primitiveArrayToString",V.thread+"."+ve.prototype._primitiveElementOrArrayToString.name),r(he,"objectArrayToString",V.thread+"."+ve.prototype._arrayOfObjectsToString.name),r(he,"startReplProgram",V.thread+"."+ve.prototype.startREPLProgram.name),r(he,"returnFromReplProgram",V.thread+"."+ve.prototype.returnFromREPLProgram.name),r(he,"leaveAllSynchronizedBlocksInCurrentMethod",V.thread+"."+ve.prototype.leaveAllSynchronizedBlocksInCurrentMethod.name),r(he,"callbackParameter","callback"),r(he,"outerClassAttributeIdentifier","__outerClass");let $=he;var kr;class Il{constructor(t,e){r(this,"run");J(this,kr);r(this,"range");r(this,"codeAsString","");r(this,"catchBlockInfoList");r(this,"finallyBlockIndex");r(this,"innerClass");r(this,"lambdaObject");this.index=t,this.module=e,this.range={startLineNumber:void 0,startColumn:void 0,endLineNumber:void 0,endColumn:void 0}}carriesFakeLineNumbers(){return!1}getValidRangeOrUndefined(){const t=this.range;if(t&&typeof t.startLineNumber<"u"&&t.startLineNumber>=0)return t}setBreakpoint(t,e=!1){const i=(n,s,a)=>n.haltAtNextBreakpoint?(n.state=F.stoppedAtBreakpoint,n.haltAtNextBreakpoint=!1,e&&this.clearBreakpoint(t),this.index):(n.haltAtNextBreakpoint=!0,M(this,kr).call(this,n,s,a));M(this,kr)||(ee(this,kr,this.run),this.run=i)}clearBreakpoint(t){M(this,kr)&&(this.run=M(this,kr),ee(this,kr,void 0))}isEmpty(){return this.codeAsString.trim()==""}setRangeStartIfUndefined(t){var e;!((e=this.range)!=null&&e.startLineNumber)&&t&&t!=oe.instance&&(this.range={startLineNumber:t.startLineNumber,startColumn:t.startColumn,endLineNumber:t.endLineNumber,endColumn:t.endColumn})}adaptRangeEnd(t){t&&t!=oe.instance&&(this.range.endLineNumber?this.range.endLineNumber=t.length||(n==0?i+=Vt.white("Step ")+Vt.blue(yd(s)+": ")+Vt.italic.white(t[s].codeAsString)+` `:i+=Vt.white("Step ")+Vt.blue(yd(s)+": ")+Vt.gray(t[s].codeAsString)+` `)}return i},Jb=function(){return new Yb().printProgram(this)};var Pn,So,Ze,Zl,Hm,Km,$a,Xl,Wn,Cg,xg,Sg,kc,ty;class ey{constructor(t){J(this,Wn);r(this,"runningThreads",[]);J(this,Pn,[]);J(this,So);J(this,Ze,0);r(this,"state");r(this,"keepThread",!1);r(this,"classObjectRegistry",{});J(this,Zl,0);r(this,"stepCountSinceStartOfProgram",0);J(this,Hm,0);J(this,Km,1e3);r(this,"onStartingNextThreadCallback");J(this,$a);r(this,"callbackAfterReplProgramFinished");r(this,"runsSynchronously",!1);J(this,Xl,!1);this.interpreter=t,this.setState(ie.not_initialized)}run(t){if(this.state!=ie.running)return Zn.nothingMoreToDo;if(this.onStartingNextThreadCallback&&this.getNextStepPosition())return this.onStartingNextThreadCallback(),this.onStartingNextThreadCallback=void 0,Zn.nothingMoreToDo;let e=Math.ceil(t/this.runningThreads.length),i=0;if(this.runningThreads.length==0)return Zn.nothingMoreToDo;let n=-1,s={state:F.running,stepsExecuted:0};for(;i0)ee(this,Ze,0),a=this.runningThreads[0],n=-1;else return Zn.nothingMoreToDo;if(a.maxStepsPerSecond&&a.fullspeedCounter==0){let l=performance.now(),h=1e3/a.maxStepsPerSecond,u=l-a.lastTimeThreadWasRun,m=Math.min(u/h,e);if(m>=.5)s=a.run(m),a.lastTimeThreadWasRun=a.lastTimeThreadWasRun+s.stepsExecuted*h,a.maxStepsPerSecond<20?(this.interpreter.showProgramPointer(this.getNextStepPosition(a)),this.interpreter.updateDebugger()):this.state==ie.running&&this.interpreter.hideProgrampointerPosition();else if(s.state=a.state,s.stepsExecuted=0,this.runningThreads.length==1)return Zn.nothingMoreToDo}else s=a.run(e);if(i+=s.stepsExecuted,s.state!=F.running)switch(s.state){case F.terminated:case F.terminatedWithException:if(a.__cpu&&this.interpreter.updateDebugger(),this.runningThreads.splice(M(this,Ze),1),M(this,Ze)>this.runningThreads.length-1&&(ee(this,Ze,-1),this.keepThread=!1),!this.hasRunningOrWaitingThreads()&&!this.interpreter.hasActorsOrPAppletOrRunningTimers()||s.state==F.terminatedWithException){if(a.maxStepsPerSecond&&this.interpreter.hideProgrampointerPosition(),this.stepCountSinceStartOfProgram+=i,this.interpreter.setState(ie.stopped),s.state==F.terminatedWithException&&this.interpreter.setState(ie.error),M(this,$a)){let l=M(this,$a);ee(this,$a,void 0),l()}return this.isJUnitTestMethod()||this.interpreter.eventManager.fire("done"),Zn.nothingMoreToDo}break;case F.stoppedAtBreakpoint:a.state=F.running,this.interpreter.pause();break;case F.immediatelyAfterReplStatement:if(a.programStack.length==0&&this.runningThreads.splice(this.runningThreads.indexOf(a),1),this.callbackAfterReplProgramFinished){let l=this.callbackAfterReplProgramFinished;this.callbackAfterReplProgramFinished=void 0,l()}break;case F.changeSpeedRequested:return a.state=F.running,this.stepCountSinceStartOfProgram+=i,Zn.nothingMoreToDo}this.keepThread||(Ho(this,Ze)._++,M(this,Ze)>=this.runningThreads.length&&ee(this,Ze,0))}return this.stepCountSinceStartOfProgram+=i,Zn.giveMeAdditionalTime}hasRunningOrWaitingThreads(){if(this.runningThreads.length>0)return!0;for(let t of M(this,Pn))if(t.state==F.timedWaiting)return!0;return!1}setState(t){switch(t){case ie.running:ee(this,Zl,performance.now()),this.stepCountSinceStartOfProgram=0;break;case ie.stopped:case ie.error:if(this.state==ie.running&&!this.interpreter.printManager.isTestPrintManager()){let i=performance.now()-M(this,Zl),n=Math.round(this.stepCountSinceStartOfProgram/i*1e3);this.interpreter.printManager.stopLogging(),this.interpreter.printManager.print("",!0,void 0),this.interpreter.printManager.print(Tt.ExecutionTime()+": "+Math.round(i*100)/100+" ms, "+this.stepCountSinceStartOfProgram+" steps, "+re(this,Wn,Cg).call(this,n)+" steps/s",!0,void 0)}re(this,Wn,xg).call(this);break}this.state=t}runSingleStepKeepingThread(t,e){this.keepThread=!0,re(this,Wn,Sg).call(this);let i=this.getCurrentThread();if(i!=null)if(t){if(this.state==ie.paused){this.setState(ie.running);let n=!1;do{this.run(1);let s=this.getNextStep();n=!(s&&!s.getValidRangeOrUndefined()&&i.state==F.running)}while(!n);this.setState(ie.paused)}e()}else i.markSingleStepOver(()=>{e()}),this.interpreter.setState(ie.running)}stepOut(t){this.keepThread=!0;const e=this.runningThreads[M(this,Ze)];e!=null&&e.markStepOut(()=>{t()})}unmarkCurrentlyExecutedSingleStep(){let t=this.runningThreads[M(this,Ze)];t&&t.unmarkStep()}createThread(t,e=[],i=!1){let n=new ve(this,t,e);return i?this.runningThreads.splice(Math.floor(Math.random()*this.runningThreads.length+1),0,n):this.runningThreads.push(n),n.name!="act method-thread"&&(this.interpreter.isMaxSpeed||(n.maxStepsPerSecond=this.interpreter.stepsPerSecondGoal)),n}removeThread(t){this.runningThreads.splice(this.runningThreads.indexOf(t),1)}suspendThread(t){let e=this.runningThreads.indexOf(t);e>=0&&(this.runningThreads.splice(e,1),M(this,Ze)>e&&Ho(this,Ze)._--),M(this,Pn).push(t)}restoreThread(t){if(t.state>=F.terminated)return;t.state=F.running;let e=M(this,Pn).indexOf(t);e>=0&&M(this,Pn).splice(e,1),this.runningThreads.push(t)}getNextStep(t){if(t=t||this.runningThreads[M(this,Ze)],!t)return;let e=t.currentProgramState;return(e==null?void 0:e.currentStepList[e.stepIndex])||void 0}getNextStepPosition(t){if(t=t||this.runningThreads[M(this,Ze)],!t)return;if(t.__cpu){let s=t.__cpu.getCurrentPosition();return s||void 0}let e=t.currentProgramState,i=e==null?void 0:e.currentStepList[e.stepIndex];if(i)return{programOrmoduleOrFile:e.program,range:i.range}}init(t,e,i){var s;re(this,Wn,kc).call(this,t),t.initializeClassObjects();const n=this.createThread("main thread");if(!(e&&!(e!=null&&e.startMainProgram(n,i=="stepOver")))){for(const a of t.staticInitializationSequence)n.pushProgram(a.program);if(i=="stepInto")for(let a=n.programStack.length-1;a>=0;a--){let l=n.programStack[a];for(let h of l.currentStepList)if(((s=h.range)==null?void 0:s.startLineNumber)>=0){h.setBreakpoint(h.range.startLineNumber,!0),a=-1;break}}return n}}initJUnitTestMethodAndReturnMainThread(t,e,i){if(!t)return;ee(this,Xl,!0),re(this,Wn,kc).call(this,t);let n=this.createThread("main thread"),s=e.classEnumInterface,a=new Ir(s.module,void 0,s.identifier+".testStub_"+e.identifier),l=s.getAllMethods().filter(f=>f.isConstructor&&f.parameters.length==0);if(l.length==0){console.log("Couldn't find parameterless constructor for class "+s.identifier+".");return}let h=l[0],u=`new ${$.classes}["${s.identifier}"]().${h.getInternalName("java")}(${V.thread}, () => {}); return 1; `;a.createAndAddStep(u);let m=`${$.elementRelativeToStackbase(0)}.${e.getInternalName("java")}(${V.thread}, undefined); return 2; `;a.createAndAddStep(m);let g=`${$.return}(); `;if(a.createAndAddStep(g),a.compileToJavascriptFunctions()!=null){console.log("TestManager.executeSingleTest: Error compiling test method stub.");return}n.pushProgram(a),ee(this,$a,i);for(let f of t.staticInitializationSequence)n.pushProgram(f.program);return n}getCurrentThread(){return this.runningThreads[M(this,Ze)]}resetLastTimeExecutedTimestamps(){this.runningThreads.filter(t=>t.maxStepsPerSecond).forEach(t=>t.lastTimeThreadWasRun=performance.now())}setMaxSpeed(t,e){this.runningThreads.filter(i=>i.name!="act method-thread").forEach(i=>i.maxStepsPerSecond=e?void 0:t)}setAsCurrentThread(t){let e=this.runningThreads.indexOf(t);e>=0?ee(this,Ze,e):(this.runningThreads.push(t),ee(this,Ze,this.runningThreads.length-1)),t.state=F.running}saveAllThreadsBut(t){ee(this,So,this.runningThreads.filter(e=>e!=t)),this.runningThreads=[t],ee(this,Ze,0)}retrieveThreads(){M(this,So)&&(this.runningThreads=this.runningThreads.concat(M(this,So)),ee(this,Ze,0))}exit(t){var e;console.log("Exited with status "+t),(e=this.interpreter.printManager)==null||e.print("Exited with status "+t,!0,16777215),this.interpreter.exitStatus=t,this.interpreter.stop(!1)}getAllThreads(){return this.runningThreads.concat(M(this,Pn))}isJUnitTestMethod(){return M(this,Xl)}}Pn=new WeakMap,So=new WeakMap,Ze=new WeakMap,Zl=new WeakMap,Hm=new WeakMap,Km=new WeakMap,$a=new WeakMap,Xl=new WeakMap,Wn=new WeakSet,Cg=function(t){return t<1e6?""+Math.trunc(t):(t=Math.trunc(t/1e3)*1e3/1e6,t+" million")},xg=function(){this.runningThreads.forEach(t=>t.state=F.terminated),M(this,Pn).forEach(t=>t.state=F.terminated),this.runningThreads.length=0,M(this,Pn).length=0},Sg=function(){let t=this.runningThreads[M(this,Ze)];if(t){let e=t.currentProgramState,i=e==null?void 0:e.currentStepList[e.stepIndex];i!=null&&i.isBreakpoint()&&(t.haltAtNextBreakpoint=!1)}},kc=function(t){this.classObjectRegistry=t.classObjectRegistry,this.runningThreads=[],ee(this,Pn,[]),ee(this,Ze,0),this.keepThread=!1},ty=function(){this.runningThreads=[],ee(this,Pn,[])};class Ct{}r(Ct,"CantJumpToLine",()=>d({de:"Das Programm kann die Ausführung nicht in dieser Zeile fortsetzen, da sie nicht innerhalb der aktuellen Methode liegt.",en:"You can't continue program execution in this line as it's outside scope of the current method."})),r(Ct,"runProgram",()=>d({de:"Programm starten",en:"Run program"})),r(Ct,"pause",()=>d({de:"Pause",en:"Pause"})),r(Ct,"stop",()=>d({de:"Programm anhalten",en:"Stop program"})),r(Ct,"toggleBreakpoint",()=>d({de:"Haltepunkt ein/aus",en:"Toggle breakpoint"})),r(Ct,"stepOver",()=>d({de:"Einzelschritt (step over)",en:"Step over"})),r(Ct,"stepInto",()=>d({de:"Einzelschritt (step into)",en:"Step into"})),r(Ct,"stepOut",()=>d({de:"Step out",en:"Step out"})),r(Ct,"restart",()=>d({de:"Neu starten",en:"Restart"})),r(Ct,"goto",()=>d({de:"Goto",en:"Goto"}));class E{}r(E,"NewFileName",()=>d({de:"Datei",en:"File",fr:"Fichier"})),r(E,"NewWorkspaceName",()=>d({de:"Workspace",en:"Workspace",fr:"Espace de travail"})),r(E,"FilenameHasBeenTruncated",t=>d({de:`Der Dateiname wurde auf ${t} Zeichen gekürzt.`,en:`Filename has been truncated to ${t} characters.`,fr:`Le nom du fichier a été tronqué à ${t} caractères.`})),r(E,"SynchronizeWorkspace",()=>d({de:"Workspace mit Repository synchronisieren",en:"Synchronize workspace with repository",fr:"Synchroniser workspace avec repository"})),r(E,"cantMoveFilesToWorkspaceFolder",()=>d({de:"Dateien können nicht in einen Workspace-Ordner verschoben/kopiert werden.",en:"Cannot move/copy files to workspace folder.",fr:"Impossible de déplacer/copier des fichiers vers le dossier de l'espace de travail."})),r(E,"startMainProgram",()=>d({de:"Starte das in dieser Datei enthaltene Hauptprogramm",en:"Start main program contained in this file",fr:"Démarrer le programme principal contenu dans ce fichier"})),r(E,"File",()=>d({de:"Datei",en:"File",fr:"Fichier"})),r(E,"ImportWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace",fr:"Importer un espace de travail"})),r(E,"ExportCurrentWorkspace",()=>d({de:"Aktuellen Workspace exportieren",en:"Export current workspace",fr:"Exporter l'espace de travail actuel"})),r(E,"NoWorkspaceSelected",()=>d({de:"Kein Workspace ausgewählt.",en:"No workspace selected",fr:"Aucun espace de travail sélectionné."})),r(E,"ExportAllWorkspacesAsJSon",()=>d({de:"Alle Workspaces also JSON-Datei exportieren",en:"Export all workspaces as JSON file",fr:"Exporter tous les espaces de travail en tant que fichier JSON"})),r(E,"ExportAllWorkspacesAsZip",()=>d({de:"Alle Workspaces als ZIP-Datei exportieren",en:"Export all workspaces as ZIP file",fr:"Exporter tous les espaces de travail en tant que fichier ZIP"})),r(E,"ExportAllWorkspacesDone",()=>d({de:"Alle Workspaces wurden exportiert.",en:"All workspaces have been exported.",fr:"Tous les espaces de travail ont été exportés."})),r(E,"Settings",()=>d({de:"Einstellungen",en:"Settings",fr:"Paramètres"})),r(E,"SaveAndExit",()=>d({de:"Speichern und beenden",en:"Save and exit",fr:"Enregistrer et quitter"})),r(E,"Edit",()=>d({de:"Bearbeiten",en:"Edit",fr:"Modifier"})),r(E,"Undo",()=>d({de:"Rückgängig (Strg + z)",en:"Undo (Ctrl + z)",fr:"Annuler (Ctrl + z)"})),r(E,"Redo",()=>d({de:"Wiederholen (Strg + y)",en:"Redo (Ctrl + y)",fr:"Rétablir (Ctrl + y)"})),r(E,"Copy",()=>d({de:"Kopieren (Strg + c)",en:"Copy (Ctrl + c)",fr:"Copier (Ctrl + c)"})),r(E,"Cut",()=>d({de:"Ausschneiden (Strg + x)",en:"Cut (Ctrl + x)",fr:"Couper (Ctrl + x)"})),r(E,"Paste",()=>d({de:"Einfügen (Strg + v)",en:"Paste (Ctrl + v)",fr:"Coller (Ctrl + v)"})),r(E,"CopyToTop",()=>d({de:"Nach oben kopieren (Alt + Shift + Pfeil rauf)",en:"Copy to top (Alt + Shift + Arrow up)",fr:"Copier vers le haut (Alt + Maj + Flèche haut)"})),r(E,"CopyToBottom",()=>d({de:"Nach unten kopieren (Alt + Shift + Pfeil runter)",en:"Copy to Bottom (Alt + Shift + Arrow down)",fr:"Copier vers le bas (Alt + Maj + Flèche bas)"})),r(E,"MoveToTop",()=>d({de:"Nach oben verschieben (Alt + Pfeil rauf)",en:"Move to top (Alt + Arrow up)",fr:"Déplacer vers le haut (Alt + Flèche haut)"})),r(E,"MoveToBottom",()=>d({de:"Nach unten verschieben (Alt + Pfeil runter)",en:"Move to Bottom (Alt + Arrow down)",fr:"Déplacer vers le bas (Alt + Flèche bas)"})),r(E,"Find",()=>d({de:"Suchen... (Strg + f)",en:"Find... (Ctrl + f)",fr:"Rechercher... (Ctrl + f)"})),r(E,"Replace",()=>d({de:"Ersetzen... (Strg + h)",en:"Replace... (Ctrl + h)",fr:"Remplacer... (Ctrl + h)"})),r(E,"ToggleComment",()=>d({de:"Aus-/Einkommentieren (Strg + ,)",en:"Toggle comment (Ctrl + ,)",fr:"Activer/Désactiver le commentaire (Ctrl + ,)"})),r(E,"AutoFormat",()=>d({de:"Dokument automatisch formatieren (Alt + Shift + f)",en:"Auto format (Alt + Shift + f)",fr:"Formater automatiquement (Alt + Maj + f)"})),r(E,"FindCorrespondingBracket",()=>d({de:"Finde zugehörige Klammer (Strg + k)",en:"Find corresponding bracket (Ctrl + k)",fr:"Trouver la parenthèse correspondante (Ctrl + k)"})),r(E,"FoldAll",()=>d({de:"Alles zusammenfalten",en:"Fold all",fr:"Tout replier"})),r(E,"UnfoldAll",()=>d({de:"Alles auffalten",en:"Unfold all",fr:"Tout déplier"})),r(E,"TriggerSuggest",()=>d({de:"Vorschlag auslösen (Strg + Leertaste)",en:"Trigger suggestion (Ctrl + Space)",fr:"Déclencher la suggestion (Ctrl + Espace)"})),r(E,"TriggerParameterHint",()=>d({de:"Parameterhilfe (Strg + Shift + Leertaste)",en:"Trigger parameter hint (Ctrl + Shift + Space)",fr:"Déclencher l'aide aux paramètres (Ctrl + Maj + Espace)"})),r(E,"GoToDefinition",()=>d({de:"Gehe zur Definition (Strg + Click)",en:"Got to definition (Ctrl + click)",fr:"Aller à la définition (Ctrl + Clic)"})),r(E,"View",()=>d({de:"Ansicht",en:"View",fr:"Affichage"})),r(E,"Theme",()=>d({de:"Theme",en:"Theme",fr:"Thème"})),r(E,"Dark",()=>d({de:"Dark",en:"Dark",fr:"Sombre"})),r(E,"Light",()=>d({de:"Light",en:"Light",fr:"Clair"})),r(E,"SetDefaultFontSize",()=>d({de:"Schriftgröße zurücksetzen",en:"Reset font size",fr:"Réinitialiser la taille de la police"})),r(E,"HighContrastOnOff",()=>d({de:"Hoher Kontrast im Editor ein/aus",en:"High contrast on/off",fr:"Contraste élevé dans l'éditeur activé/désactivé"})),r(E,"ZoomOut",()=>d({de:"Zoom out (Strg + Mausrad)",en:"Zoom out (Ctrl + mouse wheel)",fr:"Dézoomer (Ctrl + molette de la souris)"})),r(E,"ZoomNormal",()=>d({de:"Zoom normal",en:"Zoom normal",fr:"Zoom normal"})),r(E,"ZoomIn",()=>d({de:"Zoom in (Strg + Mausrad)",en:"Zoom in (Ctrl + mouse wheel)",fr:"Zoomer (Ctrl + molette de la souris)"})),r(E,"LinebreakOnOff",()=>d({de:"Automatischer Zeilenumbruch ein/aus",en:"Automatic line break on/off",fr:"Retour à la ligne automatique activé/désactivé"})),r(E,"Repository",()=>d({de:"Repository",en:"Repository",fr:"Dépôt"})),r(E,"ConfigureOwnRepositories",()=>d({de:"Eigene Repositories verwalten ...",en:"Configure own repositories ...",fr:"Gérer vos propres dépôts ..."})),r(E,"Checkout",()=>d({de:"Workspace mit Repository verbinden (checkout) ...",en:"Connect workspace to repository (checkout) ...",fr:"Connecter l'espace de travail au dépôt (checkout) ..."})),r(E,"importRepository",()=>d({de:"Repository aus Datei importieren ...",en:"Import repository from file ..."})),r(E,"Sprites",()=>d({de:"Sprites",en:"Sprites",fr:"Sprites"})),r(E,"AddOwnSprites",()=>d({de:"Spritesheet ergänzen ...",en:"Add own sprites to spritesheet ...",fr:"Ajouter vos propres sprites à la feuille de sprites ..."})),r(E,"SpriteCatalogue",()=>d({de:"Sprite-Bilderübersicht ...",en:"Sprite catalog",fr:"Catalogue de sprites ..."})),r(E,"Help",()=>d({de:"Hilfe",en:"Help",fr:"Aide"})),r(E,"VideoTutorials",()=>d({de:"Kurze Video-Tutorials zur Bedienung dieser IDE",en:"Short video tutorials about this IDE",fr:"Courts tutoriels vidéo sur l'utilisation de cet IDE"})),r(E,"JavaTutorial",()=>d({de:"Interaktives Java-Tutorial mit vielen Beispielen",en:"Interactive Java tutorial",fr:"Tutoriel Java interactif avec de nombreux exemples"})),r(E,"APIDoc",()=>d({de:"API-Dokumentation",en:"API documentation",fr:"Documentation API"})),r(E,"APIReference",()=>d({de:"API-Verzeichnis",en:"API reference",fr:"Référence API"})),r(E,"Shortcuts",()=>d({de:"Tastaturkommandos (shortcuts)",en:"Shortcuts",fr:"Raccourcis clavier"})),r(E,"Changelog",()=>d({de:"Online-IDE Changelog",en:"Online-IDE changelog",fr:"Journal des modifications de l'IDE en ligne"})),r(E,"Roadmap",()=>d({de:"Online-IDE Roadmap",en:"Online-IDE roadmap",fr:"Feuille de route de l'IDE en ligne"})),r(E,"EditorCommandPalette",()=>d({de:"Befehlspalette (F1)",en:"Editor commands (F1)",fr:"Palette de commandes de l'éditeur (F1)"})),r(E,"ChangePassword",()=>d({de:"Passwort ändern ...",en:"Change password ...",fr:"Changer le mot de passe ..."})),r(E,"BugReport",()=>d({de:"Fehler melden ...",en:"Report bug ...",fr:"Signaler un bug ..."})),r(E,"About",()=>d({de:"Über die Online-IDE ...",en:"About Online-IDE",fr:"À propos de l'IDE en ligne ..."})),r(E,"Imprint",()=>d({de:"Impressum",en:"Imprint",fr:"Mentions légales"})),r(E,"PrivacyPolicy",()=>d({de:"Datenschutzerklärung ...",en:"Privacy policy ...",fr:"Politique de confidentialité ..."})),r(E,"Version",()=>d({de:"Version",en:"Version",fr:"Version"})),r(E,"ClassesUserTests",()=>d({de:"Klassen/Benutzer/Prüfungen ...",en:"Classes/Users/Tests ...",fr:"Classes/Utilisateurs/Tests ..."})),r(E,"ServerStatistics",()=>d({de:"Serverauslastung ...",en:"Server statistics ...",fr:"Statistiques du serveur ..."})),r(E,"ShutdownServer",()=>d({de:"Shutdown server ...",en:"Shutdown server",fr:"Arrêter le serveur ..."})),r(E,"ReallyShutdownServer",()=>d({de:"Server wirklich herunterfahren?",en:"Are you sure to shutdown server?",fr:"Voulez-vous vraiment arrêter le serveur ?"})),r(E,"ServerShutdownDone",()=>d({de:"Server erfolgreich heruntergefahren.",en:"Server shutdown complete.",fr:"Arrêt du serveur terminé avec succès."})),r(E,"ProgramRun",()=>d({de:"Start",en:"Run",fr:"Exécuter"})),r(E,"ProgramPause",()=>d({de:"Pause",en:"Pause",fr:"Pause"})),r(E,"ProgramStop",()=>d({de:"Stop",en:"Stop",fr:"Arrêter"})),r(E,"ProgramStepOver",()=>d({de:"Step over",en:"Step over",fr:"Pas à pas (passer)"})),r(E,"ProgramStepInto",()=>d({de:"Step into",en:"Step into",fr:"Pas à pas (entrer)"})),r(E,"ProgramStepOut",()=>d({de:"Step out",en:"Step out",fr:"Pas à pas (sortir)"})),r(E,"ProgramGotoCursor",()=>d({de:"Goto cursor",en:"Goto cursor",fr:"Aller au curseur"})),r(E,"ProgramRestart",()=>d({de:"Restart",en:"Restart",fr:"Redémarrer"})),r(E,"ProgramExecuteAllTests",()=>d({de:"Alle JUnit-Tests im Workspace ausführen",en:"Start all JUnit tests in current workspace",fr:"Exécuter tous les tests JUnit dans l'espace de travail actuel"})),r(E,"HelperFolder",()=>d({de:`Mit diesem Button können Sie in der Liste der Workspaces Ordner anlegen.
  • Bestehende Workspaces lassen sich mit der Maus in Ordner ziehen.
  • Wollen Sie einen Workspace in die oberste Ordnerebene bringen, so ziehen Sie ihn einfach auf den "Workspaces"-Balken.
  • Über das Kontextmenü der Ordner lassen sich Workspaces und Unterordner anlegen.
`,en:`Use this button to create new folders in workspace list.
  • Use mouse to drag/drop workspaces from folder to folder.
  • Move workspace to topmost folder by dragging it to "Workspaces" heading.
  • Create subfolders by right-click -> context menu
`,fr:`Avec ce bouton, vous pouvez créer des dossiers dans la liste des espaces de travail.
  • Les espaces de travail existants peuvent être déplacés par glisser-déposer vers des dossiers.
  • Si vous souhaitez placer un espace de travail au niveau supérieur, faites-le simplement glisser sur la barre "Espaces de travail".
  • Via le menu contextuel des dossiers, vous pouvez créer des espaces de travail et des sous-dossiers.
`})),r(E,"HelperRepositoryButton",()=>d({de:'Wenn der aktuelle Workspace mit einem Repository verknüft ist, erscheint hier der "Synchronisieren-Button". Ein Klick darauf öffnet einen Dialog, in dem die Dateien des Workspace mit denen des Repositorys abgeglichen werden können.',en:"If current workspace is connected to repository then use synchronize-button to synchronize from/to repository.",fr:`Si l'espace de travail actuel est lié à un dépôt, le bouton "Synchroniser" apparaît ici. Un clic dessus ouvre une boîte de dialogue permettant de synchroniser les fichiers de l'espace de travail avec ceux du dépôt.`})),r(E,"HelperSpeedControl",()=>d({de:`Mit dem Geschwindigkeitsregler können Sie einstellen, wie schnell das Programm abläuft. Bei Geschwindigkeiten bis 10 Steps/s wird während des Programmablaufs der Programzeiger gezeigt und die Anzeige der Variablen auf der linken Seite stets aktualisiert.`,en:"Use speed control to adjust program execution speed. If speed is lower than 10 steps/s, then program pointer live view is enabled.",fr:"Le régulateur de vitesse vous permet de régler la rapidité d'exécution du programme. Pour des vitesses allant jusqu'à 10 étapes/s, le pointeur de programme est affiché pendant l'exécution et l'affichage des variables sur le côté gauche est toujours mis à jour."})),r(E,"HelperNewFile",()=>d({de:`Es gibt noch keine Programmdatei im Workspace.
Nutzen Sie den Button um eine Programmdatei anzulegen. `,en:`There's no file inside workspace yet.
Use button to create file. `,fr:`Il n'y a pas encore de fichier programme dans l'espace de travail.
Utilisez le bouton pour créer un fichier programme. `})),r(E,"HelperNewWorkspace",()=>d({de:`Es gibt noch keinen Workspace.
Nutzen Sie den Button um einen Workspace anzulegen. `,en:`There's no workspace yet.
Use button to create one. `,fr:`Il n'y a pas encore d'espace de travail.
Utilisez le bouton pour en créer un. `})),r(E,"HelperHome",()=>d({de:"Mit dem Home-Button können Sie wieder zu Ihren eigenen Workspaces wechseln.",en:"Use home button to switch back to your own workspaces.",fr:"Avec le bouton Accueil , vous pouvez revenir à vos propres espaces de travail."})),r(E,"HelperStepButtons",()=>d({de:`Mit den Buttons "Step over" (, Taste F8), "Step into" (, Taste F7) und "Step out" (, Taste F9) können Sie das Programm schrittweise ausführen und sich nach jedem Schritt die Belegung der Variablen ansehen.
  • Step over führt den nächsten Schritt aus, insbesondere werden Methodenaufrufe in einem Schritt durchgeführt.
  • Step into führt auch den nächsten Schritt aus, geht bei Methodenaufrufen aber in die Methode hinein und führt auch die Anweisungen innerhalb der Methode schrittweise aus.
  • Befindet sich die Programmausführung innerhalb einer Methode, so bewirkt ein Klick auf Step out, dass der Rest der Methode ausgeführt wird und die Programmausführung erst nach der Aufrufstelle der Methode anhält.
`,en:`Use buttons "Step over" (, F8), "Step into" (, F7) and "Step out" (, F9) to execute stepwise and inspect variables after each step.
  • Step over executes next step and doesn't step into method calls.
  • Step into executes next step and steps into method calls.
  • Step out continues execution until return from current method.
`,fr:`Avec les boutons "Pas à pas (passer)" (, Touche F8), "Pas à pas (entrer)" (, Touche F7) et "Pas à pas (sortir)" (, Touche F9) vous pouvez exécuter le programme pas à pas et visualiser l'affectation des variables après chaque étape.
  • "Pas à pas (passer)" exécute l'étape suivante, en particulier les appels de méthode sont effectués en une seule étape.
  • "Pas à pas (entrer)" exécute également l'étape suivante, mais lors d'appels de méthode, il entre dans la méthode et exécute également les instructions à l'intérieur de la méthode pas à pas.
  • Si l'exécution du programme se trouve à l'intérieur d'une méthode, un clic sur "Pas à pas (sortir)" fait en sorte que le reste de la méthode soit exécuté et que l'exécution du programme ne s'arrête qu'après le point d'appel de la méthode.
`})),r(E,"HelperConsole",()=>d({de:` Hier können Sie Anweisungen oder Terme eingeben, die nach Bestätigung mit der Enter-Taste ausgeführt/ausgewertet werden. Das Ergebnis sehen Sie im Bereich über der Eingabezeile.
Falls das Programm gerade pausiert (z.B. bei Ausführung in Einzelschritten) können Sie auch auf die Variablen des aktuellen Sichtbarkeitsbereiches zugreifen.`,en:"You can type statements and expressions into the console. Use enter key to execute them. Expression values are shown above edit-line. Use debugger view to inspect variables.",fr:` Ici, vous pouvez saisir des instructions ou des expressions qui seront exécutées/évaluées après confirmation avec la touche Entrée. Le résultat s'affiche dans la zone au-dessus de la ligne de saisie.
Si le programme est en pause (par exemple, lors d'une exécution pas à pas), vous pouvez également accéder aux variables de la portée actuelle.`})),r(E,"HelperSpritesheet",()=>d({de:`Unter "Sprites -> Spritesheet ergänzen" können Sie eigene png-Grafikdateien hochladen und dann als Sprites verwenden. Die Sprites werden je Workspace bzw. je Repository gespeichert.

Die Übersicht der fest in die Online-IDE integrierten Sprites finden Sie jetzt nicht mehr im Hilfe-Menü, sondern auch hier unter "Sprites->Sprite-Bilderübersicht".`,en:'With "Sprites -> Add own sprites to spritesheet" you may upload png files to complement system spritesheet.',fr:`Sous "Sprites -> Ajouter à la feuille de sprites", vous pouvez télécharger vos propres fichiers graphiques png et les utiliser comme sprites. Les sprites sont enregistrés par espace de travail ou par dépôt.

L'aperçu des sprites intégrés à l'IDE en ligne ne se trouve plus dans le menu d'aide, mais ici aussi sous "Sprites -> Catalogue de sprites".`}));class iy{static prepareArrayPrototype(){new Array(0),Object.defineProperty(Array.prototype,"_mj$toString$String$",{value:function(t,e){t.ToString(t,e,this)},writable:!1,configurable:!0})}}class Tg{constructor(t,e,i){r(this,"staticInitializationSequence",[]);r(this,"isCompiledToJavascript",!1);this.classObjectRegistry=t,this.globalErrors=e,this.exceptionTree=i}compileToJavascript(){this.isCompiledToJavascript||this.getModuleManager().compileModulesToJavascript()&&(this.isCompiledToJavascript=!0)}initializeClassObjects(){for(const[t,e]of Object.entries(this.classObjectRegistry)){let i=e.type;i instanceof ep&&i.initClassObject()}}findStartableModule(t){if(t!=null&&t.isStartable())return t;if(!(t!=null&&t.hasErrors())){const e=this.getModuleManager().getModules().filter(i=>i.isStartable());if(e.length===1)return e[0]}return null}getAllErrors(){let t=this.globalErrors;for(const e of this.getModuleManager().getModules())t=t.concat(e.errors);return t}}var Jn,Hs,$g,Ig,Eg;class El extends Tg{constructor(e,i,n,s,a){super(e,s,a);J(this,Hs);J(this,Jn);this.classObjectRegistry=e,this.moduleManager=i,this.libraryModuleManager=n,this.globalErrors=s,this.exceptionTree=a,re(this,Hs,$g).call(this,s),re(this,Hs,Ig).call(this)}getModuleManager(){return this.moduleManager}hasTests(){return M(this,Jn)||this.getTestMethods(),M(this,Jn).size>0}getTestMethods(){if(M(this,Jn))return M(this,Jn);ee(this,Jn,new Map);for(const e of this.moduleManager.getModules())for(const i of e.types)if(i instanceof Le){const n=i.getOwnMethods().filter(a=>{var l;return!a.isConstructor&&a.hasAnnotation("Test")&&((l=a.returnParameterType)==null?void 0:l.identifier)=="void"&&a.parameters.length==0});if(n.length==0)continue;let s=M(this,Jn).get(i);s||(s=[],M(this,Jn).set(i,s)),s.push(...n)}return M(this,Jn)}}Jn=new WeakMap,Hs=new WeakSet,$g=function(e){const i=[];this.staticInitializationSequence=[];for(const s of this.moduleManager.getModules().filter(a=>!a.hasErrors()))if(s.ast)for(const a of s.ast.innerTypes)a.resolvedType&&i.push(a.resolvedType);let n=!1;for(;!n&&i.length>0;){n=!0;for(let s=0;s0&&this.staticInitializationSequence.push({klass:a.runtimeClass,program:a.staticInitializer});const h=i.indexOf(a);h>=0&&i.splice(h,1),s--,n=!1}}}if(i.length>0){const s=v.cyclicReferencesAmongStaticVariables(i.map(a=>a.identifier).join(", "));e.push({message:s.message,id:s.id,level:"error",range:oe.instance})}},Ig=function(){const e=[];for(const n of this.moduleManager.getModules().filter(s=>!s.hasErrors()))if(n.ast)for(const s of n.ast.innerTypes){const a=s.resolvedType;a&&a.diInitializer&&a.diInitializer.stepsSingle.length>0&&e.push(a)}const i=re(this,Hs,Eg).call(this,e);for(const n of i)this.staticInitializationSequence.push({klass:n.runtimeClass,program:n.diInitializer})},Eg=function(e){const i=new Map;for(const l of e)l.diInstanceName&&i.set(l.diInstanceName,l);const n=[],s=new Set,a=l=>{var u;if(!l.diInstanceName||s.has(l.diInstanceName))return;s.add(l.diInstanceName);const h=this.moduleManager.getModules().find(m=>m.types.includes(l));if(h!=null&&h.ast){const m=h.ast.innerTypes.find(g=>g.resolvedType===l);if(m)for(const g of m.fieldsOrInstanceInitializers??[]){const f=(u=g.annotations)==null?void 0:u.find(b=>b.identifier==="Inject");if(f!=null&&f.parameter){const b=i.get(f.parameter);b&&a(b)}}}n.push(l)};for(const l of e)a(l);return n};var Jl,To,ed,$o,Mh,es,Io,ts,Be,ny,ry,Dg,Cc,jg,Mg,Pg,Og,Lg,xc,Sc,Qo;const vs=class vs{constructor(t,e,i,n,s,a,l,h,u,m){J(this,Be);J(this,Jl);r(this,"scheduler");r(this,"isExternalTimer",!1);J(this,To);J(this,ed,33);r(this,"executable");r(this,"assertionObserverList",[]);r(this,"codeReachedAssertions",new cg);r(this,"printManager");r(this,"eventManager",new tp);r(this,"actorManager");r(this,"exitStatus");r(this,"exception");J(this,$o,new Map);J(this,Mh,["start","pause","stop","stepOver","stepInto","stepOut","restart"]);J(this,es,{start:[!1,!1,!0,!0,!0],pause:[!1,!0,!1,!1,!1],stop:[!1,!0,!0,!1,!1],stepOver:[!1,!1,!0,!0,!0],stepInto:[!1,!1,!0,!0,!0],gotoCursor:[!1,!1,!0,!0,!0],stepOut:[!1,!1,!0,!1,!1],restart:[!1,!0,!0,!1,!1]});J(this,ts);r(this,"stepsPerSecondGoal",1e8);r(this,"isMaxSpeed",!0);r(this,"showTriangleAtProgramPointer",!0);r(this,"speedBeforeProgramStart");var g;this.actionManager=e,this.graphicsManager=i,this.keyboardManager=n,this.breakpointManager=s,this.programPointerManager=a,this.inputManager=l,this.fileManager=h,this.exceptionMarker=u,this.main=m,iy.prepareArrayPrototype(),this.printManager=t||new vg,(g=this.graphicsManager)==null||g.setInterpreter(this),re(this,Be,Og).call(this),this.actorManager=new bg(this),s&&s.attachToInterpreter(this),this.scheduler=new ey(this),ee(this,Jl,new Qb(this.scheduler,this)),re(this,Be,Dg).call(this),this.setStepsPerSecond(1e8,!0),this.setState(ie.not_initialized)}setExecutable(t){t&&(this.executable=t,t.compileToJavascript(),t.isCompiledToJavascript?(re(this,Be,Qo).call(this,t),this.setState(ie.stopped),this.eventManager.fire("afterExcecutableInitialized",t)):this.setState(ie.not_initialized))}attachAssertionObserver(t){this.assertionObserverList.push(t)}timerFunction(t){this.actorManager.callActMethods(33),M(this,Jl).tick(t)}executeOneStep(t){if(this.scheduler.state!=ie.paused){if(this.scheduler.state==ie.not_initialized)return;this.printManager.clear(),this.resetRuntime(),re(this,Be,Qo).call(this,this.executable,void 0,t?"stepInto":"stepOver"),this.start(void 0,!1);return}this.scheduler.runSingleStepKeepingThread(t,()=>{this.pause(),this.showProgramPointer(this.scheduler.getNextStepPosition())})}showProgramPointer(t,e){var i;this.programPointerManager&&(t||(t=this.scheduler.getNextStepPosition(),this.programPointerManager.fileIsCurrentlyShownInEditor((i=t==null?void 0:t.programOrmoduleOrFile)==null?void 0:i.file)||(t=void 0)),t!=null&&t.range?(this.eventManager.fire("showProgramPointer"),t.range.startLineNumber>=0&&this.programPointerManager.show(t,{key:e||M(vs,Io),isWholeLine:!0,className:"jo_revealProgramPointer",rulerColor:"#6fd61b",minimapColor:"#6fd61b",beforeContentClassName:this.showTriangleAtProgramPointer?"jo_revealProgramPointerBefore":void 0})):this.programPointerManager.hide(e||M(vs,Io)))}pause(){this.scheduler.getNextStepPosition()?re(this,Be,Cc).call(this):this.hasActorsOrPAppletOrRunningTimers()&&(this.scheduler.onStartingNextThreadCallback=()=>{re(this,Be,Cc).call(this)})}updateDebugger(){var t,e;(e=(t=this.main)==null?void 0:t.getDebugger())==null||e.updateView()}stop(t){var e;!t&&this.main.getSettings().getValue("editor.stopRunningProgramOnWhenEditingSourcecode")=="no"&&this.main.getCompiler().forceRecompilation(),this.hideProgrampointerPosition(),(e=this.inputManager)==null||e.hide(),this.setState(ie.stopped),this.scheduler.unmarkCurrentlyExecutedSingleStep(),setTimeout(()=>{this.hideProgrampointerPosition(),t&&this.start()},500)}start(t,e=!0,i=!1){var n,s,a,l,h;(a=(s=(n=this.main)==null?void 0:n.getBottomDiv())==null?void 0:s.errorManager)==null||a.hideAllErrorDecorations(),(l=this.keyboardManager)==null||l.clearPressedKeys(),this.scheduler.state!=ie.paused&&this.executable&&e&&((h=this.graphicsManager)==null||h.shrinkGraphicsDiv(),this.printManager.clear(),re(this,Be,Qo).call(this,this.executable,t),this.resetRuntime()),this.speedBeforeProgramStart={stepsPerSecond:this.stepsPerSecondGoal,isMaxSpeed:this.isMaxSpeed},i&&this.stepsPerSecondGoal<20?this.showProgramPointer(this.scheduler.getNextStepPosition()):this.hideProgrampointerPosition(),this.scheduler.keepThread=!1,this.scheduler.resetLastTimeExecutedTimestamps(),this.setState(ie.running)}runMainProgramSynchronously(){this.start(),this.runREPLSynchronously()}runREPLSynchronously(){this.scheduler.runsSynchronously=!0,this.scheduler.setState(ie.running);try{for(;this.scheduler.state==ie.running&&this.scheduler.run(100)!=Zn.nothingMoreToDo;);}finally{this.scheduler.runsSynchronously=!1}}onFileSelected(){re(this,Be,Sc).call(this,this.scheduler.state)}setState(t){var i,n,s,a,l,h,u,m;t==ie.running&&((i=this.exceptionMarker)==null||i.removeExceptionMarker(),this.main&&!this.main.isEmbedded()&&((n=document.getElementById("jo_runtab"))==null||n.focus())),t==ie.stopped&&(this.hideProgrampointerPosition(),this.eventManager.fire("stop"),(s=this.keyboardManager)==null||s.unsubscribeAllListeners(),this.actorManager.clear(),this.actorManager.registerKeyboardListeners(this)),re(this,Be,Sc).call(this,t);let e=[ie.paused,ie.running];e.indexOf(this.scheduler.state)>=0&&e.indexOf(t)<0&&((a=this.keyboardManager)==null||a.unsubscribeAllListeners(),((h=(l=this.main)==null?void 0:l.getRepl())==null?void 0:h.state)!="standalone"&&((u=this.main)==null||u.hideDebugger())),e.indexOf(this.scheduler.state)<0&&e.indexOf(t)>=0&&((m=this.main)==null||m.showDebugger(),this.eventManager.fire("start")),this.eventManager.fire("stateChanged",this.scheduler.state,t),this.scheduler.setState(t)}resetRuntime(){var t,e,i,n;this.eventManager.fire("resetRuntime"),typeof this.speedBeforeProgramStart<"u"&&(this.setStepsPerSecond(this.speedBeforeProgramStart.stepsPerSecond,this.speedBeforeProgramStart.isMaxSpeed),this.speedBeforeProgramStart=void 0),(i=(e=(t=this.main)==null?void 0:t.getBottomDiv())==null?void 0:e.console)==null||i.detachValues(),(n=this.printManager)==null||n.clear()}hideProgrampointerPosition(t){var e;(e=this.programPointerManager)==null||e.hide(t||M(vs,Io)),this.eventManager.fire("hideProgramPointer")}registerCodeReached(t){this.codeReachedAssertions.registerAssertionReached(t)}isRunningOrPaused(){return this.scheduler.state==ie.running||this.scheduler.state==ie.paused}hasActorsOrPAppletOrRunningTimers(){if(this.retrieveObject("PAppletClass"))return!0;let t=this.retrieveObject("WorldClass");return this.actorManager.hasActors()||t!=null&&t.hasActors()?!0:(this.retrieveObject(vs.TimerCountIndentifier)||0)>0}setStepsPerSecondPerSpeedControl(t,e){this.speedBeforeProgramStart=void 0,this.setStepsPerSecond(t,e)}setStepsPerSecond(t,e){this.stepsPerSecondGoal=e?void 0:t,this.isMaxSpeed=e,M(this,ts)&&(M(this,ts).maxStepsPerSecond=e?void 0:t),this.scheduler.setMaxSpeed(t,e),!e&&this.stepsPerSecondGoal>20&&this.hideProgrampointerPosition()}getStepsPerSecond(){return this.isMaxSpeed?-1:this.stepsPerSecondGoal}runsEmbedded(){return!1}storeObject(t,e){M(this,$o).set(t,e)}retrieveObject(t){return M(this,$o).get(t)}deleteObject(t){M(this,$o).delete(t)}getMain(){return this.main}};Jl=new WeakMap,To=new WeakMap,ed=new WeakMap,$o=new WeakMap,Mh=new WeakMap,es=new WeakMap,Io=new WeakMap,ts=new WeakMap,Be=new WeakSet,ny=function(t){let e=this.assertionObserverList.indexOf(t);e>=0&&this.assertionObserverList.splice(e,1)},ry=function(){this.assertionObserverList=[]},Dg=function(){let t=this,e=()=>{t.isExternalTimer||t.timerFunction(M(t,ed))};M(this,To)&&clearInterval(M(this,To)),ee(this,To,setInterval(e,M(this,ed)))},Cc=function(){this.setState(ie.paused),this.scheduler.keepThread=!0,this.scheduler.unmarkCurrentlyExecutedSingleStep(),this.showProgramPointer(this.scheduler.getNextStepPosition()),this.updateDebugger()},jg=function(t){var s;const e=this.scheduler.getCurrentThread(),i=e.currentProgramState;if(this.main.getCurrentWorkspace().getCurrentlyEditedModule()!=i.program.module){alert(Ct.CantJumpToLine());return}const n=(s=i.currentStepList.find(a=>a.range.startLineNumber<=t&&a.range.endLineNumber>=t))==null?void 0:s.index;if(!n){alert(Ct.CantJumpToLine());return}i.stepIndex=n,this.showProgramPointer(this.scheduler.getNextStepPosition(e))},Mg=function(){let t=this.main.getCurrentWorkspace().getCurrentlyEditedModule(),e=this.main.getMainEditor().getSelection().startLineNumber,i=t.findStep(e);if(!i){alert("Es gibt keinen ausführbaren Code an der Zeile des Cursors.");return}if(this.scheduler.state!=ie.paused){if(this.scheduler.state==ie.not_initialized)return;this.printManager.clear(),re(this,Be,Qo).call(this,this.executable),this.resetRuntime()}i.setBreakpoint(e,!0),this.start(void 0,!1)},Pg=function(){this.scheduler.stepOut(()=>{this.pause()}),this.setState(ie.running)},Og=function(){this.actionManager&&(this.actionManager.registerAction("interpreter.start",["F5"],Ct.runProgram(),()=>{this.actionManager.isActive("interpreter.start")?this.start(void 0,!0,!0):this.pause()}),this.actionManager.registerAction("interpreter.pause",["F5"],Ct.pause(),()=>{this.actionManager.isActive("interpreter.start")?this.start():this.pause()}),this.actionManager.registerAction("interpreter.stop",[],Ct.stop(),()=>{var t,e,i;((e=(t=this.main)==null?void 0:t.getRepl())==null?void 0:e.state)=="standalone"?((i=this.main)==null||i.getRepl().init(this.executable),this.setState(ie.stopped)):this.stop(!1)}),this.actionManager.registerAction("interpreter.toggleBreakpoint",["F9"],Ct.toggleBreakpoint(),()=>{this.breakpointManager.toggleBreakpoint(this.main.getMainEditor().getSelection().startLineNumber)}),this.actionManager.registerAction("interpreter.stepOver",["F10"],Ct.stepOver(),()=>{this.executeOneStep(!1)}),this.actionManager.registerAction("interpreter.stepInto",["F11"],Ct.stepInto(),()=>{this.executeOneStep(!0)}),this.actionManager.registerAction("interpreter.stepOut",[],Ct.stepOut(),()=>{re(this,Be,Pg).call(this)}),this.actionManager.registerAction("interpreter.restart",[],Ct.restart(),()=>{var t,e,i;this.stop(!0),(i=(e=(t=this.main)==null?void 0:t.getBottomDiv())==null?void 0:e.console)==null||i.clear()}),this.actionManager.registerAction("interpreter.goto",[],Ct.goto(),()=>{re(this,Be,jg).call(this,this.main.getMainEditor().getSelection().startLineNumber)}),this.actionManager.registerAction("interpreter.gotoCursor",[],E.ProgramGotoCursor(),()=>{re(this,Be,Mg).call(this)}))},Lg=function(){return this.executable!=null&&this.executable.hasTests()},xc=function(){var t,e,i;return(i=this.executable)==null?void 0:i.findStartableModule((e=(t=this.main)==null?void 0:t.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedModule())},Sc=function(t){var i,n,s;if(this.actionManager){for(let A of M(this,Mh))this.actionManager.setActive("interpreter."+A,M(this,es)[A][t]);((n=(i=this.main)==null?void 0:i.getRepl())==null?void 0:n.state)=="standalone"&&this.actionManager.setActive("interpreter.stop",!0);const l=re(this,Be,xc).call(this)!=null;let h=l||t==2&&this.scheduler.state<=2,u=M(this,es).start[t];u=u&&h;let m=M(this,es).restart[t];m=m&&l;let g=M(this,es).stepOver[t];g=g&&h;let f=M(this,es).stepInto[t];f=f&&h;let b=M(this,es).gotoCursor[t];b=b&&h,this.actionManager.showHideButtons("interpreter.start",u),this.actionManager.showHideButtons("interpreter.pause",!u),this.actionManager.setActive("interpreter.restart",m),this.actionManager.setActive("interpreter.stepOver",g),this.actionManager.setActive("interpreter.stepInto",f),this.actionManager.setActive("interpreter.gotoCursor",b),this.actionManager.setActive("interpreter.startTests",re(this,Be,Lg).call(this)&&t==ie.stopped),Object.values(ie).filter(A=>typeof A=="string").forEach(A=>{this.actionManager.setEditorContext("Scheduler_"+A,ie[A]==t)})}let e=[];if(this.executable)for(let a of this.executable.getModuleManager().getModules())a.isStartable()&&e.push(a.file);(s=this.main)==null||s.markFilesAsStartable(e,t>=3)},Qo=function(t,e,i="run"){var s;let n=re(this,Be,xc).call(this);if(e)for(let a of t.getModuleManager().getModules())a.file==e&&(n=a);this.setState(ie.stopped),(s=this.programPointerManager)==null||s.hideAll(),ee(this,ts,this.scheduler.init(t,n,i)),M(this,ts)&&(t instanceof El&&this.codeReachedAssertions.init(t.getModuleManager()),M(this,ts).maxStepsPerSecond=this.stepsPerSecondGoal,M(this,ts).state=F.running)},J(vs,Io,"ProgramPointer"),r(vs,"TimerCountIndentifier","TimerCount");let Pa=vs;class Bg{constructor(t,e){r(this,"pressedKeysLowerCase",new Map);r(this,"pressedKeys",new Map);r(this,"keyPressedCallbacks",[]);r(this,"keyUpCallbacks",[]);r(this,"keyDownCallbacks",[]);r(this,"internalKeyboardListeners",[]);this.element=t,this.main=e,this.registerListeners(t)}destroy(){this.element.off("keydown"),this.element.off("keyup"),this.element.off("keypressed")}registerListeners(t){this.element=t;let e=this;t.on("keydown",i=>{let n=i.key;if(n==null)return!0;e.pressedKeysLowerCase.set(n.toLowerCase(),!0),e.pressedKeys.set(n,!0);for(let s of e.keyDownCallbacks)s(n,i.shiftKey,i.ctrlKey,i.altKey);return this.main.isEmbedded()&&this.main.getInterpreter().scheduler.state==ie.running&&!this.main.getMainEditor().hasTextFocus()&&["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"," "].indexOf(i.key)>=0?(i.preventDefault(),!1):!0}),t.on("keyup",i=>{let n=i.key;if(n==null)return!0;if(!(typeof n>"u")){e.pressedKeysLowerCase.set(n.toLowerCase(),!1),e.pressedKeys.set(n,!1);for(let s of e.keyUpCallbacks)s(n);return!0}}),t.on("keyup",i=>{let n=i.key;i.shiftKey&&n.length>1&&(n="[shift]+"+n),i.ctrlKey&&n.length>1&&(n="[ctrl]+"+n),i.altKey&&n.length>1&&(n="[alt]+"+n);for(let s of e.keyPressedCallbacks)s(n);return!0}),t.on("keydown",i=>{let n=i.key;for(let s of e.internalKeyboardListeners)s.onKeyDown(n,i.shiftKey,i.ctrlKey,i.altKey);return!0})}isPressed(t){return t==null?null:this.pressedKeysLowerCase.get(t.toLowerCase())==!0}isAnyKeyPressed(){return this.pressedKeysLowerCase.size>0}clearPressedKeys(){this.pressedKeysLowerCase.clear(),this.pressedKeys.clear()}getAnyPressedKey(){return this.pressedKeysLowerCase.size==0?"":this.pressedKeys.keys().next().value}unsubscribeAllListeners(){this.keyPressedCallbacks=[],this.keyDownCallbacks=[],this.keyUpCallbacks=[],this.internalKeyboardListeners=[]}addKeyPressedListener(t){this.keyPressedCallbacks.push(t)}addKeyUpListener(t){this.keyUpCallbacks.push(t)}addKeyDownListener(t){this.keyDownCallbacks.push(t)}addInternalKeyboardListener(t){this.internalKeyboardListeners.push(t)}removeInternalKeyboardListener(t){let e=this.internalKeyboardListeners.indexOf(t);e>=0&&this.internalKeyboardListeners.splice(e,1)}removeKeyPressedListener(t){this.keyPressedCallbacks.splice(this.keyPressedCallbacks.indexOf(t),1)}removeKeyUpListener(t){this.keyUpCallbacks.splice(this.keyUpCallbacks.indexOf(t),1)}removeKeyDownListener(t){this.keyDownCallbacks.splice(this.keyDownCallbacks.indexOf(t),1)}}class Fg{constructor(t){this.main=t,Q.registerEditorOpener(this)}openCodeEditor(t,e,i){var l;let n=this.main.getMainEditor(),s=(l=this.main.getCurrentWorkspace())==null?void 0:l.getFiles().find(h=>{var u;return((u=h.getMonacoModel())==null?void 0:u.uri)==e}),a=s==null?void 0:s.getMonacoModel();if(a){if(n.setModel(a),!i)return!1;let h=i.startLineNumber?U.getStartPosition(i):i;return n.setPosition(h),n.revealLineInCenterIfOutsideViewport(h.lineNumber),!0}return!1}}class ip{constructor(){r(this,"monacoModelToDeltaDecorationsMap",new Map)}markErrors(t,e){let i=t.map(a=>({startLineNumber:a.range.startLineNumber,startColumn:a.range.startColumn,endLineNumber:a.range.endLineNumber,endColumn:a.range.endColumn,message:a.message,severity:this.errorLevelToMarkerSeverity(a.level)}));Q.setModelMarkers(e,"martin",i);let n=t.map(a=>({range:a.range,options:{linesDecorationsClassName:this.getLinesDecorationsClassName(a.level),minimap:{position:Q.MinimapPosition.Inline,color:this.getMinimapColor(a.level),darkColor:this.getMinimapColor(a.level)}}})),s=this.monacoModelToDeltaDecorationsMap.get(e)||[];e.isDisposed()||this.monacoModelToDeltaDecorationsMap.set(e,e.deltaDecorations(s,n))}markErrorsOfModule(t){t.file instanceof Je&&this.markErrors(t.errors,t.file.getMonacoModel())}errorLevelToMarkerSeverity(t){switch(t){case"info":return Zh.Info;case"warning":return Zh.Warning;case"error":return Zh.Error}}getLinesDecorationsClassName(t){switch(t){case"error":return"jo_revealErrorLine";case"warning":return"jo_revealWarningLine";case"info":return"jo_revealInfoLine"}}getBorderLeftClassName(t){switch(t){case"error":return"jo_borderLeftError";case"warning":return"jo_borderLeftWarning";case"info":return"jo_borderLeftInfo"}}getMinimapColor(t){switch(t){case"error":return"#bc1616";case"warning":return"#cca700";case"info":return"#75beff"}}}class Vg{constructor(t){r(this,"editor");r(this,"keyToDecorationsMap",new Map);this.main=t,this.editor=t.getMainEditor()}fileIsCurrentlyShownInEditor(t){var e;return t?((e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile())==t:!1}show(t,e){t.range.endLineNumber>t.range.startLineNumber&&(t.range={startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:t.range.startLineNumber,endColumn:1e3});let i;t.programOrmoduleOrFile instanceof Ir?i=t.programOrmoduleOrFile.module.file:t.programOrmoduleOrFile instanceof Zm?i=t.programOrmoduleOrFile.file:i=t.programOrmoduleOrFile,i instanceof Je&&i.getMonacoModel()&&this.main.showProgramPosition(i,t.range,!1);let n=this.keyToDecorationsMap.get(e.key);n==null||n.clear();let s=[];s.push({range:t.range,options:{isWholeLine:e.isWholeLine,className:e.className,overviewRuler:{color:e.rulerColor,position:Q.OverviewRulerLane.Center},minimap:{color:e.minimapColor,position:Q.MinimapPosition.Inline}}}),e.beforeContentClassName&&s.push({range:t.range,options:{beforeContentClassName:e.beforeContentClassName}});let a=this.editor.createDecorationsCollection(s);this.keyToDecorationsMap.set(e.key,a)}hide(t){var e;(e=this.keyToDecorationsMap.get(t))==null||e.clear(),this.keyToDecorationsMap.delete(t)}hideAll(){this.keyToDecorationsMap.forEach((t,e)=>{t==null||t.clear()}),this.keyToDecorationsMap.clear()}}var td,id,nd;class _g{constructor(t,e,i){J(this,td,new Map);J(this,id,new Map);J(this,nd,new Map);r(this,"mains",new Set);this.name=t,this.fileEndingWithOutDot=e,this.monacoLanguageSelector=i}getTranslatedName(){return Re[this.name].translatedName()}getCompiler(t){return M(this,td).get(t)}getRepl(t){return M(this,id).get(t)}getSettings(t){return M(this,nd).get(t)}registerCompiler(t,e){M(this,td).set(t,e),this.mains.add(t)}getWorkspaceCssClass(t){return Re[this.name].workspaceCssClass(t)}registerRepl(t,e){M(this,id).set(t,e),this.mains.add(t)}registerSettings(t,e){M(this,nd).set(t,e),this.mains.add(t)}}td=new WeakMap,id=new WeakMap,nd=new WeakMap;class Ti{constructor(t){this.language=t}findMainForModel(t){let e=Q.getEditors().find(i=>i.getModel()==t);for(let i of this.language.mains)if(i.getMainEditor()==e||i.getReplEditor()==e)return i}}class sy extends Ti{constructor(t){super(t),P.registerColorProvider(t.monacoLanguageSelector,this)}async provideDocumentColors(t,e){var l,h;let i=this.findMainForModel(t);if(!i)return;let n=(l=i.getCurrentWorkspace())==null?void 0:l.getFileForMonacoModel(t);if(!n)return;let s=i.getCompiler();s.findModuleByFile(n)||await s.eventManager.waitFor("compilationFinishedWithNewExecutable");let a=(h=i.getCurrentWorkspace())==null?void 0:h.getModuleForMonacoModel(t);if(a)return a.isDirty()&&await i.getCompiler().waitTillCompilationFinished(),a.colorInformation}provideColorPresentations(t,e,i){var n=e.color,s=t.getValueInRange(e.range),a=Math.round(n.red*255),l=Math.round(n.green*255),h=Math.round(n.blue*255),u;let m=this.toHex2Digits(a)+this.toHex2Digits(l)+this.toHex2Digits(h),g=a+", "+l+", "+h;return s.startsWith("#")?u="#"+m:s.startsWith("0x")?u="0x"+m:s.startsWith("rgb")?n.alpha<.999?u="rgba("+g+", "+n.alpha+")":u="rgb("+g+")":(s.startsWith("new")||s.startsWith("Color"))&&(u="new Color("+g+")"),[{label:u}]}toHex2Digits(t){let e=t.toString(16);for(;e.length<2;)e="0"+e;return e}}class $i{}class ls extends Rh{constructor(t,e,i,n,s,a,l){super(t,e,i),this.type=n,this.isFinal=s,this.isEllipsis=a,this.trackMissingReadAccess=l}getCopyWithConcreteType(t){let e=this.type.getCopyWithConcreteType(t);return e==this.type?this:new ls(this.identifier,this.identifierRange,this.module,e,this.isFinal,this.isEllipsis,this.trackMissingReadAccess)}getCopy(){return new ls(this.identifier,this.identifierRange,this.module,this.type,this.isFinal,this.isEllipsis,this.trackMissingReadAccess)}getDeclaration(){return this.type.toString()+" "+this.identifier}getType(){return this.type}}class xi extends ep{constructor(e,i,n,s,a){super(e,i,n,s);r(this,"fields",[]);r(this,"methods",[]);r(this,"id");r(this,"implements",[]);this.baseEnumClass=a,this.id=Math.trunc(Math.random()*Number.MAX_SAFE_INTEGER)}getCompletionItemDetail(){return v.enum()}getField(e,i,n=!1){let s=this.getFields().find(a=>a.identifier==e&&a.visibility<=i&&(a._isStatic||!n));return s||(i==p.keywordPrivate&&(i=p.keywordProtected),this.baseEnumClass.getField(e,i,n))}removeField(e){let i=this.fields.findIndex(n=>n.identifier==e);i>=0&&this.fields.splice(i,1)}initRuntimeClass(e){var n;let i=this;this.runtimeClass=(n=class extends e{constructor(s,a){super(s,a)}},r(n,"type",i),n)}getExtends(){return this.baseEnumClass}isGenericTypeParameter(){return!1}isGenericVariant(){return!1}getFile(){return this.module.file}getCopyWithConcreteType(e){return this}getImplements(){return this.implements}getFields(){return this.fields}getOwnMethods(){return this.methods}getAllMethods(){return this.getOwnMethods().concat(this.baseEnumClass.getAllMethods())}canImplicitlyCastTo(e){if(e.isPrimitive)return!1;if(e instanceof ni){for(let i of this.implements)if(i.canExplicitlyCastTo(e))return!0;return!1}return e instanceof xi?e==this:e instanceof Le?e.identifier=="Object":!1}canExplicitlyCastTo(e){return this.canImplicitlyCastTo(e)}toString(){return this.identifier}getAbsoluteName(){return this.pathAndIdentifierAsDotSeparatedString}getDeclaration(){let e=$e[this.visibility]+" ";return this.isStatic&&(e+="static "),e+="enum "+this.identifier,e}getCompletionItems(e,i,n,s,a,l){let h=[];for(let u of this.getFields().filter(m=>m.visibility<=e&&(m._isStatic||!l)))h.push({label:u.toString(),kind:P.CompletionItemKind.Field,insertText:u.identifier,range:s,documentation:u.documentation==null?void 0:{value:typeof u.documentation=="string"?u.documentation:u.documentation()}});for(let u of this.getAllMethods().filter(m=>(m.classEnumInterface==this||m.visibility!=p.keywordPrivate)&&(m.isStatic||!l)))h.push({label:u.getCompletionLabel(),filterText:u.identifier,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},kind:P.CompletionItemKind.Method,insertText:u.getCompletionSnippet(i),range:s,detail:u.returnParameterType?u.returnParameterType.getDeclaration():"void",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,documentation:u.documentation==null?void 0:{value:typeof u.documentation=="string"?u.documentation:u.documentation()}});return h}addValuesMethod(e,i){e._values=e["_mn$values$"+this.identifier+"_I$"]=()=>e.values;let n=new Ui("values",oe.instance,this.module,p.keywordPublic);n.returnParameterType=new Ie(this,1,this.module,oe.instance),n.isStatic=!0,n.hasImplementationWithNativeCallingConvention=!0,this.methods.push(n),e._valueOf=e["_mn$valueOf$"+this.identifier+"$string"]=a=>{let l=e["$f_"+a];return l||null};let s=new Ui("valueOf",oe.instance,this.module,p.keywordPublic);s.returnParameterType=this,s.parameters.push(new ls("name",oe.instance,this.module,i,!0,!1,!1)),s.isStatic=!0,s.hasImplementationWithNativeCallingConvention=!0,this.methods.push(s)}}class Ha{static findCycle(t){for(let e of t.typestore.getNonPrimitiveTypes()){if(e instanceof Le){let i=Ha.classHelper(e,[]);if(i)return Ha.reportError(i,"extends"),!0}if(e instanceof ni){let i=Ha.interfaceHelper(e,[]);if(i)return Ha.reportError(i,"implements"),!0}}return!1}static reportError(t,e){t.push(t[0]);let i=v.cycleInInheritenceHierarchy(t.map(n=>n.identifier).join(" "+e+" "));for(let n of t){let s=n.module;s instanceof Xm&&s.errors.push({message:i.message,id:i.id,level:"error",range:n.identifierRange})}}static classHelper(t,e){if(e.includes(t))return e;if(e.push(t),t.getExtends()){let i=this.classHelper(t.getExtends(),e);if(i)return i}e.pop()}static interfaceHelper(t,e){if(e.includes(t))return e;e.push(t);for(let i of t.getExtends()){let n=this.interfaceHelper(i,e);if(n)return n}e.pop()}}class Zs{static validate(t,e,i,n){const s=new Map;Zs.validateInstanceAnnotations(t,e,i,n,s),s.size!==0&&(Zs.validateInjectAnnotations(t,n,s),Zs.detectCircularDependencies(t,n,s))}static validateInstanceAnnotations(t,e,i,n,s){var a,l,h;for(const u of e)(a=u.annotations)!=null&&a.find(g=>g.identifier==="Instance")&&n(v.diInstanceOnNonClass(),u.range,u.module);for(const u of i)(l=u.annotations)!=null&&l.find(g=>g.identifier==="Instance")&&n(v.diInstanceOnNonClass(),u.range,u.module);for(const u of t){const m=(h=u.annotations)==null?void 0:h.find(b=>b.identifier==="Instance");if(!m)continue;if(!m.parameter){n(v.diAnnotationRequiresParameter("Instance"),m.range,u.module);continue}if(u.isMainClass){n(v.diInstanceOnMainClass(),m.range,u.module);continue}const g=u.resolvedType;if(g!=null&&g.isAbstract()){n(v.diInstanceOnAbstractClass(u.identifier),m.range,u.module);continue}const f=m.parameter;if(s.has(f)){const b=s.get(f);n(v.diDuplicateInstanceName(f),m.range,u.module),n(v.diDuplicateInstanceName(f),b.annotations.find(A=>A.identifier==="Instance").range,b.module);continue}if(g&&!(g.methods.some(A=>A.isConstructor&&A.parameters.length===0)||!g.methods.some(A=>A.isConstructor))){n(v.diInstanceNoDefaultConstructor(u.identifier),m.range,u.module);continue}u.module.hasDependencyInjectionAnnotations=!0,s.set(f,u)}}static validateInjectAnnotations(t,e,i){var n;for(const s of t)for(const a of s.fieldsOrInstanceInitializers){if(a.kind!==p.fieldDeclaration)continue;const l=a,h=(n=l.annotations)==null?void 0:n.find(u=>u.identifier==="Inject");if(h){if(!h.parameter){e(v.diAnnotationRequiresParameter("Inject"),h.range,s.module);continue}if(l.isStatic){e(v.diInjectOnStaticField(),h.range,s.module);continue}i.has(h.parameter)||e(v.diInjectUnknownName(h.parameter),h.range,s.module)}}}static detectCircularDependencies(t,e,i){var l;const n=new Map;for(const[h,u]of i){const m=[];for(const g of u.fieldsOrInstanceInitializers){if(g.kind!==p.fieldDeclaration)continue;const b=(l=g.annotations)==null?void 0:l.find(A=>A.identifier==="Inject");b!=null&&b.parameter&&i.has(b.parameter)&&m.push(b.parameter)}n.set(h,m)}const s=new Set,a=new Set;for(const h of i.keys()){if(s.has(h))continue;const u=Zs.dfsCycleCheck(h,n,s,a,[]);if(u){const m=u.join(" -> ")+" -> "+u[0],g=i.get(u[0]);e(v.diCircularDependency(m),g.range,g.module);return}}}static dfsCycleCheck(t,e,i,n,s){i.add(t),n.add(t),s.push(t);for(const a of e.get(t)??[])if(i.has(a)){if(n.has(a)){const l=s.indexOf(a);return s.slice(l)}}else{const l=Zs.dfsCycleCheck(a,e,i,n,s);if(l)return l}n.delete(t),s.pop()}}class zg{constructor(t,e){r(this,"dirtyModules");r(this,"classDeclarationNodes",[]);r(this,"interfaceDeclarationNodes",[]);r(this,"enumDeclarationNodes",[]);r(this,"absoluteNameToResolvedTypeMap",new Map);r(this,"globallyImportedTypesMap",new Map);this.moduleManager=t,this.libraryModuleManager=e,this.dirtyModules=this.moduleManager.getNewOrDirtyModules()}resolve(){return this.registerImportedTypes(),this.gatherTypeDefinitionNodes(),this.generateNewTypesWithGenericsButWithoutFieldsAndMethodsAndResolveOuterTypes(),this.resolveTypeReferences(),this.resolveGenericParameterTypesAndExtendsImplements(),this.moduleManager.typestore.initFastExtendsImplementsLookup(),this.checkGenericTypeInstantiationNodes(),Ha.findCycle(this.moduleManager)?!1:(this.buildAllMethods(),this.buildRuntimeClassesAndTheirFields(),Zs.validate(this.classDeclarationNodes,this.interfaceDeclarationNodes,this.enumDeclarationNodes,this.pushError.bind(this)),!0)}registerImportedTypes(){this.libraryModuleManager.getLibraryModulesAndSystemModule().forEach(t=>{for(let e of t.getStandardImports()){let i=this.libraryModuleManager.typestore.getTypesMatchingImportPath(e);for(let n of i)this.globallyImportedTypesMap.set(n.identifier,n)}});for(let t of this.dirtyModules)if(t.ast)for(let e of t.ast.importStatements){t.imports.push(e.importedPath);let i=this.libraryModuleManager.typestore.getTypesMatchingImportPath(e.importedPath,t,e.pathRanges);if(i.length==0)this.pushError(v.importedTypesNotFound(e.importedPath.join(".")),e.range,t,"error");else for(let n of i)t.importedTypes.set(n.identifier,n)}}gatherTypeDefinitionNodes(){let t=new Map;for(let e of this.dirtyModules)e.ast&&this.gatherTypeDefinitionNodesRecursively(e.ast,t)}gatherTypeDefinitionNodesRecursively(t,e){for(let i of t.innerTypes){let n=e.get(i.identifier);if(n){this.pushError(v.typenameAlreadyInUse(i.identifier,n.range,n.module.file.name),i.range,i.module,"error");continue}else{let s=this.moduleManager.typestore.getType(i.identifier);if(s){this.pushError(v.typenameAlreadyInUse(i.identifier,s.identifierRange,s.module.file.name),i.range,i.module,"error");continue}if(s=this.libraryModuleManager.typestore.getType(i.identifier),s){this.pushError(v.typenameUsedInLibrary(i.identifier),i.range,i.module,"error");continue}}switch(e.set(i.identifier,i),i.kind){case p.keywordClass:this.classDeclarationNodes.push(i);break;case p.keywordInterface:this.interfaceDeclarationNodes.push(i);break;case p.keywordEnum:this.enumDeclarationNodes.push(i);break}i.innerTypes.length>0&&this.gatherTypeDefinitionNodesRecursively(i,new Map)}}generateNewTypesWithGenericsButWithoutFieldsAndMethodsAndResolveOuterTypes(){var i,n,s;let t=[];for(let a of this.classDeclarationNodes){let l=a.module,h=new Le(a.identifier,a.identifierRange,a.path,a.module,a.range);this.generateGenericParameters(a,h,l),a.resolvedType=h,h.visibility=a.visibility,h.isStatic=a.isStatic,h._isAbstract=a.isAbstract,h.documentation=a.documentation,a.isMainClass&&(h.isMainClass=!0,h.staticType.isMainClass=!0),((i=a.parent)==null?void 0:i.kind)!=p.global?t.push(a):a.identifier!=""&&(this.moduleManager.typestore.addType(h),l.types.push(a.resolvedType)),l.compiledSymbolsUsageTracker.registerUsagePosition(h,l.file,a.identifierRange),this.generateMethodGenerics(a.methods,l)}for(let a of this.interfaceDeclarationNodes){let l=new ni(a.identifier,a.identifierRange,a.path,a.module),h=a.module;this.generateGenericParameters(a,l,h),a.resolvedType=l,l.visibility=a.visibility,l.documentation=a.documentation,this.moduleManager.typestore.addType(l),h.types.push(a.resolvedType),((n=a.parent)==null?void 0:n.kind)!=p.global&&t.push(a),h.compiledSymbolsUsageTracker.registerUsagePosition(l,h.file,a.identifierRange),this.generateMethodGenerics(a.methods,h)}let e=this.libraryModuleManager.typestore.getType("Enum");for(let a of this.enumDeclarationNodes){let l=new xi(a.identifier,a.identifierRange,a.path,a.module,e),h=a.module;a.resolvedType=l,l.visibility=a.visibility,l.documentation=a.documentation,l.isStatic=!0,this.moduleManager.typestore.addType(l),h.types.push(a.resolvedType),((s=a.parent)==null?void 0:s.kind)!=p.global&&t.push(a),h.compiledSymbolsUsageTracker.registerUsagePosition(l,h.file,a.identifierRange),this.generateMethodGenerics(a.methods,h)}for(let a of t)a.resolvedType.outerType=a.parent.resolvedType}generateMethodGenerics(t,e){for(let i of t)for(let n of i.genericParameterDeclarations){let s=new nt(n.identifier,e,n.identifierRange);n.resolvedType=s}}generateGenericParameters(t,e,i){for(let n of t.genericParameterDeclarations){let s=new nt(n.identifier,e.module,n.identifierRange);n.resolvedType=s,e.genericTypeParameters.push(s),i.registerTypeUsage(s,s.identifierRange)}}resolveTypeReferences(){for(let t of this.dirtyModules)if(t.ast)for(let e of t.ast.collectedTypeNodes)this.resolveTypeNode(e,t)}checkGenericTypeInstantiationNodes(){for(let t of this.dirtyModules)if(t.ast)for(let e of t.ast.collectedTypeNodes.filter(i=>i.kind==p.genericTypeInstantiation))this.checkGenericTypeInstantiation(e,t)}resolveTypeNode(t,e,i=!1){if(t.resolvedType)return t.resolvedType;switch(t.kind){case p.baseType:{let x=this.findPrimaryTypeByIdentifier(t,e);if(x){if(t.resolvedType=x,x.hasGenericParameters()&&!i){let q=Object.assign({},t),D=t;D.kind=p.genericTypeInstantiation,D.actualTypeArguments=[],D.baseType=q,D.resolvedType=void 0,x=this.resolveTypeNode(D,e,!0)}e.registerTypeUsage(x,t.range)}return x}case p.genericTypeInstantiation:let n=t;this.resolveTypeNode(n.baseType,e,!0);let s=n.baseType.resolvedType;if(!s)return;if(!s.hasGenericParameters()){this.pushError(v.typeIsNotGeneric(s.toString()),t.range,e);return}if(n.actualTypeArguments.length>s.genericTypeParameters.length){this.pushError(v.wrongNumberOfGenericParameters(s.toString(),s.genericTypeParameters.length,n.actualTypeArguments.length),n.range,e);return}let a=new Map;for(let x=0;x=0){let h=l;for(let u of h.genericParameterDeclarations){let m=u.resolvedType;if(m&&m.identifier==i)return m}for(let u of h.innerTypes)u.identifier==i&&u.resolvedType&&(n=u.resolvedType)}}if(!n&&e instanceof $r&&(n=e.importedTypes.get(i)),n||(n=this.globallyImportedTypesMap.get(i)),n)return e.registerTypeUsage(n,t.range),n;let s;s=this.moduleManager.typestore.getFirstTypeWhichisNoPackage(t.identifiers,e),s||(s=this.libraryModuleManager.typestore.getFirstTypeWhichisNoPackage(t.identifiers,e)),s&&(n=s.type);let a=s?s.nextIndex:1;for(;au.identifier==l.identifier);if(h)e.registerTypeUsage(h,l.identifierRange),h.visibility!=p.keywordPublic&&this.pushError(v.typeIsNotVisible(h.identifier),l.identifierRange,e,"error"),n=h;else{this.pushError(v.typeNotDefined(l.identifier),t.range,e);return}}else if(n instanceof ti){let h=n.childrenList.find(u=>u.identifier==l.identifier);h&&(e.registerTypeUsage(h,l.identifierRange),n=h)}else{this.pushError(v.typeHasNoSubtype(n.identifier,l.identifier),l.identifierRange,e,"error");return}a++}return n||this.pushError(v.typeNotDefined(i),t.range,e),n}resolveGenericParameterTypesAndExtendsImplements(){for(let t of this.classDeclarationNodes){let e=t.resolvedType.module,i=t.resolvedType;this.resolveGenericParameters(t,e),this.resolveClassExtendsImplements(t,i,e);for(let n of t.methods)this.resolveGenericParameters(n,e)}for(let t of this.interfaceDeclarationNodes){let e=t.resolvedType.module,i=t.resolvedType;this.resolveGenericParameters(t,e),this.resolveInterfaceExtends(t,i,e);for(let n of t.methods)this.resolveGenericParameters(n,e)}}resolveClassExtendsImplements(t,e,i){if(t.extends){let n=this.resolveTypeNode(t.extends,i);n instanceof we&&n.isFinal&&this.pushError(v.cantExtendFinalClass(),t.extends.range,i,"error"),n instanceof mt?e.setExtends(n):t.identifier.startsWith("$AnonymousInnerClass")&&n instanceof Bt?(t.implements.push(t.extends),t.extends=void 0):this.pushError(v.afterExtendsClassNeeded(),t.extends.range,i)}e.getExtends()||e.setExtends(this.libraryModuleManager.typestore.getType("Object"));for(let n of t.implements){let s=this.resolveTypeNode(n,i);s instanceof Bt?e.addImplements(s):this.pushError(v.onlyInterfacesAfterImplements(),n.range,i)}}resolveInterfaceExtends(t,e,i){for(let n of t.implements){let s=this.resolveTypeNode(n,i);s instanceof Bt?e.addExtends(s):this.pushError(v.onlyInterfacesAfterExtends(),n.range,i)}}resolveGenericParameters(t,e){let i=this.libraryModuleManager.typestore.getType("Object");for(let n of t.genericParameterDeclarations){let s=n.resolvedType;if(!s)continue;let a=!0;if(n.extends)for(let l of n.extends){let h=this.resolveTypeNode(l,e);h&&(h instanceof mt||h instanceof Bt?(s.upperBounds.push(h),h instanceof mt&&(a=!1)):this.pushError(v.onlyClassesOrInterfacesAsUpperBounds(),l.range,e))}if(a&&s.upperBounds.push(i),n.super){let l=this.resolveTypeNode(n.super,e);l&&(l instanceof mt?s.lowerBound=l:this.pushError(v.onlyClassesOrInterfacesAsLowerBounds(),n.super.range,e))}}}pushError(t,e,i,n="error"){i.errors.push({message:t.message,id:t.id,range:e,level:n})}buildAllMethods(){for(let e of this.classDeclarationNodes)this.buildMethods(e);for(let e of this.enumDeclarationNodes)this.buildMethods(e);for(let e of this.interfaceDeclarationNodes)this.buildMethods(e);let t=this.classDeclarationNodes.filter(e=>e.resolvedType).map(e=>e.resolvedType);this.moduleManager.overriddenOrImplementedMethodPaths={};for(let e of t)e.checkIfInterfacesAreImplementedAndSupplementDefaultMethods(),e.takeSignaturesFromOverriddenMethods(this.moduleManager.overriddenOrImplementedMethodPaths),e.checkIfAbstractParentsAreImplemented()}buildMethods(t){var s,a;let e=t.resolvedType,i=e.module,n=new Map;for(let l of t.methods){let h;if(l.genericParameterDeclarations.length>0){let m=l.genericParameterDeclarations.map(g=>g.resolvedType);h=new Ma(l.identifier,l.identifierRange,i,l.visibility,m)}else h=new Ui(l.identifier,l.identifierRange,i,l.visibility);l.method=h,h.isAbstract=l.isAbstract,h.isFinal=l.isFinal,h.isStatic=l.isStatic,h.classEnumInterface=e,h.isConstructor=l.isConstructor,h.isDefault=l.isDefault,h.isSynchronized=l.isSynchronized,h.documentation=l.documentation,h.annotations=l.annotations,h.returnParameterType=l.isConstructor?e:(s=l.returnParameterType)==null?void 0:s.resolvedType;for(let m of l.parameters)if((a=m.type)!=null&&a.resolvedType){let g=m.isEllipsis?new Ie(m.type.resolvedType,1,i,m.type.range):m.type.resolvedType,f=new ls(m.identifier,m.identifierRange,i,g,m.isFinal,m.isEllipsis,m.trackMissingReadAccess);t.isMainClass&&l.identifier==os.mainMethodIdentifier&&f.identifier=="args"&&(f.hiddenWhenDebugging=!0),i.compiledSymbolsUsageTracker.registerUsagePosition(f,i.file,m.identifierRange),h.parameters.push(f)}e.methods.push(h);let u=h.getSignature();n.get(u)?this.pushError(v.multipleMethodsWithSameSignature(u,n.get(u).identifierRange.startLineNumber),h.identifierRange,i,"error"):n.set(u,h)}}buildRuntimeClassesAndTheirFields(){let t=this.libraryModuleManager.typestore.getType("Enum").runtimeClass,e=$i;for(let s of this.enumDeclarationNodes){let a=s.resolvedType;a.initRuntimeClass(t),a.addValuesMethod(a.runtimeClass,this.libraryModuleManager.typestore.getType("string"));for(let l of s.fieldsOrInstanceInitializers)if(l.kind==p.fieldDeclaration){let h=new Hi(l.identifier,l.range,a.module,l.type.resolvedType,l.visibility);h._isStatic=l.isStatic,h._isFinal=l.isFinal,h.classEnum=a,h.documentation=l.documentation,a.fields.push(h)}for(let l of s.valueNodes){let h=new Hi(l.identifier,l.identifierRange,a.module,a,p.keywordPublic);h._isStatic=!0,h._isFinal=!0,h.classEnum=a,h.documentation=l.documentation,a.fields.push(h)}a.fields.push(a.createClassField(this.libraryModuleManager.typestore.getType("Class")))}for(let s of this.interfaceDeclarationNodes){let a=s.resolvedType;a.initRuntimeClass(e);for(let l of s.fieldsOrInstanceInitializers)if(l.kind==p.fieldDeclaration){let h=new Hi(l.identifier,l.range,a.module,l.type.resolvedType,l.visibility);h._isStatic=l.isStatic,h._isFinal=l.isFinal,h.classEnum=a,a.fields.push(h)}}let i=this.libraryModuleManager.typestore.getType("Object"),n=!1;for(;!n;){n=!0;for(let s of this.classDeclarationNodes){let a=s.resolvedType;if(!a.runtimeClass){let l=a.getExtends();if(l||(l=i),l.runtimeClass){a.initRuntimeClass(l.runtimeClass);const h=new Map,u=new Map;for(let m of s.fieldsOrInstanceInitializers)if(m.kind==p.fieldDeclaration){if(m.isStatic){const f=u.get(m.identifier);if(f){this.pushError(v.multipleFieldsWithSameIdentifier(m.identifier,f.identifierRange.startLineNumber),m.identifierRange,s.module,"error");continue}u.set(m.identifier,m)}else{const f=h.get(m.identifier);if(f){this.pushError(v.multipleFieldsWithSameIdentifier(m.identifier,f.identifierRange.startLineNumber),m.identifierRange,s.module,"error");continue}h.set(m.identifier,m)}let g=new Hi(m.identifier,m.range,a.module,m.type.resolvedType,m.visibility);g._isStatic=m.isStatic,g._isFinal=m.isFinal,g.classEnum=a,a.fields.push(g),m.resolvedField=g}a.fields.push(a.createClassField(this.libraryModuleManager.typestore.getType("Class"))),n=!1}}}}}}const As=class As extends R{constructor(e,i){super();r(this,"name");r(this,"ordinal");this.name=e,this.ordinal=i}_name(){return new Y(this.name)}_ordinal(){return this.ordinal}_mj$toString$String$(e,i){e.s.push(new Y(this.name)),i&&i()}};r(As,"__javaDeclarations",[{type:"declaration",signature:"class Enum extends Object"},{type:"method",signature:"public String name()",native:As.prototype._name},{type:"method",signature:"public int ordinal()",native:As.prototype._ordinal},{type:"method",signature:"public String toString()",java:As.prototype._mj$toString$String$}]),r(As,"type"),r(As,"values",[]);let Yi=As;class $p{constructor(){r(this,"indexToObjectMap");r(this,"arrayElementsToResolve");r(this,"fieldsToResolve");r(this,"objectToIndexMap");r(this,"nextIndex",-1);r(this,"wrapperTypes",["String","Integer","Double","Boolean","Float","Character","Short","Long"])}toJson(t){return this.objectToIndexMap=new Map,this.nextIndex=0,JSON.stringify(this.anyToJson(t))}anyToJson(t){if(Array.isArray(t))return t.map(e=>this.anyToJson(e));if(typeof t=="object"){if(t==null)return null;if(t instanceof Yi)return t.ordinal;if(t instanceof R)return this.objectToJson(t)}else return t}objectToJson(t){let e=t.getType();if(this.wrapperTypes.indexOf(e.identifier)>=0)return t.value;let i=this.objectToIndexMap.get(t);if(i!=null)return{"!i":i};i=this.nextIndex++,this.objectToIndexMap.set(t,i);let n={"!k":e.identifier,"!i":i};if(e.module.isLibraryModule)return null;for(;e!=null;){let s=!0,a;for(let l of e.getFields())!l.isStatic()&&!l.isTransient()&&(s&&(s=!1,a={},n[e.identifier]=a),a[l.getInternalName()]=this.anyToJson(t[l.getInternalName()]));e=e.getExtends()}return n}fromJson(t,e){this.indexToObjectMap=new Map,this.arrayElementsToResolve=[],this.fieldsToResolve=[];let i=JSON.parse(t),n=this.fromJsonObj(i,e,()=>{});for(let s of this.fieldsToResolve){let a=this.indexToObjectMap.get(s.objectToResolveIndex);a!=null&&(s.objectHoldingField[s.fieldIdentifier]=a)}for(let s of this.arrayElementsToResolve){let a=this.indexToObjectMap.get(s.objectToResolveIndex);a!=null&&(s.array[s.arrayIndex]=a)}return n}fromJsonObj(t,e,i){if(t==null)return null;if(this.wrapperTypes.indexOf(e.identifier)>=0)return new e.runtimeClass(t);let n=t["!k"],s=t["!i"];if(n!=null){let a=new e.runtimeClass,l=t[e.identifier];if(l)for(;e!=null;){for(let h of e.getFields()){let u=h.getInternalName(),m=h.type;m instanceof Le?a[u]=this.fromJsonObj(l[u],m,g=>{this.fieldsToResolve.push({objectHoldingField:a,fieldIdentifier:u,objectToResolveIndex:g})}):a[u]=this.fromJsonAny(l[u],m)}e=e.getExtends()}return this.indexToObjectMap.set(s,a),a}else{let a=this.indexToObjectMap.get(s);return a??(i(s),null)}}fromJsonAny(t,e){if(e instanceof xi){let i=t;return e.runtimeClass.values.find(n=>n.ordinal==i)}else{if(e instanceof Ie&&Array.isArray(t))return this.fromJsonArray(t,e.elementType,e.dimension);if(e.isPrimitive)return t}}fromJsonArray(t,e,i){if(i>1)return t.map(n=>this.fromJsonArray(n,e,i-1));{let n=[];for(let s=0;s{this.arrayElementsToResolve.push({array:t,arrayIndex:s,objectToResolveIndex:l})})):n.push(this.fromJsonAny(a,e))}return n}}}class qo extends Xm{constructor(){super(new Nh("Library file"),!0);r(this,"classesInterfacesEnums",[]);this.setDirty(!1)}getStandardImports(){return[]}prepareSystemModule(e){}getName(e){let i=e.__javaDeclarations.find(a=>a.type=="declaration");if(!i)return"";let s=i.signature.match(/^(class|enum|interface)\s([\wöäüßÖÄÜ]*)[<\s].*$/);return s&&s[2]?s[2]:""}clearAllBreakpoints(){}}class Wg{constructor(){r(this,"gamepads",[]);let t=this;window.addEventListener("gamepadconnected",function(e){console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.",e.gamepad.index,e.gamepad.id,e.gamepad.buttons.length,e.gamepad.axes.length),t.gamepads.indexOf(e.gamepad)<0&&t.gamepads.push(e.gamepad)}),window.addEventListener("gamepaddisconnected",function(e){console.log("Gamepad disconnected from index %d: %s",e.gamepad.index,e.gamepad.id);let i=t.gamepads.indexOf(e.gamepad);i>=0&&t.gamepads.splice(i,1)})}isGamepadButtonPressed(t,e){let i=navigator.getGamepads()[t];if(i==null)return!1;let n=i.buttons[e];return n?n.pressed:!1}getGamepadAxisValue(t,e){let i=navigator.getGamepads()[t];return i==null?0:i.axes[e]}isGamepadConnected(t){return navigator.getGamepads()[t]!=null}}const Ee=class Ee extends R{constructor(){super(...arguments);r(this,"isActing",!0);r(this,"isDestroyed",!1);r(this,"actorManager")}copyFrom(e){this.isActing=e.isActing,this.isDestroyed=e.isDestroyed}_registerListeners(e){this.actorManager=e.scheduler.interpreter.actorManager,this._mj$act$void$!=Ee.prototype._mj$act$void$&&this.actorManager.registerActor(this,"act"),this._mj$act$void$double!=Ee.prototype._mj$act$void$double&&this.actorManager.registerActor(this,"actWithTime"),this._mj$onKeyDown$void$String!=Ee.prototype._mj$onKeyDown$void$String&&this.actorManager.registerActor(this,"keyDown"),this._mj$onKeyTyped$void$String!=Ee.prototype._mj$onKeyTyped$void$String&&this.actorManager.registerActor(this,"keyPressed"),this._mj$onKeyUp$void$String!=Ee.prototype._mj$onKeyUp$void$String&&this.actorManager.registerActor(this,"keyUp")}_cj$_constructor_$Actor$(e,i){e.s.push(this),i&&i()}_mj$act$void$(e,i){}_mj$act$void$double(e,i,n){}_mj$onKeyTyped$void$String(e,i,n){}_mj$onKeyUp$void$String(e,i,n){}_mj$onKeyDown$void$String(e,i,n){}_mj$destroy$void$(e){this.destroy()}_mj$isKeyUp$boolean$string(e,i,n){let s=e.scheduler.interpreter.keyboardManager;if(!s){e.s.push(!0);return}e.s.push(!s.isPressed(n))}_mj$isKeyDown$boolean$string(e,i,n){let s=e.scheduler.interpreter.keyboardManager;if(!s){e.s.push(!1);return}e.s.push(s.isPressed(n))}_isDestroyed(){return this.isDestroyed}_isActing(){return this.isActing}_stopActing(){this.isActing=!1}_restartActing(){this.isActing=!0}destroy(){var e;(e=this.actorManager)==null||e.unregisterActor(this),this.isDestroyed=!0}_isGamepadButtonDown(e,i){return Ee.gamepadTool?Ee.gamepadTool.isGamepadButtonPressed(e,i):!1}_isGamepadConnected(e){return Ee.gamepadTool?Ee.gamepadTool.isGamepadConnected(e):!1}_getGamepadAxisValue(e,i){return Ee.gamepadTool?Ee.gamepadTool.getGamepadAxisValue(e,i):0}static _mj$setCallActMethodFrequency$void$int$(e,i){e.scheduler.interpreter.actorManager.setTimerFrequency(i)}};r(Ee,"__javaDeclarations",[{type:"declaration",signature:"abstract class Actor extends Object"},{type:"method",signature:"Actor()",java:Ee.prototype._cj$_constructor_$Actor$},{type:"method",signature:"void act()",java:Ee.prototype._mj$act$void$,comment:o.actorActMethodComment},{type:"method",signature:"void act(double deltaTime)",java:Ee.prototype._mj$act$void$double,comment:o.actorActMethodComment2},{type:"method",signature:"void onKeyTyped(String key)",java:Ee.prototype._mj$onKeyTyped$void$String,comment:o.actorOnKeyTypedComment},{type:"method",signature:"void onKeyUp(String key)",java:Ee.prototype._mj$onKeyUp$void$String,comment:o.actorOnKeyUpComment},{type:"method",signature:"void onKeyDown(String key)",java:Ee.prototype._mj$onKeyDown$void$String,comment:o.actorOnKeyDownComment},{type:"method",signature:"void destroy()",java:Ee.prototype._mj$destroy$void$},{type:"method",signature:"final boolean isKeyUp(string key)",java:Ee.prototype._mj$isKeyUp$boolean$string,comment:o.actorIsKeyUpComment},{type:"method",signature:"final boolean isKeyDown(string key)",java:Ee.prototype._mj$isKeyDown$boolean$string,comment:o.actorIsKeyDownComment},{type:"method",signature:"final boolean isActing()",native:Ee.prototype._isActing,comment:o.actorIsActingComment},{type:"method",signature:"final boolean isDestroyed()",native:Ee.prototype._isDestroyed,comment:o.actorIsDestroyedComment},{type:"method",signature:"final void stopActing()",native:Ee.prototype._stopActing,comment:o.actorStopActingComment},{type:"method",signature:"final void restartActing()",native:Ee.prototype._restartActing,comment:o.actorRestartActingComment},{type:"method",signature:"final boolean isGamepadButtonDown(int gamepadIndex, int buttonIndex)",native:Ee.prototype._isGamepadButtonDown,comment:o.actorIsGamepadButtonDownComment},{type:"method",signature:"final boolean isGamepadConnected(int gamepadIndex)",native:Ee.prototype._isGamepadConnected,comment:o.actorIsGamepadConnectedComment},{type:"method",signature:"final double getGamepadAxisValue(int gamepadIndex, int axisIndex)",native:Ee.prototype._getGamepadAxisValue,comment:o.actorGetGamepadAxisValueComment},{type:"method",signature:"static void setActFrequency(int frequencyInHz)",java:Ee._mj$setCallActMethodFrequency$void$int$,comment:o.SystemToolsSetCallActMethodFrequency}]),r(Ee,"type"),r(Ee,"gamepadTool",typeof window>"u"?void 0:new Wg);let Dl=Ee;const be=class be extends R{constructor(e,i){super();r(this,"x");r(this,"y");this.x=e,this.y=i}_constructor2(e,i){return this.x=e,this.y=i,this}_equals(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)<1e-14}_plus(e){return new be(this.x+e.x,this.y+e.y)}_minus(e){return new be(this.x-e.x,this.y-e.y)}static _fromPolarCoordinates(e,i){let n=i/180*Math.PI;return new be(e*Math.cos(n),e*Math.sin(n))}_getAngleDeg(){let e=Math.atan2(this.y,this.x)/Math.PI*180;return e>=0?e:360+e}_getAngleRad(){let e=Math.atan2(this.y,this.x);return e>=0?e:Math.PI*2+e}_getLength(){return Math.sqrt(this.x*this.x+this.y*this.y)}_getUnitVector(){let e=this.x*this.x+this.y*this.y;if(e<1e-14)return new be(0,0);let i=Math.sqrt(e);return new be(this.x/i,this.y/i)}_clone(){return new be(this.x,this.y)}_setLength(e){let i=Math.sqrt(this.x*this.x+this.y*this.y);if(i>0){let n=e/i;this.x*=n,this.y*=n}return this}_add(e){return this.x+=e.x,this.y+=e.y,this}_sub(e){return this.x-=e.x,this.y-=e.y,this}_scalarProduct(e){return this.x*e.x+this.y*e.y}_scaledBy(e){return new be(this.x*e,this.y*e)}_rotatedBy(e){let i=e/180*Math.PI,n=Math.sin(i),s=Math.cos(i);return new be(this.x*s-this.y*n,this.x*n+this.y*s)}_rotate(e){let i=e/180*Math.PI,n=Math.sin(i),s=Math.cos(i),a=this.x*s-this.y*n,l=this.x*n+this.y*s;return this.x=a,this.y=l,this}_scale(e){return this.x*=e,this.y*=e,this}_normalized(){let e=this.x*this.x+this.y*this.y;if(e<1e-14)return new be(0,0);let i=Math.sqrt(e);return new be(this.x/i,this.y/i)}_normalize(){let e=this.x*this.x+this.y*this.y;if(e<1e-14)return this.x=0,this.y=0,this;let i=Math.sqrt(e);return this.x/=i,this.y/=i,this}_distanceTo(e){let i=e.x-this.x,n=e.y-this.y;return Math.sqrt(i*i+n*n)}static _distance(e,i,n,s){let a=n-e,l=s-i;return Math.sqrt(a*a+l*l)}_mj$toString$String$(e,i){e.s.push(new Y("("+this.x+", "+this.y+")")),i&&i()}_debugOutput(){return`{x = ${this.x}, y = ${this.y}}`}};r(be,"__javaDeclarations",[{type:"declaration",signature:"class Vector2 extends Object",comment:o.Vector2ClassComment},{type:"field",signature:"public double x",comment:o.Vector2XComment},{type:"field",signature:"public double y",comment:o.Vector2YComment},{type:"method",signature:"Vector2(double x, double y)",native:be.prototype._constructor2,comment:o.Vector2ConstructorComment},{type:"method",signature:"static Vector2 fromPolarCoordinates(double r, double angle)",native:be._fromPolarCoordinates,comment:o.Vector2ToStringComment},{type:"method",signature:"final double getAngleDeg()",native:be.prototype._getAngleDeg,comment:o.Vector2GetAngleDegComment},{type:"method",signature:"final double getAngleRad()",native:be.prototype._getAngleRad,comment:o.Vector2GetAngleRadComment},{type:"method",signature:"final double getLength()",native:be.prototype._getLength,comment:o.Vector2GetLengthComment},{type:"method",signature:"final Vector2 getUnitVector()",native:be.prototype._getUnitVector,comment:o.Vector2GetUnitVectorComment},{type:"method",signature:"final Vector2 clone()",native:be.prototype._clone,comment:o.Vector2CloneComment},{type:"method",signature:"final Vector2 setLength(double newLength)",native:be.prototype._setLength,comment:o.Vector2SetLengthComment},{type:"method",signature:"final Vector2 scaledBy(double factor)",native:be.prototype._scaledBy,comment:o.Vector2ScaledByComment},{type:"method",signature:"final Vector2 scale(double factor)",native:be.prototype._scale,comment:o.Vector2ScaleComment},{type:"method",signature:"final Vector2 rotatedBy(double angleDeg)",native:be.prototype._rotatedBy,comment:o.Vector2RotatedByComment},{type:"method",signature:"final Vector2 rotate(double angleDeg)",native:be.prototype._rotate,comment:o.Vector2RotateComment},{type:"method",signature:"final Vector2 plus(Vector2 otherVector)",native:be.prototype._plus,comment:o.Vector2PlusComment},{type:"method",signature:"final Vector2 minus(Vector2 otherVector)",native:be.prototype._minus,comment:o.Vector2MinusComment},{type:"method",signature:"final Vector2 add(Vector2 otherVector)",native:be.prototype._add,comment:o.Vector2AddComment},{type:"method",signature:"final Vector2 sub(Vector2 otherVector)",native:be.prototype._sub,comment:o.Vector2SubComment},{type:"method",signature:"final Vector2 normalized()",native:be.prototype._normalized,comment:o.Vector2NormalizedComment},{type:"method",signature:"final Vector2 normalize()",native:be.prototype._normalize,comment:o.Vector2NormalizeComment},{type:"method",signature:"final double scalarProduct(Vector2 otherVector)",native:be.prototype._scalarProduct,comment:o.Vector2ScalarProductComment},{type:"method",signature:"final double distanceTo(Vector2 otherVector)",native:be.prototype._distanceTo,comment:o.Vector2DistanceToComment},{type:"method",signature:"final static double distance(double x1, double y1, double x2, double y2)",native:be._distance,comment:o.Vector2DistanceComment},{type:"method",signature:"public boolean equals(Vector2 otherVector)",native:be.prototype._equals,comment:o.objectEqualsComment},{type:"method",signature:"String toString()",java:be.prototype._mj$toString$String$,comment:o.Vector2ToStringComment}]),r(be,"type");let _s=be;const je=class je extends R{constructor(e,i,n){super();r(this,"v");this.v=new Xe(e,i,n)}_constructor2(e,i,n){return this.v=new Xe(e,i,n),this}_constructor2xy(e,i){if(e===null)throw new qt(o.Vector3xyNullPointerComment("xy"));return this.v=new Xe(e.x,e.y,i),this}_constructor2yz(e,i){if(i===null)throw new qt(o.Vector3xyNullPointerComment("yz"));return this.v=new Xe(e,i.x,i.y),this}_equals(e){return Math.abs(this.v.x-e.v.x)+Math.abs(this.v.y-e.v.y)+Math.abs(this.v.z-e.v.z)<1e-14}_plus(e){return new je(this.v.x+e.v.x,this.v.y+e.v.y,this.v.z+e.v.z)}_minus(e){return new je(this.v.x-e.v.x,this.v.y-e.v.y,this.v.z-e.v.z)}_getLength(){return Math.sqrt(this.v.x*this.v.x+this.v.y*this.v.y+this.v.z*this.v.z)}_getUnitVector(){let e=this.v.x*this.v.x+this.v.y*this.v.y+this.v.z*this.v.z;if(e<1e-14)return new je(0,0,0);let i=Math.sqrt(e);return new je(this.v.x/i,this.v.y/i,this.v.z/i)}_clone(){return new je(this.v.x,this.v.y,this.v.z)}_xy(){return new _s(this.v.x,this.v.y)}_xz(){return new _s(this.v.x,this.v.z)}_yz(){return new _s(this.v.y,this.v.z)}_setLength(e){let i=Math.sqrt(this.v.x*this.v.x+this.v.y*this.v.y+this.v.z*this.v.z);if(i>0){let n=e/i;this.v.x*=n,this.v.y*=n,this.v.z*=n}return this}_add(e){return this.v.x+=e.v.x,this.v.y+=e.v.y,this.v.z+=e.v.z,this}_sub(e){return this.v.x-=e.v.x,this.v.y-=e.v.y,this.v.z-=e.v.z,this}_scalarProduct(e){return this.v.x*e.v.x+this.v.y*e.v.y+this.v.z*e.v.z}_scaledBy(e){return new je(this.v.x*e,this.v.y*e,this.v.z*e)}_scale(e){return this.v.x*=e,this.v.y*=e,this.v.z*=e,this}_distanceTo(e){let i=e.v.x-this.v.x,n=e.v.y-this.v.y,s=e.v.z-this.v.z;return Math.sqrt(i*i+n*n+s*s)}static _distance(e,i,n,s,a,l){let h=s-e,u=a-i,m=l-n;return Math.sqrt(h*h+u*u+m*m)}_mj$toString$String$(e,i){e.s.push(new Y("("+this.v.x+", "+this.v.y+", "+this.v.z+")")),i&&i()}_debugOutput(){return`{x = ${this.v.x}, y = ${this.v.y}, z = ${this.v.z}}`}_applyMatrix4(e){return this.v.applyMatrix4(e.m),this}};r(je,"__javaDeclarations",[{type:"declaration",signature:"class Vector3 extends Object",comment:o.Vector3ClassComment},{type:"field",signature:"public double x",nativeIdentifier:"v.x",comment:o.Vector3XComment},{type:"field",signature:"public double y",nativeIdentifier:"v.y",comment:o.Vector3YComment},{type:"field",signature:"public double z",nativeIdentifier:"v.z",comment:o.Vector3YComment},{type:"method",signature:"Vector3(double x, double y, double z)",native:je.prototype._constructor2,comment:o.Vector3ConstructorComment},{type:"method",signature:"Vector3(Vector2 xy, double z)",native:je.prototype._constructor2xy,comment:o.Vector3ConstructorComment},{type:"method",signature:"Vector3(double x, Vector2 yz)",native:je.prototype._constructor2yz,comment:o.Vector3ConstructorComment},{type:"method",signature:"final double getLength()",native:je.prototype._getLength,comment:o.Vector3GetLengthComment},{type:"method",signature:"final Vector3 getUnitVector()",native:je.prototype._getUnitVector,comment:o.Vector3GetUnitVectorComment},{type:"method",signature:"final Vector3 clone()",native:je.prototype._clone,comment:o.Vector3CloneComment},{type:"method",signature:"final Vector2 xy()",native:je.prototype._xy},{type:"method",signature:"final Vector2 xz()",native:je.prototype._xz},{type:"method",signature:"final Vector2 yz()",native:je.prototype._yz},{type:"method",signature:"final Vector3 setLength(double newLength)",native:je.prototype._setLength,comment:o.Vector3SetLengthComment},{type:"method",signature:"final Vector3 scaledBy(double factor)",native:je.prototype._scaledBy,comment:o.Vector3ScaledByComment},{type:"method",signature:"final Vector3 scale(double factor)",native:je.prototype._scale,comment:o.Vector3ScaleComment},{type:"method",signature:"final Vector3 plus(Vector3 otherVector)",native:je.prototype._plus,comment:o.Vector3PlusComment},{type:"method",signature:"final Vector3 minus(Vector3 otherVector)",native:je.prototype._minus,comment:o.Vector3MinusComment},{type:"method",signature:"final Vector3 add(Vector3 otherVector)",native:je.prototype._add,comment:o.Vector3AddComment},{type:"method",signature:"final Vector3 sub(Vector3 otherVector)",native:je.prototype._sub,comment:o.Vector3SubComment},{type:"method",signature:"final double scalarProduct(Vector3 otherVector)",native:je.prototype._scalarProduct,comment:o.Vector3ScalarProductComment},{type:"method",signature:"final double distanceTo(Vector3 otherVector)",native:je.prototype._distanceTo,comment:o.Vector3DistanceToComment},{type:"method",signature:"final static double distance(double x1, double y1, double z1, double x2, double y2, double z2)",native:je._distance,comment:o.Vector3DistanceComment},{type:"method",signature:"final Vector3 applyMatrix4(Matrix4 m)",native:je.prototype._applyMatrix4,comment:o.Vector3ApplyMatrix4Comment},{type:"method",signature:"public boolean equals(Vector3 otherVector)",native:je.prototype._equals,comment:o.objectEqualsComment},{type:"method",signature:"String toString()",java:je.prototype._mj$toString$String$,comment:o.Vector3ToStringComment}]),r(je,"type");let ir=je;class Ng{constructor(t,e,i){r(this,"internalMouseListeners",[]);r(this,"javaMouseListeners",[]);r(this,"shapesWithImplementedMouseMethods",[]);r(this,"listeners",new Map);r(this,"isPointerLockEnabled",!1);r(this,"pointerLockChangeListener",()=>{});r(this,"pointerLockErrorListener",()=>{});this.world=t,this.graphicsDiv=e,this.coordinateDiv=i}unregisterListeners(){for(let t of["mouseup","mousedown","mousemove","mouseenter","mouseleave"])this.graphicsDiv.removeEventListener(t,this.listeners.get(t));this.internalMouseListeners=[],this.javaMouseListeners=[],this.shapesWithImplementedMouseMethods=[],this.listeners=new Map,this.coordinateDiv&&(this.coordinateDiv.style.display="none"),this.disablePointerLock()}registerListeners(){let t=this;for(let e of["mouseup","mousedown","mousemove","mouseenter","mouseleave"]){let i=e;window.PointerEvent&&(i=i.replace("mouse","pointer"));let n;this.graphicsDiv.addEventListener(e,n=s=>{let a;if(this.isPointerLockEnabled)a={x:s.movementX,y:s.movementY};else{let l=this.graphicsDiv.getBoundingClientRect();a=t.world.normalizedCoordinatesToXY(s.offsetX/l.width,s.offsetY/l.height)}t.callShapesWithImplementedMouseMethods(e,a.x,a.y,s.button);for(let l of t.internalMouseListeners)l.onMouseEvent(e,a.x,a.y);if(t.javaMouseListeners.length>0){let l=this.world.getInterpreter().scheduler.createThread("mouse event thread");for(let h of t.javaMouseListeners)switch(e){case"mousedown":h._mj$onMouseDown$void$double$double$int(l,void 0,a.x,a.y,s.button);break;case"mouseup":h._mj$onMouseUp$void$double$double$int(l,void 0,a.x,a.y,s.button);break;case"mouseenter":h._mj$onMouseEnter$void$double$double(l,void 0,a.x,a.y);break;case"mouseleave":h._mj$onMouseLeave$void$double$double(l,void 0,a.x,a.y);break;case"mousemove":h._mj$onMouseMove$void$double$double(l,void 0,a.x,a.y);break}l.startIfNotEmptyOrDestroy()}this.coordinateDiv&&e=="mousemove"&&(this.coordinateDiv.textContent="("+Math.round(a.x)+"/"+Math.round(a.y)+")"),this.coordinateDiv&&e=="mouseleave"&&(this.coordinateDiv.textContent="")}),this.listeners.set(e,n),this.graphicsDiv.addEventListener("contextmenu",s=>{s.preventDefault()})}this.coordinateDiv&&(this.coordinateDiv.style.display="block")}addJavaMouseListener(t){this.javaMouseListeners.push(t)}removeJavaMouseListener(t){this.javaMouseListeners.splice(this.javaMouseListeners.indexOf(t))}removeAllListeners(){this.javaMouseListeners=[],this.shapesWithImplementedMouseMethods=[],this.internalMouseListeners=[],this.listeners=new Map,this.disablePointerLock()}addShapeWithImplementedMouseMethods(t){this.shapesWithImplementedMouseMethods.push(t)}removeShapeWithImplementedMouseMethods(t){this.shapesWithImplementedMouseMethods.splice(this.shapesWithImplementedMouseMethods.indexOf(t),1)}callShapesWithImplementedMouseMethods(t,e,i,n){if(this.shapesWithImplementedMouseMethods.length==0)return;let s=this.world.getInterpreter().scheduler.createThread("mouse event thread");switch(t){case"mousedown":case"mouseup":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented[t];l&&(a.trackMouseMove||a._containsPoint(e,i))&&l.call(a,s,void 0,e,i,n)}break;case"mouseenter":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented[t];l&&a._containsPoint(e,i)&&!a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!0,l.call(a,s,void 0,e,i))}break;case"mouseleave":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented[t];l&&a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!1,l.call(a,s,void 0,e,i))}break;case"mousemove":for(let a of this.shapesWithImplementedMouseMethods){if(!a.reactToMouseEventsWhenInvisible&&!a.container.visible)continue;let l=a.mouseEventsImplemented.mousemove,h=a.mouseEventsImplemented.mouseenter,u=a.mouseEventsImplemented.mouseleave;if(l!=null||h!=null&&!a.mouseLastSeenInsideObject||u!=null&&a.mouseLastSeenInsideObject){let m=a._containsPoint(e,i);(a.trackMouseMove||m)&&l!=null&&l.call(a,s,void 0,e,i),m&&h!=null&&!a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!0,h.call(a,s,void 0,e,i)),!m&&u!=null&&a.mouseLastSeenInsideObject&&(a.mouseLastSeenInsideObject=!1,u.call(a,s,void 0,e,i))}}break}s.startIfNotEmptyOrDestroy()}hasMouseListeners(){return this.shapesWithImplementedMouseMethods.length>0}enablePointerLock(){this.pointerLockChangeListener=()=>{this.isPointerLockEnabled=document.pointerLockElement===this.graphicsDiv},this.pointerLockErrorListener=()=>{this.isPointerLockEnabled=!1},document.addEventListener("pointerlockchange",this.pointerLockChangeListener),document.addEventListener("pointerlockerror",this.pointerLockErrorListener),this.graphicsDiv.requestPointerLock()}disablePointerLock(){this.isPointerLockEnabled&&document.exitPointerLock(),this.isPointerLockEnabled=!1,document.removeEventListener("pointerlockchange",this.pointerLockChangeListener),document.removeEventListener("pointerlockerror",this.pointerLockErrorListener)}}const qg=""+new URL("assets/spritesheet.json-UMkCP08N.txt",import.meta.url).href,np=""+new URL("assets/spritesheet-BWt2A0xs.png",import.meta.url).href;class ay{constructor(){r(this,"systemSpritesheetData");r(this,"systemTexture");r(this,"userSpritesheetData");r(this,"userTexture");r(this,"textureCache",new Map)}async init(t){this.systemTexture=await new hd().loadAsync(np),this.systemTexture.colorSpace=ud,this.systemTexture.magFilter=Na,this.systemTexture.needsUpdate=!0,this.systemSpritesheetData=await(await fetch(qg)).json();let e=t.graphicsManager;e&&e.pixiSpritesheetData&&(this.userSpritesheetData=e.pixiSpritesheetData,this.userTexture=new Ff(e.pngImageData,this.userSpritesheetData.meta.size.w,this.userSpritesheetData.meta.size.h,bp,Vf,void 0,void 0,void 0,Na,Na,void 0,ud),this.userTexture.needsUpdate=!0)}getFrame(t,e){var s;let i=t+"#"+e,n=this.systemSpritesheetData.frames[i];return n?n.isSystemSpritesheet=!0:(n=(s=this.userSpritesheetData)==null?void 0:s.frames[i],n&&(n.isSystemSpritesheet=!1)),n}getTextureImageData(t,e){var l;let i=t+"#"+e,n=this.systemSpritesheetData.frames[i],s;if(n)s=this.systemTexture;else{if(n=(l=this.userSpritesheetData)==null?void 0:l.frames[i],!n)throw new W(o.textureNotFoundError(t,e));s=this.userTexture}let a=n.frame;return{t:s,data:a}}getSpritesheetBasedTexture(t,e){var h;let i=t+"#"+e,n=this.systemSpritesheetData.frames[i],s,a=!1;if(n)s=this.systemTexture.clone();else{if(n=(h=this.userSpritesheetData)==null?void 0:h.frames[i],!n)throw new W(o.textureNotFoundError(t,e));s=this.userTexture.clone(),s.flipY=!0,a=!0}let l=n.frame;return s.userData.isPartOfSpritesheet=!0,s.userData.width=l.w,s.userData.height=l.h,s.userData.key=i,a?(s.repeat.set(l.w/this.userTexture.image.width,l.h/this.userTexture.image.height),s.offset.x=l.x/this.userTexture.image.width,s.offset.y=1-(l.h/this.userTexture.image.height+l.y/this.userTexture.image.height)):(s.repeat.set(l.w/this.systemTexture.image.width,l.h/this.systemTexture.image.height),s.offset.x=l.x/this.systemTexture.image.width,s.offset.y=1-l.h/this.systemTexture.image.height-l.y/this.systemTexture.image.height),s.colorSpace=ud,s.magFilter=Na,s}getTextureWithOwnData(t,e){var m;let i=this.systemSpritesheetData.frames[t],n;if(i)n=this.systemTexture;else{if(i=(m=this.userSpritesheetData)==null?void 0:m.frames[t],!i)throw new W(o.textureNotFoundError(t,0));n=this.userTexture}let s=i.frame,a=new Up(s.x,n.image.height-s.y-s.h),l=a.clone();l.x+=s.w,l.y+=s.h;let h=new _f(s.w,s.h,{minFilter:Na,magFilter:Na,format:bp,colorSpace:ud}),u=h.texture;return u.wrapS=yp,u.wrapT=yp,u.flipY=!0,e.initRenderTarget(h),e.copyTextureToTexture(n,u,new zf(a,l)),u.userData.width=s.w,u.userData.height=s.h,u.userData.key=t,u.userData.renderTarget=h,u}destroy(){var t,e;(t=this.systemTexture)==null||t.dispose(),(e=this.userTexture)==null||e.dispose(),this.systemTexture=null,this.userTexture=null}}class oy{constructor(t){r(this,"axes",[{vector:new Xe(1,0,0),vector2:new Xe(0,-1,0),color:16711680,caption:"x",textureIndex:0},{vector:new Xe(0,1,0),vector2:new Xe(-1,0,0),color:65280,caption:"y",textureIndex:1},{vector:new Xe(0,0,1),vector2:new Xe(-1,0,0),color:2105599,caption:"z",textureIndex:2}]);this.world3d=t}show(){let t=new Xe(0,0,0);if(!this.axes[0].arrowHelper)for(let e of this.axes){const i=this.world3d.textureManager3d.getSpritesheetBasedTexture("standard_textures",e.textureIndex),n=new Wf({map:i,color:16777215,transparent:!0});e.sprite=new Nf(n),e.sprite.scale.set(.2,.2,.2),e.sprite.position.add(e.vector.clone().multiplyScalar(.8)),e.sprite.position.add(e.vector2.clone().multiplyScalar(.25)),e.arrowHelper=new qf(e.vector,t,1,e.color,void 0,.08),this.world3d.scene.add(e.sprite,e.arrowHelper)}for(let e of this.axes)this.world3d.scene.add(e.arrowHelper);return this}hide(){for(let t of this.axes)this.world3d.scene.remove(t.sprite,t.arrowHelper)}}class ly{constructor(t,e){r(this,"texture");r(this,"mesh");r(this,"geometry");r(this,"material");r(this,"maxCount",60);r(this,"iOffset",0);r(this,"iSize",this.iOffset+3);r(this,"iUvBox",this.iSize+2);r(this,"iRotation",this.iUvBox+4);r(this,"iColor",this.iRotation+1);r(this,"iAlpha",this.iColor+3);r(this,"bufferElementSize",this.iAlpha+1);r(this,"interleavedBuffer",new Float32Array(this.maxCount*this.bufferElementSize));r(this,"instanceInterleavedBuffer");r(this,"fastsprites",[]);r(this,"dirty",!1);r(this,"oldCameraPos",new Xe);r(this,"intervalID");r(this,"indicesToRemove",[]);if(this.world3d=t,this.world3d.textureManager3d.userTexture){let i=this.world3d.textureManager3d.userSpritesheetData.frames,n=Object.getOwnPropertyNames(i);if(n.length>0){let s=n[0],a=s.substring(0,s.indexOf("#")),l=parseInt(s.substring(s.indexOf("#")+1)),h=this.createSprite(1e-6,a,l);h&&this.moveSprite(h,1e6,1e6,1e6)}}this.intervalID=setInterval(()=>{this.sortByDistanceToCamera()},10),e.eventManager.once("resetRuntime",()=>{this.intervalID&&clearInterval(this.intervalID),this.intervalID=null})}initMesh(t){this.geometry=new Rf;const e=[.5,.5,0,-.5,.5,0,-.5,-.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0],i=[1,1,0,1,0,0,1,1,0,0,1,0];this.geometry.setAttribute("position",new vp(e,3)),this.geometry.setAttribute("rawUV",new vp(i,2)),this.instanceInterleavedBuffer=new Gf(this.interleavedBuffer,this.bufferElementSize,1),this.geometry.setAttribute("offset",new qa(this.instanceInterleavedBuffer,3,this.iOffset)),this.geometry.setAttribute("size",new qa(this.instanceInterleavedBuffer,2,this.iSize)),this.geometry.setAttribute("uvBox",new qa(this.instanceInterleavedBuffer,4,this.iUvBox)),this.geometry.setAttribute("rotation",new qa(this.instanceInterleavedBuffer,1,this.iRotation)),this.geometry.setAttribute("color",new qa(this.instanceInterleavedBuffer,3,this.iColor)),this.geometry.setAttribute("alpha",new qa(this.instanceInterleavedBuffer,1,this.iAlpha)),this.geometry.instanceCount=t;var n=new Hf({uniforms:{systemTexture:{value:this.world3d.textureManager3d.systemTexture},userTexture:{value:this.world3d.textureManager3d.userTexture}},vertexShader:this.getVertexShader(),fragmentShader:this.getFragmentShader(),side:mc,transparent:!0});n.needsUpdate=!0,this.mesh=new ge(this.geometry,n),this.world3d.scene.add(this.mesh)}getVertexShader(){return` uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; attribute vec3 position; attribute vec2 rawUV; attribute vec3 offset; attribute vec2 size; attribute vec4 uvBox; attribute float rotation; attribute vec3 color; attribute float alpha; varying vec2 vUV; varying vec3 vColor; varying float vAlpha; varying float vIsUserTexture; void main() { vColor = color; vAlpha = alpha; if(size.x < 0.0){ vIsUserTexture = 1.0; } else { vIsUserTexture = 0.0; } vUV = uvBox.xy + rawUV * vec2(uvBox.z, uvBox.w); // uvBox.zw; vec4 mvPosition = modelViewMatrix[ 3 ]; vec2 rotatedPosition; rotatedPosition.x = cos( rotation ) * position.x - sin( rotation ) * position.y; rotatedPosition.y = sin( rotation ) * position.x + cos( rotation ) * position.y; mvPosition.xy = mvPosition.xy + rotatedPosition.xy * vec2(abs(size.x), size.y); gl_Position = projectionMatrix * (mvPosition + modelViewMatrix * vec4(offset, 0.0)); // vec4 mvPosition = modelViewMatrix * vec4(position * size, 1.0); //gl_Position = projectionMatrix * modelViewMatrix * vec4( offset + position * size, 1.0 ); } `}getFragmentShader(){return` precision mediump float; uniform sampler2D systemTexture; uniform sampler2D userTexture; //attribute vec3 color; //attribute float alpha; varying vec2 vUV; varying vec3 vColor; varying float vAlpha; varying float vIsUserTexture; void main() { if(vIsUserTexture > 0.5){ gl_FragColor = texture2D(userTexture, vUV) * vec4(vColor, vAlpha); } else { gl_FragColor = texture2D(systemTexture, vUV) * vec4(vColor, vAlpha); } } `}createSprite(t,e,i){let n=typeof e=="string"?e:e.name,s=this.world3d.textureManager3d.getFrame(n,i);if(!s)return console.error("Didn't find sprite "+i+" in library "+n+"."),null;let a=s.frame,l=1024,h=1024,u=s.isSystemSpritesheet?this.world3d.textureManager3d.systemTexture:this.world3d.textureManager3d.userTexture;u.flipY=!0,l=u.image.width,h=u.image.height;let m=a.w/l,g=a.h/h,f=a.x/l,b=1-a.y/h-g;(this.geometry==null||this.geometry.instanceCount>=this.maxCount)&&(this.resizeBuffers(),this.sortByDistanceToCamera());let A=this.geometry.instanceCount,C={index:A};this.geometry.instanceCount++;let w=A*this.bufferElementSize;return this.interleavedBuffer[w+0]=0,this.interleavedBuffer[w+1]=0,this.interleavedBuffer[w+2]=0,this.interleavedBuffer[w+3]=s.isSystemSpritesheet?t:-t,this.interleavedBuffer[w+4]=a.h/a.w*t,this.interleavedBuffer[w+5]=f,this.interleavedBuffer[w+6]=b,this.interleavedBuffer[w+7]=m,this.interleavedBuffer[w+8]=g,this.interleavedBuffer[w+9]=0,this.interleavedBuffer[w+10]=1,this.interleavedBuffer[w+11]=1,this.interleavedBuffer[w+12]=1,this.interleavedBuffer[w+13]=1,this.fastsprites.push(C),this.dirty=!0,C}resizeBuffers(){this.maxCount*=3;const t=new Float32Array(this.maxCount*this.bufferElementSize);t.set(this.interleavedBuffer),this.interleavedBuffer=t;let e=0;this.mesh&&(e=this.geometry.instanceCount,this.world3d.scene.remove(this.mesh),this.mesh.material.dispose(),this.mesh.geometry.dispose()),this.initMesh(e)}destroy(){this.mesh&&(this.world3d.scene.remove(this.mesh),this.mesh.material.dispose(),this.mesh.geometry.dispose())}removeSprite(t){this.indicesToRemove.push(t.index),this.dirty=!0}removeIntern(){for(;this.indicesToRemove.length>0;){let t=this.indicesToRemove.pop();const e=this.fastsprites.pop();if(t>16)/255,n=((e&65280)>>8)/255,s=(e&255)/255,a=t.index*this.bufferElementSize+this.iColor;this.interleavedBuffer[a]=i,this.interleavedBuffer[a+1]=n,this.interleavedBuffer[a+2]=s,this.dirty=!0}setAlpha(t,e){let i=t.index*this.bufferElementSize+this.iAlpha;this.interleavedBuffer[i]=e}moveSpriteTo(t,e,i,n){let s=t.index*this.bufferElementSize+this.iOffset;this.interleavedBuffer[s]=e,this.interleavedBuffer[s+1]=i,this.interleavedBuffer[s+2]=n,this.dirty=!0}getX(t){return this.interleavedBuffer[t.index*this.bufferElementSize+this.iOffset]}getY(t){return this.interleavedBuffer[t.index*this.bufferElementSize+this.iOffset+1]}getZ(t){return this.interleavedBuffer[t.index*this.bufferElementSize+this.iOffset+2]}sortByDistanceToCamera(){if(!this.mesh)return;this.instanceInterleavedBuffer.needsUpdate=!0;let t=this.world3d.currentCamera.camera3d,e=t.position;if(!this.dirty&&e.distanceTo(this.oldCameraPos)<.01)return;this.removeIntern();let i=this.geometry.instanceCount;if(i<2)return;this.oldCameraPos=e.clone(),this.dirty=!1;let n=t.getWorldDirection(new Xe).normalize(),s=new Float32Array(i);for(let a=0;as;)l--;if(a<=l){let h=t[a];t[a]=t[l],t[l]=h;let u=a*this.bufferElementSize,m=l*this.bufferElementSize;for(let f=0;f{this.destroyWorld(n)}),(b=n.graphicsManager)==null||b.registerGraphicSystem(this);let s=n.retrieveObject("World3dClass");if(s)return e.s.push(s),i&&i(),s;let a=e.state;e.state=F.waiting,n.storeObject("World3dClass",this),this.actorManager=new bg(n);let l=(A=n.graphicsManager)==null?void 0:A.graphicsDiv,h=l.getElementsByClassName("world3d");for(let w=0;w0&&(u[0].style.pointerEvents="none"),this.graphicsDiv.style.overflow="hidden",this.graphicsDiv.innerHTML="",this.scene=new Kf;let m=new jd(75,this.width/this.height,.1,1e3);this.currentCamera=new e.classes.PerspectiveCamera3d,this.currentCamera.camera3d=m,this.changeResolution(n,this.width,this.height),this.renderer=new Uf({antialias:!0}),this.renderer.setSize(this.width,this.height),this.graphicsDiv.appendChild(this.renderer.domElement),this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",m.position.set(2,2,2),m.lookAt(new Xe(0,0,0)),this.startAnimationLoop(n),this.resizeObserver=new ResizeObserver(()=>{this.changeResolution(n,this.width,this.height)}),this.resizeObserver.observe(this.graphicsDiv.parentElement.parentElement),this.orbitControls=new Qp(this.currentCamera.camera3d,this.renderer.domElement);const g=new e.classes.DirectionalLight3d;g.world3d=this,g.light.position.set(10,5,3),g.light.intensity=1.5,this.scene.add(g.light),this.lights.push(g);const f=new e.classes.AmbientLight3d;f.world3d=this,f.light.intensity=.5,this.scene.add(f.light),this.lights.push(f),this.scene.background=new Ls(0,0,0),this.addCallbacks(n),this.mouseManager=new Ng(this,this.graphicsDiv,(C=n.graphicsManager)==null?void 0:C.coordinatesDiv),this.mouseManager.registerListeners(),this.textureManager3d=new ay,this.textureManager3d.init(n).then(()=>{this.coordinateSystemHelper=new oy(this).show(),this.fastSpriteManager=new ly(this,n),e.state=a,e.state=a,e.s.push(this),i&&i()})}startAnimationLoop(e){let i=()=>{this.renderer.render(this.scene,this.currentCamera.camera3d)};this.renderer.setAnimationLoop(i)}tick(e,i){i.timerFunction(e)}addCallbacks(e){let i=()=>{e.deleteObject("World3dClass"),e.eventManager.off(i),e.eventManager.off(n),this.destroyWorld(e)},n=()=>{this.onProgramStopped(),e.eventManager.off(n),this.mouseManager.unregisterListeners()};e.eventManager.on("resetRuntime",i),e.eventManager.on("stop",n)}destroyWorld(e){var i,n,s,a,l,h;for((i=this.mouseManager)==null||i.unregisterListeners();this.objects.length>0;)this.objects.pop().destroy();(n=this.resizeObserver)==null||n.disconnect(),(s=this.renderer)==null||s.dispose(),this.renderer=void 0,(a=this.graphicsDiv)==null||a.remove(),e.deleteObject("World3dClass"),e.deleteObject("robotWorldClass"),e.isExternalTimer=!1,(l=this.fastSpriteManager)==null||l.destroy(),(h=this.textureManager3d)==null||h.destroy()}changeResolution(e,i,n){var h,u,m;this.width=i,this.height=n;let s=this.graphicsDiv.parentElement.parentElement.getBoundingClientRect();(s.width==0||s.height==0)&&(s=this.graphicsDiv.parentElement.getBoundingClientRect());let a,l;i/n>s.width/s.height?(a=s.width,l=s.width/i*n):(l=s.height,a=s.height/n*i),l=Math.min(l,s.height),a=Math.min(a,s.width),((h=this.currentCamera)==null?void 0:h.camera3d)instanceof jd&&(this.currentCamera.camera3d.aspect=a/l,this.currentCamera.camera3d.updateProjectionMatrix()),this.currentCamera.updateViewport(),(u=this.renderer)==null||u.setSize(a,l),(m=e.graphicsManager)==null||m.resizeGraphicsDivHeight()}_getVectorPointingfromCameraToScreenPoint(e,i){var l;if(!((l=this.currentCamera)!=null&&l.camera3d))return new ir(0,0,0);const n=new Qf,s=new Up;s.x=e*2-1,s.y=-i*2+1,n.setFromCamera(s,this.currentCamera.camera3d);const a=n.ray.direction;return new ir(a.x,a.y,a.z)}onProgramStopped(){}registerActor(e,i){this.actorManager.registerActor(e,i)}unregisterActor(e){this.actorManager.unregisterActor(e)}hasActors(){return this.actorManager.hasActors()}_setBackgroundColor(e){if(e===null)throw new qt(o.world3dColorNull());if(typeof e=="number"&&(this.scene.background=new Ls(e)),typeof e=="string"){let i=Ke.parseColorToOpenGL(e);this.scene.background=new Ls(i.color)}typeof e=="object"&&(this.scene.background=new Ls(e.red,e.green,e.blue))}_setCursor(e){this.graphicsDiv.style.cursor=e}_clear(){this.objects.forEach(e=>{e.destroy()}),this.scene.clear()}getIdentifier(){return"World3d"}addLight(e){this.lights.push(e),this.scene.add(e.light)}removeLight(e){this.scene.remove(e.light);let i=this.lights.indexOf(e);i>=0&&this.lights.splice(i,1)}_removeAllLights(){for(;this.lights.length>0;)this.scene.remove(this.lights.pop().light)}_removeLight(e){let i=this.lights.indexOf(e);i<0||(this.scene.remove(e.light),this.lights.splice(i,1))}_addLight(e){this.lights.push(e),this.scene.add(e.light)}_setCamera(e){if(e==null)throw new W("Camera must not be null.");this._removeOrbitControls(),this.currentCamera=e}_getCamera(){return this.currentCamera}_removeCoordinateAxes(){this.coordinateSystemHelper.hide()}_removeOrbitControls(){this.orbitControls.dispose(),this.orbitControls=null}static _getWorld3d(e){const i=e.scheduler.interpreter.retrieveObject("World3dClass");if(i==null)throw new W(o.actorWorld3dDoesntexistException());e.s.push(i)}getInterpreter(){return this.interpreter}normalizedCoordinatesToXY(e,i){return{x:e,y:i}}};r(_t,"__javaDeclarations",[{type:"declaration",signature:"class World3d extends BaseWorld"},{type:"method",signature:"World3d()",java:_t.prototype._cj$_constructor_$World3d$},{type:"method",signature:"void setBackgroundColor(int colorAsRGBInt)",native:_t.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorIntComment},{type:"method",signature:"void setBackgroundColor(String colorAsString)",native:_t.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorStringComment},{type:"method",signature:"void setBackgroundColor(Color colorObject)",native:_t.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorStringComment},{type:"method",signature:"void setCursor(string cursor)",native:_t.prototype._setCursor,comment:o.world3dSetCursorComment},{type:"method",signature:"void clear()",native:_t.prototype._clear,comment:o.world3dClearComment},{type:"method",signature:"Light3d[] getLights()",template:"§1.lights.slice()",comment:o.worldGetLightsComment},{type:"method",signature:"void removeAllLights()",native:_t.prototype._removeAllLights,comment:o.worldRemoveAllLightsComment},{type:"method",signature:"void removeLight(Light3d light)",native:_t.prototype._removeLight,comment:o.worldRemoveLightComment},{type:"method",signature:"void addLight(Light3d light)",native:_t.prototype._addLight,comment:o.worldAddLightComment},{type:"method",signature:"void setCamera(Camera3d camera)",native:_t.prototype._setCamera},{type:"method",signature:"Camera3d getCamera()",native:_t.prototype._getCamera},{type:"method",signature:"void removeCoordinateAxes()",native:_t.prototype._removeCoordinateAxes},{type:"method",signature:"void removeOrbitControls()",native:_t.prototype._removeOrbitControls},{type:"method",signature:"static World3d getWorld3d()",java:_t._getWorld3d,comment:o.getWorld3dComment},{type:"method",signature:"Vector3 getVectorFromCameraThroughScreenPoint(double screenXRelative, double screenYRelative)",native:_t.prototype._getVectorPointingfromCameraToScreenPoint,comment:o.world3dGetVectorFromCameraThroughScreenPointComment}]),r(_t,"type");let ds=_t;const rt=class rt extends Dl{constructor(){super(...arguments);r(this,"world3d");r(this,"cameraLookingAtThisObject")}getObject3d(){return null}_cj$_constructor_$Object3d$(e,i){if(e.s.push(this),this.world3d=e.scheduler.interpreter.retrieveObject("World3dClass"),!this.world3d){this.world3d=new ds,this.world3d._cj$_constructor_$World3d$(e,()=>{e.s.pop(),this.world3d.objects.push(this),i&&i()});return}this.world3d.objects.push(this),i&&i()}constructorHelper(){}setVisible(e){this.getObject3d().visible=e}rotateX(e){}rotateY(e){}rotateZ(e){}scaleX(e){}scaleY(e){}scaleZ(e){}scaleDouble(e){}vscale(e){this.scaleX(e.v.x),this.scaleY(e.v.y),this.scaleZ(e.v.z)}move(e,i,n){console.log("Hier")}lookAt(e,i,n,s){let a=this.getObject3d();a.up=s.v.clone(),a.lookAt(new Xe(e,i,n))}lookAtTarget(e,i){let n=this.getObject3d();n.up=i.v.clone(),n.lookAt(e.getObject3d().position)}moveTo(e,i,n){}vmove(e){this.move(e.v.x,e.v.y,e.v.z)}vmoveTo(e){this.moveTo(e.v.x,e.v.y,e.v.z)}destroy(){super.destroy(),this.world3d.objects.splice(this.world3d.objects.indexOf(this),1)}_mj$getWorld3d$World3d(e,i){const n=e.scheduler.interpreter.retrieveObject("World3dClass");if(n==null)throw new W(o.actorWorld3dDoesntexistException());e.s.push(n)}_getPosition(){const e=this.getObject3d().position;return new ir(e.x,e.y,e.z)}};r(rt,"__javaDeclarations",[{type:"declaration",signature:"abstract final class Object3d extends Actor",comment:o.Object3dClassComment},{type:"method",signature:"Object3d()",java:rt.prototype._cj$_constructor_$Object3d$},{type:"method",signature:"abstract void move(double x,double y,double z)",native:rt.prototype.move},{type:"method",signature:"final void move(Vector3 v)",native:rt.prototype.vmove},{type:"method",signature:"abstract void moveTo(double x,double y,double z)",native:rt.prototype.moveTo},{type:"method",signature:"final void moveTo(Vector3 p)",native:rt.prototype.vmoveTo},{type:"method",signature:"void lookAt(double xTarget, double yTarget, double zTarget, Vector3 up)",native:rt.prototype.lookAt},{type:"method",signature:"void lookAt(Object3d target, Vector3 up)",native:rt.prototype.lookAtTarget},{type:"method",signature:"abstract void rotateX(double angleDeg)",native:rt.prototype.rotateX},{type:"method",signature:"abstract void rotateY(double angleDeg)",native:rt.prototype.rotateY},{type:"method",signature:"abstract void rotateZ(double angleDeg)",native:rt.prototype.rotateZ},{type:"method",signature:"abstract void scaleX(double angleDeg)",native:rt.prototype.scaleX},{type:"method",signature:"abstract void scaleY(double angleDeg)",native:rt.prototype.scaleY},{type:"method",signature:"abstract void scaleZ(double angleDeg)",native:rt.prototype.scaleZ},{type:"method",signature:"abstract void scale(Vector3 v)",native:rt.prototype.vscale},{type:"method",signature:"abstract void scale(double d)",native:rt.prototype.scaleDouble},{type:"method",signature:"final double getX()",template:"§1.getObject3d().position.x"},{type:"method",signature:"final double getY()",template:"§1.getObject3d().position.y"},{type:"method",signature:"final double getZ()",template:"§1.getObject3d().position.z"},{type:"method",signature:"Vector3 getPosition()",native:rt.prototype._getPosition},{type:"method",signature:"final World3d getWorld3d()",java:rt.prototype._mj$getWorld3d$World3d,comment:o.getWorld3dComment},{type:"method",signature:"void setVisible(boolean isVisible)",native:rt.prototype.setVisible},{type:"method",signature:"abstract void destroy()",native:rt.prototype.destroy}]),r(rt,"type");let Er=rt;const $t=class $t extends Er{constructor(){super(...arguments);r(this,"camera3d");r(this,"target");r(this,"targetPosition");r(this,"up")}getObject3d(){return this.camera3d}_cj$_constructor_$Camera3d$(e,i){super._cj$_constructor_$Object3d$(e,()=>{this.world3d.scene.add(this.camera3d),i&&i()})}clookAt(e,i,n,s,a){let l=this.getObject3d(),h=new Xe(e,i,n);l.up=s.v.clone(),l.lookAt(h),a&&(this.targetPosition=h,this.target&&(this.target.cameraLookingAtThisObject=void 0),this.target=void 0,this.up=s.v.clone())}getViewingDirection(){let e=this.camera3d.getWorldDirection(new Xe);return new ir(e.x,e.y,e.z)}clookAtTarget(e,i,n){let s=this.getObject3d();s.up=i.v.clone(),s.lookAt(e.getObject3d().position),n&&(this.targetPosition=void 0,this.target&&(this.target.cameraLookingAtThisObject=void 0),this.target=e,this.target.cameraLookingAtThisObject=this,this.up=i.v.clone())}move(e,i,n){this.camera3d.position.set(this.camera3d.position.x+e,this.camera3d.position.y+i,this.camera3d.position.z+n),this.adjustViewingDirection()}moveTo(e,i,n){this.camera3d.position.set(e,i,n),this.adjustViewingDirection()}adjustViewingDirection(){if(this.target&&!this.target.isDestroyed){this.camera3d.up=this.up,this.camera3d.lookAt(this.target.getObject3d().position);return}this.targetPosition&&(this.camera3d.up=this.up,this.camera3d.lookAt(this.targetPosition))}rotateX(e){this.camera3d.rotateX(e/180*Math.PI)}rotateY(e){this.camera3d.rotateY(e/180*Math.PI)}rotateZ(e){this.camera3d.rotateZ(e/180*Math.PI)}rotateOnWorldAxis(e,i){this.camera3d.rotateOnWorldAxis(e.v,i/180*Math.PI)}scaleX(e){this.camera3d.scale.setX(this.camera3d.scale.x*e)}scaleY(e){this.camera3d.scale.setY(this.camera3d.scale.y*e)}scaleZ(e){this.camera3d.scale.setZ(this.camera3d.scale.z*e)}applyMatrix4(e){if(this.camera3d.parent){const i=this.camera3d.parent.matrixWorld.clone().invert();i.multiply(e.m),i.multiply(this.camera3d.parent.matrixWorld),this.camera3d.applyMatrix4(i)}else this.camera3d.applyMatrix4(e.m)}vscale(e){let i=this.camera3d.scale;i.setX(i.x*e.v.x),i.setY(i.y*e.v.y),i.setZ(i.z*e.v.z)}scaleDouble(e){let i=this.camera3d.scale;i.setX(i.x*e),i.setY(i.y*e),i.setZ(i.z*e)}destroy(){super.destroy(),this.world3d.scene.remove(this.camera3d)}updateViewport(){}};r($t,"__javaDeclarations",[{type:"declaration",signature:"abstract class Camera3d extends Object3d"},{type:"method",signature:"Camera3d()",java:$t.prototype._cj$_constructor_$Camera3d$},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:$t.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:$t.prototype.vmoveTo},{type:"method",signature:"void lookAt(double xTarget, double yTarget, double zTarget, Vector3 up, boolean keepTarget)",native:$t.prototype.clookAt},{type:"method",signature:"void lookAt(Object3d target, Vector3 up, boolean keepTarget)",native:$t.prototype.clookAtTarget},{type:"method",signature:"Vector3 getViewingDirection()",native:$t.prototype.getViewingDirection},{type:"method",signature:"void rotateX(double angleDeg)",native:$t.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:$t.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:$t.prototype.rotateZ},{type:"method",signature:"final void scaleX(double angleDeg)",native:$t.prototype.scaleX},{type:"method",signature:"final void scaleY(double angleDeg)",native:$t.prototype.scaleY},{type:"method",signature:"final void scaleZ(double angleDeg)",native:$t.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:$t.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:$t.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:$t.prototype.applyMatrix4},{type:"method",signature:"void destroy()",java:$t.prototype.destroy}]),r($t,"type");let _o=$t;const al=class al extends _o{constructor(){super(...arguments);r(this,"cameras")}getObject3d(){return this.camera3d}_cj$_constructor_$ArrayCamera3d$PerspectiveCamera3dII(e,i,n){this.cameras=n,this.camera3d=new Yf(n.map(l=>l.camera3d));let s=new jd(75,1,.1,2e6);s.position.set(0,0,1e3),s.lookAt(new Xe(0,0,0));let a=this.camera3d;a.position.copy(s.position),a.projectionMatrix.copy(s.projectionMatrix),super._cj$_constructor_$Camera3d$(e,i)}updateViewport(){this.cameras.forEach(e=>e.updateViewport())}};r(al,"__javaDeclarations",[{type:"declaration",signature:"class ArrayCamera3d extends Camera3d"},{type:"method",signature:"ArrayCamera3d(PerspectiveCamera3d[] cameras)",java:al.prototype._cj$_constructor_$ArrayCamera3d$PerspectiveCamera3dII}]),r(al,"type");let Tc=al;class un{static convertToInt(t,e=!1){if(t==null){if(e)return null;throw new W(o.colorMustNotBeNull())}return typeof t=="number"?t:typeof t=="string"?Ke.parseColorToOpenGL(t).color||16777215:t.red*65536+t.green*256+t.blue}static convertToThreeJsColor(t){return new Ls(un.convertToInt(t,!1))}}const yn=class yn extends R{constructor(){super(...arguments);r(this,"material");r(this,"usageCounter",0)}set alpha(e){e>1&&(e=1),e<0&&(e=0),this.material.opacity=1-e,this.material.transparent=this.material.opacity<.99999999}get transparent(){return this.material.transparent}set transparent(e){this.material.transparent=e}get flatShading(){return this.material.flatShading||!1}set flatShading(e){this.material.flatShading=e}get alpha(){return 1-this.material.opacity}_setFlatShading(e){return this.material.flatShading=e,this}_setTransparent(e){return this.material.transparent=e,this}_setWireframe(e){return this.material.wireframe=e,this}_setAlpha(e){return this.alpha=e,this}_setColor(e){var i;return this.material.color!==void 0&&((i=this.material.color)==null||i.set(un.convertToThreeJsColor(e))),this}getMaterialAndIncreaseUsageCounter(){return this.usageCounter++,this.material}getMaterialWithoutIncreasingUsageCounter(){return this.usageCounter++,this.material}getColor(){let e=this.material.color;return e?Math.round(e.r*16711680+e.g*65280+e.b*255):0}destroyIfNotUsedByOtherMesh(){if(--this.usageCounter==0){let e=this.material.map;if(e){if(e.isPartOfSpritesheet)return;let i=e.renderTarget;i&&i.dispose(),e.dispose()}this.material.dispose()}}};r(yn,"__javaDeclarations",[{type:"declaration",signature:"abstract final class Material3d extends Object",comment:o.material3dClassComment},{type:"method",signature:"Material3d setColor(Color color)",native:yn.prototype._setColor,comment:o.material3dSetColorComment},{type:"method",signature:"Material3d setColor(int color)",native:yn.prototype._setColor,comment:o.material3dSetColorComment},{type:"method",signature:"Material3d setColor(String color)",native:yn.prototype._setColor,comment:o.material3dSetColorComment},{type:"method",signature:"int getColor()",native:yn.prototype.getColor,comment:o.material3dGetColorComment},{type:"field",signature:"private boolean transparent",comment:o.material3dSetTransparentComment},{type:"method",signature:"boolean isTransparent()",template:"§1.material.transparent",comment:o.material3dIsTransparentComment},{type:"method",signature:"Material3d setTransparent(boolean value)",native:yn.prototype._setTransparent,comment:o.material3dSetTransparentComment},{type:"field",signature:"private boolean flatShading",comment:o.material3dFlatShadingComment},{type:"method",signature:"boolean isFlatShading()",template:"§1.material.flatShading",comment:o.material3dFlatShadingComment},{type:"method",signature:"Material3d setFlatShading(boolean value)",native:yn.prototype._setFlatShading,comment:o.material3dFlatShadingComment},{type:"field",signature:"private double alpha",comment:o.material3dAlphaComment},{type:"method",signature:"Material3d setAlpha(double value)",native:yn.prototype._setAlpha,comment:o.material3dAlphaComment},{type:"method",signature:"double getAlpha(double value)",template:"§1.alpha",comment:o.material3dAlphaComment},{type:"field",signature:"private boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"Material3d setWireframe(boolean value)",native:yn.prototype._setWireframe,comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment}]),r(yn,"type");let Ba=yn;const Ii=class Ii extends Ba{get wireframe(){return this.material.wireframe}get emissive(){let t=this.material.emissive;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_setEmissive(t){this.material.emissive=un.convertToThreeJsColor(t)}get specular(){let t=this.material.specular;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_setSpecular(t){this.material.specular=un.convertToThreeJsColor(t)}_phongMaterialConstructor(t,e=30){return this.material=new Xh({color:un.convertToThreeJsColor(t),shininess:e}),this}_phongMaterialConstructorTexture(t){const e=new hd;return this.material=new Xh({map:e.load(t.path)}),this}_cj$_constructor_$PhongMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new ds,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new Xh({map:n})}};r(Ii,"__javaDeclarations",[{type:"declaration",signature:"final class PhongMaterial3d extends Material3d",comment:o.phongMaterial3dClassComment},{type:"method",signature:"PhongMaterial3d(int color)",native:Ii.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(int color, double shininess)",native:Ii.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(string color, double shininess)",native:Ii.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(Color color, double shininess)",native:Ii.prototype._phongMaterialConstructor,comment:o.phongMaterial3dConstructorComment},{type:"method",signature:"PhongMaterial3d(Texture texture)",native:Ii.prototype._phongMaterialConstructorTexture,comment:o.phongMaterial3dConstructorTextureComment},{type:"method",signature:"PhongMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:Ii.prototype._cj$_constructor_$PhongMaterial3d$SpriteLibrary$int,comment:o.phongMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"private double shininess",template:"§1.material.shininess",comment:o.phongMaterial3dShininessComment},{type:"method",signature:"void setShininess(double shininess)",template:"§1.material.shininess = §2",comment:o.phongMaterial3dShininessComment},{type:"method",signature:"double getShininess()",template:"§1.materialshininess",comment:o.phongMaterial3dShininessComment},{type:"field",signature:"private int specular",comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"void setSpecular(int color)",native:Ii.prototype._setSpecular,comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"void setSpecular(string color)",native:Ii.prototype._setSpecular,comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"void setSpecular(Color color)",native:Ii.prototype._setSpecular,comment:o.phongMaterial3dSpecularComment},{type:"method",signature:"int getSpecular()",template:"§1.specular",comment:o.phongMaterial3dSpecularComment},{type:"field",signature:"private int emissive",comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(int color)",native:Ii.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(string color)",native:Ii.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(Color color)",native:Ii.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"int getEmissive()",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment}]);let Wd=Ii;const gt=class gt extends Er{constructor(){super(...arguments);r(this,"mesh");r(this,"_material");r(this,"_geometry");r(this,"side",mc)}set material(e){var i;this._material!==e&&((i=this._material)==null||i.destroyIfNotUsedByOtherMesh(),this._material=e,this.mesh.material=this._material.getMaterialAndIncreaseUsageCounter())}get material(){return this._material}_getMaterial(){return this._material}_setMaterial(e){this.material=e}getObject3d(){return this.mesh}_cj$_constructor_$Mesh3d$(e,i){super._cj$_constructor_$Object3d$(e,i)}move(e,i,n){this.mesh.position.set(this.mesh.position.x+e,this.mesh.position.y+i,this.mesh.position.z+n),this.cameraLookingAtThisObject&&this.cameraLookingAtThisObject.adjustViewingDirection()}moveTo(e,i,n){this.mesh.position.set(e,i,n),this.cameraLookingAtThisObject&&this.cameraLookingAtThisObject.adjustViewingDirection()}rotateX(e){this.mesh.rotateX(e/180*Math.PI)}rotateY(e){this.mesh.rotateY(e/180*Math.PI)}rotateZ(e){this.mesh.rotateZ(e/180*Math.PI)}scaleX(e){this.mesh.scale.setX(this.mesh.scale.x*e)}scaleY(e){this.mesh.scale.setY(this.mesh.scale.y*e)}scaleZ(e){this.mesh.scale.setZ(this.mesh.scale.z*e)}applyMatrix4(e){if(this.mesh.parent){const i=this.mesh.parent.matrixWorld.clone().invert();i.multiply(e.m),i.multiply(this.mesh.parent.matrixWorld),this.mesh.applyMatrix4(i)}else this.mesh.applyMatrix4(e.m)}vscale(e){let i=this.mesh.scale;i.setX(i.x*e.v.x),i.setY(i.y*e.v.y),i.setZ(i.z*e.v.z)}scaleDouble(e){let i=this.mesh.scale;i.setX(i.x*e),i.setY(i.y*e),i.setZ(i.z*e)}getInitialMaterial(){let e=new Wd()._phongMaterialConstructor(65280,100);return e.getMaterialAndIncreaseUsageCounter(),this._material=e,e}enableFrontBackSide(e,i){e?(this.side=mc,i&&(this.side=Cd)):this.side=Zf;let n=this.mesh.material;Array.isArray(n)||(n=[n]);for(let s of n)s.side=this.side,s.needsUpdate=!0}repeatTexture(e,i){let n=this.mesh.material;Array.isArray(n)||(n=[n]);for(let s of n)if(s.map){let a=s.map;a.userData.key!==void 0&&(a=this.world3d.textureManager3d.getTextureWithOwnData(a.userData.key,this.world3d.renderer),s.map=a,s.needsUpdate=!0),a.repeat.set(e,i)}}renderTransparent(e){let i=this.mesh.material;Array.isArray(i)||(i=[i]);for(let n of i)n.transparent=e,n.needsUpdate=!0}destroy(){var e;super.destroy(),this.world3d.scene.remove(this.mesh),this.mesh.geometry.dispose(),(e=this._material)==null||e.destroyIfNotUsedByOtherMesh()}};r(gt,"__javaDeclarations",[{type:"declaration",signature:"class Mesh3d extends Object3d",comment:o.Mesh3dClassComment},{type:"method",signature:"Mesh3d()",java:gt.prototype._cj$_constructor_$Mesh3d$},{type:"field",signature:"private Material3d material"},{type:"method",signature:"Material3d getMaterial()",native:gt.prototype._getMaterial},{type:"method",signature:"void setMaterial(Material3d material)",native:gt.prototype._setMaterial},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:gt.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:gt.prototype.vmoveTo},{type:"method",signature:"void rotateX(double angleDeg)",native:gt.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:gt.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:gt.prototype.rotateZ},{type:"method",signature:"final void scaleX(double scale)",native:gt.prototype.scaleX},{type:"method",signature:"final void scaleY(double scale)",native:gt.prototype.scaleY},{type:"method",signature:"final void scaleZ(double scale)",native:gt.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:gt.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:gt.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:gt.prototype.applyMatrix4},{type:"method",signature:"final void enableFrontBackSide(boolean frontSideVisible, boolean backSideVisible)",native:gt.prototype.enableFrontBackSide},{type:"method",signature:"final void repeatTexture(int repeatX, int repeatY)",native:gt.prototype.repeatTexture},{type:"method",signature:"final void renderTransparent(boolean transparent)",native:gt.prototype.renderTransparent},{type:"method",signature:"void destroy()",java:gt.prototype.destroy}]),r(gt,"type");let zn=gt;const Gn=class Gn extends Ba{get wireframe(){return this.material.wireframe}get emissive(){let t=this.material.emissive;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}constructor(t){super(),this.material=t}_lambertMaterialConstructorTexture(t){const e=new hd;return this.material=new rs({map:e.load(t.path)}),this}_cj$_constructor_$LambertMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new ds,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new rs({map:n})}_setEmissive(t){this.material.emissive=un.convertToThreeJsColor(t)}_lambertMaterialConstructor(t){return this.material=new rs({color:un.convertToThreeJsColor(t)}),this}};r(Gn,"__javaDeclarations",[{type:"declaration",signature:"final class LambertMaterial3d extends Material3d",comment:o.lambertMaterial3dClassComment},{type:"method",signature:"LambertMaterial3d(int color)",native:Gn.prototype._lambertMaterialConstructor,comment:o.lambertMaterial3dConstructorComment},{type:"method",signature:"LambertMaterial3d(string color)",native:Gn.prototype._lambertMaterialConstructor,comment:o.lambertMaterial3dConstructorComment},{type:"method",signature:"LambertMaterial3d(Color color)",native:Gn.prototype._lambertMaterialConstructor,comment:o.lambertMaterial3dConstructorComment},{type:"method",signature:"LambertMaterial3d(Texture texture)",native:Gn.prototype._lambertMaterialConstructorTexture,comment:o.lambertMaterial3dConstructorTextureComment},{type:"method",signature:"LambertMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:Gn.prototype._cj$_constructor_$LambertMaterial3d$SpriteLibrary$int,comment:o.lambertMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"private int emissive",comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(int color)",native:Gn.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(string color)",native:Gn.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(Color color)",native:Gn.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"int getEmissive()",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment}]);let bo=Gn;const st=class st extends zn{_cj$_constructor_$Box3d$double$double$double$int$int$int(t,e,i,n,s,a,l,h){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new go(i,n,s,a,l,h),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Box3d$double$double$double(t,e,i,n,s){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new go(i,n,s),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Box3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new go,this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_setCubemapTexture(t,e){let i=this.world3d.textureManager3d.getSpritesheetBasedTexture(t.name,e);this.mesh.geometry.attributes.uv=new md(st.cubemapUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.material=new bo(new rs({map:i})),this.mesh.material=this.material.getMaterialAndIncreaseUsageCounter()}_setSingleTextureForAllSides(t,e){let i=this.world3d.textureManager3d.getSpritesheetBasedTexture(t.name,e);this.mesh.geometry.attributes.uv=new md(st.singleTextureUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.material=new bo(new rs({map:i})),this.mesh.material=this.material.getMaterialAndIncreaseUsageCounter()}_setTextures(t,e){if((e==null?void 0:e.length)!=6)throw new W(o.box3dYouNeedSixTexturesError());let i=[];for(let n=0;n<6;n++)i[n]=this.world3d.textureManager3d.getSpritesheetBasedTexture(t.name,e[n]);this.mesh.geometry.attributes.uv=new md(st.singleTextureUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.mesh.material=i.map(n=>new rs({map:n}))}_setTexturesNew(t,e){if((e==null?void 0:e.length)!=6)throw new W(o.box3dYouNeedSixTexturesError());let i=[];for(let D=0;D<6;D++)i[D]=this.world3d.textureManager3d.getTextureImageData(t.name,e[D]);let n=i[st.sideIndices.left].data.w,s=i[st.sideIndices.front].data.w,a=i[st.sideIndices.right].data.w,l=i[st.sideIndices.back].data.w,h=n+s+a+l,u=i[st.sideIndices.top].data.h,m=i[st.sideIndices.bottom].data.h,g=i[st.sideIndices.front].data.h,f=m+g+u,b=[0,n,n+s,n+s+a,h],A=[0,m,m+g,f],C=[[2,1],[0,1],[1,0],[1,2],[1,1],[3,1]],w=document.createElement("canvas");w.width=h,w.height=f;let x=w.getContext("2d");if(!x)throw new W(o.canvasContext2dNotAvailableError());for(let D=0;D<6;D++){let G=b[C[D][0]],K=A[C[D][1]];x.drawImage(i[D].t.image,i[D].data.x,i[D].data.y,i[D].data.w,i[D].data.h,G,K,i[D].data.w,i[D].data.h)}let q=new Xf(w);q.needsUpdate=!0,this.mesh.geometry.attributes.uv=new md(st.cubemapUvCoordinates,2),this.mesh.geometry.attributes.uv.needsUpdate=!0,this.material=new bo(new rs({map:q})),this.mesh.material=this.material.getMaterialAndIncreaseUsageCounter()}};r(st,"__javaDeclarations",[{type:"declaration",signature:"class Box3d extends Mesh3d",comment:o.box3dClassComment},{type:"method",signature:"Box3d(double width, double height, double depth, int widthSegments, int heightSegments, int depthSegments)",java:st.prototype._cj$_constructor_$Box3d$double$double$double$int$int$int,comment:o.box3dConstructorXYZComment},{type:"method",signature:"Box3d(double width, double height, double depth)",java:st.prototype._cj$_constructor_$Box3d$double$double$double,comment:o.box3dConstructorXYZComment},{type:"method",signature:"Box3d()",java:st.prototype._cj$_constructor_$Box3d$,comment:o.box3dConstructorComment},{type:"method",signature:"void setCubemapTexture(SpriteLibrary spriteLibrary, int imageIndex)",native:st.prototype._setCubemapTexture},{type:"method",signature:"void setSingleTextureForAllSides(SpriteLibrary spriteLibrary, int imageIndex)",native:st.prototype._setSingleTextureForAllSides},{type:"method",signature:"void setTextures(SpriteLibrary spriteLibrary, int[] imageIndices)",native:st.prototype._setTexturesNew}]),r(st,"cubemapUvCoordinates",new Float32Array([2/4,2/3,3/4,2/3,2/4,1/3,3/4,1/3,0/4,2/3,1/4,2/3,0/4,1/3,1/4,1/3,1/4,3/3,2/4,3/3,1/4,2/3,2/4,2/3,1/4,1/3,2/4,1/3,1/4,0/3,2/4,0/3,1/4,2/3,2/4,2/3,1/4,1/3,2/4,1/3,3/4,2/3,4/4,2/3,3/4,1/3,4/4,1/3])),r(st,"singleTextureUvCoordinates",new Float32Array([0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0])),r(st,"sideIndices",{front:0,back:1,top:2,bottom:3,left:4,right:5});let $c=st;const Js=class Js extends zn{_cj$_constructor_$Circle3d$double$int$double$double(t,e,i,n,s,a){s*=Math.PI/180,a*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new pd(i,n,s,a),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Circle3d$double$int(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new pd(i,n),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Circle3d$double(t,e,i){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new pd(i),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Circle3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new pd(.5),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Js,"__javaDeclarations",[{type:"declaration",signature:"class Circle3d extends Mesh3d"},{type:"method",signature:"Circle3d(double radius, int segments, double thetaStart, double thetaLength)",java:Js.prototype._cj$_constructor_$Circle3d$double$int$double$double},{type:"method",signature:"Circle3d(double radius, int segments)",java:Js.prototype._cj$_constructor_$Circle3d$double$int},{type:"method",signature:"Circle3d(double radius)",java:Js.prototype._cj$_constructor_$Circle3d$double},{type:"method",signature:"Circle3d()",java:Js.prototype._cj$_constructor_$Circle3d$}]);let Ic=Js;const ea=class ea extends zn{_cj$_constructor_$Cone3d$double$double$int$int$boolean$double$double(t,e,i,n,s,a,l,h,u){h*=Math.PI/180,u*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new gd(i,n,s,a,l,h,u),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cone3d$double$double$int$int$boolean(t,e,i,n,s,a,l){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new gd(i,n,s,a,l),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cone3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new gd(i,n),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cone3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new gd(.5,1),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(ea,"__javaDeclarations",[{type:"declaration",signature:"class Cone3d extends Mesh3d"},{type:"method",signature:"Cone3d(double radius, double height, int radialSegments, int heightSegments, boolean openEnded, double thetaStart, double thetaLength)",java:ea.prototype._cj$_constructor_$Cone3d$double$double$int$int$boolean$double$double},{type:"method",signature:"Cone3d(double radius, double height, int radialSegments, int heightSegments, boolean openEnded)",java:ea.prototype._cj$_constructor_$Cone3d$double$double$int$int$boolean},{type:"method",signature:"Cone3d(double radius, double height)",java:ea.prototype._cj$_constructor_$Cone3d$double$double},{type:"method",signature:"Cone3d()",java:ea.prototype._cj$_constructor_$Cone3d$}]);let Ec=ea;const ks=class ks extends zn{_cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean$double$double(t,e,i,n,s,a,l,h,u,m){u*=Math.PI/180,m*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new Ko(i,n,s,a,l,h,u,m),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean(t,e,i,n,s,a,l,h){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new Ko(i,n,s,a,l,h),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$double$double$double(t,e,i,n,s){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new Ko(i,n,s),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new Ko(i,i,n),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Cylinder3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new Ko(.5,.5,1),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(ks,"__javaDeclarations",[{type:"declaration",signature:"class Cylinder3d extends Mesh3d"},{type:"method",signature:"Cylinder3d(double radiusTop, double radiusBottom, double height, int radialSegments, int heightSegments, boolean openEnded, double thetaStart, double thetaLength)",java:ks.prototype._cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean$double$double},{type:"method",signature:"Cylinder3d(double radiusTop, double radiusBottom, double height, int radialSegments, int heightSegments, boolean openEnded)",java:ks.prototype._cj$_constructor_$Cylinder3d$double$double$double$int$int$boolean},{type:"method",signature:"Cylinder3d(double radiusTop, double radiusBottom, double height)",java:ks.prototype._cj$_constructor_$Cylinder3d$double$double$double},{type:"method",signature:"Cylinder3d(double radius, double height)",java:ks.prototype._cj$_constructor_$Cylinder3d$double$double},{type:"method",signature:"Cylinder3d()",java:ks.prototype._cj$_constructor_$Cylinder3d$}]);let Dc=ks;const At=class At extends Er{constructor(){super(...arguments);r(this,"group3d");r(this,"children",[])}getObject3d(){return this.group3d}_cj$_constructor_$Group3d$(e,i){super._cj$_constructor_$Object3d$(e,()=>{this.group3d=new Jf,this.world3d.scene.add(this.group3d),i&&i()})}move(e,i,n){this.group3d.position.set(this.group3d.position.x+e,this.group3d.position.y+i,this.group3d.position.z+n)}moveTo(e,i,n){this.group3d.position.set(e,i,n)}rotateX(e){this.group3d.rotateX(e/180*Math.PI)}rotateY(e){this.group3d.rotateY(e/180*Math.PI)}rotateZ(e){this.group3d.rotateZ(e/180*Math.PI)}rotateOnWorldAxis(e,i){this.group3d.rotateOnWorldAxis(e.v,i/180*Math.PI)}scaleX(e){this.group3d.scale.setX(this.group3d.scale.x*e)}scaleY(e){this.group3d.scale.setY(this.group3d.scale.y*e)}scaleZ(e){this.group3d.scale.setZ(this.group3d.scale.z*e)}applyMatrix4(e){if(this.group3d.parent){const i=this.group3d.parent.matrixWorld.clone().invert();i.multiply(e.m),i.multiply(this.group3d.parent.matrixWorld),this.group3d.applyMatrix4(i)}else this.group3d.applyMatrix4(e.m)}vscale(e){let i=this.group3d.scale;i.setX(i.x*e.v.x),i.setY(i.y*e.v.y),i.setZ(i.z*e.v.z)}scaleDouble(e){let i=this.group3d.scale;i.setX(i.x*e),i.setY(i.y*e),i.setZ(i.z*e)}destroy(){super.destroy(),this.world3d.scene.remove(this.group3d);for(let e of this.children)e.destroy();this.world3d.scene.remove(this.group3d)}getElements(){return this.children}_add(e){this.children.indexOf(e)<0&&(this.children.push(e),this.group3d.add(e.getObject3d()))}_remove(e){let i=this.children.indexOf(e);i>=0&&(this.children.splice(i,1),this.group3d.remove(e.getObject3d()))}_size(){return this.children.length}_get(e){let i=this.children[e];return i||null}};r(At,"__javaDeclarations",[{type:"declaration",signature:"class Group3d extends Object3d",comment:o.Group3dClassComment},{type:"method",signature:"Group3d()",java:At.prototype._cj$_constructor_$Group3d$},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:At.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:At.prototype.vmoveTo},{type:"method",signature:"void rotateX(double angleDeg)",native:At.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:At.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:At.prototype.rotateZ},{type:"method",signature:"final void scaleX(double angleDeg)",native:At.prototype.scaleX},{type:"method",signature:"final void scaleY(double angleDeg)",native:At.prototype.scaleY},{type:"method",signature:"final void scaleZ(double angleDeg)",native:At.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:At.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:At.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:At.prototype.applyMatrix4},{type:"method",signature:"final void add(O3d object)",native:At.prototype._add,comment:o.Group3dAddComment},{type:"method",signature:"final void remove(O3d object)",native:At.prototype._remove,comment:o.Group3dRemoveComment},{type:"method",signature:"final int size()",native:At.prototype._size,comment:o.Group3dSizeComment},{type:"method",signature:"final O3d get(int index)",native:At.prototype._get,comment:o.Group3dGetComment},{type:"method",signature:"void destroy()",java:At.prototype.destroy}]),r(At,"type");let jc=At;const ci=class ci extends Er{constructor(){super(...arguments);r(this,"light")}getObject3d(){return this.light}get color(){let e=this.light.color;return e?Math.round(e.r*16711680+e.g*65280+e.b*255):0}get intensity(){return this.light.intensity}_cj$_constructor_$Light3d$(e,i){super._cj$_constructor_$Object3d$(e,()=>{i(),this.world3d.addLight(this)})}move(e,i,n){this.light.position.set(this.light.position.x+e,this.light.position.y+i,this.light.position.z+n)}moveTo(e,i,n){this.light.position.set(e,i,n)}rotateX(e){this.light.rotateX(e/180*Math.PI)}rotateY(e){this.light.rotateY(e/180*Math.PI)}rotateZ(e){this.light.rotateZ(e/180*Math.PI)}setIntensity(e){this.light.intensity=e}getIntensity(){return this.light.intensity}setColor(e){switch(typeof e){case"number":this.light.color.set(e);break;case"string":this.light.color.set(Ke.parseColorToOpenGL(e).color);break;case"object":if(e==null)throw new W(o.fsColorIsNullException());this.light.color.set(e.red/255,e.green/255,e.blue/255);break}}destroy(){super.destroy(),this.world3d.removeLight(this),this.light.dispose()}};r(ci,"__javaDeclarations",[{type:"declaration",signature:"class Light3d extends Object3d"},{type:"method",signature:"Light3d()",java:ci.prototype._cj$_constructor_$Light3d$},{type:"field",signature:"public Material3d material"},{type:"method",signature:"void move(double x,double y,double z)"},{type:"method",signature:"final void move(Vector3 v)",native:ci.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)"},{type:"method",signature:"final void moveTo(Vector3 p)",native:ci.prototype.vmoveTo},{type:"method",signature:"void destroy()",java:ci.prototype.destroy},{type:"method",signature:"void rotateX(double angleDeg)",native:ci.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:ci.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:ci.prototype.rotateZ},{type:"field",signature:"private double intensity"},{type:"method",signature:"void setIntensity(double intensity)",native:ci.prototype.setIntensity},{type:"method",signature:"double getIntensity()",native:ci.prototype.getIntensity},{type:"field",signature:"private int color"},{type:"method",signature:"void setColor(int color)",native:ci.prototype.setColor},{type:"method",signature:"void setColor(String color)",native:ci.prototype.setColor},{type:"method",signature:"void setColor(Color color)",native:ci.prototype.setColor}]),r(ci,"type");let zo=ci;const Ya=class Ya extends zo{constructor(){super(),this.light=new Yp}_cj$_constructor_$AmbientLight3d$(t,e){super._cj$_constructor_$Light3d$(t,()=>{e&&e()})}_cj$_constructor_$AmbientLight3d$double(t,e,i){super._cj$_constructor_$Light3d$(t,()=>{this.light.intensity=i,e&&e()})}};r(Ya,"__javaDeclarations",[{type:"declaration",signature:"class AmbientLight3d extends Light3d"},{type:"method",signature:"AmbientLight3d()",java:Ya.prototype._cj$_constructor_$AmbientLight3d$},{type:"method",signature:"AmbientLight3d(double intensity)",java:Ya.prototype._cj$_constructor_$AmbientLight3d$double}]),r(Ya,"type");let Mc=Ya;const Cs=class Cs extends zo{constructor(){super(),this.light=new eb}_cj$_constructor_$DirectionalLight3d$(t,e){super._cj$_constructor_$Light3d$(t,()=>{e&&e()})}_cj$_constructor_$DirectionalLight3d$double$double$double$(t,e,i,n,s){this._cj$_constructor_$DirectionalLight3d$(t,()=>{this.light.position.set(i,n,s),e&&e()})}_cj$_constructor_$DirectionalLight3d$Vector3$(t,e,i){this._cj$_constructor_$DirectionalLight3d$(t,()=>{this.light.position.set(i.v.x,i.v.y,i.v.z),e&&e()})}_setTarget(t){const e=this.light;return e.target=t.getObject3d(),this}};r(Cs,"__javaDeclarations",[{type:"declaration",signature:"class DirectionalLight3d extends Light3d"},{type:"method",signature:"DirectionalLight3d()",java:Cs.prototype._cj$_constructor_$DirectionalLight3d$},{type:"method",signature:"DirectionalLight3d(double x,double y,double z)",java:Cs.prototype._cj$_constructor_$DirectionalLight3d$double$double$double$},{type:"method",signature:"DirectionalLight3d(Vector3 position)",java:Cs.prototype._cj$_constructor_$DirectionalLight3d$double$double$double$},{type:"method",signature:"DirectionalLight3d setTarget(Object3d object3d)",native:Cs.prototype._setTarget}]),r(Cs,"type");let Pc=Cs;const ta=class ta extends zo{constructor(){super(),this.light=new tb}_cj$_constructor_$PointLight3d$(t,e){super._cj$_constructor_$Light3d$(t,()=>{e&&e()})}_cj$_constructor_$PointLight3d$double$double$double$(t,e,i,n,s){this._cj$_constructor_$PointLight3d$(t,()=>{this.light.position.set(i,n,s),e&&e()})}_cj$_constructor_$PointLight3d$Vector3$(t,e,i){this._cj$_constructor_$PointLight3d$(t,()=>{this.light.position.set(i.v.x,i.v.y,i.v.z),e&&e()})}};r(ta,"__javaDeclarations",[{type:"declaration",signature:"class PointLight3d extends Light3d"},{type:"method",signature:"PointLight3d()",java:ta.prototype._cj$_constructor_$PointLight3d$},{type:"method",signature:"PointLight3d(double x,double y,double z)",java:ta.prototype._cj$_constructor_$PointLight3d$double$double$double$},{type:"method",signature:"PointLight3d(Vector3 position)",java:ta.prototype._cj$_constructor_$PointLight3d$double$double$double$}]),r(ta,"type");let Oc=ta;const Pr=class Pr extends Ba{get wireframe(){return this.material.wireframe}_basicMaterialConstructor(t,e=!1){return this.material=new Md({color:un.convertToThreeJsColor(t),wireframe:e}),this}_basicMaterialConstructorTexture(t){const e=new hd;return this.material=new pc({map:e.load(t.path)}),this}_cj$_constructor_$BasicMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new ds,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new pc({map:n})}};r(Pr,"__javaDeclarations",[{type:"declaration",signature:"final class BasicMaterial3d extends Material3d",comment:o.basicMaterial3dClassComment},{type:"method",signature:"BasicMaterial3d(int color)",native:Pr.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(int color, boolean wireframe)",native:Pr.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(string color, boolean wireframe)",native:Pr.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(Color color, boolean wireframe)",native:Pr.prototype._basicMaterialConstructor,comment:o.basicMaterial3dConstructorComment},{type:"method",signature:"BasicMaterial3d(Texture texture)",native:Pr.prototype._basicMaterialConstructorTexture,comment:o.basicMaterial3dConstructorTextureComment},{type:"method",signature:"BasicMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:Pr.prototype._cj$_constructor_$BasicMaterial3d$SpriteLibrary$int,comment:o.basicMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment}]);let Lc=Pr;const Hn=class Hn extends Ba{get wireframe(){return this.material.wireframe}get roughness(){return this.material.roughness}get metalness(){return this.material.metalness}get emissive(){let t=this.material.emissive;return t?Math.round(t.r*16711680+t.g*65280+t.b*255):0}_setEmissive(t){this.material.emissive=un.convertToThreeJsColor(t)}_physicallyBasedMaterialConstructor(t,e,i){return this.material=new Jh({color:un.convertToThreeJsColor(t),roughness:e,metalness:i}),this}_physicallyBasedMaterialConstructorTexture(t){const e=new hd;return this.material=new Jh({map:e.load(t.path)}),this}_cj$_constructor_$PhysicallyBasedMaterial3d$SpriteLibrary$int(t,e,i,n){t.s.push(this);let s=t.scheduler.interpreter.retrieveObject("World3dClass");if(!s){s=new ds,s._cj$_constructor_$World3d$(t,()=>{t.s.pop(),this.createMaterialWithTexture(s,i.name,n),e&&e()});return}this.createMaterialWithTexture(s,i.name,n),e&&e()}createMaterialWithTexture(t,e,i){let n=t.textureManager3d.getSpritesheetBasedTexture(e,i);this.material=new Jh({map:n})}};r(Hn,"__javaDeclarations",[{type:"declaration",signature:"final class PhysicallyBasedMaterial3d extends Material3d",comment:o.physicallyBasedMaterial3dClassComment},{type:"method",signature:"PhysicallyBasedMaterial3d(int color, double roughness, double metalness)",native:Hn.prototype._physicallyBasedMaterialConstructor,comment:o.physicallyBasedMaterial3dConstructorComment},{type:"method",signature:"PhysicallyBasedMaterial3d(string color, double roughness, double metalness)",native:Hn.prototype._physicallyBasedMaterialConstructor,comment:o.physicallyBasedMaterial3dConstructorComment},{type:"method",signature:"PhysicallyBasedMaterial3d(Color color, double roughness, double metalness)",native:Hn.prototype._physicallyBasedMaterialConstructor,comment:o.physicallyBasedMaterial3dConstructorComment},{type:"method",signature:"PhysicallyBasedMaterial3d(Texture texture)",native:Hn.prototype._physicallyBasedMaterialConstructorTexture,comment:o.physicallyBasedMaterial3dConstructorTextureComment},{type:"method",signature:"PhysicallyBasedMaterial3d(SpriteLibrary spriteLibrary, int imageIndex)",java:Hn.prototype._cj$_constructor_$PhysicallyBasedMaterial3d$SpriteLibrary$int,comment:o.physicallyBasedMaterial3dConstructorSpriteLibraryComment},{type:"field",signature:"private int emissive",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(int color)",native:Hn.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(string color)",native:Hn.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"void setEmissive(Color color)",native:Hn.prototype._setEmissive,comment:o.material3dEmissiveComment},{type:"method",signature:"int getEmissive()",template:"§1.emissive",comment:o.material3dEmissiveComment},{type:"field",signature:"boolean wireframe",comment:o.materialWireframeComment},{type:"method",signature:"boolean isWireframe()",template:"§1.material.wireframe",comment:o.materialWireframeComment},{type:"method",signature:"void setWireframe(boolean value)",template:"§1.material.wireframe = §2",comment:o.materialWireframeComment},{type:"field",signature:"private double roughness",template:"§1.roughness",comment:o.physicallyBasedMaterial3dRoughnessComment},{type:"method",signature:"void setRoughness(double value)",template:"§1.material.roughness = §2",comment:o.physicallyBasedMaterial3dRoughnessComment},{type:"method",signature:"double getRoughness(double value)",template:"§1.material.roughness",comment:o.physicallyBasedMaterial3dRoughnessComment},{type:"field",signature:"private double metalness",template:"§1.metalness",comment:o.physicallyBasedMaterial3dMetalnessComment},{type:"method",signature:"void setMetalness(double value)",template:"§1.material.metalness = §2",comment:o.physicallyBasedMaterial3dMetalnessComment},{type:"method",signature:"double getMetalness(double value)",template:"§1.material.metalness",comment:o.physicallyBasedMaterial3dMetalnessComment}]);let Bc=Hn;const dy=""+new URL("assets/2k_earth_daymap-DKLT2WuX.jpg",import.meta.url).href,hy=""+new URL("assets/2k_jupiter-CEiO5JSj.jpg",import.meta.url).href,cy=""+new URL("assets/2k_mars-BX2JGd6W.jpg",import.meta.url).href,uy=""+new URL("assets/2k_mercury-lhhbYhEJ.jpg",import.meta.url).href,my=""+new URL("assets/2k_moon-BMpRMzYO.jpg",import.meta.url).href,py=""+new URL("assets/2k_neptune-CRPHsRry.jpg",import.meta.url).href,gy=""+new URL("assets/2k_saturn-BOztX_Vf.jpg",import.meta.url).href,fy=""+new URL("assets/2k_stars-DTLDDGUj.jpg",import.meta.url).href,by=""+new URL("assets/8k_stars-DJay3VbR.jpg",import.meta.url).href,yy=""+new URL("assets/2k_stars_milky_way-uZVdu_2I.jpg",import.meta.url).href,vy=""+new URL("assets/8k_stars_milky_way-CQzodXnZ.jpg",import.meta.url).href,Ay=""+new URL("assets/2k_sun-BfaUCBxs.jpg",import.meta.url).href,wy=""+new URL("assets/2k_uranus-QU9XKwEw.jpg",import.meta.url).href,ky=""+new URL("assets/2k_venus_atmosphere-gS8AudbJ.jpg",import.meta.url).href,Se=class Se extends Yi{constructor(t,e,i){super(t,e),this.path=i}};r(Se,"__javaDeclarations",[{type:"declaration",signature:"enum Texture",comment:o.TexturesEnumComment}]),r(Se,"type"),r(Se,"count",0),r(Se,"values",[new Se("earth2k",Se.count++,dy),new Se("jupiter2k",Se.count++,hy),new Se("mars2k",Se.count++,cy),new Se("mercury2k",Se.count++,uy),new Se("moon2k",Se.count++,my),new Se("neptune2k",Se.count++,py),new Se("saturn2k",Se.count++,gy),new Se("stars2k",Se.count++,fy),new Se("stars8k",Se.count++,by),new Se("stars_milky_way2k",Se.count++,yy),new Se("stars_milky_way8k",Se.count++,vy),new Se("sun2k",Se.count++,Ay),new Se("uranus2k",Se.count++,wy),new Se("venus_atmosphere2k",Se.count++,ky)]);let Fc=Se;const ft=class ft extends R{constructor(e){super();r(this,"m");this.m=e}_constructorIdentity(){return this.m=new Ni,this}_constructorTuples(e,i,n,s,a,l,h,u,m,g,f,b,A,C,w,x){return this.m=new Ni(e,i,n,s,a,l,h,u,m,g,f,b,A,C,w,x),this}_constructorOtherMatrix(e){return this.m=new Ni().copy(e),this}_makeRotationX(e){return this.m.makeRotationX(e/180*Math.PI),this}_makeRotationY(e){return this.m.makeRotationY(e/180*Math.PI),this}_makeRotationZ(e){return this.m.makeRotationZ(e/180*Math.PI),this}_makeRotationAxis(e,i){return this.m.makeRotationAxis(e.v,i/180*Math.PI),this}_makeScale(e,i,n){return this.m.makeScale(e,i,n),this}_makeTranslation(e){return this.m.makeTranslation(e.v),this}_makeTranslationXYZ(e,i,n){return this.m.makeTranslation(e,i,n),this}_multiplyScalar(e){return this.m.multiplyScalar(e),this}_invert(){return this.m.invert(),this}_determinant(){return this.m.determinant()}_clone(){return new ft(this.m.clone())}_copyFrom(e){return this.m.copy(e.m),this}_multiply(e){return this.m.multiply(e.m),this}_premultiply(e){return this.m.premultiply(e.m),this}};r(ft,"__javaDeclarations",[{type:"declaration",signature:"class Matrix4 extends Object",comment:o.Matrix4ClassComment},{type:"method",signature:"Matrix4()",native:ft.prototype._constructorIdentity,comment:o.Matrix4ConstructorIdentityComment},{type:"method",signature:"Matrix4( double n11, double n12, double n13, double n14, double n21, double n22, double n23, double n24, double n31, double n32, double n33, double n34, double n41, double n42, double n43, double n44)",native:ft.prototype._constructorTuples,comment:o.Matrix4ConstructorTupleComment},{type:"method",signature:"Matrix4( Matrix4 otherMatrix)",native:ft.prototype._constructorOtherMatrix,comment:o.Matrix4ConstructorOtherMatrixComment},{type:"method",signature:"Matrix4 makeRotationX(double angleInDegrees)",native:ft.prototype._makeRotationX,comment:o.Matrix4MakeRotationXComment},{type:"method",signature:"Matrix4 makeRotationY(double angleInDegrees)",native:ft.prototype._makeRotationY,comment:o.Matrix4MakeRotationYComment},{type:"method",signature:"Matrix4 makeRotationZ(double angleInDegrees)",native:ft.prototype._makeRotationZ,comment:o.Matrix4MakeRotationZComment},{type:"method",signature:"Matrix4 makeRotationAxis(Vector3 axis)",native:ft.prototype._makeRotationAxis,comment:o.Matrix4MakeRotationAxisComment},{type:"method",signature:"Matrix4 makeScale(double x, double y, double z)",native:ft.prototype._makeScale,comment:o.Matrix4MakeScaleComment},{type:"method",signature:"Matrix4 makeTranslation(Vector3 v)",native:ft.prototype._makeTranslation,comment:o.Matrix4MakeTranslationComment},{type:"method",signature:"Matrix4 makeTranslation(double x, double y, double z)",native:ft.prototype._makeTranslationXYZ,comment:o.Matrix4MakeTranslationComment},{type:"method",signature:"Matrix4 multiplyScalar(double factor)",native:ft.prototype._multiplyScalar,comment:o.Matrix4MultiplyScalarComment},{type:"method",signature:"Matrix4 invert()",native:ft.prototype._invert,comment:o.Matrix4InvertComment},{type:"method",signature:"double determinant()",native:ft.prototype._determinant,comment:o.Matrix4DeterminantComment},{type:"method",signature:"Matrix4 clone()",native:ft.prototype._clone,comment:o.Matrix4CloneComment},{type:"method",signature:"Matrix4 copyFrom(Matrix4 m)",native:ft.prototype._copyFrom,comment:o.Matrix4CopyFromComment},{type:"method",signature:"Matrix4 multiply(Matrix4 m)",native:ft.prototype._multiply,comment:o.Matrix4MultiplyComment},{type:"method",signature:"Matrix4 premultiply(Matrix4 m)",native:ft.prototype._premultiply,comment:o.Matrix4preMultiplyComment}]),r(ft,"type");let Vc=ft;const ol=class ol extends _o{getObject3d(){return this.camera3d}_cj$_constructor_$OrthographicCamera3d$double$double$double$double$double$double(t,e,i,n,s,a,l,h){this.camera3d=new ib(i,n,s,a,l,h),super._cj$_constructor_$Camera3d$(t,e)}};r(ol,"__javaDeclarations",[{type:"declaration",signature:"class OrthographicCamera3d extends Camera3d"},{type:"method",signature:"OrthographicCamera3d(double left, double right, double top, double bottom, double near, double far)",java:ol.prototype._cj$_constructor_$OrthographicCamera3d$double$double$double$double$double$double}]),r(ol,"type");let _c=ol;const Za=class Za extends _o{constructor(){super(...arguments);r(this,"viewportRelativeCoordinates")}getObject3d(){return this.camera3d}_cj$_constructor_$PerspectiveCamera3d$double$double$double$double(e,i,n,s,a,l){this.camera3d=new jd(n,s,a,l),super._cj$_constructor_$Camera3d$(e,i)}_setViewport(e,i,n,s){this.viewportRelativeCoordinates=[e,i,n,s];let a=this.world3d.graphicsDiv.getBoundingClientRect();e*=a.width,i*=a.height,n*=a.width,s*=a.height,this.camera3d.viewport=new nb(e,i,n,s),this.camera3d.aspect=n/s,this.camera3d.updateProjectionMatrix(),this.camera3d.updateMatrixWorld()}updateViewport(){this.viewportRelativeCoordinates&&this._setViewport(this.viewportRelativeCoordinates[0],this.viewportRelativeCoordinates[1],this.viewportRelativeCoordinates[2],this.viewportRelativeCoordinates[3])}};r(Za,"__javaDeclarations",[{type:"declaration",signature:"class PerspectiveCamera3d extends Camera3d"},{type:"method",signature:"PerspectiveCamera3d(double fov, double aspect, double near, double far)",java:Za.prototype._cj$_constructor_$PerspectiveCamera3d$double$double$double$double},{type:"method",signature:"void setViewport(double xRel, double yRel, double widthRel, double heightRel)",native:Za.prototype._setViewport}]),r(Za,"type");let zc=Za;const Xa=class Xa extends zn{_cj$_constructor_$Plane3d$double$double$int$int(t,e,i,n,s,a){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new xd(i,n,s,a),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Plane3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new xd(i,n),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Plane3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new xd(1,1),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Xa,"__javaDeclarations",[{type:"declaration",signature:"class Plane3d extends Mesh3d"},{type:"method",signature:"Plane3d(double width, double height, int widthSegments, int heightSegments)",java:Xa.prototype._cj$_constructor_$Plane3d$double$double$int$int},{type:"method",signature:"Plane3d(double width, double height)",java:Xa.prototype._cj$_constructor_$Plane3d$double$double},{type:"method",signature:"Plane3d()",java:Xa.prototype._cj$_constructor_$Plane3d$}]);let Wc=Xa;const ia=class ia extends zn{_cj$_constructor_$Ring3d$double$double$int$int$double$double(t,e,i,n,s,a,l,h){l*=Math.PI/180,h*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new fd(i,n,s,a,l,h),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Ring3d$double$double$int$int(t,e,i,n,s,a){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new fd(i,n,s,a),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Ring3d$double$double(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new fd(i,n),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Ring3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new fd(1,2),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(ia,"__javaDeclarations",[{type:"declaration",signature:"class Ring3d extends Mesh3d"},{type:"method",signature:"Ring3d(double innerRadius, double outerRadius, int thetaSegments, int phiSegments, double thetaStart, double thetaLength)",java:ia.prototype._cj$_constructor_$Ring3d$double$double$int$int$double$double},{type:"method",signature:"Ring3d(double innerRadius, double outerRadius, int thetaSegments, int phiSegments)",java:ia.prototype._cj$_constructor_$Ring3d$double$double$int$int},{type:"method",signature:"Ring3d(double innerRadius, double outerRadius)",java:ia.prototype._cj$_constructor_$Ring3d$double$double},{type:"method",signature:"Ring3d()",java:ia.prototype._cj$_constructor_$Ring3d$}]);let Nc=ia;const na=class na extends zn{_cj$_constructor_$Sphere3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new bd(.5),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Sphere3d$double(t,e,i){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new bd(i),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Sphere3d$double$int$int(t,e,i,n,s){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new bd(i,n,s),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Sphere3d$double$int$int$double$double$double$double(t,e,i,n,s,a,l,h,u){super._cj$_constructor_$Mesh3d$(t,()=>{a=a/180*Math.PI,l=l/180*Math.PI,h=h/180*Math.PI,u=u/180*Math.PI;const m=new bd(i,n,s,a,l,h,u);this.mesh=new ge(m,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(na,"__javaDeclarations",[{type:"declaration",signature:"class Sphere3d extends Mesh3d"},{type:"method",signature:"Sphere3d(double radius, int widthSegments, int heightSegments, double phiStart, double phiLength, double thetastart, double thetaLength)",java:na.prototype._cj$_constructor_$Sphere3d$double$int$int$double$double$double$double},{type:"method",signature:"Sphere3d(double radius, int widthSegments, int heightSegments)",java:na.prototype._cj$_constructor_$Sphere3d$double$int$int},{type:"method",signature:"Sphere3d(double radius)",java:na.prototype._cj$_constructor_$Sphere3d$double},{type:"method",signature:"Sphere3d()",java:na.prototype._cj$_constructor_$Sphere3d$}]);let qc=na;const Ja=class Ja extends zn{_cj$_constructor_$Torus3d$double$double$int$int$double(t,e,i,n,s,a,l){l*=Math.PI/180,super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new ec(i,n,s,a,l),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Torus3d$double$double$int$int(t,e,i,n,s,a){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new ec(i,n,s,a),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Torus3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new ec(2,.5,20,32),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(Ja,"__javaDeclarations",[{type:"declaration",signature:"class Torus3d extends Mesh3d"},{type:"method",signature:"Torus3d(double radius, double tube, int radialSegments, int tubularSegments, double arc)",java:Ja.prototype._cj$_constructor_$Torus3d$double$double$int$int$double},{type:"method",signature:"Torus3d(double radius, double tube, int radialSegments, int tubularSegments)",java:Ja.prototype._cj$_constructor_$Torus3d$double$double$int$int},{type:"method",signature:"Torus3d()",java:Ja.prototype._cj$_constructor_$Torus3d$}]);let Rc=Ja;const lr=class lr extends Yi{};r(lr,"__javaDeclarations",[{type:"declaration",signature:"enum Alignment",comment:o.AlignmentEnumComment}]),r(lr,"type"),r(lr,"values",[new lr("left",0),new lr("center",1),new lr("right",2),new lr("top",3),new lr("bottom",4)]);let Gc=lr;function rp(c,t,e,i,n){let s=t.x-c.x,a=t.y-c.y,l=e.x-i.x,h=e.y-i.y,u=e.x-c.x,m=e.y-c.y,g=s*h-a*l;if(g*g<1e-6)return!1;let f=u*h-m*l,b=s*m-a*u,A=f/g,C=b/g,w=A>=0&&A<=1&&C>=0&&C<=1;return w&&n!=null&&(n.x=c.x+A*(t.x-c.x),n.y=c.y+A*(t.y-c.y)),w}function Nd(c,t){let e=t.x-c.x,i=t.y-c.y;return Math.sqrt(e*e+i*i)}function Rg(c,t,e=1e-6){for(let i=0;it.y!=c[a].y>t.y&&t.x<(c[a].x-c[s].x)*(t.y-c[s].y)/(c[a].y-c[s].y)+c[s].x&&(e=!e)}return e}function xy(c,t,e,i,n){let s=e.x,a=e.y,l=i.x,h=i.y,u=(l-s)*(l-s)+(h-a)*(h-a),m=2*(s-c.x)*(l-s)+2*(a-c.y)*(h-a),g=(s-c.x)*(s-c.x)+(a-c.y)*(a-c.y)-t*t,f=m*m-4*u*g;if(f<0)return;let b=Math.sqrt(f),A=(-m+b)/(2*u),C=(-m-b)/(2*u);A>=0&&A<=1&&n.push({x:s+A*(l-s),y:a+A*(h-a)}),C>=0&&C<=1&&n.push({x:s+C*(l-s),y:a+C*(h-a)})}function Sy(c,t){for(let e=0;e1)return Nd(t,e);let l=c.x+a*(t.x-c.x),h=c.y+a*(t.y-c.y),u=e.x-l,m=e.y-h;return Math.sqrt(u*u+m*m)}function Gg(c,t,e){let i=t.x-c.x,n=t.y-c.y,s=Math.sqrt(n*n+i*i);return s<1e-9?Nd(c,e):Math.abs(n*e.x-i*e.y+t.x*c.y-t.y*c.x)/s}function ac(c,t,e=!1,i=!1,n){if(c.length==0||t.length==0)return!1;let s=c.length+(e?0:-1),a=t.length+(i?0:-1);if(e&&qs(c,t[0])||e&&qs(t,c[0]))return!0;for(let l=0;l>16,n.green=(i&65280)>>8,n.blue=i&255,Ue.__javaDeclarations.push({type:"field",signature:"final static Color "+e});let s=Ue;s[e]=n}}}_constructorColorClass(e,i,n){if(this.red=e,this.green=i,this.blue=n,e<0||e>255)throw new W(o.RedValueOutOfBoundsException());if(i<0||i>255)throw new W(o.GreenValueOutOfBoundsException());if(n<0||n>255)throw new W(o.BlueValueOutOfBoundsException());return this}_constructorColorClass1(e,i,n,s){if(this.red=e,this.green=i,this.blue=n,e<0||e>255)throw new W(o.RedValueOutOfBoundsException());if(i<0||i>255)throw new W(o.GreenValueOutOfBoundsException());if(n<0||n>255)throw new W(o.BlueValueOutOfBoundsException());if(this.alpha=s,s<0||s>1)throw new W(o.AlphaValueOutOfBoundsException());return this}static _randomColor(){return Math.floor(Math.random()*16777215)}static _randomColorMin(e){return this._randomColorMinMax(e,255)}static _randomColorMinMax(e,i){e<0&&(e=0),i<0&&(i=0);let n=(Math.random()*(i-e)+e)*Math.sqrt(3),s=Math.random(),a=Math.random(),l=Math.random(),h=Math.sqrt(s*s+a*a+l*l);return h<1e-10&&(h=1e-10),s=Math.floor(s/h*n),a=Math.floor(a/h*n),l=Math.floor(l/h*n),s>255&&(s=255),a>255&&(a=255),l>255&&(l=255),65536*s+256*a+l}_toString(){return new Y(Ke.rgbColorToHexRGB(this.red,this.green,this.blue))}static _fromRGB(e,i,n){return e=Math.min(e,255),e=Math.max(0,e),i=Math.min(i,255),i=Math.max(0,i),n=Math.min(n,255),n=Math.max(0,n),e*65536+i*256+n}static _fromRGBA(e,i,n,s){e=Math.min(e,255),e=Math.max(0,e),i=Math.min(i,255),i=Math.max(0,i),n=Math.min(n,255),n=Math.max(0,n),s=Math.min(s,1),s=Math.max(0,s);let a=(e*16777216+i*65536+n*256+Math.floor(s*255)).toString(16);for(;a.length<8;)a="0"+a;return"#"+a}static _fromHSLA(e,i,n,s){e=Math.min(e,360),e=Math.max(0,e),i=Math.min(i,100),i=Math.max(0,i),n=Math.min(n,100),n=Math.max(0,n),s=Math.min(s,1),s=Math.max(0,s);let a=Ue.hslToRgb(e,i,n),l=(a.r*16777216+a.g*65536+a.b*256+Math.floor(s*255)).toString(16);for(;l.length<8;)l="0"+l;return"#"+l}static _fromHSL(e,i,n){e=Math.min(e,360),e=Math.max(0,e),i=Math.min(i,100),i=Math.max(0,i),n=Math.min(n,100),n=Math.max(0,n);let s=Ue.hslToRgb(e,i,n);return s.r*65536+s.g*256+s.b}static hslToRgb(e,i,n){i/=100,n/=100;let s=(1-Math.abs(2*n-1))*i,a=s*(1-Math.abs(e/60%2-1)),l=n-s/2,h=0,u=0,m=0;return 0<=e&&e<60?(h=s,u=a,m=0):60<=e&&e<120?(h=a,u=s,m=0):120<=e&&e<180?(h=0,u=s,m=a):180<=e&&e<240?(h=0,u=a,m=s):240<=e&&e<300?(h=a,u=0,m=s):300<=e&&e<360&&(h=s,u=0,m=a),h=Math.round((h+l)*255),u=Math.round((u+l)*255),m=Math.round((m+l)*255),{r:h,g:u,b:m}}fromIntAndAlpha(e,i){e&&(this.red=(e&16711680)/65536,this.green=(e&65280)/256,this.blue=e&255),this.alpha=i}_toInt(){return this.red*65536+this.green*256+this.blue}_mj$equals$boolean$Object(e,i,n){if(n instanceof Ue){if(n==null){e.s.push(!1),i&&i();return}e.s.push(this.red==n.red&&this.green==n.green&&this.blue==n.blue),i&&i()}else super._mj$equals$boolean$Object(e,i,n)}};r(Ue,"__javaDeclarations",[{type:"declaration",signature:"class Color extends Object"},{type:"field",signature:"int red"},{type:"field",signature:"int green"},{type:"field",signature:"int blue"},{type:"field",signature:"double alpha"},{type:"method",signature:"Color(int red, int green, int blue)",native:Ue.prototype._constructorColorClass,comment:o.ColorConstructorFromRGB},{type:"method",signature:"Color(int red, int green, int blue, double alpha)",native:Ue.prototype._constructorColorClass1,comment:o.ColorConstructorFromRGBA},{type:"method",signature:"static int randomColor()",native:Ue._randomColor,comment:o.ColorRandomColor0},{type:"method",signature:"static int randomColor(int minimumBrightness)",native:Ue._randomColorMin,comment:o.ColorRandomColor1},{type:"method",signature:"static int randomColor(int minimumBrightness, int maximumBrightness)",native:Ue._randomColorMinMax,comment:o.ColorRandomColor2},{type:"method",signature:"final String toString()",native:Ue.prototype._toString,comment:o.ColorToString},{type:"method",signature:"final int toInt()",native:Ue.prototype._toInt,comment:o.ColorToInt},{type:"method",signature:"final boolean equals(Color otherColor)",java:Ue.prototype._mj$equals$boolean$Object},{type:"method",signature:"final int getRed()",template:"(§1.red)",comment:o.ColorGetRed},{type:"method",signature:"final int getGreen()",template:"(§1.green)",comment:o.ColorGetGreen},{type:"method",signature:"final int getBlue()",template:"(§1.blue)",comment:o.ColorGetBlue},{type:"method",signature:"static int fromRGB(int red, int green, int blue)",native:Ue._fromRGB,comment:o.ColorFromRGB},{type:"method",signature:"static string fromRGBA(int red, int green, int blue, double alpha)",native:Ue._fromRGBA,comment:o.ColorFromRGBA},{type:"method",signature:"static string fromHSLA(double hue, double saturation, double luminance, double alpha)",native:Ue._fromHSLA,comment:o.ColorFromHSLA},{type:"method",signature:"static int fromHSL(double hue, double saturation, double luminance)",native:Ue._fromHSL,comment:o.ColorFromHSL}]),r(Ue,"type"),r(Ue,"predefinedColorsInitialized",!1);let hs=Ue;const Or=class Or extends Yi{};r(Or,"__javaDeclarations",[{type:"declaration",signature:"enum Direction",comment:o.DirectionEnumComment}]),r(Or,"type"),r(Or,"values",[new Or("top",0),new Or("right",1),new Or("bottom",2),new Or("left",3)]);let Xn=Or;const at=class at{static initDefaultValues(){at.defaultFillColor=8421631,at.defaultFillAlpha=1,at.defaultBorderAlpha=1,at.defaultBorderWidth=10,at.defaultVisibility=!0}static setDefaultVisibility(t){at.defaultVisibility=t}static setDefaultBorder(t,e,i){if(at.defaultBorderWidth=t,typeof e=="string"){let n=Ke.parseColorToOpenGL(e);at.defaultBorderColor=n.color,at.defaultBorderAlpha=i??n.alpha}else at.defaultBorderColor=e,i!=null&&(at.defaultBorderAlpha=i)}static setDefaultFillColor(t,e){if(typeof t=="string"){let i=Ke.parseColorToOpenGL(t);at.defaultFillColor=i.color||3158064,at.defaultFillAlpha=e??i.alpha}else at.defaultFillColor=t,e!=null&&(at.defaultFillAlpha=e)}};r(at,"defaultFillColor",8421631),r(at,"defaultFillAlpha",1),r(at,"defaultBorderColor"),r(at,"defaultBorderAlpha",1),r(at,"defaultBorderWidth",5),r(at,"defaultVisibility",!0);let Nt=at;function Hg(c,t){let e=c.parent;e&&(Hg(e),Gp(c.localTransform,e.worldTransform,c.worldTransform))}const ne=class ne extends Dl{constructor(){super(...arguments);r(this,"container");r(this,"belongsToGroup");r(this,"centerXInitial",0);r(this,"centerYInitial",0);r(this,"initialWidth");r(this,"initialHeight");r(this,"angle",0);r(this,"hitPolygonInitial",[]);r(this,"hitPolygonTransformed",[]);r(this,"hitPolygonDirty",!0);r(this,"reactToMouseEventsWhenInvisible",!1);r(this,"mouseLastSeenInsideObject",!1);r(this,"trackMouseMove",!1);r(this,"scaleFactor",1);r(this,"directionRad",0);r(this,"lastMoveDx",0);r(this,"lastMoveDy",0);r(this,"world");r(this,"mouseEventsImplemented");r(this,"worldTransformDirty",!0)}get _centerX(){return this._getCenterX()}get _centerY(){return this._getCenterY()}set _centerX(e){this._moveTo(e,this._centerY)}set _centerY(e){this._moveTo(this._centerX,e)}get _angle(){return this.angle}set _angle(e){this._setAngle(e)}get _scaleFactor(){return this.scaleFactor}set _scaleFactor(e){this._scale(e/this.scaleFactor)}copyFrom(e){super.copyFrom(e),this.centerXInitial=e.centerXInitial,this.centerYInitial=e.centerYInitial,this.initialHeight=e.initialHeight,this.initialWidth=e.initialWidth,this.angle=e.angle,this.hitPolygonInitial=e.hitPolygonInitial.slice(),this.hitPolygonTransformed=e.hitPolygonTransformed.slice(),this.hitPolygonDirty=e.hitPolygonDirty,this.reactToMouseEventsWhenInvisible=e.reactToMouseEventsWhenInvisible,this.mouseLastSeenInsideObject=e.mouseLastSeenInsideObject,this.trackMouseMove=e.trackMouseMove,this.scaleFactor=e.scaleFactor,this.directionRad=e.directionRad,this.lastMoveDx=e.lastMoveDx,this.lastMoveDy=e.lastMoveDy,this.container.localTransform.copyFrom(e.container.localTransform),this.container.setFromMatrix(e.container.localTransform),Hg(e.container)}render(){}_mj$copy$Shape$(e,i){}_registerListeners(e){super._registerListeners(e);let i=!1;this._mj$onMouseDown$void$double$double$int!=ne.prototype._mj$onMouseDown$void$double$double$int&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mousedown=this._mj$onMouseDown$void$double$double$int),this._mj$onMouseUp$void$double$double$int!=ne.prototype._mj$onMouseUp$void$double$double$int&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mouseup=this._mj$onMouseUp$void$double$double$int),this._mj$onMouseMove$void$double$double!=ne.prototype._mj$onMouseMove$void$double$double&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mousemove=this._mj$onMouseMove$void$double$double),this._mj$onMouseEnter$void$double$double!=ne.prototype._mj$onMouseEnter$void$double$double&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mouseenter=this._mj$onMouseEnter$void$double$double),this._mj$onMouseLeave$void$double$double!=ne.prototype._mj$onMouseLeave$void$double$double&&(i=!0,this.mouseEventsImplemented||(this.mouseEventsImplemented={}),this.mouseEventsImplemented.mouseleave=this._mj$onMouseLeave$void$double$double),i&&this.world.mouseManager.addShapeWithImplementedMouseMethods(this)}_cj$_constructor_$Shape$(e,i){this.world=e.scheduler.interpreter.retrieveObject("WorldClass"),e.s.push(this),this.world?(this.world.defaultGroup||this.world.shapesWhichBelongToNoGroup.push(this),i&&i()):new e.classes.World()._cj$_constructor_$World$(e,()=>{this.world=e.s.pop(),this.world.defaultGroup||this.world.shapesWhichBelongToNoGroup.push(this),i&&i()})}_isOutsideView(){let e=this.container.getBounds(!0),i=this.world;return e.righti.currentLeft+i.currentWidth||e.bottomi.currentTop+i.currentHeight}_move(e,i){return(e!=0||i!=0)&&(this.lastMoveDx=e,this.lastMoveDy=i),this.container.setFromMatrix(this.container.localTransform.translate(e,i)),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this}_rotate(e,i,n){if(typeof i>"u"){let s=new me(this.centerXInitial,this.centerYInitial);this.container.localTransform.apply(s,s),i=s.x,n=s.y}else{let s=new me(i,n);this.getWorldTransform().applyInverse(s,s),this.container.localTransform.apply(s,s),i=s.x,n=s.y}return this.container.localTransform.translate(-i,-n),this.container.localTransform.rotate(-e/180*Math.PI),this.container.localTransform.translate(i,n),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this.angle+=e,this.directionRad+=e/180*Math.PI,this}_setScale(e){return this._scale(e/this.scaleFactor),this}_scale(e,i,n){if(typeof i>"u"){let s=new me(this.centerXInitial,this.centerYInitial);this.container.localTransform.apply(s,s),i=s.x,n=s.y}else{let s=new me(i,n);this.getWorldTransform().applyInverse(s,s),this.container.localTransform.apply(s,s),i=s.x,n=s.y}return this.container.localTransform.translate(-i,-n),this.container.localTransform.scale(e,e),this.container.localTransform.translate(i,n),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this.scaleFactor*=e,this}_mirrorX(){return this._mirrorXY(-1,1),this}_mirrorY(){return this._mirrorXY(1,-1),this}_mirrorXY(e,i){let n,s,a=new me(this.centerXInitial,this.centerYInitial);this.container.localTransform.apply(a,a),n=a.x,s=a.y,this.container.localTransform.translate(-n,-s),this.container.localTransform.scale(e,i),this.container.localTransform.translate(n,s),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty()}_forward(e){let i=e*Math.cos(this.directionRad),n=-e*Math.sin(this.directionRad);return this._move(i,n),this}_defineDirection(e){return this.directionRad=e/180*Math.PI,this}bringOnePlaneFurtherToFront(){let e=this.container.parent,i=e.children.length-1,n=e.getChildIndex(this.container);n0&&e.setChildIndex(this.container,i-1)}bringToFront(){let e=this.container.parent,i=e.children.length-1;this.belongsToGroup?this.belongsToGroup.setChildIndex(this,i):e.setChildIndex(this.container,i)}sendToBack(){this.belongsToGroup?this.belongsToGroup.setChildIndex(this,0):this.container.parent.setChildIndex(this.container,0)}addToDefaultGroupAndSetDefaultVisibility(){this.container.visible=Nt.defaultVisibility,this.world.defaultGroup&&this.world.defaultGroup.add(this)}tint(e){let i;typeof e=="string"?i=Ke.parseColorToOpenGL(e).color||3158064:i=e,this.container.tint&&(this.container.tint=i)}_getCenterX(){let e=new me(this.centerXInitial,this.centerYInitial);return this.container&&this.getWorldTransform().apply(e,e),e.x}_getCenterY(){let e=new me(this.centerXInitial,this.centerYInitial);return this.container&&this.getWorldTransform().apply(e,e),e.y}getCenter(){let e=new me(this.centerXInitial,this.centerYInitial);return this.getWorldTransform().apply(e,e)}destroy(){if(this.isDestroyed)return;let e=this.world;if(this.belongsToGroup){let n=this.belongsToGroup.shapes.indexOf(this);n>=0&&this.belongsToGroup.shapes.splice(n,1),this.belongsToGroup.container.removeChildAt(this.belongsToGroup.container.getChildIndex(this.container))}else{let n=e.shapesWhichBelongToNoGroup.indexOf(this);n>=0&&e.shapesWhichBelongToNoGroup.splice(n,1)}let i=e.shapesNotAffectedByWorldTransforms.indexOf(this);i>=0&&e.shapesNotAffectedByWorldTransforms.splice(i,1),this.world.interpreter.actorManager.shapesToDestroySafely.push(this),this.mouseEventsImplemented&&this.world.mouseManager.removeShapeWithImplementedMouseMethods(this),super.destroy()}transformHitPolygon(){if(!this.hitPolygonDirty)return;this.hitPolygonTransformed=[];let e=this.getWorldTransform();for(let i of this.hitPolygonInitial)this.hitPolygonTransformed.push({x:e.a*i.x+e.c*i.y+e.tx,y:e.b*i.x+e.d*i.y+e.ty});this.hitPolygonDirty=!1}_containsPoint(e,i){return this.container.getBounds().containsPoint(e,i)?this.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),qs(this.hitPolygonTransformed,{x:e,y:i})):!1}_moveTo(e,i){return this._move(e-this._getCenterX(),i-this._getCenterY()),this}_setX(e){this._move(e-this._getCenterX(),0)}_setY(e){return this._move(0,e-this._getCenterY()),this}_defineCenter(e,i){let n=new me(e,i);return this.getWorldTransform().applyInverse(n,n),this.centerXInitial=n.x,this.centerYInitial=n.y,this}_defineCenterRelative(e,i){let n=this.container.getBounds(!1),s=new me(n.left,n.top),a=new me(n.right,n.bottom);return s=this.world.app.stage.localTransform.applyInverse(s),a=this.world.app.stage.localTransform.applyInverse(a),this._defineCenter(s.x+(a.x-s.x)*e,s.y+(a.y-s.y)*i),this}static _setDefaultVisibility(e){Nt.setDefaultVisibility(e)}_setVisible(e){return this.container.visible=e,this}_setStatic(e){let i=this.world.shapesNotAffectedByWorldTransforms;if(e)i.push(this);else{let n=i.indexOf(this);n>=0&&i.splice(n,1)}return this}_mj$onMouseUp$void$double$double$int(e,i,n,s,a){}_mj$onMouseDown$void$double$double$int(e,i,n,s,a){}_mj$onMouseEnter$void$double$double(e,i,n,s){}_mj$onMouseLeave$void$double$double(e,i,n,s){}_mj$onMouseMove$void$double$double(e,i,n,s){}_collidesWith(e){return e==null?!1:!this.turtle&&e.turtle?e._collidesWith(this):e.shapes?e._collidesWith(this):this.isDestroyed==null||e.isDestroyed==null||!this.hasOverlappingBoundingBoxWith(e)?!1:this.hitPolygonInitial==null||e.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),e.hitPolygonDirty&&e.transformHitPolygon(),ac(this.hitPolygonTransformed,e.hitPolygonTransformed,!0,!0))}hasOverlappingBoundingBoxWith(e,i){i||(i=this.container.getBounds());let n=e.container.getBounds();return!(i.left>n.right||n.left>i.right||i.top>n.bottom||n.top>i.bottom)}getFirstCollidingSpriteHelper(e,i,n){let s=null;for(let a of i)if(a!=this&&!a.isDestroyed)if(a.shapes){if(s=this.getFirstCollidingSpriteHelper(e,a.shapes,n),s)break}else{let l=a.imageIndex;if(!l||e!=-1&&l!=e||!this.hasOverlappingBoundingBoxWith(a,n))continue;if(this.hitPolygonInitial==null||a.hitPolygonInitial==null){s=a;break}if(a.hitPolygonDirty&&a.transformHitPolygon(),ac(this.hitPolygonTransformed,a.hitPolygonTransformed,!0,!0)){s=a;break}}return s}_getFirstCollidingSprite(e){return this.hitPolygonDirty&&this.transformHitPolygon(),this.getFirstCollidingSpriteHelper(e,this.world.shapesWhichBelongToNoGroup,this.container.getBounds())}_getCollidingShapesArrayList(e){if(e==null)return[];let i=[];for(let n of e.getElements())this._collidesWith(n)&&i.push(n);return i}_getCollidingShapesGroup(e){if(e==null)return[];if(!this.hasOverlappingBoundingBoxWith(e))return[];let i=[];for(let n of e.shapes)this._collidesWith(n)&&i.push(n);return i}collidesWithAnyShapeHelper(e,i,n){this.hitPolygonDirty&&this.transformHitPolygon();let s=null;for(let a of i)if(a!=this&&!a.isDestroyed&&!(e!=null&&!a.shapes&&a.fillColor!=e)&&this.hasOverlappingBoundingBoxWith(a,n)){if(a.shapes&&!this.shapes&&(s=this.collidesWithAnyShapeHelper(e,a.shapes,n)))break;if(this.shapes){let l=!1;for(let h of this.shapes)if(s=h.collidesWithAnyShapeHelper(e,[a],n)){l=!0;break}if(l)break}if(this.hitPolygonInitial==null||a.hitPolygonInitial==null){s=null;break}if(this.hitPolygonTransformed.length==0){s=null;break}if(a.hitPolygonDirty&&a.transformHitPolygon(),ac(this.hitPolygonTransformed,a.hitPolygonTransformed,!0,!0)){s=a;break}}return s}_collidesWithAnyShape(e){if(e&&(typeof e=="string"?e=Ke.parseColorToOpenGL(e).color:e instanceof hs&&(e=e._toInt())),this.isDestroyed)return!1;let i=this.container.getBounds();return this.hitPolygonDirty&&this.transformHitPolygon(),this.collidesWithAnyShapeHelper(e,this.world.shapesWhichBelongToNoGroup,i)!=null}_getFirstCollidingShape(){if(this.isDestroyed)return null;let e=this.container.getBounds();return this.hitPolygonDirty&&this.transformHitPolygon(),this.collidesWithAnyShapeHelper(void 0,this.world.shapesWhichBelongToNoGroup,e)}setWorldTransformAndHitPolygonDirty(){this.worldTransformDirty=!0,this.hitPolygonDirty=!0}getWorldTransform(){var i;if(!this.worldTransformDirty)return this.container._worldTransform||ln.IDENTITY;this.belongsToGroup!=null&&this.belongsToGroup.getWorldTransform();let e=this.container.parent||this.container;return(i=this.container)._worldTransform||(i._worldTransform=new ln),this.belongsToGroup!=null?Gp(this.container.localTransform,e._worldTransform,this.container._worldTransform):this.container._worldTransform.copyFrom(this.container.localTransform),this.worldTransformDirty=!1,this.container._worldTransform}borderContainsPoint(e,i,n=-1){return!1}_setAngle(e){return this._rotate(e-this.angle),this}_bringToFront(){if(this.belongsToGroup)return this.belongsToGroup.setChildIndex(this,this.belongsToGroup.shapes.length-1),this;let e=this.world.app.stage,i=e.children.length-1;try{e.setChildIndex(this.container,i)}catch{}return this}_sendToBack(){return this.belongsToGroup?(this.belongsToGroup.setChildIndex(this,0),this):(this.world.app.stage.setChildIndex(this.container,0),this)}_setTintInt(e){return typeof this.container.tint<"u"&&(this.container.tint=e%16777216),this}_setTintString(e){let i=Ke.parseColorToOpenGL(e);return typeof this.container.tint<"u"&&(this.container.tint=i.color),this}_setTintColor(e){return e==null?this.container.tint=16777215:this.container.tint=e._toInt(),this}_startTrackingEveryMouseMovement(){this.trackMouseMove=!0}_stopTrackingEveryMouseMovement(){this.trackMouseMove=!1}_directionRelativeTo(e){if(e==null)throw new W(o.shapeNullError());if(e.isDestroyed)throw new W(o.shapeAlreadyDestroyedError());let i=this.container.getBounds(),n=e.container.getBounds(),s=n.left-i.right,a=i.left-n.right,l=n.top-i.bottom,h=i.top-n.bottom,u=[];this.lastMoveDx>0?u.push({distance:s,ei:Xn.values[3]}):this.lastMoveDx<0&&u.push({distance:a,ei:Xn.values[1]}),this.lastMoveDy>0?u.push({distance:l,ei:Xn.values[0]}):this.lastMoveDy<0&&u.push({distance:h,ei:Xn.values[2]}),u.length==0&&(u=[{distance:s,ei:Xn.values[3]},{distance:a,ei:Xn.values[1]},{distance:l,ei:Xn.values[0]},{distance:h,ei:Xn.values[2]}]);let m=u[0].distance,g=u[0].ei;for(let f=1;fm&&(m=u[f].distance,g=u[f].ei);return g}_moveBackFrom(e,i){if(e==null)throw new W(o.shapeNullError());if(e.isDestroyed)throw new W(o.shapeAlreadyDestroyedError());let n=this.lastMoveDx,s=this.lastMoveDy,a=Math.sqrt(n*n+s*s);if(a<.001||!this._collidesWith(e))return;let l=0;this._move(-n,-s);let h=-1;for(;this._collidesWith(e);){l=h;let g=h*2;if(this._move(n*(g-h),s*(g-h)),h=g,(h+1)*a<-100){this._move(n*(-1-h),s*(-1-h));return}}let u=h,m=!1;for(;(l-u)*a>1;){let g=(l+u)/2;this._move(n*(g-h),s*(g-h)),(m=this._collidesWith(e))?l=g:u=g,h=g}return i&&!m?this._move(n*(l-h),s*(l-h)):m&&!i&&this._move(n*(u-h),s*(u-h)),this.lastMoveDx=n,this.lastMoveDy=s,this}_mj$getWorld$World(e,i){const n=e.scheduler.interpreter.retrieveObject("WorldClass");if(n==null)throw this.world3d!=null?new W(o.actorWorld2dDoesntexistOn3dObjectException()):new W(o.actorWorld2dDoesntexistException());e.s.push(n)}_reactToMouseEventsWhenInvisible(e){this.reactToMouseEventsWhenInvisible=e}_getTopLeftX(){typeof this.initialWidth>"u"&&this.setInitialWidthAndHeight();let e=this.centerXInitial-this.initialWidth/2,i=this.centerYInitial-this.initialHeight/2,n=new me(e,i);return this.container&&this.getWorldTransform().apply(n,n),n.x}_getTopLeftY(){typeof this.initialWidth>"u"&&this.setInitialWidthAndHeight();let e=this.centerXInitial-this.initialWidth/2,i=this.centerYInitial-this.initialHeight/2,n=new me(e,i);return this.container&&this.getWorldTransform().apply(n,n),n.y}setInitialWidthAndHeight(){let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,n=Number.POSITIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(let a of this.hitPolygonInitial)a.xi&&(i=a.x),a.ys&&(s=a.y);this.initialWidth=i-e,this.initialHeight=s-n}_setHitPolygon(e){this.hitPolygonTransformed=[];let i=this.getWorldTransform().clone().invert();this.hitPolygonInitial=e.map(n=>({x:i.a*n[0]+i.c*n[1]+i.tx,y:i.b*n[0]+i.d*n[1]+i.ty})),this.hitPolygonDirty=!0}};r(ne,"__javaDeclarations",[{type:"declaration",signature:"abstract class Shape extends Actor",comment:o.shapeClassComment},{type:"field",signature:"private double angle",nativeIdentifier:"_angle",comment:o.shapeAngleComment},{type:"field",signature:"protected double centerX",nativeIdentifier:"_centerX",comment:o.shapeCenterXComment},{type:"field",signature:"protected double centerY",nativeIdentifier:"_centerY",comment:o.shapeCenterYComment},{type:"field",signature:"private double scaleFactor",nativeIdentifier:"_scaleFactor",comment:o.shapeScaleFactorComment},{type:"method",signature:"Shape()",java:ne.prototype._cj$_constructor_$Shape$},{type:"method",signature:"final This move(double dx, double dy)",native:ne.prototype._move,comment:o.shapeMoveComment},{type:"method",signature:"final This rotate(double angleInDeg, double centerX, double centerY)",native:ne.prototype._rotate,comment:o.shapeRotateComment1},{type:"method",signature:"final This rotate(double angleInDeg)",native:ne.prototype._rotate,comment:o.shapeRotateComment2},{type:"method",signature:"final This scale(double factor, double centerX, double centerY)",native:ne.prototype._scale,comment:o.shapeScaleComment1},{type:"method",signature:"final This setScale(double newScale)",native:ne.prototype._setScale,comment:o.shapeSetScaleComment},{type:"method",signature:"final This scale(double factor)",native:ne.prototype._scale,comment:o.shapeScaleComment2},{type:"method",signature:"final This mirrorX()",native:ne.prototype._mirrorX,comment:o.shapeMirrorXComment},{type:"method",signature:"final This mirrorY()",native:ne.prototype._mirrorY,comment:o.shapeMirrorYComment},{type:"method",signature:"final This defineDirection(double angleInDeg)",native:ne.prototype._defineDirection,comment:o.shapeDefineDirectionComment},{type:"method",signature:"final This forward(double distance)",native:ne.prototype._forward,comment:o.shapeForwardComment},{type:"method",signature:"final boolean isOutsideView()",native:ne.prototype._isOutsideView,comment:o.shapeOutsideViewComment},{type:"method",signature:"final double getCenterX()",native:ne.prototype._getCenterX,comment:o.shapeCenterXComment},{type:"method",signature:"final double getCenterY()",native:ne.prototype._getCenterY,comment:o.shapeCenterYComment},{type:"method",signature:"final double getAngle()",template:"(§1.angle)",comment:o.shapeAngleComment},{type:"method",signature:"final This setAngle(double newAngle)",native:ne.prototype._setAngle,comment:o.shapeSetAngleComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:ne.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"final This moveTo(double x, double y)",native:ne.prototype._moveTo,comment:o.shapeMoveToComment},{type:"method",signature:"final This setX(double x)",native:ne.prototype._setX,comment:o.shapeSetXComment},{type:"method",signature:"final This setY(double y)",native:ne.prototype._setY,comment:o.shapeSetYComment},{type:"method",signature:"final This defineCenter(double x, double y)",native:ne.prototype._defineCenter,comment:o.shapeDefineCenterComment},{type:"method",signature:"final This defineCenterRelative(double x, double y)",native:ne.prototype._defineCenterRelative,comment:o.shapeDefineCenterRelativeComment},{type:"method",signature:"final double getTopLeftX()",native:ne.prototype._getTopLeftX,comment:o.shapeGetTopLeftXComment},{type:"method",signature:"final double getTopLeftY()",native:ne.prototype._getTopLeftY,comment:o.shapeGetTopLeftYComment},{type:"method",signature:"final This tint(int color)",native:ne.prototype._setTintInt,comment:o.shapeTintComment},{type:"method",signature:"final This tint(string color)",native:ne.prototype._setTintString,comment:o.shapeTintComment},{type:"method",signature:"final This tint(Color color)",native:ne.prototype._setTintColor,comment:o.shapeTintComment},{type:"method",signature:"final Direction directionRelativeTo(Shape otherShape)",native:ne.prototype._directionRelativeTo,comment:o.shapeDirectionRelativeToComment},{type:"method",signature:"final This moveBackFrom(Shape otherShape, boolean keepColliding)",native:ne.prototype._moveBackFrom,comment:o.shapeMoveBackFromComment},{type:"method",signature:"static void setDefaultVisibility(boolean isVisible)",native:ne._setDefaultVisibility,comment:o.shapeSetDefaultVisibilityComment},{type:"method",signature:"final This setVisible(boolean isVisible)",native:ne.prototype._setVisible,comment:o.shapeSetVisibleComment},{type:"method",signature:"final boolean isVisible()",template:"§1.container.visible",comment:o.shapeSetVisibleComment},{type:"method",signature:"final This setStatic(boolean isStatic)",native:ne.prototype._setStatic,comment:o.shapeSetStaticComment},{type:"method",signature:"final This bringToFront()",native:ne.prototype._bringToFront,comment:o.shapeBringToFrontComment},{type:"method",signature:"final This sendToBack()",native:ne.prototype._sendToBack,comment:o.shapeSendToBackComment},{type:"method",signature:"final boolean collidesWith(Shape otherShape)",native:ne.prototype._collidesWith,comment:o.shapeCollidesWithComment},{type:"method",signature:"final boolean collidesWithAnyShape()",native:ne.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithAnyShapeComment},{type:"method",signature:"final boolean collidesWithFillColor(int color)",native:ne.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(string color)",native:ne.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(Color color)",native:ne.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final Sprite getFirstCollidingSprite(int imageIndex)",native:ne.prototype._getFirstCollidingSprite,comment:o.shapeGetFirstCollidingSpriteComment},{type:"method",signature:"final Shape getFirstCollidingShape()",native:ne.prototype._getFirstCollidingShape,comment:o.shapeGetFirstCollidingShapeComment},{type:"method",signature:"final T[] getCollidingShapes(Group group)",native:ne.prototype._getCollidingShapesGroup,comment:o.shapeGetCollidingShapesGroupComment},{type:"method",signature:"final T[] getCollidingShapes(ArrayList listOfShapes)",native:ne.prototype._getCollidingShapesArrayList,comment:o.shapeGetCollidingShapesArrayListComment},{type:"method",signature:"final void reactToMouseEventsWhenInvisible(boolean b)",native:ne.prototype._reactToMouseEventsWhenInvisible,comment:o.shapeReactToMouseEventsWhenInvisibleComment},{type:"method",signature:"void onMouseUp(double x, double y, int button)",java:ne.prototype._mj$onMouseUp$void$double$double$int,comment:o.shapeOnMouseUpComment},{type:"method",signature:"void onMouseDown(double x, double y, int button)",java:ne.prototype._mj$onMouseDown$void$double$double$int,comment:o.shapeOnMouseDownComment},{type:"method",signature:"void onMouseEnter(double x, double y)",java:ne.prototype._mj$onMouseEnter$void$double$double,comment:o.shapeOnMouseEnterComment},{type:"method",signature:"void onMouseLeave(double x, double y)",java:ne.prototype._mj$onMouseLeave$void$double$double,comment:o.shapeOnMouseLeaveComment},{type:"method",signature:"void onMouseMove(double x, double y)",java:ne.prototype._mj$onMouseMove$void$double$double,comment:o.shapeOnMouseMoveComment},{type:"method",signature:"void startTrackingEveryMouseMovement()",native:ne.prototype._startTrackingEveryMouseMovement,comment:o.shapeStartTrackingEveryMouseMovementComment},{type:"method",signature:"void stopTrackingEveryMouseMovement()",native:ne.prototype._stopTrackingEveryMouseMovement,comment:o.shapeStartTrackingEveryMouseMovementComment},{type:"method",signature:"void setHitPolygon(double[][] points)",native:ne.prototype._setHitPolygon,comment:o.shapeSetHitPolygonComment},{type:"method",signature:"abstract Shape copy()",java:ne.prototype._mj$copy$Shape$,comment:o.shapeCopyComment},{type:"method",signature:"final World getWorld()",java:ne.prototype._mj$getWorld$World,comment:o.getWorldComment}]),r(ne,"type");let dn=ne;const Me=class Me extends dn{constructor(){super(...arguments);r(this,"fillColor",Nt.defaultFillColor);r(this,"fillAlpha",Nt.defaultFillAlpha);r(this,"borderColor",Nt.defaultBorderColor);r(this,"borderAlpha",Nt.defaultBorderAlpha);r(this,"borderWidth",Nt.defaultBorderWidth)}_cj$_constructor_$FilledShape$(e,i){this._cj$_constructor_$Shape$(e,i)}render(){}copyFrom(e){super.copyFrom(e),this.fillColor=e.fillColor,this.fillAlpha=e.fillAlpha,this.borderColor=e.borderColor,this.borderAlpha=e.borderAlpha,this.borderWidth=e.borderWidth}_getFillColor(){if(this.fillColor==null)return null;let e=new hs;return e.fromIntAndAlpha(this.fillColor,this.fillAlpha),e}_getFillColorAsInt(){return this.fillColor||0}_getBorderColor(){if(this.borderColor==null)return null;let e=new hs;return e.fromIntAndAlpha(this.borderColor,this.borderAlpha),e}_getBorderColorAsInt(){return this.borderColor||0}_setBorderWidth(e){return this.borderWidth=e,this.render(),this}_getBorderWidth(){return this.borderWidth}_setAlpha(e){return this.fillAlpha=e,this.borderAlpha=e,this.render(),this}_getAlpha(){return this.fillAlpha}_setFillColorInt(e){return this.fillColor=e%16777216,this.render(),this}_setFillColorColor(e,i){return e==null?this.fillColor=null:(this.fillColor=e.red*65536+e.green*256+e.blue,i&&(this.fillAlpha=i)),this.render(),this}_setBorderColorColor(e,i){return e==null?this.borderColor=null:(this.borderColor=e.red*65536+e.green*256+e.blue,i&&(this.borderAlpha=i)),this.render(),this}_setFillColorIntDouble(e,i){return this.fillColor=e%16777216,this.fillAlpha=i,this.render(),this}_setFillColorString(e){let i=Ke.parseColorToOpenGL(e);return this.fillColor=i.color,this.fillAlpha=i.alpha,this.render(),this}_setFillColorStringDouble(e,i){let n=Ke.parseColorToOpenGL(e);return this.fillColor=n.color,this.fillAlpha=i,this.render(),this}_setBorderColorInt(e){return this.borderColor=e%16777216,this.render(),this}_setBorderColorIntDouble(e,i){return this.borderColor=e%16777216,this.borderAlpha=e,this.render(),this}_setBorderColorString(e){let i=Ke.parseColorToOpenGL(e);return this.borderColor=i.color,this.borderAlpha=i.alpha,this.render(),this}_setBorderColorStringDouble(e,i){let n=Ke.parseColorToOpenGL(e);return this.borderColor=n.color,this.borderAlpha=i,this.render(),this}static _setDefaultBorder(e,i,n){if(Nt.defaultBorderWidth=e,typeof i=="string"){let s=Ke.parseColorToOpenGL(i);Nt.defaultBorderColor=s.color,Nt.defaultBorderAlpha=n??s.alpha}else Nt.defaultBorderColor=i,n!=null&&(Nt.defaultBorderAlpha=n)}static _setDefaultFillColor(e,i){if(typeof e=="string"){let n=Ke.parseColorToOpenGL(e);Nt.defaultFillColor=n.color||3158064,Nt.defaultFillAlpha=i??n.alpha}else Nt.defaultFillColor=e,i!=null?Nt.defaultFillAlpha=i:Nt.defaultFillAlpha=1}borderContainsPoint(e,i,n=-1){return typeof this.borderColor>"u"||n!=-1&&n!=this.borderColor||!this.container.getBounds().containsPoint(e,i)?!1:this.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),Cy(this.hitPolygonTransformed,{x:e,y:i},this.borderWidth/2))}};r(Me,"__javaDeclarations",[{type:"declaration",signature:"abstract class FilledShape extends Shape"},{type:"method",signature:"FilledShape()",java:Me.prototype._cj$_constructor_$FilledShape$},{type:"method",signature:"Color getFillColor()",native:Me.prototype._getFillColor,comment:o.fsGetFillColorComment},{type:"method",signature:"int getFillColorAsInt()",native:Me.prototype._getFillColorAsInt,comment:o.fsGetFillColorAsIntComment},{type:"method",signature:"final This setFillColor(Color color)",native:Me.prototype._setFillColorColor,comment:o.fsSetFillColorCommentColor},{type:"method",signature:"final This setFillColor(Color color, double alpha)",native:Me.prototype._setFillColorColor,comment:o.fsSetFillColorCommentColor},{type:"method",signature:"final This setFillColor(int color)",native:Me.prototype._setFillColorInt,comment:o.fsSetFillColorCommentInt},{type:"method",signature:"final This setFillColor(int color, double alpha)",native:Me.prototype._setFillColorIntDouble,comment:o.fsSetFillColorCommentIntDouble},{type:"method",signature:"final This setFillColor(string color)",native:Me.prototype._setFillColorString,comment:o.fsSetFillColorCommentString},{type:"method",signature:"final This setFillColor(string color, double alpha)",native:Me.prototype._setFillColorStringDouble,comment:o.fsSetFillColorCommentStringDouble},{type:"method",signature:"Color getBorderColor()",native:Me.prototype._getBorderColor,comment:o.fsGetBorderColorComment},{type:"method",signature:"int getBorderColorAsInt()",native:Me.prototype._getBorderColorAsInt,comment:o.fsGetBorderColorComment},{type:"method",signature:"final This setBorderColor(Color color)",native:Me.prototype._setBorderColorColor,comment:o.fsSetBorderColorCommentColor},{type:"method",signature:"final This setBorderColor(Color color, double alpha)",native:Me.prototype._setBorderColorColor,comment:o.fsSetBorderColorCommentColor},{type:"method",signature:"final This setBorderColor(int color)",native:Me.prototype._setBorderColorInt,comment:o.fsSetBorderColorCommentInt},{type:"method",signature:"final This setBorderColor(int color, double alpha)",native:Me.prototype._setBorderColorIntDouble,comment:o.fsSetBorderColorCommentIntDouble},{type:"method",signature:"final This setBorderColor(string color)",native:Me.prototype._setBorderColorString,comment:o.fsSetBorderColorCommentString},{type:"method",signature:"final This setBorderColor(string color, double alpha)",native:Me.prototype._setBorderColorStringDouble,comment:o.fsSetBorderColorCommentStringDouble},{type:"method",signature:"final This setBorderWidth(double width)",native:Me.prototype._setBorderWidth,comment:o.fsSetBorderWidthComment},{type:"method",signature:"double getBorderWidth()",native:Me.prototype._getBorderWidth,comment:o.fsGetBorderWidthComment},{type:"method",signature:"final This setAlpha(double alpha)",native:Me.prototype._setAlpha,comment:o.fsSetAlphaComment},{type:"method",signature:"double getAlpha()",native:Me.prototype._getAlpha,comment:o.fsGetAlphaComment},{type:"method",signature:"static void setDefaultBorder(double width, string color)",native:Me._setDefaultBorder,comment:o.fsSetDefaultBorderComment1},{type:"method",signature:"static void setDefaultBorder(double width, int color, double alpha)",native:Me._setDefaultBorder,comment:o.fsSetDefaultBorderComment2},{type:"method",signature:"static void setDefaultFillColor(string color)",native:Me._setDefaultFillColor,comment:o.fsSetDefaultFillColor},{type:"method",signature:"static void setDefaultFillColor(int color, double alpha)",native:Me._setDefaultFillColor,comment:o.fsSetDefaultFillColor},{type:"method",signature:"static void setDefaultFillColor(int color)",native:Me._setDefaultFillColor,comment:o.fsSetDefaultFillColor}]),r(Me,"type");let Rt=Me;const Fi=class Fi extends Rt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"innerRadius");r(this,"outerRadius");r(this,"startAngleRad");r(this,"endAngleRad")}_cj$_constructor_$Arc$(e,i){this._cj$_constructor_$Arc$double$double$double$double$double$double(e,i,200,200,100,200,0,180)}_cj$_constructor_$Arc$double$double$double$double$double$double(e,i,n,s,a,l,h,u){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.innerRadius=a,this.outerRadius=l,this.startAngleRad=h/180*Math.PI,this.endAngleRad=u/180*Math.PI,this.render()})}_mj$copy$Shape$(e,i){this._mj$copy$Arc$(e,i)}_mj$copy$Arc$(e,i){let n=new Fi;n._cj$_constructor_$Arc$double$double$double$double$double$double(e,i,this.mx,this.my,this.innerRadius,this.outerRadius,this.startAngleRad,this.endAngleRad),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=this.endAngleRad-this.startAngleRad;for(let n=0;n<16;n++){let s=this.startAngleRad+e*n;this.hitPolygonInitial.push({x:this.mx+this.outerRadius*Math.cos(s),y:this.my+this.outerRadius*Math.sin(s)})}for(let n=0;n<16;n++){let s=this.endAngleRad-e*n;this.hitPolygonInitial.push({x:this.mx+this.innerRadius*Math.cos(s),y:this.my+this.innerRadius*Math.sin(s)})}this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new it,this.container=i,this.world.app.stage.addChild(i)):i.clear(),this.startAngleRad===void 0&&(this.startAngleRad=0),this.endAngleRad===void 0&&(this.endAngleRad=Math.PI*2),Math.abs(this.endAngleRad-this.startAngleRad)>=Math.PI*2?(i.circle(this.mx,this.my,this.outerRadius),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),i.circle(this.mx,this.my,this.innerRadius),i.cut()):(i.moveTo(this.mx+this.outerRadius*Math.cos(this.startAngleRad),this.my-this.outerRadius*Math.sin(this.startAngleRad)),i.lineTo(this.mx+this.innerRadius*Math.cos(this.startAngleRad),this.my-this.innerRadius*Math.sin(this.startAngleRad)),i.arc(this.mx,this.my,this.innerRadius,-this.startAngleRad,-this.endAngleRad,!0).arc(this.mx,this.my,this.outerRadius,-this.endAngleRad,-this.startAngleRad,!1),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha)),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setInnerRadius(e){this.innerRadius=e/this.container.scale.x,this.render()}_setOuterRadius(e){this.outerRadius=e/this.container.scale.x,this.render()}_setStartAngle(e){this.startAngleRad=e/180*Math.PI,this.render()}_setEndAngle(e){this.endAngleRad=e/180*Math.PI,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new me(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my,h=Math.atan2(-l,a),u=a*a+l*l;if(u<=this.outerRadius*this.outerRadius&&u>=this.innerRadius*this.innerRadius){let m=2*Math.PI,g=this.startAngleRad<0?m+this.startAngleRad:this.startAngleRad,f=this.endAngleRad<0?m+this.endAngleRad:this.endAngleRad,A=(h<0?m+h:h)>=g&&g<=f;return g<=f?A:!A}else return!1}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{startAngle: ${this.startAngleRad/Math.PI*180*this.scaleFactor}, endAngle: ${this.endAngleRad/Math.PI*180*this.scaleFactor}, innerRadius: ${this.innerRadius*this.scaleFactor}, outerRadius: ${this.outerRadius*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(Fi,"__javaDeclarations",[{type:"declaration",signature:"class Arc extends FilledShape",comment:o.ArcClassComment},{type:"method",signature:"Arc(double mx, double my, double innerRadius, double outerRadius, double startAngle, double endAngle)",java:Fi.prototype._cj$_constructor_$Arc$double$double$double$double$double$double,comment:o.ArcConstructorComment},{type:"method",signature:"Arc()",java:Fi.prototype._cj$_constructor_$Arc$,comment:o.ArcConstructorComment1},{type:"method",signature:"final void setInnerRadius(double innerRadius)",native:Fi.prototype._setInnerRadius,comment:o.ArcSetInnerRadiusComment},{type:"method",signature:"final double getInnerRadiusX()",template:"(§1.innerRadius*§1.scaleFactor)",comment:o.ArcGetInnerRadiusComment},{type:"method",signature:"final void setOuterRadius(double outerRadius)",native:Fi.prototype._setOuterRadius,comment:o.ArcSetOuterRadiusComment},{type:"method",signature:"final double getOuterRadiusX()",template:"(§1.outerRadius*§1.scaleFactor)",comment:o.ArcGetOuterRadiusComment},{type:"method",signature:"final void setStartAngle(double startAngle)",native:Fi.prototype._setStartAngle,comment:o.ArcSetStartAngleComment},{type:"method",signature:"final double getStartAngleX()",template:"(§1.startAngle/180*Math.PI)",comment:o.ArcGetStartAngleComment},{type:"method",signature:"final void setEndAngle(double endAngle)",native:Fi.prototype._setEndAngle,comment:o.ArcSetEndAngleComment},{type:"method",signature:"final double getEndAngleX()",template:"(§1.endAngle/180*Math.PI)",comment:o.ArcGetEndAngleComment},{type:"method",signature:"final Arc copy()",java:Fi.prototype._mj$copy$Arc$,comment:o.ArcCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:Fi.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:Fi.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Fi,"type");let Hc=Fi;const eo=class eo extends R{constructor(e,i){super();r(this,"x");r(this,"y");this.x=e||0,this.y=i||0}_cj$_constructor_$Position$int$int(e,i,n,s){this.x=n,this.y=s,e.s.push(this),i&&i()}_mj$toString$String$(e,i){e.s.push(new Y(`(${this.x}, ${this.y})`)),i&&i()}};r(eo,"__javaDeclarations",[{type:"declaration",signature:"class Position extends Object",comment:o.PositionClassComment},{type:"field",signature:"int x",comment:o.PositionXComment},{type:"field",signature:"int y",comment:o.PositionYComment},{type:"method",signature:"Position(int x, int y)",java:eo.prototype._cj$_constructor_$Position$int$int,comment:o.PositionConstructorComment},{type:"method",signature:"String toString()",java:eo.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(eo,"type");let Ml=eo;function Yw(c){throw new Error('Could not dynamically require "'+c+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}const ot=class ot extends dn{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height");r(this,"anzahlX");r(this,"anzahlY");r(this,"texture");r(this,"ts");r(this,"data");r(this,"isBigEndian",!0);r(this,"timerID")}_cj$_constructor_$Bitmap$int$int$double$double$double$double(e,i,n,s,a,l,h,u,m,g=!1){this._cj$_constructor_$Shape$(e,()=>{this.centerXInitial=a+h/2,this.centerYInitial=l+u/2,this.left=a,this.top=l,this.width=h,this.height=u,this.anzahlX=n,this.anzahlY=s,this.initBitmap(m,g)})}initBitmap(e,i=!1){let n=new Uint32Array([287454020]),s=new Uint8Array(n.buffer);s[0]===68?this.isBigEndian=!1:s[0]===17&&(this.isBigEndian=!0),this.centerXInitial=this.left+this.width/2,this.centerYInitial=this.top+this.height/2,this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+this.height},{x:this.left+this.width,y:this.top+this.height},{x:this.left+this.width,y:this.top}],this.initGraphics(e,i);let a=this.container;a.localTransform.scale(this.width/this.anzahlX,this.height/this.anzahlY),a.localTransform.translate(this.left,this.top),a.setFromMatrix(a.localTransform),a.updateLocalTransform(),a._didLocalTransformChangeId=a._didChangeId,this.setWorldTransformAndHitPolygonDirty();let l=new me(this.centerXInitial,this.centerYInitial);a.localTransform.applyInverse(l,l),this.centerXInitial=l.x,this.centerYInitial=l.y}initGraphics(e,i=!1){e==null?this.data=new Uint32Array(this.anzahlX*this.anzahlY):i?this.data=e.data:this.data=new Uint32Array(e.data);let n=new Uint8Array(this.data.buffer);i?this.texture=e.texture:this.texture=Np.from(new qp({resource:n,width:this.anzahlX,height:this.anzahlY,scaleMode:"nearest",format:"rgba8unorm",alphaMode:"premultiplied-alpha"})),this.container=new tr(this.texture),this.world.app.stage.addChild(this.container)}_mj$copy$Shape$(e,i){this._mj$copy$Bitmap$(e,i)}_mj$copy$Bitmap$(e,i){let n=new ot;n._cj$_constructor_$Bitmap$int$int$double$double$double$double(e,i,this.anzahlX,this.anzahlY,this.left,this.top,this.width,this.height,this,!0),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){}uploadData(){this.timerID||(this.timerID=setTimeout(()=>{this.texture.source.update(),this.timerID=void 0},100))}_getColor(e,i){let n=e+i*this.anzahlX,s=this.data[n],a=new hs;return a.red=s&255,a.green=(s&65280)>>8,a.blue=(s&16711680)>>16,a.alpha=1,a}_getColorAsInt(e,i){let n=e+i*this.anzahlX,s=this.data[n];return((s&255)<<16)+(s&65280)+((s&16711680)>>16)}_getAlpha(e,i){let n=e+i*this.anzahlX;return((this.data[n]&4278190080)>>>24)/255}_isColor(e,i,n,s){let a=e+i*this.anzahlX,l;if(typeof n=="string"){let f=Ke.parseColorToOpenGL(n);l=f.color,f.alpha}else l=n;let h=this.data[a],u=h&255,m=(h&65280)>>8,g=(h&16711680)>>16;return l==u*65536+m*256+g}_setColor(e,i,n,s){if(e<0||e>this.anzahlX||i<0||i>this.anzahlY)throw new W(o.BitmapCoordinatesOutOfBoundsException(e,i,this.anzahlX,this.anzahlY));let a=e+i*this.anzahlX,l;if(typeof n=="string"){let h=Ke.parseColorToOpenGL(n);l=h.color,s==null&&(s=h.alpha)}else l=n,s==null&&(s=1);l&&(this.data[a]=Math.round(s*255)*16777216+((l&255)<<16)+(l&65280)+((l&16711680)>>16),this.uploadData())}_fillAll(e,i){let n;if(typeof e=="string"){let s=Ke.parseColorToOpenGL(e);n=s.color,i=s.alpha}else n=e;n&&i&&(this.data.fill(Math.round(i*255)*16777216+((n&255)<<16)+(n&65280)+((n&16711680)>>16)),this.uploadData())}_downloadAsPngFile(e){let i=Fo.encode([this.data.buffer],this.anzahlX,this.anzahlY,0),n=new Uint8Array(i);if(window.navigator&&window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(blob,e);else{var s=document.createEvent("MouseEvents"),a=document.createElement("a");a.download=e,a.href=window.URL.createObjectURL(new Blob([n],{type:"application/octet-stream"})),a.dataset.downloadurl=["image/png",a.download,a.href].join(":"),s.initEvent("click",!0,!1,window,0,0,0,0,0,!1,!1,!1,!1,0,null),a.dispatchEvent(s),a.remove()}}setzeFarbeRGBA(e,i,n,s,a,l){let h=l*4278190080+a*65536+s*256+n,u=e+i*this.anzahlX;this.data[u]=h,this.uploadData()}getFarbe(e,i){let n=this.data[e+i*this.anzahlX]&16777215;return(n&255)<<16+(n&65280)+(n&16711680)>>16}getAlpha(e,i){return(this.data[e+i*this.anzahlX]&4278190080)>>24/255}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{width: ${this.width*this.scaleFactor}, height: ${this.height*this.scaleFactor}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}_worldCoordinatesToBitmapCoordinates(e,i){let n=Math.trunc((e-this.top)/this.width*this.anzahlX),s=Math.trunc((i-this.top)/this.width*this.anzahlY);return new Ml(n,s)}_getResolutionX(){return this.anzahlX}_getResolutionY(){return this.anzahlY}};r(ot,"__javaDeclarations",[{type:"declaration",signature:"class Bitmap extends Shape",comment:o.BitmapClassComment},{type:"method",signature:"Bitmap(int resolutionX, int resolutionY, double left, double top, double displayWidth, double displayHeight)",java:ot.prototype._cj$_constructor_$Bitmap$int$int$double$double$double$double,comment:o.BitmapConstructorComment},{type:"method",signature:"final int getResolutionX()",native:ot.prototype._getResolutionX,comment:o.BitmapGetResolutionXComment},{type:"method",signature:"final int getResolutionY()",native:ot.prototype._getResolutionY,comment:o.BitmapGetResolutionYComment},{type:"method",signature:"final void setColor(int x, int y, int color, double alpha)",native:ot.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final void setColor(int x, int y, string color, double alpha)",native:ot.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final void setColor(int x, int y, int color)",native:ot.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final void setColor(int x, int y, string color)",native:ot.prototype._setColor,comment:o.BitmapSetColorComment},{type:"method",signature:"final Color getColor(int x, int y)",native:ot.prototype._getColor,comment:o.BitmapGetColorComment},{type:"method",signature:"final int getColorAsInt(int x, int y)",native:ot.prototype._getColorAsInt,comment:o.BitmapGetColorComment},{type:"method",signature:"double getAlpha(int x, int y)",native:ot.prototype._getAlpha,comment:o.BitmapGetPixelAlphaComment},{type:"method",signature:"final boolean isColor(int x, int y, string colorAsRGBString)",native:ot.prototype._isColor,comment:o.BitmapIsColorComment},{type:"method",signature:"final boolean isColor(int x, int y, int color)",native:ot.prototype._isColor,comment:o.BitmapIsColorComment},{type:"method",signature:"final Position screenCoordinatesToBitmapCoordinates(double x, double y)",native:ot.prototype._worldCoordinatesToBitmapCoordinates,comment:o.BitmapWorldCoordinatesToBitmapCoordinatesComment},{type:"method",signature:"final void fillAll(int color, double alpha)",native:ot.prototype._fillAll,comment:o.BitmapFillAllComment},{type:"method",signature:"final void fillAll(string colorAsRGBString, double alpha)",native:ot.prototype._fillAll,comment:o.BitmapFillAllComment},{type:"method",signature:"final void downloadAsPngFile(string filename)",native:ot.prototype._downloadAsPngFile,comment:o.BitmapDownloadAsPngFileComment},{type:"method",signature:"final Bitmap copy()",java:ot.prototype._mj$copy$Bitmap$,comment:o.BitmapCopyComment},{type:"method",signature:"String toString()",java:ot.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(ot,"type");let Kc=ot;const vn=class vn extends Rt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"radius")}get scaledRadius(){return this.scaleFactor*this.radius}_cj$_constructor_$Circle$(e,i){this._cj$_constructor_$Circle$double$double$double(e,i,50,50,50)}_cj$_constructor_$Circle$double$double$double(e,i,n,s,a){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.radius=a,this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Circle$(e,i)}_mj$copy$Circle$(e,i){let n=new vn;n._cj$_constructor_$Circle$double$double$double(e,i,this.mx,this.my,this.radius),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=Math.PI/8;for(let n=0;n<16;n++){let s=e*n;this.hitPolygonInitial.push({x:this.mx+this.radius*Math.cos(s),y:this.my+this.radius*Math.sin(s)})}this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new it,this.container=i,this.world.app.stage.addChild(i)):i.clear(),i.circle(this.mx,this.my,this.radius),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setRadius(e){this.radius=e/this.container.scale.x,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new me(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my;return a*a+l*l<=this.radius*this.radius}_collidesWith(e){if(e instanceof vn){let i=new me(this.centerXInitial,this.centerYInitial);this.container.worldTransform.apply(i,i);let n=this.radius*this.container.scale.x,s=new me(e.centerXInitial,e.centerYInitial);e.container.worldTransform.apply(s,s);let a=e.radius*e.container.scale.x,l=i.x-s.x,h=i.y-s.y;return l*l+h*h<=(n+a)*(n+a)}else return super._collidesWith(e)}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{r: ${this.radius*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(vn,"__javaDeclarations",[{type:"declaration",signature:"class Circle extends FilledShape",comment:o.circleClassComment},{type:"field",signature:"private double radius",nativeIdentifier:"scaledRadius"},{type:"method",signature:"Circle()",java:vn.prototype._cj$_constructor_$Circle$,comment:o.circleEmptyConstructorComment},{type:"method",signature:"Circle(double mx, double my, double r)",java:vn.prototype._cj$_constructor_$Circle$double$double$double,comment:o.circleConstructorComment},{type:"method",signature:"final void setRadius(double radius)",native:vn.prototype._setRadius,comment:o.circleSetRadiusComment},{type:"method",signature:"final double getRadius()",template:"(§1.radius*§1.scaleFactor)",comment:o.circleGetRadiusComment},{type:"method",signature:"final Circle copy()",java:vn.prototype._mj$copy$Circle$,comment:o.circleCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:vn.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:vn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(vn,"type");let Pl=vn;const ll=class ll extends R{constructor(t,e){super(),this.shapeA=t,this.shapeB=e}_collisionPairConstructor(t,e){return super._constructor(),this.shapeA=t,this.shapeB=e,this}};r(ll,"__javaDeclarations",[{type:"declaration",signature:"class CollisionPair extends Object",comment:o.collisionPairClassComment},{type:"method",signature:"CollisionPair(U ShapeA, V shapeB)",native:ll.prototype._collisionPairConstructor,comment:o.collisionPairConstructorComment},{type:"field",signature:"public U shapeA",comment:o.collisionPairShapeAComment},{type:"field",signature:"public V shapeB",comment:o.collisionPairShapeBComment}]),r(ll,"type");let qd=ll;const An=class An extends Rt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"radiusX");r(this,"radiusY")}get scaledRadiusX(){return this.scaleFactor*this.radiusX}get scaledRadiusY(){return this.scaleFactor*this.radiusY}_cj$_constructor_$Ellipse$(e,i){this._cj$_constructor_$Ellipse$double$double$double$double(e,i,200,100,100,50)}_cj$_constructor_$Ellipse$double$double$double$double(e,i,n,s,a,l){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.radiusX=a,this.radiusY=l,this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Ellipse$(e,i)}_mj$copy$Ellipse$(e,i){let n=new An;n._cj$_constructor_$Ellipse$double$double$double$double(e,i,this.mx,this.my,this.radiusX,this.radiusY),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=Math.PI/8;for(let n=0;n<16;n++){let s=e*n;this.hitPolygonInitial.push({x:this.mx+this.radiusX*Math.cos(s),y:this.my+this.radiusY*Math.sin(s)})}this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new it,this.container=i,this.world.app.stage.addChild(i)):i.clear(),i.ellipse(this.mx,this.my,this.radiusX,this.radiusY),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setRadiusX(e){this.radiusX=e/this.container.scale.x,this.render()}_setRadiusY(e){this.radiusY=e/this.container.scale.y,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new me(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my;return a*a/(this.radiusX*this.radiusX)+l*l/(this.radiusY*this.radiusY)<=1}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{rx: ${this.radiusX*this.scaleFactor}, ry: ${this.radiusY*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(An,"__javaDeclarations",[{type:"declaration",signature:"class Ellipse extends FilledShape",comment:o.EllipseClassComment},{type:"field",signature:"private double radiusX",nativeIdentifier:"scaledRadiusX"},{type:"field",signature:"private double radiusY",nativeIdentifier:"scaledRadiusY"},{type:"method",signature:"Ellipse()",java:An.prototype._cj$_constructor_$Ellipse$,comment:o.EllipseEmptyConstructorComment},{type:"method",signature:"Ellipse(double mx, double my, double rx, double ry)",java:An.prototype._cj$_constructor_$Ellipse$double$double$double$double,comment:o.EllipseConstructorComment},{type:"method",signature:"final void setRadiusX(double radiusX)",native:An.prototype._setRadiusX,comment:o.EllipseSetRadiusXComment},{type:"method",signature:"final double getRadiusX()",template:"(§1.radiusX*§1.scaleFactor)",comment:o.EllipseGetRadiusXComment},{type:"method",signature:"final void setRadiusY(double radiusY)",native:An.prototype._setRadiusY,comment:o.EllipseSetRadiusYComment},{type:"method",signature:"final double getRadiusY()",template:"(§1.radiusY*§1.scaleFactor)",comment:o.EllipseGetRadiusYComment},{type:"method",signature:"final Ellipse copy()",java:An.prototype._mj$copy$Ellipse$,comment:o.EllipseCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:An.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:An.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(An,"type");let Rd=An;var Gd;(c=>{function t(n){let s=n.slice();return s.sort(c.POINT_COMPARATOR),c.makeHullPresorted(s)}c.makeHull=t;function e(n){if(n.length<=1)return n.slice();let s=[];for(let l=0;l=2;){const u=s[s.length-1],m=s[s.length-2];if((u.x-m.x)*(h.y-m.y)>=(u.y-m.y)*(h.x-m.x))s.pop();else break}s.push(h)}s.pop();let a=[];for(let l=n.length-1;l>=0;l--){const h=n[l];for(;a.length>=2;){const u=a[a.length-1],m=a[a.length-2];if((u.x-m.x)*(h.y-m.y)>=(u.y-m.y)*(h.x-m.x))a.pop();else break}a.push(h)}return a.pop(),s.length==1&&a.length==1&&s[0].x==a[0].x&&s[0].y==a[0].y?s:s.concat(a)}c.makeHullPresorted=e;function i(n,s){return n.xs.x?1:n.ys.y?1:0}c.POINT_COMPARATOR=i})(Gd||(Gd={}));const wn=class wn{static getPolygonForTexture(t,e,i,n){e==null&&(e=0),t+="#"+e;let s=wn.polygonStore[t];return s==null&&(s=wn.getPolygon(n,i.world),wn.polygonStore[t]=s),s}static getPolygon(t,e){let n=e.app.renderer.extract.pixels(t).pixels,s=t.width,a=t.height;if(n.length!==4*s*a)return[{x:0,y:0},{x:s,y:0},{x:s,y:a},{x:0,y:a}];let l=[],u=3*2+3,m=[];wn.addPointsOnLine({x:0,y:0},{x:s-1,y:0},u,m),wn.addPointsOnLine({x:s-1,y:0},{x:s-1,y:a-1},u,m),wn.addPointsOnLine({x:s-1,y:a-1},{x:0,y:a-1},u,m),wn.addPointsOnLine({x:0,y:a-1},{x:0,y:0},u,m);let g={x:s/2,y:a/2};for(let b of m)wn.probe(l,b,g,s,a,n);let f=!1;for(;!f;){f=!0;for(let b=0;bi||e>n?!0:s[4*Math.round(t)+4*i*Math.round(e)+3]==0}};r(wn,"polygonStore",{});let Uc=wn;var Ys=(c=>(c[c.once=0]="once",c[c.onceWithoutDestroying=1]="onceWithoutDestroying",c[c.loop=2]="loop",c[c.backAndForth=3]="backAndForth",c))(Ys||{});const Lr=class Lr extends Yi{};r(Lr,"__javaDeclarations",[{type:"declaration",signature:"enum RepeatType",comment:o.repeatTypeEnumComment}]),r(Lr,"type"),r(Lr,"values",[new Lr("once",0),new Lr("onceWithoutDestroying",1),new Lr("loop",2),new Lr("backAndForth",3)]);let Qc=Lr;var Id=(c=>(c[c.linear=0]="linear",c[c.nearest_neighbour=1]="nearest_neighbour",c))(Id||{});const ra=class ra extends Yi{};r(ra,"__javaDeclarations",[{type:"declaration",signature:"enum ScaleMode",comment:o.scaleModeEnumComment}]),r(ra,"type"),r(ra,"values",[new ra("linear",0),new ra("nearest_neighbour",1)]);let Hd=ra;var Ol=[{filename:"ship_1.png",name:"Ship_1",index:0,scale:.8},{filename:"ship_2.png",name:"Ship_1",index:1,scale:.8},{filename:"ship_3.png",name:"Ship_1",index:2,scale:.8},{filename:"Schaufel.png",name:"Werkzeug",index:0,scale:1},{filename:"minesweeper/minesweeper.png",name:"Minesweeper",tilesX:20,tilesY:1,spacingX:1,scale:1,index:0},{filename:"minesweeper/minesweeper-numbers.png",name:"Minesweeper",tilesX:10,tilesY:1,scale:1,index:22},{filename:"Sleepy_Blocks/sleepy_blocks.png",name:"Sleepy_Blocks",tilesX:8,tilesY:1,spacingX:2,spacingY:2,scale:1,index:0,extrudeMarginWidth:1},{filename:"flappy_bird/bird1.png",name:"Bird",index:0,indexName:"Bird"},{filename:"flappy_bird/bird2.png",name:"Bird",index:1,indexName:"Bird"},{filename:"flappy_bird/bird3.png",name:"Bird",index:2,indexName:"Bird"},{filename:"flappy_bird/Baeume.png",name:"Bird",index:3,indexName:"Bird"},{filename:"flappy_bird/houses.png",name:"Bird",index:4,indexName:"Bird"},{filename:"flappy_bird/Leiste.png",name:"Bird",index:5,indexName:"Bird"},{filename:"flappy_bird/Saeule.png",name:"Bird",index:6,indexName:"Bird"},{filename:"flappy_bird/Wolken.png",name:"Bird",index:7,indexName:"Bird"},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0004_geradeaus.png",name:"Space_Shooter_1",index:0},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0001_runter1.png",name:"Space_Shooter_1",index:1},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0000_runter2.png",name:"Space_Shooter_1",index:2},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0003_hoch1.png",name:"Space_Shooter_1",index:3},{filename:"Raumschiff_Adrian/NeuesRaumschiff/raumschiff_0002_hoch2.png",name:"Space_Shooter_1",index:4},{filename:"Raumschiff_Adrian/NeuerSchuss.png",name:"Space_Shooter_1",index:5},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0000.png",name:"Space_Shooter_1",index:6},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0001.png",name:"Space_Shooter_1",index:7},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0002.png",name:"Space_Shooter_1",index:8},{filename:"Raumschiff_Adrian/Schussanimation/schuss_0003.png",name:"Space_Shooter_1",index:9},{filename:"Raumschiff_Adrian/Asteroid.png",name:"Space_Shooter_1",index:10},{filename:"Raumschiff_Adrian/Gegner.png",name:"Space_Shooter_1",index:11},{filename:"Raumschiff_Adrian/Explosion/explosion_0000_..png",name:"Space_Shooter_1",index:12},{filename:"Raumschiff_Adrian/Explosion/explosion_0001_..png",name:"Space_Shooter_1",index:13},{filename:"Raumschiff_Adrian/Explosion/explosion_0002_..png",name:"Space_Shooter_1",index:14},{filename:"Raumschiff_Adrian/Explosion/explosion_0003_..png",name:"Space_Shooter_1",index:15},{filename:"Raumschiff_Adrian/Explosion/explosion_0004_..png",name:"Space_Shooter_1",index:16},{filename:"Raumschiff_Adrian/Explosion/explosion_0005_..png",name:"Space_Shooter_1",index:17},{filename:"Raumschiff_Adrian/Explosion/explosion_0006_..png",name:"Space_Shooter_1",index:18},{filename:"Raumschiff_Adrian/Explosion/explosion_0007_..png",name:"Space_Shooter_1",index:19},{filename:"Raumschiff_Adrian/Explosion/explosion_0008_..png",name:"Space_Shooter_1",index:20},{filename:"Raumschiff_Adrian/Explosion/explosion_0009_..png",name:"Space_Shooter_1",index:21},{filename:"Raumschiff_Adrian/Explosion/explosion_0010_..png",name:"Space_Shooter_1",index:22},{filename:"Raumschiff_Adrian/Explosion/explosion_0011_..png",name:"Space_Shooter_1",index:23},{filename:"classics/spaceship_1.png",name:"Space_Shooter_2",index:0},{filename:"classics/spaceship_2.png",name:"Space_Shooter_2",index:1},{filename:"classics/spaceship_3.png",name:"Space_Shooter_2",index:2},{filename:"classics/spaceship_4.png",name:"Space_Shooter_2",index:3},{filename:"classics/spaceship_5.png",name:"Space_Shooter_2",index:4},{filename:"classics/spaceship_6.png",name:"Space_Shooter_2",index:5},{filename:"classics/spaceship_7.png",name:"Space_Shooter_2",index:6},{filename:"classics/spaceship_8.png",name:"Space_Shooter_2",index:7},{filename:"classics/spaceship_9.png",name:"Space_Shooter_2",index:8},{filename:"classics/missile_1.png",name:"Space_Shooter_2",index:9},{filename:"classics/missile_2.png",name:"Space_Shooter_2",index:10},{filename:"classics/missile_3.png",name:"Space_Shooter_2",index:11},{filename:"classics/missile_4.png",name:"Space_Shooter_2",index:12},{filename:"classics/missile_5.png",name:"Space_Shooter_2",index:13},{filename:"classics/missile_6.png",name:"Space_Shooter_2",index:14},{filename:"classics/missile_7.png",name:"Space_Shooter_2",index:15},{filename:"classics/missile_8.png",name:"Space_Shooter_2",index:16},{filename:"classics/missile_9.png",name:"Space_Shooter_2",index:17},{filename:"classics/missile_10.png",name:"Space_Shooter_2",index:18},{filename:"classics/missile_11.png",name:"Space_Shooter_2",index:19},{filename:"classics/missile_12.png",name:"Space_Shooter_2",index:20},{filename:"classics/satellite_1.png",name:"Space_Shooter_2",index:21},{filename:"classics/satellite_2.png",name:"Space_Shooter_2",index:22},{filename:"particles/Flare_1.png",name:"Particles",index:0},{filename:"particles/orb.png",name:"Particles",index:1},{filename:"particles/white.png",name:"Particles",index:2},{filename:"particles/ring.png",name:"Particles",index:3},{filename:"particles/soft5.png",name:"Particles",index:4},{filename:"particles/soft9.png",name:"Particles",index:5},{filename:"particles/smoke0.png",name:"Particles",index:6},{filename:"particles/soft1.png",name:"Particles",index:7},{filename:"particles/soft7.png",name:"Particles",index:8},{filename:"particles/soft2.png",name:"Particles",index:9},{filename:"particles/smoke-puff.png",name:"Particles",index:10},{filename:"particles/white-smoke.png",name:"Particles",index:11},{filename:"classics/sokoban_man_horizontal.png",name:"Soko",tilesX:3,tilesY:1,spacingX:2,spacingY:0,scale:1,index:0,extrudeMarginWidth:1},{filename:"classics/sokoban_man_vertical.png",name:"Soko",tilesX:6,tilesY:1,spacingX:2,spacingY:0,scale:1,index:3,extrudeMarginWidth:1},{filename:"classics/sokoban_box_1.png",name:"Soko",index:9,extrudeMarginWidth:1},{filename:"classics/sokoban_box_2.png",name:"Soko",index:10,extrudeMarginWidth:1},{filename:"classics/sokoban_empty.png",name:"Soko",index:11,extrudeMarginWidth:1},{filename:"classics/sokoban_wall.png",name:"Soko",index:12,extrudeMarginWidth:1},{filename:"classics/sokoban_target.png",name:"Soko",index:13,extrudeMarginWidth:1},{filename:"classics/pacman_characters.png",name:"PMan",tilesX:22,tilesY:1,spacingX:2,spacingY:0,scale:1,index:0},{filename:"classics/pacman_maze.png",name:"PMan",tilesX:15,tilesY:1,spacingX:2,spacingY:0,scale:1,index:22},{filename:"classics/bo_bat_long.png",name:"Breakin",index:0},{filename:"classics/bo_bat_short.png",name:"Breakin",index:1},{filename:"classics/bo_ball_blue.png",name:"Breakin",index:2},{filename:"classics/bo_ball_gray.png",name:"Breakin",index:3},{filename:"classics/bo_rechteck.png",name:"Breakin",index:4},{filename:"classics/bo_rechteck_active.png",name:"Breakin",index:5},{filename:"classics/bo_quadrat.png",name:"Breakin",index:6},{filename:"classics/bo_quadrat_active.png",name:"Breakin",index:7},{filename:"classics/bo_fuenfeck.png",name:"Breakin",index:8},{filename:"classics/bo_fuenfeck_active.png",name:"Breakin",index:9},{filename:"classics/bo_raute.png",name:"Breakin",index:10},{filename:"classics/bo_raute_active.png",name:"Breakin",index:11},{filename:"classics/bo_star1.png",name:"Breakin",index:12},{filename:"classics/bo_star2.png",name:"Breakin",index:13},{filename:"classics/Chess.png",name:"Boardgames",tilesX:6,tilesY:2,spacingX:2,spacingY:2,scale:1,index:0},{filename:"classics/Spielstein.png",name:"Boardgames",index:12},{filename:"classics/wuerfel_1.png",name:"Boardgames",index:13},{filename:"classics/wuerfel_2.png",name:"Boardgames",index:14},{filename:"classics/wuerfel_3.png",name:"Boardgames",index:15},{filename:"classics/wuerfel_4.png",name:"Boardgames",index:16},{filename:"classics/wuerfel_5.png",name:"Boardgames",index:17},{filename:"classics/wuerfel_6.png",name:"Boardgames",index:18},{filename:"plattformer/Tiles_and_enemies_64x64.png",name:"Plattforms",tilesX:22,tilesY:16,spacingX:2,spacingY:2,scale:1,index:0,extrudeMarginWidth:1},{filename:"tower-defense/tower-defense.png",name:"TowerDefense",tilesX:18,tilesY:10,spacingX:2,spacingY:2,scale:1,index:0,extrudeMarginWidth:1},{filename:"plattformer/male.png",name:"Characters_1",tilesX:6,tilesY:2,spacingX:0,spacingY:0,scale:1,index:0},{filename:"plattformer/background_grass.png",name:"Background",index:0,scale:.2},{filename:"plattformer/background_mountains.png",name:"Background",index:1,scale:.2},{filename:"plattformer/background_sky.png",name:"Background",index:2,scale:.2},{filename:"plattformer/cloud1.png",name:"Background",index:3,scale:.5},{filename:"plattformer/cloud2.png",name:"Background",index:4,scale:.5},{filename:"plattformer/cloud3.png",name:"Background",index:5,scale:.5},{filename:"plattformer/cloud4.png",name:"Background",index:6,scale:.5},{filename:"plattformer/grass1.png",name:"Background",index:7},{filename:"plattformer/grass2.png",name:"Background",index:8},{filename:"plattformer/grass3.png",name:"Background",index:9},{filename:"plattformer/tree1.png",name:"Background",index:10,scale:.5},{filename:"plattformer/tree2.png",name:"Background",index:11,scale:.5},{filename:"plattformer/tree3.png",name:"Background",index:12,scale:.5},{filename:"frogger/Frogger_1.png",name:"Frogger",tilesX:3,tilesY:1,spacingX:2,spacingY:0,scale:1,index:0,extrudeMarginWidth:1},{filename:"frogger/Frogger_car.png",name:"Frogger",tilesX:2,tilesY:1,spacingX:2,spacingY:0,scale:1,index:3,extrudeMarginWidth:1},{filename:"3d/minecraft_grass.png",name:"robot",tilesX:1,tilesY:1,index:0},{filename:"3d/tiled_grass.png",name:"robot",tilesX:1,tilesY:1,index:2},{filename:"3d/grass_side.png",name:"robot",tilesX:1,tilesY:1,index:3},{filename:"3d/brick3d_red.png",name:"robot",tilesX:1,tilesY:1,index:4},{filename:"3d/brick3d_yellow.png",name:"robot",tilesX:1,tilesY:1,index:5},{filename:"3d/brick3d_green.png",name:"robot",tilesX:1,tilesY:1,index:6},{filename:"3d/brick3d_blue.png",name:"robot",tilesX:1,tilesY:1,index:7},{filename:"3d/rock.png",name:"robot",tilesX:1,tilesY:1,index:8},{filename:"3d/bedrock.png",name:"robot",tilesX:1,tilesY:1,index:9},{filename:"3d/earth.png",name:"robot",tilesX:1,tilesY:1,index:10},{filename:"3d/north.png",name:"robot",tilesX:1,tilesY:1,index:11},{filename:"3d/axis_x.png",name:"standard_textures",tilesX:1,tilesY:1,index:0},{filename:"3d/axis_y.png",name:"standard_textures",tilesX:1,tilesY:1,index:1},{filename:"3d/axis_z.png",name:"standard_textures",tilesX:1,tilesY:1,index:2},{filename:"pixelmon/creature1.png",name:"pixelmon",index:0},{filename:"pixelmon/creature2.png",name:"pixelmon",index:1},{filename:"pixelmon/creature3.png",name:"pixelmon",index:2},{filename:"pixelmon/flowersblue.png",name:"pixelmon",index:3},{filename:"pixelmon/flowersred.png",name:"pixelmon",index:4},{filename:"pixelmon/flowerswhite.png",name:"pixelmon",index:5},{filename:"pixelmon/tree.png",name:"pixelmon",index:6},{filename:"pixelmon/grass.png",name:"pixelmon",index:7},{filename:"pixelmon/highgrass.png",name:"pixelmon",index:8},{filename:"pixelmon/highgrassoverlay.png",name:"pixelmon",index:9},{filename:"pixelmon/itembucket.png",name:"pixelmon",index:10},{filename:"pixelmon/plattform.png",name:"pixelmon",index:11},{filename:"pixelmon/player1back.png",name:"pixelmon",index:12},{filename:"pixelmon/player1backwalk1.png",name:"pixelmon",index:13},{filename:"pixelmon/player1backwalk2.png",name:"pixelmon",index:14},{filename:"pixelmon/player1front.png",name:"pixelmon",index:15},{filename:"pixelmon/player1frontwalk1.png",name:"pixelmon",index:16},{filename:"pixelmon/player1frontwalk2.png",name:"pixelmon",index:17},{filename:"pixelmon/player1side.png",name:"pixelmon",index:18},{filename:"pixelmon/player1sidewalk1.png",name:"pixelmon",index:19},{filename:"pixelmon/player1sidewalk2.png",name:"pixelmon",index:20},{filename:"pixelmon/wall1.png",name:"pixelmon",index:21},{filename:"pixelmon/wall2.png",name:"pixelmon",index:22},{filename:"pixelmon/wall3.png",name:"pixelmon",index:23},{filename:"pixelmon/wall4.png",name:"pixelmon",index:24},{filename:"pixelmon/wallstairs1.png",name:"pixelmon",index:25},{filename:"pixelmon/wallstairs2.png",name:"pixelmon",index:26},{filename:"pixelmon/wallstairs3.png",name:"pixelmon",index:27},{filename:"pixelmon/wallstairs4.png",name:"pixelmon",index:28},{filename:"pixelmon/water1.png",name:"pixelmon",index:29},{filename:"pixelmon/water2.png",name:"pixelmon",index:30},{filename:"pixelmon/water3.png",name:"pixelmon",index:31},{filename:"pixelmon/water4.png",name:"pixelmon",index:32},{filename:"pixelmon/way1.png",name:"pixelmon",index:33},{filename:"pixelmon/way2.png",name:"pixelmon",index:34},{filename:"pixelmon/way3.png",name:"pixelmon",index:35},{filename:"pixelmon/way4.png",name:"pixelmon",index:36},{filename:"pixelmon/way5.png",name:"pixelmon",index:37},{filename:"pixelmon/way6.png",name:"pixelmon",index:38},{filename:"pixelmon/way7.png",name:"pixelmon",index:39},{filename:"pixelmon/way8.png",name:"pixelmon",index:40},{filename:"pixelmon/whitefence1.png",name:"pixelmon",index:41},{filename:"pixelmon/whitefence2.png",name:"pixelmon",index:42},{filename:"pixelmon/woodfence1.png",name:"pixelmon",index:43},{filename:"pixelmon/woodfence2.png",name:"pixelmon",index:44},{filename:"little_figure/Animation_Run/Run0.png",name:"Sneaker",index:0},{filename:"little_figure/Animation_Run/Run1.png",name:"Sneaker",index:1},{filename:"little_figure/Animation_Run/Run2.png",name:"Sneaker",index:2},{filename:"little_figure/Animation_Sneak/Sneak0.png",name:"Sneaker",index:3},{filename:"little_figure/Animation_Sneak/Sneak1.png",name:"Sneaker",index:4},{filename:"little_figure/Animation_Sneak/Sneak2.png",name:"Sneaker",index:5},{filename:"javakara/bugeast_r.gif",name:"Kara",index:0},{filename:"javakara/object_leaf.gif",name:"Kara",index:1},{filename:"javakara/object_mushroom.gif",name:"Kara",index:2},{filename:"javakara/object_tree.gif",name:"Kara",index:3},{filename:"javahamster/hamster_bottom.png",name:"Hamster",index:0},{filename:"javahamster/grain.png",name:"Hamster",index:1},{filename:"javahamster/wall.png",name:"Hamster",index:2}];function Ip(c,t){let e=""+c;for(;e.length{for(let c=0;c<56;c++)Ol.push({filename:"explosion-images/explosion"+Ip(c,4)+".png",name:"Explosion_1",index:c});for(let c=1;c<=10;c++)Ol.push({filename:"boulders/image_part_"+Ip(c,3)+".png",name:"Boulders",index:c-1})};$y();typeof module<"u"&&(module.exports=Ol);const Xi=class Xi extends Yi{constructor(t,e,i=!1){super(t,e)}static initValues(){let t=0;return Ol.filter(e=>e.index==null||e.index==0).map(e=>new Xi(e.name,t++))}static getUserSpritesheetsForTypeId(t){let e=this.typeIdToUserSpritesheetsMap.get(t);return e||(e=new Map,this.typeIdToUserSpritesheetsMap.set(t,e)),e}static addEntry(t,e){let i=Xi.getUserSpritesheetsForTypeId(e.id),n=new Xi(t,Xi.values.length+i.size);i.set(t,n);let s=new Hi(t,oe.instance,e.module,e,p.keywordPublic);s._isStatic=!0,s._isFinal=!0,s.type=e,s.classEnum=e,e.fields.push(s)}static removeUserSpritesheets(t){Xi.getUserSpritesheetsForTypeId(t.id).forEach((i,n)=>{t.removeField(n)}),this.typeIdToUserSpritesheetsMap.delete(t.id)}static getSpriteLibrary(t,e){let i=Xi[e];return i||this.getUserSpritesheetsForTypeId(t).get(e)||null}};r(Xi,"__javaDeclarations",[{type:"declaration",signature:"enum SpriteLibrary",comment:o.spriteLibraryComment}]),r(Xi,"type"),r(Xi,"values",Xi.initValues()),r(Xi,"typeIdToUserSpritesheetsMap",new Map);let Kd=Xi;var rd,Yc;const ze=class ze extends dn{constructor(){super(...arguments);J(this,rd);r(this,"animationIndices",[]);r(this,"animationRuns",!1);r(this,"imagesPerMillisecond",1);r(this,"animationTime",0);r(this,"animationPaused",!1);r(this,"repeatTypeOrdinal",Ys.once);r(this,"scaleModeOrdinal");r(this,"textureName","");r(this,"isTileSprite",!1);r(this,"x");r(this,"y");r(this,"spriteLibrary");r(this,"imageIndex",0);r(this,"pixels");r(this,"oldTexture",null)}_cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,n,s,a,l,h,u){this._cj$_constructor_$Shape$(e,async()=>{if(this.x=n,this.y=s,this.scaleModeOrdinal=(h==null?void 0:h.ordinal)??Id.nearest_neighbour,u==null){this.spriteLibrary=typeof a=="string"?a:a.name,this.imageIndex=l;try{this.setTexture(this.spriteLibrary,this.imageIndex)}catch(g){e.throwRuntimeExceptionOnLastExecutedStep(g);return}}else{this.copyBitmapFromShape(u);let g=u.container.getBounds(),f=new me(g.left+g.width/2,g.top+g.height/2);f=this.world.app.stage.localTransform.applyInverse(f),this.x=f.x,this.y=f.y}let m=this.container;if(m==null){let g=typeof a=="string"?a:a==null?void 0:a.name;e.throwRuntimeExceptionOnLastExecutedStep(new W(o.spriteErrorImageNotFound(g,l)));return}m.localTransform.translate(this.x-m.width/2,this.y-m.height/2),m.setFromMatrix(m.localTransform),m._didLocalTransformChangeId=m._didChangeId,this.world.app.stage.addChild(m),this.centerXInitial=m.width/2,this.centerYInitial=m.height/2,this.addToDefaultGroupAndSetDefaultVisibility(),i&&i()})}_cj$_constructor_$Sprite$double$double$SpriteLibrary$int(e,i,n,s,a,l){return this._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,n,s,a,l,void 0)}_cj$_constructor_$Sprite$double$double$SpriteLibrary(e,i,n,s,a){return this._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,n,s,a,0,void 0)}_cj$_constructor_$Sprite$Shape$ScaleMode(e,i,n,s){if(!n)throw new W(o.spriteShapeIsNullError());return this._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,0,0,void 0,0,s,n)}_cj$_constructor_$Sprite$Shape(e,i,n){return this._cj$_constructor_$Sprite$Shape$ScaleMode(e,i,n,void 0)}makeTiling(e,i,n=0,s=0){e/=this.scaleFactor,i/=this.scaleFactor;let a=this.container;this.oldTexture==null&&(this.oldTexture=a.texture);let l=this.oldTexture;(n>0||s>0)&&(l=this.generateGapTexture(l,n,s));let h=new Tf({texture:l,width:e,height:i});a.parent.addChild(h),h.setFromMatrix(a.localTransform),h.updateLocalTransform(),this.container=h,this.centerXInitial+=-a.width/2+e/2,this.centerYInitial+=-a.height/2+i/2;let u=this.centerXInitial-e/2,m=this.centerYInitial-i/2,g=u+e,f=m+i;this.hitPolygonInitial=[{x:u,y:m},{x:g,y:m},{x:g,y:f},{x:u,y:f}],this.hitPolygonDirty=!0,a.destroy(),this.isTileSprite=!0}generateGapTexture(e,i,n){const s=new it,a=new tr(e);return s.rect(0,0,a.width+i,a.height+n),s.stroke({width:1,color:0,alpha:.01}),s.addChild(a),this.world.app.renderer.generateTexture(s)}setTileOffset(e,i){this.isTileSprite&&this.container.tilePosition.set(e,i)}copyBitmapFromShape(e){let i=e.container.getBounds(),n=i.width,s=i.height,a=this.scaleModeOrdinal==Id.nearest_neighbour?"nearest":"linear";const l=uc.create({width:n,height:s,minFilter:a,magFilter:a});let h=e.container;this.world.app.renderer.render({container:h,target:l,transform:new ln().translate(-i.left,-i.top).append(h.worldTransform)});let u=[];u=this.extractPoints(e,u);for(let m of u)m.x-=i.left,m.y-=i.top;this.hitPolygonInitial=u,this.hitPolygonInitial=Gd.makeHull(u),this.hitPolygonDirty=!0,this.container=new tr(l),e.hitPolygonDirty=!0}extractPoints(e,i){if(e instanceof Rs){for(let n of e.shapes)i=this.extractPoints(n,i);return i}else return e.hitPolygonDirty&&e.transformHitPolygon(),i.concat(e.hitPolygonTransformed.map(function(n){return{x:n.x,y:n.y}}))}_setAsBackgroundImage(){let e=this.container,i=e.width/e.height,n=this.world.currentWidth/this.world.currentHeight,s=i>n?this.world.height/e.height:this.world.width/e.width;this._setScale(s),this._moveTo(this.world.currentLeft+this.world.currentWidth/2,this.world.currentTop+this.world.currentHeight/2),this._sendToBack()}_getWidth(){return this.container.width}_getHeight(){return this.container.height}_mj$copy$Shape$(e,i){this._mj$copy$Sprite$(e,i)}_mj$copy$Sprite$(e,i){let n=new ze;n._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,i,this.x,this.y,Kd.values.find(s=>s.name==this.spriteLibrary),this.imageIndex,Hd.values[this.scaleModeOrdinal]),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}_setAlpha(e){this.container.alpha=e}setTexture(e,i){var l,h,u;if((l=this.container)!=null&&l.destroyed||this.container&&e==this.spriteLibrary&&i==this.imageIndex)return;e==null&&(e=this.spriteLibrary),i==null&&(i=0),this.imageIndex=i,this.textureName=e;let n=Lo.get("spritesheet"),s=e+"#"+i,a=n.textures[s];if(a==null&&(n=(u=(h=this.world.interpreter)==null?void 0:h.graphicsManager)==null?void 0:u.pixiUserSpritesheet,a=n==null?void 0:n.textures[s]),a!=null){if(this.scaleModeOrdinal==Id.linear){let C=ze.linearScalemodeTextures[s];if(C==null){let w=new tr(a),x=uc.create({width:w.width,height:w.height,minFilter:"linear",magFilter:"linear"});this.world.app.renderer.render({container:w,target:x}),ze.linearScalemodeTextures[s]=x,C=x}a=C,a==null&&(a=n.textures[s])}let m=this.container;m==null?(m=new tr(a),this.container=m):m.texture=a,this.isTileSprite||(this.hitPolygonInitial=Uc.getPolygonForTexture(e,i,this,new tr(n.textures[s])),this.hitPolygonDirty=!0);let g=this.centerXInitial,f=this.centerYInitial;this.centerXInitial=m.width/this.scaleFactor/2,this.centerYInitial=m.height/this.scaleFactor/2;let b=g-this.centerXInitial,A=f-this.centerYInitial;this.belongsToGroup&&b*b+A*A>1e-10&&(this.container.setFromMatrix(this.container.localTransform.append(new ln().translate(g-this.centerXInitial,f-this.centerYInitial))),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty())}else throw new W(o.spriteErrorImageNotFound(e,i))}render(){}_playAnimation1(e,i,n,s){let a=[];if(i>=e)for(let l=e;l<=i;l++)a.push(l);else for(let l=e;l>=i;l--)a.push(l);this._playAnimation(a,n,s)}_playAnimation(e,i,n){this._stopAnimation(!1),this.animationIndices=e,this.repeatTypeOrdinal=i.ordinal,this.imagesPerMillisecond=n/1e3,this.animationTime=0,this.animationRuns=!0,this.world.app.ticker.add(this.tick,this)}_stopAnimation(e){this.animationRuns&&this.world.app.ticker.remove(this.tick,this),this.animationRuns=!1,e&&this._setVisible(!1)}destroy(){this._stopAnimation(!1),super.destroy()}_pauseAnimation(){this.animationPaused=!0}_resumeAnimation(){this.animationPaused=!1}tick(e){if(this.animationPaused)return;let i;switch(this.repeatTypeOrdinal){case Ys.backAndForth:let n=this.animationIndices.length*2/this.imagesPerMillisecond,s=Math.trunc(this.animationTime/n),a=this.animationTime-s*n;i=this.imagesPerMillisecond*a,i>=this.animationIndices.length&&(i=Math.max(2*this.animationIndices.length-.1-i,0)),i=Math.trunc(i);break;case Ys.loop:let l=this.animationIndices.length/this.imagesPerMillisecond,h=Math.trunc(this.animationTime/l),u=this.animationTime-h*l;i=this.imagesPerMillisecond*u,i=Math.trunc(i);break;case Ys.once:case Ys.onceWithoutDestroying:if(i=Math.trunc(this.imagesPerMillisecond*this.animationTime),i>=this.animationIndices.length){this._stopAnimation(!0),this.repeatTypeOrdinal==Ys.once&&this.destroy();return}break}this.animationTime+=e.deltaMS;try{this.setTexture(this.textureName,this.animationIndices[i])}catch(n){this.world.interpreter.stop(!1),this.world.interpreter.printManager.printHtmlElement(Gh.getHtmlWithLinks(n,[],this.world.interpreter.getMain())),this._stopAnimation(!1)}}getTileImage(){if(!this.isTileSprite)throw new W(o.spriteSpriteIsNoTiledSpriteError());return new Qd(this)}_getPixelColor(e,i){let n=this.container.width,s=this.container.height;if(this.pixels==null&&re(this,rd,Yc).call(this),e<0||e>=n||i<0||i>=s)throw new W(o.spriteGetPixelColorOutOfBoundsError(e,i,n,s));let a=(i*n+e)*4;return(this.pixels[a]<<16)+(this.pixels[a+1]<<8)+(this.pixels[a+2]<<0)}_getPixelAlpha(e,i){let n=this.container.width,s=this.container.height;if(this.pixels==null&&re(this,rd,Yc).call(this),e<0||e>=n||i<0||i>=s)throw new W(o.spriteGetPixelColorOutOfBoundsError(e,i,n,s));let a=(i*n+e)*4;return this.pixels[a+3]/255}};rd=new WeakSet,Yc=function(){let e=this.world.app.renderer;this.pixels=e.extract.pixels(this.container).pixels},r(ze,"__javaDeclarations",[{type:"declaration",signature:"class Sprite extends Shape",comment:o.spriteClassComment},{type:"method",signature:"Sprite(double x, double y, SpriteLibrary spriteLibraryEntry, int index, ScaleMode scalemode)",java:ze.prototype._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode,comment:o.spriteConstructorComment1},{type:"method",signature:"Sprite(double x, double y, SpriteLibrary spriteLibraryEntry, int index)",java:ze.prototype._cj$_constructor_$Sprite$double$double$SpriteLibrary$int,comment:o.spriteConstructorComment1},{type:"method",signature:"Sprite(double x, double y, SpriteLibrary spriteLibraryEntry)",java:ze.prototype._cj$_constructor_$Sprite$double$double$SpriteLibrary,comment:o.spriteConstructorComment1},{type:"method",signature:"Sprite(Shape shape, ScaleMode scalemode)",java:ze.prototype._cj$_constructor_$Sprite$Shape$ScaleMode,comment:o.spriteConstructorComment2},{type:"method",signature:"Sprite(Shape shape)",java:ze.prototype._cj$_constructor_$Sprite$Shape,comment:o.spriteConstructorComment2},{type:"method",signature:"void setImage(SpriteLibrary spriteLibrary, int imageIndex)",template:"§1.setTexture(§2.name, §3)",comment:o.spriteSetImageComment},{type:"method",signature:"void setImageIndex(int imageIndex)",template:"§1.setTexture(§1.textureName, §2)",comment:o.spriteSetImageIndexComment},{type:"method",signature:"void playAnimation(int[] imageIndexArray, RepeatType repeatType, int imagesPerSecond)",native:ze.prototype._playAnimation,comment:o.spritePlayAnimationComment},{type:"method",signature:"void playAnimation(int fromIndex, int toIndex, RepeatType repeatType, int imagesPerSecond)",native:ze.prototype._playAnimation1,comment:o.spritePlayAnimationComment},{type:"method",signature:"void stopAnimation()",native:ze.prototype._stopAnimation,comment:o.spriteStopAnimationComment},{type:"method",signature:"void pauseAnimation()",native:ze.prototype._pauseAnimation,comment:o.spritePauseAnimationComment},{type:"method",signature:"void resumeAnimation()",native:ze.prototype._resumeAnimation,comment:o.spriteResumeAnimationComment},{type:"method",signature:"void setAsBackgroundImage()",native:ze.prototype._setAsBackgroundImage,comment:o.spriteSetAsBackgroundImageComment},{type:"method",signature:"void setAlpha(double alphaValue)",native:ze.prototype._setAlpha,comment:o.spriteSetAlphaComment},{type:"method",signature:"Sprite copy()",java:ze.prototype._mj$copy$Sprite$,comment:o.spriteCopyComment},{type:"method",signature:"double getWidth()",native:ze.prototype._getWidth,comment:o.spriteGetWidthComment},{type:"method",signature:"double getHeight()",native:ze.prototype._getHeight,comment:o.spriteGetHeightComment},{type:"method",signature:"int getImageIndex()",template:"§1.imageIndex",comment:o.spriteGetImageIndexComment},{type:"method",signature:"void makeTiling(double width, double height)",native:ze.prototype.makeTiling,comment:o.spriteMakeTilingComment1},{type:"method",signature:"void makeTiling(double width, double height, double gapX, double gapY)",native:ze.prototype.makeTiling,comment:o.spriteMakeTilingComment2},{type:"method",signature:"TileImage getTileImage()",native:ze.prototype.getTileImage,comment:o.spriteGetTileImageComment},{type:"method",signature:"int getPixelColor(int x, int y)",native:ze.prototype._getPixelColor,comment:o.spriteGetPixelColorComment},{type:"method",signature:"double getPixelAlpha(int x, int y)",native:ze.prototype._getPixelAlpha,comment:o.spriteGetPixelAlphaComment}]),r(ze,"type"),r(ze,"linearScalemodeTextures",{});let Ud=ze;const Br=class Br extends R{constructor(t){super(),this.sprite=t}_constructor1(){}_move(t,e){let i=this.sprite.container;i.tilePosition.x+=t,i.tilePosition.y+=e}_scale(t,e){e=e||t;let i=this.sprite.container;i.tileScale.x*=t,i.tileScale.y*=e}_mirrorX(){this._scale(-1,1)}_mirrorY(){this._scale(1,-1)}};r(Br,"__javaDeclarations",[{type:"declaration",signature:"class TileImage extends Object",comment:o.tileClassComment},{type:"method",signature:"private TileImage()",native:Br.prototype._constructor1},{type:"method",signature:"void move(double x, double y)",native:Br.prototype._move,comment:o.tileMoveComment},{type:"method",signature:"void scale(double factor)",native:Br.prototype._scale,comment:o.tileScaleComment},{type:"method",signature:"void mirrorX()",native:Br.prototype._mirrorX,comment:o.tileMirrorXComment},{type:"method",signature:"void mirrorY()",native:Br.prototype._mirrorY,comment:o.tileMirrorYComment}]),r(Br,"type");let Qd=Br;const bt=class bt extends dn{constructor(){super(...arguments);r(this,"shapes",[])}_cj$_constructor_$Group$(e,i){this._cj$_constructor_$Shape$(e,()=>{this.container=new Ks,this.world.app.stage.addChild(this.container),i&&i()})}_cj$_constructor_$Group$Shape_I(e,i,n){this._cj$_constructor_$Group$(e,()=>{if(n){for(let s of n)this.add(s);i&&i()}})}render(){}getElements(){return this.shapes}_mj$copy$Shape$(e,i){this._mj$copy$Group$(e,i)}_mj$copy$Group$(e,i){let n=new bt;n._cj$_constructor_$Group$(e,()=>{let s=0,a=()=>{if(s>=this.shapes.length){e.s.push(n),i&&i();return}this.shapes[s]._mj$copy$Shape$(e,()=>{n.add(e.s.pop()),s++,a()})};a()})}_containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;for(let n of this.shapes)if(n._containsPoint(e,i))return!0;return!1}_collidesWith(e){if(!this.hasOverlappingBoundingBoxWith(e))return!1;for(let i of this.shapes)if(i._collidesWith(e))return!0;return!1}indexOf(e){return this.shapes.indexOf(e)}checkIndex(e){if(e<0)throw new W("Der Index ist kleiner als 0.");if(e>=this.shapes.length)throw new W("Zugriff auf das Shape mit Index "+e+" einer Gruppe mit "+this.shapes.length+" Elementen.")}removeWithIndex(e){this.checkIndex(e),this.remove(this.shapes[e])}get(e){return this.checkIndex(e),this.shapes[e]}addMultiple(e){for(let i of e)this.add(i)}add(e){if(e==null)return;if(e.isDestroyed)throw new W("Ein schon zerstörtes Objekt kann keiner Gruppe hinzugefügt werden.");if(e instanceof bt&&e.containsRecursively(this))throw new W("Es wurde versucht, eine Gruppe A zu einer Gruppe B hinzuzufügen, wobei B die Gruppe A bereits enthielt. Dies führt zu einem unzulässigen Zirkelbezug.");if(e.getWorldTransform(),e.belongsToGroup!=null)e.belongsToGroup.remove(e);else{let m=this.world.shapesWhichBelongToNoGroup.indexOf(e);m>=0&&this.world.shapesWhichBelongToNoGroup.splice(m,1)}this.shapes.push(e),e.belongsToGroup=this;let i=new ln().copyFrom(this.getWorldTransform()).invert();i.append(e.getWorldTransform()),e.container.setFromMatrix(i),e.container.updateLocalTransform(),e.worldTransformDirty=!0,this.container.addChild(e.container);let n=this.shapes.length,s=this.getWorldTransform().apply(new me(this.centerXInitial,this.centerYInitial)),a=e.getCenter(),l=(s.x*(n-1)+a.x)/n,h=(s.y*(n-1)+a.y)/n,u=this.getWorldTransform().applyInverse(new me(l,h));this.centerXInitial=u.x,this.centerYInitial=u.y}containsRecursively(e){for(let i of this.shapes)if(i==e||i instanceof bt&&i.containsRecursively(e))return!0;return!1}destroyAllChildren(){for(;this.shapes.length>0;)this.shapes.pop().destroy()}removeAllChildren(){let e=0;for(let i of this.shapes)this.deregister(i,e++);this.shapes=[]}remove(e){let i=this.shapes.indexOf(e);i>=0&&(this.shapes.splice(i,1),this.deregister(e,i))}deregister(e,i){e.getWorldTransform(),this.container.removeChild(e.container),this.world.app.stage.addChild(e.container);let n=new ln().copyFrom(this.world.app.stage.localTransform).invert();n.append(e.getWorldTransform()),e.container.setFromMatrix(n),e.container.updateLocalTransform(),e.worldTransformDirty=!0,e.belongsToGroup=void 0;let s=this.shapes.length,a=this.getWorldTransform().apply(new me(this.centerXInitial,this.centerYInitial)),l=e.getCenter(),h=(a.x*(s+1)-l.x)/s,u=(a.y*(s+1)-l.y)/s,m=this.getWorldTransform().applyInverse(new me(h,u));this.centerXInitial=m.x,this.centerYInitial=m.y}setChildIndex(e,i){this.container.setChildIndex(e.container,i);let n=this.shapes.indexOf(e);this.shapes.splice(n,1),this.shapes.splice(i,0,e)}destroy(){for(let e of this.shapes)e.destroy();super.destroy()}setWorldTransformAndHitPolygonDirty(){this.worldTransformDirty=!0;for(let e of this.shapes)e.setWorldTransformAndHitPolygonDirty()}_getCollidingShapesGroup(e){return e==null||!this.hasOverlappingBoundingBoxWith(e)?[]:this.shapes.filter(i=>i!=e&&e._collidesWith(i))}_getCollisionPairs(e,i=!1){if(e==null||!this.hasOverlappingBoundingBoxWith(e))return[];let n=[],s=new Set;for(let a of this.shapes)for(let l of e.shapes)if(!s.has(l)&&a._collidesWith(l)&&(n.push(new qd(a,l)),i)){s.add(l);break}return n}_mj$renderAsStaticBitmap$void$(e,i){new Ud()._cj$_constructor_$Sprite$double$double$SpriteLibrary$int$ScaleMode(e,()=>{this.destroyAllChildren();let n=e.s.pop(),s=this._getCenterX(),a=this._getCenterY();n._defineCenter(this._getCenterX(),this._getCenterY()),n.container.localTransform.append(this.world.app.stage.localTransform),n.container.setFromMatrix(n.container.localTransform),n.container.updateLocalTransform(),n.setWorldTransformAndHitPolygonDirty(),this.add(n),this._defineCenter(s,a),i&&i()},0,0,"",0,void 0,this)}};r(bt,"__javaDeclarations",[{type:"declaration",signature:"class Group extends Shape",comment:o.groupClassComment},{type:"method",signature:"Group()",java:bt.prototype._cj$_constructor_$Group$,comment:o.groupConstructorComment},{type:"method",signature:"Group(T... shapes)",java:bt.prototype._cj$_constructor_$Group$Shape_I,comment:o.groupConstructorComment},{type:"method",signature:"final void add(T shape)",native:bt.prototype.add,comment:o.groupAddComment},{type:"method",signature:"final void add(T... shapes)",native:bt.prototype.addMultiple,comment:o.groupAddComment},{type:"method",signature:"final void remove(T shape)",native:bt.prototype.remove,comment:o.groupRemoveComment},{type:"method",signature:"final void remove(int index)",native:bt.prototype.removeWithIndex,comment:o.groupRemoveWithIndexComment},{type:"method",signature:"final T get(int index)",native:bt.prototype.get,comment:o.groupGetComment},{type:"method",signature:"final int indexOf(T shape)",native:bt.prototype.indexOf,comment:o.groupIndexOfComment},{type:"method",signature:"final int size()",template:"§1.shapes.length",comment:o.groupSizeComment},{type:"method",signature:"final void empty()",native:bt.prototype.removeAllChildren,comment:o.groupEmptyComment},{type:"method",signature:"final void destroyAllChildren()",native:bt.prototype.destroyAllChildren,comment:o.groupDestroyAllChildrenComment},{type:"method",signature:"final void renderAsStaticBitmap()",java:bt.prototype._mj$renderAsStaticBitmap$void$,comment:o.groupRenderAsStaticBitmapComment},{type:"method",signature:"final Group copy()",java:bt.prototype._mj$copy$Group$,comment:o.groupCopyComment},{type:"method",signature:"final T[] getCollidingShapes(Shape otherShape)",native:bt.prototype._getCollidingShapesGroup,comment:o.groupGetCollidingShapesComment},{type:"method",signature:"final CollisionPair[] getCollisionPairs(Group otherGroup, boolean maxOneCollisionPerShape)",native:bt.prototype._getCollisionPairs,comment:o.groupGetCollisionPairsComment},{type:"method",signature:"final boolean collidesWith(Shape otherShape)",native:bt.prototype._collidesWith,comment:o.shapeCollidesWithComment},{type:"method",signature:"final boolean collidesWithAnyShape()",native:dn.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithAnyShapeComment},{type:"method",signature:"final boolean collidesWithFillColor(int color)",native:dn.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(string color)",native:dn.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final boolean collidesWithFillColor(Color color)",native:dn.prototype._collidesWithAnyShape,comment:o.shapeCollidesWithFillColorComment},{type:"method",signature:"final Sprite getFirstCollidingSprite(int imageIndex)",native:dn.prototype._getFirstCollidingSprite,comment:o.shapeGetFirstCollidingSpriteComment}]),r(bt,"type");let Rs=bt;const Fr=class Fr extends Rt{constructor(){super(...arguments);r(this,"dotWidth",0);r(this,"height",0);r(this,"registerAsMouseListener");r(this,"registerAsKeyboardListener");r(this,"mouseManager");r(this,"keyboardManager");r(this,"changeListeners",[]);r(this,"scheduler")}_cj$_constructor$GuiComponent$(e,i,n,s){this._cj$_constructor_$FilledShape$(e,()=>{this.scheduler=e.scheduler,this.registerAsMouseListener=n,this.registerAsKeyboardListener=s,this.registerAsListener(e),this.centerXInitial=0,this.centerYInitial=0,i&&i()})}_mj$onChange$void$String(e,i,n){}onMouseEvent(e,i,n){throw new Error("Method not implemented.")}onKeyDown(e,i,n,s){throw new Error("Method not implemented.")}looseKeyboardFocus(){throw new Error("Method not implemented.")}registerAsListener(e){var i,n;this.registerAsMouseListener&&(this.mouseManager=this.world.mouseManager,(i=this.mouseManager)==null||i.internalMouseListeners.push(this)),this.registerAsKeyboardListener&&(this.keyboardManager=this.keyboardManager||(e==null?void 0:e.scheduler.interpreter.keyboardManager),(n=this.keyboardManager)==null||n.addInternalKeyboardListener(this))}unregisterAsListener(){if(this.mouseManager){let e=this.mouseManager.internalMouseListeners.indexOf(this);e>=0&&this.mouseManager.internalMouseListeners.splice(e,1)}this.keyboardManager&&this.keyboardManager.removeInternalKeyboardListener(this)}destroy(){this.unregisterAsListener(),super.destroy()}setVisible(e){super._setVisible(e),e?this.registerAsListener(void 0):this.unregisterAsListener()}getWidth(){return this.dotWidth}getHeight(){return this.height}addChangeListener(e){this.changeListeners.push(e)}callOnChange(e){if(this._mj$onChange$void$String!=Fr.prototype._mj$onChange$void$String||this.changeListeners.length>0){let i=this.scheduler.createThread("onChange-method thread");this._mj$onChange$void$String!=Fr.prototype._mj$onChange$void$String&&this._mj$onChange$void$String(i,void 0,new Y(e));for(let n of this.changeListeners)n._mj$onChange$void$Object$String(i,void 0,this,new Y(e));i.state=F.running}}};r(Fr,"__javaDeclarations",[{type:"declaration",signature:"abstract class GuiComponent extends FilledShape",comment:o.GUIComponentClassComment},{type:"method",signature:"GuiComponent()",java:Fr.prototype._cj$_constructor$GuiComponent$},{type:"method",signature:"void addChangeListener(GuiChangeListener changeListener)",native:Fr.prototype.addChangeListener,comment:o.GUIComponentAddChangeListenerComment},{type:"method",signature:"final double getWidth()",template:"§1.width",comment:o.GUIComponentGetWidthComment},{type:"method",signature:"final double getHeight()",template:"§1.height",comment:o.GUIComponentGetHeightComment},{type:"method",signature:"void onChange(String newValue)",java:Fr.prototype._mj$onChange$void$String,comment:o.GUIComponentOnChangeComment}]),r(Fr,"type");let Yd=Fr;const kn=class kn extends Yd{constructor(){super(...arguments);r(this,"pixiText");r(this,"textColor",16777215);r(this,"textHeight",10);r(this,"textWidth",10);r(this,"fontsize",12);r(this,"text","");r(this,"fontFamily","sans serif");r(this,"textStyle",new Wh({fontFamily:"Arial",fontSize:10,fontStyle:"normal",fontWeight:"normal",fill:16777215,stroke:{color:0,width:0,join:"round"},dropShadow:!1,wordWrap:!1,align:"center"}))}_cj$_constructor_$GuiTextComponent$(e,i,n,s,a,l,h){this._cj$_constructor$GuiComponent$(e,()=>{this.fontsize=a||10,this.fontFamily=h||"sans serif",this.text=l,this.fontsize==0&&(this.fontsize=10),this.textStyle.fontSize=a,h!=null&&(this.textStyle.fontFamily=h),i&&i()},n,s)}setStyle(e,i){this.textStyle.fontWeight=e?"bold":"normal",this.textStyle.fontStyle=i?"italic":"normal",this.render()}textCompomentPrerender(){this.textStyle.fill=this.textColor==null?0:this.textColor,this.textStyle.stroke.color=0,this.textStyle.stroke.width=0,this.textStyle.fontSize=this.fontsize}setFontsize(e){this.fontsize=e,this.fontsize==0&&(this.fontsize=10),this.render()}setText(e){this.text=e,this.render()}setTextColor(e){e&&(typeof e=="string"?e=Ke.parseColorToOpenGL(e).color:e instanceof hs&&(e=e._toInt())),this.textColor=e,this.render()}getText(){return this.text}};r(kn,"__javaDeclarations",[{type:"declaration",signature:"abstract class GuiTextComponent extends GuiComponent",comment:o.GuiTextComponentClassComment},{type:"method",signature:"GuiTextComponent()",java:kn.prototype._cj$_constructor_$GuiTextComponent$},{type:"method",signature:"void setFontsize(double fontsize)",native:kn.prototype.setFontsize,comment:o.GuiTextComponentSetFontsizeComment},{type:"method",signature:"void setText(string text)",native:kn.prototype.setText,comment:o.GuiTextComponentSetTextComment},{type:"method",signature:"string getText()",native:kn.prototype.getText,comment:o.GuiTextComponentGetTextComment},{type:"method",signature:"double getFontsize()",template:"§1.fontsize",comment:o.GuiTextComponentGetFontsizeComment},{type:"method",signature:"void setStyle(boolean isBold, boolean isItalic)",native:kn.prototype.setStyle,comment:o.GuiTextComponentSetStyleComment},{type:"method",signature:"void setTextColor(Color color)",native:kn.prototype.setTextColor,comment:o.GuiTextComponentSetTextColor},{type:"method",signature:"void setTextColor(int color)",native:kn.prototype.setTextColor,comment:o.GuiTextComponentSetTextColor},{type:"method",signature:"void setTextColor(string color)",native:kn.prototype.setTextColor,comment:o.GuiTextComponentSetTextColor}]),r(kn,"type");let Fa=kn;const Vr=class Vr extends Fa{constructor(){super(...arguments);r(this,"x");r(this,"y");r(this,"backgroundGraphics");r(this,"higlightGraphics");r(this,"mouseIsDown",!1);r(this,"isMouseOver",!1)}_cj$_constructor_$Button$double$double$double$string(e,i,n,s,a,l,h){this.x=n,this.y=s,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=a/8,this.fillColor=255,this.hitPolygonInitial=[],this.render(),i&&i()},!0,!1,a,l,h)}onKeyDown(e,i,n,s){}looseKeyboardFocus(){}_mj$copy$Button$(e,i){let n=new Vr;n.textColor=this.textColor,this._cj$_constructor_$Button$double$double$double$string(e,()=>{i&&i()},this.x,this.y,this.fontsize,this.text,this.fontFamily)}render(){this.textCompomentPrerender();let e=this.fontsize/3;if(this.container==null?(this.backgroundGraphics=new it,this.higlightGraphics=new it,this.pixiText=new za({text:this.text,style:this.textStyle}),this.container=new Ks,this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container),this.container.addChild(this.higlightGraphics),this.container.addChild(this.backgroundGraphics),this.container.addChild(this.pixiText)):(this.pixiText.text=this.text,this.backgroundGraphics.clear(),this.higlightGraphics.clear(),this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.pixiText.style=this.textStyle),this.centerXInitial=0,this.centerYInitial=0,this.text!=null){let a=Bo.measureText(this.text,this.textStyle);this.textWidth=a.width,this.textHeight=a.height,this.pixiText.localTransform.identity(),this.pixiText.localTransform.translate(e,e),this.pixiText.setFromMatrix(this.pixiText.localTransform),this.pixiText.updateLocalTransform(),this.centerXInitial=this.textWidth/2+e,this.centerYInitial=this.textHeight/2+e}let i=0,n=0;this.dotWidth=this.textWidth+2*e,this.height=this.textHeight+2*e,this.hitPolygonInitial=[{x:i,y:n},{x:i+this.dotWidth,y:n},{x:i+this.dotWidth,y:n+this.height},{x:i,y:n+this.height}],this.hitPolygonDirty=!0,this.backgroundGraphics.roundRect(0,0,this.dotWidth,this.height,this.height/8),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1});let s=this.height/10+this.borderWidth;this.higlightGraphics.roundRect(-s,-s,this.dotWidth+2*s,this.height+2*s,this.height/4),this.fillColor!=null&&this.higlightGraphics.fill(yb(this.fillColor,.4)),this.higlightGraphics.visible=this.mouseIsDown}onMouseEvent(e,i,n){let s=this._containsPoint(i,n);switch(e){case"mousedown":s&&(this.mouseIsDown=!0,this.higlightGraphics.visible=!0);break;case"mouseup":s&&this.mouseIsDown&&(this.higlightGraphics.visible=!1,this.callOnChange("clicked")),this.mouseIsDown=!1;break;case"mouseleave":this.isMouseOver=!1,this.world._setCursor("default");break;case"mousemove":this.isMouseOver!=s&&(this.isMouseOver=s,this.world._setCursor(s?"pointer":"default"))}}_isDown(){return this.mouseIsDown}};r(Vr,"__javaDeclarations",[{type:"declaration",signature:"class Button extends GuiTextComponent",comment:o.ButtonClassComment},{type:"method",signature:"Button(double x, double y, double fontsize, string text)",java:Vr.prototype._cj$_constructor_$Button$double$double$double$string,comment:o.ButtonConstructorComment},{type:"method",signature:"Button(double x, double y, double fontsize, string text, string fontFamily)",java:Vr.prototype._cj$_constructor_$Button$double$double$double$string,comment:o.ButtonConstructorComment},{type:"method",signature:"Button copy()",java:Vr.prototype._mj$copy$Button$,comment:o.ButtonCopyComment},{type:"method",signature:"boolean isDown()",native:Vr.prototype._isDown,comment:o.ButtonIsDownComment}]),r(Vr,"type");let Zc=Vr;const dl=class dl extends $i{_mj$onChange$void$Object$String(t,e,i,n){}};r(dl,"__javaDeclarations",[{type:"declaration",signature:"interface GuiChangeListener",comment:o.ChangeListenerInterfaceComment},{type:"method",signature:"void onChange(Object changedObject, String newValue)",java:dl.prototype._mj$onChange$void$Object$String,comment:o.ChangeListenerOnChangeComment}]),r(dl,"type");let Xc=dl;const Cn=class Cn extends Fa{constructor(){super(...arguments);r(this,"x");r(this,"y");r(this,"backgroundGraphics");r(this,"cross");r(this,"distanceToText",4);r(this,"crossColor",0);r(this,"isChecked",!0);r(this,"mouseIsDown",!1);r(this,"isMouseOver",!1)}_cj$_constructor_$CheckBox$double$double$double$double$string(e,i,n,s,a,l,h,u){this.isChecked=!1;let m="sans serif";u&&(typeof u=="boolean"?this.isChecked=u:m=u),this.x=n,this.y=s,this.dotWidth=a,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=a/10,this.fillColor=16777215,this.hitPolygonInitial=[],this.render(),i&&i()},!0,!1,l,h,m)}onKeyDown(e,i,n,s){}looseKeyboardFocus(){}_mj$copy$Button$(e,i){let n=new Cn;n.textColor=this.textColor,n.crossColor=this.crossColor,n._cj$_constructor_$CheckBox$double$double$double$double$string(e,()=>{i&&i()},this.x,this.y,this.dotWidth,this.fontsize,this.text,this.fontFamily)}setCrossColor(e){this.crossColor=e,this.render()}render(){this.textCompomentPrerender(),this.container==null?(this.backgroundGraphics=new it,this.cross=new it,this.textStyle.align="left",this.pixiText=new za({text:this.text,style:this.textStyle}),this.pixiText.x=this.dotWidth+this.distanceToText,this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.pixiText.y=0,this.container=new Ks,this.container.addChild(this.backgroundGraphics),this.container.addChild(this.pixiText),this.container.addChild(this.cross),this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container)):(this.pixiText.text=this.text,this.backgroundGraphics.clear(),this.cross.clear()),this.centerXInitial=0,this.centerYInitial=0;let e=0;if(this.text!=null){let u=Bo.measureText(this.text,this.textStyle);this.textWidth=u.width,this.textHeight=u.height,u.fontProperties.ascent,e=(this.dotWidth-this.textHeight)/2,this.distanceToText=u.fontProperties.descent*3,this.pixiText.localTransform.identity(),this.pixiText.localTransform.translate(this.dotWidth+this.distanceToText,e),this.pixiText.setFromMatrix(this.pixiText.localTransform),this.pixiText.updateLocalTransform(),this.centerXInitial=(this.dotWidth+this.textWidth+this.distanceToText)/2,this.centerYInitial=this.dotWidth/2}let i=0,n=0,s=n+this.dotWidth-e,a=this.textWidth+this.dotWidth+this.distanceToText;this.height=Math.max(this.dotWidth,this.textHeight),this.hitPolygonInitial=[{x:i,y:n},{x:i+this.dotWidth,y:n},{x:i+this.dotWidth+this.distanceToText,y:e},{x:i+a,y:e},{x:i+a,y:s},{x:i+this.dotWidth+this.distanceToText,y:s},{x:i+this.dotWidth,y:n+this.dotWidth},{x:i,y:n+this.dotWidth}],this.hitPolygonDirty=!0,this.backgroundGraphics.roundRect(0,0,this.dotWidth,this.dotWidth,this.dotWidth/8),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1});let h=this.borderWidth*3;this.cross.moveTo(h,h),this.cross.lineTo(this.dotWidth-h,this.dotWidth-h),this.cross.moveTo(this.dotWidth-h,h),this.cross.lineTo(h,this.dotWidth-h),this.cross.stroke({width:this.borderWidth*2,color:this.crossColor,alpha:this.fillAlpha,alignment:.5,cap:"round"}),this.cross.visible=this.isChecked}setChecked(e){this.isChecked=e,this.render()}onMouseEvent(e,i,n){let s=this._containsPoint(i,n);switch(e){case"mousedown":s&&(this.mouseIsDown=!0);break;case"mouseup":s&&this.mouseIsDown&&(this.isChecked=!this.isChecked,this.render(),this.callOnChange(""+this.isChecked)),this.mouseIsDown=!1;break;case"mouseleave":this.isMouseOver=!1,this.world._setCursor("default");break;case"mousemove":this.isMouseOver!=s&&(this.isMouseOver=s,this.world._setCursor(s?"pointer":"default"))}}_isChecked(){return this.isChecked}};r(Cn,"__javaDeclarations",[{type:"declaration",signature:"class Checkbox extends GuiTextComponent",comment:o.CheckBoxClassComment},{type:"method",signature:"Checkbox(double x, double y, double width, double fontsize, string text)",java:Cn.prototype._cj$_constructor_$CheckBox$double$double$double$double$string,comment:o.CheckBoxConstructorComment},{type:"method",signature:"Checkbox(double x, double y, double width, double fontsize, string text, string fontFamily)",java:Cn.prototype._cj$_constructor_$CheckBox$double$double$double$double$string,comment:o.CheckBoxConstructorComment},{type:"method",signature:"Checkbox(double x, double y, double width, double fontsize, string text, boolean checked)",java:Cn.prototype._cj$_constructor_$CheckBox$double$double$double$double$string,comment:o.CheckBoxConstructorComment},{type:"method",signature:"Checkbox copy()",java:Cn.prototype._mj$copy$Button$,comment:o.CheckBoxCopyComment},{type:"method",signature:"void setCrossColor(int color)",native:Cn.prototype.setCrossColor,comment:o.CheckBoxSetCrossColorComment},{type:"method",signature:"void setChecked(boolean checked)",native:Cn.prototype.setChecked,comment:o.CheckBoxSetCheckedComment},{type:"method",signature:"boolean isChecked()",native:Cn.prototype._isChecked,comment:o.CheckBoxIsCheckedComment}]),r(Cn,"type");let Jc=Cn;const Vi=class Vi extends Fa{constructor(){super(...arguments);r(this,"x");r(this,"y");r(this,"backgroundGraphics");r(this,"dot");r(this,"distanceToText",4);r(this,"dotColor",0);r(this,"isSelected",!0);r(this,"mouseIsDown",!1);r(this,"isMouseOver",!1);r(this,"index");r(this,"otherButtons",[])}_cj$_constructor_$Radiobutton$double$double$double$double$string$int(e,i,n,s,a,l,h,u){this._cj$_constructor_$Radiobutton$double$double$double$double$string$string$int(e,i,n,s,a,l,h,void 0,u)}_cj$_constructor_$Radiobutton$double$double$double$double$string$string$int(e,i,n,s,a,l,h,u,m){this.isSelected=!1,this.fontFamily=u||"sans serif",this.index=m,this.x=n,this.y=s,this.dotWidth=a,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=a/10,this.fillColor=16777215,this.hitPolygonInitial=[],this.render(),i&&i()},!0,!1,l,h,u)}onKeyDown(e,i,n,s){}looseKeyboardFocus(){}_mj$copy$Button$(e,i){let n=new Vi;n.textColor=this.textColor,n.dotColor=this.dotColor,n.distanceToText=this.distanceToText,n.isSelected=this.isSelected,n._cj$_constructor_$Radiobutton$double$double$double$double$string$string$int(e,()=>{i&&i()},this.x,this.y,this.dotWidth,this.fontsize,this.text,this.fontFamily,this.index+1)}setIndex(e){this.index=e}getIndexOfSelectedRadiobutton(){if(this.isSelected)return this.index;for(let e of this.otherButtons)if(e.isSelected)return e.index;return-1}getTextOfSelectedRadiobutton(){if(this.isSelected)return this.text;for(let e of this.otherButtons)if(e.isSelected)return e.text;return""}setSelected(){this.isSelected=!0,this.render();for(let e of this.otherButtons)e.isSelected=!1,e.render()}connectTo(e){if(e!=null){for(let i of e)this.otherButtons.indexOf(i)<0&&i!=this&&this.otherButtons.push(i);for(let i of e){let n=this.otherButtons.slice();n.push(this);let s=n.indexOf(i);s>=0&&n.splice(s,1),i.otherButtons=n}}}setDotColor(e){this.dotColor=e,this.render()}setCrossColor(e){this.dotColor=e,this.render()}render(){this.textCompomentPrerender(),this.container==null?(this.backgroundGraphics=new it,this.dot=new it,this.textStyle.align="left",this.pixiText=new za({text:this.text,style:this.textStyle}),this.pixiText.x=this.dotWidth+this.distanceToText,this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.pixiText.y=0,this.container=new Ks,this.container.addChild(this.backgroundGraphics),this.container.addChild(this.pixiText),this.container.addChild(this.dot),this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container)):(this.pixiText.text=this.text,this.backgroundGraphics.clear(),this.dot.clear()),this.centerXInitial=0,this.centerYInitial=0;let e=0;if(this.text!=null){let h=Bo.measureText(this.text,this.textStyle);this.textWidth=h.width,this.textHeight=h.height,h.fontProperties.ascent,e=(this.dotWidth-this.textHeight)/2,this.distanceToText=h.fontProperties.descent*3,this.pixiText.localTransform.identity(),this.pixiText.localTransform.translate(this.dotWidth+this.distanceToText,e),this.pixiText.setFromMatrix(this.pixiText.localTransform),this.pixiText.updateLocalTransform(),this.centerXInitial=(this.dotWidth+this.textWidth+this.distanceToText)/2,this.centerYInitial=this.dotWidth/2}let i=0,n=0,s=n+this.dotWidth-e,a=this.textWidth+this.dotWidth+this.distanceToText;this.height=Math.max(this.dotWidth,this.textHeight),this.hitPolygonInitial=[{x:i,y:n},{x:i+this.dotWidth,y:n},{x:i+this.dotWidth+this.distanceToText,y:e},{x:i+a,y:e},{x:i+a,y:s},{x:i+this.dotWidth+this.distanceToText,y:s},{x:i+this.dotWidth,y:n+this.dotWidth},{x:i,y:n+this.dotWidth}],this.hitPolygonDirty=!0,this.backgroundGraphics.circle(this.dotWidth/2,this.dotWidth/2,this.dotWidth/2),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1}),this.borderWidth*3,this.dot.circle(this.dotWidth/2,this.dotWidth/2,this.dotWidth/6),this.dotColor!=null&&this.dot.fill(this.dotColor),this.dot.visible=this.isSelected}setChecked(e){this.isSelected=e,this.render()}onMouseEvent(e,i,n){let s=this._containsPoint(i,n);switch(e){case"mousedown":s&&(this.mouseIsDown=!0);break;case"mouseup":{if(s&&this.mouseIsDown){this.setSelected(),this.render(),this.callOnChange(""+this.index);for(let a of this.otherButtons)a.callOnChange(""+this.index)}this.mouseIsDown=!1}break;case"mouseleave":this.isMouseOver=!1,this.world._setCursor("default");break;case"mousemove":this.isMouseOver!=s&&(this.isMouseOver=s,this.world._setCursor(s?"pointer":"default"))}}_isChecked(){return this.isSelected}};r(Vi,"__javaDeclarations",[{type:"declaration",signature:"class RadioButton extends GuiTextComponent",comment:o.RadiobuttonClassComment},{type:"method",signature:"RadioButton(double x, double y, double width, double fontsize, string text, int index)",java:Vi.prototype._cj$_constructor_$Radiobutton$double$double$double$double$string$int,comment:o.RadiobuttonConstructorComment},{type:"method",signature:"RadioButton(double x, double y, double width, double fontsize, string text, string fontFamily, int index)",java:Vi.prototype._cj$_constructor_$Radiobutton$double$double$double$double$string$string$int,comment:o.RadiobuttonConstructorComment},{type:"method",signature:"RadioButton copy()",java:Vi.prototype._mj$copy$Button$,comment:o.RadiobuttonCopyComment},{type:"method",signature:"int getIndex()",template:"§1.index",comment:o.RadiobuttonGetIndexComment},{type:"method",signature:"int getIndexOfSelectedRadiobutton()",native:Vi.prototype.getIndexOfSelectedRadiobutton,comment:o.RadiobuttonGetIndexOfSelectedRadiobuttonComment},{type:"method",signature:"int getTextOfSelectedRadiobutton()",native:Vi.prototype.getTextOfSelectedRadiobutton,comment:o.RadiobuttonGetTextOfSelectedRadiobuttonComment},{type:"method",signature:"void setIndex()",native:Vi.prototype.setIndex,comment:o.RadiobuttonSetIndexComment},{type:"method",signature:"void setDotColor()",native:Vi.prototype.setDotColor,comment:o.RadiobuttonSetDotColorComment},{type:"method",signature:"void connectTo(RadioButton... otherButtons)",native:Vi.prototype.connectTo,comment:o.RadiobuttonConnectToComment},{type:"method",signature:"void select()",native:Vi.prototype.setSelected,comment:o.RadiobuttonSelectComment},{type:"method",signature:"boolean isSelected()",template:"§1.isSelected",comment:o.RadiobuttonIsSelectedComment}]),r(Vi,"type");let eu=Vi;const _r=class _r extends Fa{constructor(){super(...arguments);r(this,"backgroundGraphics");r(this,"mask");r(this,"keyboardFocusRect");r(this,"cursor");r(this,"selectionRectangle");r(this,"padding",8);r(this,"hasKeyboardFocus",!1);r(this,"characterStops",[]);r(this,"characterCenterList",[]);r(this,"isSelecting",!1);r(this,"selectionStart",0);r(this,"selectionEnd",0);r(this,"renderFromCharacterPosition",0);r(this,"timerId");r(this,"isMouseOver",!1);r(this,"x");r(this,"y");r(this,"width");r(this,"caption")}_cj$_constructor_$Textfield$double$double$double$double$string$string(e,i,n,s,a,l,h,u){u=u||"sans serif",this.x=n,this.y=s,this.width=a,this._cj$_constructor_$GuiTextComponent$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.borderColor=8421504,this.borderWidth=l/10,this.fillColor=16777215,this.textColor=0,this.hitPolygonInitial=[],this.generateCharacterStops(),this.render(),this.initTimer(),i&&i()},!0,!0,l,h,u)}initTimer(){let e=this;this.timerId=setInterval(()=>{e.cursor!=null&&!e.cursor.destroyed&&e.hasKeyboardFocus&&(e.cursor.visible=!e.cursor.visible)},500)}unregisterAsListener(){super.unregisterAsListener(),clearInterval(this.timerId)}_mj$copy$Textfield$(e,i){let n=new _r;n._cj$_constructor_$Textfield$double$double$double$double$string$string(e,()=>{n.padding=this.padding,n.copyFrom(this),n.render()},this.x,this.y,this.width,this.fontsize,this.text,this.fontFamily)}render(){this.scrollIfNecessary(),this.textCompomentPrerender();let e=this.text;e.length==0?(e=this.text,this.textStyle.fill=4210752):e=this.text.substring(this.renderFromCharacterPosition),this.container==null?(this.backgroundGraphics=new it,this.keyboardFocusRect=new it,this.cursor=new it,this.selectionRectangle=new it,this.mask=new it,this.pixiText=new za({text:e,style:this.textStyle}),this.container=new Ks,this.container.localTransform.translate(this.x+this.padding,this.y+this.padding),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.world.app.stage.addChild(this.container),this.container.addChild(this.mask),this.container.addChild(this.backgroundGraphics),this.container.addChild(this.keyboardFocusRect),this.container.addChild(this.selectionRectangle),this.container.addChild(this.pixiText),this.container.addChild(this.cursor),this.pixiText.mask=this.mask,this.selectionRectangle.mask=this.mask):(this.pixiText.text=e,this.backgroundGraphics.clear(),this.mask.clear(),this.keyboardFocusRect.clear(),this.selectionRectangle.clear(),this.cursor.clear(),this.pixiText.alpha=this.fillAlpha,this.pixiText.anchor.x=0,this.textStyle.align="left",this.pixiText.style=this.textStyle),this.centerXInitial=0,this.centerYInitial=0;let i=0;if(this.text!=null){let a=Bo.measureText(this.text,this.textStyle);i=this.width,this.height=a.height,a.fontProperties.ascent,this.centerXInitial=i/2,this.centerYInitial=this.height/2}let n=0-this.pixiText.anchor.x*i,s=0-this.pixiText.anchor.y*this.height;if(this.hitPolygonInitial=[{x:n,y:s},{x:n,y:s+this.height},{x:n+i,y:s+this.height},{x:n+i,y:s}],this.hitPolygonDirty=!0,-this.padding,-this.padding,this.mask.rect(0,0,this.width-2*this.padding,this.height),this.mask.fill(0),this.backgroundGraphics.roundRect(-this.padding,-this.padding,this.width,this.height+2*this.padding,this.fontsize/8),this.fillColor!=null&&(this.backgroundGraphics.fill(this.fillColor),this.backgroundGraphics.alpha=this.fillAlpha),this.borderColor!=null&&this.backgroundGraphics.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:1}),this.selectionEnd!=this.selectionStart){let a=this.characterStops[this.selectionStart]-this.characterStops[this.renderFromCharacterPosition],l=this.characterStops[this.selectionEnd]-this.characterStops[this.renderFromCharacterPosition];if(l{a.deleteSelected(),a.text=a.text.substring(0,a.selectionEnd)+l+a.text.substring(a.selectionEnd),a.selectionEnd+=l.length,a.selectionStart=a.selectionEnd,a.generateCharacterStops(),a.render(),this.callOnChange(this.text)});else if(e.length==1)this.deleteSelected(),this.text=this.text.substring(0,this.selectionEnd)+e+this.text.substring(this.selectionEnd),this.selectionEnd++,this.selectionStart=this.selectionEnd,this.generateCharacterStops(),this.render(),this.callOnChange(this.text);else switch(e){case"ArrowRight":this.selectionEnd=Math.min(this.selectionEnd+1,this.text.length),i||(this.selectionStart=this.selectionEnd),this.render();break;case"ArrowLeft":this.selectionEnd=Math.max(this.selectionEnd-1,0),i||(this.selectionStart=this.selectionEnd),this.render();break;case"Delete":this.selectionStart!=this.selectionEnd?this.deleteSelected():this.selectionEnd0&&(this.text=this.text.substring(0,this.selectionEnd-1)+this.text.substring(this.selectionEnd),this.selectionEnd--,this.selectionStart=this.selectionEnd),this.generateCharacterStops(),this.render(),this.callOnChange(this.text);break;case"Insert":break;case"Home":this.selectionStart=0,this.selectionEnd=0,this.render();break;case"End":this.selectionStart=this.text.length,this.selectionEnd=this.text.length,this.render();break;default:console.log(e);break}}scrollIfNecessary(){let e=this.getCursorXFromCharacterPos(this.selectionEnd),i=!1;for(;e<0&&this.renderFromCharacterPosition>0;)this.renderFromCharacterPosition--,e=this.getCursorXFromCharacterPos(this.selectionEnd),i=!0;for(;e>this.width-2*this.padding&&this.renderFromCharacterPosition{this.sizeX=n,this.sizeY=s,this.container=new Ks,this.columns=[];for(let a=0;a=this.sizeX||i>=this.sizeY}clearAll(){}init(e){let i=e.split(` `);for(let n=0;n=this.sizeY);n++){let s=i[n];for(let a=0;a=this.sizeX);a++){let l=this.columns[a][n],h=s.charAt(a).toLocaleLowerCase();if(h=="m")l.setWall(!0);else{let u=h.charCodeAt(0),m=0;u>=97&&u<=102&&(m=u-97+10),u>=49&&u<=57&&(m=u-49+1),m>0&&l.setGrainCount(m)}}}}destroy(){for(let e of this.columns)for(let i of e)i.destroy();this.backgroundGraphics.destroy(),this.hamsters.forEach(e=>e.destroy()),this.belowWorldText.destroy(),super.destroy()}};r(dr,"__javaDeclarations",[{type:"declaration",signature:"class JavaHamsterWorld extends FilledShape",comment:o.HamsterWorldClassComment},{type:"method",signature:"JavaHamsterWorld(int Breite, int Höhe)",java:dr.prototype._cj$_constructor_$JavaHamsterWorld$int$int,comment:o.HamsterWorldConstructorComment},{type:"method",signature:"final int getBreite()",template:"§1.sizeX",comment:o.HamsterWorldGetBreiteComment},{type:"method",signature:"final int getHöhe()",template:"§1.sizeY",comment:o.HamsterWorldGetHoeheComment},{type:"method",signature:"final void löscheAlles()",native:dr.prototype.clearAll,comment:o.HamsterWorldLoescheAllesComment},{type:"method",signature:"final void setzeMauer(int x, int y)",native:dr.prototype.setOrRemoveWall,comment:o.HamsterWorldSetzeMauerComment},{type:"method",signature:"final void setzeGetreide(int x, int y, int anzahl)",native:dr.prototype.setGrain,comment:o.HamsterWorldSetzeGetreideComment},{type:"method",signature:"final void init(string worldAsString)",native:dr.prototype.init,comment:o.HamsterWorldInitComment},{type:"method",signature:"final void scale(double factor)",native:dr.prototype.scaleNew,comment:o.shapeScaleComment1}]),r(dr,"type");let iu=dr;const to=class to extends R{constructor(){super(...arguments);r(this,"sprite");r(this,"world")}_cj$_constructor_$Hamster$JavaHamsterWorld$int$int$int$int(e,i,n,s,a,l,h){if(n==null)throw new W("Der Parameter javaHamsterWorld darf nicht null sein.");this.world=n,this.sprite=new ru(n,a,s,l,h),e.s.push(this),i&&i()}_mj$schreib$void$string(e,i,n){e.println(n,16777215),i&&i()}};r(to,"__javaDeclarations",[{type:"declaration",signature:"class Hamster extends Object",comment:o.HamsterClassComment},{type:"field",signature:"static int NORD",constantValue:0},{type:"field",signature:"static int OST",constantValue:1},{type:"field",signature:"static int SÜD",constantValue:2},{type:"field",signature:"static int WEST",constantValue:3},{type:"method",signature:"Hamster(JavaHamsterWorld world, int reihe, int spalte, int blickrichtung, int anzahlkörner)",java:to.prototype._cj$_constructor_$Hamster$JavaHamsterWorld$int$int$int$int,comment:o.HamsterConstructorComment},{type:"method",signature:"final void vor()",template:"§1.sprite.forward();",comment:o.HamsterVorComment},{type:"method",signature:"final JavaHamsterWorld getWorld()",template:"§1.world",comment:o.HamsterGetWorldComment},{type:"method",signature:"final int getBlickrichtung()",template:"§1.sprite.direction",comment:o.HamsterGetBlickrichtungComment},{type:"method",signature:"final int getReihe()",template:"§1.sprite.x",comment:o.HamsterGetReiheComment},{type:"method",signature:"final int getSpalte()",template:"§1.sprite.y",comment:o.HamsterGetSpalteComment},{type:"method",signature:"final int getAnzahlKoerner()",template:"§1.sprite.grainCount",comment:o.HamsterGetKoernerComment},{type:"method",signature:"final void linksUm()",template:"§1.sprite.turn(-1)",comment:o.HamsterLinksUmComment},{type:"method",signature:"final void gib()",template:"§1.sprite.give()",comment:o.HamsterGibComment},{type:"method",signature:"final void nimm()",template:"§1.sprite.take()",comment:o.HamsterNimmComment},{type:"method",signature:"final boolean vornFrei()",template:"§1.sprite.nextCellFree()",comment:o.HamsterVornFreiComment},{type:"method",signature:"final boolean maulLeer()",template:"(§1.sprite.grainCount == 0)",comment:o.HamsterMaulLeerComment},{type:"method",signature:"final boolean kornDa()",template:"§1.sprite.sitsOnGrain()",comment:o.HamsterKornDaComment},{type:"method",signature:"final void schreib(string text)",java:to.prototype._mj$schreib$void$string,comment:o.HamsterSchreibComment}]),r(to,"type");let nu=to;const io=class io{constructor(t,e,i,n,s){r(this,"sprite");this.world=t,this.x=e,this.y=i,this.direction=n,this.grainCount=s;let l=Lo.get("spritesheet").textures["Hamster#0"];this.sprite=new tr(l),this.sprite.anchor.x=.5,this.sprite.anchor.y=.5,this.move(t.left+(e+.5)*t.cellWidth,t.top+(i+.5)*t.cellWidth),t.container.addChild(this.sprite),this.direction=2,this.setDirection(n),t.hamsters.push(this)}writeBelowWorldText(){this.world.hamsters.length==1&&(this.world.belowWorldText.text=`Hamster: ${this.grainCount}, Zelle: ${this.world.getGrainCount(this.x,this.y)}`)}testDestroyed(t){return this.sprite.destroyed?(this.throwException("Die Methode "+t+" eines schon zerstörten Hamsters wurde aufgerufen."),!0):!1}destroy(){this.sprite.destroy()}forward(){let t=io.directions[this.direction],e=this.x+t.dx,i=this.y+t.dy;if(this.world.isOutside(e,i)){this.throwException(`Die neue Position (${e}, ${i}) ist außerhalb der Welt. Der Hamster kann daher nicht weitergehen.`);return}if(this.world.isWall(e,i)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich eine Mauer. Der Hamster kann daher nicht weitergehen.`);return}this.moveToCell(e,i),this.writeBelowWorldText()}turn(t){this.setDirection((this.direction+t+4)%4)}throwException(t){throw new W(t)}move(t,e){this.sprite.localTransform.translate(t,e),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform()}moveToCell(t,e){this.move((t-this.x)*this.world.cellWidth,(e-this.y)*this.world.cellWidth),this.x=t,this.y=e}setDirection(t){let e=(t-this.direction+4)%4,i=this.world.left+(this.x+.5)*this.world.cellWidth,n=this.world.top+(this.y+.5)*this.world.cellWidth;this.sprite.localTransform.translate(-i,-n),this.sprite.localTransform.rotate(e*Math.PI/2),this.sprite.localTransform.translate(i,n),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform(),this.direction=t}getPositionInDirection(t){let e=io.directions[(this.direction+t+4)%4];return{x:(this.x+e.dx+this.world.sizeX)%this.world.sizeX,y:(this.y+e.dy+this.world.sizeY)%this.world.sizeY}}setPosition(t,e){t<0&&(t=-t-1+this.world.sizeX),e<0&&(e=-e-1+this.world.sizeY),this.moveToCell(t%this.world.sizeX,e%this.world.sizeY)}give(){if(this.grainCount<=0){this.throwException("Der Hamster hat kein Korn mehr, das er ablegen könnte.");return}this.grainCount--,this.world.setGrain(this.x,this.y,this.world.getGrainCount(this.x,this.y)+1),this.writeBelowWorldText()}take(){if(this.world.getGrainCount(this.x,this.y)<=0){this.throwException("In der Zelle, in der sich der Hamster befindet, liegt kein Korn. Der Hamster kann daher keines nehmen.");return}this.grainCount++,this.world.setGrain(this.x,this.y,this.world.getGrainCount(this.x,this.y)-1),this.writeBelowWorldText()}nextCellFree(){let t=io.directions[this.direction],e=this.x+t.dx,i=this.y+t.dy;return this.world.isOutside(e,i)?!1:!this.world.isWall(e,i)}sitsOnGrain(){return this.world.getGrainCount(this.x,this.y)>0}};r(io,"directions",[{index:0,dx:0,dy:-1},{index:1,dx:1,dy:0},{index:2,dx:0,dy:1},{index:3,dx:-1,dy:0}]);let ru=io;class Iy{constructor(t,e,i){r(this,"wallSprite");r(this,"grainSprite");r(this,"grainText");r(this,"grainCount",0);r(this,"_isWall",!1);this.world=t,this.x=e,this.y=i;let n=Lo.get("spritesheet"),s=t.container,a=t.left+(e+.5)*t.cellWidth,l=t.top+(i+.5)*t.cellWidth,h=n.textures["Hamster#1"];this.grainSprite=new tr(h),this.move(a,l,this.grainSprite),this.grainSprite.anchor.x=.5,this.grainSprite.anchor.y=.5,s.addChild(this.grainSprite);let u=n.textures["Hamster#2"];this.wallSprite=new tr(u),this.move(a,l,this.wallSprite),this.wallSprite.anchor.x=.5,this.wallSprite.anchor.y=.5,s.addChild(this.wallSprite),this.grainText=new za({text:"0",style:new Wh({fontFamily:"sans-serif",fontSize:24,fontStyle:"normal",fontWeight:"normal",fill:0,stroke:{color:"#ffffff40",width:2},align:"center"})}),this.grainText.anchor.x=.5,this.grainText.anchor.y=.5,this.move(a,l,this.grainText),s.addChild(this.grainText),this.grainSprite.visible=!1,this.wallSprite.visible=!1,this.grainText.visible=!1}move(t,e,i){i.localTransform.translate(t,e),i.setFromMatrix(i.localTransform),i.updateLocalTransform()}setGrainCount(t){this.grainSprite.visible=t>0,this.grainText.visible=t>0,this.grainText.text=""+t,this.grainCount=t}getGrainCount(){return this.grainCount}isWall(){return this._isWall}setWall(t){this._isWall=t,this.wallSprite.visible=t}destroy(){this.wallSprite.destroy(),this.grainSprite.destroy(),this.grainText.destroy()}}const xn=class xn extends Rt{constructor(){super(...arguments);r(this,"left",10);r(this,"top",10);r(this,"sizeX");r(this,"sizeY");r(this,"cellWidth",28);r(this,"backgroundGraphics");r(this,"columns",[]);r(this,"karas",[])}_cj$_constructor_$JavaKaraWorld$int$int(e,i,n,s){this._cj$_constructor_$FilledShape$(e,()=>{this.sizeX=n,this.sizeY=s,this.columns=[];for(let a=0;a=this.sizeX||a.y<0||a.y>=this.sizeY)return!1;for(let l of this.columns[a.x][a.y])if(l.isMushroom())return!0;return!1}isTree(e,i,n,s){let a=this.withDirection(e,i,n,s);if(a.x<0||a.x>=this.sizeX||a.y<0||a.y>=this.sizeY)return!1;for(let l of this.columns[a.x][a.y])if(l.isTree())return!0;return!1}isLeaf(e,i,n,s){let a=this.withDirection(e,i,n,s);if(a.x<0||a.x>=this.sizeX||a.y<0||a.y>=this.sizeY)return!1;for(let l of this.columns[a.x][a.y])if(l.isLeaf())return!0;return!1}withDirection(e,i,n,s){if(i==2)return{x:n,y:s};let a=Xr.directions[(e+i+Xr.directions.length)%Xr.directions.length];return n+=a.dx,s+=a.dy,{x:n,y:s}}render(){this.backgroundGraphics!=null&&this.backgroundGraphics.destroy();let e=this.container;this.backgroundGraphics=new it,e.addChild(this.backgroundGraphics),e.setChildIndex(this.backgroundGraphics,0);let i=this.sizeX*this.cellWidth,n=this.sizeY*this.cellWidth;this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+n},{x:this.left+i,y:this.top+n},{x:this.left+i,y:this.top}],this.backgroundGraphics.clear(),this.backgroundGraphics.moveTo(this.left,this.top),this.backgroundGraphics.lineTo(this.left+i,this.top),this.backgroundGraphics.lineTo(this.left+i,this.top+n),this.backgroundGraphics.lineTo(this.left,this.top+n),this.backgroundGraphics.closePath();for(let s=1;s=0&&i.splice(n,1)}addSprite(e,i,n){this.columns[e][i].push(n)}moveSprite(e,i,n){this.removeSprite(n),this.addSprite(e,i,n)}getMushroom(e,i){return this.columns[e][i].find(s=>s.isMushroom())}isOutside(e,i){return e<=0||i<=0||e>=this.sizeX||i>=this.sizeY}put(e,i,n){if(e<0&&(e=-e+this.sizeX-1),i<0&&(i=-i+this.sizeY-1),e=e%this.sizeX,i=i%this.sizeY,this.columns[e][i].push(n),n.isKara())this.karas.push(n);else for(let s of this.karas){let a=this.container,l=a.children.length-1;a.setChildIndex(s.sprite,l)}}removeLeaf(e,i){let s=this.columns[e][i].find(a=>a.isLeaf());this.removeSprite(s),s==null||s.sprite.destroy()}removeTree(e,i){let s=this.columns[e][i].find(a=>a.isTree());this.removeSprite(s),s==null||s.sprite.destroy()}removeMushroom(e,i){let s=this.columns[e][i].find(a=>a.isMushroom());this.removeSprite(s),s==null||s.sprite.destroy()}clearAll(){for(let e of this.columns)for(let i of e)this.emptyCellArray(i)}emptyCellArray(e){let i;for(let n of e)n.isKara()?i=n:n.sprite.destroy();for(;e.length>0;)e.pop();i!=null&&e.push(i)}setOrRemoveLeaf(e,i){this.isLeaf(0,2,e,i)?this.removeLeaf(e,i):new Xr(this,e,i,3,1)}setOrRemoveTree(e,i){this.isTree(0,2,e,i)?this.removeTree(e,i):new Xr(this,e,i,3,3)}setOrRemoveMushroom(e,i){this.isMushroom(0,2,e,i)?this.setOrRemoveMushroom(e,i):new Xr(this,e,i,3,2)}isEmpty(e,i){return this.columns[e][i].length==0}init(e){this.clearAll();let i=e.split(` `);for(let n=0;n=this.sizeY);n++){let s=i[n];for(let a=0;a=this.sizeX);a++)switch(s.charAt(a).toLocaleLowerCase()){case"l":this.setOrRemoveLeaf(a,n);break;case"t":this.setOrRemoveTree(a,n);break;case"m":this.setOrRemoveMushroom(a,n);break}}}destroy(){for(let e of this.columns)for(let i of e){for(let n of i)n.sprite.destroy();for(;i.length>0;)i.pop()}super.destroy()}};r(xn,"__javaDeclarations",[{type:"declaration",signature:"class JavaKaraWorld extends FilledShape",comment:o.JavaKaraWorldClassComment},{type:"field",signature:"static int NORTH",constantValue:0},{type:"field",signature:"static int WEST",constantValue:1},{type:"field",signature:"static int SOUTH",constantValue:2},{type:"field",signature:"static int EAST",constantValue:3},{type:"method",signature:"JavaKaraWorld(int sizeX, int sizeY)",java:xn.prototype._cj$_constructor_$JavaKaraWorld$int$int,comment:o.JavaKaraWorldConstructorComment},{type:"method",signature:"final int getSizeX()",template:"§1.sizeX",comment:o.JavaKaraWorldGetSizeXComment},{type:"method",signature:"final int getSizeY()",template:"§1.sizeY",comment:o.JavaKaraWorldGetSizeYComment},{type:"method",signature:"final void clearAll()",native:xn.prototype.clearAll,comment:o.JavaKaraWorldClearAllComment},{type:"method",signature:"final void setLeaf(int x, int y)",native:xn.prototype.setOrRemoveLeaf,comment:o.JavaKaraWorldSetLeafComment},{type:"method",signature:"final void setTree(int x, int y)",native:xn.prototype.setOrRemoveTree,comment:o.JavaKaraWorldSetTreeComment},{type:"method",signature:"final void setMushroom(int x, int y)",native:xn.prototype.setOrRemoveMushroom,comment:o.JavaKaraWorldSetMushroomComment},{type:"method",signature:"final boolean isEmpty(int x, int y)",native:xn.prototype.isEmpty,comment:o.JavaKaraWorldIsEmptyComment},{type:"method",signature:"final void init(string s)",native:xn.prototype.init,comment:o.JavaKaraWorldInitComment},{type:"method",signature:"final void scale(double factor)",native:xn.prototype.scaleNew,comment:o.shapeScaleComment1}]),r(xn,"type");let su=xn;const hr=class hr extends R{constructor(){super(...arguments);r(this,"sprite");r(this,"world")}_cj$_constructor_$Kara$JavaKaraWorld$int$int$int(e,i,n,s,a,l){if(n==null)throw new W("Der Parameter javaKaraWorld darf nicht null sein.");this.world=n,this.sprite=new Xr(n,s,a,l,0),e.s.push(this),i&&i()}_onLeaf(){return this.world.isLeaf(this.sprite.direction,2,this.sprite.x,this.sprite.y)}_treeFront(){return this.world.isTree(this.sprite.direction,0,this.sprite.x,this.sprite.y)}_treeLeft(){return this.world.isTree(this.sprite.direction,1,this.sprite.x,this.sprite.y)}_treeRight(){return this.world.isTree(this.sprite.direction,-1,this.sprite.x,this.sprite.y)}_mushroomFront(){return this.world.isMushroom(this.sprite.direction,0,this.sprite.x,this.sprite.y)}};r(hr,"__javaDeclarations",[{type:"declaration",signature:"class Kara extends Object",comment:o.KaraClassComment},{type:"method",signature:"Kara(JavaKaraWorld world, int x, int y, int direction)",java:hr.prototype._cj$_constructor_$Kara$JavaKaraWorld$int$int$int,comment:o.KaraConstructorComment},{type:"method",signature:"final Position getPosition()",template:"§1.sprite.getPosition()",comment:o.KaraGetPositionComment},{type:"method",signature:"final void move()",template:"§1.sprite.forward()",comment:o.KaraMoveComment},{type:"method",signature:"final JavaKaraWorld getWorld()",template:"§1.world",comment:o.KaraGetWorldComment},{type:"method",signature:"final int getDirection()",template:"§1.sprite.direction",comment:o.KaraGetDirectionComment},{type:"method",signature:"final boolean onLeaf()",native:hr.prototype._onLeaf,comment:o.KaraOnLeafComment},{type:"method",signature:"final boolean treeFront()",native:hr.prototype._treeFront,comment:o.KaraTreeFrontComment},{type:"method",signature:"final boolean treeLeft()",native:hr.prototype._treeLeft,comment:o.KaraTreeLeftComment},{type:"method",signature:"final boolean treeRight()",native:hr.prototype._treeRight,comment:o.KaraTreeRightComment},{type:"method",signature:"final boolean mushroomFront()",native:hr.prototype._mushroomFront,comment:o.KaraMushroomFrontComment},{type:"method",signature:"final void turnLeft()",template:"§1.sprite.turn(1);",comment:o.KaraTurnLeftComment},{type:"method",signature:"final void turnRight()",template:"§1.sprite.turn(-1);",comment:o.KaraTurnRightComment},{type:"method",signature:"final void putLeaf()",template:"§1.sprite.putLeaf();",comment:o.KaraPutLeafComment},{type:"method",signature:"final void removeLeaf()",template:"§1.sprite.removeLeaf();",comment:o.KaraRemoveLeafComment}]),r(hr,"type");let au=hr;const no=class no{constructor(t,e,i,n,s){r(this,"sprite");this.world=t,this.x=e,this.y=i,this.direction=n,this.imageIndex=s;let l=Lo.get("spritesheet").textures["Kara#"+s];this.sprite=new tr(l),this.move(t.left+e*t.cellWidth,t.top+i*t.cellWidth),t.container.addChild(this.sprite),this.direction=3,this.setDirection(n),this.world.put(e,i,this)}forward(){let t=no.directions[this.direction],e=(this.x+t.dx+this.world.sizeX)%this.world.sizeX,i=(this.y+t.dy+this.world.sizeY)%this.world.sizeY;if(this.world.isTree(0,2,e,i)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich ein Baumstumpf. Kara kann nicht dorthin gehen.`);return}if(this.world.isMushroom(0,2,e,i)){let n=e+t.dx,s=i+t.dy;if(n=(n+this.world.sizeX)%this.world.sizeX,s=(s+this.world.sizeY)%this.world.sizeY,this.world.isTree(0,2,n,s)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich ein Pilz, dahinter ein Baum. Kara kann den Pilz daher nicht schieben.`);return}if(this.world.isMushroom(0,2,n,s)){this.throwException(`An der neuen Position (${e}, ${i}) befindet sich ein Pilz, dahinter noch ein Pilz. Kara kann den Pilz daher nicht schieben.`);return}let a=this.world.getMushroom(e,i);a==null||a.moveToCell(n,s)}this.moveToCell(e,i)}turn(t){this.setDirection((this.direction+t+4)%4)}throwException(t){throw new W(t)}move(t,e){this.sprite.localTransform.translate(t,e),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform()}moveToCell(t,e){this.move((t-this.x)*this.world.cellWidth,(e-this.y)*this.world.cellWidth),this.x=t,this.y=e,this.world.moveSprite(t,e,this)}setDirection(t){let e=(t-this.direction+4)%4,i=this.world.left+this.x*this.world.cellWidth+14,n=this.world.top+this.y*this.world.cellWidth+14;this.sprite.localTransform.translate(-i,-n),this.sprite.localTransform.rotate(-e*Math.PI/2),this.sprite.localTransform.translate(i,n),this.sprite.setFromMatrix(this.sprite.localTransform),this.sprite.updateLocalTransform(),this.sprite._didLocalTransformChangeId=this.sprite._didChangeId,this.direction=t}isLeaf(){return this.imageIndex==1}isMushroom(){return this.imageIndex==2}isTree(){return this.imageIndex==3}isKara(){return this.imageIndex==0}getPositionFront(){return this.getPositionInDirection(0)}getPositionLeft(){return this.getPositionInDirection(1)}getPositionRight(){return this.getPositionInDirection(-1)}getPositionInDirection(t){let e=no.directions[(this.direction+t+4)%4];return{x:(this.x+e.dx+this.world.sizeX)%this.world.sizeX,y:(this.y+e.dy+this.world.sizeY)%this.world.sizeY}}putLeaf(){if(this.world.isLeaf(0,2,this.x,this.y)){this.throwException("Unter Kara liegt schon ein Kleeblatt, es kann an dieser Position nicht noch eines abgelegt werden.");return}new no(this.world,this.x,this.y,3,1)}removeLeaf(){if(!this.world.isLeaf(0,2,this.x,this.y)){this.throwException("Unter Kara liegt kein Kleeblatt, daher kann Kara keines aufheben (Methode removeLeaf).");return}this.world.removeLeaf(this.x,this.y)}setPosition(t,e){t<0&&(t=-t-1+this.world.sizeX),e<0&&(e=-e-1+this.world.sizeY),this.moveToCell(t%this.world.sizeX,e%this.world.sizeY)}getPosition(){let t=new Ml;return t.x=this.x,t.y=this.y,t}testDestroyed(t){return this.sprite.destroyed?(this.throwException("Die Methode "+t+" eines schon zerstörten Marienkäfers wurde aufgerufen."),!0):!1}};r(no,"directions",[{index:0,dx:0,dy:-1},{index:1,dx:-1,dy:0},{index:2,dx:0,dy:1},{index:3,dx:1,dy:0}]);let Xr=no;const cr=class cr extends Rt{_cj$_constructor_$Line$(t,e){this._cj$_constructor_$Line$double$double$double$double(t,e,0,0,100,100)}_cj$_constructor_$Line$double$double$double$double(t,e,i,n,s,a){this._cj$_constructor_$FilledShape$(t,()=>{this.hitPolygonInitial=[{x:i,y:n},{x:s,y:a}],this.centerXInitial=(i+s)/2,this.centerYInitial=(n+a)/2,this.borderColor=16777215,this.borderWidth=10,this.render()})}_mj$copy$Shape$(t,e){this._mj$copy$Line$(t,e)}_mj$copy$Line$(t,e){let i=new cr;i._cj$_constructor_$Line$double$double$double$double(t,e,this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y,this.hitPolygonInitial[1].x,this.hitPolygonInitial[1].y),i.copyFrom(this),i.render(),t.s.push(i),e&&e()}render(){let t=this.container;this.container?t.clear():(t=new it,this.container=t,this.world.app.stage.addChild(t)),t.moveTo(this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y),t.lineTo(this.hitPolygonInitial[1].x,this.hitPolygonInitial[1].y),this.borderColor!=null&&t.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5})}_setPoints(t,e,i,n){let s=new me(t,e);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial[0].x=s.x,this.hitPolygonInitial[0].y=s.y;let a=new me(i,n);this.getWorldTransform().applyInverse(a,a),this.hitPolygonInitial[1].x=a.x,this.hitPolygonInitial[1].y=a.y,this.render()}_mj$toString$String$(t,e){t.s.push(new Y(this._debugOutput())),e&&e()}_debugOutput(){return this.isDestroyed?"":(this.transformHitPolygon(),`{x1: ${this.hitPolygonTransformed[0].x}, y1: ${this.hitPolygonTransformed[0].y}, x2: ${this.hitPolygonTransformed[1].x}, y2: ${this.hitPolygonTransformed[1].y}}`)}};r(cr,"__javaDeclarations",[{type:"declaration",signature:"class Line extends FilledShape",comment:o.LineClassComment},{type:"method",signature:"Line()",java:cr.prototype._cj$_constructor_$Line$,comment:o.LineEmptyConstructorComment},{type:"method",signature:"Line(double x1, double y1, double x2, double y2)",java:cr.prototype._cj$_constructor_$Line$double$double$double$double,comment:o.LineConstructorComment1},{type:"method",signature:"final void setPoints(double x1, double y1, double x2, double y2)",native:cr.prototype._setPoints,comment:o.LineSetPointsComment},{type:"method",signature:"final Line copy()",java:cr.prototype._mj$copy$Line$,comment:o.LineCopyComment},{type:"method",signature:"String toString()",java:cr.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(cr,"type");let ou=cr;const zr=class zr extends $i{_mj$onMouseUp$void$double$double$int(t,e,i,n,s){}_mj$onMouseDown$void$double$double$int(t,e,i,n,s){}_mj$onMouseMove$void$double$double(t,e,i,n){}_mj$onMouseEnter$void$double$double(t,e,i,n){}_mj$onMouseLeave$void$double$double(t,e,i,n){}};r(zr,"__javaDeclarations",[{type:"declaration",signature:"interface MouseListener",comment:o.mouseListenerInterfaceComment},{type:"method",signature:"void onMouseUp(double x, double y, int button)",java:zr.prototype._mj$onMouseUp$void$double$double$int,comment:o.mouseListenerOnMouseUpComment},{type:"method",signature:"void onMouseDown(double x, double y, int button)",java:zr.prototype._mj$onMouseDown$void$double$double$int,comment:o.mouseListenerOnMouseDownComment},{type:"method",signature:"void onMouseMove(double x, double y)",java:zr.prototype._mj$onMouseMove$void$double$double,comment:o.mouseListenerOnMouseMoveComment},{type:"method",signature:"void onMouseEnter(double x, double y)",java:zr.prototype._mj$onMouseEnter$void$double$double,comment:o.mouseListenerOnMouseEnterComment},{type:"method",signature:"void onMouseLeave(double x, double y)",java:zr.prototype._mj$onMouseLeave$void$double$double,comment:o.mouseListenerOnMouseLeaveComment}]),r(zr,"type");let lu=zr;const It=class It extends Rt{constructor(){super(...arguments);r(this,"isClosed",!1);r(this,"closeAndFill",!1)}_cj$_constructor_$Polygon$Shape(e,i,n){let s=[];s=this.extractPoints(n,s),n instanceof Rs&&(s=Gd.makeHull(s));let a=[];for(let l of s)a.push(l.x),a.push(l.y);a.length>0&&(a=a.concat(a.slice(0,2))),this._cj$_constructor_$Polygon$boolean$double_I(e,i,!1,a)}extractPoints(e,i){if(e instanceof Rs){let n=[];for(let s of e.shapes)n=this.extractPoints(s,n);return i.concat(n)}else return e.hitPolygonDirty&&e.transformHitPolygon(),i.concat(e.hitPolygonTransformed.map(function(n){return{x:n.x,y:n.y}}))}_cj$_constructor_$Polygon$(e,i){let n=[];for(let s=0;s<6;s++){let a=Math.PI/3*s,l=100+50*Math.cos(a),h=100-50*Math.sin(a);n.push(l,h)}this._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,n)}_cj$_constructor_$Polygon$boolean$double_I(e,i,n,s,a=!1){this._cj$_constructor_$FilledShape$(e,()=>{this.closeAndFill=n,this.isClosed=a;let l=0,h=0;if(this.hitPolygonInitial=[],s){for(let u=0;u1&&(this.centerXInitial=l/this.hitPolygonInitial.length,this.centerYInitial=h/this.hitPolygonInitial.length)}n||(this.borderColor=255),this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Polygon$(e,i)}_mj$copy$Polygon$(e,i){let n=new It;n._cj$_constructor_$Polygon$boolean$double_I(e,i,this.closeAndFill,[],this.isClosed),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;if(this.container?e.clear():(e=new it,this.container=e,this.world.app.stage.addChild(e)),this.hitPolygonInitial.length>0){e.moveTo(this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y);for(let i=1;i":(this.transformHitPolygon(),`{points: [${this.hitPolygonTransformed.map(n=>"("+n.x+", "+n.y+")").join(", ")}] }`)}_addPoint(e,i,n=!0){let s=new me(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial.push({x:s.x,y:s.y}),this.hitPolygonDirty=!0,n&&this.render()}_insertPoint(e,i,n){n<0&&(n=0),n>this.hitPolygonInitial.length&&(n=this.hitPolygonInitial.length);let s=new me(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial.splice(n,0,{x:s.x,y:s.y}),this.hitPolygonDirty=!0,this.render()}_movePointTo(e,i,n){if(n<0&&(n=0),n>this.hitPolygonInitial.length&&(n=this.hitPolygonInitial.length),this.hitPolygonInitial.length==0)return;let s=new me(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial[n].x=s.x,this.hitPolygonInitial[n].y=s.y,this.hitPolygonDirty=!0,this.render()}_setPoint(e,i,n){if(n==0||n==1){let s=new me(e,i);this.getWorldTransform().applyInverse(s,s),this.hitPolygonInitial[n]=s,this.hitPolygonDirty=!0,this.render()}}_setPoints(e){this.hitPolygonInitial=[];let i=this.getWorldTransform();for(let n=0;n=e.length-2)}_setAllPointsUntransformed(e){this.hitPolygonInitial=[];for(let i=0;i{});r(this,"canvasCreated",!1)}_mj$setup$void$(e,i){}_mj$settings$void$(e,i){}_mj$preload$void$(e,i){}_mj$draw$void$(e,i){}_mj$mousePressed$void$(e,i){}_mj$mouseReleased$void$(e,i){}_mj$mouseClicked$void$(e,i){}_mj$mouseDragged$void$(e,i){}_mj$mouseEntered$void$(e,i){}_mj$mouseExited$void$(e,i){}_mj$mouseMoved$void$(e,i){}_mj$keyPressed$void$(e,i){}_mj$keyReleased$void$(e,i){}_mj$main$void$(e,i){}_cj$_constructor_$PApplet$(e,i){var s,a;this._constructor(),e.s.push(this);let n=e.scheduler.interpreter;(s=n.graphicsManager)==null||s.registerGraphicSystem(this),n.isExternalTimer=!0,this.graphicsDiv=(a=n.graphicsManager)==null?void 0:a.graphicsDiv,this.graphicsDiv.style.overflow="hidden",this.setupGraphicsDiv(this.graphicsDiv,n),this.setupProcessing(this.containerInner,n),n.eventManager.once("stop",()=>{let l=()=>{};this.p5o.draw=l,this.p5o.setup=l,this.p5o.preload=l,this.p5o.mousePressed=l,this.p5o.mouseReleased=l,this.p5o.mouseClicked=l,this.p5o.mouseDragged=l,this.p5o.keyPressed=l,this.p5o.keyReleased=l,n.isExternalTimer=!1}),this.p5o.POINTS,n.eventManager.once("resetRuntime",()=>{this.p5o.remove(),n.deleteObject("PAppletClass"),this.canvasCreated=!1,this.graphicsDiv&&(this.graphicsDiv.innerHTML="")}),n.storeObject("PAppletClass",this)}get mouseX(){return this.p5o.mouseX}set mouseX(e){this.p5o.mouseX=e}get mouseY(){return this.p5o.mouseY}set mouseY(e){this.p5o.mouseY=e}get pMouseX(){return this.p5o.pmouseX}set pMouseX(e){this.p5o.pmouseX=e}get pMouseY(){return this.p5o.pmouseY}set pMouseY(e){this.p5o.pmouseY=e}get mouseButton(){return this.p5o.mouseButton}set mouseButton(e){this.p5o.mouseButton=e}get key(){return this.p5o.key}set key(e){this.p5o.key=e}setupGraphicsDiv(e,i){this.containerOuter=z.makeDiv(void 0,"jo_pAppletOuter"),this.onSizeChanged=()=>{var l;let n=e.parentElement.parentElement.getBoundingClientRect(),s=n.width,a=n.height;this.height/this.width>a/s?(e.style.width=this.width/this.height*a+"px",e.style.height=a+"px"):(e.style.width=s+"px",e.style.height=this.height/this.width*s+"px"),(l=i.graphicsManager)==null||l.resizeGraphicsDivHeight()},this.resizeObserver=new ResizeObserver(()=>{this.onSizeChanged()}),this.resizeObserver.observe(this.graphicsDiv.parentElement.parentElement),this.onSizeChanged(),this.containerInner=z.makeDiv(this.containerOuter,"jo_pAppletInner"),e.innerHTML="",e.append(this.containerOuter),e.oncontextmenu=function(n){n.preventDefault()}}_createCanvas(e,i,n){n||(n=this.renderer),this.renderer=n,this.width=e,this.height=i,this.onSizeChanged(),this.p5o.createCanvas(this.width,this.height);let s=this.containerInner.getElementsByTagName("canvas");s.length>0&&(s[0].style.width="",s[0].style.height=""),this.canvasCreated=!0}setupProcessing(e,i){let n=this;this.canvasCreated=!1;let s=!0,a=h=>{h.disableFriendlyErrors=!0,h.setup=function(){n.renderer=h.P2D,n.p5o=h;let u=()=>{s=!1,n.canvasCreated||n._createCanvas(n.width,n.height)},m=2;n.runMethod(n._mj$setup$void$,()=>{--m==0&&u()},i),n.runMethod(n._mj$settings$void$,()=>{--m==0&&u()},i)},h.preload=function(){n.runMethod(n._mj$preload$void$,void 0,i)},h.draw=function(){i.scheduler.state==ie.running&&!n.loopStopped&&(s||(s=!0,n.runMethod(n._mj$draw$void$,()=>{s=!1},i))),i.timerFunction(1e3/60)},h.mousePressed=function(){n.runMethod(n._mj$mousePressed$void$,void 0,i)},h.mouseReleased=function(){n.runMethod(n._mj$mouseReleased$void$,void 0,i)},h.mouseClicked=function(){n.runMethod(n._mj$mouseClicked$void$,void 0,i)},h.mouseDragged=function(){n.runMethod(n._mj$mouseDragged$void$,void 0,i)},h.mouseMoved=function(){n.runMethod(n._mj$mouseMoved$void$,void 0,i)},h.keyPressed=function(){n.runMethod(n._mj$keyPressed$void$,void 0,i)},h.keyReleased=function(){n.runMethod(n._mj$keyReleased$void$,void 0,i)}};new ob(a,e);let l=this.containerInner.getElementsByTagName("canvas");l.length>0&&(l[0].style.width="",l[0].style.height="")}runMethod(e,i,n){if(e==lt.prototype[e.name]){i&&i();return}let s=n.scheduler.createThread("processing: "+e.name);e.call(this,s,i),s.startIfNotEmptyOrDestroy()}getIdentifier(){return"Processing"}};r(lt,"__javaDeclarations",[{type:"declaration",signature:"class PApplet extends Object",comment:o.PAppletClassComment},{type:"field",signature:"int mouseX",template:"§1.p5o.mouseX",comment:o.PAppletMouseXComment},{type:"field",signature:"int mouseY",template:"§1.p5o.mouseY",comment:o.PAppletMouseYComment},{type:"field",signature:"int pMouseX",template:"§1.p5o.pMouseX",comment:o.PAppletPMouseXComment},{type:"field",signature:"int pMouseY",template:"§1.p5o.pMouseY",comment:o.PAppletPMouseYComment},{type:"field",signature:"int mouseButton",template:"§1.p5o.mouseButton",comment:o.PAppletMouseButtonComment},{type:"field",signature:"string key",template:"§1.p5o.key",comment:o.PAppletKeyComment},{hiddenWhenDebugging:!0,type:"field",signature:"int LEFT",template:"§1.p5o.LEFT",comment:o.PAppletLEFTComment},{hiddenWhenDebugging:!0,type:"field",signature:"int CENTER",template:"§1.p5o.CENTER",comment:o.PAppletCENTERComment},{hiddenWhenDebugging:!0,type:"field",signature:"int RIGHT",template:"§1.p5o.RIGHT",comment:o.PAppletRIGHTComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TOP",template:"§1.p5o.TOP",comment:o.PAppletTOPComment},{hiddenWhenDebugging:!0,type:"field",signature:"int BASELINE",template:"§1.p5o.BASELINE",comment:o.PAppletBASELINEComment},{hiddenWhenDebugging:!0,type:"field",signature:"int BOTTOM",template:"§1.p5o.BOTTOM",comment:o.PAppletBOTTOMComment},{hiddenWhenDebugging:!0,type:"field",signature:"int CORNER",template:"§1.p5o.CORNER",comment:o.PAppletCORNERComment},{hiddenWhenDebugging:!0,type:"field",signature:"int CORNERS",template:"§1.p5o.CORNERS",comment:o.PAppletCORNERSComment},{hiddenWhenDebugging:!0,type:"field",signature:"int RADIUS",template:"§1.p5o.RADIUS",comment:o.PAppletRADIUSComment},{hiddenWhenDebugging:!0,type:"field",signature:"int POINTS",template:"§1.p5o.POINTS",comment:o.PAppletPOINTSComment},{hiddenWhenDebugging:!0,type:"field",signature:"int LINES",template:"§1.p5o.LINES",comment:o.PAppletLINESComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TRIANGLES",template:"§1.p5o.TRIANGLES",comment:o.PAppletTRIANGLESComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TRIANGLE_STRIP",template:"§1.p5o.TRIANGLE_STRIP",comment:o.PAppletTRIANGLE_STRIPComment},{hiddenWhenDebugging:!0,type:"field",signature:"int TRIANGLE_FAN",template:"§1.p5o.TRIANGLE_FAN",comment:o.PAppletTRIANGLE_FANComment},{hiddenWhenDebugging:!0,type:"field",signature:"string QUADS",template:"§1.p5o.QUADS",comment:o.PAppletQUADSComment},{hiddenWhenDebugging:!0,type:"field",signature:"string QUAD_STRIP",template:"§1.p5o.QUAD_STRIP",comment:o.PAppletQUAD_STRIPComment},{hiddenWhenDebugging:!0,type:"field",signature:"string TESS",template:"§1.p5o.TESS",comment:o.PAppletTESSComment},{hiddenWhenDebugging:!0,type:"field",signature:"string CLOSE",template:"§1.p5o.CLOSE",comment:o.PAppletCLOSEComment},{hiddenWhenDebugging:!0,type:"field",signature:"string DEGREES",template:"§1.p5o.DEGREES",comment:o.PAppletDEGREESComment},{hiddenWhenDebugging:!0,type:"field",signature:"string RADIANS",template:"§1.p5o.RADIANS",comment:o.PAppletRADIANSComment},{hiddenWhenDebugging:!0,type:"field",signature:"string WEBGL",template:"§1.p5o.WEBGL",comment:o.PAppletWEBGLComment},{hiddenWhenDebugging:!0,type:"field",signature:"string P2D",template:"§1.p5o.P2D",comment:o.PAppletP2DComment},{hiddenWhenDebugging:!0,type:"field",signature:"string RGB",template:"§1.p5o.RGB",comment:o.PAppletRGBComment},{hiddenWhenDebugging:!0,type:"field",signature:"string HSL",template:"§1.p5o.HSL",comment:o.PAppletHSLComment},{hiddenWhenDebugging:!0,type:"field",signature:"string HSB",template:"§1.p5o.HSB",comment:o.PAppletHSBComment},{hiddenWhenDebugging:!0,type:"field",signature:"string PI",template:"§1.p5o.PI",comment:"PI = 3.1415..."},{hiddenWhenDebugging:!0,type:"field",signature:"string QUARTER_PI",template:"§1.p5o.QUARTER_PI",comment:"PI/4"},{hiddenWhenDebugging:!0,type:"field",signature:"string TWO_PI",template:"§1.p5o.TWO_PI",comment:"2*PI"},{hiddenWhenDebugging:!0,type:"field",signature:"string TAU",template:"§1.p5o.TAU",comment:"2*PI"},{type:"method",signature:"PApplet()",java:lt.prototype._cj$_constructor_$PApplet$,comment:o.PAppletConstructorComment},{type:"method",signature:"void main()",java:lt.prototype._mj$main$void$,comment:o.PAppletMainComment},{type:"method",signature:"void loop()",template:"§1.loopStopped = false",comment:o.PAppletLoopComment},{type:"method",signature:"void noLoop()",template:"§1.loopStopped = true",comment:o.PAppletNoLoopComment},{type:"method",signature:"void size(int width, int height)",native:lt.prototype._createCanvas,comment:o.PAppletCreateCanvasComment},{type:"method",signature:"void createCanvas(int width, int height)",native:lt.prototype._createCanvas,comment:o.PAppletCreateCanvasComment},{type:"method",signature:"void createCanvas(int width, int height, string renderer)",native:lt.prototype._createCanvas,comment:o.PAppletCreateCanvasComment},{type:"method",signature:"void setup()",java:lt.prototype._mj$setup$void$,comment:o.PAppletSetupComment},{type:"method",signature:"void settings()",java:lt.prototype._mj$settings$void$,comment:o.PAppletSettingsComment},{type:"method",signature:"void preload()",java:lt.prototype._mj$preload$void$,comment:o.PAppletPreloadComment},{type:"method",signature:"void draw()",java:lt.prototype._mj$draw$void$,comment:o.PAppletDrawComment},{type:"method",signature:"void mousePressed()",java:lt.prototype._mj$mousePressed$void$,comment:o.PAppletMousePressedComment},{type:"method",signature:"void mouseReleased()",java:lt.prototype._mj$mouseReleased$void$,comment:o.PAppletMouseReleasedComment},{type:"method",signature:"void mouseClicked()",java:lt.prototype._mj$mouseClicked$void$,comment:o.PAppletMouseClickedComment},{type:"method",signature:"void mouseDragged()",java:lt.prototype._mj$mouseDragged$void$,comment:o.PAppletMouseDraggedComment},{type:"method",signature:"void mouseEntered()",java:lt.prototype._mj$mouseEntered$void$,comment:o.PAppletMouseEnteredComment},{type:"method",signature:"void mouseExited()",java:lt.prototype._mj$mouseExited$void$,comment:o.PAppletMouseExitedComment},{type:"method",signature:"void mouseMoved()",java:lt.prototype._mj$mouseMoved$void$,comment:o.PAppletMouseMovedComment},{type:"method",signature:"void keyPressed()",java:lt.prototype._mj$keyPressed$void$,comment:o.PAppletKeyPressedComment},{type:"method",signature:"void keyReleased()",java:lt.prototype._mj$keyReleased$void$,comment:o.PAppletKeyReleasedComment},{type:"method",signature:"final void clear()",template:"§1.p5o.clear()",comment:o.PAppletClear0Comment},{type:"method",signature:"final void background(double rgb)",template:"§1.p5o.background(§2)",comment:o.PAppletBackground1Comment},{type:"method",signature:"final string background(string colorAsString)",template:"§1.p5o.background(§2)",comment:o.PAppletBackground2Comment},{type:"method",signature:"final void background(double v1, double v2, double v3)",template:"§1.p5o.background(§2, §3, §4)",comment:o.PAppletBackground3Comment},{type:"method",signature:"final void fill(int rgb)",template:"§1.p5o.fill(§2)",comment:o.PAppletFill1Comment},{type:"method",signature:"final void fill(string rgb)",template:"§1.p5o.fill(§2)",comment:o.PAppletFill1aComment},{type:"method",signature:"final void fill(int rgb, double alpha)",template:"§1.p5o.fill(§2, §3)",comment:o.PAppletFill2Comment},{type:"method",signature:"final void fill(double gray)",template:"§1.p5o.fill(§2)",comment:o.PAppletFill3Comment},{type:"method",signature:"final void fill(double v1, double v2, double v3)",template:"§1.p5o.fill(§2, §3, §4)",comment:o.PAppletFill4Comment},{type:"method",signature:"final void fill(double v1, double v2, double v3, double alpha)",template:"§1.p5o.fill(§2, §3, §4, §5)",comment:o.PAppletFill5Comment},{type:"method",signature:"final void noFill()",template:"§1.p5o.noFill()",comment:o.PAppletNoFill0Comment},{type:"method",signature:"final void stroke(int rgb)",template:"§1.p5o.stroke(§2)",comment:o.PAppletStroke1Comment},{type:"method",signature:"final void stroke(string rgb)",template:"§1.p5o.stroke(§2)",comment:o.PAppletStroke1aComment},{type:"method",signature:"final void stroke(int rgb, double alpha)",template:"§1.p5o.stroke(§2, §3)",comment:o.PAppletStroke2Comment},{type:"method",signature:"final void stroke(double gray)",template:"§1.p5o.stroke(§2)",comment:o.PAppletStroke3Comment},{type:"method",signature:"final void stroke(double v1, double v2, double v3)",template:"§1.p5o.stroke(§2, §3, §4)",comment:o.PAppletStroke4Comment},{type:"method",signature:"final void stroke(double v1, double v2, double v3, double alpha)",template:"§1.p5o.stroke(§2, §3, §4, §5)",comment:o.PAppletStroke5Comment},{type:"method",signature:"final void strokeWeight(double weight)",template:"§1.p5o.strokeWeight(§2)",comment:o.PAppletStrokeWeight1Comment},{type:"method",signature:"final void noStroke()",template:"§1.p5o.noStroke()",comment:o.PAppletNoStroke0Comment},{type:"method",signature:"final string color(double gray)",template:"§1.p5o.color(§2)",comment:o.PAppletColor1Comment},{type:"method",signature:"final string color(string colorAsString)",template:"§1.p5o.color(§2)",comment:o.PAppletColor2Comment},{type:"method",signature:"final string color(double gray, double alpha)",template:"§1.p5o.color(§2, §3)",comment:o.PAppletColor3Comment},{type:"method",signature:"final string color(double v1, double v2, double v3)",template:"§1.p5o.color(§2, §3, §4)",comment:o.PAppletColor4Comment},{type:"method",signature:"final string color(double v1, double v2, double v3, double alpha)",template:"§1.p5o.color(§2, §3, §4, §5)",comment:o.PAppletColor5Comment},{type:"method",signature:"final string lerpColor(string colorA, string colorB, double t)",template:"§1.p5o.lerpColor(§2, §3, §4)",comment:o.PAppletLerpColor3Comment},{type:"method",signature:"final void colorMode(string mode)",template:"§1.p5o.colorMode(§2)",comment:o.PAppletColorMode1Comment},{type:"method",signature:"final void colorMode(string mode, double max)",template:"§1.p5o.colorMode(§2, §3)",comment:o.PAppletColorMode2Comment},{type:"method",signature:"final void colorMode(string mode, double max1, double max2, double max3)",template:"§1.p5o.colorMode(§2, §3, §4, §5)",comment:o.PAppletColorMode4Comment},{type:"method",signature:"final void colorMode(string mode, double max1, double max2, double max3, double maxAlpha)",template:"§1.p5o.colorMode(§2, §3, §4, §5, §6)",comment:o.PAppletColorMode5Comment},{type:"method",signature:"final void rectMode(string mode)",template:"§1.p5o.rectMode(§2)",comment:o.PAppletRectMode1Comment},{type:"method",signature:"final void rect(double left, double top, double width, double height)",template:"§1.p5o.rect(§2, §3, §4, §5)",comment:o.PAppletRect1Comment},{type:"method",signature:"final void rect(double left, double top, double width, double height, double radius)",template:"§1.p5o.rect(§2, §3, §4, §5, §6)",comment:o.PAppletRect1aComment},{type:"method",signature:"final void rect(double left, double top, double width, double height, double radius1, double radius2, double radius3, double radius4)",template:"§1.p5o.rect(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletRect1bComment},{type:"method",signature:"final void square(double left, double top, double width)",template:"§1.p5o.square(§2, §3, §4)",comment:o.PAppletSquare1Comment},{type:"method",signature:"final void square(double left, double top, double width, double radius)",template:"§1.p5o.square(§2, §3, §4, §5)",comment:o.PAppletSquare1aComment},{type:"method",signature:"final void square(double left, double top, double width, double radius1, double radius2, double radius3, double radius4)",template:"§1.p5o.square(§2, §3, §4, §5, §6, §7, §8)",comment:o.PAppletSquare1bComment},{type:"method",signature:"final void rect(double left, double top, double width, double height, double radius)",template:"§1.p5o.rect(§2, §3, §4, §5, §6)",comment:o.PAppletRect1cComment},{type:"method",signature:"final void ellipse(double left, double top, double width, double height)",template:"§1.p5o.ellipse(§2, §3, §4, §5)",comment:o.PAppletEllipse1Comment},{type:"method",signature:"final void circle(double x, double y, double extent)",template:"§1.p5o.circle(§2, §3, §4)",comment:o.PAppletCircle1Comment},{type:"method",signature:"final void ellipseMode(string mode)",template:"§1.p5o.ellipseMode(§2)",comment:o.PAppletEllipseMode1Comment},{type:"method",signature:"final void line(double x1, double y1, double x2, double y2)",template:"§1.p5o.line(§2, §3, §4, §5)",comment:o.PAppletLine1Comment},{type:"method",signature:"final void line(double x1, double y1, double z1, double x2, double y2, double z2)",template:"§1.p5o.line(§2, §3, §4, §5, §6, §7)",comment:o.PAppletLine1aComment},{type:"method",signature:"final void triangle(double x1, double y1, double x2, double y2, double x3, double y3)",template:"§1.p5o.triangle(§2, §3, §4, §5, §6, §7)",comment:o.PAppletTriangle1Comment},{type:"method",signature:"final void quad(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)",template:"§1.p5o.quad(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletQuad1Comment},{type:"method",signature:"final void bezier(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)",template:"§1.p5o.bezier(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletBezier1Comment},{type:"method",signature:"final void curve(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)",template:"§1.p5o.curve(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletCurve1Comment},{type:"method",signature:"final float curvePoint(double a, double b, double c, double d, double t)",template:"§1.p5o.curvePoint(§2, §3, §4, §5, §6)",comment:o.PAppletCurvePoint1Comment},{type:"method",signature:"final float curveTangent(double a, double b, double c, double d, double t)",template:"§1.p5o.curveTangent(§2, §3, §4, §5, §6)",comment:o.PAppletCurveTangent1Comment},{type:"method",signature:"final float bezierPoint(double x1, double x2, double x3, double x4, double t)",template:"§1.p5o.bezierPoint(§2, §3, §4, §5, §6)",comment:o.PAppletBezierPoint1Comment},{type:"method",signature:"final float bezierTangent(double x1, double x2, double x3, double x4, double t)",template:"§1.p5o.bezierTangent(§2, §3, §4, §5, §6)",comment:o.PAppletBezierTangent1Comment},{type:"method",signature:"final void beginShape()",template:"§1.p5o.beginShape()",comment:o.PAppletBeginShape0Comment},{type:"method",signature:"final void endShape()",template:"§1.p5o.endShape()",comment:o.PAppletEndShape0Comment},{type:"method",signature:"final void beginShape(string kind)",template:"§1.p5o.beginShape(§2)",comment:o.PAppletBeginShape1Comment},{type:"method",signature:"final void endShape(string kind)",template:"§1.p5o.endShape(§2)",comment:o.PAppletEndShape1Comment},{type:"method",signature:"final void vertex(double x, double y)",template:"§1.p5o.vertex(§2, §3)",comment:o.PAppletVertex1Comment},{type:"method",signature:"final void point(double x, double y)",template:"§1.p5o.point(§2, §3)",comment:o.PAppletPoint1Comment},{type:"method",signature:"final void set(double x, double y, string color)",template:"§1.p5o.set(§2, §3, §4)",comment:o.PAppletSet3Comment},{type:"method",signature:"final void vertex(double x, double y, double z)",template:"§1.p5o.vertex(§2, §3, §4)",comment:o.PAppletVertex1aComment},{type:"method",signature:"final void point(double x, double y, double z)",template:"§1.p5o.point(§2, §3, §4)",comment:o.PAppletPoint1aComment},{type:"method",signature:"final void curveVertex(double x, double y)",template:"§1.p5o.curveVertex(§2, §3)",comment:o.PAppletCurveVertex1Comment},{type:"method",signature:"final void curvevertex(double x, double y, double z)",template:"§1.p5o.curvevertex(§2, §3, §4)",comment:o.PAppletCurvevertex1Comment},{type:"method",signature:"final void box(double size)",template:"§1.p5o.box(§2)",comment:o.PAppletBox1Comment},{type:"method",signature:"final void box(double sizeX, double sizeY, double sizeZ)",template:"§1.p5o.box(§2, §3, §4)",comment:o.PAppletBox1aComment},{type:"method",signature:"final void resetMatrix()",template:"§1.p5o.resetMatrix()",comment:o.PAppletResetMatrix0Comment},{type:"method",signature:"final void push()",template:"§1.p5o.push()",comment:o.PAppletPush0Comment},{type:"method",signature:"final void pop()",template:"§1.p5o.pop()",comment:o.PAppletPop0Comment},{type:"method",signature:"final void scale(double factor)",template:"§1.p5o.scale(§2)",comment:o.PAppletScale1Comment},{type:"method",signature:"final void scale(double factorX, double factorY)",template:"§1.p5o.scale(§2, §3)",comment:o.PAppletScale1aComment},{type:"method",signature:"final void scale(double factorX, double factorY, double factorZ)",template:"§1.p5o.scale(§2, §3, §4)",comment:o.PAppletScale1bComment},{type:"method",signature:"final void translate(double x, double y)",template:"§1.p5o.translate(§2, §3)",comment:o.PAppletTranslate1Comment},{type:"method",signature:"final void translate(double x, double y, double z)",template:"§1.p5o.translate(§2, §3, §4)",comment:o.PAppletTranslate1aComment},{type:"method",signature:"final void rotate(double angle)",template:"§1.p5o.rotate(§2)",comment:o.PAppletRotate1Comment},{type:"method",signature:"final void rotateX(double angle)",template:"§1.p5o.rotateX(§2)",comment:o.PAppletRotateX1Comment},{type:"method",signature:"final void rotateY(double angle)",template:"§1.p5o.rotateY(§2)",comment:o.PAppletRotateY1Comment},{type:"method",signature:"final void shearX(double angle)",template:"§1.p5o.shearX(§2)",comment:o.PAppletShearX1Comment},{type:"method",signature:"final void shearY(double angle)",template:"§1.p5o.shearY(§2)",comment:o.PAppletShearY1Comment},{type:"method",signature:"final void rotateZ(double angle)",template:"§1.p5o.rotateZ(§2)",comment:o.PAppletRotateZ1Comment},{type:"method",signature:"final void angleMode(string mode)",template:"§1.p5o.angleMode(§2)",comment:o.PAppletAngleMode1Comment},{type:"method",signature:"final void textSize(double size)",template:"§1.p5o.textSize(§2)",comment:o.PAppletTextSize1Comment},{type:"method",signature:"final void textAlign(int alignX)",template:"§1.p5o.textAlign(§2)",comment:o.PAppletTextAlign1Comment},{type:"method",signature:"final void textAlign(int alignX, int alignY)",template:"§1.p5o.textAlign(§2, §3)",comment:o.PAppletTextAlign1aComment},{type:"method",signature:"final void text(string text, double x, double y)",template:"§1.p5o.text(§2, §3, §4)",comment:o.PAppletText3Comment},{type:"method",signature:"final void text(string text, double x, double y, double x2, double y2)",template:"§1.p5o.text(§2, §3, §4, §5, §6)",comment:o.PAppletText5Comment},{type:"method",signature:"final float random(double low, double high)",template:"§1.p5o.random(§2, §3)",comment:o.PAppletRandom1Comment},{type:"method",signature:"final float random(double high)",template:"§1.p5o.random(§2)",comment:o.PAppletRandom1aComment},{type:"method",signature:"final float sqrt(double n)",template:"§1.p5o.sqrt(§2)",comment:o.PAppletSqrt1Comment},{type:"method",signature:"final float pow(double basis, double exponent)",template:"§1.p5o.pow(§2, §3)",comment:o.PAppletPow1Comment},{type:"method",signature:"final float max(double a, double b)",template:"§1.p5o.max(§2, §3)",comment:o.PAppletMax1Comment},{type:"method",signature:"final float min(double a, double b)",template:"§1.p5o.min(§2, §3)",comment:o.PAppletMin1Comment},{type:"method",signature:"final float abs(double n)",template:"§1.p5o.abs(§2)",comment:o.PAppletAbs1Comment},{type:"method",signature:"final float sin(double n)",template:"§1.p5o.sin(§2)",comment:o.PAppletSin1Comment},{type:"method",signature:"final float cos(double n)",template:"§1.p5o.cos(§2)",comment:o.PAppletCos1Comment},{type:"method",signature:"final float tan(double n)",template:"§1.p5o.tan(§2)",comment:o.PAppletTan1Comment},{type:"method",signature:"final float asin(double n)",template:"§1.p5o.asin(§2)",comment:o.PAppletAsin1Comment},{type:"method",signature:"final float acos(double n)",template:"§1.p5o.acos(§2)",comment:o.PAppletAcos1Comment},{type:"method",signature:"final float radians(double angle)",template:"§1.p5o.radians(§2)",comment:o.PAppletRadians1Comment},{type:"method",signature:"final float degrees(double angle)",template:"§1.p5o.degrees(§2)",comment:o.PAppletDegrees1Comment},{type:"method",signature:"final float atan(double n)",template:"§1.p5o.atan(§2)",comment:o.PAppletAtan1Comment},{type:"method",signature:"final float atan2(double x, double y)",template:"§1.p5o.atan2(§2, §3)",comment:o.PAppletAtan21Comment},{type:"method",signature:"final float sqrt(double x, double y)",template:"§1.p5o.sqrt(§2, §3)",comment:o.PAppletSqrt1aComment},{type:"method",signature:"final float sq(double x, double y)",template:"§1.p5o.sq(§2, §3)",comment:o.PAppletSq1Comment},{type:"method",signature:"final int abs(int n)",template:"§1.p5o.abs(§2)",comment:o.PAppletAbs1aComment},{type:"method",signature:"final int round(double n)",template:"§1.p5o.round(§2)",comment:o.PAppletRound1Comment},{type:"method",signature:"final int ceil(double n)",template:"§1.p5o.ceil(§2)",comment:o.PAppletCeil1Comment},{type:"method",signature:"final int floor(double n)",template:"§1.p5o.floor(§2)",comment:o.PAppletFloor1Comment},{type:"method",signature:"final float dist(double x1, double y1, double x2, double y2)",template:"§1.p5o.dist(§2, §3, §4, §5)",comment:o.PAppletDist1Comment},{type:"method",signature:"final float lerp(double a, double b, double t)",template:"§1.p5o.lerp(§2, §3, §4)",comment:o.PAppletLerp1Comment},{type:"method",signature:"final float constrain(double value, double min, double max)",template:"§1.p5o.constrain(§2, §3, §4)",comment:o.PAppletConstrain1Comment},{type:"method",signature:"final int year()",template:"§1.p5o.year()",comment:o.PAppletYear0Comment},{type:"method",signature:"final int month()",template:"§1.p5o.month()",comment:o.PAppletMonth0Comment},{type:"method",signature:"final int day()",template:"§1.p5o.day()",comment:o.PAppletDay0Comment},{type:"method",signature:"final int hour()",template:"§1.p5o.hour()",comment:o.PAppletHour0Comment},{type:"method",signature:"final int minute()",template:"§1.p5o.minute()",comment:o.PAppletMinute0Comment},{type:"method",signature:"final int second()",template:"§1.p5o.second()",comment:o.PAppletSecond0Comment},{type:"method",signature:"final void frameRate(int n)",template:"§1.p5o.frameRate(§2)",comment:o.PAppletFrameRate1Comment},{type:"method",signature:"final float textWidth(string text)",template:"§1.p5o.textWidth(§2)",comment:o.PAppletTextWidth1Comment},{type:"method",signature:"final float textAscent(string text)",template:"§1.p5o.textAscent(§2)",comment:o.PAppletTextAscent1Comment},{type:"method",signature:"final float textDescent(string text)",template:"§1.p5o.textDescent(§2)",comment:o.PAppletTextDescent1Comment},{type:"method",signature:"final void textLeading(double leading)",template:"§1.p5o.textLeading(§2)",comment:o.PAppletTextLeading1Comment},{type:"method",signature:"final void cursor(string type)",template:"§1.p5o.cursor(§2)",comment:o.PAppletCursor1Comment},{type:"method",signature:"final void noCursor(string type)",template:"§1.p5o.noCursor(§2)",comment:o.PAppletNoCursor1Comment},{type:"method",signature:"final void copy(double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh)",template:"§1.p5o.copy(§2, §3, §4, §5, §6, §7, §8, §9)",comment:o.PAppletCopy1Comment},{type:"method",signature:"final void millis()",template:"§1.p5o.millis()",comment:o.PAppletMillis0Comment},{type:"method",signature:"final void redraw()",template:"§1.p5o.redraw()",comment:o.PAppletRedraw0Comment}]),r(lt,"type");let du=lt;const Sn=class Sn extends Rt{constructor(){super(...arguments);r(this,"left");r(this,"top")}get scaledWidth(){return this.scaleFactor*this.initialWidth}get scaledHeight(){return this.scaleFactor*this.initialHeight}set scaledWidth(e){this._setWidth(e)}set scaledHeight(e){this._setHeight(e)}_cj$_constructor_$Rectangle$(e,i){this._cj$_constructor_$Rectangle$double$double$double$double(e,i,0,0,100,100)}_cj$_constructor_$Rectangle$double$double$double$double(e,i,n,s,a,l){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n+a/2,this.centerYInitial=s+l/2,this.left=n,this.top=s,this.initialWidth=a,this.initialHeight=l,this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+this.initialHeight},{x:this.left+this.initialWidth,y:this.top+this.initialHeight},{x:this.left+this.initialWidth,y:this.top}],this.render(),i&&i()})}calculateHitPolygonInitial(){this.hitPolygonInitial=[{x:this.left,y:this.top},{x:this.left,y:this.top+this.initialHeight},{x:this.left+this.initialWidth,y:this.top+this.initialHeight},{x:this.left+this.initialWidth,y:this.top}]}_mj$copy$Shape$(e,i){this._mj$copy$Rectangle$(e,i)}_mj$copy$Rectangle$(e,i){let n=new Sn;n._cj$_constructor_$Rectangle$double$double$double$double(e,i,this.left,this.top,this.initialWidth,this.initialHeight),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;this.container?e.clear():(e=new it,this.container=e,this.world.app.stage.addChild(e)),e.rect(this.left,this.top,this.initialWidth,this.initialHeight),this.fillColor!=null&&(e.fill(this.fillColor),e.alpha=this.fillAlpha),this.borderColor!=null&&e.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),e.closePath()}_setWidth(e){this.initialWidth=e/this.container.scale.x,this.centerXInitial=this.left+this.initialWidth/2,this.calculateHitPolygonInitial(),this.render()}_setHeight(e){this.initialHeight=e/this.container.scale.y,this.centerYInitial=this.top+this.initialHeight/2,this.calculateHitPolygonInitial(),this.render()}_moveTo(e,i){return this.transformHitPolygon(),this._move(e-this.hitPolygonTransformed[0].x,i-this.hitPolygonTransformed[0].y),this}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{width: ${this.scaledWidth}, height: ${this.scaledHeight}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}};r(Sn,"__javaDeclarations",[{type:"declaration",signature:"class Rectangle extends FilledShape",comment:o.rectangleClassComment},{type:"field",signature:"private double width",nativeIdentifier:"scaledWidth"},{type:"field",signature:"private double height",nativeIdentifier:"scaledHeight"},{type:"method",signature:"Rectangle()",java:Sn.prototype._cj$_constructor_$Rectangle$,comment:o.rectangleEmptyConstructorComment},{type:"method",signature:"Rectangle(double left, double top, double width, double height)",java:Sn.prototype._cj$_constructor_$Rectangle$double$double$double$double,comment:o.rectangleConstructorComment},{type:"method",signature:"final void setWidth(double width)",native:Sn.prototype._setWidth,comment:o.rectangleSetWidthComment},{type:"method",signature:"final void setHeight(double height)",native:Sn.prototype._setHeight,comment:o.rectangleSetHeightComment},{type:"method",signature:"final double getWidth()",template:"(§1.initialWidth*§1.scaleFactor)",comment:o.rectangleGetWidthComment},{type:"method",signature:"final double getHeight()",template:"(§1.initialHeight*§1.scaleFactor)",comment:o.rectangleGetHeightComment},{type:"method",signature:"final Rectangle copy()",java:Sn.prototype._mj$copy$Rectangle$,comment:o.rectangleCopyComment},{type:"method",signature:"final Rectangle moveTo(double x, double y)",native:Sn.prototype._moveTo,comment:o.rectangleMoveToComment},{type:"method",signature:"String toString()",java:Sn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Sn,"type");let Ll=Sn;class Ey{constructor(t){r(this,"world3d");r(this,"farben",["rot","gelb","grün","blau"]);r(this,"farbeToColorInfoMap",{rot:16711680,gelb:16776960,grün:65280,blau:255});r(this,"farbeToMarkerMaterialMap",new Map);r(this,"farbeToBrickMaterialMap",new Map);r(this,"grassCubeGeometry");r(this,"brickGeometry");this.robotWorld=t,this.world3d=t.world3d}async init(){for(let t=0;t{this.world3d=e.s.pop(),this.world3d.scene.clear(),this.world3d.scene.background=new Ls(.5,.5,1),this.world3d.currentCamera.camera3d.position.z=10,this.robotCubeFactory=new Ey(this),e.state=F.waiting,await this.robotCubeFactory.init(),e.state=F.running;const l=new Yp(15658734,3);this.world3d.scene.add(l),typeof n=="string"?this.initFromString(n):(this.maxX=n,this.maxY=s,this.initGraphics(),this.initWorldArrays(this.maxX,this.maxY)),this.world3d.orbitControls.dispose(),this.world3d.currentCamera.camera3d.position.set(this.maxX,Math.max(this.maxX,this.maxY),this.maxY),this.world3d.orbitControls=new Qp(this.world3d.currentCamera.camera3d,this.world3d.renderer.domElement),i&&i()})}initGraphics(){this.robotCubeFactory.getGrassPlane(this.maxX,this.maxY),this.robotCubeFactory.initNorthArrow()}initWorldArrays(e,i){this.markers=[],this.bricks=[];for(let n=0;n0){let n=this.bricks[e-1][i-1].pop();this.removeMesh(n),this.adjustMarkerHeight(e,i),this.adjustRobotPositions(e,i)}else return!1}getBrickCount(e,i){return this.bricks[e-1][i-1].length}hasBrickColor(e,i,n){for(let s of this.bricks[e-1][i-1])if(s.userData.farbe==n)return!0;return!1}getMarkerColor(e,i){let n=this.markers[e-1][i-1];return n==null?null:n.userData.farbe}setMarker(e,i,n){this.markers[e-1][i-1]!=null&&this.removeMesh(this.markers[e-1][i-1]);let s=this.robotCubeFactory.getMarker(n,e,i,this.bricks[e-1][i-1].length);this.markers[e-1][i-1]=s}removeMarker(e,i){let n=this.markers[e-1][i-1];return n==null?!1:(this.markers[e-1][i-1]=null,this.removeMesh(n),!0)}adjustMarkerHeight(e,i){let n=this.markers[e-1][i-1];if(n!=null){let s=this.bricks[e-1][i-1].length;n.translateY((s-n.userData.z)/2),n.userData.z=s}}clear(){for(let e=0;e0;)this.removeMesh(n.pop())}for(let e=0;e{e instanceof ge&&(e.geometry.dispose(),e.material instanceof rb&&e.material.dispose())})}getNumberOfBricks(e,i){return this.bricks[e-1][i-1].length}initFromString(e){let i={r:"rot",g:"grün",b:"blau",y:"gelb"},n={R:"rot",G:"grün",B:"blau",Y:"gelb"},s=["1","2","3","4","5","6","7","8","9","0"];this.clear();let a=e.split(` `),l=0;a.forEach(f=>{let b=this.rowLength(f);b>l&&(l=b)}),this.initWorldArrays(l,a.length),this.maxX=l,this.maxY=a.length,this.initGraphics();let h,u,m="rot",g="gelb";for(let f=0;f=0){for(let x=0;x=0&&i++;return i}gibtFarbe(e){return this.robotCubeFactory.farben.indexOf(e)>=0}removeMesh(e){this.world3d.scene.remove(e),e.geometry.dispose(),e.material.dispose()}_setzeMaximalhoehe(e){this.maximumHeight=e}_setzeZiegel(e,i,n,s){if(e<1||e>this.maxX||i<1||i>this.maxY)throw new W(o.robotWorldPositionOutsideWorldError(e,i));for(let a=0;athis.maxX||i<1||i>this.maxY)throw new W(o.robotWorldPositionOutsideWorldError(e,i));this.setMarker(e,i,n)}};r(xs,"__javaDeclarations",[{type:"declaration",package:"robot",signature:"class RobotWorld extends Object",comment:o.robotWorldClassComment},{type:"method",signature:"RobotWorld(int worldX, int worldY)",java:xs.prototype._cj$_constructor_$RobotWorld$int$int,comment:o.robotWorldConstructorWorldXWorldY},{type:"method",signature:"RobotWorld(string initialeWelt)",java:xs.prototype._cj$_constructor_$RobotWorld$int$int,comment:o.robotWorldConstructorInitialWorld},{type:"method",signature:"void setzeMaximalhöhe(int hoehe)",native:xs.prototype._setzeMaximalhoehe,comment:o.robotWorldSetzeMaximalHoehe},{type:"method",signature:"void setzeZiegel(int x, int y, string farbe, int anzahl)",native:xs.prototype._setzeZiegel,comment:o.robotWorldSetzeZiegel},{type:"method",signature:"void setzeMarke(int x, int y, string farbe)",native:xs.prototype._setzeMarke,comment:o.robotWorldSetzeMarke}]);let Zd=xs;class Dy{constructor(t){r(this,"names",["north","west","south","east"]);r(this,"deltas",[{dx:0,dy:-1},{dx:-1,dy:0},{dx:0,dy:1},{dx:1,dy:0}]);r(this,"angles",[0,90,180,270]);r(this,"index",2);this.robot=t}is(t){return this.names[this.index].toLocaleLowerCase()==t}turnRight(){this.index=(this.index-1+4)%4,this.robot.steve.rotateY(-Math.PI/2)}turnLeft(){this.index=(this.index+1+4)%4,this.robot.steve.rotateY(Math.PI/2)}getAngle(){return this.angles[this.index]}getDeltas(){return this.deltas[this.index]}getName(){return this.names[this.index]}}const de=class de extends R{constructor(){super();r(this,"robotCubeFactory");r(this,"robotWorld");r(this,"steve");r(this,"x");r(this,"y");r(this,"z");r(this,"direction",new Dy(this));r(this,"hatSteine",1e7);r(this,"maxSteine",1e10)}_jc$_constructor_$Robot$(e,i){this._jc$_constructor_$Robot$int$int$int$int(e,i,1,1,5,8)}_jc$_constructor_$Robot$int$int(e,i,n,s){this._jc$_constructor_$Robot$int$int$int$int(e,i,n,s,5,10)}_jc$_constructor_$Robot$int$int$string(e,i,n,s,a){this._jc$_constructor_$Robot$int$int$int$int(e,i,n,s,a,void 0)}_jc$_constructor_$Robot$int$int$int$int(e,i,n,s,a,l){if(e.s.push(this),this.robotWorld=e.scheduler.interpreter.retrieveObject("robotWorldClass"),this.robotWorld){e.state=F.waiting,this.init(n,s).then(()=>{e.state=F.running,i&&i()});return}else{e.scheduler.interpreter.eventManager.once("stop",()=>{this.robotWorld=void 0,e.scheduler.interpreter.deleteObject("robotWorldClass")}),new Zd()._cj$_constructor_$RobotWorld$int$int(e,async()=>{this.robotWorld=e.s.pop(),e.state=F.waiting,await this.init(n,s),e.state=F.running,i&&i()},a,l);return}}async init(e,i){const n=new sb;let s=""+np;const a=s.lastIndexOf("assets/");s=s.substring(0,a),this.steve=(await n.loadAsync(s+"assets/graphics/robot/minecraft_steve/scene.gltf")).scene,this.steve.translateX(-this.robotWorld.maxX/2+e-1),this.steve.translateY(1.45+this.robotWorld.getBrickCount(e,i)/2),this.steve.translateZ(-this.robotWorld.maxY/2+i-1),this.steve.scale.set(.06,.06,.06),this.robotWorld.world3d.scene.add(this.steve),this.x=e,this.y=i,this.z=this.robotWorld.getBrickCount(e,i)/2}setZ(e){this.steve.position.y+=e/2-this.z,this.z=e/2}moveTo(e,i){this.steve.position.x+=e-this.x,this.steve.position.z+=i-this.y,this.x=e,this.y=i}_getWelt(){return this.robotWorld}_rechtsDrehen(){this.direction.turnRight()}_linksDrehen(){this.direction.turnLeft()}_schritt(){let e=this.direction.getDeltas(),i=this.x+e.dx,n=this.y+e.dy;if(i<1||i>this.robotWorld.maxX||n<1||n>this.robotWorld.maxY)throw new W(o.robotHitWall());let s=this.robotWorld.getNumberOfBricks(this.x,this.y),a=this.robotWorld.getNumberOfBricks(i,n);if(as+1)throw new W(o.robotMaximumJumpHeightUp());this.moveTo(i,n),this.setZ(this.robotWorld.getBrickCount(i,n))}_schrittAnzahl(e){for(let i=0;ithis.robotWorld.maxX||l<1||l>this.robotWorld.maxY)throw new W(o.robotCantPlaceBricksIntoWall());if(i=i.toLocaleLowerCase(),!this.robotWorld.gibtFarbe(i))throw new W(o.robotColorUnknown());if(this.hatSteinethis.robotWorld.maximumHeight)throw new Qi(o.robotMaximumHeightExceeded(this.robotWorld.maximumHeight));for(let h=0;hthis.robotWorld.maxX||s<1||s>this.robotWorld.maxY)throw new W(o.robotCantPlaceBricksIntoWall());if(this.robotWorld.getNumberOfBricks(n,s)this.robotWorld.maxX||n<1||n>this.robotWorld.maxY}_istZiegel(e){let i=this.direction.getDeltas(),n=this.x+i.dx,s=this.y+i.dy;return n<1||n>this.robotWorld.maxX||s<1||s>this.robotWorld.maxY?!1:e==null?this.robotWorld.getBrickCount(n,s)>0:typeof e=="string"?this.robotWorld.hasBrickColor(n,s,e.toLocaleLowerCase()):this.robotWorld.bricks[n][s].length==e}_istMarke(e){let i=this.robotWorld.markers[this.x-1][this.y-1];return e==null?i!=null:typeof e=="string"?i!=null&&i.userData.farbe==e.toLocaleLowerCase():!1}_mj$beenden$void$(e,i){var n;(n=e.scheduler.interpreter.printManager)==null||n.print(o.robotStoppedProgram(),!0,8421504),e.state=F.terminated,e.scheduler.exit(0)}_nichtIstWand(){return!this._istWand()}_nichtIstMarke(e){return!this._istMarke(e)}_nichtIstZiegel(e){return!this._istZiegel(e)}_isNorth(){return this.direction.is("north")}_isEast(){return this.direction.is("east")}_isSouth(){return this.direction.is("south")}_isWest(){return this.direction.is("west")}_istLeer(){return this.hatSteine==0}_istVoll(){return this.hatSteine==this.maxSteine}_nichtIstLeer(){return!this._istLeer()}_nichtIstVoll(){return!this._istVoll()}_hatZiegel(){return this.hatSteine>0}_hatZiegelAnzahl(e){return this.hatSteine>=e}_setzeAnzahlSteine(e){this.hatSteine=e}_setzeRucksackGroesse(e){this.maxSteine=e}_debugOutput(){return`{x = ${this.x}, y = ${this.y}, direction = ${this.direction.getName()}}`}};r(de,"__javaDeclarations",[{type:"declaration",package:"robot",signature:"class Robot extends Object",comment:o.robotClassComment},{type:"method",signature:"Robot()",java:de.prototype._jc$_constructor_$Robot$,comment:o.robotEmptyConstructorComment},{type:"method",signature:"Robot(int startX, int startY)",java:de.prototype._jc$_constructor_$Robot$int$int,comment:o.robotConstructorStartXStartY},{type:"method",signature:"Robot(int startX, int startY, int worldX, int worldY)",java:de.prototype._jc$_constructor_$Robot$int$int$int$int,comment:o.robotConstructorStartXStartYWorldXWorldY},{type:"method",signature:"Robot(int startX, int startY, string initialWorld)",java:de.prototype._jc$_constructor_$Robot$int$int$string,comment:o.robotConstructorStartXStartYinitialWorld},{type:"method",signature:"robot.RobotWorld getWelt()",native:de.prototype._getWelt,comment:o.robotGetWelt},{type:"method",signature:"void rechtsDrehen()",native:de.prototype._rechtsDrehen,comment:o.robotRechtsDrehen},{type:"method",signature:"void linksDrehen()",native:de.prototype._linksDrehen,comment:o.robotLinksDrehen},{type:"method",signature:"void schritt()",native:de.prototype._schritt,comment:o.robotSchritt},{type:"method",signature:"void schritt(int anzahl)",native:de.prototype._schrittAnzahl,comment:o.robotSchrittAnzahl},{type:"method",signature:"void hinlegen()",native:de.prototype._hinlegen,comment:o.robotHinlegen},{type:"method",signature:"void hinlegen(int n)",native:de.prototype._hinlegen,comment:o.robotHinlegen},{type:"method",signature:"void hinlegen(string farbe)",native:de.prototype._hinlegen,comment:o.robotHinlegenFarbe},{type:"method",signature:"void markeSetzen()",native:de.prototype._markeSetzen,comment:o.robotMarkeSetzen},{type:"method",signature:"void markeSetzen(string farbe)",native:de.prototype._markeSetzen,comment:o.robotMarkeSetzenFarbe},{type:"method",signature:"void markeLöschen()",native:de.prototype._markeLöschen,comment:o.robotMarkeLöschen},{type:"method",signature:"void aufheben()",native:de.prototype._aufheben,comment:o.robotAufheben},{type:"method",signature:"void aufheben(int n)",native:de.prototype._aufheben,comment:o.robotAufheben},{type:"method",signature:"void beenden()",java:de.prototype._mj$beenden$void$,comment:o.robotBeenden},{type:"method",signature:"boolean istWand()",native:de.prototype._istWand,comment:o.robotIstWand},{type:"method",signature:"boolean nichtIstWand()",native:de.prototype._nichtIstWand,comment:o.robotNichtIstWand},{type:"method",signature:"boolean istZiegel()",native:de.prototype._istZiegel,comment:o.robotIstZiegel},{type:"method",signature:"boolean istZiegel(int anzahl)",native:de.prototype._istZiegel,comment:o.robotIstZiegelAnzahl},{type:"method",signature:"boolean istZiegel(string farbe)",native:de.prototype._istZiegel,comment:o.robotIstZiegelFarbe},{type:"method",signature:"boolean nichtIstZiegel()",native:de.prototype._nichtIstZiegel,comment:o.robotNichtIstZiegel},{type:"method",signature:"boolean nichtIstZiegel(int anzahl)",native:de.prototype._nichtIstZiegel,comment:o.robotNichtIstZiegelAnzahl},{type:"method",signature:"boolean nichtIstZiegel(string farbe)",native:de.prototype._nichtIstZiegel,comment:o.robotNichtIstZiegelFarbe},{type:"method",signature:"boolean istMarke()",native:de.prototype._istMarke,comment:o.robotIstMarke},{type:"method",signature:"boolean istMarke(string farbe)",native:de.prototype._istMarke,comment:o.robotIstMarkeFarbe},{type:"method",signature:"boolean nichtIstMarke()",native:de.prototype._nichtIstMarke,comment:o.robotNichtIstMarke},{type:"method",signature:"boolean nichtIstMarke(string farbe)",native:de.prototype._nichtIstMarke,comment:o.robotNichtIstMarkeFarbe},{type:"method",signature:"boolean istNorden()",native:de.prototype._isNorth,comment:o.robotIstNorden},{type:"method",signature:"boolean istSüden()",native:de.prototype._isSouth,comment:o.robotIstSueden},{type:"method",signature:"boolean istOsten()",native:de.prototype._isEast,comment:o.robotIstOsten},{type:"method",signature:"boolean istWesten()",native:de.prototype._isWest,comment:o.robotIstWesten},{type:"method",signature:"boolean istLeer()",native:de.prototype._istLeer,comment:o.robotIstLeer},{type:"method",signature:"boolean nichtIstLeer()",native:de.prototype._nichtIstLeer,comment:o.robotNichtIstLeer},{type:"method",signature:"boolean istVoll()",native:de.prototype._istVoll,comment:o.robotIstVoll},{type:"method",signature:"boolean nichtIstVoll()",native:de.prototype._nichtIstVoll,comment:o.robotNichtIstVoll},{type:"method",signature:"boolean hatZiegel()",native:de.prototype._hatZiegel,comment:o.robotHatZiegel},{type:"method",signature:"void setzeAnzahlSteine(int anzahl)",native:de.prototype._setzeAnzahlSteine,comment:o.robotSetzeAnzahlSteine},{type:"method",signature:"void setzeRucksackGröße(int anzahl)",native:de.prototype._setzeRucksackGroesse,comment:o.robotSetzeRucksackGroesse}]),r(de,"type");let hu=de;const Tn=class Tn extends Rt{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height");r(this,"radius")}get scaledWidth(){return this.scaleFactor*this.width}get scaledHeight(){return this.scaleFactor*this.width}get scaledRadius(){return this.scaleFactor*this.radius}_cj$_constructor_$RoundedRectangle$(e,i){this._cj$_constructor_$RoundedRectangle$double$double$double$double$double(e,i,0,0,100,100,10)}_cj$_constructor_$RoundedRectangle$double$double$double$double$double(e,i,n,s,a,l,h){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n+a/2,this.centerYInitial=s+l/2,this.left=n,this.top=s,this.width=a,this.height=l,this.radius=h,this.hitPolygonInitial=[],this.addCenterCircle(n+h,s+h,Math.PI/2),this.addCenterCircle(n+h,s+l-h,Math.PI),this.addCenterCircle(n+a-h,s+l-h,3*Math.PI/2),this.addCenterCircle(n+a-h,s+h,0),this.hitPolygonInitial.push({x:n+h,y:s}),this.render()})}_mj$copy$Shape$(e,i){this._mj$copy$RoundedRectangle$(e,i)}_mj$copy$RoundedRectangle$(e,i){let n=new Tn;n._cj$_constructor_$RoundedRectangle$double$double$double$double$double(e,i,this.left,this.top,this.width,this.height,this.radius),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;this.container?e.clear():(e=new it,this.container=e,this.world.app.stage.addChild(e)),e.roundRect(this.left,this.top,this.width,this.height,this.radius),this.fillColor!=null&&(e.fill(this.fillColor),e.alpha=this.fillAlpha),this.borderColor!=null&&e.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),e.closePath()}addCenterCircle(e,i,n){let s=8,a=Math.PI/2/s;for(let l=0;l<=s;l++)this.hitPolygonInitial.push({x:e+this.radius*Math.cos(n+a*l),y:i-this.radius*Math.sin(n+a*l)})}_setWidth(e){this.width=e/this.container.scale.x,this.centerXInitial=this.left+this.width/2,this.render()}_setHeight(e){this.height=e/this.container.scale.y,this.centerYInitial=this.top+this.height/2,this.render()}_moveTo(e,i){return this.transformHitPolygon(),this._move(e-this.hitPolygonTransformed[0].x,i-this.hitPolygonTransformed[0].y),this}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{width: ${this.width*this.scaleFactor}, height: ${this.height*this.scaleFactor}, radius: ${this.radius*this.scaleFactor}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}};r(Tn,"__javaDeclarations",[{type:"declaration",signature:"class RoundedRectangle extends FilledShape",comment:o.RoundedRectangleClassComment},{type:"field",signature:"private double width",nativeIdentifier:"scaledWidth"},{type:"field",signature:"private double height",nativeIdentifier:"scaledHeight"},{type:"field",signature:"private double radius",nativeIdentifier:"scaledRadius"},{type:"method",signature:"RoundedRectangle()",java:Tn.prototype._cj$_constructor_$RoundedRectangle$,comment:o.RoundedRectangleEmptyConstructorComment},{type:"method",signature:"RoundedRectangle(double left, double top, double width, double height, double radius)",java:Tn.prototype._cj$_constructor_$RoundedRectangle$double$double$double$double$double,comment:o.RoundedRectangleConstructorComment},{type:"method",signature:"final void setWidth(double width)",native:Tn.prototype._setWidth,comment:o.RoundedRectangleSetWidthComment},{type:"method",signature:"final void setHeight(double height)",native:Tn.prototype._setHeight,comment:o.RoundedRectangleSetHeightComment},{type:"method",signature:"final double getWidth()",template:"(§1.width*§1.scaleFactor)",comment:o.RoundedRectangleGetWidthComment},{type:"method",signature:"final double getHeight()",template:"(§1.height*§1.scaleFactor)",comment:o.RoundedRectangleGetHeightComment},{type:"method",signature:"final RoundedRectangle copy()",java:Tn.prototype._mj$copy$RoundedRectangle$,comment:o.RoundedRectangleCopyComment},{type:"method",signature:"final RoundedRectangle moveTo(double x, double y)",native:Tn.prototype._moveTo,comment:o.RoundedRectangleMoveToComment},{type:"method",signature:"String toString()",java:Tn.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Tn,"type");let cu=Tn;const _i=class _i extends Rt{constructor(){super(...arguments);r(this,"mx");r(this,"my");r(this,"radius");r(this,"startAngleRad");r(this,"endAngleRad");r(this,"drawRadii",!0)}_cj$_constructor_$Sector$(e,i){this._cj$_constructor_$Sector$double$double$double$double$double(e,i,200,200,200,0,180)}_cj$_constructor_$Sector$double$double$double$double$double(e,i,n,s,a,l,h){this._cj$_constructor_$FilledShape$(e,()=>{this.centerXInitial=n,this.centerYInitial=s,this.mx=n,this.my=s,this.radius=a,this.startAngleRad=l/180*Math.PI,this.endAngleRad=h/180*Math.PI,this.render()})}_mj$copy$Shape$(e,i){this._mj$copy$Sector$(e,i)}_mj$copy$Sector$(e,i){let n=new _i;n._cj$_constructor_$Sector$double$double$double$double$double(e,i,this.mx,this.my,this.radius,this.startAngleRad,this.endAngleRad),n.drawRadii=this.drawRadii,n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){this.hitPolygonInitial=[];let e=this.endAngleRad-this.startAngleRad;this.hitPolygonInitial.push({x:this.mx,y:this.my});for(let n=0;n<16;n++){let s=this.startAngleRad+e*n;this.hitPolygonInitial.push({x:this.mx+this.radius*Math.cos(s),y:this.my+this.radius*Math.sin(s)})}this.hitPolygonInitial.push({x:this.mx,y:this.my}),this.hitPolygonDirty=!0;let i=this.container;i==null?(i=new it,this.container=i,this.world.app.stage.addChild(i)):i.clear(),Math.abs(this.startAngleRad-this.endAngleRad)<1e-8?i.circle(this.mx,this.my,this.radius):(this.drawRadii&&i.moveTo(this.mx,this.my),i.arc(this.mx,this.my,this.radius,-this.startAngleRad,-this.endAngleRad,!0),this.drawRadii&&i.lineTo(this.mx,this.my)),this.drawRadii&&i.closePath(),this.fillColor!=null&&(i.fill(this.fillColor),i.alpha=this.fillAlpha),this.borderColor!=null&&i.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5}),i.closePath()}_setRadius(e){this.radius=e/this.container.scale.x,this.render()}_setStartAngle(e){this.startAngleRad=e/180*Math.PI,this.render()}_setEndAngle(e){this.endAngleRad=e/180*Math.PI,this.render()}_drawRadii(e){this.drawRadii=e,this.render()}containsPoint(e,i){if(!this.container.getBounds().containsPoint(e,i))return!1;let n=new me(e,i);this.container.worldTransform.applyInverse(n,n);let a=n.x-this.mx,l=n.y-this.my,h=Math.atan2(-l,a);if(a*a+l*l<=this.radius*this.radius){let u=2*Math.PI,m=this.startAngleRad<0?u+this.startAngleRad:this.startAngleRad,g=this.endAngleRad<0?u+this.endAngleRad:this.endAngleRad,b=(h<0?u+h:h)>=m&&m<=g;return m<=g?b:!b}else return!1}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{startAngle: ${this.startAngleRad/Math.PI*180*this.scaleFactor}, endAngle: ${this.endAngleRad/Math.PI*180*this.scaleFactor}, radius: ${this.radius*this.scaleFactor}, mx: ${this._getCenterX()}, my: ${this._getCenterY()} }`}};r(_i,"__javaDeclarations",[{type:"declaration",signature:"class Sector extends FilledShape",comment:o.SectorClassComment},{type:"method",signature:"Sector()",java:_i.prototype._cj$_constructor_$Sector$,comment:o.SectorConstructorComment1},{type:"method",signature:"Sector(double mx, double my, double radius, double startAngle, double endAngle)",java:_i.prototype._cj$_constructor_$Sector$double$double$double$double$double,comment:o.SectorConstructorComment},{type:"method",signature:"final void setRadius(double Radius)",native:_i.prototype._setRadius,comment:o.SectorSetRadiusComment},{type:"method",signature:"final double getRadiusX()",template:"(§1.radius*§1.scaleFactor)",comment:o.SectorGetRadiusComment},{type:"method",signature:"final void setStartAngle(double startAngle)",native:_i.prototype._setStartAngle,comment:o.SectorSetStartAngleComment},{type:"method",signature:"final double getStartAngleX()",template:"(§1.startAngle/Math.PI*180)",comment:o.SectorGetStartAngleComment},{type:"method",signature:"final void setEndAngle(double endAngle)",native:_i.prototype._setEndAngle,comment:o.SectorSetEndAngleComment},{type:"method",signature:"final double getEndAngleX()",template:"(§1.endAngle/Math.PI*180)",comment:o.SectorGetEndAngleComment},{type:"method",signature:"final void drawRadii(boolean drawRadii)",native:_i.prototype._drawRadii,comment:o.SectorDrawRadiiComment},{type:"method",signature:"final Sector copy()",java:_i.prototype._mj$copy$Sector$,comment:o.SectorCopyComment},{type:"method",signature:"final boolean containsPoint(double x, double y)",native:_i.prototype._containsPoint,comment:o.shapeContainsPointComment},{type:"method",signature:"String toString()",java:_i.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(_i,"type");let uu=_i;const Et=class Et extends Rt{constructor(){super(...arguments);r(this,"alignment","left");r(this,"textStyle",new Wh({fontFamily:"Arial",fontSize:10,fontStyle:"normal",fontWeight:"normal",fill:this.fillColor==null?0:this.fillColor,stroke:{color:this.borderColor==null?0:this.borderColor,width:this.borderColor==null?0:this.borderWidth,join:"round"},dropShadow:!1,wordWrap:!1,align:"left"}));r(this,"x");r(this,"y");r(this,"fontsize");r(this,"text");r(this,"fontFamily")}_cj$_constructor_$Text$(e,i){this._cj$_constructor_$Text$double$double$double$string(e,i,0,0,24,"Text")}_cj$_constructor_$Text$double$double$double$string(e,i,n,s,a,l,h){this._cj$_constructor_$FilledShape$(e,()=>{this.x=n,this.y=s,this.fontsize=a,this.text=l+"",this.centerXInitial=n,this.centerYInitial=s,this.fontsize==0&&(this.fontsize=10),this.borderColor=void 0,this.textStyle.stroke=0,h!=null&&(this.textStyle.fontFamily=h),this.hitPolygonInitial=[],this.render(),i&&i()})}_mj$copy$Shape$(e,i){this._mj$copy$Text$(e,i)}_mj$copy$Text$(e,i){let n=new Et;n._cj$_constructor_$Text$double$double$double$string(e,i,this.x,this.y,this.fontsize,this.text,this.fontFamily),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}render(){let e=this.container;if(this.textStyle.fill=this.fillColor==null?0:this.fillColor,this.textStyle.stroke={color:this.borderColor==null?0:this.borderColor,width:this.borderColor==null?0:this.borderWidth,join:"round"},this.textStyle.fontSize=this.fontsize,!this.container)e=new za({text:this.text,style:this.textStyle}),this.container=e,this.container.localTransform.translate(this.x,this.y),this.container.setFromMatrix(this.container.localTransform),this.container.updateLocalTransform(),this.container._didLocalTransformChangeId=this.container._didChangeId,this.setWorldTransformAndHitPolygonDirty(),this.world.app.stage.addChild(e);else{switch(e.text=this.text,e.alpha=this.fillAlpha,this.alignment){case"left":e.anchor.x=0;break;case"center":e.anchor.x=.5;break;case"right":e.anchor.x=1;break}this.textStyle.align=this.alignment,e.style=this.textStyle}this.centerXInitial=0,this.centerYInitial=0;let i=0,n=0;if(this.text!=null){let l=Bo.measureText(""+this.text,this.textStyle);i=l.width,n=l.height,l.fontProperties.ascent,this.centerXInitial=i/2,this.centerYInitial=n/2}let s=0-e.anchor.x*i,a=0-e.anchor.y*n;this.hitPolygonInitial=[{x:s,y:a},{x:s,y:a+n},{x:s+i,y:a+n},{x:s+i,y:a}]}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{text: ${this.text}, centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}_moveTo(e,i){let n=new me(0,0);return this.getWorldTransform(),this.container.localTransform.apply(n,n),this._move(e-n.x,i-n.y),this}_setFontsize(e){this.fontsize=e,this.fontsize==0&&(this.fontsize=10),this.render()}_setText(e){this.text=e+"",this.render()}_setAlignment(e){this.alignment=e.name,this.render()}_getWidth(){return this.container.width}_getHeight(){return this.container.height}_setStyle(e,i){this.textStyle.fontWeight=e?"bold":"normal",this.textStyle.fontStyle=i?"italic":"normal",this.render()}};r(Et,"__javaDeclarations",[{type:"declaration",signature:"class Text extends FilledShape",comment:o.TextClassComment},{type:"method",signature:"Text()",java:Et.prototype._cj$_constructor_$Text$,comment:o.TextEmptyConstructorComment},{type:"method",signature:"Text(double x, double y, double fontSize, string text)",java:Et.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"Text(double x, double y, double fontSize, string text, string fontFamily)",java:Et.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"Text(double x, double y, double fontSize, double text)",java:Et.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"Text(double x, double y, double fontSize, double text, string fontFamily)",java:Et.prototype._cj$_constructor_$Text$double$double$double$string,comment:o.TextConstructorComment1},{type:"method",signature:"void setFontsize(double fontsize)",native:Et.prototype._setFontsize,comment:o.TextSetFontsizeComment},{type:"method",signature:"void setText(string text)",native:Et.prototype._setText,comment:o.TextSetTextComment},{type:"method",signature:"void setText(double text)",native:Et.prototype._setText,comment:o.TextSetTextComment},{type:"method",signature:"void setAlignment(Alignment alignment)",native:Et.prototype._setAlignment,comment:o.TextSetAlignmentComment},{type:"method",signature:"void setStyle(boolean bold, boolean italic)",native:Et.prototype._setStyle,comment:o.TextSetStyleComment},{type:"method",signature:"double getFontsize()",template:"§1.fontsize",comment:o.TextGetFontsizeComment},{type:"method",signature:"string getText()",template:"§1.text",comment:o.TextGetTextComment},{type:"method",signature:"double getWidth()",native:Et.prototype._getWidth,comment:o.TextGetWidthComment},{type:"method",signature:"double getHeight()",native:Et.prototype._getHeight,comment:o.TextGetHeightComment},{type:"method",signature:"final Text moveTo(double x, double y)",native:Et.prototype._moveTo,comment:o.TextMoveToComment},{type:"method",signature:"final Text copy()",java:Et.prototype._mj$copy$Text$,comment:o.TextCopyComment},{type:"method",signature:"String toString()",java:Et.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Et,"type");let Xd=Et;const Wr=class Wr extends Va{constructor(){super(...arguments);r(this,"left");r(this,"top");r(this,"width");r(this,"height")}_cj$_constructor_$Triangle$(e,i){this._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,[0,0,100,0,0,100])}_cj$_constructor_$Triangle$double$double$double$double$double$double(e,i,n,s,a,l,h,u){this._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,[n,s,a,l,h,u])}_mj$copy$Shape$(e,i){this._mj$copy$Triangle$(e,i)}_mj$copy$Triangle$(e,i){let n=new Wr;n._cj$_constructor_$Polygon$boolean$double_I(e,i,!0,[this.hitPolygonInitial[0].x,this.hitPolygonInitial[0].y,this.hitPolygonInitial[1].x,this.hitPolygonInitial[1].y,this.hitPolygonInitial[2].x,this.hitPolygonInitial[2].y]),n.copyFrom(this),n.render(),e.s.push(n),i&&i()}_setPoints2(e,i,n,s,a,l){this._setPoints([e,i,n,s,a,l])}};r(Wr,"__javaDeclarations",[{type:"declaration",signature:"class Triangle extends Polygon",comment:o.TriangleClassComment},{type:"method",signature:"Triangle()",java:Wr.prototype._cj$_constructor_$Triangle$,comment:o.TriangleConstructorComment1},{type:"method",signature:"Triangle(double x1, double y1, double x2, double y2, double x3, double y3)",java:Wr.prototype._cj$_constructor_$Triangle$double$double$double$double$double$double,comment:o.TriangleConstructorComment},{type:"method",signature:"void setPoints(double x1, double y1, double x2, double y2, double x3, double y3)",native:Wr.prototype._setPoints2,comment:o.TriangleSetPointsComment},{type:"method",signature:"final Triangle copy()",java:Wr.prototype._mj$copy$Triangle$,comment:o.TriangleCopyComment}]),r(Wr,"type");let mu=Wr;const dt=class dt extends Rt{constructor(){super(...arguments);r(this,"lineElements",[]);r(this,"turtleAngleDeg",0);r(this,"isFilled",!1);r(this,"turtle");r(this,"lineGraphic");r(this,"xSum",0);r(this,"ySum",0);r(this,"initialHitPolygonDirty",!0);r(this,"turtleSize",40);r(this,"penIsDown",!0);r(this,"lastLineWidth",0);r(this,"lastColor",0);r(this,"lastAlpha",0);r(this,"lastTurtleAngleDeg",0);r(this,"renderJobPresent",!1);r(this,"angleHasChanged",!0);r(this,"lastLengthSign",-2);r(this,"showTurtle",!0);r(this,"newTurtleX");r(this,"newTurtleY");r(this,"newAngleDeg")}_cj$_constructor_$Turtle$(e,i){this._cj$_constructor_$Turtle$double$double(e,i,100,200)}_cj$_constructor_$Turtle$double$double(e,i,n,s,a=!0){this._cj$_constructor_$FilledShape$(e,()=>{this.lineElements.push({x:n,y:s,color:0,alpha:1,lineWidth:1}),this.calculateCenter(),this.borderColor=16777215,this.borderWidth=2,this.hitPolygonInitial=[],this.container=new Ks,this.world.app.stage.addChild(this.container),this.lineGraphic=new it,this.container.addChild(this.lineGraphic),this.lineGraphic.moveTo(n,s),this.turtle=new it,this.container.addChild(this.turtle),this.turtle.visible=this.showTurtle,this.initTurtle(0,0,this.turtleAngleDeg),this.moveTurtleTo(n,s,this.turtleAngleDeg),this.render(),i&&i()})}calculateCenter(){let e=this.lineElements.length,i=this.lineElements[e-1];this.xSum+=i.x,this.ySum+=i.y,this.centerXInitial=this.xSum/e,this.centerYInitial=this.ySum/e}_closeAndFill(e){e!=this.isFilled&&(this.isFilled=e,this.render(),this.initialHitPolygonDirty=!0)}_setShowTurtle(e){this.turtle.visible=e}_turn(e){this.angleHasChanged=!0,this.turtleAngleDeg-=e,Math.abs(this.turtleAngleDeg)>360&&(this.turtleAngleDeg-=Math.floor(this.turtleAngleDeg/360)*360);let i=this.lineElements[this.lineElements.length-1];this.moveTurtleTo(i.x,i.y,this.turtleAngleDeg)}_setAngle(e){return this._turn(e+this.turtleAngleDeg),this}_forward(e){Math.sign(e)!=this.lastLengthSign&&(this.angleHasChanged=!0),this.lastLengthSign=Math.sign(e);let i=this.lineElements[this.lineElements.length-1],n=this.penIsDown?this.borderColor:null,s=this.turtleAngleDeg/180*Math.PI,a;return!this.angleHasChanged&&i.color==n&&i.alpha==this.borderAlpha&&i.lineWidth==this.borderWidth?(i.x+=e*Math.cos(s),i.y+=e*Math.sin(s),a=i):(a={x:i.x+e*Math.cos(s),y:i.y+e*Math.sin(s),color:n,alpha:this.borderAlpha,lineWidth:this.borderWidth},this.lineElements.push(a)),this.angleHasChanged=!1,this.hitPolygonDirty=!0,this.initialHitPolygonDirty=!0,this.calculateCenter(),this.newTurtleX=a.x,this.newTurtleY=a.y,this.newAngleDeg=this.turtleAngleDeg,this.renderJobPresent||(this.renderJobPresent=!0,setTimeout(()=>{this.renderJobPresent=!1,this.render(),this.moveTurtleTo(this.newTurtleX,this.newTurtleY,this.turtleAngleDeg)},100)),this}_moveTo(e,i){let n={x:e,y:i,color:null,alpha:this.borderAlpha,lineWidth:this.borderWidth};return this.lineElements.push(n),this.hitPolygonDirty=!0,this.initialHitPolygonDirty=!0,this.calculateCenter(),this.moveTurtleTo(n.x,n.y,this.turtleAngleDeg),this}initTurtle(e,i,n){this.turtle.clear(),this.turtle.moveTo(e,i);let s=n/180*Math.PI,a=Math.cos(s),l=Math.sin(s),h=-Math.sin(s),u=Math.cos(s),m=this.turtleSize/2,g=this.turtleSize/4,f=this.turtleSize/4;this.turtle.moveTo(e+a*m,i+l*m),this.turtle.lineTo(e-a*g+h*f,i-l*g+u*f),this.turtle.lineTo(e-a*g-h*f,i-l*g-u*f),this.turtle.lineTo(e+a*m,i+l*m),this.turtle.stroke({width:3,color:16711680,alpha:1,alignment:.5})}moveTurtleTo(e,i,n){this.turtle.localTransform.identity(),this.turtle.localTransform.rotate(n/180*Math.PI),this.turtle.localTransform.translate(e,i),this.turtle.setFromMatrix(this.turtle.localTransform),this.turtle.updateLocalTransform(),this.turtle._didLocalTransformChangeId=this.turtle._didChangeId,this.lastTurtleAngleDeg=this.turtleAngleDeg}_collidesWith(e){return e instanceof dt&&e.initialHitPolygonDirty&&e.setupInitialHitPolygon(),this.initialHitPolygonDirty&&(this.setupInitialHitPolygon(),this.transformHitPolygon(),this.render()),this.hasOverlappingBoundingBoxWith(e)?e.shapes?e._collidesWith(this):this.hitPolygonInitial==null||e.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),e.hitPolygonDirty&&e.transformHitPolygon(),e.hitPolygonTransformed.length==2&&!this.isFilled?Ty(this.hitPolygonTransformed,e.hitPolygonTransformed):Sy(this.hitPolygonTransformed,e.hitPolygonTransformed)):!1}setupInitialHitPolygon(){this.hitPolygonInitial=this.lineElements.map(e=>({x:e.x,y:e.y}))}_clear(e=void 0,i=void 0,n=void 0){let s=this.lineElements.pop();e==null&&(e=s.x),i==null&&(i=s.y),this.lineElements=[],this.lineElements.push({x:e,y:i,color:0,alpha:1,lineWidth:1}),this.calculateCenter(),this.hitPolygonInitial=[],n!=null&&(this.turtleAngleDeg=n,this.angleHasChanged=!0,this.lastTurtleAngleDeg=0,this.borderColor=0,this.turtleSize=40),this.render(),n!=null&&this.moveTurtleTo(e,i,n)}touchesAtLeastOneFigure(){let e=this.lineElements[this.lineElements.length-1],i=e.x,n=e.y;for(let s of this.world.shapesWhichBelongToNoGroup)if(s!=this&&s._containsPoint(i,n))return!0;return!1}touchesColor(e){let i=this.lineElements[this.lineElements.length-1],n=i.x,s=i.y;for(let a of this.world.shapesWhichBelongToNoGroup)if(a!=this&&a._containsPoint(n,s)&&a instanceof Rt&&a.fillColor==e)return!0;return!1}touchesShape(e){let i=this.lineElements[this.lineElements.length-1],n=i.x,s=i.y;return e._containsPoint(n,s)}_containsPoint(e,i){return this.initialHitPolygonDirty&&(this.setupInitialHitPolygon(),this.transformHitPolygon(),this.render()),this.container.getBounds().containsPoint(e,i)?this.hitPolygonInitial==null?!0:(this.hitPolygonDirty&&this.transformHitPolygon(),this.isFilled?qs(this.hitPolygonTransformed,{x:e,y:i}):Rg(this.hitPolygonTransformed,{x:e,y:i})):!1}borderContainsPointExcludingLastLineElement(e,i,n=-1){let s=this.lineElements.pop(),a=this.borderContainsPoint(e,i,n);return this.lineElements.push(s),a}borderContainsPoint(e,i,n=-1){let s=this.getWorldTransform(),a=s.a==1&&s.b==0&&s.c==0&&s.d==1&&s.tx==0&&s.ty==0,l={x:e,y:i};if(this.lineElements.length<2)return!1;let h=this.lineElements[0],u,m=h;a||(m={x:s.a*m.x+s.c*m.y+s.tx,y:s.b*m.x+s.d*m.y+s.ty});for(let g=0;g1){let n=this.lineElements[1];this.lastLineWidth=n.lineWidth,this.lastColor=n.color,this.lastAlpha=n.alpha}e.clear();let i=this.lineElements[0];e.moveTo(i.x,i.y);for(let n=1;n1&&(s.lineWidth!=this.lastLineWidth||s.color!=this.lastColor||s.alpha!=this.lastAlpha)&&e.stroke({width:this.lastLineWidth,color:this.lastColor==null?0:this.lastColor,alpha:this.lastAlpha,alignment:.5}),s.color!=null?e.lineTo(s.x,s.y):e.moveTo(s.x,s.y),this.lastColor=s.color,this.lastLineWidth=s.lineWidth,this.lastAlpha=s.alpha}if(this.isFilled)e.closePath(),e.stroke({width:this.borderWidth,color:this.borderColor,alpha:this.borderAlpha,alignment:.5});else if(this.lineElements.length>1){let n=this.lineElements[this.lineElements.length-1];e.stroke({width:n.lineWidth,color:n.color==null?0:n.color,alpha:n.alpha,alignment:.5})}this.fillColor!=null&&this.isFilled&&(e.fill(this.fillColor),e.alpha=this.fillAlpha),e.closePath()}_mj$toString$String$(e,i){e.s.push(new Y(this._debugOutput())),i&&i()}_debugOutput(){return this.isDestroyed?"":`{centerX: ${this._getCenterX()}, centerY: ${this._getCenterY()} }`}_getTurtleAngleDeg(){return-this.turtleAngleDeg+this.angle}};r(dt,"__javaDeclarations",[{type:"declaration",signature:"class Turtle extends FilledShape",comment:o.TurtleClassComment},{type:"method",signature:"Turtle()",java:dt.prototype._cj$_constructor_$Turtle$,comment:o.TurtleEmptyConstructorComment},{type:"method",signature:"Turtle(double x, double y)",java:dt.prototype._cj$_constructor_$Turtle$double$double,comment:o.TurtleConstructorComment1},{type:"method",signature:"Turtle(double x, double y, boolean showTurtle)",java:dt.prototype._cj$_constructor_$Turtle$double$double,comment:o.TurtleConstructorComment2},{type:"method",signature:"final Turtle forward(double length)",native:dt.prototype._forward,comment:o.TurtleForwardComment},{type:"method",signature:"final void turn(double angleInDeg)",native:dt.prototype._turn,comment:o.TurtleTurnComment},{type:"method",signature:"final void penUp()",template:"§1.penIsDown = false;",comment:o.TurtlePenUpComment},{type:"method",signature:"final void penDown()",template:"§1.penIsDown = true;",comment:o.TurtlePenDownComment},{type:"method",signature:"final void closeAndFill(boolean closeAndFill)",native:dt.prototype._closeAndFill,comment:o.TurtleCloseAndFillComment},{type:"method",signature:"final void showTurtle(boolean showTurtle)",native:dt.prototype._setShowTurtle,comment:o.TurtleShowTurtleComment},{type:"method",signature:"final void clear()",native:dt.prototype._clear,comment:o.TurtleClearComment},{type:"method",signature:"final boolean collidesWithBorderColor(int borderColor)",native:dt.prototype._collidesWithBorderColor,comment:o.TurtleCollidesWithBorderColorComment},{type:"method",signature:"final boolean collidesWithBorderColor(string borderColor)",native:dt.prototype._collidesWithBorderColor,comment:o.TurtleCollidesWithBorderColorComment},{type:"method",signature:"final boolean collidesWithBorderColor(Color borderColor)",native:dt.prototype._collidesWithBorderColor,comment:o.TurtleCollidesWithBorderColorComment},{type:"method",signature:"final double getLastSegmentLength()",native:dt.prototype._getLastSegmentLength,comment:o.TurtleGetLastSegmentLengthComment},{type:"method",signature:"final double getX()",template:"§1.getPosition().x",comment:o.TurtleGetXComment},{type:"method",signature:"final double getY()",template:"§1.getPosition().y",comment:o.TurtleGetYComment},{type:"method",signature:"final Turtle moveTo(double x, double y)",native:dt.prototype._moveTo,comment:o.TurtleMoveToComment},{type:"method",signature:"final double getTurtleAngle()",native:dt.prototype._getTurtleAngleDeg,comment:o.TurtleGetTurtleAngleComment},{type:"method",signature:"final Turtle copy()",java:dt.prototype._mj$copy$Turtle$,comment:o.TurtleCopyComment},{type:"method",signature:"String toString()",java:dt.prototype._mj$toString$String$,comment:o.objectToStringComment},{type:"method",signature:"final boolean collidesWith(Shape otherShape)",native:dt.prototype._collidesWith,comment:o.shapeCollidesWithComment}]),r(dt,"type");let Jd=dt;const oc=["aktionAusführen","tasteGedrückt","sondertasteGedrückt","mausGeklickt","taktImpulsAusführen","ausführen","taste","sondertaste","geklickt"];class jy{constructor(t,e){r(this,"listeners",{aktionAusführen:[],tasteGedrückt:[],sondertasteGedrückt:[],mausGeklickt:[],ausführen:[],taste:[],sondertaste:[],geklickt:[],taktImpulsAusführen:[]});r(this,"keyToKeyCodeMap",{Enter:13,ArrowLeft:37,ArrowRight:39,ArrowUp:38,ArrowDown:40,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,PageUp:33,PageDown:34,Insert:155});r(this,"timerRunning",!1);r(this,"taktdauer",300);r(this,"remainingTime",0);r(this,"keyDownListener",(t,e,i,n)=>{this.onKeyDown(t,e,i,n)});r(this,"keyUpListener",t=>{this.onKeyUp(t)});r(this,"keyTypedListener",t=>{this.onKeyPressed(t)});r(this,"runningactThread");r(this,"tickHappenedWhenThreadNotEmpty",!1);this.interpreter=t,this.world=e,this.clear(),t.keyboardManager&&(t.keyboardManager.addKeyDownListener(this.keyDownListener),t.keyboardManager.addKeyUpListener(this.keyUpListener),t.keyboardManager.addKeyPressedListener(this.keyTypedListener)),e.mouseManager.internalMouseListeners.push(this)}onMouseEvent(t,e,i){if(t=="mouseup"){if(this.listeners.mausGeklickt.length==0)return;let n=this.interpreter.scheduler.createThread("GNG MausGeklickt event thread");for(let s of this.listeners.mausGeklickt)s._mj$MausGeklickt$void$int$int$int(n,void 0,Math.round(e),Math.round(i),1);n.state=F.running}}destroy(){this.interpreter.keyboardManager&&(this.interpreter.keyboardManager.removeKeyDownListener(this.keyDownListener),this.interpreter.keyboardManager.removeKeyUpListener(this.keyUpListener),this.interpreter.keyboardManager.removeKeyPressedListener(this.keyTypedListener))}registerEventlistener(t,e){this.listeners[e].push(t)}removeEventlistener(t,e){let i=this.listeners[e],n=i.indexOf(t);n>=0&&i.splice(n,1)}aktionenAusfuehren(t){if(this.runningactThread&&this.runningactThread.state==F.running){this.tickHappenedWhenThreadNotEmpty=!0;return}if(this.tickHappenedWhenThreadNotEmpty=!1,!(this.listeners.aktionAusführen.length==0&&this.listeners.taktImpulsAusführen.length==0&&this.listeners.ausführen.length==0)){this.runningactThread=this.interpreter.scheduler.createThread("GNG AktionAusführen method-thread");for(let e of this.listeners.aktionAusführen)e._mj$AktionAusführen$void$(this.runningactThread,void 0);for(let e of this.listeners.taktImpulsAusführen)e._mj$TaktImpulsAusführen$void$(this.runningactThread,void 0);for(let e of this.listeners.ausführen)e._mj$Ausführen$void$(this.runningactThread,void 0);this.runningactThread.programStack.length>0?(this.runningactThread.state=F.running,this.runningactThread.callbackAfterTerminated=()=>{this.tickHappenedWhenThreadNotEmpty&&this.aktionenAusfuehren(t)}):(this.interpreter.scheduler.removeThread(this.runningactThread),this.runningactThread=void 0)}}startActMethods(){}clear(){this.stopTimer(),oc.forEach(t=>this.listeners[t]=[])}unregisterListener(t){oc.forEach(e=>{let i=this.listeners[e],n=i.indexOf(t);n>=0&&i.splice(n,1)})}hasEventListeners(){for(let t of oc)if(this.listeners[t].length>0)return!0;return!1}onKeyPressed(t){if(this.listeners.tasteGedrückt.length+this.listeners.taste.length>0){let i=this.interpreter.scheduler.createThread("GNG TasteGedrückt event thread");for(let n of this.listeners.tasteGedrückt)n._mj$TasteGedrückt$void$char(i,void 0,t);for(let n of this.listeners.taste)n._mj$Taste$void$char(i,void 0,t);i.state=F.running}let e=this.keyToKeyCodeMap[t];if(e&&this.listeners.sondertasteGedrückt.length+this.listeners.sondertaste.length>0){let i=this.interpreter.scheduler.createThread("GNG SondertasteGedrückt event thread");for(let n of this.listeners.sondertasteGedrückt)n._mj$SonderTasteGedrückt$void$int(i,void 0,e);for(let n of this.listeners.sondertaste)n._mj$SonderTaste$void$int(i,void 0,e);i.state=F.running}}onKeyUp(t){}onKeyDown(t,e,i,n){}stopTimer(){this.timerRunning=!1}startTimer(){this.timerRunning||(this.timerRunning=!0,this.processTimerEntries())}processTimerEntries(){if(!this.timerRunning)return;let t=10;this.remainingTime+=t,this.remainingTime>this.taktdauer&&(this.remainingTime-=this.taktdauer,this.aktionenAusfuehren(this.taktdauer));let e=this;setTimeout(()=>{e.processTimerEntries()},t)}}const Dt=class Dt extends jl{constructor(){super(...arguments);r(this,"interpreter");r(this,"width",800);r(this,"height",600);r(this,"currentLeft",0);r(this,"currentTop",0);r(this,"currentWidth",800);r(this,"currentHeight",600);r(this,"app");r(this,"resizeObserver");r(this,"gngEventlistenerManager");r(this,"defaultGroup");r(this,"shapesWhichBelongToNoGroup",[]);r(this,"shapesNotAffectedByWorldTransforms",[]);r(this,"tickerFunction")}_cj$_constructor_$World$(e,i){this.interpreter=e.scheduler.interpreter,this._cj$_constructor_$World$int$int(e,i,800,600)}_cj$_constructor_$World$int$int(e,i,n,s){var f,b,A;this.interpreter=e.scheduler.interpreter;let a=this.interpreter;(f=a.graphicsManager)==null||f.registerGraphicSystem(this);let l=a.retrieveObject("WorldClass");if(l){if(this.constructor.type.identifier!="World")throw new W("Es wurde schon ein World-Objekt instanziiert.");return e.s.push(l),(b=this.app)==null||b.stage.removeChildren(0,this.app.stage.children.length).forEach(C=>C.destroy()),l.changeResolution(a,n,s),i&&i(),l}let h=e.state;e.state=F.waiting,a.storeObject("WorldClass",this);let u=(A=a.graphicsManager)==null?void 0:A.graphicsDiv,m=u.getElementsByClassName("pixiWorld");for(let C=0;C0;g&&(this.graphicsDiv.style.pointerEvents="none"),this.app=new $f,this.app.init({backgroundAlpha:g?0:1,background:"#000000",width:n,height:s,resizeTo:void 0,antialias:!0}).then(async()=>{var C,w,x;this.app.canvas.style.width="10px",this.app.canvas.style.height="10px",(C=this.graphicsDiv)==null||C.appendChild(this.app.canvas),this.resizeObserver=new ResizeObserver(()=>{this.changeResolution(a,this.width,this.height)}),this.resizeObserver.observe(this.graphicsDiv.parentElement.parentElement),this.app.stage.setFromMatrix(new ln(1,0,0,1,0,0)),this.changeResolution(a,n,s),this.addCallbacks(a),this.tickerFunction=q=>{this.tick(If.shared.elapsedMS,a)},this.app.ticker.add(this.tickerFunction),this.app.ticker.maxFPS=30,this.app.ticker.minFPS=30,a.isExternalTimer=!0,this.mouseManager=new Ng(this,this.graphicsDiv,(w=a.graphicsManager)==null?void 0:w.coordinatesDiv),this.mouseManager.registerListeners(),this.gngEventlistenerManager=new jy(a,this),await((x=a.graphicsManager)==null?void 0:x.initPixiUserSpritesheet()),e.state=h,e.s.push(this),i&&i()})}tick(e,i){i.timerFunction(33)}addCallbacks(e){let i=()=>{e.deleteObject("WorldClass"),e.eventManager.off(i),e.eventManager.off(n),this.destroyWorld(e)},n=()=>{this.interpreter.getMain().getRepl().state!="standalone"&&(this.onProgramStopped(),e.eventManager.off(n),this.mouseManager.removeAllListeners())};e.eventManager.on("resetRuntime",i),e.eventManager.on("stop",n)}destroyWorld(e){var i,n,s;this.mouseManager.unregisterListeners(),this.interpreter.actorManager.clear(),this.gngEventlistenerManager.clear(),e.isExternalTimer=!1,(i=this.app)==null||i.destroy({removeView:!0},{}),this.app=void 0,(n=this.resizeObserver)==null||n.disconnect(),(s=this.graphicsDiv)==null||s.remove(),e.deleteObject("WorldClass")}changeResolution(e,i,n){var h,u;this.width=i,this.height=n,this.currentLeft=0,this.currentTop=0,this.currentWidth=i,this.currentHeight=n,this.app.canvas.style.width="10px",this.app.canvas.style.height="10px",(h=this.app)==null||h.renderer.resize(i,n,1);let s=this.graphicsDiv.parentElement.parentElement.getBoundingClientRect();(s.width==0||s.height==0)&&(s=this.graphicsDiv.parentElement.getBoundingClientRect());let a,l;i/n>s.width/s.height?(a=s.width,l=s.width/i*n):(l=s.height,a=s.height/n*i),l=Math.min(l,s.height),a=Math.min(a,s.width),this.app.canvas.style.width=a+"px",this.app.canvas.style.height=l+"px",(u=e.graphicsManager)==null||u.resizeGraphicsDivHeight(),this.computeCurrentWorldBounds()}onProgramStopped(){this.interpreter.deleteObject("WorldClass");const e={width:this.app.screen.width,height:this.app.screen.height,antialias:!0};let i=uc.create(e);setTimeout(()=>{this.app&&(this.app.renderer.render({container:this.app.stage,target:i,clear:!0}),setTimeout(()=>{var a;if(!this.app)return;let n=this.app.stage.children.slice();this.app.stage.removeChildren(0,n.length),n.forEach(l=>l.destroy());let s=new tr(i);s.x=0,s.y=0,s.anchor=0,this.app.stage.setFromMatrix(new ln),(a=this.app)==null||a.stage.addChild(s)},200))},200)}hasActors(){var e;return this.mouseManager.hasMouseListeners()||((e=this.gngEventlistenerManager)==null?void 0:e.hasEventListeners())}registerGNGEventListener(e,i){this.gngEventlistenerManager.registerEventlistener(e,i)}unRegisterGNGEventListener(e,i){this.gngEventlistenerManager.removeEventlistener(e,i)}_setBackgroundColor(e){let i=this.app.renderer;if(typeof e=="string"){let n=Ke.parseColorToOpenGL(e);if(!n.color)return;i.background.color.setValue(n.color)}else i.background.color.setValue(e)}_setBackgroundColorColor(e){let i=this.app.renderer;if(e==null)throw new qt(o.fsColorIsNullException());i.background.color=e.red*65536+e.green*256+e.blue}_rotate(e,i,n){let s=-e/180*Math.PI,a=this.app.stage,l=new ln().copyFrom(a.localTransform);a.localTransform.identity(),a.localTransform.translate(-i,-n),a.localTransform.rotate(s),a.localTransform.translate(i,n),a.localTransform.prepend(l),a.setFromMatrix(a.localTransform),a._didLocalTransformChangeId=a._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(h=>{h._rotate(-e,i,n)})}_scale(e,i,n){if(Math.abs(e)<1e-14)return;let s=this.app.stage,a=new ln().copyFrom(s.localTransform);s.localTransform.identity(),s.localTransform.translate(-i,-n),s.localTransform.scale(e,e),s.localTransform.translate(i,n),s.localTransform.prepend(a),s.setFromMatrix(s.localTransform),s._didLocalTransformChangeId=s._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(l=>{l._scale(1/e,i,n)})}_translate(e,i){let n=this.app.stage,s=new ln().copyFrom(n.localTransform);n.localTransform.identity(),n.localTransform.translate(e,i),n.localTransform.prepend(s),n.setFromMatrix(n.localTransform),n._didLocalTransformChangeId=n._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(a=>{a._move(-e,-i)}),n.worldTransform.copyFrom(n.localTransform),this.shapesWhichBelongToNoGroup.forEach(a=>a.worldTransformDirty=!0)}_setCoordinateSystem(e,i,n,s){let a=this.app.stage;a.localTransform.identity(),a.localTransform.translate(-e,-i),a.localTransform.scale(this.width/n,this.height/s),a.setFromMatrix(a.localTransform),a._didLocalTransformChangeId=a._didChangeId,this.computeCurrentWorldBounds();let l=n/this.width;this.shapesNotAffectedByWorldTransforms.forEach(h=>{h._scale(l,e,i),h._move(e,i)})}_flipY(){let e=this.app.stage,i=this.currentTop+this.currentHeight/2;e.localTransform.scale(1,-1),e.localTransform.translate(0,i*2),e.setFromMatrix(e.localTransform),e._didLocalTransformChangeId=e._didChangeId,this.shapesNotAffectedByWorldTransforms.forEach(n=>{n._mirrorY(),n._setY(2*i-n._getCenterY())})}computeCurrentWorldBounds(){let e=new me(0,0);this.app.stage.localTransform.applyInverse(e,e);let i=new me(this.width,this.height);this.app.stage.localTransform.applyInverse(i,i),this.currentLeft=e.x,this.currentTop=e.y,this.currentWidth=Math.abs(i.x-e.x),this.currentHeight=Math.abs(i.y-e.y)}_setCursor(e){this.app.canvas.style.cursor=e}static _mj$clear$(e){var n;let i=e.scheduler.interpreter.retrieveObject("WorldClass");if(i)for(;i.shapesWhichBelongToNoGroup.length>0;)(n=i.shapesWhichBelongToNoGroup.pop())==null||n.destroy()}getIdentifier(){return"2D-World"}_followWit4Margins(e,i,n,s,a,l,h,u,m){if(e==null)throw new W(o.shapeNullError());if(e.isDestroyed)throw new W(o.shapeAlreadyDestroyedError());let g=0,f=0,b=e._getCenterX(),A=e._getCenterY(),C=b-(this.currentLeft+this.currentWidth-n);C>0&&this.currentLeft+this.currentWidth0&&this.currentLeft>l&&(g=w);let x=A-(this.currentTop+this.currentHeight-s);x>0&&this.currentTop+this.currentHeight<=m&&(f=-x);let q=this.currentTop+i-A;if(q>0&&this.currentTop>=u&&(f=q),g!=0||f!=0){let D=this.app.stage,G=new ln().copyFrom(D.localTransform);D.localTransform.identity(),D.localTransform.translate(g,f),D.localTransform.prepend(G),D.setFromMatrix(D.localTransform),D._didLocalTransformChangeId=D._didChangeId,this.computeCurrentWorldBounds(),this.shapesNotAffectedByWorldTransforms.forEach(K=>{K._move(-g,-f)})}}_follow(e,i,n,s,a,l){this._followWit4Margins(e,i,i,i,i,n,s,a,l)}static _getWorld(e){const i=e.scheduler.interpreter.retrieveObject("WorldClass");if(i==null)throw new W(o.actorWorld2dDoesntexistException());e.s.push(i)}_getAllShapes(){return this.shapesWhichBelongToNoGroup.slice()}normalizedCoordinatesToXY(e,i){let n=this.width*e,s=this.height*i,a=new me(n,s);return this.app.stage.localTransform.applyInverse(a,a),{x:a.x,y:a.y}}getInterpreter(){return this.interpreter}};r(Dt,"__javaDeclarations",[{type:"declaration",signature:"class World extends BaseWorld"},{type:"method",signature:"World()",java:Dt.prototype._cj$_constructor_$World$},{type:"method",signature:"World(int width, int height)",java:Dt.prototype._cj$_constructor_$World$int$int},{type:"method",signature:"void setBackgroundColor(Color colorAsObject)",native:Dt.prototype._setBackgroundColorColor,comment:o.worldSetBackgroundColorColorComment},{type:"method",signature:"void setBackgroundColor(int colorAsRGBInt)",native:Dt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorIntComment},{type:"method",signature:"void setBackgroundColor(string colorAsString)",native:Dt.prototype._setBackgroundColor,comment:o.world3dSetBackgroundColorStringComment},{type:"method",signature:"void move(double dx, double dy)",native:Dt.prototype._translate,comment:o.worldMoveComment},{type:"method",signature:"void rotate(double angleInDeg, double centerX, double centerY)",native:Dt.prototype._rotate,comment:o.worldRotateComment},{type:"method",signature:"void scale(double factor, double centerX, double centerY)",native:Dt.prototype._scale,comment:o.worldScaleComment},{type:"method",signature:"void flipY()",native:Dt.prototype._flipY,comment:o.worldFlipYComment},{type:"method",signature:"void setCoordinateSystem(double left, double top, double width, double height)",native:Dt.prototype._setCoordinateSystem,comment:o.worldSetCoordinateSystemComment},{type:"method",signature:"void setCursor(string cursor)",native:Dt.prototype._setCursor,comment:o.world3dSetCursorComment},{type:"method",signature:"static void clear()",java:Dt._mj$clear$,comment:o.world3dClearComment},{type:"method",signature:"double getWidth()",template:"Math.round(§1.currentWidth)",comment:o.worldGetWidthComment},{type:"method",signature:"double getHeight()",template:"Math.round(§1.currentHeight)",comment:o.worldGetHeightComment},{type:"method",signature:"double getTop()",template:"Math.round(§1.currentTop)",comment:o.worldGetTopComment},{type:"method",signature:"double getLeft()",template:"Math.round(§1.currentLeft)",comment:o.worldGetLeftComment},{type:"method",signature:"Group getDefaultGroup()",template:"§1.defaultGroup",comment:o.worldGetDefaultGroupComment},{type:"method",signature:"void setDefaultGroup(Group defaultGroup)",template:"§1.defaultGroup = §2;",comment:o.worldSetDefaultGroupComment},{type:"method",signature:"void follow(Shape shape, double margin, double xMin, double xMax, double yMin, double yMax)",native:Dt.prototype._follow,comment:o.worldFollowComment},{type:"method",signature:"void follow(Shape shape, double marginTop, double marginRight, double marginBottom, double marginLeft, double xMin, double xMax, double yMin, double yMax)",native:Dt.prototype._followWit4Margins,comment:o.worldFollowComment},{type:"method",signature:"Shape[] getAllShapes()",native:Dt.prototype._getAllShapes,comment:o.getAllShapesComment},{type:"method",signature:"static World getWorld()",java:Dt._getWorld,comment:o.getWorldComment}]),r(Dt,"type");let pu=Dt;class Bl extends R{constructor(e,i){super();r(this,"key","");r(this,"value","");e&&(this.key=e),i&&(this.value=i)}}r(Bl,"__javaDeclarations",[{type:"declaration",signature:"class HttpHeader extends Object",comment:o.HttpHeaderComment},{type:"field",signature:"string key",comment:o.HttpHeaderKeyComment},{type:"field",signature:"string value",comment:o.HttpHeaderValueComment}]),r(Bl,"type");const ur=class ur extends R{constructor(e,i){super();r(this,"request");r(this,"headers",[]);this.response=e,this.body=i,e&&e.headers.forEach((n,s)=>this.headers.push(new Bl(s,n)))}_getUri(){return this.response.url}_getBody(){return this.body}_getStatusCode(){return this.response.status}_getStatusText(){return this.response.statusText}_getRequest(){return this.request}_getHeaders(){return this.headers.slice()}};r(ur,"__javaDeclarations",[{type:"declaration",signature:"class HttpResponse extends Object",comment:o.HttpResponseClassComment},{type:"method",signature:"string uri()",native:ur.prototype._getUri,comment:o.HttpResponseUriComment},{type:"method",signature:"string body()",native:ur.prototype._getBody,comment:o.HttpResponseBodyComment},{type:"method",signature:"int statusCode()",native:ur.prototype._getStatusCode,comment:o.HttpResponseStatusCodeComment},{type:"method",signature:"string statusText()",native:ur.prototype._getStatusText,comment:o.HttpResponseStatusTextComment},{type:"method",signature:"HttpRequest request()",native:ur.prototype._getRequest,comment:o.HttpResponseRequestComment},{type:"method",signature:"HttpHeader[] headers()",native:ur.prototype._getHeaders,comment:o.HttpResponseHeadersComment}]),r(ur,"type");let eh=ur;const ro=class ro extends R{_httpClientConstructor(){return this}_mj$send$HttpResponse$HttpRequest(t,e,i){t.state=F.waiting,t.scheduler.interpreter.showProgramPointer(void 0,"HttpRequestClass");let n={};for(let s of i.headers)n[s.key]=s.value;try{fetch(i.uri,{method:i.method,body:i.method=="GET"?void 0:i.postData,headers:n,redirect:"follow",cache:"no-cache"}).then(s=>{s.text().then(a=>{let l=new eh(s,a);t.s.push(l),t.scheduler.interpreter.hideProgrampointerPosition("HttpRequestClass"),t.state==F.waiting&&(t.state=F.running,e&&e())})}).catch(s=>{throw new W(""+s)})}catch(s){throw new W(""+s)}}};r(ro,"__javaDeclarations",[{type:"declaration",signature:"class HttpClient extends Object",comment:o.HttpClientComment},{type:"method",signature:"HttpClient()",native:ro.prototype._httpClientConstructor,comment:o.HttpClientConstructorComment},{type:"method",signature:"HttpResponse send(HttpRequest request)",java:ro.prototype._mj$send$HttpResponse$HttpRequest,comment:o.HttpClientSendComment}]),r(ro,"type");let gu=ro;const Nr=class Nr extends R{constructor(){super(...arguments);r(this,"headers",[]);r(this,"uri");r(this,"postData");r(this,"method","GET")}_uri(e){return this.uri=e,this}_cj$HttpRequest$(e,i){e.s.push(this),i&&i()}_get(){return this.method="GET",this}_post(e){return this.method="POST",this.postData=e,this}_header(e,i){return this.headers.push(new Bl(e,i)),this}};r(Nr,"__javaDeclarations",[{type:"declaration",signature:"class HttpRequest extends Object",comment:o.HttpRequestClassComment},{type:"method",signature:"HttpRequest()",java:Nr.prototype._cj$HttpRequest$,comment:o.HttpRequestConstructorComment},{type:"method",signature:"HttpRequest uri(string uri)",native:Nr.prototype._uri,comment:o.HttpRequestUriComment},{type:"method",signature:"HttpRequest header(string key, string value)",native:Nr.prototype._header,comment:o.HttpRequestHeaderComment},{type:"method",signature:"HttpRequest POST(string data)",native:Nr.prototype._post,comment:o.HttpRequestPOSTComment},{type:"method",signature:"HttpRequest GET(string data)",native:Nr.prototype._get,comment:o.HttpRequestGETComment}]),r(Nr,"type");let fu=Nr;const jt=class jt extends R{constructor(e){super();r(this,"value");this.value=e}_jsonElementGetType(){return Array.isArray(this.value)?"array":typeof this.value}_getArrayValues(){if(!Array.isArray(this.value))throw new W(o.JsonElementNoArrayException());return this.value.map(e=>new jt(e))}_getAttributeValue(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new W(o.JsonElementNoObjectException());return new jt(this.value[e])}_getAsString1(){if(typeof this.value!="string")throw new W(o.JsonElementNoStringExceptionComment());return this.value}_getAsString2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new W(o.JsonElementNoObjectException());if(typeof this.value[e]!="string")throw new W(o.JsonElementNoStringExceptionComment());return this.value[e]}_getAsInt1(){if(typeof this.value!="number")throw new W(o.JsonElementNoIntValueException());return Math.round(this.value)}_getAsInt2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new W(o.JsonElementNoObjectException());if(typeof this.value[e]!="number")throw new W(o.JsonElementNoIntValueException());return Math.round(this.value[e])}_getAsDouble1(){if(typeof this.value!="number")throw new W(o.JsonElementNoDoubleException());return this.value}_getAsDouble2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new W(o.JsonElementNoObjectException());if(typeof this.value[e]!="number")throw new W(o.JsonElementNoDoubleException());return this.value[e]}_getAsBoolean1(){if(typeof this.value!="boolean")throw new W(o.JsonElementNoBooleanException());return this.value}_getAsBoolean2(e){if(Array.isArray(this.value)||typeof this.value!="object")throw new W(o.JsonElementNoObjectException());if(typeof this.value[e]!="boolean")throw new W(o.JsonElementNoBooleanException());return this.value[e]}_toJson(){return JSON.stringify(this.value)}_getAttributeIdentifiers(){if(Array.isArray(this.value)||typeof this.value!="object")throw new W(o.JsonElementGetAttributeIdentifiersException());let e=[];for(const[i,n]of Object.entries(this.value))e.push(i);return e}};r(jt,"__javaDeclarations",[{type:"declaration",signature:"class JsonElement extends Object",comment:o.JsonElementClassComment},{type:"method",signature:"string getType()",native:jt.prototype._jsonElementGetType,comment:o.JsonElementGetTypeComment},{type:"method",signature:"JsonElement getAttributeValue(string identifier)",native:jt.prototype._getAttributeValue,comment:o.JsonElementGetAttributeValueComment},{type:"method",signature:"JsonElement[] getArrayValues()",native:jt.prototype._getArrayValues,comment:o.JsonElementGetArrayValuesComment},{type:"method",signature:"JsonElement getArrayValue(string identifier)",native:jt.prototype._getAttributeValue,comment:o.JsonElementGetAttributeValueComment},{type:"method",signature:"string getAsString()",native:jt.prototype._getAsString1,comment:o.JsonElementGetAsStringComment},{type:"method",signature:"string getAsString(string identifier)",native:jt.prototype._getAsString2,comment:o.JsonElementGetAsStringComment},{type:"method",signature:"int getAsInt()",native:jt.prototype._getAsInt1,comment:o.JsonElementGetAsIntComment},{type:"method",signature:"int getAsInt(string identifier)",native:jt.prototype._getAsInt2,comment:o.JsonElementGetAsIntComment},{type:"method",signature:"double getAsDouble()",native:jt.prototype._getAsDouble1,comment:o.JsonElementGetAsDoubleComment},{type:"method",signature:"double getAsDouble(string identifier)",native:jt.prototype._getAsDouble2,comment:o.JsonElementGetAsDoubleComment},{type:"method",signature:"boolean getAsBoolean()",native:jt.prototype._getAsBoolean1,comment:o.JsonElementGetAsBooleanComment},{type:"method",signature:"boolean getAsBoolean(string identifier)",native:jt.prototype._getAsBoolean2,comment:o.JsonElementGetAsBooleanComment},{type:"method",signature:"string toJson()",native:jt.prototype._toJson,comment:o.JsonElementToJsonComment},{type:"method",signature:"string[] getAttributeIdentifiers()",native:jt.prototype._getAttributeIdentifiers,comment:o.JsonElementGetAttributeIdentifiersComment}]),r(jt,"type");let th=jt;const hl=class hl extends R{_mn$parse$JsonElement$string(t){try{let e=JSON.parse(t);return new th(e)}catch(e){throw new W(o.JsonParserParseException(""+e))}}};r(hl,"__javaDeclarations",[{type:"declaration",signature:"class JsonParser extends Object",comment:o.JsonParserClassComment},{type:"method",signature:"static JsonElement parse(string jsonString)",native:hl.prototype._mn$parse$JsonElement$string,comment:o.JsonParserParseComment}]),r(hl,"type");let bu=hl;class yu extends R{}r(yu,"__javaDeclarations",[{type:"declaration",signature:"class URLEncoder extends Object",comment:o.URLEncoderClassComment()},{type:"method",signature:"static string encode(string url)",template:"encodeURI(§1)",comment:o.URLEncoderEncodeComment}]),r(yu,"type");class Kg{constructor(t,e){r(this,"nextStrategy");this.name=t,this.manager=e}}class My extends Kg{constructor(e){super("long-polling strategy",e);r(this,"isClosed");r(this,"csrfToken");r(this,"serverTimeoutMs",18e4);r(this,"timeOpened",null);r(this,"degregadeToPollingWithIntervalMs",1e4);r(this,"abortController");this.isClosed=!1}open(){this.isClosed=!1,this.abortController=new AbortController,this.timeOpened=performance.now();let e=[["content-type","text/json"]];e.push(["x-token-pm",Ft]),this.csrfToken=Ft,e.push(["x-timeout",this.serverTimeoutMs+""]);try{fetch("/servlet/registerLongpollingListener",{signal:this.abortController.signal,method:"POST",headers:e,body:JSON.stringify({})}).then(i=>{let n=Math.round(performance.now()-this.timeOpened);i.status!=200&&(console.log(`Long-polling listener got http-status: ${i.status} (${i.statusText})`),n+4e3{this.manager.onMessage(a)});break;case 502:case 504:this.reopen(s,!1);break;case 401:console.log("PushClientLongPollingStrategy: Got http status code 401, -> trying again in reopenInMs ms."),this.reopen(s,!1);break;default:this.reopen(s,!1);break}}).catch(i=>{console.log(`Long-polling listener failed due to reason: ${i}`);let n=Math.round(performance.now()-this.timeOpened),s=Math.max(10,this.degregadeToPollingWithIntervalMs-n);this.reopen(s,!1)}).finally(()=>{this.abortController=null})}catch{let n=Math.round(performance.now()-this.timeOpened),s=Math.max(10,this.degregadeToPollingWithIntervalMs-n);this.reopen(s,!1)}}reopen(e=500,i=!0){this.isClosed||(e>500&&console.log(`Reopen long-polling listener in ${e/1e3} seconds...`),setTimeout(()=>{this.isClosed||this.open()},e))}async close(){var i;this.isClosed=!0,(i=this.abortController)==null||i.abort();let e=[["content-type","text/json"]];e.push(["x-token-pm",this.csrfToken]),await fetch("/servlet/unregisterLongpollingListener",{method:"POST",headers:e,body:JSON.stringify({})})}}class Py extends Kg{constructor(e){super("websocket strategy",e);r(this,"csrfToken");r(this,"websocket");r(this,"state","closed");r(this,"openedTimestamp");r(this,"currentTimer")}open(){this.state="connecting";try{let e=(window.location.protocol.startsWith("https")?"wss://":"ws://")+window.location.host+"/servlet/pushWebsocket?csrfToken="+Ft;this.websocket=new WebSocket(e),this.websocket.onopen=i=>{this.state="open",this.openedTimestamp=performance.now()},this.websocket.onclose=i=>{let n=performance.now()-this.openedTimestamp;console.log("Websocket has been closed after "+n+" ms, code: "+i.code+", reason: "+i.reason),this.state="closed",i.code==1001&&performance.now()-this.openedTimestamp>1e4?(console.log("Reason was timeout, dt > 10s => Reopen!"),this.open()):(this.manager.onStrategyFailed(this),this.state="closed")},this.websocket.onerror=i=>{console.log("Error on websocket, type: "+i.type),this.websocket.close(),this.manager.onStrategyFailed(this),this.state="closed"},this.websocket.onmessage=i=>{if(i.data=="pong")return;const n=JSON.parse(i.data);this.manager.onMessage(n)},this.currentTimer!=null&&clearTimeout(this.currentTimer),this.doPing()}catch{this.manager.onStrategyFailed(this),this.state="closed"}}doPing(){this.currentTimer!=null&&clearTimeout(this.currentTimer),this.currentTimer=setTimeout(()=>{switch(this.state){case"closed":this.currentTimer=null;return;case"connecting":this.currentTimer=null,this.doPing();break;case"open":this.websocket.send("ping"),this.currentTimer=null,this.doPing();break}},25e3)}async close(){this.state="closed",this.websocket.close()}}class Oy{constructor(t){r(this,"strategies",[]);r(this,"currentStrategy");r(this,"eventTypeToSubscriberInfoMap",new Map);this.baseURL=t,this.strategies=[new Py(this),new My(this)];for(let e=this.strategies.length-2;e>=0;e--)this.strategies[e].nextStrategy=this.strategies[e+1]}subscribe(t,e){this.eventTypeToSubscriberInfoMap.set(t,{eventType:t,handler:e})}unsubscribe(t){this.eventTypeToSubscriberInfoMap.delete(t)}open(){this.currentStrategy==null&&(this.currentStrategy=this.strategies[0],console.log(`Opening ${this.currentStrategy.name}`),this.currentStrategy.open())}onMessage(t){var e;for(let i of t){if(i.eventType=="keepAlive")return;try{(e=this.eventTypeToSubscriberInfoMap.get(i.eventType))==null||e.handler(i.data)}catch{}}}onStrategyFailed(t){if(t!=this.currentStrategy)return;let e=this.currentStrategy;this.currentStrategy=this.currentStrategy.nextStrategy;let i=`${e.name} failed. `;this.currentStrategy!=null?(i+=`=> Trying ${this.currentStrategy.name} in 3 seconds...`,setTimeout(()=>{console.log(`Opening ${this.currentStrategy.name}`),this.currentStrategy.open()},3e3)):i+="It was the last resort, unfortunately this client has no means to receive push-messages from server.",console.log(i)}close(){this.currentStrategy!=null&&(this.currentStrategy.close(),this.currentStrategy=null)}}const qr=class qr extends Oy{static subscribe(t,e){qr.getInstance().subscribe(t,e)}static unsubscribe(t){qr.getInstance().unsubscribe(t)}static getInstance(){return qr.instance==null&&(qr.instance=new qr("")),qr.instance}};r(qr,"instance");let Si=qr;var Ug="singleUseToken";const Ji=class Ji{static registerPerformanceEntry(t,e){let i=Ji.performanceData.find(s=>s.url==t);i==null&&(i={count:0,sumTime:0,url:t},Ji.performanceData.push(i)),i.count++;let n=Math.round(performance.now()-e);i.sumTime+=n,Ji.performanceDataCount++}static sendDataToServer(){if(performance.now()-Ji.lastTimeSent>3*60*1e3){let t={data:Ji.performanceData};Ji.performanceData=[],Ji.performanceDataCount=0,Ji.lastTimeSent=performance.now(),pt("collectPerformanceData",t,()=>{})}}};r(Ji,"performanceData",[]),r(Ji,"performanceDataCount",0),r(Ji,"lastTimeSent",performance.now());let ih=Ji;var Ft="";function pt(c,t,e,i){c.startsWith("http")||(c="servlet/"+c),yo(!0);let n=performance.now(),s={};Ft!=null&&(s={"x-token-pm":Ft}),y.ajax({type:"POST",async:!0,data:JSON.stringify(t),contentType:"application/json",headers:s,url:c,success:function(a){if(ih.registerPerformanceEntry(c,n),a.csrfToken!=null&&(Ft=a.csrfToken,Si.getInstance().open()),yo(!1),a.success!=null&&a.success==!1||typeof a=="string"&&a==""){let l="Fehler bei der Bearbeitung der Anfrage";a.message!=null&&(l=a.message),a.error!=null&&(l=a.error),l.indexOf("Not logged in")>=0,console.log("Netzwerkfehler: "+l),i&&i(l)}else e(a)},error:function(a,l){if(yo(!1),i){let h="Server nicht erreichbar.";a.status!=0&&(h=""+a.status),i(l+": "+h);return}}})}function yo(c){c?y(".jo_network-busy").show():y(".jo_network-busy").hide()}async function qe(c,t){let e=[["content-type","text/json"]];Ft!=null&&Ft.length>0&&e.push(["x-token-pm",Ft]),yo(!0);try{let n=await(await fetch(c,{method:"POST",headers:e,body:JSON.stringify(t)})).json();return n.csrfToken!=null&&(Ft=n.csrfToken,Si.getInstance().open()),n==null?alert("Fehler beim Übertragen der Daten."):n.success!=!0&&alert(`Fehler beim Übertragen der Daten: `+n.message),yo(!1),n}catch(i){return yo(!1),{success:!1,message:"Es ist ein Fehler aufgetreten: "+i}}}const ri=class ri extends R{_mn$print$void$string(t,e,i){i!=null&&(t.print(i,void 0),e&&e())}_mn$print$void$int(t,e,i){i!=null&&(t.print(i+"",void 0),e&&e())}_mn$print$void$double(t,e,i){i!=null&&(t.print(i+"",void 0),e&&e())}_mn$print$void$boolean(t,e,i){i!=null&&(t.print(i+"",void 0),e&&e())}_mn$println$void$string(t,e,i){i==null?t.println("",void 0):t.println(i,void 0),e&&e()}_mn$println$void$int(t,e,i){i==null?t.println("",void 0):t.println(i+"",void 0),e&&e()}_mn$println$void$double(t,e,i){i==null?t.println("",void 0):t.println(i+"",void 0),e&&e()}_mn$println$void$boolean(t,e,i){i==null?t.println("",void 0):t.println(i+"",void 0),e&&e()}_mn$println$void$Object(t,e,i){if(i==null){t.println("null",void 0),e&&e();return}else i._mj$toString$String$(t,()=>{let n=t.s.pop();n==null?t.println("null",void 0):t.println(n.value,void 0),e&&e()})}_mn$print$void$Object(t,e,i){if(i==null){t.print("null",void 0),e&&e();return}else i._mj$toString$String$(t,()=>{let n=t.s.pop();n==null?t.print("null",void 0):t.print(n.value,void 0),e&&e()})}};r(ri,"__javaDeclarations",[{type:"declaration",signature:"class PrintStream extends Object",comment:o.PrintStreamClassComment},{type:"method",signature:"void print(char text)",java:ri.prototype._mn$print$void$string,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(string text)",java:ri.prototype._mn$print$void$string,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(int number)",java:ri.prototype._mn$print$void$int,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(double number)",java:ri.prototype._mn$print$void$double,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(boolean b)",java:ri.prototype._mn$print$void$boolean,comment:o.PrintStreamPrintComment},{type:"method",signature:"void print(Object o)",java:ri.prototype._mn$print$void$Object,comment:o.PrintStreamPrintComment},{type:"method",signature:"void println(char text)",java:ri.prototype._mn$println$void$string,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(string text)",java:ri.prototype._mn$println$void$string,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(int number)",java:ri.prototype._mn$println$void$int,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(double number)",java:ri.prototype._mn$println$void$double,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(boolean b)",java:ri.prototype._mn$println$void$boolean,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println(Object o)",java:ri.prototype._mn$println$void$Object,comment:o.PrintStreamPrintlnComment},{type:"method",signature:"void println()",java:ri.prototype._mn$println$void$string,comment:o.PrintStreamPrintlnComment2}]),r(ri,"type");let nh=ri;const $n=class $n extends R{static _mj$exit$void$int(t,e){t.state=F.terminated,t.scheduler.exit(e)}static _currentTimeMillis(){return Math.round(Date.now())+$n.deltaTimeMillis}static _currentTimeNano(){return Math.round(performance.now()*1e6)+$n.deltaTimeMillis*1e6}static synchronizeToServerTimeMillis(t){$n.deltaTimeMillis=t-performance.now()}};r($n,"__javaDeclarations",[{type:"declaration",signature:"class System extends Object",comment:o.SystemClassComment},{type:"field",signature:"static PrintStream out",comment:o.SystemOutComment},{type:"method",signature:"static void exit(int status)",java:$n._mj$exit$void$int,comment:o.SystemExitComment},{type:"method",signature:"static int currentTimeMillis()",native:$n._currentTimeMillis,comment:o.SystemCurrentTimeMillisComment},{type:"method",signature:"static long nanoTime()",native:$n._currentTimeNano,comment:o.SystemNanoTimeComment}]),r($n,"type"),r($n,"deltaTimeMillis",0),r($n,"out",new nh);let rh=$n;const sa=class sa extends R{constructor(e,i,n,s,a,l){super();r(this,"keyValueStore",{});r(this,"index",0);r(this,"connected",!0);this.webSocket=e,this.id=i,this.rufname=n,this.familienname=s,this.username=a,this.nickname=l}send(e,i){this.webSocket.sendToClient(this.id,e,i)}getUserData(e){return this.keyValueStore[e]||null}setUserData(e,i){this.keyValueStore[e]=i}};r(sa,"__javaDeclarations",[{type:"declaration",signature:"class WebSocketClient extends Object",comment:o.WebSocketClientClassComment},{type:"method",signature:"void send(string message, string messageType)",native:sa.prototype.send,comment:o.WebSocketClientSendComment},{type:"method",signature:"void setUserData(string key, Object value)",native:sa.prototype.setUserData,comment:o.WebSocketClientSetUserDataComment},{type:"method",signature:"Object getUserData(string key)",native:sa.prototype.getUserData,comment:o.WebSocketClientGetUserDataComment},{type:"method",signature:"string getFirstName()",template:"§1.rufname"},{type:"method",signature:"string getLastName()",template:"§1.familienname"},{type:"method",signature:"string getNickname()",template:"§1.nickname"},{type:"method",signature:"string getUserName()",template:"§1.username"},{type:"field",signature:"private string rufname"},{type:"field",signature:"private string familienname"},{type:"field",signature:"private string nickname"},{type:"field",signature:"private string username"},{type:"method",signature:"string getNumber()",template:"§1.index",comment:o.WebSocketClientGetNumberComment},{type:"method",signature:"string getIndex()",template:"§1.index",comment:o.WebSocketClientGetIndexComment}]),r(sa,"type");let sh=sa;const Ht=class Ht extends R{constructor(){super(...arguments);r(this,"clientList",[]);r(this,"idToClientMap",{});r(this,"connection");r(this,"client_id",0);r(this,"isOpen",!1);r(this,"interpreter");r(this,"main");r(this,"unsentMessages",[])}_cj$_constructor_$WebSocket$(e,i){this.interpreter=e.scheduler.interpreter,this.main=this.interpreter.getMain(),e.s.push(this),i&&i()}_mj$onOpen$void$(e,i){}_mj$onClose$void$(e,i){}_mj$onMessage$void$WebSocketClient$String$String(e,i,n,s,a){}_mj$onOtherClientDisconnected$void$WebSocketClient(e,i,n){}_mj$onOtherClientConnected$void$WebSocketClient(e,i,n){}_mj$onClientsFound$void$WebSocketClient_I$int(e,i,n,s){}_mj$open$void$string$string(e,i,n,s){if(e.scheduler.interpreter.runsEmbedded())throw new W(o.WebSocketNotInEmbeddedException());e.scheduler.interpreter.showProgramPointer(void 0,"WebSocketClass"),this.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,pt("getWebSocketToken",{},a=>{let l=(window.location.protocol.startsWith("https")?"wss://":"ws://")+window.location.host+"/servlet/websocket";this.connection=new WebSocket(l),this.connection.onerror=h=>{this.onError(h)},this.connection.onclose=h=>{this.onClose(h)},this.connection.onmessage=h=>{this.onMessage(h)},this.connection.onopen=h=>{let u={command:1,token:a.token,nickname:s,sessionCode:n};e.scheduler.interpreter.eventManager.once("stop",()=>{this._close()}),this.isOpen=!0,this.main.getBottomDiv().showHideDBBusyIcon(!1),this.sendIntern(JSON.stringify(u)),this.onOpen(),e.state=F.running}})}_close(){this.disconnect()}_getOtherClients(){return this.clientList.slice()}_findClientsFromCount(e){let i={command:6,count:e,nicknames:[]};this.sendIntern(JSON.stringify(i))}_findClientsFromNicknames(e){Array.isArray(e)||(e=[e]);let i={command:6,count:e.length,nicknames:e};this.sendIntern(JSON.stringify(i))}_sendToAll(e,i){let n={command:2,data:e,dataType:i};this.sendIntern(JSON.stringify(n))}sendIntern(e){if(!this.isOpen)this.unsentMessages.push(e);else try{this.connection.send(e)}catch(i){console.log(i)}}onClose(e){this.isOpen=!1;let i=this.interpreter.scheduler.createThread("Websocket-onOpen");this._mj$onClose$void$(i,void 0),i.state=F.running}sendToClient(e,i,n){let s={command:3,data:i,dataType:n,recipient_id:e};this.sendIntern(JSON.stringify(s))}disconnect(){let e={command:4};this.sendIntern(JSON.stringify(e)),this.connection.close()}onMessage(e){let i=JSON.parse(e.data);if(i.command!=null)switch(i.command){case 1:let n=new sh(this,i.user_id,i.rufname,i.familienname,i.username,i.nickname);this.clientList.push(n),this.idToClientMap[i.user_id]=n;let s=this.interpreter.scheduler.createThread("Websocket-onClientConnected");this._mj$onOtherClientConnected$void$WebSocketClient(s,void 0,n),s.state=F.running;break;case 2:let a=this.idToClientMap[i.from_client_id];if(a==null)return;let l=this.interpreter.scheduler.createThread("Websocket-onMessage");this._mj$onMessage$void$WebSocketClient$String$String(l,void 0,a,new Y(i.data),new Y(i.dataType)),l.state=F.running;break;case 3:let h=this.idToClientMap[i.disconnecting_client_id];if(h==null)return;this.clientList.splice(this.clientList.indexOf(h),1),this.idToClientMap[i.disconnecting_client_id]=void 0;let u=this.interpreter.scheduler.createThread("Websocket-onClientDisconnected");this._mj$onOtherClientDisconnected$void$WebSocketClient(u,void 0,h),u.state=F.running;break;case 4:rh.synchronizeToServerTimeMillis(i.currentTimeMills),this.client_id=i.client_id;break;case 5:break;case 6:this.onClientsFound(i);break}}onClientsFound(e){let i=0,n=[];for(let a of e.clients)if(a.id==this.client_id)i=a.index;else{let l=this.idToClientMap[a.id];l!=null&&(l.index=a.index,n.push(l))}let s=this.interpreter.scheduler.createThread("Websocket-onClientsFound");this._mj$onClientsFound$void$WebSocketClient_I$int(s,void 0,n,i),s.state=F.running}onError(e){var i;(i=this.interpreter.printManager)==null||i.print(o.WebSocketCommunicationError()+(e==null?void 0:e.toString()),!0,3158271)}onOpen(){this.isOpen=!0,this.unsentMessages.length>0&&(this.unsentMessages.forEach(i=>this.sendIntern(i)),this.unsentMessages=[]);let e=this.interpreter.scheduler.createThread("Websocket-onOpen");this._mj$onOpen$void$(e,void 0),e.state=F.running}};r(Ht,"__javaDeclarations",[{type:"declaration",signature:"class WebSocket extends Object",comment:o.WebSocketClassComment},{type:"method",signature:"WebSocket()",java:Ht.prototype._cj$_constructor_$WebSocket$,comment:o.WebSocketConstructorComment},{type:"method",signature:"void open(string sessionCode, string nickname)",java:Ht.prototype._mj$open$void$string$string,comment:o.WebSocketOpenComment},{type:"method",signature:"void sendToAll(string message, string messageType)",native:Ht.prototype._sendToAll,comment:o.WebSocketSendToAllComment},{type:"method",signature:"void findClients(int count)",native:Ht.prototype._findClientsFromCount,comment:o.WebSocketFindClientsComment},{type:"method",signature:"void findClients(string[] nicknames)",native:Ht.prototype._findClientsFromNicknames,comment:o.WebSocketFindClientsByNicknamesComment},{type:"method",signature:"void findClient(string nicknames)",native:Ht.prototype._findClientsFromNicknames,comment:o.WebSocketFindClientComment},{type:"method",signature:"void close()",native:Ht.prototype._close,comment:o.WebSocketCloseComment},{type:"method",signature:"WebSocketClient getOtherClients()",native:Ht.prototype._getOtherClients,comment:o.WebSocketGetOtherClientsComment},{type:"method",signature:"void onOpen()",java:Ht.prototype._mj$onOpen$void$,comment:o.WebSocketOnOpenComment},{type:"method",signature:"void onClose()",java:Ht.prototype._mj$onClose$void$,comment:o.WebSocketOnCloseComment},{type:"method",signature:"void onMessage(WebSocketClient sender, String message, String messageType)",java:Ht.prototype._mj$onMessage$void$WebSocketClient$String$String,comment:o.WebSocketOnMessageComment},{type:"method",signature:"void onOtherClientConnected(WebSocketClient otherClient)",java:Ht.prototype._mj$onOtherClientConnected$void$WebSocketClient,comment:o.WebSocketOnOtherClientConnectedComment},{type:"method",signature:"void onOtherClientDisconnected(WebSocketClient otherClient)",java:Ht.prototype._mj$onOtherClientDisconnected$void$WebSocketClient,comment:o.WebSocketOnOtherClientDisconnectedComment},{type:"method",signature:"void onClientsFound(WebSocketClient[] otherClients, int ownNumber)",java:Ht.prototype._mj$onClientsFound$void$WebSocketClient_I$int,comment:o.WebSocketOnClientsFoundComment}]),r(Ht,"type");let vu=Ht;class Nn{notifyOnAssertTrue(t,e,i,n){}notifyOnAssertFalse(t,e,i,n){}notifyOnAssertEqualsBoolean(t,e,i,n,s){}notifyOnAssertEqualsNumber(t,e,i,n,s){}notifyOnAssertEqualsString(t,e,i,n,s){}notifyOnAssertEqualsObject(t,e,i,n,s){}notifyOnFail(t,e,i){}notifyOnAssemblyAssertion(t,e,i,n,s){}}const cl=class cl extends R{constructor(){super()}static _assertEqualsObject(t,e,i,n,s){let a="null",l="null",h=()=>{for(let f of t.assertionObservers)f.notifyOnAssertEqualsObject(t,e,a,l,s)},u=f=>{i!=null?i._mj$toString$String$(t,()=>{a=(t.s.pop()||{value:"null"}).value,f()}):f()},m=f=>{n!=null?n._mj$toString$String$(t,()=>{l=(t.s.pop()||{value:"null"}).value,f()}):f()},g=f=>{f||u(()=>{m(()=>{h()})})};i==null||n==null?g(i==n):i._mj$equals$boolean$Object(t,()=>{g(t.s.pop())},n)}};r(cl,"__javaDeclarations",[{type:"declaration",signature:"class Assertions extends Object"},{type:"method",signature:"public static void assertCodeReached(string message)",template:`${$.registerCodeReached}(§1)`},{type:"method",signature:"public static void assertTrue(boolean condition, string message)",template:`let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertTrue.name}(${V.thread}, this, _x_, _y_);}`},{type:"method",signature:"public static void assertFalse(boolean condition, string message)",template:`let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertFalse.name}(${V.thread}, this, _x_, _y_);}`},{type:"method",signature:"public static void assertEquals(boolean expected, boolean actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsBoolean.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(byte expected, byte actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsNumber.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(int expected, int actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsNumber.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(long expected, long actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsNumber.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(double expected, double actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsNumber.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(float expected, float actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsNumber.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(char expected, char actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsString.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(string expected, string actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnAssertEqualsString.name}(${V.thread}, this, _x_, _y_, _z_);}`},{type:"method",signature:"public static void assertEquals(Object expected, Object actual, string message)",template:`let _z_ = §3; let _y_ = §2; let _x_ = §1; ${$.classes}["Assertions"].${cl._assertEqualsObject.name}(${V.thread}, this, _x_, _y_, _z_);`},{type:"method",signature:"public static void fail(string message)",template:`let _x_ = §1; for(__ao of ${$.assertionObservers}){__ao.${Nn.prototype.notifyOnFail.name}(${V.thread}, this, _x_);}`}]),r(cl,"type");let Au=cl;const Kn=class Kn extends R{static log(t){t instanceof Y?console.log(t.value):console.log(t)}};r(Kn,"__javaDeclarations",[{type:"declaration",signature:"class Console extends Object",comment:o.ConsoleClassComment},{type:"method",signature:"static void log(int value)",native:Kn.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(long value)",native:Kn.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(float value)",native:Kn.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(double value)",native:Kn.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(char value)",native:Kn.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(boolean value)",native:Kn.log,comment:o.ConsoleLogComment},{type:"method",signature:"static void log(Object object)",native:Kn.log,comment:o.ConsoleLogComment}]),r(Kn,"type");let wu=Kn;const so=class so extends R{static _mj$read$string$string(t,e){let i=t.scheduler.interpreter.fileManager;if(!i)throw new W("System error: Filemanager is not defined.");t.s.push(i.read(e))}static _mj$write$void$string$string(t,e,i){let n=t.scheduler.interpreter.fileManager;if(!n)throw new W("System error: Filemanager is not defined.");n.write(e,i)}static _mj$append$void$string$string(t,e,i){let n=t.scheduler.interpreter.fileManager;if(!n)throw new W("System error: Filemanager is not defined.");n.append(e,i)}};r(so,"__javaDeclarations",[{type:"declaration",signature:"class Files extends Object",comment:o.FilesClassComment},{type:"method",signature:"static string read(string filename)",java:so._mj$read$string$string,comment:o.FilesReadComment},{type:"method",signature:"static void write(string filename, string text)",java:so._mj$write$void$string$string,comment:o.FilesWriteComment},{type:"method",signature:"static void append(string filename, string text)",java:so._mj$append$void$string$string,comment:o.FilesAppendComment}]);let ku=so;const zi=class zi extends R{static _isButtonDown(t,e){return zi.gamepadTool?zi.gamepadTool.isGamepadButtonPressed(t,e):!1}static _isConnected(t){return zi.gamepadTool?zi.gamepadTool.isGamepadConnected(t):!1}static _getAxisValue(t,e){return zi.gamepadTool?zi.gamepadTool.getGamepadAxisValue(t,e):0}};r(zi,"__javaDeclarations",[{type:"declaration",signature:"class Gamepad extends Object",comment:o.GamepadClassComment},{type:"method",signature:"static boolean isButtonDown(int gamepadIndex, int buttonIndex)",native:zi._isButtonDown,comment:o.GamepadIsButtonDownComment},{type:"method",signature:"static boolean isConnected(int gamepadIndex)",native:zi._isConnected,comment:o.GamepadIsConnectedComment},{type:"method",signature:"static double getAxisValue(int gamepadIndex, int axisIndex)",native:zi._getAxisValue,comment:o.GamepadGetAxisValueComment}]),r(zi,"type"),r(zi,"gamepadTool",typeof window>"u"?void 0:new Wg);let Cu=zi;const ke=class ke extends R{static addTask(t,e){t.state=F.waiting;let i=t.scheduler.interpreter,n=this.taskMap.get(i);if(n||(n=[],this.taskMap.set(i,n),i.eventManager.once("stop",()=>{this.taskMap.delete(i),i.storeObject("inputTaskRunning",!1)})),n.push(e),!i.retrieveObject("inputTaskRunning")){let s=()=>{if(n.length>0){i.storeObject("inputTaskRunning",!0);let a=n.shift();ke.readInput(a,s)}else i.storeObject("inputTaskRunning",!1)};s()}}static readInput(t,e){var i,n;switch(t.thread.scheduler.interpreter.showProgramPointer(void 0,"InputClass"),t.type){case"waitForInput":(i=t.thread.scheduler.interpreter.inputManager)==null||i.readInput(t.message,t.defaultValue,t.validator,s=>{t.thread.s.push(s),t.thread.state=F.running,t.thread.scheduler.interpreter.hideProgrampointerPosition("InputClass"),e()});break;case"waitForKeys":(n=t.thread.scheduler.interpreter.inputManager)==null||n.waitForKey(t.keys,s=>{t.thread.s.push(s),t.thread.state=F.running,t.thread.scheduler.interpreter.hideProgrampointerPosition("InputClass"),e()});break}}static _mj$readString$string$string$string(t,e,i){ke.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>({convertedValue:n,errorMessage:void 0})})}static _mj$readString$string$string(t,e){ke._mj$readString$string$string$string(t,e,void 0)}static _mj$readBoolean$boolean$string$boolean(t,e,i){ke.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i+"",validator:n=>({convertedValue:n=="true",errorMessage:["true","false"].indexOf(n)<0?o.InputClassBooleanError():void 0})})}static _mj$readBoolean$boolean$string(t,e){ke._mj$readBoolean$boolean$string$boolean(t,e,void 0)}static _mj$readInt$int$string$int(t,e,i){ke.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s,a=Number.parseInt(n);return Number.isNaN(a)&&(s=o.InputClassIntError()),{convertedValue:a,errorMessage:s}}})}static _mj$readInt$int$string(t,e){ke._mj$readInt$int$string$int(t,e,void 0)}static _mj$readFloat$float$string$float(t,e,i){ke.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s,a=Number.parseFloat(n);return Number.isNaN(a)&&(s=o.InputClassFloatError()),{convertedValue:a,errorMessage:s}}})}static _mj$readFloat$float$string(t,e){ke._mj$readFloat$float$string$float(t,e,void 0)}static _mj$readDouble$double$string$double(t,e,i){ke.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s,a=Number.parseFloat(n);return Number.isNaN(a)&&(s=o.InputClassFloatError()),{convertedValue:a,errorMessage:s}}})}static _mj$readDouble$double$string(t,e){ke._mj$readDouble$double$string$double(t,e,void 0)}static _mj$readChar$char$string$char(t,e,i){ke.addTask(t,{type:"waitForInput",thread:t,message:e,defaultValue:i,validator:n=>{let s;return n.length!=1&&(s=o.InputClassCharError()),{convertedValue:n,errorMessage:s}}})}static _mj$readChar$char$string(t,e){ke._mj$readChar$char$string$char(t,e,void 0)}static _mj$waitForKey$string$stringII(t,e){ke.addTask(t,{type:"waitForKeys",thread:t,keys:e})}static _mj$waitForKey$string$(t){ke.addTask(t,{type:"waitForKeys",thread:t,keys:void 0})}static _mj$isKeyDown$boolean$string(t,e){let i=t.scheduler.interpreter.keyboardManager;if(!i){t.s.push(!1);return}t.s.push(i.isPressed(e)??!1)}};r(ke,"__javaDeclarations",[{type:"declaration",signature:"class Input extends Object",comment:o.InputClassComment},{type:"method",signature:"static string readString(string message, string defaultValue)",java:ke._mj$readString$string$string$string,comment:o.InputClassReadStringComment},{type:"method",signature:"static string readString(string message)",java:ke._mj$readString$string$string,comment:o.InputClassReadStringComment},{type:"method",signature:"static boolean readBoolean(string message, boolean defaultValue)",java:ke._mj$readBoolean$boolean$string$boolean,comment:o.InputClassReadBooleanComment},{type:"method",signature:"static boolean readBoolean(string message)",java:ke._mj$readBoolean$boolean$string,comment:o.InputClassReadBooleanComment},{type:"method",signature:"static int readInt(string message, int defaultValue)",java:ke._mj$readInt$int$string$int,comment:o.InputClassReadIntComment},{type:"method",signature:"static int readInt(string message)",java:ke._mj$readInt$int$string,comment:o.InputClassReadIntComment},{type:"method",signature:"static float readFloat(string message, float defaultValue)",java:ke._mj$readFloat$float$string$float,comment:o.InputClassReadFloatComment},{type:"method",signature:"static float readFloat(string message)",java:ke._mj$readFloat$float$string,comment:o.InputClassReadFloatComment},{type:"method",signature:"static int readDouble(string message, double defaultValue)",java:ke._mj$readDouble$double$string$double,comment:o.InputClassReadDoubleComment},{type:"method",signature:"static double readDouble(string message)",java:ke._mj$readDouble$double$string,comment:o.InputClassReadDoubleComment},{type:"method",signature:"static char readChar(string message, char defaultValue)",java:ke._mj$readChar$char$string$char,comment:o.InputClassReadCharComment},{type:"method",signature:"static char readChar(string message)",java:ke._mj$readChar$char$string,comment:o.InputClassReadCharComment},{type:"method",signature:"static string waitForKey(string... possibleKeys)",java:ke._mj$waitForKey$string$stringII,comment:o.InputWaitForKeyComment},{type:"method",signature:"static string waitForKey()",java:ke._mj$waitForKey$string$,comment:o.InputWaitForAnyKeyComment},{type:"method",signature:"static boolean isKeyDown(string key)",java:ke._mj$isKeyDown$boolean$string,comment:o.InputIsKeyDownComment}]),r(ke,"type"),r(ke,"taskMap",new Map);let xu=ke;class Qg extends R{}r(Qg,"__javaDeclarations",[{type:"declaration",signature:"class Key extends Object"},{type:"field",signature:"public static final string ArrowUp",template:'"ArrowUp"',constantValue:"ArrowUp"},{type:"field",signature:"public static final string ArrowDown",template:'"ArrowDown"',constantValue:"ArrowDown"},{type:"field",signature:"public static final string ArrowLeft",template:'"ArrowLeft"',constantValue:"ArrowLeft"},{type:"field",signature:"public static final string ArrowRight",template:'"ArrowRight"',constantValue:"ArrowRight"},{type:"field",signature:"public static final string Enter",template:'"Enter"',constantValue:"Enter"},{type:"field",signature:"public static final string Space",template:'" "',constantValue:" "},{type:"field",signature:"public static final string Shift",template:'"Shift"',constantValue:"Shift"},{type:"field",signature:"public static final string Alt",template:'"Alt"',constantValue:"Alt"},{type:"field",signature:"public static final string Strg",template:'"Strg"',constantValue:"Strg"},{type:"field",signature:"public static final string PageUp",template:'"PageUp"',constantValue:"PageUp"},{type:"field",signature:"public static final string PageDown",template:'"PageDown"',constantValue:"PageDown"},{type:"field",signature:"public static final string Backspace",template:'"Backspace"',constantValue:"Backspace"},{type:"field",signature:"public static final string Escape",template:'"Escape"',constantValue:"Escape"},{type:"field",signature:"public static final string Entf",template:'"Entf"',constantValue:"Entf"},{type:"field",signature:"public static final string Einf",template:'"Einf"',constantValue:"Einf"},{type:"field",signature:"public static final string Ende",template:'"Ende"',constantValue:"Ende"}]);const ul=class ul extends $i{_mj$onKeyTyped$void$String(t,e,i){}};r(ul,"__javaDeclarations",[{type:"declaration",signature:"interface KeyListener"},{type:"method",signature:"void onKeyTyped(String key)",java:ul.prototype._mj$onKeyTyped$void$String,comment:o.KeyListenerOnKeyTypedComment}]),r(ul,"type");let Su=ul;const Rr=class Rr extends R{static intersectCircleWithPolygon(t,e,i,n){let s={x:t,y:e},a=[];for(let l=0;lnew _s(l.x,l.y))}static intersectLineSegments(t,e,i,n){let s={x:0,y:0};return rp(t,e,i,n,s)?new _s(s.x,s.y):null}static polygonContainsPoint(t,e){return qs(t,e)}static distancePointToLine(t,e,i){return Gg(e,i,t)}static distancePointToLineSegment(t,e,i){return Hh(e,i,t)}};r(Rr,"__javaDeclarations",[{type:"declaration",signature:"class MathTools extends Object",comment:o.MathToolsClassComment},{type:"method",signature:"static Vector2[] intersectCircleWithPolygon(double mx, double my, double r, Vector2[] polygon)",native:Rr.intersectCircleWithPolygon,comment:o.MathToolsIntersectCircleWithPolygonComment},{type:"method",signature:"static Vector2 intersectLineSegments(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)",native:Rr.intersectLineSegments,comment:o.MathToolsIntersectLineSegmentsComment},{type:"method",signature:"static boolean polygonContainsPoint(Vector2[] polygonPoints, Vector2 p)",native:Rr.polygonContainsPoint,comment:o.MathToolsPolygonContainsPointComment},{type:"method",signature:"static double distancePointToLine(Vector2 p, Vector2 a, Vector2 b)",native:Rr.distancePointToLine,comment:o.MathToolsDistancePointToLineComment},{type:"method",signature:"static double distancePointToLineSegment(Vector2 p, Vector2 a, Vector2 b)",native:Rr.distancePointToLineSegment,comment:o.MathToolsDistancePointToLineSegmentComment}]),r(Rr,"type");let Tu=Rr;const aa=class aa extends R{static addConstants(){let t=[];for(let e of ns.sounds)t.push({type:"field",signature:"static string "+e.name,constantValue:e.name,comment:e.description});return t}static playSound(t){ns.play(t)}static getVolume(){return ns.volumeDetectionRunning||ns.startDetectingVolume(),ns.getVolume()}};r(aa,"__javaDeclarations",[{type:"declaration",signature:"class Sound extends Object",comment:o.SoundClassComment},{type:"method",signature:"static void playSound(string sound)",native:aa.playSound,comment:o.SoundPlaySoundComment},{type:"method",signature:"static double getVolume()",native:aa.getVolume,comment:o.SoundGetVolumeComment}].concat(aa.addConstants())),r(aa,"type");let $u=aa;const en=class en extends R{static _mj$clearScreen$void$(t){t.clearScreen()}static _mj$setSpeed$void$int(t,e){t.scheduler.interpreter.scheduler.state==ie.running&&t.scheduler.interpreter.setStepsPerSecond(e,e<0),t.state=F.changeSpeedRequested}static _mj$getSpeed$int$(t){t.s.push(t.scheduler.interpreter.getStepsPerSecond())}static _mj$getNumberOfProcessorCores$int$(t){t.s.push(navigator.hardwareConcurrency)}static _mj$pause$void$int(t,e){if(e<0)throw new W(o.SystemToolsPauseTimeLower0());e!=0&&(t.state=F.timedWaiting,setTimeout(()=>{t.state==F.timedWaiting&&(t.state=F.running)},e))}static _mj$getStepCount$int$(t){t.s.push(t.scheduler.stepCountSinceStartOfProgram+t.numberOfSteps+1)}static _mj$addKeyListener$void$KeyListener(t,e){var i;(i=t.scheduler.interpreter.keyboardManager)==null||i.addKeyPressedListener(n=>{let s=t.scheduler.createThread("Keyboard listener thread",[]);e._mj$onKeyTyped$void$String(s,void 0,new Y(n)),s.startIfNotEmptyOrDestroy()})}static _mj$startLoggingPrintOutput$void$(t){var e;(e=t.scheduler.interpreter.printManager)==null||e.startLogging()}static _mj$stopLoggingPrintOutput$void$(t){var e;(e=t.scheduler.interpreter.printManager)==null||e.stopLogging()}static _mj$getPrintLog$string$(t){var e;t.s.push(((e=t.scheduler.interpreter.printManager)==null?void 0:e.getLog())||"")}};r(en,"__javaDeclarations",[{type:"declaration",signature:"class SystemTools extends Object",comment:o.SystemToolsClassComment},{type:"method",signature:"static void clearScreen()",java:en._mj$clearScreen$void$,comment:o.SystemToolsClearScreenComment},{type:"method",signature:"static void setSpeed(int stepsPerSecond)",java:en._mj$setSpeed$void$int,comment:o.SystemToolsSetSpeedComment},{type:"method",signature:"static int getSpeed()",java:en._mj$getSpeed$int$,comment:o.SystemToolsGetSpeedComment},{type:"method",signature:"static void pause(int milliseconds)",java:en._mj$pause$void$int,comment:o.SystemToolsPauseComment},{type:"method",signature:"static int getStepCount()",java:en._mj$getStepCount$int$,comment:o.SystemToolsGetStepCountComment},{type:"method",signature:"static void addKeyListener(KeyListener keyListener)",java:en._mj$addKeyListener$void$KeyListener,comment:o.SystemToolsAddKeyListenerComment},{type:"method",signature:"static int getNumberOfProcessorCores()",java:en._mj$getNumberOfProcessorCores$int$,comment:o.SystemToolsGetNumberOfProcessorCoresComment},{type:"method",signature:"static void startLoggingPrintOutput()",java:en._mj$startLoggingPrintOutput$void$,comment:o.StartLoggingPrintOutputComment},{type:"method",signature:"static void stopLoggingPrintOutput()",java:en._mj$stopLoggingPrintOutput$void$,comment:o.StopLoggingPrintOutputComment},{type:"method",signature:"static string getPrintLog()",java:en._mj$getPrintLog$string$,comment:o.GetPrintLogComment}]);let Iu=en;const mr=class mr extends R{constructor(){super(...arguments);r(this,"state","running");r(this,"intervalIds",[]);r(this,"isCurrentlyRunning",[])}static _mj$repeat$void$Runnable$int(e,i,n){let s=e.scheduler.interpreter,a=s.retrieveObject(Pa.TimerCountIndentifier);typeof a>"u"&&(s.eventManager.on("resetRuntime",()=>{s.deleteObject(Pa.TimerCountIndentifier)}),a=0),s.storeObject(Pa.TimerCountIndentifier,a+1),new mr()._mj$repeat$void$Runnable$int(e,void 0,i,n)}static _mj$executeLater$void$Runnable$int(e,i,n){setTimeout(()=>{if([ie.running,ie.paused].indexOf(e.scheduler.state)<0)return;let s=e.scheduler.createThread("timer-thread");i._mj$run$void$(s,void 0),s.startIfNotEmptyOrDestroy()},n)}_mj$repeat$void$Runnable$int(e,i,n,s){this.intervalIds.length==0&&e.scheduler.interpreter.eventManager.once("stop",()=>{this.intervalIds.forEach(h=>clearInterval(h))});let a=this.intervalIds.length;this.isCurrentlyRunning.push(!1),this.state="running";let l=this;this.intervalIds.push(setInterval(()=>{if(e.scheduler.state==ie.running&&l.state=="running"&&!l.isCurrentlyRunning[a]){let h=e.scheduler.createThread("timer-thread");n._mj$run$void$(h,void 0),h.callbackAfterTerminated=()=>{l.isCurrentlyRunning[a]=!1},l.isCurrentlyRunning[a]=!0,h.startIfNotEmptyOrDestroy()}},s))}_pause(){this.state="paused"}_restart(){this.state="running"}};r(mr,"__javaDeclarations",[{type:"declaration",signature:"class Timer extends Object",comment:o.TimerClassComment},{type:"method",signature:"static void executeLater(Runnable runnable, int deltaTimeMilliseconds)",java:mr._mj$executeLater$void$Runnable$int,comment:o.TimerClassExecuteLaterComment},{type:"method",signature:"void repeat(Runnable runnable, int deltaTimeMilliseconds)",java:mr.prototype._mj$repeat$void$Runnable$int,comment:o.TimerClassRepeatComment},{type:"method",signature:"static void repeat(Runnable runnable, int deltaTimeMilliseconds)",java:mr._mj$repeat$void$Runnable$int,comment:o.TimerClassRepeatComment},{type:"method",signature:"void pause()",native:mr.prototype._pause,comment:o.TimerClassPauseComment},{type:"method",signature:"void restart()",native:mr.prototype._restart,comment:o.TimerClassRestartComment}]),r(mr,"type");let Eu=mr;class _e extends R{static shuffle(t){let e=t.getElements(),i=e.length;for(let n=0;nn){i._mj$compare$int$T$T(t,()=>{if(t.s.pop()>=0){let l=a[s];a[s]=a[n],a[n]=l}e&&e()},a[n],a[s]);return}else{e&&e();return}_e.partition(t,()=>{let l=t.s.pop();_e.quicksort(t,()=>{_e.quicksort(t,()=>{e&&e()},i,l+1,s,a)},i,n,l-1,a)},i,n,s,a)}static partition(t,e,i,n,s,a){let l=a[s],h=n-1,u=n,m=()=>{if(u{if(t.s.pop()<=0){h++;let g=a[h];a[h]=a[u],a[u]=g,u++,m()}else u++,m()},a[u],l);else{let g=a[h+1];a[h+1]=a[s],a[s]=g,t.s.push(h+1),e();return}};m()}}const Un=class Un extends R{constructor(e){super();r(this,"elements",[]);this.elements=e||[]}_mj$count$long$(e,i){e.s.push(this.elements.length),i&&i()}_mj$toArray$Object_I$(e,i){e.s.push(this.elements.slice()),i&&i()}_mj$forEach$void$Consumer(e,i,n){let s=-1,a=()=>{s++,s{if(a++,a{s.push(e.s.pop()),l()},h)}else e.s.push(new Un(s)),i&&i()};l()}_mj$filter$Stream$Predicate(e,i,n){let s=[],a=-1,l=()=>{if(a++,a{e.s.pop()&&s.push(h),l()},h)}else e.s.push(new Un(s)),i&&i()};l()}};r(Un,"__javaDeclarations",[{type:"declaration",signature:"private class SystemStream implements Stream"},{type:"method",signature:"Object[] toArray()",java:Un.prototype._mj$toArray$Object_I$},{type:"method",signature:"long count()",java:Un.prototype._mj$count$long$},{type:"method",signature:"void forEach(Consumer action)",java:Un.prototype._mj$forEach$void$Consumer},{type:"method",signature:"Stream filter(Predicate predicate)",java:Un.prototype._mj$filter$Stream$Predicate},{type:"method",signature:" Stream map(Function mapper)",java:Un.prototype._mj$map$Stream$Function}]),r(Un,"type");let ah=Un;const We=class We extends _e{constructor(e){super();r(this,"elements",[]);this.elements=e||[]}_constructor(){return this}_mj$forEach$void$Consumer(e,i,n){let s=-1,a=()=>{s++,s{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.elements))),i&&i();return}}_iterator(){let e=new R,i=0;return e._mj$hasNext$boolean$=(n,s)=>{n.s.push(i{ithis.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,0,i),!0}_removeWithIndex(e){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,1)[0]}_setWithIndex(e,i){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));let n=this.elements[e];return this.elements[e]=i,n}_getWithIndex(e){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements[e]}_constructor1(e,i,n){if(n==null)throw new qt(o.arrayListConstructorNullPointerException());if(n instanceof _e){this.elements=this.elements.concat(n.getElements()),e.s.push(this),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(this.elements=this.elements.concat(s),e.s.push(this),i&&i())})}_addAll(e,i,n){if(n==null)throw new qt(o.collectionAddAllNullPointerException());if(n instanceof _e){this.elements=this.elements.concat(n.getElements()),e.s.push(!0),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(this.elements=this.elements.concat(s),e.s.push(!0),i&&i())})}_addAllWithIndex(e,i,n,s){if(n<0||n>this.elements.length)throw new Ve(o.indexOutOfBoundsException(n,this.elements.length-1));if(s==null)throw new qt(o.collectionAddAllNullPointerException());if(s instanceof _e){this.elements.splice(n,0,...s.getElements()),e.s.push(!0),i&&i();return}s._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();a!=null&&Array.isArray(a)&&(this.elements.splice(n,0,...a),e.s.push(!0),i&&i())})}_clear(){this.elements.length=0}_mj$contains$boolean$E(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();e.s.push(s>=0),i&&i()},n)}_mj$containsAll$boolean$Collection(e,i,n){if(n==null)throw new qt(o.collectionContainsAllNullPointerException());let s=(a,l,h)=>{h.length>0?this._mj$contains$boolean$E(a,()=>{a.s.pop()?s(a,l,h):(a.s.push(!1),l&&l())},h.pop()):(a.s.push(!0),l&&l())};if(n instanceof _e){let a=n.getElements().slice();s(e,i,a);return}else n._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();s(e,i,a.slice())})}_isEmpty(){return this.elements.length==0}_size(){return this.elements.length}_toArray(){return this.elements.slice()}_mj$remove$boolean$E(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();s>=0?(this.elements.splice(s,1),e.s.push(!0)):e.s.push(!1),i&&i()},n)}_removeAll(e,i,n){if(n==null)throw new qt(o.collectionRemoveAllNullPointerException());let s=this.elements.length,a=(l,h,u)=>{u.length>0?this._mj$remove$boolean$E(l,()=>{a(l,h,u)},u.pop()):(l.s.push(this.elements.length!=s),h&&h())};if(n instanceof _e){let l=n.getElements().slice();a(e,i,l);return}else n._mj$toArray$Object_I$(e,()=>{let l=e.s.pop();a(e,i,l.slice())})}_mj$indexOf$int$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==R.prototype._mj$equals$boolean$Object)s=this.elements.indexOf(n),e.s.push(s),i&&i();else{let a=0,l=()=>{if(a>=this.elements.length){e.s.push(-1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){e.s.push(a),i&&i();return}else a++,l()},this.elements[a])};l()}}_mj$stream$Stream$(e,i){e.s.push(new ah(this.elements)),i&&i()}_mj$sort$void$Comparator(e,i,n){_e.sortWithComparator(e,i,n,this)}};r(We,"__javaDeclarations",[{type:"declaration",signature:"class ArrayList implements List",comment:o.arrayListClassComment},{type:"method",signature:"ArrayList()",native:We.prototype._constructor,comment:o.arrayListConstructorComment},{type:"method",signature:"ArrayList(Collection c)",java:We.prototype._constructor1,comment:o.arrayListConstructorComment1},{type:"method",signature:"Iterator iterator()",native:We.prototype._iterator,comment:o.arrayListIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:We.prototype._mj$forEach$void$Consumer,comment:o.arrayListForeachComment},{type:"method",signature:"Object[] toArray()",native:We.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",native:We.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment2},{type:"method",signature:"boolean add(E e)",native:We.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:We.prototype._addAll,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",native:We.prototype._clear,template:"§1.elements.length = 0",comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E Element)",java:We.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:We.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",native:We.prototype._isEmpty,template:"(§1.elements.length == 0)",comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:We.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:We.prototype._removeAll,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",native:We.prototype._size,template:"§1.elements.length",comment:o.collectionSizeComment},{type:"method",signature:"Stream stream()",java:We.prototype._mj$stream$Stream$,comment:o.collectionStreamComment},{type:"method",signature:"boolean add(int index, E element)",native:We.prototype._addWithIndex,comment:o.listAddElementComment},{type:"method",signature:"boolean addAll(int index, Collection c)",java:We.prototype._addAllWithIndex,comment:o.listAddAllElementsComment},{type:"method",signature:"E get (int index)",native:We.prototype._getWithIndex,comment:o.listGetComment},{type:"method",signature:"int indexOf (E Element)",java:We.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",native:We.prototype._removeWithIndex,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E Element)",native:We.prototype._setWithIndex,comment:o.listSetComment},{type:"method",signature:"void sort(Comparator comparator)",java:We.prototype._mj$sort$void$Comparator,comment:o.listSortComment},{type:"method",signature:"String toString()",java:We.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(We,"type");let Fe=We;const ao=class ao extends $i{_mj$iterator$Iterator$(t,e){}_mj$forEach$void$Consumer(t,e,i){this._mj$iterator$Iterator$(t,()=>{let n=t.s.pop(),s=()=>{n._mj$hasNext$boolean$(t,()=>{t.s.pop()?n._mj$next$E$(t,()=>{let a=t.s.pop();i._mj$accept$void$T(t,s,a)}):e&&e()})};s()})}};r(ao,"__javaDeclarations",[{type:"declaration",signature:"interface Iterable",comment:o.iterableInterfaceComment},{type:"method",signature:"Iterator iterator()",java:ao.prototype._mj$iterator$Iterator$,comment:o.iterableIteratorComment},{type:"method",signature:"default void forEach(Consumer action)",java:ao.prototype._mj$forEach$void$Consumer,comment:o.iterableForEachComment}]),r(ao,"type");let oh=ao;const ui=class ui extends oh{_mj$add$boolean$E(t,e,i){}_mj$addAll$boolean$Collection(t,e,i){}_mj$clear$void$(t,e){}_mj$contains$boolean$E(t,e,i){}_mj$containsAll$boolean$Collection(t,e,i){}_mj$isEmpty$boolean$(t,e){}_mj$remove$boolean$E(t,e,i){}_mj$removeAll$boolean$Collection(t,e,i){}_mj$size$int$(t,e){}_mj$toArray$Object_I$(t,e){}_mj$toArray$T_I$T_I(t,e,i){}_mj$stream$Stream$(t,e){}};r(ui,"__javaDeclarations",[{type:"declaration",signature:"interface Collection extends Iterable"},{type:"method",signature:"boolean add(E e)",java:ui.prototype._mj$add$boolean$E,comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:ui.prototype._mj$addAll$boolean$Collection,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",java:ui.prototype._mj$clear$void$,comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E element)",java:ui.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:ui.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",java:ui.prototype._mj$isEmpty$boolean$,comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:ui.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:ui.prototype._mj$removeAll$boolean$Collection,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",java:ui.prototype._mj$size$int$,comment:o.collectionSizeComment},{type:"method",signature:"Object[] toArray()",java:ui.prototype._mj$toArray$Object_I$,comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",java:ui.prototype._mj$toArray$T_I$T_I,comment:o.collectionToArrayComment2},{type:"method",signature:"Stream stream()",java:ui.prototype._mj$stream$Stream$,comment:o.collectionStreamComment}]),r(ui,"type");let Wo=ui;const si=class si extends R{static shuffle(t,e){e instanceof _e&&_e.shuffle(e),e._mj$size$int$(t,()=>{let i=t.s.pop(),n=i*2,s=()=>{if(n>0){n--;let a=Math.floor(Math.random()*i),l=Math.floor(Math.random()*i);e._mj$get$E$int(t,()=>{let h=t.s.pop();e._mj$get$E$int(t,()=>{let u=t.s.pop();e._mj$set$E$int$E(t,()=>{e._mj$set$E$int$E(t,()=>{s()},l,h)},a,u)},l)},a)}};i>1&&s()})}static shuffleIterative(t,e){if(e instanceof _e){_e.shuffle(e);return}if(!si.shuffleProgram){si.shuffleProgram=new Ir(si.type.module,void 0,"Collections.shuffle"),si.shuffleProgram.numberOfParameters=1,si.shuffleProgram.numberOfThisObjects=0;let i=0,n=i++,s=i++,a=i++,l=i++,h=i++,u=i++,m=i++;si.shuffleProgram.numberOfLocalVariables=i,si.shuffleProgram.addCompiledSteps([(g,f,b)=>(g.s[b+n]._mj$size$int$(g,void 0),1),(g,f,b)=>(g.s[b+s]=g.s.pop(),g.s[b+a]=g.s[b+s]*2,2),(g,f,b)=>g.s[b+a]<=0?6:(g.s[b+l]=Math.floor(Math.random()*g.s[b+s]),g.s[b+h]=Math.floor(Math.random()*g.s[b+s]),g.s[b+n]._mj$get$E$int(g,void 0,g.s[b+l]),3),(g,f,b)=>(g.s[b+u]=g.s.pop(),g.s[b+n]._mj$get$E$int(g,void 0,g.s[b+h]),4),(g,f,b)=>(g.s[b+m]=g.s.pop(),g.s[b+n]._mj$set$E$int$E(g,void 0,g.s[b+l],g.s[b+m]),5),(g,f,b)=>(g.s[b+n]._mj$set$E$int$E(g,void 0,g.s[b+h],g.s[b+u]),g.s[b+a]--,2),(g,f,b)=>(g.return(void 0),7)])}t.s.push(e),t.pushProgram(si.shuffleProgram,()=>{})}static sortListWithComparator(t,e,i){if(e instanceof _e){_e.sortWithComparator(t,void 0,i,e);return}e._mj$sort$void$Comparator(t,void 0,i)}static sortComparableList(t,e){let i={_mj$compare$int$T$T:function(n,s,a,l){if(a==null){n.s.push(1),s&&s();return}if(l==null){n.s.push(-1),s&&s();return}a._mj$compareTo$int$T(n,s,l)}};si.sortListWithComparator(t,e,i)}};r(si,"__javaDeclarations",[{type:"declaration",signature:"class Collections extends Object",comment:o.CollectionsClassComment},{type:"method",signature:"static void shuffle(List list)",java:si.shuffleIterative,comment:o.CollectionsShuffleComment},{type:"method",signature:"static void sort(List list)",java:si.sortComparableList,comment:o.CollectionsSortComparableListComment},{type:"method",signature:"static void sort(List list, Comparator comparator)",java:si.sortListWithComparator,comment:o.CollectionsSortComparableListComment}]),r(si,"type"),r(si,"shuffleProgram");let Du=si;const ml=class ml extends $i{_mj$compareTo$int$T(t,e,i){}};r(ml,"__javaDeclarations",[{type:"declaration",signature:"interface Comparable",comment:o.comparableInterfaceComment},{type:"method",signature:"int compareTo(T object)",java:ml.prototype._mj$compareTo$int$T,comment:o.comparableCompareToComment}]),r(ml,"type");let ju=ml;const pl=class pl extends $i{_mj$compare$int$T$T(t,e,i,n){}};r(pl,"__javaDeclarations",[{type:"declaration",signature:"interface Comparator",comment:o.comparatorInterfaceComment},{type:"method",signature:"int compare(T object1, T object2)",java:pl.prototype._mj$compare$int$T$T,comment:o.compataratorCompareComment}]),r(pl,"type");let Mu=pl;const Ss=class Ss extends Wo{_mj$remove$E$(t,e){}_mj$poll$E$(t,e){}_mj$peek$E$(t,e){}_mj$offer$boolean$E(t,e){}};r(Ss,"__javaDeclarations",[{type:"declaration",signature:"interface Queue extends Collection",comment:o.queueInterfaceComment},{type:"method",signature:"E remove()",java:Ss.prototype._mj$remove$E$,comment:o.queueRemoveComment},{type:"method",signature:"E poll()",java:Ss.prototype._mj$poll$E$,comment:o.queuePollComment},{type:"method",signature:"E peek()",java:Ss.prototype._mj$peek$E$,comment:o.queuePeekComment},{type:"method",signature:"boolean offer(E element)",java:Ss.prototype._mj$offer$boolean$E,comment:o.queueOfferComment}]),r(Ss,"type");let lh=Ss;const Ei=class Ei extends lh{_mj$removeFirstOccurrence$boolean$E(t,e,i){}_mj$removeLastOccurrence$boolean$E(t,e,i){}_mj$addFirst$void$E(t,e,i){}_mj$addLast$void$E(t,e,i){}_mj$removeFirst$E$(t,e){}_mj$removeLast$E$(t,e){}_mj$peekFirst$E$(t,e){}_mj$peekLast$E$(t,e){}_mj$pop$E$(t,e){}_mj$push$void$E(t,e,i){}_mj$descendingIterator$Iterator$(t,e){}};r(Ei,"__javaDeclarations",[{type:"declaration",signature:"interface Deque extends Queue",comment:o.dequeInterfaceComment},{type:"method",signature:"boolean removeFirstOccurrence(E element)",java:Ei.prototype._mj$removeFirstOccurrence$boolean$E,comment:o.dequeRemoveFirstOccurrenceComment},{type:"method",signature:"boolean removeLastOccurrence(E element)",java:Ei.prototype._mj$removeLastOccurrence$boolean$E,comment:o.dequeRemoveLastOccurrenceComment},{type:"method",signature:"void addFirst(E element)",java:Ei.prototype._mj$addFirst$void$E,comment:o.dequeAddFirstComment},{type:"method",signature:"void addLast(E element)",java:Ei.prototype._mj$addLast$void$E,comment:o.dequeAddLastComment},{type:"method",signature:"E removeFirst()",java:Ei.prototype._mj$removeFirst$E$,comment:o.dequeRemoveFirstComment},{type:"method",signature:"E removeLast()",java:Ei.prototype._mj$removeLast$E$,comment:o.dequeRemoveLastComment},{type:"method",signature:"E peekFirst()",java:Ei.prototype._mj$peekFirst$E$,comment:o.dequePeekFirstComment},{type:"method",signature:"E peekLast()",java:Ei.prototype._mj$peekLast$E$,comment:o.dequePeekLastComment},{type:"method",signature:"E pop()",java:Ei.prototype._mj$pop$E$,comment:o.dequePopComment},{type:"method",signature:"void push(E element)",java:Ei.prototype._mj$push$void$E,comment:o.dequePushComment},{type:"method",signature:"Iterator descendingIterator()",java:Ei.prototype._mj$descendingIterator$Iterator$,comment:o.dequeDescendingIteratorComment}]),r(Ei,"type");let Pu=Ei;class Fl extends W{constructor(){super(o.emptyStackException());r(this,"stacktrace",[])}}r(Fl,"__javaDeclarations",[{type:"declaration",signature:"class EmptyStackException extends RuntimeException"},{type:"method",signature:"public EmptyStackException()",native:Qi.prototype._constructor},{type:"method",signature:"public EmptyStackException(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public EmptyStackException(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public EmptyStackException(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(Fl,"type");const zt=class zt extends R{constructor(e){super();r(this,"map");this.map=e||new Map}_constructor(){return this}_mj$contains$boolean$E(e,i,n){if(n==null)e.s.push(typeof this.map.get(null)<"u");else{let s=n.__internalHashCode();e.s.push(typeof this.map.get(s)<"u")}i&&i()}_mj$containsAll$boolean$Collection(e,i,n){if(n==null)throw new qt(o.collectionContainsAllNullPointerException());let s=(a,l,h)=>{h.length>0?this._mj$contains$boolean$E(a,()=>{a.s.pop()?s(a,l,h):(a.s.push(!1),l&&l())},h.pop()):(a.s.push(!0),l&&l())};if(n instanceof _e){let a=n.getElements().slice();s(e,i,a);return}else n._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();s(e,i,a.slice())})}_add(e){if(e==null){let i=this.map.get(null);return this.map.set(null,e),typeof i>"u"}else{let i=e.__internalHashCode(),n=this.map.get(i);return this.map.set(i,e),typeof n>"u"}}_mj$addAll$boolean$Collection(e,i,n){if(n==null)throw new qt(o.collectionAddAllNullPointerException());if(n instanceof _e){n.getElements().forEach(s=>this._add(s)),e.s.push(!0),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(s.forEach(a=>this._add(a)),e.s.push(!0),i&&i())})}_mj$remove$boolean$E(e,i,n){if(n==null){let s=this.map.get(null);e.s.push(typeof s>"u"),this.map.delete(null)}else{let s=n.__internalHashCode(),a=this.map.get(s);e.s.push(typeof a>"u"),this.map.delete(s)}i&&i()}_mj$removeAll$boolean$Collection(e,i,n){if(n==null)throw new qt(o.collectionAddAllNullPointerException());if(n instanceof _e){n.getElements().forEach(s=>this._mj$remove$boolean$E(e,void 0,s)),e.s.push(!0),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop();s!=null&&Array.isArray(s)&&(s.forEach(a=>this._mj$remove$boolean$E(e,void 0,a)),e.s.push(!0),i&&i())})}toArray(){let e=[];for(let i of this.map.values())e.push(i);return e}_mj$toArray$Object_I$(e,i){e.s.push(this.toArray()),i&&i()}_mj$toArray$T_I$T_I(e,i,n){this._mj$toArray$Object_I$(e,i)}_mj$size$int$(e,i){e.s.push(this.map.size),i&&i()}_mj$isEmpty$boolean$(e,i){e.s.push(this.map.size==0),i&&i()}_mj$clear$void$(e,i){this.map.clear()}_mj$iterator$Iterator$(e,i){let n=new R,s=0,a=this.toArray();n._mj$hasNext$boolean$=(l,h)=>{l.s.push(s{s{s++,sn.push(a)),n.length==0){e.s.push("[]"),i&&i();return}let s=n[0];if(typeof s=="object"||Array.isArray(s)||s==null){e._arrayOfObjectsToString(n,()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(n))),i&&i();return}}};r(zt,"__javaDeclarations",[{type:"declaration",signature:"class HashSet implements Set",comment:o.hashSetClassComment},{type:"method",signature:"HashSet()",native:zt.prototype._constructor,comment:o.hashSetConstructorComment},{type:"method",signature:"Iterator iterator()",java:zt.prototype._mj$iterator$Iterator$,comment:o.iterableIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:zt.prototype._mj$forEach$void$Consumer,comment:o.iterableForEachComment},{type:"method",signature:"boolean add(E e)",native:zt.prototype._add,comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:zt.prototype._mj$addAll$boolean$Collection,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",java:zt.prototype._mj$clear$void$,comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E element)",java:zt.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:zt.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",java:zt.prototype._mj$isEmpty$boolean$,comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:zt.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:zt.prototype._mj$removeAll$boolean$Collection,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",java:zt.prototype._mj$size$int$,comment:o.collectionSizeComment},{type:"method",signature:"Object[] toArray()",java:zt.prototype._mj$toArray$Object_I$,comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",java:zt.prototype._mj$toArray$T_I$T_I,comment:o.collectionToArrayComment2},{type:"method",signature:"String toString()",java:zt.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(zt,"type");let dh=zt;const Kt=class Kt extends R{constructor(){super(...arguments);r(this,"map",new Map)}_constructor(){return this}_size(){return this.map.size}_isEmpty(){return this.map.size==0}_containsKey(e){if(e==null)return typeof this.map.get(null)<"u";{let i=e.__internalHashCode();return typeof this.map.get(i)<"u"}}_values(){let e=[];return this.map.forEach((i,n)=>e.push(i.v)),e}_containsValue(e){let i=!1;for(let n of this.map.values())if(n.v==e){i=!0;break}return i}_get(e){var i,n;if(e==null)return((i=this.map.get(null))==null?void 0:i.v)||null;{let s=e.__internalHashCode();return((n=this.map.get(s))==null?void 0:n.v)||null}}_put(e,i){if(e==null){let n=this.map.get(null)||null;return this.map.set(null,{k:null,v:i}),n}else{let n=e.__internalHashCode(),s=this.map.get(n);return this.map.set(n,{k:e,v:i}),s}}_clear(){this.map.clear()}_mj$forEach$void$BiConsumer(e,i,n){let s=-1,a=[];this.map.forEach((h,u)=>a.push(h));let l=()=>{s++,s{n._add(s.k)}),e.s.push(n)}_mj$toString$String$(e,i){let n=[];this.map.forEach((u,m)=>n.push(u));let s="[",a=-1,l,h=(u,m)=>{s+=" = ",u==null?(s+="null",l(m)):u._mj$toString$String$(e,()=>{s+=e.s.pop().value+"}",l(m)})};l=u=>{if(a++,a>=n.length){s+="]",u();return}let m=n[a];a>0&&(s+=", "),s+="{",m.k==null?(s+="null",h(m.v,u)):m.k._mj$toString$String$(e,()=>{s+=e.s.pop().value,h(m.v,u)})},l(()=>{e.s.push(new Y(s)),i&&i()})}_mj$remove$V$K(e,i,n){let s,a;n==null?s=this.map.get(null):(a=n.__internalHashCode(),s=this.map.get(a)),typeof s<"u"&&(this.map.delete(a),e.s.push(s.v),i&&i()),e.s.push(null),i&&i()}_mj$remove$boolean$K$V(e,i,n,s){let a,l;if(n==null?a=this.map.get(null):(l=n.__internalHashCode(),a=this.map.get(l)),typeof a<"u"){let h=a.v;if(h==null){s==null&&this.map.delete(l),e.s.push(s==null),i&&i();return}h._mj$equals$boolean$Object(e,()=>{const u=e.s.pop();u&&this.map.delete(l),e.s.push(u),i&&i()},s);return}e.s.push(!1),i&&i()}};r(Kt,"__javaDeclarations",[{type:"declaration",signature:"class HashMap implements Map",comment:o.hashMapClassComment},{type:"method",signature:"HashMap()",native:Kt.prototype._constructor,comment:o.hashMapConstructorComment},{type:"method",signature:"int size()",native:Kt.prototype._size,comment:o.mapSizeComment},{type:"method",signature:"boolean isEmpty()",native:Kt.prototype._isEmpty,comment:o.mapIsEmptyComment},{type:"method",signature:"boolean containsKey(K key)",native:Kt.prototype._containsKey,comment:o.mapContainsKeyComment},{type:"method",signature:"boolean containsValue(V value)",native:Kt.prototype._containsValue,comment:o.mapContainsValueComment},{type:"method",signature:"V get(K key)",native:Kt.prototype._get,comment:o.mapGetComment},{type:"method",signature:"V put(K key, V value)",native:Kt.prototype._put,comment:o.mapPutComment},{type:"method",signature:"void clear()",native:Kt.prototype._clear,comment:o.mapClearComment},{type:"method",signature:"void forEach(BiConsumer action)",java:Kt.prototype._mj$forEach$void$BiConsumer,comment:o.mapForeachComment},{type:"method",signature:"Collection values()",java:Kt.prototype._mj$values$Collection$,comment:o.mapValuesComment},{type:"method",signature:"Set keySet()",java:Kt.prototype._mj$keySet$Set$,comment:o.mapKeySetComment},{type:"method",signature:"V remove(K key)",java:Kt.prototype._mj$remove$V$K,comment:o.mapRemoveComment1},{type:"method",signature:"boolean remove(K key, V value)",java:Kt.prototype._mj$remove$boolean$K$V,comment:o.mapRemoveComment1},{type:"method",signature:"String toString()",java:Kt.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Kt,"type");let Ou=Kt;const oo=class oo extends $i{_mj$hasNext$boolean$(t,e){}_mj$next$E$(t,e){}};r(oo,"__javaDeclarations",[{type:"declaration",signature:"interface Iterator",comment:o.iteratorInterfaceComment},{type:"method",signature:"boolean hasNext()",java:oo.prototype._mj$hasNext$boolean$,comment:o.iteratorHasNextComment},{type:"method",signature:"E next()",java:oo.prototype._mj$next$E$,comment:o.iteratorNextComment}]),r(oo,"type");let Lu=oo;const pe=class pe extends R{constructor(){super(...arguments);r(this,"elements",[])}_constructor(){return this}_mj$remove$E$(e,i){if(this.elements.length==0)throw new W(o.linkedListIsEmptyError());e.s.push(this.elements.shift()),i&&i()}_mj$poll$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements.shift()),i&&i()}_mj$peek$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements[0]),i&&i()}_mj$removeFirstOccurrence$boolean$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==R.prototype._mj$equals$boolean$Object)s=this.elements.indexOf(n),s<0?e.s.push(!1):(this.elements.splice(s,1),e.s.push(!0)),i&&i();else{let a=0,l=()=>{if(a>=this.elements.length){e.s.push(!1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){this.elements.splice(a,1),e.s.push(!0),i&&i();return}else a++,l()},this.elements[a])};l()}}_mj$removeLastOccurrence$boolean$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==R.prototype._mj$equals$boolean$Object)s=this.elements.lastIndexOf(n),s<0?e.s.push(!1):(this.elements.splice(s,1),e.s.push(!0)),i&&i();else{let a=this.elements.length-1,l=()=>{if(a<0){e.s.push(!1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){this.elements.splice(a,1),e.s.push(!0),i&&i();return}else a--,l()},this.elements[a])};l()}}_mj$addFirst$void$E(e,i,n){this.elements.unshift(n),i&&i()}_mj$addLast$void$E(e,i,n){this.elements.push(n),i&&i()}_mj$removeFirst$E$(e,i){if(this.elements.length==0)throw new W(o.linkedListIsEmptyError());e.s.push(this.elements.shift()),i&&i()}_mj$removeLast$E$(e,i){if(this.elements.length==0)throw new W(o.linkedListIsEmptyError());e.s.push(this.elements.pop()),i&&i()}_mj$peekFirst$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements[0]),i&&i()}_mj$peekLast$E$(e,i){this.elements.length==0?e.s.push(null):e.s.push(this.elements[this.elements.length-1]),i&&i()}_mj$pop$E$(e,i){if(this.elements.length==0)throw new W(o.linkedListIsEmptyError());e.s.push(this.elements.pop()),i&&i()}_mj$push$void$E(e,i,n){this.elements.push(n),i&&i()}_mj$descendingIterator$Iterator$(e,i){let n=new R,s=this.elements.length-1;n._mj$hasNext$boolean$=(a,l)=>{a.s.push(s>=0),l&&l()},n._mj$next$E$=(a,l)=>{s>=0&&s--,a.s.push(this.elements[s+1]),l&&l()},e.s.push(n),i&&i()}_mj$forEach$void$Consumer(e,i,n){let s=-1,a=()=>{s++,s{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.elements))),i&&i();return}}_iterator(){let e=new R,i=0;return e._mj$hasNext$boolean$=(n,s)=>{n.s.push(i{i{let s=e.s.pop();s!=null&&Array.isArray(s)&&(this.elements=this.elements.concat(s),e.s.push(!0),i&&i())})}_clear(){this.elements.length=0}_mj$contains$boolean$Object(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();e.s.push(s>=0),i&&i()},n)}_mj$containsAll$boolean$Collection(e,i,n){if(n==null)throw new qt("ArrayList.containsAll wurde mit null als Argument aufgerufen.");let s=(a,l,h)=>{h.length>0?this._mj$contains$boolean$Object(a,()=>{a.s.pop()?s(a,l,h):(a.s.push(!1),l&&l())},h.pop()):(a.s.push(!0),l&&l())};if(n instanceof _e){let a=n.getElements().slice();s(e,i,a);return}else n._mj$toArray$Object_I$(e,()=>{let a=e.s.pop();s(e,i,a.slice())})}_isEmpty(){return this.elements.length==0}_mj$remove$boolean$E(e,i,n){this._mj$indexOf$int$E(e,()=>{let s=e.s.pop();s>=0?(this.elements.splice(s,1),e.s.push(!0)):e.s.push(!1),i&&i()},n)}_mj$indexOf$int$E(e,i,n){let s=-1;if(n==null||n._mj$equals$boolean$Object==R.prototype._mj$equals$boolean$Object)s=this.elements.indexOf(n),e.s.push(s),i&&i();else{let a=0,l=()=>{if(a>=this.elements.length){e.s.push(-1),i&&i();return}else n._mj$equals$boolean$Object(e,()=>{if(e.s.pop()){e.s.push(a),i&&i();return}else a++,l()},this.elements[a])};l()}}_size(){return this.elements.length}_toArray(){return this.elements.slice()}_removeAll(e,i,n){if(n==null)throw new qt("LinkedList.removeAll wurde mit null als Argument aufgerufen.");if(n instanceof _e){let s=this.elements.length,a=n.getElements();this.elements=this.elements.filter(l=>a.indexOf(l)<0),e.s.push(this.elements.length!=s),i&&i();return}n._mj$toArray$Object_I$(e,()=>{let s=e.s.pop(),a=this.elements.length;s!=null&&Array.isArray(s)&&(this.elements=this.elements.filter(l=>s.indexOf(l)<0),e.s.push(this.elements.length!=a),i&&i())})}getElements(){return this.elements}_addWithIndex(e,i){if(e<0||e>this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,0,i),!0}_removeWithIndex(e){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,1)[0]}_setWithIndex(e,i){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));let n=this.elements[e];return this.elements[e]=i,n}_getWithIndex(e){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements[e]}_mj$sort$void$Comparator(e,i,n){_e.sortWithComparator(e,i,n,this)}};r(pe,"__javaDeclarations",[{type:"declaration",signature:"class LinkedList implements Deque"},{type:"method",signature:"LinkedList()",native:pe.prototype._constructor,comment:o.linkedListConstructorComment},{type:"method",signature:"Iterator iterator()",native:pe.prototype._iterator,comment:o.iterableIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:pe.prototype._mj$forEach$void$Consumer,comment:o.iterableForEachComment},{type:"method",signature:"Object[] toArray()",native:pe.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",native:pe.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment2},{type:"method",signature:"boolean add(E e)",native:pe.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:pe.prototype._addAll,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",native:pe.prototype._clear,template:"§1.elements.length = 0",comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E Element)",java:pe.prototype._mj$contains$boolean$Object,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:pe.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",native:pe.prototype._isEmpty,template:"(§1.elements.length == 0)",comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:pe.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:pe.prototype._removeAll,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",native:pe.prototype._size,template:"§1.elements.length",comment:o.collectionSizeComment},{type:"method",signature:"E remove()",java:pe.prototype._mj$remove$E$,comment:o.queueRemoveComment},{type:"method",signature:"E poll()",java:pe.prototype._mj$poll$E$,comment:o.queuePollComment},{type:"method",signature:"E peek()",java:pe.prototype._mj$peek$E$,comment:o.queuePeekComment},{type:"method",signature:"boolean offer(E element)",native:pe.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.queueOfferComment},{type:"method",signature:"boolean removeFirstOccurrence(E element)",java:pe.prototype._mj$removeFirstOccurrence$boolean$E,comment:o.dequeRemoveFirstOccurrenceComment},{type:"method",signature:"boolean removeLastOccurrence(E element)",java:pe.prototype._mj$removeLastOccurrence$boolean$E,comment:o.dequeRemoveLastOccurrenceComment},{type:"method",signature:"void addFirst(E element)",java:pe.prototype._mj$addFirst$void$E,comment:o.dequeAddFirstComment},{type:"method",signature:"void addLast(E element)",java:pe.prototype._mj$addLast$void$E,comment:o.dequeAddLastComment},{type:"method",signature:"E removeFirst()",java:pe.prototype._mj$removeFirst$E$,comment:o.dequeRemoveFirstComment},{type:"method",signature:"E removeLast()",java:pe.prototype._mj$removeLast$E$,comment:o.dequeRemoveLastComment},{type:"method",signature:"E peekFirst()",java:pe.prototype._mj$peekFirst$E$,comment:o.dequePeekFirstComment},{type:"method",signature:"E peekLast()",java:pe.prototype._mj$peekLast$E$,comment:o.dequePeekLastComment},{type:"method",signature:"E pop()",java:pe.prototype._mj$pop$E$,comment:o.dequePopComment},{type:"method",signature:"void push(E element)",java:pe.prototype._mj$push$void$E,comment:o.dequePushComment},{type:"method",signature:"Iterator descendingIterator()",java:pe.prototype._mj$descendingIterator$Iterator$,comment:o.dequeDescendingIteratorComment},{type:"method",signature:"boolean add(int index, E element)",native:pe.prototype._addWithIndex,comment:o.listAddElementComment},{type:"method",signature:"E get (int index)",native:pe.prototype._getWithIndex,comment:o.listGetComment},{type:"method",signature:"int indexOf (E Element)",java:pe.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",native:pe.prototype._removeWithIndex,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E Element)",native:pe.prototype._setWithIndex,comment:o.listSetComment},{type:"method",signature:"void sort(Comparator comparator)",java:pe.prototype._mj$sort$void$Comparator,comment:o.listSortComment},{type:"method",signature:"String toString()",java:pe.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(pe,"type");let Bu=pe;const ue=class ue extends Wo{_mj$add$boolean$int$E(t,e){}_mj$addAll$boolean$int$Collection(t,e){}_mj$get$E$int(t,e,i){}_mj$indexOf$int$E(t,e,i){}_mj$remove$E$int(t,e,i){}_mj$set$E$int$E(t,e,i,n){}_mj$sort$void$Comparator(t,e,i){let n=this;this._mj$size$int$(t,()=>{let s=t.s.pop();s<=1?e&&e():ue.prototype.quicksort.call(n,t,e,i,0,s-1)})}quicksort(t,e,i,n,s){let a=this;if(s-n<=1){e&&e();return}ue.prototype.partition.call(a,t,()=>{let l=t.s.pop();ue.prototype.quicksort.call(a,t,()=>{ue.prototype.quicksort.call(a,t,()=>{e&&e()},i,l+1,s)},i,n,l-1)},i,n,s)}partition(t,e,i,n,s){let a=this;a._mj$get$E$int(t,()=>{let l=t.s.pop(),h=n-1,u=n,m=()=>{u{let g=t.s.pop();i._mj$compare$int$T$T(t,()=>{t.s.pop()<=0?(h++,ue.prototype.swap.call(a,t,()=>{u++,m()},h,u)):(u++,m())},g,l)},u):ue.prototype.swap.call(a,t,()=>{t.s.push(h+1),e()},h+1,s)};m()},s)}swap(t,e,i,n){let s=this;s._mj$get$E$int(t,()=>{let a=t.s.pop();s._mj$get$E$int(t,()=>{let l=t.s.pop();s._mj$set$E$int$E(t,()=>{s._mj$set$E$int$E(t,e,n,a)},i,l)},n)},i)}quicksortIterative(t,e,i,n,s){ue.quicksortProgram||(ue.initQuicksortProgram(),ue.initPartitionProgram()),t.s.push(this,i,n,s),t.pushProgram(ue.quicksortProgram,e)}static initQuicksortProgram(){ue.quicksortProgram=new Ir(ue.type.module,void 0,"ListInterface.quicksort"),ue.quicksortProgram.numberOfParameters=3,ue.quicksortProgram.numberOfThisObjects=1;let t=0,e=t++,i=t++,n=t++,s=t++,a=t++;ue.quicksortProgram.numberOfLocalVariables=t-ue.quicksortProgram.numberOfThisObjects-ue.quicksortProgram.numberOfParameters,ue.quicksortProgram.addCompiledSteps([(l,h,u)=>l.s[u+n]>=l.s[u+s]?(l.return(void 0),-1):(l.s.push(l.s[u+e],l.s[u+i],l.s[u+n],l.s[u+s]),l.pushProgram(ue.partitionProgram,void 0),1),(l,h,u)=>(l.s[u+a]=l.s.pop(),l.s.push(l.s[u+e],l.s[u+i],l.s[u+n],l.s[u+a]-1),l.pushProgram(ue.quicksortProgram,void 0),2),(l,h,u)=>(l.s.push(l.s[u+e],l.s[u+i],l.s[u+a]+1,l.s[u+s]),l.pushProgram(ue.quicksortProgram,void 0),l.return(void 0),-1)])}static initPartitionProgram(){ue.partitionProgram=new Ir(ue.type.module,void 0,"ListInterface.partition"),ue.partitionProgram.numberOfParameters=3,ue.partitionProgram.numberOfThisObjects=1;let t=0,e=t++,i=t++,n=t++,s=t++,a=t++,l=t++,h=t++,u=t++;ue.partitionProgram.numberOfLocalVariables=t-ue.partitionProgram.numberOfThisObjects-ue.partitionProgram.numberOfParameters,ue.partitionProgram.addCompiledSteps([(m,g,f)=>(m.s[f+e]._mj$get$E$int(m,void 0,m.s[f+s]),1),(m,g,f)=>(m.s[f+a]=m.s.pop(),m.s[f+l]=m.s[f+n]-1,m.s[f+h]=m.s[f+n],2),(m,g,f)=>m.s[f+h]>=m.s[f+s]?9:(m.s[f+e]._mj$get$E$int(m,void 0,m.s[f+h]),3),(m,g,f)=>(m.s[f+i]._mj$compare$int$T$T(m,void 0,m.s.pop(),m.s[f+a]),4),(m,g,f)=>m.s.pop()>0?8:(m.s[f+l]++,m.s[f+e]._mj$get$E$int(m,void 0,m.s[f+l]),5),(m,g,f)=>(m.s[f+u]=m.s.pop(),m.s[f+e]._mj$get$E$int(m,void 0,m.s[f+h]),6),(m,g,f)=>(m.s[f+e]._mj$set$E$int$E(m,void 0,m.s[f+l],m.s.pop()),7),(m,g,f)=>(m.s[f+e]._mj$set$E$int$E(m,void 0,m.s[f+h],m.s[f+u]),8),(m,g,f)=>(m.s[f+h]++,2),(m,g,f)=>(m.s[f+e]._mj$get$E$int(m,void 0,m.s[f+l]+1),10),(m,g,f)=>(m.s[f+u]=m.s.pop(),m.s[f+e]._mj$get$E$int(m,void 0,m.s[f+s]),11),(m,g,f)=>(m.s[f+e]._mj$set$E$int$E(m,void 0,m.s[f+l]+1,m.s.pop()),12),(m,g,f)=>(m.s[f+e]._mj$set$E$int$E(m,void 0,m.s[f+s],m.s[f+u]),13),(m,g,f)=>(m.return(m.s[f+l]+1),-1)])}};r(ue,"__javaDeclarations",[{type:"declaration",signature:"interface List extends Collection"},{type:"method",signature:"boolean add(int index, E element)",java:ue.prototype._mj$add$boolean$int$E,comment:o.listAddElementComment},{type:"method",signature:"boolean addAll(int index, Collection c)",java:ue.prototype._mj$addAll$boolean$int$Collection,comment:o.listAddAllElementsComment},{type:"method",signature:"E get (int index)",java:ue.prototype._mj$get$E$int,comment:o.listGetComment},{type:"method",signature:"int indexOf (E element)",java:ue.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",java:ue.prototype._mj$remove$E$int,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E element)",java:ue.prototype._mj$set$E$int$E,comment:o.listSetComment},{type:"method",signature:"default void sort(Comparator comparator)",java:ue.prototype._mj$sort$void$Comparator,comment:o.listSortComment}]),r(ue,"type"),r(ue,"quicksortProgram"),r(ue,"partitionProgram");let Fu=ue;const mi=class mi extends R{_mj$size$int$(t,e){}_mj$isEmpty$boolean$(t,e){}_mj$containsKey$boolean$K(t,e,i){}_mj$containsValue$boolean$V(t,e,i){}_mj$get$V$K(t,e,i){}_mj$put$V$K$V(t,e,i,n){}_mj$clear$void$(t,e){}_mj$forEach$void$BiConsumer(t,e,i){}_mj$values$Collection$(t,e){}_mj$keySet$Set$(t,e){}_mj$remove$V$K(t,e,i){}_mj$remove$boolean$K$V(t,e,i,n){}};r(mi,"__javaDeclarations",[{type:"declaration",signature:"interface Map",comment:o.mapInterfaceComment},{type:"method",signature:"int size()",java:mi.prototype._mj$size$int$,comment:o.mapSizeComment},{type:"method",signature:"boolean isEmpty()",java:mi.prototype._mj$isEmpty$boolean$,comment:o.mapIsEmptyComment},{type:"method",signature:"boolean containsKey(K key)",java:mi.prototype._mj$containsKey$boolean$K,comment:o.mapContainsKeyComment},{type:"method",signature:"boolean containsValue(V value)",java:mi.prototype._mj$containsValue$boolean$V,comment:o.mapContainsValueComment},{type:"method",signature:"V get(K key)",java:mi.prototype._mj$get$V$K,comment:o.mapGetComment},{type:"method",signature:"V put(K key, V value)",java:mi.prototype._mj$put$V$K$V,comment:o.mapPutComment},{type:"method",signature:"void clear()",java:mi.prototype._mj$clear$void$,comment:o.mapClearComment},{type:"method",signature:"void forEach(BiConsumer action)",java:mi.prototype._mj$forEach$void$BiConsumer,comment:o.mapForeachComment},{type:"method",signature:"Collection values()",java:mi.prototype._mj$values$Collection$,comment:o.mapValuesComment},{type:"method",signature:"Set keySet()",java:mi.prototype._mj$keySet$Set$,comment:o.mapKeySetComment},{type:"method",signature:"V remove(K key)",java:mi.prototype._mj$remove$V$K,comment:o.mapRemoveComment1},{type:"method",signature:"boolean remove(K key, V value)",java:mi.prototype._mj$remove$boolean$K$V,comment:o.mapRemoveComment1}]),r(mi,"type");let Vu=mi;const lo=class lo extends Wo{_mj$Contains$boolean$E(t,e,i){}_mj$ContainsAll$boolean$Collection(t,e,i){}};r(lo,"__javaDeclarations",[{type:"declaration",signature:"interface Set extends Collection",comment:o.setInterfaceComment},{type:"method",signature:"boolean contains(E element)",java:lo.prototype._mj$contains$boolean$E,comment:o.setContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:lo.prototype._mj$containsAll$boolean$Collection,comment:o.setContainsAllComment}]),r(lo,"type");let _u=lo;const Ts=class Ts extends Fe{_constructor(){return this}_firstElement(){return this._getWithIndex(0)}_lastElement(){return this._getWithIndex(this._size()-1)}};r(Ts,"__javaDeclarations",[{type:"declaration",signature:"class Vector extends ArrayList"},{type:"method",signature:"Vector()",native:Ts.prototype._constructor,comment:o.vectorConstructorComment},{type:"method",signature:"E firstElement()",native:Ts.prototype._firstElement,comment:o.vectorFirstElementComment},{type:"method",signature:"E lastElement()",native:Ts.prototype._lastElement,comment:o.vectorLastElementComment},{type:"method",signature:"void removeElementAt(int index)",native:Ts.prototype._removeWithIndex,comment:o.vectorRemoveElementAtComment}]),r(Ts,"type");let hh=Ts;const pr=class pr extends hh{_push(t){return this.elements.push(t),t}_pop(){if(this.elements.length==0)throw new Fl;return this.elements.pop()}_peek(){if(this.elements.length==0)throw new Fl;return this.elements[this.elements.length-1]}_empty(){return this.elements.length==0}};r(pr,"__javaDeclarations",[{type:"declaration",signature:"class Stack extends Vector",comment:o.stackClassComment},{type:"method",signature:"Stack()",native:pr.prototype._constructor,comment:o.stackConstructorComment},{type:"method",signature:"E push(E element)",native:pr.prototype._push,comment:o.stackPushComment},{type:"method",signature:"E pop()",native:pr.prototype._pop,comment:o.stackPopComment},{type:"method",signature:"E peek()",native:pr.prototype._peek,comment:o.stackPeekComment},{type:"method",signature:"boolean empty()",native:pr.prototype._empty,comment:o.stackEmptyComment},{type:"method",signature:"int search(E element)",java:pr.prototype._mj$indexOf$int$E,comment:o.stackSearchComment}]),r(pr,"type");let zu=pr;const In=class In extends Yi{};r(In,"__javaDeclarations",[{type:"declaration",signature:"enum DayOfWeek",comment:o.DayOfWeekEnumComment}]),r(In,"type"),r(In,"values",[new In(o.DayOfWeekMondayConst(),0),new In(o.DayOfWeekTuesdayConst(),1),new In(o.DayOfWeekWednesdayConst(),2),new In(o.DayOfWeekThursdayConst(),3),new In(o.DayOfWeekFridayConst(),4),new In(o.DayOfWeekSaturdayConst(),5),new In(o.DayOfWeekSundayConst(),6)]);let Wu=In;const gl=class gl extends $i{_mj$accept$void$T$U(t,e,i,n){}};r(gl,"__javaDeclarations",[{type:"declaration",signature:"interface BiConsumer"},{type:"method",signature:"void accept(T t, U u)",java:gl.prototype._mj$accept$void$T$U}]),r(gl,"type");let Nu=gl;const fl=class fl extends $i{_mj$accept$void$T(t,e,i){}};r(fl,"__javaDeclarations",[{type:"declaration",signature:"interface Consumer"},{type:"method",signature:"void accept(T t)",java:fl.prototype._mj$accept$void$T}]),r(fl,"type");let qu=fl;const bl=class bl extends $i{_mj$apply$F$E(t,e,i){}};r(bl,"__javaDeclarations",[{type:"declaration",signature:"interface Function"},{type:"method",signature:"F apply(E e)",java:bl.prototype._mj$apply$F$E}]),r(bl,"type");let Ru=bl;const Mt=class Mt extends R{constructor(e){super();r(this,"value");this.value=e}__internalHashCode(){return this.value}_cj$_constructor_$BigInteger$string(e,i,n){this.value=BigInt(n),e.s.push(this),i&&i()}_cj$_constructor_$BigInteger$long(e,i,n){this.value=BigInt(n),e.s.push(this),i&&i()}_add(e){return new Mt(this.value+e.value)}_subtract(e){return new Mt(this.value-e.value)}_divide(e){return new Mt(this.value/e.value)}_remainder(e){return new Mt(this.value%e.value)}_multiply(e){return new Mt(this.value*e.value)}_intValue(){return Number(BigInt.asIntN(52,this.value))}_mj$toString$String$(e,i){e.s.push(new Y(this.value.toString())),i&&i()}_debugOutput(){return`${this.value.toString()}`}_modPow(e,i){let n=e.value,s=i.value,a=1n,l=this.value;for(;n>0n;)(n&1n)==1n&&(a*=l,a%=s),l*=l,l%=s,n>>=1n;return new Mt(a)}};r(Mt,"__javaDeclarations",[{type:"declaration",signature:"class BigInteger extends Object",comment:o.BigIntegerClassComment},{type:"method",signature:"BigInteger(long val)",java:Mt.prototype._cj$_constructor_$BigInteger$long,comment:o.BigIntegerConstructorComment},{type:"method",signature:"BigInteger(string val)",java:Mt.prototype._cj$_constructor_$BigInteger$string,comment:o.BigIntegerConstructorComment},{type:"method",signature:"final BigInteger add(BigInteger otherNumber)",native:Mt.prototype._add,comment:o.BigIntegerAddComment},{type:"method",signature:"final BigInteger subtract(BigInteger otherNumber)",native:Mt.prototype._subtract,comment:o.BigIntegerSubtractComment},{type:"method",signature:"final BigInteger divide(BigInteger otherNumber)",native:Mt.prototype._divide,comment:o.BigIntegerDivideComment},{type:"method",signature:"final BigInteger multiply(BigInteger otherNumber)",native:Mt.prototype._multiply,comment:o.BigIntegerMultiplyComment},{type:"method",signature:"final BigInteger remainder(BigInteger otherNumber)",native:Mt.prototype._remainder,comment:o.BigIntegerRemainderComment},{type:"method",signature:"final BigInteger modPow(BigInteger exponent,BigInteger m)",native:Mt.prototype._modPow,comment:o.BigIntegerRemainderComment},{type:"method",signature:"final String toString()",java:Mt.prototype._mj$toString$String$,comment:o.BigIntegerToStringComment},{type:"method",signature:"final int intValue()",native:Mt.prototype._intValue,comment:o.BigIntegerIntValueComment}]),r(Mt,"type");let Gu=Mt;class lc{constructor(){r(this,"positivePraefix","");r(this,"positiveSuffix","");r(this,"negativePraefix","");r(this,"negativeSuffix","");r(this,"multiplier",1);r(this,"groupingSize",0);r(this,"minimumIntegerDigits",0);r(this,"maximumIntegerDigits",16);r(this,"minimumFractionDigits",0);r(this,"maximumFractionDigits",0);r(this,"minimumExponentDigits",0);r(this,"roundingMode","HALF_EVEN")}}const oa=class oa extends R{constructor(){super();r(this,"position",0);r(this,"pattern",new lc);r(this,"parsePositiveOrNegativePattern","positive");r(this,"formatString","00.00")}_constructor1(e){return this.formatString=e,this.parseFormatString(e),this}parseFormatString(e){if(this.formatString=e,this.position=0,this.pattern=new lc,this.parsePositiveOrNegativePattern="positive",this.parsePattern(),this.comes(";",!0)){let i=this.pattern;this.pattern=new lc,this.parsePositiveOrNegativePattern="negative",this.parsePattern(),i.negativePraefix=null,i.negativeSuffix=null,this.pattern=i}else this.pattern.negativePraefix="-"+this.pattern.positivePraefix,this.pattern.negativeSuffix=this.pattern.positiveSuffix}format(e){let n=e.toString().match(/(-)?(\d*).?(\d*)(e([+-](\d*)))?/),s=n[1],a=n[2],l=n[3];n[4]!=null;let h=n[5];n[6];let u=s=="-"?-1:1,m="";u==-1?this.pattern.negativePraefix==null?m="-"+this.pattern.positivePraefix:m=this.pattern.negativePraefix:m=this.pattern.positivePraefix;let g="",f="",b="",A=a.length-1;if(h!=null&&(A+=Number.parseInt(h)),A>this.pattern.maximumIntegerDigits)g=a.substring(0,1)+"."+a.substring(1)+l==null?"":l,g+="E"+A.toString();else{if(l!=null){b=".";let x=this.pattern.minimumFractionDigits-l.length;if(x>0&&(l+=oa.stringWithZeroes.substring(0,x)),this.pattern.maximumFractionDigits=5&&(q+=1);let G=""+q;G.startsWith("2")&&(a=""+(Number.parseInt(a)+1)),l=G.substring(1,G.length),l=l.substring(0,this.pattern.maximumFractionDigits)}b+=l}let w=this.pattern.minimumIntegerDigits-a.length;if(w>0&&(a=oa.stringWithZeroes.substring(0,w)+a),this.pattern.groupingSize>0){let x="",q=a.length,D=q-this.pattern.groupingSize;for(;D>=0;)x=a.substring(D,q)+x,D>0&&(x=","+x),q-=this.pattern.groupingSize,D-=this.pattern.groupingSize;q>0&&(x=a.substring(0,q)+x),a=x}f=a}let C=m+g+f+b;return u==-1&&this.pattern.negativeSuffix!=null?C+=this.pattern.negativeSuffix:C+=this.pattern.positiveSuffix,C}comes(e,i=!0){let n=this.formatString.indexOf(e,this.position)==this.position;return n&&i&&(this.position+=e.length),n}parsePattern(){this.parsePraefix(),this.parseNumber(),this.parseSuffix()}parsePraefix(){let e=this.getNextCharacter(!1);for(;"0#".indexOf(e)<0&&!this.isEnd();){switch(this.position++,e){case"'":e=this.getNextCharacter(!0);break;case"%":this.pattern.multiplier=100;break;case"‰":this.pattern.multiplier=1e3;break}this.pattern.positivePraefix+=e,e=this.getNextCharacter(!1)}}parseSuffix(){let e=this.getNextCharacter(!0);for(;!this.isEnd();){switch(e){case"'":e=this.getNextCharacter(!0);break;case"%":this.pattern.multiplier=100;break;case"‰":this.pattern.multiplier=1e3;break}this.pattern.positiveSuffix+=e,e=this.getNextCharacter(!0)}}parseNumber(){this.parseInteger(),this.comes(".",!0)&&this.parseFraction(),this.comes("E",!0)&&this.parseExponent()}parseInteger(){let e=0,i=!1;for(;this.comes("#",!1);){for(;this.comes("#",!0);)i&&e++;if(this.comes(",",!0)){i=!0,this.pattern.groupingSize=e,e=0;continue}break}for(this.pattern.groupingSize=e;this.comes("0",!1);){for(;this.comes("0",!0);)e++,this.pattern.minimumIntegerDigits++;if(this.comes(",",!0)){this.pattern.groupingSize=e,e=0;continue}break}}parseFraction(){for(;this.comes("0",!0);)this.pattern.minimumFractionDigits++;for(this.pattern.maximumFractionDigits=this.pattern.minimumFractionDigits;this.comes("#",!0);)this.pattern.maximumFractionDigits++}parseExponent(){for(;this.comes("0",!0);)this.pattern.minimumExponentDigits++}isEnd(){return this.position>=this.formatString.length}getNextCharacter(e=!0){if(this.isEnd())return"￿";let i=this.formatString.charAt(this.position);return e&&this.position++,i}};r(oa,"__javaDeclarations",[{type:"declaration",signature:"class DecimalFormat extends Object",comment:o.DecimalFormatClassComment},{type:"method",signature:"DecimalFormat(string format)",native:oa.prototype._constructor1,comment:o.decimalFormatConstructorComment},{type:"method",signature:"public final string format(double number)",template:"§1.format(§2)",comment:o.decimalFormatFormatComment}]),r(oa,"stringWithZeroes","0000000000000000000000000000000000000000");let Hu=oa;class Ku extends W{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(Ku,"__javaDeclarations",[{type:"declaration",signature:"class IllegalMonitorStateException extends RuntimeException"}]),r(Ku,"type");const pi=class pi extends R{constructor(e){super();r(this,"date");e?this.date=e:this.date=new Date}_cj$_constructor_$LocalDateTime$(e,i){this._constructor(),this.date=new Date,e.s.push(this)}static _now(){return new pi}static _of(e,i,n,s,a,l){return new pi(new Date(e,i-1,n,s,a,l))}_plusDays(e){return new pi(new Date(this.date.getTime()+e*24*3600*1e3))}_minusDays(e){return new pi(new Date(this.date.getTime()-e*24*3600*1e3))}_mj$compareTo$int$T(e){return Math.sign(this.date.getTime()-e.date.getTime())}_until(e){return(this.date.getTime()-e.date.getTime())/(24*3600*1e3)}_mj$toString$String$(e,i){e.s.push(new Y(`${this.td(this.date.getDate())}.${this.td(this.date.getMonth()+1)}.${this.td(this.date.getFullYear())} ${this.td(this.date.getHours())}:${this.td(this.date.getMinutes())}:${this.td(this.date.getSeconds())}`)),i&&i()}td(e){return e<10?"0"+e:""+e}};r(pi,"__javaDeclarations",[{type:"declaration",signature:"class LocalDateTime extends Object implements Comparable",comment:o.LocalDateTimeClassComment},{type:"method",signature:"LocalDateTime()",java:pi.prototype._cj$_constructor_$LocalDateTime$,comment:o.LocalDateTimeEmptyConstructorComment},{type:"method",signature:"static LocalDateTime now()",native:pi._now,comment:o.LocalDateTimeNowComment},{type:"method",signature:"static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second)",native:pi._of,comment:o.LocalDateTimeOfComment},{type:"method",signature:"LocalDateTime plusDays(int days)",native:pi.prototype._plusDays,comment:o.LocalDateTimePlusDaysComment},{type:"method",signature:"LocalDateTime minusDays(int days)",native:pi.prototype._minusDays,comment:o.LocalDateTimeMinusDaysComment},{type:"method",signature:"int until(LocalDateTime object)",native:pi.prototype._until,comment:o.LocalDateTimeUntilComment},{type:"method",signature:"int getYear()",template:"§1.date.getFullYear()",comment:o.LocalDateTimeGetYearComment},{type:"method",signature:"int getMonth()",template:"§1.date.getMonth() + 1",comment:o.LocalDateTimeGetMonthComment},{type:"method",signature:"int getDayOfMonth()",template:"§1.date.getDate()",comment:o.LocalDateTimeGetDayOfMonthComment},{type:"method",signature:"int getHour()",template:"§1.date.getHours()",comment:o.LocalDateTimeGetHourComment},{type:"method",signature:"int getMinute()",template:"§1.date.getMinutes()",comment:o.LocalDateTimeGetMinuteComment},{type:"method",signature:"int getSecond()",template:"§1.date.getSeconds()",comment:o.LocalDateTimeGetSecondComment},{type:"method",signature:"int compareTo(LocalDateTime object)",java:pi.prototype._mj$compareTo$int$T,comment:o.comparableCompareToComment},{type:"method",signature:"String toString()",java:pi.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(pi,"type");let Uu=pi;const la=class la extends R{constructor(){super()}_emptyConstructor(){return this}};r(la,"__javaDeclarations",[{type:"declaration",signature:"class Math extends Object"},{type:"method",signature:"private Math()",native:la.prototype._emptyConstructor},{type:"field",signature:"public static final double PI",template:"Math.PI",constantValue:Math.PI,comment:o.mathPIComment},{type:"field",signature:"public static final double E",template:"Math.E",constantValue:Math.E,comment:o.mathEComment},{type:"method",signature:"public static int abs(int a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static long abs(long a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static float abs(float a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static double abs(double a)",template:"Math.abs(§1)",constantFoldingFunction:t=>Math.abs(t),comment:o.mathAbsComment},{type:"method",signature:"public static double sin(double angleInRadians)",template:"Math.sin(§1)",constantFoldingFunction:t=>Math.sin(t),comment:o.mathSinComment},{type:"method",signature:"public static double cos(double angleInRadians)",template:"Math.cos(§1)",constantFoldingFunction:t=>Math.cos(t),comment:o.mathCosinComment},{type:"method",signature:"public static double tan(double angleInRadians)",template:"Math.tan(§1)",constantFoldingFunction:t=>Math.tan(t),comment:o.mathTanComment},{type:"method",signature:"public static double asin(double angleInRadians)",template:"Math.asin(§1)",constantFoldingFunction:t=>Math.asin(t),comment:o.mathArcsinComment},{type:"method",signature:"public static double acos(double angleInRadians)",template:"Math.acos(§1)",constantFoldingFunction:t=>Math.acos(t),comment:o.mathArccosComment},{type:"method",signature:"public static double atan(double angleInRadians)",template:"Math.atan(§1)",constantFoldingFunction:t=>Math.atan(t),comment:o.mathArctanComment},{type:"method",signature:"public static double atan2(double y, double x)",template:"Math.atan2(§1, §2)",constantFoldingFunction:(t,e)=>Math.atan2(t,e),comment:o.mathAtan2Comment},{type:"method",signature:"public static int round(double value)",template:"Math.round(§1)",constantFoldingFunction:t=>Math.round(t),comment:o.mathRoundComment},{type:"method",signature:"public static int floor(double value)",template:"Math.floor(§1)",constantFoldingFunction:t=>Math.floor(t),comment:o.mathFloorComment},{type:"method",signature:"public static int ceil(double value)",template:"Math.ceil(§1)",constantFoldingFunction:t=>Math.ceil(t),comment:o.mathCeilComment},{type:"method",signature:"public static int signum(double value)",template:"Math.sign(§1)",constantFoldingFunction:t=>Math.sign(t),comment:o.mathSignComment},{type:"method",signature:"public static double sqrt(double a)",template:"Math.sqrt(§1)",constantFoldingFunction:t=>Math.sqrt(t),comment:o.mathSqrtComment},{type:"method",signature:"public static double random()",template:"Math.random()",comment:o.mathRandomComment},{type:"method",signature:"public static double pow(double basis, double exponent)",template:"Math.pow(§1, §2)",constantFoldingFunction:(t,e)=>Math.pow(t,e),comment:o.mathPowComment},{type:"method",signature:"public static double toDegrees(double angleInRad)",template:"((§1) / Math.PI * 180)",constantFoldingFunction:t=>t/Math.PI*180,comment:o.mathToDegreesComment},{type:"method",signature:"public static double toRadians(double angleInDegrees)",template:"((§1) / 180 * Math.PI)",constantFoldingFunction:t=>t/180*Math.PI,comment:o.mathToRadiansComment},{type:"method",signature:"public static double exp(double value)",template:"Math.exp(§1)",constantFoldingFunction:t=>Math.exp(t),comment:o.mathExpComment},{type:"method",signature:"public static double log(double value)",template:"Math.log(§1)",constantFoldingFunction:t=>Math.log(t),comment:o.mathLogComment},{type:"method",signature:"public static double log10(double value)",template:"Math.log10(§1)",constantFoldingFunction:t=>Math.log10(t),comment:o.mathLog10Comment},{type:"method",signature:"public static int max(int a, int b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static long max(long a, long b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static float max(float a, float b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static double max(double a, double b)",template:"Math.max(§1, §2)",constantFoldingFunction:(t,e)=>Math.max(t,e),comment:o.mathMaxComment},{type:"method",signature:"public static int min(int a, int b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment},{type:"method",signature:"public static long min(long a, long b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment},{type:"method",signature:"public static float min(float a, float b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment},{type:"method",signature:"public static double min(double a, double b)",template:"Math.min(§1, §2)",constantFoldingFunction:(t,e)=>Math.min(t,e),comment:o.mathMinComment}]),r(la,"type"),r(la,"PI",Math.PI),r(la,"E",Math.E);let Qu=la;const Ut=class Ut extends R{constructor(){super(...arguments);r(this,"element")}_nconstructor(e){return this.element=e,this}static _mj$empty$Optional$(e,i){let n=new Ut;n._nconstructor(void 0),e.s.push(n),i&&i()}static _mj$of$Optional$T(e,i){let n=new Ut;n._nconstructor(i),e.s.push(n)}_mj$isEmpty$boolean$(e,i){e.s.push(this.element==null),i&&i()}_mj$equals$boolean$Object(e,i,n){if(!(n instanceof R)){e.s.push(!1),i&&i();return}let s=n;if(this.element==null){e.s.push(s.element==null),i&&i();return}else s.element==null?e.s.push(!1):e.s.push(this.element._mj$equals$boolean$Object(e,i,s.element));i&&i()}_mj$map$Optional$Function(e,i,n){let s=new Ut;this.element?n._mj$apply$F$E(e,()=>{s.element=e.s.pop(),e.s.push(s),i&&i()},this.element):(e.s.push(s),i&&i())}_mj$flatMap$Optional$Function(e,i,n){let s=new Ut;this.element?n._mj$apply$F$E(e,()=>{e.s.push(e.s.pop()),i&&i()},this.element):(e.s.push(s),i&&i())}_mj$orElse$T$T(e,i,n){let s=this.element==null?n:this.element;e.s.push(s),i&&i()}_mj$ifPresent$void$Consumer(e,i,n){this.element&&n._mj$accept$void$T(e,i,this.element)}_mj$toString$String$(e,i){let n="Nothing";this.element?this.element._mj$toString$String$(e,()=>{e.s.push(new Y("Just "+e.s.pop().value)),i&&i()}):(e.s.push(new Y(n)),i&&i())}};r(Ut,"__javaDeclarations",[{type:"declaration",signature:"class Optional",comment:o.optionalClassComment},{type:"method",signature:"private Optional()",native:Ut.prototype._nconstructor},{type:"method",signature:"public static Optional empty()",java:Ut._mj$empty$Optional$,comment:o.optionalEmptyComment},{type:"method",signature:"public boolean equals(Object o)",java:Ut.prototype._mj$equals$boolean$Object,comment:o.optionalEqualsComment},{type:"method",signature:"public boolean isEmpty()",java:Ut.prototype._mj$isEmpty$boolean$,comment:o.optionalIsEmptyComment},{type:"method",signature:"public Optional map(Function f)",java:Ut.prototype._mj$map$Optional$Function,comment:o.optionalMapComment},{type:"method",signature:"public Optional flatMap(Function> f)",java:Ut.prototype._mj$flatMap$Optional$Function,comment:o.optionalFlatMapComment},{type:"method",signature:"public static Optional of(T t)",java:Ut._mj$of$Optional$T,comment:o.optionalOfComment},{type:"method",signature:"public T orElse(T t)",java:Ut.prototype._mj$orElse$T$T,comment:o.optionalOrElseComment},{type:"method",signature:"public void ifPresent(Consumer c)",java:Ut.prototype._mj$ifPresent$void$Consumer,comment:o.optionalIfPresentComment},{type:"method",signature:"public String toString()",java:Ut.prototype._mj$toString$String$,comment:o.optionalToStringComment}]),r(Ut,"type");let Yu=Ut;class ch extends R{constructor(){super()}}r(ch,"__javaDeclarations",[{type:"declaration",signature:"class string extends Object"},{type:"method",signature:"public final int length()",template:"§1.length",constantFoldingFunction:t=>t.length},{type:"method",signature:"public final int indexOf(string str)",template:"§1.indexOf(§2)",constantFoldingFunction:(t,e)=>t.indexOf(e)},{type:"method",signature:"public final int indexOf(string str, int fromIndex)",template:"§1.indexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.indexOf(e,i)},{type:"method",signature:"public final int indexOf(char c)",template:"§1.indexOf(§2)",constantFoldingFunction:(t,e)=>t.indexOf(e)},{type:"method",signature:"public final int indexOf(char c, int fromIndex)",template:"§1.indexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.indexOf(e,i)},{type:"method",signature:"public final char charAt(int index)",template:"§1.charAt(§2)",constantFoldingFunction:(t,e)=>t.charAt(e)},{type:"method",signature:"public final int compareTo(string otherString)",template:"§1.localeCompare(§2)",constantFoldingFunction:(t,e)=>t.localeCompare(e)},{type:"method",signature:"public final int compareToIgnoreCase(string otherString)",template:"§1.localeCompare(§2, undefined, { sensitivity: 'accent' })",constantFoldingFunction:(t,e)=>t.localeCompare(e,void 0,{sensitivity:"accent"})},{type:"method",signature:"public final string concat(string otherString)",template:"§1.concat(§2)",constantFoldingFunction:(t,e)=>t.concat(e)},{type:"method",signature:"public final boolean contains(string otherString)",template:"(§1.indexOf(§2) >= 0)",constantFoldingFunction:(t,e)=>t.indexOf(e)>=0},{type:"method",signature:"public final boolean endsWith(string otherString)",template:"§1.endsWith(§2)",constantFoldingFunction:(t,e)=>t.endsWith(e)},{type:"method",signature:"public final boolean startsWith(string otherString)",template:"§1.startsWith(§2)",constantFoldingFunction:(t,e)=>t.startsWith(e)},{type:"method",signature:"public final boolean equals(string otherString)",template:"§1 == §2",constantFoldingFunction:(t,e)=>t==e},{type:"method",signature:"public final boolean equalsIgnoreCase(string otherString)",template:"§1.toLocaleUpperCase() == §2.toLocaleUpperCase()",constantFoldingFunction:(t,e)=>t.toLocaleUpperCase()==e.toLocaleUpperCase()},{type:"method",signature:"public final boolean isEmpty()",template:"(§1.length == 0)",constantFoldingFunction:t=>t.length==0},{type:"method",signature:"public final int lastIndexOf(string str)",template:"§1.lastIndexOf(§2)",constantFoldingFunction:(t,e)=>t.lastIndexOf(e)},{type:"method",signature:"public final int lastIndexOf(string str, int fromIndex)",template:"§1.lastIndexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.lastIndexOf(e,i)},{type:"method",signature:"public final int lastIndexOf(char c)",template:"§1.lastIndexOf(§2)",constantFoldingFunction:(t,e)=>t.lastIndexOf(e)},{type:"method",signature:"public final int lastIndexOf(char c, int fromIndex)",template:"§1.lastIndexOf(§2, §3)",constantFoldingFunction:(t,e,i)=>t.lastIndexOf(e,i)},{type:"method",signature:"public final string toLowerCase()",template:"§1.toLocaleLowerCase()",constantFoldingFunction:t=>t.toLocaleLowerCase()},{type:"method",signature:"public final string toUpperCase()",template:"§1.toLocaleUpperCase()",constantFoldingFunction:t=>t.toLocaleUpperCase()},{type:"method",signature:"public final string substring(int beginIndex)",template:"§1.substring(§2)",constantFoldingFunction:(t,e)=>t.substring(e)},{type:"method",signature:"public final string substring(int beginIndex, int endIndex)",template:"§1.substring(§2, §3)",constantFoldingFunction:(t,e,i)=>t.substring(e,i)},{type:"method",signature:"public final string trim()",template:"§1.trim()",constantFoldingFunction:t=>t.trim()},{type:"method",signature:"public final string replace(string target, string replacement)",template:"§1.replace(§2, () => §3)",constantFoldingFunction:(t,e,i)=>t.replace(e,i)},{type:"method",signature:"public final string replaceAll(string regex, string replacement)",template:"§1.replace(new RegExp(§2, 'g'), () => §3)",constantFoldingFunction:(t,e,i)=>t.replace(new RegExp(e,"g"),i)},{type:"method",signature:"public final boolean matches(string regex)",template:"(new RegExp('^(?:' + §2 + ')$').test(§1))",constantFoldingFunction:(t,e)=>t.match(new RegExp(e,"g"))!=null},{type:"method",signature:"public final string replaceFirst(string regex, string replacement)",template:"§1.replace(new RegExp(§2, ''), () => §3)",constantFoldingFunction:(t,e,i)=>t.replace(new RegExp(e,""),i)},{type:"method",signature:"public final string[] split(string regex)",template:"§1.split(new RegExp(§2, ''))"},{type:"method",signature:"public final int hashCode()",template:"Array.from(§1).reduce((s, c) => Math.imul(31, s) + c.charCodeAt(0) | 0, 0)",constantFoldingFunction:t=>Array.from(t).reduce((e,i)=>Math.imul(31,e)+i.charCodeAt(0)|0,0)},{type:"method",signature:"public final char[] toCharArray()",template:"Array.from(§1)",constantFoldingFunction:t=>Array.from(t)},{type:"method",signature:"public final string toString()",template:"§1",constantFoldingFunction:t=>t}]),r(ch,"type");const yl=class yl extends R{constructor(){super()}_emptyConstructor(){return this}};r(yl,"__javaDeclarations",[{type:"declaration",signature:"class Random extends Object",comment:o.RandomClassComment},{type:"method",signature:"Random()",native:yl.prototype._emptyConstructor},{type:"method",signature:"public static int randint(int from, int to)",template:"Math.floor(Math.random()*(§2-(§1)+1)+§1)",comment:o.randomRandIntComment},{type:"method",signature:"public final int nextInt(int to)",template:"Math.floor(Math.random()*§2)",comment:o.randomNextIntComment},{type:"method",signature:"public static double randdouble(double from, double to)",template:"(Math.random()*(§2-(§1))+§1)",comment:o.randomRandDoubleComment}]),r(yl,"type");let Zu=yl;const vl=class vl extends $i{_mj$run$void$(t,e){}};r(vl,"__javaDeclarations",[{type:"declaration",signature:"interface Runnable",comment:o.RunnableInterfaceComment},{type:"method",signature:"void run()",java:vl.prototype._mj$run$void$,comment:o.runnableRunComment}]),r(vl,"type");let Xu=vl;const $s=class $s extends R{constructor(){super();r(this,"permitsAvailable",1);r(this,"waitingThreads1",[])}_jconstructor(e,i,n){e.s.push(this),this.permitsAvailable=n}_nAvailablePermits(){return this.permitsAvailable}_mj$acquire$void(e,i){this.permitsAvailable>0?this.permitsAvailable--:(e.state=F.waiting,e.scheduler.suspendThread(e),this.waitingThreads1.push(e)),i&&i()}_mj$release$void(e,i){this.permitsAvailable++;let n=this.waitingThreads1.shift();n&&(e.scheduler.restoreThread(n),this.permitsAvailable--)}};r($s,"__javaDeclarations",[{type:"declaration",signature:"class Semaphore extends Object",comment:o.semaphoreClassComment},{type:"method",signature:"public Semaphore(int permits)",java:$s.prototype._jconstructor,comment:o.semaphoreConstructorComment},{type:"method",signature:"public final int availablePermits()",native:$s.prototype._nAvailablePermits,comment:o.semaphoreAvailablePermitsComment},{type:"method",signature:"public void acquire()",java:$s.prototype._mj$acquire$void,comment:o.semaphoreAcquireComment},{type:"method",signature:"public void release()",java:$s.prototype._mj$release$void,comment:o.semaphoreReleaseComment}]),r($s,"type");let Ju=$s;const tn=class tn extends Yi{static _values(){return tn.values}};r(tn,"values",[new tn("new",F.new),new tn("running",F.running),new tn("stopped_at_breakpoint",F.stoppedAtBreakpoint),new tn("runnable",F.runnable),new tn("waiting",F.waiting),new tn("timed_waiting",F.timedWaiting),new tn("terminated",F.terminated)]),r(tn,"__javaDeclarations",[{type:"declaration",signature:"enum Thread.State"}]),r(tn,"type");let Vl=tn;const Qt=class Qt extends R{constructor(){super();r(this,"stacktrace",[]);r(this,"range");r(this,"thread");r(this,"runnable");r(this,"name");r(this,"maxStepsPerSecond");r(this,"threadsToJoinWhenFinished",[])}_jconstructor(e,i,n,s){e.s.push(this),this.runnable=n,this.name=s||"user generated thread"}_jconstructor1(e,i,n){e.s.push(this),this.name=n||"user generated thread"}_mj$getState$Thread_State$(e,i){let n=Vl._values()[0];this.thread&&(n=Vl._values()[this.thread.state]),e.s.push(n)}_mj$run$void$(e,i){i&&i()}_mj$start$void$(e,i){if(!this.thread){let n=this.runnable;n||(n=this),this.thread=e.scheduler.createThread(this.name||"user generated thread",[],!0),this.thread.threadObject=this;let s=this;n._mj$run$void$(this.thread,()=>{s.callbackWhenThreadFinished()}),this.thread.startIfNotEmptyOrDestroy()}i&&i()}callbackWhenThreadFinished(){for(let e of this.threadsToJoinWhenFinished)e.scheduler.restoreThread(e);this.threadsToJoinWhenFinished.length=0}_mj$join(e,i,n){if(!this.thread||this.thread==e||[F.terminated,F.terminatedWithException].indexOf(this.thread.state)>=0){i&&i();return}let s=this;n?(setTimeout(()=>{let a=s.threadsToJoinWhenFinished.indexOf(e);a>=0&&s.threadsToJoinWhenFinished.splice(a,1),e.scheduler.restoreThread(e)},n),e.state=F.timedWaiting):e.state=F.waiting,this.threadsToJoinWhenFinished.push(e),e.scheduler.suspendThread(e),i&&i()}_toString(){return new Y(this.getClassName()+": ")}_setName(e){this.name=e,this.thread&&(this.thread.name=e)}_setSpeed(e){this.maxStepsPerSecond=e>0?e:void 0,this.thread&&(this.thread.maxStepsPerSecond=this.maxStepsPerSecond)}static _sleep(e,i){if(i<0)throw new W(o.millisecondsNotPositiveError());e.scheduler.suspendThread(e),e.state=F.timedWaiting,setTimeout(()=>{e.scheduler.restoreThread(e)},i)}static _currentThread(e){e.threadObject||(e.threadObject=new Qt),e.threadObject.thread=e,e.s.push(e.threadObject)}};r(Qt,"__javaDeclarations",[{type:"declaration",signature:"class Thread extends Object implements Runnable",comment:o.threadClassComment},{type:"method",signature:"public Thread()",java:Qt.prototype._jconstructor,comment:o.threadConstructorComment},{type:"method",signature:"public Thread(Runnable runnable)",java:Qt.prototype._jconstructor,comment:o.threadConstructorRunnableComment},{type:"method",signature:"public Thread(Runnable runnable, string name)",java:Qt.prototype._jconstructor,comment:o.threadConstructorRunnableComment},{type:"method",signature:"public Thread(string name)",java:Qt.prototype._jconstructor1,comment:o.threadConstructorComment},{type:"method",signature:"public Thread.State getState()",java:Qt.prototype._mj$getState$Thread_State$,comment:o.threadGetStateComment},{type:"method",signature:"public void run()",java:Qt.prototype._mj$run$void$,comment:o.threadRunComment},{type:"method",signature:"public void start()",java:Qt.prototype._mj$start$void$,comment:o.threadStartComment},{type:"method",signature:"public void join()",java:Qt.prototype._mj$join,comment:o.threadJoinComment},{type:"method",signature:"public void join(int milliseconds)",java:Qt.prototype._mj$join,comment:o.threadJoinComment2},{type:"method",signature:"public string getName()",template:"§1.name",comment:o.threadGetNameComment},{type:"method",signature:"public void setName(string name)",native:Qt.prototype._setName,comment:o.threadSetNameComment},{type:"method",signature:"public void setSpeed(int maxStepsPerSecond)",java:Qt.prototype._setSpeed,comment:o.threadSetSpeedComment},{type:"method",signature:"public static void sleep(int milliseconds)",java:Qt._sleep,comment:o.threadSleepComment},{type:"method",signature:"public static Thread currentThread()",java:Qt._currentThread,comment:o.threadCurrentThreadComment}]),r(Qt,"type");let em=Qt;const En=class En extends No{constructor(e,i){super(e,oe.instance,i);r(this,"myIndex");r(this,"defaultValueAsString","0");r(this,"defaultValue",0);r(this,"identifierRange",{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0});this.isPrimitive=!0,this.myIndex=En.typeIdentifiers.indexOf(this.identifier)}getCompletionItemDetail(){return v.primitiveType()}getFile(){return this.module.file}getCopyWithConcreteType(e){return this}static getUnboxedTypeIndex(e){return En.boxedTypeIdentifiers.indexOf(e.identifier)}static getTypeIndex(e){if(!e)return;let i=En.boxedTypeIdentifiers.indexOf(e.identifier);return i>=0?i:this.typeIdentifiers.indexOf(e.identifier)}toString(){return this.identifier}getDeclaration(){return this.identifier}getAbsoluteName(){return this.toString()}isByteShortIntLong(){return!1}};r(En,"boxedTypeIdentifiers",["Boolean","Character","Byte","Short","Integer","Long","Float","Double"]),r(En,"typeIdentifiers",["boolean","char","byte","short","int","long","float","double"]),r(En,"plusMinusMultDivOperators",[p.plus,p.minus,p.multiplication,p.division,p.modulo]),r(En,"shiftOperators",[p.shiftLeft,p.shiftRight,p.shiftRightUnsigned]),r(En,"logicOperators",[p.and,p.or,p.XOR]),r(En,"plusMinusMultDivAssignmentOperators",[p.plusAssignment,p.minusAssignment,p.multiplicationAssignment,p.divisionAssignment,p.moduloAssignment,p.assignment]),r(En,"comparisonOperators",[p.lower,p.greater,p.lowerOrEqual,p.greaterOrEqual,p.notEqual,p.equal]);let yt=En;class Ly extends yt{constructor(t){super("boolean",t),this.defaultValueAsString="false",this.defaultValue=!1}isUsableAsIndex(){return!1}getDefaultValue(){return!1}}class By extends yt{constructor(t){super("byte",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Fy extends yt{constructor(t){super("char",t),this.defaultValueAsString='"\\u0000"'}isUsableAsIndex(){return!0}getDefaultValue(){return"\0"}}class Vy extends yt{constructor(t){super("double",t),this.defaultValueAsString="0.0"}isUsableAsIndex(){return!1}getDefaultValue(){return 0}}class _y extends yt{constructor(t){super("float",t),this.defaultValueAsString="0.0"}isUsableAsIndex(){return!1}getDefaultValue(){return 0}}class zy extends yt{constructor(t){super("int",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Wy extends yt{constructor(t){super("long",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Ny extends No{constructor(t){super("null",oe.instance,t)}getAbsoluteName(){return"null"}getCompletionItemDetail(){return v.nullType()}isUsableAsIndex(){return!1}getDefaultValue(){return 0}getCopyWithConcreteType(t){return this}toString(){return"null"}getDeclaration(){return"null"}}class qy extends yt{constructor(t){super("short",t),this.defaultValueAsString="0"}isUsableAsIndex(){return!0}getDefaultValue(){return 0}isByteShortIntLong(){return!0}}class Ry extends yt{constructor(t){super("string",t),this.defaultValueAsString="null",this.defaultValue=null}isUsableAsIndex(){return!1}getDefaultValue(){return 0}toString(){return"String"}}class Gy extends yt{constructor(t){super("void",t),this.defaultValueAsString="null",this.defaultValue=null}isUsableAsIndex(){return!1}getDefaultValue(){return null}}const Dn=class Dn extends R{constructor(t){super(),this.value=t}debugOutput(){return this.value?"true":"false"}__internalHashCode(){return this.value}_compareTo(t){return this==t?0:1}};r(Dn,"FALSE",new Dn(!1)),r(Dn,"TRUE",new Dn(!0)),r(Dn,"isPrimitiveTypeWrapper",!0),r(Dn,"__javaDeclarations",[{type:"declaration",signature:"class Boolean extends Object implements Comparable"},{type:"field",signature:"static final boolean FALSE",constantValue:Dn.FALSE},{type:"field",signature:"static final boolean TRUE",constantValue:Dn.TRUE},{type:"method",signature:"public final boolean booleanValue()",template:"§1.value"},{type:"method",signature:"public int compareTo(Boolean otherBoolean)",native:Dn.prototype._compareTo},{type:"method",signature:"public static boolean getBoolean(String name)",template:'§1 == "true"'},{type:"method",signature:"public static boolean parseBoolean(String name)",template:'§1 == "true"'}]),r(Dn,"type");let tm=Dn;const wt=class wt extends R{constructor(t){super(),this.value=t}debugOutput(){return"'"+this.value+"'"}static _valueOf(t){return new wt(t)}_constructor1(t){return this.value=t,this}__internalHashCode(){return this.value}_compareTo(t){return this==t?0:1}_toString(){return new Y(this.value)}_mj$equals$boolean$Object(t,e,i){t.s.push(i!=null&&i.value==this.value),e&&e()}static _isLetter(t){return this.letters.indexOf(t)>=0}static _isDigit(t){return this.digits.indexOf(t)>=0}static _isLetterOrDigit(t){return this.digits.indexOf(t)>=0||this.letters.indexOf(t)>=0}static _isLowerCase(t){return this.lowercase.indexOf(t)>=0}static _isUpperCase(t){return this.uppercase.indexOf(t)>=0}static _toUpperCase(t){return t.toLocaleUpperCase()}static _toLowerCase(t){return t.toLocaleLowerCase()}};r(wt,"isPrimitiveTypeWrapper",!0),r(wt,"letters","abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZöÖäÄß"),r(wt,"lowercase","abcdefghijklmnopqrstuvwxyzäöß"),r(wt,"uppercase","ABCDEFGHIJKLMNOPQRSTUVWXYZÖÄ"),r(wt,"digits","0123456789"),r(wt,"__javaDeclarations",[{type:"declaration",signature:"class Character extends Object implements Comparable"},{type:"method",signature:"Character(char value)",native:wt.prototype._constructor1},{type:"method",signature:"public final char charValue()",template:"§1.value"},{type:"method",signature:"public int compareTo(Character otherCharacter)",native:wt.prototype._compareTo},{type:"method",signature:"public static Character valueOf(char c)",native:wt._valueOf},{type:"method",signature:"public static boolean isLetter(char c)",native:wt._isLetter},{type:"method",signature:"public static boolean isLetterOrDigit(char c)",native:wt._isLetterOrDigit},{type:"method",signature:"public static boolean isDigit(char c)",native:wt._isDigit},{type:"method",signature:"public static boolean isLowerCase(char c)",native:wt._isLowerCase},{type:"method",signature:"public static boolean isUpperCase(char c)",native:wt._isUpperCase},{type:"method",signature:"public static char toUpperCase(char c)",native:wt._toUpperCase},{type:"method",signature:"public static char toLowerCase(char c)",native:wt._toLowerCase},{type:"method",signature:"public String toString()",native:wt.prototype._toString}]),r(wt,"type");let im=wt;const Gr=class Gr extends R{constructor(e){super();r(this,"value",0);this.value=e}debugOutput(){return""+this.value}__internalHashCode(){return this.value}byteValue(){return(Math.trunc(this.value)+128)%256-128}shortValue(){return(Math.trunc(this.value)+32768)%65536-32768}toString(){return new Y(""+this.value)}_mj$toString$String$(e,i){e.s.push(new Y(""+this.value)),i&&i()}_mj$equals$boolean$Object(e,i,n){e.s.push(n!=null&&n.value==this.value),i&&i()}};r(Gr,"isPrimitiveTypeWrapper",!0),r(Gr,"__javaDeclarations",[{type:"declaration",signature:"abstract class Number extends Object"},{type:"method",signature:"public byte byteValue()",native:Gr.prototype.byteValue},{type:"method",signature:"public short shortValue()",native:Gr.prototype.shortValue},{type:"method",signature:"abstract public double doubleValue()"},{type:"method",signature:"abstract public float floatValue()"},{type:"method",signature:"abstract public int intValue()"},{type:"method",signature:"abstract public long longValue()"},{type:"method",signature:"public String toString()",native:Gr.prototype.toString,java:Gr.prototype._mj$toString$String$}]),r(Gr,"type");let Gs=Gr;const gi=class gi extends Gs{constructor(t){super(t||0)}_constructorDouble(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseDouble(t){return Number.parseFloat(t.value)}intValue(){return Math.trunc(this.value)%4294967296-2147483648}longValue(){return Math.trunc(this.value)}floatValue(){return Math.fround(this.value)}doubleValue(){return this.value}static valueOf(t){return new gi(t)}static valueOfString(t){return new gi(Number.parseFloat(t))}};r(gi,"isPrimitiveTypeWrapper",!0),r(gi,"__javaDeclarations",[{type:"declaration",signature:"class Double extends Number implements Comparable"},{type:"method",signature:"public Double(double d)",native:gi.prototype._constructorDouble},{type:"field",signature:"static final int MAX_VALUE",constantValue:Number.MAX_VALUE},{type:"field",signature:"static final int POSITIVE_INFINITY",constantValue:Number.POSITIVE_INFINITY},{type:"field",signature:"static final int NEGATIVE_INFINITY",constantValue:Number.NEGATIVE_INFINITY},{type:"field",signature:"static final int MIN_VALUE",constantValue:Number.MIN_VALUE},{type:"method",signature:"public final double doubleValue()",native:gi.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:gi.prototype.floatValue,template:"Math.fround(§1.value)"},{type:"method",signature:"public final int intValue()",native:gi.prototype.intValue,template:"(Math.trunc(§1.value) % 0x100000000 - 0x80000000)"},{type:"method",signature:"public final long longValue()",native:gi.prototype.longValue,template:"Math.trunc(§1.value)"},{type:"method",signature:"public int compareTo(Double otherValue)",java:gi.prototype._mj$compareTo$int$T},{type:"method",signature:"public static double parseDouble(String s)",native:gi.parseDouble},{type:"method",signature:"public static Double valueOf(double f)",native:gi.valueOf},{type:"method",signature:"public static Double valueOf(string s)",native:gi.valueOfString}]),r(gi,"type");let nm=gi;const fi=class fi extends Gs{constructor(t){super(t||0)}_constructorFloat(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseFloat(t){return Math.fround(Number.parseFloat(t.value))}intValue(){return Math.trunc(this.value)%4294967296-2147483648}longValue(){return Math.trunc(this.value)}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new fi(Math.fround(t))}static valueOfString(t){return new fi(Math.fround(Number.parseFloat(t)))}};r(fi,"isPrimitiveTypeWrapper",!0),r(fi,"__javaDeclarations",[{type:"declaration",signature:"class Float extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:Number.MAX_VALUE},{type:"field",signature:"static final int MIN_VALUE",constantValue:Number.MIN_VALUE},{type:"field",signature:"static final int POSITIVE_INFINITY",constantValue:Number.POSITIVE_INFINITY},{type:"field",signature:"static final int NEGATIVE_INFINITY",constantValue:Number.NEGATIVE_INFINITY},{type:"method",signature:"public Float(float d)",native:fi.prototype._constructorFloat},{type:"method",signature:"public final double doubleValue()",native:fi.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:fi.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:fi.prototype.intValue,template:"(Math.trunc(§1.value) % 0x100000000 - 0x80000000)"},{type:"method",signature:"public final long longValue()",native:fi.prototype.longValue,template:"Math.trunc(§1.value)"},{type:"method",signature:"public int compareTo(Float otherValue)",java:fi.prototype._mj$compareTo$int$T},{type:"method",signature:"public static float parseFloat(String s)",native:fi.parseFloat},{type:"method",signature:"public static Float valueOf(float f)",native:fi.valueOf},{type:"method",signature:"public static Float valueOf(String s)",native:fi.valueOfString}]),r(fi,"type");let rm=fi;const Qe=class Qe extends Gs{constructor(t){super(t||0)}_constructorInt(t){return this.value=t,this}_constructorString(t){try{let e=Number.parseInt(t);return new Qe(e)}catch{throw new Tl('"'+t+'" is no integer.')}}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseInt(t,e=10){return(Number.parseInt(t.value,e)+2147483648)%4294967296-2147483648}intValue(){return this.value}longValue(){return this.value}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new Qe(t)}static valueOfString(t,e){return new Qe((Number.parseInt(t,e)+2147483648)%4294967296-2147483648)}static toBinary(t){return(t>>>0).toString(2)}static toHex(t){return(t>>>0).toString(16)}static toOctal(t){return(t>>>0).toString(8)}static toStringRadix(t,e){return(t>>>0).toString(e)}static toString(t){return(t>>>0).toString(10)}};r(Qe,"isPrimitiveTypeWrapper",!0),r(Qe,"__javaDeclarations",[{type:"declaration",signature:"class Integer extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:2147483647},{type:"field",signature:"static final int MIN_VALUE",constantValue:-2147483648},{type:"method",signature:"public Integer(int value)",native:Qe.prototype._constructorInt},{type:"method",signature:"public Integer(string value)",native:Qe.prototype._constructorString},{type:"method",signature:"public final double doubleValue()",native:Qe.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:Qe.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:Qe.prototype.intValue,template:"§1.value"},{type:"method",signature:"public final long longValue()",native:Qe.prototype.longValue,template:"§1.value"},{type:"method",signature:"public int compareTo(Integer anotherInteger)",java:Qe.prototype._mj$compareTo$int$T},{type:"method",signature:"public static int parseInt(String s)",native:Qe.parseInt},{type:"method",signature:"public static int parseInt(String sr, int radix)",native:Qe.parseInt},{type:"method",signature:"public static Integer valueOf(int i)",native:Qe.valueOf},{type:"method",signature:"public static Integer valueOf(string s)",native:Qe.valueOfString},{type:"method",signature:"public static Integer valueOf(string s, int radix)",native:Qe.valueOfString},{type:"method",signature:"public static string toBinary(int number)",native:Qe.toBinary},{type:"method",signature:"public static string toHex(int number)",native:Qe.toHex},{type:"method",signature:"public static string toOctal(int number)",native:Qe.toOctal},{type:"method",signature:"public static string toString(int number, int radix)",native:Qe.toStringRadix},{type:"method",signature:"public static string toString(int number)",native:Qe.toString}]),r(Qe,"type");let sm=Qe;const Yt=class Yt extends Gs{constructor(t){super(t||0)}_constructorLong(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseLong(t,e=10){return Number.parseInt(t.value,e)}intValue(){return(this.value+2147483648)%4294967296-2147483648}longValue(){return this.value}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new Yt(t)}static valueOfString(t,e){return new Yt(Number.parseInt(t,e))}};r(Yt,"isPrimitiveTypeWrapper",!0),r(Yt,"__javaDeclarations",[{type:"declaration",signature:"class Long extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:Number.MAX_SAFE_INTEGER},{type:"field",signature:"static final int MIN_VALUE",constantValue:Number.MIN_SAFE_INTEGER},{type:"method",signature:"public Long(long d)",native:Yt.prototype._constructorLong},{type:"method",signature:"public final double doubleValue()",native:Yt.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:Yt.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:Yt.prototype.intValue,template:"(§1.value % 0x100000000 - 0x80000000)"},{type:"method",signature:"public final long longValue()",native:Yt.prototype.longValue,template:"§1.value"},{type:"method",signature:"public int compareTo(Long anotherLong)",java:Yt.prototype._mj$compareTo$int$T},{type:"method",signature:"public long parseLong(String s)",native:Yt.parseLong},{type:"method",signature:"public long parseLong(String sr, int radix)",native:Yt.parseLong},{type:"method",signature:"public static Long valueOf(long i)",native:Yt.valueOf},{type:"method",signature:"public static Long valueOf(String s)",native:Yt.valueOfString},{type:"method",signature:"public static Long valueOf(String s, int radix)",native:Yt.valueOfString}]),r(Yt,"type");let am=Yt;const Zt=class Zt extends Gs{constructor(t){super(t)}_constructorShort(t){return this.value=t,this}_mj$compareTo$int$T(t,e,i){t.s.push(this.value-i.value),e&&e()}static parseShort(t,e=10){return(Number.parseInt(t.value,e)+32768)%65536-32768}intValue(){return this.value}longValue(){return this.value}floatValue(){return this.value}doubleValue(){return this.value}static valueOf(t){return new Zt(t)}static valueOfString(t,e){return new Zt(Number.parseInt(t,e)%65536-32768)}};r(Zt,"isPrimitiveTypeWrapper",!0),r(Zt,"__javaDeclarations",[{type:"declaration",signature:"class Short extends Number implements Comparable"},{type:"field",signature:"static final int MAX_VALUE",constantValue:32767},{type:"field",signature:"static final int MIN_VALUE",constantValue:-32768},{type:"method",signature:"public Short(short d)",native:Zt.prototype._constructorShort},{type:"method",signature:"public final double doubleValue()",native:Zt.prototype.doubleValue,template:"§1.value"},{type:"method",signature:"public final float floatValue()",native:Zt.prototype.floatValue,template:"§1.value"},{type:"method",signature:"public final int intValue()",native:Zt.prototype.intValue,template:"§1.value"},{type:"method",signature:"public final long longValue()",native:Zt.prototype.longValue,template:"§1.value"},{type:"method",signature:"public int compareTo(Short otherShort)",java:Zt.prototype._mj$compareTo$int$T},{type:"method",signature:"public static short parseShort(String s)",native:Zt.parseShort},{type:"method",signature:"public static short parseShort(String sr, int radix)",native:Zt.parseShort},{type:"method",signature:"public static Short valueOf(short i)",native:Zt.valueOf},{type:"method",signature:"public static Short valueOf(String s)",native:Zt.valueOfString},{type:"method",signature:"public static Short valueOf(String s, short radix)",native:Zt.valueOfString}]),r(Zt,"type");let om=Zt;const Ye=class Ye extends Er{constructor(){super(...arguments);r(this,"fastSprite")}_cj$_constructor_$Sprite3d$double$SpriteLibrary$int(e,i,n,s,a){super._cj$_constructor_$Object3d$(e,()=>{this.init(n,s,a),i&&i()})}init(e,i,n){this.fastSprite=this.world3d.fastSpriteManager.createSprite(e,i,n)}destroy(){super.destroy(),this.world3d.fastSpriteManager.removeSprite(this.fastSprite)}move(e,i,n){this.world3d.fastSpriteManager.moveSprite(this.fastSprite,e,i,n)}moveTo(e,i,n){this.world3d.fastSpriteManager.moveSpriteTo(this.fastSprite,e,i,n)}scale(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,e,e)}scaleX(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,e,1)}scaleY(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,1,e)}scaleV(e){this.world3d.fastSpriteManager.scaleSprite(this.fastSprite,e.v.x,e.v.y)}rotate(e){e*=Math.PI/180,this.world3d.fastSpriteManager.rotateSprite(this.fastSprite,e)}getX(){return this.world3d.fastSpriteManager.getX(this.fastSprite)}getY(){return this.world3d.fastSpriteManager.getY(this.fastSprite)}getZ(){return this.world3d.fastSpriteManager.getZ(this.fastSprite)}setColorInt(e){this.world3d.fastSpriteManager.setColor(this.fastSprite,e)}setAlpha(e){this.world3d.fastSpriteManager.setAlpha(this.fastSprite,e)}};r(Ye,"__javaDeclarations",[{type:"declaration",signature:"class Sprite3d extends Object3d"},{type:"method",signature:"Sprite3d(double width, SpriteLibrary spriteLibrary, int index)",java:Ye.prototype._cj$_constructor_$Sprite3d$double$SpriteLibrary$int},{type:"method",signature:"void move(double x,double y,double z)",native:Ye.prototype.move},{type:"method",signature:"void moveTo(double x,double y,double z)",native:Ye.prototype.moveTo},{type:"method",signature:"double getX()",native:Ye.prototype.getX},{type:"method",signature:"double getY()",native:Ye.prototype.getY},{type:"method",signature:"double getZ()",native:Ye.prototype.getZ},{type:"method",signature:"void setColor(int color)",native:Ye.prototype.setColorInt},{type:"method",signature:"void setAlpha(double alpha)",native:Ye.prototype.setAlpha},{type:"method",signature:"void scaleX(double angleDeg)",native:Ye.prototype.scaleX},{type:"method",signature:"void scaleY(double angleDeg)",native:Ye.prototype.scaleY},{type:"method",signature:"void scaleZ(double angleDeg)",native:Ye.prototype.scale},{type:"method",signature:"void scale(Vector3 v)",native:Ye.prototype.scaleV},{type:"method",signature:"void scale(double d)",native:Ye.prototype.scale},{type:"method",signature:"void rotateX(double angleDeg)",native:Ye.prototype.rotate},{type:"method",signature:"void rotateY(double angleDeg)",native:Ye.prototype.rotate},{type:"method",signature:"void rotateZ(double angleDeg)",native:Ye.prototype.rotate},{type:"method",signature:"void rotate(double angleDeg)",native:Ye.prototype.rotate},{type:"method",signature:"final void move(Vector3 v)",native:Ye.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)",native:Ye.prototype.moveTo},{type:"method",signature:"final void moveTo(Vector3 p)",native:Ye.prototype.vmoveTo},{type:"method",signature:"final void scale(double d)",native:Ye.prototype.scaleDouble},{type:"method",signature:"void destroy()",java:Ye.prototype.destroy}]);let lm=Ye;const ho=class ho extends zn{_cj$_constructor_$Icosahedron3d$(t,e){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new tc(.5),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Icosahedron3d$double(t,e,i){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new tc(i),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}_cj$_constructor_$Icosahedron3d$double$int(t,e,i,n){super._cj$_constructor_$Mesh3d$(t,()=>{this._geometry=new tc(i,n),this.mesh=new ge(this._geometry,this.getInitialMaterial().getMaterialAndIncreaseUsageCounter()),this.world3d.scene.add(this.mesh),e&&e()})}};r(ho,"__javaDeclarations",[{type:"declaration",signature:"class Icosahedron3d extends Mesh3d"},{type:"method",signature:"Icosahedron3d(double radius, int detail)",java:ho.prototype._cj$_constructor_$Icosahedron3d$double$int},{type:"method",signature:"Icosahedron3d(double radius)",java:ho.prototype._cj$_constructor_$Icosahedron3d$double},{type:"method",signature:"Icosahedron3d()",java:ho.prototype._cj$_constructor_$Icosahedron3d$}]);let dm=ho;class hm extends Fe{constructor(t){super(t)}}r(hm,"__javaDeclarations",[{type:"declaration",signature:"class CopyOnWriteArrayList implements List",comment:o.arrayListClassComment},{type:"method",signature:"CopyOnWriteArrayList()",native:Fe.prototype._constructor,comment:o.arrayListConstructorComment},{type:"method",signature:"Iterator iterator()",native:Fe.prototype._iterator,comment:o.arrayListIteratorComment},{type:"method",signature:"void forEach(Consumer action)",java:Fe.prototype._mj$forEach$void$Consumer,comment:o.arrayListForeachComment},{type:"method",signature:"Object[] toArray()",native:Fe.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment},{type:"method",signature:" T[] toArray(T[] a)",native:Fe.prototype._toArray,template:"§1.elements.slice()",comment:o.collectionToArrayComment2},{type:"method",signature:"boolean add(E e)",native:Fe.prototype._add,template:"(§1.elements.push(§2) >= 0)",comment:o.collectionAddElementComment},{type:"method",signature:"boolean addAll(Collection c)",java:Fe.prototype._addAll,comment:o.collectionAddAllComment},{type:"method",signature:"void clear()",native:Fe.prototype._clear,template:"§1.elements.length = 0",comment:o.collectionClearComment},{type:"method",signature:"boolean contains(E Element)",java:Fe.prototype._mj$contains$boolean$E,comment:o.collectionContainsComment},{type:"method",signature:"boolean containsAll(Collection c)",java:Fe.prototype._mj$containsAll$boolean$Collection,comment:o.collectionContainsAllComment},{type:"method",signature:"boolean isEmpty()",native:Fe.prototype._isEmpty,template:"(§1.elements.length == 0)",comment:o.collectionIsEmptyComment},{type:"method",signature:"boolean remove(E element)",java:Fe.prototype._mj$remove$boolean$E,comment:o.collectionRemoveObjectComment},{type:"method",signature:"boolean removeAll(Collection c)",java:Fe.prototype._removeAll,comment:o.collectionRemoveAllComment},{type:"method",signature:"int size()",native:Fe.prototype._size,template:"§1.elements.length",comment:o.collectionSizeComment},{type:"method",signature:"boolean add(int index, E element)",native:Fe.prototype._addWithIndex,comment:o.listAddElementComment},{type:"method",signature:"boolean addAll(int index, Collection c)",java:Fe.prototype._addAllWithIndex,comment:o.listAddAllElementsComment},{type:"method",signature:"E get (int index)",native:Fe.prototype._getWithIndex,comment:o.listGetComment},{type:"method",signature:"int indexOf (E Element)",java:Fe.prototype._mj$indexOf$int$E,comment:o.listIndexOfComment},{type:"method",signature:"E remove (int index)",native:Fe.prototype._removeWithIndex,comment:o.listRemoveComment},{type:"method",signature:"E set (int index, E Element)",native:Fe.prototype._setWithIndex,comment:o.listSetComment},{type:"method",signature:"void sort(Comparator comparator)",java:Fe.prototype._mj$sort$void$Comparator,comment:o.listSortComment},{type:"method",signature:"String toString()",java:Fe.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(hm,"type");const Hr=class Hr extends $i{_mj$count$long$(t,e){}_mj$toArray$Object_I$(t,e){}_mj$forEach$void$Consumer(t,e,i){}_mj$filter$Stream$Predicate(t,e,i){}_mj$map$Stream$Function(t,e,i){}};r(Hr,"__javaDeclarations",[{type:"declaration",signature:"interface Stream"},{type:"method",signature:"Object[] toArray()",java:Hr.prototype._mj$toArray$Object_I$},{type:"method",signature:"long count()",java:Hr.prototype._mj$count$long$},{type:"method",signature:"void forEach(Consumer action)",java:Hr.prototype._mj$forEach$void$Consumer},{type:"method",signature:"Stream filter(Predicate predicate)",java:Hr.prototype._mj$filter$Stream$Predicate},{type:"method",signature:" Stream map(Function mapper)",java:Hr.prototype._mj$map$Stream$Function}]),r(Hr,"type");let cm=Hr;const Al=class Al extends $i{_mj$test$boolean$T(t,e,i){}};r(Al,"__javaDeclarations",[{type:"declaration",signature:"interface Predicate"},{type:"method",signature:"boolean test(T t)",java:Al.prototype._mj$test$boolean$T}]),r(Al,"type");let um=Al;class _n extends Qi{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(_n,"__javaDeclarations",[{type:"declaration",signature:"class IllegalArgumentException extends RuntimeException"},{type:"method",signature:"public IllegalArgumentException()",native:Qi.prototype._constructor},{type:"method",signature:"public IllegalArgumentException(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public IllegalArgumentException(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public IllegalArgumentException(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(_n,"type");class hn extends Qi{constructor(e,i){super();r(this,"stacktrace",[]);this.message=e,this.cause=i}}r(hn,"__javaDeclarations",[{type:"declaration",signature:"class IllegalStateException extends Exception"},{type:"method",signature:"public IllegalStateException()",native:Qi.prototype._constructor},{type:"method",signature:"public IllegalStateException(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public IllegalStateException(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public IllegalStateException(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(hn,"type");const Di=class Di extends R{constructor(e,i){super();r(this,"line3");this.line3=new Ap(e,i)}_constructor2(e,i){return this.line3=new Ap(e.v,i.v),this}_getLength(){return this.line3.distance()}_clone(){return new Di(this.line3.start.clone(),this.line3.end.clone())}_at(e){const i=new Xe;return this.line3.at(e,i),new ir(i.x,i.y,i.z)}_mj$toString$String$(e,i){e.s.push(new Y(`(${this.line3.start.x}, ${this.line3.start.y}, ${this.line3.start.z}}) -> (${this.line3.end.x}, ${this.line3.end.y}, ${this.line3.end.z})`)),i&&i()}_debugOutput(){return`(${this.line3.start.x}, ${this.line3.start.y}, ${this.line3.start.z}}) -> (${this.line3.end.x}, ${this.line3.end.y}, ${this.line3.end.z})`}_applyMatrix4(e){return this.line3.applyMatrix4(e.m),this}_closestPointTo(e,i){const n=new Xe;return this.line3.closestPointToPoint(e.v,i,n),new ir(n.x,n.y,n.z)}_distanceToPoint(e,i){const n=new Xe;return this.line3.closestPointToPoint(e.v,i,n),n.distanceTo(e.v)}_start(){return new ir(this.line3.start.x,this.line3.start.y,this.line3.start.z)}_end(){return new ir(this.line3.end.x,this.line3.end.y,this.line3.end.z)}};r(Di,"__javaDeclarations",[{type:"declaration",signature:"class Line3 extends Object",comment:o.Line3ClassComment},{type:"method",signature:"Line3(Vector3 lineStart, Vector3 lineEnd)",native:Di.prototype._constructor2,comment:o.Line3ConstructorComment},{type:"method",signature:"final double getLength()",native:Di.prototype._getLength,comment:o.Line3GetLengthComment},{type:"method",signature:"final Line3 clone()",native:Di.prototype._clone,comment:o.Line3CloneComment},{type:"method",signature:"final Line3 applyMatrix4(Matrix4 m)",native:Di.prototype._applyMatrix4,comment:o.Line3ApplyMatrix4Comment},{type:"method",signature:"final Vector3 closestPointTo(Vector3 point, boolean clampToLine)",native:Di.prototype._closestPointTo,comment:o.Line3ClosestPointToComment},{type:"method",signature:"final double distanceToPoint(Vector3 point, boolean clampToLine)",native:Di.prototype._distanceToPoint,comment:o.Line3DistanceToPointComment},{type:"method",signature:"final Vector3 at(double t)",native:Di.prototype._at,comment:o.Line3AtComment},{type:"method",signature:"final Vector3 start()",native:Di.prototype._start,comment:o.Line3StartComment},{type:"method",signature:"final Vector3 end()",native:Di.prototype._end,comment:o.Line3EndComment},{type:"method",signature:"String toString()",java:Di.prototype._mj$toString$String$,comment:o.Line3ToStringComment}]),r(Di,"type");let mm=Di;const kt=class kt extends Er{constructor(e,i,n,s,a){super();r(this,"isDestroyed",!1);this.batchedMesh=e,this.instanceIndex=i,this.matrix4=n,this.position=s,this.batchObject3d=a}move(e,i,n){this.position.add(new Xe(e,i,n)),this.matrix4=new Ni().makeTranslation(e,i,n).multiply(this.matrix4),this.cameraLookingAtThisObject&&this.cameraLookingAtThisObject.adjustViewingDirection(),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}moveTo(e,i,n){let s=new Xe(e,i,n).sub(this.position);this.position.set(e,i,n),this.matrix4=new Ni().makeTranslation(s.x,s.y,s.z).multiply(this.matrix4),this.cameraLookingAtThisObject&&this.cameraLookingAtThisObject.adjustViewingDirection(),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}rotateX(e){this.matrix4=new Ni().makeRotationX(e/180*Math.PI).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}rotateY(e){this.matrix4=new Ni().makeRotationY(e/180*Math.PI).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}rotateZ(e){this.matrix4=new Ni().makeRotationZ(e/180*Math.PI).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}scaleX(e){this.matrix4=new Ni().makeScale(e,1,1).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}scaleY(e){this.matrix4=new Ni().makeScale(1,e,1).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}scaleZ(e){this.matrix4=new Ni().makeScale(1,1,e).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}applyMatrix4(e){this.matrix4=new Ni().multiply(e.m).multiply(this.matrix4),this.position.applyMatrix4(e.m),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}vscale(e){this.matrix4=new Ni().makeScale(e.v.x,e.v.y,e.v.z).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}scaleDouble(e){this.matrix4=new Ni().makeScale(e,e,e).multiply(this.matrix4),this.batchedMesh.setMatrixAt(this.instanceIndex,this.matrix4)}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.batchedMesh.deleteInstance(this.instanceIndex))}_isDestroyed(){return this.isDestroyed}setVisible(e){this.batchedMesh.setVisibleAt(this.instanceIndex,e)}setColor(e){this.batchObject3d.setColorableMaterial(),this.batchedMesh.setColorAt(this.instanceIndex,new Ls(e))}};r(kt,"__javaDeclarations",[{type:"declaration",signature:"class BatchedObject3d extends Object3d",comment:o.BatchedObject3dClassComment},{type:"method",signature:"private BatchedObject3d()",native:kt.prototype._constructor},{type:"method",signature:"void move(double x,double y,double z)",native:kt.prototype.move},{type:"method",signature:"final void move(Vector3 v)",native:kt.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)",native:kt.prototype.moveTo},{type:"method",signature:"final void moveTo(Vector3 p)",native:kt.prototype.vmoveTo},{type:"method",signature:"void rotateX(double angleDeg)",native:kt.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:kt.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:kt.prototype.rotateZ},{type:"method",signature:"final void scaleX(double scale)",native:kt.prototype.scaleX},{type:"method",signature:"final void scaleY(double scale)",native:kt.prototype.scaleY},{type:"method",signature:"final void scaleZ(double scale)",native:kt.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:kt.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:kt.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:kt.prototype.applyMatrix4},{type:"method",signature:"void setVisible(boolean isVisible)",native:kt.prototype.setVisible},{type:"method",signature:"void setColor(int color)",native:kt.prototype.setColor},{type:"method",signature:"void destroy()",native:kt.prototype.destroy},{type:"method",signature:"boolean isDestroyed()",native:kt.prototype._isDestroyed}]);let uh=kt;const Pt=class Pt extends Er{constructor(){super(...arguments);r(this,"batchedMesh");r(this,"geometryID");r(this,"template");r(this,"material");r(this,"opacity",1)}_cj$_constructor_$Object3dBatch$Mesh3d$int(e,i,n,s){e.s.push(this),this.template=n;let a=n._geometry.attributes.position.count*8;this.material=n.material,this.batchedMesh=new ab(s,a,a*2,this.material.getMaterialAndIncreaseUsageCounter()),this.batchedMesh.sortObjects=!0,this.batchedMesh.frustumCulled=!1,this.template.mesh.updateMatrixWorld(!0),this.geometryID=this.batchedMesh.addGeometry(n._geometry.clone()),this.template.world3d.scene.add(this.batchedMesh),i&&i()}setColorableMaterial(){this.material&&(this.material.destroyIfNotUsedByOtherMesh(),this.material=null,this.batchedMesh.material=new Md({transparent:!0,opacity:this.opacity,color:16777215}),this.batchedMesh.material.needsUpdate=!0)}setOpacity(e){this.opacity=e,this.batchedMesh.material instanceof Md&&(this.batchedMesh.material.opacity=e,this.batchedMesh.material.needsUpdate=!0)}createInstance(){let e=this.batchedMesh.addInstance(this.geometryID),i=this.template.mesh.matrix.clone();return this.batchedMesh.setMatrixAt(e,i),new uh(this.batchedMesh,e,i,this.template.mesh.position.clone(),this)}destroy(){this.batchedMesh.dispose(),this.template.material.destroyIfNotUsedByOtherMesh()}move(e,i,n){this.batchedMesh.position.add(new Xe(e,i,n))}moveTo(e,i,n){this.batchedMesh.position.set(e,i,n)}rotateX(e){this.batchedMesh.rotateX(e/180*Math.PI)}rotateY(e){this.batchedMesh.rotateY(e/180*Math.PI)}rotateZ(e){this.batchedMesh.rotateZ(e/180*Math.PI)}scaleX(e){this.batchedMesh.scale.x*=e}scaleY(e){this.batchedMesh.scale.y*=e}scaleZ(e){this.batchedMesh.scale.z*=e}applyMatrix4(e){this.batchedMesh.applyMatrix4(e.m)}vscale(e){this.batchedMesh.scale.copy(e.v)}scaleDouble(e){this.batchedMesh.scale.multiplyScalar(e)}};r(Pt,"__javaDeclarations",[{type:"declaration",signature:"class Object3dBatch extends Object3d",comment:o.Object3dBatchClassComment},{type:"method",signature:"Object3dBatch(Mesh3d template, int maxInstanceCount)",java:Pt.prototype._cj$_constructor_$Object3dBatch$Mesh3d$int,comment:o.Object3dBatchConstructorComment},{type:"method",signature:"BatchedObject3d createInstance()",native:Pt.prototype.createInstance,comment:o.Object3dBatchCreateInstanceComment},{type:"method",signature:"void setOpacity(float opacity)",native:Pt.prototype.setOpacity,comment:o.Object3dBatchSetOpacityComment},{type:"method",signature:"void move(double x,double y,double z)",native:Pt.prototype.move},{type:"method",signature:"final void move(Vector3 v)",native:Pt.prototype.vmove},{type:"method",signature:"void moveTo(double x,double y,double z)",native:Pt.prototype.moveTo},{type:"method",signature:"final void moveTo(Vector3 p)",native:Pt.prototype.vmoveTo},{type:"method",signature:"void rotateX(double angleDeg)",native:Pt.prototype.rotateX},{type:"method",signature:"void rotateY(double angleDeg)",native:Pt.prototype.rotateY},{type:"method",signature:"void rotateZ(double angleDeg)",native:Pt.prototype.rotateZ},{type:"method",signature:"final void scaleX(double scale)",native:Pt.prototype.scaleX},{type:"method",signature:"final void scaleY(double scale)",native:Pt.prototype.scaleY},{type:"method",signature:"final void scaleZ(double scale)",native:Pt.prototype.scaleZ},{type:"method",signature:"final void scale(Vector3 v)",native:Pt.prototype.vscale},{type:"method",signature:"final void scale(double d)",native:Pt.prototype.scaleDouble},{type:"method",signature:"final void applyMatrix4(Matrix4 matrix)",native:Pt.prototype.applyMatrix4},{type:"method",signature:"void destroy()",native:Pt.prototype.destroy}]);let pm=Pt;const Ph=class Ph extends R{_asList(t){return new Fe(t)}};r(Ph,"__javaDeclarations",[{type:"declaration",signature:"class Arrays extends Object",comment:o.ArraysClassComment},{type:"method",signature:"public static List asList(T... a)",native:Ph.prototype._asList,comment:o.ArraysClassAsListComment}]);let gm=Ph;class Oa extends qo{constructor(){super();r(this,"primitiveStringClass",ch);this.types.push(new Ly(this),new Fy(this),new By(this),new qy(this),new zy(this),new Wy(this),new _y(this),new Vy(this),new Ry(this),new Gy(this),new Ny(this)),hs._initPredefinedColors(),this.classesInterfacesEnums.push(ju,Mu,Vd,R,Y,Yi,Qg,Uu,Wu,Ml,Gu,wu,_s,Tu,nh,rh,Cu,Su,Iu,xu,$u,ku,qu,Nu,Ru,um,Gs,sm,am,rm,nm,om,tm,im,Yu,Qu,Zu,Hu,De,Qi,W,_n,Tl,qt,$l,Ve,Ku,Fl,hn,Lu,oh,Wo,Fu,Fe,hm,Du,lh,Pu,Bu,_u,Vu,Ou,dh,hh,zu,cm,ah,gm,Xu,em,Vl,Ju,Eu,Au,Bl,fu,eh,gu,th,bu,yu,hs,Xn,Gc,lu,ir,mm,jl,pu,Dl,dn,Rt,Ll,qd,Rs,Hd,Qc,Kd,Qd,Ud,Pl,Rd,Hc,uu,Va,mu,ou,Kc,Xd,cu,Jd,_d,Ba,Lc,bo,Wd,Bc,ds,Er,jc,zn,$c,qc,dm,zo,Oc,Pc,Mc,Vc,Fc,Ec,Dc,Ic,Wc,Nc,Rc,_o,zc,_c,Tc,lm,pm,uh,du,su,au,iu,nu,Xc,Yd,Fa,Zc,Jc,eu,tu,vu,sh,hu,Zd)}getStandardImports(){return[["robot","*"]]}getMainProgram(){}isReplModule(){return!1}getCodeFragments(){return[]}}class Ro{constructor(){r(this,"stepIndex",-1);r(this,"range");r(this,"type");r(this,"isLefty",!1);r(this,"finalValueIsOnStack",!1);r(this,"isSuperKeywordWithLevel");r(this,"isFinalField")}allButLastPart(){return[this]}lastPartOrPop(){return this.finalValueIsOnStack?new N(`${V.stack}.pop()`,this.range):this}isPureTermWithoutPop(){return!0}isPureTerm(){return!0}alterPureTerm(t){}getPureTerm(){return""}ensureFinalValueIsOnStack(){}isConstant(){return!1}getConstantValue(){}endsWith(t){return!1}getEmitToStepListeners(){return[]}}class N extends Ro{constructor(e,i,n,s){super();r(this,"constantValue");r(this,"emitToStepListeners",[]);this.text=e,this.range=i,this.type=n,this.constantValue=s}isEmptyStatement(){return!this.text||this.text.length==0}setConstantValue(e){this.constantValue=e}getConstantValue(){return this.constantValue}isConstant(){return typeof this.constantValue<"u"}ensureFinalValueIsOnStack(){this.finalValueIsOnStack||(this.text.endsWith(`; `)&&(this.text=this.text.substring(0,this.text.length-2)),this.text=`${V.stack}.push(${this.text}); `,this.finalValueIsOnStack=!0)}index(e){return this.stepIndex=e,e}emit(){return this.text}addEmitToStepListener(e){Array.isArray(e)||(e=[e]),this.emitToStepListeners.push(...e)}takeEmitToStepListenersFrom(e){Array.isArray(e)||(e=[e]);for(let i of e)this.emitToStepListeners=this.emitToStepListeners.concat(i.getEmitToStepListeners())}getEmitToStepListeners(){return this.emitToStepListeners}emitToStep(e,i){return e.codeAsString=e.codeAsString+this.text,e.setRangeStartIfUndefined(this.range),e.adaptRangeEnd(this.range),this.emitToStepListeners.forEach(n=>n(e)),e}flattenInto(e){e.push(this)}isPureTerm(){return!0}alterPureTerm(e){this.text=e,this.constantValue=void 0}getPureTerm(){return this.text}allButLastPart(){return this.finalValueIsOnStack?[this]:[]}lastPartOrPop(){return this.finalValueIsOnStack?new N(`${V.stack}.pop()`,this.range):this}endsWith(e){return this.text.endsWith(e)}}const wl=class wl extends Ro{constructor(){super();r(this,"id");r(this,"labelIndexingListeners",[]);this.id=wl.count++}isEmptyStatement(){return!0}flattenInto(e){e.push(this)}emit(){return"// Label "+this.id+` `}emitToStep(e,i){return e.codeAsString=e.codeAsString+this.emit(),e}getJumpToSnippet(){return new Jt(this)}index(e){return this.stepIndex=e,this.labelIndexingListeners.forEach(i=>i(e)),e}addIndexingListener(e){this.labelIndexingListeners.push(e)}static resetCount(){wl.count=0}};r(wl,"count",0);let Ge=wl;class Jt extends Ro{constructor(t){super(),this.label=t}isEmptyStatement(){return!1}flattenInto(t){t.push(this)}index(t){return this.stepIndex=t,t}emit(){return"return "+this.label.stepIndex+`; `}emitToStep(t,e){return t.codeAsString=t.codeAsString+this.emit(),t.range.startLineNumber||(t.range=this.range),t}}class ae extends Ro{constructor(e,i,n){super();r(this,"parts",[]);i?this.range={startLineNumber:i.startLineNumber,startColumn:i.startColumn,endLineNumber:i.endLineNumber,endColumn:i.endColumn}:this.range={startLineNumber:-1,startColumn:-1,endLineNumber:-1,endColumn:-1},this.addParts(e),n&&(this.type=n)}isEmptyStatement(){for(let e of this.parts)if(e!=null&&!e.isEmptyStatement())return!1;return!0}getEmitToStepListeners(){let e=[];return this.parts.forEach(i=>e=e.concat(i.getEmitToStepListeners())),e}setRangeStartIfUndefined(e){this.range.startLineNumber<0&&e&&(this.range.startLineNumber=e.startLineNumber,this.range.startColumn=e.startColumn)}adaptRangeEnd(e){e&&(this.range.endLineNumber<0?(this.range.endLineNumber=e.endLineNumber,this.range.endColumn=e.endColumn):this.range.endLineNumber0&&this.parts[0]instanceof Vn&&(this.parts.shift(),this.parts.length>0&&this.parts[0]instanceof ae&&this.parts[0].removeNextStepBeforeSnippetMark())}isConstant(){return this.isPureTerm()&&this.parts[0].isConstant()}getConstantValue(){return this.parts[0].getConstantValue()}isPureTermWithoutPop(){return this.isPureTerm()&&this.parts[0].text.indexOf("pop()")<0}isPureTerm(){return!this.finalValueIsOnStack&&this.parts.length==1&&this.parts[0]instanceof N}getPureTerm(){return this.parts[0].emit()}alterPureTerm(e){this.parts[0].text=e}emit(){let e="";for(let i of this.parts)e+=i.emit();return e}flattenInto(e){if(this.parts.length!=0&&(this.parts[0]instanceof Vn&&(e.length==0||e[e.length-1]instanceof Vn)&&this.parts.shift(),this.parts.length!=0)){this.parts[0].range||(this.parts[0].range=this.range);for(let i of this.parts)i.flattenInto(e);this.parts[this.parts.length-1].range||(this.parts[this.parts.length-1].range=this.range)}}endsWithNextStepMark(){return this.parts.length>0&&this.parts[this.parts.length-1]instanceof Vn}endsWith(e){for(let i=this.parts.length-1;i>=0;i--)if(this.parts[i]instanceof N)return this.parts[i].endsWith(e);return!1}emitToStep(e,i,n){e.setRangeStartIfUndefined(this.range);let s=e;for(let a of this.parts)s!=e&&(e.setRangeStartIfUndefined(a.range),s=e),e=a.emitToStep(e,i,n);return e.adaptRangeEnd(this.range),e}static applyMethod(e,i,n,s,a){let l=new ae([],s);l.type=a;let h=[];for(let m=n.length-1;m>=0;m--){let g=n[m];l.parts=l.parts.concat(g.finalValueIsOnStack?g:g.allButLastPart())}for(let m of n)h.push(m.lastPartOrPop());l.parts=l.parts.concat(e.finalValueIsOnStack?e:e.allButLastPart());let u=e.lastPartOrPop();return l.addStringPart(u.emit()+"."+i+"("+h.map(m=>m.emit()).join(", ")+")",s),l}addNextStepMark(){this.parts.push(new Vn)}addStringPart(e,i,n,s){let a=new N(e,i,n);return s&&s.forEach(l=>a.addEmitToStepListener(l.getEmitToStepListeners())),this.addParts([a]),a}addParts(e){if(!e||(Array.isArray(e)||(e=[e]),e.length==0))return;this.parts.length==0&&this.setRangeStartIfUndefined(e[0].range);let i=e[e.length-1];this.adaptRangeEnd(i.range),this.parts=this.parts.concat(e);for(let n of e)n&&n.type&&(this.type=n.type,this.finalValueIsOnStack=n.finalValueIsOnStack)}allButLastPart(){return this.parts.length<2?[]:this.finalValueIsOnStack?this.parts:this.parts.slice(0,this.parts.length-1)}lastPartOrPop(){return this.parts.length==0?new Hy:this.finalValueIsOnStack?new N(`${V.stack}.pop()`,this.range):this.parts[this.parts.length-1]}ensureFinalValueIsOnStack(){if(this.finalValueIsOnStack||this.parts.length==0)return;let e=this.getLastPartWithType();if(e instanceof N){e.ensureFinalValueIsOnStack();return}e instanceof ae&&e.ensureFinalValueIsOnStack()}getLastPartWithType(){for(let e=this.parts.length-1;e>=0;e--){let i=this.parts[e];if(i&&i.type)return i}console.log("Error in CodeSnippetContainer.getLastPartWithType: Didn't find last part with type!")}index(e){this.stepIndex=e;let i=e;for(let n of this.parts)i=n.index(i);return i}}class Vn extends Ro{isEmptyStatement(){return!0}emit(){return""}index(t){return this.stepIndex=t,t+1}emitToStep(t,e,i){let n=t.codeAsString.lastIndexOf("return"),s=t.codeAsString.substring(n);return(n<0||!s.match(/return\ \d*;\n?$/))&&(t.codeAsString+="return "+(this.stepIndex+1)+";"),e.push(t),new Il(this.stepIndex+1,i)}flattenInto(t){t.length>0&&t[t.length-1]instanceof Vn||t.length>1&&t[t.length-1]instanceof Ge&&t[t.length-2]instanceof Vn||t.push(this)}}class Hy extends Ro{constructor(){super(),this.range=oe.instance}isEmptyStatement(){return!0}emitToStep(t,e){return t}index(t){return this.stepIndex=t,t}emit(){return""}flattenInto(t){}}class Kh{static getCommaSeparatedParameterIdentifiers(t,e){let i="";for(let n=t;n=t&&(i+="§"+e),i}}class Oe extends Kh{constructor(t){super(),this.templateString=t}applyToSnippet(t,e,...i){if(i[0].isPureTerm()){let a=new N(this.templateString.replace(new RegExp("\\§1","g"),()=>i[0].getPureTerm()),e,t);return a.takeEmitToStepListenersFrom(i),a}let n=new ae(i[0].allButLastPart(),e),s=i[0].lastPartOrPop();return n.addStringPart(this.templateString.replace(new RegExp("\\§1","g"),()=>s.emit()),e,t,[s]),n.type=t,n}}class zs extends Kh{constructor(t){super(),this.templateString=t}applyToSnippet(t,e,...i){let n=i[0].isPureTerm(),s=i[1].isPureTerm();if(n&&s){let u=this.templateString.replace(new RegExp("\\§1","g"),()=>i[0].getPureTerm());u=u.replace(new RegExp("\\§2","g"),()=>i[1].getPureTerm());let m=new N(u,e,t);return m.takeEmitToStepListenersFrom(i),m}let a=(this.templateString.match(/\§1/g)||[]).length,l=(this.templateString.match(/\§2/g)||[]).length;if(a>1&&!n||l>1&&!s)throw"TwoParameterTemplate: can't replace more than one placeholder with non-pure snippet.";let h=new ae([],e);if(n||s){h.addParts(i[0].allButLastPart()),h.addParts(i[1].allButLastPart());let u=i[0].lastPartOrPop(),m=i[1].lastPartOrPop();return h.addStringPart(this.templateString.replace(new RegExp("\\§1","g"),()=>u.emit()).replace(new RegExp("\\§2","g"),()=>m.emit()),e,t,[u,m]),h.type=t,h}return i[0].ensureFinalValueIsOnStack(),i[1].ensureFinalValueIsOnStack(),this.templateString.indexOf("§1")f.emit()).join(n)+s,e,t);return a.forEach(f=>g.takeEmitToStepListenersFrom(f)),g}let h=new ae([],e);for(let g=a.length-1;g>=0;g--)h.addParts(a[g].allButLastPart());let u=a.map(g=>g.lastPartOrPop()),m=i+u.map(g=>g.emit()).join(n)+s;return h.addStringPart(m,e,t,u),h.type=t,h}}class gs extends Kh{constructor(e){super();r(this,"orderedParameters");r(this,"maxN",-1);this.templateString=e}analyzeTemplateString(){this.orderedParameters=[];let e=this.templateString.match(/\§\d*/g);if(e)for(let i=0;ithis.maxN&&(this.maxN=s),this.orderedParameters.push({parameter:e[i],n:s,order:i})}}applyToSnippet(e,i,...n){switch(n.length){case 1:return new Oe(this.templateString).applyToSnippet(e,i,n[0]);case 2:return new zs(this.templateString).applyToSnippet(e,i,n[0],n[1])}if(this.analyzeTemplateString(),n.length=0;g--){let f=this.orderedParameters[g];s=s.replace(new RegExp("\\"+f.parameter,"g"),()=>n[f.n-1].emit())}let m=new N(s,i,e);return m.takeEmitToStepListenersFrom(n),m}let l=new ae([],i),h=this.orderedParameters.sort((m,g)=>g.order-m.order),u=[];for(let m=0;mf.emit())}return l.addStringPart(s,i,e,u),l.type=e,l}}class gn extends Kh{constructor(t,e){super(),this.operator=t,this.isCommutative=e}applyToSnippet(t,e,...i){let n=i[0].isPureTerm(),s=i[1].isPureTerm(),a=i[0].isConstant(),l=i[1].isConstant();if(a&&l)return this.foldConstants(i[0],i[1],this.operator,t,e);if(n&&s){let u;if(this.operator=="/"||this.operator=="%"){let m="",g="";this.operator=="/"&&i[0].type instanceof yt&&i[0].type.isByteShortIntLong()&&i[1].type instanceof yt&&i[1].type.isByteShortIntLong()&&(m="Math.trunc( ",g=")"),l&&i[1].getConstantValue()!=0?u=new N(m+i[0].getPureTerm()+" "+this.operator+" "+i[1].getPureTerm()+g,e,t):u=new N(m+i[0].getPureTerm()+" "+this.operator+" ("+i[1].getPureTerm()+`|| ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn}))`+g,e,t)}else u=new N(i[0].getPureTerm()+" "+this.operator+" "+i[1].getPureTerm(),e,t);return u.takeEmitToStepListenersFrom(i),u}let h=new ae([],e);if(n||s){h.addParts(i[0].allButLastPart()),h.addParts(i[1].allButLastPart());let u=i[0].lastPartOrPop(),m=i[1].lastPartOrPop();return this.operator=="/"&&i[0].type instanceof yt&&i[0].type.isByteShortIntLong()&&i[1].type instanceof yt&&i[1].type.isByteShortIntLong()?h.addStringPart(`Math.trunc(${u.emit()} ${this.operator} ${m.emit()})`,e,t,[u,m]):h.addStringPart(`${u.emit()} ${this.operator} ${m.emit()}`,e,t,[u,m]),h.finalValueIsOnStack=!1,h.type=t,h}if(["-","/","<",">","<=",">="].indexOf(this.operator)>=0){switch(i[0].ensureFinalValueIsOnStack(),i[1].ensureFinalValueIsOnStack(),h.addParts(i[0]),h.addParts(i[1]),this.operator){case"-":h.addStringPart(`-${V.stack}.pop() + ${V.stack}.pop()`,e,t);break;case"/":i[0].type instanceof yt&&i[0].type.isByteShortIntLong()&&i[1].type instanceof yt&&i[1].type.isByteShortIntLong()?h.addStringPart(`Math.trunc( 1/(${V.stack}.pop() || ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn})) * ${V.stack}.pop() )`,e,t):h.addStringPart(`1/(${V.stack}.pop() || ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn})) * ${V.stack}.pop()`,e,t);break;case"<":h.addStringPart(`${V.stack}.pop() > ${V.stack}.pop()`,e,t);break;case">":h.addStringPart(`${V.stack}.pop() < ${V.stack}.pop()`,e,t);break;case"<=":h.addStringPart(`${V.stack}.pop() >= ${V.stack}.pop()`,e,t);break;case">=":h.addStringPart(`${V.stack}.pop() <= ${V.stack}.pop()`,e,t);break}return h.finalValueIsOnStack=!1,h.type=t,h}return i[0].ensureFinalValueIsOnStack(),i[1].ensureFinalValueIsOnStack(),h.addParts(i[1]),h.addParts(i[0]),this.operator=="%"?h.addStringPart(`${V.stack}.pop() ${this.operator} (${V.stack}.pop() || ${$.throwArithmeticException}("${v.divideByZero()}", ${e.startLineNumber}, ${e.startColumn}, ${e.endLineNumber}, ${e.endColumn}))`,e,t):h.addStringPart(`${V.stack}.pop() ${this.operator} ${V.stack}.pop()`,e,t),h.finalValueIsOnStack=!1,h.type=t,h}foldConstants(t,e,i,n,s){let a=t.getConstantValue(),l=e.getConstantValue(),h;switch(i){case"+":h=a+l;break;case"-":h=a-l;break;case"*":h=a*l;break;case"/":if(t.type.isByteShortIntLong()&&e.type.isByteShortIntLong()){h=Math.trunc(Math.trunc(a)/Math.trunc(l));break}h=a/l;break;case"%":h=a%l;break;case"<":h=a":h=a>l;break;case"<=":h=a<=l;break;case">=":h=a>=l;break;case"!=":h=a!=l;break;case"==":h=a==l;break;case"&&":h=a&&l;break;case"||":h=a||l;break;case"&":h=a&l;break;case"|":h=a|l;break;case"^":h=a^l;break;case"<<":h=a<>":h=a>>l;break;case">>>":h=a>>>l;break}let u=typeof h=="string"?`"${this.escapeString(h)}"`:h+"";return new N(u,s,n,h)}escapeString(t){return t=t.replaceAll("\\","\\\\"),t=t.replaceAll(` `,"\\n"),t=t.replaceAll(" ","\\t"),t=t.replaceAll("\r","\\r"),t=t.replaceAll('"','\\"'),t}}class Ky{constructor(t,e,i){this.identifier=t,this.range=e,this.parameter=i}}class Ep{constructor(t){r(this,"symbols");r(this,"symbolReadHappened");r(this,"symbolWriteHappened");r(this,"returnHappened");r(this,"children",[]);this.parent=t,this.returnHappened=!1,t?(this.symbols=t.symbols.slice(),this.symbolReadHappened=t.symbolReadHappened.slice(),this.symbolWriteHappened=t.symbolWriteHappened.slice(),t.children.push(this)):(this.symbols=[],this.symbolReadHappened=[],this.symbolWriteHappened=[])}addSymbolDeclaration(t,e){this.symbols.push(t),this.symbolReadHappened.push(!1),this.symbolWriteHappened.push(e)}onSymbolRead(t,e,i){let n=this.symbols.indexOf(t);if(n>=0){if(!this.symbolWriteHappened[n]){let s=v.variableNotInitialized(t.identifier);i.push({message:s.message,id:s.id,level:"warning",range:e})}this.symbolReadHappened[n]=!0}}onSymbolWrite(t,e,i){let n=this.symbols.indexOf(t);n>=0&&(this.symbolWriteHappened[n]=!0)}onReturnHappened(){this.returnHappened=!0}onCloseBranch(t){for(let e=this.parent?this.parent.symbolReadHappened.length:0;e0){t+="Symbols: [";for(let e=0;el.flattenInto(i));let n=!1;for(let l=0;lt.getPureTerm())),t.type=s,t;let a=new ae(t.allButLastPart(),n,s),l=t.lastPartOrPop();return a.addStringPart(e.replace(new RegExp("\\§1","g"),()=>l.emit()),n,s,[l]),a}}class Jr extends Rh{constructor(t,e,i,n){super(t,e,n.module),this.identifierRange=e,this.type=i}getDeclaration(){var e;let t="";return this.isFinal&&(t+="final "),t+((e=this.type)==null?void 0:e.toString())+" "+this.identifier}getType(){return this.type}}class S{}r(S,"CPUName",()=>d({de:"Einfach CPU (wie im bayerischen Abitur)",en:"Simple CPU (as in the Bavarian A-level examination)",fr:"Simple CPU (comme dans le bac de Bavière)"})),r(S,"CPUDescription",()=>d({de:"Einfache CPU mit einem Akkumulator, einem Programmzähler und drei Flags (zero, negative, overflow) sowie vorzeichenbehafteter 16-Bit Speicherarchitektur. Diese CPU entspricht den Aufgaben im bayerischen Abitur.",en:"Simple CPU with an accumulator, a program counter, and three flags (zero, negative, overflow) as well as a signed 16-bit memory architecture. This CPU corresponds to the tasks in the Bavarian A-level examination.",fr:"CPU simple avec un accumulateur, un compteur de programme et trois drapeaux (zero, négatif, dépassement) ainsi qu'une architecture mémoire 16 bits signée. Cette CPU correspond aux tâches du bac de Bavière."})),r(S,"NumberAfterInstructionNotExpected",t=>d({de:`Nach dem Mnemonic "${t}" wird keine Zahl erwartet.`,en:`No number expected after mnemonic "${t}".`,fr:`Aucun nombre n'est attendu après le mnémonique "${t}".`})),r(S,"LabelAfterInstructionNotExpected",t=>d({de:`Nach dem Mnemonic "${t}" wird kein Label erwartet.`,en:`No label expected after mnemonic "${t}".`,fr:`Aucun label n'est attendu après le mnémonique "${t}".`})),r(S,"NoArgumentAfterInstructionFound",t=>d({de:`Nach dem Mnemonic "${t}" wird ein Argument erwartet, es wurde aber keines gefunden.`,en:`An argument is expected after mnemonic "${t}", but no argument was found.`,fr:`Un argument est attendu après le mnémonique "${t}", mais aucun argument n'a été trouvé.`})),r(S,"IndirectArgumentAfterInstructionNotExpected",t=>d({de:`Nach dem Mnemonic "${t}" wird kein indirektes Argument (in Klammern) erwartet.`,en:`No indirect argument (in brackets) expected after mnemonic "${t}".`,fr:`Aucun argument indirect (entre parenthèses) n'est attendu après le mnémonique "${t}".`})),r(S,"NumberOrLabelExpectedInIndirectAdress",t=>d({de:`In der indirekten Adressierung (in Klammern) nach dem Mnemonic "${t}" wird eine Zahl oder ein Label erwartet.`,en:`In indirect addressing (in brackets) after mnemonic "${t}", a number or label is expected.`,fr:`Dans l'adressage indirect (entre parenthèses) après le mnémonique "${t}", un nombre ou un label est attendu.`})),r(S,"UnknownOpCode",(t,e)=>d({de:`Unbekannter Opcode: ${t} an Adresse ${e}`,en:`Unknown opcode: ${t} at address ${e}`,fr:`Opcode inconnu: ${t} à l'adresse ${e}`})),r(S,"OriginAddressOutOfBounds",(t,e)=>d({de:`Die Origin-Adresse ${t} liegt außerhalb des gültigen Bereichs von 0 bis ${e}.`,en:`The origin address ${t} is out of bounds. Valid range is from 0 to ${e}.`,fr:`L'adresse d'origine ${t} est hors limites. La plage valide est de 0 à ${e}.`})),r(S,"OriginNotAllowedAfterCodeGeneration",()=>d({de:"Die Origin-Direktive darf nicht nach der Generierung von Code verwendet werden.",en:"The origin directive is not allowed after code generation.",fr:"La directive d'origine n'est pas autorisée après la génération de code."})),r(S,"UnknownPseudoDirective",t=>d({de:`Unbekannte Pseudo-Direktive: ${t}`,en:`Unknown pseudo directive: ${t}`,fr:`Directive pseudo inconnue: ${t}`})),r(S,"Assert",()=>d({de:'.assert: Fügt eine Assertion ein, die überprüft, ob der Speicher zum Zeitpunkt der Ausführung der Assertion den erwarteten Wert hat. Syntax: .assert
(expectedMemoryValue,[ ])*["message"], z.B. .assert 100 42, 37, 58 "Falsche Sortierreihenfolge!"',en:'.assert: Adds an assertion that checks if the memory has the expected value at the time of assertion execution. Syntax: .assert
(expectedMemoryValue,[ ])*["message"], e.g., .assert 100 42, 37, 58 "Wrong sort order!"',fr:`.assert: Ajoute une assertion qui vérifie si la mémoire a la valeur attendue au moment de l'exécution de l'assertion. Syntaxe: .assert
(expectedMemoryValue,[ ])*["message"], par exemple .assert 100 42, 37, 58 "Mauvaise ordre de tri!"`})),r(S,"LoadAddress",(...t)=>d({de:`load ${t[0]}: Lädt den Wert an der Adresse ${t[0]} in den Akkumulator.`,en:`load ${t[0]}: Loads the value at ${t[0]} into the accumulator.`,fr:`load ${t[0]}: Charge la valeur à l'adresse ${t[0]} dans l'accumulateur.`})),r(S,"StoreAddress",(...t)=>d({de:`store ${t[0]}: Speichert den Wert des Akkumulators an der Adresse ${t[0]}.`,en:`store ${t[0]}: Stores the value of the accumulator at ${t[0]}.`,fr:`store ${t[0]}: Stocke la valeur de l'accumulateur à l'adresse ${t[0]}.`})),r(S,"AddAddress",(...t)=>d({de:`add ${t[0]}: Addiert den Wert an der Adresse ${t[0]} zum Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`add ${t[0]}: Adds the value at ${t[0]} to the accumulator and stores the result in the accumulator.`,fr:`add ${t[0]}: Ajoute la valeur à l'adresse ${t[0]} à l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"SubAddress",(...t)=>d({de:`sub ${t[0]}: Subtrahiert den Wert an der Adresse ${t[0]} vom Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`sub ${t[0]}: Subtracts the value at ${t[0]} from the accumulator and stores the result in the accumulator.`,fr:`sub ${t[0]}: Soustrait la valeur à l'adresse ${t[0]} de l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"MulAddress",(...t)=>d({de:`mul ${t[0]}: Multipliziert den Wert an der Adresse ${t[0]} mit dem Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`mul ${t[0]}: Multiplies the value at ${t[0]} with the accumulator and stores the result in the accumulator.`,fr:`mul ${t[0]}: Multiplie la valeur à l'adresse ${t[0]} avec l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"DivAddress",(...t)=>d({de:`div ${t[0]}: Dividiert den Akkumulator durch den Wert an der Adresse ${t[0]} und speichert das Ergebnis im Akkumulator (ganzzahliger Quotient).`,en:`div ${t[0]}: Divides the accumulator by the value at ${t[0]} and stores the result in the accumulator (integer quotient).`,fr:`div ${t[0]}: Divise l'accumulateur par la valeur à l'adresse ${t[0]} et stocke le résultat dans l'accumulateur (quotient entier).`})),r(S,"ModAddress",(...t)=>d({de:`mod ${t[0]}: Dividiert den Akkumulator durch den Wert an der Adresse ${t[0]} und speichert den Rest der Division im Akkumulator.`,en:`mod ${t[0]}: Divides the accumulator by the value at ${t[0]} and stores the remainder of the division in the accumulator.`,fr:`mod ${t[0]}: Divise l'accumulateur par la valeur à l'adresse ${t[0]} et stocke le reste de la division dans l'accumulateur.`})),r(S,"AndAddress",(...t)=>d({de:`and ${t[0]}: Führt eine bitweise Und-Verknüpfung zwischen dem Akkumulator und dem Wert an der Adresse ${t[0]} durch und speichert das Ergebnis im Akkumulator.`,en:`and ${t[0]}: Performs a bitwise AND opération between the accumulator and the value at ${t[0]} and stores the result in the accumulator.`,fr:`and ${t[0]}: Effectue une opération ET binaire entre l'accumulateur et la valeur à l'adresse ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"OrAddress",(...t)=>d({de:`or ${t[0]}: Führt eine bitweise Oder-Verknüpfung zwischen dem Akkumulator und dem Wert an der Adresse ${t[0]} durch und speichert das Ergebnis im Akkumulator.`,en:`or ${t[0]}: Performs a bitwise OR opération between the accumulator and the value at ${t[0]} and stores the result in the accumulator.`,fr:`or ${t[0]}: Effectue une opération OU binaire entre l'accumulateur et la valeur à l'adresse ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"ShlAddress",(...t)=>d({de:`shl ${t[0]}: Führt eine bitweise Verschiebung nach links des Akkumulators um die Anzahl der Bits, die durch den Wert an der Adresse ${t[0]} angegeben ist, durch und speichert das Ergebnis im Akkumulator. Falls der Wert des Akkumulators negativ ist, werden nur die rechten 15 Bits verschoben, da die Architektur eine vorzeichenbehaftete 16-Bit-Architektur ist.`,en:`shl ${t[0]}: Performs a bitwise left shift of the accumulator by the number of bits specified by ${t[0]} and stores the result in the accumulator. If the value of the accumulator is negative, only the rightmost 15 bits are shifted, since the architecture is a signed 16-bit architecture.`,fr:`shl ${t[0]}: Effectue une opération de décalage vers la gauche de l'accumulateur du nombre de bits spécifié par ${t[0]} et stocke le résultat dans l'accumulateur. Si la valeur de l'accumulateur est négative, seuls les 15 bits les plus à droite sont décalés, car l'architecture est une architecture 16 bits signée.`})),r(S,"ShrAddress",(...t)=>d({de:`shr ${t[0]}: Führt eine bitweise Verschiebung nach rechts des Akkumulators um die Anzahl der Bits, die durch den Wert an der Adresse ${t[0]} angegeben ist, durch und speichert das Ergebnis im Akkumulator. Falls der Wert des Akkumulators negativ ist, werden nur die rechten 15 Bits verschoben, da die Architektur eine vorzeichenbehaftete 16-Bit-Architektur ist.`,en:`shr ${t[0]}: Performs a bitwise right shift of the accumulator by the number of bits specified by ${t[0]} and stores the result in the accumulator. If the value of the accumulator is negative, only the rightmost 15 bits are shifted, since the architecture is a signed 16-bit architecture.`,fr:`shr ${t[0]}: Effectue une opération de décalage vers la droite de l'accumulateur du nombre de bits spécifié par ${t[0]} et stocke le résultat dans l'accumulateur. Si la valeur de l'accumulateur est négative, seuls les 15 bits les plus à droite sont décalés, car l'architecture est une architecture 16 bits signée.`})),r(S,"XorAddress",(...t)=>d({de:`xor ${t[0]}: Führt eine bitweise Exklusiv-Oder-Verknüpfung zwischen dem Akkumulator und dem Wert an der Adresse ${t[0]} durch und speichert das Ergebnis im Akkumulator.`,en:`xor ${t[0]}: Performs a bitwise exclusive OR opération between the accumulator and the value at ${t[0]} and stores the result in the accumulator.`,fr:`xor ${t[0]}: Effectue une opération OU exclusif binaire entre l'accumulateur et la valeur à l'adresse ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"CmpAddress",(...t)=>d({de:`cmp ${t[0]}: Subtrahiert den Wert an der Adresse ${t[0]} vom Akkumulator (ohne diesen zu verändern!) und setzt die Flags entsprechend (zero, negative, overflow).`,en:`cmp ${t[0]}: Subtracts the value at ${t[0]} from the accumulator (without changing it!) and sets the flags accordingly (zero, negative, overflow).`,fr:`cmp ${t[0]}: Soustrait la valeur à l'adresse ${t[0]} de l'accumulateur (sans le changer !) et définit les drapeaux en conséquence (zero, négatif, dépassement).`})),r(S,"LoadIndirect",(...t)=>d({de:`load (${t[0]}): Lädt den Wert an der Adresse, die an ${t[0]} gespeichert ist, in den Akkumulator.`,en:`load (${t[0]}): Loads the value at the address stored at ${t[0]} into the accumulator.`,fr:`load (${t[0]}): Charge la valeur à l'adresse stockée à ${t[0]} dans l'accumulateur.`})),r(S,"StoreIndirect",(...t)=>d({de:`store (${t[0]}): Speichert den Wert des Akkumulators an der Adresse, die an ${t[0]} gespeichert ist.`,en:`store (${t[0]}): Stores the value of the accumulator at the address stored at ${t[0]}.`,fr:`store (${t[0]}): Stocke la valeur de l'accumulateur à l'adresse stockée à ${t[0]}.`})),r(S,"AddIndirect",(...t)=>d({de:`add (${t[0]}): Addiert den Wert an der Adresse, die an ${t[0]} gespeichert ist, zum Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`add (${t[0]}): Adds the value at the address stored at ${t[0]} to the accumulator and stores the result in the accumulator.`,fr:`add (${t[0]}): Ajoute la valeur à l'adresse stockée à ${t[0]} à l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"SubIndirect",(...t)=>d({de:`sub (${t[0]}): Subtrahiert den Wert an der Adresse, die an ${t[0]} gespeichert ist, vom Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`sub (${t[0]}): Subtracts the value at the address stored at ${t[0]} from the accumulator and stores the result in the accumulator.`,fr:`sub (${t[0]}): Soustrait la valeur à l'adresse stockée à ${t[0]} de l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"MulIndirect",(...t)=>d({de:`mul (${t[0]}): Multipliziert den Wert an der Adresse, die an ${t[0]} gespeichert ist, mit dem Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`mul (${t[0]}): Multiplies the value at the address stored at ${t[0]} with the accumulator and stores the result in the accumulator.`,fr:`mul (${t[0]}): Multiplie la valeur à l'adresse stockée à ${t[0]} avec l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"DivIndirect",(...t)=>d({de:`div (${t[0]}): Dividiert den Akkumulator durch den Wert an der Adresse, die an ${t[0]} gespeichert ist, und speichert das Ergebnis im Akkumulator (ganzzahliger Quotient).`,en:`div (${t[0]}): Divides the accumulator by the value at the address stored at ${t[0]} and stores the result in the accumulator (integer quotient).`,fr:`div (${t[0]}): Divise l'accumulateur par la valeur à l'adresse stockée à ${t[0]} et stocke le résultat dans l'accumulateur (quotient entier).`})),r(S,"ModIndirect",(...t)=>d({de:`mod (${t[0]}): Dividiert den Akkumulator durch den Wert an der Adresse, die an ${t[0]} gespeichert ist, und speichert den Rest der Division im Akkumulator.`,en:`mod (${t[0]}): Divides the accumulator by the value at the address stored at ${t[0]} and stores the remainder of the division in the accumulator.`,fr:`mod (${t[0]}): Divise l'accumulateur par la valeur à l'adresse stockée à ${t[0]} et stocke le reste de la division dans l'accumulateur.`})),r(S,"AndIndirect",(...t)=>d({de:`and (${t[0]}): Führt eine bitweise Und-Verknüpfung zwischen dem Akkumulator und dem Wert an der Adresse, die an ${t[0]} gespeichert ist, durch und speichert das Ergebnis im Akkumulator.`,en:`and (${t[0]}): Performs a bitwise AND opération between the accumulator and the value at the address stored at ${t[0]} and stores the result in the accumulator.`,fr:`and (${t[0]}): Effectue une opération ET binaire entre l'accumulateur et la valeur à l'adresse stockée à ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"OrIndirect",(...t)=>d({de:`or (${t[0]}): Führt eine bitweise Oder-Verknüpfung zwischen dem Akkumulator und dem Wert an der Adresse, die an ${t[0]} gespeichert ist, durch und speichert das Ergebnis im Akkumulator.`,en:`or (${t[0]}): Performs a bitwise OR opération between the accumulator and the value at the address stored at ${t[0]} and stores the result in the accumulator.`,fr:`or (${t[0]}): Effectue une opération OU binaire entre l'accumulateur und la valeur à l'adresse stockée à ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"XorIndirect",(...t)=>d({de:`xor (${t[0]}): Führt eine bitweise Exklusiv-Oder-Verknüpfung zwischen dem Akkumulator und dem Wert an der Adresse, die an ${t[0]} gespeichert ist, durch und speichert das Ergebnis im Akkumulator.`,en:`xor (${t[0]}): Performs a bitwise exclusive OR opération between the accumulator and the value at the address stored at ${t[0]} and stores the result in the accumulator.`,fr:`xor (${t[0]}): Effectue une opération OU exclusif binaire entre l'accumulateur et la valeur à l'adresse stockée à ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"CmpIndirect",(...t)=>d({de:`cmp (${t[0]}): Subtrahiert den Wert an der Adresse, die an ${t[0]} gespeichert ist, vom Akkumulator (ohne diesen zu verändern!) und setzt die Flags entsprechend (zero, negative, overflow).`,en:`cmp (${t[0]}): Subtracts the value at the address stored at ${t[0]} from the accumulator (without changing it!) and sets the flags accordingly (zero, negative, overflow).`,fr:`cmp (${t[0]}): Soustrait la valeur à l'adresse stockée à ${t[0]} de l'accumulateur (sans le changer !) et définit les drapeaux en conséquence (zero, négatif, dépassement).`})),r(S,"Jmp",(...t)=>d({de:`jmp ${t[0]}: Springt zu der Adresse ${t[0]}. Dies wird erreicht, indem die Adresse im Program Counter gespeichert wird.`,en:`jmp ${t[0]}: Jumps to address ${t[0]}. This is achieved by storing the address in the program counter.`,fr:`jmp ${t[0]}: Saute à l'adresse ${t[0]}. Cela est réalisé en stockant l'adresse dans le compteur de programme.`})),r(S,"Jeq",(...t)=>d({de:`jeq ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das zero-Flag gesetzt ist. // Bemerkung: Nach einem Vergleich (cmp-Befehl) wird das zero-Flag gesetzt, wenn die Werte gleich sind.`,en:`jeq ${t[0]}: Jumps to address ${t[0]} if the zero flag is set. Remark: After a comparison (cmp command), the zero flag is set if the values are equal.`,fr:`jeq ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau zero est defini. Après une comparaison (commande cmp), le drapeau zero est defini si les valeurs sont égales.`})),r(S,"Jne",(...t)=>d({de:`jne ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das zero-Flag nicht gesetzt ist. // Bemerkung: Nach einem Vergleich (cmp-Befehl) wird das zero-Flag gesetzt, wenn die Werte gleich sind.`,en:`jne ${t[0]}: Jumps to address ${t[0]} if the zero flag is not set. Remark: After a comparison (cmp command), the zero flag is set if the values are equal.`,fr:`jne ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau zero n'est pas defini. Après une comparaison (commande cmp), le drapeau zero est defini si les valeurs sont égales.`})),r(S,"Jgt",(...t)=>d({de:`jgt ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das negative-Flag nicht gesetzt ist und entweder das zero-Flag nicht gesetzt ist oder das overflow-Flag nicht gesetzt ist. // Bemerkung: Nach einem Vergleich (cmp-Befehl) wird das negative-Flag gesetzt, wenn der Wert im Akkumulator kleiner als der Wert an der Adresse ist, von der subtrahiert wird, und das overflow-Flag wird gesetzt, wenn es bei der Subtraktion zu einem Überlauf kommt.`,en:`jgt ${t[0]}: Jumps to address ${t[0]} if the negative flag is not set and either the zero flag is not set or the overflow flag is not set. Remark: After a comparison (cmp command), the negative flag is set if the value in the accumulator is less than the value at the address being subtracted from, and the overflow flag is set if there is an overflow in the subtraction.`,fr:`jgt ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif n'est pas defini et que soit le drapeau zero n'est pas defini, soit le drapeau de dépassement n'est pas defini. Après une comparaison (commande cmp), le drapeau négatif est defini si la valeur dans l'accumulateur est inférieure a la valeur à l'adresse dont elle est soustraite, et le drapeau de dépassement est defini s'il y a un dépassement dans la soustraction.`})),r(S,"Jge",(...t)=>d({de:`jge ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das negative-Flag nicht gesetzt ist und entweder das zero-Flag gesetzt ist oder das overflow-Flag gesetzt ist. // Bemerkung: Nach einem Vergleich (cmp-Befehl) wird das negative-Flag gesetzt, wenn der Wert im Akkumulator kleiner als der Wert an der Adresse ist, von der subtrahiert wird, und das overflow-Flag wird gesetzt, wenn es bei der Subtraktion zu einem Überlauf kommt.`,en:`jge ${t[0]}: Jumps to address ${t[0]} if the negative flag is not set and either the zero flag is set or the overflow flag is set. Remark: After a comparison (cmp command), the negative flag is set if the value in the accumulator is less than the value at the address being subtracted from, and the overflow flag is set if there is an overflow in the subtraction.`,fr:`jge ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif n'est pas defini et que soit le drapeau zero est defini, soit le drapeau de dépassement est defini. Après une comparaison (commande cmp), le drapeau négatif est defini si la valeur dans l'accumulateur est inférieure a la valeur à l'adresse dont elle est soustraite, et le drapeau de dépassement est defini s'il y a un dépassement dans la soustraction.`})),r(S,"Jlt",(...t)=>d({de:`jlt ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das negative-Flag gesetzt ist und entweder das zero-Flag nicht gesetzt ist oder das overflow-Flag nicht gesetzt ist. // Bemerkung: Nach einem Vergleich (cmp-Befehl) wird das negative-Flag gesetzt, wenn der Wert im Akkumulator kleiner als der Wert an der Adresse ist, von der subtrahiert wird, und das overflow-Flag wird gesetzt, wenn es bei der Subtraktion zu einem Überlauf kommt.`,en:`jlt ${t[0]}: Jumps to address ${t[0]} if the negative flag is set and either the zero flag is not set or the overflow flag is not set. Remark: After a comparison (cmp command), the negative flag is set if the value in the accumulator is less than the value at the address being subtracted from, and the overflow flag is set if there is an overflow in the subtraction.`,fr:`jlt ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif est defini et que soit le drapeau zero n'est pas defini, soit le drapeau de dépassement n'est pas defini. Après une comparaison (commande cmp), le drapeau négatif est defini si la valeur dans l'accumulateur est inférieure a la valeur à l'adresse dont elle est soustraite, et le drapeau de dépassement est defini s'il y a un dépassement dans la soustraction.`})),r(S,"Jle",(...t)=>d({de:`jle ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das negative-Flag gesetzt ist und entweder das zero-Flag gesetzt ist oder das overflow-Flag gesetzt ist. // Bemerkung: Nach einem Vergleich (cmp-Befehl) wird das negative-Flag gesetzt, wenn der Wert im Akkumulator kleiner als der Wert an der Adresse ist, von der subtrahiert wird, und das overflow-Flag wird gesetzt, wenn es bei der Subtraktion zu einem Überlauf kommt.`,en:`jle ${t[0]}: Jumps to address ${t[0]} if the negative flag is set and either the zero flag is set or the overflow flag is set. Remark: After a comparison (cmp command), the negative flag is set if the value in the accumulator is less than the value at the address being subtracted from, and the overflow flag is set if there is an overflow in the subtraction.`,fr:`jle ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif est defini et que soit le drapeau zero est defini, soit le drapeau de dépassement est defini. Après une comparaison (commande cmp), le drapeau négatif est defini si la valeur dans l'accumulateur est inférieure a la valeur à l'adresse dont elle est soustraite, et le drapeau de dépassement est defini s'il y a un dépassement dans la soustraction.`})),r(S,"Jmpp",(...t)=>d({de:`jmpp ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das negative-Flag nicht gesetzt ist.`,en:`jmpp ${t[0]}: Jumps to address ${t[0]} if the negative flag is not set.`,fr:`jmpp ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif n'est pas defini.`})),r(S,"Jmpn",(...t)=>d({de:`jmpn ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das negative-Flag gesetzt ist.`,en:`jmpn ${t[0]}: Jumps to address ${t[0]} if the negative flag is set.`,fr:`jmpn ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif est defini.`})),r(S,"Jmpz",(...t)=>d({de:`jmpz ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das zero-Flag gesetzt ist.`,en:`jmpz ${t[0]}: Jumps to address ${t[0]} if the zero flag is set.`,fr:`jmpz ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau zero est defini.`})),r(S,"Jmpv",(...t)=>d({de:`jmpv ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das overflow-Flag gesetzt ist.`,en:`jmpv ${t[0]}: Jumps to address ${t[0]} if the overflow flag is set.`,fr:`jmpv ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau de dépassement est defini.`})),r(S,"Jmpc",(...t)=>d({de:`jmpc ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das carry-Flag gesetzt ist.`,en:`jmpc ${t[0]}: Jumps to address ${t[0]} if the carry flag is set.`,fr:`jmpc ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau de retenue est defini.`})),r(S,"Jmpnp",(...t)=>d({de:`jmpnp ${t[0]}: Springt zu der Adresse ${t[0]}, wenn negative-Flag oder das zero-Flag gesetzt ist.`,en:`jmpnp ${t[0]}: Jumps to address ${t[0]} if the negative flag or the zero flag is set.`,fr:`jmpnp ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif ou le drapeau zero est defini.`})),r(S,"Jmpnn",(...t)=>d({de:`jmpnn ${t[0]}: Springt zu der Adresse ${t[0]}, wenn negative-Flag nicht gesetzt ist.`,en:`jmpnn ${t[0]}: Jumps to address ${t[0]} if the negative flag is not set.`,fr:`jmpnn ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau négatif n'est pas defini.`})),r(S,"Jmpnz",(...t)=>d({de:`jmpnz ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das zero-Flag nicht gesetzt ist.`,en:`jmpnz ${t[0]}: Jumps to address ${t[0]} if the zero flag is not set.`,fr:`jmpnz ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau zero n'est pas defini.`})),r(S,"Jmpnv",(...t)=>d({de:`jmpnv ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das overflow-Flag nicht gesetzt ist.`,en:`jmpnv ${t[0]}: Jumps to address ${t[0]} if the overflow flag is not set.`,fr:`jmpnv ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau de dépassement n'est pas defini.`})),r(S,"Jmpnc",(...t)=>d({de:`jmpnc ${t[0]}: Springt zu der Adresse ${t[0]}, wenn das carry-Flag nicht gesetzt ist.`,en:`jmpnc ${t[0]}: Jumps to address ${t[0]} if the carry flag is not set.`,fr:`jmpnc ${t[0]}: Saute à l'adresse ${t[0]} si le drapeau de retenue n'est pas defini.`})),r(S,"LoadImmediate",(...t)=>d({de:`loadi ${t[0]}: Lädt die Zahl ${t[0]} in den Akkumulator.`,en:`loadi ${t[0]}: Loads the immédiate number ${t[0]} into the accumulator.`,fr:`loadi ${t[0]}: Charge le nombre immédiat ${t[0]} dans l'accumulateur.`})),r(S,"AddImmediate",(...t)=>d({de:`addi ${t[0]}: Addiert die Zahl ${t[0]} zum Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`addi ${t[0]}: Adds the immédiate number ${t[0]} to the accumulator and stores the result in the accumulator.`,fr:`addi ${t[0]}: Ajoute le nombre immédiat ${t[0]} à l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"SubImmediate",(...t)=>d({de:`subi ${t[0]}: Subtrahiert die Zahl ${t[0]} vom Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`subi ${t[0]}: Subtracts the immédiate number ${t[0]} from the accumulator and stores the result in the accumulator.`,fr:`subi ${t[0]}: Soustrait le nombre immédiat ${t[0]} de l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"MulImmediate",(...t)=>d({de:`muli ${t[0]}: Multipliziert die Zahl ${t[0]} mit dem Akkumulator und speichert das Ergebnis im Akkumulator.`,en:`muli ${t[0]}: Multiplies the immédiate number ${t[0]} with the accumulator and stores the result in the accumulator.`,fr:`muli ${t[0]}: Multiplie le nombre immédiat ${t[0]} avec l'accumulateur et stocke le résultat dans l'accumulateur.`})),r(S,"DivImmediate",(...t)=>d({de:`divi ${t[0]}: Dividiert den Akkumulator durch die Zahl ${t[0]} und speichert das Ergebnis im Akkumulator (ganzzahliger Quotient).`,en:`divi ${t[0]}: Divides the accumulator by the immédiate number ${t[0]} and stores the result in the accumulator (integer quotient).`,fr:`divi ${t[0]}: Divise l'accumulateur par le nombre immédiat ${t[0]} et stocke le résultat dans l'accumulateur (quotient entier).`})),r(S,"ModImmediate",(...t)=>d({de:`modi ${t[0]}: Dividiert den Akkumulator durch die Zahl ${t[0]} und speichert den Rest der Division im Akkumulator.`,en:`modi ${t[0]}: Divides the accumulator by the immédiate number ${t[0]} and stores the remainder of the division in the accumulator.`,fr:`modi ${t[0]}: Divise l'accumulateur par le nombre immédiat ${t[0]} et stocke le reste de la division dans l'accumulateur.`})),r(S,"AndImmediate",(...t)=>d({de:`andi ${t[0]}: Führt eine bitweise Und-Verknüpfung zwischen dem Akkumulator und der Zahl ${t[0]} durch und speichert das Ergebnis im Akkumulator.`,en:`andi ${t[0]}: Performs a bitwise AND opération between the accumulator and the immédiate number ${t[0]} and stores the result in the accumulator.`,fr:`andi ${t[0]}: Effectue une opération ET binaire entre l'accumulateur et le nombre immédiat ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"OrImmediate",(...t)=>d({de:`ori ${t[0]}: Führt eine bitweise Oder-Verknüpfung zwischen dem Akkumulator und der Zahl ${t[0]} durch und speichert das Ergebnis im Akkumulator.`,en:`ori ${t[0]}: Performs a bitwise OR opération between the accumulator and the immédiate number ${t[0]} and stores the result in the accumulator.`,fr:`ori ${t[0]}: Effectue une opération OU binaire entre l'accumulateur et le nombre immédiat ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"XorImmediate",(...t)=>d({de:`xori ${t[0]}: Führt eine bitweise Exklusiv-Oder-Verknüpfung zwischen dem Akkumulator und der Zahl ${t[0]} durch und speichert das Ergebnis im Akkumulator.`,en:`xori ${t[0]}: Performs a bitwise exclusive OR opération between the accumulator and the immédiate number ${t[0]} and stores the result in the accumulator.`,fr:`xori ${t[0]}: Effectue une opération OU exclusif binaire entre l'accumulateur et le nombre immédiat ${t[0]} et stocke le résultat dans l'accumulateur.`})),r(S,"CmpImmediate",(...t)=>d({de:`cmpi ${t[0]}: Subtrahiert die Zahl ${t[0]} vom Akkumulator (ohne diesen zu verändern!) und setzt die Flags entsprechend (zero, negative, overflow).`,en:`cmpi ${t[0]}: Subtracts the immédiate number ${t[0]} from the accumulator (without changing it!) and sets the flags accordingly (zero, negative, overflow).`,fr:`cmpi ${t[0]}: Soustrait le nombre immédiat ${t[0]} de l'accumulateur (sans le changer !) et définit les drapeaux en conséquence (zero, négatif, dépassement).`})),r(S,"ShrImmediate",(...t)=>d({de:`shri ${t[0]}: Führt eine logische Rechtsverschiebung des Akkumulators um die Anzahl der Bits, die durch ${t[0]} angegeben ist, durch und speichert das Ergebnis im Akkumulator. Es werden Nullen von links aufgefüllt. Falls der Wert im Akkumulator negativ ist, werden nur die rechten 15 Bit verschoben und das linke Bit (Vorzeichenbit) bleibt erhalten.`,en:`shri ${t[0]}: Performs a logical right shift of the accumulator by the number of bits specified by ${t[0]} and stores the result in the accumulator. Zeros are filled in from the left. If the value in the accumulator is negative, only the rightmost 15 bits are shifted and the left bit (sign bit) remains unchanged.`,fr:`shri ${t[0]}: Effectue un décalage logique à droite de l'accumulateur du nombre de bits spécifié par ${t[0]} et stocke le résultat dans l'accumulateur. Des zéros sont remplis à partir de la gauche. Si la valeur dans l'accumulateur est négative, seuls les 15 bits les plus à droite sont décalés et le bit de gauche (bit de signe) reste inchangé.`})),r(S,"ShlImmediate",(...t)=>d({de:`shli ${t[0]}: Führt eine logische Linksverschiebung des Akkumulators um die Anzahl der Bits, die durch ${t[0]} angegeben ist, durch und speichert das Ergebnis im Akkumulator. Es werden Nullen von rechts aufgefüllt. Falls der Wert im Akkumulator negativ ist, werden nur die rechten 15 Bit verschoben und das linke Bit (Vorzeichenbit) bleibt erhalten.`,en:`shli ${t[0]}: Performs a logical left shift of the accumulator by the number of bits specified by ${t[0]} and stores the result in the accumulator. Zeros are filled in from the right. If the value in the accumulator is negative, only the rightmost 15 bits are shifted and the left bit (sign bit) remains unchanged.`,fr:`shli ${t[0]}: Effectue un décalage logique à gauche de l'accumulateur du nombre de bits spécifié par ${t[0]} et stocke le résultat dans l'accumulateur. Des zéros sont remplis à partir de la droite. Si la valeur dans l'accumulateur est négative, seuls les 15 bits les plus à droite sont décalés et le bit de gauche (bit de signe) reste inchangé.`})),r(S,"Not",()=>d({de:"not: Führt eine bitweise Negation des Akkumulators durch und speichert das Ergebnis im Akkumulator. Falls der Wert im Akkumulator kleiner als 0 ist, werden nur die rechten 15 Bit negiert.",en:"not: Performs a bitwise negation of the accumulator and stores the result in the accumulator. If the value in the accumulator is less than 0, only the rightmost 15 bits are negated.",fr:"not: Effectue une négation binaire de l'accumulateur et stocke le résultat dans l'accumulateur. Si la valeur dans l'accumulateur est inférieure à 0, seuls les 15 bits les plus à droite sont négatifs."})),r(S,"Jsr",(...t)=>d({de:`jsr ${t[0]}: Springt zu der Adresse ${t[0]} und speichert die Rücksprungadresse (die Adresse des nächsten Befehls) auf dem Stack.`,en:`jsr ${t[0]}: Jumps to address ${t[0]} and stores the return address (the address of the next instruction) on the stack.`,fr:`jsr ${t[0]}: Saute à l'adresse ${t[0]} et stocke l'adresse de retour (l'adresse de la prochaine instruction) sur la pile.`})),r(S,"Rts",()=>d({de:"rts: Holt eine Adresse vom Stack und springt zu ihr. In der Regel handelt es sich um eine Adresse, die zuvor mittels jsr auf den Stack gelegt wurde.",en:"rts: Retrieves an address from the stack and jumps to it. Typically, this is an address that was previously pushed onto the stack using jsr.",fr:"rts: Récupère une adresse de la pile et saute à celle-ci. En général, il s'agit d'une adresse qui a été précédemment poussée sur la pile à l'aide de jsr."})),r(S,"Rsv",(...t)=>d({de:`rsv ${t[0]}: Reserviert ${t[0]} viele Plätze auf dem Stack, indem es den Stack Pointer um ${t[0]} erniedrigt.`,en:`rsv ${t[0]}: Reserves ${t[0]} many slots on the stack by decrementing the stack pointer by ${t[0]}.`,fr:`rsv ${t[0]}: Réserve ${t[0]} emplacements sur la pile en décrémentant le pointeur de pile de ${t[0]}.`})),r(S,"Rel",(...t)=>d({de:`rel ${t[0]}: Gibt ${t[0]} Plätze auf dem Stack frei, indem es den Stack Pointer um ${t[0]} erhöht.`,en:`rel ${t[0]}: Frees ${t[0]} many slots on the stack by incrementing the stack pointer by ${t[0]}.`,fr:`rel ${t[0]}: Libère ${t[0]} emplacements sur la pile en incrémentant le pointeur de pile de ${t[0]}.`})),r(S,"Push",(...t)=>d({de:`push ${t[0]}: Legt die Zahl ${t[0]} auf den Stack, indem es den Stack Pointer erniedrigt und die Zahl an der neuen Adresse des Stack Pointers speichert.`,en:`push ${t[0]}: Pushes the number ${t[0]} onto the stack by decrementing the stack pointer and storing the number at the new address of the stack pointer.`,fr:`push ${t[0]}: Pousse le nombre ${t[0]} sur la pile en décrémentant le pointeur de pile et en stockant le nombre à la nouvelle adresse du pointeur de pile.`})),r(S,"Pop",(...t)=>d({de:`pop ${t[0]}: Holt eine Zahl vom Stack, indem es die Zahl an der aktuellen Adresse des Stack Pointers in den Akkumulator lädt und den Stack Pointer erhöht.`,en:`pop ${t[0]}: Pops a number from the stack by loading the number at the current address of the stack pointer into the accumulator and incrementing the stack pointer.`,fr:`pop ${t[0]}: Récupère un nombre de la pile en chargeant le nombre à l'adresse actuelle du pointeur de pile dans l'accumulateur et en incrémentant le pointeur de pile.`})),r(S,"LoadSpRelative",(...t)=>d({de:`loadsp ${t[0]}: Lädt die Zahl an der Adresse, die durch die Summe aus dem Stack Pointer und ${t[0]} angegeben ist, in den Akkumulator.`,en:`loadsp ${t[0]}: Loads the number at the address specified by the sum of the stack pointer and ${t[0]} into the accumulator.`,fr:`loadsp ${t[0]}: Charge le nombre à l'adresse spécifiée par la somme du pointeur de pile et de ${t[0]} dans l'accumulateur.`})),r(S,"StoreSpRelative",(...t)=>d({de:`storesp ${t[0]}: Speichert die Zahl im Akkumulator an der Adresse, die durch die Summe aus dem Stack Pointer und ${t[0]} angegeben ist.`,en:`storesp ${t[0]}: Stores the number in the accumulator at the address specified by the sum of the stack pointer and ${t[0]}.`,fr:`storesp ${t[0]}: Stocke le nombre dans l'accumulateur à l'adresse spécifiée par la somme du pointeur de pile et de ${t[0]}.`})),r(S,"Hold",()=>d({de:"hold: hält die Ausführung des Programms an.",en:"hold: halts the exécution of the program.",fr:"hold: arrête l'exécution du programme."})),r(S,"OriginPseudoDirective",()=>d({de:"origin address: setzt die Adresse, an der der nächste Befehl oder die nächste Zahl gespeichert wird, auf address. Diese Direktive darf nur einmal zu Beginn des Programms verwendet werden.",en:"origin address: sets the address where the next instruction or number will be stored to address. This directive may only be used once at the beginning of the program.",fr:"origin address: définit l'adresse où la prochaine instruction ou le prochain nombre sera stocké à address. Cette directive ne peut être utilisée qu'une seule fois au début du programme."})),r(S,"AssertPseudoDirective",()=>d({de:'Mit .assert kann überprüft werden, ob der Zustand des Speichers, der Register oder der Flags den Erwartungen entspricht. Beispielsyntax: .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Fehlermeldung" } überprüft, ob an Adresse 100 die Werte 10, 200 und 30 gespeichert sind, das negative-Flag gesetzt ist, das zero-Flag nicht gesetzt ist und der Wert im Akkumulator 20 ist.',en:'.assert can be used to check if the state of the memory, the registers or the flags meets the expectations. Example syntax: .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Error message" } checks if the values 10, 200 and 30 are stored at address 100, the negative flag is set, the zero flag is not set and the value in the accumulator is 20.',fr:`Avec .assert, il est possible de vérifier si l'état de la mémoire, des registres ou des drapeaux correspond aux attentes. Syntaxe d'exemple : .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Message d'erreur" } vérifie si les valeurs 10, 200 et 30 sont stockées à l'adresse 100, le drapeau négatif est défini, le drapeau zero n'est pas défini et la valeur dans l'accumulateur est 20.`})),r(S,"AssertHoverComment",()=>d({de:'```\n//Beispiel:\n.assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Error message" }\n// Mit .assert kann überprüft werden, ob der Zustand des Speichers, der Register oder der Flags den Erwartungen entspricht. Beispielsyntax: .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Fehlermeldung" } überprüft, ob an Adresse 100 die Werte 10, 200 und 30 gespeichert sind, das negative-Flag gesetzt ist, das zero-Flag nicht gesetzt ist und der Wert im Akkumulator 20 ist.',en:'```\n// Example:\n.assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Error message" }\n// .assert can be used to check if the state of the memory, the registers or the flags meets the expectations. Example syntax: .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Error message" } checks if the values 10, 200 and 30 are stored at address 100, the negative flag is set, the zero flag is not set and the value in the accumulator is 20.',fr:`\`\`\` // Exemple: .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Message d'erreur" } // Avec .assert, il est possible de vérifier si l'état de la mémoire, des registres ou des drapeaux correspond aux attentes. Syntaxe d'exemple : .assert { 100: [10, 200, 30], N: 1, Z: 0, A: 20, message: "Message d'erreur" } vérifie si les valeurs 10, 200 et 30 sont stockées à l'adresse 100, le drapeau négatif est défini, le drapeau zero n'est pas défini et la valeur dans l'accumulateur est 20.`})),r(S,"OriginHoverMessage",t=>d({de:`\`\`\` origin ${t} // Setzt die Adresse, an der der nächste Befehl oder die nächste Zahl gespeichert wird, auf ${t}.`,en:`\`\`\` origin ${t} // Sets the address where the next instruction or number will be stored to ${t}.`,fr:`\`\`\` origin ${t} // Définit l'adresse où la prochaine instruction ou le prochain nombre sera stocké à ${t}.`})),r(S,"WordDirectiveHoverMessage",t=>d({de:`\`\`\` word ${t} // Speichert die Zahl ${t} an der aktuellen Adresse. Es ist auch möglich, mehrere Zahlen kommasepariert anzugeben.`,en:`\`\`\` word ${t} // Stores the number ${t} at the current address. It is also possible to specify multiple numbers separated by commas.`,fr:`\`\`\` word ${t} // Stocke le nombre ${t} à l'adresse actuelle. Il est également possible de spécifier plusieurs nombres séparés par des virgules.`})),r(S,"LoadCompletionComment",()=>d({de:"Lädt einen Wert in den Akkumulator.",en:"Loads a value into the accumulator.",fr:"Charge une valeur dans l'accumulateur."})),r(S,"StoreCompletionComment",()=>d({de:"Schreibt den Wert des Akkumulators in den Speicher.",en:"Stores the value of the accumulator in the memory.",fr:"Stocke la valeur de l'accumulateur dans la mémoire."})),r(S,"AddCompletionComment",()=>d({de:"Addiert einen Wert zum Akkumulator.",en:"Adds a value to the accumulator.",fr:"Ajoute une valeur à l'accumulateur."})),r(S,"SubCompletionComment",()=>d({de:"Subtrahiert einen Wert vom Akkumulator.",en:"Subtracts a value from the accumulator.",fr:"Soustrait une valeur de l'accumulateur."})),r(S,"MulCompletionComment",()=>d({de:"Multipliziert den Akkumulator mit einem Wert.",en:"Multiplies the accumulator with a value.",fr:"Multiplie l'accumulateur avec une valeur."})),r(S,"DivCompletionComment",()=>d({de:"Dividiert den Akkumulator durch einen Wert.",en:"Divides the accumulator by a value.",fr:"Divise l'accumulateur par une valeur."})),r(S,"ModCompletionComment",()=>d({de:"Dividiert den Akkumulator durch einen Wert und speichert den Rest der Division im Akkumulator.",en:"Divides the accumulator by a value and stores the remainder of the division in the accumulator.",fr:"Divise l'accumulateur par une valeur et stocke le reste de la division dans l'accumulateur."})),r(S,"AndCompletionComment",()=>d({de:"Führt eine bitweise Und-Verknüpfung zwischen dem Akkumulator und einem Wert durch und speichert das Ergebnis im Akkumulator.",en:"Performs a bitwise AND opération between the accumulator and a value and stores the result in the accumulator.",fr:"Effectue une opération ET binaire entre l'accumulateur et une valeur et stocke le résultat dans l'accumulateur."})),r(S,"OrCompletionComment",()=>d({de:"Führt eine bitweise Oder-Verknüpfung zwischen dem Akkumulator und einem Wert durch und speichert das Ergebnis im Akkumulator.",en:"Performs a bitwise OR opération between the accumulator and a value and stores the result in the accumulator.",fr:"Effectue une opération OU binaire entre l'accumulateur et une valeur et stocke le résultat dans l'accumulateur."})),r(S,"XorCompletionComment",()=>d({de:"Führt eine bitweise Exklusiv-Oder-Verknüpfung zwischen dem Akkumulator und einem Wert durch und speichert das Ergebnis im Akkumulator.",en:"Performs a bitwise exclusive OR opération between the accumulator and a value and stores the result in the accumulator.",fr:"Effectue une opération OU exclusif binaire entre l'accumulateur et une valeur et stocke le résultat dans l'accumulateur."})),r(S,"CmpCompletionComment",()=>d({de:"Subtrahiert einen Wert vom Akkumulator (ohne diesen zu verändern!) und setzt die Flags entsprechend (zero, negative, overflow).",en:"Subtracts a value from the accumulator (without changing it!) and sets the flags accordingly (zero, negative, overflow).",fr:"Soustrait une valeur de l'accumulateur (sans le changer !) et définit les drapeaux en conséquence (zero, négatif, dépassement)."})),r(S,"WordCompletionComment",()=>d({de:'Speichert eine Zahl an der aktuellen Adresse. Es ist auch möglich, mehrere Zahlen kommasepariert anzugeben, z.B. "word 10, 20, 30".',en:'Stores a number at the current address. It is also possible to specify multiple numbers separated by commas, e.g. "word 10, 20, 30".',fr:`Stocke un nombre à l'adresse actuelle. Il est également possible de spécifier plusieurs nombres séparés par des virgules, par exemple "word 10, 20, 30".`})),r(S,"Architecture16BitSigned",()=>d({de:"Daten: 16 Bit mit Vorzeichen, Adressen: 16 Bit ohne Vorzeichen",en:"Data: 16-bit signed, addresses: 16-bit unsigned",fr:"Données: 16 bits avec signe, adresses: 16 bits sans signe"})),r(S,"Architecture16BitUnsigned",()=>d({de:"Daten und Adressen: 16 Bit ohne Vorzeichen",en:"Data and addresses: 16-bit unsigned",fr:"Données et adresses: 16 bits sans signe"})),r(S,"Architecture8BitUnsigned",()=>d({de:"Daten: 8 Bit ohne Vorzeichen, Adressen: 16 Bit ohne Vorzeichen",en:"Data: 8-bit unsigned, addresses: 16-bit unsigned",fr:"Données: 8 bits sans signe, adresses: 16 bits sans signe"})),r(S,"Architecture8BitSigned",()=>d({de:"Daten: 8 Bit mit Vorzeichen, Adressen: 16 Bit ohne Vorzeichen",en:"Data: 8-bit signed, addresses: 16-bit unsigned",fr:"Données: 8 bits avec signe, adresses: 16 bits sans signe"})),r(S,"ArchitectureHeading",()=>d({de:"Speicherarchitektur:",en:"Memory architecture:",fr:"Architecture de la mémoire:"})),r(S,"SpExpectedInStackRelativeAddress",()=>d({de:"Um Stack-relative Adressierung zu erhalten, wird hier in Klammern SP erwartet.",en:"To obtain stack-relative addressing, SP is expected here in parentheses.",fr:"Pour obtenir une adressage relative à la pile, SP est attendu ici entre parenthèses."})),r(S,"StackRelativeAddressingOnlySupportedForLoadAndStore",t=>d({de:`Stack-relative Adressierung wird nur für Load- und Store-Befehle unterstützt, nicht für ${t}.`,en:`Stack-relative addressing is only supported for load and store instructions, not for ${t}.`,fr:`L'adressage relative à la pile n'est pris en charge que pour les instructions de chargement et de stockage, et non pour ${t}.`}));class Zi{constructor(t,e,i,n,s,a){this.identifier=t,this.bitsPerCell=e,this.signed=i,this.valueRangeMin=n,this.valueRangeMax=s,this.cellsPerAddressOperand=a}isValidValue(t){return t>=this.valueRangeMin&&t<=this.valueRangeMax}isValidAddress(t){return t>=0&&t<=65536}static getArchitectureByName(t){return this.getArchitectures().find(e=>e.identifier===t)??this.getArchitectures()[0]}static getArchitectures(){return[new Uy,new Qy,new Zy,new Yy]}}class Uy extends Zi{constructor(){super("16-bit signed",16,!0,-32768,32767,1)}getLocalizedName(){return S.Architecture16BitSigned}sanitizeValue(t){return(Math.floor(t)+32768)%65536-32768}loadAddressOperand(t,e){if(t<0||t>=e.length)throw new Error(`Memory read error: PC ${t} out of bounds (valid adresses: 0-${e.length-1})`);return e[t]}addressOperandToMemoryCellValues(t){return[t]}}class Qy extends Zi{constructor(){super("16-bit unsigned",16,!1,0,65535,1)}getLocalizedName(){return S.Architecture16BitUnsigned}sanitizeValue(t){return Math.floor(Math.abs(t))%65536}loadAddressOperand(t,e){if(t<0||t>=e.length)throw new Error(`Memory read error: PC ${t} out of bounds (valid adresses: 0-${e.length-1})`);return e[t]}addressOperandToMemoryCellValues(t){return[t]}}class Yy extends Zi{constructor(){super("8-bit unsigned",8,!1,0,255,2)}getLocalizedName(){return S.Architecture8BitUnsigned}sanitizeValue(t){return Math.floor(Math.abs(t))%256}loadAddressOperand(t,e){if(t<0||t>e.length-2)throw new Error(`Memory read error: PC ${t} out of bounds (valid adresses: 0-${e.length-2})`);return e[t]*256+e[t+1]}addressOperandToMemoryCellValues(t){return[Math.floor(t/256),t%256]}}class Zy extends Zi{constructor(){super("8-bit signed",8,!0,-128,127,2)}getLocalizedName(){return S.Architecture8BitSigned}sanitizeValue(t){return(Math.floor(t)+128)%256-128}loadAddressOperand(t,e){if(t<0||t>e.length-2)throw new Error(`Memory read error: PC ${t} out of bounds (valid adresses: 0-${e.length-2})`);return e[t]*256+e[t+1]}addressOperandToMemoryCellValues(t){return[Math.floor(t/256),t%256]}}var Xy={userClassSchoolDefault:["user","class","school","default"],classSchoolUserDefault:["class","school","user","default"],schoolDefault:["school","default"]},fm={"editor.hoverVerbosity.showHelpOnKeywordsAndOperators":!0,"editor.hoverVerbosity.showMethodDeclaration":"declarationsAndComments","editor.hoverVerbosity.showClassDeclaration":"declarationsAndComments","editor.contextSensitiveHelp.StructureStatements":"true","editor.contextSensitiveHelp.ParameterHints":"true","editor.autoClosingBrackets":"beforeWhitespace","editor.autoClosingQuotes":"beforeWhitespace","editor.autoSemicolons":!0,"editor.bracketPairLines":"vertical","editor.stickyScroll":"on","editor.quickFix.getterAndSetter":"offer","editor.quickFix.generateConstructor":"offer","editor.stopRunningProgramOnWhenEditingSourcecode":"yes","formatter.forceSpacesAfterIfForWhileDo":"1","classDiagram.typeConvention":"java","classDiagram.background":"transparent","classDiagram.omitVoidReturnType":"omit","classDiagram.drawCompositionDiamond":"yes","explorer.fileOrder":"user-defined","explorer.workspaceOrder":"user-defined","compiler.shadowedSymbolErrorLevel":"warning","output.clearOutputAfterWorkspaceChange":"no","programmingLanguages.java.enabled":"yes","programmingLanguages.ByAssembly.enabled":"no","programmingLanguages.ByAssembly.defaultArchitecture":Zi.getArchitectures()[0].identifier,"schooladmin.functionality.pruefungen":"enabled"},Zg={"editor.quickFix.getterAndSetter":"classSchoolUserDefault","editor.quickFix.generateConstructor":"classSchoolUserDefault","editor.hoverVerbosity.showHelpOnKeywordsAndOperators":"classSchoolUserDefault","editor.hoverVerbosity.showMethodDeclaration":"classSchoolUserDefault","editor.hoverVerbosity.showClassDeclaration":"classSchoolUserDefault","editor.contextSensitiveHelp.StructureStatements":"classSchoolUserDefault","editor.contextSensitiveHelp.ParameterHints":"classSchoolUserDefault","schooladmin.functionality.pruefungen":"schoolDefault"};class Jy{getValue(t,e){return fm[t]}}var Ra=0,Yo=1,ar=2,bs=3,Bi=4,mh=5,Ka=6,Mr=7,Xo=8,or=9,fn=10,ev=[[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1],[!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1],[!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1],[!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0],[!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1],[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0]],Dp=["","void","boolean","char","byte","short","int","long","float","double","string"],dc=["","","Boolean","Character","Byte","Short","Integer","Long","Float","Double","String"],Dr={Boolean:ar,Character:bs,Byte:Bi,Short:mh,Integer:Ka,Long:Mr,Float:Xo,Double:or,String:fn},Li={void:Yo,boolean:ar,char:bs,byte:Bi,short:mh,int:Ka,long:Mr,float:Xo,double:or,string:fn},jp=[p.assignment,p.plusAssignment,p.minusAssignment,p.multiplicationAssignment,p.divisionAssignment,p.moduloAssignment],tv=[p.and,p.or,p.XOR],iv=[p.shiftLeft,p.shiftRight,p.shiftRightUnsigned];p.plusAssignment,p.minusAssignment,p.multiplicationAssignment,p.divisionAssignment,p.moduloAssignment,p.assignment;var Mp=[p.lower,p.greater,p.lowerOrEqual,p.greaterOrEqual,p.notEqual,p.equal];class nv{constructor(t,e,i,n){r(this,"progressManager");r(this,"voidType");r(this,"charType");r(this,"intType");r(this,"floatType");r(this,"doubleType");r(this,"booleanType");r(this,"stringType");r(this,"nullType");r(this,"throwableType");r(this,"objectType");r(this,"assertionsType");r(this,"stringNonPrimitiveType");r(this,"iterableType");r(this,"iteratorType");r(this,"primitiveStringClass",ch);r(this,"primitiveTypes",[]);r(this,"currentSymbolTable");r(this,"symbolTableStack",[]);r(this,"settingStore");this.module=t,this.libraryTypestore=e,this.compiledTypesTypestore=i,this.settingStore=n||new Jy,this.voidType=this.libraryTypestore.getType("void"),this.charType=this.libraryTypestore.getType("char"),this.intType=this.libraryTypestore.getType("int"),this.floatType=this.libraryTypestore.getType("float"),this.doubleType=this.libraryTypestore.getType("double"),this.booleanType=this.libraryTypestore.getType("boolean"),this.stringType=this.libraryTypestore.getType("string"),this.nullType=this.libraryTypestore.getType("null"),this.throwableType=this.libraryTypestore.getType("Throwable"),this.objectType=this.libraryTypestore.getType("Object"),this.stringNonPrimitiveType=this.libraryTypestore.getType("String"),this.assertionsType=this.libraryTypestore.getType("Assertions"),this.iterableType=this.libraryTypestore.getType("Iterable"),this.iteratorType=this.libraryTypestore.getType("Iterator"),this.primitiveTypes.push(this.voidType);for(let s=1;s=0)return this.compileAssignment(t,e,b,A,u,m,n,s,a);if(g&&e.getConstantValue()!==null&&(t=this.unbox(t)),f&&t.getConstantValue()!==null&&(e=this.unbox(e)),n==p.equal||n==p.notEqual){if(l==this.nullType&&(!h.isPrimitive||h==this.stringType)||h==this.nullType&&(!l.isPrimitive||l==this.stringType))return new gn(C,!0).applyToSnippet(this.booleanType,a,t,e);if(b==0&&A!=0||b!=0&&A==0){this.pushError(v.badOperandTypesForBinaryOperator($e[n],l.toString(),h.toString()),"error",s);return}return new gn(C,!0).applyToSnippet(this.booleanType,a,t,e)}if(b==fn||A==fn)return this.compileBinaryOperationWithStrings(t,e,b,A,u,m,n,s,a);if((b==Ra||A==Ra)&&this.pushError(v.operatorNotFeasibleForOperands(C,u,m),"error",s),tv.indexOf(n)>=0)return this.compileLogicOperation(t,e,b,A,u,m,n,s,a);if((b==ar||A==ar)&&this.pushError(v.operatorNotFeasibleForOperands(C,u,m),"error",s),b==bs&&(t=this.convertCharToNumber(t),b=Ka),A==bs&&(e=this.convertCharToNumber(e),A=Ka),Mp.indexOf(n)>=0)return new gn(C,!1).applyToSnippet(this.booleanType,a,t,e);if(iv.indexOf(n)>=0){if(b>=Xo||A>=Xo){this.pushError(v.operatorNotFeasibleForOperands(C,u,m),"error",s);return}return new gn(C,!1).applyToSnippet(l,a,t,e)}let w=this.primitiveTypes[Math.max(b,A)];return new gn(C,!1).applyToSnippet(w,a,t,e)}compileInstanceOf(t,e,i){let n=t.type,s=e.type;if(!(s instanceof ei)){this.pushError(v.rightSideOfInstanceofError(),"error",i.operatorRange);return}if(!(n instanceof we)){this.pushError(v.leftSideOfInstanceofError(),"error",i.operatorRange);return}let a="";if(i.instanceofPatternIdentifier){let l=new Jr(i.instanceofPatternIdentifier,i.instanceofPatternIdentifierRange,s.nonPrimitiveType,this.currentSymbolTable);l.isFinal=!0,this.registerUsagePosition(l,i.instanceofPatternIdentifierRange),this.currentSymbolTable.getStackFrame().addSymbol(l,"localVariable"),a=", "+V.stackBase+" + "+l.stackframePosition,i.instanceofVariables||(i.instanceofVariables=[]),i.instanceofVariables.push(l)}return ye.frame(t,`${$.instanceof}(§1, "${s.nonPrimitiveType.pathAndIdentifierAsDotSeparatedString}"${a})`,this.booleanType)}compileLogicOperation(t,e,i,n,s,a,l,h,u){if(i!=ar||n!=ar){this.pushError(v.operatorNotFeasibleForOperands($e[l],s,a),"error",h);return}let m=t.isConstant()&&e.isConstant();if(l==p.XOR||m)return new gn($e[l],!1).applyToSnippet(this.booleanType,u,t,e);if(t.isPureTermWithoutPop()&&e.isPureTermWithoutPop())return new gn($e[l],!1).applyToSnippet(this.booleanType,u,t,e);let g=new ae([],u,this.booleanType);t.ensureFinalValueIsOnStack(),g.addParts(t);let f=new Ge;return l==p.and?g.addStringPart(`if(!${V.stack}.pop()){${V.stack}.push(false);`,oe.instance):g.addStringPart(`if(${V.stack}.pop()){${V.stack}.push(true);`,oe.instance),g.addParts(f.getJumpToSnippet()),g.addStringPart("};",oe.instance),g.addNextStepMark(),e.ensureFinalValueIsOnStack(),g.addParts(e),g.addNextStepMark(),g.addParts(f),g.finalValueIsOnStack=!0,g}compileBinaryOperationWithStrings(t,e,i,n,s,a,l,h,u){if(l!=p.plus&&Mp.indexOf(l)<0){this.pushError(v.operatorNotFeasibleForOperands($e[l],s,a),"error",h);return}i==Ra&&(t=this.wrapWithToStringCall(t,"string")),n==Ra&&(e=this.wrapWithToStringCall(e,"string"));let m=l==p.plus?this.stringType:this.booleanType;return new gn($e[l],!1).applyToSnippet(m,u,t,e)}wrapWithArrayToString(t,e){let i;if(t.type.elementType.isPrimitive)i=ye.frame(t,`${$.primitiveArrayToString}(§1)`);else{let n=ye.frame(t,`${$.objectArrayToString}(§1); `);n.finalValueIsOnStack=!0;let s=new ae([n]);s.addNextStepMark(),i=s}return e=="String"&&(i=ye.frame(i,`new ${$.classes}["String"](§1)`),i.type=this.stringNonPrimitiveType),i}wrapWithToStringCall(t,e){var s,a;if(((s=t.type)==null?void 0:s.identifier)=="String")return e=="string"?ye.frame(t,`${$.nullstringIfNull}(§1)`,this.stringType):t;if(((a=t.type)==null?void 0:a.identifier)=="string")return e=="String"?ye.frame(t,`new ${$.classes}["String"](§1)`,this.stringType):t;if(t.isConstant()){let l=t.getConstantValue();return e=="string"?new N("",t.range,this.stringType,l):l===null?(t.type=this.stringNonPrimitiveType,t):new N(`new ${$.classes}["String"]("${""+l}")`,t.range,this.stringNonPrimitiveType)}let i=ye.frame(t,`${$.toString}(__t, undefined, §1); `,this.stringNonPrimitiveType);i.finalValueIsOnStack=!0;let n=new ae(i);return n.addNextStepMark(),e=="string"?ye.frame(n,`(§1 ||${$.classes}["String"].null).value`,this.stringType):n}compileAssignment(t,e,i,n,s,a,l,h,u){var b;if(!t.isLefty){this.pushError(v.cantAssignValueToTerm(),"error",h);return}let m=$e[l];if(l==p.assignment)return this.canCastTo(e.type,t.type,"implicit")?e=this.compileCast(e,t.type,"implicit"):this.pushError(v.cantCastType(e.type.identifier,t.type.identifier),"error",e.range),new gn(m,!1).applyToSnippet(t.type,u,t,e);if(!t.type.isPrimitive){if(t.type==this.stringNonPrimitiveType&&l==p.plusAssignment){if(!this.canCastTo(e.type,this.stringType,"implicit")){this.pushError(v.cantCastRightSideToString(),"error",e.range);return}return e=this.compileCast(e,this.stringType,"implicit"),new zs(`§1 = ${$.checkNPE("§1",t.range)}.add(§2)`).applyToSnippet(t.type,u,t,e)}return this.pushError(v.leftOperatorNotFitForAttribute(m),"error",h),t}let g=Li[t.type.identifier];e=this.unbox(e);let f=Li[e.type.identifier];return g==fn?((b=e.type)!=null&&b.isPrimitive||(e=this.wrapWithToStringCall(e,"string")),new gn(m,!1).applyToSnippet(t.type,u,t,e)):f?gor?(this.pushError(v.leftOperatorNotFitForAttribute(m),"error",h),t):(f==bs&&(e=this.convertCharToNumber(e)),g=Bi&&g<=Mr?new zs(`§1 = Math.trunc(§1/(§2 || ${$.throwArithmeticException}("${v.divideByZero()}", ${u.startLineNumber}, ${u.startColumn}, ${u.endLineNumber}, ${u.endColumn})))`).applyToSnippet(t.type,u,t,e):new gn(m,!1).applyToSnippet(t.type,u,t,e)):(this.pushError(v.rightOperatorNotFitForAttribute(m),"error",h),t)}compileCast(t,e,i,n=!1){if(!t||!t.type||!e)return t;let s=t.type;if(t.type==e)return t;if(!s.isPrimitive){if(s.identifier=="String"&&e==this.stringType)return new Oe("(§1?.value ?? null)").applyToSnippet(this.stringType,t.range,t);if(s==this.nullType)return t;if(e.isPrimitive)if(Dr[s.identifier]){if(e==this.stringType)return n?new Oe('((§1?.value ?? null) + "")').applyToSnippet(this.stringType,t.range,t):(this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t);t=this.unbox(t)}else{if(s.identifier=="Object"){let u=Li[e.identifier],m=dc[u],g=t.range;return ye.frame(t,`${$.checkCast}(§1, "${m}", ${g.startLineNumber}, ${g.startColumn}, ${g.endLineNumber}, ${g.endColumn}).value`,e)}else this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range);return t}else return i=="explicit"&&this.canCastTo(t.type,e,"explicit")||i=="implicit"&&this.canCastTo(t.type,e,"implicit")||this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t}if(!e.isPrimitive){let h=Dr[e.identifier],u=Li[s.identifier],m=h;if(u==m||e.identifier=="Object")return this.box(t);if(u>=Bi&&u<=or&&m>=Bi&&m<=or&&u<=m)return t.type=this.primitiveTypes[h],this.box(t);if(e==this.stringNonPrimitiveType||s==this.stringType){let g=s==this.stringType?"§1":'"" + (§1)',f=t.getConstantValue(),b=ye.frame(t,`new ${$.classes}["String"](${g})`,this.stringNonPrimitiveType);return typeof f=="string"&&b instanceof N&&b.setConstantValue(f),b}return this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t}let a=Li[t.type.identifier],l=Li[e.identifier];if(a==l)return i=="explicit"&&this.pushError(v.unneccessaryCast(),"info",t.range),t;if(a==bs)return l==fn?t:l>=Bi&&l<=or?this.convertCharToNumber(t):(this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t);if(l==bs)return[Bi,mh,Ka,Mr].indexOf(a)>=0?this.convertNumberToChar(t):(this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t);if(l==fn)return t.isConstant()?new N(`"${t.getConstantValue()}"`,t.range,this.stringType,""+t.getConstantValue):new Oe('("" + (§1))').applyToSnippet(this.stringType,t.range,t);if(a==fn||a==Yo||l==Yo||a==ar||l==ar)return this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t;if(a<=l)return t.type=e,t;if(i=="implicit")return this.pushError(v.cantCastType(s.identifier,e.identifier),"error",t.range),t;if(t.isConstant()){let h=t.getConstantValue();return new N(""+h,t.range,e,h)}else{let h;switch(l){case Bi:h=a<=Mr?new Oe("((§1 + 128) % 256 - 128)"):new Oe("((Math.trunc(§1) + 128) % 256 - 128)");break;case mh:h=a<=Mr?new Oe("((§1 + 0x8000) % 0x10000 - 0x8000)"):new Oe("((Math.trunc(§1) + 0x80000000) % 0x100000000 - 0x80000000)");break;case Ka:h=a<=Mr?new Oe("((§1) | 0)"):new Oe("(Math.trunc(§1) | 0)");break;case Mr:h=new Oe("Math.trunc(§1)");break;case Xo:h=new Oe("Math.fround(§1)");break}return h?h.applyToSnippet(e,t.range,t):t}}canCastTo(t,e,i){if(!t||!e)return!1;let n=Li[t.identifier]||Dr[t.identifier],s=Li[e.identifier]||Dr[e.identifier];return s==fn&&(i=="explicit"||n==fn)?!0:(!t.isPrimitive||t==this.stringType)&&!e.isPrimitive?t==this.nullType?!0:(t==this.stringType&&(t=this.primitiveStringClass.type),t instanceof Ie||e instanceof Ie?t instanceof Ie&&e instanceof Ie?t.dimension==e.dimension&&this.canCastTo(t.elementType,e.elementType,i):t instanceof Ie?e.identifier=="Object":!1:i=="explicit"?t.canExplicitlyCastTo(e):t.canImplicitlyCastTo(e)):e==this.stringType&&t==this.nullType||t.isPrimitive&&e.identifier=="Object"||t.identifier=="Object"&&e.isPrimitive?!0:t.isPrimitive&&e instanceof nt?(e.catches&&e.catches.push(this.getBoxedType(t)),!0):!n||!s?!1:n==s?!0:i=="explicit"?n==ar?!1:n==bs?s>=Bi&&s<=or:!0:ev[n][s]}anyOperandHasVoidType(t,e,i,n){return t==Yo?(this.pushError(v.leftExpressionHasNoType($e[i]),"error",n),!0):e==Yo?(this.pushError(v.rightExpressionHasNoType($e[i]),"error",n),!0):!1}pushError(t,e="error",i){let n=i.kind?i.range:i;const s={message:t.message,id:t.id,range:n,level:e};return this.module.errors.push(s),s}unbox(t){if(!t||!t.type)return t;let e=Dr[t.type.identifier];if(!e)return t;let i=this.primitiveTypes[e];return e==fn?ye.frame(t,`(§1 || ${$.classes}["String"].null).value`,i):ye.frame(t,`${$.checkNPE("§1",t.range)}.value`,i)}getUnboxedType(t){if(!t)return;let e=Dr[t.identifier];if(e)return this.primitiveTypes[e]}hasBoxedType(t){return t.type?Dr[t.type.identifier]!=null:!1}box(t){if(!t.type)return t;let e=Li[t.type.identifier];if(!e)return t;let i=dc[e];if(!i||i.length==0)return t;let n=t.getConstantValue();t instanceof N&&t.setConstantValue(n||null);let s=this.libraryTypestore.getType(i);return e==fn?ye.frame(t,`${$.primitiveStringToStringObject}(§1)`,s):ye.frame(t,`new ${$.classes}["${i}"](§1)`,s)}getBoxedType(t){if(!t)return;let e=Li[t.identifier];if(e)return this.libraryTypestore.getType(dc[e])}convertCharToNumber(t){if(!t.type||t.type.identifier!="char")return t;if(t.isConstant()){let e=t.getConstantValue().charCodeAt(0);return new N(e+"",t.range,this.intType,e)}return ye.frame(t,"§1.charCodeAt(0)",this.intType)}convertNumberToChar(t){if(!t.type)return t;if(t.isConstant()){let e=String.fromCharCode(t.getConstantValue());return new N(`"${e}"`,t.range,this.charType,e)}return ye.frame(t,"String.fromCharCode(§1)",this.charType)}isNumberPrimitiveType(t){if(!t)return!1;let e=Li[t.identifier];return e?e>=Bi&&e<=or:!1}compileUnaryOperator(t,e){if(!t)return;if(!t.type){this.pushError(v.cantGetTypeOfExpression(),"error",t.range);return}t=this.unbox(t);let i=$e[e],n=Li[t.type.identifier];if(!n){this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range);return}if(e==p.not)return n==ar?this.applyUnaryOperatorConsideringConstantFolding("!",this.booleanType,t.range,t):(this.pushError(v.notOperatorNeedsBooleanOperands(t.type.identifier),"error",t.range),t);if([p.plusPlus,p.minusMinus].indexOf(e)>=0){if(!t.isLefty){this.pushError(v.plusPlusMinusMinusOnlyForLeftyOperands(i),"error",t.range);return}if(n>=Bi&&n<=or)return new Oe(i+"§1").applyToSnippet(t.type,t.range,t);this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range);return}if([p.minus,p.plus].indexOf(e)>=0){if(n>=Bi&&n<=or)return this.applyUnaryOperatorConsideringConstantFolding(i,t.type,t.range,t);this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range);return}if(n>=Bi&&n<=Mr)return this.applyUnaryOperatorConsideringConstantFolding(i,t.type,t.range,t);this.pushError(v.operatorNotUsableForOperands(i,t.type.identifier),"error",t.range)}applyUnaryOperatorConsideringConstantFolding(t,e,i,n){if(n.isConstant()){let s=n.getConstantValue(),a;switch(t){case"-":a=-s;break;case"+":return n;case"~":a=~s;break;case"!":a=!s;break}return new N(""+a,i,e,a)}else return new Oe(t+"(§1)").applyToSnippet(e,i,n)}isAssignmentOperator(t){return jp.indexOf(t)>=0}registerUsagePosition(t,e){t.module instanceof qo?this.module.systemSymbolsUsageTracker.registerUsagePosition(t,this.module.file,e):this.module.compiledSymbolsUsageTracker.registerUsagePosition(t,this.module.file,e)}}class Uh extends $b{constructor(t,e,i,n,s,a){super(e,n),this.module=t,this.classContext=s,this.methodContext=a,n&&(s||(this.classContext=n.classContext),a||(this.methodContext=n.methodContext)),n||t.symbolTables.push(this),i&&(this.stackframe=new Ib(s?1:0))}getSymbolsOnStackframeForDebugger(){var e;let t=[];if(this.identifierToSymbolMap.forEach((i,n)=>{t.push(i)}),this.classContext&&this.classContext!=((e=this.parent)==null?void 0:e.classContext)&&!(this.classContext instanceof ei)){let i=new Jr("this",this.classContext.identifierRange,this.classContext,this);i.stackframePosition=0,t.push(i)}return t}findSymbolButNotInParentScopes(t){return this.identifierToSymbolMap.get(t)}findSymbol(t){return this.findSymbolIntern(t,p.keywordPrivate,!0,0)}findSymbolIntern(t,e,i,n){let s=this.identifierToSymbolMap.get(t);if(s)return{symbol:s,outerClassLevel:n,symbolTable:this};let a=this.methodContext;if(a!=null){let l=this.parent;for(;l&&l.methodContext==a;){if(s=l.identifierToSymbolMap.get(t),s)return{symbol:s,outerClassLevel:n,symbolTable:l};l=l.parent}}if(this.classContext&&i){let l=this.classContext.getField(t,p.keywordPrivate);if(l)return{symbol:l,outerClassLevel:n,symbolTable:null}}if(this.parent)return this.parent.classContext==this.classContext?this.parent.findSymbolIntern(t,e,!1,n):this.parent.findSymbolIntern(t,p.keywordProtected,!0,n+1)}addSymbol(t){var e;super.addSymbol(t),t instanceof Rh&&((e=this.getStackFrame())==null||e.addSymbol(t,t instanceof ls?"parameter":"localVariable"))}addSymbolWithoutAddingToStackframe(t){super.addSymbol(t)}insertInvisibleParameter(){var t;(t=this.getStackFrame())==null||t.insertInvisibleParameter()}getStackFrame(){let t=this;for(;!t.stackframe&&t.parent;)t=t.parent;return t.stackframe}getLocalVariableCompletionItems(t){let e=[];if(this.identifierToSymbolMap.forEach((i,n)=>{if(e.push({label:i.identifier,kind:P.CompletionItemKind.Variable,detail:i.getDeclaration(),insertText:i.identifier,filterText:i.identifier,range:t}),i.type&&i.type.dimension!==void 0){let s=i.type.dimension;e.push({label:i.identifier+"[]".repeat(s),kind:P.CompletionItemKind.Variable,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,detail:i.getDeclaration(),insertText:i.identifier+this.getArraySnippetEnding(s),filterText:i.identifier,range:t})}}),this.parent){let i=this.parent.getLocalVariableCompletionItems(t).filter(n=>e.findIndex(s=>s.insertText==n.insertText)==-1);e=e.concat(i)}return e}getArraySnippetEnding(t){let e="";for(let i=0;i0?n=this.compileArrayLiteral(this.nextArrayLiteralTypeExpected.pop(),e):this.pushError(v.arrayLiteralTypeUnknown(),"error",e.range);break;case p.leftBracket:n=this.compileBrackets(e);break}return n&&e.parenthesisNeeded&&(n=ye.frame(n,"(§1)")),n}compileBrackets(e){let i=this.compileTerm(e.nodeInsideBrackets);return i!=null&&i.type&&!i.type.isPrimitive&&this.addTypePositionByTypeAndRange(i.type,e.range),e.nodeInsideBrackets&&(e.instanceofVariables=e.nodeInsideBrackets.instanceofVariables,e.negatedInstanceofVariables=e.nodeInsideBrackets.negatedInstanceofVariables),i}addTypePosition(e){if(!e)return;let i=e.type;i&&(i.identifier=="string"&&(i=this.libraryTypestore.getType("String")),e.range&&this.module.addTypePosition(U.getEndPosition(e.range),i))}addTypePositionByTypeAndRange(e,i){e&&(e.identifier=="string"&&(e=this.libraryTypestore.getType("String")),i&&this.module.addTypePosition(U.getEndPosition(i),e))}compileKeywordSuper(e){let i=this.currentSymbolTable.classContext;if(!i||!(i instanceof mt||i instanceof xi)){this.pushError(v.superOnlyInClassesOrEnums(),"error",e);return}let n=new N(`${$.elementRelativeToStackbase(0)}`,e.range,i.getExtends());return n.isSuperKeywordWithLevel=1,n}compileKeywordThis(e){let i=this.currentSymbolTable.classContext;if(!i||!(i instanceof mt||i instanceof xi)){this.pushError(v.thisOnlyInClassesOrEnums(),"error",e);return}return new N(`${$.elementRelativeToStackbase(0)}`,e.range,i)}compileExplicitCast(e){let i=this.compileTerm(e.objectToCast),n=i==null?void 0:i.type,s=e.castType.resolvedType;if(!(!i||!n||!s)){if(n instanceof we&&s instanceof we)return this.compileExplicitCastFromObjectToObject(e,i,n,s);if(n.identifier=="Object"&&s instanceof Ie){let a=e.range;return ye.frame(i,`${$.checkCastToArray}(§1, ${a.startLineNumber}, ${a.startColumn}, ${a.endLineNumber}, ${a.endColumn})`,s)}if(this.canCastTo(n,s,"explicit"))return this.compileCast(i,s,"explicit");this.pushError(v.cantCastFromTo(n.identifier,s.identifier),"error",e)}}compileExplicitCastFromObjectToObject(e,i,n,s){if(n.fastExtendsImplements(s.identifier))return this.pushError(v.unneccessaryCast(),"info",e),i;if(n.identifier==s.identifier)return i;if(s instanceof nt){this.pushError(v.cantCastFromTo(n.identifier,s.identifier),"error",e);return}let a=e.range;return ye.frame(i,`${$.checkCast}(§1, "${s.pathAndIdentifierAsDotSeparatedString}", ${a.startLineNumber}, ${a.startColumn}, ${a.endLineNumber}, ${a.endColumn})`,s)}compileNewObjectNode(e,i){let n=this.getParameterValueSnippets(e),s=n.snippets;if(!e.type.resolvedType)return;let a=e.type.resolvedType;if(!a)return;if(!(a instanceof mt)){this.pushError(v.cantInstantiateFromType(a.identifier),"error",e.range);return}a.isAbstract()&&this.pushError(v.cantInstantiateFromAbstractClass(),"error",e.range);let l=this.convertParameterValueSnippetsToParameterTypes(a.identifier,s);if(!l)return;let h=this.searchMethod(a.identifier,a,l,!0,!1,!0,e.range),u=h.best;if(n.withErrors)return e.rightBracketPosition&&this.module.pushMethodCallPosition(e.klassIdentifierRange,e.commaPositions,h.possible,e.rightBracketPosition,u),new N("null",e.range,a);if(u&&this.registerUsagePosition(u,e.klassIdentifierRange),this.module.pushMethodCallPosition(e.klassIdentifierRange,e.commaPositions,h.possible,e.rightBracketPosition,u),!u)return this.pushError(v.cantFindConstructor(),"error",e.range),new N("null",e.range,a);for(let g=0;g {${V.stack}[${V.stack}.length - 1]._registerListeners(${V.thread}); }`:"undefined";g+=`${V.thread}, ${x}`+(e.length>0?", ":"")}let A=2;g+=e.map(x=>"§"+A++).join(", ")+")";let C=new gs(g).applyToSnippet(n,s.range,a,...e);return m=="java"&&(C=new ae(ye.frame(C,`§1; `)),C.addNextStepMark(),C.finalValueIsOnStack=!0),C}pushSymbolTable(e){this.symbolTableStack.push(e),this.currentSymbolTable=e}pushAndGetNewSymbolTable(e,i,n,s){let a=new Uh(this.module,e,i,this.currentSymbolTable,n,s);return this.symbolTableStack.push(a),this.currentSymbolTable=a,a}popSymbolTable(){this.symbolTableStack.pop(),this.currentSymbolTable=this.symbolTableStack[this.symbolTableStack.length-1]}compileSelectArrayElement(e,i){var m,g;let n=this.compileTerm(e.array),s=n==null?void 0:n.type;if(!n||!s||!(s instanceof Ie)){this.pushError(v.noArrayBracketAfterType((s==null?void 0:s.identifier)||"---"),"error",e.array);return}if(s.dimension0?new Ie(s.elementType,a,s.module,oe.instance):s.elementType,h=[];for(let f of e.indices){let b=this.compileTerm(f);(m=b==null?void 0:b.type)!=null&&m.isPrimitive||(b=this.unbox(b)),(g=b==null?void 0:b.type)!=null&&g.isUsableAsIndex()||(b&&this.pushError(v.indexMustHaveIntegerValue(),"error",f),b=new N("0",f.range,this.intType)),h.push(b)}if(s.elementType.isPrimitive&&s.elementType!=this.stringType)return this.compileSelectArrayElementFast(e,i,n,h,l);let u;if(i)if(h.length==1)u=new zs(`${$.array0}(§1)[${$.checkLastIndex}(§2, 1)]`).applyToSnippet(l,e.range,n,h[0]);else{let f=h.pop(),b=Uo.applyToSnippet(this.voidType,e.range,"",", ","",...h),A="";switch(h.length){case 1:A=$.array1;break;case 2:A=$.array2;break;default:A=$.arrayN;break}u=new gs(`${A}(§1, §2)[${$.checkLastIndex}(§3, ${h.length+1})]`).applyToSnippet(l,e.range,n,b,f)}else{let f=Uo.applyToSnippet(this.voidType,e.range,"",", ","",...h),b="";switch(h.length){case 1:b=$.arrayValue1;break;case 2:b=$.arrayValue2;break;case 3:b=$.arrayValue3;break;default:b=$.arrayValueN;break}u=new zs(`${b}(§1, §2)`).applyToSnippet(l,e.range,n,f)}return e.parenthesisNeeded&&(u=ye.frame(u,"(§1)")),u.isLefty=!0,u}compileSelectArrayElementFast(e,i,n,s,a){let l;if(i)if(s.length==1)l=new zs(`${$.array0}(§1)[${$.checkLastIndex}(§2, 1)]`).applyToSnippet(a,e.range,n,s[0]);else{let h="§1";for(let u=0;uthis.compileDimension(m));if(s.includes(void 0))return;let a=s,l=new Ie(e,a.length,this.module,i.range),h=`${$.newArray}(${n}, `;return Uo.applyToSnippet(l,i.range,h,", ",")",...a)}compileSymbolNode(e,i){let n=this.currentSymbolTable.findSymbol(e.identifier);if(n){let a=n.symbol;if(n.outerClassLevel>0&&this.outerClassFieldAccessTracker.onAccessHappened(),a.onStackframe())return this.registerUsagePosition(a,e.range),n.outerClassLevel==0?(this.missingStatementManager.onSymbolAccess(a,e.range,this.module.errors,i),this.compileSymbolOnStackframeAccess(a,e.range)):this.compileOuterClassLocalVariableAccess(a,e.range);if(a instanceof Hi){let l=a;return this.classOfCurrentlyCompiledStaticInitialization&&!l._isStatic&&this.pushError(v.cantUseNonstaticFieldsToInitializeStaticOne(),"error",e),this.compileFieldAccess(a,e.range,n.outerClassLevel)}return}let s=this.libraryTypestore.getType(e.identifier);if(s||(s=this.compiledTypesTypestore.getType(e.identifier)),!s&&this.currentSymbolTable.classContext){let a=this.currentSymbolTable.classContext.identifier+"."+e.identifier;s=this.libraryTypestore.getType(a),s||(s=this.compiledTypesTypestore.getType(a))}if(s!=null){if(s instanceof we){this.registerUsagePosition(s,e.range);let a=s.staticType;return new N(`${$.classes}["${s.identifier}"]`,e.range,a)}else if(s instanceof ti){this.module.addTypePosition(U.getEndPosition(e.range),s),this.pushError(v.packageCannotBeUsedAsType(s.identifier),"error",e);return}}if(this.currentSymbolTable.classContext){let a=this.currentSymbolTable.classContext.getField(e.identifier,Number.MAX_SAFE_INTEGER);if(a){this.pushError(v.attributeHasWrongVisibility(e.identifier,$e[a.visibility]),"error",e);return}}this.pushError(v.identifierNotKnown(e.identifier),"error",e)}compileOuterClassLocalVariableAccess(e,i){let n=new Hi(e.identifier,e.identifierRange,this.module,e.type,p.keywordPrivate);n.isInnerClassCopyOfOuterClassLocalVariable=e,this.currentSymbolTable.classContext.fields.push(n);let a=new N(`${$.elementRelativeToStackbase(0)}.${n.getInternalName()}`,i,e.type);return a.isLefty=!1,a}compileSymbolOnStackframeAccess(e,i){let n=e.type,s=new N(`${$.elementRelativeToStackbase(e.stackframePosition)}`,i,n);return s.isLefty=!e.isFinal,s}compileFieldAccess(e,i,n=0){var u,m;let s=e;if(s._isStatic&&this.classOfCurrentlyCompiledStaticInitialization&&this.classOfCurrentlyCompiledStaticInitialization.staticConstructorsDependOn.set(s.classEnum,!0),s._isStatic&&s.classEnum.isMainClass&&!this.isRepl&&(i.startLineNumber0;)g+="."+$.outerClassAttributeIdentifier,n--;if(s.template){let f=new N(`${$.elementRelativeToStackbase(0)}${g}`,i,a);h=new Oe(s.template).applyToSnippet(a,i,f)}else h=new N(`${$.elementRelativeToStackbase(0)}${g}.${l}`,i,a)}return h.isLefty=!s._isFinal||((m=this.currentSymbolTable.methodContext)==null?void 0:m.isConstructor)&&this.currentSymbolTable.classContext.fastExtendsImplements(s.classEnum.identifier),h.isFinalField=s._isFinal,s.isInnerClassCopyOfOuterClassLocalVariable?this.registerUsagePosition(s.isInnerClassCopyOfOuterClassLocalVariable,i):this.registerUsagePosition(s,i),h}compileLiteralNode(e){let i=this.constantTypeToTypeMap[e.constantType];if(!i)return;let n;switch(e.constantType){case p.charLiteral:case p.stringLiteral:n=JSON.stringify(e.value);break;default:n=""+e.value}return new N(n,e.range,i,e.value)}compileBinaryOperator(e){var s,a,l;if(e.operator==p.ternaryOperator)return this.compileTernaryOperator(e);let i=this.compileTerm(e.leftSide,this.isAssignmentOperator(e.operator));e.operator==p.and&&(e.instanceofVariables=e.leftSide.instanceofVariables,e.negatedInstanceofVariables=e.leftSide.negatedInstanceofVariables,e.rightSide&&(e.rightSide.instanceofVariables=e.instanceofVariables));let n;if(e.rightSide?((s=e.rightSide)!=null&&s.instanceofVariables&&(this.pushAndGetNewSymbolTable(e.rightSide.range,!1),e.rightSide.instanceofVariables.forEach(h=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(h))),n=((a=e.rightSide)==null?void 0:a.kind)==p.lambdaOperator?this.compileLambdaFunction(e.rightSide,i==null?void 0:i.type):this.compileTerm(e.rightSide),(l=e.rightSide)!=null&&l.instanceofVariables&&this.popSymbolTable()):e.instanceofVariables&&(this.pushAndGetNewSymbolTable({startLineNumber:e.operatorRange.startLineNumber,startColumn:e.operatorRange.startColumn,endLineNumber:e.operatorRange.endLineNumber,endColumn:e.operatorRange.endColumn+3},!1),e.instanceofVariables.forEach(h=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(h)),this.popSymbolTable()),i&&n&&i.type&&n.type)return this.compileBinaryOperation(i,n,e)}compileTernaryOperator(e){let i=this.compileTerm(e.leftSide,!1);if(!e.rightSide)return;if(e.rightSide.kind!=p.binaryOp||e.rightSide.operator!=p.colon){this.pushError(v.colonExpectedAfterTernaryOperator(),"error",e);return}let n=this.compileTerm(e.rightSide.leftSide),s=this.compileTerm(e.rightSide.rightSide);if(!this.canCastTo(i==null?void 0:i.type,this.booleanType,"implicit")){this.pushError(v.booleanOperandOnTernaryOperatorLefthand(),"error",e.leftSide);return}if(!i||!n||!s)return;let a=n.type,l=s.type;if(!a||!l)return;let h;if(this.canCastTo(l,a,"implicit")?(h=a,s=this.compileCast(s,a,"implicit")):this.canCastTo(a,l,"implicit")&&(h=l,n=this.compileCast(n,l,"implicit")),!h){this.pushError(v.ternaryOperatorTypesNotCompatible(),"error",e.rightSide);return}let u=n.isPureTerm()&&s.isPureTerm(),m=n.type==this.voidType&&s.type==this.voidType;if(m||!u){let g=!u&&!m;g&&(n.ensureFinalValueIsOnStack(),s.ensureFinalValueIsOnStack());let f=new ae([],e.range),b=ye.frame(i,`if(§1){ `,this.voidType,i.range),A=new Ge;f.addParts(b);let C=new Jt(A);f.addParts(C),f.addStringPart(`} `),f.addNextStepMark();let w=new Ge,x=new Jt(w);return f.addParts(s),f.addParts(x),f.addNextStepMark(),f.addParts(A),f.addParts(n),f.addNextStepMark(),f.addParts(w),g||(f.finalValueIsOnStack=!0),f}else return new gs("((§1) ? (§2) : (§3) )").applyToSnippet(h,e.range,i,n,s)}compileUnaryPrefixOperator(e){var n,s;let i=this.compileTerm(e.term);return e.operator==p.not&&(e.instanceofVariables=(n=e.term)==null?void 0:n.negatedInstanceofVariables,e.negatedInstanceofVariables=(s=e.term)==null?void 0:s.instanceofVariables),this.compileUnaryOperator(i,e.operator)}compilePlusPlusMinusMinusSuffixOperator(e){let i=this.compileTerm(e.term,!0);if(i&&i.type){if(!i.isLefty){this.pushError(v.plusPlusMinusMinusOnlyForVariables(),"error",e);return}return this.hasBoxedType(i)&&["Double","Float","Integer","Byte"].indexOf(i.type.identifier)>=0?(e.operator==p.plusPlus?new Oe(`${$.checkNPE("§1",i.range)}.value++`):new Oe(`${$.checkNPE("§1",i.range)}.value--`)).applyToSnippet(this.getUnboxedType(i.type),e.range,i):(this.isNumberPrimitiveType(i.type)||this.pushError(v.plusPlusMinusMinusOnlyForTypes(),"error",e),(e.operator==p.plusPlus?new Oe("§1++"):new Oe("§1--")).applyToSnippet(i.type,e.range,i))}}initConstantTypeToTypeMap(){this.constantTypeToTypeMap[p.booleanLiteral]=this.libraryTypestore.getType("boolean"),this.constantTypeToTypeMap[p.charLiteral]=this.libraryTypestore.getType("char"),this.constantTypeToTypeMap[p.integerLiteral]=this.libraryTypestore.getType("int"),this.constantTypeToTypeMap[p.longConstant]=this.libraryTypestore.getType("long"),this.constantTypeToTypeMap[p.floatLiteral]=this.libraryTypestore.getType("float"),this.constantTypeToTypeMap[p.doubleConstant]=this.libraryTypestore.getType("double"),this.constantTypeToTypeMap[p.stringLiteral]=this.libraryTypestore.getType("string"),this.constantTypeToTypeMap[p.keywordNull]=this.libraryTypestore.getType("null")}compileDereferenceAttribute(e){var u;let i=this.compileTerm(e.nodeToGetObject);if(!i||!i.type)return;let n=e.range;if(i.isSuperKeywordWithLevel&&e.attributeIdentifier=="super")return i.isSuperKeywordWithLevel++,i.type=i.type.getExtends(),i;if(i.type instanceof Ie){if(e.attributeIdentifier!="length"){this.pushError(v.arraysOnlyHaveLengthField(e.attributeIdentifier),"error",e);return}return new Oe(`(§1 || ${$.throwNPE}(${n.startLineNumber}, ${n.startColumn}, ${n.endLineNumber}, ${n.endColumn})).length`).applyToSnippet(this.intType,n,i)}let s=i.type;if(!(s instanceof we||s instanceof ei)){this.pushError(v.typeHasNoFields(i.type.identifier),"error",e);return}let a=p.keywordPublic;this.currentSymbolTable.classContext&&this.currentSymbolTable.classContext.fastExtendsImplements(s.identifier)&&(a=p.keywordProtected,s.fastExtendsImplements(this.currentSymbolTable.classContext.identifier)&&(a=p.keywordPrivate));let l=s.getField(e.attributeIdentifier,a);if(!l&&s instanceof ei){let m=s.nonPrimitiveType.innerTypes.find(g=>g.identifier==e.attributeIdentifier);if(m)return new N(`${$.classes}["${m.pathAndIdentifierAsDotSeparatedString}"]`,e.range,m.staticType)}if(!l){let m=s.getField(e.attributeIdentifier,Number.MAX_SAFE_INTEGER);m?this.pushError(v.attributeHasWrongVisibility(e.attributeIdentifier,$e[m.visibility]),"error",e):this.pushError(v.fieldUnknown(e.attributeIdentifier),"error",e);return}if(this.registerUsagePosition(l,e.range),s instanceof ei&&s.nonPrimitiveType instanceof xi&&s.identifier=="SpriteLibrary"){let m=s.nonPrimitiveType,g=m.id;if(!m.runtimeClass)return;if(m.runtimeClass.getSpriteLibrary(g,e.attributeIdentifier)){let b=new N(`${$.classes}["SpriteLibrary"].getSpriteLibrary(${g}, "${e.attributeIdentifier}")`,e.range,m);return b.isFinalField=l.isFinal(),b.isLefty=!1,b}}if(l._isStatic){let m=l.classEnum.pathAndIdentifierAsDotSeparatedString;if(l.template){let g=l.template.replace("§1",`${$.classes}["${m}"]`),f=new N(g,n,l.type);return f.isLefty=!1,f.isFinalField=l._isFinal,f}else{let g=new N(`${$.classes}["${m}"].${l.getInternalName()}`,n,l.type);return g.isLefty=!l._isFinal,g.isFinalField=l._isFinal,g}}else{let m=i.type instanceof xi?"§1":`(§1 || ${$.throwNPE}(${n.startLineNumber}, ${n.startColumn}, ${n.endLineNumber}, ${n.endColumn}))`;if(l.template){let g=new Oe(m).applyToSnippet(i.type,i.range,i),f=new Oe(l.template).applyToSnippet(l.type,n,g);return f.isLefty=!l._isFinal,f.isFinalField=l._isFinal,f}else{let g=new Oe(`${m}.${l.getInternalName()}`).applyToSnippet(l.type,n,i);return g.isLefty=!l._isFinal||((u=this.currentSymbolTable.methodContext)==null?void 0:u.isConstructor)&&this.currentSymbolTable.classContext.fastExtendsImplements(l.classEnum.identifier),g.isFinalField=l._isFinal,g}}}getParameterValueSnippets(e){let i=[],n=!1;for(let s of e.parameterValues)if(s.kind==p.lambdaOperator)i.push(void 0);else{let a=this.compileTerm(s);!a||!a.type?(i.push(void 0),n=!0):i.push(a)}return{snippets:i,withErrors:n}}compileMethodCall(e){var w,x,q;let i=this.getParameterValueSnippets(e),n=i.snippets,s=this.convertParameterValueSnippetsToParameterTypes(e.identifier,n);if(!s)return;let a=!1;e.nodeToGetObject&&[p.keywordThis,p.keywordSuper].indexOf((w=e.nodeToGetObject)==null?void 0:w.kind)>=0&&e.identifier==""&&(a=!0);let l;if(e.nodeToGetObject){if(l=this.compileTerm(e.nodeToGetObject),!l)return;let D=e.nodeToGetObject.range;!(l.type instanceof ei)&&!l.isSuperKeywordWithLevel&&(l=ye.frame(l,`${$.checkNPE("§1",D)}`))}else{let D=this.currentSymbolTable.classContext;if(!D)if(e.identifier.startsWith("assert")||e.identifier.startsWith("fail")){if(D=this.assertionsType,e.identifier=="assertCodeReached"&&n)return this.registerCodeReachedAssertion(e,n)}else{this.pushError(v.methodCallOutsideClassNeedsDotSyntax(),"error",e);return}l=new N(`${$.elementRelativeToStackbase(0)}`,oe.instance,D)}if(!l||!l.type)return;let h=this.searchMethod(e.identifier,l.type,s,a,l.type instanceof ei,!0,e.identifierRange);if(l.type.isMainClass&&!h.best){let D=this.searchGlobalMethod(e.identifier,s,e.identifierRange);D&&(h.best=D.method,l=new N(`${$.classes}["${D.staticMainClass.identifier}"]`,e.identifierRange,D.staticMainClass))}let u=h==null?void 0:h.best;if(i.withErrors){e.rightBracketPosition&&this.module.pushMethodCallPosition(e.identifierRange,e.commaPositions,h.possible,e.rightBracketPosition,u),h.possible.length>0&&this.registerUsagePosition(u||h.possible[0],e.identifierRange);return}if(e.identifier=="assertCodeReached"&&(!u||l.type.identifier=="Assertions"))return this.registerCodeReachedAssertion(e,n);(!u&&e.identifier.startsWith("assert")||e.identifier.startsWith("fail"))&&(h=this.searchMethod(e.identifier,this.assertionsType,s,!1,l instanceof ei,!0,e.identifierRange),u=h==null?void 0:h.best);let m="";if(!u&&!e.nodeToGetObject&&((x=this.currentSymbolTable.classContext)!=null&&x.outerType)){let D=(q=this.currentSymbolTable.classContext)==null?void 0:q.outerType;for(;D&&D instanceof we&&(m+="."+$.outerClassAttributeIdentifier,h=this.searchMethod(e.identifier,D,s,!1,l instanceof ei,!0,e.identifierRange),u=h.best,!u);)D=D.outerType}if(e.rightBracketPosition&&this.module.pushMethodCallPosition(e.identifierRange,e.commaPositions,h.possible,e.rightBracketPosition,u),!u){let D=this.searchMethod(e.identifier,l.type,s,!1,l.type instanceof ei,!1,e.identifierRange).best;D?this.pushError(v.methodHasWrongVisibility(e.identifier,$e[D.visibility]),"error",e):this.pushError(v.cantFindMethod(),"error",e.range);return}this.registerUsagePosition(u,e.identifierRange),u.isAbstract&&l.isSuperKeywordWithLevel>0&&this.pushError(v.cantCallAbstractMethodOfBaseClass(u.identifier),"error",e);for(let D=0;D!G.isConstant())&&(u.isStatic||l.isConstant())){let G=n.map(vt=>vt.getConstantValue()),K=u.isStatic?u.constantFoldingFunction(...G):u.constantFoldingFunction(l.getConstantValue(),...G),Z="";return u.returnParameterType instanceof Ie&&Array.isArray(K)?this.isStringOrChar(u.returnParameterType.elementType)?Z="["+K.map(vt=>`"${vt}"`).join(", ")+"]":Z="["+K.map(vt=>""+vt).join(", ")+"]":Z=typeof K=="string"?`"${K}"`:""+K,new N(Z,e.range,g,K)}let f=u.hasImplementationWithNativeCallingConvention||u.template?"native":"java";if(f=="native"&&(l.type instanceof mt&&l.type.isFinal||u.isFinal||u.isStatic||(u.classEnumInterface instanceof Bt||this.module.moduleManager&&this.module.moduleManager.overriddenOrImplementedMethodPaths[u.getPathWithMethodIdentifier()])&&(f="java")),u.template){if(u.isStatic)return new gs(u.template).applyToSnippet(g,e.range,...n);if(f=="native")return new gs(u.template).applyToSnippet(g,e.range,l,...n)}let b;if(l.type instanceof ei)b=`§1.${u.getInternalNameWithGenericParameterIdentifiers(f)}(`;else if(l.isSuperKeywordWithLevel&&!u.isConstructor){let D=l.type.pathAndIdentifierAsDotSeparatedString;u.isStatic?b=`${$.classes}["${D}"].${u.getInternalNameWithGenericParameterIdentifiers(f)}(`:b=`${$.classes}["${D}"].prototype.${u.getInternalNameWithGenericParameterIdentifiers(f)}.call(§1,`}else u.isStatic?b=`§1.${l instanceof ei?"":"constructor."}${u.getInternalNameWithGenericParameterIdentifiers(f)}(`:b=`§1${m}.${u.getInternalNameWithGenericParameterIdentifiers(f)}(`;f=="java"&&(b+=`${V.thread}`+(u.isStatic?"":", undefined")+(n.length>0?", ":""));let A=2;b+=n.map(D=>"§"+A++).join(", ")+")",n.unshift(l);let C=new gs(b).applyToSnippet(g,e.range,...n);return C.finalValueIsOnStack=!1,f=="java"&&(C.endsWith(`; `)||(C=new ae(ye.frame(C,`§1; `))),C.addNextStepMark(),g!=this.voidType&&(C.finalValueIsOnStack=!0)),C}searchGlobalMethod(e,i,n){for(let s of this.compiledTypesTypestore.getMainClasses()){let a=this.searchMethod(e,s.staticType,i,!1,!0,!1,n);if(a.best)return{method:a.best,staticMainClass:s.staticType}}}isStringOrChar(e){return e==this.stringType||e==this.charType}registerCodeReachedAssertion(e,i){var a;if(i.length!=1||((a=i[0])==null?void 0:a.type)!=this.stringType||!i[0].isConstant()){this.pushError(v.assertCodeReachedNeedsStringParameter(),"error",e);return}let n=i[0].getConstantValue(),s=new jb(n,this.module,e.range);return this.module.codeReachedAssertions.registerAssertion(s),new N(`${$.registerCodeReached}("${s.key}")`,e.range)}convertParameterValueSnippetsToParameterTypes(e,i){let n=[];for(let s=0;s{var b;return f.parameters.length>=n.length||f.parameters.length>0&&((b=f.parameters[f.parameters.length-1])==null?void 0:b.isEllipsis)}),l&&(u=u.filter(f=>{if(f.visibility==p.keywordPublic)return!0;if(f.visibility==p.keywordPrivate){let b=f.classEnumInterface.identifier;return this.classOfCurrentlyCompiledStaticInitialization?this.classOfCurrentlyCompiledStaticInitialization.identifier==b:this.currentSymbolTable.classContext?this.currentSymbolTable.classContext.identifier==b:!1}if(f.visibility==p.keywordProtected){let b=f.classEnumInterface.identifier;return this.classOfCurrentlyCompiledStaticInitialization?this.classOfCurrentlyCompiledStaticInitialization.identifier==b:this.currentSymbolTable.classContext?this.currentSymbolTable.classContext.fastExtendsImplements(b):!1}}));let m,g=Number.MAX_SAFE_INTEGER;for(let f of u){if(!f.canTakeNumberOfParameters(n.length))continue;f instanceof Ma&&f.initCatches();let b=0,A,C=!0;for(let w=0;w=g){C=!1;break}}else{C=!1;break}}}}C&&bb==this.primitiveStringClass.type?this.stringNonPrimitiveType:b));return{best:m.getNonGenericCopyWithConcreteTypes(),possible:u}}return{best:void 0,possible:u}}}class Xg extends sv{constructor(e,i,n,s,a){super(e,i,n,a);r(this,"synchronizedBlockCount",0);r(this,"codeGenerationMode","normal");this.exceptionTree=s}compileStatementOrTerm(e){if(!e)return;let i;switch(e.kind){case p.localVariableDeclaration:i=this.compileLocalVariableDeclaration(e);break;case p.localVariableDeclarations:i=this.compileLocalVariableDeclarations(e);break;case p.print:i=this.compilePrintStatement(e);break;case p.keywordBreak:i=this.compileBreakStatement(e);break;case p.keywordContinue:i=this.compileContinueStatement(e);break;case p.keywordIf:i=this.compileIfStatement(e);break;case p.keywordSwitch:i=this.compileSwitchCaseStatement(e);break;case p.block:i=this.compileBlockNode(e,void 0,void 0);break;case p.synchronizedBlock:let n=e;i=this.compileBlockNode(n.block,n.lockObject,n.range);break;case p.keywordWhile:i=this.compileWhileStatement(e);break;case p.keywordDo:i=this.compileDoStatement(e);break;case p.keywordFor:i=this.compileForStatement(e);break;case p.enhancedForLoop:i=this.compileEnhancedForLoop(e);break;case p.keywordReturn:i=this.compileReturnStatement(e);break;case p.keywordTry:i=this.compileTryCatchStatement(e);break;case p.keywordThrow:i=this.compileThrowStatement(e);break;case p.initialFieldAssignementInMainProgram:i=this.compileInitialFieldAssignmentInMainProgram(e);break;case p.firstMainProgramStatement:i=this.compileFirstMainProgramStatement(e);break;default:i=this.compileTerm(e),i&&(i.endsWith(`; `)||(i=new ae(ye.frame(i,`§1; `))))}return i&&(i instanceof ae||(i=new ae(i,i.range,i.type)),i.enforceNewStepBeforeSnippet()),i}compileFirstMainProgramStatement(e){let i=this.currentSymbolTable.classContext;return new N(`${V.stack}.push(${$.classes}.${i.identifier}); `)}compileInitialFieldAssignmentInMainProgram(e){let i=[];for(let n of e.assignments){let s=this.currentSymbolTable.findSymbol(n.fieldNode.identifier).symbol,a=this.compileSymbolNode(n.fieldNode,!0),l=this.compileInitialValue(n.initialTerm,a.type);l!=null&&l.type&&!s.type&&(s.type=l.type),a&&l&&i.push(new zs("§1 = §2;").applyToSnippet(this.voidType,e.range,a,l))}if(i.length!=0)return i.length==1?i[0]:new ae(i)}compileBreakStatement(e){let i=this.breakStack[this.breakStack.length-1];if(!i){this.pushError(v.breakNotExpected(),"error",e);return}let n=new Jt(i);return n.range=e.range,n}compileContinueStatement(e){let i=this.continueStack[this.continueStack.length-1];if(!i){this.pushError(v.continueNotExpected(),"error",e);return}let n=new Jt(i);return n.range=e.range,n}compileReturnStatement(e){var s,a;this.missingStatementManager.onReturnHappened();let i=new ae([],e.range),n=this.currentSymbolTable.methodContext;if(!n){this.pushError(v.returnNotExpected(),"error",e.range);return}if(this.synchronizedBlockCount>0&&i.addParts(new N(`${$.leaveAllSynchronizedBlocksInCurrentMethod}(); `)),(s=this.currentSymbolTable.methodContext)!=null&&s.isSynchronized&&i.addParts(new N(`${$.elementRelativeToStackbase(0)}.${R.prototype.leaveSynchronizedBlock.name}(${V.thread}); `)),e.term){if(!n.returnParameterType||n.returnParameterType==this.voidType){this.pushError(v.returnValueNotExpected(),"error",e.range);return}let l=this.compileTerm(e.term);if(!l)return;if(n.returnParameterType instanceof nt&&n.returnParameterType.catches)l.type.isPrimitive&&(l=this.box(l)),n.returnParameterType.catches.push(l.type);else{if(!this.canCastTo(l.type,n.returnParameterType,"implicit")){this.pushError(v.wrongReturnValueType(n.returnParameterType.identifier,((a=l.type)==null?void 0:a.identifier)||"(---)"),"error",e.keywordReturnRange);return}l=this.compileCast(l,n.returnParameterType,"implicit")}i.addParts(new Oe(`${$.return}(§1); `).applyToSnippet(this.voidType,e.range,l))}else if(n.isConstructor)i.addStringPart(`${$.return}(${$.elementRelativeToStackbase(0)}); `);else{if(n.returnParameterType&&n.returnParameterType!=this.voidType){this.pushError(v.returnValueExpected(n.returnParameterType.identifier),"error",e.range);return}i.addStringPart(`${$.return}(); `)}return i.addNextStepMark(),i}compileEnhancedForLoop(e){let i=e.elementType.resolvedType,n=this.compileTerm(e.collection);if(!(i||e.elementType.kind==p.varType)||!n||!n.type)return;let s=this.pushAndGetNewSymbolTable(e.range,!1),a=new Ge;this.continueStack.push(a);let l=new Jt(a),h=new Ge;this.breakStack.push(h);let u=new Jt(h),m=s.getStackFrame().insertInvisibleLocalVariableAndGetItsIndex(),g=new ae([],e.range),f=n.type,b;if(f instanceof Ie){let A=ye.frame(n,`${$.elementRelativeToStackbase(m)} = ${$.checkNPE("§1",e.collection.range)}; `);A.range=e.collection.range,g.addParts(A),b=f.getElementType(),e.elementType.kind!=p.varType&&(this.typesAreIdentical(i,b)||this.canCastTo(b,i,"implicit")||this.pushError(v.wrongArrayElementType(i.toString(),e.elementIdentifier,b.toString()),"error",e.elementIdentifierPosition)),i=b;let C=new Jr(e.elementIdentifier,e.elementIdentifierPosition,i,s);s.addSymbol(C);let w=s.getStackFrame().insertInvisibleLocalVariableAndGetItsIndex();g.addParts(new N(`${$.elementRelativeToStackbase(w)} = -1; `,e.collection.range)),g.addNextStepMark(),g.addParts(a),g.addParts(new N(`${$.elementRelativeToStackbase(w)}++; if(${$.elementRelativeToStackbase(w)} >= ${$.elementRelativeToStackbase(m)}.length){ `,e.collection.range)),g.addParts(u),g.addParts(new N(`} `)),g.addParts(new N(`${$.elementRelativeToStackbase(C.stackframePosition)} = ${$.elementRelativeToStackbase(m)}[${$.elementRelativeToStackbase(w)}]; `));let x=this.compileStatementOrTerm(e.statementToRepeat)||new N("");g.addParts(x),g.addParts(l),g.addNextStepMark(),g.addParts(h)}else if(f instanceof mt&&f.runtimeClass.prototype.getElements){i==this.stringType&&(i=this.stringNonPrimitiveType);let A=ye.frame(n,`${$.elementRelativeToStackbase(m)} = ${$.checkNPE("§1",e.collection.range)}.getElements(); `);if(A.range=e.collection.range,g.addParts(A),b=this.objectType,f instanceof di){let q=f.getFirstTypeParametersType();q?b=q:this.pushError(v.cantComputeArrayElementType(f.toString()),"error",e.collection.range)}else f.identifier=="Group"&&(b=this.libraryTypestore.getType("Shape"));e.elementType.kind!=p.varType&&(this.typesAreIdentical(i,b)||this.pushError(v.wrongCollectionElementType(i.toString(),e.elementIdentifier,b.toString()),"error",e.elementIdentifierPosition)),i=b;let C=new Jr(e.elementIdentifier,e.elementIdentifierPosition,i,s);s.addSymbol(C);let w=s.getStackFrame().insertInvisibleLocalVariableAndGetItsIndex();g.addParts(new N(`${$.elementRelativeToStackbase(w)} = -1; `,e.collection.range)),g.addNextStepMark(),g.addParts(a),g.addParts(new N(`${$.elementRelativeToStackbase(w)}++; if(${$.elementRelativeToStackbase(w)} >= ${$.elementRelativeToStackbase(m)}.length){ `,e.collection.range)),g.addParts(u),g.addParts(new N(`} `)),g.addParts(new N(`${$.elementRelativeToStackbase(C.stackframePosition)} = ${$.elementRelativeToStackbase(m)}[${$.elementRelativeToStackbase(w)}]; `));let x=this.compileStatementOrTerm(e.statementToRepeat)||new N("");g.addParts(x),g.addParts(l),g.addNextStepMark(),g.addParts(h)}else if(this.canCastTo(f,this.iterableType,"implicit")){let A=new ae(ye.frame(n,`${$.checkNPE("§1",e.collection.range)}._mj$iterator$Iterator$(${V.thread}, undefined); `),e.collection.range,this.iteratorType);A.addNextStepMark(),A.addParts(new N(`${$.elementRelativeToStackbase(m)} = ${$.threadStack}.pop(); `,e.collection.range)),A.range=e.collection.range,g.addParts(A),b=this.objectType;let w=f.findImplementedInterface("Iterable");w?w instanceof nr&&(b=w.typeMap.get(w.isGenericVariantOf.genericTypeParameters[0])):this.pushError(v.cantComputeCollectionElementType(f.toString()),"error",e.collection.range),e.elementType.kind!=p.varType&&(i==this.stringType&&b==this.stringNonPrimitiveType?i=b:this.typesAreIdentical(i,b)||this.pushError(v.elementTypeDoesntFitToIterable(i.toString(),e.elementIdentifier,b.toString()),"error",e.elementIdentifierPosition)),i=b;let x=new Jr(e.elementIdentifier,e.elementIdentifierPosition,i,s);s.addSymbol(x),g.addNextStepMark(),g.addParts(a),g.addParts(new N(`${$.elementRelativeToStackbase(m)}._mj$hasNext$boolean$(${V.thread}, undefined); `,e.collection.range)),g.addNextStepMark(),g.addParts(new N(`if(!${$.threadStack}.pop()){ `,e.collection.range)),g.addParts(u),g.addParts(new N(`} `)),g.addParts(new N(`${$.elementRelativeToStackbase(m)}._mj$next$E$(${V.thread}, undefined); `,e.collection.range)),g.addNextStepMark(),g.addParts(new N(`${$.elementRelativeToStackbase(x.stackframePosition)} = ${$.threadStack}.pop(); `,e.collection.range));let q=this.compileStatementOrTerm(e.statementToRepeat)||new N("");g.addParts(q),g.addParts(l),g.addNextStepMark(),g.addParts(h)}else this.pushError(v.enhancedForLoopOnlyForArraysCollectionsIterables(),"error",e.collection.range);return this.continueStack.pop(),this.breakStack.pop(),this.popSymbolTable(),g}typesAreIdentical(e,i){return!e||!i?!1:e.toString()==i.toString()}compileForStatement(e){this.pushAndGetNewSymbolTable(e.range,!1);let i=this.compileStatementOrTerm(e.firstStatement),n=e.condition,s=this.negateConditionIfPossible(n);n=s==null?void 0:s.newNode;let a=this.compileTerm(n);a=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(a,e.condition);let l=new Ge,h=new Jt(l),u=new Ge;new Jt(u),this.continueStack.push(u);let m=new Ge,g=new Jt(m);this.breakStack.push(m);let f=this.compileStatementOrTerm(e.lastStatement),b=this.compileStatementOrTerm(e.statementToRepeat);if(!b){this.popSymbolTable();return}let A=new ae([],e.range,this.voidType);return i&&(A.addParts(i),A.addNextStepMark()),A.addParts(l),a&&(A.addParts(new Oe(s!=null&&s.negationHappened?`if(§1){ `:`if(!(§1)){ `).applyToSnippet(this.voidType,e.condition.range,a)),A.addParts(g),A.addStringPart(`} `),A.addNextStepMark()),A.addParts(b),A.addNextStepMark(),A.addParts(u),f?A.addParts(f):h.range={startLineNumber:e.range.endLineNumber,startColumn:e.range.endColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},A.addParts(h),A.addNextStepMark(),A.addParts(m),this.continueStack.pop(),this.breakStack.pop(),this.popSymbolTable(),A}compileDoStatement(e){let i=this.compileTerm(e.condition);i=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(i,e.condition);let n=new Ge;this.continueStack.push(n);let s=new Ge;this.breakStack.push(s);let a=this.compileStatementOrTerm(e.statementToRepeat),l=new ae([],e.range);if(!i||!a)return;let h=new Ge;l.addParts(h),l.addParts(a),l.addNextStepMark(),l.addParts(n);let u=ye.frame(i,`if(§1){ `,this.voidType);return l.addParts(u),l.addParts(new Jt(h)),l.addStringPart("}",void 0),l.addNextStepMark(),l.addParts(s),this.breakStack.pop(),this.continueStack.pop(),l}compileBlockNode(e,i,n){this.pushAndGetNewSymbolTable(e.range,!1);let s=new ae([],e.range);if(i){this.synchronizedBlockCount++;let a=this.compileTerm(i);if(a){let l=ye.frame(a,`return this.index + §1.${R.prototype.beforeEnteringSynchronizedBlock.name}(${V.thread}); `);s.addParts(l),s.addNextStepMark()}}for(let a of e.statements){let l=this.compileStatementOrTerm(a);l&&s.addParts(l)}if(i){let a=this.compileTerm(i);if(a){let l=ye.frame(a,`§1.${R.prototype.leaveSynchronizedBlock.name}(${V.thread}); `);s.addParts(l),s.addNextStepMark()}this.synchronizedBlockCount--}return this.popSymbolTable(),s}convertToBooleanPrimitiveAndPrintErrorIfNotPossible(e,i){let n=e==null?void 0:e.type;if(!n)return e;if(n.identifier!="boolean"){if(n.identifier=="Boolean")return this.unbox(e);if(i.kind==p.binaryOp&&i.operator==p.assignment){let s=this.pushError(v.assignmentInsteadOfComparisonOperator(),"error",i.operatorRange);this.module.quickfixes.push(new vo(i.operatorRange,"==",v.ReplaceTokenQuickfixDefaultMessage("=","=="),s))}else this.pushError(v.booleanTermExpected(n.identifier),"error",i)}return e}compileWhileStatement(e){let i=e.condition;if(!i)return;let n=this.negateConditionIfPossible(i);i=n.newNode;let s=this.compileTerm(i);s=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(s,e.condition);let a=new Ge;this.continueStack.push(a);let l=new Ge;this.breakStack.push(l);let h=this.compileStatementOrTerm(e.statementToRepeat),u=new ae([],e.range);if(!s||!h)return;u.addParts(a);let m=ye.frame(s,n.negationHappened?`if(§1){ `:`if(!(§1)){ `,this.voidType);u.addParts(m),u.addParts(new Jt(l)),u.addStringPart("}",void 0),u.addNextStepMark(),u.addParts(h);let g=new Jt(a);return g.range=U.fromPositions(U.getEndPosition(h.range)),u.addParts(g),u.addNextStepMark(),u.addParts(l),this.breakStack.pop(),this.continueStack.pop(),u}negateConditionIfPossible(e){if(e){if(e.kind==p.binaryOp){let i=e;switch(i.operator){case p.lower:i.operator=p.greaterOrEqual;break;case p.lowerOrEqual:i.operator=p.greater;break;case p.greater:i.operator=p.lowerOrEqual;break;case p.greaterOrEqual:i.operator=p.lower;break;case p.notEqual:i.operator=p.equal;break;case p.equal:i.operator=p.notEqual;break;default:return{newNode:i,negationHappened:!1}}return{newNode:i,negationHappened:!0}}if(e.kind==p.unaryPrefixOp){let i=e;if(i.operator==p.not)return{newNode:i.term,negationHappened:!0}}return{newNode:e,negationHappened:!1}}}isDefined(e){return e!=null}listHasNoUndefined(e){return!e.includes(void 0)}compileCaseStatement(e,i,n,s,a){if(!e.constants)return;let l=[];for(let g of e.constants){let f;if(a){let b="",A=oe.instance;switch(g.kind){case p.dereferenceAttribute:b=g.attributeIdentifier,A=g.range;break;case p.symbol:b=g.identifier,A=g.range;break}let C=a.fields.findIndex(w=>w.identifier==b);if(C<0){this.pushError(v.enumIdentifierUnknown(a.identifier,b),"error",g.range);return}this.registerUsagePosition(a.fields[C],A),f=new N(C+"",A,this.intType,C)}else f=this.compileTerm(g);f?(f.isConstant()||f.isFinalField?(!f.type||f.type.identifier.toLowerCase()!=(s==null?void 0:s.toLowerCase()))&&this.pushError(v.caseValueDoesntFitToSwitchValue(s||"---",f.type.identifier),"error",g.range):this.pushError(v.constantValueExpectedAfterCase(),"error",g.range),l.push(f)):this.pushError(v.valueNotComputable(),"error",g)}if(l.length==0)return;let h=new ae([],e.range),u=new ae([],e.range);for(let g of l){let f=g.getConstantValue();if(typeof f<"u")switch(s){case"String":case"string":case"char":h.addStringPart(`case ${JSON.stringify(f)}: `,e.range);break;default:h.addStringPart(`case ${f}: `,e.range)}else h.addStringPart(`case ${g.emit()}: `,e.range)}h.addParts(new Jt(n[i]));let m=e.statements.map(g=>this.compileStatementOrTerm(g));if(this.listHasNoUndefined(m))return u.addParts(n[i]),u.addParts(m),u.addNextStepMark(),[h,u]}compileSwitchCaseStatement(e){let i=this.compileTerm(e.term);if(!this.isDefined(i)||!i.type)return;let n=i.type,s=n instanceof xi?n:void 0;if(s&&(i=ye.frame(i,"§1.ordinal")),s||n.identifier&&["byte","short","int","char","String","string"].includes(n.identifier)||this.pushError(v.switchOnlyFeasibleForTypes(),"error",e.term.range),n==this.stringNonPrimitiveType&&(i=this.unbox(i),n=this.stringType),!n)return;this.pushAndGetNewSymbolTable(e.range,!1);let a=[...e.caseNodes].map(g=>new Ge),l;e.defaultNode&&(l=new Ge,a.push(l));let h=new Ge;this.breakStack.push(h),a.push(h);let u=e.caseNodes.map((g,f)=>this.compileCaseStatement(g,f,a,s?"int":n.identifier,s));u=u.filter(g=>typeof g<"u");let m=new ae([],e.range);if(m.addParts(ye.frame(i,`switch(§1){ `,this.voidType)),u.forEach(([g,f])=>m.addParts(g)),e.defaultNode&&(m.addStringPart(`default: `,e.range),m.addParts(new Jt(l))),m.addStringPart(` } `,void 0),m.addParts(new Jt(h)),m.addNextStepMark(),u.forEach(([g,f])=>m.addParts(f)),e.defaultNode){let g=new ae([],e.defaultNode.range);g.addParts(l);let f=e.defaultNode.statements.map(b=>this.compileStatementOrTerm(b));if(!this.listHasNoUndefined(f)){this.popSymbolTable();return}g.addParts(f),g.addNextStepMark(),m.addParts(g)}return m.addParts(h),this.breakStack.pop(),this.popSymbolTable(),m}compileIfStatement(e){let i=e.condition;if(!i)return;let n=this.negateConditionIfPossible(i);i=n.newNode;let s=this.compileTerm(i);s=this.convertToBooleanPrimitiveAndPrintErrorIfNotPossible(s,e.condition);let a=n.negationHappened?i.negatedInstanceofVariables:i.instanceofVariables,l=n.negationHappened?i.instanceofVariables:i.negatedInstanceofVariables;if(this.missingStatementManager.openBranch(),a){let A=this.pushAndGetNewSymbolTable(i.range,!1);a.forEach(C=>A.addSymbolWithoutAddingToStackframe(C))}let h=this.compileStatementOrTerm(e.statementIfTrue);if(h!=null&&h.isEmptyStatement()&&this.pushError(v.emptyStatementAfterIf(),"warning",h.range),a&&this.popSymbolTable(),l&&this.missingStatementManager.hasReturnHappened()&&l.forEach(A=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(A)),this.missingStatementManager.closeBranch(this.module.errors),this.missingStatementManager.openBranch(),l){let A=this.pushAndGetNewSymbolTable(i.range,!1);l.forEach(C=>A.addSymbolWithoutAddingToStackframe(C))}let u=this.compileStatementOrTerm(e.statementIfFalse);if(l&&this.popSymbolTable(),a&&this.missingStatementManager.hasReturnHappened()&&a.forEach(A=>this.currentSymbolTable.addSymbolWithoutAddingToStackframe(A)),this.missingStatementManager.closeBranch(this.module.errors),this.missingStatementManager.endBranching(),!s||!h)return;let m=new ae([],e.range),g=ye.frame(s,n.negationHappened?`if(§1){ `:`if(!(§1)){ `,this.voidType,e.range),f=new Ge;m.addParts(g);let b=new Jt(f);if(m.addParts(b),m.addStringPart(`} `),m.addNextStepMark(),u){let A=new Ge,C=new Jt(A);m.addParts(h),m.addParts(C),m.addNextStepMark(),m.addParts(f),m.addParts(u),m.addNextStepMark(),m.addParts(A)}else m.addParts(h),m.addNextStepMark(),m.addParts(f);return m}compilePrintStatement(e){let i=this.compileTerm(e.firstParameter),n=e.secondParameter?this.compileTerm(e.secondParameter):void 0,s=e.isPrintln?$.println:$.print;return i!=null&&i.type&&i.type!=this.voidType?(i.type.isPrimitive?i=this.compileCast(i,this.stringType,"implicit",!0):i=this.wrapWithToStringCall(i,"string"),n?new zs(`${s}(§1, §2${n.type==this.stringNonPrimitiveType?".value":""}); `).applyToSnippet(this.voidType,e.range,i,n):new Oe(`${s}(§1, undefined); `).applyToSnippet(this.voidType,e.range,i)):new N(`${s}(undefined, undefined); `,e.range)}compileLocalVariableDeclarations(e){let i=[];for(let n of e.declarations){let s=this.compileLocalVariableDeclaration(n);s&&i.push(s)}if(i.length!=0)return new ae(i)}compileLocalVariableDeclaration(e){this.codeGenerationMode=="repl"&&this.pushError(v.noVariableDeclarationWhileProgramIsRunning(),"error",e.range);let i=new Jr(e.identifier,e.identifierRange,e.type.resolvedType,this.currentSymbolTable);i.isFinal=e.isFinal;let n=this.compileInitialValue(e.initialization,i.type),s=this.currentSymbolTable.findSymbol(i.identifier),a=s==null?void 0:s.symbol;if(s){let h=this.settingStore.getValue("compiler.shadowedSymbolErrorLevel");if(this.codeGenerationMode=="replStandalone"&&(h="error"),["normal","replStandalone"].includes(this.codeGenerationMode)){let u=a.identifierRange.startLineNumber;a instanceof Jr?s.symbolTable==this.currentSymbolTable&&this.codeGenerationMode=="normal"?(this.pushError(v.cantRedeclareVariableError(i.identifier),"error",e.range),i=a):h!="ignore"&&this.pushError(v.shadowedVariableError(i.identifier,u),h,e.identifierRange):a instanceof Hi&&a.classEnum.isMainClass&&h!="ignore"&&this.pushError(v.shadowedVariableError(i.identifier,u),h,e.identifierRange)}}i!=(s==null?void 0:s.symbol)&&(s==null||this.codeGenerationMode!="replStandalone")&&this.currentSymbolTable.addSymbol(i),this.module.compiledSymbolsUsageTracker.registerUsagePosition(i,this.module.file,e.identifierRange),this.missingStatementManager.addSymbolDeclaration(i,!!e.initialization);let l=this.compileSymbolOnStackframeAccess(i,e.identifierRange);if(n&&l){if(e.type.kind==p.varType){let u=n.type;i.type=u,u==this.floatType&&n.isConstant()&&(i.type=this.doubleType)}let h=new gn("=",!1).applyToSnippet(i.type,e.range,l,n);return ye.frame(h,`§1; `)}}compileInitialValue(e,i){let n;if(e){switch(e.kind){case p.lambdaOperator:n=this.compileLambdaFunction(e,i);break;case p.arrayLiteral:let s=i;s&&s instanceof Ie?n=this.compileArrayLiteral(s.getElementType(),e):this.pushError(v.cantAssignArrayLiteralToNonArrayVariable(),"error",e);break;default:n=this.compileTerm(e)}if(!(n!=null&&n.type))return;if(i){if(e.kind==p.newObject&&(i instanceof di||i instanceof nr)&&this.canCastTo(n.type,i.isGenericVariantOf,"implicit"))return n.type=i,n;if(!this.canCastTo(n.type,i,"implicit")){this.pushError(v.localVariableDeclarationWrongInitializerType(n.type.toString(),i.toString()),"error",e);return}n=this.compileCast(n,i,"implicit")}}else{if(!i)return;let s=i.isPrimitive?i.defaultValueAsString:"null",a=i.isPrimitive?i.defaultValue:null;n=new N(s,oe.instance,i),n.setConstantValue(a)}return n}compileThrowStatement(e){this.missingStatementManager.onReturnHappened();let i=this.compileTerm(e.exception);if(i){if(i.type&&!this.canCastTo(i.type,this.throwableType,"implicit")){this.pushError(v.throwExpressionTypeMustBeThrowable(i.type.toString()),"error",e.exception.range);return}return new Oe(`throw §1; `).applyToSnippet(this.voidType,e.range,i)}}compileTryCatchStatement(e){let i=[],n=[];for(let g=0;gC.catchBlockBeginsWithStepIndex=w)}let s,a=new N(`${$.beginTryBlock}({catchBlockInfos: this.catchBlockInfoList, finallyBlockIndex: this.finallyBlockIndex}); `,e.range);a.addEmitToStepListener(g=>{g.catchBlockInfoList=n,g.finallyBlockIndex=s==null?void 0:s.stepIndex});let l=this.compileStatementOrTerm(e.tryStatement);if(!l)return;l instanceof ae&&l.removeNextStepBeforeSnippetMark();let h=new N(`${$.endTryBlock}(); `,e.range),u=new Ge,m=new ae([a,l,h,u.getJumpToSnippet()],e.range);for(let g=0;g0&&(b=this.throwableType);let A=new Jr(f.exceptionIdentifier,f.exceptionIdentifierPosition,b,this.currentSymbolTable);A.isFinal=!0,this.currentSymbolTable.addSymbol(A),m.addNextStepMark(),m.addParts(i[g]);let C=new N(`${$.threadStack}[${V.stackBase} + ${A.stackframePosition}] = ${$.getExceptionAndTrimStack}(true); `);m.addParts(C);let w=this.compileStatementOrTerm(f.statement);w&&(w instanceof ae&&w.removeNextStepBeforeSnippetMark(),m.addParts(w)),m.addParts(u.getJumpToSnippet())}if(s=new Ge,m.addNextStepMark(),m.addParts(u),e.finallyStatement){m.addParts(s),m.addStringPart(`${$.getExceptionAndTrimStack}(false); `);let g=this.compileStatementOrTerm(e.finallyStatement);g instanceof ae&&g.removeNextStepBeforeSnippetMark(),m.addParts(g),m.addStringPart(`if(${$.getExceptionAndTrimStack}(false)){${$.return}(); return;}; `)}return m}}class av extends Xg{constructor(e,i,n,s,a){super(e,i,n,s,a);r(this,"linker");r(this,"innerclassCounter",0);r(this,"lambdaCounter",0);this.linker=new sp}compileAnonymousInnerClass(e){var g;let i=e.klass.resolvedType;if(!i)return;i.runtimeClass=class{};let n=i.runtimeClass;e.newObjectNode.type.resolvedType=i,this.compileInstanceFieldsAndInitializer(e.klass,i),this.buildStandardConstructors(i),this.compileMethods(e.klass,i,!1);let s=i.fields.filter(f=>f.isInnerClassCopyOfOuterClassLocalVariable).map(f=>f.isInnerClassCopyOfOuterClassLocalVariable),a=i.fields.filter(f=>f.isInnerClassCopyOfOuterClassLocalVariable).map(f=>f.getInternalName());i.runtimeClass=class extends((g=i.getExtends())==null?void 0:g.runtimeClass){constructor(...f){super();for(let b=0;b$.elementRelativeToStackbase(f.stackframePosition)).join(", ")})`,u=new N(h,e.range,i);return u.addEmitToStepListener(f=>{f[`$AnonymousInnerClass${l}`]=i.runtimeClass}),this.compileNewObjectNode(e.newObjectNode,u)}compileLambdaFunction(e,i){var G,K;if(!e||!i)return;if(!this.isFunctionalInterface(i)){this.pushError(v.lambdaFunctionHereNotPossible(),"error",e.range);return}if(!e.statement)return;let n=i,s=n.getOwnMethods().find(Z=>!Z.isDefault);if(e.parameters.length!=s.parameters.length){this.pushError(v.lambdaFunctionWrongParameterCount(e.parameters.length,s.parameters.length,n.identifier),"error",e.range);return}let a=s.parameters.map(Z=>Z.type instanceof nt&&Z.type.lowerBound?Z.type.lowerBound:Z.type);for(let Z=0;ZZ.isInnerClassCopyOfOuterClassLocalVariable).map(Z=>Z.isInnerClassCopyOfOuterClassLocalVariable);b.forEach(Z=>this.missingStatementManager.onSymbolRead(Z,oe.instance,this.module.errors));let A=m.fields.filter(Z=>Z.isInnerClassCopyOfOuterClassLocalVariable).map(Z=>Z.getInternalName());m.runtimeClass=class extends((K=m.getExtends())==null?void 0:K.runtimeClass){constructor(Z,...vt){super(),this[$.outerClassAttributeIdentifier]=Z;for(let Gt=0;Gt0&&(C+=", "+b.map(Z=>$.elementRelativeToStackbase(Z.stackframePosition)).join(", "));let w=f||b.length>0,x=this.lambdaCounter++,q=w?`new this.innerClass(${C})`:`this.lambdaObject${x}`,D=new N(q,e.range,m);return D.addEmitToStepListener(Z=>{w?Z.innerClass=m.runtimeClass:Z["lambdaObject"+x]=new m.runtimeClass(null)}),D}isFunctionalInterface(e){return!(!e||!(e instanceof Bt)||e.getOwnMethods().filter(i=>!i.isDefault).length!=1)}compileInstanceFieldsAndInitializer(e,i){let n=[];for(let s of e.fieldsOrInstanceInitializers)switch(s.kind){case p.fieldDeclaration:if(s.isStatic)continue;let a=this.compileFieldDeclaration(s,i);a&&n.push(a);break;case p.instanceInitializerBlock:let l=this.compileInstanceInitializerBlock(s,i);l&&n.push(l);break}i.instanceInitializer=n}compileInstanceInitializerBlock(e,i){this.pushAndGetNewSymbolTable(e.range,!0,i),this.missingStatementManager.beginMethodBody([]);let n=new ae([],e.range);for(let s of e.statements){let a=this.compileStatementOrTerm(s);a&&n.addParts(a)}return this.missingStatementManager.endMethodBody(void 0,this.module.errors),this.popSymbolTable(),n}buildStandardConstructors(e){var n;if(e.methods.some(s=>s.isConstructor))return;let i=e;for(;!i.getOwnMethods().find(s=>s.isConstructor&&s.visibility!=p.keywordPrivate);)i=i.getExtends();for(let s of i.getOwnMethods().filter(a=>a.isConstructor&&a.visibility!=p.keywordPrivate)){let a=s.getCopy();if(e.outerType&&!e.isStatic&&(a.hasOuterClassParameter=!0),e.methods.push(a),a.classEnumInterface=e,((n=e.instanceInitializer)==null?void 0:n.length)==0&&!a.hasOuterClassParameter){a.hasImplementationWithNativeCallingConvention=s.hasImplementationWithNativeCallingConvention;continue}let l=this.pushAndGetNewSymbolTable(oe.instance,!0,e,a);a.identifier=e.identifier,a.hasImplementationWithNativeCallingConvention=!1;let h=1,u=s.parameters.map(x=>`${V.stack}[${V.stackBase} + ${h++}]`).join(", ");s.hasImplementationWithNativeCallingConvention||(u=V.thread+", undefined"+(u.length==0?"":", ")+u),u.length>0&&(u=", "+u);let m=e.instanceInitializer.slice();if(a.hasOuterClassParameter){let x=new N(`${$.elementRelativeToStackbase(0)}.${$.outerClassAttributeIdentifier} = ${$.elementRelativeToStackbase(1)}; `);m.unshift(x)}let g=`let obj = ${$.elementRelativeToStackbase(0)}; let baseKlass = ${$.classes}.${i.identifier}; `,f=`baseKlass.prototype.${s.getInternalName(s.hasImplementationWithNativeCallingConvention?"native":"java")}.call(obj${u}); `,b=`${$.return}(${$.elementRelativeToStackbase(0)}); `;m.unshift(new N(g+f));let A=new ae(new N(b));A.enforceNewStepBeforeSnippet(),m.push(A);let C=a.parameters.map(x=>x.identifier);a.hasOuterClassParameter&&C.unshift($.outerClassAttributeIdentifier),a.program=new Ir(this.module,l,e.identifier+"."+a.identifier),a.program.numberOfThisObjects=1,a.program.numberOfParameters=C.length,this.linker.link(m,a.program);let w=e.runtimeClass;if(w){let x=function(q,D,...G){q.s.push(this,...G),q.pushProgram(a.program,D)};w.prototype[a.getInternalName("java")]=x}this.popSymbolTable()}}compileFieldDeclaration(e,i){var s;if(e.type.kind!=p.varType&&!e.type.resolvedType)return;let n=i.fields.find(a=>a.identifier==e.identifier);if(n)if(this.registerUsagePosition(n,e.identifierRange),n.initialValue=n.type instanceof yt?n.type.getDefaultValue():null,i instanceof ni&&(!e.isStatic||!e.isFinal)&&this.pushError(v.interfaceFieldsMustBeStatic(),"error",e),e.isStatic){this.classOfCurrentlyCompiledStaticInitialization=i;let a=this.compileInitialValue(e.initialization,e.type.resolvedType);if(this.classOfCurrentlyCompiledStaticInitialization=void 0,a){a.isConstant()?(n.initialValue=a.getConstantValue(),n.initialValueIsConstant=n.isFinal()):n.isFinal()&&a.type==this.stringNonPrimitiveType&&a.getConstantValue()&&(n.initialValueIsConstant=!0);let l=`${$.classes}.${i.identifier}.${n.getInternalName()} = §1; `,h=e.initialization?e.initialization.range:oe.instance;a=new Oe(l).applyToSnippet(n.type,h,a),a=new ae(a),a.addNextStepMark()}else{n.initialValueIsConstant=!0;let l=n.type instanceof yt?n.type.defaultValueAsString:"null";a=new N(`${$.classes}.${i.identifier}.${n.getInternalName()} = ${l}; `)}return i.runtimeClass&&(i.runtimeClass[n.getInternalName()]=n.initialValue),a}else{e.initialization&&(n.initializedBeforeConstructor=!0);let a=this.compileInitialValue(e.initialization,e.type.resolvedType);if(a){if(a.isConstant()&&(n.initialValue=a.getConstantValue(),n.initialValueIsConstant=n.isFinal(),(s=n.getType())!=null&&s.isPrimitive&&(a=void 0)),a){let l=`${$.elementRelativeToStackbase(0)}.${n.getInternalName()} = §1; `;a=new Oe(l).applyToSnippet(n.type,a.range,a),a=new ae(a),a.addNextStepMark()}}else n.initialValueIsConstant=!0;return i.runtimeClass&&(i.runtimeClass.prototype[n.getInternalName()]=n.initialValue),a}}compileAnnotation(e){return new Ky(e.identifier,e.range,e.parameter)}addDependencyInjectionSnippetsToInstanceInitializer(e,i){var n;if(i instanceof Le&&e.hasInjectedFields)for(const s of e.fieldsOrInstanceInitializers){if(s.kind!==p.fieldDeclaration||s.isStatic)continue;const a=(n=s.annotations)==null?void 0:n.find(m=>m.identifier==="Inject");if(!(a!=null&&a.parameter))continue;const l=i.fields.find(m=>m.identifier===s.identifier);if(!l)continue;const h=a.parameter,u=new N(`${$.elementRelativeToStackbase(0)}.${l.getInternalName()} = (${$.classes}.__di_instances && ${$.classes}.__di_instances["${h}"]) || null; `,s.range);i.instanceInitializer.push(u)}}compileMethodDeclaration(e,i){(e.identifier!=os.mainMethodIdentifier||!e.parentTypeScope.isMainClass)&&this.module.methodDeclarationRanges.push(e.range);const n=e.method;if(!n)return;n.setAnnotations(e.annotations.map(this.compileAnnotation)),n.isConstructor?(this.registerUsagePosition(n.classEnumInterface,e.identifierRange),this.registerUsagePosition(n,e.identifierRange)):this.registerUsagePosition(n,e.identifierRange),e.isConstructor&&i.outerType&&!i.isStatic&&(n.hasOuterClassParameter=!0);let s=this.pushAndGetNewSymbolTable(e.range,!0,n.isStatic?i.staticType:i,n);n.hasOuterClassParameter&&this.currentSymbolTable.insertInvisibleParameter();for(let u of n.parameters)this.currentSymbolTable.addSymbol(u);let a=[];n.isFullSpeedMethod()&&a.push(new N(`${$.enterFullspeedMode}(); `));let l=!1,h=!1;if(n.isConstructor){if(i instanceof ni){this.pushError(v.interfacesDontHaveConstructors(),"error",e),this.popSymbolTable();return}if([l,h]=this.checkIfSuperconstructorCallPresent(e.statement),!l&&i.instanceInitializer.length>0&&(a=a.concat(i.instanceInitializer)),n.hasOuterClassParameter){let u=new N(`${$.elementRelativeToStackbase(0)}.${$.outerClassAttributeIdentifier} = ${$.elementRelativeToStackbase(1)}; `);a.push(u)}}else n.identifier==i.identifier&&n.returnParameterType&&this.pushError(v.methodImitatesConstructor(n.identifier),"warning",n.identifierRange);if(e.statement){n.isAbstract&&this.pushError(v.abstractMethodsDontHaveMethodBodies(),"error",e),i instanceof ni&&!(n.isAbstract||n.isDefault)&&this.pushError(v.interfaceOnlyDefaultMethodsHaveBody(),"error",e);let u=this.missingStatementManager;this.missingStatementManager=new Yg,this.missingStatementManager.beginMethodBody(n.parameters);let m=e.statement?this.compileStatementOrTerm(e.statement):void 0;if(m&&a.push(m),n.isFullSpeedMethod()&&a.push(new N(`${$.exitFullspeedMode}(); `)),e.isConstructor){let f=U.fromPositions(U.getEndPosition(e.range)),b=new ae([new N(`${$.return}(${$.elementRelativeToStackbase(0)}); `,f)]);if(b.enforceNewStepBeforeSnippet(),a.push(b),!(l||h)){let A=i.getExtends();if(A instanceof mt){let C=A.getPossibleMethods(A.identifier,!0,!1).filter(w=>w.parameters.length==0);if(C.length==0)this.pushError(v.superCallInConstructorMissing(A.identifier),"error",e.identifierRange);else{let w=C[0];if(w.hasImplementationWithNativeCallingConvention){let x=new N(`${$.elementRelativeToStackbase(0)}.${w.getInternalName("native")}(); `);a.unshift(x)}else{let x=new ae(new N(`${$.elementRelativeToStackbase(0)}.${w.getInternalName("java")}(${V.thread}, undefined); `));x.addNextStepMark(),a.unshift(x)}}}}}if(n.program=new Ir(this.module,s,i.identifier+"."+n.identifier),n.isSynchronized){let f=new N(`return this.index + ${$.elementRelativeToStackbase(0)}.${R.prototype.beforeEnteringSynchronizedBlock.name}(${V.thread}); `),b=new ae([f]);b.addNextStepMark(),a.unshift(b)}if(!this.missingStatementManager.hasReturnHappened()&&!e.isConstructor){let f=U.fromPositions(U.getEndPosition(e.range));n.isSynchronized&&a.push(new N(`${$.elementRelativeToStackbase(0)}.${R.prototype.leaveSynchronizedBlock.name}(${V.thread}); `,f));let b=new ae([new N(`${$.return}();`,f)]);b.enforceNewStepBeforeSnippet(),a.push(b)}this.missingStatementManager.endMethodBody(n,this.module.errors),this.missingStatementManager=u,this.linker.link(a,n.program),e.program=n.program;let g=i.runtimeClass;if(g){n.callbackAfterCodeGeneration.forEach(b=>b());let f;n.isStatic?(f=function(b,...A){b.s.push(this,...A),b.pushProgram(n.program)},g[n.getInternalNameWithGenericParameterIdentifiers("java")]=f):(f=function(b,A,...C){b.s.push(this,...C),b.pushProgram(n.program,A)},g.prototype[n.getInternalNameWithGenericParameterIdentifiers("java")]=f)}}this.popSymbolTable()}checkIfSuperconstructorCallPresent(e){var s;if(!e)return[!1,!1];if(e.kind=p.block){let a=e;if(a.statements.length>0)e=a.statements[0];else return[!1,!1]}if(e.kind!=p.methodCall)return[!1,!1];let i=e,n=(s=i.nodeToGetObject)==null?void 0:s.kind;return n?n==p.keywordThis&&i.identifier==""?[!0,!1]:n==p.keywordSuper?[!1,!0]:[!1,!1]:[!1,!1]}async compileMethods(e,i,n){for(let s of e.methods)n&&await this.progressManager.interruptIfNeeded(),this.compileMethodDeclaration(s,i),s.isConstructor&&e.kind==p.keywordEnum&&s.visibility!=p.keywordPrivate&&this.pushError(v.enumConstructorsMustBePrivate(),"error",s.range)}}class ov extends av{constructor(t,e,i,n,s,a){super(t,e,i,n,a),this.progressManager=s,this.linker=new sp}async start(){this.module.programsToCompileToFunctions=[],await this.compileClassesEnumsAndInterfaces(this.module.ast),this.module.hasDependencyInjectionAnnotations&&this.compileDependencyInjectionInstanceInitializersRecursively(this.module.ast)}async compileClassesEnumsAndInterfaces(t){this.compileStaticFieldsAndInitializerAndEnumValuesRecursive(t),this.compileInstanceFieldsInitializersAndStandardConstructorsRecursively(t),await this.compileMethodsRecursively(t)}compileInstanceFieldsInitializersAndStandardConstructorsRecursively(t){if(t)for(let e of t.innerTypes){if(e.isAnonymousInnerType||e.kind!=p.keywordClass&&e.kind!=p.keywordEnum)continue;let i=e.resolvedType;if(!i||!e.resolvedType)return;e.annotations&&i.setAnnotations(e.annotations.map(this.compileAnnotation)),e.symbolTable?this.pushSymbolTable(e.symbolTable):e.symbolTable=this.pushAndGetNewSymbolTable(e.range,!1,i),this.compileInstanceFieldsAndInitializer(e,i),this.addDependencyInjectionSnippetsToInstanceInitializer(e,i),e.kind==p.keywordClass&&(this.buildStandardConstructors(i),this.insertJsonMethods(i)),this.compileInstanceFieldsInitializersAndStandardConstructorsRecursively(e),this.popSymbolTable()}}insertJsonMethods(t){let e=t.methods.filter(l=>l.isConstructor&&l.parameters.length==0),i=!1,n=t.getExtends();for(;n!=this.objectType;){if((n==null?void 0:n.module)instanceof Oa){i=!0;break}n=n.getExtends()}if(!e||i)return;let s=new Ui("toJson",oe.instance,this.module);s.hasImplementationWithNativeCallingConvention=!0,s.isFinal=!0,s.returnParameterType=this.stringType,t.methods.push(s),t.runtimeClass.prototype._mn$toJson$string$=function(){return new $p().toJson(this)};let a=new Ui("fromJson",oe.instance,this.module);a.isStatic=!0,a.parameters.push(new ls("jsonString",oe.instance,this.module,this.stringType,!0,!1,!1)),a.returnParameterType=t,a.hasImplementationWithNativeCallingConvention=!0,t.methods.push(a),t.runtimeClass["_mn$fromJson$"+t.identifier+"$string"]=function(l){return new $p().fromJson(l,t)}}compileStaticFieldsAndInitializerAndEnumValuesRecursive(t){if(t)for(let e of t.innerTypes){if(e.isAnonymousInnerType)continue;let i=e.resolvedType;if(!i||!e.resolvedType)return;e.symbolTable?this.pushSymbolTable(e.symbolTable):(e.symbolTable=this.pushAndGetNewSymbolTable(e.range,!1,i),e.isMainClass&&e.parent.mainProgramNode&&(e.symbolTable.hiddenWhenDebugging=!0)),this.compileStaticFieldsAndInitializerAndEnumValues(i,e),this.compileStaticFieldsAndInitializerAndEnumValuesRecursive(e),this.popSymbolTable()}}async compileMethodsRecursively(t){if(t)for(let e of t.innerTypes){if(e.isAnonymousInnerType)continue;let i=e.resolvedType;if(!i||!e.resolvedType)return;e.symbolTable?this.pushSymbolTable(e.symbolTable):e.symbolTable=this.pushAndGetNewSymbolTable(e.range,!1,i),await this.compileMethods(e,i,!0),await this.compileMethodsRecursively(e),this.popSymbolTable()}}compileStaticFieldsAndInitializerAndEnumValues(t,e){let i=[];e.kind==p.keywordEnum&&this.compileEnumValueConstruction(t,e,i);for(let n of e.fieldsOrInstanceInitializers)switch(n.kind){case p.fieldDeclaration:if(!n.isStatic){t instanceof ni&&this.pushError(v.interfaceFieldsMustBeStatic(),"error",e);continue}let s=this.compileFieldDeclaration(n,t);s&&i.push(s);break;case p.staticInitializerBlock:let a=this.compileStaticInitializerBlock(n);a&&i.push(a);break}t.staticInitializer=this.buildInitializer(i,"staticInitializer"),e.staticInitializer=t.staticInitializer}compileEnumValueConstruction(t,e,i){i.push(new N(`${$.classes}["${t.identifier}"].values = []; `));let n=t.methods.find(a=>a.isConstructor&&a.parameters.length==0),s=0;for(let a of e.valueNodes){let l;if(a.parameterValues.length>0||n){let m=a.parameterValues.map(b=>this.compileTerm(b));if(m.some(b=>!b||!b.type))continue;let f=this.searchMethod(t.identifier,t,m.map(b=>b.type),!0,!1,!1,e.range).best;if(!f){this.pushError(v.cantFindConstructor(),"error",e);continue}l=this.invokeConstructor(m,f,t,a,void 0,a.identifier,s),l=new ae(l),l.ensureFinalValueIsOnStack(),l.addNextStepMark()}else l=new N(`new ${$.classes}["${t.identifier}"]("${a.identifier}", ${s})`);let h=t.fields.find(m=>m.identifier==a.identifier),u=new Oe(`${$.classes}["${t.identifier}"].values.push(${$.classes}["${t.identifier}"]["${h.getInternalName()}"] = §1); `).applyToSnippet(t,a.range,l);i.push(u),s++}}compileDependencyInjectionInstanceInitializersRecursively(t){var e;if(t)for(let i of t.innerTypes){if(i.isAnonymousInnerType||i.kind!==p.keywordClass)continue;const n=i.resolvedType;if(!n)continue;const s=(e=i.annotations)==null?void 0:e.find(m=>m.identifier==="Instance");if(!(s!=null&&s.parameter)){this.compileDependencyInjectionInstanceInitializersRecursively(i);continue}const a=s.parameter,l=n.methods.find(m=>m.isConstructor&&m.parameters.length===0);if(!l){this.compileDependencyInjectionInstanceInitializersRecursively(i);continue}i.symbolTable?this.pushSymbolTable(i.symbolTable):i.symbolTable=this.pushAndGetNewSymbolTable(i.range,!1,n);const h=[];if(l.hasImplementationWithNativeCallingConvention){const m=l.getInternalName("native");h.push(new N(`if(!${$.classes}.__di_instances) ${$.classes}.__di_instances = {}; ${$.classes}.__di_instances["${a}"] = new ${$.classes}["${n.pathAndIdentifierAsDotSeparatedString}"]().${m}(); `))}else{const m=l.getInternalName("java"),g=new N(`new ${$.classes}["${n.pathAndIdentifierAsDotSeparatedString}"]().${m}(${V.thread}, undefined); `,n.identifierRange),f=new ae([g],n.identifierRange);f.addNextStepMark(),f.finalValueIsOnStack=!0,h.push(f),h.push(new N(`if(!${$.classes}.__di_instances) ${$.classes}.__di_instances = {}; ${$.classes}.__di_instances["${a}"] = ${V.thread}.s[${V.thread}.s.length - 1]; ${V.thread}.s.pop(); `))}n.diInstanceName=a,n.diInitializer=this.buildInitializer(h,"diInitializer:"+a),this.popSymbolTable(),this.compileDependencyInjectionInstanceInitializersRecursively(i)}}buildInitializer(t,e){let i=new Ir(this.module,this.currentSymbolTable,e);return t.length>0&&t.push(new N(`${$.return}();`)),this.linker.link(t,i),i}compileStaticInitializerBlock(t){this.missingStatementManager.beginMethodBody([]);let e=new ae([],t.range);for(let i of t.statements){let n=this.compileStatementOrTerm(i);n&&e.addParts(n)}return this.missingStatementManager.endMethodBody(void 0,this.module.errors),e}}class ap{constructor(t,e){r(this,"isExtendedImplementedBy",{});if(t&&e){let i=t.getNonPrimitiveTypes().filter(n=>n.fastExtendsImplements("Throwable"));i=i.concat(e.getNonPrimitiveTypes().filter(n=>n.fastExtendsImplements("Throwable")));for(let n of i)for(let s of n.getExtendedImplementedIdentifiers())this.register(s,n.pathAndIdentifierAsDotSeparatedString)}}register(t,e){if(t=="Object")return;let i=this.isExtendedImplementedBy[t];i||(i={},this.isExtendedImplementedBy[t]=i),i[e]=!0}getAllSubExceptions(t){return this.isExtendedImplementedBy[t]||{}}}class lv{constructor(){r(this,"hexColorRegExp",/^#([a-fA-F0-9]{6})$/);r(this,"rgbColorRegExp",/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/);r(this,"rgbaColorRegExp",/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*(\d*(?:\.\d+)?)\)$/)}getColorInfo(t){if(t.startsWith("#")){let e=t.match(this.hexColorRegExp);if(e==null)return null;let i=Number.parseInt(e[1],16);return{red:(i>>16)/255,green:(i>>8&255)/255,blue:(i&255)/255,alpha:1}}else if(t.startsWith("rgb"))if(t.startsWith("rgba")){let e=t.match(this.rgbaColorRegExp);return e==null?null:{red:Number.parseInt(e[1])/255,green:Number.parseInt(e[2])/255,blue:Number.parseInt(e[3])/255,alpha:Number.parseFloat(e[4])}}else{let e=t.match(this.rgbColorRegExp);return e==null?null:{red:Number.parseInt(e[1])/255,green:Number.parseInt(e[2])/255,blue:Number.parseInt(e[3])/255,alpha:1}}return null}}var sr="►";const Kr=class Kr{constructor(){r(this,"tokens");r(this,"bracketError");r(this,"colorInformation");r(this,"errorList");r(this,"nonSpaceLastTokenType");r(this,"colorLexer",new lv);r(this,"pos");r(this,"line");r(this,"column");r(this,"currentChar","");r(this,"nextChar","");r(this,"spaceTokens",[p.space,p.tab,p.newline]);r(this,"bracketStack");r(this,"colorIndices");r(this,"input","");this.tokens=[],this.bracketError=void 0,this.errorList=[],this.colorInformation=[],this.bracketStack=[],this.pos=0,this.line=1,this.column=1,this.nonSpaceLastTokenType=void 0,this.colorIndices=[]}lex(t){if(!t||t.length==0)return{tokens:this.tokens,errors:this.errorList,bracketError:void 0,colorInformation:[]};for(this.input=t,this.currentChar=this.input.charAt(0),this.nextChar=this.input.length>1?this.input.charAt(1):sr;this.currentChar!=sr;)this.mainState();if(this.bracketStack.length>0){let e=this.bracketStack.pop(),i=Kr.correspondingBracket[e];this.setBracketError($e[e]+" "+$e[i])}return this.processColorIndices(),this.tokens.push({range:{startLineNumber:this.line,startColumn:this.column,endLineNumber:this.line,endColumn:this.column},tt:p.endofSourcecode,value:"program end"}),{tokens:this.tokens,errors:this.errorList,bracketError:this.bracketError,colorInformation:this.colorInformation}}processColorIndices(){for(let t of this.colorIndices){let e=this.tokens[t],i=this.getLastNonSpaceToken(t);if((i==null?void 0:i.tt)==p.keywordNew){let n=this.getNextNonSpaceTokens(t,7);this.compareTokenTypes(n,[p.leftBracket,p.integerLiteral,p.comma,p.integerLiteral,p.comma,p.integerLiteral,p.rightBracket])&&this.colorInformation.push({color:{red:n[1].value/255,green:n[3].value/255,blue:n[5].value/255,alpha:1},range:{startLineNumber:i.range.startLineNumber,startColumn:i.range.startColumn,endLineNumber:n[6].range.endLineNumber,endColumn:n[6].range.endColumn}})}else{let n=this.getNextNonSpaceTokens(t,2);if(this.compareTokenTypes(n,[p.dot,p.identifier])){let s=n[1].value,a=Ke.predefinedColors[s];a!=null&&this.colorInformation.push({color:{red:(a>>16)/255,green:(a>>8&255)/255,blue:(a&255)/255,alpha:1},range:{startLineNumber:e.range.startLineNumber,startColumn:e.range.startColumn,endLineNumber:n[1].range.endLineNumber,endColumn:n[1].range.endColumn}})}}}}compareTokenTypes(t,e){if(t.length!=e.length)return!1;for(let i=0;i0;){let i=this.tokens[e-1];if([p.space,p.newline].indexOf(i.tt)<0)return i;e--}return null}checkClosingBracket(t){if(this.bracketStack.length==0){let n=Kr.correspondingBracket[t];this.setBracketError($e[n]+" "+$e[t]);return}let e=this.bracketStack.pop(),i=Kr.correspondingBracket[e];t!=i&&this.setBracketError($e[e]+" "+$e[i])}setBracketError(t){this.bracketError==null&&(this.bracketError=t)}next(){this.pos++,this.currentChar=this.nextChar,this.pos+1=0)){this.lexNumber();return}else if(this.nextChar=="="){this.pushToken(p.plusAssignment,"+="),this.next(),this.next();return}else{this.pushToken(p.plus,"+"),this.next();return}case p.lower:if(this.nextChar=="="){this.pushToken(p.lowerOrEqual,"<="),this.next(),this.next();return}else if(this.nextChar=="<"){this.lexShiftLeft();return}else{this.pushToken(p.lower,"<"),this.next();return}case p.greater:if(this.nextChar=="="){this.pushToken(p.greaterOrEqual,">="),this.next(),this.next();return}else if(this.nextChar==">"){this.lexShiftRight();return}else{this.pushToken(p.greater,">"),this.next();return}case p.dot:if(this.nextChar=="."&&this.pos+2"){this.pushToken(p.lambdaOperator,"->"),this.next(),this.next();return}else if(this.isDigit(this.nextChar,10)&&!([p.identifier,p.integerLiteral,p.floatLiteral,p.stringLiteral,p.rightBracket,p.rightSquareBracket].indexOf(this.nonSpaceLastTokenType)>=0)){this.lexNumber();return}else if(this.nextChar=="="){this.pushToken(p.minusAssignment,"-="),this.next(),this.next();return}else{this.pushToken(p.minus,"-"),this.next();return}case p.singleQuote:this.lexCharacterConstant();return;case p.doubleQuote:this.nextChar=='"'&&this.pos+3"?this.lexShiftRightUnsigned():this.nextChar=="="?(this.pushToken(p.shiftRightAssigment,">>="),this.next(),this.next()):(this.pushToken(p.shiftRight,">>"),this.next())}lexShiftRightUnsigned(){this.next(),this.nextChar=="="?(this.pushToken(p.shiftRightUnsignedAssigment,">>>="),this.next(),this.next()):(this.pushToken(p.shiftRightUnsigned,">>>"),this.next())}lexShiftLeft(){this.next(),this.nextChar=="="?(this.pushToken(p.shiftLeftAssigment,"<<="),this.next(),this.next()):(this.pushToken(p.shiftLeft,"<<"),this.next())}pushToken(t,e,i=this.line,n=this.column,s,a){s||(s=i),a||(a=n+(""+e).length);let l={tt:t,value:e,range:{startLineNumber:i,startColumn:n,endLineNumber:s,endColumn:a}};this.spaceTokens.indexOf(t)>=0||(this.nonSpaceLastTokenType=t),this.tokens.push(l)}pushError(t,e,i="error",n=this.line,s=this.column,a,l){this.errorList.push({message:t.message,id:t.id,range:{startLineNumber:n,startColumn:s,endLineNumber:10,endColumn:10},level:i})}isDigit(t,e){var i=t.charCodeAt(0);if(e==10)return i>=48&&i<=57;if(e==2)return i>=48&&i<=49;if(e==8)return i>=48&&i<=55;if(e==16)return i>=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70}lexSpace(){let t=this.column,e=this.line,i=this.pos;for(;Kr.spaceCharacters.indexOf(this.currentChar)>=0;)this.next();let n=this.pos;this.pushToken(p.space,this.input.substring(i,n),e,t,this.line,this.column)}lexCharacterConstant(){let t=this.column,e=this.line;this.next();let i=this.currentChar;if(i=="\\"){let n=rc[this.nextChar];n==null?(this.pushError(v.unknownEscapeSequence(this.nextChar),2),this.nextChar!="'"&&(i=this.nextChar,this.next())):(i=n,this.next())}this.next(),this.currentChar!="'"?this.pushError(v.expectingEndOfCharConstant(),1):this.next(),this.pushToken(p.charLiteral,i,e,t,this.line,this.column)}lexStringConstant(){let t=this.line,e=this.column,i="";for(this.next();;){let s=this.currentChar;if(s=="\\"){s=this.parseStringLiteralEscapeCharacter(),i+=s;continue}else if(s=='"'){this.next();break}else if(s==` `||s==sr){this.pushError(v.endOfLineInsideStringLiteral(),i.length+1,"error",t,e),i+=" ",this.next();break}i+=s,this.next()}this.pushToken(p.stringLiteral,i,t,e,this.line,this.column);let n=this.colorLexer.getColorInfo(i);n!=null&&this.colorInformation.push({color:n,range:{startLineNumber:t,endLineNumber:t,startColumn:e+1,endColumn:this.column-1}})}lexTripleQuoteStringConstant(){let t=this.line,e=this.column,i=[];this.next(),this.next(),this.next();let n="";for(;[` `,"\r"].indexOf(this.currentChar)<0&&this.currentChar!=sr;)n+=this.currentChar,this.next();n=n.trim(),n.length>0&&!n.startsWith("//")&&!n.startsWith("/*")&&this.pushError(v.charactersAfterMultilineStringLiteralStart(),n.length+3),this.currentChar=="\r"&&this.next(),this.currentChar==` `&&(this.next(),this.line++,this.column=1);let s="";for(;;){let u=this.currentChar;if(u=="\\")s+=this.parseStringLiteralEscapeCharacter();else if(u=='"'&&this.nextChar=='"'&&this.pos+2l&&a.charAt(l)==" ";)l++;let h="";h=i.map(u=>u.substring(l)).join(` `),this.pushToken(p.stringLiteral,h,t,e,this.line,this.column)}parseStringLiteralEscapeCharacter(){if(this.next(),this.currentChar=="u"){let t="";for(this.next();"abcdef0123456789".indexOf(this.currentChar)>=0&&t.length<4;)t+=this.currentChar,this.next();return t.length<4?(this.pushError(v.unknownEscapeSequence("u"+t),1+t.length),""):String.fromCodePoint(parseInt(t,16))}else if(rc[this.currentChar]!=null){let t=rc[this.currentChar];return this.next(),t}else return this.pushError(v.unknownEscapeSequence(this.currentChar),2),this.next(),""}lexMultilineComment(){let t=this.line,e=this.column,i=!1,n="/*";for(this.next(),this.next();;){let s=this.currentChar;if(s=="*"&&this.nextChar=="/"){this.next(),this.next(),n+="*/";break}if(s==sr){this.pushError(v.endOfTextInsideJavadocComment(),1);break}s==` `?(this.line++,this.column=0,i=!0,n+=s):i&&s==" "||(n+=s,i=!1),this.next()}this.pushToken(p.comment,n,t,e,this.line,this.column)}lexEndofLineComment(){let t=this.line,e=this.column,i="//";for(this.next(),this.next();;){let n=this.currentChar;if(n==` `||n==sr)break;i+=n,this.next()}this.pushToken(p.comment,i,t,e,this.line,this.column)}lexNumber(){let t=this.line,e=this.column,i=1;this.currentChar=="-"?(i=-1,this.next()):this.currentChar=="+"&&this.next();let n=this.pos,s=this.currentChar;this.next();let a=10;for(s=="0"&&["b","x","0","1","2","3","4","5","6","7"].indexOf(this.currentChar)>=0&&(this.currentChar=="x"?(a=16,this.next()):this.currentChar=="b"?(a=2,this.next()):a=8,n=this.pos);this.isDigit(this.currentChar,a);)this.next();let l=p.integerLiteral,h=0,u="";if(this.currentChar=="L")u=this.input.substring(n,this.pos),l=p.longConstant,this.next();else{if(this.currentChar=="."){for(l=p.floatLiteral,this.next();this.isDigit(this.currentChar,10);)this.next();a!=10&&this.pushError(v.wrongFloatConstantBegin(),this.pos-n,"error",this.line,this.column-(this.pos-n))}if(u=this.input.substring(n,this.pos),n=this.pos,this.currentChar=="e"){this.next();let g=this.pos;for(this.currentChar=="-"&&this.next();this.isDigit(this.currentChar,10);)this.next();a!=10&&this.pushError(v.wrongFloatConstantBegin(),this.pos-n,"error",this.line,this.column-(this.pos-n));let f=this.input.substring(g,this.pos);h=Number.parseInt(f)}(this.currentChar=="d"||this.currentChar=="f")&&(l=p.floatLiteral,this.currentChar=="d"&&(l=p.doubleConstant),this.next(),a!=10&&this.pushError(v.wrongFloatConstantBegin(),this.pos-n,"error",this.line,this.column-(this.pos-n)))}let m=l==p.integerLiteral?Number.parseInt(u,a):Number.parseFloat(u);m*=i,h!=0&&(m*=Math.pow(10,h)),this.pushToken(l,m,t,e,this.line,this.column),a==16&&this.column-e==8&&this.colorInformation.push({color:{red:(m>>16)/255,green:(m>>8&255)/255,blue:(m&255)/255,alpha:1},range:{startLineNumber:t,endLineNumber:this.line,startColumn:e,endColumn:this.column}})}lexAnnotation(){let t=this.line,e=this.column-1,i=this.pos;this.next(),this.pushToken(p.at,"@",t,e,this.line,e+1);let n=this.currentChar;for(;nc[n]==null&&!this.isSpace(n)&&n!=sr;)this.next(),n=this.currentChar;let s=this.pos,a=this.input.substring(i+1,s);this.pushToken(p.identifier,a,t,e+1,this.line,this.column)}lexIdentifierOrKeyword(){var h;let t=this.line,e=this.column,i=this.pos,n=this.currentChar;for(;nc[n]==null&&!this.isSpace(n)&&n!=sr;)this.next(),n=this.currentChar;let s=this.pos,a=this.input.substring(i,s),l=Tb[a];if(l!=null&&typeof l=="number"){switch(l){case p.true:this.pushToken(p.booleanLiteral,!0,t,e,this.line,this.column);break;case p.false:this.pushToken(p.booleanLiteral,!1,t,e,this.line,this.column);break;case p.keywordPrint:case p.keywordPrintln:this.nonSpaceLastTokenType==p.dot?this.pushToken(p.identifier,a,t,e,this.line,this.column):this.pushToken(l,a,t,e,this.line,this.column);break;case p.keywordClass:((h=this.tokens[this.tokens.length-1])==null?void 0:h.tt)==p.dot?this.pushToken(p.identifier,"class",t,e,this.line,this.column):this.pushToken(l,a,t,e,this.line,this.column);break;default:this.pushToken(l,a,t,e,this.line,this.column);break}return}a=="Color"&&this.colorIndices.push(this.tokens.length),this.pushToken(p.identifier,a,t,e,this.line,this.column)}isSpace(t){return Kr.spaceCharacters.indexOf(t)>=0||t==` `}};r(Kr,"correspondingBracket",{[p.leftBracket]:p.rightBracket,[p.leftCurlyBracket]:p.rightCurlyBracket,[p.leftSquareBracket]:p.rightSquareBracket,[p.rightBracket]:p.leftBracket,[p.rightCurlyBracket]:p.leftCurlyBracket,[p.rightSquareBracket]:p.leftSquareBracket}),r(Kr,"spaceCharacters",[" "," ","슠"," "]);let _l=Kr;class op{constructor(){r(this,"typeMap",new Map);r(this,"mainClasses",[])}empty(){this.typeMap=new Map,this.mainClasses=[]}addType(t){if(t instanceof we){let e=this.typeMap,i,n=t.pathAndIdentifierAsArray;for(let s=0;s!(h instanceof ti)):[];let l=n.get(a);return l?(i&&e.registerTypeUsage(l,i[i.length-1]),[l]):[]}populateClassObjectRegistry(t){this.typeMap.forEach((e,i)=>{this.populateClassObjectRegistryRecursive(e,t)})}populateClassObjectRegistryRecursive(t,e){t instanceof ti?t.childrenList.forEach(i=>{this.populateClassObjectRegistryRecursive(i,e)}):t instanceof we&&t.runtimeClass&&(e[t.pathAndIdentifierAsDotSeparatedString]=t.runtimeClass,t.innerTypes.forEach(i=>{this.populateClassObjectRegistryRecursive(i,e)}))}initFastExtendsImplementsLookup(){this.typeMap.forEach((t,e)=>{this.initFastExtendsImplementsLookupRecursive(t)})}initFastExtendsImplementsLookupRecursive(t){t instanceof we?t.registerExtendsImplementsOnAncestors():t instanceof ti&&t.childrenList.forEach(e=>{this.initFastExtendsImplementsLookupRecursive(e)})}getClasses(){let t=[];return this.typeMap.forEach((e,i)=>{this.getClassesRecursive(e,t)}),t}getClassesRecursive(t,e){t instanceof Le&&e.push(t),t instanceof ti&&t.childrenList.forEach(i=>{this.getClassesRecursive(i,e)})}getNonPrimitiveTypes(){let t=[];return this.typeMap.forEach((e,i)=>{this.getNonPrimitiveTypesRecursive(e,t)}),t}getNonPrimitiveTypesRecursive(t,e){t instanceof ti?t.childrenList.forEach(i=>{this.getNonPrimitiveTypesRecursive(i,e)}):t instanceof we&&e.push(t)}getAllTypes(){let t=[];return this.typeMap.forEach((e,i)=>{this.getAllTypesRecursive(e,t)}),t}getAllTypesRecursive(t,e){e.push(t),t instanceof we?t.innerTypes.forEach(i=>{this.getAllTypesRecursive(i,e)}):t instanceof ti&&t.childrenList.forEach(i=>{this.getAllTypesRecursive(i,e)})}getTypeCompletionItems(t,e,i,n,s){let a=[];return this.getAllTypes().forEach((l,h)=>{let u=l.getPath(),m=!1;if(u.length==1)m=!0;else for(let g of s)if(g.length==u.length){let f=!0;for(let b=0;b0),A="";i&&(A="($0)",b&&(A="<>($0)")),a.push({label:l.identifier,detail:l.getCompletionItemDetail()+(b?"("+v.genericType()+")":""),insertText:g.identifier+A,documentation:l.getDocumentation(),kind:f,range:e,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}})}}),a}}class Jg{compileModulesToJavascript(){for(let t of this.getModules())if(!t.hasErrors())for(let e of t.programsToCompileToFunctions){let i=e.compileToJavascriptFunctions();if(i!=null)return t.errors.push(i),!1}return!0}}var Wt;class ef extends Jg{constructor(e){super();J(this,Wt,[]);r(this,"typestore");r(this,"overriddenOrImplementedMethodPaths",{});this.workspace=e,this.typestore=new op}getModules(){return M(this,Wt)}addModule(e){M(this,Wt).push(e)}getModuleFromFile(e){return M(this,Wt).find(i=>i.file==e)}setupModulesBeforeCompiliation(e){this.removeUnusedModulesAndMarkDependentModulesDirty(e),this.createNewModules(e)}emptyTypeStore(){this.typestore.empty()}setDependsOnModuleWithErrorsFlag(){M(this,Wt).forEach(i=>i.dependsOnModuleWithErrorsFlag=i.hasErrors());let e=!1;for(;!e;){e=!0;for(let i of M(this,Wt))if(!i.dependsOnModuleWithErrorsFlag&&i.dependsOnModuleWithErrors()){i.dependsOnModuleWithErrorsFlag=!0,e=!1;break}}}iterativelySetDirtyFlags(){for(let i of M(this,Wt))i.hasErrors()&&i.setDirty(!0);let e=!1;for(;!e;){e=!0;for(let i of M(this,Wt))if(!i.isDirty()&&i.dependsOnOtherDirtyModule()){i.setDirty(!0),e=!1;break}}for(let i of M(this,Wt))i.isDirty()&&i.resetBeforeCompilation()}createNewModules(e){for(let i of e)if(!this.getModuleFromFile(i)){let n=new $r(i,this);this.addModule(n)}}removeUnusedModulesAndMarkDependentModulesDirty(e){let i=M(this,Wt).filter(n=>e.indexOf(n.file)<0);ee(this,Wt,M(this,Wt).filter(n=>e.indexOf(n.file)>=0));for(let n of i)for(let s of M(this,Wt))s.dependsOnModule(n)&&s.setDirty(!0)}getNewOrDirtyModules(e=!1){return M(this,Wt).filter(i=>i.isDirty())}getUnChangedModules(){return M(this,Wt).filter(e=>!e.isDirty())}findModuleByFile(e){return M(this,Wt).find(i=>i.file==e)}getTypeCompletionItems(e,i,n){return this.typestore.getTypeCompletionItems(n,i,!1,!1,e.imports)}correctUsagePositionsOfAbstractAndInterfaceMethods(){for(let e of M(this,Wt))e.getUsagePositionsForSymbol}}Wt=new WeakMap;const co=class co{constructor(){}lex(t){let e=[],i=0,n="";for(;i=0&&e":p.greater,",":p.comma,"&":p.ampersand,":":p.colon," ":p.space,"\n":p.space,"\r":p.space,".":p.dot});let bm=co;const nn=class nn extends bm{constructor(e){super();r(this,"tokenList",[]);r(this,"pos",0);r(this,"cct",nn.endOfSourcecodeToken);r(this,"tt",p.endofSourcecode);r(this,"currentDeclaration","");r(this,"currentClassIdentifier","");r(this,"currentClass");r(this,"currentTypeStore",new op);r(this,"genericParameterMapStack",[]);r(this,"startBracketList",[p.leftBracket,p.leftCurlyBracket,p.leftSquareBracket,p.lower]);r(this,"endBracketList",[p.rightBracket,p.rightCurlyBracket,p.rightSquareBracket,p.greater]);this.systemModule=e}parseClassOrEnumOrInterfaceDeclarationWithoutGenerics(e,i){var A;let n=(A=e.__javaDeclarations)==null?void 0:A.find(C=>C.type=="declaration");n||console.log("Error parsing library class "+e.name+": missing java class declaration.");let s=n?n.signature:"public class "+e.name+" extends Object";this.initTokens(s);let a=this.parseModifiersAndType(!0),l=[];do this.expect(p.identifier,!1),l.push(this.cct.value),this.nextToken();while(this.comesToken(p.dot,!0));let h=l.length>1,u=n==null?void 0:n.package;u&&(l=u.split(".").concat(l));let m=h?l.slice(0,-1).join("."):void 0,g=l.join("."),f=l[l.length-1]||"";this.currentClassIdentifier=f;let b;switch(a.type){case p.keywordClass:b=new Le(f,nn.nullRange,g,i),b.isLibraryType=!0;let C=b;C.runtimeClass=e,C.isStatic=a.static,C.isFinal=a.final,C._isAbstract=a.abstract,C.visibility=a.visibility,e.isPrimitiveTypeWrapper&&(b.isPrimitiveTypeWrapper=!0);break;case p.keywordInterface:b=new ni(f,nn.nullRange,g,i),b.isLibraryType=!0,b.runtimeClass=e;break;case p.keywordEnum:b=new xi(f,nn.nullRange,g,i,Object.getPrototypeOf(Object.getPrototypeOf(e)).type),b.isLibraryType=!0;let w=b;w.runtimeClass=e,w.visibility=a.visibility,w.baseEnumClass=this.findType("Enum"),this.initEnumValues(w,e,i),w.addValuesMethod(e,this.systemModule.types.find(x=>x.identifier=="string"));break}if(e.type=b,b.documentation=n==null?void 0:n.comment,m){let C=this.currentTypeStore.getType(m);C&&(b.outerType=C)}return b}parseClassOrInterfaceDeclarationGenericsAndExtendsImplements(e,i,n){var h;this.currentClassIdentifier=e.name,this.currentTypeStore=i;let s=(h=e.__javaDeclarations)==null?void 0:h.find(u=>u.type=="declaration");s||console.log("Error parsing library class "+e.name+": missing java class declaration.");let a=s?s.signature:"public class "+e.name+" extends Object";this.initTokens(a),this.skipTill([p.lower,p.keywordExtends,p.keywordImplements],!1);let l=e.type;for(this.comesToken(p.lower,!1)&&(l instanceof xi?(this.pushError("Ein enum-Typ kann nicht generisch sein."),this.skipTill([p.keywordExtends,p.keywordImplements],!1)):l.genericTypeParameters=this.parseGenericParameters(n));this.comesToken([p.keywordExtends,p.keywordImplements],!1);)if(l instanceof xi)this.pushError("Ein enum-Typ kann nicht generisch sein."),this.skipTill([p.keywordExtends,p.keywordImplements],!1);else{let u=l,m=this.tt;switch(this.nextToken(),m){case p.keywordExtends:let g=this.parseCommaSeparatedTypeList(n);g.length>0&&(u instanceof Le?u.setExtends(g[0]):u.addExtends(g));break;case p.keywordImplements:let f=this.parseCommaSeparatedTypeList(n);f.length>0&&u instanceof Le&&u.addImplements(f);break}}l instanceof Le&&!l.getExtends()&&l.identifier!="Object"&&l.setExtends(this.currentTypeStore.getType("Object"))}parseCommaSeparatedTypeList(e){let i=[];do i.push(this.parseType(e));while(this.comesToken(p.comma,!0));return i}parseGenericParameters(e){if(!this.comesToken(p.lower,!0))return[];let i=this.pos;if(!this.comesToken(p.identifier,!1))return this.pushError("Lese Definition eines generischen Parameters. Nach dem < wird ein Bezeichner erwartet."),[];let n=[],s=this.genericParameterMapStack[this.genericParameterMapStack.length-1];do{let a=this.cct.value,l=new nt(a,e,nn.nullRange,[],void 0);n.push(l),s[a]=l,this.nextToken(),this.skipSymmetricBracketsUntil([p.comma,p.greater])}while(this.comesToken(p.comma,!0));this.expect(p.greater,!0),this.pos=i-1,this.nextToken();do this.parseGenericParameterDeclaration(e);while(this.comesToken(p.comma,!0));return this.expect(p.greater,!0),n}skipSymmetricBracketsUntil(e){let i=0;for(;this.pos0||e.indexOf(this.tt)<0);)this.startBracketList.indexOf(this.tt)>=0?i++:this.endBracketList.indexOf(this.tt)>=0&&i--,this.nextToken()}parseGenericParameterDeclaration(e){let i=this.expectIdentifier(),n=[],s;for(;this.comesToken([p.keywordExtends,p.keywordImplements],!1);){let h=this.tt;switch(this.nextToken(),h){case p.keywordExtends:do n.push(this.parseType(e));while(this.comesToken(p.ampersand,!0));break;case p.keywordImplements:s=this.parseType(e);break}}let l=this.genericParameterMapStack[this.genericParameterMapStack.length-1][i];return l.upperBounds=n,l.lowerBound=s,l}parseType(e){var s;let i=this.expectIdentifier();if(i==La.identifier)return La.this();for(;this.comesToken(p.dot,!0);)i+="."+this.expectIdentifier();if(i=="")return this.currentTypeStore.getType("void");if(i=="?"){let a=new nt(i,e,oe.instance);return a.isWildcard=!0,a}let n=this.findType(i);if(this.comesToken(p.lower,!0))if((((s=n.genericTypeParameters)==null?void 0:s.length)||0)==0)this.pushError("Der Typ "+n.identifier+" ist nicht generisch."),this.skipTill(p.greater,!0);else{let a=new Map;for(let l of n.genericTypeParameters){let h=this.parseType(e);if(h instanceof nt&&h.isWildcard&&(this.comesToken(p.keywordExtends,!0)&&h.upperBounds.push(this.parseType(e)),this.comesToken(p.keywordSuper,!0)&&(h.lowerBound=this.parseType(e))),a.set(l,h),this.comesToken(p.greater,!1))break;this.expect(p.comma,!0)}this.expect(p.greater,!0),n=n.getCopyWithConcreteType(a)}for(;this.comesToken(p.leftSquareBracket,!0);)n instanceof Ie?n.dimension++:n=new Ie(n,1,e,nn.nullRange),this.expect(p.rightSquareBracket,!0);return n}findType(e){let i;if(this.currentClass&&this.currentClass.identifier==e&&this.currentClass.identifier!="string")return this.currentClass;for(let n=this.genericParameterMapStack.length-1;n>=0;n--)if(i=this.genericParameterMapStack[n][e],i)return i;return i=this.currentTypeStore.getType(e),i||(this.pushError("Konnte den Typ "+e+" nicht finden."),this.currentTypeStore.getType("void"))}expectIdentifier(){if(this.comesToken(p.identifier,!1)){let e=this.cct.value;return this.nextToken(),e}return this.pushError("Ein Bezeichner wird erwartet, gefunden wurde "+this.cct.value+"."),""}parseModifiersAndType(e){let i={visibility:p.keywordPublic,static:!1,final:!1,abstract:!1,default:!1,type:p.keywordClass},n=!0;for(;!this.isEnd();){switch(this.tt){case p.keywordPublic:case p.keywordProtected:case p.keywordPrivate:i.visibility=this.tt;break;case p.keywordStatic:i.static=!0;break;case p.keywordFinal:i.final=!0;break;case p.keywordAbstract:i.abstract=!0;break;case p.keywordDefault:i.default=!0;break;case p.keywordClass:case p.keywordInterface:case p.keywordEnum:i.type=this.tt,n=!1;break;default:return n&&e&&this.pushError("Es fehlt der Typ (class, interface oder enum)."),i}this.nextToken()}return i}initTokens(e){this.tokenList=this.lex(e),this.pos=0,this.cct=this.tokenList[0],this.tt=this.cct.tt,this.currentDeclaration=e}comesToken(e,i){return Array.isArray(e)||(e=[e]),e.indexOf(this.tt)>=0?(i&&this.nextToken(),!0):!1}skipTill(e,i){for(Array.isArray(e)||(e=[e]);!this.isEnd()&&e.indexOf(this.tt)<0;)this.nextToken();i&&this.nextToken()}nextToken(){if(this.pos++,this.pos>=this.tokenList.length){this.cct=nn.endOfSourcecodeToken,this.tt=this.cct.tt;return}this.cct=this.tokenList[this.pos],this.tt=this.cct.tt}isEnd(){return this.pos>=this.tokenList.length}pushError(e){console.log("Error parsing library declaration for class "+this.currentClassIdentifier+" ("+e+"): "+this.currentDeclaration)}expect(e,i){return e==this.tt?(i&&this.nextToken(),!0):(this.pushError("Erwartet wird "+p[e]+", gefunden wurde: "+this.cct.value),!1)}parseFieldsAndMethods(e,i,n){this.currentTypeStore=i;let s=e.__javaDeclarations;if(s){this.currentClassIdentifier=e.name,this.currentClass=e.type;for(let a of s.filter(l=>l.type=="field"||l.type=="method"))this.initTokens(a.signature),this.parseFieldOrMethod(e,n,a);this.insertClassField(e),this.currentClass=void 0}}insertClassField(e){let i=e.type;if(i instanceof Le||i instanceof xi){let n=this.currentTypeStore.getType("Class");n&&i.fields.push(i.createClassField(n))}}parseFieldOrMethod(e,i,n){var g;this.genericParameterMapStack.push({});let s=e.type,a=this.parseModifiersAndType(!1),l=this.parseGenericParameters(i),h=this.parseType(i),u=h==s&&this.comesToken(p.leftBracket,!1),m=u?s.identifier:this.expectIdentifier();if(n.type=="method"){this.comesToken(p.leftBracket,!0);let f=l.length==0?new Ui(m,oe.instance,i,a.visibility):new Ma(m,oe.instance,i,a.visibility,l);if(f.returnParameterType=h,f.isConstructor=u,f.documentation=n.comment,!this.comesToken(p.rightBracket,!1))do{let C=this.comesToken(p.keywordFinal,!0),w=this.parseType(i),x=this.comesToken(p.ellipsis,!0);x&&(w=new Ie(w,1,i,oe.instance));let q=this.expectIdentifier();f.parameters.push(new ls(q,oe.instance,i,w,C,x,!1))}while(this.comesToken(p.comma,!0));f.isStatic=a.static,f.isFinal=a.final,f.isAbstract=a.abstract,f.classEnumInterface=s,f.isDefault=a.default,this.expect(p.rightBracket,!0),s.methods.push(f);let b=n,A=((g=f.returnParameterType)==null?void 0:g.identifier)!="void";if(b.native){let C=b.native.name;if(f.isStatic?e[f.getInternalName("native")]=b.native:e.prototype[f.getInternalName("native")]=b.native,!b.java){let w=f.parameters.map(q=>q.identifier),x;f.isConstructor?(x=` this.${C}(${w.join(", ")}); ${$.threadStack}.push(this); `,w.unshift("callback1"),w.unshift("__t"),w.push(x),e.prototype[f.getInternalName("java")]=new Function(...w)):f.isStatic?(x=` ${A?"let __returnValue = ":""}this.${C}(${w.join(", ")}); ${A?`${$.threadStack}.push(__returnValue);`:""} `,w.unshift("__t"),w.push(x),e[f.getInternalName("java")]=new Function(...w)):(x=` ${A?"let __returnValue = ":""}this.${C}(${w.join(", ")}); ${A?`${$.threadStack}.push(__returnValue);`:""} if(__callback)__callback(); `,w.unshift("__callback"),w.unshift("__t"),w.push(x),e.prototype[f.getInternalName("java")]=new Function(...w))}f.hasImplementationWithNativeCallingConvention=!0}b.java&&(s instanceof ni||f.isAbstract?b.java.name!=f.getInternalName("java")&&console.log(`${nn.name}: Method ${b.java.name} in class/enum/interface ${s.identifier} should have identifier ${f.getInternalName("java")}.`):f.isStatic?e[f.getInternalName("java")]=b.java:e.prototype[f.getInternalName("java")]=b.java),b.template&&(f.template=b.template,f.template.indexOf("&")>=0&&console.log("WARNING: Template '"+f.template+"' contains letter & instead of §!")),b.constantFoldingFunction&&(f.constantFoldingFunction=b.constantFoldingFunction)}else{let f=n,b=new Hi(m,oe.instance,i,h,a.visibility);b.hiddenWhenDebugging=n.hiddenWhenDebugging,b._isStatic=a.static,b._isFinal=a.final,b.classEnum=s,b.documentation=f.comment,b.internalName=f.nativeIdentifier||m,b.template=f.template,typeof f.constantValue<"u"&&(b.initialValue=f.constantValue,b.initialValueIsConstant=!0,e[b.internalName]=f.constantValue),s.fields.push(b)}this.genericParameterMapStack.pop()}initEnumValues(e,i,n){let s=i.values;for(let a of s){let l=new Hi(a.name,oe.instance,n,e,p.keywordPublic);l._isStatic=!0,l._isFinal=!0,l.classEnum=e,l.initialValueIsConstant=!0,l.initialValue=a,e.fields.push(l),i[l.getInternalName()]=a}}};r(nn,"endOfSourcecodeToken",{tt:p.endofSourcecode,value:""}),r(nn,"visibilityTokens",[p.keywordPublic,p.keywordProtected,p.keywordPrivate]),r(nn,"nullRange",{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0});let ph=nn;class Pp{constructor(...t){r(this,"libraryModules",[]);r(this,"javaTypes",[]);r(this,"typestore");r(this,"systemModule");this.systemModule=new Oa,this.libraryModules.push(this.systemModule),t&&this.libraryModules.push(...t);for(let i of t)i.prepareSystemModule(this.systemModule);this.typestore=new op,this.compileClassesToTypes();let e=new ph(this.systemModule);e.parseClassOrEnumOrInterfaceDeclarationWithoutGenerics(this.systemModule.primitiveStringClass,this.systemModule),e.parseClassOrInterfaceDeclarationGenericsAndExtendsImplements(this.systemModule.primitiveStringClass,this.typestore,this.systemModule),e.parseFieldsAndMethods(this.systemModule.primitiveStringClass,this.typestore,this.systemModule),this.typestore.initFastExtendsImplementsLookup()}compileClassesToTypes(){let t=new ph(this.systemModule);this.typestore.empty,this.javaTypes=[],t.currentTypeStore=this.typestore;for(let i of this.libraryModules){for(let n of i.classesInterfacesEnums){let s=t.parseClassOrEnumOrInterfaceDeclarationWithoutGenerics(n,i);s.visibility!=p.keywordPrivate&&!s.outerType&&this.typestore.addType(s),this.javaTypes.push(s)}for(let n of i.types)this.typestore.addType(n),this.javaTypes.push(n)}let e=new Map;for(let i of this.libraryModules)for(let n of i.classesInterfacesEnums){let s={};e.set(n,s),t.genericParameterMapStack.push(s),t.parseClassOrInterfaceDeclarationGenericsAndExtendsImplements(n,this.typestore,i),t.genericParameterMapStack.pop()}for(let i of this.libraryModules)for(let n of i.classesInterfacesEnums)t.genericParameterMapStack.push(e.get(n)),t.parseFieldsAndMethods(n,this.typestore,i),t.genericParameterMapStack.pop();for(let i of this.typestore.getClasses())i.checkIfInterfacesAreImplementedAndSupplementDefaultMethods()}getTypeCompletionItems(t,e){return this.typestore.getTypeCompletionItems(void 0,e,!1,!0,this.getImports(t))}getImports(t){let e=[];for(let i of this.getLibraryModulesAndSystemModule())e.push(...i.getStandardImports());return e.push(...t.imports),e}getLibraryModulesAndSystemModule(){return[...this.libraryModules,this.systemModule]}}class tf{constructor(t){r(this,"collectedTypenodesGettingRegisteredAtTypeResolver",[]);this.parser=t}buildArrayLiteralNode(){return{kind:p.arrayLiteral,elements:[],range:this.parser.cct.range}}buildBracketNode(t,e){return{kind:p.leftBracket,range:t,nodeInsideBrackets:e}}buildWildcardTypeNode(t){t||(t=this.parser.cct.range);let e={kind:p.wildcardType,range:t,extends:[]};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(e),e}buildVoidTypeNode(t){t||(t=this.parser.cct.range);let e={kind:p.voidType,range:t};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(e),e}buildVarTypeNode(t){t||(t=this.parser.cct.range);let e={kind:p.varType,range:t};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(e),e}buildArrayTypeNode(t,e,i=1){e||(e=this.parser.cct.range);let n;if(t.kind==p.baseType&&t.identifiers[0].identifier=="String"&&(t.identifiers[0].identifier="string"),t.kind==p.arrayType){let s=t;n={kind:p.arrayType,range:e,arrayDimensions:s.arrayDimensions+i,arrayOf:s.arrayOf}}else n={kind:p.arrayType,range:e,arrayDimensions:i,arrayOf:t};return this.collectedTypenodesGettingRegisteredAtTypeResolver.push(n),n}buildGenericTypeInstantiationNode(t,e){return e||(e=this.parser.cct.range),{kind:p.genericTypeInstantiation,range:e,baseType:t,actualTypeArguments:[]}}buildBaseTypeNode(t,e){e||(e=this.parser.cct.range);let i=this.parser.currentMethod||this.parser.currentClassOrInterface;return{kind:p.baseType,range:e,identifiers:[{identifier:t,identifierRange:e}],parentTypeScope:i}}buildClassNode(t,e,i,n,s){let a=e?e.value:"",l=(i.path!=""?i.path+".":"")+a,h={kind:p.keywordClass,range:t.range,parent:i,path:l,extends:void 0,implements:[],identifier:a,identifierRange:e?e.range:oe.instance,visibility:t.visibility,isFinal:t.isFinal,isStatic:t.isStatic,isAbstract:t.isAbstract,isDefault:t.isDefault,isSynchronized:t.isSynchronized,genericParameterDeclarations:[],fieldsOrInstanceInitializers:[],methods:[],innerTypes:[],annotations:[],resolvedType:void 0,module:s,isAnonymousInnerType:!1,isMainClass:!1};return n.length>0&&(h.annotations=n.slice(),n.splice(0,n.length)),i.innerTypes.push(h),h}buildEnumNode(t,e,i,n,s){let a=(i.path!=""?i.path+".":"")+e.value,l={kind:p.keywordEnum,range:t.range,parent:i,path:a,identifier:e.value,identifierRange:e.range,visibility:t.visibility,fieldsOrInstanceInitializers:[],methods:[],annotations:[],valueNodes:[],isAbstract:!1,isFinal:!1,isStatic:!1,isDefault:t.isDefault,isSynchronized:t.isSynchronized,resolvedType:void 0,innerTypes:[],module:s,isAnonymousInnerType:!1};return n.length>0&&(l.annotations=n.slice(),n.splice(0,n.length)),i.innerTypes.push(l),l}buildEnumValueNode(t){return{kind:p.initializeEnumValue,range:t.range,identifier:t.value,identifierRange:t.range,parameterValues:[]}}buildInterfaceNode(t,e,i,n,s){let a=(i.path!=""?i.path+".":"")+e.value,l={kind:p.keywordInterface,range:t.range,parent:i,path:a,implements:[],identifier:e.value,identifierRange:e.range,visibility:t.visibility,isFinal:t.isFinal,isStatic:t.isStatic,isAbstract:t.isAbstract,isDefault:t.isDefault,isSynchronized:t.isSynchronized,genericParameterDeclarations:[],methods:[],annotations:[],fieldsOrInstanceInitializers:[],resolvedType:void 0,innerTypes:[],module:s,isAnonymousInnerType:!1};return n.length>0&&(l.annotations=n.slice(),n.splice(0,n.length)),i.innerTypes.push(l),l}buildMethodNode(t,e,i,n,s,a,l){let h={kind:p.methodDeclaration,range:s,identifier:n.value,identifierRange:n.range,visibility:i.visibility,isFinal:i.isFinal,isStatic:i.isStatic,isAbstract:i.isAbstract,isConstructor:e,isDefault:i.isDefault,isSynchronized:i.isSynchronized,parameters:[],returnParameterType:t,statement:void 0,annotations:[],parentTypeScope:l,innerTypes:[],path:l.path+"."+n.value,genericParameterDeclarations:[]};return a.length>0&&(h.annotations=a.slice(),a.splice(0,a.length)),h}buildFieldDeclarationNode(t,e,i,n,s,a){let l={kind:p.fieldDeclaration,range:t,identifier:e.value,identifierRange:e.range,type:i,initialization:n,visibility:s.visibility,isFinal:s.isFinal,isStatic:s.isStatic,isAbstract:s.isAbstract,isDefault:s.isDefault,isSynchronized:s.isSynchronized,annotations:[]};return a.length>0&&(l.annotations=a.slice(),a.splice(0,a.length)),l}buildNodeWithModifiers(t){return{range:t,visibility:p.keywordPublic,isFinal:!1,isStatic:!1,isAbstract:!1,isDefault:!1,isSynchronized:!1}}buildParameterNode(t,e,i,n,s){return{kind:p.parameterDeclaration,range:t,identifier:e.value,identifierRange:e.range,type:i,isEllipsis:n,isFinal:s,trackMissingReadAccess:!0}}buildPlusPlusMinusMinusSuffixNode(t,e){return{kind:p.plusPlusMinusMinusSuffix,range:{startLineNumber:e.range.startLineNumber,startColumn:e.range.startColumn,endLineNumber:t.range.endLineNumber,endColumn:t.range.endColumn},operator:t.tt,term:e}}buildUnaryPrefixNode(t,e){return{kind:p.unaryPrefixOp,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},operator:t.tt,term:e}}buildAttributeDereferencingNode(t,e){return{kind:p.dereferenceAttribute,range:e.range,attributeIdentifier:e.value,nodeToGetObject:t}}buildMethodCallNode(t,e){let i=t.value;return(t.tt==p.keywordThis||t.tt==p.keywordSuper)&&(i=""),{kind:p.methodCall,identifier:i,identifierRange:t.range,range:t.range,nodeToGetObject:e,parameterValues:[],commaPositions:[],rightBracketPosition:void 0}}buildLambdaFunctionDeclarationNode(t){return{kind:p.lambdaOperator,range:t.range,parameters:[],statement:void 0}}buildCastNode(t,e,i){return{range:t.range,kind:p.castValue,castType:e,objectToCast:i}}buildVariableNode(t){return{kind:p.symbol,range:t.range,identifier:t.value}}buildNewObjectNode(t,e,i){return{kind:p.newObject,range:t.range,klassIdentifierRange:e.range,parameterValues:[],type:e,object:i,commaPositions:[],rightBracketPosition:void 0}}buildAnonymousInnerClassNode(t,e){let i=new U(t.range.startLineNumber,t.range.startColumn,e.range.endLineNumber,e.range.endColumn);return{kind:p.anonymousClass,newObjectNode:t,klass:e,range:i}}buildNewArrayNode(t,e,i){return{kind:p.newArray,range:t.range,arrayType:e,dimensions:i}}buildSelectArrayElement(t){return{kind:p.selectArrayElement,range:t.range,array:t,indices:[]}}buildWhileNode(t,e,i,n){return{kind:p.keywordWhile,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},condition:i,statementToRepeat:n}}buildDoWhileNode(t,e,i,n){return{kind:p.keywordDo,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},condition:i,statementToRepeat:n}}buildIfNode(t,e,i,n,s){return{kind:p.keywordIf,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},condition:i,statementIfTrue:n,statementIfFalse:s}}buildForLoopNode(t,e,i,n,s,a){return a=a||(s==null?void 0:s.range)||oe.instance,{kind:p.keywordFor,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:a.endLineNumber,endColumn:a.endColumn},firstStatement:e,condition:i,lastStatement:n,statementToRepeat:s}}buildMainProgramNode(t){return{kind:p.program,range:t.range,statements:[]}}buildPrintStatement(t,e){return{kind:p.print,range:t.range,isPrintln:e,firstParameter:void 0,secondParameter:void 0,commaPositions:[],rightBracketPosition:void 0}}buildConstantNode(t){return{kind:p.literal,range:t.range,constantType:t.tt,value:t.tt==p.keywordNull?null:t.value}}buildThisNode(t){return{kind:p.keywordThis,range:t.range}}buildSuperNode(t){return{kind:p.keywordSuper,range:t.range}}buildSynchronizedBlockNode(t,e,i){return{kind:p.synchronizedBlock,range:t.range,lockObject:e,block:i}}buildBlockNode(t){return{kind:p.block,range:t.range,statements:[]}}buildBlockNodeFromStatements(t){if(t.length==1)return t[0];let e={startLineNumber:t[0].range.startLineNumber,startColumn:t[0].range.startColumn,endLineNumber:t[1].range.endLineNumber,endColumn:t[1].range.endColumn};return{kind:p.block,range:e,statements:t}}buildInstanceInitializerNode(t){return{kind:p.instanceInitializerBlock,range:t.range,statements:[]}}buildStaticInitializerNode(t){return{kind:p.staticInitializerBlock,range:t.range,statements:[]}}buildEnhancedForLoop(t,e,i,n,s){return{kind:p.enhancedForLoop,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:s.range.endLineNumber,endColumn:s.range.endColumn},elementType:e,elementIdentifier:i.value,elementIdentifierPosition:i.range,collection:n,statementToRepeat:s,elementIsFinal:!1}}buildSwitchCaseNode(t,e){return{kind:p.keywordSwitch,range:t.range,term:e,caseNodes:[],defaultNode:void 0}}buildCaseNode(t,e){return{kind:p.keywordCase,range:t.range,constants:e,statements:[]}}buildContinueNode(t){return{kind:p.keywordContinue,range:t.range}}buildBreakNode(t){return{kind:p.keywordBreak,range:t.range}}buildReturnNode(t,e){return{kind:p.keywordReturn,range:e?{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn}:t.range,term:e,keywordReturnRange:t.range}}buildTryCatchNode(t,e){return{kind:p.keywordTry,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:e.range.endLineNumber,endColumn:e.range.endColumn},tryStatement:e,catchCases:[]}}buildCatchNode(t,e,i,n){return{kind:p.keywordCatch,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:n.range.endLineNumber,endColumn:n.range.endColumn},exceptionTypes:e,exceptionIdentifier:i.value,exceptionIdentifierPosition:i.range,statement:n}}buildAnnotationNode(t,e){return{kind:p.annotation,range:t.range,identifier:t.value,parameter:e}}buildLocalVariableDeclaration(t,e,i,n){let s=i||e;return{kind:p.localVariableDeclaration,identifier:e.value,identifierRange:e.range,range:{startLineNumber:t.range.startLineNumber,startColumn:t.range.startColumn,endLineNumber:s.range.endLineNumber,endColumn:s.range.endColumn},type:t,initialization:i,isFinal:n}}}const Qn=class Qn{constructor(t,e){r(this,"pos",0);r(this,"dummy",{range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0},tt:p.comment,value:""});r(this,"lastToken",this.dummy);r(this,"cct",this.dummy);r(this,"tt",p.comment);r(this,"lastComment");r(this,"endToken");this.tokenList=t,this.module=e,t.length==0&&t.push({tt:p.endofSourcecode,value:"",range:oe.instance}),this.endToken=t[t.length-1],this.pos=-1,t.length>0&&this.nextToken()}getAndSkipToken(){return this.nextToken(),this.lastToken}getRangeAndThenSkipToken(){let t=this.cct.range;return this.nextToken(),t}getAndSkipTokenWithSemicolon(){let t=this.cct;return this.nextToken(),this.expectSemicolon(),t}nextToken(){let t;if(!(this.pos>=this.tokenList.length)){for(this.lastToken=this.cct;;){if(this.pos++,this.pos>=this.tokenList.length){t=this.endToken;break}if(t=this.tokenList[this.pos],t.tt==p.comment&&(this.lastComment=t),t.tt!=p.newline&&t.tt!=p.space&&t.tt!=p.comment){t.commentBefore=this.lastComment,this.lastComment=void 0;break}}this.cct=t,this.tt=this.cct.tt}}exchangeShiftRightForTwoClosingGreater(){this.cct.tt=p.greater,this.tt=p.greater,this.cct.value=">";let t={tt:p.greater,value:">",range:{startLineNumber:this.cct.range.startLineNumber,startColumn:this.cct.range.startColumn+1,endLineNumber:this.cct.range.endLineNumber,endColumn:this.cct.range.endColumn+1}};this.tokenList.splice(this.pos+1,0,t)}lookahead(t){let e=t,i=this.pos,n=this.cct;for(;e>0&&i=0)return e&&this.nextToken(),!0;let i=t.map(n=>$e[n]).join(", ");return this.pushError(v.expectedOtherTokens(i,$e[this.tt]),"error"),!1}expectSemicolon(t=!0,e=!1){if(this.tt==p.semicolon)return t&&this.nextToken(),!0;{let i=this.cct.range;if(this.lastToken!=null&&this.lastToken.range.endLineNumber=0){this.nextToken();return}this.pos++}}expectAndSkipIdentifierAsString(){if(this.tt==p.identifier){let t=this.cct.value;return this.nextToken(),t}return this.pushError(v.identifierExpected(""+this.cct.value)),""}expectAndSkipIdentifierAsToken(){if(this.tt==p.identifier){let t=this.cct;return this.nextToken(),t}return this.pushError(v.identifierExpected(""+this.cct.value)),{tt:p.identifier,value:"",range:this.cct.range}}isOperatorOrDot(t){if(t==p.dot)return!0;for(let e of Qn.operators)if(t==e)return!0;return!1}isEnd(){return this.cct==this.endToken}comesToken(t,e){return Array.isArray(t)?e?t.indexOf(this.tt)>=0?(this.nextToken(),!0):!1:t.indexOf(this.tt)>=0:e?this.tt==t?(this.nextToken(),!0):!1:this.tt==t}getCurrentRangeCopy(){return Object.assign({},this.cct.range)}setEndOfRange(t){let e=t.range,i=this.lastToken.range;return t.range={startLineNumber:e.startLineNumber,startColumn:e.startColumn,endLineNumber:i.endLineNumber,endColumn:i.endColumn},t}comesIdentifier(t){return this.tt==p.identifier&&this.cct.value==t}findTokenTypeAfterCorrespondingRightBracket(){let t=this.pos+1,e=1;for(;t0;)switch(this.tokenList[t++].tt){case p.leftBracket:e++;break;case p.rightBracket:e--}if(e==0){for(;t=0;)t++;if(t=0)return n;if(e.indexOf(n)>=0)break;i++}return null}analyzeIfVariableDeclarationOrMethodDeclarationAhead(t){if(this.tt==p.keywordFinal)return"variabledeclaration";if([p.keywordPrivate,p.keywordProtected,p.keywordPublic,p.keywordStatic,p.keywordVoid].indexOf(this.tt)>=0)return"methoddeclaration";let e=this.pos,i=[];for(;em!=p.identifier)&&i.length>=2?"variabledeclaration":"statement";Qn.spaceTokenTypes.indexOf(u)<0&&i.push(u),e++}let n=i.length;if(n<2)return"statement";let s=i[n-1],a=i[n-2],l=n<3?p.endofSourcecode:i[n-3];return t&&s==p.leftBracket&&a==p.identifier&&[p.greater,p.identifier,p.leftRightSquareBracket,p.keywordVoid].indexOf(l)>=0?"methoddeclaration":[p.identifier,p.leftRightSquareBracket].indexOf(s)<0||[p.identifier,p.greater,p.leftRightSquareBracket,p.keywordVar,p.comma].indexOf(a)<0?"statement":"variabledeclaration"}};r(Qn,"possibleTokensInsideVariableDeclaration",[p.identifier,p.linefeed,p.newline,p.space,p.comment,p.lower,p.greater,p.dot,p.leftRightSquareBracket,p.comma,p.keywordVar,p.ternaryOperator,p.keywordExtends,p.keywordSuper,p.leftBracket,p.keywordVoid]),r(Qn,"spaceTokenTypes",[p.space,p.comment,p.linefeed,p.newline]),r(Qn,"operators",[p.assignment,p.plusAssignment,p.minusAssignment,p.multiplicationAssignment,p.divisionAssignment,p.moduloAssignment,p.ANDAssigment,p.XORAssigment,p.ORAssigment,p.shiftLeftAssigment,p.shiftRightAssigment,p.shiftRightUnsignedAssigment,p.ternaryOperator,p.colon,p.or,p.and,p.OR,p.XOR,p.ampersand,p.equal,p.notEqual,p.keywordInstanceof,p.lower,p.lowerOrEqual,p.greater,p.greaterOrEqual,p.shiftLeft,p.shiftRight,p.shiftRightUnsigned,p.plus,p.minus,p.multiplication,p.division,p.modulo]);let ym=Qn;const ji=class ji extends ym{constructor(e){super(e.tokens,e);r(this,"operatorToPrecedenceMap",{});r(this,"nodeFactory");r(this,"currentClassOrInterface");r(this,"currentMethod");r(this,"firstStatementInsideMethodBodyNotYetCompiled",!0);this.module=e,this.initOperatorToPrecedenceMap()}initOperatorToPrecedenceMap(){for(let e=0;e=0?this.cct:void 0;e&&this.nextToken();let i=this.parseTermUnary();i&&e&&(i=this.nodeFactory.buildUnaryPrefixNode(e,i));let n=this.tt==p.plusPlus||this.tt==p.minusMinus?this.cct:void 0;return n&&(this.nextToken(),i&&(i=this.nodeFactory.buildPlusPlusMinusMinusSuffixNode(n,i))),i}parseTermUnary(){let e;switch(this.tt){case p.leftBracket:switch(this.findTokenTypeAfterCorrespondingRightBracket()){case p.lambdaOperator:e=this.parseLambdaFunctionDefinition();break;case p.leftBracket:case p.identifier:case p.keywordThis:case p.keywordSuper:case p.shortConstant:case p.integerLiteral:case p.longConstant:case p.floatLiteral:case p.doubleConstant:case p.booleanLiteral:case p.stringLiteral:case p.charLiteral:case p.true:case p.false:e=this.parseCastedObject();break;default:let l=this.cct.range;if(this.nextToken(),e=this.parseTerm(),e){e.parenthesisNeeded=!0;let h={startColumn:l.startColumn,startLineNumber:l.startLineNumber,endColumn:this.cct.range.endColumn,endLineNumber:this.cct.range.endLineNumber};this.expect(p.rightBracket,!0),e=this.nodeFactory.buildBracketNode(h,e)}}break;case p.identifier:switch(this.lookahead(1).tt){case p.leftBracket:e=this.parseMethodCall(void 0);break;case p.lambdaOperator:e=this.parseLambdaFunctionDefinition();break;default:e=this.parseVariable()}break;case p.keywordNew:switch(this.lookForTokenTillOtherToken([p.leftBracket,p.leftSquareBracket,p.leftRightSquareBracket],[p.semicolon,p.leftCurlyBracket])){case p.leftBracket:e=this.parseNewObjectInstantiation(void 0);break;case p.leftSquareBracket:case p.leftRightSquareBracket:e=this.parseNewArray();break;default:this.pushError(v.wrongSyntaxAfterKeywordNew(),"error"),this.skipTokensTillEndOfLineOr([p.semicolon,p.comma,p.rightBracket],!1);break}break;case p.keywordPrint:case p.keywordPrintln:e=this.parsePrintStatement();break;case p.shortConstant:case p.integerLiteral:case p.floatLiteral:case p.doubleConstant:case p.longConstant:case p.charLiteral:case p.stringLiteral:case p.booleanLiteral:case p.keywordNull:e=this.nodeFactory.buildConstantNode(this.getAndSkipToken());break;case p.keywordThis:let s=this.getAndSkipToken();e=this.nodeFactory.buildThisNode(s),this.comesToken(p.leftBracket,!1)&&(e=this.buildMethodCallNode(s,e),this.firstStatementInsideMethodBodyNotYetCompiled||this.pushError(v.thisCallInsideConstructorAfterFirstStatement(),"error",s.range));break;case p.keywordSuper:let a=this.getAndSkipToken();e=this.nodeFactory.buildSuperNode(a),this.comesToken(p.leftBracket,!1)&&(e=this.buildMethodCallNode(a,e),this.firstStatementInsideMethodBodyNotYetCompiled||this.pushError(v.superCallInsideConstructorAfterFirstStatement(),"error",a.range));break;case p.leftCurlyBracket:e=this.parseArrayLiteral();break;case p.keywordElse:this.pushError(v.unexpectedToken(""+this.cct.value)),this.nextToken();break}if(e)for(;[p.dot,p.leftSquareBracket].indexOf(this.tt)>=0;)switch(this.tt){case p.dot:this.nextToken(),this.tt==p.keywordNew?e=this.parseNewObjectInstantiation(e):e=this.parseAttributeOrMethodCall(e);break;case p.leftSquareBracket:e=this.parseSelectArrayElement(e);break}return e}parseAttributeOrMethodCall(e){if(e){if(this.lookahead(1).tt==p.leftBracket)return this.parseMethodCall(e);{let i=this.tt==p.keywordSuper?this.getAndSkipToken():this.expectAndSkipIdentifierAsToken();return i.value==""?e:this.nodeFactory.buildAttributeDereferencingNode(e,i)}}else{this.pushError(v.dotOperatorNotExpected(),"error");return}}parseMethodCall(e){let i=this.expectAndSkipIdentifierAsToken();return i.value==""?e:this.buildMethodCallNode(i,e)}buildMethodCallNode(e,i){this.expect(p.leftBracket,!0);let n=this.nodeFactory.buildMethodCallNode(e,i);if(this.tt!=p.rightBracket)do{let s=this.parseTerm();s&&n.parameterValues.push(s),this.comesToken(p.comma,!1)&&n.commaPositions.push(U.getStartPosition(this.cct.range))}while(this.comesToken(p.comma,!0));return n.rightBracketPosition=U.getStartPosition(this.cct.range),this.expect(p.rightBracket,!0),this.setEndOfRange(n),n}parseLambdaFunctionDefinition(){let e=this.nodeFactory.buildLambdaFunctionDeclarationNode(this.cct);if(this.tt==p.leftBracket){if(this.nextToken(),this.tt!=p.rightBracket)do{let i=this.cct.range,n=[p.comma,p.rightBracket].indexOf(this.lookahead(1).tt)>=0,s;n||(s=this.parseType(!1));let a=this.expectAndSkipIdentifierAsToken();a.value!=""&&e.parameters.push(this.nodeFactory.buildParameterNode(i,a,s,!1,!1))}while(this.comesToken(p.comma,!0));this.expect(p.rightBracket,!0)}else{let i=this.expectAndSkipIdentifierAsToken();i.value!=""&&e.parameters.push(this.nodeFactory.buildParameterNode(i.range,i,void 0,!1,!1))}if(this.expect(p.lambdaOperator,!0),this.comesToken(p.leftCurlyBracket,!1))e.statement=this.parseStatementOrExpression();else{let i=this.parseTerm();if(i){let n={kind:p.keywordReturn,range:i==null?void 0:i.range,term:i,keywordReturnRange:i.range};e.statement=n}else this.pushError(v.cantGetTypeOfExpression())}return this.setEndOfRange(e),e}parseType(e){var n;let i;switch(this.tt){case p.keywordVoid:i=this.nodeFactory.buildVoidTypeNode(this.getRangeAndThenSkipToken());break;case p.keywordVar:i=this.nodeFactory.buildVarTypeNode(this.getRangeAndThenSkipToken());break;case p.ternaryOperator:let s=this.nodeFactory.buildWildcardTypeNode(this.getRangeAndThenSkipToken());if(this.comesToken(p.keywordExtends,!0))do{let u=this.parseType(!1);u&&s.extends.push(u)}while(this.comesToken(p.ampersand,!0));this.comesToken(p.keywordSuper,!0)&&(s.super=this.parseType(!1)),i=s;break;case p.identifier:let a=this.cct.range,l=this.expectAndSkipIdentifierAsString();if(l=="string"){let u=this.pushError(v.useOfStringWithSmallLetterAsIdentifier(),"error",a);this.module.quickfixes.push(new vo(a,"String",v.upperCaseStringQuickfixMessage(),u))}this.comesToken(p.ellipsis,!1)&&(e=!0),e&&l=="String"&&(l="string");let h=this.nodeFactory.buildBaseTypeNode(l,a);for(;this.comesToken(p.dot,!0);){let u=this.expectAndSkipIdentifierAsToken();u&&(h.identifiers.push({identifier:u.value,identifierRange:u.range}),this.setEndOfRange(h))}if(this.setEndOfRange(h),this.comesToken(p.lower,!0)){h=this.nodeFactory.buildGenericTypeInstantiationNode(h,h.range);do{let u=this.parseType(!1);u&&h.actualTypeArguments.push(u)}while(this.comesToken(p.comma,!0));this.comesToken(p.shiftRight,!1)&&this.exchangeShiftRightForTwoClosingGreater(),this.expect(p.greater,!0),this.setEndOfRange(h)}if(this.comesToken(p.leftRightSquareBracket,!0)){for(h=this.nodeFactory.buildArrayTypeNode(h,h.range);this.comesToken(p.leftRightSquareBracket,!0);)h.arrayDimensions++;this.setEndOfRange(h)}i=h;break}return i&&((n=this.module.ast)==null||n.collectedTypeNodes.push(i)),i}buildBaseType(e){var n;let i;return e=="void"?i=this.nodeFactory.buildVoidTypeNode(oe.instance):i=this.nodeFactory.buildBaseTypeNode(e,oe.instance),(n=this.module.ast)==null||n.collectedTypeNodes.push(i),i}parseCastedObject(){let e=this.cct;this.nextToken();let i=this.parseType(!1);this.expect(p.rightBracket);let n=this.parseTermUnary();if(i&&n){let s=this.nodeFactory.buildCastNode(e,i,n);return this.setEndOfRange(s),s}}parseVariable(){let e=this.expectAndSkipIdentifierAsToken();if(e.value!="")return this.nodeFactory.buildVariableNode(e)}parseNewArray(){let e=this.cct;this.nextToken();let i=this.parseType(!0);if(!i)return;let n=this.nodeFactory.buildNewArrayNode(e,i,[]),s=0;if(this.comesToken(p.leftSquareBracket,!1))do{if(this.comesToken(p.leftRightSquareBracket,!1))s==0?this.pushError(v.firstArrayDimensionMustNotBeZero(),"error"):n.dimensions.push(this.nodeFactory.buildConstantNode({tt:p.integerLiteral,value:0,range:this.cct.range})),this.nextToken();else{this.nextToken();let a=this.parseTerm();a&&n.dimensions.push(a),this.expect(p.rightSquareBracket)}s++}while(this.comesToken([p.leftSquareBracket,p.leftRightSquareBracket],!1));else if("arrayDimensions"in i&&"arrayOf"in i){let a=i.arrayDimensions;n.dimensionCount=a,a==1?n.arrayType=i.arrayOf:n.arrayType=this.nodeFactory.buildArrayTypeNode(i.arrayOf,void 0,a-1),this.expect(p.leftCurlyBracket,!1)&&(n.initialization=this.parseArrayLiteral())}else{this.pushError(v.squareBracketExpected(),"error",e.range);return}return this.setEndOfRange(n),n}parseNewObjectInstantiation(e){let i=this.cct;this.nextToken();let n=this.parseType(!1);if(!n)return;let s=this.nodeFactory.buildNewObjectNode(i,n,e);if(this.expect(p.leftBracket),this.tt!=p.rightBracket)do{let a=this.parseTerm();a&&s.parameterValues.push(a),this.comesToken(p.comma,!1)&&s.commaPositions.push(U.getStartPosition(this.getCurrentRangeCopy()))}while(this.comesToken(p.comma,!0));return s.rightBracketPosition=U.getStartPosition(this.getCurrentRangeCopy()),this.expect(p.rightBracket,!0),this.setEndOfRange(s),this.comesToken(p.leftCurlyBracket,!1)?this.parseAnonymousInnerClassBody(s):s}parseSelectArrayElement(e){if(!e){this.skipTokensTillEndOfLineOr([p.rightSquareBracket]);return}let i=this.nodeFactory.buildSelectArrayElement(e);for(;this.tt==p.leftSquareBracket;){this.nextToken();let n=this.parseTerm();n&&i.indices.push(n),this.expect(p.rightSquareBracket,!0)}return this.setEndOfRange(i),i}parsePrintStatement(){let e=this.nodeFactory.buildPrintStatement(this.cct,this.tt==p.keywordPrintln),i=this.getCurrentRangeCopy();return this.nextToken(),this.expect(p.leftBracket,!0)&&(this.tt!=p.rightBracket&&(e.firstParameter=this.parseTerm()),this.comesToken(p.comma,!0)&&(e.commaPositions.push(U.getStartPosition(this.lastToken.range)),e.secondParameter=this.parseTerm()),e.rightBracketPosition=U.getStartPosition(this.cct.range),this.module.pushMethodCallPosition(i,e.commaPositions,e.isPrintln?"println":"print",e.rightBracketPosition),this.expect(p.rightBracket,!0)),e}parseArrayLiteral(){let e=this.nodeFactory.buildArrayLiteralNode();if(this.expect(p.leftCurlyBracket,!0),!this.comesToken(p.rightCurlyBracket,!1))do{let i=this.parseTerm();i&&e.elements.push(i)}while(this.comesToken(p.comma,!0));return this.setEndOfRange(e),this.expect(p.rightCurlyBracket,!0),e}};r(ji,"assignmentOperators",[p.assignment,p.plusAssignment,p.minusAssignment,p.multiplicationAssignment,p.divisionAssignment,p.moduloAssignment,p.ANDAssigment,p.XORAssigment,p.ORAssigment,p.shiftLeftAssigment,p.shiftRightAssigment,p.shiftRightUnsignedAssigment]),r(ji,"unaryPrefixOperators",[p.plus,p.minus,p.not,p.tilde,p.plusPlus,p.minusMinus]),r(ji,"ternaryOperatorArray",[p.ternaryOperator,p.colon]),r(ji,"operatorPrecedence",[ji.assignmentOperators,ji.ternaryOperatorArray,[p.or],[p.and],[p.OR],[p.XOR],[p.ampersand],[p.equal,p.notEqual],[p.keywordInstanceof,p.lower,p.lowerOrEqual,p.greater,p.greaterOrEqual],[p.shiftLeft,p.shiftRight,p.shiftRightUnsigned],[p.plus,p.minus],[p.multiplication,p.division,p.modulo]]),r(ji,"ternaryOperatorPrecedence",ji.operatorPrecedence.indexOf(ji.ternaryOperatorArray));let vm=ji;class nf extends vm{constructor(e){super(e);r(this,"isCodeOutsideClassdeclarations",!1);r(this,"isInsideMainMethod",!1);r(this,"nestingLevel",0)}parseStatementOrExpression(e=!0){switch(this.tt){case p.keywordWhile:this.nestingLevel++;let i=this.parseWhile();return this.nestingLevel--,i;case p.keywordDo:this.nestingLevel++;let n=this.parseDo();return this.nestingLevel--,n;case p.keywordIf:this.nestingLevel++;let s=this.parseIf();return this.nestingLevel--,s;case p.leftCurlyBracket:this.nestingLevel++;let a=this.parseBlock();return this.nestingLevel--,a;case p.keywordFor:this.nestingLevel++;let l=this.parseFor();return this.nestingLevel--,l;case p.keywordSwitch:this.nestingLevel++;let h=this.parseSwitch();return this.nestingLevel--,h;case p.keywordBreak:return this.nodeFactory.buildBreakNode(this.getAndSkipTokenWithSemicolon());case p.keywordContinue:return this.nodeFactory.buildContinueNode(this.getAndSkipTokenWithSemicolon());case p.keywordTry:this.nestingLevel++;let u=this.parseTryCatch();return this.nestingLevel--,u;case p.keywordThrow:return this.parseThrow();case p.keywordReturn:return this.parseReturn();case p.semicolon:let m=this.nodeFactory.buildBlockNode(this.cct);return m.isEmpty=!0,this.nextToken(),m;case p.keywordSynchronized:this.nestingLevel++;let g=this.parseSynchronizedBlock();return this.nestingLevel--,g;default:let f=this.parseVariableDeclarationOrMethodDeclarationTerm(e);return this.firstStatementInsideMethodBodyNotYetCompiled=!1,f}}parseSynchronizedBlock(){let e=this.getAndSkipToken();if(!this.expect(p.leftBracket,!0))return;let i=this.parseTermUnary();if(this.expect(p.rightBracket,!0),this.expect(p.leftCurlyBracket,!1)){let n=this.parseBlock();if(i&&n)return this.nodeFactory.buildSynchronizedBlockNode(e,i,n)}}parseVariableDeclarationOrMethodDeclarationTerm(e){let i=this.analyzeIfVariableDeclarationOrMethodDeclarationAhead(this.isCodeOutsideClassdeclarations),n,s=this.pos,a=this.module.errors.length;switch(i){case"variabledeclaration":this.isInsideMainMethod&&this.nestingLevel==0?n=this.convertLocalVariableToStaticField():n=this.parseLocalVariableDeclaration();break;case"statement":if(n=this.parseTerm(),n&&n.kind==p.binaryOp){let l=n;if(l.operator==p.equal){let h=this.pushError(v.comparisonOperatorInsteadOfAssignment(),"warning",l.operatorRange);this.module.quickfixes.push(new vo(l.operatorRange,"=",v.ReplaceTokenQuickfixDefaultMessage("==","="),h))}}break;case"methoddeclaration":if(this.isCodeOutsideClassdeclarations&&this.currentMethod==null){let l=this.nodeFactory.buildNodeWithModifiers(this.cct.range);l.isStatic=!0,this.parseFieldOrMethodDeclaration(this.module.mainClass,l,void 0);return}else this.pushError(v.noMethodDeclarationAllowedHere())}return(!n||e&&!this.expectSemicolon(!0,a==this.module.errors.length))&&s==this.pos&&(this.module.errors.find(l=>l.level=="error")||this.pushError(v.unexpectedToken(this.cct.value+"")),this.skipTillNextTokenAfter([p.semicolon,p.newline,p.rightCurlyBracket])),n}convertLocalVariableToStaticField(){let e=this.nodeFactory.buildNodeWithModifiers(this.cct.range);e.isStatic=!0;let i;this.comesToken(p.varType,!0)?i=this.nodeFactory.buildVarTypeNode():i=this.parseType(!1);let n={kind:p.initialFieldAssignementInMainProgram,range:Object.assign(this.cct.range),assignments:[]};for(;this.expect(p.identifier,!1);){let s=this.cct.range,a=this.expectAndSkipIdentifierAsToken();i=this.increaseArrayDimensionIfLeftRightSquareBracketsToCome(i);let l=this.cct.range;if(this.tt==p.equal){let u=this.pushError(v.comparisonOperatorInsteadOfAssignment(),"error",this.cct.range);this.module.quickfixes.push(new vo(this.cct.range,"=",v.ReplaceTokenQuickfixDefaultMessage("==","="),u))}let h=this.comesToken([p.assignment,p.equal],!0)?this.parseTerm():void 0;if(a.value!=""&&i!=null){let u=this.nodeFactory.buildFieldDeclarationNode(s,a,i,void 0,e,[]);this.module.mainClass.fieldsOrInstanceInitializers.push(u),this.setEndOfRange(u)}if(h&&n.assignments.push({assignmentOperatorRange:l,fieldNode:this.nodeFactory.buildVariableNode(a),initialTerm:h}),!this.comesToken(p.comma,!0))break}if(this.setEndOfRange(n),n.assignments.length!=0)return n}parseLocalVariableDeclaration(){let e={kind:p.localVariableDeclarations,declarations:[],range:oe.instance},i=this.comesToken(p.keywordFinal,!0),n=this.parseType(!0);do{let s=this.expectAndSkipIdentifierAsToken();if(n=this.increaseArrayDimensionIfLeftRightSquareBracketsToCome(n),this.tt==p.equal){let l=this.pushError(v.comparisonOperatorInsteadOfAssignment(),"error",this.cct.range);this.module.quickfixes.push(new vo(this.cct.range,"=",v.ReplaceTokenQuickfixDefaultMessage("==","="),l))}let a;this.comesToken([p.assignment,p.equal],!0)&&(a=this.parseTerm()),n&&s&&e.declarations.push(this.nodeFactory.buildLocalVariableDeclaration(n,s,a,i))}while(this.comesToken(p.comma,!0));return e}increaseArrayDimensionIfLeftRightSquareBracketsToCome(e){let i=0;for(;this.comesToken(p.leftRightSquareBracket,!0);)i++;return e&&i>0&&(e=this.nodeFactory.buildArrayTypeNode(e,e.range,i)),e}parseWhile(){let e=this.getCurrentRangeCopy(),i=this.getAndSkipToken();if(this.comesToken(p.leftBracket,!0)){let n=this.parseTerm();this.expect(p.rightBracket);let s=this.parseStatementToRepeat();if(n&&s)return this.nodeFactory.buildWhileNode(i,this.cct,n,s)}else this.module.pushMethodCallPosition(e,[],"while",U.getStartPosition(this.cct.range)),this.skipTokensTillEndOfLineOr([p.rightBracket])}parseDo(){let e=this.getAndSkipToken(),i=this.parseStatementToRepeat();if(this.expect(p.keywordWhile,!0),this.comesToken(p.leftBracket,!0)){let n=this.parseTerm();if(this.expect(p.rightBracket,!0),n&&i)return this.nodeFactory.buildDoWhileNode(e,this.cct,n,i)}else this.skipTokensTillEndOfLineOr([p.rightBracket])}parseIf(){let e=this.getCurrentRangeCopy(),i=this.getAndSkipToken();if(this.comesToken(p.leftBracket,!0)){let n=this.parseTerm();if(this.module.pushMethodCallPosition(e,[],"if",U.getStartPosition(this.cct.range)),this.expect(p.rightBracket),this.comesToken(p.rightCurlyBracket,!1)){this.pushError(v.statementOrBlockExpected());return}let s=this.parseStatementOrExpression(),a;return this.comesToken(p.keywordElse,!0)&&(a=this.parseStatementOrExpression()),this.nodeFactory.buildIfNode(i,this.cct,n,s,a)}else this.pushError(v.expectedOtherTokens("(",this.cct.value+"")),this.skipTokensTillEndOfLineOr([p.rightBracket])}parseBlock(){let e=this.nodeFactory.buildBlockNode(this.cct);this.nextToken();let i=-1;for(;!this.isEnd()&&this.tt!=p.rightCurlyBracket&&i!=this.pos;){i=this.pos;let n=this.parseStatementOrExpression();n&&e.statements.push(n)}return e.statements.length==0&&(e.isEmpty=!0),this.expect(p.rightCurlyBracket,!0),this.setEndOfRange(e),e}parseFor(){let e=this.getCurrentRangeCopy(),i=[],n=this.getAndSkipToken();if(!this.expect(p.leftBracket,!0))return;if(this.lookForTokenTillOtherToken(p.colon,[p.rightBracket,p.leftCurlyBracket,p.rightCurlyBracket]))return this.parseEnhancedForLoop(n);let a;this.comesToken(p.semicolon,!1)||(a=this.parseStatementOrExpression(!1)),i.push(U.getStartPosition(this.cct.range)),this.expect(p.semicolon,!0);let l;this.comesToken(p.semicolon,!1)||(l=this.parseTerm(),l||this.skipTokensTillEndOfLineOr(p.semicolon)),i.push(U.getStartPosition(this.cct.range)),this.expect(p.semicolon,!0);let h=this.parseTerm(),u=U.getStartPosition(this.cct.range);this.expect(p.rightBracket,!0),this.module.pushMethodCallPosition(e,i,"for",u);let m=this.parseStatementToRepeat();m||this.pushError(v.statementOrBlockExpected());let g=m?m.range:this.cct.range;return this.nodeFactory.buildForLoopNode(n,a,l,h,m,g)}parseStatementToRepeat(){return this.comesToken(p.semicolon,!1)&&this.pushError(v.loopOverEmptyStatement(),"warning"),this.parseStatementOrExpression(!0)}parseEnhancedForLoop(e){let i=this.parseType(!0),n=this.expectAndSkipIdentifierAsToken();this.expect(p.colon,!0);let s=this.parseTerm();this.expect(p.rightBracket);let a=this.parseStatementOrExpression();if(!a){this.pushError(v.statementOrBlockExpected());return}if(i&&n&&s&&a)return this.nodeFactory.buildEnhancedForLoop(e,i,n,s,a)}parseSwitch(){let e=this.getCurrentRangeCopy(),i=this.getAndSkipToken();if(!this.expect(p.leftBracket,!0))return;let n=this.parseTerm();if(this.module.pushMethodCallPosition(e,[],"switch",U.getStartPosition(this.cct.range)),this.expect(p.rightBracket,!0),!this.expect(p.leftCurlyBracket,!0)||!n)return;let s=this.nodeFactory.buildSwitchCaseNode(i,n);for(;this.comesToken([p.keywordCase,p.keywordDefault],!1);){let a=this.tt==p.keywordCase,l=this.cct;this.nextToken();let h=[],u=this.nodeFactory.buildCaseNode(l,h);if(a){do{let m=this.parseTermUnary();m&&h.push(m)}while(this.comesToken(p.comma,!0));h.length==0&&this.pushError(v.constantMissingInCaseStatement(),"error",l.range)}for(this.expect(p.colon,!0);!this.isEnd()&&!this.comesToken([p.keywordCase,p.keywordDefault,p.rightCurlyBracket],!1);){let m=this.parseStatementOrExpression();m&&u.statements.push(m)}this.setEndOfRange(u),a?s.caseNodes.push(u):s.defaultNode=u}return this.expect(p.rightCurlyBracket,!0),this.setEndOfRange(s),s}parseThrow(){let e=this.getAndSkipToken(),i=this.parseTerm();if(this.expectSemicolon(!0,!0),!!i)return{kind:p.keywordThrow,exception:i,range:e.range}}parseTryCatch(){let e=this.getAndSkipToken(),i=this.parseStatementOrExpression();if(!i)return;let n=this.nodeFactory.buildTryCatchNode(e,i);for(;this.comesToken(p.keywordCatch,!1);){let s=this.getAndSkipToken();if(!this.expect(p.leftBracket,!0))continue;let a=[];do{let u=this.parseType(!1);u&&a.push(u)}while(this.comesToken(p.OR,!0));let l=this.expectAndSkipIdentifierAsToken();if(!this.expect(p.rightBracket,!0))continue;let h=this.parseStatementOrExpression();a.length>0&&l&&h&&n.catchCases.push(this.nodeFactory.buildCatchNode(s,a,l,h))}return this.comesToken(p.keywordFinally,!0)&&(n.finallyStatement=this.parseStatementOrExpression(!0)),n}parseReturn(){let e=this.getAndSkipToken(),i;for(this.tt==p.semicolon?i=void 0:(i=this.parseTerm(),this.expect(p.semicolon));this.comesToken(p.semicolon,!0););return this.nodeFactory.buildReturnNode(e,i)}}const Mi=class Mi extends nf{constructor(e){super(e);r(this,"collectedAnnotations",[]);r(this,"mainMethodStatements",[]);r(this,"anonymousInnerClassCounter",0);this.javaCompiledModule=e,this.nodeFactory=new tf(this),this.initializeAST()}initializeAST(){let e={startLineNumber:0,startColumn:0,endLineNumber:this.endToken.range.endLineNumber+1,endColumn:this.endToken.range.endColumn+1};this.javaCompiledModule.ast={kind:p.global,range:e,innerTypes:[],mainProgramNode:this.nodeFactory.buildMainProgramNode(this.cct),collectedTypeNodes:this.nodeFactory.collectedTypenodesGettingRegisteredAtTypeResolver,importStatements:[],path:""},this.javaCompiledModule.mainClass=this.nodeFactory.buildClassNode(this.nodeFactory.buildNodeWithModifiers(oe.instance),{tt:p.identifier,value:"$MainClass"+Mi.mainClassCounter++,range:oe.instance},this.javaCompiledModule.ast,[],this.javaCompiledModule),this.javaCompiledModule.mainClass.range=e,this.javaCompiledModule.mainClass.isMainClass=!0;let i=this.nodeFactory.buildMethodNode(void 0,!1,this.nodeFactory.buildNodeWithModifiers(oe.instance),{tt:p.identifier,value:os.mainMethodIdentifier,range:oe.instance},e,[],this.javaCompiledModule.mainClass);i.isStatic=!0;let n={kind:p.block,range:e,statements:[]};i.statement=n,this.mainMethodStatements=n.statements,this.mainMethodStatements.push({kind:p.firstMainProgramStatement,range:oe.instance});let s=this.nodeFactory.buildArrayTypeNode(this.buildBaseType("String")),a=this.nodeFactory.buildParameterNode(oe.instance,{tt:p.identifier,value:"args",range:oe.instance},s,!1,!0);a.trackMissingReadAccess=!1,i.parameters.push(a),i.returnParameterType=this.buildBaseType("void"),this.javaCompiledModule.mainClass.methods.push(i)}parse(){for(this.parseImportStatements();!this.isEnd();){let e=this.pos;if(this.comesToken(Mi.visibilityModifiers,!1))if(Mi.visibilityModifiersOrTopLevelTypeDeclaration.indexOf(this.lookahead(1).tt)>=0)this.parseClassOrInterfaceOrEnum(this.javaCompiledModule.ast,void 0),this.currentClassOrInterface=void 0;else{let i=this.tt;this.nextToken(),this.parseMethodDeclarationInMainProgram(i)}else this.comesToken(Mi.visibilityModifiersOrTopLevelTypeDeclaration,!1)?(this.parseClassOrInterfaceOrEnum(this.javaCompiledModule.ast,void 0),this.currentClassOrInterface=void 0):this.tt==p.at?this.maybeParseAndSkipAnnotation():this.parseMainProgramFragment();e==this.pos&&(this.pushError(v.unexpectedToken(""+this.cct.value),"warning"),this.nextToken())}}parseImportStatements(){for(;!this.isEnd()&&this.tt==p.keywordImport;){this.nextToken();let e={kind:p.keywordImport,range:this.cct.range,importedPath:[],pathRanges:[]};if(this.tt!=p.identifier){this.pushError(v.importStatementMustStartWithIdentifier(),"error"),this.skipTokensTillEndOfLineOr([p.semicolon]);break}let i=!1,n=!1;do switch(this.tt){case p.identifier:e.importedPath.push(this.cct.value),e.pathRanges.push(this.cct.range),this.nextToken();break;case p.multiplication:n&&this.pushError(v.importStatementCannotHaveMultipleWildcards(),"error"),n=!0,e.importedPath.push("*"),this.nextToken();break;default:this.pushError(v.identifierOrAsteriskExpectedInImportStatement(),"error"),this.skipTokensTillEndOfLineOr([]),i=!0}while(!i&&this.comesToken(p.dot,!0));this.setEndOfRange(e),i||this.expectSemicolon(!0,!0),this.javaCompiledModule.ast.importStatements.push(e)}}parseMethodDeclarationInMainProgram(e){this.isInsideMainMethod=!0,this.isCodeOutsideClassdeclarations=!0;let i=this.nodeFactory.buildNodeWithModifiers(this.cct.range);i.isStatic=!0,i.visibility=e|p.keywordPublic,this.parseFieldOrMethodDeclaration(this.module.mainClass,i,void 0),this.maybeParseAndSkipAnnotation(),this.isCodeOutsideClassdeclarations=!1,this.isInsideMainMethod=!1}parseMainProgramFragment(){for(this.isInsideMainMethod=!0,this.isCodeOutsideClassdeclarations=!0;!this.isEnd()&&Mi.visibilityModifiersOrTopLevelTypeDeclaration.indexOf(this.tt)<0&&this.tt!=p.at;){let e=this.pos,i=this.parseStatementOrExpression();i&&this.mainMethodStatements.push(i),e==this.pos&&this.nextToken()}this.maybeParseAndSkipAnnotation(),this.isCodeOutsideClassdeclarations=!1,this.isInsideMainMethod=!1}parseClassOrInterfaceOrEnum(e,i,n){var l;let s=i||((l=this.cct.commentBefore)==null?void 0:l.value);n==null&&(n=this.parseModifiers());let a=this.tt;if(this.expect(Mi.classOrInterfaceOrEnum,!0)){let h=this.expectAndSkipIdentifierAsToken(),u=this.currentClassOrInterface;if(h.value!="")switch(a){case p.keywordClass:this.parseClassDeclaration(n,h,e,this.collectedAnnotations,s);break;case p.keywordEnum:this.parseEnumDeclaration(n,h,e,s);break;case p.keywordInterface:this.parseInterfaceDeclaration(n,h,e,s);break}for(this.currentClassOrInterface=u;this.comesToken(p.semicolon,!0););}}parseClassDeclaration(e,i,n,s,a){let l=this.nodeFactory.buildClassNode(e,i,n,this.collectedAnnotations,this.javaCompiledModule);for(l.documentation=a,this.currentClassOrInterface=l,l.genericParameterDeclarations=this.parseGenericParameterDefinition();this.comesToken([p.keywordExtends,p.keywordImplements],!1);)switch(this.tt){case p.keywordImplements:this.nextToken(),this.parseImplements(l);break;case p.keywordExtends:this.parseExtends(l);break}this.parseClassBody(l)}parseClassBody(e){var i;if(this.expect(p.leftCurlyBracket,!0)){let n;for(;!this.comesToken([p.rightCurlyBracket,p.endofSourcecode],!1);){n=(i=this.cct.commentBefore)==null?void 0:i.value;let s=this.parseModifiers();switch(this.tt){case p.identifier:case p.keywordVoid:case p.lower:this.parseFieldOrMethodDeclaration(e,s,n),n=void 0;break;case p.keywordClass:case p.keywordEnum:case p.keywordInterface:this.parseClassOrInterfaceOrEnum(e,n,s),n=void 0;break;case p.at:this.maybeParseAndSkipAnnotation();break;case p.leftCurlyBracket:this.parseInstanceInitializer(e),n=void 0;break;case p.keywordStatic:this.nextToken(),this.parseStaticInitializer(e),n=void 0;break;default:this.pushErrorAndSkipToken()}}this.expect(p.rightCurlyBracket,!0)}this.setEndOfRange(e)}parseInstanceInitializer(e){let i=this.nodeFactory.buildInstanceInitializerNode(this.cct);for(this.nextToken();!this.isEnd()&&this.tt!=p.rightCurlyBracket;){let n=this.parseStatementOrExpression();n&&i.statements.push(n)}this.expect(p.rightCurlyBracket,!0),e.fieldsOrInstanceInitializers.push(i)}parseStaticInitializer(e){let i=this.nodeFactory.buildStaticInitializerNode(this.cct);for(this.nextToken();!this.isEnd()&&this.tt!=p.rightCurlyBracket;){let n=this.parseStatementOrExpression();n&&i.statements.push(n)}this.expect(p.rightCurlyBracket,!0),e.fieldsOrInstanceInitializers.push(i)}parseFieldOrMethodDeclaration(e,i,n){if(this.comesIdentifier(e.identifier)&&this.lookahead(1).tt==p.leftBracket)this.parseMethodDeclaration(e,i,!0,void 0,[],n);else{let s=this.parseGenericParameterDefinition();if(this.lookahead(1).tt==p.leftBracket){let l=this.cct.value+"";this.pushError(v.methodDeclarationWithoutReturnType(l)),this.comesToken(p.identifier,!1)?this.parseMethodDeclaration(e,i,!1,this.nodeFactory.buildVoidTypeNode(this.cct.range),[],n):this.nextToken();return}let a=this.parseType(!1);if(this.lookahead(1).tt==p.leftBracket)this.parseMethodDeclaration(e,i,!1,a,s,n);else{s.length>0&&this.pushError(v.fieldDefinitionDoesntStartWithGenericParamter(),"error",s[0].range),a!=null&&a.kind==p.baseType&&a.identifiers[0].identifier=="String"&&(a.identifiers[0].identifier="string");let l=this.module.errors.length;do this.parseFieldDeclaration(e,i,a,n);while(this.comesToken(p.comma,!0));this.expectSemicolon(!0,this.module.errors.length==l)}}}parseMethodDeclaration(e,i,n,s,a,l){let h=i.range,u=this.expectAndSkipIdentifierAsToken(),m=this.nodeFactory.buildMethodNode(s,n,i,u,h,this.collectedAnnotations,e);if(m.documentation=l,this.currentMethod=m,s&&(s.parentTypeScope=m),m.genericParameterDeclarations=a,e.methods.push(m),this.expect(p.leftBracket,!0)){if(this.comesToken([p.identifier,p.keywordFinal],!1))do this.parseParameter(m,!1);while(this.comesToken(p.comma,!0));this.expect(p.rightBracket,!0)}if(this.firstStatementInsideMethodBodyNotYetCompiled=!0,this.comesToken(p.leftCurlyBracket,!1)){let g=this.parseStatementOrExpression();m.statement=g}else!m.isAbstract&&e.kind!=p.keywordInterface?(this.comesToken(p.semicolon,!1)&&this.pushError(v.noSemicolonAsMethodBody()),m.statement=this.nodeFactory.buildBlockNode(this.cct),this.pushError(v.methodNeedsMethodBody(m.identifier),"error",this.cct.range)):(e.kind==p.keywordClass&&!e.isAbstract&&(this.setEndOfRange(m),this.pushError(v.abstractMethodOnlyInAbstractClass(),"error",m.range)),this.expectSemicolon(!0,!0));this.currentMethod=void 0,this.setEndOfRange(m)}parseParameter(e,i){let n=this.cct.range,s=this.comesToken(p.keywordFinal,!0),a=this.parseType(i),l=this.comesToken(p.ellipsis,!0),h=this.expectAndSkipIdentifierAsToken();if(a!=null&&h.value!=""){let u=this.nodeFactory.buildParameterNode(n,h,a,l,s);this.setEndOfRange(u),e.parameters.push(u)}}parseFieldDeclaration(e,i,n,s){let a=this.cct.range,l=this.expectAndSkipIdentifierAsToken();n=this.increaseArrayDimensionIfLeftRightSquareBracketsToCome(n);let h=this.comesToken(p.assignment,!0)?this.parseTerm():void 0;if(l.value!=""&&n!=null){this.collectedAnnotations.some(m=>m.identifier==="Inject")&&(e.hasInjectedFields=!0);let u=this.nodeFactory.buildFieldDeclarationNode(a,l,n,h,i,this.collectedAnnotations);u.documentation=s,e.fieldsOrInstanceInitializers.push(u),this.setEndOfRange(u)}}parseModifiers(){let e=[],i,n=this.nodeFactory.buildNodeWithModifiers(this.cct.range);do{switch(i=!0,this.tt){case p.keywordPrivate:case p.keywordProtected:case p.keywordPublic:e.push(this.cct),n.visibility=this.tt;break;case p.keywordStatic:this.lookahead(1).tt==p.leftCurlyBracket?i=!1:n.isStatic=!0;break;case p.keywordFinal:n.isFinal=!0;break;case p.keywordAbstract:n.isAbstract=!0;break;case p.keywordDefault:n.isDefault=!0;break;case p.keywordSynchronized:n.isSynchronized=!0;break;default:i=!1}i&&this.nextToken()}while(i);return e.length>1&&this.pushError(v.multipleVisibilityModifiers(e.map(s=>s.value).join(", ")),"warning",U.lift(e[0].range).plusRange(e.pop().range)),n}parseEnumDeclaration(e,i,n,s){var l,h;let a=this.nodeFactory.buildEnumNode(e,i,n,this.collectedAnnotations,this.javaCompiledModule);if(a.documentation=s,this.expect(p.leftCurlyBracket,!0)){do{let u=this.parseEnumValue((l=this.cct.commentBefore)==null?void 0:l.value);u&&a.valueNodes.push(u)}while(this.comesToken(p.comma,!0));for(this.comesToken(p.semicolon,!0);!this.comesToken([p.rightCurlyBracket,p.endofSourcecode],!1);){(h=this.cct.commentBefore)==null||h.value;let u=this.parseModifiers();switch(this.tt){case p.keywordClass:case p.keywordEnum:case p.keywordInterface:this.parseClassOrInterfaceOrEnum(a,s,u),s=void 0;break;case p.identifier:case p.keywordVoid:case p.lower:this.parseFieldOrMethodDeclaration(a,u,s),s=void 0;break;case p.at:this.maybeParseAndSkipAnnotation();break;case p.leftCurlyBracket:this.parseInstanceInitializer(a),s=void 0;break;case p.keywordStatic:this.parseStaticInitializer(a),s=void 0;break;default:this.pushErrorAndSkipToken()}}this.expect(p.rightCurlyBracket,!0)}this.setEndOfRange(a)}parseEnumValue(e){let i=this.expectAndSkipIdentifierAsToken();if(!i)return;let n=this.nodeFactory.buildEnumValueNode(i);if(this.comesToken(p.leftBracket,!0)){if(!this.comesToken(p.rightBracket,!1))do{let s=this.parseTerm();s&&n.parameterValues.push(s)}while(this.comesToken(p.comma,!0));this.expect(p.rightBracket,!0)}return n}parseInterfaceDeclaration(e,i,n,s){var l;let a=this.nodeFactory.buildInterfaceNode(e,i,n,this.collectedAnnotations,this.javaCompiledModule);if(a.documentation=s,this.currentClassOrInterface=a,a.genericParameterDeclarations=this.parseGenericParameterDefinition(),this.comesToken(p.keywordExtends,!0)&&this.parseImplements(a),this.expect(p.leftCurlyBracket,!0)){let h;for(;!this.comesToken([p.rightCurlyBracket,p.endofSourcecode],!1);){h=(l=this.cct.commentBefore)==null?void 0:l.value;let u=this.parseModifiers();switch(this.tt){case p.keywordClass:case p.keywordEnum:case p.keywordInterface:this.parseClassOrInterfaceOrEnum(a,h,u),h=void 0;break;case p.identifier:case p.keywordVoid:case p.lower:this.parseFieldOrMethodDeclaration(a,u,h),h=void 0;break;case p.at:this.maybeParseAndSkipAnnotation();break;default:this.pushErrorAndSkipToken()}}this.expect(p.rightCurlyBracket,!0)}this.setEndOfRange(a)}parseImplements(e){do{let i=this.parseType(!1);i?e.implements.push(i):this.pushError(v.typeExpected(this.cct.value+""))}while(this.comesToken(p.comma,!0))}parseExtends(e){this.nextToken();let i=this.parseType(!1);i?e.extends=i:this.pushError(v.typeExpected(this.cct.value+""))}parseGenericParameterDefinition(){let e=[];if(this.comesToken(p.lower,!0)){do{let i=this.expectAndSkipIdentifierAsToken();if(i.value!=""){let n={kind:p.genericParameterDefinition,range:i.range,identifier:i.value,identifierRange:i.range};if(e.push(n),this.comesToken(p.keywordExtends,!0)){n.extends=[];do{let s=this.parseType(!1);s!=null&&n.extends.push(s)}while(this.comesToken(p.ampersand,!0))}else if(this.comesToken(p.keywordSuper,!0)){let s=this.parseType(!1);s!=null&&(n.super=s)}this.setEndOfRange(n)}}while(this.comesToken(p.comma,!0));this.comesToken(p.shiftRight,!1)&&this.exchangeShiftRightForTwoClosingGreater(),this.expect(p.greater,!0)}return e}maybeParseAndSkipAnnotation(){if(this.comesToken(p.at,!0)){let e=this.expectAndSkipIdentifierAsToken();if(e){let i;return this.comesToken(p.leftBracket,!0)&&(this.comesToken(p.stringLiteral,!1)&&(i=String(this.cct.value),this.nextToken()),this.expect(p.rightBracket,!0)),this.collectedAnnotations.push(this.nodeFactory.buildAnnotationNode(e,i)),e}}}parseAnonymousInnerClassBody(e){let i=this.currentClassOrInterface||this.javaCompiledModule.ast,n=this.nodeFactory.buildClassNode(this.nodeFactory.buildNodeWithModifiers(this.cct.range),void 0,i,[],this.javaCompiledModule);if(n.identifierRange=e.range,n.identifier="$AnonymousInnerClass"+this.anonymousInnerClassCounter++,n.range=e.range,n.isAnonymousInnerType=!0,this.parseClassBody(n),n.extends=e.type,e&&n)return this.nodeFactory.buildAnonymousInnerClassNode(e,n)}};r(Mi,"forwardToInsideClass",[p.keywordPublic,p.keywordPrivate,p.keywordProtected,p.keywordVoid,p.identifier,p.rightCurlyBracket,p.keywordStatic,p.keywordAbstract,p.keywordClass,p.keywordEnum,p.keywordInterface]),r(Mi,"visibilityModifiers",[p.keywordPrivate,p.keywordProtected,p.keywordPublic]),r(Mi,"classOrInterfaceOrEnum",[p.keywordClass,p.keywordEnum,p.keywordInterface]),r(Mi,"visibilityModifiersOrTopLevelTypeDeclaration",Mi.visibilityModifiers.concat(Mi.classOrInterfaceOrEnum).concat([p.keywordAbstract])),r(Mi,"mainClassCounter",0);let Am=Mi;var sd,ad,Ia,Eo,Ea,Do,Oh,Lh,od,Bh,rf;class dv{constructor(){J(this,Bh);J(this,sd,!1);J(this,ad,0);J(this,Ia,0);J(this,Eo,0);J(this,Ea,"");J(this,Do,!1);J(this,Oh,30);J(this,Lh);J(this,od,!1)}get isInsideCompilationRun(){return M(this,Do)}initBeforeCompiling(){ee(this,ad,ee(this,Ia,performance.now())),ee(this,Eo,0),M(this,od)&&ee(this,Ia,M(this,Ia)+1e6),ee(this,od,!1),ee(this,Ea,"---"),ee(this,Do,!0)}afterCompiling(t){ee(this,Do,!1);const e=performance.now()-M(this,ad);if(M(this,sd)&&M(this,Ea)!="---"){const i=t?" with Exception ":"";console.log("Compiled modules ["+M(this,Ea)+"]"+i+"; Compilation run took "+Math.round(e)+" ms and was "+M(this,Eo)+" times interrupted.")}}async interruptIfNeeded(){performance.now()-M(this,Ia)>=M(this,Oh)&&(M(this,sd)&&console.log("Compiler was interrupted by CompilingProgressManger."),Ho(this,Eo)._++,await re(this,Bh,rf).call(this,M(this,Lh)),ee(this,Ia,performance.now()))}setNewOrDirtyModules(t){ee(this,Ea,t)}}sd=new WeakMap,ad=new WeakMap,Ia=new WeakMap,Eo=new WeakMap,Ea=new WeakMap,Do=new WeakMap,Oh=new WeakMap,Lh=new WeakMap,od=new WeakMap,Bh=new WeakSet,rf=async function(t){return new Promise(e=>setTimeout(e,t))};class hc extends Jm{constructor(t,e,i,n){super({startLineNumber:e.identifierRange.startLineNumber,startColumn:0,endLineNumber:e.identifierRange.endLineNumber,endColumn:e.identifierRange.endColumn}),this.fieldNode=t,this.field=e,this.lineToInsert=i,this.type=n}provideCodeAction(t){var h,u;if(!((h=this.field)!=null&&h.type))return;let e=this.field.identifier[0].toLocaleUpperCase()+this.field.identifier.substring(1),i="",n="",s=` public ${this.field.type.toString()} get${e}(){ return ${this.field.identifier}; } `,a=` public void set${e}(${this.field.type.toString()} ${this.field.identifier}){ this.${this.field.identifier} = ${this.field.identifier}; } `;switch(this.type){case"getter":i="Getter-Methode für "+this.field.identifier+" ergänzen",n=s;break;case"setter":i="Setter-Methode für "+this.field.identifier+" ergänzen",n=a;break;case"both":i="Getter- und Setter-Methode für "+this.field.identifier+" ergänzen",n=s+a;break}let l=[{resource:t.uri,textEdit:{range:{startLineNumber:this.lineToInsert,startColumn:0,endLineNumber:this.lineToInsert,endColumn:0},text:n},versionId:t.getVersionId()}];if(this.field.visibility==p.keywordPublic){let m=(u=this.fieldNode.type)==null?void 0:u.range;m&&l.push({resource:t.uri,textEdit:{range:{startLineNumber:m.startLineNumber,startColumn:m.startColumn,endLineNumber:this.field.identifierRange.startLineNumber,endColumn:m.startColumn},text:"private "},versionId:t.getVersionId()})}return{title:i,diagnostics:[],kind:"quickfix",edit:{edits:l}}}}class lp{static start(t){if(t.ast)for(let e of t.ast.innerTypes.filter(i=>i.kind==p.keywordClass&&!i.isMainClass)){if(e=e,!e.resolvedType)continue;let n=new Map;e.methods.forEach(s=>n.set(s.identifier,s)),lp.generateQuickfixesForField(e,n)}}static generateQuickfixesForField(t,e){if(t.fieldsOrInstanceInitializers.length==0)return;let i=t.fieldsOrInstanceInitializers[t.fieldsOrInstanceInitializers.length-1].range.endLineNumber+1,n=e.get(t.identifier);n&&(i=Math.max(i,n.range.endLineNumber+1));for(let s of t.fieldsOrInstanceInitializers.filter(a=>a.kind==p.fieldDeclaration)){let a=s.resolvedField;if(!a||a.identifier=="class")continue;let l=a.identifier[0].toLocaleUpperCase()+a.identifier.substring(1),h=!e.get("get"+l),u=!e.get("set"+l);h&&t.module.quickfixes.push(new hc(s,a,i,"getter")),u&&t.module.quickfixes.push(new hc(s,a,i,"setter")),h&&u&&t.module.quickfixes.push(new hc(s,a,i,"both"))}}}class hv{static start(t,e){var s,a;if(!e||!e.getSettings().getValue("editor.autoSemicolons")||t.errors.length>5)return;let i=(a=(s=e.getMainEditor())==null?void 0:s.getPosition())==null?void 0:a.lineNumber;if(typeof i>"u")return;let n=t.errors.filter(l=>l.message==v.insertSemicolonHere());for(let l of n)t.file instanceof Je&&Math.abs(l.range.startLineNumber-i)>0&&t.file.getMonacoModel().applyEdits([{range:{startLineNumber:l.range.startLineNumber,startColumn:l.range.startColumn,endLineNumber:l.range.startLineNumber,endColumn:l.range.startColumn},text:";",forceMoveMarkers:!0}])}}function wd(c,t){const e=new c.Database(t);return e.create_function("isDate",function(i){if(i==null)return!0;if(typeof i!="string")return!1;var n=/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;if(i.match(n)){var s=i.split("/"),a=i.split("-"),l=s.length,h=a.length;if(l>1)var u=i.split("/");else if(h>1)var u=i.split("-");if(u.length!=3)return!1;var m=parseInt(u[2]),g=parseInt(u[1]),f=parseInt(u[0]),b=[31,28,31,30,31,30,31,31,30,31,30,31];if((g==1||g>2)&&m>b[g-1])return!1;if(g==2){var A=!1;return(!(f%4)&&f%100||!(f%400))&&(A=!0),!(A==!1&&m>=29||A==!0&&m>29)}return!0}else return!1}),e.create_function("isDateTime",function(i){if(i==null)return!0;if(typeof i!="string")return!1;var n=/^\d{4}[\-](0[1-9]|1[012])[\-](0[1-9]|[12][0-9]|3[01]) ([01][1-9]|2[0123]):([0-5][0-9]):([0-5][0-9])$/;if(i.match(n)){var s=i.split(" "),a=s[0];if(a.length!=10)return!1;var l=parseInt(a.substring(8,10)),h=parseInt(a.substring(5,7)),u=parseInt(a.substring(0,4)),m=[31,28,31,30,31,30,31,31,30,31,30,31];if((h==1||h>2)&&l>m[h-1])return!1;if(h==2){var g=!1;return(!(u%4)&&u%100||!(u%400))&&(g=!0),!(g==!1&&l>=29||g==!0&&l>29)}return!0}else return!1}),e.create_function("month",function(i){var n=/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;let s=i.match(n);return s?Number(s[1]):-1}),e.create_function("day",function(i){var n=/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;let s=i.match(n);return s?Number(s[2]):-1}),e.create_function("year",function(i){var n=/^(\d{4})[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;let s=i.match(n);return s?Number(s[1]):-1}),e.create_function("isTime",function(i){if(i==null)return!0;if(typeof i!="string")return!1;var n=/^([01][0-9]|2[0123]):([0-5][0-9]):([0-5][0-9])$/;return i.match(n)!=null}),e.create_function("concat",function(i){if(arguments==null)return"";let n="";for(let s=0;s"https://embed.learn-sql.de/include/lib/sql.js/sql-wasm.wasm"}));r(this,"db");r(this,"SQL");r(this,"onmessage");r(this,"onError")}postMessageToClient(t){this.onmessage({data:t})}postMessage(t){let e=this;e.db==null?e.initsql.then(i=>{e.SQL=i,e.db=wd(i,void 0),e.worker(t)}).catch(i=>(console.log(i),e.postMessageToClient({id:this.data.id,error:i.message}))):e.worker(t)}terminate(){}worker(t){var e,i,n=t.config?t.config:{};try{switch(t&&t.action){case"open":return e=t.buffer,this.db=wd(this.SQL,e&&new Uint8Array(e)),this.postMessageToClient({id:t.id,ready:!0});case"exec":if(this.db===null&&(this.db=wd(this.SQL,void 0)),!t.sql)throw"exec: Missing query string";return this.postMessageToClient({id:t.id,results:this.db.exec(t.sql,t.params,n)});case"each":this.db===null&&(this.db=wd(this.SQL,void 0));var s=function(h){return this.postMessage({id:t.id,row:h,finished:!1})},a=function(){return this.postMessage({id:t.id,finished:!0})};return this.db.each(t.sql,t.params,s,a,n);case"export":e=this.db.export(),i={id:t.id,results:[{buffer:e}]};try{return this.postMessageToClient(i)}catch{return this.postMessageToClient(i)}case"close":return this.db&&this.db.close(),this.postMessageToClient({id:t.id});default:throw new Error("Invalid action : "+(t&&t.action))}}catch(l){return this.postMessageToClient({id:t.id,error:l.message})}}}class uv{constructor(t){r(this,"databaseDirectoryEntries",null);r(this,"worker");r(this,"queryId",0);r(this,"querySuccessCallbacksMap",new Map);r(this,"queryErrorCallbackMap",new Map);r(this,"databaseStructure");this.main=t}initializeWorker(t,e,i){this.worker!=null&&this.worker.terminate(),performance.now(),window.jo_doc?this.worker=new cv:this.worker=new Worker(new URL(""+new URL("assets/sqljsWorker-b8Jv06Y-.js",import.meta.url).href,import.meta.url),{type:"module"});let n=this,s;this.worker.onmessage=()=>{n.worker.onmessage=l=>{let h=l.data.id;if(l.data.error==null){let u=n.querySuccessCallbacksMap.get(h);u!=null&&u(l.data.results)}else{let u=n.queryErrorCallbackMap.get(h);u!=null&&u(l.data.error)}this.queryErrorCallbackMap.delete(h),this.querySuccessCallbacksMap.delete(h)},e==null&&(e=[]),e=e.slice(),e.length;let a=()=>{if(e.length>0){let l=e.shift();n.executeQuery(l,h=>{a()},h=>{h="Error while setting up database: "+h+", query: "+l,console.log({error:"Error while setting up database: "+h,query:l}),console.log(),a()})}else i!=null&&i(s)};a()},this.worker.onerror=a=>{s="Worker error: "+a.error,console.log("Worker error: "+a.error)},this.worker.postMessage({id:n.queryId++,action:"open",buffer:t})}executeQuery(t,e,i){let n=this.queryId++;this.querySuccessCallbacksMap.set(n,e),this.queryErrorCallbackMap.set(n,i),this.worker.postMessage({id:n,action:"exec",sql:t,params:{}})}executeWriteQueries(t,e,i){if(t.length==0){e();return}let n=t.shift();this.executeQuery(n,()=>{this.executeWriteQueries(t,e,i)},s=>{this.executeWriteQueries(t,()=>{},a=>{}),i(s)})}static getDumpType(t){let e=[83,81,76,105,116,101],i=120,n=!0;for(let s=0;sn.toLocaleLowerCase()==e);return i<0?i:i+1}_wasNull(){return this.wasNull}_getIndex(){return this.cursor}_next(){return this.cursor++,this.result==null?!1:this.cursor=this.result.values.length)throw new W(o.cursorAfterLastRecordException());let i=this.result.values[this.cursor][e-1];return this.wasNull=i==null,i}_getBoolean(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null?!1:(i+"").indexOf("1")>=0}_getInt(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null||typeof i!="number"?0:Math.floor(i)}_getFloat(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null||typeof i!="number"?0:i}_getString(e){e=this.getColumnIndex(e);let i=this.checkCursorAndRetrieveValue(e);return i==null?null:""+i}isAfterLast(){return this.cursor>this.result.values.length-1}};r(ai,"__javaDeclarations",[{type:"declaration",signature:"class ResultSet extends Object",comment:o.resultSetClassComment},{type:"method",signature:"final boolean next()",native:ai.prototype._next,comment:o.resultSetNextComment},{type:"method",signature:"final int size()",native:ai.prototype._size,comment:o.resultSetSizeComment},{type:"method",signature:"final int getIndex()",native:ai.prototype._getIndex,comment:o.resultSetGetIndexComment},{type:"method",signature:"final boolean wasNull()",native:ai.prototype._wasNull,comment:o.resultSetWasNullComment},{type:"method",signature:"final boolean getBoolean(int index)",native:ai.prototype._getBoolean,comment:o.resultSetGetByIndexComment("boolean")},{type:"method",signature:"final int getInt(int index)",native:ai.prototype._getInt,comment:o.resultSetGetByIndexComment("int")},{type:"method",signature:"final float getFloat(int index)",native:ai.prototype._getFloat,comment:o.resultSetGetByIndexComment("float")},{type:"method",signature:"final double getDouble(int index)",native:ai.prototype._getFloat,comment:o.resultSetGetByIndexComment("double")},{type:"method",signature:"final String getString(int index)",native:ai.prototype._getString,comment:o.resultSetGetByIndexComment("string")},{type:"method",signature:"final boolean getBoolean(string columnLabel)",native:ai.prototype._getBoolean,comment:o.resultSetGetByLabelComment("boolean")},{type:"method",signature:"final int getInt(string columnLabel)",native:ai.prototype._getInt,comment:o.resultSetGetByLabelComment("int")},{type:"method",signature:"final float getFloat(string columnLabel)",native:ai.prototype._getFloat,comment:o.resultSetGetByLabelComment("float")},{type:"method",signature:"final double getDouble(string columnLabel)",native:ai.prototype._getFloat,comment:o.resultSetGetByLabelComment("double")},{type:"method",signature:"final string getString(string columnLabel)",native:ai.prototype._getString,comment:o.resultSetGetByLabelComment("String")}]);let zl=ai;const gr=class gr extends R{constructor(e,i){super();r(this,"type");r(this,"parameterValues");r(this,"parameterPositions");r(this,"query");this.connection=e,this.query=i.trim(),this.prepareStatement(this.query)}prepareStatement(e){let i=!1;this.parameterPositions=[];for(let n=0;nthis.parameterPositions.length)throw this.parameterPositions.length==0?new W(o.preparedStatementParametersMissingException()):new W(o.preparedStatementWrongParameterIndex(this.parameterPositions.length,e));i==null?this.parameterValues[e-1]="null":typeof i=="string"?(i=i.replace(/'/g,"''"),this.parameterValues[e-1]="'"+i+"'"):this.parameterValues[e-1]=""+i}checkQuery(){return null}getQueryWithParameterValuesFilledIn(){let e=this.query,i=[],n=0;for(let a=0;athis.parameterPositions.length&&(s+=i[i.length-1]),s}_mj$executeQuery$ResultSet$(e,i){let n=this.getQueryWithParameterValuesFilledIn();if(!n.toLocaleLowerCase().startsWith("select"))throw new W(o.statementOnlySelectionStatementsWithQueryException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,this.connection.executeQuery(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new W(s));return}let l=new zl(a);e.s.push(l),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=F.running})}_mj$executeUpdate$int$(e,i){let n=this.getQueryWithParameterValuesFilledIn();if(n.toLocaleLowerCase().startsWith("select"))throw new W(o.statementExecuteUpdateException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,this.connection.executeWriteStatement(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new W(s));return}e.s.push(a),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=F.running})}};r(gr,"__javaDeclarations",[{type:"declaration",signature:"class PreparedStatement extends Object",comment:o.preparedStatementClassComment},{type:"method",signature:"final ResultSet executeQuery()",java:gr.prototype._mj$executeQuery$ResultSet$,comment:o.statementExecuteQueryComment},{type:"method",signature:"final int executeUpdate()",java:gr.prototype._mj$executeUpdate$int$,comment:o.statementExecuteUpdateComment},{type:"method",signature:"final boolean setBoolean(int parameterIndex, boolean value)",native:gr.prototype._setValue,comment:o.preparedStatementSetComment("boolean")},{type:"method",signature:"final int setInt(int parameterIndex, int value)",native:gr.prototype._setValue,comment:o.preparedStatementSetComment("int")},{type:"method",signature:"final float setFloat(int parameterIndex, float value)",native:gr.prototype._setValue,comment:o.preparedStatementSetComment("float")},{type:"method",signature:"final double setDouble(int parameterIndex, double value)",native:gr.prototype._setValue,comment:o.preparedStatementSetComment("double")},{type:"method",signature:"final String setString(int parameterIndex, string value)",native:gr.prototype._setValue,comment:o.preparedStatementSetComment("string")}]);let gh=gr;const kl=class kl extends R{constructor(e){super();r(this,"type");this.connection=e}_mj$executeQuery$ResultSet$string(e,i,n){if(n=n.trim(),!n.toLocaleLowerCase().startsWith("select"))throw new W(o.statementOnlySelectionStatementsWithQueryException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,this.connection.executeQuery(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new W(s));return}let l=new zl(a);e.s.push(l),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=F.running})}_mj$executeUpdate$int$string(e,i,n){if(n=n.trim(),n.toLocaleLowerCase().startsWith("select"))throw new W(o.statementExecuteUpdateException());e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.connection.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,this.connection.executeWriteStatement(n,(s,a)=>{if(s!=null){e.throwRuntimeExceptionOnLastExecutedStep(new W(s));return}e.s.push(a),this.connection.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=F.running})}};r(kl,"__javaDeclarations",[{type:"declaration",signature:"class Statement extends Object",comment:o.statementClassComment},{type:"method",signature:"final ResultSet executeQuery(string query)",java:kl.prototype._mj$executeQuery$ResultSet$string,comment:o.statementExecuteQueryComment},{type:"method",signature:"final int executeUpdate(string query)",java:kl.prototype._mj$executeUpdate$int$string,comment:o.statementExecuteUpdateComment}]);let fh=kl;const uo=class uo extends R{constructor(e){super();r(this,"type");r(this,"database");r(this,"databaseData");r(this,"code");r(this,"alreadyClosed",!1);r(this,"main");r(this,"skipNextServerSentStatement",!1);this.interpreter=e,this.main=e.getMain(),e.eventManager.once("stop",()=>{this._close()})}_createStatement(){return new fh(this)}_prepareStatement(e){return new gh(this,e)}connect(e,i){let n=this;this.main.networkManager.fetchDatabase(e,(s,a)=>{a==null?(n.code=e,n.databaseData=s,n.database=new uv(n.main),n.database.initializeWorker(s.templateDump,s.statements,l=>{qe("servlet/registerPushClientForDatabase",{databaseCode:e,registerOrUnregister:"register"}),Si.subscribe("broadcastDatabaseChange",u=>{n.onServerSentStatements(u.firstNewStatementIndex,u.newStatements,u.rollbackToVersion)}),i(null)})):i(a)})}_close(){let e={databaseCode:this.code,registerOrUnregister:"register"};qe("servlet/registerPushClientForDatabase",e),Si.unsubscribe("broadcastDatabaseChange"),this.database!=null&&(this.database.close(),this.database=null),this.alreadyClosed=!0}onServerSentStatements(e,i,n){if(this.skipNextServerSentStatement){this.skipNextServerSentStatement=!1;return}if(n!=null){this.databaseData.statements.splice(n),this.database.initializeWorker(this.databaseData.templateDump,this.databaseData.statements);return}else this.executeStatementsFromServer(e,i)}executeStatementsFromServer(e,i,n){if(this.database==null){n&&n("Keine Datenbankverbindung.");return}let a=this.databaseData.statements.length-e+1;if(a>=i.length){n&&n(null);return}i=i.slice(a),this.databaseData.statements=this.databaseData.statements.concat(i),this.database.executeWriteQueries(i,()=>{n!=null&&n(null)},l=>{n!=null&&n(l)})}executeWriteStatement(e,i,n=!1){this.database==null&&i("Es besteht keine Verbindung zur Datenbank.",0);let s=this,a=s.databaseData.statements.length;this.database.executeQuery("explain "+e,()=>{s.skipNextServerSentStatement=!0,s.main.networkManager.addDatabaseStatement(s.code,a,[e],(l,h,u)=>{if(u!=null){i(u,0);return}s.executeStatementsFromServer(a+1,l,m=>{s.database.executeWriteQueries([e],()=>{if(s.databaseData.statements.push(e),!n){i(null,0);return}s.executeQuery("select last_insert_rowid()",(g,f)=>{i(null,f.values[0][0])})},g=>{s.databaseData.statements.push(e),i!=null&&i(g,0),s.main.networkManager.rollbackDatabaseStatement(s.code,s.databaseData.statements.length,()=>{})})})})},l=>{i(l,0)})}executeQuery(e,i){if(this.alreadyClosed)throw new W(o.connectionAlreadyClosedError(),null);this.database.executeQuery(e,n=>{i(null,n.length==0?{columns:[],values:[]}:n[0])},n=>{i(n,null)})}};r(uo,"__javaDeclarations",[{type:"declaration",signature:"class Connection extends Object",comment:o.connectionClassComment},{type:"method",signature:"final Statement createStatement()",native:uo.prototype._createStatement,comment:o.connectionCreateStatementComment},{type:"method",signature:"final PreparedStatement prepareStatement(string query)",native:uo.prototype._prepareStatement,comment:o.connectionPrepareStatementComment},{type:"method",signature:"final void close()",native:uo.prototype._close,comment:o.connectionCloseComment}]);let Wl=uo;const Fh=class Fh extends R{constructor(){super(...arguments);r(this,"type")}static _mj$getConnection$Connection$string(e,i){let n=e.scheduler.interpreter,s=n.getMain();if(!s||s.isEmbedded())throw new W(o.databaseManagerNotInEmbeddedVersionException());let a=new Wl(e.scheduler.interpreter);n.showProgramPointer(void 0,"DatabaseManager"),s.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,a.connect(i,l=>{s.getBottomDiv().showHideDBBusyIcon(!1),l==null?e.s.push(a):e.s.push(null),e.state=F.running})}};r(Fh,"__javaDeclarations",[{type:"declaration",signature:"class DatabaseManager extends Object",comment:o.databaseManagerClassComment},{type:"method",signature:"static Connection getConnection(string code)",java:Fh._mj$getConnection$Connection$string,comment:o.databaseManagerGetConnectionComment}]);let wm=Fh;class mv extends qo{constructor(){super(),this.classesInterfacesEnums.push(wm,Wl,fh,gh,zl)}isReplModule(){return!1}getCodeFragments(){return[]}clearAllBreakpoints(){}}const Is=class Is extends $i{_mj$AktionAusführen$void$(t,e){throw new Error("Method not implemented.")}_mj$TasteGedrückt$void$char(t,e,i){throw new Error("Method not implemented.")}_mj$SonderTasteGedrückt$void$int(t,e,i){throw new Error("Method not implemented.")}_mj$MausGeklickt$void$int$int$int(t,e,i,n,s){throw new Error("Method not implemented.")}_mj$TaktImpulsAusführen$void$(t,e){throw new Error("Method not implemented.")}_mj$Ausführen$void$(t,e){throw new Error("Method not implemented.")}_mj$Taste$void$char(t,e,i){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(t,e,i){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(t,e,i,n,s){throw new Error("Method not implemented.")}};r(Is,"__javaDeclarations",[{type:"declaration",signature:"interface Aktionsempfaenger",comment:"GNG: Interface für die Aktionsausführung"},{type:"method",signature:"void Ausführen()",java:Is.prototype._mj$Ausführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void Taste(char taste)",java:Is.prototype._mj$Taste$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTaste(int sondertaste)",java:Is.prototype._mj$SonderTaste$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void Geklickt(int x, int y, int anzahl)",java:Is.prototype._mj$Geklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]),r(Is,"type");let km=Is;var ba={weiß:16777215,weiss:16777215,rot:16711680,grün:65280,gruen:65280,blau:255,gelb:16776960,magenta:16711935,cyan:65535,hellgelb:16777088,hellgrün:8454016,hellgruen:8454016,orange:16744448,braun:8404992,grau:8421504,schwarz:0};const Pi=class Pi extends R{constructor(){super(...arguments);r(this,"filledShape");r(this,"moveAnchor",{x:0,y:0});r(this,"width",100);r(this,"height",100);r(this,"colorString","schwarz")}renderGNG(){}get farbe(){return this.colorString}set farbe(e){this._farbeSetzen(e)}get x(){return this.moveAnchor.x}get y(){return this.moveAnchor.y}set x(e){this._positionSetzen(e,this.moveAnchor.y)}set y(e){this._positionSetzen(this.moveAnchor.x,e)}set winkel(e){this._winkelSetzen(e)}get winkel(){return Math.round(this.filledShape.angle)}get größe(){return Math.round(this.width)}get sichtbar(){return this.filledShape.container.visible}set sichtbar(e){this._sichtbarkeitSetzen(e)}setGNGBackgroundColor(){this.filledShape.world.shapesWhichBelongToNoGroup.length==1&&this.filledShape.world._setBackgroundColor("#e6e6e6")}_positionSetzen(e,i){this.moveAnchor.x=e,this.moveAnchor.y=i,this.renderGNG()}_verschieben(e,i){this.moveAnchor.x+=e,this.moveAnchor.y+=i,this.renderGNG()}_drehen(e){this.filledShape.angle+=e,this.filledShape.directionRad+=e/180*Math.PI,this.renderGNG()}_farbeSetzen(e){this.colorString=e,e||(e="schwarz");let i=ba[e.toLocaleLowerCase()];this.filledShape._setFillColorInt(i),this.filledShape.render()}_winkelSetzen(e){this.filledShape.angle=e,this.filledShape.directionRad=e/180*Math.PI,this.renderGNG()}_sichtbarkeitSetzen(e){this.filledShape._setVisible(e)}_destroy(){this.filledShape.destroy()}_ganzNachVornBringen(){this.filledShape.bringToFront()}_ganzNachHintenBringen(){this.filledShape.sendToBack()}_nachVornBringen(){this.filledShape.bringOnePlaneFurtherToFront()}_nachHintenBringen(){this.filledShape.bringOnePlaneFurtherToBack()}_containsPoint(e,i){return this.filledShape._containsPoint(e,i)}};r(Pi,"__javaDeclarations",[{type:"declaration",signature:"abstract class GNGBaseFigur extends Object"},{type:"field",signature:"protected string farbe",comment:"Farbe des Grafikobjekts"},{type:"field",signature:"protected int x",comment:"x-Position des Grafikobjekts"},{type:"field",signature:"protected int y",comment:"y-Position des Grafikobjekts"},{type:"field",signature:"protected int winkel",comment:"Blickrichtung des Grafikobjekts in Grad"},{type:"field",signature:"protected int größe",comment:"Größe des Grafikobjekts (100 entspricht 'normalgroß')"},{type:"field",signature:"protected boolean sichtbar",comment:"true, wenn das Grafikobjekt sichtbar ist"},{type:"method",signature:"void PositionSetzen(int x, int y)",native:Pi.prototype._positionSetzen,comment:"Verschiebt die Figur zur Position (x,y). Beim Rechteck führt dies beispielsweise dazu, dass die linke obere Ecke bei (x, y) zu liegen kommt."},{type:"method",signature:"void Verschieben(int deltaX, int deltaY)",native:Pi.prototype._verschieben,comment:"Verschiebt die Figur um (x, y)"},{type:"method",signature:"void Drehen(int grad)",native:Pi.prototype._drehen,comment:"Dreht die Figur um den angegebenen Winkel. Der Drehpunkt ist abhängig von der Art der Figur."},{type:"method",signature:"void FarbeSetzen(string farbe)",native:Pi.prototype._farbeSetzen,comment:"Setzt die Farbe der Figur."},{type:"method",signature:"void WinkelSetzen(int winkel)",native:Pi.prototype._winkelSetzen,comment:"Setzt den Drehwinkel der Figur. Der Winkel wird in Grad angegebenen, positive Werte bedeuten eine Drehung gegen den Uhrzeigersinn."},{type:"method",signature:"void SichtbarkeitSetzen(boolean sichtbarkeit)",native:Pi.prototype._sichtbarkeitSetzen,comment:"Schaltet die Sichtbarkeit der Figur ein oder aus."},{type:"method",signature:"void Entfernen()",native:Pi.prototype._destroy,comment:"Zerstört das Objekt."},{type:"method",signature:"void GanzNachVornBringen()",native:Pi.prototype._ganzNachVornBringen,comment:"Setzt das Grafikobjekt vor alle anderen."},{type:"method",signature:"void GanzNachHintenBringen()",native:Pi.prototype._ganzNachHintenBringen,comment:"Setzt das Grafikobjekt hinter alle anderen."},{type:"method",signature:"void NachVornBringen()",native:Pi.prototype._nachVornBringen,comment:"Setzt das Grafikobjekt eine Ebene nach vorne."},{type:"method",signature:"void NachHintenBringen()",native:Pi.prototype._nachHintenBringen,comment:"Setzt das Grafikobjekt eine Ebene nach hinten."}]),r(Pi,"type");let cs=Pi;const mo=class mo extends cs{get breite(){return Math.round(Math.abs(this.width*this.filledShape.container.scale.x))}get höhe(){return Math.round(Math.abs(this.height*this.filledShape.container.scale.y))}renderGNG(){let t=this.moveAnchor.x,e=this.moveAnchor.y,i=t,n=e+this.height/2;this.filledShape.hitPolygonInitial=[{x:t,y:e},{x:t+this.width/2,y:e+this.height},{x:t-this.width/2,y:e+this.height}],this.filledShape.render();let s=this.filledShape.container;s.localTransform.identity(),s.localTransform.translate(-i,-n),s.localTransform.rotate(-this.filledShape.angle/180*Math.PI),s.localTransform.translate(i,n),s.setFromMatrix(s.localTransform),s.updateLocalTransform(),this.filledShape.setWorldTransformAndHitPolygonDirty()}_cj$_constructor_$Dreieck$(t,e){let i=new Va;this.filledShape=i,i._cj$_constructor_$Polygon$boolean$double_I(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:60,y:10},this.width=100,this.height=100,this.colorString="rot",i.centerXInitial=60,i.centerYInitial=60,i._setFillColorInt(16711680),this.setGNGBackgroundColor(),e&&e()},!0,[60,10,110,110,10,110])}_groesseSetzen(t,e){this.width=t,this.height=e,this.renderGNG()}};r(mo,"__javaDeclarations",[{type:"declaration",signature:"class Dreieck extends GNGBaseFigur",comment:"Dreieck-Klasse der Graphics'n'Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Dreieck()",java:mo.prototype._cj$_constructor_$Dreieck$,comment:"Instanziiert ein neues Dreieck-Objekt."},{type:"field",signature:"protected int breite",comment:"Breite des Dreiecks"},{type:"field",signature:"protected int höhe",comment:"Höhe des Dreiecks"},{type:"method",signature:"void GrößeSetzen(int breite, int höhe)",native:mo.prototype._groesseSetzen,comment:"Setzt die Breite und Höhe des Rechtecks."}]),r(mo,"type");let Cm=mo;const bi=class bi extends R{constructor(){super(...arguments);r(this,"world")}_cj$_constructor_$Ereignisbehandlung$(e,i){e.s.push(this),this.world=e.scheduler.interpreter.retrieveObject("WorldClass"),this.world?(this.constructorHelper(e),i&&i()):new e.classes.World()._cj$_constructor_$World$(e,()=>{this.world=e.s.pop(),this.constructorHelper(e),i&&i()})}constructorHelper(e){this._mj$TaktImpulsAusführen$void$!=bi.prototype._mj$TaktImpulsAusführen$void$&&this.world.registerGNGEventListener(this,"taktImpulsAusführen"),this._mj$TasteGedrückt$void$char!=bi.prototype._mj$TasteGedrückt$void$char&&this.world.registerGNGEventListener(this,"tasteGedrückt"),this._mj$SonderTasteGedrückt$void$int!=bi.prototype._mj$SonderTasteGedrückt$void$int&&this.world.registerGNGEventListener(this,"sondertasteGedrückt"),this._mj$MausGeklickt$void$int$int$int!=bi.prototype._mj$MausGeklickt$void$int$int$int&&this.world.registerGNGEventListener(this,"mausGeklickt")}_mj$AktionAusführen$void$(e,i){}_mj$TasteGedrückt$void$char(e,i,n){}_mj$SonderTasteGedrückt$void$int(e,i,n){}_mj$MausGeklickt$void$int$int$int(e,i,n,s,a){}_mj$TaktImpulsAusführen$void$(e,i){}_Starten(){this.world.gngEventlistenerManager.startTimer()}_Anhalten(){this.world.gngEventlistenerManager.stopTimer()}_TaktdauerSetzen(e){this.world.gngEventlistenerManager.taktdauer=e}_mj$Ausführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Taste$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}};r(bi,"__javaDeclarations",[{type:"declaration",signature:"class Ereignisbehandlung extends Object",comment:"Zugriff auf Ereignisse einschließlich Taktgeber (Graphics'n'Games-Bibliothek (Cornelsen-Verlag))"},{type:"method",signature:"Ereignisbehandlung()",java:bi.prototype._cj$_constructor_$Ereignisbehandlung$,comment:"Instanziiert ein neues Ereignisbehandlungs-Objekt."},{type:"method",signature:"void Starten()",native:bi.prototype._Starten,comment:"Zeitgeber starten."},{type:"method",signature:"void Anhalten()",native:bi.prototype._Anhalten,comment:"Zeitgeber anhalten."},{type:"method",signature:"void TaktdauerSetzen(int dauer)",native:bi.prototype._TaktdauerSetzen,comment:"Setzt die Taktdauer des Zeitgebers in Millisekunden."},{type:"method",signature:"void TaktImpulsAusführen()",java:bi.prototype._mj$TaktImpulsAusführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void TasteGedrückt(char taste)",java:bi.prototype._mj$TasteGedrückt$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTasteGedrückt(int sondertaste)",java:bi.prototype._mj$SonderTasteGedrückt$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void MausGeklickt(int x, int y, int anzahl)",java:bi.prototype._mj$MausGeklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]),r(bi,"type");let xm=bi;const Ce=class Ce extends R{constructor(){super(...arguments);r(this,"group");r(this,"center",{x:100,y:200});r(this,"isInitialTriangle",!1)}get x(){return this.center.x}get y(){return this.center.y}set x(e){this._positionSetzen(e,this.center.y)}set y(e){this._positionSetzen(this.center.x,e)}get winkel(){return this._winkelGeben()}set winkel(e){this._winkelSetzen(e)}get größe(){return Math.round(this.group.scaleFactor*100)}set größe(e){this._groesseSetzen(e)}get sichtbar(){return this.group.container.visible}set sichtbar(e){this._sichtbarkeitSetzen(e)}_cj$_constructor_$Figur$(e,i){this.group=new Rs,this.group._cj$_constructor_$Group$(e,()=>{e.s.pop(),e.s.push(this),this.setGNGBackgroundColor(),this.drawInitialTriangle(e,()=>{i&&i()},this.center),this._mj$AktionAusführen$void$!=Ce.prototype._mj$AktionAusführen$void$&&this.group.world.registerGNGEventListener(this,"aktionAusführen"),this._mj$TasteGedrückt$void$char!=Ce.prototype._mj$TasteGedrückt$void$char&&this.group.world.registerGNGEventListener(this,"tasteGedrückt"),this._mj$SonderTasteGedrückt$void$int!=Ce.prototype._mj$SonderTasteGedrückt$void$int&&this.group.world.registerGNGEventListener(this,"sondertasteGedrückt"),this._mj$MausGeklickt$void$int$int$int!=Ce.prototype._mj$MausGeklickt$void$int$int$int&&this.group.world.registerGNGEventListener(this,"mausGeklickt")})}setGNGBackgroundColor(){this.group.world.shapesWhichBelongToNoGroup.length==1&&this.group.world._setBackgroundColor("#e6e6e6")}drawInitialTriangle(e,i,n){this.group._scale(1/this.group.scaleFactor);let s=new Va;s._cj$_constructor_$Polygon$boolean$double_I(e,()=>{e.s.pop(),s._move(n.x,n.y),s._setFillColorString("yellow"),s._setBorderColorString("black"),s._setBorderWidth(2),this.group.add(s);let a=new Pl;a._cj$_constructor_$Circle$double$double$double(e,()=>{e.s.pop(),a._move(n.x,n.y),a._setFillColorString("blue"),a._setBorderColorString("black"),a._setBorderWidth(2),this.group.add(a),this.isInitialTriangle=!0,this.group._scale(.4,n.x,n.y),i&&i()},0,0,10)},!0,[-50,-50,50,0,-50,50])}_groesseSetzen(e){let i=e/100;this.group._scale(i/this.group.scaleFactor,this.center.x,this.center.y)}_drehen(e){this.group._rotate(e,this.center.x,this.center.y)}_gehen(e){let i=this.group.angle/180*Math.PI,n=e*Math.cos(i),s=e*Math.sin(-i);this.center.x+=n,this.center.y+=s,this.group._move(n,s)}_positionSetzen(e,i){this.group._move(e-this.center.x,i-this.center.y),this.center.x=e,this.center.y=i}_zumStartpunktGehen(){this._positionSetzen(100,200)}_winkelSetzen(e){this._drehen(e-this.group.angle)}_winkelGeben(){return this.group.angle<0&&(this.group.angle+=360*Math.ceil(this.group.angle/-360)),this.group.angle>=360&&(this.group.angle-=360*Math.floor(this.group.angle/360)),Math.round(this.group.angle)}_sichtbarkeitSetzen(e){this.group._setVisible(e)}_entfernen(){this.group.world.unRegisterGNGEventListener(this,"aktionAusführen"),this.group.world.unRegisterGNGEventListener(this,"tasteGedrückt"),this.group.world.unRegisterGNGEventListener(this,"sondertasteGedrückt"),this.group.world.unRegisterGNGEventListener(this,"mausGeklickt"),this.group.destroy()}_ganzNachVornBringen(){this.group.bringToFront()}_ganzNachHintenBringen(){this.group.sendToBack()}_nachVornBringen(){this.group.bringOnePlaneFurtherToFront()}_nachHintenBringen(){this.group.bringOnePlaneFurtherToBack()}_mj$eigeneFigurLoeschen$void$(e,i){this.group.destroyAllChildren()}_beruehrt(){for(let e of this.group.world.shapesWhichBelongToNoGroup)if(e!=this.group&&e._collidesWith(this.group))return!0;return!1}_beruehrtFarbe(e){let i=ba[e];i==null&&(i=0);for(let n of this.group.world.shapesWhichBelongToNoGroup)if(n!=this.group){if(n instanceof Rs){for(let s of n.shapes)if(s instanceof Rt&&i==s.fillColor&&this.group._collidesWith(s))return!0}else if(n instanceof Rt&&i==n.fillColor&&this.group._collidesWith(n))return!0}return!1}_beruehrtObjekt(e){return e instanceof Ce?this.group._collidesWith(e.group):e instanceof cs?this.group._collidesWith(e.filledShape):!1}_j_figurteilFestlegenDreieck(e,i,n,s,a,l,h,u,m){let g=ba[m];g==null&&(g=0),this.isInitialTriangle&&this.group.destroyAllChildren(),this.isInitialTriangle=!1;let f=new Va;f._cj$_constructor_$Polygon$boolean$double_I(e,()=>{f._rotate(this.group.angle,0,0),f._scale(this.group.scaleFactor,0,0),f._move(this.center.x,this.center.y),f._setFillColorInt(g),f._setBorderColorString("black"),f._setBorderWidth(2),this.group.add(f),i&&i()},!0,[n,s,a,l,h,u],!0)}_j_figurteilFestlegenRechteck(e,i,n,s,a,l,h){let u=ba[h];u==null&&(u=0),this.isInitialTriangle&&this.group.destroyAllChildren(),this.isInitialTriangle=!1;let m=new Ll;m._cj$_constructor_$Rectangle$double$double$double$double(e,()=>{m._rotate(this.group.angle,0,0),m._scale(this.group.scaleFactor,0,0),m._move(this.center.x,this.center.y),m._setFillColorInt(u),m._setBorderColorString("black"),m._setBorderWidth(2),this.group.add(m),i&&i()},n+.05,s+.05,a-.1,l-.1)}_j_figurteilFestlegenEllipse(e,i,n,s,a,l,h){let u=ba[h];u==null&&(u=0),this.isInitialTriangle&&this.group.destroyAllChildren(),this.isInitialTriangle=!1,l=l-.1,a=a-.1;let m=new Rd;m._cj$_constructor_$Ellipse$double$double$double$double(e,()=>{m._rotate(this.group.angle,0,0),m._scale(this.group.scaleFactor,0,0),m._move(this.center.x,this.center.y),m._setFillColorInt(u),m._setBorderColorString("black"),m._setBorderWidth(2),this.group.add(m),i&&i()},n+a/2+.05,s+l/2+.05,a/2,l/2)}_mj$AktionAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$TasteGedrückt$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTasteGedrückt$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$MausGeklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_mj$TaktImpulsAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Ausführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Taste$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_containsPoint(e,i){return this.group._containsPoint(e,i)}_figurteileGeben(){return this.group}};r(Ce,"__javaDeclarations",[{type:"declaration",signature:"class Figur extends Object",comment:"Figur-Klasse der Graphics'n'Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Figur()",java:Ce.prototype._cj$_constructor_$Figur$,comment:"Instanziiert ein neues, achsenparalleles Figur-Objekt."},{type:"field",signature:"int x",template:"§1.x",comment:"x-Position der Figur"},{type:"field",signature:"int y",template:"§1.y",comment:"y-Position der Figur"},{type:"field",signature:"int winkel",template:"§1.winkel",comment:"Blickrichtung der Figur in Grad"},{type:"field",signature:"int größe",template:"§1.größe",comment:"Größe der Figur (100 entspricht 'normalgroß')"},{type:"field",signature:"boolean sichtbar",template:"§1.sichtbar",comment:"true, wenn die Figur sichtbar ist"},{type:"method",signature:"void GrößeSetzen(int größe)",native:Ce.prototype._groesseSetzen,comment:"Setzt die Größe der Figur."},{type:"method",signature:"void Drehen(int grad)",native:Ce.prototype._drehen,comment:"Dreht die Figur um den angegebenen Winkel. Positiver Winkel bedeutet Drehung gegen den Uhrzeigersinn."},{type:"method",signature:"void Gehen(double länge)",native:Ce.prototype._gehen,comment:"Bewirkt, dass die Figur um die angegebene Länge 'nach vorne' geht."},{type:"method",signature:"void PositionSetzen(int x, int y)",native:Ce.prototype._positionSetzen,comment:"Verschiebt die Figur an die Position (x, y)."},{type:"method",signature:"void ZumStartpunktGehen()",native:Ce.prototype._zumStartpunktGehen,comment:"Verschiebt die Figur an die Position (100, 200)."},{type:"method",signature:"void WinkelSetzen(int winkel)",native:Ce.prototype._winkelSetzen,comment:"Dreht die Figur so, dass der Blickwinkel der Figur in die angegebene Richtung zeigt. 0° => nach rechts (initial), 90°: => nach oben, usw."},{type:"method",signature:"int WinkelGeben()",native:Ce.prototype._winkelGeben,comment:"Gibt den Blickwinkel der Figur zurück."},{type:"method",signature:"int XPositionGeben()",template:"§1.center.x",comment:"Gibt x-Position der Figur zurück."},{type:"method",signature:"int YPositionGeben()",template:"§1.center.y",comment:"Gibt y-Position der Figur zurück."},{type:"method",signature:"void SichtbarkeitSetzen(boolean isSichtbar)",native:Ce.prototype._sichtbarkeitSetzen,comment:"Schaltet die Sichtbarkeit der Figur ein oder aus."},{type:"method",signature:"void Entfernen()",native:Ce.prototype._entfernen,comment:"Entfernt die Figur aus dem Zeichenfenster."},{type:"method",signature:"void GanzNachVornBringen()",native:Ce.prototype._ganzNachVornBringen,comment:"Setzt das Grafikobjekt vor alle anderen."},{type:"method",signature:"void GanzNachHintenBringen()",native:Ce.prototype._ganzNachHintenBringen,comment:"Setzt das Grafikobjekt hinter alle anderen."},{type:"method",signature:"void NachVornBringen()",native:Ce.prototype._nachVornBringen,comment:"Setzt das Grafikobjekt eine Ebene nach vorne."},{type:"method",signature:"void NachHintenBringen()",native:Ce.prototype._nachHintenBringen,comment:"Setzt das Grafikobjekt eine Ebene nach hinten."},{type:"method",signature:"void EigeneFigurLöschen()",java:Ce.prototype._mj$eigeneFigurLoeschen$void$,comment:"Löscht die hinzugefügten Figuren"},{type:"method",signature:"boolean Berührt()",native:Ce.prototype._beruehrt,comment:"Gibt genau dann true zurück, wenn die Figur mit irgendeinem anderen graphischen Objekt kollidiert."},{type:"method",signature:"boolean Berührt(string farbe)",native:Ce.prototype._beruehrtFarbe,comment:"Gibt genau dann true zurück, wenn die Figur mit einem graphischen Objekt der angegebenen Farbe kollidiert."},{type:"method",signature:"boolean Berührt(Object objekt)",native:Ce.prototype._beruehrtObjekt,comment:"Gibt genau dann true zurück, wenn die Figur mit dem übergebenen graphischen Objekt kollidiert."},{type:"method",signature:"void FigurteilFestlegenDreieck(int x1, int y1, int x2, int y2, int x3, int y3, string farbe)",java:Ce.prototype._j_figurteilFestlegenDreieck,comment:"Erzeugt ein neues, dreieckiges Element und fügt es der Figur hinzu."},{type:"method",signature:"void FigurteilFestlegenRechteck(int x, int y, int breite, int höhe, string farbe)",java:Ce.prototype._j_figurteilFestlegenRechteck,comment:"Erzeugt ein neues, rechteckiges Element einer eigenen Darstellung der Figur."},{type:"method",signature:"void FigurteilFestlegenEllipse(int x, int y, int breite, int höhe, string farbe)",java:Ce.prototype._j_figurteilFestlegenEllipse,comment:"Erzeugt ein neues, elliptisches Element einer eigenen Darstellung der Figur."},{type:"method",signature:"void AktionAusführen()",java:Ce.prototype._mj$AktionAusführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void TasteGedrückt(char taste)",java:Ce.prototype._mj$TasteGedrückt$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTasteGedrückt(int sondertaste)",java:Ce.prototype._mj$SonderTasteGedrückt$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void MausGeklickt(int x, int y, int anzahl)",java:Ce.prototype._mj$MausGeklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."},{type:"method",signature:"Group FigurteileGeben()",native:Ce.prototype._figurteileGeben,comment:"Gibt die Gruppe der Figurteile zurück."}]),r(Ce,"type");let bh=Ce;const da=class da extends cs{renderGNG(){let t=this.filledShape;t.mx=this.moveAnchor.x,t.my=this.moveAnchor.y,t.radius=this.width/2,t.render()}_cj$_constructor_$Kreis$(t,e){let i=new Pl;this.filledShape=i,i._cj$_constructor_$Circle$double$double$double(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:60,y:10},this.width=100,this.height=100,this.colorString="rot",i.centerXInitial=60,i.centerYInitial=60,i._setFillColorInt(16711680),this.setGNGBackgroundColor(),e&&e()},60,60,50)}_radiusSetzen(t){this.width=2*t,this.height=2*t,this.renderGNG()}_getRadius(){return Math.round(this.filledShape.scaledRadius)}};r(da,"__javaDeclarations",[{type:"declaration",signature:"class Kreis extends GNGBaseFigur",comment:"Kreis-Klasse der Graphics'n'Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Kreis()",java:da.prototype._cj$_constructor_$Kreis$,comment:"Instanziiert ein neues Kreis-Objekt."},{type:"method",signature:"void RadiusSetzen(int radius)",native:da.prototype._radiusSetzen,comment:"Setzt den Radius des Kreis-Objekts."},{type:"method",signature:"double RadiusGeben()",native:da.prototype._getRadius,comment:"Gibt den Radius des Kreis-Objekts zurück."}]),r(da,"type");let Sm=da;const po=class po extends cs{get breite(){var t,e;return(e=(t=this.filledShape)==null?void 0:t.container)!=null&&e.scale?Math.round(Math.abs(this.width*this.filledShape.container.scale.x)):0}get höhe(){var t,e;return(e=(t=this.filledShape)==null?void 0:t.container)!=null&&e.scale?Math.round(Math.abs(this.height*this.filledShape.container.scale.y)):0}renderGNG(){let t=this.filledShape,e=this.moveAnchor.x+this.width/2,i=this.moveAnchor.y+this.height/2;t.left=this.moveAnchor.x,t.top=this.moveAnchor.y,t.initialWidth=this.width,t.initialHeight=this.height,t.calculateHitPolygonInitial(),t.render(),t.container.localTransform.identity(),t.container.localTransform.translate(-e,-i),t.container.localTransform.rotate(-this.filledShape.angle/180*Math.PI),t.container.localTransform.translate(e,i),t.container.setFromMatrix(t.container.localTransform),t.container.updateLocalTransform(),t.setWorldTransformAndHitPolygonDirty()}_cj$_constructor_$Rechteck$(t,e){let i=new Ll;this.filledShape=i,i._cj$_constructor_$Rectangle$double$double$double$double(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:10,y:10},this.width=100,this.height=100,this.colorString="rot",i._setFillColorInt(16711680),this.setGNGBackgroundColor(),e&&e()},10,10,100,100)}_groesseSetzen(t,e){this.width=t,this.height=e,this.renderGNG()}};r(po,"__javaDeclarations",[{type:"declaration",signature:"class Rechteck extends GNGBaseFigur",comment:"Rechteck-Klasse der Graphics'n'Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"Rechteck()",java:po.prototype._cj$_constructor_$Rechteck$,comment:"Instanziiert ein neues, achsenparalleles Rechteck-Objekt."},{type:"field",signature:"protected int breite",comment:"Breite des Rechtecks"},{type:"field",signature:"protected int höhe",comment:"Höhe des Rechtecks"},{type:"method",signature:"void GrößeSetzen(int breite, int höhe)",native:po.prototype._groesseSetzen,comment:"Setzt die Breite und Höhe des Rechtecks."}]),r(po,"type");let Tm=po;const Ur=class Ur extends cs{get text(){return this.filledShape.text}get textgroesse(){return this.filledShape.fontsize}renderGNG(){let t=this.filledShape;t.x=this.moveAnchor.x,t.y=this.moveAnchor.y-t.fontsize,this.filledShape.render();let e=t.x+t.centerXInitial,i=t.y+t.centerYInitial,n=t.container;n.localTransform.identity(),n.localTransform.translate(-t.centerXInitial,-t.centerYInitial),n.localTransform.rotate(-t.angle/180*Math.PI),n.localTransform.translate(e,i),n.setFromMatrix(n.localTransform),n.updateLocalTransform(),t.setWorldTransformAndHitPolygonDirty()}_cj$_constructor_$GText$(t,e){let i=new Xd;this.filledShape=i,i._cj$_constructor_$Text$double$double$double$string(t,()=>{t.s.pop(),t.s.push(this),this.moveAnchor={x:10,y:10},this.width=100,this.height=100,this.colorString="schwarz",i.centerXInitial=60,i.centerYInitial=60,i._setFillColorInt(0),this.setGNGBackgroundColor(),e&&e()},10,-3,12,"Text")}_textSetzen(t){this.filledShape.text=t,this.renderGNG()}_textGroesseSetzen(t){this.filledShape.fontsize=t,this.renderGNG()}_textVergroessern(){let t=this.filledShape.fontsize;t<=10?t+=1:t<=40?t+=2:t+=4,this._textGroesseSetzen(t)}_textVerkleinern(){let t=this.filledShape.fontsize;t<=10?t-=1:t<=40?t-=2:t-=4,t<1&&(t=1),this._textGroesseSetzen(t)}};r(Ur,"__javaDeclarations",[{type:"declaration",signature:"class GText extends GNGBaseFigur",comment:"Text-Klasse der Graphics'n'Games-Bibliothek (Cornelsen-Verlag)"},{type:"method",signature:"GText()",java:Ur.prototype._cj$_constructor_$GText$,comment:"Instanziiert ein neues Text-Objekt."},{type:"field",signature:"protected string text",comment:"Angezeigter Text"},{type:"field",signature:"protected int textgröße",nativeIdentifier:"textgroesse",comment:"Textgröße"},{type:"method",signature:"void TextSetzen(string text)",native:Ur.prototype._textSetzen,comment:"Ändert den Text des Text-Objekts."},{type:"method",signature:"void TextGrößeSetzen(int textGröße)",native:Ur.prototype._textGroesseSetzen,comment:"Setzt die Schriftgröße des Text-Objekts."},{type:"method",signature:"void TextVergrößern()",native:Ur.prototype._textVergroessern,comment:"Vergrößert die Schriftgröße des Text-Objekts."},{type:"method",signature:"void TextVerkleinern()",native:Ur.prototype._textVerkleinern,comment:"Verkleinert die Schriftgröße des Text-Objekts."},{type:"method",signature:"string getText()",template:"§1.text",comment:"Gibt den Textinhalt zurück."}]),r(Ur,"type");let $m=Ur;const xe=class xe extends R{constructor(){super(...arguments);r(this,"turtle");r(this,"moveAnchor",{x:0,y:0});r(this,"colorString","schwarz")}get x(){return this.turtle.getPosition().x}get y(){return this.turtle.getPosition().y}get winkel(){return Math.round(this.turtle.angle)}get größe(){return this.turtle.turtleSize}get sichtbar(){return this.turtle.container.visible}get stiftUnten(){return this.turtle.penIsDown}set stiftUnten(e){this.turtle.penIsDown=e}set größe(e){this._groesseSetzen(e)}set sichtbar(e){this._sichtbarkeitSetzen(e)}set x(e){this.turtle._moveTo(e,this.moveAnchor.y)}set y(e){this.turtle._moveTo(this.moveAnchor.x,e)}set winkel(e){this._winkelSetzen(e)}_cj$_constructor_$GTurtle$(e,i){this.turtle=new Jd,this.turtle._cj$_constructor_$Turtle$double$double(e,()=>{e.s.pop(),e.s.push(this),this.turtle.borderWidth=1,this.turtle.showTurtle=!0,this.turtle._setBorderColorInt(0),this.turtle.render(),this.moveAnchor={x:10,y:10},this.setGNGBackgroundColor(),i&&i(),this._mj$AktionAusführen$void$!=xe.prototype._mj$AktionAusführen$void$&&this.turtle.world.registerGNGEventListener(this,"aktionAusführen"),this._mj$TasteGedrückt$void$char!=xe.prototype._mj$TasteGedrückt$void$char&&this.turtle.world.registerGNGEventListener(this,"tasteGedrückt"),this._mj$SonderTasteGedrückt$void$int!=xe.prototype._mj$SonderTasteGedrückt$void$int&&this.turtle.world.registerGNGEventListener(this,"sondertasteGedrückt"),this._mj$MausGeklickt$void$int$int$int!=xe.prototype._mj$MausGeklickt$void$int$int$int&&this.turtle.world.registerGNGEventListener(this,"mausGeklickt")},100,200)}setGNGBackgroundColor(){this.turtle.world.shapesWhichBelongToNoGroup.length==1&&this.turtle.world._setBackgroundColor("#e6e6e6")}_groesseSetzen(e){this.turtle.turtleSize=e,this.turtle.borderWidth=e/100,this.turtle.moveTurtleTo(0,0,0),this.turtle.initTurtle(0,0,this.turtle.angle),this.turtle.moveTurtleTo(this.turtle.lineElements[this.turtle.lineElements.length-1].x,this.turtle.lineElements[this.turtle.lineElements.length-1].y,this.turtle.angle),this.turtle._turn(0)}_farbeSetzen(e){this.colorString=e,e||(e="schwarz");let i=ba[e.toLocaleLowerCase()];this.turtle._setBorderColorInt(i)}_ganzNachVornBringen(){this.turtle.bringToFront()}_ganzNachHintenBringen(){this.turtle.sendToBack()}_nachVornBringen(){this.turtle.bringOnePlaneFurtherToFront()}_nachHintenBringen(){this.turtle.bringOnePlaneFurtherToBack()}_touchesShape(e){let i=this.turtle.lineElements[this.turtle.lineElements.length-1],n=i.x,s=i.y;return e instanceof dn||e instanceof cs||e instanceof bh||e instanceof xe?e._containsPoint(n,s):!1}_mj$AktionAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$TasteGedrückt$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTasteGedrückt$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$MausGeklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_mj$TaktImpulsAusführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Ausführen$void$(e,i){throw new Error("Method not implemented.")}_mj$Taste$void$char(e,i,n){throw new Error("Method not implemented.")}_mj$SonderTaste$void$int(e,i,n){throw new Error("Method not implemented.")}_mj$Geklickt$void$int$int$int(e,i,n,s,a){throw new Error("Method not implemented.")}_containsPoint(e,i){return this.turtle._containsPoint(e,i)}_entfernen(){this.turtle.world.unRegisterGNGEventListener(this,"aktionAusführen"),this.turtle.world.unRegisterGNGEventListener(this,"tasteGedrückt"),this.turtle.world.unRegisterGNGEventListener(this,"sondertasteGedrückt"),this.turtle.world.unRegisterGNGEventListener(this,"mausGeklickt"),this.turtle.destroy()}_touchesColor(e){let i=ba[e];return this.turtle.touchesColor(i)}_drehen(e){this.turtle._turn(e)}_gehen(e){this.turtle._forward(e)}_stiftHeben(){this.turtle.penIsDown=!1}_stiftSenken(){this.turtle.penIsDown=!0}_löschen(){this.turtle._clear(100,200,0)}_positionSetzen(e,i){this.turtle._moveTo(e,i)}_winkelSetzen(e){this.turtle._setAngle(e)}_sichtbarkeitSetzen(e){this.turtle._setVisible(e)}_zumStartpunktGehen(){this.turtle._moveTo(100,200)}_xPositionGeben(){return this.turtle.getPosition().x}_yPositionGeben(){return this.turtle.getPosition().y}_winkelgeben(){return-this.turtle.turtleAngleDeg}_beruehrt(){return this.turtle.touchesAtLeastOneFigure()}};r(xe,"__javaDeclarations",[{type:"declaration",signature:"class GTurtle extends Object",comment:"Turtle-Klasse der Graphics'n'Games-Bibliothek (Cornelsen-Verlag)"},{type:"field",signature:"protected int x",template:"§1.x",comment:"x-Position des Grafikobjekts"},{type:"field",signature:"protected int y",template:"§1.y",comment:"y-Position des Grafikobjekts"},{type:"field",signature:"protected int winkel",template:"§1.winkel",comment:"Blickrichtung des Grafikobjekts in Grad"},{type:"field",signature:"protected int größe",template:"§1.größe",comment:"Größe des Grafikobjekts (100 entspricht 'normalgroß')"},{type:"field",signature:"protected boolean sichtbar",template:"§1.sichtbar",comment:"true, wenn das Grafikobjekt sichtbar ist"},{type:"field",signature:"protected boolean stiftUnten",template:"§1.stiftUnten",comment:"true, wenn die Turtle beim Gehen zeichnet"},{type:"method",signature:"GTurtle()",java:xe.prototype._cj$_constructor_$GTurtle$,comment:"Instanziiert ein neues Turtle-Objekt."},{type:"method",signature:"void GrößeSetzen(int größe)",native:xe.prototype._groesseSetzen,comment:"Setzt die Größe des Turtle-Dreiecks."},{type:"method",signature:"void FarbeSetzen(string farbe)",native:xe.prototype._farbeSetzen,comment:"Setzt die Zeichenfarbe des Turtle-Dreiecks."},{type:"method",signature:"void Drehen(int winkelInGrad)",native:xe.prototype._drehen,comment:"Dreht die Turtle um den angegebenen Winkel. Positiver Winkel bedeutet Drehung gegen den Uhrzeigersinn."},{type:"method",signature:"void Gehen(double länge)",native:xe.prototype._gehen,comment:"Bewirkt, dass die Turtle um die angegebene Länge nach vorne geht."},{type:"method",signature:"void StiftHeben()",native:xe.prototype._stiftHeben,comment:"Bewirkt, dass die Turtle beim Gehen ab jetzt nicht mehr zeichnet."},{type:"method",signature:"void StiftSenken()",native:xe.prototype._stiftSenken,comment:"Bewirkt, dass die Turtle beim Gehen ab jetzt wieder zeichnet."},{type:"method",signature:"void Löschen()",native:xe.prototype._löschen,comment:"Löscht alles von der Turtle gezeichnete und versetzt die Turtle in den Ausgangszustand."},{type:"method",signature:"void PositionSetzen(int x, int y)",native:xe.prototype._positionSetzen,comment:"Verschiebt die Turtle an die Position (x, y) ohne eine neue Linie zu zeichnen."},{type:"method",signature:"void ZumStartpunktGehen()",native:xe.prototype._zumStartpunktGehen,comment:"Verschiebt die Turtle an die Position (100, 200) ohne eine neue Linie zu zeichnen."},{type:"method",signature:"void WinkelSetzen(int winkelInGrad)",native:xe.prototype._winkelSetzen,comment:"Setzt den Blickwinkel der Turtle. 0° => nach rechts, 90°: => nach oben, usw.."},{type:"method",signature:"int WinkelGeben()",native:xe.prototype._winkelgeben,comment:"Gibt den Blickwinkel der Turtle zurück."},{type:"method",signature:"int XPositionGeben()",native:xe.prototype._xPositionGeben,comment:"Gibt x-Position der Turtle zurück."},{type:"method",signature:"int YPositionGeben()",native:xe.prototype._yPositionGeben,comment:"Gibt y-Position der Turtle zurück."},{type:"method",signature:"void SichtbarkeitSetzen(boolean sichtbarkeit)",native:xe.prototype._sichtbarkeitSetzen,comment:"Schaltet die Sichtbarkeit der Figur ein oder aus."},{type:"method",signature:"void Entfernen()",native:xe.prototype._entfernen,comment:"Entfernt die Figur von der Zeichenfläche."},{type:"method",signature:"void GanzNachVornBringen()",native:xe.prototype._ganzNachVornBringen,comment:"Setzt das Grafikobjekt vor alle anderen."},{type:"method",signature:"void GanzNachHintenBringen()",native:xe.prototype._ganzNachHintenBringen,comment:"Setzt das Grafikobjekt hinter alle anderen."},{type:"method",signature:"void NachVornBringen()",native:xe.prototype._nachVornBringen,comment:"Setzt das Grafikobjekt eine Ebene nach vorne."},{type:"method",signature:"void NachHintenBringen()",native:xe.prototype._nachHintenBringen,comment:"Setzt das Grafikobjekt eine Ebene nach hinten."},{type:"method",signature:"boolean Berührt()",native:xe.prototype._beruehrt,comment:"Gibt genau dann true zurück, wenn sich an der aktuellen Position der Turtle mindestens eine andere Figur befindet."},{type:"method",signature:"boolean Berührt(Object object)",native:xe.prototype._touchesShape,comment:"Gibt genau dann true zurück, wenn sich an der aktuellen Position der Turtle mindestens eine andere Figur mit der angegebenen Farbe befindet."},{type:"method",signature:"boolean Berührt(string farbe)",native:xe.prototype._touchesColor,comment:"Gibt genau dann true zurück, wenn die übergebene Figur die aktuelle Turtleposition enthält."},{type:"method",signature:"void AktionAusführen()",java:xe.prototype._mj$AktionAusführen$void$,comment:"Diese Methode wird vom Taktgeber aufgerufen."},{type:"method",signature:"void TasteGedrückt(char taste)",java:xe.prototype._mj$TasteGedrückt$void$char,comment:"Wird aufgerufen, wenn eine Taste gedrückt wird."},{type:"method",signature:"void SonderTasteGedrückt(int sondertaste)",java:xe.prototype._mj$SonderTasteGedrückt$void$int,comment:"Wird aufgerufen, wenn eine SonderTaste gedrückt wird."},{type:"method",signature:"void MausGeklickt(int x, int y, int anzahl)",java:xe.prototype._mj$MausGeklickt$void$int$int$int,comment:"Wird aufgerufen, wenn eine die linke Maustaste gedrückt wird."}]);let Im=xe;const yi=class yi extends R{static getWorld(t,e){let i=t.scheduler.interpreter.retrieveObject("WorldClass");i?e&&e(i):new t.classes.World()._cj$_constructor_$World$(t,()=>{i=t.s.pop(),e&&e(i)})}static _mj$MalflächenBreiteGeben$int$(t){let e=t.scheduler.interpreter.retrieveObject("WorldClass");return e?e.currentWidth:800}static _mj$MalflächenHöheGeben$int$(t){let e=t.scheduler.interpreter.retrieveObject("WorldClass");return e?e.currentHeight:600}static _mj$AktionsEmpfängerEintragen$void$Aktionsempfaenger(t,e){yi.getWorld(t,i=>{let n=["ausführen","taste","sondertaste","geklickt"];for(let s of n)i.gngEventlistenerManager.registerEventlistener(e,s)})}static _mj$AktionsEmpfängerEntfernen$void$Aktionsempfaenger(t,e){yi.getWorld(t,i=>{let n=["ausführen","taste","sondertaste","geklickt"];for(let s of n)i.gngEventlistenerManager.removeEventlistener(e,s)})}static _mj$TaktgeberStarten$void$(t){yi.getWorld(t,e=>{e.gngEventlistenerManager.startTimer()})}static _mj$TaktgeberStoppen$void$(t){yi.getWorld(t,e=>{e.gngEventlistenerManager.stopTimer()})}static _mj$TaktdauerSetzen$void$int(t,e){yi.getWorld(t,i=>{i.gngEventlistenerManager.taktdauer=e})}};r(yi,"__javaDeclarations",[{type:"declaration",signature:"class Zeichenfenster extends Object",comment:"Grafische Zeichenfläche mit Koordinatensystem"},{type:"method",signature:"static int MalflächenBreiteGeben()",java:yi._mj$MalflächenBreiteGeben$int$,comment:"Gibt die Breite des Zeichenbereichs in Pixeln zurück."},{type:"method",signature:"static int MalflächenHöheGeben()",java:yi._mj$MalflächenHöheGeben$int$,comment:"Gibt die Höhe des Zeichenbereichs in Pixeln zurück."},{type:"method",signature:"static void AktionsEmpfängerEintragen(Aktionsempfaenger aktionsempfaenger)",java:yi._mj$AktionsEmpfängerEintragen$void$Aktionsempfaenger,comment:"Trägt einen neuen Aktionsempfänger ein."},{type:"method",signature:"static void AktionsEmpfängerEntfernen(Aktionsempfaenger aktionsempfaenger)",java:yi._mj$AktionsEmpfängerEntfernen$void$Aktionsempfaenger,comment:"Entfernt einen Aktionsempfänger."},{type:"method",signature:"static void TaktgeberStarten()",java:yi._mj$TaktgeberStarten$void$,comment:"Startet den Taktgeber."},{type:"method",signature:"static void TaktgeberStoppen()",java:yi._mj$TaktgeberStoppen$void$,comment:"Stoppt den Taktgeber."},{type:"method",signature:"static void TaktdauerSetzen(int dauer)",java:yi._mj$TaktdauerSetzen$void$int,comment:"Setzt die Taktdauer des Zeitgebers in Millisekunden."}]),r(yi,"type");let Em=yi;class pv extends qo{constructor(){super(),this.classesInterfacesEnums.push(cs,Sm,Tm,Cm,$m,bh,km,Em,Im,xm)}isReplModule(){return!1}getCodeFragments(){return[]}}class _{}r(_,"StackClassComment",()=>d({de:"Klasse Stack zur Umsetzung des ADT Stapel entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `Stack` implements a stack storage (LIFO - Last In First Out)."})),r(_,"stackClassConstructorComment",()=>d({de:"Ein leerer Stapel wird angelegt.",en:"Constructor of the class `Stack` that creates an empty stack storage."})),r(_,"ElementClassComment",()=>d({de:"Die Klasse `Element` repräsentiert ein Element im Stapelspeicher, dem dynamischen Array (DynArray) oder der Warteschlange (Queue).",en:"The class `Element` represents an element in the stack storage, dynamic array (DynArray), or queue."})),r(_,"stackClassIsEmptyComment",()=>d({de:"Es wird geprüft, ob der Stapel leer ist. Gibt genau dann true zurück, wenn kein Element im Stapel enthalten ist.",en:"Returns true if there are no elements in the stack."})),r(_,"stackClassEmptyExceptionMessageTop",()=>d({de:"Der Stapel ist leer. Es kann kein Wert ausgelesen werden.",en:"The stack is empty. No value can be read."})),r(_,"stackClassEmptyExceptionMessagePop",()=>d({de:"Der Stapel ist leer. Es kann kein Wert entnommen werden.",en:"The stack is empty. No value can be popped."})),r(_,"mustNotPushNullExceptionMessage",()=>d({de:"Der übergebene Inhalt darf nicht 'null' sein.",en:"No null value may be pushed onto the stack."})),r(_,"stackClassPushComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird auf dem Stapel abgelegt. Löst eine IllegalArgumentException aus, falls das übergebene Element 'null' ist.",en:"Adds a new element on top of the stack storage."})),r(_,"stackClassPopComment",()=>d({de:"Das oberste Element des Stapels wird entnommen und dessen Inhalt zurückgegeben. Löst eine IllegalStateException aus, falls der Stapel leer ist.",en:"Removes the top element from the stack storage."})),r(_,"stackClassTopComment",()=>d({de:"Der Inhalt des obersten Elements des Stapels wird ausgelesen. Das Element wird dabei nicht aus dem Stapel entfernt. Löst eine IllegalStateException aus, falls der Stapel leer ist.",en:"Returns the top element of the stack storage without removing it."})),r(_,"queueClassComment",()=>d({de:"Klasse Queue zur Umsetzung des ADT Schlange entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `Queue` implements a queue storage (FIFO - First In First Out)."})),r(_,"queueClassConstructorComment",()=>d({de:"Eine leere Schlange wird angelegt.",en:"Constructor of the class `Queue` that creates an empty queue."})),r(_,"queueClassIsEmptyComment",()=>d({de:"Es wird geprüft, ob die Schlange leer ist. Gibt genau dann true zurück, wenn kein Element in der Schlange enthalten ist.",en:"Returns true if there are no elements in the queue."})),r(_,"queueClassHeadComment",()=>d({de:"Der Inhalt des ersten Elements der Schlange wird ausgelesen. Das Element wird dabei aber nicht aus der Schlange entfernt. Löst eine IllegalStateException aus, falls die Queue leer ist.",en:"Returns the first element of the queue without removing it. Throws a IllegalStateException if the queue is empty."})),r(_,"queueClassEmptyExceptionMessageHead",()=>d({de:"Die Schlange ist leer. Es kann kein Wert ausgelesen werden.",en:"The queue is empty. No value can be read."})),r(_,"queueClassEnqueueComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird an die Schlange angehängt.",en:"Adds an element to the end of this queue."})),r(_,"mustNotEnqueueNullExceptionMessage",()=>d({de:"Der übergebene Inhalt darf nicht 'null' sein.",en:"No null value may be enqueued into the queue."})),r(_,"queueClassDequeueComment",()=>d({de:"Das erste Element der Schlange wird entnommen und dessen Inhalt zurückgegeben. Löst eine IllegalStateException aus, falls die Schlange leer ist.",en:"Removes the first element from the queue. Throws a IllegalStateException if the queue is empty."})),r(_,"queueClassEmptyExceptionMessage",()=>d({de:"Die Schlange ist leer. Es kann kein Wert entnommen werden.",en:"The queue is empty. No value can be dequeued."})),r(_,"dynArrayClassComment",()=>d({de:"Klasse DynArray zur Umsetzung des ADT Dynamische Reihung entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `DynArray` implements a dynamic array (DynArray) with an arbitrary number of elements."})),r(_,"dynArrayConstructorComment",()=>d({de:"Eine leere dynamische Reihung wird angelegt.",en:"Constructor of the class `DynArray` that creates an empty dynamic array."})),r(_,"dynArrayIsEmptyComment",()=>d({de:"Es wird geprüft, ob die dynamische Reihung leer ist. Gibt genau dann true zurück, wenn die dynamische Reihung keine Elemente enthält.",en:"Returns true if the dynamic array contains no elements."})),r(_,"dynArrayGetItemComment",()=>d({de:"Der Inhalt des Elements an der Position index wird ausgelesen. Das Element wird dabei nicht aus der dynamischen Reihung entfernt. Löst eine IndexOutOfBoundsException aus, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Returns the element at the specified index in the dynamic array. Throws an IndexOutOfBoundsException if the index is invalid."})),r(_,"dynArrayAppendComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird am Ende an die dynamische Reihung angefügt. Löst eine IllegalArgumentException aus, falls das übergebene Element 'null' ist.",en:"Appends a new element to the end of the dynamic array."})),r(_,"mustNotAppendNullExceptionMessage",()=>d({de:"Das Element darf nicht 'null' sein.",en:"No null value may be appended to the dynamic array."})),r(_,"dynArrayInsertAtComment",()=>d({de:"Ein neues Element mit dem übergebenen Inhalt wird der Position index in die dynamische Reihung eingefügt. Das Element, das sich vorher an dieser befunden hat, und alle nachfolgenden Elemente werden nach hinten verschoben. Entspricht der Wert von index der Länge der dynamischen Reihung, so wird ein neues Element am Ende der dynamischen Reihung angefügt. Löst eine IndexOutOfBoundsException, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Inserts a new element at the specified index in the dynamic array. Throws an IndexOutOfBoundsException if the index is invalid."})),r(_,"mustNotInsertNullExceptionMessage",()=>d({de:"Das Element darf nicht 'null' sein.",en:"No null value may be inserted into the dynamic array."})),r(_,"dynArraySetItemComment",()=>d({de:"Der Inhalt des Elements an der Position index wird durch den übergebenen Inhalt ersetzt. Löst eine IndexOutOfBoundsException aus, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Sets the element at the specified index in the dynamic array to the specified value. Throws an IndexOutOfBoundsException if the index is invalid."})),r(_,"dynArrayDeleteComment",()=>d({de:"Das Element an der Position index wird gelöscht. Alle folgenden Elemente werden um eine Position nach vorne geschoben. Löst eine IndexOutOfBoundsException aus, falls der Index außerhalb des gültigen Bereichs liegt.",en:"Deletes the element at the specified index in the dynamic array. Throws an IndexOutOfBoundsException if the index is invalid."})),r(_,"dynArrayGetLengthComment",()=>d({de:"Die Anzahl der Elemente der dynamischen Reihung wird zurückgegeben.",en:"Returns the number of elements in the dynamic array."})),r(_,"dynArrayIteratorComment",()=>d({de:"Gibt einen Iterator über die Elemente der dynamischen Reihung zurück.",en:"Returns an iterator over the elements in the dynamic array."})),r(_,"binTreeClassComment",()=>d({de:"Klasse BinTree zur Umsetzung des ADT Binärbaum entsprechend der Vorgaben des KC Informatik für die gymnasiale Oberstufe in Niedersachsen und den ergänzenden Hinweisen (Stand: Juni 2025)",en:"The class `NiedersachsenBinTree` implements a binary tree."})),r(_,"binTreeConstructorComment",()=>d({de:"Ein leerer Baum wird erzeugt. Er besitzt keinen Inhalt und keine Teilbäume.",en:"Constructor of the class `NiedersachsenBinTree` that creates an empty binary tree."})),r(_,"binTreeConstructorWithContentComment",()=>d({de:"Ein Baum wird erzeugt. Die Wurzel erhält den übergebenen Inhalt als Wert. Der Baum besitzt jeweils einen leeren Baum als linken und rechten Teilbaum.",en:"Constructor of the class `NiedersachsenBinTree` that creates a binary tree with the specified content."})),r(_,"noContentForBinTreeExceptionMessage",()=>d({de:"Der Baum kann nicht erzeugt werden. Der übergebene Inhalt darf nicht 'null' sein.",en:"The content for the binary tree must not be 'null'."})),r(_,"binTreeSetItemNullExceptionMessage",()=>d({de:"Der Wert kann nicht gesetzt werden. Der übergebene Inhalt darf nicht 'null' sein.",en:"The content for the binary tree must not be 'null'."})),r(_,"binTreeHasItemComment",()=>d({de:"Gibt genau dann true zurück, wenn der binäre Baum ein Element enthält.",en:"Returns true if the binary tree contains an element."})),r(_,"binTreeGetItemComment",()=>d({de:"Gibt den Inhaltswert der Wurzel zurück. Löst eine IllegalStateException aus, falls der Baum leer ist.",en:"Returns the element of the binary tree. Throws a RuntimeException if the tree is empty."})),r(_,"binTreeSetItemComment",()=>d({de:"Die Wurzel des Baums erhält den übergebenen Inhalt als Wert. Bei einem leeren Baum wird zusätzlich als linker und rechter Teilbaum jeweils ein leerer Baum gesetzt. LÖst eine IllegalArgumentException aus, falls der übergebene Inhalt 'null' ist.",en:"Sets the content of the binary tree to the specified value. If the tree is empty, it also sets the left and right subtrees to empty trees. Throws an IllegalArgumentException if the value is 'null'."})),r(_,"binTreeDeleteItemComment",()=>d({de:"Löscht das Element des binären Baums.",en:"Deletes the element of the binary tree."})),r(_,"binTreeIsLeafComment",()=>d({de:"Prüft, ob der Baum ein Blatt ist. Wenn der Baum jeweils einen leeren Baum als linken und rechten Teilbaum besitzt, also ein Blatt ist, wird der Wert wahr zurückgegeben, sonst der Wert falsch.",en:"Returns true if the binary tree is a leaf (no left and no right subtree)."})),r(_,"binTreeEmptyIsLeafExceptionMessage",()=>d({de:"Der Baum ist leer. Überprüfung auf 'isLeaf' nicht möglich.",en:"The tree is empty. Can't check 'isLeaf' on an empty tree."})),r(_,"binTreeHasLeftComment",()=>d({de:"Gibt genau dann true zurück, wenn der binäre Baum einen linken Teilbaum hat.",en:"Returns true if the binary tree has a left subtree."})),r(_,"binTreeHasRightComment",()=>d({de:"Gibt genau dann true zurück, wenn der binäre Baum einen rechten Teilbaum hat.",en:"Returns true if the binary tree has a right subtree."})),r(_,"getLeftOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es ist kein linker Teilbaum vorhanden.",en:"The tree is empty. No left subtree can be returned."})),r(_,"getRightOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es ist kein rechter Teilbaum vorhanden.",en:"The tree is empty. No right subtree can be returned."})),r(_,"binTreeGetLeftComment",()=>d({de:"Gibt den linken Teilbaum zurück. Löst eine IllegalStateException aus, falls der Baum leer ist.",en:"Returns the left subtree of the binary tree. Throws a RuntimeException if no left subtree is present."})),r(_,"binTreeGetRightComment",()=>d({de:"Gibt den rechten Teilbaum zurück. Löst eine IllegalStateException aus, falls der Baum leer ist.",en:"Returns the right subtree of the binary tree. Throws a RuntimeException if no right subtree is present."})),r(_,"binTreeSetLeftComment",()=>d({de:"Setzt den linken Teilbaum. Löst eine IllegalStateException aus, falls der Baum leer ist. Löst eine IllegalArgumentException aus, falls der übergebene Wert 'null' ist.",en:"Sets the left subtree of the binary tree to the specified binary tree."})),r(_,"setLeftOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es kann kein linker Teilbaum gesetzt werden.",en:"The tree is empty. No left subtree can be set."})),r(_,"setRightOnEmptyTreeExceptionMessage",()=>d({de:"Der Baum ist leer. Es kann kein rechter Teilbaum gesetzt werden.",en:"The tree is empty. No right subtree can be set."})),r(_,"setEmptyTreeAsChildExceptionMessage",()=>d({de:"Der Wert kann nicht gesetzt werden. Der übergebene Baum darf nicht 'null' sein.",en:"The value cannot be set. The passed tree must not be 'null'."})),r(_,"binTreeSetRightComment",()=>d({de:"Setzt den rechten Teilbaum. Löst eine IllegalStateException aus, falls der Baum leer ist. Löst eine IllegalArgumentException aus, falls der übergebene Wert 'null' ist.",en:"Sets the right subtree of the binary tree to the specified binary tree."})),r(_,"binTreeDeleteLeftComment",()=>d({de:"Löscht den linken Teilbaum des binären Baums.",en:"Deletes the left subtree of the binary tree."})),r(_,"binTreeDeleteRightComment",()=>d({de:"Löscht den rechten Teilbaum des binären Baums.",en:"Deletes the right subtree of the binary tree."})),r(_,"noContentInBinTreeExceptionMessage",()=>d({de:"Es gibt keinen Wurzelinhalt im Binärbaum.",en:"There is no root content in the binary tree."})),r(_,"noLeftSubtreeToDeleteExceptionMessage",()=>d({de:"Es gibt keinen linken Teilbaum zum Löschen.",en:"There is no left subtree to delete."})),r(_,"noRightSubtreeToDeleteExceptionMessage",()=>d({de:"Es gibt keinen rechten Teilbaum zum Löschen.",en:"There is no right subtree to delete."})),r(_,"binTreeSetEmptyComment",()=>d({de:"Der Baum wird zu einem leeren Baum, d.h. er besitzt keinen Inhalt und keine Teilbäume.",en:"The tree becomes an empty tree, i.e., it has no content and no subtrees."})),r(_,"binTreeIsEmptyComment",()=>d({de:"Prüft ob der Baum leer ist. Wenn der Baum ein leerer Baum ist, wird der Wert wahr zurückgegeben, sonst der Wert falsch.",en:"Returns true if the binary tree is empty (no content and no subtrees)."}));const Wi=class Wi extends R{constructor(e){super();r(this,"elements",[]);this.elements=e||[]}_constructor(){return this}_isEmpty(){return this.elements.length==0}_getItem(e){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements[e]}_mj$toString$String$(e,i){if(this.elements.length==0){e.s.push("[]"),i&&i();return}let n=this.elements[0];if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.elements,()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.elements))),i&&i();return}}getElements(){return this.elements}_append(e){if(e==null)throw new _n(_.mustNotAppendNullExceptionMessage());this.elements.push(e)}_insertAt(e,i){if(e<0||e>this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));if(i==null)throw new _n(_.mustNotInsertNullExceptionMessage());return this.elements.splice(e,0,i),!0}_setItem(e,i){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));if(i==null)throw new _n(_.mustNotInsertNullExceptionMessage());let n=this.elements[e];return this.elements[e]=i,n}_delete(e){if(e<0||e>=this.elements.length)throw new Ve(o.indexOutOfBoundsException(e,this.elements.length-1));return this.elements.splice(e,1)[0]}_clear(){this.elements.length=0}_getLength(){return this.elements.length}_iterator(){let e=new R,i=0;return e._mj$hasNext$boolean$=(n,s)=>{n.s.push(i{i",comment:_.dynArrayClassComment},{type:"method",signature:"DynArray()",native:Wi.prototype._constructor,comment:_.dynArrayConstructorComment},{type:"method",signature:"boolean isEmpty()",native:Wi.prototype._isEmpty,comment:_.dynArrayIsEmptyComment},{type:"method",signature:"Object getItem(int index)",native:Wi.prototype._getItem,comment:_.dynArrayGetItemComment},{type:"method",signature:"void append(Object x)",native:Wi.prototype._append,comment:_.dynArrayAppendComment},{type:"method",signature:"void insertAt(int index, Object x)",native:Wi.prototype._insertAt,comment:_.dynArrayInsertAtComment},{type:"method",signature:"void setItem(int index, Object x)",native:Wi.prototype._setItem,comment:_.dynArraySetItemComment},{type:"method",signature:"void delete(int index)",native:Wi.prototype._delete,comment:_.dynArrayDeleteComment},{type:"method",signature:"int getLength()",native:Wi.prototype._getLength,comment:_.dynArrayGetLengthComment},{type:"method",signature:"Iterator iterator()",native:Wi.prototype._iterator,comment:_.dynArrayIteratorComment},{type:"method",signature:"String toString()",java:Wi.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Wi,"type");let Dm=Wi;const Ot=class Ot extends R{constructor(e){super();r(this,"inhalt",null);r(this,"left",null);r(this,"right",null);this.inhalt=e||null}_constructor(){return this}_constructor1(e=null){if(e==null)throw new _n(_.noContentForBinTreeExceptionMessage());return this.inhalt=e,this.left=new Ot()._constructor(),this.right=new Ot()._constructor(),this}_mj$toString$String$(e,i){let n=()=>{let s=e.s.pop().value,a=()=>{let l=e.s.pop().value,h=()=>{let u=e.s.pop().value,m=new Y("BinTree[inhalt="+s+", left="+l+", right="+u+"]");e.s.push(m),i&&i()};this.right?this.right._mj$toString$String$(e,h):(e.s.push(new Y("null")),h())};this.left?this.left._mj$toString$String$(e,a):(e.s.push(new Y("null")),a())};this.inhalt?this.inhalt._mj$toString$String$(e,n):(e.s.push(new Y("null")),n())}_hasItem(){return this.inhalt!=null}_getItem(){if(this._isEmpty())throw new hn(_.noContentInBinTreeExceptionMessage());return this.inhalt}_setItem(e){if(e==null)throw new _n(_.binTreeSetItemNullExceptionMessage());this._isEmpty()&&(this.left=new Ot()._constructor(),this.right=new Ot()._constructor()),this.inhalt=e}_deleteItem(){this.inhalt=null}_isLeaf(){var e,i;if(this._isEmpty())throw new hn(_.binTreeEmptyIsLeafExceptionMessage());return((e=this.left)==null?void 0:e._isEmpty())&&((i=this.right)==null?void 0:i._isEmpty())}_hasLeft(){return this.left!=null}_hasRight(){return this.right!=null}_getLeft(){if(this._isEmpty())throw new hn(_.getLeftOnEmptyTreeExceptionMessage());return this.left}_getRight(){if(this._isEmpty())throw new hn(_.getRightOnEmptyTreeExceptionMessage());return this.right}_setLeft(e){if(this._isEmpty())throw new hn(_.setLeftOnEmptyTreeExceptionMessage());if(e==null)throw new _n(_.setEmptyTreeAsChildExceptionMessage());this.left=e}_setRight(e){if(this._isEmpty())throw new hn(_.setRightOnEmptyTreeExceptionMessage());if(e==null)throw new _n(_.setEmptyTreeAsChildExceptionMessage());this.right=e}_deleteLeft(){if(!this.left)throw new W(_.noLeftSubtreeToDeleteExceptionMessage());this.left=null}_deleteRight(){if(!this.right)throw new W(_.noRightSubtreeToDeleteExceptionMessage());this.right=null}_setEmpty(){this.inhalt=null,this.left=null,this.right=null}_isEmpty(){return this.inhalt==null&&this.left==null&&this.right==null}};r(Ot,"__javaDeclarations",[{type:"declaration",package:"nds",signature:"class BinTree",comment:_.binTreeClassComment},{type:"method",signature:"BinTree()",native:Ot.prototype._constructor,comment:_.binTreeConstructorComment},{type:"method",signature:"BinTree(Object o)",native:Ot.prototype._constructor1,comment:_.binTreeConstructorWithContentComment},{type:"method",signature:"Object getItem()",native:Ot.prototype._getItem,comment:_.binTreeGetItemComment},{type:"method",signature:"void setItem(Object o)",native:Ot.prototype._setItem,comment:_.binTreeSetItemComment},{type:"method",signature:"boolean isLeaf()",native:Ot.prototype._isLeaf,comment:_.binTreeIsLeafComment},{type:"method",signature:"BinTree getLeft()",native:Ot.prototype._getLeft,comment:_.binTreeGetLeftComment},{type:"method",signature:"BinTree getRight()",native:Ot.prototype._getRight,comment:_.binTreeGetRightComment},{type:"method",signature:"void setLeft(BinTree b)",native:Ot.prototype._setLeft,comment:_.binTreeSetLeftComment},{type:"method",signature:"void setRight(BinTree b)",native:Ot.prototype._setRight,comment:_.binTreeSetRightComment},{type:"method",signature:"boolean isEmpty()",native:Ot.prototype._isEmpty,comment:_.binTreeIsEmptyComment},{type:"method",signature:"void setEmpty()",native:Ot.prototype._setEmpty,comment:_.binTreeSetEmptyComment},{type:"method",signature:"String toString()",java:Ot.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ot,"type");let jm=Ot;const ha=class ha extends R{constructor(){super();r(this,"inhalt",null);r(this,"next",null)}_constructorEmpty(){return this}_constructorFull(e,i){return this.inhalt=e,this.next=i,this}_mj$toString$String$(e,i){if(this.inhalt==null){e.s.push(new Y("null")),i&&i();return}this.inhalt._mj$toString$String$(e,()=>{let n=e.s.pop(),s=new Y("Element[inhalt="+n.value+"]");e.s.push(s),i&&i()})}};r(ha,"__javaDeclarations",[{type:"declaration",package:"nds",signature:"class Element",comment:_.ElementClassComment},{type:"method",signature:"Element()",native:ha.prototype._constructorEmpty},{type:"method",signature:"Element(Object inhalt, Element next)",native:ha.prototype._constructorFull},{type:"method",signature:"String toString()",java:ha.prototype._mj$toString$String$,comment:o.objectToStringComment},{type:"field",signature:"Object inhalt",nativeIdentifier:"inhalt"},{type:"field",signature:"Element next",nativeIdentifier:"next"}]),r(ha,"type");let yh=ha;const fr=class fr extends R{constructor(){super();r(this,"top",null)}_constructor(){return this}_isEmpty(){return this.top==null}_push(e){if(e==null)throw new _n(_.mustNotPushNullExceptionMessage());let i=new yh()._constructorFull(e,this.top);this.top=i}_pop(){if(this._isEmpty())throw new hn("Stack is empty. Cannot pop element.");let e=this.top.inhalt;return this.top=this.top.next,e}_top(){if(this._isEmpty())throw new hn(_.stackClassEmptyExceptionMessageTop());return this.top.inhalt}_mj$toString$String$(e,i){if(this.top==null){e.s.push("[]"),i&&i();return}let n=this.top.inhalt;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.top==null)return[];const e=[];let i=this.top;for(;i!=null;)e.push(i.inhalt),i=i.next;return e}};r(fr,"__javaDeclarations",[{type:"declaration",package:"nds",signature:"class Stack",comment:_.StackClassComment},{type:"method",signature:"Stack()",native:fr.prototype._constructor,comment:_.stackClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:fr.prototype._isEmpty,comment:_.stackClassIsEmptyComment},{type:"method",signature:"void push(Object pContent)",native:fr.prototype._push,comment:_.stackClassPushComment},{type:"method",signature:"Object pop()",native:fr.prototype._pop,comment:_.stackClassPopComment},{type:"method",signature:"Object top()",native:fr.prototype._top,comment:_.stackClassTopComment},{type:"method",signature:"String toString()",java:fr.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(fr,"type");let Mm=fr;const br=class br extends _e{constructor(){super();r(this,"head",null);r(this,"tail",null)}_constructor(){return this}_isEmpty(){return this.head==null}_enqueue(e){if(e==null)throw new _n(_.mustNotEnqueueNullExceptionMessage());let i=new yh()._constructorFull(e,null);this.head==null?this.head=i:this.tail.next=i,this.tail=i}_dequeue(){if(this._isEmpty())throw new hn(_.queueClassEmptyExceptionMessage());let e=this.head.inhalt;return this.head==this.tail?(this.tail=null,this.head=null):this.head=this.head.next,e}_head(){if(this._isEmpty())throw new hn(_.queueClassEmptyExceptionMessageHead());return this.head.inhalt}_mj$toString$String$(e,i){if(this.head==null){e.s.push("[]"),i&&i();return}let n=this.head.inhalt;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.head==null)return[];const e=[];let i=this.head;for(;i!=null;)e.push(i.inhalt),i=i.next;return e}};r(br,"__javaDeclarations",[{type:"declaration",package:"nds",signature:"class Queue",comment:_.queueClassComment},{type:"method",signature:"Queue()",native:br.prototype._constructor,comment:_.queueClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:br.prototype._isEmpty,comment:_.queueClassIsEmptyComment},{type:"method",signature:"Object head()",native:br.prototype._head,comment:_.queueClassHeadComment},{type:"method",signature:"void enqueue(Object neu)",native:br.prototype._enqueue,comment:_.queueClassEnqueueComment},{type:"method",signature:"Object dequeue()",native:br.prototype._dequeue,comment:_.queueClassDequeueComment},{type:"method",signature:"String toString()",java:br.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(br,"type");let Pm=br;class gv extends qo{constructor(){super(),this.classesInterfacesEnums.push(Dm,jm,Mm,Pm)}isReplModule(){return!1}getCodeFragments(){return[]}prepareSystemModule(t){}getStandardImports(){return[["nds","*"]]}}class T{}r(T,"listClassComment",()=>d({de:"Generische Klasse List Objekt der generischen Klasse List verwalten beliebig viele linear angeordnete Objekte vom Typ ContentType. Auf höchstens ein Listenobjekt, aktuellesObjekt genannt, kann jeweils zugegriffen werden. Wenn eine Liste leer ist, vollständig durchlaufen wurde oder das aktuelle Objekt am Ende der Liste gelöscht wurde, gibt es kein aktuelles Objekt.
Das erste oder das letzte Objekt einer Liste können durch einen Auftrag zum aktuellen Objekt gemacht werden. Ausserdem kann das dem aktuellen Objekt folgende Listenobjekt zum neuen aktuellen Objekt werden.
Das aktuelle Objekt kann gelesen, verändert oder gelöscht werden. Ausserdem kann vor dem aktuellen Objekt ein Listenobjekt eingefügt werden.",en:"Generic class List"})),r(T,"listClassConstructorComment",()=>d({de:"Eine leere Liste wird erzeugt.",en:"Creates an empty list."})),r(T,"listClassIsEmptyComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn die Liste keine Objekte enthält, sonst liefert sie den Wert false.",en:"Returns true if and only if this list contains no objects."})),r(T,"listClassHasAccessComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn es ein aktuelles Objekt gibt, sonst liefert sie den Wert false.",en:"Returns true if and only there is a 'current object'."})),r(T,"listClassNextComment",()=>d({de:"Falls die Liste nicht leer ist, es ein aktuelles Objekt gibt und dieses nicht das letzte Objekt der Liste ist, wird das dem aktuellen Objekt in der Liste folgende Objekt zum aktuellen Objekt, andernfalls gibt es nach Ausführung des Auftrags kein aktuelles Objekt, d.h. hasAccess() liefert den Wert false.",en:"Makes 'current object' point to next object in list. If end of list is reached then there's no current object anymore."})),r(T,"listClassToFirstComment",()=>d({de:"Falls die Liste nicht leer ist, wird das erste Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.",en:"If this list is not empty, then first object gets 'current object'. Otherwise nothing happens."})),r(T,"listClassToLastComment",()=>d({de:"Falls die Liste nicht leer ist, wird das letzte Objekt der Liste aktuelles Objekt. Ist die Liste leer, geschieht nichts.",en:"If this list is not empty, then last object gets 'current object'. Otherwise nothing happens."})),r(T,"listClassGetContentComment",()=>d({de:"Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt zurückgegeben, andernfalls (hasAccess() == false) gibt die Anfrage den Wert null zurück.",en:"If there is a current object (that is: hasAccess() == true), then this object is returned, otherwise null is returned."})),r(T,"listClassSetContentComment",()=>d({de:"Falls es ein aktuelles Objekt gibt (hasAccess() == true) und pContent ungleich null ist, wird das aktuelle Objekt durch pContent ersetzt. Sonst geschieht nichts.",en:"If there is a current object (that is: hasAccess() == true) and pContent != null, then current object gets replaced by pContent."})),r(T,"listClassInsertComment",()=>d({de:"Falls es ein aktuelles Objekt gibt (hasAccess() == true), und pContent != null ist, wird ein neues Objekt vor dem aktuellen Objekt in die Liste eingefügt. Das aktuelle Objekt bleibt unverändert.
Wenn die Liste leer ist, wird pContent in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt (hasAccess() == false).
Falls es kein aktuelles Objekt gibt (hasAccess() == false) und die Liste nicht leer ist oder pContent gleich null ist, geschieht nichts.",en:"If there is a current object (that is: hasAccess() == true) and pContent != null then given pContent is inserted before current objecte."})),r(T,"listClassAppendComment",()=>d({de:"Falls pContent gleich null ist, geschieht nichts.
Ansonsten wird ein neues Objekt pContent am Ende der Liste eingefügt. Das aktuelle Objekt bleibt unverändert.
Wenn die Liste leer ist, wird das Objekt pContent in die Liste eingefügt und es gibt weiterhin kein aktuelles Objekt (hasAccess() == false).",en:"If pContent == null then nothing happens. Otherwise pContent is added at the end of the list. Current object is not changed."})),r(T,"listClassConcatComment",()=>d({de:"Falls es sich bei der Liste und pList um dasselbe Objekt handelt, pList null oder eine leere Liste ist, geschieht nichts.
Ansonsten wird die Liste pList an die aktuelle Liste angehängt. Anschliessend wird pList eine leere Liste. Das aktuelle Objekt bleibt unverändert. Insbesondere bleibt hasAccess identisch.",en:"If pList == this list, pList == null or pList is empty then nothing happens. Otherwise pList is concatenated to this list and then emptied."})),r(T,"listClassRemoveComment",()=>d({de:"Wenn die Liste leer ist oder es kein aktuelles Objekt gibt (hasAccess() == false), geschieht nichts.
Falls es ein aktuelles Objekt gibt (hasAccess() == true), wird das aktuelle Objekt gelöscht und das Objekt hinter dem gelöschten Objekt wird zum aktuellen Objekt.
Wird das Objekt, das am Ende der Liste steht, gelöscht, gibt es kein aktuelles Objekt mehr.",en:"If list is empty or there is no 'current object' (hasAccess() == false), then nothing happens. Otherwise the current object gets removed and the next object is the new current object. If the object removed was last in the list, then there won't be any current object."})),r(T,"listClassGetPreviousComment",()=>d({de:"Liefert den Vorgängerknoten des Knotens pNode. Ist die Liste leer, pNode == null, pNode nicht in der Liste oder pNode der erste Knoten der Liste, wird null zurückgegeben.",en:""})),r(T,"queueClassComment",()=>d({de:"Objekte der generischen Klasse Queue (Warteschlange) verwalten beliebige Objekte vom Typ ContentType nach dem First-In-First-Out-Prinzip, d.h., das zuerst abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben eine konstante Laufzeit, unabhängig von der Anzahl der verwalteten Objekte.",en:"Implementation of a queue. Elements can be accessed according to fifo systematic (first in - first out)."})),r(T,"queueClassConstructorComment",()=>d({de:"Eine leere Schlange wird erzeugt. Objekte, die in dieser Schlange verwaltet werden, müssen vom Typ ContentType sein.",en:"Creates an empty queue."})),r(T,"queueClassIsEmptyComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn die Queue keine Objekte enthält, sonst liefert sie den Wert false.",en:"Returns true if and only if this queue contains no objects."})),r(T,"queueClassEnqueueComment",()=>d({de:"Das Objekt pContentType wird an die Schlange angehängt. Falls pContentType gleich null ist, bleibt die Schlange unverändert.",en:"Given object gets added to this queue's end. If given object is null, then queue remains unchanged."})),r(T,"queueClassDequeueComment",()=>d({de:"Das erste Objekt wird aus der Schlange entfernt. Falls die Schlange leer ist, wird sie nicht verändert.",en:"Remove the first element of this queue. If Queue is empty then nothing happens."})),r(T,"queueClassFrontComment",()=>d({de:"Die Anfrage liefert das erste Objekt der Schlange. Die Schlange bleibt unverändert. Falls die Schlange leer ist, wird null zurückgegeben.",en:"Returns the first element of this queue without removing it from the queue. If queue is empty then null is returned."})),r(T,"stackClassComment",()=>d({de:"bjekte der generischen Klasse Stack (Keller, Stapel) verwalten beliebige Objekte vom Typ ContentType nach dem Last-In-First-Out-Prinzip, d.h., das zuletzt abgelegte Objekt wird als erstes wieder entnommen. Alle Methoden haben eine konstante Laufzeit, unabhängig von der Anzahl der verwalteten Objekte.",en:"Implementation of a stack. Elements can be accessed according to Lifo systematic (last in - first out)."})),r(T,"stackClassConstructorComment",()=>d({de:"Eine leerer Stack wird erzeugt. Objekte, die in diesem Stack verwaltet werden, müssen vom Typ ContentType sein.",en:"Creates an empty stack."})),r(T,"stackClassIsEmptyComment",()=>d({de:"Die Anfrage liefert den Wert true, wenn die Stack keine Objekte enthält, sonst liefert sie den Wert false.",en:"Returns true if and only if this stack contains no objects."})),r(T,"stackClassPushComment",()=>d({de:"Das Objekt pContentType wird oben auf den Stapel gelegt. Falls pContentType gleich null ist, bleibt der Stapel unverändert.",en:"Given object gets pushed on top of this stack. If given object is null, then the stack remains unchanged."})),r(T,"stackClassPopComment",()=>d({de:'Das zuletzt eingefügte ("oberste") Objekt wird aus dem Stack entfernt. Falls der Stack leer ist, wird er nicht verändert.',en:'Remove the last inserted ("topmost") element of this stack. If this stack is empty then nothing happens.'})),r(T,"stackClassTopComment",()=>d({de:"Die Anfrage liefert das oberste Objekt des Stacks. Der Stack bleibt unverändert. Falls der Stack leer ist, wird null zurückgegeben.",en:"Returns the topmost element of this stack without removing it from the stack. If this stack is empty then null is returned."})),r(T,"comparableContentInterfaceComment",()=>d({de:"Das generische Interface ComparableContent legt die Methoden fest, über die Objekte verfügen müssen, die in einen binären Suchbaum (BinarySearchTree) eingefügt werden sollen. Die Ordnungsrelation wird in Klassen, die ComparableContent implementieren durch überschreiben der drei implizit abstrakten Methoden isGreater, isEqual und isLess festgelegt. ",en:"Generic Interface ComparableContent with methods isGreater, isEqual and isLess."})),r(T,"comparableContentIsGreaterComment",()=>d({de:"Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewünschten Ordnungsrelation grösser als das Objekt pContent ist, wird true geliefert. Sonst wird false geliefert.",en:'Returns true if and only if this object is "greater" than given object pContent.'})),r(T,"comparableContentIsLessComment",()=>d({de:"Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewünschten Ordnungsrelation kleiner als das Objekt pContent ist, wird true geliefert. Sonst wird false geliefert.",en:'Returns true if and only if this object is "less" than given object pContent.'})),r(T,"comparableContentIsEqualComment",()=>d({de:"Wenn festgestellt wird, dass das Objekt, von dem die Methode aufgerufen wird, bzgl. der gewünschten Ordnungsrelation gleich groß ist wie das Objekt pContent, wird true geliefert. Sonst wird false geliefert.",en:'Returns true if and only if this object is "equal" to given object pContent.'})),r(T,"binaryTreeClassComment",()=>d({de:"Mithilfe der generischen Klasse BinaryTree können beliebig viele Inhaltsobjekte vom Typ ContentType in einem Binärbaum verwaltet werden. Ein Objekt der Klasse stellt entweder einen leeren Baum dar oder verwaltet ein Inhaltsobjekt sowie einen linken und einen rechten Teilbaum, die ebenfalls Objekte der generischen Klasse BinaryTree sind.",en:"Generic binary tree class"})),r(T,"binaryTreeConstructorComment1",()=>d({de:"Nach dem Aufruf des Konstruktors existiert ein leerer Binärbaum.",en:"Creates an empty binary tree."})),r(T,"binaryTreeConstructorComment2",()=>d({de:"Wenn der Parameter pContent ungleich null ist, existiert nach dem Aufruf des Konstruktors der Binärbaum und hat pContent als Inhaltsobjekt und zwei leere Teilbäume. Falls der Parameter null ist, wird ein leerer Binärbaum erzeugt.",en:"Creates a binary tree. If pContent != null then the tree consists of one node holding given content and two empty binary trees beneath it."})),r(T,"binaryTreeConstructorComment3",()=>d({de:"Wenn der Parameter pContent ungleich null ist, wird ein Binärbaum mit pContent als Inhalt und den beiden Teilbäumen pLeftTree und pRightTree erzeugt. Sind pLeftTree oder pRightTree gleich null, wird der entsprechende Teilbaum als leerer Binärbaum eingefügt. So kann es also nie passieren, dass linke oder rechte Teilbäume null sind. Wenn der Parameter pContent gleich null ist, wird ein leerer Binärbaum erzeugt.",en:"Creates a binary tree. If pContent != null then the root node holds given content. If pleftTree or pRightTree != null then theses are the subtrees beneath the root node."})),r(T,"binaryTreeIsEmptyComment",()=>d({de:"Diese Anfrage liefert den Wahrheitswert true, wenn der Binärbaum leer ist, sonst liefert sie den Wert false.",en:"Returns true if and only if this tree is empty."})),r(T,"binaryTreeSetContentComment",()=>d({de:"Wenn pContent null ist, geschieht nichts.
Ansonsten: Wenn der Binärbaum leer ist, wird der Parameter pContent als Inhaltsobjekt sowie ein leerer linker und rechter Teilbaum eingefügt. Ist der Binärbaum nicht leer, wird das Inhaltsobjekt durch pContent ersetzt. Die Teilbäume werden nicht geändert.",en:"If pContent != null and this tree is not empty then it's root node content is set to pContent."})),r(T,"binaryTreeGetContentComment",()=>d({de:"Diese Anfrage liefert das Inhaltsobjekt des Binärbaums. Wenn der Binärbaum leer ist, wird null zurückgegeben.",en:"Returns content of this tree if it's not empty."})),r(T,"binaryTreeSetLeftTreeComment",()=>d({de:"Falls der Parameter null ist, geschieht nichts. Wenn der Binärbaum leer ist, wird pTree nicht angehängt. Andernfalls erhält der Binärbaum den übergebenen BinaryTree als linken Teilbaum.",en:"If this tree is not empty and pTree != null then pTree is attached to this node as left subtree."})),r(T,"binaryTreeSetRightTreeComment",()=>d({de:"Falls der Parameter null ist, geschieht nichts. Wenn der Binärbaum leer ist, wird pTree nicht angehängt. Andernfalls erhält der Binärbaum den übergebenen BinaryTree als rechten Teilbaum.",en:"If this tree is not empty and pTree != null then pTree is attached to this node as right subtree."})),r(T,"binaryTreeGetLeftTreeComment",()=>d({de:"Diese Anfrage liefert den linken Teilbaum des Binärbaumes. Wenn der Binärbaum leer ist, wird null zurückgegeben.",en:"If this tree is not empty then this method returns it's left subtree."})),r(T,"binaryTreeGetRightTreeComment",()=>d({de:"Diese Anfrage liefert den rechten Teilbaum des Binärbaumes. Wenn der Binärbaum leer ist, wird null zurückgegeben.",en:"If this tree is not empty then this method returns it's right subtree."})),r(T,"binarySearchTreeClassComment",()=>d({de:`Mithilfe der generischen Klasse BinarySearchTree können beliebig viele Objekte in einem Binärbaum (binärer Suchbaum) entsprechend einer Ordnungsrelation verwaltet werden. Ein Objekt der Klasse stellt entweder einen leeren binären Suchbaum dar oder verwaltet ein Inhaltsobjekt sowie einen linken und einen rechten Teilbaum, die ebenfalls Objekte der Klasse BinarySearchTree sind. Die Klasse der Objekte, die in dem Suchbaum verwaltet werden sollen, muss das generische Interface ComparableContent implementieren. Dabei muss durch überschreiben der drei Vergleichsmethoden isLess, isEqual, isGreater (s. Dokumentation des Interfaces) eine eindeutige Ordnungsrelation festgelegt sein. Alle Objekte im linken Teilbaum sind kleiner als das Inhaltsobjekt des binären Suchbaums. Alle Objekte im rechten Teilbaum sind grösser als das Inhaltsobjekt des binären Suchbaums. Diese Bedingung gilt (rekursiv) auch in beiden Teilbäumen. Hinweis: In dieser Version wird die Klasse BinaryTree nicht benutzt. `,en:"Generic binary search tree class"})),r(T,"binarySearchTreeConstructorComment1",()=>d({de:"Nach dem Aufruf des Konstruktors existiert ein leerer Binärer Suchbaum.",en:"Creates an empty binary tree."})),r(T,"binarySearchTreeIsEmptyComment",()=>d({de:"Diese Anfrage liefert den Wahrheitswert true, wenn der Binärbaum leer ist, sonst liefert sie den Wert false.",en:"Returns true if and only if this tree is empty."})),r(T,"binarySearchTreeGetContentComment",()=>d({de:"Diese Anfrage liefert das Inhaltsobjekt des Binärbaums. Wenn der Binärbaum leer ist, wird null zurückgegeben.",en:"Returns content of this tree if it's not empty."})),r(T,"binarySearchTreeGetLeftTreeComment",()=>d({de:"Diese Anfrage liefert den linken Teilbaum des Binärbaumes. Wenn der Binärbaum leer ist, wird null zurückgegeben.",en:"If this tree is not empty then this method returns it's left subtree."})),r(T,"binarySearchTreeGetRightTreeComment",()=>d({de:"Diese Anfrage liefert den rechten Teilbaum des Binärbaumes. Wenn der Binärbaum leer ist, wird null zurückgegeben.",en:"If this tree is not empty then this method returns it's right subtree."})),r(T,"binarySearchTreeInsertComment",()=>d({de:"Falls der Parameter null ist, geschieht nichts. Falls ein bezüglich der verwendeten Vergleichsmethode isEqual mit pContent übereinstimmendes Objekt im geordneten binären Suchbau enthalten ist, passiert nichts. Achtung: hier wird davon ausgegangen, dass isEqual genau dann true liefert, wenn isLess und isGreater false liefern. Andernfalls (isLess oder isGreater) wird das Objekt pContent entsprechend der vorgegebenen Ordnungsrelation in den BinarySearchTree eingeordnet.",en:"If given pContent != null then it is inserted into this binary search tree."})),r(T,"binarySearchTreeRemoveComment",()=>d({de:"Falls ein bezüglich der verwendeten Vergleichsmethode mit pContent übereinstimmendes Objekt im binären Suchbaum enthalten ist, wird dieses entfernt. Falls der Parameter null ist, ändert sich nichts.",en:"Removes given pContent from this tree if present."})),r(T,"binarySearchTreeSearchComment",()=>d({de:"Falls ein bezüglich der verwendeten Vergleichsmethode isEqual mit pContent übereinstimmendes Objekt im binären Suchbaum enthalten ist, liefert die Anfrage dieses, ansonsten wird null zurückgegeben.
Falls der Parameter null ist, wird null zurückgegeben.",en:"If this tree contains pContent, then pContent is returned, otherwise null is returned."})),r(T,"vertexClassComment",()=>d({de:"Die Klasse Vertex stellt einen einzelnen Knoten eines Graphen dar. Jedes Objekt dieser Klasse verfügt über eine im Graphen eindeutige ID als String und kann diese ID zurückliefern. Darüber hinaus kann eine Markierung gesetzt und abgefragt werden.",en:"Objects of this class represent a node in a graph. Each vertex has a (per graph) unique ID (type String). There's also a boolean field mark which you can set and get."})),r(T,"vertexConstructorComment",()=>d({de:"Ein neues Objekt vom Typ Vertex wird erstellt. Seine Markierung hat den Wert false.",en:"Creates a new vertex object with mark == false."})),r(T,"vertexGetIDComment",()=>d({de:"Die Anfrage liefert die ID des Knotens als String.",en:"Returns the id of this vertex."})),r(T,"vertexSetMarkComment",()=>d({de:"Der Auftrag setzt die Markierung des Knotens auf den Wert pMark.",en:"Sets value of field mark."})),r(T,"vertexIsMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn die Markierung des Knotens den Wert true hat, ansonsten false.",en:"Returns the value of this vertex' mark."})),r(T,"edgeClassComment",()=>d({de:"Die Klasse Edge stellt eine einzelne, ungerichtete Kante eines Graphen dar. Beim Erstellen werden die beiden durch sie zu verbindenden Knotenobjekte und eine Gewichtung als double übergeben. Beide Knotenobjekte können abgefragt werden. Des Weiteren können die Gewichtung und eine Markierung gesetzt und abgefragt werden.",en:"Objects of class edge represent an edge of a graph."})),r(T,"edgeConstructorComment",()=>d({de:"Ein neues Objekt vom Typ Edge wird erstellt. Die von diesem Objekt repräsentierte Kante verbindet die Knoten pVertex und pAnotherVertex mit der Gewichtung pWeight. Ihre Markierung hat den Wert false.",en:"Creates a new edge-object connecting nodes pVertex and pAnotherVertex with given weight. Its mark has value false. "})),r(T,"edgeGetVerticesComment",()=>d({de:"Die Anfrage gibt die beiden Knoten, die durch die Kante verbunden werden, als neues Feld vom Typ Vertex zurück. Das Feld hat genau zwei Einträge mit den Indexwerten 0 und 1.",en:"Returns an array containing the two nodes that are connected by this vertex."})),r(T,"edgeSetWeightComment",()=>d({de:"Der Auftrag setzt das Gewicht der Kante auf pWeight.",en:"Sets value of field weight."})),r(T,"edgeGetWeightComment",()=>d({de:"Die Anfrage liefert das Gewicht der Kante als double.",en:"Returns weight of this edge."})),r(T,"edgeSetMarkComment",()=>d({de:"Der Auftrag setzt die Markierung der Kante auf den Wert pMark.",en:"Sets value of field mark."})),r(T,"edgeIsMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn die Markierung der Kante den Wert true hat, ansonsten false.",en:"Returns the value of this edges mark."})),r(T,"graphClassComment",()=>d({de:"Die Klasse Graph stellt einen ungerichteten, kantengewichteten Graphen dar. Es können Knoten- und Kantenobjekte hinzugefügt und entfernt, flache Kopien der Knoten- und Kantenlisten des Graphen angefragt und Markierungen von Knoten und Kanten gesetzt und überprüft werden. Des Weiteren kann eine Liste der Nachbarn eines bestimmten Knoten, eine Liste der inzidenten Kanten eines bestimmten Knoten und die Kante von einem bestimmten Knoten zu einem anderen bestimmten Knoten angefragt werden. Abgesehen davon kann abgefragt werden, welches Knotenobjekt zu einer bestimmten ID gehört und ob der Graph leer ist.",en:"An object of class graph represents an undirected, weighted graph."})),r(T,"graphConstructorComment",()=>d({de:"Ein Objekt vom Typ Graph wird erstellt. Der von diesem Objekt repräsentierte Graph ist leer.",en:"Creates a new empty graph object."})),r(T,"graphGetVerticesComment",()=>d({de:"Die Anfrage liefert eine neue Liste aller Knotenobjekte vom Typ List.",en:"Returns a list containing all vertices of this graph."})),r(T,"graphGetEdgesComment",()=>d({de:"Die Anfrage liefert eine neue Liste aller Kantenobjekte vom Typ List.",en:"Returns a list containing all edges of this graph."})),r(T,"graphGetVertexComment",()=>d({de:"Die Anfrage liefert das Knotenobjekt mit pID als ID. Ist ein solchen Knotenobjekt nicht im Graphen enthalten, wird null zurückgeliefert.",en:"Return vertex object with given id. Returns null if not found."})),r(T,"graphAddVertexComment",()=>d({de:"Der Auftrag fügt den Knoten pVertex in den Graphen ein, sofern es noch keinen Knoten mit demselben ID-Eintrag wie pVertex im Graphen gibt und pVertex eine ID ungleich null hat. Ansonsten passiert nichts.",en:"Adds given vertex to this graph. Does nothing if vertex with this vertex' id is already present."})),r(T,"graphAddEdgeComment",()=>d({de:"Der Auftrag fügt die Kante pEdge in den Graphen ein, sofern beide durch die Kante verbundenen Knoten im Graphen enthalten sind, nicht identisch sind und noch keine Kante zwischen den Knoten existiert. Ansonsten passiert nichts.",en:"Adds given edge if graph contains both it's vertices and no edge that connects them."})),r(T,"graphRemoveVertexComment",()=>d({de:"Der Auftrag entfernt den Knoten pVertex aus dem Graphen und löscht alle Kanten, die mit ihm inzident sind. Ist der Knoten pVertex nicht im Graphen enthalten, passiert nichts.",en:"Removes given Vertex and all edges adjacent to it."})),r(T,"graphRemoveEdgeComment",()=>d({de:"Der Auftrag entfernt die Kante pEdge aus dem Graphen. Ist die Kante pEdge nicht im Graphen enthalten, passiert nichts.",en:"Removes given Edge from graph."})),r(T,"graphSetAllVertexMarksComment",()=>d({de:"Der Auftrag setzt die Markierungen aller Knoten des Graphen auf pMark.",en:"Sets marks of all vertices to given value."})),r(T,"graphSetAllEdgeMarksComment",()=>d({de:"Der Auftrag setzt die Markierungen aller Kanten des Graphen auf pMark.",en:"Sets marks of all edges to given value."})),r(T,"graphAllVerticesMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn alle Knoten des Graphen mit true markiert sind, ansonsten false.",en:"Returns true if and only if all vertices of this graph have mark == true."})),r(T,"graphAllEdgesMarkedComment",()=>d({de:"Die Anfrage liefert true, wenn alle Kanten des Graphen mit true markiert sind, ansonsten false.",en:"Returns true if and only if all edges of this graph have mark == true."})),r(T,"graphGetNeighboursComment",()=>d({de:"Die Anfrage liefert alle Nachbarn des Knotens pVertex als neue Liste vom Typ List. Hat der Knoten pVertex keine Nachbarn in diesem Graphen oder ist gar nicht in diesem Graphen enthalten, so wird eine leere Liste zurückgeliefert.",en:"Returns all vertices that are connected to pVertex."})),r(T,"graphGetEdgesForVertexComment",()=>d({de:"Die Anfrage liefert eine neue Liste alle inzidenten Kanten zum Knoten pVertex. Hat der Knoten pVertex keine inzidenten Kanten in diesem Graphen oder ist gar nicht in diesem Graphen enthalten, so wird eine leere Liste zurückgeliefert.",en:"Returns all edges connected to given vertex."})),r(T,"graphGetEdgeComment",()=>d({de:"Die Anfrage liefert die Kante, welche die Knoten pVertex und pAnotherVertex verbindet, als Objekt vom Typ Edge. Ist der Knoten pVertex oder der Knoten pAnotherVertex nicht im Graphen enthalten oder gibt es keine Kante, die beide Knoten verbindet, so wird null zurückgeliefert.",en:"Returns edge between given vertices. Returns null if vertices are not connected."})),r(T,"graphIsEmptyComment",()=>d({de:"Die Anfrage liefert true, wenn der Graph keine Knoten enthält, ansonsten false.",en:"Returns true if and only if this graph contains no vertices."})),r(T,"queryResultClassComment",()=>d({de:"Ein Objekt der Klasse queryResult stellt die Ergebnistabelle einer Datenbankanfrage mit Hilfe der Klasse DatabaseConnector dar. Objekte dieser Klasse werden nur von der Klasse DatabaseConnector erstellt. Die Klasse verfügt über keinen öffentlichen Konstruktor.",en:"An object of class queryResult represents the result talbe of a database query."})),r(T,"queryResultGetDataComment",()=>d({de:"Die Anfrage liefert die Einträge der Ergebnistabelle als zweidimensionales Feld vom Typ String. Der erste Index des Feldes stellt die Zeile und der zweite die Spalte dar (d.h. Object[zeile][spalte]).",en:"Returns the entries of the result table as twodimensional String[][]. First index is line, second index is column."})),r(T,"queryResultGetColumnNamesComment",()=>d({de:"Die Anfrage liefert die Bezeichner der Spalten der Ergebnistabelle als Feld vom Typ String zurück.",en:"Returns column names of query result table."})),r(T,"queryResultGetColumnTypesComment",()=>d({de:"Die Anfrage liefert die Bezeichner der Datentypen der Spalten der Ergebnistabelle als Feld vom Typ String zurück.",en:"Returns column types of query result table."})),r(T,"queryResultGetRowCountComment",()=>d({de:"Die Anfrage liefert die Anzahl der Zeilen der Ergebnistabelle als Integer.",en:"Returns row count of result table."})),r(T,"queryResultGetColumnCountComment",()=>d({de:"Die Anfrage liefert die Anzahl der Spalten der Ergebnistabelle als Integer.",en:"Returns column count of result table."})),r(T,"databaseConnectorClassComment",()=>d({de:"Ein Objekt der Klasse DatabaseConnector ermöglicht die Abfrage und Manipulation einer MySQL-Datenbank. Beim Erzeugen des Objekts wird eine Datenbankverbindung aufgebaut, so dass anschließend SQL-Anweisungen an diese Datenbank gerichtet werden können.",en:"With an object of class DatabaseConnector you can query and manipulate a database."})),r(T,"databaseConnectorConstructorComment",()=>d({de:"Erstellt ein neues DatabaseConnector-Objekt. code ist der Zugriffscode für eine Datenbank der SQL-IDE.",en:"Creates a new DatabaseConnector object. You get the access code from the SQL-IDE."})),r(T,"databaseConnectorExecuteStatementComment",()=>d({de:"Der Auftrag schickt den im Parameter pSQLStatement enthaltenen SQL-Befehl an die Datenbank ab. Handelt es sich bei pSQLStatement um einen SQL-Befehl, der eine Ergebnismenge liefert, so kann dieses Ergebnis anschließend mit der Methode getCurrentqueryResult abgerufen werden.",en:"Sends statement to database and executes it. You may retrieve an error message with getMessage() and result table with getCurrentqueryResult()."})),r(T,"databaseConnectorGetCurrentQueryResultComment",()=>d({de:"Die Anfrage liefert das Ergebnis des letzten mit der Methode executeStatement an die Datenbank geschickten SQL-Befehls als Ob-jekt vom Typ queryResult zurück. Wurde bisher kein SQL-Befehl abgeschickt oder ergab der letzte Aufruf von executeStatement keine Ergebnismenge (z.B. bei einem INSERT-Befehl oder einem Syntaxfehler), so wird null geliefert. ",en:"Returns the result table from last executed statement."})),r(T,"databaseConnectorGetErrorMessageComment",()=>d({de:"Die Anfrage liefert null oder eine Fehlermeldung, die sich jeweils auf die letzte zuvor ausgeführte Datenbankoperation bezieht.",en:"Returns error message or null if last statement executed flawlessly."})),r(T,"databaseConnectorCloseComment",()=>d({de:"Die Datenbankverbindung wird geschlossen.",en:"Closes database connection"})),r(T,"databaseConnectorNotInEmbeddedVersionException",()=>d({de:"Aus der Embedded-IDE heraus kann keine Datenbankverbindung aufgebaut werden.",en:"You can't connect a database from online-ide embedded version."})),r(T,"connectionError",()=>d({de:"Fehler beim Aufbau der Datenbankverbindung",en:"Error connecting database"}));class fv{constructor(t){r(this,"left");r(this,"right");this.content=t,this.left=new Nl,this.right=new Nl}}const jn=class jn extends R{constructor(){super();r(this,"node",null)}_constructor(){return this.node=null,this}_getContent(){return this._isEmpty()?null:this.node.content}_getLeftTree(){return this._isEmpty()?null:this.node.left}_getRightTree(){return this._isEmpty()?null:this.node.right}_isEmpty(){return this.node==null}_mj$insert$void$ContentType(e,i,n){n!=null&&(this._isEmpty()?this.node=new fv(n):n._mj$isLess$boolean$ContentType(e,()=>{e.s.pop()?this.node.left._mj$insert$void$ContentType(e,i,n):n._mj$isGreater$boolean$ContentType(e,()=>{e.s.pop()&&this.node.right._mj$insert$void$ContentType(e,i,n)},this.node.content)},this.node.content)),i&&i()}_mj$remove$void$ContentType(e,i,n){this._isEmpty()||n==null||n._mj$isLess$boolean$ContentType(e,()=>{e.s.pop()?this.node.left._mj$remove$void$ContentType(e,i,n):n._mj$isGreater$boolean$ContentType(e,()=>{if(e.s.pop())this.node.right._mj$remove$void$ContentType(e,i,n);else if(this.node.left._isEmpty())this.node.right._isEmpty()?this.node=null:this.node=this.getNodeOfRightSuccessor();else if(this.node.right._isEmpty())this.node=this.getNodeOfLeftSuccessor();else if(this.getNodeOfRightSuccessor().left._isEmpty())this.node.content=this.getNodeOfRightSuccessor().content,this.node.right=this.getNodeOfRightSuccessor().right;else{const s=this.node.right.ancestorOfSmallRight(),a=s.node.left;this.node.content=a.node.content,s._mj$remove$void$ContentType(e,i,a.node.content)}},this.node.content)},this.node.content)}_mj$search$ContentType$ContentType(e,i,n){if(this._isEmpty()||n==null){e.s.push(null);return}else n._mj$isLess$boolean$ContentType(e,()=>{e.s.pop()?this._getLeftTree()._mj$search$ContentType$ContentType(e,i,n):n._mj$isGreater$boolean$ContentType(e,()=>{e.s.pop()?this._getRightTree()._mj$search$ContentType$ContentType(e,i,n):n._mj$isEqual$boolean$ContentType(e,()=>{e.s.pop()?e.s.push(this.node.content):e.s.push(null),i&&i()},this.node.content)},this.node.content)},this.node.content)}ancestorOfSmallRight(){return this.getNodeOfLeftSuccessor().left._isEmpty()?this:this.node.left.ancestorOfSmallRight()}getNodeOfLeftSuccessor(){return this.node.left.node}getNodeOfRightSuccessor(){return this.node.right.node}};r(jn,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class BinarySearchTree>",comment:T.binarySearchTreeClassComment},{type:"method",signature:"BinarySearchTree()",native:jn.prototype._constructor,comment:T.binarySearchTreeConstructorComment1},{type:"method",signature:"ContentType getContent()",native:jn.prototype._getContent,comment:T.binarySearchTreeGetContentComment},{type:"method",signature:"void insert(ContentType pContent)",java:jn.prototype._mj$insert$void$ContentType,comment:T.binarySearchTreeInsertComment},{type:"method",signature:"void remove(ContentType pContent)",java:jn.prototype._mj$remove$void$ContentType,comment:T.binarySearchTreeRemoveComment},{type:"method",signature:"ContentType search(ContentType pContent)",java:jn.prototype._mj$search$ContentType$ContentType,comment:T.binarySearchTreeSearchComment},{type:"method",signature:"BinarySearchTree getLeftTree()",native:jn.prototype._getLeftTree,comment:T.binarySearchTreeGetLeftTreeComment},{type:"method",signature:"BinarySearchTree getRightTree()",native:jn.prototype._getRightTree,comment:T.binarySearchTreeGetRightTreeComment},{type:"method",signature:"boolean isEmpty()",native:jn.prototype._isEmpty,comment:T.binarySearchTreeIsEmptyComment}]),r(jn,"type");let Nl=jn;class Op{constructor(t){r(this,"left");r(this,"right");this.content=t,this.left=new ql,this.right=new ql}}const Xt=class Xt extends R{constructor(){super();r(this,"node",null)}_constructor(e,i,n){return e!=null?(this.node=new Op(e),i!=null?this.node.left=i:this.node.left=new Xt,n!=null?this.node.right=n:this.node.right=new Xt):this.node=null,this}_setContent(e){e!=null&&(this._isEmpty()&&(this.node=new Op(e),this.node.left=new Xt,this.node.right=new Xt),this.node.content=e)}_getContent(){return this._isEmpty()?null:this.node.content}_setLeftTree(e){!this._isEmpty()&&e!=null&&(this.node.left=e)}_setRightTree(e){!this._isEmpty()&&e!=null&&(this.node.right=e)}_getLeftTree(){return this._isEmpty()?null:this.node.left}_getRightTree(){return this._isEmpty()?null:this.node.right}_isEmpty(){return this.node==null}};r(Xt,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class BinaryTree",comment:T.binaryTreeClassComment},{type:"method",signature:"BinaryTree()",native:Xt.prototype._constructor,comment:T.binaryTreeConstructorComment1},{type:"method",signature:"BinaryTree(ContentType pContent)",native:Xt.prototype._constructor,comment:T.binaryTreeConstructorComment2},{type:"method",signature:"BinaryTree(ContentType pContent, BinaryTree pLeftTree, BinaryTree pRightTree)",native:Xt.prototype._constructor,comment:T.binaryTreeConstructorComment3},{type:"method",signature:"void setContent(ContentType pContent)",native:Xt.prototype._setContent,comment:T.binaryTreeSetContentComment},{type:"method",signature:"ContentType getContent()",native:Xt.prototype._getContent,comment:T.binaryTreeGetContentComment},{type:"method",signature:"void setLeftTree(BinaryTree pTree)",native:Xt.prototype._setLeftTree,comment:T.binaryTreeSetLeftTreeComment},{type:"method",signature:"void setRightTree(BinaryTree pTree)",native:Xt.prototype._setRightTree,comment:T.binaryTreeSetRightTreeComment},{type:"method",signature:"BinaryTree getLeftTree()",native:Xt.prototype._getLeftTree,comment:T.binaryTreeGetLeftTreeComment},{type:"method",signature:"BinaryTree getRightTree()",native:Xt.prototype._getRightTree,comment:T.binaryTreeGetRightTreeComment},{type:"method",signature:"boolean isEmpty()",native:Xt.prototype._isEmpty,comment:T.binaryTreeIsEmptyComment}]),r(Xt,"type");let ql=Xt;const ca=class ca extends $i{_mj$isGreater$boolean$ContentType(t,e,i){}_mj$isLess$boolean$ContentType(t,e,i){}_mj$isEqual$boolean$ContentType(t,e,i){}};r(ca,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"interface ComparableContent",comment:T.comparableContentInterfaceComment},{type:"method",signature:"boolean isGreater(ContentType pContent)",java:ca.prototype._mj$isGreater$boolean$ContentType,comment:T.comparableContentIsGreaterComment},{type:"method",signature:"boolean isLess(ContentType pContent)",java:ca.prototype._mj$isLess$boolean$ContentType,comment:T.comparableContentIsLessComment},{type:"method",signature:"boolean isEqual(ContentType pContent)",java:ca.prototype._mj$isEqual$boolean$ContentType,comment:T.comparableContentIsEqualComment}]),r(ca,"type");let Om=ca;const Qr=class Qr extends R{constructor(){super();r(this,"data",[]);r(this,"columnNames",[]);r(this,"columnTypes",[])}_constructor1(e,i,n){this.data=e,this.columnNames=i,this.columnTypes=n}_getData(){let e=[];for(let i of this.data){let n=[];e.push(n);for(let s of i)s==null&&n.push(null),n.push(s)}return e}_getColumnNames(){return this.columnNames.map(e=>e??null)}_getColumnTypes(){return this.columnTypes.map(e=>e??null)}_getColumnCount(){return this.data!=null&&this.data.length>0&&this.data[0]!=null?this.data[0].length:0}};r(Qr,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class QueryResult",comment:T.queryResultClassComment},{type:"method",signature:"private QueryResult(string[][] pData, string[] pColumnNames, string[] pColumnTypes)",native:Qr.prototype._constructor1},{type:"method",signature:"string[][] getData()",native:Qr.prototype._getData,comment:T.queryResultGetDataComment},{type:"method",signature:"string[] getColumnNames()",native:Qr.prototype._getColumnNames,comment:T.queryResultGetColumnNamesComment},{type:"method",signature:"string[] getColumnTypes()",native:Qr.prototype._getColumnTypes,comment:T.queryResultGetColumnTypesComment},{type:"method",signature:"int getColumnCount()",native:Qr.prototype._getColumnCount,comment:T.queryResultGetColumnCountComment}]),r(Qr,"type");let Rl=Qr;const Yr=class Yr extends R{constructor(){super();r(this,"ch");r(this,"message",null);r(this,"currentQueryResult")}_cj$_constructor_$DatabaseConnector$string(e,i,n){let s=e.scheduler.interpreter,a=s.getMain();if(!a||a.isEmbedded()){this.message=T.databaseConnectorNotInEmbeddedVersionException(),e.s.push(this),i&&i();return}this.ch=new Wl(e.scheduler.interpreter),s.showProgramPointer(void 0,"DatabaseManager"),a.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,this.ch.connect(n,l=>{a.getBottomDiv().showHideDBBusyIcon(!1),l&&(this.message=T.connectionError()+": "+l),e.s.push(this),e.state=F.running,i&&i()})}_mj$executeStatement$void$string(e,i,n){if(!this.ch){i&&i();return}e.scheduler.interpreter.showProgramPointer(void 0,"DatabaseManager"),this.ch.main.getBottomDiv().showHideDBBusyIcon(!0),e.state=F.waiting,n.trim().toLowerCase().startsWith("select")?this.ch.executeQuery(n,(s,a)=>{if(this.ch.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=F.running,s){this.message=s,i&&i();return}this.currentQueryResult=new Rl;const l=a.values.map(u=>u.map(m=>""+m)),h=a.columns.map(u=>"String");for(let u of a.values)for(let m=0;m{if(this.ch.main.getBottomDiv().showHideDBBusyIcon(!1),e.state=F.running,s){this.message=s,i&&i();return}this.currentQueryResult=new Rl,this.currentQueryResult._constructor1([],[],[]),i&&i()})}_getCurrentQueryResult(){return this.currentQueryResult?this.currentQueryResult:null}_getErrorMessage(){return this.message}_close(){this.ch&&this.ch._close()}};r(Yr,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class DatabaseConnector",comment:T.databaseConnectorClassComment},{type:"method",signature:"public DatabaseConnector(string code)",java:Yr.prototype._cj$_constructor_$DatabaseConnector$string,comment:T.databaseConnectorConstructorComment},{type:"method",signature:"void executeStatement(string statement)",java:Yr.prototype._mj$executeStatement$void$string,comment:T.databaseConnectorExecuteStatementComment},{type:"method",signature:"nrw.QueryResult getCurrentQueryResult()",native:Yr.prototype._getCurrentQueryResult,comment:T.databaseConnectorGetCurrentQueryResultComment},{type:"method",signature:"string getErrorMessage()",native:Yr.prototype._getErrorMessage,comment:T.databaseConnectorGetErrorMessageComment},{type:"method",signature:"void close()",native:Yr.prototype._close,comment:T.databaseConnectorCloseComment}]),r(Yr,"type");let Lm=Yr;const yr=class yr extends R{constructor(){super();r(this,"vertices");r(this,"weight");r(this,"mark")}_constructor1(e,i,n){this.vertices=[e,i],this.weight=n,this.mark=!1}_isMarked(){return this.mark}_setMark(e){this.mark=e}_getVertices(){return this.vertices.slice()}_setWeight(e){this.weight=e}_getWeight(){return this.weight}};r(yr,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class Edge",comment:T.edgeClassComment},{type:"method",signature:"Edge()",native:yr.prototype._constructor1,comment:T.edgeConstructorComment},{type:"method",signature:"boolean isMarked()",native:yr.prototype._isMarked,comment:T.edgeIsMarkedComment},{type:"method",signature:"void setMark(boolean pMark)",native:yr.prototype._setMark,comment:T.edgeSetMarkComment},{type:"method",signature:"nrw.Vertex[] getVertices()",native:yr.prototype._getVertices,comment:T.edgeGetVerticesComment},{type:"method",signature:"void setWeight(double pWeight)",native:yr.prototype._setWeight,comment:T.edgeSetWeightComment},{type:"method",signature:"double getWeight(double pWeight)",native:yr.prototype._getWeight,comment:T.edgeGetWeightComment}]),r(yr,"type");let Bm=yr;class cc{constructor(t){r(this,"next");this.contentObject=t}}const oi=class oi extends _e{constructor(){super();r(this,"first",null);r(this,"last",null);r(this,"current",null)}_constructor(){return this}_isEmpty(){return this.first==null}_hasAccess(){return this.current!=null}_next(){this._hasAccess()&&(this.current=this.current.next)}_toFirst(){this._isEmpty()||(this.current=this.first)}_toLast(){this._isEmpty()||(this.current=this.last)}_getContent(){return this._hasAccess()?this.current.contentObject:null}_setContent(e){e!=null&&this._hasAccess()&&(this.current.contentObject=e)}_insert(e){if(e!=null){if(this._hasAccess()){const i=new cc(e);if(this.current!=this.first){const n=this._getPrevious(this.current);i.next=n.next,n.next=i}else i.next=this.first,this.first=i}else if(this._isEmpty()){const i=new cc(e);this.first=i,this.last=i}}}_append(e){if(e!=null)if(this._isEmpty())this._insert(e);else{const i=new cc(e);this.last.next=i,this.last=i}}_concat(e){e!=this&&e!=null&&!e._isEmpty()&&(this._isEmpty()?(this.first=e.first,this.last=e.last):(this.last.next=e.first,this.last=e.last),e.first=null,e.last=null,e.current=null)}_remove(){if(this._hasAccess()&&!this._isEmpty()){if(this.current==this.first)this.first=this.first.next;else{const i=this._getPrevious(this.current);this.current==this.last&&(this.last=i),i.next=this.current.next}const e=this.current.next;this.current.contentObject=null,this.current.next=null,this.current=e,this._isEmpty()&&(this.last=null)}}_getPrevious(e){if(e!=null&&e!=this.first&&!this._isEmpty()){let i=this.first;for(;i!=null&&i.next!=e;)i=i.next;return i}else return null}_mj$toString$String$(e,i){if(this.first==null){e.s.push("[]"),i&&i();return}let n=this.first.contentObject;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.first==null)return[];const e=[];let i=this.first;for(;i!=null;)e.push(i.contentObject),i=i.next;return e}};r(oi,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class List",comment:T.listClassComment},{type:"method",signature:"List()",native:oi.prototype._constructor,comment:T.listClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:oi.prototype._isEmpty,comment:T.listClassIsEmptyComment},{type:"method",signature:"boolean hasAccess()",native:oi.prototype._hasAccess,comment:T.listClassHasAccessComment},{type:"method",signature:"void next()",native:oi.prototype._next,comment:T.listClassNextComment},{type:"method",signature:"void toFirst()",native:oi.prototype._toFirst,comment:T.listClassToFirstComment},{type:"method",signature:"void toLast()",native:oi.prototype._toLast,comment:T.listClassToLastComment},{type:"method",signature:"ContentType getContent()",native:oi.prototype._getContent,comment:T.listClassGetContentComment},{type:"method",signature:"void setContent(ContentType pContent)",native:oi.prototype._setContent,comment:T.listClassSetContentComment},{type:"method",signature:"void insert(ContentType pContent)",native:oi.prototype._insert,comment:T.listClassInsertComment},{type:"method",signature:"void append(ContentType pContent)",native:oi.prototype._append,comment:T.listClassAppendComment},{type:"method",signature:"void concat(List pList)",native:oi.prototype._concat,comment:T.listClassConcatComment},{type:"method",signature:"void remove()",native:oi.prototype._remove,comment:T.listClassRemoveComment},{type:"method",signature:"String toString()",java:oi.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(oi,"type");let ya=oi;const Lt=class Lt extends R{constructor(){super();r(this,"vertices");r(this,"edges")}_constructor1(){this.vertices=[],this.edges=[]}_getVertices(){let e=new ya;for(let i of this.vertices)e._append(i);return e}_getEdges(){let e=new ya;for(let i of this.edges)e._append(i);return e}_getVertex(e){let i=this.vertices.find(n=>n.id==e);return i||null}_addVertex(e){e==null||e.id==null||this.vertices.find(n=>n.id==e.id)||this.vertices.push(e)}_addEdge(e){e!=null&&(e.vertices[0]==null||e.vertices[1]==null||this._getVertex(e.vertices[0].id)==e.vertices[0]&&this._getVertex(e.vertices[1].id)==e.vertices[1]&&this._getEdge(e.vertices[0],e.vertices[1])==null&&e.vertices[0]!=e.vertices[1]&&this.edges.push(e))}_removeVertex(e){this.edges=this.edges.filter(n=>n.vertices[0]!=e&&n.vertices[1]!=e);let i=this.vertices.indexOf(e);i>=0&&this.vertices.splice(i,1)}_removeEdge(e){this.edges=this.edges.filter(i=>i!=e)}_setAllVertexMarks(e){this.vertices.forEach(i=>i.mark=e)}_setAllEdgeMarks(e){this.edges.forEach(i=>i.mark=e)}_allVerticesMarked(){return typeof this.vertices.find(e=>!e.mark)>"u"}_allEdgesMarked(){return typeof this.edges.find(e=>!e.mark)>"u"}_getNeighbours(e){let i=new ya;for(let n of this.edges)n.vertices[0]==e?i._append(n.vertices[1]):n.vertices[1]==e&&i._append(n.vertices[0]);return i}_getEdgesForVertex(e){let i=new ya;for(let n of this.edges)(n.vertices[0]==e||n.vertices[1]==e)&&i._append(n);return i}_getEdge(e,i){for(let n of this.edges)if(n.vertices[0]==e&&n.vertices[1]==i||n.vertices[1]==e&&n.vertices[0]==i)return n;return null}_isEmpty(){return this.vertices.length==0}};r(Lt,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class Graph",comment:T.graphClassComment},{type:"method",signature:"Graph()",native:Lt.prototype._constructor1,comment:T.graphConstructorComment},{type:"method",signature:"List getVertices()",native:Lt.prototype._getVertices,comment:T.graphGetVerticesComment},{type:"method",signature:"List getEdges()",native:Lt.prototype._getEdges,comment:T.graphGetEdgesComment},{type:"method",signature:"nrw.Vertex getVertex(string pID)",native:Lt.prototype._getVertex,comment:T.graphGetVertexComment},{type:"method",signature:"void addVertex(nrw.Vertex pVertex)",native:Lt.prototype._addVertex,comment:T.graphAddVertexComment},{type:"method",signature:"void addEdge(nrw.Edge pEdge)",native:Lt.prototype._addEdge,comment:T.graphAddEdgeComment},{type:"method",signature:"void removeVertex(nrw.Vertex pVertex)",native:Lt.prototype._removeVertex,comment:T.graphRemoveVertexComment},{type:"method",signature:"void removeEdge(nrw.Edge pEdge)",native:Lt.prototype._removeEdge,comment:T.graphRemoveEdgeComment},{type:"method",signature:"void setAllVertexMarks(boolean pMark)",native:Lt.prototype._setAllVertexMarks,comment:T.graphSetAllVertexMarksComment},{type:"method",signature:"void setAllEdgeMarks(boolean pMark)",native:Lt.prototype._setAllEdgeMarks,comment:T.graphSetAllEdgeMarksComment},{type:"method",signature:"boolean allVerticesMarked()",native:Lt.prototype._allVerticesMarked,comment:T.graphAllVerticesMarkedComment},{type:"method",signature:"boolean allEdgesMarked()",native:Lt.prototype._allEdgesMarked,comment:T.graphAllEdgesMarkedComment},{type:"method",signature:"List getNeighbours(nrw.Vertex pVertex)",native:Lt.prototype._getNeighbours,comment:T.graphGetNeighboursComment},{type:"method",signature:"List getEdges(nrw.Vertex pVertex)",native:Lt.prototype._getEdgesForVertex,comment:T.graphGetEdgesForVertexComment},{type:"method",signature:"nrw.Edge getEdge(nrw.Vertex pVertex, nrw.Vertex pAnotherVertex)",native:Lt.prototype._getEdge,comment:T.graphGetEdgeComment},{type:"method",signature:"boolean isEmpty()",native:Lt.prototype._isEmpty,comment:T.graphIsEmptyComment}]),r(Lt,"type");let Fm=Lt;class bv{constructor(t){r(this,"next",null);this.contentObject=t}}const vr=class vr extends _e{constructor(){super();r(this,"head",null);r(this,"tail",null)}_constructor(){return this}_isEmpty(){return this.head==null}_enqueue(e){if(e!=null){const i=new bv(e);this._isEmpty()?(this.head=i,this.tail=i):(this.tail.next=i,this.tail=i)}}_dequeue(){this._isEmpty()||(this.head=this.head.next,this._isEmpty()&&(this.head=null,this.tail=null))}_front(){return this._isEmpty()?null:this.head.contentObject}_mj$toString$String$(e,i){if(this.head==null){e.s.push("[]"),i&&i();return}let n=this.head.contentObject;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.head==null)return[];const e=[];let i=this.head;for(;i!=null;)e.push(i.contentObject),i=i.next;return e}};r(vr,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class Queue",comment:T.queueClassComment},{type:"method",signature:"Queue()",native:vr.prototype._constructor,comment:T.queueClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:vr.prototype._isEmpty,comment:T.queueClassIsEmptyComment},{type:"method",signature:"void enqueue(ContentType pContent)",native:vr.prototype._enqueue,comment:T.queueClassEnqueueComment},{type:"method",signature:"void dequeue()",native:vr.prototype._dequeue,comment:T.queueClassDequeueComment},{type:"method",signature:"ContentType front()",native:vr.prototype._front,comment:T.queueClassFrontComment},{type:"method",signature:"String toString()",java:vr.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(vr,"type");let Vm=vr;class yv{constructor(t){r(this,"next",null);this.content=t}}const Ar=class Ar extends _e{constructor(){super();r(this,"head",null)}_constructor(){return this}_isEmpty(){return this.head==null}_push(e){if(e!=null){const i=new yv(e);i.next=this.head,this.head=i}}_pop(){this._isEmpty()||(this.head=this.head.next)}_top(){return this._isEmpty()?null:this.head.content}_mj$toString$String$(e,i){if(this.head==null){e.s.push("[]"),i&&i();return}let n=this.head.content;if(typeof n=="object"||Array.isArray(n)||n==null){e._arrayOfObjectsToString(this.getElements(),()=>{e.s.push(new Y(e.s.pop())),i&&i()});return}else{e.s.push(new Y(e._primitiveElementOrArrayToString(this.getElements()))),i&&i();return}}getElements(){if(this.head==null)return[];const e=[];let i=this.head;for(;i!=null;)e.push(i.content),i=i.next;return e}};r(Ar,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class Stack",comment:T.stackClassComment},{type:"method",signature:"Stack()",native:Ar.prototype._constructor,comment:T.stackClassConstructorComment},{type:"method",signature:"boolean isEmpty()",native:Ar.prototype._isEmpty,comment:T.stackClassIsEmptyComment},{type:"method",signature:"void push(ContentType pContent)",native:Ar.prototype._push,comment:T.stackClassPushComment},{type:"method",signature:"void pop()",native:Ar.prototype._pop,comment:T.stackClassPopComment},{type:"method",signature:"ContentType top()",native:Ar.prototype._top,comment:T.stackClassTopComment},{type:"method",signature:"String toString()",java:Ar.prototype._mj$toString$String$,comment:o.objectToStringComment}]),r(Ar,"type");let _m=Ar;const Es=class Es extends R{constructor(){super();r(this,"id");r(this,"mark")}_constructor1(e){return this.id=e==null?null:e.value,this.mark=!1,this}_getID(){return this.id==null?null:new Y(this.id)}_isMarked(){return this.mark}_setMark(e){this.mark=e}};r(Es,"__javaDeclarations",[{type:"declaration",package:"nrw",signature:"class Vertex",comment:T.vertexClassComment},{type:"method",signature:"Vertex(String pID)",native:Es.prototype._constructor1,comment:T.vertexConstructorComment},{type:"method",signature:"String getID()",native:Es.prototype._getID,comment:T.vertexGetIDComment},{type:"method",signature:"boolean isMarked()",native:Es.prototype._isMarked,comment:T.vertexIsMarkedComment},{type:"method",signature:"void setMark(boolean pMark)",native:Es.prototype._setMark,comment:T.vertexSetMarkComment}]),r(Es,"type");let zm=Es;class vv extends qo{constructor(){super(),this.classesInterfacesEnums.push(ya,Vm,_m,Om,ql,Nl,zm,Bm,Fm,Rl,Lm)}isReplModule(){return!1}getCodeFragments(){return[]}prepareSystemModule(t){}getStandardImports(){return[["nrw","*"]]}}const Vh=class Vh{constructor(){r(this,"libraryIds",[])}addLibrariesToCompiler(t){t.setAdditionalModules(...this.getAdditionalModules())}getAdditionalModules(){let t=[new mv];for(let e of this.libraryIds)switch(e){case"gng":t.push(new pv);break;case"nrw":t.push(new vv);break;case"niedersachsen":t.push(new gv);break}return t}addLibraries(...t){for(let e of t)this.libraryIds.indexOf(e)<0&&this.libraryIds.push(e)}getLibrariesData(){return Vh.libraries}};r(Vh,"libraries",[{identifier:"Graphics and Games Library",description:"Graphische Klassenbibliothek für die bayerischen Informatikbücher des Cornelsen-Verlages",id:"gng"},{identifier:"Abiturklassen Nordrhein-Westfalen",description:"Klassenbibliothek zur Verwendung im Zentralabitur Nordrhein-Westfalen",id:"nrw"},{identifier:"Abiturklassen Niedersachsen",description:"Klassenbibliothek zur Verwendung im Abitur Niedersachsen",id:"niedersachsen"}]);let vh=Vh;const Av=800;var ld,Os,Da,On,jo,Mo,ja;class sf{constructor(t,e){r(this,"moduleManager");r(this,"libraryModuleManager");J(this,ld,[]);J(this,Os);J(this,Da,[]);r(this,"eventManager",new tp);J(this,On,new dv);J(this,jo);r(this,"lastTimeCompilationStarted",0);J(this,Mo,!1);J(this,ja,0);this.main=t,this.errorMarker=e,this.libraryModuleManager=new Pp,this.moduleManager=new ef}setAdditionalModules(...t){this.libraryModuleManager=new Pp(...t)}getType(t){return this.libraryModuleManager.typestore.getType(t)}setFiles(t){ee(this,Da,t),this.moduleManager.setupModulesBeforeCompiliation(M(this,Da))}async compileIfDirty(t=!1){var h,u,m,g;if(this.main){if(this.main.getInterpreter().isRunningOrPaused()&&this.main.getSettings().getValue("editor.stopRunningProgramOnWhenEditingSourcecode")!="no")return;const f=(h=this.main)==null?void 0:h.getCurrentWorkspace();if(!f)return;this.moduleManager.workspace=f,ee(this,Da,f.getFiles().filter(b=>Gi.filenameToFileType(b.name,this.main.getCurrentProgrammingLanguage()).language=="myJava"&&!b.isFolder))}this.moduleManager.setupModulesBeforeCompiliation(M(this,Da));let e=this.moduleManager.getNewOrDirtyModules();if(e.length==0)return M(this,Os);if(this.moduleManager.iterativelySetDirtyFlags(),e=this.moduleManager.getNewOrDirtyModules(),M(this,On).setNewOrDirtyModules(e.map(f=>f.file.name).join(", ")),e.length==0)return M(this,Os);ee(this,ld,[]),this.moduleManager.emptyTypeStore(),Ge.resetCount(),this.moduleManager.getUnChangedModules().forEach(f=>f.registerTypesAtTypestore(this.moduleManager.typestore));for(const f of e){f.resetBeforeCompilation();const b=new _l().lex(f.file.getText());f.storeLexerOutput(b),await M(this,On).interruptIfNeeded(),new Am(f).parse(),await M(this,On).interruptIfNeeded()}const n=new zg(this.moduleManager,this.libraryModuleManager),s=new ap(this.libraryModuleManager.typestore,this.moduleManager.typestore);if(n.resolve()){for(const f of e)await new ov(f,this.libraryModuleManager.typestore,this.moduleManager.typestore,s,M(this,On),(u=this.main)==null?void 0:u.getSettings()).start(),await M(this,On).interruptIfNeeded();if(t)return;for(const f of e)f.setDirty(!1)}await M(this,On).interruptIfNeeded();const a={};this.libraryModuleManager.typestore.populateClassObjectRegistry(a),this.moduleManager.typestore.populateClassObjectRegistry(a),this.moduleManager.setDependsOnModuleWithErrorsFlag();const l=new El(a,this.moduleManager,this.libraryModuleManager,M(this,ld),s);return ee(this,Os,l),this.eventManager.fire("compilationFinishedWithNewExecutable",M(this,Os)),(g=(m=this.main)==null?void 0:m.getDisassembler())==null||g.disassemble(),setTimeout(()=>{var f,b;for(const A of M(this,Os).getModuleManager().getModules())(f=this.errorMarker)==null||f.markErrorsOfModule(A),((b=this.main)==null?void 0:b.getSettings().getValue("editor.quickFix.getterAndSetter"))=="offer"&&lp.start(A),hv.start(A,this.main)},10),l}triggerCompile(){if(M(this,Mo)&&M(this,ja)<3){Ho(this,ja)._++;return}ee(this,ja,0),M(this,jo)&&clearTimeout(M(this,jo));let t=Av-(performance.now()-this.lastTimeCompilationStarted);t<0&&(t=0),ee(this,jo,window.setTimeout(async()=>{ee(this,Mo,!0);try{this.lastTimeCompilationStarted=performance.now(),M(this,On).initBeforeCompiling(),await this.compileIfDirty(),M(this,On).afterCompiling(),this.eventManager.fire("compilationFinished")}catch(e){console.log(e),M(this,On).afterCompiling(e.toString())}ee(this,Mo,!1),M(this,ja)>0&&this.triggerCompile()},t))}findModuleByFile(t){return this.moduleManager.findModuleByFile(t)}getAllModules(){return this.moduleManager.getModules()}forceRecompilation(){this.moduleManager.getModules().forEach(t=>t.setDirty(!0)),this.triggerCompile()}setFileDirty(t){const e=this.findModuleByFile(t);e==null||e.setDirty(!0)}getSortedAndFilteredErrors(t){const e=this.findModuleByFile(t);return e?e.getSortedAndFilteredErrors():[]}async waitTillCompilationFinished(){return new Promise(t=>{this.eventManager.on("compilationFinished",t)})}setLibraries(t){let e=new vh;e.addLibraries(...t),e.addLibrariesToCompiler(this)}}ld=new WeakMap,Os=new WeakMap,Da=new WeakMap,On=new WeakMap,jo=new WeakMap,Mo=new WeakMap,ja=new WeakMap;function wv(c,t){return t==null?p.keywordPublic:(c instanceof ei&&(c=c.nonPrimitiveType),t instanceof ei&&(t=t.nonPrimitiveType),c instanceof di&&(c=c.isGenericVariantOf),t instanceof di&&(t=t.isGenericVariantOf),c==t?p.keywordPrivate:t instanceof Le&&t.hasAncestorOrIs(c)?p.keywordProtected:p.keywordPublic)}class le{}r(le,"accessToFieldOrMethodOfThisClass",()=>d({de:"Zugriff auf Attribut oder Methode dieser Klasse",en:"Acces to a field or a method of this class"})),r(le,"useSuperToCallBaseClassMethod",()=>d({de:"Benutze das Schlüsselwort 'super' um eine Methode der Oberklasse aufzurufen.",en:"Use keyword 'super' to call a base class method."})),r(le,"definitionOfClass",t=>d({de:`Definition der Klasse ${t}`,en:`definition of class ${t}`})),r(le,"numberOfElementsInThisArray",()=>d({de:"Anzahl der Elemente in diesem Array",en:"number of elements in this array"})),r(le,"countingForLoop",()=>d({de:"Zählende for-loop",en:"counting for-loop"})),r(le,"switchStatement",()=>d({de:"switch-Anweisung",en:"switch statement"})),r(le,"ifClause",()=>d({de:"Bedingung (if-clause)",en:"if clause"})),r(le,"doubleSidedIfClause",()=>d({de:"Zweiseitige Bedingung (if-else-clause)",en:"if-else clause"})),r(le,"printStatement",()=>d({de:`Ausgabe (ggf. mit Farbe als zweitem Parameter)`,en:"print statement (with color as optional second parameter)"})),r(le,"printlnStatement",()=>d({de:`Ausgabe (ggf. mit Farbe als zweitem Parameter) gefolgt von einem Zeilenumbruch`,en:"print statement (with color as optional second parameter) followed by line break"})),r(le,"assertEquals",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn expected != actual.",en:"Used in automated tests. Prints error message if expected != actual."})),r(le,"assertTrue",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn condition != true.",en:"Used in automated tests. Prints error message if condition != true."})),r(le,"assertFalse",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn condition != false.",en:"Used in automated tests. Prints error message if condition != false."})),r(le,"assertCodeReached",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus, wenn die Codeausführung nach Programmende nie an diesem Punkt angelangt war.",en:"Used in automated tests. Prints error message after program ended if program hadn't reach this point."})),r(le,"fail",()=>d({de:"Gibt in automatisierten Tests den Fehler (message) aus. Stellen Sie diese Methode an eine Stelle des Programms, die nie erreicht werden darf.",en:"Used in automated tests. Prints error message. Use this method in places that mustn't be reached."})),r(le,"identifier",()=>d({de:"Bezeichner",en:"identifier"})),r(le,"classDefinition",()=>d({de:"Definition einer Klasse",en:"class definition"})),r(le,"parameter",()=>d({de:"Parameter",en:"parameter"})),r(le,"methodDefinition",()=>d({de:"Definition einer Methode",en:"method definition"})),r(le,"implementOverrideMethod",(t,e)=>d({de:(t?"Implementiere ":"Überschreibe ")+"die Methode",en:(t?"implement ":"override ")+"method"}));class kv extends Ti{constructor(e){super(e);r(this,"isConsole",!1);r(this,"triggerCharacters"," .abcdefghijklmnopqrstuvwxyzäöüß_ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ@".split(""));r(this,"first",!0);this.language=e,P.registerCompletionItemProvider(e.monacoLanguageSelector,this)}async provideCompletionItems(e,i,n,s){var G,K,Z,vt,Gt;let a=this.findMainForModel(e);if(!a)return;let l,h=(G=a.getBottomDiv())==null?void 0:G.console;if(((K=h==null?void 0:h.editor)==null?void 0:K.getModel())==e?(h.compile(),l=a.getRepl().getCurrentModule()):(l=(Z=a.getCurrentWorkspace())==null?void 0:Z.getModuleForMonacoModel(e),l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(await a.getCompiler().waitTillCompilationFinished(),l=(vt=a.getCurrentWorkspace())==null?void 0:vt.getModuleForMonacoModel(e))),l==null||!(l instanceof $r))return null;let u=l.findSymbolTableAtPosition(i),m=u==null?void 0:u.classContext,g=U.fromPositions(i);if(this.isStringLiteral(l,i))return null;let f=e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:i.lineNumber,endColumn:i.column}),b=e.getValueInRange({startLineNumber:i.lineNumber,startColumn:i.column,endLineNumber:i.lineNumber+5,endColumn:1}),A=f.match(/.*(new )([\wöäüÖÄÜß]*)$/);if(A!=null){let rr=g;return((Gt=A[2])==null?void 0:Gt.length)>0&&(rr={startLineNumber:i.lineNumber,startColumn:i.column-A[2].length,endLineNumber:i.lineNumber,endColumn:i.column}),this.getCompletionItemsAfterNew(a,m instanceof we?m:void 0,rr,l)}if(n.triggerCharacter==" "){if(f.match(/.*(class )[\wöäüÖÄÜß<> ,]*[\wöäüÖÄÜß<> ] $/)!=null){let Wa=f.lastIndexOf("class"),Qs=0,pp=0;for(let Qh=Wa;Qh":pp++;break}return this.getCompletionItemsAfterClass(l,Qs>pp,b,g)}return null}let C=b.match(/^([\wöäüÖÄÜß]*\(?)/),w="";C!=null&&C.length>0&&(w=C[0]);let x=w.endsWith("("),q=f.match(/.*(\.)([\wöäüÖÄÜß]*)$/);if(q!=null)return u=l.findSymbolTableAtPosition(i),m=u==null?void 0:u.classContext,this.getCompletionItemsAfterDot(q,i,l,a,w,m,x);let D=f.match(/.*[^\wöäüÖÄÜß]([\wöäüÖÄÜß]*)$/);if(D==null&&(D=f.match(/^([\wöäüÖÄÜß]*)$/)),D!=null){let rr=e.getLineContent(i.lineNumber);return this.getCompletionItemsInsideIdentifier(a,D,rr,i,l,w,m,x,u)}}isStringLiteral(e,i){let n=e.tokens;if(n==null||n.length==0)return!1;let s=0,a=n.length-1,l=0,h=1e3;for(;;){let u=l;if(l=Math.round((a+s)/2),u==l||(h--,h==0))return!1;let m=n[l],g=m.range;if(i.lineNumber>g.endLineNumber||i.lineNumber==g.endLineNumber&&i.column>g.endColumn){s=l;continue}if(i.lineNumber(q.sortText="aaa"+q.label,q))));let A=e.getCompiler();b=b.concat(A.libraryModuleManager.getTypeCompletionItems(a,f)),b=b.concat(A.moduleManager.getTypeCompletionItems(a,f,h));let C=m==null?void 0:m.methodContext;if(C!=null&&(C.isMainMethod()&&(b=b.filter(q=>q.filterText!="args")),b=b.concat(this.getAssertMethods(C,f)),h!=null)){let q=h.getCompletionItems(p.keywordPrivate,u,l,f,m.methodContext).map(D=>(D.sortText="aa"+D.label,D)).filter(D=>b.findIndex(G=>G.insertText==D.insertText)<0);b=b.concat(q),b.push({label:"this",filterText:"this",insertText:"this.",detail:le.accessToFieldOrMethodOfThisClass(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:f,command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]}}),m.methodContext.isStatic||b.push({label:"super",filterText:"super",insertText:"super.",detail:le.useSuperToCallBaseClassMethod(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:f,command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]}})}return b=b.concat(this.getKeywordCompletion(e,m,f,a)),b=this.deleteDoublesWithIdenticalInsertText(b),this.upvoteItemsWithSameFirstCharacterCasing(b,g),(m==null?void 0:m.methodContext)!=null&&(b=b.filter(q=>q.label!=="void")),b=b.filter(q=>q.label!="string"),Promise.resolve({suggestions:b})}getAnnotationCompletionItems(e,i,n){let s=[],a=n.startLineNumber;return e.ast.innerTypes.find(h=>h.range.startLineNumber==a+1&&h.kind==p.keywordClass)?Ad.filter(h=>h.beforeClass).forEach(h=>{let u=h.identifier=="Instance";s.push({label:"@"+h.identifier,filterText:h.identifier,insertText:h.identifier+(u?'("$0")':"")+` `,detail:h.description,insertTextRules:u?P.CompletionItemInsertTextRule.InsertAsSnippet:void 0,kind:P.CompletionItemKind.Issue,range:n,sortText:"aaa"+h.identifier})}):i.methodContext==null&&i.classContext!=null&&i.classContext instanceof mt?(i.classContext.methods.find(m=>m.identifierRange.startLineNumber==a+1)&&Ad.filter(m=>m.beforeMethod).forEach(m=>{s.push({label:"@"+m.identifier,filterText:m.identifier,insertText:m.identifier+` `,detail:m.description,kind:P.CompletionItemKind.Issue,range:n,sortText:"aaa"+m.identifier})}),i.classContext.fields.find(m=>m.identifierRange.startLineNumber==a+1)&&Ad.filter(m=>m.beforeField).forEach(m=>{let g=m.identifier=="Inject";s.push({label:"@"+m.identifier,filterText:m.identifier,insertText:m.identifier+(g?'("$0")':"")+` `,detail:m.description,kind:P.CompletionItemKind.Issue,insertTextRules:g?P.CompletionItemInsertTextRule.InsertAsSnippet:void 0,range:n,sortText:"aaa"+m.identifier})})):i.methodContext!=null&&i.methodContext.isMainMethod()&&i.classContext!=null&&i.classContext.isMainClass&&i.classContext.nonPrimitiveType.methods.find(m=>m.identifierRange.startLineNumber==a+1)&&Ad.filter(m=>m.beforeMethodOfMainClass).forEach(m=>{s.push({label:"@"+m.identifier,filterText:m.identifier,insertText:m.identifier+` `,detail:m.description,kind:P.CompletionItemKind.Issue,range:n,sortText:"aaa"+m.identifier})}),s}getGetter(e,i,n){return i={startLineNumber:i.startLineNumber,startColumn:0,endLineNumber:i.endLineNumber,endColumn:i.endColumn},e.fields.filter(a=>typeof e.getOwnMethods().find(l=>l.identifier==n+a.identifier)>"u"&&a.identifier!="class"&&a.type).map(a=>{let l=`${a.type.toString()} ${n+this.firstCharacterToUpperCase(a.identifier)}()`;return{kind:P.CompletionItemKind.Method,insertText:` ${l}{ return ${a.identifier}; } `,label:`${l}`,detail:"-> Getter-Methode ergänzen",range:i,documentation:`${l}{ return ${a.identifier}; } `,filterText:`${n+this.firstCharacterToUpperCase(a.identifier)}()`}})}getSetter(e,i,n){return i={startLineNumber:i.startLineNumber,startColumn:0,endLineNumber:i.endLineNumber,endColumn:i.endColumn},e.fields.filter(a=>typeof e.getOwnMethods().find(l=>l.identifier==n+a.identifier)>"u"&&a.identifier!="class"&&a.type).map(a=>{let l=`void ${n+this.firstCharacterToUpperCase(a.identifier)}(${a.type.toString()} ${a.identifier})`;return{kind:P.CompletionItemKind.Method,insertText:` ${l}{ this.${a.identifier} = ${a.identifier}; } `,label:`${l}`,detail:"-> Setter-Methode ergänzen",range:i,documentation:`${l}{ return ${a.identifier}; } `,filterText:`${n+this.firstCharacterToUpperCase(a.identifier)}()`}})}deleteDoublesWithIdenticalInsertText(e){let i=new Set;return e=e.filter(n=>{let s=n.insertText;return i.has(s)?!1:(i.add(s),!0)}),e}getCompletionItemsAfterDot(e,i,n,s,a,l,h){let u=e[2],m=i.column-u.length-1,g=n.getTypeAtPosition(i.lineNumber,m),f={startLineNumber:i.lineNumber,startColumn:i.column-u.length,endLineNumber:i.lineNumber,endColumn:i.column+a.length};if(g instanceof mt||g instanceof ei||g instanceof xi){let b=wv(g,l);return Promise.resolve({suggestions:this.deleteDoublesWithIdenticalInsertText(g.getCompletionItems(b,h,a,f,void 0))})}else if(g instanceof Bt||g instanceof nt){let b=g.getCompletionItems(p.keywordPublic,h,a,f,void 0),A=s.getInterpreter().scheduler.classObjectRegistry.Object.type;return b=b.concat(A.getCompletionItems(p.keywordPublic,h,a,f,void 0)),b=this.deleteDoublesWithIdenticalInsertText(b),Promise.resolve({suggestions:b})}else{if(g instanceof Ie)return Promise.resolve({suggestions:[{label:"length",filterText:"length",kind:P.CompletionItemKind.Field,insertText:"length",range:f,documentation:{value:le.numberOfElementsInThisArray()}}]});if(g instanceof ti){let b=g.getCompletionItems(p.keywordPublic,h,a,f,void 0);return Promise.resolve({suggestions:b})}}return null}getAssertMethods(e,i){if(e.annotations.find(s=>s.identifier=="Test")==null)return[];let n=[];return n=n.concat([{label:"assertEquals(expected, actual, message)",insertText:`assertEquals($1, $2, $3); $0`,detail:le.assertEquals(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"assertCodeReached(message)",insertText:`assertCodeReached($1); $0`,detail:le.assertCodeReached(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"assertTrue(value, message)",insertText:`assertTrue($1, $2); $0`,detail:le.assertTrue(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"assertFalse(value, message)",insertText:`assertFalse($1, $2); $0`,detail:le.assertFalse(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}},{label:"fail(message)",insertText:`fail($1); $0`,detail:le.fail(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Method,range:i,command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]}}]),n}getKeywordCompletion(e,i,n,s){var h;let a=[];if(e.getSettings().getValue("editor.contextSensitiveHelp.StructureStatements")==="true"&&!this.isConsole&&((i==null?void 0:i.classContext)==null||(i==null?void 0:i.methodContext)!=null)&&(a=a.concat([{label:"while(Bedingung){Anweisungen}",detail:"while-loop",filterText:"while",insertText:`while($1){ $0 }`,command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"for(){}",insertText:`for( $1 ; $2 ; $3 ){ $0 }`,detail:"for-loop",filterText:"for",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"for(int i = 0; i < 10; i++){}",insertText:"for(int ${1:i} = 0; ${1:i} < ${2:10}; ${1:i}++){\n $0\n}",detail:le.countingForLoop(),filterText:"for",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"switch(){case...}",insertText:`switch($1){ case $2: $3 break; case $4: $5 break; default: $0 }`,detail:le.switchStatement(),filterText:"switch",command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"if(){}",insertText:`if($1){ $0 }`,detail:le.ifClause(),filterText:"if",command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"if(){} else {}",insertText:`if($1){ $2 } else { $0 }`,detail:le.doubleSidedIfClause(),filterText:"if",command:{id:"editor.action.triggerSuggest",title:"123",arguments:[]},insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"else {}",insertText:`else { $0 }`,detail:"else",filterText:"else",sortText:"aelse",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n}])),((i==null?void 0:i.classContext)==null||(i==null?void 0:i.methodContext)!=null)&&(a=a.concat([{label:"instanceof",insertText:"instanceof $0",detail:"instanceof-Operator",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"print",insertText:"print($1);$0",detail:le.printStatement(),command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"println",insertText:"println($1);$0",detail:le.printlnStatement(),command:{id:"editor.action.triggerParameterHints",title:"123",arguments:[]},insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n}])),!this.isConsole&&(i==null||i.classContext==null||i.classContext.isMainClass)){let u=le.identifier(),m="";s.file.getText().trim().length<5&&(u=s.file.name.replace(".java",""),m=" "+u),a=a.concat([{label:"class"+m,filterText:"class",insertText:"class ${1:"+u+`} { $0 } `,detail:le.classDefinition(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"public class",filterText:"public class",insertText:"public class ${1:"+le.identifier()+`} { $0 } `,detail:le.classDefinition(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"abstract class",filterText:"abstract class",insertText:"abstract class ${1:"+le.identifier()+`} { $0 } `,detail:le.classDefinition(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"interface",filterText:"interface",insertText:"interface ${1:"+le.identifier()+`} { $0 } `,detail:le.classDefinition(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"enum",filterText:"enum",insertText:"enum ${1:"+le.identifier()+`} { $0 } `,detail:le.classDefinition(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n}])}else!this.isConsole&&(i==null?void 0:i.methodContext)==null&&(a=a.concat([{label:"public",filterText:"public",insertText:"public ",detail:"public",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"public void method(){}",filterText:"public",insertText:"public ${1:void} ${2:"+le.identifier()+"}(${3:"+le.parameter()+`}) { $0 } `,detail:le.methodDefinition(),insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"protected",filterText:"protected",insertText:"protected ",detail:"protected",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"static",filterText:"static",insertText:"static ",detail:"static",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n},{label:"private",filterText:"private",insertText:"private ",detail:"private",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n}]));return i!=null&&i.methodContext!=null&&((h=i.classContext)==null?void 0:h.identifier)!=""&&(a=a.concat([{label:"return",filterText:"return",insertText:"return",detail:"return",insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:n}])),a}getOverridableMethodsCompletion(e,i,n){let s=[],a=[],l=e.getExtends();for(;l!=null;)a=a.concat(l.getOwnMethods().filter(h=>!!(h.isAbstract||h.program==null||h.identifier.startsWith("onMouse")||h.identifier.startsWith("onKey")||h.identifier.startsWith("onChange")))),l=l.getExtends();for(let h of e.getImplements())a=a.concat(h.getAllMethods());for(let h of a){if(h.isConstructor)continue;let u=!1;for(let A of e.getOwnMethods())if(A.getSignature()==h.getSignature()){u=!0;break}if(u)continue;let m=(h.isAbstract?"implement ":"override ")+h.getCompletionLabel(!1),g=h.identifier,f=h.returnParameterType==null?"void":h.returnParameterType.toString(),b="";n.indexOf(f)<0&&(b+=$e[h.visibility]+" "+(h.returnParameterType==null?"void":h.returnParameterType.toString())+" "),b+=h.identifier+"("+h.parameters.map(A=>A.type.toString()+" "+A.identifier).join(", "),b+=`) { $0 }`,s.push({label:{label:m,detail:" -> "+le.implementOverrideMethod(h.isAbstract,m)},filterText:g,insertText:b,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:i})}return s}getConstructorCompletion(e,i){let n=[];if(e.getOwnMethods().filter(f=>f.isConstructor&&f.identifier==e.identifier&&f.identifierRange.startLineNumber!==-1).length>0)return[];let a=e.getFields().filter(f=>f.classEnum==e&&!f.isStatic()&&!f.initializedBeforeConstructor&&!f.isFinal()),l=1,h=a.map(f=>{var b;return"${"+l+++":"+((b=f.type)==null?void 0:b.toString())+" "+f.identifier}).join(", }");h.length>0&&(h+="}");let u=a.map(f=>" ${"+l+++":this."+f.identifier+" = "+f.identifier+";").join(` }`);u.length>0&&(u+="}");let m=` public ${e.identifier}(${h}){ ${u} $0 }`,g={label:{label:e.identifier+"(){...}",detail:" -> insert constructor"},filterText:e.identifier,insertText:m,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,kind:P.CompletionItemKind.Snippet,range:i,sortText:"_aaa"};return n.push(g),n}upvoteItemsWithSameFirstCharacterCasing(e,i){if(!i||i.length<1)return;let n=this.hasFirstCharacterUpperCase(i);for(let s of e)this.hasFirstCharacterUpperCase(s.insertText)!=n?s.sortText="a_"+s.sortText:s.sortText="b_"+s.sortText}hasFirstCharacterUpperCase(e){return!e||e.length<0?!1:e[0]==e[0].toUpperCase()}hasFirstCharacterLowerCase(e){return!e||e.length<0?!1:e[0]==e[0].toUpperCase()}firstCharacterToUpperCase(e){return!e||e.length==0?"":e.charAt(0).toLocaleUpperCase()+e.substring(1)}}class Cv extends Ti{constructor(e){super(e);r(this,"count",0);P.registerDefinitionProvider(e.monacoLanguageSelector,this)}provideDefinition(e,i,n){let s=Q.getEditors().find(f=>f.getModel()==e);if(!s)return;let a=this.findMainForModel(e);if(!a)return;let l=this.getUsagePosition(a,i,s),h=l==null?void 0:l.symbol.module.file;if(!(h instanceof Je))return;let u=h.getMonacoModel(),m=u==null?void 0:u.uri;if(!m)return;let g=l==null?void 0:l.symbol.identifierRange;if(g)return setTimeout(()=>{let f=s.getPosition();e==u&&f&&er.equals(s.getPosition(),U.getStartPosition(g))&&s.revealPositionInCenterIfOutsideViewport(f)},200),{range:l.symbol.identifierRange,uri:m}}getUsagePosition(e,i,n){var a,l;if(((a=n.getModel())==null?void 0:a.getLanguageId())!="myJava")return;let s=(l=e.getCurrentWorkspace())==null?void 0:l.getModuleForMonacoModel(n.getModel());if(s)return s.compiledSymbolsUsageTracker.findSymbolAtPosition(i)}}class xv extends Ti{constructor(e){super(e);r(this,"autoFormatTriggerCharacters",[` `]);r(this,"displayName","Java-Autoformat");this.language=e,P.registerDocumentFormattingEditProvider(e.monacoLanguageSelector,this),P.registerOnTypeFormattingEditProvider(e.monacoLanguageSelector,this)}provideOnTypeFormattingEdits(e,i,n,s,a){let l=this.format(e);return Promise.resolve(l)}deleteOverlappingRanges(e){for(let i=0;i=s.range.startColumn)e.splice(i+1,1);else if(n.range.endColumn==0&&n.text.length>0&&s.range.startColumn==1&&s.range.endColumn>s.range.startColumn&&s.text==""){let a=n.text.length-(s.range.endColumn-s.range.startColumn);a>0?(n.text=n.text.substr(0,a),e.splice(i+1,1)):a<0?(s.range.endColumn=s.range.startColumn-a,e.splice(i,1),i--):(e.splice(i,2),i--)}}}}provideDocumentFormattingEdits(e,i,n){let s=this.format(e);return Promise.resolve(s)}format(e){let i=[],n=e.getValue(Q.EndOfLinePreference.LF),s=new _l().lex(n).tokens;if(s==null)return[];let a,l=0,h=3,u=[],m=[],g=!1,f=0,b=0,A=!1,C=this.language.getSettings(this.findMainForModel(e));for(let w=0;w3&&this.deleteSpaces(i,x.range.startLineNumber,1,3);break;case p.leftCurlyBracket:if(A=!1,g&&(g=!1,m.push(l+2),l++),l++,u.push(x.range.startLineNumber),a!=null){let D=a.tt;(D==p.rightBracket||D==p.identifier||D==p.leftRightSquareBracket)&&a.range.startLineNumber==x.range.startLineNumber&&this.replaceBetween(a,x,i," ")}if(w0){let D=s[w-1];D.tt!=p.space&&D.tt!=p.newline&&this.insertSpacesBefore(i,x.range.startLineNumber,x.range.startColumn,1)}l--;break;case p.leftBracket:if(b++,w1){let D=s[w-1],G=s[w-2];D.tt==p.space&&[p.newline,p.keywordFor,p.keywordWhile,p.keywordIf,p.keywordElse,p.keywordDo].indexOf(G.tt)<0&&!this.isBinaryOperator(G.tt)&&this.lengthOfRange(D.range)==1&&this.deleteSpaces(i,D.range.startLineNumber,D.range.startColumn,1)}break;case p.rightBracket:if(b--,w>1){let D=s[w-1],G=s[w-2];D.tt==p.space&&G.tt!=p.newline&&this.deleteSpaces(i,D.range.startLineNumber,D.range.startColumn,this.lengthOfRange(D.range))}break;case p.newline:if(f=2,w0&&Wa++,Wa<0&&(Wa=0);let Qs=Wa*h+(A?h:0);A=!1,Qs>Gt?this.insertSpacesBefore(i,x.range.startLineNumber+1,0,Qs-Gt):Qs0&&s[w-1].tt!=p.newline&&this.lengthOfRange(x.range)>1&&this.deleteSpaces(i,x.range.startLineNumber,x.range.startColumn,this.lengthOfRange(x.range)-1);break;case p.keywordFor:case p.keywordWhile:case p.keywordIf:case p.keywordDo:if(C.getValue("formatter.forceSpacesAfterIfForWhileDo")!="no"){let D=parseInt(C.getValue("formatter.forceSpacesAfterIfForWhileDo")||"0");this.forceSpacesBeforeOpeningBracket(i,w+1,s,x.range.startLineNumber,x.range.startColumn,D)}A=!0;break;case p.keywordElse:this.forceSpacesBeforeOpeningBracket(i,w+1,s,x.range.startLineNumber,x.range.startColumn,1),A=!0;break;case p.comma:case p.semicolon:if(A=!1,w>1){let D=s[w-1],G=s[w-2];D.tt!=p.newline&&G.tt!=p.newline&&!this.isBinaryOperator(G.tt)&&D.tt==p.space&&this.lengthOfRange(D.range)==1&&this.deleteSpaces(i,D.range.startLineNumber,D.range.startColumn,1)}if(w0){let G=s[w-1],K=q||D?0:1;G.tt==p.space?this.lengthOfRange(G.range)!=K&&this.insertSpacesBefore(i,G.range.startLineNumber,G.range.startColumn,K-this.lengthOfRange(G.range)):K==1&&this.insertSpacesBefore(i,x.range.startLineNumber,x.range.startColumn,1)}if(w=0;){let s=i[n].tt;if(s==p.lower)return!0;if([p.space,p.comma,p.identifier].indexOf(s)<0)return!1;n--}return!1}isBinaryOperator(e){return e&&e>=p.modulo&&e<=p.colon}replaceBetween(e,i,n,s){let a=e.range,l=i.range;(a.endLineNumber!=l.startLineNumber||l.startColumn-a.endColumn!=s.length)&&this.replace(n,a,l,s)}forceSpacesBeforeOpeningBracket(e,i,n,s,a,l){let h=0,u=i;if(n[i].tt==p.space&&(h=this.lengthOfRange(n[i].range),u++),!([p.leftBracket,p.leftCurlyBracket].indexOf(n[u].tt)<0)&&h!=l)if(h>l){let m=n[i];this.deleteSpaces(e,m.range.startLineNumber,m.range.startColumn,h-l)}else{let m=n[u].range;this.insertSpacesBefore(e,m.startLineNumber,m.startColumn,l-h)}}deleteSpaces(e,i,n,s){e.push({range:{startColumn:n,startLineNumber:i,endColumn:n+s+(n==0?1:0),endLineNumber:i},text:""})}insertSpacesBefore(e,i,n,s){if(s<0){this.deleteSpaces(e,i,n,-s);return}e.push({range:{startColumn:n,startLineNumber:i,endColumn:n,endLineNumber:i},text:" ".repeat(s)})}replace(e,i,n,s){e.push({range:{startColumn:i.endColumn,startLineNumber:i.endLineNumber,endColumn:n.startColumn,endLineNumber:n.startLineNumber},text:s})}lengthOfRange(e){return e.endColumn-e.startColumn}}class B{}r(B,"whileLabel",()=>d({de:"while(Bedingung){ Anweisungen }",en:""})),r(B,"whileDocumentation",()=>d({de:"Wiederholung mit Anfangsbedingung (while-loop)",en:""})),r(B,"whileParameter1",()=>d({de:"Bedingung der while-loop",en:""})),r(B,"whileParameter1Documentation",()=>d({de:"Die Bedingung wird vor jeder Wiederholung ausgewertet. Ist sie erfüllt ist (d.h. hat sie den Wert true), so werden die Anweisungen in {} erneut ausgeführt, ansonsten wird mit der nächsten Anweisung nach { } fortgefahren.",en:""})),r(B,"ifLabel",()=>d({de:"if(Bedingung){ Anweisungen1 } else { Anweisungen2 }",en:""})),r(B,"ifDocumentation",()=>d({de:"Bedingung (else... ist optional)",en:""})),r(B,"ifParameter1",()=>d({de:"Bedingung im if-statement",en:""})),r(B,"ifParameter1Documentation",()=>d({de:"Ist die Bedingung erfüllt (d.h. hat sie den Wert true), so werden die Anweisungen1 ausgeführt. Trifft die Bedingung nicht zu (d.h. hat sie den Wert false), so werden die Anweisungen2 ausgeführt.",en:""})),r(B,"switchLabel",()=>d({de:"switch(Selektor){case Wert_1: Anweisungen1; break; case Wert_2 Anweisungen2; break; default: Defaultanweisungen; break;}",en:""})),r(B,"switchDocumentation",()=>d({de:"Mehrfachauswahl (switch-case)",en:""})),r(B,"switchParameter1",()=>d({de:"Selektor des switch-statements",en:""})),r(B,"switchParameter1Documentation",()=>d({de:"Der Wert des Selektor-Terms wird ausgewertet. Hat er den Wert Wert_1, so werden die Anweisungen1 ausgeführt. Hat er den Wert Wert_2, so werden die Anweisungen2 ausgeführt usw. Hat er keinen der bei case... aufgeführten Werte, so werden die Defaultanweisungen ausgeführt.",en:""})),r(B,"forLabel",()=>d({de:"for(Startanweisung; Bedingung; Anweisung am Ende jeder Wiederholung){ Anweisungen }",en:"for(Start statement; Condition; Statement at the end of each iteration){ Instructions }"})),r(B,"forDocumentation",()=>d({de:"Wiederholung mit for (for-loop)",en:"for-loop"})),r(B,"forParameter1Interval",()=>ic({de:[4,18],en:[4,19]})),r(B,"forParameter1Documentation",()=>d({de:"Startanweisung der for-loop: Anweisung wird vor der ersten Wiederholung einmal ausgeführt.",en:"Initialization statement of the for-loop: Statement is executed once before the first iteration."})),r(B,"forParameter2Interval",()=>ic({de:[20,29],en:[21,30]})),r(B,"forParameter2Documentation",()=>d({de:"Die Bedingung der for-loop wird vor jeder Wiederholung ausgewertet. Ist sie erfüllt ist (d.h. hat sie den Wert true), so werden die Anweisungen in {} erneut ausgeführt, ansonsten wird mit der nächsten Anweisung nach { } fortgefahren.",en:"The condition of the for-loop is evaluated before each iteration. If it is fulfilled (i.e. has the value true), the instructions in {} are executed again, otherwise the next instruction after { } is executed."})),r(B,"forParameter3Interval",()=>ic({de:[31,67],en:[32,70]})),r(B,"forParameter3Documentation",()=>d({de:"Diese Anweisung wird stets am Ende jeder Wiederholung der for-loop ausgeführt.",en:"This statement is always executed at the end of each iteration of the for-loop."})),r(B,"printALabel",()=>d({de:"print(text: String, color: String)",en:""})),r(B,"printADocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus",en:""})),r(B,"printAParameter1Label",()=>d({de:"text: String",en:""})),r(B,"printAParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(B,"printAParameter2Label",()=>d({de:"color: String",en:""})),r(B,"printAParameter2Documentation",()=>d({de:"Farbe (englischer Name oder #ffffff oder rgb(255,255,255)) oder statisches Attribut der Klasse Color, z.B. Color.red",en:"Color (English name or #ffffff or rgb(255,255,255)) or static attribute of the Color class, e.g. Color.red"})),r(B,"printBLabel",()=>d({de:"print(text: String, color: int)",en:""})),r(B,"printBDocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus",en:""})),r(B,"printBParameter1Label",()=>d({de:"text: String",en:""})),r(B,"printBParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(B,"printBParameter2Label",()=>d({de:"color: int",en:""})),r(B,"printBParameter2Documentation",()=>d({de:"Farbe als int-Wert kodiert, z.B. 0xff00ff",en:"Color encoded as an int value, e.g. 0xff00ff"})),r(B,"printCLabel",()=>d({de:"print(text: String)",en:""})),r(B,"printCDocumentation",()=>d({de:"Gibt Text in der Ausgabe aus",en:""})),r(B,"printCParameter1Label",()=>d({de:"text: String",en:""})),r(B,"printCParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(B,"printDLabel",()=>d({de:"print(text: String, color: Color)",en:""})),r(B,"printDParameter2Label",()=>d({de:"color: Color",en:""})),r(B,"printDParameter2Documentation",()=>d({de:"Farbe als Color-Objekt, z.B. Color.red",en:"Color encoded as a color object, e.g. Color.red"})),r(B,"printlnALabel",()=>d({de:"println(text: String, color: String)",en:""})),r(B,"printlnADocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus. Der nächste Text landet eine Zeile tiefer.",en:""})),r(B,"printlnAParameter1Label",()=>d({de:"text: String",en:""})),r(B,"printlnAParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(B,"printlnAParameter2Label",()=>d({de:"color: String",en:""})),r(B,"printlnAParameter2Documentation",()=>d({de:"Farbe (englischer Name oder #ffffff oder rgb(255,255,255)) oder statisches Attribut der Klasse Color, z.B. Color.red",en:"Color (English name or #ffffff or rgb(255,255,255)) or static attribute of the Color class, e.g. Color.red"})),r(B,"printlnBLabel",()=>d({de:"println(text: String, color: int)",en:""})),r(B,"printlnBDocumentation",()=>d({de:"Gibt Text farbig in der Ausgabe aus. Der nächste Text landet eine Zeile tiefer.",en:""})),r(B,"printlnBParameter1Label",()=>d({de:"text: String",en:""})),r(B,"printlnBParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""})),r(B,"printlnBParameter2Label",()=>d({de:"color: int",en:""})),r(B,"printlnBParameter2Documentation",()=>d({de:"Farbe als int-Wert kodiert, z.B. 0xff00ff",en:"Color encoded as an int value, e.g. 0xff00ff"})),r(B,"printlnDLabel",()=>d({de:"println(text: String, color: Color)",en:""})),r(B,"printlnDParameter2Label",()=>d({de:"color: Color",en:""})),r(B,"printlnDParameter2Documentation",()=>d({de:"Farbe als Color-Objekt, z.B. Color.red",en:"Color encoded as a color object, e.g. Color.red"})),r(B,"printlnCLabel",()=>d({de:"println(text: String)",en:""})),r(B,"printlnCDocumentation",()=>d({de:"Gibt Text in der Ausgabe aus. Der nächste Text landet eine Zeile tiefer.",en:""})),r(B,"printlnCParameter1Label",()=>d({de:"text: String",en:""})),r(B,"printlnCParameter1Documentation",()=>d({de:"text: Text, der ausgegeben werden soll",en:""}));const Ds=class Ds extends Ti{constructor(e){super(e);r(this,"signatureHelpTriggerCharacters",["(",",",";","<",">","="]);r(this,"signatureHelpRetriggerCharacters",[" "]);P.registerSignatureHelpProvider(e.monacoLanguageSelector,this)}async provideSignatureHelp(e,i,n,s){var m,g,f,b;if(e.getLanguageId()!="myJava")return;let a=this.findMainForModel(e);if(!a)return;let l,h=(m=a.getBottomDiv())==null?void 0:m.console;if(((g=h==null?void 0:h.editor)==null?void 0:g.getModel())==e?(h.compile(),l=a.getRepl().getCurrentModule()):(l=(f=a.getCurrentWorkspace())==null?void 0:f.getModuleForMonacoModel(e),l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(await a.getCompiler().waitTillCompilationFinished(),l=(b=a.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(e))),!l)return;let u=a.getSettings().getValue("editor.contextSensitiveHelp.StructureStatements")==="true";return Ds.provideSignatureHelpLater(l,e,i,n,s,u)}static provideSignatureHelpLater(e,i,n,s,a,l){if(!(e instanceof $r))return{value:{activeParameter:0,activeSignature:0,signatures:[]},dispose:()=>{}};let h=e.methodCallPositions[n.lineNumber];if(h==null)return null;let u,m=-1;for(let g=h.length-1;g>=0;g--){let f=h[g];f.identifierRange.endColumnm&&(f.rightBracketPosition==null||n.lineNumber<=f.rightBracketPosition.lineNumber&&n.column<=f.rightBracketPosition.column||n.lineNumberMath.sign(g.parameters.length-m.parameters.length))){let m=u;(s==0||m.parameters.length>s)&&(a.push(Ds.makeSignatureInformation(m)),m==e.bestMethod&&m.parameters.length>0&&(l=h),h++)}}return{value:{activeParameter:s,activeSignature:l,signatures:a},dispose:()=>{}}}static makeIntrinsicSignatureInformation(e,i){switch(e){case"while":return[{label:B.whileLabel(),documentation:B.whileDocumentation(),parameters:[{label:B.whileParameter1(),documentation:B.whileParameter1Documentation()}]}];case"if":return[{label:B.ifLabel(),documentation:B.ifDocumentation(),parameters:[{label:B.ifParameter1(),documentation:B.ifParameter1Documentation()}]}];case"switch":return[{label:B.switchLabel(),documentation:B.switchDocumentation(),parameters:[{label:B.switchParameter1(),documentation:B.switchParameter1Documentation()}]}];case"for":return[{label:B.forLabel(),documentation:"",parameters:[{label:B.forParameter1Interval(),documentation:B.forParameter1Documentation()},{label:B.forParameter2Interval(),documentation:B.forParameter2Documentation()},{label:B.forParameter3Interval(),documentation:B.forParameter3Documentation()}]}];case"print":return[{label:B.printALabel(),documentation:B.printADocumentation(),parameters:[{label:B.printAParameter1Label(),documentation:B.printAParameter1Documentation()},{label:B.printAParameter2Label(),documentation:B.printAParameter2Documentation()}]},{label:B.printBLabel(),documentation:B.printBDocumentation(),parameters:[{label:B.printBParameter1Label(),documentation:B.printBParameter1Documentation()},{label:B.printBParameter2Label(),documentation:B.printBParameter2Documentation()}]},{label:B.printDLabel(),documentation:B.printBDocumentation(),parameters:[{label:B.printBParameter1Label(),documentation:B.printBParameter1Documentation()},{label:B.printDParameter2Label(),documentation:B.printDParameter2Documentation()}]},{label:B.printCLabel(),documentation:B.printCDocumentation(),parameters:[{label:B.printCParameter1Label(),documentation:B.printCParameter1Documentation()}]}];case"println":return[{label:B.printlnALabel(),documentation:B.printlnADocumentation(),parameters:[{label:B.printlnAParameter1Label(),documentation:B.printlnAParameter1Documentation()},{label:B.printlnAParameter2Label(),documentation:B.printlnAParameter2Documentation()}]},{label:B.printlnBLabel(),documentation:B.printlnBDocumentation(),parameters:[{label:B.printlnBParameter1Label(),documentation:B.printlnBParameter1Documentation()},{label:B.printlnBParameter2Label(),documentation:B.printlnBParameter2Documentation()}]},{label:B.printlnDLabel(),documentation:B.printlnBDocumentation(),parameters:[{label:B.printlnBParameter1Label(),documentation:B.printlnBParameter1Documentation()},{label:B.printlnDParameter2Label(),documentation:B.printlnDParameter2Documentation()}]},{label:B.printlnCLabel(),documentation:B.printlnCDocumentation(),parameters:[{label:B.printlnCParameter1Label(),documentation:B.printlnCParameter1Documentation()}]}]}return[]}static makeSignatureInformation(e){let i="";e.returnParameterType!=null&&!e.isConstructor&&(i+=e.returnParameterType.toString()+" "),i+=e.identifier+"(";let n=[],s=e.parameters;for(let a=0;ad({de:"Die Anweisung ```print``` gibt eine Zeichenkette aus.",en:"Statement ```print``` outputs a string.",fr:"L'instruction ```print``` affiche une chaîne de caractères."})),r(H,"new",()=>d({de:'Das Schlüsselwort ```new``` bewirkt die Instanzierung ("Erschaffung") eines neuen Objektes einer Klasse.',en:"Statement ```new``` creates a new instance of a class.",fr:"L'instruction ```new``` crée une nouvelle instance d'une classe."})),r(H,"println",()=>d({de:"Die Anweisung ```println``` gibt eine Zeichenkette gefolgt von einem Zeilenumbruch aus.",en:"Statement ```println``` outputs a string followed by a newline.",fr:"L'instruction ```println``` affiche une chaîne de caractères suivie d'un saut de ligne."})),r(H,"while",()=>d({de:"```\nwhile (Bedingung) {Anweisungen}\n``` \nbewirkt die Wiederholung der Anweisungen solange ```Bedingung == true``` ist.",en:"```\nwhile (condition) {statements}\n``` \nrepeats the statements as long as ```condition == true```.",fr:"```\nwhile (condition) {instructions}\n``` \nrépète les instructions tant que ```condition == true```."})),r(H,"for",()=>d({de:"```\nfor(Startanweisung;Solange-Bedingung;Nach_jeder_Wiederholung){Anweisungen}\n``` \nführt zunächst die Startanweisung aus und wiederholt dann die Anweisungen solange ```Bedingung == true``` ist. Am Ende jeder wiederholung wird Nach_jeder_Wiederholung ausgeführt.",en:"```\nfor(initialization;condition;after_each_iteration){statements}\n``` \nfirst executes the initialization and then repeats the statements as long as ```condition == true```. At the end of each iteration, after_each_iteration is executed.",fr:"```\nfor(initialisation;condition;après_chaque_itération){instructions}\n``` \nexécute d'abord l'initialisation, puis répète les instructions tant que ```condition == true```. À la fin de chaque itération, après_chaque_itération est exécuté."})),r(H,"if",()=>d({de:"```\nif(Bedingung){Anweisungen_1} else {Anweisungen_2}\n``` \nwertet die Bedingung aus und führt Anweisungen_1 nur dann aus, wenn die Bedingung ```true``` ergibt, Anweisungen_2 nur dann, wenn die Bedingung ```false``` ergibt. \nDer ```else```-Teil kann auch weggelassen werden.",en:"```\nif(condition){statements_1} else {statements_2}\n``` \nevaluates the condition and executes statements_1 only if the condition is ```true```, statements_2 only if the condition is ```false```. \nThe ```else``` part can also be omitted.",fr:"```\nif(condition){instructions_1} else {instructions_2}\n``` \névalue la condition et exécute instructions_1 uniquement si la condition est ```true```, instructions_2 uniquement si la condition est ```false```. \nLa partie ```else``` peut également être omise."})),r(H,"else",()=>d({de:"```\nif(Bedingung){Anweisungen_1} else {Anweisungen_2}\n``` \nwertet die Bedingung aus und führt Anweisungen_1 nur dann aus, wenn die Bedingung ```true``` ergibt, Anweisungen_2 nur dann, wenn die Bedingung ```false``` ergibt.",en:"```\nif(condition){statements_1} else {statements_2}\n``` \nevaluates the condition and executes statements_1 only if the condition is ```true```, statements_2 only if the condition is ```false```.",fr:"```\nif(condition){instructions_1} else {instructions_2}\n``` \névalue la condition et exécute instructions_1 uniquement si la condition est ```true```, instructions_2 uniquement si la condition est ```false```."})),r(H,"switch",()=>d({de:"```\nswitch(Selektor){ case Wert_1: Anweisungen_1; break; case Wert_2: Anweisungen_2; break; default: Default-Anweisungen } \n``` \nwertet den Selektor-Term aus und führt abhängig vom Termwert Anweisungen_1, Anweisungen_2, ... aus. Entspricht der Termwert keinem der Werte Wert_1, Wert_2, ..., so werden die Default-Anweisungen ausgeführt.",en:"```\nswitch(selector){ case value_1: statements_1; break; case value_2: statements_2; break; default: default-statements } \n``` \nevaluates the selector term and executes statements_1, statements_2, ... depending on the term value. If the term value does not match any of the values value_1, value_2, ..., the default statements are executed.",fr:"```\nswitch(sélecteur){ case valeur_1: instructions_1; break; case valeur_2: instructions_2; break; default: instructions_par_défaut } \n``` \névalue le terme sélecteur et exécute instructions_1, instructions_2, ... en fonction de la valeur du terme. Si la valeur du terme ne correspond à aucune des valeurs valeur_1, valeur_2, ..., les instructions par défaut sont exécutées."})),r(H,"modulo",()=>d({de:"```\na % b\n``` \n (sprich: 'a modulo b') berechnet den **Rest** der ganzzahligen Division a/b.",en:"```\na % b\n``` \n (read: 'a modulo b') calculates the **remainder** of the integer division a/b.",fr:"```\na % b\n``` \n (lire : 'a modulo b') calcule le **reste** de la division entière a/b."})),r(H,"bitwiseOr",()=>d({de:"```\na | b\n``` \n (sprich: 'a or b') berechnet die **bitweise oder-Verknüpfung** der Werte a und b.",en:"```\na | b\n``` \n (read: 'a or b') calculates the **bitwise or operation** of the values a and b.",fr:"```\na | b\n``` \n (lire : 'a or b') calcule l'**opération OU bit à bit** des valeurs a et b."})),r(H,"bitwiseAnd",()=>d({de:"```\na & b\n``` \n (sprich: 'a und b') berechnet die **bitweise und-Verknüpfung** der Werte a und b.",en:"```\na & b\n``` \n (read: 'a and b') calculates the **bitwise and operation** of the values a and b.",fr:"```\na & b\n``` \n (lire : 'a and b') calcule l'**opération ET bit à bit** des valeurs a et b."})),r(H,"logicalAnd",()=>d({de:"```\na & b\n``` \n (sprich: 'a und b') ergibt genau dann ```true```, wenn ```a``` und ```b``` den Wert ```true``` haben..",en:"```\na & b\n``` \n (read: 'a and b') is ```true``` if and only if both ```a``` and ```b``` are ```true```.",fr:"```\na & b\n``` \n (lire : 'a and b') est ```true``` si et seulement si à la fois ```a``` et ```b``` sont ```true```."})),r(H,"logicalOr",()=>d({de:"```\na | b\n``` \n (sprich: 'a oder b') ergibt genau dann ```true```, wenn ```a``` oder ```b``` den Wert ```true``` haben..",en:"```\na | b\n``` \n (read: 'a or b') is ```true``` if and only if either ```a``` or ```b``` is ```true```.",fr:"```\na | b\n``` \n (lire : 'a or b') est ```true``` si et seulement si soit ```a``` soit ```b``` est ```true```."})),r(H,"bitwiseXor",()=>d({de:"```\na ^ b\n``` \n (sprich: 'a xor b') berechnet die **bitweise exklusiv-oder-Verknüpfung** der Werte a und b.",en:" ```\na ^ b\n``` \n (read: 'a xor b') calculates the **bitwise exclusive or operation** of the values a and b.",fr:"```\na ^ b\n``` \n (lire : 'a xor b') calcule l'**opération OU exclusif bit à bit** des valeurs a et b."})),r(H,"rightShift",()=>d({de:"```\na >> b\n``` \n (sprich: 'a right shift b') berechnet den Wert, der entsteht, wenn man den Wert von a **bitweise um b Stellen nach rechts verschiebt**. Dieser Wert ist identisch mit dem nach unten abgerundeten Wert von a/(2 hoch b).",en:"```\na >> b\n``` \n (read: 'a right shift b') calculates the value obtained by **shifting the bits of a to the right by b positions**. This value is identical to the value of a/(2 to the power of b) rounded down.",fr:"```\na >> b\n``` \n (lire : 'a right shift b') calcule la valeur obtenue en **décalant les bits de a vers la droite de b positions**. Cette valeur est identique à la valeur de a/(2 puissance b) arrondie à l'entier inférieur."})),r(H,"leftShift",()=>d({de:"```\na >> b\n``` \n (sprich: 'a left shift b') berechnet den Wert, der entsteht, wenn man den Wert von a **bitweise um b Stellen nach links verschiebt**. Dieser Wert ist identisch mit dem nach unten abgerundeten Wert von a*(2 hoch b).",en:"```\na << b\n``` \n (read: 'a left shift b') calculates the value obtained by **shifting the bits of a to the left by b positions**. This value is identical to the value of a*(2 to the power of b) rounded down.",fr:"```\na << b\n``` \n (lire : 'a left shift b') calcule la valeur obtenue en **décalant les bits de a vers la gauche de b positions**. Cette valeur est identique à la valeur de a*(2 puissance b) arrondie à l'entier inférieur."})),r(H,"bitwiseNot",()=>d({de:"```\n~a\n``` \n (sprich: 'nicht a') berechnet den Wert, der entsteht, wenn man **alle Bits von a umkehrt**.",en:"```\n~a\n``` \n (read: 'not a') calculates the value obtained by **inverting all bits of a**.",fr:"```\n~a\n``` \n (lire : 'not a') calcule la valeur obtenue en **inversant tous les bits de a**."})),r(H,"equals",()=>d({de:"```\na == b\n``` \nergibt genau dann ```true```, wenn ```a``` und ```b``` gleich sind. \nSind a und b **Objekte**, so ergibt ```a == b``` nur dann ```true```, wenn ```a``` und ```b``` auf das **identische** Objekt zeigen. \n```==``` nennt man **Vergleichsoperator**.",en:"```\na == b\n``` \nis ```true``` if and only if ```a``` and ```b``` are equal. \nIf a and b are **objects**, then ```a == b``` is ```true``` only if ```a``` and ```b``` point to the **same** object. \n```==``` is called a **comparison operator**.",fr:"```\na == b\n``` \nest ```true``` si et seulement si ```a``` et ```b``` sont égaux. \nSi a et b sont des **objets**, alors ```a == b``` est ```true``` uniquement si ```a``` et ```b``` pointent vers le **même** objet. \n```==``` est appelé un **opérateur de comparaison**."})),r(H,"lessEquals",()=>d({de:"```\na <= b\n``` \nergibt genau dann ```true```, wenn der Wert von ```a``` kleiner oder gleich dem Wert von ```b``` ist.",en:"```\na <= b\n``` \nis ```true``` if and only if the value of ```a``` is less than or equal to the value of ```b```.",fr:"```\na <= b\n``` \nest ```true``` si et seulement si la valeur de ```a``` est inférieure ou égale à la valeur de ```b```."})),r(H,"greaterEquals",()=>d({de:"```\na >= b\n``` \nergibt genau dann ```true```, wenn der Wert von ```a``` größer oder gleich dem Wert von ```b``` ist.",en:"```\na >= b\n``` \nis ```true``` if and only if the value of ```a``` is greater than or equal to the value of ```b```.",fr:"```\na >= b\n``` \nest ```true``` si et seulement si la valeur de ```a``` est supérieure ou égale à la valeur de ```b```."})),r(H,"notEquals",()=>d({de:"```\na != b\n``` \nergibt genau dann ```true```, wenn ```a``` und ```b``` **un**gleich sind. \nSind ```a``` und ```b``` **Objekte**, so ergibt ```a != b``` dann ```true```, wenn ```a``` und ```b``` **nicht** auf das **identische** Objekt zeigen. \n```!=``` nennt man **Ungleich-Operator**.",en:"```\na != b\n``` \nis ```true``` if and only if ```a``` and ```b``` are **not** equal. \nIf ```a``` and ```b``` are **objects**, then ```a != b``` is ```true``` if ```a``` and ```b``` do **not** point to the **same** object. \n```!=``` is called a **not-equal operator**.",fr:"```\na != b\n``` \nest ```true``` si et seulement si ```a``` et ```b``` ne sont pas égaux. \nSi ```a``` et ```b``` sont des **objets**, alors ```a != b``` est ```true``` si ```a``` et ```b``` ne pointent pas vers le **même** objet. \n```!=``` est appelé un **opérateur de non-égalité**."})),r(H,"plusAssign",()=>d({de:"```\na += b\n(Kurzschreibweise für a = a + b)\n``` \nbewirkt, dass der Wert von ```a``` um den Wert von ```b``` **erhöht** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na += b\n(short for a = a + b)\n``` \ncauses the value of ```a``` to be **increased** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na += b\n(court pour a = a + b)\n``` \nfait que la valeur de ```a``` est **augmentée** de la valeur de ```b```. Le résultat est écrit dans la variable ```a```."})),r(H,"minusAssign",()=>d({de:"```\na -= b\n(Kurzschreibweise für a = a - b)\n``` \nbewirkt, dass der Wert von ```a``` um den Wert von ```b``` **erniedrigt** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na -= b\n(short for a = a - b)\n``` \ncauses the value of ```a``` to be **decreased** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na -= b\n(court pour a = a - b)\n``` \nfait que la valeur de ```a``` est **diminuée** de la valeur de ```b```. Le résultat est écrit dans la variable ```a```. "})),r(H,"timesAssign",()=>d({de:"```\na *= b\n(Kurzschreibweise für a = a * b)\n``` \nbewirkt, dass der Wert von ```a``` mit dem Wert von ```b``` **multipliziert** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na *= b\n(short for a = a * b)\n``` \ncauses the value of ```a``` to be **multiplied** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na *= b\n(court pour a = a * b)\n``` \nfait que la valeur de ```a``` est **multipliée** par la valeur de ```b```. Le résultat est écrit dans la variable ```a```."})),r(H,"divAssign",()=>d({de:"```\na /= b\n(Kurzschreibweise für a = a / b)\n``` \nbewirkt, dass der Wert von ```a``` durch den Wert von ```b``` **dividiert** wird. Das Ergebnis wird in die Variable ```a``` geschrieben.",en:"```\na /= b\n(short for a = a / b)\n``` \ncauses the value of ```a``` to be **divided** by the value of ```b```. The result is written to the variable ```a```.",fr:"```\na /= b\n(court pour a = a / b)\n``` \nfait que la valeur de ```a``` est **divisée** par la valeur de ```b```. Le résultat est écrit dans la variable ```a```."})),r(H,"increment",()=>d({de:"```\na++\n(Kurzschreibweise für a = a + 1)\n``` \nbewirkt, dass der Wert von ```a``` um eins erhöht wird.",en:"```\na++\n(short for a = a + 1)\n``` \ncauses the value of ```a``` to be increased by one.",fr:"```\na++\n(court pour a = a + 1)\n``` \nfait que la valeur de ```a``` est augmentée de un."})),r(H,"decrement",()=>d({de:"```\na--\n(Kurzschreibweise für a = a - 1)\n``` \nbewirkt, dass der Wert von ```a``` um eins eniedrigt wird.",en:"```\na--\n(short for a = a - 1)\n``` \ncauses the value of ```a``` to be decreased by one.",fr:"```\na--\n(court pour a = a - 1)\n``` \nfait que la valeur de ```a``` est diminuée de un."})),r(H,"assign",()=>d({de:"```\na = Term\n``` \nberechnet den Wert des Terms und weist ihn der Variablen ```a``` zu. \n**Vorsicht:** \nVerwechsle ```=```(**Zuweisungsoperator**) nicht mit ```==```(**Vergleichsoperator**)!",en:"```\na = term\n``` \nevaluates the value of the term and assigns it to the variable ```a```. \n**Caution:** \nDo not confuse ```=```(**assignment operator**) with ```==```(**comparison operator**)!",fr:"```\na = terme\n``` \névalue la valeur du terme et l'assigne à la variable ```a```. \n**Attention :** \nNe confondez pas ```=```(**opérateur d'affectation**) avec ```==```(**opérateur de comparaison**)!"})),r(H,"not",()=>d({de:"```\n!a\n``` \nergibt genau dann ```true```, wenn ```a``` ```false``` ergibt. \n```!``` spricht man '**nicht**'.",en:"```\n!a\n``` \nis ```true``` if and only if ```a``` is ```false```. \n```!``` is read as '**not**'.",fr:"```\n!a\n``` \nest ```true``` si et seulement si ```a``` est ```false```. \n```!``` se lit '**not**'."})),r(H,"public",()=>d({de:"```\npublic\n``` \nAttribute und Methoden, die als ```public``` deklariert werden, sind überall (auch außerhalb der Klasse) sichtbar.",en:"```\npublic\n``` \nAttributes and methods declared as ```public``` are visible everywhere (even outside the class).",fr:"```\npublic\n``` \nLes attributs et les méthodes déclarés comme ```public``` sont visibles partout (même en dehors de la classe)."})),r(H,"private",()=>d({de:"```\nprivate\n``` \nAttribute und Methoden, die als ```private``` deklariert werden, sind nur innerhalb von Methoden derselben Klasse sichtbar.",en:"```\nprivate\n``` \nAttributes and methods declared as ```private``` are only visible within methods of the same class.",fr:"```\nprivate\n``` \nLes attributs et les méthodes déclarés comme ```private``` ne sont visibles que dans les méthodes de la même classe."})),r(H,"protected",()=>d({de:"```\nprotected\n``` \nAttribute und Methoden, die als ```protected``` deklariert werden, sind nur innerhalb von Methoden derselben Klasse oder innerhalb von Methoden von Kindklassen sichtbar.",en:"```\nprotected\n``` \nAttributes and methods declared as ```protected``` are only visible within methods of the same class or within methods of child classes.",fr:"```\nprotected\n``` \nLes attributs et les méthodes déclarés comme ```protected``` ne sont visibles que dans les méthodes de la même classe ou dans les méthodes des classes enfants."})),r(H,"return",()=>d({de:"```\nreturn Term\n``` \nbewirkt, dass die Methode verlassen wird und der Wert des Terms an die aufrufende Stelle zurückgegeben wird.",en:"```\nreturn term\n``` \ncauses the method to be exited and the value of the term to be returned to the calling location.",fr:"```\nreturn terme\n``` \nfait que la méthode est quittée et que la valeur du terme est renvoyée à l'emplacement d'appel."})),r(H,"break",()=>d({de:"```\nbreak;\n``` \ninnerhalb einer Schleife bewirkt, dass die Schleife sofort verlassen und mit den Anweisungen nach der Schleife fortgefahren wird. \n```break``` innerhalb einer ```switch```-Anweisung bewirkt, dass der Block der ```switch```-Anweisung verlassen wird.",en:" ```\nbreak;\n``` \nwithin a loop causes the loop to be exited immediately and execution to continue with the statements after the loop. \n```break``` within a ```switch``` statement causes the block of the ```switch``` statement to be exited.",fr:" ```\nbreak;\n``` \ndans une boucle, fait que la boucle est quittée immédiatement et que l'exécution se poursuit avec les instructions après la boucle. \n```break``` dans une instruction ```switch``` fait que le bloc de l'instruction ```switch``` est quitté."})),r(H,"class",()=>d({de:"```\nclass\n``` \nMit dem Schlüsselwort ```class``` werden Klassen definiert.",en:"```\nclass\n``` \nThe keyword ```class``` is used to define classes.",fr:"```\nclass\n``` \nLe mot-clé ```class``` est utilisé pour définir des classes."})),r(H,"extends",()=>d({de:"```\nextends\n``` \n```class A extends B { ... }``` bedeutet, dass die Klasse A Unterklasse der Klasse B ist.",en:"```\nextends\n``` \n```class A extends B { ... }``` means that class A is a subclass of class B.",fr:"```\nextends\n``` \n```class A extends B { ... }``` signifie que la classe A est une sous-classe de la classe B."})),r(H,"implements",()=>d({de:"```\nimplements\n``` \n```class A implements B { ... }``` bedeutet, dass die Klasse A das Interface B implementiert, d.h., dass sie alle Methoden besitzen muss, die in B definiert sind.",en:"```\nimplements\n``` \n```class A implements B { ... }``` means that class A implements the interface B, i.e., that it must have all the methods defined in B.",fr:"```\nimplements\n``` \n```class A implements B { ... }``` signifie que la classe A implémente l'interface B, c'est-à-dire qu'elle doit posséder toutes les méthodes définies dans B."})),r(H,"thisKeyword",()=>d({de:"```\nthis\n``` \nInnerhalb einer Methodendefinition bezeichnet das Schlüsselwort ```this``` immer dasjenige Objekt, für das die Methode gerade ausgeführt wird.",en:"```\nthis\n``` \nWithin a method definition, the keyword ```this``` always refers to the object for which the method is currently being executed.",fr:"```\nthis\n``` \nDans une définition de méthode, le mot-clé ```this``` fait toujours référence à l'objet pour lequel la méthode est en cours d'exécution."})),r(H,"var",()=>d({de:"```\nvar\n``` \nWird einer Variable beim Deklarieren sofort ein Startwert zugewiesen (z.B. Circle c = new Circle(100, 100, 10)), so kann statt des Datentyps das Schlüsselwort ```var``` verwendet werden (also var c = new Circle(100, 100, 10)).",en:"```\nvar\n``` \nIf a variable is assigned an initial value when it is declared (e.g., Circle c = new Circle(100, 100, 10)), the keyword ```var``` can be used instead of the data type (i.e., var c = new Circle(100, 100, 10)).",fr:"```\nvar\n``` \nSi une variable se voit attribuer une valeur initiale lors de sa déclaration (par exemple, Circle c = new Circle(100, 100, 10)), le mot-clé ```var``` peut être utilisé à la place du type de données (c'est-à-dire var c = new Circle(100, 100, 10))."}));class Sv extends Ti{constructor(e){super(e);r(this,"keywordDescriptions",{print:H.print(),new:H.new(),println:H.println(),while:H.while(),for:H.for(),if:H.if(),else:H.else(),switch:H.switch(),"%":H.modulo(),"|":H.bitwiseOr(),"&":H.bitwiseAnd(),"||":H.logicalOr(),"&&":H.logicalAnd(),"^":H.bitwiseXor(),">>":H.rightShift(),"<<":H.leftShift(),"~":H.bitwiseNot(),"==":H.equals(),"<=":H.lessEquals(),">=":H.greaterEquals(),"!=":H.notEquals(),"+=":H.plusAssign(),"-=":H.minusAssign(),"*=":H.timesAssign(),"/=":H.divAssign(),"++":H.increment(),"--":H.decrement(),"=":H.assign(),"!":H.not(),public:H.public(),private:H.private(),protected:H.protected(),return:H.return(),break:H.break(),class:H.class(),extends:H.extends(),implements:H.implements(),this:H.thisKeyword(),var:H.var()});this.language=e,P.registerHoverProvider(e.monacoLanguageSelector,this)}replReturnValueToOutput(e,i){if(typeof e>"u")return i+": ---";let n=e.type?e.type.toString()+" ":"",s=on.renderValue(e.value,100);return"```\n"+n+i+" : "+s+"\n```"}provideHover(e,i,n){var b,A,C;let s=this.findMainForModel(e);if(!s)return;let a=(b=s.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(e);if(!a)return;let l=[],h,u=s.getSettings();for(let w of a.errors)if(w.level=="error"&&U.containsPosition(w.range,i))return null;let m=a.findSymbolAtPosition(i),g=m==null?void 0:m.symbol;if(m&&g&&g.identifier!="var"){if(g instanceof we){let w=u.getValue("editor.hoverVerbosity.showClassDeclaration");if(w!=="none"){let x="```\n"+g.getDeclaration()+"\n```";g.documentation&&w!=="declarations"&&(x+=` `+this.formatDocumentation(g.getDocumentation())),h=m.range,l.push({value:x})}}else if(g instanceof Ui){let w=u.getValue("editor.hoverVerbosity.showMethodDeclaration");if(w!=="none"){let x="```\n"+g.getDeclaration()+"\n```";g.documentation&&w!=="declarations"&&(x+=` `+this.formatDocumentation(g.getDocumentation())),h=m.range,l.push({value:x})}}else if(g instanceof yt&&u.getValue("editor.hoverVerbosity.showHelpOnKeywordsAndOperators")){let w="```\n"+g.identifier+"\n``` \nprimitiver Datentyp";g.documentation&&(w+=` `+this.formatDocumentation(g.getDocumentation())),h=m.range,l.push({value:w})}else if(g instanceof Jr||g instanceof Hi||g instanceof ls){let w="```\n"+g.getDeclaration()+"\n```";g.documentation&&(w+=` `+this.formatDocumentation(g.getDocumentation())),h=m.range,l.push({value:w})}else if(g instanceof ti){let w="```\n"+g.getDeclaration()+"\n```";g.documentation&&(w+=` `+this.formatDocumentation(g.getDocumentation())),h=m.range,l.push({value:w})}}else{let w=this.getWordUnderCursor(e,i),x=this.keywordDescriptions[w];x!=null&&u.getValue("editor.hoverVerbosity.showHelpOnKeywordsAndOperators")&&l.push({value:x})}if(s.getInterpreter().scheduler.state==ie.paused){let w=s.getRepl(),x=this.widenDeclaration(e,i,g==null?void 0:g.identifier);if(!x)return null;let q=w.executeSynchronously(x);q!=null&&l.push({value:"```\n"+this.replReturnValueToOutput(q,x)+"\n```"})}if(l.length<2){let w=s.getSettings().getValue("editor.contextSensitiveHelp.StructureStatements")==="true",x=Gl.provideSignatureHelpLater(a,e,i,null,null,w);if(x!=null&&x.value){let q=x.value,D=q.signatures[q.activeSignature];if(D){let G=(A=D.parameters[q.activeParameter])==null?void 0:A.label,K=(C=D.parameters[q.activeParameter])==null?void 0:C.documentation;if(!G)return null;Array.isArray(G)&&(G=D.label.substring(G[0],G[1])),D[Gl.ISINTRINSIC]?l.push({value:K||G}):l.push({value:"```\nParameter "+G+"\n```"})}}}return{range:h,contents:l}}formatDocumentation(e){return e!=null&&e.startsWith("/*")&&(e=pb(e,1)),e}getWordUnderCursor(e,i){let n=e.getValueLengthInRange({startColumn:0,startLineNumber:0,endLineNumber:i.lineNumber,endColumn:i.column}),s=e.getValue(),a="",l=n;for(;l0&&this.isInsideIdentifierOrArrayDescriptor(s.charAt(h-1));)h--;if(l-h>1)a=s.substring(h,l);else{for(l=n;l0&&this.isInsideOperator(s.charAt(h-1));)h--;l-h>0&&(a=s.substring(h,l))}return a}widenDeclaration(e,i,n){let s=e.getValueLengthInRange({startColumn:0,startLineNumber:0,endLineNumber:i.lineNumber,endColumn:i.column}),a=e.getValue(),l=s;for(;l0&&this.isInsideIdentifierChain(a.charAt(h-1));)h--;return l-h>length?a.substring(h,l):n}isInsideIdentifierChain(e){return e.toLocaleLowerCase().match(/[a-z0-9äöüß_\[\]\.]/i)}isInsideOperator(e){return e.toLocaleLowerCase().match(/[&|!%<>=\+\-\*\/]/i)}isInsideIdentifierOrArrayDescriptor(e){return e.toLocaleLowerCase().match(/[a-z0-9äöüß\[\]]/i)}}class Tv extends Ti{constructor(e){super(e);r(this,"displayName","JavaOnline-InlayHints");r(this,"onDidChangeInlayHints");P.registerInlayHintsProvider(e.monacoLanguageSelector,this)}provideInlayHints(e,i,n){var h,u;let s=Q.getEditors().find(m=>m.getModel()==e);if(!s)return;let a=this.findMainForModel(e);if(!a||((h=s.getModel())==null?void 0:h.getLanguageId())!="myJava")return;let l=(u=a.getCurrentWorkspace())==null?void 0:u.getModuleForMonacoModel(s.getModel());if(!(!l||!(l instanceof $r)))return{hints:l.inlayHints,dispose:()=>{}}}resolveInlayHint(e,i){throw new Error("Method not implemented.")}}class $v{static configureEditor(t){t.onDidType(e=>{var n;if(((n=t.getModel())==null?void 0:n.getLanguageId())!="myJava")return;const i=(s,a,l,h)=>{const u=new Df(s.lineNumber,s.column,s.lineNumber,s.column);t.executeEdits("new-bullets",[{range:u,text:a}]),t.setPosition({lineNumber:l,column:h})};if(e===` `){const s=t.getModel(),a=t.getPosition(),l=s.getLineContent(a.lineNumber-1);if(l.trim().indexOf("/*")===0&&!l.trimEnd().endsWith("*/")&&!(a.lineNumberg.getModel()==t);if(!s)return;let a=this.findMainForModel(t);if(!a)return;let l=this.getUsagePosition(a,e,s);if(!l)return;let h=[];for(let g of a.getCompiler().getAllModules()){let f=g.getUsagePositionsForSymbol(l==null?void 0:l.symbol);if(f){for(let b of f)if(b.file instanceof Je){if(!((u=b.file.getMonacoModel())!=null&&u.uri))continue;h.push({range:b.range,uri:(m=b.file.getMonacoModel())==null?void 0:m.uri})}}}return h}getUsagePosition(t,e,i){var s,a;if(((s=i.getModel())==null?void 0:s.getLanguageId())!="myJava")return;let n=(a=t.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(i.getModel());if(n)return n.compiledSymbolsUsageTracker.findSymbolAtPosition(e)}}class Ev extends Ti{constructor(t){super(t),P.registerRenameProvider(t.monacoLanguageSelector,this)}provideRenameEdits(t,e,i,n){var g;let s=this.findMainForModel(t);if(!s)return;let a=Q.getEditors().find(f=>f.getModel()==t);if(!a)return;let l=this.getUsagePosition(s,e,a);if(!l)return;let h=l.symbol;l.symbol instanceof Ui&&l.symbol.isConstructor&&(h=l.symbol.classEnumInterface);let u=[],m=new Set;for(let f of s.getCompiler().getAllModules()){let b=f.getUsagePositionsForSymbol(h);if(b){for(let A of b)if(A.file instanceof Je){if(m.has(A.range.startLineNumber+"_"+A.range.startColumn)&&!((g=A.file.getMonacoModel())!=null&&g.uri))continue;let C=A.file.name+"_"+A.range.startLineNumber+"_"+A.range.startColumn;if(m.has(C))continue;m.add(C),u.push({resource:A.file.getMonacoModel().uri,versionId:A.file.getMonacoModel().getVersionId(),textEdit:{range:A.range,text:i}})}}}return{edits:u}}resolveRenameLocation(t,e,i){let n=this.findMainForModel(t);if(!n)return;let s=Q.getEditors().find(l=>l.getModel()==t);if(!s)return;let a=this.getUsagePosition(n,e,s);if(a)return{range:a==null?void 0:a.range,text:a==null?void 0:a.symbol.identifier}}getUsagePosition(t,e,i){var s,a;if(((s=i.getModel())==null?void 0:s.getLanguageId())!="myJava")return;let n=(a=t.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(i.getModel());if(n)return n.compiledSymbolsUsageTracker.findSymbolAtPosition(e)}}class Dv{constructor(t){r(this,"decorations");if(this.main=t,!t.getMainEditor()){console.error("Call of construction of JavaSymbolMarker after creation of monaco editor.");return}t.getMainEditor().onDidChangeCursorPosition(e=>{this.onDidChangeCursorPosition(e)})}onDidChangeCursorPosition(t){var s,a;let e=this.main.getMainEditor();if(!e||((s=e.getModel())==null?void 0:s.getLanguageId())!="myJava")return;this.clearDecorations();let i=(a=this.main.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(e.getModel());if(!i)return;let n=[];this.markSymbolUnderCursor(e,i,t.position,n),this.markMethodUnderCursor(e,i,t.position,n),this.decorations=e.createDecorationsCollection(n)}markSymbolUnderCursor(t,e,i,n){if(!e)return;let s=e.findSymbolAtPosition(i);if(s==null)return;let a=e.getUsagePositionsForSymbol(s==null?void 0:s.symbol);if(a)for(let l of a)n.push({range:l.range,options:{inlineClassName:"jo_revealSyntaxElement",isWholeLine:!1,overviewRuler:{color:{id:"editorIndentGuide.background"},darkColor:{id:"editorIndentGuide.activeBackground"},position:Q.OverviewRulerLane.Left}}})}markMethodUnderCursor(t,e,i,n){if(!(e instanceof $r))return;let s=e.methodDeclarationRanges.find(a=>U.containsPosition(a,i));s&&n.push({range:{startColumn:0,startLineNumber:s.startLineNumber,endColumn:100,endLineNumber:s.endLineNumber},options:{className:"jo_highlightMethod",isWholeLine:!0,overviewRuler:{color:{id:"jo_highlightMethod"},darkColor:{id:"jo_highlightMethod"},position:Q.OverviewRulerLane.Left},minimap:{color:{id:"jo_highlightMethod"},position:Q.MinimapPosition.Inline},zIndex:-100}})}clearDecorations(){this.decorations&&(this.decorations.clear(),this.decorations=void 0)}}class jv extends Ti{constructor(t){super(t)}provideCodeActions(t,e,i,n){var h,u;let s=[],a=(h=this.findMainForModel(t))==null?void 0:h.getCompiler();if(!a)return;let l;for(let m of((u=a.moduleManager)==null?void 0:u.getModules())||[])if(m.file instanceof Je&&m.file.getMonacoModel()==t){l=m;break}if(typeof l>"u")return{actions:[],dispose:()=>{}};for(let m of i.markers)s=l.quickfixes.filter(f=>f.error?f.error.message==m.message:!1).map(f=>f.provideCodeAction(t));if(s.length==0&&e.startLineNumber==e.endLineNumber&&e.startColumn==e.endColumn){let m={lineNumber:e.startLineNumber,column:e.startColumn};s=l.quickfixes.filter(f=>U.containsPosition(f.range,m)).map(f=>f.provideCodeAction(t))}return{actions:s,dispose:()=>{}}}}class Mv{constructor(){r(this,"state","none")}}class Wm{constructor(t){r(this,"program");r(this,"nextStep");r(this,"range");r(this,"symbolTable");var e,i;this.programState=t,this.program=t.program,this.symbolTable=this.program.symbolTable,this.nextStep=t.currentStepList[t.stepIndex],this.nextStep&&(this.range=this.nextStep.range),this.symbolTable&&this.nextStep&&((e=this.nextStep.range)!=null&&e.startLineNumber)&&((i=this.nextStep.range)!=null&&i.startColumn)&&(this.symbolTable=this.symbolTable.findSymbolTableAtPosition({lineNumber:this.nextStep.range.startLineNumber,column:this.nextStep.range.startColumn}))}getCaption(){let t=this.program.methodIdentifierWithClass;return t==".main"&&(t=wi.mainProgram()),this.range&&this.range.startLineNumber&&(t+=`:${this.range.startLineNumber}`),t=t.replace(/\d*\./g,"."),t=t.replaceAll(/\$/g,""),t}}class Pv extends Xg{constructor(t,e,i,n){super(t,e,i,n,void 0),this.isRepl=!0}start(t,e,i){i?(this.currentSymbolTable=t,this.codeGenerationMode="replStandalone",this.module.symbolTables=[t]):(this.currentSymbolTable=new Uh(this.module,this.module.ast.range,!0,t),this.module.symbolTables.push(this.currentSymbolTable),this.codeGenerationMode="repl"),this.symbolTableStack.push(this.currentSymbolTable),this.module.programsToCompileToFunctions=[];let n=new Ir(this.module,this.currentSymbolTable,"Repl.method"),s=[];s.push(new N(`${$.startReplProgram}(); `));let a,l,h=this.module.ast.mainProgramNode.statements;for(let u=0;u{C.stackframePosition>=A.nextFreePosition&&e.identifierToSymbolMap.delete(w)})}let b=f.start(e,n,s);return{module:a,program:b}}return{module:a,program:void 0}}}class Fv extends Mv{constructor(e,i){super();r(this,"standaloneModule");r(this,"standaloneExecutable");r(this,"standaloneModuleManager");r(this,"standaloneSymbolTable");r(this,"standaloneThread");r(this,"standaloneStack",[]);r(this,"replCompiler");r(this,"lastCompiledModule");this.main=e,this.compiler=i,this.replCompiler=new Bv,this.compiler.eventManager.on("compilationFinishedWithNewExecutable",n=>{this.main.getInterpreter().isRunningOrPaused()||setTimeout(()=>{this.init(n)},100)}),this.getInterpreter().eventManager.on("resetRuntime",()=>{this.state="none";let n=this.getInterpreter().executable;n&&n instanceof El&&this.init(n)})}init(e){var n,s;if(!e){this.state="none",this.main.hideDebugger();return}let i=this.getInterpreter();i||console.error("JavaRepl constructor called before interpreter was created."),this.standaloneModule=new $r(new Nh),this.standaloneSymbolTable=new Uh(this.standaloneModule,oe.instance,!0),this.standaloneThread=i.scheduler.createThread("Java REPL standalone thread"),this.standaloneThread.classes=e.classObjectRegistry,this.standaloneModuleManager=new ef,this.standaloneModuleManager.addModule(this.standaloneModule);for(let a of e.getModuleManager().getModules())this.standaloneModuleManager.addModule(a),a.registerTypesAtTypestore(this.standaloneModuleManager.typestore);this.standaloneExecutable=new El(e.classObjectRegistry,this.standaloneModuleManager,this.compiler.libraryModuleManager,[],new ap(e.libraryModuleManager.typestore,this.standaloneModuleManager.typestore)),this.standaloneStack=[],this.state="none",this.main.hideDebugger(),(s=(n=this.main.getBottomDiv())==null?void 0:n.console)==null||s.detachValues()}getCurrentModule(){return this.lastCompiledModule}getInterpreter(){let e=this.main.getInterpreter();return e||console.error("JavaRepl.getInterpreter: Interpreter is missing!"),e}compile(e,i){let n,s=this.getInterpreter();if(s.scheduler.state==ie.paused){let a=s.scheduler.getCurrentThread();if(s.executable&&a&&a.programStack.length>0){let l=a.programStack[a.programStack.length-1],u=new Wm(l).symbolTable;if(u){let m=u.childTables.length;n=this.replCompiler.compile(e,u,s.executable,i,!1),u.childTables.splice(m,u.childTables.length-m)}}}else n=this.replCompiler.compile(e,this.standaloneSymbolTable,this.standaloneExecutable,i,!0);return n&&(this.lastCompiledModule=n.module),n}executeSynchronously(e){var m;let i=this.getInterpreter(),n=this.compile(e,!1);if(!n)return;let s=this.getInterpreter().scheduler.getCurrentThread(),a=s==null?void 0:s.s.length,l=s==null?void 0:s.currentProgramState,h=l==null?void 0:l.lastExecutedStep,u=this.prepareThread(n);if(u){try{i.runREPLSynchronously();let g=(m=n.program)==null?void 0:m.symbolTable.stackframe;g.numberOfReplLocalVariables=(g==null?void 0:g.nextFreePosition)||0,l&&(l.lastExecutedStep=h),a&&(s==null||s.s.splice(a,(s==null?void 0:s.s.length)-a))}catch(g){console.log(g);return}return u.replReturnValue}}async executeAsync(e,i){let n=this.getInterpreter(),s=this.compile(e,!0),a=n.scheduler.getCurrentThread(),l=a==null?void 0:a.s.length,h=a==null?void 0:a.currentProgramState,u=h==null?void 0:h.lastExecutedStep;return s?s.module.errors.find(g=>g.level=="error")?{errors:s.module.errors,text:null,type:void 0,value:void 0}:(this.state=this.getInterpreter().scheduler.state==ie.paused?"none":"standalone",new Promise((g,f)=>{let b,A=C=>{var x,q;let w=(x=s.program)==null?void 0:x.symbolTable.stackframe;w.numberOfReplLocalVariables=(w==null?void 0:w.nextFreePosition)||0,h&&(h.lastExecutedStep=u),l&&(a==null||a.s.splice(l,(a==null?void 0:a.s.length)-l)),C&&(C.errors=(q=s==null?void 0:s.module)==null?void 0:q.errors,g(C),n.updateDebugger())};if(b=this.prepareThread(s,A,i),!b){g(void 0);return}n.setState(ie.running)})):void 0}prepareThread(e,i,n=!0){let s=this.getInterpreter(),a=s.scheduler;if(e.module.hasErrors()||!e.program)return;e.program.compileToJavascriptFunctions(),e.program.isReplProgram=!0;let l=[ie.running,ie.paused].indexOf(a.state)<0,h=a.getCurrentThread();if(l){a.setAsCurrentThread(this.standaloneThread),h=this.standaloneThread;let g=this.standaloneSymbolTable.getStackFrame().numberOfLocalVariables;for(;this.standaloneThread.s.length{h.maxStepsPerSecond=u,h.state=F.running,h.lastTimeThreadWasRun=performance.now();let g=s.printManager;s.printManager=new vg,s.setState(m),s.printManager=g,a.retrieveThreads(),i&&i(h.replReturnValue)},h.pushReplProgram(e.program),h}}class ss{constructor(t,e,i,n,s){r(this,"sliderDiv");r(this,"otherDiv");r(this,"transparentOverlay");r(this,"sliderBeginCallback");r(this,"sliderEndCallback");r(this,"savedPosition");this.container=t,this.lastFirst=e,this.vertHor=i,this.sliderMovedCallback=n,this.initSlider(),s&&(this.otherDiv=s)}initSlider(){let t=this;if(this.otherDiv==null){let e=this.container.parentElement;if(!e){console.log("Error in EmbeddedSlider: element has no parentElement.");return}Array.from(e.children).forEach(i=>{i!=this.container&&(t.otherDiv=i)})}this.sliderDiv=z.makeDiv(void 0,"jo_slider"),this.sliderDiv.style.width=this.vertHor?"100%":"4px",this.sliderDiv.style.height=this.vertHor?"4px":"100%",this.sliderDiv.style.cursor=this.vertHor?"row-resize":"col-resize",this.lastFirst?(this.sliderDiv.style.top="0px",this.sliderDiv.style.left="0px"):this.vertHor?(this.sliderDiv.style.bottom="0px",this.sliderDiv.style.left="0px"):(this.sliderDiv.style.top="0px",this.sliderDiv.style.right="0px"),this.container.append(this.sliderDiv),this.sliderDiv.addEventListener("mousedown",e=>{e.stopPropagation(),e.preventDefault()}),this.sliderDiv.addEventListener("pointerdown",e=>{e.stopPropagation(),e.preventDefault();let i=e.clientX,n=e.clientY,s=this.container.getBoundingClientRect(),a=s.height,l=s.width,h=this.otherDiv.getBoundingClientRect(),u=h.height,m=h.width;this.transparentOverlay=z.makeDiv(document.body),this.transparentOverlay.style.cursor=this.vertHor?"ns-resize":"ew-resize",this.transparentOverlay.style.position="fixed",this.transparentOverlay.style.left="0",this.transparentOverlay.style.top="0",this.transparentOverlay.style.width="100%",this.transparentOverlay.style.height="100%",this.transparentOverlay.style.zIndex="10001",this.sliderBeginCallback&&this.sliderBeginCallback(),this.transparentOverlay.addEventListener("pointermove",g=>{let f=g.clientX-i,b=g.clientY-n;if(g.preventDefault(),g.stopPropagation(),this.vertHor){let A=a+(this.lastFirst?-b:b),C=u+(this.lastFirst?b:-b);this.container.style.height=A+"px",this.otherDiv.style.height=C+"px",this.sliderMovedCallback(A)}else{let A=l+(this.lastFirst?-f:f),C=m+(this.lastFirst?f:-f);this.container.style.width=A+"px",this.otherDiv.style.width=C+"px",this.sliderMovedCallback(A)}this.container.style.flex="0 1 auto"}),this.transparentOverlay.onmousemove=g=>{g.stopPropagation()},this.transparentOverlay.addEventListener("pointerup",()=>{this.transparentOverlay.remove(),this.sliderEndCallback&&this.sliderEndCallback()})})}setColor(t){this.sliderDiv.style.backgroundColor=t}savePosition(){let t=this.container.getBoundingClientRect(),e=this.otherDiv.getBoundingClientRect();this.vertHor?this.savedPosition={own:t.height,other:e.height}:this.savedPosition={own:t.width,other:e.width}}restorePosition(){this.vertHor?(this.container.style.height=this.savedPosition.own+"px",this.otherDiv.style.height=this.savedPosition.other+"px"):(this.container.style.width=this.savedPosition.own+"px",this.otherDiv.style.width=this.savedPosition.other+"px")}setPosition(t){let e=this.container.getBoundingClientRect(),i=this.otherDiv.getBoundingClientRect(),n=this.vertHor?e.height:e.width,s=this.vertHor?i.height:i.width,a=n+s,l=a*t,h=a-l;this.vertHor?(this.container.style.height=l+"px",this.otherDiv.style.height=h+"px"):(this.container.style.width=l+"px",this.otherDiv.style.width=h+"px")}toggleVisibility(t){this.sliderDiv.style.display=t?"":"none"}}class Ne{}r(Ne,"ExecuteAllTestsInWorkspace",()=>d({de:"Führt alle im aktuellen Workspace enthaltenen JUnit-Tests aus.",en:"Executes all JUnit-tests in current workspace."})),r(Ne,"allTests",()=>d({de:"Alle Tests",en:"All tests"})),r(Ne,"failed",()=>d({de:"schlug fehl",en:"failed"})),r(Ne,"expectedValue",()=>d({de:"Erwarteter Wert: ",en:"Expected Value: "})),r(Ne,"actualValue",()=>d({de:"Erhaltener Wert: ",en:"Actual value: "})),r(Ne,"runningAllTestsOfClass",t=>d({de:`Führe alle Tests der Klasse ${t} aus:`,en:`Running all tests of class ${t}:`})),r(Ne,"runningAllTestsOfWorkspace",t=>d({de:`Führe alle Tests des Workspaces ${t} aus:`,en:`Running all tests of workspace ${t}:`})),r(Ne,"executingTestMethod",(t,e)=>d({de:`Führe ${t}.${e} aus ...`,en:`Running ${t}.${e} ...`})),r(Ne,"couldntGetMainThread",()=>d({de:"Fehler: Konnte den main thread nicht erhalten.",en:"Error: Couldn't get main thread."})),r(Ne,"line",(t,e)=>d({de:`Zeile ${t}`,en:`line ${t}`})),r(Ne,"noTestsAvailableHtml",t=>d({de:`
In deinem Workspace gibt es noch keine JUnit-Tests. Wenn du wissen möchtest, was ein JUnit-Test ist und wie man einen schreibt, schau' dir die ausführliche Anleitung auf www.learnj.de dazu an.

Hier ein kurzer Beispieltest:
${t}

look here!.

Here a quick example:
${t}

Hint:
  • Each test-method is preceeded by a @Test-annotation.
  • To the left of the test-method's declaration you get a small button with which you can start the test.
  • A test method must be parameterless and must have return-type void.
  • If you also preceed your Test class with @Test then you get a button left to it's declaration which you can use to start all tests of this class.
`})),r(Ne,"noTestsAvailableExampleProgram",()=>d({de:`@Test class MyFirstTestClass { @Test void testSquareRoot() { double squareRootOfFour = Math.sqrt(4); assertEquals(2.0, squareRootOfFour, "There seems to be something wrong with Math.sqrt!"); } @Test void testDivision() { double n = 5 / 2 * 3; println(n); assertEquals(7.5, n, "5/2 * 3 doesn't yield 7.5 -> mysterious..."); } }`})),r(Ne,"testsFound",t=>d({de:`In diesem Workspace wurden ${t} Testmethoden gefunden.
Klicke auf die Test-Buttons , um sie zu starten!`,en:`${t} test methods found in this workspace.
Click the test-buttons to start them!`}));class Vv{constructor(t){r(this,"assertionResults",[]);this.main=t}notifyOnAssemblyAssertion(t,e,i,n,s){i!==n&&this.addFailedResult(t,e,"notifyOnAssemblyAssertion",i,n,s)}notifyOnAssertTrue(t,e,i,n){i!==!0&&this.addFailedResult(t,e,"notifyOnAssertTrue","true","false",n)}notifyOnAssertFalse(t,e,i,n){i!==!1&&this.addFailedResult(t,e,"notifyOnAssertFalse","false","true",n)}notifyOnAssertEqualsBoolean(t,e,i,n,s){n!==i&&this.addFailedResult(t,e,"notifyOnAssertEquals",""+i,""+n,s)}notifyOnAssertEqualsNumber(t,e,i,n,s){Math.abs(n-i)>1e-14&&this.addFailedResult(t,e,"notifyOnAssertEquals",""+i,""+n,s)}notifyOnAssertEqualsString(t,e,i,n,s){i!==n&&this.addFailedResult(t,e,"notifyOnAssertEquals",i??"null",n??"null",s)}notifyOnAssertEqualsObject(t,e,i,n,s){i!==n&&this.addFailedResult(t,e,"notifyOnAssertEquals",i,n,s)}notifyOnFail(t,e,i){this.addFailedResult(t,e,"notifyOnFail","---","---",i)}addFailedResult(t,e,i,n,s,a){let l=null,h=null;t.hasCPU()?(h=t.__cpu.getRangeOfCurrentInstruction(),h&&(l=` (${Ne.line(h.startLineNumber,h.startColumn)})`)):(h=e.getValidRangeOrUndefined(),h&&(l=` (${Ne.line(h.startLineNumber,h.startColumn)})`)),l||(l=" (no position available)");let u=`
${i} ${Ne.failed()}${l}:
Details: ${a}
${Ne.expectedValue()}${n}
${Ne.actualValue()}${s}
`,m=z.makeDiv(void 0);m.innerHTML=u,h&&m.getElementsByClassName("jo_junitLink")[0].addEventListener("click",()=>{this.main.showProgramPosition(e.module.file,h)}),this.assertionResults.push({state:"failed",messageHtmlElement:m})}}class Ah{constructor(t,e,i,n,s){r(this,"children",[]);r(this,"treeviewNode");r(this,"testProgress",{overall:0,passed:0,failed:0,classIdentifier:"",methodIdentifier:"",children:[]});r(this,"assertionResults",[]);var a,l;this.testrunner=t,this.parent=e,this.moduleManager=i,this.klass=n,this.method=s,this.testProgress.classIdentifier=((a=this.klass)==null?void 0:a.identifier)||"",this.testProgress.methodIdentifier=((l=this.method)==null?void 0:l.identifier)||"",this.treeviewNode=new Fd(t.testTreeview,!this.method,"","img_test-start",this,e),this.treeviewNode.onIconClicked=h=>{t.clearOutput(),h==null||h.runTests()},this.treeviewNode.onClickHandler=()=>{this.method?this.jumpToMethod(this.method):this.klass&&this.testrunner.main.showProgramPosition(this.klass.module.file,this.klass.identifierRange)},this.addChildren(),this.setCaption()}jumpToMethod(t){this.method&&this.testrunner.main.showProgramPosition(this.method.module.file,this.method.identifierRange)}addChildren(){var t;if(!this.method){if(this.klass){for(let e of this.klass.getOwnMethods().filter(i=>{var n;return!i.isConstructor&&i.hasAnnotation("Test")&&((n=i.returnParameterType)==null?void 0:n.identifier)=="void"&&i.parameters.length==0})){let i=new Ah(this.testrunner,this,void 0,void 0,e);this.testProgress.children.push(i.testProgress),this.children.push(i)}return}if((t=this.moduleManager)!=null&&t.getModules()){for(let e of this.moduleManager.getModules())for(let i of e.types.filter(n=>n instanceof Le))if(i.getOwnMethods().filter(s=>{var a;return!s.isConstructor&&s.hasAnnotation("Test")&&((a=s.returnParameterType)==null?void 0:a.identifier)=="void"&&s.parameters.length==0}).length>0){let s=new Ah(this.testrunner,this,void 0,i,void 0);this.testProgress.children.push(s.testProgress),this.children.push(s)}}}}setCaption(){let t="";this.method?t=`${this.method.identifier}`:this.klass?t=`${this.klass.identifier}`:t=Ne.allTests(),this.treeviewNode.renderCaptionAsHtml=!0,this.treeviewNode.caption=`${t}`,this.calculateTestProgress();let e=`${this.testProgress.passed}${this.testProgress.overall-this.testProgress.passed-this.testProgress.failed}${this.testProgress.failed}`;this.treeviewNode.setRightPartOfCaptionHtml(e)}async runTests(t){let e=!t;if(e&&(this.reset(),this.calculateTestProgress(),this.testrunner.progressbar.showProgress(this.testProgress.overall,this.testProgress.passed,this.testProgress.failed)),this.method)this.treeviewNode.setSelected(!0),this.treeviewNode.scrollIntoView(),await this.runSingleTest(this.method),t&&t(this.testProgress.passed>0),this.setCaption(),e&&this.testrunner.progressbar.showProgress(this.testProgress.overall,this.testProgress.passed,this.testProgress.failed);else for(let n of this.children)await n.runTests(s=>{this.setCaption(),e?this.testrunner.progressbar.showProgress(this.testProgress.overall,this.testProgress.passed,this.testProgress.failed):t&&t(s)});let i=this.parent;for(;i!=null;)i.setCaption(),i=i.parent}async runSingleTest(t){return new Promise((i,n)=>{let s=new Vv(this.testrunner.main),a=this.testrunner.main.getInterpreter();a.attachAssertionObserver(s);let l=a.scheduler.initJUnitTestMethodAndReturnMainThread(a.executable,t,()=>{let h=s.assertionResults;if(this.testrunner.eraseExecutingTestCaption(),(l==null?void 0:l.state)==F.terminatedWithException){let u=z.makeDiv(void 0);if(u.innerHTML=`
Test exited with exception:
`,l.exception){let m=Gh.getHtmlWithLinks(l.exception,l.stackTrace,this.testrunner.main);m.classList.add("jo_junitFailBlock"),u.append(m)}h.push({state:"failed",messageHtmlElement:u}),h.push()}this.evaluateAssertionResults(h),i()});if(!l){i(),this.testrunner.printError("Error: couldn't get main tread.");return}this.method&&this.testrunner.printExecutingTestCaption(this.method),a.setState(ie.paused),l.state=F.running,a.start()})}evaluateAssertionResults(t){t.length==0?this.testProgress.passed++:(this.testProgress.failed++,this.assertionResults=t),this.printResults(),this.setCaption()}printResults(){var t,e;if(this.method){let i=Ne.executingTestMethod(this.method.classEnumInterface.identifier,this.method.identifier);this.assertionResults.length==0?i+='':i+='',this.testrunner.printLine(i,"jo_junitReportFirstLine").getElementsByClassName("jo_junitLink")[0].addEventListener("click",()=>{this.method&&this.jumpToMethod(this.method)});for(let a of this.assertionResults)this.testrunner.printResult(a)}else{this.klass?this.testrunner.printLine(Ne.runningAllTestsOfClass(this.klass.identifier),"jo_junitCaption"):this.testrunner.printLine(Ne.runningAllTestsOfWorkspace(((e=(t=this.moduleManager)==null?void 0:t.workspace)==null?void 0:e.getIdentifier())||"---"),"jo_junitCaption");for(let i of this.children)i.printResults()}}calculateTestProgress(){this.method?this.testProgress.overall=1:(this.testProgress.passed=0,this.testProgress.failed=0,this.testProgress.overall=0,this.children.forEach(t=>{t.calculateTestProgress(),this.testProgress.overall+=t.testProgress.overall,this.testProgress.passed+=t.testProgress.passed,this.testProgress.failed+=t.testProgress.failed}))}reset(){this.testProgress.overall=0,this.testProgress.passed=0,this.testProgress.failed=0,this.children.forEach(t=>t.reset())}}const dp="data:image/gif;base64,R0lGODlhEAAQAPQAAAAAANDQ0AQEBKKiomNjY8vLy7CwsCAgIEZGRr29vW9vb3x8fBUVFVNTUy0tLZWVlYmJiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAkKAAAALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkECQoAAAAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkECQoAAAAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAkKAAAALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAkKAAAALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA==";class _v{constructor(t){r(this,"mainDiv");r(this,"textDiv");r(this,"barDiv");r(this,"graphicDiv");this.mainDiv=z.makeDiv(t,"jo_junitProgressbarMain");let e=z.makeDiv(this.mainDiv,"jo_junitProgressbarBarOuter");this.barDiv=z.makeDiv(e,"jo_junitProgressbarBarInner"),this.textDiv=z.makeDiv(e,"jo_junitProgressbarText"),this.graphicDiv=z.makeDiv(e,"jo_junitProgressbarGraphic"),this.graphicDiv.innerHTML=``}hide(){this.mainDiv.style.display="none"}show(){this.mainDiv.style.display="block"}showProgress(t,e,i){this.mainDiv.style.display="block";let n=Math.round((e+i)/t*100);i>0?this.barDiv.style.backgroundColor="#ed2f2f4c":this.barDiv.style.backgroundColor="#21ff294c",this.barDiv.style.width=n+"%";let s=`${n} % (${e}${t-e-i}${i})`;this.graphicDiv.style.display=n<100?"block":"none",this.textDiv.innerHTML=s}}class zv{constructor(t,e){r(this,"decorationInfoList",[]);r(this,"mouseDownHandler",new Map);r(this,"mainDiv");r(this,"outputDiv");r(this,"rightDiv");r(this,"testTreeview");r(this,"executingTestDiv");r(this,"progressbar");r(this,"rootEntry");this.main=t,this.registerHandler(),this.initGUI(e)}initGUI(t){if(this.mainDiv)return;this.mainDiv=z.makeDiv(t,"jo_junitTestrunnerMain");let e=z.makeDiv(this.mainDiv,"jo_junitTestrunnerLeft");this.rightDiv=z.makeDiv(this.mainDiv,"jo_junitTestrunnerRight"),this.progressbar=new _v(this.rightDiv),this.outputDiv=z.makeDiv(this.rightDiv,"jo_junitTestrunnerOutput","jo_scrollable"),this.testTreeview=new li(e,{captionLine:{enabled:!1},initialExpandCollapseState:"expanded",buttonAddFolders:!1,buttonAddElements:!1,withDeleteButtons:!1,isDragAndDropSource:!1,contextMenu:{},withSelection:!0,orderBy:"comparator"}),this.testTreeview.contextMenuProvider=(i,n)=>[{caption:i.children.length>0?"Tests starten":"Test starten",callback:(s,a)=>{s.runTests()}}],new ss(e,!1,!1,()=>{})}registerHandler(){this.main.getActionManager().registerAction("interpreter.startTests",[],Ne.ExecuteAllTestsInWorkspace(),e=>{this.executeAllTests()});let t=this.main.getMainEditor();t.onMouseDown(e=>{var s;if(e.target.type!=Q.MouseTargetType.GUTTER_LINE_DECORATIONS)return;let i=t.getModel(),n=(s=this.main.getCurrentWorkspace())==null?void 0:s.getModuleForMonacoModel(i);n&&this.onMarginMouseDown(n,e.target.position.lineNumber)}),this.main.getInterpreter().eventManager.on("afterExcecutableInitialized",this.onAfterExecutableInitialized,this)}onMarginMouseDown(t,e){let i=this.mouseDownHandler.get(t);if(i){let n=i.get(e);n&&n()}}onAfterExecutableInitialized(t){t instanceof El&&(this.markTestsInEditor(t),this.testTreeview.clear(),this.rootEntry=new Ah(this,void 0,t.getModuleManager(),void 0,void 0))}markTestsInEditor(t){if(this.decorationInfoList.forEach(e=>{e.model.isDisposed()||e.model.deltaDecorations(e.decorations,[])}),this.decorationInfoList=[],this.mouseDownHandler.clear(),t){let e=t.getTestMethods(),i=0;if(e.forEach((n,s)=>i+=n.length),i==0){let n=Ne.noTestsAvailableExampleProgram();Q.colorize(n,Re.Java.monacoLanguageSelector,{}).then(s=>{this.outputDiv.setHTMLUnsafe(Ne.noTestsAvailableHtml(s))})}else this.outputDiv.setHTMLUnsafe(Ne.testsFound(i));e.forEach((n,s)=>{let a=[],l=s.module.file;if(!(l instanceof Je))return;let h=l.getMonacoModel();if(!h)return;let u=s.getAnnotation("Test");u&&a.push(this.getDecoration(!1,s.module,u.range.startLineNumber,"Alle JUnit-Tests der Klasse ausführen",()=>{this.executeAllTestsOfClass(s)}));for(let m of n){let g=m.getAnnotation("Test");g&&a.push(this.getDecoration(!1,s.module,g==null?void 0:g.range.startLineNumber,"Diesen JUnit-Test ausführen",()=>{this.executeTestMethod(m)}))}this.decorationInfoList.push({model:h,decorations:h.deltaDecorations([],a)})})}}getDecoration(t,e,i,n,s){let a=this.mouseDownHandler.get(e);return a||(a=new Map,this.mouseDownHandler.set(e,a)),a.set(i,s),{range:{startLineNumber:i,endLineNumber:i,startColumn:1,endColumn:1},options:{marginClassName:"jo_margin_start_test",stickiness:Q.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges}}}printLine(t,e){let i=z.makeDiv(this.outputDiv,e);return i.innerHTML=t,i}printResult(t){t.messageHtmlElement&&this.outputDiv.appendChild(t.messageHtmlElement)}printExecutingTestCaption(t){this.executingTestDiv=z.makeDiv(this.outputDiv),this.executingTestDiv.style.marginTop="5px",this.executingTestDiv.innerHTML=Ne.executingTestMethod(t.classEnumInterface.identifier,t.identifier)+``}eraseExecutingTestCaption(){var t;(t=this.executingTestDiv)==null||t.remove()}printError(t){let e=z.makeDiv(this.outputDiv);e.innerHTML=Ne.couldntGetMainThread()}clearOutput(){this.outputDiv.innerHTML=""}findTreeviewEntry(t,e){var i,n,s;return e?(i=this.testTreeview.nodes.find(a=>{var l;return((l=a.externalObject)==null?void 0:l.method)==e}))==null?void 0:i.externalObject:t?(n=this.testTreeview.nodes.find(a=>{var l;return((l=a.externalObject)==null?void 0:l.klass)==t}))==null?void 0:n.externalObject:(s=this.testTreeview.nodes.find(a=>{var l,h;return!((l=a.externalObject)!=null&&l.klass)&&!((h=a.externalObject)!=null&&h.method)}))==null?void 0:s.externalObject}async executeAllTests(){var e;let t=(e=this.testTreeview.nodes.find(i=>{var n;return(n=i.getParent())==null?void 0:n.isRootNode()}))==null?void 0:e.externalObject;await this.executeTests(t)}async executeAllTestsOfClass(t){let e=this.findTreeviewEntry(t,void 0)||void 0;await this.executeTests(e)}async executeTestMethod(t){let e=this.findTreeviewEntry(void 0,t)||void 0;await this.executeTests(e)}async executeTests(t){this.main.getInterpreter().printManager.clear(),this.main.showJUnitDiv(),t&&(t.treeviewNode.setSelected(!0),this.clearOutput(),await(t==null?void 0:t.runTests())),this.main.getInterpreter().eventManager.fire("done")}clearTree(){var t;(t=this.testTreeview)==null||t.clear()}getProgress(){var t;return(t=this.rootEntry)==null?void 0:t.testProgress}}const ua=class ua extends _g{constructor(){super(Re.Java.name,Re.Java.fileEndingWithOutDot,Re.Java.monacoLanguageSelector);r(this,"jUnitTestrunner");r(this,"libraryManager",new vh);this.registerLanguageAtMonacoEditor(),this.registerProviders()}static getInstance(){return ua.instance||(ua.instance=new ua),ua.instance}registerMain(e,i){var l;let n=new sf(e,i),s=new Fv(e,n),a=e.getSettings();this.registerCompiler(e,n),this.registerRepl(e,s),this.registerSettings(e,a),$v.configureEditor(e.getMainEditor()),new Dv(e),(l=e.getBottomDiv())!=null&&l.jUnitTab.bodyDiv&&(this.jUnitTestrunner=new zv(e,e.getBottomDiv().jUnitTab.bodyDiv))}registerProviders(){new Sv(this),new kv(this),new Ev(this),new Cv(this),new Iv(this),new Gl(this),new Tv(this),new sy(this),new xv(this),P.registerCodeActionProvider(this.monacoLanguageSelector,new jv(this))}registerLanguageAtMonacoEditor(){P.register({id:"myJava",extensions:[".learnJava"]});let e={indentationRules:{decreaseIndentPattern:/^(.*\*\/)?\s*\}.*$/,increaseIndentPattern:/^.*\{[^}"']*$/},onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:P.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:P.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:P.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:P.IndentAction.None,removeText:1}},{beforeText:/^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/,action:{indentAction:P.IndentAction.None,removeText:1}}],wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],colorizedBracketPairs:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},i={ignoreCase:!1,defaultToken:"",tokenPostfix:".java",keywords:["abstract","continue","new","switch","assert","default","goto","package","synchronized","private","this","implements","protected","throw","import","public","throws","case","instanceof","return","transient","catch","extends","try","final","static","finally","strictfp","volatile","const","native","super","true","false","null"],print:["print","println"],statements:["for","while","if","then","else","do","break","continue"],types:["int","boolean","char","float","double","long","void","byte","short","class","enum","interface","var"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/0[xX](@hexdigits)[Ll]?/,"number.hex"],[/0(@octaldigits)[Ll]?/,"number.octal"],[/0[bB](@binarydigits)[Ll]?/,"number.binary"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"""/,"string","@string"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@javadoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],javadoc:[[/[^\/*]+/,"comment.doc"],[/\/\*/,"comment.doc.invalid"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"""/,"string","@pop"],[/"/,"string","@pop"]]}};P.setLanguageConfiguration("myJava",e),P.setMonarchTokensProvider("myJava",i)}enable(e){var s,a,l,h,u,m;let i=e.getBottomDiv();i&&((s=i.jUnitTab)==null||s.setVisible(!0),(a=i.disassemblerTab)==null||a.setVisible(!0),(h=(l=i.console)==null?void 0:l.tab)==null||h.setVisible(!0));let n=e.getRightDiv();n&&((u=n.classDiagramTab)==null||u.setVisible(!0),(m=n.memoryTab)==null||m.setVisible(!1)),e.getInterpreter().showTriangleAtProgramPointer=!0,setTimeout(()=>{e.getActionManager().setVisible("interpreter.stepOver",!0),e.getActionManager().setVisible("interpreter.stepInto",!0),e.getActionManager().setVisible("interpreter.stepOut",!0),e.getActionManager().setVisible("interpreter.restart",!0),e.getActionManager().setVisible("interpreter.startTests",!0)},800)}disable(e){var s,a,l,h,u;let i=e.getBottomDiv();i&&((s=i.jUnitTab)==null||s.setVisible(!1),(a=i.disassemblerTab)==null||a.setVisible(!1),(h=(l=i.console)==null?void 0:l.tab)==null||h.setVisible(!1));let n=e.getRightDiv();n&&((u=n.classDiagramTab)==null||u.setVisible(!1))}beforeWorkspaceChange(e){this.jUnitTestrunner.clearOutput(),this.jUnitTestrunner.clearTree()}getLibraryManager(){return this.libraryManager}getDebuggerType(){return"java"}setupWorkspaceSettings(e,i,n,s){let a=this.getLibraryManager(),l=s.settings.libraries;if(a.getLibrariesData().length>0){z.makeDiv(n,"dialog-subheading","languagesettings").textContent=Fs.usedLibraries();for(let h of a.getLibrariesData()){let u=e.addCheckbox(h.identifier+" ("+h.description+")",l.indexOf(h.id)>=0,h.id,n);h.checkboxState=u}}}retrieveWorkspaceSettings(e,i,n){let s=n.settings.libraries,a=this.getLibraryManager(),l=!1,h=[];for(let u of a.getLibrariesData()){let m=u.checkboxState();l=l||m!=s.indexOf(u.id)>=0,m&&h.push(u.id)}return l&&(n.settings.libraries=h,n.saved=!1,n.getFiles().forEach(u=>e.getCompiler().setFileDirty(u)),e.getCompiler().triggerCompile(),n.setLibraries(e.getCompiler())),l}getTestRunner(){return this.jUnitTestrunner}};r(ua,"instance");let Hl=ua;class Wv{addLibrariesToCompiler(t){}addLibraries(...t){}getLibrariesData(){return[]}}const fe=class fe{};r(fe,"UnexpectedToken",t=>d({de:`Unerwartetes Token: ${t}`,en:`Unexpected token: ${t}`,fr:`Token inattendu : ${t}`})),r(fe,"LabelAlreadyDefined",t=>d({de:`Label "${t}" ist bereits definiert.`,en:`Label "${t}" is already defined.`,fr:`Le label "${t}" est déjà défini.`})),r(fe,"NumberExpected",()=>d({de:"Hier wird eine Zahl erwartet.",en:"Number expected here.",fr:"Un nombre est attendu ici."})),r(fe,"AddressOutOfRange",(t,e,i)=>d({de:`Die Adresse ${t} liegt außerhalb des gültigen Bereichs von ${e} bis ${i}.`,en:`The address ${t} is out of range. Valid range is from ${e} to ${i}.`,fr:`L'adresse ${t} est hors de portée. La plage valide est de ${e} à ${i}.`})),r(fe,"ValueOutOfRange",(t,e,i)=>d({de:`Der Wert ${t} liegt außerhalb des gültigen Bereichs von ${e} bis ${i}.`,en:`The value ${t} is out of range. Valid range is from ${e} to ${i}.`,fr:`La valeur ${t} est hors de portée. La plage valide est de ${e} à ${i}.`})),r(fe,"NumberOutOfRange",(t,e,i)=>d({de:`Die Zahl ${t} liegt außerhalb des gültigen Bereichs von ${e} bis ${i}.`,en:`The number ${t} is out of range. Valid range is from ${e} to ${i}.`,fr:`Le nombre ${t} est hors de portée. La plage valide est de ${e} à ${i}.`})),r(fe,"LineBreakOrEndOfSourcecodeExpected",()=>d({de:"Hier wird ein Zeilenumbruch oder das Ende des Quellcodes erwartet.",en:"Line break or end of source code expected here.",fr:"Un saut de ligne ou la fin du code source est attendu ici."})),r(fe,"TokensExpected",t=>d({de:`Hier wird eines der folgenden Tokens erwartet: ${t.join(", ")}`,en:`Token expected here: ${t.join(", ")}`,fr:`Un des tokens suivants est attendu ici: ${t.join(", ")}`})),r(fe,"UnresolvedLabel",t=>d({de:`Das Label "${t}" ist nirgends definiert. Zur Definition schreiben Sie "${t}:" zu Beginn der Zeile, auf die das Label verweisen soll.`,en:`The label "${t}" is not defined. To define it, write "${t}:" at the beginning of the line you want the label to point to.`,fr:`Le label "${t}" n'est défini nulle part. Pour le définir, écrivez "${t}:" au début de la ligne à laquelle vous voulez que le label fasse référence.`})),r(fe,"StatementUnknown",t=>d({de:`Unbekannte Anweisung: ${t}`,en:`Unknown statement: ${t}`,fr:`Instruction inconnue : ${t}`})),r(fe,"MemoryFrom",t=>d({de:`Speicherbelegung ab ${t}: `,en:`Memory from ${t}: `,fr:`Mémoire à partir de ${t}: `})),r(fe,"AssertionExample",()=>d({de:'Hier ein Beispiel für die Syntax einer Assertion: .assert { 100: [42, 38], 110: 20, N: 1, Z: 0, A: 120, message: "incorrect cpu state after some instruction" }',en:'Here is an example of the syntax of an assertion: .assert { 100: [42, 38], 110: 20, N: 1, Z: 0, A: 120, message: "incorrect cpu state after some instruction" }',fr:`Voici un exemple de la syntaxe d'une assertion : .assert { 100: [42, 38], 110: 20, N: 1, Z: 0, A: 120, message: "incorrect cpu state after some instruction" }`})),r(fe,"TokenExpectedInAssertion",t=>d({de:`An dieser Stelle in einer Assertion wird das Zeichen ${t} erwartet. ${fe.AssertionExample()}`,en:`At this position in an assertion, the character ${t} is expected. ${fe.AssertionExample()}`,fr:`À cette position dans une assertion, le caractère ${t} est attendu. ${fe.AssertionExample()}`})),r(fe,"UnknownFlagInAssertion",(t,e)=>d({de:`Unbekannte Flagge in Assertion: ${t}. Gültige Flaggen sind: ${e.join(", ")}. ${fe.AssertionExample()}`,en:`Unknown flag in assertion: ${t}. Valid flags are: ${e.join(", ")}. ${fe.AssertionExample()}`,fr:`Drapeau inconnu dans l'assertion : ${t}. Les drapeaux valides sont : ${e.join(", ")}. ${fe.AssertionExample()}`})),r(fe,"UnknownRegisterInAssertion",(t,e)=>d({de:`Unbekanntes Register in Assertion: ${t}. Gültige Register sind: ${e.join(", ")}. ${fe.AssertionExample()}`,en:`Unknown register in assertion: ${t}. Valid registers are: ${e.join(", ")}. ${fe.AssertionExample()}`,fr:`Registre inconnu dans l'assertion : ${t}. Les registres valides sont : ${e.join(", ")}. ${fe.AssertionExample()}`})),r(fe,"ZeroOrOneExpectedInAssertion",t=>d({de:`Nach der Flagge ${t} in einer Assertion wird eine 0 oder 1 erwartet. ${fe.AssertionExample()}`,en:`After the flag ${t} in an assertion, a 0 or 1 is expected. ${fe.AssertionExample()}`,fr:`Après le drapeau ${t} dans une assertion, un 0 ou un 1 est attendu. ${fe.AssertionExample()}`})),r(fe,"NumberExpectedAfterRegisterInAssertion",t=>d({de:`Nach dem Register ${t} in einer Assertion wird eine Zahl erwartet. ${fe.AssertionExample()}`,en:`After the register ${t} in an assertion, a number is expected. ${fe.AssertionExample()}`,fr:`Après le registre ${t} dans une assertion, un nombre est attendu. ${fe.AssertionExample()}`})),r(fe,"AssertionFailed",t=>d({de:`Assertion fehlgeschlagen: ${t}`,en:`Assertion failed: ${t}`,fr:`Assertion échouée : ${t}`})),r(fe,"at",()=>d({de:"bei: ",en:"at ",fr:"à "})),r(fe,"Expected",()=>d({de:"Erwartet: ",en:"Expected: ",fr:"Attendu : "})),r(fe,"Actual",()=>d({de:"Tatsächlich: ",en:"Actual: ",fr:"Réel : "}));let Te=fe;const wr=class wr{constructor(t,e){r(this,"breakpointAddresses",new Map);r(this,"codeLocationsField");this.assemblyParserResult=t,this.main=e,this.initCodeLocationsField()}initCodeLocationsField(){let t=this.assemblyParserResult.codeParts,e=0;for(const i of t){let n=i.offset+i.codeOrData.length;n+1>e&&(e=n+1)}this.codeLocationsField=new Uint8Array(e),this.codeLocationsField.fill(wr.MEM_FREE);for(const i of t)for(let n=0;n0)return this.assemblyParserResult.codeParts[0].offset}getErrors(){return this.assemblyParserResult?this.assemblyParserResult.errors:[]}hasMainProgram(){return typeof this.assemblyParserResult.startAddress=="number"}getCurrentPosition(){let t=this.getProgramCounter(),e=this.assemblyParserResult.sourceMap.get(t);if(e)return{programOrmoduleOrFile:this.assemblyParserResult.file,range:{startLineNumber:e.lineNumber,startColumn:e.column,endLineNumber:e.lineNumber,endColumn:e.column+1}}}setBreakpoint(t,e){this.breakpointAddresses.set(t,{isOneTime:e,programCounter:t})}removeBreakpoint(t){this.breakpointAddresses.delete(t)}setBreakpointAtFirstProgramStatement(t){let e=this.assemblyParserResult.startAddress;typeof e=="number"&&this.setBreakpoint(e,t)}setBreakpointAtLine(t,e){this.assemblyParserResult.sourceMap.forEach((i,n)=>{if(i.lineNumber===t){this.setBreakpoint(n,e);return}})}clearBreakpointAtLine(t){this.assemblyParserResult.sourceMap.forEach((e,i)=>{e.lineNumber===t&&this.removeBreakpoint(i)})}breakpointReachedShouldIExecute(t,e){return e.haltAtNextBreakpoint?(e.state=F.stoppedAtBreakpoint,t.isOneTime?this.removeBreakpoint(t.programCounter):e.haltAtNextBreakpoint=!1,!1):(e.haltAtNextBreakpoint=!0,!0)}positionIsInsideComment(t){for(const e of this.assemblyParserResult.commentRanges)if(U.containsPosition(e,t))return!0;return!1}getRangeOfCurrentInstruction(){let t=this.getProgramCounter(),e=this.assemblyParserResult.sourceMap.get(t);if(e)return{startLineNumber:e.lineNumber,startColumn:e.column,endLineNumber:e.lineNumber,endColumn:e.column+1}}assert(t){var n,s;let e=this.assemblyParserResult.assertionMap.get(this.getProgramCounter()-1);if(!e||e.assertionParts.length===0)return;let i=!0;for(let a of e.assertionParts){switch(a.type){case"flag":let l=this.getFlags(),h=this.flagNamesShort.findIndex(A=>A.toLocaleLowerCase()===a.shortFlagName.toLocaleLowerCase());l[this.flagNames[h]]!==a.flagValue&&(i=!1);break;case"memory":let m=this.getMemory().dump();for(let A=0;AA.toLocaleLowerCase()===a.shortRegisterName.toLocaleLowerCase());g[this.registerNames[f]]!==a.registerValue&&(i=!1);break}if(!i)break}if(!i){let a="{ "+e.assertionParts.map(h=>{switch(h.type){case"flag":return h.shortFlagName+": "+(h.flagValue?"1":"0");case"memory":return h.startAddress+": ["+h.expectedMemoryValues.join(", ")+"]";case"register":return h.shortRegisterName+": "+h.registerValue}}).join(", ")+" }",l="{ "+e.assertionParts.map(h=>{switch(h.type){case"flag":let u=this.getFlags(),m=this.flagNamesShort.findIndex(w=>w.toLocaleLowerCase()===h.shortFlagName.toLocaleLowerCase()),g=u[this.flagNames[m]];return h.shortFlagName.toUpperCase()+": "+(g?"1":"0");case"memory":let f=this.getMemory().dump();return h.startAddress+": ["+f.slice(h.startAddress,h.startAddress+h.expectedMemoryValues.length).join(", ")+"]";case"register":let b=this.getRegisterValues(),A=this.registerNamesShort.findIndex(w=>w.toLocaleLowerCase()===h.shortRegisterName.toLocaleLowerCase()),C=b[this.registerNames[A]];return h.shortRegisterName+": "+C}}).join(", ")+" }";for(let h of t.assertionObserverList)h.notifyOnAssemblyAssertion(t.scheduler.getCurrentThread(),null,a,l,e.message??"");t.getMain()&&(this.printAssertionFailureInOutputTab(t.getMain(),a,l,e.message??""),(s=(n=t.getMain().getRightDiv())==null?void 0:n.outputTab)==null||s.show())}}printAssertionFailureInOutputTab(t,e,i,n){let s=z.makeDiv(void 0,"jo_exceptionPrinter_outer"),a=z.makeDiv(s,"jo_exceptionPrinter_heading"),l=z.makeSpan(a),h=z.makeSpan(a);l.textContent=Te.AssertionFailed(""),h.textContent=n,h.style.fontStyle="italic",h.style.marginLeft="5px";let u=this.assemblyParserResult.sourceMap.get(this.getProgramCounter()-1);if(u){let g=z.makeDiv(s,"jo_exceptionPrinter_stacktrace");z.makeSpan(g).textContent="at ",z.makeSpan(g,"jo_stacktraceLink").textContent=`File ${this.assemblyParserResult.file.name} (${u.lineNumber}:${u.column})`,g.addEventListener("click",()=>{t.showProgramPosition(this.assemblyParserResult.file,{startLineNumber:u.lineNumber,startColumn:u.column,endLineNumber:u.lineNumber,endColumn:u.column+1})})}let m=z.makeDiv(s,"jo_exceptionPrinter_stacktrace");z.makeSpan(m).textContent=Te.Expected(),z.makeSpan(m,"jo_junitExpected").textContent=e,z.makeElement(m,"br"),z.makeSpan(m).textContent=Te.Actual(),z.makeSpan(m,"jo_junitActual").textContent=i,m.style.marginBottom="5px",t.getInterpreter().printManager.printHtmlElement(s)}getCompletionItemRanges(){return this.assemblyParserResult.completionItemRanges}};r(wr,"MEM_FREE",0),r(wr,"MEM_CODE",1),r(wr,"MEM_DATA",2);let Nm=wr;class Nv{}class qv extends Nv{constructor(e,i=1048576){super();r(this,"memory",[]);this.maximumSize=i,this.memory=new Array(e).fill(0)}read(e){if(e<0||e>=this.memory.length)throw new Error(`Memory read error: Address ${e} out of bounds (valid adresses: 0-${this.memory.length-1})`);return this.memory[e]}readIndirect(e){if(e<0||e>=this.memory.length)throw new Error(`Memory read error: Address ${e} out of bounds (valid adresses: 0-${this.memory.length-1})`);let i=this.memory[e];if(i<0||i>=this.memory.length)throw new Error(`Memory read error: Indirect address ${i} (from address ${e}) out of bounds (valid adresses: 0-${this.memory.length-1})`);return this.memory[i]}writeIndirect(e,i){if(e<0||e>=this.memory.length)throw new Error(`Memory write error: Address ${e} out of bounds (valid adresses: 0-${this.memory.length-1})`);let n=this.memory[e];if(n<0||n>=this.memory.length)throw new Error(`Memory write error: Indirect address ${n} (from address ${e}) out of bounds (valid adresses: 0-${this.memory.length-1})`);this.memory[n]=(Math.floor(i)+32768)%65536-32768}write(e,i){if(e<0||e>=this.memory.length)throw new Error(`Memory write error: Address ${e} out of bounds (valid adresses: 0-${this.memory.length-1})`);this.memory[e]=(Math.floor(i)+32768)%65536-32768}dump(){return this.memory}size(){return this.memory.length}clear(){this.memory.fill(0)}loadProgram(e){let i=0;for(let n of e)i=Math.max(i,n.offset+n.codeOrData.length);if(i>this.maximumSize)throw new Error(`Program load error: Program size (${i} words) exceeds maximum memory size (0x${this.maximumSize.toString(16)}) words).`);i>this.memory.length&&(this.memory=new Array(i)),this.memory.fill(0);for(let n of e)for(let s=0;s(c[c.load=0]="load",c[c.store=1]="store",c[c.add=2]="add",c[c.sub=3]="sub",c[c.mul=4]="mul",c[c.div=5]="div",c[c.mod=6]="mod",c[c.cmp=7]="cmp",c[c.and=8]="and",c[c.or=9]="or",c[c.xor=10]="xor",c[c.shr=11]="shr",c[c.shl=12]="shl",c[c.loadi=13]="loadi",c[c.storei=14]="storei",c[c.addi=15]="addi",c[c.subi=16]="subi",c[c.muli=17]="muli",c[c.divi=18]="divi",c[c.modi=19]="modi",c[c.andi=20]="andi",c[c.ori=21]="ori",c[c.xori=22]="xori",c[c.cmpi=23]="cmpi",c[c.not=24]="not",c[c.shri=25]="shri",c[c.shli=26]="shli",c[c.jmp=27]="jmp",c[c.jeq=28]="jeq",c[c.jne=29]="jne",c[c.jgt=30]="jgt",c[c.jge=31]="jge",c[c.jlt=32]="jlt",c[c.jle=33]="jle",c[c.jmpp=34]="jmpp",c[c.jmpn=35]="jmpn",c[c.jmpz=36]="jmpz",c[c.jmpv=37]="jmpv",c[c.jmpc=38]="jmpc",c[c.jmpnp=39]="jmpnp",c[c.jmpnn=40]="jmpnn",c[c.jmpnz=41]="jmpnz",c[c.jmpnv=42]="jmpnv",c[c.jmpnc=43]="jmpnc",c[c.jsr=44]="jsr",c[c.rts=45]="rts",c[c.rsv=46]="rsv",c[c.rel=47]="rel",c[c.push=48]="push",c[c.pop=49]="pop",c[c.call=50]="call",c[c.return=51]="return",c[c.hold=52]="hold",c[c.halt=53]="halt",c[c.word=54]="word",c[c.assert=55]="assert",c[c.identifier=56]="identifier",c[c.number=57]="number",c[c.whitespace=58]="whitespace",c[c.comment=59]="comment",c[c.invalid=60]="invalid",c[c.endOfSourcecode=61]="endOfSourcecode",c[c.lineBreak=62]="lineBreak",c[c.leftBracket=63]="leftBracket",c[c.rightBracket=64]="rightBracket",c[c.leftCurlyBracket=65]="leftCurlyBracket",c[c.rightCurlyBracket=66]="rightCurlyBracket",c[c.leftSquareBracket=67]="leftSquareBracket",c[c.rightSquareBracket=68]="rightSquareBracket",c[c.colon=69]="colon",c[c.comma=70]="comma",c[c.hash=71]="hash",c[c.dot=72]="dot",c[c.stringLiteral=73]="stringLiteral",c))(I||{}),Rv={69:":",70:",",71:"#",72:".",62:"\\n",63:"(",64:")",65:"{",66:"}",67:"[",68:"]"};class Gv{constructor(){r(this,"startAddress");r(this,"initialStackPointer");r(this,"codeParts",[]);r(this,"currentCodePart");r(this,"errors",[]);r(this,"sourceMap");r(this,"instructionMap");r(this,"assertionMap");r(this,"tokens");r(this,"tokenIndex",0);r(this,"labels");r(this,"labelMap");r(this,"hoverEntries");r(this,"completionItemRanges");r(this,"programCounterRelative")}initBeforeParsing(t){this.tokens=t,this.tokenIndex=0,this.errors=[],this.codeParts=[{offset:150,codeOrData:[],isData:[]}],this.currentCodePart=this.codeParts[0],this.sourceMap=new Map,this.instructionMap=new Map,this.startAddress=void 0,this.initialStackPointer=void 0,this.programCounterRelative=0,this.labels=new Map,this.labelMap=new Map,this.hoverEntries=new Map,this.assertionMap=new Map,this.completionItemRanges=[]}makeParserResult(t){return{file:t,startAddress:this.startAddress??150,initialStackPointer:this.initialStackPointer??150,codeParts:this.codeParts,errors:this.errors,sourceMap:this.sourceMap,instructionMap:this.instructionMap,labelMap:this.labelMap,labels:Array.from(this.labels.values()),hoverEntries:this.hoverEntries,assertionMap:this.assertionMap,commentRanges:[],completionItemRanges:this.completionItemRanges}}currentToken(){return this.tokens[this.tokenIndex]}next(){this.tokenIndexRv[i]||I[i])),"error",e.range),!1)}expectOneToken(t,e,i){let n=this.currentToken();return n.type!==t?(this.pushError(e,"error",n.range),!1):(i&&this.next(),!0)}isToken(...t){return t.includes(this.currentToken().type)}skip(...t){for(;t.includes(this.currentToken().type);)this.next()}isProgramEndReached(){return this.tokenIndex>=this.tokens.length-1}pushError(t,e,i,n){let s=n?{startLineNumber:i.startLineNumber,startColumn:i.startColumn,endLineNumber:n.endLineNumber,endColumn:n.endColumn}:i;this.errors.push({message:t,level:e,id:"",range:s})}resolveLabel(t){let e=t.value;if(this.currentToken().type!==I.colon){this.pushError(Te.StatementUnknown(e),"error",t.range);return}else this.next();let i=this.labels.get(e);if(i)if(typeof i.address=="number"){this.pushError(Te.LabelAlreadyDefined(e),"error",t.range);return}else{i.address=this.getProgramCounterAbsolute(),i.declaration=t.range;for(let n of i.unresolvedReferences){let s=n.codePart,a=this.addressToCellValues(i.address);for(let l=0;l=0&&i<=65535?!0:(this.pushError(Te.NumberOutOfRange(i,0,65535),"error",t.range),!1)}checkIfTokenIs16BitSignedNumber(t){if(t.type!==I.number)return this.pushError(Te.NumberExpected(),"error",t.range),!1;const e=t.value;return e>=-32768&&e<=32767?!0:(this.pushError(Te.NumberOutOfRange(e,-32768,32767),"error",t.range),!1)}addSourceMapEntry(t,e){let i=e!==void 0?e:this.getProgramCounterAbsolute();this.sourceMap.set(i,{lineNumber:t.startLineNumber,column:t.startColumn})}writeToMemory(t,e){Array.isArray(t)||(t=[t]);for(let i of t)this.currentCodePart.codeOrData[this.programCounterRelative]=i,this.currentCodePart.isData[this.programCounterRelative]=e,this.programCounterRelative++}getProgramCounterRelative(){return this.programCounterRelative}getProgramCounterAbsolute(){return this.currentCodePart.offset+this.programCounterRelative}setOrigin(t){var e;((e=this.currentCodePart)==null?void 0:e.codeOrData.length)===0?this.currentCodePart.offset=t:(this.currentCodePart={offset:t,codeOrData:[],isData:[]},this.codeParts.push(this.currentCodePart)),this.programCounterRelative=0}registerInstruction(t,e,i){let n=this.instructionMap.get(e.startLineNumber);n||(n=[],this.instructionMap.set(e.startLineNumber,n)),n.push({instruction:t,range:e,operands:i})}addHoverEntry(t,e){let i=this.hoverEntries.get(t.startLineNumber);i||(i=[],this.hoverEntries.set(t.startLineNumber,i)),i.push({range:t,text:e})}readTillBeginOfNextLine(){for(;this.currentToken().type!==I.lineBreak&&this.currentToken().type!==I.endOfSourcecode;)this.next()}parseAssertion(t){this.next();let e=this.currentToken().range;if(!this.expectOneToken(I.leftCurlyBracket,Te.TokenExpectedInAssertion("{"),!0)){this.readTillBeginOfNextLine();return}let i={assertionParts:[],message:"Assertion failed!"};for(this.skip(I.lineBreak);this.isToken(I.number,I.identifier,I.stringLiteral)&&(this.currentToken().type===I.number?this.parseMemoryAssertion(i):(""+this.currentToken().value).toLowerCase()==="message"?this.parseAssertionMessage(i):this.getFlagNamesShort().includes((""+this.currentToken().value).toLowerCase())?this.parseFlagAssertion(i):this.getRegisterNamesShort().includes((""+this.currentToken().value).toLowerCase())?this.parseRegisterAssertion(i):this.parseMemoryAssertion(i),this.skip(I.lineBreak),this.currentToken().type!==I.rightCurlyBracket);)this.expectOneToken(I.comma,Te.TokenExpectedInAssertion(","),!0)||this.readTillBeginOfNextLine(),this.skip(I.lineBreak);if(this.addSourceMapEntry(t.range),this.assertionMap.set(this.getProgramCounterAbsolute(),i),this.writeToMemory(this.getAssertionOpcode(),!1),this.addHoverEntry(t.range,S.AssertHoverComment()),this.completionItemRanges.push({range:U.plusRange(e,this.currentToken().range),withLabelCompletionAfterStatements:!1,withLabelCompletionAtLineStart:!0,withInstructionCompletion:!1,withDirectiveCompletion:!1,additionalCompletionItems:this.getAdditionalCompletionItemsRegistersAndFlags()}),!this.expectOneToken(I.rightCurlyBracket,Te.TokenExpectedInAssertion("}"),!0)){this.readTillBeginOfNextLine();return}}getAdditionalCompletionItemsRegistersAndFlags(){let t=[];for(let e of this.getRegisterNamesShort())t.push({label:e,insertText:e+": ",detail:"(register)"});for(let e of this.getFlagNamesShort())t.push({label:e,insertText:e+": ",detail:"(flag)"});return t}parseFlagAssertion(t){let e=this.currentToken().value.toLowerCase();if(!this.getFlagNamesShort().includes(e)){this.pushError(Te.UnknownFlagInAssertion(e,this.getFlagNamesShort()),"error",this.currentToken().range),this.readTillBeginOfNextLine();return}if(this.next(),!this.expectOneToken(I.colon,Te.TokenExpectedInAssertion(":"),!0)){this.readTillBeginOfNextLine();return}if(!this.isToken(I.number)||[0,1].indexOf(this.currentToken().value)===-1){this.pushError(Te.ZeroOrOneExpectedInAssertion(e),"error",this.currentToken().range),this.readTillBeginOfNextLine();return}let i=this.currentToken().value===1;t.assertionParts.push({type:"flag",shortFlagName:e,flagValue:i}),this.next()}parseRegisterAssertion(t){let e=this.currentToken().value.toLowerCase();if(!this.getRegisterNamesShort().some(n=>n.toLowerCase()===e)){this.pushError(Te.UnknownRegisterInAssertion(e,this.getRegisterNamesShort()),"error",this.currentToken().range),this.readTillBeginOfNextLine();return}if(this.next(),!this.expectOneToken(I.colon,Te.TokenExpectedInAssertion(":"),!0)){this.readTillBeginOfNextLine();return}if(!this.isToken(I.number)){this.pushError(Te.NumberExpectedAfterRegisterInAssertion(e),"error",this.currentToken().range),this.readTillBeginOfNextLine();return}let i=this.currentToken().value;t.assertionParts.push({type:"register",shortRegisterName:e,registerValue:i}),this.next()}parseAssertionMessage(t){if(this.next(),!this.expectOneToken(I.colon,Te.TokenExpectedInAssertion(":"),!0)){this.readTillBeginOfNextLine();return}if(!this.expectOneToken(I.stringLiteral,Te.TokenExpectedInAssertion("string literal"),!1)){this.readTillBeginOfNextLine();return}t.message=this.currentToken().value,this.next()}parseMemoryAssertion(t){let e=this.currentToken(),i={type:"memory",startAddress:void 0,range:e.range,expectedMemoryValues:[]};if(e.type===I.number?this.checkIfTokenIs16BitUnsignedNumber(e)&&(i.startAddress=e.value):e.type===I.identifier&&(i.startAddress=this.getLabelAddressAbsolute(e,void 0,i)),this.next(),!this.expectOneToken(I.colon,Te.TokenExpectedInAssertion(":"),!0)){this.readTillBeginOfNextLine();return}if(this.isToken(I.number)&&this.checkIfTokenIs16BitUnsignedNumber(this.currentToken())){let s=this.currentToken().value;this.next(),i.expectedMemoryValues.push(s),t.assertionParts.push(i);return}if(!this.expectOneToken(I.leftSquareBracket,Te.TokenExpectedInAssertion("["),!0)){this.readTillBeginOfNextLine();return}let n=[];for(;this.currentToken().type===I.number;){if(this.checkIfTokenIs16BitUnsignedNumber(this.currentToken()))n.push(this.currentToken().value);else{this.readTillBeginOfNextLine();return}if(this.next(),this.currentToken().type===I.comma)this.next();else break}if(!this.expectOneToken(I.rightSquareBracket,Te.TokenExpectedInAssertion("]"),!0)){this.readTillBeginOfNextLine();return}i.expectedMemoryValues=n,t.assertionParts.push(i)}}var Jo=[{tokenType:I.load,jumpType:"nojump",adressMode:"Address",OpCode:65,description:S.LoadAddress,parameterCount:1,exec:c=>(c.accumulator=c.memory.read(c.readAddressOperand()),!1)},{tokenType:I.store,jumpType:"nojump",adressMode:"Address",OpCode:66,description:S.StoreAddress,parameterCount:1,exec:c=>(c.memory.write(c.readAddressOperand(),c.accumulator),!1)},{tokenType:I.add,jumpType:"nojump",adressMode:"Address",OpCode:67,description:S.AddAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator+c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.sub,jumpType:"nojump",adressMode:"Address",OpCode:68,description:S.SubAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator-c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.mul,jumpType:"nojump",adressMode:"Address",OpCode:69,description:S.MulAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator*c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.div,jumpType:"nojump",adressMode:"Address",OpCode:70,description:S.DivAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator/c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.mod,jumpType:"nojump",adressMode:"Address",OpCode:71,description:S.ModAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator%c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.and,jumpType:"nojump",adressMode:"Address",OpCode:72,description:S.AndAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator&c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.or,jumpType:"nojump",adressMode:"Address",OpCode:73,description:S.OrAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator|c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.xor,jumpType:"nojump",adressMode:"Address",OpCode:74,description:S.XorAddress,parameterCount:1,exec:c=>(c.setAccu(c.accumulator^c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.shr,jumpType:"nojump",adressMode:"Address",OpCode:76,description:S.ShrAddress,parameterCount:1,exec:c=>(c.shr(c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.shl,jumpType:"nojump",adressMode:"Address",OpCode:77,description:S.ShlAddress,parameterCount:1,exec:c=>(c.shl(c.accumulator<(c.cmp(c.memory.read(c.readAddressOperand())),!1)},{tokenType:I.load,jumpType:"nojump",adressMode:"Indirect",OpCode:193,description:S.LoadIndirect,parameterCount:1,exec:c=>(c.accumulator=c.memory.readIndirect(c.readAddressOperand()),!1)},{tokenType:I.store,jumpType:"nojump",adressMode:"Indirect",OpCode:194,description:S.StoreIndirect,parameterCount:1,exec:c=>(c.memory.writeIndirect(c.readAddressOperand(),c.accumulator),!1)},{tokenType:I.add,jumpType:"nojump",adressMode:"Indirect",OpCode:195,description:S.AddIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator+c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.sub,jumpType:"nojump",adressMode:"Indirect",OpCode:196,description:S.SubIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator-c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.mul,jumpType:"nojump",adressMode:"Indirect",OpCode:197,description:S.MulIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator*c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.div,jumpType:"nojump",adressMode:"Indirect",OpCode:198,description:S.DivIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator/c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.mod,jumpType:"nojump",adressMode:"Indirect",OpCode:199,description:S.ModIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator%c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.and,jumpType:"nojump",adressMode:"Indirect",OpCode:200,description:S.AndIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator&c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.or,jumpType:"nojump",adressMode:"Indirect",OpCode:201,description:S.OrIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator|c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.xor,jumpType:"nojump",adressMode:"Indirect",OpCode:202,description:S.XorIndirect,parameterCount:1,exec:c=>(c.setAccu(c.accumulator^c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.cmp,jumpType:"nojump",adressMode:"Indirect",OpCode:240,description:S.CmpIndirect,parameterCount:1,exec:c=>(c.cmp(c.memory.readIndirect(c.readAddressOperand())),!1)},{tokenType:I.jmp,jumpType:"jump",adressMode:"Address",OpCode:80,description:S.Jmp,parameterCount:1,exec:c=>(c.setProgramCounter(c.readAddressOperand()),!1)},{tokenType:I.jeq,jumpType:"branch",adressMode:"Address",OpCode:81,description:S.Jeq,parameterCount:1,exec:c=>(c.jeq(c.readAddressOperand()),!1)},{tokenType:I.jne,jumpType:"branch",adressMode:"Address",OpCode:82,description:S.Jne,parameterCount:1,exec:c=>(c.jne(c.readAddressOperand()),!1)},{tokenType:I.jgt,jumpType:"branch",adressMode:"Address",OpCode:83,description:S.Jgt,parameterCount:1,exec:c=>(c.jgt(c.readAddressOperand()),!1)},{tokenType:I.jge,jumpType:"branch",adressMode:"Address",OpCode:84,description:S.Jge,parameterCount:1,exec:c=>(c.jge(c.readAddressOperand()),!1)},{tokenType:I.jlt,jumpType:"branch",adressMode:"Address",OpCode:85,description:S.Jlt,parameterCount:1,exec:c=>(c.jlt(c.readAddressOperand()),!1)},{tokenType:I.jle,jumpType:"branch",adressMode:"Address",OpCode:86,description:S.Jle,parameterCount:1,exec:c=>(c.jle(c.readAddressOperand()),!1)},{tokenType:I.jmpp,jumpType:"branch",adressMode:"Address",OpCode:87,description:S.Jmpp,parameterCount:1,exec:c=>(c.jmpp(c.readAddressOperand()),!1)},{tokenType:I.jmpn,jumpType:"branch",adressMode:"Address",OpCode:88,description:S.Jmpn,parameterCount:1,exec:c=>(c.jmpn(c.readAddressOperand()),!1)},{tokenType:I.jmpz,jumpType:"branch",adressMode:"Address",OpCode:89,description:S.Jmpz,parameterCount:1,exec:c=>(c.jmpz(c.readAddressOperand()),!1)},{tokenType:I.jmpv,jumpType:"branch",adressMode:"Address",OpCode:90,description:S.Jmpv,parameterCount:1,exec:c=>(c.jmpv(c.readAddressOperand()),!1)},{tokenType:I.jmpnp,jumpType:"branch",adressMode:"Address",OpCode:92,description:S.Jmpnp,parameterCount:1,exec:c=>(c.jmpnp(c.readAddressOperand()),!1)},{tokenType:I.jmpnn,jumpType:"branch",adressMode:"Address",OpCode:93,description:S.Jmpnn,parameterCount:1,exec:c=>(c.jmpnn(c.readAddressOperand()),!1)},{tokenType:I.jmpnz,jumpType:"branch",adressMode:"Address",OpCode:94,description:S.Jmpnz,parameterCount:1,exec:c=>(c.jmpnz(c.readAddressOperand()),!1)},{tokenType:I.jmpnv,jumpType:"branch",adressMode:"Address",OpCode:95,description:S.Jmpnv,parameterCount:1,exec:c=>(c.jmpnv(c.readAddressOperand()),!1)},{tokenType:I.loadi,jumpType:"nojump",adressMode:"Immediate",OpCode:129,description:S.LoadImmediate,parameterCount:1,exec:c=>(c.setAccu(c.readDataOperand()),!1)},{tokenType:I.addi,jumpType:"nojump",adressMode:"Immediate",OpCode:131,description:S.AddImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator+c.readDataOperand()),!1)},{tokenType:I.subi,jumpType:"nojump",adressMode:"Immediate",OpCode:132,description:S.SubImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator-c.readDataOperand()),!1)},{tokenType:I.muli,jumpType:"nojump",adressMode:"Immediate",OpCode:133,description:S.MulImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator*c.readDataOperand()),!1)},{tokenType:I.divi,jumpType:"nojump",adressMode:"Immediate",OpCode:134,description:S.DivImmediate,parameterCount:1,exec:c=>(c.setAccu(Math.floor(c.accumulator/c.readDataOperand())),!1)},{tokenType:I.modi,jumpType:"nojump",adressMode:"Immediate",OpCode:135,description:S.ModImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator%c.readDataOperand()),!1)},{tokenType:I.andi,jumpType:"nojump",adressMode:"Immediate",OpCode:136,description:S.AndImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator&c.readDataOperand()),!1)},{tokenType:I.ori,jumpType:"nojump",adressMode:"Immediate",OpCode:137,description:S.OrImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator|c.readDataOperand()),!1)},{tokenType:I.xori,jumpType:"nojump",adressMode:"Immediate",OpCode:138,description:S.XorImmediate,parameterCount:1,exec:c=>(c.setAccu(c.accumulator^c.readDataOperand()),!1)},{tokenType:I.shri,jumpType:"nojump",adressMode:"Immediate",OpCode:12,description:S.ShrImmediate,parameterCount:1,exec:c=>(c.shr(c.readDataOperand()),!1)},{tokenType:I.shli,jumpType:"nojump",adressMode:"Immediate",OpCode:13,description:S.ShlImmediate,parameterCount:1,exec:c=>(c.shl(c.readDataOperand()),!1)},{tokenType:I.cmpi,jumpType:"nojump",adressMode:"Immediate",OpCode:176,description:S.CmpImmediate,parameterCount:1,exec:c=>(c.cmp(c.readDataOperand()),!1)},{tokenType:I.not,jumpType:"nojump",adressMode:"None",OpCode:11,description:S.Not,parameterCount:0,exec:c=>(c.not(),!1)},{tokenType:I.jsr,jumpType:"jump",adressMode:"Address",OpCode:97,description:S.Jsr,parameterCount:1,exec:c=>(c.jsr(c.readAddressOperand()),!1)},{tokenType:I.call,jumpType:"jump",adressMode:"Address",OpCode:97,description:S.Jsr,parameterCount:1,exec:c=>(c.jsr(c.readAddressOperand()),!1)},{tokenType:I.rts,jumpType:"nojump",adressMode:"None",OpCode:34,description:S.Rts,parameterCount:0,exec:c=>(c.rts(),!1)},{tokenType:I.return,jumpType:"nojump",adressMode:"None",OpCode:34,description:S.Rts,parameterCount:0,exec:c=>(c.rts(),!1)},{tokenType:I.rsv,jumpType:"nojump",adressMode:"Immediate",OpCode:163,description:S.Rsv,parameterCount:1,exec:c=>(c.rsv(c.readDataOperand()),!1)},{tokenType:I.rel,jumpType:"nojump",adressMode:"Immediate",OpCode:164,description:S.Rel,parameterCount:1,exec:c=>(c.rel(c.readDataOperand()),!1)},{tokenType:I.push,jumpType:"nojump",adressMode:"None",OpCode:37,description:S.Push,parameterCount:0,exec:c=>(c.push(),!1)},{tokenType:I.pop,jumpType:"nojump",adressMode:"None",OpCode:38,description:S.Pop,parameterCount:0,exec:c=>(c.pop(),!1)},{tokenType:I.load,jumpType:"nojump",adressMode:"Immediate",OpCode:167,description:S.LoadSpRelative,parameterCount:1,exec:c=>(c.accumulator=c.memory.read(c.stackPointer+c.readDataOperand()),!1)},{tokenType:I.store,jumpType:"nojump",adressMode:"Immediate",OpCode:168,description:S.StoreSpRelative,parameterCount:1,exec:c=>(c.memory.write(c.stackPointer+c.readDataOperand(),c.accumulator),!1)},{tokenType:I.hold,jumpType:"nojump",adressMode:"None",OpCode:49,description:S.Hold,parameterCount:0,exec:c=>!0},{tokenType:I.halt,jumpType:"nojump",adressMode:"None",OpCode:49,description:S.Hold,parameterCount:0,exec:c=>!0}],el=[{tokenType:I.load,description:S.LoadCompletionComment},{tokenType:I.store,description:S.StoreCompletionComment},{tokenType:I.add,description:S.AddCompletionComment},{tokenType:I.sub,description:S.SubCompletionComment},{tokenType:I.mul,description:S.MulCompletionComment},{tokenType:I.div,description:S.DivCompletionComment},{tokenType:I.mod,description:S.ModCompletionComment},{tokenType:I.and,description:S.AndCompletionComment},{tokenType:I.or,description:S.OrCompletionComment},{tokenType:I.xor,description:S.XorCompletionComment},{tokenType:I.cmp,description:S.CmpCompletionComment},{tokenType:I.word,description:S.WordCompletionComment}];class Hv extends Nm{constructor(e,i,n){super(e,i);r(this,"description",S.CPUDescription());r(this,"accumulator",0);r(this,"programCounter",0);r(this,"stackPointer",0);r(this,"flagNames",["zero","negative","overflow","carry"]);r(this,"flagNamesShort",["Z","N","V","C"]);r(this,"registerNames",["Accumulator","Program Counter","Stack Pointer"]);r(this,"registerNamesShort",["A","PC","SP"]);r(this,"flags");r(this,"memory");r(this,"opcodeToInstructionMap",{});r(this,"specialCompletionCommentTokens");r(this,"architecture");this.memory=new qv(4096),this.initOpcodeToInstructionMap(),this.specialCompletionCommentTokens=new Set;for(let s of el)this.specialCompletionCommentTokens.add(s.tokenType);this.architecture=Zi.getArchitectureByName(n),this.reset()}getArchitectureIdentifiers(){return Zi.getArchitectures().map(e=>({identifier:e.identifier,localizedName:e.getLocalizedName()()}))}getName(){return S.CPUName()}getTokensWithDescription(){const e=i=>i.parameterCount===0?[]:i.adressMode==="Immediate"?[70]:i.jumpType!=="nojump"?["label"]:["address"];return Jo.filter(i=>!this.specialCompletionCommentTokens.has(i.tokenType)).map(i=>({tokenIdentifier:I[i.tokenType],description:()=>i.description(...e(i)),insertText:I[i.tokenType]+(i.parameterCount>0?" ":` `)})).concat(el.map(i=>({tokenIdentifier:I[i.tokenType],description:i.description,insertText:void 0})))}getDescriptionForCurrentInstruction(){let e=this.memory.dump(),i=e[this.programCounter],n=this.opcodeToInstructionMap[i];if(n){let s=[];for(let a=1;a=i.length)return{location:void 0,indirectLocation:void 0};if(s.adressMode==="Address")return{location:n,indirectLocation:void 0};{let a=i[n];return a<0||a>=i.length?{location:void 0,indirectLocation:void 0}:{location:n,indirectLocation:a}}}getStackPointer(){return this.stackPointer}reset(){this.accumulator=0,this.programCounter=0,this.stackPointer=0,this.flags={zero:!1,negative:!1,overflow:!1,carry:!1},this.assemblyParserResult&&(this.programCounter=this.assemblyParserResult.startAddress??this.assemblyParserResult.codeParts[0].offset,this.stackPointer=this.assemblyParserResult.initialStackPointer??this.memory.size()-1,this.memory.loadProgram(this.assemblyParserResult.codeParts))}executeNextStep(e){var n,s;let i=this.breakpointAddresses.get(this.programCounter);if(i&&!this.breakpointReachedShouldIExecute(i,e))return!1;try{let a=this.memory.read(this.programCounter++),l=this.opcodeToInstructionMap[a];if(l)return l.exec(this);switch(a){case 64:return this.assert(e.scheduler.interpreter),!1;default:throw new Error(S.UnknownOpCode(a,--this.programCounter))}}catch(a){let l=this.assemblyParserResult.sourceMap.get(this.programCounter),h=l?{startLineNumber:l.lineNumber,startColumn:l.column,endLineNumber:l.lineNumber,endColumn:l.column}:void 0,u=a instanceof Error?a.message:String(a);if(this.main){let m=Gh.getHTMLWithLinksForMessage(u,h,this.assemblyParserResult.file,this.main);(n=this.main.getInterpreter().printManager)==null||n.printHtmlElement(m),h&&(this.main.showProgramPosition(this.assemblyParserResult.file,h,!1),(s=this.main.getInterpreter().exceptionMarker)==null||s.markExceptionByFileAndRange(this.assemblyParserResult.file,h)),alert(u+` Details siehe Reiter 'Ausgabe'.`)}return!0}}readAddressOperand(){let e=this.architecture.loadAddressOperand(this.programCounter,this.memory.dump());return this.programCounter+=this.architecture.cellsPerAddressOperand,e}readDataOperand(){return this.memory.read(this.programCounter++)}setAccu(e){e=Math.floor(e),e>this.architecture.valueRangeMax||e=this.memory.size())throw new Error(`Program Counter set error: Address ${e} out of bounds (valid adresses: 0-${this.memory.size()-1})`);this.programCounter=e}jeq(e){this.flags.zero&&this.setProgramCounter(e)}jne(e){this.flags.zero||this.setProgramCounter(e)}jgt(e){!this.flags.negative&&!this.flags.zero&&this.setProgramCounter(e)}jge(e){this.flags.negative||this.setProgramCounter(e)}jlt(e){this.flags.negative&&this.setProgramCounter(e)}jle(e){(this.flags.negative||this.flags.zero)&&this.setProgramCounter(e)}jmpp(e){!this.flags.negative&&!this.flags.zero&&this.setProgramCounter(e)}jmpn(e){this.flags.negative&&this.setProgramCounter(e)}jmpz(e){this.flags.zero&&this.setProgramCounter(e)}jmpv(e){this.flags.overflow&&this.setProgramCounter(e)}jmpc(e){this.flags.carry&&this.setProgramCounter(e)}jmpnp(e){(this.flags.negative||this.flags.zero)&&this.setProgramCounter(e)}jmpnn(e){this.flags.negative||this.setProgramCounter(e)}jmpnz(e){this.flags.zero||this.setProgramCounter(e)}jmpnv(e){this.flags.overflow||this.setProgramCounter(e)}jmpnc(e){this.flags.carry||this.setProgramCounter(e)}jsr(e){let i=this.programCounter+this.architecture.cellsPerAddressOperand,n=this.architecture.addressOperandToMemoryCellValues(i);for(let s=0;s>e;this.flags.carry=(n&1<>e-1)!==0,this.flags.zero=s===0,this.flags.negative=i===-1&&s!==0,this.setAccu(s*i)}}class Kv extends Gv{constructor(e){super();r(this,"tokenToInstructionMap",{});r(this,"tokenSet",new Set);r(this,"architecture");this.initTokenSet(),this.initTokenToInstructionMap(),this.architecture=Zi.getArchitectureByName(e)}parse(e,i){for(this.initBeforeParsing(e),this.skip(I.lineBreak);!this.isProgramEndReached();)this.parseInstructionOrData();return this.checkForUnresolvedLabelsAtEndOfParsing(),this.makeParserResult(i)}parseInstructionOrData(){let e=this.currentToken(),i=this.tokenToInstructionMap[e.type];if(i)this.next(),this.parseInstruction(e,i);else switch(e.type){case I.identifier:this.next(),this.resolveLabel(e);break;case I.word:this.next(),this.parseWord(e);break;case I.dot:this.parsePseudodirective();break;default:this.pushError(Te.UnexpectedToken(e.text),"error",e.range),this.next()}}parseInstruction(e,i){switch(typeof this.startAddress>"u"&&(this.startAddress=this.getProgramCounterAbsolute()),this.currentToken().type){case I.number:this.parseInstructionWithNumberArgument(e,i);break;case I.identifier:this.parseInstructionWithLabelArgument(e,i);break;case I.leftBracket:this.parseInstructionWithIndirectArgument(e,i);break;default:this.parseInstructionWithNoArgument(e,i)}this.expectLineBreakOrEndOfSourcecode()}parseInstructionWithIndirectArgument(e,i){let n=i.find(s=>s.adressMode==="Indirect");if(n){this.next();let s=this.currentToken();if(s.type===I.number){if(this.checkIfTokenIsValidAddress(s)){let a=s.value;this.registerInstruction(n,e.range,[a]),this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.writeToMemory([n.OpCode,a],!1)}this.next(),this.expect(I.rightBracket)&&this.next()}else if(s.type===I.identifier){this.registerInstruction(n,e.range,[s.text]),this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.writeToMemory([n.OpCode],!1);let a=this.getLabelAddressAbsolute(s,this.getProgramCounterAbsolute(),void 0);this.writeToMemory(this.architecture.addressOperandToMemoryCellValues(a),!1),this.next(),this.expect(I.rightBracket)&&this.next()}else this.pushError(S.NumberOrLabelExpectedInIndirectAdress(e.text),"error",e.range),this.next(),this.skip(I.rightBracket)}else this.pushError(S.IndirectArgumentAfterInstructionNotExpected(e.text),"error",e.range),this.next(),this.skip(I.number),this.skip(I.rightBracket)}parseInstructionWithNoArgument(e,i){let n=i.find(s=>s.adressMode==="None");if(n)this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.registerInstruction(n,e.range,[]),this.writeToMemory([n.OpCode],!1);else{this.pushError(S.NoArgumentAfterInstructionFound(e.text),"error",e.range);let s=el.find(a=>a.tokenType===e.type);s&&this.addHoverEntry(e.range,s.description())}}parseInstructionWithNumberArgument(e,i){let n=this.currentToken();this.next();let s=i.find(a=>a.adressMode==="Immediate"||a.adressMode==="Address");if(this.isToken(I.leftBracket)){this.parseInstructionWithStackRelativeArgument(e,n.value,i);return}if(s)if(s.adressMode==="Immediate"&&this.checkIfTokenIsValidValue(n)||s.adressMode==="Address"&&this.checkIfTokenIsValidAddress(n)){let a=n.value;this.registerInstruction(s,e.range,[a]),this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.writeToMemory([s.OpCode],!1),s.adressMode==="Immediate"?this.writeToMemory([a],!1):this.writeToMemory(this.architecture.addressOperandToMemoryCellValues(a),!1)}else this.registerInstruction(s,e.range,s.adressMode==="Immediate"?[70]:["address"]);else{this.pushError(S.NumberAfterInstructionNotExpected(e.text),"error",n.range);let a=el.find(l=>l.tokenType===e.type);a&&this.addHoverEntry(e.range,a.description())}}parseInstructionWithStackRelativeArgument(e,i,n){this.next();let s=this.currentToken();if(!this.isToken(I.identifier)||s.text.toLowerCase()!=="sp"){this.pushError(S.SpExpectedInStackRelativeAddress(),"error",s.range),this.readTillBeginOfNextLine();return}this.next(),this.expect(I.rightBracket)&&this.next();let a;e.type===I.load?a=n.find(l=>l.OpCode===167):e.type===I.store?a=n.find(l=>l.OpCode===168):this.pushError(S.StackRelativeAddressingOnlySupportedForLoadAndStore(e.text),"error",e.range),a&&(this.registerInstruction(a,e.range,[i]),this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.writeToMemory(a.OpCode,!1),this.writeToMemory(i,!1)),this.readTillBeginOfNextLine()}parseInstructionWithLabelArgument(e,i){let n=this.currentToken();this.next();let s=i.find(a=>a.adressMode==="Address");if(s){this.registerInstruction(s,e.range,[n.text]),this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.writeToMemory(s.OpCode,!1);let a=this.getLabelAddressAbsolute(n,this.getProgramCounterAbsolute(),void 0);this.writeToMemory(this.architecture.addressOperandToMemoryCellValues(a),!1)}else{this.pushError(S.LabelAfterInstructionNotExpected(e.text),"error",n.range);let a=el.find(l=>l.tokenType===e.type);a&&this.addHoverEntry(e.range,a.description())}}parseWord(e){this.addHoverEntry(e.range,S.WordDirectiveHoverMessage(70));let i=!0;do{i||this.next(),i=!1;let n=this.currentToken();if(this.checkIfTokenIsValidValue(n)){let s=n.value;this.addSourceMapEntry(e.range,this.getProgramCounterAbsolute()),this.writeToMemory(s,!0)}this.next()}while(this.currentToken().type===I.comma);this.expectLineBreakOrEndOfSourcecode()}parsePseudodirective(){if(this.next(),this.expect(I.identifier)){let e=this.currentToken();switch(e.text){case"origin":let i=e.range;this.next();let n=1e3;if(this.expect(I.number)){let s=this.currentToken();if(i=s.range,this.next(),n=s.value,!this.checkIfTokenIsValidAddress(s))return;this.setOrigin(n)}this.addHoverEntry(U.plusRange(e.range,i),S.OriginHoverMessage(n));break;case"assert":this.parseAssertion(e);break;default:this.pushError(S.UnknownPseudoDirective(e.text),"error",e.range);break}}this.expectLineBreakOrEndOfSourcecode()}getKeywordTokens(){return this.tokenSet}initTokenToInstructionMap(){for(let e of Jo)this.tokenToInstructionMap[e.tokenType]||(this.tokenToInstructionMap[e.tokenType]=[]),this.tokenToInstructionMap[e.tokenType].push(e)}initTokenSet(){for(let e of Jo)this.tokenSet.add(e.tokenType);this.tokenSet.add(I.word)}getAssertionOpcode(){return 64}getFlagNamesShort(){return["z","n","v","c"]}getRegisterNamesShort(){return["a","pc"]}addressToCellValues(e){return this.architecture.addressOperandToMemoryCellValues(e)}checkIfTokenIsValidAddress(e){if(e.type!==I.number)return this.pushError(Te.NumberExpected(),"error",e.range),!1;let i=this.architecture.isValidAddress(e.value);return i||this.pushError(Te.AddressOutOfRange(e.value,0,65536),"error",e.range),i}checkIfTokenIsValidValue(e){if(e.type!==I.number)return this.pushError(Te.NumberExpected(),"error",e.range),!1;let i=this.architecture.isValidValue(e.value);return i||this.pushError(Te.ValueOutOfRange(e.value,this.architecture.valueRangeMin,this.architecture.valueRangeMax),"error",e.range),i}}class Uv extends Tg{constructor(t){super({},[],new ap),this.moduleManager=t}getModuleManager(){return this.moduleManager}hasTests(){return!1}}class tl{}r(tl,"invalidNumberLiteral",()=>d({de:"Ungültiges Zahlenliteral",en:"Invalid number literal",fr:"Littéral numérique invalide"})),r(tl,"invalidCharacter",t=>d({de:`Ungültige/s Zeichen: ${t}`,en:`Invalid character/s: ${t}`,fr:`Caractère invalide: ${t}`}));const _h=class _h{constructor(){r(this,"pos");r(this,"line");r(this,"column");r(this,"isBeginningOfLine");r(this,"input");r(this,"tokens");r(this,"commentRanges");r(this,"errors");r(this,"endChar","►");r(this,"currentChar","");r(this,"nextChar","");r(this,"keywordTokens");r(this,"withWithspaceAndCommentTokens")}tokenize(t,e,i=!1){return this.withWithspaceAndCommentTokens=i,this.tokens=[],this.commentRanges=[],this.errors=[],this.keywordTokens=e,this.pos=0,this.line=1,this.column=1,this.isBeginningOfLine=!0,this.input=t,t&&t.length>0&&(this.currentChar=this.input.charAt(0),this.nextChar=this.input.length>1?this.input.charAt(1):this.endChar,this.main()),this.tokens.push({type:I.endOfSourcecode,value:"",range:{startLineNumber:this.line,startColumn:this.column,endLineNumber:this.line,endColumn:this.column},text:""}),{tokens:this.tokens,commentRanges:this.commentRanges,errors:this.errors}}next(){this.pos++,this.currentChar=this.nextChar,this.pos+1="0"&&this.nextChar<="9")this.pushToken(I.hash,t),this.next();else{let l=this.line,h=this.column,u="#";for(this.next();this.currentChar!==` `&&this.currentChar!==this.endChar;)u+=this.currentChar,this.next();this.saveComment(l,h,u)}this.next();break;case'"':let n=this.line,s=this.column,a="";for(this.next();this.currentChar!=='"'&&this.currentChar!==this.endChar;)a+=this.currentChar,this.next();this.pushToken(I.stringLiteral,a,n,s),this.currentChar==='"'&&this.next();break;case"{":this.pushToken(I.leftCurlyBracket,t),this.next();break;case"}":this.pushToken(I.rightCurlyBracket,t),this.next();break;case"[":this.pushToken(I.leftSquareBracket,t),this.next();break;case"]":this.pushToken(I.rightSquareBracket,t),this.next();break;default:/[a-zA-Z_\u00c4\u00e4\u00d6\u00f6\u00dc\u00fc\u00df]/.test(t)?this.lexIdentifierOrKeyword():/[1-9\-]/.test(t)?this.lexNumber(10):this.lexInvalidToken();break}}}saveComment(t,e,i){this.commentRanges.push({startLineNumber:t,startColumn:e,endLineNumber:this.line,endColumn:this.column}),this.withWithspaceAndCommentTokens&&this.pushToken(I.comment,i,t,e,this.line,this.column)}lexWhitespace(){let t=this.line,e=this.column,i="";for(;_h.spaceCharacters.includes(this.currentChar);)i+=this.currentChar,this.next();this.pushToken(I.whitespace,i,t,e)}isDigit(t,e){var i=t.charCodeAt(0);if(e==10)return i>=48&&i<=57;if(e==2)return i>=48&&i<=49;if(e==8)return i>=48&&i<=55;if(e==16)return i>=48&&i<=57||i>=97&&i<=102||i>=65&&i<=70}lexNumber(t){let e=this.line,i=this.column;(t===2||t===16)&&(this.currentChar+this.nextChar,this.next(),this.next());let n=1;t===10&&this.currentChar==="-"&&(n=-1,this.next());let s="";for(;this.isDigit(this.currentChar,t);)s+=this.currentChar,this.next();if(s.length===0){this.errors.push({message:tl.invalidNumberLiteral(),range:{startLineNumber:e,startColumn:i,endLineNumber:this.line,endColumn:this.column},level:"error",id:""});return}let a=parseInt(s,t)*n;if(isNaN(a)){this.errors.push({message:tl.invalidNumberLiteral(),range:{startLineNumber:e,startColumn:i,endLineNumber:this.line,endColumn:this.column},level:"error",id:""});return}this.tokens.push({type:I.number,value:a,text:n==1?s:`-${s}`,range:{startLineNumber:e,startColumn:i,endLineNumber:this.line,endColumn:this.column-1}})}pushToken(t,e,i=this.line,n=this.column,s,a){s||(s=i),a||(a=n+(""+e).length);let l={type:t,value:e,text:typeof e=="string"?e:`${e}`,range:{startLineNumber:i,startColumn:n,endLineNumber:s,endColumn:a}};this.tokens.push(l)}lexIdentifierOrKeyword(){let t=this.line,e=this.column,i="";for(;/[a-zA-Z\u00c4\u00e4\u00d6\u00f6\u00dc\u00fc\u00df0-9_]/.test(this.currentChar);)i+=this.currentChar,this.next();let n=I[i.toLowerCase()];this.keywordTokens.has(n)?this.pushToken(n,i,t,e):this.pushToken(I.identifier,i,t,e)}lexInvalidToken(){let t=this.line,e=this.column,i="";for(;this.currentChar!==this.endChar&&![` `," "," "].includes(this.currentChar);)i+=this.currentChar,this.next();this.errors.push({message:tl.invalidCharacter(i),range:{startLineNumber:t,startColumn:e,endLineNumber:this.line,endColumn:this.column},level:"error",id:""})}debugOutputTokens(){console.log("Tokens:");for(let t of this.tokens)console.log(`Type: ${I[t.type]}, Value: ${t.value}, Range: (${t.range.startLineNumber}, ${t.range.startColumn}) - (${t.range.endLineNumber}, ${t.range.endColumn})`)}};r(_h,"spaceCharacters",[" "," ","슠"," "]);let wh=_h;class Lp extends Il{constructor(t,e,i){super(t,e),this.codeAsString=i}setBreakpoint(t,e=!1){this.module.cpu.setBreakpointAtLine(t,e)}clearBreakpoint(t){this.module.cpu.clearBreakpointAtLine(t)}carriesFakeLineNumbers(){return!0}}class Us extends Zm{constructor(e){super(e,!1);r(this,"_cpu");r(this,"steps",[])}get cpu(){return this._cpu}set cpu(e){this._cpu=e,this.errors=e.getErrors()}hasMainProgram(){return this.cpu?this._cpu.hasMainProgram():!1}startMainProgram(e,i){let n=`if(${$.cpu}.executeNextStep(${V.thread})) { ${$.return}(0); } return 1; // infinite loop`,s=`if(${$.cpu}.executeNextStep(${V.thread})) { ${$.return}(0); } return 0; // infinite loop`,a=new Ir(this,void 0,"Main.main");return this.steps=[new Lp(0,this,n),new Lp(1,this,s)],a.addStep(this.steps[0]),a.addStep(this.steps[1]),this.steps[0].range={startLineNumber:1,startColumn:1,endLineNumber:1,endColumn:1},this.steps[1].range={startLineNumber:2,startColumn:2,endLineNumber:2,endColumn:2},a.compileToJavascriptFunctions(),e.__cpu=this._cpu,this._cpu.reset(),e.pushProgram(a),i&&this._cpu.setBreakpointAtFirstProgramStatement(!0),!0}isReplModule(){return!1}getCodeFragments(){return[]}clearAllBreakpoints(){this._cpu.breakpointAddresses.clear()}findStep(e){if(this.steps[0])return this.steps[0]}}class Qv extends Jg{constructor(){super(...arguments);r(this,"modules",[])}getModules(){return this.modules}addModule(e){this.modules.push(e)}getModule(e){return this.modules.find(i=>i.file===e)}removeModule(e){this.modules.splice(this.modules.indexOf(e),1)}}const Yv=800;var Po,rn,Oo;class Zv{constructor(t,e){r(this,"eventManager",new tp);J(this,Po,[]);J(this,rn,new Qv);J(this,Oo);r(this,"lastTimeCompilationStarted",0);this.main=t,this.errorMarker=e}setFiles(t){ee(this,Po,t);for(const e of t)if(!M(this,rn).getModule(e)){const n=new Us(e);M(this,rn).addModule(n)}for(const e of M(this,rn).getModules())t.includes(e.file)||M(this,rn).removeModule(e)}setLibraries(t){}findModuleByFile(t){return M(this,rn).getModule(t)}getAllModules(){return M(this,rn).getModules()}setFileDirty(t){const e=this.findModuleByFile(t);e&&e.setDirty(!0)}getSortedAndFilteredErrors(t){const e=this.findModuleByFile(t);return e?e.getSortedAndFilteredErrors():[]}getType(t){}compileIfDirty(){var a,l;let t;if(this.main){if(this.main.getInterpreter().isRunningOrPaused())return;const h=(a=this.main)==null?void 0:a.getCurrentWorkspace();if(!h)return;let u=h.getFiles().filter(m=>Gi.filenameToFileType(m.name,this.main.getCurrentProgrammingLanguage()).language==Re.ByAssembly.name&&!m.isFolder);this.setFiles(u),t=h.settings.assemblyArchitecture}if(t||(t=((l=this.main)==null?void 0:l.getSettings().getValue("programmingLanguages.ByAssembly.defaultArchitecture"))??Zi.getArchitectures()[0].identifier),M(this,Po).length===0)return;let e=new wh,i=new Kv(t),n=!1;for(const h of M(this,Po)){let u=M(this,rn).getModule(h);if(!u.isDirty())continue;let m=h.getText(),g=e.tokenize(m,i.getKeywordTokens()),f=i.parse(g.tokens,h);f.errors=[...g.errors,...f.errors],f.commentRanges=g.commentRanges;const b=new Hv(f,this.main,t);u.cpu=b,u.setDirty(!1),n=!0}if(this.eventManager.fire("compilationFinished"),!n)return;let s=new Uv(M(this,rn));return this.eventManager.fire("compilationFinishedWithNewExecutable",s),setTimeout(()=>{var h;for(const u of M(this,rn).getModules())(h=this.errorMarker)==null||h.markErrorsOfModule(u)},10),s}forceRecompilation(){M(this,rn).getModules().forEach(t=>t.setDirty(!0)),this.compileIfDirty()}waitTillCompilationFinished(){return new Promise(t=>t())}triggerCompile(){M(this,Oo)&&clearTimeout(M(this,Oo));let t=Yv-(performance.now()-this.lastTimeCompilationStarted);t<0&&(t=0),ee(this,Oo,window.setTimeout(async()=>{try{this.lastTimeCompilationStarted=performance.now(),this.compileIfDirty()}catch(e){console.log(e)}},t))}}Po=new WeakMap,rn=new WeakMap,Oo=new WeakMap;class Ao{}r(Ao,"Opcode",t=>d({en:`opcode: 0x${t.toString(16)} = ${t}`})),r(Ao,"LabelCompletionDescription",t=>d(typeof t!="number"?{de:"label mit unbekannter Adresse",en:"label with unknown address",fr:"label avec adresse inconnue"}:{de:`label an Adresse 0x${t.toString(16)}`,en:`label at address 0x${t.toString(16)}`,fr:`label à l'adresse 0x${t.toString(16)}`})),r(Ao,"LabelHoverDescription",(t,e)=>d({de:`\`\`\` Label ${t} // an Addresse ${e!=null?"0x"+e.toString(16)+" = "+e:"unbekannt"} \`\`\``,en:`\`\`\` Label ${t} // at address ${e!=null?"0x"+e.toString(16)+" = "+e:"unknown"} \`\`\``,fr:`\`\`\` Label ${t} // à l'adresse ${e!=null?"0x"+e.toString(16)+" = "+e:"inconnu"} \`\`\``}));class Xv extends Ti{constructor(e){super(e);r(this,"triggerCharacters"," .abcdefghijklmnopqrstuvwxyzäöüß_ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ@".split(""));this.language=e,P.registerCompletionItemProvider(e.monacoLanguageSelector,this)}provideCompletionItems(e,i,n,s){var b,A;let a=this.findMainForModel(e);if(!a)return{suggestions:[]};let l=(b=a.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(e);if(l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(a.getCompiler().triggerCompile(),l=(A=a.getCurrentWorkspace())==null?void 0:A.getModuleForMonacoModel(e)),!l||!(l instanceof Us))return{suggestions:[]};let h=l.cpu;if(h.positionIsInsideComment(i))return{suggestions:[]};let u=U.fromPositions(i),m=h.getCompletionItemRanges().find(C=>U.containsPosition(C.range,i))??{range:u,withLabelCompletionAfterStatements:!0,withLabelCompletionAtLineStart:!1,withInstructionCompletion:!0,withDirectiveCompletion:!0,additionalCompletionItems:[]},g=e.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:i.lineNumber,endColumn:i.column});e.getValueInRange({startLineNumber:i.lineNumber,startColumn:i.column,endLineNumber:i.lineNumber+5,endColumn:1});let f=g.match(/.*[^\wöäüÖÄÜß]([\wöäüÖÄÜß]*)$/);if(f==null&&(f=g.match(/^([\wöäüÖÄÜß]*)$/)),f!=null){let C=e.getLineContent(i.lineNumber),w=f[1];f[0]&&f[0].endsWith(".")&&(w="."+w);let x={startLineNumber:i.lineNumber,startColumn:i.column-w.length,endLineNumber:i.lineNumber,endColumn:i.column};return this.getCompletionItemsInsideIdentifier(h,a,f,C,i,x,l,m)}return{suggestions:[]}}getCompletionItemsInsideIdentifier(e,i,n,s,a,l,h,u){let g=s.substring(0,a.column-1).trimStart(),f=g.indexOf(":");f>=0&&(g=g.substring(f+1).trimStart());let b=g.indexOf(" "),A=u.withLabelCompletionAtLineStart&&(g.length===0||b<0)||u.withLabelCompletionAfterStatements&&g.length>0&&b>=0,C=[];u.withInstructionCompletion&&!A&&(C=C.concat(e.getTokensWithDescription().map(x=>({label:x.tokenIdentifier,kind:P.CompletionItemKind.Keyword,documentation:{value:x.description()},insertText:x.insertText||x.tokenIdentifier+" ",range:l})))),u.withDirectiveCompletion&&!A&&(C=C.concat(e.getPseudoDirectivesWithDescription().map(x=>({label:x.directiveIdentifier,kind:P.CompletionItemKind.Keyword,documentation:{value:x.description()},insertText:x.insertText||x.directiveIdentifier,insertTextRules:P.CompletionItemInsertTextRule.InsertAsSnippet,range:l}))));let w=[];A&&(w=e.getLabels().filter(x=>typeof x.address=="number").map(x=>({label:":"+x.identifier+(typeof x.address=="number"?" (0x"+x.address.toString(16)+")":""),filterText:x.identifier,kind:P.CompletionItemKind.Variable,documentation:{value:Ao.LabelCompletionDescription(x.address)},detail:"(label)",insertText:x.identifier,range:l}))),C=C.concat(w);for(let x of u.additionalCompletionItems)C.push({label:x.label,kind:P.CompletionItemKind.Variable,insertText:x.insertText,range:l,detail:x.detail,documentation:x.documentation});return{suggestions:C}}}class Jv extends Ti{constructor(t){super(t),P.registerReferenceProvider(t.monacoLanguageSelector,this)}provideReferences(t,e,i,n){var b,A,C;if(!Q.getEditors().find(w=>w.getModel()==t))return;let a=this.findMainForModel(t);if(!a)return;let l=(b=a.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(t);if(l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(a.getCompiler().triggerCompile(),l=(A=a.getCurrentWorkspace())==null?void 0:A.getModuleForMonacoModel(t)),!l||!(l instanceof Us))return[];let m=l.cpu.getLabelMap().get(e.lineNumber);if(!m)return[];let g=(C=m.find(w=>U.containsPosition(w.range,e)))==null?void 0:C.label;return g?g.usages.map(w=>({range:w,uri:t.uri})):[]}}class eA extends Ti{constructor(e){super(e);r(this,"count",0);P.registerDefinitionProvider(e.monacoLanguageSelector,this)}provideDefinition(e,i,n){var f,b,A;let s=Q.getEditors().find(C=>C.getModel()==e);if(!s)return;let a=this.findMainForModel(e);if(!a)return;let l=(f=a.getCurrentWorkspace())==null?void 0:f.getModuleForMonacoModel(e);if(l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(a.getCompiler().triggerCompile(),l=(b=a.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(e)),!l||!(l instanceof Us))return;let m=l.cpu.getLabelMap().get(i.lineNumber);if(!m)return;let g=(A=m.find(C=>U.containsPosition(C.range,i)))==null?void 0:A.label;if(g)return setTimeout(()=>{let C=s.getPosition();C&&er.equals(s.getPosition(),U.getStartPosition(g.declaration))&&s.revealPositionInCenterIfOutsideViewport(C)},200),{range:g.declaration,uri:e.uri}}}class tA extends Ti{constructor(t){super(t),P.registerHoverProvider(t.monacoLanguageSelector,this)}provideHover(t,e,i,n){var b,A,C;let s=this.findMainForModel(t);if(!s)return;let a=(b=s.getCurrentWorkspace())==null?void 0:b.getModuleForMonacoModel(t);if(!a||!(a instanceof Us))return;let l=a.cpu,h=(A=l.getInstructionMap().get(e.lineNumber))==null?void 0:A.find(w=>U.containsPosition(w.range,e)),u=h==null?void 0:h.instruction;if(u){let w=u.description(...(h==null?void 0:h.operands)??[]),x=w.indexOf(":");if(x>0&&x<30){let q=w.substring(x+1).trim();w="```\n"+w.substring(0,x).trim()+` //`+q+` //`+Ao.Opcode(u.OpCode)}return{contents:[{value:`${w}`}]}}let g=l.getLabelMap().get(e.lineNumber);if(g){let w=(C=g.find(x=>U.containsPosition(x.range,e)))==null?void 0:C.label;if(w)return{contents:[{value:Ao.LabelHoverDescription(w.identifier,w.address)}]}}let f=l.getHoverEntries().get(e.lineNumber);if(f){let w=f.find(x=>U.containsPosition(x.range,e));if(w)return{contents:[{value:w.text}]}}}}class iA extends Ti{constructor(t){super(t),P.registerRenameProvider(t.monacoLanguageSelector,this)}provideRenameEdits(t,e,i,n){var A,C,w;if(!Q.getEditors().find(x=>x.getModel()==t))return;let a=this.findMainForModel(t);if(!a)return;let l=(A=a.getCurrentWorkspace())==null?void 0:A.getModuleForMonacoModel(t);if(l!=null&&l.isMoreThanOneVersionAheadOfLastCompilation()&&(a.getCompiler().triggerCompile(),l=(C=a.getCurrentWorkspace())==null?void 0:C.getModuleForMonacoModel(t)),!l||!(l instanceof Us))return;let m=l.cpu.getLabelMap().get(e.lineNumber);if(!m)return;let g=(w=m.find(x=>U.containsPosition(x.range,e)))==null?void 0:w.label;if(!g)return;let f=g.usages.slice();return f.push(g.declaration),{edits:f.map(x=>({resource:t.uri,versionId:t.getVersionId(),textEdit:{range:x,text:i}}))}}}class nA{constructor(t){r(this,"decorations");if(this.main=t,!t.getMainEditor()){console.error("Call construction of AssemblySymbolMarker after creation of monaco editor.");return}t.getMainEditor().onDidChangeCursorPosition(e=>{this.onDidChangeCursorPosition(e)})}onDidChangeCursorPosition(t){var s,a;let e=this.main.getMainEditor();if(!e||((s=e.getModel())==null?void 0:s.getLanguageId())!="myAssembly")return;this.clearDecorations();let i=(a=this.main.getCurrentWorkspace())==null?void 0:a.getModuleForMonacoModel(e.getModel());if(!i||!(i instanceof Us))return;let n=[];this.markSymbolUnderCursor(e,i,t.position,n),this.decorations=e.createDecorationsCollection(n)}markSymbolUnderCursor(t,e,i,n){var m;let s=e.cpu;if(!s)return;let l=s.getLabelMap().get(i.lineNumber);if(!l)return;let h=(m=l.find(g=>U.containsPosition(g.range,i)))==null?void 0:m.label;if(!h)return;let u=h.usages.slice();u.push(h.declaration);for(let g of u)n.push({range:g,options:{inlineClassName:"jo_revealSyntaxElement",isWholeLine:!1,overviewRuler:{color:{id:"editorIndentGuide.background"},darkColor:{id:"editorIndentGuide.activeBackground"},position:Q.OverviewRulerLane.Left}}})}clearDecorations(){this.decorations&&(this.decorations.clear(),this.decorations=void 0)}}class rA extends Ti{constructor(e){super(e);r(this,"autoFormatTriggerCharacters",[` `]);r(this,"displayName","Assembly-Autoformat");r(this,"tokens");r(this,"currentTokenIndex");r(this,"currentToken");P.registerDocumentFormattingEditProvider(e.monacoLanguageSelector,this),P.registerOnTypeFormattingEditProvider(e.monacoLanguageSelector,this)}provideOnTypeFormattingEdits(e,i,n,s,a){let l=this.format(e);return Promise.resolve(l)}provideDocumentFormattingEdits(e,i,n){let s=this.format(e);return Promise.resolve(s)}format(e){if(!this.findMainForModel(e))return[];let n=[],s=e.getValue(Q.EndOfLinePreference.LF),a=new wh().tokenize(s,new Set,!1),l=this.generateLineInfos(a.tokens),h=-1,u=-1,m=Number.MAX_SAFE_INTEGER;for(let b of l)if(!b.maxIdentifierLengthInsideDirective){if(b.labelIdentifierAtLineBegin){let A=b.labelIdentifierAtLineBegin.range.endColumn-b.labelIdentifierAtLineBegin.range.startColumn+2;b.hasWordInstruction?A>u&&(u=A):A>h&&(h=A)}else if(b.tokenAfterColon){let A=b.tokenAfterColon.range.startColumn;A0?i.push({range:{startLineNumber:n,startColumn:s,endLineNumber:n,endColumn:s},text:" ".repeat(a)}):i.push({range:{startLineNumber:n,startColumn:s+a,endLineNumber:n,endColumn:s},text:""}),a)}generateLineInfos(e){var u,m;if(this.tokens=e,this.tokens.length==0)return[];this.currentTokenIndex=0,this.currentToken=this.tokens[0];let i=[],n,s=!1,a=0,l=[],h=0;for(;!this.lastTokenReached();){for(;this.currentToken.type==I.whitespace||this.currentToken.type==I.lineBreak;)this.next();switch(this.currentToken.type){case I.comment:this.readTillEndOfLineOrLeftCurlyBracket();continue;case I.dot:n={lineNumber:this.currentToken.range.startLineNumber,tokenAfterColon:this.currentToken,hasWordInstruction:!1},i.push(n),this.readTillEndOfLineOrLeftCurlyBracket();continue;case I.identifier:case I.number:if(s){n={lineNumber:this.currentToken.range.startLineNumber,tokenAfterColon:this.currentToken,hasWordInstruction:!1},l.push(n),i.push(n);let g=n.lineNumber,f=((u=this.currentToken.value)==null?void 0:u.toString().length)??0;if(f>a&&(a=f),this.next(),this.skipWhitespaceWhileOnLine(g),this.currentToken.range.endLineNumber!=g)continue;if(this.currentToken.type==I.colon){if(n.labelIdentifierAtLineBegin=n.tokenAfterColon,n.labelColon=this.currentToken,this.next(),this.skipWhitespaceWhileOnLine(g),this.currentToken.range.endLineNumber!=g)continue;n.tokenAfterColon=this.currentToken}this.readTillEndOfLineOrRightCurlyBracket()}else{n={lineNumber:this.currentToken.range.startLineNumber,tokenAfterColon:this.currentToken,hasWordInstruction:!1},i.push(n);let g=n.lineNumber;if(this.next(),this.skipWhitespaceWhileOnLine(g),this.currentToken.range.endLineNumber!=g)continue;this.currentToken.type==I.colon&&(n.labelIdentifierAtLineBegin=n.tokenAfterColon,n.labelColon=this.currentToken,this.next(),this.skipWhitespaceWhileOnLine(g),n.tokenAfterColon=this.currentToken,((m=this.currentToken.text)==null?void 0:m.toLocaleLowerCase())=="word"&&(n.hasWordInstruction=!0)),this.readTillEndOfLineOrLeftCurlyBracket()}continue;case I.leftCurlyBracket:if(h++,s=!0,a=0,this.next(),this.readTillEndOfLineOrRightCurlyBracket(),this.currentToken.type==I.rightCurlyBracket&&(h--,h==0)){s=!1;for(let g of l)g.maxIdentifierLengthInsideDirective=a;l=[]}continue;case I.rightCurlyBracket:if(h>0&&(h--,h==0)){s=!1;for(let g of l)g.maxIdentifierLengthInsideDirective=a;l=[]}this.next(),this.readTillEndOfLineOrLeftCurlyBracket();continue;default:this.readTillEndOfLineOrLeftCurlyBracket();continue}}for(let g of l)g.maxIdentifierLengthInsideDirective=a;return i}skipWhitespaceWhileOnLine(e){for(;this.currentToken.type==I.whitespace&&this.currentToken.range.endLineNumber==e;)this.next()}readTillEndOfLineOrLeftCurlyBracket(){let e=this.currentToken.range.endLineNumber;do this.next();while(!this.lastTokenReached()&&this.currentToken.range.startLineNumber==e&&this.currentToken.type!=I.leftCurlyBracket)}readTillEndOfLineOrRightCurlyBracket(){let e=this.currentToken.range.endLineNumber;do this.next();while(!this.lastTokenReached()&&this.currentToken.range.startLineNumber==e&&this.currentToken.type!=I.rightCurlyBracket)}next(){this.currentTokenIndex=this.tokens.length-1}}const ma=class ma extends _g{constructor(){super(Re.ByAssembly.name,Re.ByAssembly.fileEndingWithOutDot,Re.ByAssembly.monacoLanguageSelector);r(this,"libraryManager",new Wv);this.registerLanguageAtMonacoEditor(),this.registerProviders()}static getInstance(){return ma.instance||(ma.instance=new ma),ma.instance}registerMain(e,i){let n=new Zv(e,i),s=e.getSettings();this.registerCompiler(e,n),this.registerSettings(e,s),new nA(e)}registerProviders(){new Xv(this),new Jv(this),new eA(this),new tA(this),new iA(this),new rA(this)}registerLanguageAtMonacoEditor(){P.register({id:this.monacoLanguageSelector,extensions:[".asm"]});let e={indentationRules:{decreaseIndentPattern:/^(.*\*\/)?\s*\}.*$/,increaseIndentPattern:/^.*\{[^}"']*$/},onEnterRules:[{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,afterText:/^\s*\*\/$/,action:{indentAction:P.IndentAction.IndentOutdent,appendText:" * "}},{beforeText:/^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,action:{indentAction:P.IndentAction.None,appendText:" * "}},{beforeText:/^(\t|(\ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,action:{indentAction:P.IndentAction.None,appendText:"* "}},{beforeText:/^(\t|(\ \ ))*\ \*\/\s*$/,action:{indentAction:P.IndentAction.None,removeText:1}},{beforeText:/^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/,action:{indentAction:P.IndentAction.None,removeText:1}}],wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],colorizedBracketPairs:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}]},i={ignoreCase:!0,keywords:["load","store","add","sub","mul","div","mod","jmp","jeq","jne","jgt","jge","jlt","jle","hold","halt","push","pop","call","return","jsr","rts","rsv","rel","cmp","and","or","xor","not","shr","shl"],immediateKeywords:["loadi","storei","addi","subi","muli","divi","modi","andi","ori","xori","cmpi","shri","shli"],dataDirectives:["word"],operators:[],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],{include:"@number"},[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],immediateOperand:[{include:"@whitespace"},[/0[xX][0-9a-fA-F]+/,"number.immediate","@pop"],[/-?\d+/,"number.immediate","@pop"],[/.*$/,"invalid","@pop"]],comment:[[/[^\/*]+/,"comment"],[/\/\*/,"comment","@push"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],number:[[/0[xX][0-9a-fA-F]+/,"number.hex"],[/\d+/,"number"]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]]}};P.setLanguageConfiguration(this.monacoLanguageSelector,e),P.setMonarchTokensProvider(this.monacoLanguageSelector,i)}async enable(e){var a,l,h,u,m,g,f;let i=e.getBottomDiv();i&&((a=i.jUnitTab)==null||a.setVisible(!1),(l=i.disassemblerTab)==null||l.setVisible(!1),(u=(h=i.console)==null?void 0:h.tab)==null||u.setVisible(!1));let n=e.getRightDiv();(m=n.classDiagramTab)==null||m.setVisible(!1),(g=n.memoryTab)==null||g.setVisible(!0),(f=n.memoryTab)==null||f.listenToCompiler(this.getCompiler(e));let s=n.tabManager.getTabByName("Memory Tab");s==null||s.show(),e.setHorizontalSliderPosition(e.isEmbedded()?.6:.4),e.getInterpreter().showTriangleAtProgramPointer=!1,setTimeout(()=>{e.getActionManager().setVisible("interpreter.stepInto",!1),e.getActionManager().setVisible("interpreter.stepOut",!1),e.getActionManager().setVisible("interpreter.restart",!1),e.getActionManager().setVisible("interpreter.startTests",!1)},800)}disable(e){e.getBottomDiv(),e.getRightDiv()}beforeWorkspaceChange(e){}getLibraryManager(){return this.libraryManager}getDebuggerType(){return"assembly"}setupWorkspaceSettings(e,i,n,s){z.makeDiv(n,"dialog-subheading","languagesettings").textContent=S.ArchitectureHeading();let a=document.createElement("select");a.classList.add("jo_settingsSelect");let l=s.settings.assemblyArchitecture,h=i.getSettings().getValue("programmingLanguages.ByAssembly.defaultArchitecture");Ns(y(a),Zi.getArchitectures().map(u=>({value:u.identifier,object:u,caption:u.getLocalizedName()()})),l??h??Zi.getArchitectures()[0].identifier),n.appendChild(a)}retrieveWorkspaceSettings(e,i,n){let s=i.getElementsByClassName("jo_settingsSelect")[0],a=as(y(s));return n.settings.assemblyArchitecture!=a.identifier?(n.settings.assemblyArchitecture=a.identifier,e.getCompiler().forceRecompilation(),!0):!1}};r(ma,"instance");let qm=ma;const pa=class pa{constructor(){r(this,"languages",[]);pa.instance=this,this.languages.push(Hl.getInstance()),this.languages.push(qm.getInstance())}static getInstance(){return pa.instance||new pa,pa.instance}registerMain(t,e){for(let i of this.languages)i.registerMain(t,e)}getLanguages(){return this.languages}getLanguageByName(t){for(let e of this.languages)if(e.name==t)return e;return typeof t<"u"&&console.error("No language found with name "+t),Hl.getInstance()}getLanguagesSelection(t){let e=t.getSettings(),i=[this.getLanguageByName(Re.Java.name)];return e.getValue("programmingLanguages.ByAssembly.enabled")=="yes"&&i.push(this.getLanguageByName(Re.ByAssembly.name)),i}};r(pa,"instance");let us=pa;class sA{constructor(t){this.term=t}}class aA{constructor(t,e){r(this,"lastRepl");this.treeview=t,this.debugger_=e,t.newNodeCallback=async(i,n)=>{let s=new sA(i);return n.renderCaptionAsHtml=!0,this.lastRepl&&this.updateNode(n,s,this.lastRepl),s},t.deleteCallback=async i=>!0}update(t){let e=this.debugger_.main.getRepl();if(e||(e=this.lastRepl),!!e){this.lastRepl=e;for(let i of this.treeview.nodes){let n=i.externalObject;n&&this.updateNode(i,n,e)}}}updateNode(t,e,i){let n="---",s=i.executeSynchronously(e.term);s&&s.text!="---"&&(n=on.renderValue(s,20)),Q.colorize(e.term+" = "+n,"myJava",{tabSize:3}).then(a=>{t.caption=a})}}const Zr=class Zr{constructor(t,e,i,n){r(this,"treeViewNode");r(this,"children",[]);r(this,"oldValue");r(this,"oldLength");r(this,"isLocalVariable",!0);this.symbolTableSection=t,this.type=i,this.identifier=n,this.treeViewNode=new Fd(t.treeview,!1,"",void 0,this,e,!0),n=="this"&&this.treeViewNode.expandCollapseComponent.setState("expanded")}render(t,e){t==null?(this.setCaption(" = ","null","jo_debugger_value"),this.removeChildren()):Array.isArray(t)?this.renderArray(t,Zr.quickArrayOutputMaxLength):typeof t=="object"?(t.constructor.name=="StringClass"&&this.renderStringClass(t,e),this.renderObject(t)):this.renderPrimitiveValue(t,e)}attachNodesToTreeview(){this.treeViewNode.attachAfterDetaching(),this.children.forEach(t=>t.attachNodesToTreeview())}removeChildren(){this.children.forEach(t=>t.treeViewNode.destroy()),this.children=[]}setCaption(t,e,i,n=!0,s=!1,a){s||(e=e.replaceAll("<","<"),e=e.replaceAll(">",">"));let l=this.isLocalVariable?"jo_debugger_localVariableIdentifier":"jo_debugger_fieldIdentifier";try{typeof this.oldValue<"u"&&e!=this.oldValue&&n&&(i+=" jo_debugger_pulse")}catch{}this.oldValue=e;let h="";e&&typeof e=="string"&&e.startsWith('"')&&e.endsWith('"')&&e.length>=2&&(h='"',e=e.substring(1,e.length-1));let u=`${this.identifier}${t}${h}${e}${h}`;this.treeViewNode.caption=u,a&&setTimeout(()=>{let m=this.treeViewNode.captionDiv.getElementsByClassName("jo_valueSpan")[0];y(m).addClass("jo_valueSpanEditable");let g=y(m).text(),f=function(){y(this).attr("contentEditable","false");let b=y(this).text();g!=b&&a(b)};m.onfocus=function(){window.setTimeout(function(){var b,A;window.getSelection&&document.createRange&&(A=document.createRange(),A.selectNodeContents(m),b=window.getSelection(),b.removeAllRanges(),b.addRange(A))},1)},this.treeViewNode.onClickHandler=()=>{y(m).attr("contentEditable","true"),m.focus()},y(m).on("blur",f).on("keydown",function(b){switch(b.key){case"Enter":f.call(this),b.preventDefault();break;case"Escape":y(this).attr("contentEditable","false"),y(this).text(g);break}})},10)}renderStringClass(t,e){let i=t==null?"null":`"${t.value}"`;this.setCaption(" = ",i,"jo_debugger_value",!0,!1,n=>{if(n=="null"){e&&e(null);return}else e&&(n=""+n,n.startsWith('"')&&(n=n.substring(1)),n.endsWith('"')&&(n=n.substring(0,n.length-1)),t==null?t=new Y(n):t.value=n,e(t))})}renderPrimitiveValue(t,e){typeof t=="string"?this.setCaption(" = ",`"${t}"`,"jo_debugger_value",!0,!1,i=>{e&&e(i)}):this.setCaption(" = ",""+t,"jo_debugger_value",!0,!1,i=>{if(e){if(typeof t=="boolean")e(i=="true");else if(typeof t=="number")try{let n=Number.parseFloat(i);e(n)}catch{}}}),this.removeChildren()}renderObject(t){let e=t.getType();if(e.identifier=="String"){this.setCaption(" = ",'"'+(""+t.value)+'"',"jo_debugger_value");return}if(["Double","Boolean","Integer","Float","Character"].indexOf(e.identifier)>=0){this.renderPrimitiveValue(t.value);return}let i=!1;if(e!=this.type&&(i=!0,e instanceof Le&&this.type instanceof di&&this.type.isGenericVariantOf==e&&(i=!1)),(i||!this.type)&&(this.type=e),t.getElements){this.renderList(t);return}let n;if(t._debugOutput?n=t._debugOutput():n=on.renderValue(t,Zr.quickArrayOutputMaxLength),this.identifier=="this"){n="";let s=this.treeViewNode.getMainDiv().style;s.borderBottomStyle="dashed",s.borderBottomColor="#808080",s.borderBottomWidth="1px"}if(this.treeViewNode.iconClass="img_debugger-object",this.setCaption(": "+this.type.toString()," "+n,"jo_debugger_value"),i||this.children.length==0){this.removeChildren();let s=e.getOwnAndInheritedFields().filter(a=>!a.hiddenWhenDebugging);this.treeViewNode.isFolder=s.length>0,this.treeViewNode.removeAllExpandListeners(),this.treeViewNode.addExpandListener(a=>{if(a!="collapsed"){for(let l of s){let h=new dA(this.symbolTableSection,this,l);this.children.push(h)}this.children.forEach(l=>l.fetchValueFromObjectAndRender(t))}},!0),this.treeViewNode.expandCollapseComponent.setState(this.identifier=="this"?"expanded":"collapsed")}this.children.forEach(s=>s.fetchValueFromObjectAndRender(t))}renderList(t){this.setCaption(": ",this.type.toString()+"-"+wi.object(),"jo_debugger_type");let e=t.getElements();if(e.length!=this.oldLength){this.removeChildren(),this.oldLength=e.length;for(let i=0;i0}this.children.forEach(i=>i.fetchValueFromArrayAndRender(e))}renderArray(t,e){if(t==null||!this.type)return;this.treeViewNode.isFolder=t.length>0,typeof this.oldLength>"u"&&this.treeViewNode.expandCollapseComponent.setState("collapsed");let i=this.type.getElementType();for(this.setCaption(": "+i.toString()+"["+t.length+"] ",on.quickArrayOutput(t,Zr.quickArrayOutputMaxLength,this.oldValue,"jo_debugger_pulse"),"jo_debugger_value",!1,!0),t.length<1e4&&(this.oldValue=t.slice());(this.children.length||0)>t.length;)this.children.pop().treeViewNode.destroy();if(t.length!=this.oldLength||this.children.length==0){let n=()=>{if(t.length>Zr.MAXARRAYSECTIONLENGTH){let s=this.getSubintervalLength(t.length);for(let a=0;as.fetchValueFromArrayAndRender(t))};this.treeViewNode.expandCollapseComponent.state=="expanded"?n():(this.treeViewNode.removeAllExpandListeners(),this.treeViewNode.addExpandListener(s=>{n()}))}else this.children.forEach(n=>n.fetchValueFromArrayAndRender(t))}getSubintervalLength(t){let e=Math.trunc(Math.log10(t));return Math.max(Math.trunc(Math.pow(10,e-2)),100)}};r(Zr,"MAXCHILDREN",30),r(Zr,"MAXARRAYSECTIONLENGTH",100),r(Zr,"quickArrayOutputMaxLength",100);let ms=Zr;class oA extends ms{constructor(t,e){super(t,void 0,e.getType(),e.identifier),this.symbol=e,this.symbol instanceof Rh||(this.treeViewNode.getMainDiv().style.display="none")}fetchValueFromStackAndRender(t,e,i){let n=!0,s=this.symbol.identifierRange;if((s.endLineNumber{t[e+this.symbol.stackframePosition]=l})}}}class lA extends ms{constructor(t,e){super(t,void 0,e.getType(),e.identifier),this.field=e}fetchValueAndRender(t,e){let i=!0,n=this.field.identifierRange;if((n.endLineNumber{s[this.field.getInternalName()]=l})}}}class dA extends ms{constructor(t,e,i){super(t,e,i.getType(),i.identifier),this.field=i,this.isLocalVariable=!1}fetchValueFromObjectAndRender(t){let e,i=this.field.getFieldIndentifier();this.field.isStatic()?(e=t.getType().runtimeClass[i],this.render(e,n=>{t.getType().runtimeClass[i]=n})):(e=t[i],this.render(e,n=>{t[i]=n}))}}class af extends ms{constructor(t,e,i,n){super(t,e,n,e.identifier+'['+i+"]"),this.index=i}fetchValueFromArrayAndRender(t){let e=t[this.index];this.render(e,i=>{t[this.index]=i})}}class hp extends ms{constructor(t,e,i,n,s){super(t,e,s,e.identifier),this.indexFrom=i,this.indexTo=n,this.setCaption("","["+this.indexFrom+" ... "+this.indexTo+"]","jo_debugger_index")}fetchValueFromArrayAndRender(t){this.treeViewNode.isFolder=!0,typeof this.oldLength>"u"&&(this.treeViewNode.expandCollapseComponent.setState("collapsed"),this.treeViewNode.removeAllExpandListeners(),this.oldLength=this.indexTo-this.indexFrom+1,this.treeViewNode.addExpandListener(e=>{if(this.oldLength>ms.MAXARRAYSECTIONLENGTH){let i=this.getSubintervalLength(this.oldLength);for(let n=this.indexFrom;n<=this.indexTo;n+=i)this.children.push(new hp(this.symbolTableSection,this,n,Math.min(n+i-1,this.indexTo),this.type))}else for(let i=this.indexFrom||0;i<=this.indexTo;i++)this.children.push(new af(this.symbolTableSection,this,i,this.type));this.children.forEach(i=>i.fetchValueFromArrayAndRender(t))},!0),this.children.forEach(e=>e.fetchValueFromArrayAndRender(t))),(t.length!=this.oldLength||this.children.length==0)&&this.treeViewNode.expandCollapseComponent.state=="expanded";for(let e of this.children)e.fetchValueFromArrayAndRender(t)}}class hA extends ms{constructor(t,e,i){super(t,e,void 0,e.identifier+'['+i+"]"),this.index=i}fetchValueFromArrayAndRender(t){let e=t[this.index];this.render(e,i=>{t[this.index]=i})}}class Bp{constructor(t,e,i){r(this,"children",[]);r(this,"staticFieldChildren",[]);this.treeview=t,this.symbolTable=e,this.debugger1=i,this.reReadSymbolTable()}reReadSymbolTable(){var n,s;let t=this.children.slice();this.children=[];let e=0,i=this.symbolTable.getSymbolsOnStackframeForDebugger();for(let a of i)if(!a.hiddenWhenDebugging){if(t.length>e){let l=t[e++];if(l.identifier==a.identifier){this.children.push(l);continue}}this.children.push(new oA(this,a))}if(this.symbolTable instanceof Uh&&((n=this.symbolTable.classContext)!=null&&n.isMainClass)&&this.symbolTable.classContext!=((s=this.symbolTable.parent)==null?void 0:s.classContext))for(let a of this.symbolTable.classContext.getFields().filter(l=>l.isStatic()&&!l.hiddenWhenDebugging))this.staticFieldChildren.push(new lA(this,a))}renewValues(t,e,i){this.children.forEach(n=>n.fetchValueFromStackAndRender(t,e,i)),this.staticFieldChildren.forEach(n=>n.fetchValueAndRender(i,this.debugger1.main.getInterpreter()))}attachNodesToTreeview(){for(let t of this.children)t.attachNodesToTreeview();for(let t of this.staticFieldChildren)t.attachNodesToTreeview()}}class of extends ng{constructor(e,i,n){super(e,n);r(this,"currentlyVisibleSymbolTableSections",[]);r(this,"showVariablesTreeview");r(this,"callstackTreeview");r(this,"threadsTreeview");r(this,"watchTreeview");r(this,"maxCallstackEntries",15);r(this,"lastThread");r(this,"watchSection");this.initShowVariablesTreeview(),this.initWatchTreeview(),i&&this.initFileTreeview(),this.initCallstackTreeview(),this.initThreadsTreeview(),this.watchSection=new aA(this.watchTreeview,this),setTimeout(()=>{this.treeviewAccordion.onResize(!0)},100)}initWatchTreeview(){this.watchTreeview=new li(this.treeviewAccordion,{captionLine:{enabled:!0,text:wi.watch()},flexWeight:"1",withDeleteButtons:!0,isDragAndDropSource:!1,buttonAddFolders:!1,withSelection:!1,minHeight:50,orderBy:"comparator"})}initThreadsTreeview(){this.threadsTreeview=new li(this.treeviewAccordion,{captionLine:{enabled:!0,text:wi.threads()},flexWeight:"1",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,buttonAddElements:!1,withSelection:!0,minHeight:50,orderBy:"comparator",initialExpandCollapseState:"collapsed"})}initCallstackTreeview(){this.callstackTreeview=new li(this.treeviewAccordion,{captionLine:{enabled:!0,text:wi.callStack()},flexWeight:"1",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,buttonAddElements:!1,withSelection:!0,minHeight:50,orderBy:"comparator",initialExpandCollapseState:"collapsed"})}initShowVariablesTreeview(){this.showVariablesTreeview=new li(this.treeviewAccordion,{captionLine:{enabled:!0,text:wi.variables()},flexWeight:"3",withDeleteButtons:!1,isDragAndDropSource:!1,buttonAddFolders:!1,buttonAddElements:!1,withSelection:!1,minHeight:200,orderBy:"comparator"})}showThreads(e){let i=e.getCurrentThread();this.threadsTreeview.clear();let n=e.getAllThreads();n.length==0&&this.lastThread&&(n=[this.lastThread]);for(let s of n){let a=s.name,l="img_thread-"+F[s.state],h=this.threadsTreeview.addNode(!1,a,l,s,void 0);h.setTooltip(a+"("+F[s.state]+")"),s==i&&h.setSelected(!0),h.onClickHandler=u=>{if(!u)return;this.showCallstack(u),this.showVariablesOfProgramState(u);let m=this.callstackTreeview.nodes[0];m&&m.select()}}}updateView(){var s;let e=this.main.getRepl(),i=this.main.getInterpreter().scheduler.getCurrentThread();if((s=i==null?void 0:i.currentProgramState)!=null&&s.program&&!i.currentProgramState.program.isReplProgram||e.state!="standalone"){this.showThreadState(this.main.getInterpreter().scheduler.getCurrentThread());return}let n=e.standaloneThread;this.showVariablesOfStandaloneRepl(n,e.standaloneSymbolTable),this.showCallstack(n),this.showThreads(n.scheduler),this.watchSection.update(n.scheduler.interpreter)}showThreadState(e){e||this.lastThread&&(e=this.lastThread),this.lastThread=e,e&&(this.showVariablesOfProgramState(e),this.showCallstack(e),this.showThreads(e.scheduler),this.watchSection.update(e.scheduler.interpreter))}showCallstack(e){this.callstackTreeview.clear();let i=e.programStack;if(i.length==0)return;let n=Math.min(i.length,this.maxCallstackEntries);for(let s=i.length-1;s>=i.length-n;s--){let a=i[s],l=new Wm(a),h=this.callstackTreeview.addNode(!1,l.getCaption(),void 0,l,void 0);h.onClickHandler=u=>{this.showVariablesOfProgramState(e,u==null?void 0:u.programState),this.showCallstackPositionInsideProgram(e,u)},s==i.length-1&&h.setSelected(!0)}n=0&&(s=U.getStartPosition(a)),this.showVariablesTreeview.detachAllNodes();for(let l of this.currentlyVisibleSymbolTableSections)l.attachNodesToTreeview(),l.renewValues(e.s,0,s)}showVariablesOfProgramState(e,i){var g;if(i||e.programStack.length>0&&(i=e.programStack[e.programStack.length-1]),!i){this.showVariablesTreeview.clear(),this.currentlyVisibleSymbolTableSections=[];return}let n=new Wm(i);if(!n.symbolTable)return;let s=[],a=n.symbolTable;for(;a;)a.hiddenWhenDebugging||s.unshift(a),a=a.parent;let l=[],h=!1;for(let f=0;fs.length||b.symbolTable!=s[f]||h?h=!0:l.push(b)}for(;l.length=0&&(u=U.getStartPosition(m)),this.showVariablesTreeview.detachAllNodes();for(let f of this.currentlyVisibleSymbolTableSections)f.attachNodesToTreeview(),f.renewValues(e.s,i.stackBase,u)}}const jr=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],Fp=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function kd(c){if(c>=Fp.length)throw new Error("Unable to parse base64 string.");const t=Fp[c];if(t===255)throw new Error("Unable to parse base64 string.");return t}function lf(c){let t="",e,i=c.length;for(e=2;e>2],t+=jr[(c[e-2]&3)<<4|c[e-1]>>4],t+=jr[(c[e-1]&15)<<2|c[e]>>6],t+=jr[c[e]&63];return e===i+1&&(t+=jr[c[e-2]>>2],t+=jr[(c[e-2]&3)<<4],t+="=="),e===i&&(t+=jr[c[e-2]>>2],t+=jr[(c[e-2]&3)<<4|c[e-1]>>4],t+=jr[(c[e-1]&15)<<2],t+="="),t}function cp(c){if(c.length%4!==0)throw new Error("Unable to parse base64 string.");const t=c.indexOf("=");if(t!==-1&&t>16,n[l+1]=s>>8&255,n[l+2]=s&255;return n.subarray(0,n.length-e)}class up{constructor(t,e=!1){r(this,"headingsDiv");r(this,"bodiesDiv");r(this,"tabheadingRightDiv");r(this,"tabs",[]);this.container=t,this.sharedBody=e,this.container.classList.add("jo_tabs_container"),this.headingsDiv=document.createElement("div"),this.headingsDiv.classList.add("jo_tabheadings"),this.container.appendChild(this.headingsDiv),this.bodiesDiv=document.createElement("div"),this.bodiesDiv.classList.add("jo_tabs"),this.container.appendChild(this.bodiesDiv),this.tabheadingRightDiv=document.createElement("div"),this.tabheadingRightDiv.classList.add("jo_tabheading-right","jo_noHeading"),this.headingsDiv.appendChild(this.tabheadingRightDiv)}addTab(t){t.tabManager=this,this.tabs.push(t),this.headingsDiv.insertBefore(t.headingDiv,this.tabheadingRightDiv),this.sharedBody||this.bodiesDiv.appendChild(t.bodyDiv)}insertIntoRightDiv(t){this.tabheadingRightDiv.appendChild(t)}setActive(t){for(let e of this.tabs)e!=t&&(e.headingDiv.classList.remove("jo_active"),this.sharedBody||(e.bodyDiv.style.display="none"));t.headingDiv.classList.add("jo_active"),this.sharedBody||(t.bodyDiv.style.display="flex")}setTabVisible(t,e){if(t.visible!=e&&(t.headingDiv.style.display=e?"block":"none",t.bodyDiv.style.display=e?"":"none",t.visible=e,!e&&t.isActive())){let i=this.tabs.find(n=>n.visible);i&&this.setActive(i)}}getTabByName(t){return this.tabs.find(e=>e.name==t)}}class mn{constructor(t,e,i=[],n=!1){r(this,"headingDiv");r(this,"bodyDiv");r(this,"tabManager");r(this,"visible",!0);r(this,"onShow");if(this.name=t,this.headingDiv=document.createElement("div"),this.headingDiv.classList.add("jo_tabheading"),this.headingDiv.textContent=e,this.headingDiv.onclick=s=>{this.show()},!n){this.bodyDiv=document.createElement("div"),this.bodyDiv.classList.add("jo_tab");for(let s of i)this.bodyDiv.classList.add(s)}}show(){this.tabManager.setActive(this),this.onShow&&this.onShow()}isActive(){return this.headingDiv.classList.contains("jo_active")}setVisible(t){this.tabManager.setTabVisible(this,t)}}class cA{fetchTemplateFromCache(t,e){if(t==null){e(null);return}let i=this;this.cacheAvailable()||e(null),this.getCache(n=>{n.match(i.databaseIdToCacheIdentifier(t)).then(s=>{s.arrayBuffer().then(a=>e(new Uint8Array(a)))}).catch(()=>e(null))})}saveTemplateToCache(t,e){if(!this.cacheAvailable())return;let i=this;this.getCache(n=>{n.put(i.databaseIdToCacheIdentifier(t),new Response(e))})}cacheAvailable(){return"caches"in self}getCache(t){caches.open("my-cache").then(t)}databaseIdToCacheIdentifier(t){return"/onlineIdeTemplateDb"+t}}class Ws{static parse(t){if(typeof t=="string")try{return JSON.parse(t)}catch{return}}static stringify(t){if(!(typeof t>"u")){if(t===null)return null;try{return JSON.stringify(t)}catch{return}}}}class uA{constructor(t,e){r(this,"timerhandle");r(this,"ownUpdateFrequencyInSeconds",25);r(this,"teacherUpdateFrequencyInSeconds",5);r(this,"updateFrequencyInSeconds",25);r(this,"forcedUpdateEvery",25);r(this,"forcedUpdatesInARow",0);r(this,"secondsTillNextUpdate",this.updateFrequencyInSeconds);r(this,"errorHappened",!1);r(this,"interval");r(this,"counterTillForcedUpdate");this.main=t,this.$updateTimerDiv=e}async initializeTimer(){let t=this;this.$updateTimerDiv.find("svg").attr("width",t.updateFrequencyInSeconds),this.interval!=null&&clearInterval(this.interval),this.counterTillForcedUpdate=this.forcedUpdateEvery,this.interval=setInterval(()=>{if(t.main.user==null)return;if(t.secondsTillNextUpdate--,t.secondsTillNextUpdate<0){t.secondsTillNextUpdate=t.updateFrequencyInSeconds,t.counterTillForcedUpdate--;let i=t.counterTillForcedUpdate==0;i&&(this.forcedUpdatesInARow++,t.counterTillForcedUpdate=this.forcedUpdateEvery,this.forcedUpdatesInARow>50&&(t.counterTillForcedUpdate=this.forcedUpdateEvery*10)),t.sendUpdatesAsync(i,!1)}let e=this.$updateTimerDiv.find(".jo_updateTimerRect");e.attr("width",t.secondsTillNextUpdate+"px"),t.errorHappened?(e.css("fill","#c00000"),this.$updateTimerDiv.attr("title","Fehler beim letzten Speichervorgang -> Werd's wieder versuchen")):(e.css("fill","#008000"),this.$updateTimerDiv.attr("title",t.secondsTillNextUpdate+" Sekunden bis zum nächsten Speichern")),ih.sendDataToServer()},1e3)}initializePushClientManager(){Si.getInstance().subscribe("doFileUpdate",t=>{this.sendUpdatesAsync(!0,!1,!0)})}savePruefungWorkspace(t){var i,n;let e={workspacesWithoutFiles:[t.getWorkspaceData(!1)],files:t.getFiles().map(s=>s.getFileData(t)),owner_id:this.main.workspacesOwnerId,userId:this.main.user.id,currentWorkspaceId:((i=this.main.currentWorkspace)==null?void 0:i.pruefung_id)==null?(n=this.main.currentWorkspace)==null?void 0:n.id:null,getModifiedWorkspaces:!1};qe("servlet/sendUpdates",e)}async sendUpdatesAsync(t=!1,e=!1,i=!1){var f,b,A;if(this.main.user==null||this.main.user.is_testuser)return!0;let n=(f=this.main.rightDiv)==null?void 0:f.classDiagram,s=this.main.guiState;(n!=null&&n.dirty||this.main.gui_state_dirty)&&(s.classDiagram=n==null?void 0:n.serialize(),this.sendUpdateGuiState(e).then(C=>{C&&(this.main.gui_state_dirty=!1,n&&(n.dirty=!1))}),this.forcedUpdatesInARow=0);let a=[],l=[],h=[],u=[];for(let C of this.main.workspaceList){C.saved||(a.push(C.getWorkspaceData(!1)),h.push(C),this.forcedUpdatesInARow=0);for(let w of C.getFiles())w.isSaved()||(this.forcedUpdatesInARow=0,l.push(w.getFileData(C)),u.push(w))}let m={workspacesWithoutFiles:a,files:l,owner_id:this.main.workspacesOwnerId,userId:this.main.user.id,currentWorkspaceId:((b=this.main.currentWorkspace)==null?void 0:b.pruefung_id)==null?(A=this.main.currentWorkspace)==null?void 0:A.id:null,getModifiedWorkspaces:t},g=this;if(a.length>0||l.length>0||t||this.errorHappened)if(e)navigator.sendBeacon("sendUpdates",JSON.stringify(m));else try{let C=await qe("servlet/sendUpdates",m);if(g.errorHappened=!C.success,g.errorHappened){let w="Fehler beim Senden der Daten: ";return C.message&&(w+=C.message),console.log(w),!1}else return u.forEach(w=>w.setSaved(!0)),h.forEach(w=>w.saved=!0),C.workspaces!=null&&g.updateWorkspaces(m,C,i),!0}catch(C){g.errorHappened=!0,console.log("Fehler beim Ajax-call: "+C);return}return!0}async sendCreateWorkspace(t,e){if(this.main.user.is_testuser)return t.id=Math.round(Math.random()*1e7),null;let n={type:"create",entity:"workspace",data:t.getWorkspaceData(!1),owner_id:e,userId:this.main.user.id},s=await qe("servlet/createOrDeleteFileOrWorkspace",n);return s.success?(t.id=s.id,!0):!1}async moveFile(t,e){return(await qe("servlet/moveFile",{file_id:t,destination_workspace_id:e})).success}async sendCreateFile(t,e,i){if(this.main.user.is_testuser)return t.id=Math.round(Math.random()*1e7),!1;let s={type:"create",entity:"file",data:t.getFileData(e),owner_id:i,userId:this.main.user.id},a=await qe("servlet/createOrDeleteFileOrWorkspace",s);return a.success&&(t.id=a.id,t.setSaved(!0)),a.success}async sendDuplicateWorkspace(t){if(this.main.user.is_testuser)return{message:"Diese Aktion ist für den Testuser nicht möglich.",workspace:null,success:!1};let e={workspace_id:t.id};return await qe("/servlet/duplicateWorkspace",e)}sendDistributeWorkspace(t,e,i,n){if(this.main.user.is_testuser){n("Diese Aktion ist für den Testuser nicht möglich.");return}this.sendUpdatesAsync(!1).then(()=>{let s={workspace_id:t.id,class_id:e==null?void 0:e.id,student_ids:i};pt("distributeWorkspace",s,a=>{n(a.message)},n)})}sendSetSecret(t,e,i,n){pt("setRepositorySecret",{repository_id:t,newSecretRead:e,newSecretWrite:i},a=>{n(a)},a=>{alert(a)})}sendCreateRepository(t,e,i,n,s){if(this.main.user.is_testuser){s("Diese Aktion ist für den Testuser nicht möglich.");return}this.sendUpdatesAsync(!0).then(()=>{let a={workspace_id:t.id,publish_to:e,name:i,description:n};pt("createRepository",a,l=>{t.getFiles().forEach(h=>{h.is_copy_of_id=h.id,h.repository_file_version=1}),t.repository_id=l.repository_id,t.has_write_permission_to_repository=!0,s(l.message,l.repository_id)},s)})}async sendDeleteWorkspaceOrFileAsync(t,e){if(this.main.user.is_testuser)return!0;let i={type:"delete",entity:t,ids:e,userId:this.main.user.id};return(await qe("/servlet/createOrDeleteFileOrWorkspace",i)).success}async sendUpdateGuiState(t=!1){if(this.main.user.is_testuser)return!0;let e={gui_state:Ws.stringify(this.main.guiState),userId:this.main.user.id};if(t)return navigator.sendBeacon("servlet/updateGuiState",JSON.stringify(e)),!0;{let i=await qe("servlet/updateGuiState",e);return(i==null?void 0:i.success)||!1}}async sendUpdateFileOrder(t){let e={fileOrderList:t.map(n=>({fileId:n.id,order:n.sorting_order}))};return(await qe("servlet/updateFileOrder",e)).success}async sendUpdateWorkspaceOrder(t){let e={workspaceOrderList:t.map(n=>({workspaceId:n.id,order:n.sorting_order}))};return(await qe("servlet/updateWorkspaceOrder",e)).success}updateWorkspaces(t,e,i=!1){var l;let n=new Map,s=[];t.files.forEach(h=>s.push(h.id)),e.workspaces.workspaces.forEach(h=>n.set(h.id,h));let a=[];for(let h of e.workspaces.workspaces)this.main.workspaceList.filter(m=>m.id==h.id).length==0&&(h.pruefung_id==null&&a.push(h.name),this.createNewWorkspaceFromWorkspaceData(h));for(let h of this.main.workspaceList){let u=n.get(h.id);if(u!=null){let m=new Map;u.files.forEach(f=>m.set(f.id,f));let g=new Map;for(let f of h.getFiles()){let b=f.id;g.set(b,f);let A=m.get(b);A==null?(this.main.projectExplorer.fileTreeview.removeElementAndItsFolderContents(f),(l=this.main.getCurrentWorkspace())==null||l.removeFile(f)):(s.indexOf(b)<0&&f.getText()!=A.text&&(f.setText(A.text),f.setSaved(!0)),f.remote_version=A.version)}for(let f of u.files)g.get(f.id)==null&&this.createFile(h,f)}}if(a.length>0&&i){let h=a.length>1?"Folgende Workspaces hat Deine Lehrkraft Dir gesendet: ":"Folgenden Workspace hat Deine Lehrkraft Dir gesendet: ";h+=a.join(", "),alert(h)}this.main.projectExplorer.workspaceTreeview.sort(),this.main.projectExplorer.fileTreeview.sort()}updateFiles(t){let e=new Map;for(let i of this.main.workspaceList)for(let n of i.getFiles())e[n.id]=n;for(let i of t){let n=e.get(i.id);n!=null&&n.getText()!=i.text&&(n.setText(i.text),n.setSaved(!0),n.remote_version=i.version)}}createNewWorkspaceFromWorkspaceData(t,e=!1){let i=this.main.restoreWorkspaceFromData(t);this.main.workspaceList.push(i);let n=t.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository",s=this.main.projectExplorer.workspaceTreeview.addNode(i.isFolder,i.name,n,i);return i.repository_id!=null&&i.renderSynchronizeButton(s),e&&this.main.projectExplorer.workspaceTreeview.sort(),i}createFile(t,e){let i=this.main.projectExplorer.getNewFile(e);if(t==this.main.getCurrentWorkspace()){let n=Gi.filenameToFileType(i.name,this.main.getCurrentProgrammingLanguage()).iconclass;this.main.projectExplorer.fileTreeview.addNode(!1,i.name,n,i)}t.addFile(i)}fetchDatabase(t,e){let i=new cA;pt("getDatabase",{databaseCode:t},s=>{if(s.success){let a=s.database;i.fetchTemplateFromCache(a.based_on_template_id,l=>{if(l!=null){a.templateDump=wp.inflate(l),e(a,null);return}else{if(a.based_on_template_id==null){e(a,null);return}this.fetchTemplate(t,h=>{if(h!=null){i.saveTemplateToCache(a.based_on_template_id,h),a.templateDump=wp.inflate(h),e(a,null);return}else{e(null,"Konnte das Template nicht laden.");return}})}})}else e(null,"Netzwerkfehler!")})}fetchTemplate(t,e){let i={databaseCode:t},n={};Ft!=null&&(n={"x-token-pm":Ft}),y.ajax({type:"POST",async:!0,headers:n,data:JSON.stringify(i),contentType:"application/json",url:"servlet/getTemplate",xhrFields:{responseType:"arraybuffer"},success:function(s){e(new Uint8Array(s))},error:function(s,a){alert("Konnte das Template nicht laden."),e(null)}})}addDatabaseStatement(t,e,i,n){pt("addDatabaseStatements",{databaseCode:t,version_before:e,statements:i},a=>{n(a.statements_before,a.new_version,a.message)},a=>{n([],0,a)})}rollbackDatabaseStatement(t,e,i){pt("rollback",{databaseCode:t,current_version:e},s=>{i(s.message)})}async fetchGrade(t,e){return(await qe("servlet/getGrade",{schuelerId:t,pruefungId:e})).grade}createOrUpdateGrade(t,e,i,n,s){qe("servlet/createOrUpdateGrade",{schuelerId:t,pruefungId:e,grade:i,points:n,comment:s})}}class df{}r(df,"noFilesToImport",()=>d({de:"Keine Dateien zum Import vorhanden.",en:"No files to import."}));class te{}r(te,"heading",()=>d({de:"Sprites verwalten",en:"Manage sprites"})),r(te,"stepOne",()=>d({de:"1. Schritt: png-Dateien hierhin ziehen oder...",en:"Step 1: Drag png files here or..."})),r(te,"filesSelected",()=>d({de:" Dateien sind ausgewählt.",en:" files are selected."})),r(te,"fileSelected",()=>d({de:"Eine Datei ist ausgewählt.",en:"One file is selected."})),r(te,"stepTwo",()=>d({de:"2. Schritt: Angaben zu den Grafikdateien",en:"Step 2: Setup Details"})),r(te,"rows",()=>d({de:"Zeilen:",en:"Rows:"})),r(te,"columns",()=>d({de:"Spalten:",en:"Columns:"})),r(te,"margin",()=>d({de:"Rand (in px)",en:"Margin (in px)"})),r(te,"distance",()=>d({de:"Abstand (in px)",en:"Distance (in px)"})),r(te,"series",()=>d({de:"Serie: ",en:"Series: "})),r(te,"fromIndex",()=>d({de:"Ab Index: ",en:"From Index: "})),r(te,"stepThree",()=>d({de:"3. Schritt: importieren",en:"Step 3: import"})),r(te,"messages",()=>d({de:"Meldungen: ",en:"Messages: "})),r(te,"fileSize",()=>d({de:"Größe der Spritesheet-Datei: ",en:"Spritesheet-filesize: "})),r(te,"importWholeSpritesheet",()=>d({de:"Gesamtes Spritesheet aus Datei importieren:",en:"Import whole spritesheet from file:"})),r(te,"exportWholeSpritesheet",()=>d({de:"Spritesheet in Datei exportieren",en:"Export spritesheet to file"})),r(te,"removeAllSprites",()=>d({de:"Alle Sprites aus dem Spritesheet entfernen",en:"Remove all sprites from spritesheet"})),r(te,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(te,"sureDelete",()=>d({de:"Ich bin mir sicher: löschen!",en:"I'm sure: delete!"})),r(te,"save",()=>d({de:"Speichern",en:"Save"})),r(te,"nameOfSpritesheet",()=>d({de:"Name des Spritesheets?",en:"Name of spritesheet?"})),r(te,"imagesAdded",()=>d({de:" Bilder hinzugefügt",en:" images added"})),r(te,"index",()=>d({de:"Index: ",en:"Index: "})),r(te,"widthHeight",(t,e)=>d({de:"Breite: "+t+" px, Höhe: "+e+" px",en:"Width: "+t+" px, height: "+e+" px"})),r(te,"noWorkspaceSelected",()=>d({de:"Kein Workspace ausgewählt.",en:"No Workspace selected."})),r(te,"mangeWorkspaceSprites",t=>d({de:"Sprites des Workspace "+t+" verwalten",en:"Manage sprites of workspace "+t})),r(te,"mangeRepositorySprites",t=>d({de:"Sprites des Repositorys "+t+" verwalten",en:"Manage sprites of repository "+t})),r(te,"identifierAlreadyUsed",t=>d({de:"Der Bezeichner "+t+" wird schon für interne Sprites verwendet.",en:"Identifier "+t+" is used for internal sprites already."})),r(te,"seriesIndexAlreadyUsed",(t,e)=>d({de:"Serie "+t+", index "+e+" ist schon weiter oben vergeben.",en:"Series "+t+", index "+e+" already is used."})),r(te,"pleaseSelectZip",()=>d({de:"Spritesheets sind immer in einer zip-Datei gespeichert. Die von Ihnen ausgewählte Datei ist also kein Spritesheet.",en:"Spritesheets are always stored in a zip file. The file you selected is not a spritesheet.",fr:"Les spritesheets sont toujours stockés dans un fichier zip. Le fichier que vous avez sélectionné n'est pas un spritesheet."}));class hf{}r(hf,"couldntLoadSpritesheet",()=>d({de:"Konnte das Spritesheet nicht laden: ",en:"Couldn't load spritesheet: "}));class ps{constructor(){r(this,"pixiSpritesheetData");r(this,"pngImageData");r(this,"pngFile");r(this,"zipFile")}async initializeSpritesheetForWorkspace(t,e,i){let n=new Set,s=!1;if(t.spritesheetId!=null||typeof i=="string"&&i!=null){if(t.repository_id!=null){let a={workspace_id:t.id},l=await qe("servlet/getSpritesheetIdForWorkspace",a);t.spritesheetId=l.spritesheet_id}try{await this.load(t.spritesheetId!=null?t.spritesheetId:i),s=!0}catch{console.log("Fehler beim Laden des Spritesheets vom Server!");return}}if(i!=null&&typeof i!="string"&&(await this.unpackZip(i),s=!0),s&&this.pngImageData!=null&&this.pixiSpritesheetData!=null){e.getInterpreter().graphicsManager.setUserData(this.pixiSpritesheetData,this.pngImageData);for(let l in this.pixiSpritesheetData.frames){let h=l.indexOf("#");n.add(l.substring(0,h))}}if(e.getCompiler()instanceof sf){let a=e.getCompiler().getType("SpriteLibrary"),l=a.runtimeClass;l.removeUserSpritesheets(a),n.forEach(h=>l.addEntry(h,a))}}async load(t,e=!0){t!=null&&(typeof t=="number"&&(t="sprites/"+("0"+(t%256).toString(16)).slice(-2).toUpperCase()+"/"+t+".zip"),await this.loadFromServer(t,e),this.zipFile!=null&&await this.unpackZip(this.zipFile))}unpackPngFile(){let t=Fo.decode(this.pngFile.buffer),e=Fo.toRGBA8(t)[0];this.pngImageData=new Uint8Array(e),this.pixiSpritesheetData.meta.size.w=t.width,this.pixiSpritesheetData.meta.size.h=t.height}async loadFromServer(t,e=!0){let i={};return Ft!=null&&(i={"x-token-pm":Ft}),new Promise((n,s)=>{y.ajax({type:"GET",async:!0,url:t,headers:i,xhrFields:{responseType:"arraybuffer"},success:a=>{this.zipFile=new Uint8Array(a),n()},error:(a,l)=>{e&&alert(hf.couldntLoadSpritesheet()+l),s()}})})}async unpackZip(t){t instanceof File&&(t=await this.readFile(t)),await this.continueUnpackZip(t)}async readFile(t){return new Promise((e,i)=>{var n=new FileReader;n.onload=()=>{let s=new Uint8Array(n.result);e(s)},n.onerror=i,n.readAsArrayBuffer(t)})}async continueUnpackZip(t){let e,i;(await Pd.loadAsync(t)).forEach(function(s,a){a.name.endsWith(".png")&&(i=a),a.name.endsWith(".json")&&(e=a)}),this.pngFile=await i.async("uint8array"),this.pixiSpritesheetData=JSON.parse(await e.async("text")),this.unpackPngFile()}async makeZip(t="spritesheet"){const e=new Pd;e.file(t+".png",this.pngFile),e.file(t+".json",JSON.stringify(this.pixiSpritesheetData),{compression:"DEFLATE",compressionOptions:{level:9}}),this.zipFile=await e.generateAsync({type:"uint8array"})}}class mA{constructor(t){this.name=t}getIdentifier(){return this.name}}class Oi extends mA{constructor(e,i,n){super(e);r(this,"isFolder");r(this,"parent_folder_id");r(this,"sorting_order");r(this,"readonly");r(this,"id");r(this,"owner_id");r(this,"version");r(this,"published_to");r(this,"repository_id");r(this,"has_write_permission_to_repository");r(this,"spritesheetId");r(this,"grade");r(this,"points");r(this,"comment");r(this,"files",[]);r(this,"currentlyOpenFile");r(this,"saved",!0);r(this,"pruefung_id");r(this,"userSpritesheet");r(this,"settings",{language:"Java",libraries:[]});this.main=i,this.owner_id=n}setLibraries(e){e==null||e.setLibraries(this.settings.libraries)}getFiles(){return this.files}getPath(e){let i=[],n;for(;n=e.parent_folder_id?this.files.find(s=>s.id==e.parent_folder_id):void 0;)i.unshift(n.name),e=n;return i}static pathsEqual(e,i){if(e.length!=i.length)return!1;for(let n=0;ni.hasMonacoModel()))e.getMonacoModel().dispose();this.files=[]}addFile(e){this.files.push(e)}removeFile(e){let i=this.files.indexOf(e);i>=0&&this.files.splice(i,1)}getWorkspaceData(e){let i={name:this.name,isFolder:this.isFolder,parent_folder_id:this.parent_folder_id,sorting_order:this.sorting_order,id:this.id,owner_id:this.owner_id,current_file_id:this.currentlyOpenFile==null?null:this.currentlyOpenFile.id,files:[],version:this.version,repository_id:this.repository_id,has_write_permission_to_repository:this.has_write_permission_to_repository,settings:JSON.stringify(this.settings),spritesheet_id:this.spritesheetId,pruefung_id:this.pruefung_id,readonly:this.readonly,grade:this.grade,points:this.points,comment:this.comment};if(e)for(let n of this.files)i.files.push(n.getFileData(this));return i}renderSynchronizeButton(e){let i=e.getIconButtonByTag("Synchronize");i||(i=e.addIconButton("img_open-change-dark",()=>{this.synchronizeWithRepository()},E.SynchronizeWorkspace(),!1),i.tag="Synchronize");let n=this.main;i.setVisible(this.repository_id!=null&&this.owner_id==n.user.id)}synchronizeWithRepository(){let e=this.main;this.repository_id!=null&&this.owner_id==e.user.id&&e.networkManager.sendUpdatesAsync(!0).then(()=>{e.synchronizationManager.synchronizeWithWorkspace(this)})}static restoreFromData(e,i){let n=e.settings!=null&&e.settings.startsWith("{")?JSON.parse(e.settings):{libraries:[]};n.libaries&&(n.libraries=n.libaries);let s=new Oi(e.name,i,e.owner_id);s.id=e.id,s.isFolder=e.isFolder,s.parent_folder_id=e.parent_folder_id,s.sorting_order=e.sorting_order,s.owner_id=e.owner_id,s.version=e.version,s.repository_id=e.repository_id,s.has_write_permission_to_repository=e.has_write_permission_to_repository,s.settings=n,s.pruefung_id=e.pruefung_id,s.spritesheetId=e.spritesheet_id,s.readonly=e.readonly,s.grade=e.grade,s.points=e.points,s.comment=e.comment,s.settings.libraries==null&&(s.settings.libraries=[]);for(let a of e.files){let l=Je.restoreFromData(i,a);s.files.push(l),a.id==e.current_file_id&&(s.currentlyOpenFile=l)}return s}findFileById(e){return this.files.find(i=>i.id==e)}getFirstFile(){if(this.files.length>0)return this.files[0]}getIdentifier(){return this.name}getModuleForMonacoModel(e){var s,a;if(e==null||!((s=this.main)==null?void 0:s.getCompiler()))return;for(let l of this.getFiles())if(l.getMonacoModel()==e)return this.main.getCompiler().findModuleByFile(l);let n=(a=this.main.getRepl())==null?void 0:a.getCurrentModule();if(n&&n.file instanceof Je&&n.file.getMonacoModel()==e)return n}getCurrentlyEditedModule(){let e=this.main.getMainEditor().getModel();if(e)return this.getModuleForMonacoModel(e)}getFileForMonacoModel(e){if(e!=null){for(let i of this.getFiles())if(i.getMonacoModel()==e)return i}}getCurrentlyEditedFile(){let e=this.main.getMainEditor().getModel();if(e)return this.getFileForMonacoModel(e)}disposeMonacoModels(){this.getFiles().forEach(e=>e.disposeMonacoModel())}createMonacoModels(){this.getFiles().forEach(e=>e.getMonacoModel())}getFolderContentsRecursively(e){let i=e.filter(n=>n.parent_folder_id==this.id);for(let n of i.slice())n.isFolder&&(i=i.concat(n.getFolderContentsRecursively(e)));return i}}class kh{}r(kh,"displayOnLeftSide",()=>d({de:"Auf der linken Seite darstellen",en:"Display on left side"})),r(kh,"displayOnRightSide",()=>d({de:"Auf der rechten Seite darstellen",en:"Display on right side"}));class Ae{}r(Ae,"serverTemporarilyNotReachable",()=>d({de:"Ser Server ist temporär nicht erreichbar.",en:"Server is temporarily not reachable."})),r(Ae,"chooseFile",()=>d({de:"Wählen Sie eine Datei aus!",en:"Choose a file!"})),r(Ae,"yourWorkspace",()=>d({de:"Dein Workspace:",en:"Your Workspace:"})),r(Ae,"withWriteAccess",()=>d({de:", mit Schreibzugriff",en:", with write access"})),r(Ae,"withoutWriteAccess",()=>d({de:", ohne Schreibzugriff",en:", without write access"})),r(Ae,"repoCurrentVersion",t=>d({de:"Repository (aktuelle Version "+t+"):",en:"Repository (current Version "+t+"):"})),r(Ae,"synchronizeWithRepository",()=>d({de:"Synchronisieren mit Repository",en:"Synchronize with Repository"})),r(Ae,"synchronizeWorkspaceWithRepository",()=>d({de:"Workspace mit Repository synchronisieren",en:"Synchronize Workspace with repository"})),r(Ae,"backToCoding",()=>d({de:"Zurück zum Programmieren",en:"Back to coding"})),r(Ae,"history",()=>d({de:"History:",en:"History:"})),r(Ae,"repositoryCurrentVersion",()=>d({de:"Repository (aktuelle Version):",en:"Repository (current version):"})),r(Ae,"showOwnWorkspace",()=>d({de:"Zeige eigenen Workspace",en:"Show own workspace"})),r(Ae,"showCurrentRepoVersion",()=>d({de:"Zeige aktuelle Repository-Version",en:"Show current Repository version"})),r(Ae,"saveWorkspaceChanges",()=>d({de:"Änderungen am Workspace (rot!) speichern",en:"Save workspace-changes (red!)"})),r(Ae,"saveRepoChanges",()=>d({de:"Änderungen am Repository (rot!) speichern",en:"Save Repository changes (red!)"})),r(Ae,"commitMessage",()=>d({de:"Beschreibe kurz die vorgenommenen Änderungen:",en:"Commit message:"})),r(Ae,"OK",()=>d({de:"OK",en:"OK"}));class Ri{}r(Ri,"withoutVersion",()=>d({de:"(ohne Version)",en:"(without version)"})),r(Ri,"withChanges",()=>d({de:"mit Änderungen",en:"with changes"})),r(Ri,"DELETED",()=>d({de:" - GELÖSCHT",en:" - DELETED"})),r(Ri,"synchronized",()=>d({de:"synchron",en:"identical"})),r(Ri,"markAsMerged",()=>d({de:'Als "merged" markieren',en:'Mark as "merged"'})),r(Ri,"merged",()=>d({de:"merged",en:"merged"}));class va{}r(va,"Workspace",()=>d({de:"Workspace: ",en:"Workspace: "})),r(va,"historyVersion",()=>d({de:"History-Version ",en:"History version"})),r(va,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar!",en:"Server not reachable!"}));class Pe{}r(Pe,"all",()=>d({de:"alle",en:"alle"})),r(Pe,"private",()=>d({de:"private",en:"private"})),r(Pe,"accessableForClass",()=>d({de:"für die Klasse freigegebene",en:"accessible for whole class"})),r(Pe,"accessableForSchool",()=>d({de:"für die Schule freigegebene",en:"accessible for whole school"})),r(Pe,"caption",()=>d({de:"Checkout Repository - Workspace mit Repository verbinden",en:"Checkout Repository - connect workspace to repository"})),r(Pe,"backToCoding",()=>d({de:"Zurück zum Programmieren",en:"Back to coding"})),r(Pe,"connectThisWorkspaceToRepository",()=>d({de:"Diesen Workspace mit dem Repository verbinden:",en:"Connect this workspace to repository:"})),r(Pe,"inputRepositoryCode",()=>d({de:"Alternativ zur Auswahl unten Eingabe eines Repository-Codes:",en:"Provide repository code as alternative to choosing below:"})),r(Pe,"showTheseRepositories",()=>d({de:"Diese Repositories anzeigen:",en:"Show these repositories:"})),r(Pe,"filterSearch",()=>d({de:"Filter/Suche:",en:"Filter/search:"})),r(Pe,"createNewWorkspace",()=>d({de:"Neuen Workspace erstellen",en:"Create new workspace"})),r(Pe,"codeMustContainT",()=>d({de:"Der Code muss den Buchstaben T enthalten.",en:"Code has to contain character T."})),r(Pe,"digitPriorToTInsideCode",()=>d({de:"Im Code muss vor dem T eine Zahl stehen.",en:"Code has to contain a digit prior to character T."})),r(Pe,"newWorkspaceCreateSuccessfully",t=>d({de:"Der neue Workspace "+t+" wurde erfolgreich angelegt.",en:"New workspace "+t+" successfully created."})),r(Pe,"workspaceSuccessfullyConnectedToRepository",t=>d({de:"Der Workspace "+t+" wurde erfolgreich mit dem Repository verbunden.",en:"Workspace "+t+" successfully connected to repository."}));class ut{}r(ut,"nameOfRepository",()=>d({de:"Name des Repositorys:",en:"Name of repository:"})),r(ut,"description",()=>d({de:"Beschreibung:",en:"Description:"})),r(ut,"publishedFor",()=>d({de:"Veröffentlicht für:",en:"Published for:"})),r(ut,"privateRepository",()=>d({de:"Keine Veröffentlichung (privates Repository)",en:"Private repository (not published)"})),r(ut,"publishedToClassStudents",()=>d({de:"Veröffentlicht für alle Schüler/-innen der Klasse",en:"Published to students of own class"})),r(ut,"publishedToClasses",()=>d({de:"Veröffentlicht für alle Schüler/-innen der unterrichteten Klassen",en:"Published to all students in all of my classes"})),r(ut,"publishedToSchool",()=>d({de:"Veröffentlicht für alle Nutzer/-innen an meiner Schule",en:"Published to all users in my school"})),r(ut,"createRepositoryAndConnectToWorkspace",t=>d({de:"Repository anlegen und mit Workspace "+t+" verknüpfen:",en:"Create repository and connect to workspace "+t}));class ce{}r(ce,"caption",()=>d({de:"Repository-Verwaltung",en:"Repository Management"})),r(ce,"backToCoding",()=>d({de:"Zurück zum Programmieren",en:"Back to coding"})),r(ce,"repositories",()=>d({de:"Repositories:",en:"Repositories:"})),r(ce,"owner",()=>d({de:"Eigentümer:",en:"Owner:"})),r(ce,"codeForRepoReadAccess",()=>d({de:"Code zum lesenden Zugriff aufs Repository:",en:"Repository read access code:"})),r(ce,"codeForRepoWriteAccess",()=>d({de:"Code zum schreibenden Zugriff aufs Repository:",en:"Repository write access code:"})),r(ce,"copy",()=>d({de:"Kopieren",en:"Copy"})),r(ce,"change",()=>d({de:"Ändern",en:"Change"})),r(ce,"repositoryUsers",()=>d({de:"Benutzer, die das Repository nutzen",en:"Users using this repository"})),r(ce,"writeAccess",()=>d({de:"Schreibberechtigung",en:"Write access"})),r(ce,"saveChanges",()=>d({de:"Änderungen speichern",en:"Save changes"})),r(ce,"noRepositoryPresent",()=>d({de:`Sie haben noch keine Repositories, und können daher keine verwalten. Tipp: Ein Repository können Sie durch Rechtsklick auf einen Workspace anlegen.`,en:`There's no repository yet, therefore none to manage. Hint: You may create a repository by right-clicking a workspace, then select 'create repository'.`})),r(ce,"deleteRepository",()=>d({de:"Repository löschen...",en:"Delete Repository..."})),r(ce,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(ce,"sureDelete",()=>d({de:"Ich bin mir sicher: löschen!",en:"I'm sure: delete!"})),r(ce,"changesNotSaved",t=>d({de:"Deine Änderungen am Repository "+t+" wurden nicht gespeichert.",en:"Your changes to repository "+t+" have not been saved."})),r(ce,"transferOwnership",(t,e)=>d({de:"Soll die Eigentümerschaft am Repository "+t+" wirklich an "+e+" übertragen werden?",en:"Transfer ownership of repository "+t+" to user "+e+"?"})),r(ce,"changesSavedSuccessfully",()=>d({de:"Die Änderungen wurden erfolgreich gespeichert.",en:"Changes have been saved successfully."})),r(ce,"error",()=>d({de:"Fehler: ",en:"Fehler: "})),r(ce,"notSaved",()=>d({de:"Der Speichervorgang wurde nicht durchgeführt.",en:"Changes have not been saved."}));class Ua{constructor(t){r(this,"files",[]);r(this,"copiedFromWorkspace");r(this,"isCurrentRepositoryVersion",!1);r(this,"name");this.manager=t}hasChanges(){for(let t of this.files)if(t.state!="original")return!0;return!1}isWritable(){return this.copiedFromWorkspace!=null||this.isCurrentRepositoryVersion&&this.manager.repositoryIsWritable}copyFromWorkspace(t){return this.files=[],t.getFiles().filter(e=>!e.isFolder).forEach(e=>{this.files.push({name:e.name,path:t.getPath(e),repository_file_version:e.repository_file_version,identical_to_repository_version:e.identical_to_repository_version,idInsideRepository:e.is_copy_of_id,idInsideWorkspace:e.id,workspaceFile:e,text:e.getText().replace(/\r\n/g,` `),synchroWorkspace:this,state:"original",markedAsMerged:!1,originalText:e.getText(),monacoModel:null})}),this.name=va.Workspace()+t.name,this.copiedFromWorkspace=t,this}copyFromRepository(t,e){return this.isCurrentRepositoryVersion=e,this.files=[],t.fileEntries.forEach(i=>{this.files.push({name:i.filename,path:i.path.slice(),idInsideRepository:i.id,idInsideWorkspace:null,workspaceFile:null,repository_file_version:i.version,identical_to_repository_version:!0,text:i.text==null?null:i.text.replace(/\r\n/g,` `),synchroWorkspace:this,state:"original",markedAsMerged:!1,monacoModel:null})}),this.name="Repository: "+t.name+" (V "+t.version+")",this}copyFromHistoryElement(t){let e=t.getRepositoryState();return this.copyFromRepository(e,!1),this.name=va.historyVersion()+e.version,this}commit(t,e,i,n,s){let a={},l={},h=[];e.fileEntries.forEach(b=>a[b.id]=b),this.files.forEach(b=>{b.idInsideRepository!=null&&(l[b.idInsideRepository]=b)});let u={comment:i,name:n.user.rufname+" "+n.user.familienname,username:n.user.username,isIntermediateEntry:!1,timestamp:Jp(new Date),userId:n.user.id,version:e.version+1,historyFiles:[]};for(let b of this.files){if(b.state=="deleted")continue;let A=a[b.idInsideRepository];if(A==null)b.idInsideRepository==null&&(h.push(b.committedFromFile.idInsideWorkspace),b.committedFromFile.idInsideRepository=b.committedFromFile.idInsideWorkspace,b.committedFromFile.repository_file_version=1,b.idInsideRepository=b.committedFromFile.idInsideWorkspace,b.committedFromFile.idInsideRepository=b.committedFromFile.idInsideWorkspace),u.historyFiles.push({id:b.idInsideRepository,type:"create",version:1,content:b.text,filename:b.name,path:b.path});else if(A.text!=b.text){A.version++;let C=this.getPatch(A.text,b.text);C==null?u.historyFiles.push({id:A.id,type:"intermediate",version:A.version,content:b.text,filename:b.name,path:b.path}):u.historyFiles.push({id:A.id,type:"change",version:A.version,content:C,filename:A.filename==b.name?void 0:b.name,path:Oi.pathsEqual(A.path,b.path)?void 0:b.path.slice()});let w=b.committedFromFile;w!=null&&(w.repository_file_version=A.version,w.workspaceFile.repository_file_version=A.version,w.workspaceFile.setSaved(!1))}else(A.filename!=b.name||!Oi.pathsEqual(A.path,b.path))&&u.historyFiles.push({id:A.id,type:"intermediate",version:A.version,filename:A.filename==b.name?void 0:b.name,path:Oi.pathsEqual(A.path,b.path)?void 0:b.path.slice()})}for(let b of e.fileEntries)(l[b.id]==null||l[b.id].state=="deleted")&&u.historyFiles.push({id:b.id,type:"delete",version:b.version});let g={files:this.files.filter(b=>b.state!="deleted").map(b=>({filename:b.name,path:b.path.slice(),id:b.idInsideRepository,text:b.text,version:b.repository_file_version})),repositoryVersionBeforeCommit:e.version,repository_id:e.id,workspace_id:t.id,repositoryHistoryEntry:u,newlyVersionedFileIds:h},f=this;pt("commitFiles",g,b=>{t.getFiles().forEach(A=>{h.indexOf(A.id)>=0&&(A.is_copy_of_id=A.id,A.repository_file_version=1,A.identical_to_repository_version=!0,A.setSaved(!1))}),f.manager.currentUserSynchroWorkspace.files.forEach(A=>{let C=A.workspaceFile;C!=null&&A.text==C.getText()&&(A.repository_file_version!=C.repository_file_version||A.identical_to_repository_version!=C.identical_to_repository_version)&&(C.identical_to_repository_version=A.identical_to_repository_version,C.repository_file_version=A.repository_file_version,C.setSaved(!1)),C.is_copy_of_id!=null&&(A.idInsideRepository=C.is_copy_of_id)}),f.manager.main.networkManager.sendUpdatesAsync(!0).then(()=>{s(b.repository,null)})},b=>{s(e,b)})}getPatch(t,e){let i=new Zp,n=i.patch_make(t,e),s=JSON.stringify(n),a=JSON.parse(s),l=i.patch_apply(a,t);return l==null||l[0]==null?null:l[0]==e?s:null}async writeChangesToWorkspace(){var s,a;let t=this.copiedFromWorkspace,e={},i={};t.getFiles().filter(l=>!l.isFolder).forEach(l=>{l.is_copy_of_id!=null&&(e[l.is_copy_of_id]=l)}),this.files.forEach(l=>{l.idInsideWorkspace!=null&&(i[l.idInsideWorkspace]=l)});let n=this.manager.main;for(let l of t.getFiles().filter(h=>!h.isFolder)){let h=i[l.id];h!=null&&h.state!="deleted"?(l.setText(h.monacoModel.getValue(Q.EndOfLinePreference.LF,!1)),h.text=l.getText(),l.is_copy_of_id=h.idInsideRepository,l.repository_file_version=h.repository_file_version,l.identical_to_repository_version=h.identical_to_repository_version,l.setSaved(!1),this.manager.main.getCompiler().setFileDirty(l),l.name=h.name,Oi.pathsEqual(t.getPath(l),h.path)||(l.parent_folder_id=await this.createPathAndReturnParentFolderId(t,h.path))):(n.networkManager.sendDeleteWorkspaceOrFileAsync("file",[l.id]).then(u=>{u||alert(va.serverNotReachable())}),this.files.splice(this.files.indexOf(h),1),t.removeFile(l),n.projectExplorer.fileTreeview.removeElementAndItsFolderContents(l),n.currentWorkspace==t&&((s=n.getCurrentWorkspace())==null?void 0:s.getCurrentlyEditedFile())==l&&n.projectExplorer.setFileActive(null))}for(let l of this.files)if(l.idInsideRepository!=null&&e[l.idInsideRepository]==null){let h=new Je(this.manager.main,l.name,l.text);h.is_copy_of_id=l.idInsideRepository,h.repository_file_version=l.repository_file_version,h.identical_to_repository_version=l.identical_to_repository_version,h.parent_folder_id=await this.createPathAndReturnParentFolderId(t,l.path),t.addFile(h),await n.networkManager.sendCreateFile(h,t,n.user.id)||alert(va.serverNotReachable())}if(await n.networkManager.sendUpdatesAsync(!0),n.currentWorkspace==t){let l=(a=n.getCurrentWorkspace())==null?void 0:a.getCurrentlyEditedFile();n.projectExplorer.setWorkspaceActive(t,!0),t.getFiles().indexOf(l)>=0&&(n.projectExplorer.setFileActive(l),n.projectExplorer.fileTreeview.selectElement(l,!1))}t.getFiles().forEach(l=>n.getCompiler().setFileDirty(l))}async createPathAndReturnParentFolderId(t,e){let i;for(let n=0;na.name==e[n]&&a.isFolder&&a.parent_folder_id==s),i==null&&(i=new Je(this.manager.main,e[n]),i.isFolder=!0,i.parent_folder_id=s,await this.manager.main.networkManager.sendCreateFile(i,t,t.owner_id))}return(i==null?void 0:i.id)||null}}const zh=class zh{constructor(t,e,i,n){r(this,"$historyElementDiv");this.manager=t,this.repository=e,this.repositoryHistoryEntry=i,this.historyEntryIndex=n,this.$historyElementDiv=L(null,"jo_synchro_historyElement"),this.$historyElementDiv.attr("draggable","true");let s=this;this.$historyElementDiv.on("drag",()=>{zh.currentlyDragged=s});let a=L(null,"jo_synchro_historyElementLine1");a.append(y(`
V ${i.version}
`)),a.append(y(`
${i.name}
`)),this.$historyElementDiv.append(a);let l=L(null,"jo_synchro_historyElementLine2");l.append(y(`
${i.timestamp}
`)),this.$historyElementDiv.append(l);let h=L(null,"jo_synchro_historyElementLine3");h.append(y(`
${i.comment}
`)),this.$historyElementDiv.append(h),t.$historyScrollDiv.prepend(this.$historyElementDiv),this.$historyElementDiv.on("click contextmenu",u=>{u.preventDefault(),pn([{caption:kh.displayOnLeftSide(),callback:()=>{let m=new Ua(this.manager).copyFromHistoryElement(this);this.manager.leftSynchroWorkspace=m,this.manager.setupSynchronizationListElements()}},{caption:kh.displayOnRightSide(),callback:()=>{let m=new Ua(this.manager).copyFromHistoryElement(this);this.manager.rightSynchroWorkspace=m,this.manager.setupSynchronizationListElements()}}],u.pageX+2,u.pageY+2)})}getRepositoryState(){let t=this.repository.historyEntries,e=this.historyEntryIndex;for(;e>0&&!t[e].isIntermediateEntry;)e--;let i=[];for(let s=e;s<=this.historyEntryIndex;s++){let a=t[s];for(let l of a.historyFiles)if(a.isIntermediateEntry)this.setIntermediateState(l,i);else switch(l.type){case"create":this.createFile(l,i);break;case"delete":this.deleteFile(l,i);break;case"change":this.changeFile(l,i);break;case"intermediate":this.setIntermediateState(l,i);break}}let n=Object.assign({},this.repository);return n.fileEntries=i,n.version=this.repositoryHistoryEntry.version,n}setIntermediateState(t,e){let i=e.find(n=>n.id==t.id);if(i!=null)i.text=t.content,i.version=t.version,t.filename&&(i.filename=t.filename),t.path&&(i.path=t.path.slice());else{let n={id:t.id,text:t.content,filename:t.filename,path:t.path?t.path.slice():[],version:t.version};e.push(n)}}changeFile(t,e){let i=e.find(n=>n.id==t.id);if(i!=null){if(t.content!=null){let n=JSON.parse(t.content),s=i.text,l=new Zp().patch_apply(n,s);i.text=l[0],i.version=t.version}t.filename&&(i.filename=t.filename),t.path&&(i.path=t.path.slice())}}deleteFile(t,e){let i=e.findIndex(n=>n.id==t.id);i!=null&&e.splice(i,1)}createFile(t,e){let i={id:t.id,text:t.content,filename:t.filename,path:t.path?t.path.slice():[],version:t.version};e.push(i)}};r(zh,"currentlyDragged");let il=zh;class pA{static deserializeRepository(t){t.files!=null&&t.files.startsWith("[")?t.fileEntries=JSON.parse(t.files):t.fileEntries=[],t.fileEntries.forEach(e=>{e.text=e.text.replace(/\r\n/g,` `),e.path=e.path??[]}),t.history.endsWith("]")||(t.history+="]"),t.historyEntries=JSON.parse(t.history)}static copyRepository(t,e){let i=Object.assign({},t);if(t.fileEntries!=null){i.fileEntries=[];for(let n of t.fileEntries)i.fileEntries.push(Object.assign({},n))}if(t.historyEntries!=null&&e){i.historyEntries=[];for(let n of t.historyEntries){let s=Object.assign({},n);if(n.historyFiles!=null){s.historyFiles=[];for(let a of n.historyFiles)s.historyFiles.push(Object.assign({},a))}i.historyEntries.push(s)}}return i}}class Bn{constructor(t,e,i,n,s){r(this,"$leftFileDiv");r(this,"$rightFileDiv");r(this,"$buttonLeftDiv");r(this,"$buttonRightDiv");r(this,"$markAsMergedButtonDiv");r(this,"$mergedFlag");r(this,"editorState");r(this,"$buttons",[]);r(this,"pending",!1);this.manager=t,this.leftSynchroFile=e,this.rightSynchroFile=i,this.leftSynchroWorkspace=n,this.rightSynchroWorkspace=s,this.$leftFileDiv=L(null,"jo_synchro_workspaceFileDiv jo_synchro_listDiv"),this.$buttonLeftDiv=L(null,"jo_synchro_buttonDiv jo_synchro_listDiv jo_synchro_buttonLeftDiv"),this.$buttonRightDiv=L(null,"jo_synchro_buttonDiv jo_synchro_listDiv jo_synchro_buttonRightDiv"),this.$rightFileDiv=L(null,"jo_synchro_repositoryFileDiv jo_synchro_listDiv"),t.$fileListDivs[0].append(this.$leftFileDiv),t.$fileListDivs[1].append(this.$buttonLeftDiv),t.$fileListDivs[2].append(this.$buttonRightDiv),t.$fileListDivs[3].append(this.$rightFileDiv),e!=null&&e.state!="original"&&this.$leftFileDiv.addClass("jo_dirty"),i!=null&&i.state!="original"&&this.$rightFileDiv.addClass("jo_dirty");let a=[this.$leftFileDiv,this.$buttonLeftDiv,this.$buttonRightDiv,this.$rightFileDiv],l=this;for(let h of a)h.on("mouseenter",()=>{for(let u of a)u.addClass("jo_synchro_hoverLine")}),h.on("mouseleave",()=>{for(let u of a)u.removeClass("jo_synchro_hoverLine").removeClass("jo_synchro_hoverActiveLine")}),h.on("mousedown",()=>{for(let u of a)u.addClass("jo_synchro_hoverActiveLine")}),h.on("mouseup",()=>{for(let u of a)u.removeClass("jo_synchro_hoverActiveLine")}),h.on("click",()=>{l.select()});this.createLeftFileModel(),this.createRightFileModel()}select(){var e;let t=[this.$leftFileDiv,this.$buttonLeftDiv,this.$buttonRightDiv,this.$rightFileDiv];y("#jo_synchro_fileListOuter").find(".jo_synchro_activeLine").removeClass("jo_synchro_activeLine");for(let i of t)i.addClass("jo_synchro_activeLine");this.manager.lastShownSynchronizationElement!=null&&(this.manager.lastShownSynchronizationElement.editorState=this.manager.diffEditor.saveViewState()),this.manager.lastShownSynchronizationElement=this,this.setEditorModel(),this.editorState!=null&&this.manager.diffEditor.restoreViewState(this.editorState),this.manager.diffEditor.updateOptions({originalEditable:((e=this.leftSynchroFile)==null?void 0:e.originalText)!=null}),this.displayPaths()}displayPaths(){var t,e;this.manager.$pathLeftDiv.text(this.leftSynchroFile?"Pfad: /"+this.leftSynchroFile.path.join("/"):""),this.manager.$pathRightDiv.text(this.rightSynchroFile?"Pfad: /"+this.rightSynchroFile.path.join("/"):""),this.manager.$pathLeftDiv[0].classList.remove("jo_synchro_path_changed"),this.manager.$pathRightDiv[0].classList.remove("jo_synchro_path_changed"),(t=this.leftSynchroFile)!=null&&t.pathChanged&&this.manager.$pathLeftDiv[0].classList.add("jo_synchro_path_changed"),(e=this.rightSynchroFile)!=null&&e.pathChanged&&this.manager.$pathRightDiv[0].classList.add("jo_synchro_path_changed"),this.manager.$pathButtonCommitDiv.empty(),this.manager.$pathButtonUpdateDiv.empty(),this.leftSynchroFile&&this.rightSynchroFile&&!Oi.pathsEqual(this.leftSynchroFile.path,this.rightSynchroFile.path)&&(this.manager.$pathButtonUpdateDiv.append(Bn.makeButton("update","left",()=>{this.leftSynchroFile.path=this.rightSynchroFile.path,this.leftSynchroFile.pathChanged=!0,this.leftSynchroFile.state="changed",this.manager.onContentChanged("left"),this.displayPaths(),this.compareFilesAndAdaptGUI()},!1)),this.manager.repositoryIsWritable&&this.manager.$pathButtonCommitDiv.append(Bn.makeButton("commit","right",()=>{this.rightSynchroFile.path=this.leftSynchroFile.path,this.rightSynchroFile.pathChanged=!0,this.rightSynchroFile.state="changed",this.manager.onContentChanged("right"),this.displayPaths(),this.compareFilesAndAdaptGUI()},!1)))}createRightFileModel(){this.rightSynchroFile!=null&&(this.rightSynchroFile.monacoModel=Q.createModel(this.rightSynchroFile.text,this.manager.monacoLanguageSelector))}setEditorModel(){this.manager.lastShownSynchronizationElement==this&&this.manager.diffEditor.setModel({original:this.leftSynchroFile==null?this.getEmptyMonacoModel():this.leftSynchroFile.monacoModel,modified:this.rightSynchroFile==null?this.getEmptyMonacoModel():this.rightSynchroFile.monacoModel})}getEmptyMonacoModel(){return Q.createModel("",this.manager.monacoLanguageSelector)}createLeftFileModel(){this.leftSynchroFile!=null&&(this.leftSynchroFile.monacoModel=Q.createModel(this.leftSynchroFile.text,this.manager.monacoLanguageSelector),this.leftSynchroFile.monacoModel.onDidChangeContent(t=>{this.pending||(this.pending=!0,setTimeout(()=>{var e,i;if(this.leftSynchroFile!=null&&((e=this.leftSynchroFile)==null?void 0:e.state)!="deleted"){let n=this.leftSynchroFile.monacoModel.getValue(Q.EndOfLinePreference.LF,!1);((i=this.leftSynchroFile)==null?void 0:i.originalText)!=null&&n==this.leftSynchroFile.originalText?(this.$leftFileDiv.removeClass("jo_dirty"),this.leftSynchroFile.state="original"):(this.$leftFileDiv.addClass("jo_dirty"),this.leftSynchroFile.state="changed",this.leftSynchroFile.identical_to_repository_version=!1),this.manager.onContentChanged("left"),this.leftSynchroFile.text=n,this.compareFilesAndAdaptGUI()}this.pending=!1},700))}))}onFileChanged(t){switch(t=="left"?this.createLeftFileModel():this.createRightFileModel(),this.setEditorModel(),this.compareFilesAndAdaptGUI(),t){case"left":this.leftSynchroFile!=null&&this.leftSynchroFile.state!="original"?this.$leftFileDiv.addClass("jo_dirty"):this.$leftFileDiv.removeClass("jo_dirty");break;case"right":this.rightSynchroFile!=null&&this.rightSynchroFile.state!="original"?this.$rightFileDiv.addClass("jo_dirty"):this.$rightFileDiv.removeClass("jo_dirty");break}this.manager.onContentChanged(t)}compareFilesAndAdaptGUI(){var u,m,g,f;this.emptyGUI();let t=this,e="---",i="",n=!1;if(this.leftSynchroFile!=null){let b=this.rightSynchroFile==null?!0:Oi.pathsEqual(this.leftSynchroFile.path,this.rightSynchroFile.path);e=this.leftSynchroFile.name,this.leftSynchroFile.repository_file_version==null?i=Ri.withoutVersion():(i="(V "+this.leftSynchroFile.repository_file_version,this.leftSynchroFile.identical_to_repository_version||((u=this.leftSynchroFile)==null?void 0:u.text)==((m=this.rightSynchroFile)==null?void 0:m.text)||(i+=` ${Ri.withChanges()}`),this.rightSynchroFile!=null&&this.leftSynchroFile.synchroWorkspace.isWritable()&&this.rightSynchroFile.repository_file_version>this.leftSynchroFile.repository_file_version&&(n=!this.leftSynchroFile.markedAsMerged),b||(i+=', anderer Pfad'),this.leftSynchroFile.pathChanged&&(i+=', neuer Pfad'),i+=")"),this.leftSynchroFile.state=="deleted"&&(e+=Ri.DELETED(),i="")}let s=this.rightSynchroFile==null?"---":this.rightSynchroFile.name,a=this.rightSynchroFile==null?"":"(V "+this.rightSynchroFile.repository_file_version+((g=this.rightSynchroFile)!=null&&g.pathChanged?', neuer Pfad':"")+")";((f=this.rightSynchroFile)==null?void 0:f.state)=="deleted"&&(s+=Ri.DELETED(),a="");let l=L("","jo_synchro_5px_spacer"),h=L("","jo_synchro_5px_spacer");if(this.$buttonRightDiv.append(h),this.leftSynchroFile==null)this.leftSynchroWorkspace.isWritable()&&t.rightSynchroFile.state!="deleted"&&this.$buttonLeftDiv.append(Bn.makeButton("create","left",()=>{t.leftSynchroFile={name:t.rightSynchroFile.name,path:t.rightSynchroFile.path.slice(),idInsideRepository:t.rightSynchroFile.idInsideRepository,repository_file_version:t.rightSynchroFile.repository_file_version,identical_to_repository_version:!0,state:"new",markedAsMerged:!1,text:this.rightSynchroFile.text,synchroWorkspace:t.leftSynchroWorkspace,idInsideWorkspace:null,workspaceFile:null,originalText:null,monacoModel:null},t.leftSynchroWorkspace.files.push(t.leftSynchroFile),t.onFileChanged("left")},!1)),t.rightSynchroWorkspace.isWritable()&&t.rightSynchroFile.state!="deleted"&&this.$buttonRightDiv.append(Bn.makeButton("delete","right",()=>{t.rightSynchroFile.state="deleted",t.onFileChanged("right")},!1));else if(this.rightSynchroFile==null)this.rightSynchroWorkspace.isWritable()&&t.leftSynchroFile.state!="deleted"&&this.$buttonRightDiv.append(Bn.makeButton("create","right",()=>{t.rightSynchroFile={name:t.leftSynchroFile.name,path:t.leftSynchroFile.path.slice(),committedFromFile:t.leftSynchroWorkspace.isWritable()?t.leftSynchroFile:null,idInsideRepository:t.leftSynchroFile.idInsideRepository,repository_file_version:t.leftSynchroFile.repository_file_version==null?1:t.leftSynchroFile.repository_file_version,identical_to_repository_version:t.leftSynchroFile.identical_to_repository_version,state:"new",markedAsMerged:!1,text:this.leftSynchroFile.text,synchroWorkspace:t.rightSynchroWorkspace,idInsideWorkspace:this.leftSynchroFile.idInsideWorkspace,workspaceFile:null,originalText:null,monacoModel:null},t.rightSynchroWorkspace.files.push(t.rightSynchroFile),t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,t.leftSynchroFile.identical_to_repository_version=!0,t.onFileChanged("right")},!1)),t.leftSynchroWorkspace.isWritable()&&t.leftSynchroFile.state!="deleted"&&this.$buttonLeftDiv.append(Bn.makeButton("delete","left",()=>{t.leftSynchroFile.state="deleted",t.onFileChanged("left")},!1));else{let b=!0,A=this.leftSynchroFile.name!=this.rightSynchroFile.name,C=this.leftSynchroFile.text!=this.rightSynchroFile.text,w=A&&!C;this.leftSynchroFile.repository_file_version==this.rightSynchroFile.repository_file_version?(C||A)&&(b=!1):b=!1,b?(this.$buttonLeftDiv.append(y(`
${Ri.synchronized()} -
`)),this.$buttonRightDiv.append(y(`
- ${Ri.synchronized()}
`))):(this.leftSynchroWorkspace.isWritable()&&this.$buttonLeftDiv.append(Bn.makeButton("update","left",()=>{t.leftSynchroFile.text=t.rightSynchroFile.text,t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,t.leftSynchroFile.identical_to_repository_version=!0,t.leftSynchroFile.name=t.rightSynchroFile.name,t.leftSynchroFile.state="changed",t.onFileChanged("left")},w)),this.rightSynchroWorkspace.isWritable()&&!n&&this.$buttonRightDiv.append(Bn.makeButton("commit","right",()=>{t.rightSynchroFile.text=t.leftSynchroFile.text,t.rightSynchroFile.name=t.leftSynchroFile.name,t.rightSynchroFile.repository_file_version++,t.leftSynchroWorkspace.isWritable()&&(t.rightSynchroFile.committedFromFile=t.leftSynchroFile),t.leftSynchroWorkspace.isWritable()&&(t.leftSynchroFile.repository_file_version=t.rightSynchroFile.repository_file_version,this.leftSynchroFile.identical_to_repository_version=!0),t.rightSynchroFile.state="changed",t.onFileChanged("right")},w)))}this.$buttonLeftDiv.append(l),this.$leftFileDiv.append(y(`
${e}${i}
`)),this.$rightFileDiv.append(y(`
${s}${a}
`)),n&&(this.$markAsMergedButtonDiv=y(`
${Ri.markAsMerged()}
`),this.$leftFileDiv.append(this.$markAsMergedButtonDiv),this.$markAsMergedButtonDiv.on("click",b=>{b.stopPropagation(),this.leftSynchroFile.markedAsMerged=!0,this.compareFilesAndAdaptGUI()})),this.leftSynchroFile!=null&&this.leftSynchroFile.markedAsMerged&&this.showMergedDiv(),this.manager.updateCenterButtons()}showMergedDiv(){let t=y(`
${Ri.merged()}
`);this.$leftFileDiv.append(t)}emptyGUI(){this.$leftFileDiv.empty(),this.$rightFileDiv.empty(),this.$buttonLeftDiv.empty(),this.$buttonRightDiv.empty()}static makeButton(t,e,i,n){let s="",a="";switch(t){case"commit":s=n?"rename":"commit",a="jo_synchro_commitButton";break;case"commitAll":s="commit all",a="jo_synchro_commitButton";break;case"update":s=n?"rename":"update",a="jo_synchro_updateButton";break;case"updateAll":s="update all",a="jo_synchro_updateButton";break;case"create":s="create",a="jo_synchro_createButton";break;case"delete":s="delete",a="jo_synchro_deleteButton";break}switch(e){case"left":a+=" jo_synchro_arrowLeft";break;case"right":a+=" jo_synchro_arrowRight";break}let l=y(`
${s}
`);return l.on("click",h=>{h.stopPropagation(),i!=null&&i()}),l.on("mousedown",h=>{h.stopPropagation()}),l}}class gA{constructor(t){r(this,"$mainHeadingDiv");r(this,"$writeWorkspaceChangesButton");r(this,"$writeRepositoryChangesButton");r(this,"$backToWorkspaceButton");r(this,"$backToCurrentRepositoryVersionButton");r(this,"$exitButton");r(this,"$belowMainHeadingDiv");r(this,"$leftDiv");r(this,"$historyOuterDiv");r(this,"$historyScrollDiv");r(this,"$leftUpperDiv");r(this,"$pathDiv");r(this,"$pathLeftOuterDiv");r(this,"$pathLeftDiv");r(this,"$pathButtonUpdateDiv");r(this,"$pathButtonCommitDiv");r(this,"$pathRightOuterDiv");r(this,"$pathRightDiv");r(this,"$fileListHeaderOuterDiv");r(this,"$fileListHeaderDivs",[]);r(this,"$fileListHeaderContainerRight");r(this,"$updateAllButton");r(this,"$commitAllButton");r(this,"$fileListOuterDiv");r(this,"$fileListDivs",[]);r(this,"$fileListFooterDiv");r(this,"$editorDiv");r(this,"guiReady",!1);r(this,"diffEditor");r(this,"currentUserSynchroWorkspace");r(this,"currentRepositorySynchroWorkspace");r(this,"currentRepository");r(this,"leftSynchroWorkspace");r(this,"rightSynchroWorkspace");r(this,"lastShownSynchronizationElement");r(this,"synchronizationListElements",[]);r(this,"lastShownHistoryElement");r(this,"historyElements",[]);r(this,"timer");r(this,"repositoryIsWritable");r(this,"monacoLanguageSelector");this.main=t}synchronizeWithWorkspace(t){var i;let e=t.settings.language??"Java";this.monacoLanguageSelector=((i=Re[e])==null?void 0:i.monacoLanguageSelector)??"myJava",this.gainRepositoryLock(t.repository_id,n=>{n?(this.repositoryIsWritable=!0,this.attachToWorkspaceAndRepository(t),this.show(),this.timer=setInterval(()=>{this.gainRepositoryLock(this.currentRepository.id,s=>{s||(alert(Ae.serverTemporarilyNotReachable()),window.history.back())})},1e4)):(this.attachToWorkspaceAndRepository(t),this.repositoryIsWritable=!1,this.show())})}gainRepositoryLock(t,e){pt("gainRepositoryLock",{repository_id:t},n=>{e(n.success)},n=>{alert(n),e(!1)})}attachToWorkspaceAndRepository(t){this.currentUserSynchroWorkspace=new Ua(this).copyFromWorkspace(t),this.leftSynchroWorkspace=this.currentUserSynchroWorkspace;let e=this,i={repository_id:t.repository_id,workspace_id:t.id};pt("getRepository",i,n=>{e.attachToRepository(n.repository),n.repository.spritesheet_id&&n.repository.spritesheet_id!=t.spritesheetId&&(t.spritesheetId=n.repository.spritesheet_id,new ps().initializeSpritesheetForWorkspace(t,this.main).then(()=>{for(let a of t.getFiles())this.main.getCompiler().setFileDirty(a)}))},n=>{alert(n),window.history.back()})}attachToRepository(t){this.currentRepository=t,pA.deserializeRepository(this.currentRepository),this.currentRepositorySynchroWorkspace=new Ua(this).copyFromRepository(this.currentRepository,!0),this.rightSynchroWorkspace=this.currentRepositorySynchroWorkspace,this.setupSynchronizationListElements(),this.setupHistoryElements()}setupHistoryElements(){this.$historyScrollDiv.empty(),this.historyElements=[],this.lastShownHistoryElement=null,this.currentRepository.historyEntries.forEach((t,e)=>{this.historyElements.push(new il(this,this.currentRepository,t,e))})}setupSynchronizationListElements(){let t=null,e=null;this.lastShownSynchronizationElement!=null&&(t=this.lastShownSynchronizationElement.leftSynchroFile,e=this.lastShownSynchronizationElement.rightSynchroFile),this.$fileListDivs.forEach(a=>a.empty()),this.synchronizationListElements.forEach(a=>a.emptyGUI()),this.synchronizationListElements=[],this.lastShownSynchronizationElement=null;let i=[],n={};if(this.leftSynchroWorkspace.files.forEach(a=>{let l={id:a.idInsideRepository,name:a.name,leftSynchroFile:a,rightSynchroFile:null};i.push(l),a.idInsideRepository!=null?n["r"+a.idInsideRepository]=l:n["w"+a.idInsideWorkspace]=l}),this.rightSynchroWorkspace.files.forEach(a=>{let l=null;a.idInsideRepository!=null?l=n["r"+a.idInsideRepository]:l=n["w"+a.idInsideWorkspace],l==null?(l={id:a.idInsideRepository,name:a.name,leftSynchroFile:null,rightSynchroFile:a},i.push(l)):l.rightSynchroFile=a}),i.sort((a,l)=>a.name.localeCompare(l.name)),i.forEach(a=>{let l=new Bn(this,a.leftSynchroFile,a.rightSynchroFile,this.leftSynchroWorkspace,this.rightSynchroWorkspace);this.synchronizationListElements.push(l),l.compareFilesAndAdaptGUI()}),this.diffEditor.setModel({original:Q.createModel(Ae.chooseFile(),this.monacoLanguageSelector),modified:Q.createModel(Ae.chooseFile(),this.monacoLanguageSelector)}),this.diffEditor.updateOptions({originalEditable:!1}),this.leftSynchroWorkspace==this.currentUserSynchroWorkspace?(this.setHeader("left",Ae.yourWorkspace()),this.$backToWorkspaceButton.hide()):(this.setHeader("left",this.leftSynchroWorkspace.name+":"),this.$backToWorkspaceButton.show(),this.$writeWorkspaceChangesButton.hide()),this.rightSynchroWorkspace==this.currentRepositorySynchroWorkspace){let a=this.repositoryIsWritable?Ae.withWriteAccess():Ae.withoutWriteAccess();this.setHeader("right",Ae.repoCurrentVersion(a)),this.$backToCurrentRepositoryVersionButton.hide()}else this.setHeader("right",this.rightSynchroWorkspace.name+":"),this.$backToCurrentRepositoryVersionButton.show(),this.$writeRepositoryChangesButton.hide();y("#jo_synchro_main_heading_text").text(`${Ae.synchronizeWithRepository()} "${this.currentRepository.name}"${this.repositoryIsWritable?"":" (read-only)"}`);let s=!1;if(t!=null||e!=null){for(let a of this.synchronizationListElements)if(a.leftSynchroFile!=null&&a.leftSynchroFile==t||a.rightSynchroFile!=null&&a.rightSynchroFile==e){a.select(),s=!0;break}}!s&&this.synchronizationListElements.length>0&&this.synchronizationListElements[0].select()}show(){y("#synchronize-div").css("display","flex"),y("#main").css("visibility","hidden"),this.guiReady||this.initGUI(),this.$writeWorkspaceChangesButton.hide(),this.$writeRepositoryChangesButton.hide();let i=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{i.hide()})}hide(){if(y("#synchronize-div").css("display","none"),y("#main").css("visibility","visible"),clearInterval(this.timer),this.currentRepository==null)return;let i={repository_id:this.currentRepository.id};pt("leaseRepositoryLock",i,n=>{},n=>{})}initGUI(){this.guiReady=!0;let t=y("#synchronize-div"),e=this;t.append(this.$mainHeadingDiv=y(`
${Ae.synchronizeWorkspaceWithRepository()}
`),this.$belowMainHeadingDiv=L("jo_synchro_below_main_heading"));let i=L("jo_synchro_buttonsTopRight");this.$mainHeadingDiv.append(i),i.append(this.$exitButton=y(`
${Ae.backToCoding()}
`)),this.$exitButton.on("click",()=>{window.history.back()}),this.$leftDiv=L("jo_synchro_leftDiv"),this.$historyOuterDiv=L("jo_synchro_historyOuterDiv"),this.$historyOuterDiv.append(y(`
${Ae.history()}
)`)),this.$belowMainHeadingDiv.append(this.$leftDiv,this.$historyOuterDiv),new ss(this.$historyOuterDiv[0],!0,!1,()=>{this.diffEditor.layout()}).sliderDiv.style.left="-3px",this.$historyOuterDiv.find(".joe_slider").css("position","absolute"),this.$historyScrollDiv=L("historyScrollDiv","jo_scrollable"),this.$historyOuterDiv.append(this.$historyScrollDiv),this.$leftDiv.append(this.$leftUpperDiv=L("jo_synchro_leftUpper"),this.$pathDiv=L("jo_synchro_pathDiv","jo_scrollable"),this.$editorDiv=L("jo_synchro_editor")),this.$leftUpperDiv.append(this.$fileListHeaderOuterDiv=L("jo_synchro_fileListHeaderOuter"),this.$fileListOuterDiv=L("jo_synchro_fileListOuter","jo_scrollable"),this.$fileListFooterDiv=L("jo_synchro_fileListFooter")),this.$fileListHeaderContainerRight=L(null,"jo_synchro_fileListHeaderContainerRight");let n=L(null,"jo_synchro_fileListHeader");this.$fileListHeaderContainerRight.append(n);let s=L(null,"jo_synchro_fileListHeaderCenter");s.append(this.$updateAllButton=Bn.makeButton("updateAll","left",()=>{e.updateAll()},!1)),s.append(this.$commitAllButton=Bn.makeButton("commitAll","right",()=>{e.commitAll()},!1)),this.$fileListHeaderDivs.push(L(null,"jo_synchro_fileListHeader","",{flex:"2 0"}),s,this.$fileListHeaderContainerRight,L(null,"jo_synchro_scrollbarPlaceholder")),this.$fileListDivs.push(L(null,"jo_synchro_fileList"),L(null,"jo_synchro_fileListButtonsLeft"),L(null,"jo_synchro_fileListButtonsRight"),L(null,"jo_synchro_fileList")),this.$fileListHeaderOuterDiv.append(this.$fileListHeaderDivs),this.$fileListOuterDiv.append(this.$fileListDivs),this.$fileListHeaderDivs[0].append(`
${Ae.yourWorkspace()}
`),n.append(`
${Ae.repositoryCurrentVersion()}
`),this.$fileListHeaderDivs[0].append(this.$backToWorkspaceButton=y(`
${Ae.showOwnWorkspace()}
`)),this.$backToWorkspaceButton.on("click",()=>{e.backToWorkspace()}),this.$backToWorkspaceButton.hide(),n.append(this.$backToCurrentRepositoryVersionButton=y(`
${Ae.showCurrentRepoVersion()}
`)),this.$backToCurrentRepositoryVersionButton.on("click",()=>{e.backToCurrentRepositoryVersion()}),this.$backToWorkspaceButton.hide(),this.$fileListHeaderDivs[0].append(this.$writeWorkspaceChangesButton=y(`
${Ae.saveWorkspaceChanges()}
`)),this.$writeWorkspaceChangesButton.on("click",()=>{e.writeWorkspaceChanges()}),this.$writeWorkspaceChangesButton.hide(),n.append(this.$writeRepositoryChangesButton=y(`
${Ae.saveRepoChanges()}
`)),this.$writeRepositoryChangesButton.on("click",()=>{e.writeRepositoryChanges()}),this.$writeRepositoryChangesButton.hide(),this.$pathDiv.append(this.$pathLeftOuterDiv=y('
'),this.$pathButtonUpdateDiv=y('
'),this.$pathButtonCommitDiv=y('
'),this.$pathRightOuterDiv=y('
')),this.$pathLeftOuterDiv.append(this.$pathLeftDiv=y('
')),this.$pathRightOuterDiv.append(this.$pathRightDiv=y('
')),new ss(this.$editorDiv[0],!0,!0,()=>{this.diffEditor.layout()}).setColor("var(--slider)"),this.makeDroppable("left",this.$fileListDivs[0]),this.makeDroppable("right",this.$fileListDivs[3]),this.initEditor(),Kp(t[0],t[0],{forceListen:!1,dragThresholdPixels:5,isPressHoldMode:!0,pressHoldDelayMS:100})}backToWorkspace(){this.leftSynchroWorkspace=this.currentUserSynchroWorkspace,this.setupSynchronizationListElements(),this.onContentChanged("left")}backToCurrentRepositoryVersion(){this.rightSynchroWorkspace=this.currentRepositorySynchroWorkspace,this.setupSynchronizationListElements(),this.onContentChanged("right")}makeDroppable(t,e){let i=this;e.on("dragover",n=>{e.addClass("jo_synchro_dragZone"),n.preventDefault()}),e.on("dragleave",()=>{e.removeClass("jo_synchro_dragZone")}),e.on("drop",n=>{if(il.currentlyDragged){let s=new Ua(i).copyFromHistoryElement(il.currentlyDragged);switch(t){case"left":i.leftSynchroWorkspace=s;break;case"right":i.rightSynchroWorkspace=s;break}i.setupSynchronizationListElements()}e.removeClass("jo_synchro_dragZone")})}setHeader(t,e){let i=t=="left"?0:2;this.$fileListHeaderDivs[i].find(".jo_synchro_tabHeading").text(e)}writeRepositoryChanges(){let t=this;this.$writeRepositoryChangesButton.hide();let e=L("","jo_synchro_commitDialogDiv");e.hide(),this.$fileListHeaderContainerRight.append(e),e.append(L("","jo_synchro_commitDialogCaption",Ae.commitMessage()));let i=y('');e.append(i);let n=L("","jo_synchro_commitDialogButtonDiv");e.append(n);let s=L("","jo_synchro_button","Abbrechen",{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"});n.append(s),s.on("click",()=>{e.remove(),t.$writeRepositoryChangesButton.show()});let a=L("","jo_synchro_button",Ae.OK(),{"background-color":"var(--createButtonBackground)",color:"var(--createButtonColor)"});n.append(a),e.show(600),a.on("click",()=>{let l=i.val();e.remove(),this.currentRepositorySynchroWorkspace.commit(this.currentUserSynchroWorkspace.copiedFromWorkspace,this.currentRepository,l,this.main,(h,u)=>{u!=null?(alert(u),this.attachToWorkspaceAndRepository(this.currentUserSynchroWorkspace.copiedFromWorkspace)):(this.attachToRepository(h),this.$writeRepositoryChangesButton.hide())})}),i.focus()}async writeWorkspaceChanges(){await this.currentUserSynchroWorkspace.writeChangesToWorkspace(),this.currentUserSynchroWorkspace=new Ua(this).copyFromWorkspace(this.currentUserSynchroWorkspace.copiedFromWorkspace),this.leftSynchroWorkspace=this.currentUserSynchroWorkspace,this.setupSynchronizationListElements(),this.$writeWorkspaceChangesButton.hide()}initEditor(){this.diffEditor=Q.createDiffEditor(document.getElementById("jo_synchro_editor"),{originalEditable:!0,readOnly:!0,automaticLayout:!0,renderSideBySide:!0})}onContentChanged(t){let e=t=="left"?this.$writeWorkspaceChangesButton:this.$writeRepositoryChangesButton;(t=="left"?this.currentUserSynchroWorkspace:this.currentRepositorySynchroWorkspace).hasChanges()?e.show():e.hide()}updateAll(){this.$fileListDivs[1].find(".jo_synchro_updateButton").click()}commitAll(){this.$fileListDivs[2].find(".jo_synchro_commitButton").click()}updateCenterButtons(){this.$fileListDivs[1].find(".jo_synchro_updateButton").length>0?this.$updateAllButton.css("visibility","inherit"):this.$updateAllButton.css("visibility","hidden"),this.$fileListDivs[2].find(".jo_synchro_commitButton").length>0?this.$commitAllButton.css("visibility","inherit"):this.$commitAllButton.css("visibility","hidden")}}class fA{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$repoListDiv");r(this,"$exitButton");r(this,"$checkoutButton");r(this,"$workspaceDropdown");r(this,"$filterButtonDiv");r(this,"$filterInput");r(this,"filterbuttonOptions",[Pe.all(),Pe.private(),Pe.accessableForClass(),Pe.accessableForSchool()]);r(this,"workspace");r(this,"repositories",[]);r(this,"$codeInput");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#checkoutRepo-div");e.append(this.$mainHeading=L("checkoutRepo-mainHeading","createUpdateRepo-mainHeading","")),this.$mainHeading.append(L("","",Pe.caption())),this.$mainHeading.append(this.$exitButton=L("","jo_synchro_button",Pe.backToCoding(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$exitButton.on("click",()=>{t.exitButtonClicked()});let i=L("checkoutRepo-divBelow");e.append(i);let n=L("","checkoutRepo-chooseDiv");i.append(n),n.append(L("","checkoutRepo-minorHeading",Pe.connectThisWorkspaceToRepository())),this.$workspaceDropdown=y(""),n.append(this.$workspaceDropdown);let s=L("","checkoutRepo-chooseDiv");i.append(s),s.append(L("","checkoutRepo-minorHeading",Pe.inputRepositoryCode())),this.$codeInput=y(''),s.append(this.$codeInput),this.$codeInput.on("input",u=>{t.$codeInput.val()==""?this.$repoListDiv.show():this.$repoListDiv.hide()});let a=L("","checkoutRepo-chooseDiv");i.append(a),a.append(L("","checkoutRepo-minorHeading",Pe.showTheseRepositories())),this.$filterButtonDiv=y("
"),a.append(this.$filterButtonDiv),this.filterbuttonOptions.forEach((u,m)=>{let g=y(``);g.data("value",m),g.on("change",f=>{t.showRepositories()}),this.$filterButtonDiv.append(g),this.$filterButtonDiv.append(y(``))});let l=L("","checkoutRepo-chooseDiv");i.append(l),l.append(L("","checkoutRepo-minorHeading",Pe.filterSearch())),this.$filterInput=y(''),l.append(this.$filterInput),this.$filterInput.on("input",u=>{t.showRepositories()}),i.append(L("","updateRepo-minorHeading","Repositories:",{"margin-bottom":"10px","margin-top":"20px"})),this.$repoListDiv=L("checkoutRepo-repoListDiv","jo_scrollable"),i.append(this.$repoListDiv);let h=L("updateRepo-buttonDiv");h.append(this.$checkoutButton=L("","jo_synchro_button","Checkout",{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"})),this.$checkoutButton.on("click",()=>{t.checkoutButtonClicked()}),i.append(h)}show(t){this.guiReady||this.initGUI(),y("#checkoutRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.main.user;let n={onlyOwnRepositories:!1};this.$repoListDiv.empty();let s=this;pt("getRepositoryList",n,a=>{this.repositories=a.repositories,this.showRepositories()}),this.$workspaceDropdown.empty(),Ns(this.$workspaceDropdown,[{caption:Pe.createNewWorkspace(),object:null,value:-1}].concat(this.main.workspaceList.filter(a=>a.repository_id==null&&!a.isFolder).map(a=>({caption:a.name,object:a,value:a.id}))),-1),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{s.hide()})}showRepositories(){let t=this;this.$repoListDiv.find(".checkoutRepo-repoListItem").remove();let e=this.$filterButtonDiv.find("input:checked").data("value")-1,i=e<0?this.repositories:this.repositories.filter(s=>s.published_to==e),n=this.$filterInput.val();n=n.toLocaleLowerCase(),n!=""&&(i=i.filter(s=>[s.owner_username,s.owner_name,s.name,s.description].join(" ").toLocaleLowerCase().indexOf(n)>=0)),i.forEach(s=>{let a=L("","checkoutRepo-repoListItem"),l=L("","checkoutRepo-repoListItemLeft");a.append(l),l.append(L("","checkoutRepo-repoListName",s.name)),l.append(L("","checkoutRepo-repoListOwner",s.owner_name+" ("+s.owner_username+")"));let h=L("","checkoutRepo-repoListItemRight",s.description);a.append(h),this.$repoListDiv.append(a),a.data("repoInfo",s),a.on("click",()=>{t.selectRepository(a,s)})}),this.selectFirstRepository()}selectRepository(t,e){this.$repoListDiv.find(".checkoutRepo-repoListItem").removeClass("active"),t!=null&&t.addClass("active")}selectFirstRepository(){this.$repoListDiv.find(".checkoutRepo-repoListItem").removeClass("active"),this.$repoListDiv.find(".checkoutRepo-repoListItem").first().addClass("active")}hide(){y("#checkoutRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}checkoutButtonClicked(){let t=-1,e=null,i=this.$codeInput.val();if(i!=""){let l=i.indexOf("T");if(l<0){alert(Pe.codeMustContainT());return}let h=Number.parseInt(i.substring(0,l));if(h>=0)t=h,e=i.substring(l+1);else{alert(Pe.digitPriorToTInsideCode());return}}else t=this.$repoListDiv.find(".active").first().data("repoInfo").id;let n=as(this.$workspaceDropdown),s={repository_id:t,createNewWorkspace:n==null,workspace_id:n==null?null:n.id,secret:e},a=this;pt("attachWorkspaceToRepository",s,l=>{if(l.message!=null){alert(l.message);return}if(n==null&&l.new_workspace!=null){let h=a.main.networkManager.createNewWorkspaceFromWorkspaceData(l.new_workspace);a.main.projectExplorer.workspaceTreeview.sort(),setTimeout(()=>{a.main.projectExplorer.setWorkspaceActive(h,!0)},400),alert(Pe.newWorkspaceCreateSuccessfully(l.new_workspace.name))}else n.repository_id=t,a.main.projectExplorer.workspaceTreeview.setIconClassForElement(n,"img_workspace-dark-repository"),alert(Pe.workspaceSuccessfullyConnectedToRepository(n.name));window.history.back()})}exitButtonClicked(){this.hide()}}class bA{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$settingsDiv");r(this,"$repoName");r(this,"$repoDescription");r(this,"$repoPublishedTo");r(this,"$cancelButton");r(this,"$createButton");r(this,"publishedToItems",[]);r(this,"workspace");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#createRepo-div");e.append(this.$mainHeading=L("","createUpdateRepo-mainHeading")),e.append(this.$settingsDiv=L("","createUpdateRepo-settingsDiv")),this.$settingsDiv.append(y(`
${ut.nameOfRepository()}
`)),this.$settingsDiv.append(this.$repoName=y('')),this.$settingsDiv.append(y(`
${ut.description()}
`)),this.$settingsDiv.append(this.$repoDescription=y('')),this.$settingsDiv.append(y(`
${ut.publishedFor()}
`)),this.$settingsDiv.append(this.$repoPublishedTo=y(''));let i=L("createRepo-buttonDiv");i.append(this.$createButton=L("","jo_synchro_button","Repository erstellen",{"background-color":"var(--createButtonBackground)",color:"var(--createButtonColor)"})),this.$createButton.on("click",()=>{t.createButtonClicked()}),i.append(this.$cancelButton=L("","jo_synchro_button","Abbrechen",{"background-color":"var(--cancelButtonBackground)",color:"var(--cancelButtonColor)"})),this.$cancelButton.on("click",()=>{t.cancelButtonClicked()}),e.append(i)}show(t){this.workspace=t,this.guiReady||this.initGUI();let e=this.main.user,i=!(e.is_admin||e.is_schooladmin||e.is_teacher);this.publishedToItems=[{value:"0",object:0,caption:ut.privateRepository()},{value:"1",object:1,caption:i?ut.publishedToClassStudents():ut.publishedToClasses()},{value:"2",object:2,caption:ut.publishedToSchool()}],Ns(this.$repoPublishedTo,this.publishedToItems,"0"),y("#createRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.initCreateMode(t);let a=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{a.hide()})}initCreateMode(t){let e=this.main.user;e.rufname,e.familienname,e.username,e.id,this.$mainHeading.text(ut.createRepositoryAndConnectToWorkspace(t.name)),this.$createButton.show(),this.$repoName.val(t.name)}hide(){y("#createRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}createButtonClicked(){let t=as(this.$repoPublishedTo),e=this.$repoName.val(),i=this.$repoDescription.val();this.main.networkManager.sendCreateRepository(this.workspace,t,e,i,(n,s)=>{if(n==null){let a=this.main.projectExplorer,l=a.workspaceTreeview.findNodeByElement(this.workspace);l&&(l.iconClass="img_workspace-java-repository-dark",this.workspace.renderSynchronizeButton(l)),a.showRepositoryButtonIfNeeded(this.workspace),window.history.back()}else alert(n)})}cancelButtonClicked(){window.history.back()}}class yA{constructor(t){r(this,"guiReady",!1);r(this,"$mainHeading");r(this,"$settingsDiv");r(this,"$repoName");r(this,"$repoDescription");r(this,"$repoPublishedTo");r(this,"$repoOwner");r(this,"$repoListDiv");r(this,"$userlistDiv");r(this,"$exitButton");r(this,"$saveButton");r(this,"$deleteButton");r(this,"$settingsSecretRead");r(this,"$settingsSecretWrite");r(this,"publishedToItems",[]);r(this,"repositoryOwnerItems",[]);r(this,"users",[]);r(this,"workspace");r(this,"repositoryInfo");this.main=t}initGUI(){this.guiReady=!0;let t=this,e=y("#updateRepo-div");e.append(this.$mainHeading=L("updateRepo-mainHeading","createUpdateRepo-mainHeading","")),this.$mainHeading.append(L("","",ce.caption())),this.$mainHeading.append(this.$exitButton=L("","jo_synchro_button",ce.backToCoding(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$exitButton.on("click",()=>{t.exitButtonClicked()});let i=L("updateRepo-divBelow");e.append(i);let n=L("updateRepo-divLeft");i.append(n),n.append(L("","updateRepo-minorHeading",ce.repositories())),this.$repoListDiv=L("updateRepo-repoListDiv"),n.append(this.$repoListDiv);let s=L("updateRepo-divRight");i.append(s),this.$settingsDiv=L("","createUpdateRepo-settingsDiv"),s.append(this.$settingsDiv),this.$settingsDiv.append(y(`
${ut.nameOfRepository()}
`)),this.$settingsDiv.append(this.$repoName=y('')),this.$repoName.on("input",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`
${ut.description()}
`)),this.$settingsDiv.append(this.$repoDescription=y('')),this.$repoDescription.on("input",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`
${ut.publishedFor()}
`)),this.$settingsDiv.append(this.$repoPublishedTo=y('')),this.$repoPublishedTo.on("change",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y('
'+ce.owner()+"
")),this.$settingsDiv.append(this.$repoOwner=y('')),this.$repoOwner.on("change",()=>{t.enableSaveButton()}),this.$settingsDiv.append(y(`
${ce.codeForRepoReadAccess()}
`));let a=y('
');this.$settingsDiv.append(a),this.$settingsSecretRead=y('
---
'),a.append(this.$settingsSecretRead);let l=y(``);a.append(l),l.on("pointerdown",()=>{Ld(this.$settingsSecretRead.text())});let h=y(``);a.append(h),h.on("pointerdown",()=>{t.setSecret(!0,!1)}),this.$settingsDiv.append(y(`
${ce.codeForRepoWriteAccess()}
`));let u=y('
');this.$settingsDiv.append(u),this.$settingsSecretWrite=y('
---
'),u.append(this.$settingsSecretWrite);let m=y(``);u.append(m),m.on("pointerdown",()=>{Ld(this.$settingsSecretWrite.text())});let g=y(``);u.append(g),g.on("pointerdown",()=>{t.setSecret(!1,!0)}),s.append(this.$userlistDiv=L("updateRepo-userlistDiv")),this.$userlistDiv.append(L(null,"updateRepo-userlistheading",ce.repositoryUsers(),{"grid-column":1})),this.$userlistDiv.append(L(null,"updateRepo-userlistheading",ce.writeAccess(),{"grid-column":2}));let f=L("updateRepo-buttonDiv");f.append(this.$saveButton=L("","jo_synchro_button",ce.saveChanges(),{"background-color":"var(--updateButtonBackground)",color:"var(--updateButtonColor)"})),this.$saveButton.on("click",()=>{t.saveButtonClicked()}),this.$saveButton.hide(),s.append(f)}setSecret(t,e){this.main.networkManager.sendSetSecret(this.repositoryInfo.id,t,e,i=>{let n=this.repositoryInfo.id+"T";this.$settingsSecretRead.text(n+i.secret_read),this.$settingsSecretWrite.text(n+i.secret_write)})}enableSaveButton(){this.$saveButton.show()}show(t){this.guiReady||this.initGUI(),y("#updateRepo-div").css("visibility","visible"),y("#main").css("visibility","hidden");let n=this.main.user,s=!(n.is_teacher||n.is_admin||n.is_schooladmin);this.publishedToItems=[{value:0,object:0,caption:ut.privateRepository()},{value:1,object:1,caption:s?ut.publishedToClassStudents():ut.publishedToClasses()},{value:2,object:2,caption:ut.publishedToSchool()}],Ns(this.$repoPublishedTo,this.publishedToItems,0),this.$saveButton.show(),this.showRepositoryList();let a=this;this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{a.hide()})}deleteRepository(t){let e=this,i={repository_id:t.id};pt("deleteRepository",i,()=>{e.showRepositoryList();let n=e.main.workspaceList.filter(s=>s.repository_id==t.id);for(let s of n){s.repository_id=null;let a=this.main.projectExplorer.workspaceTreeview.findNodeByElement(s);a.iconClass="img_workspace-dark",s.renderSynchronizeButton(a)}})}showRepositoryList(){this.emptyRepositoryInfo();let t={onlyOwnRepositories:!0};this.$repoListDiv.empty();let e=this;pt("getRepositoryList",t,i=>{let n,s;if(i.repositories.length==0){alert(ce.noRepositoryPresent()),e.exitButtonClicked();return}i.repositories.forEach(a=>{let l=L("","updateRepo-repoListItem"),h=L("","",a.name),u=y(`
`);l.append(h,u),this.$repoListDiv.append(l),l.on("click",m=>{e.selectRepository(l,a)}),l.data("repoInfo",a),s==null&&(s=a,n=l),u.on("click",m=>{m.preventDefault(),pn([{caption:ce.cancel(),callback:()=>{}},{caption:ce.sureDelete(),color:"#ff6060",callback:()=>{e.deleteRepository(a)}}],m.pageX+2,m.pageY+2),m.stopPropagation()})}),n!=null&&this.selectRepository(n,s)},i=>{console.log(i),alert(ce.noRepositoryPresent()),e.exitButtonClicked()})}selectRepository(t,e){if(this.repositoryInfo=e,this.emptyRepositoryInfo(),this.$saveButton.is(":visible")){let a=this.$repoListDiv.find(".active").first().data("repoInfo");a&&alert(ce.changesNotSaved(a.name))}this.$saveButton.hide(),this.$repoListDiv.find(".updateRepo-repoListItem").removeClass("active"),t.addClass("active"),this.$repoName.val(e.name),this.$repoDescription.val(e.description),this.$repoPublishedTo.val(e.published_to),this.$settingsSecretRead.text(e.secret_read==null?"--------":e.id+"T"+e.secret_read),this.$settingsSecretWrite.text(e.secret_write==null?"--------":e.id+"T"+e.secret_write),this.$repoOwner.empty(),this.$userlistDiv.children().not(".updateRepo-userlistheading").remove();let i={repository_id:e.id},n=this;pt("getRepositoryUserList",i,s=>{s.repositoryUserList.forEach(l=>{let h=L("","updateRepo-userDiv",`${l.firstName} ${l.lastName} (${l.username})`,{"grid-column":1}),u=L("","canWriteDiv","",{"grid-column":2}),m=y('');u.append(m),m.attr("checked",l.canWrite),m.data("user",l),m.on("change",()=>{n.enableSaveButton()}),n.$userlistDiv.append(h,u)}),n.$repoOwner.empty();let a=s.repositoryUserList.map(l=>({caption:`${l.firstName} ${l.lastName} (${l.username})`,object:l,value:l.user_id+""}));s.repositoryUserList.some(l=>l.user_id==e.owner_id)||a.push({caption:`${e.owner_name} (${e.owner_username})`,object:{user_id:e.owner_id,username:e.owner_username,firstName:"",lastName:"",klasse:"",canWrite:!0},value:e.owner_id+""}),Ns(n.$repoOwner,a,e.owner_id+"")})}emptyRepositoryInfo(){this.$repoOwner.empty(),this.$repoName.val(""),this.$repoDescription.val(""),this.$userlistDiv.find(".updateRepo-userDiv").remove(),this.$userlistDiv.find(".canWriteDiv").remove()}hide(){y("#updateRepo-div").css("visibility","hidden"),y("#main").css("visibility","visible")}saveButtonClicked(){let t=this,i=this.$repoListDiv.find(".active").first().data("repoInfo"),n=this.$repoName.val(),s=as(this.$repoOwner),a=as(this.$repoPublishedTo),l={owner_id:s.user_id,description:this.$repoDescription.val(),published_to:a,repository_id:i.id,name:n},h=[];t.$userlistDiv.find("input").each((m,g)=>{let b=y(g).data("user");h.push({has_write_access:y(g).is(":checked"),user_id:b.user_id})});let u={repository_id:i.id,writeAccessList:h};i.owner_id==s.user_id||confirm(ce.transferOwnership(i.name,s.username))?pt("updateRepositoryUserWriteAccess",u,m=>{pt("updateRepository",l,g=>{i.name=n,i.owner_id=s.user_id,i.owner_name=s.firstName+" "+s.lastName,i.owner_username=s.username,i.published_to=a,i.description=l.description,alert(ce.changesSavedSuccessfully()),t.$saveButton.hide(),t.showRepositoryList()},g=>{alert(ce.error()+g),t.exitButtonClicked()})},m=>{alert(ce.error()+m),t.exitButtonClicked()}):alert(ce.notSaved())}exitButtonClicked(){window.history.back()}}class vA{async loadFiles(t){if(t==null||t.length==0)return alert(df.noFilesToImport()),null;let e=[];for await(let i of t)if(i.name.endsWith(".png"))try{e.push(await this.loadFile(i))}catch{}return e=e.sort((i,n)=>i.filename.localeCompare(n.filename)),e}async loadFile(t){let e=await this.readFileAsync(t),i=Fo.decode(e),n=Fo.toRGBA8(i)[0];return{image:new Uint8Array(n),width:i.width,height:i.height,filename:t.name}}async readFileAsync(t){return new Promise((e,i)=>{let n=new FileReader;n.onload=()=>{e(n.result)},n.onerror=i,n.readAsArrayBuffer(t)})}}function AA(c,t){let e=0,i=0;for(let h of c)h.width+=2*t,h.height+=2*t;for(const h of c)e+=h.width*h.height,i=Math.max(i,h.width);c.sort((h,u)=>u.height-h.height);const s=[{x:0,y:0,width:Math.max(Math.ceil(Math.sqrt(e/.95)),i),height:1/0}];let a=0,l=0;for(const h of c)for(let u=s.length-1;u>=0;u--){const m=s[u];if(!(h.width>m.width||h.height>m.height)){if(h.x=m.x,h.y=m.y,l=Math.max(l,h.y+h.height),a=Math.max(a,h.x+h.width),h.width===m.width&&h.height===m.height){const g=s.pop();u1||e>1){let u=Math.trunc((t.width-2*n+s)/i-s),m=Math.trunc((t.height-2*n+s)/e-s);for(let g=0;g'),this.$importDropZone.append(this.$buttonFileImport),this.$buttonFileImport.on("change",w=>{var x=w.target.files;t.fileList=x,s.text(x.length!=1?x.length+te.filesSelected():te.fileSelected()),this.$buttonImport.addClass("jo_active")});let s=L(null,null,"",null,this.$importDropZone);this.$importDropZone.on("dragover",w=>{w.stopPropagation(),w.preventDefault(),w.originalEvent.dataTransfer.dropEffect="copy"}),this.$importDropZone.on("drop",w=>{w.stopPropagation(),w.preventDefault();var x=w.originalEvent.dataTransfer.files;t.fileList=x,s.text(x.length!=1?x.length+te.filesSelected():te.fileSelected()),this.$buttonImport.addClass("jo_active")});let a=L(null,"jo_sm_importExportCenter jo_sm_writeonly",null,null,i);L(null,"jo_sm_importParameters",te.stepTwo(),{"margin-bottom":"10px","font-weight":"bold"},a);let l=L(null,"jo_sm_importParameters",null,null,a);this.$uploadLinesCount=this.makeIntParameterInput(l,te.rows(),1),this.$uploadColumnsCount=this.makeIntParameterInput(l,te.columns(),1),this.$uploadMargin=this.makeIntParameterInput(l,te.margin(),0),this.$uploadSpace=this.makeIntParameterInput(l,te.distance(),0);let h=L(null,"jo_sm_importParameters",null,null,a);this.$uploadSeries=this.makeStringParameterInput(h,te.series(),"Test","10em"),this.$uploadIndex=this.makeIntParameterInput(h,te.fromIndex(),0),L(null,null,null,{"border-bottom":"2px solid var(--slider)","margin-bottom":"5px"},a),this.$buttonImport=L(null,"jo_active jo_sm_button jo_sm_importButton",te.stepThree(),{width:"fit-content"},a),this.$buttonImport.on("click",()=>{t.$buttonImport.hasClass("jo_active")&&(t.importFiles(t.fileList),s.text(""),t.$buttonFileImport.val(""))});let u=L(null,"jo_sm_importExportMessages jo_sm_writeonly",null,null,i);L(null,null,te.messages(),{"font-weight":"bold"},u);let m=L(null,"jo_sm_messagesOuter jo_scrollable",null,null,u);this.$messagesDiv=L(null,"jo_sm_messagesDiv jo_scrollable","Test",null,m),this.$zipSizeDiv=L(null,"jo_sm_pngSizeDiv",te.fileSize()+"0 kB",null,u);let g=L(null,"jo_sm_importExportRight",null,null,i);L(null,"jo_sm_writeonly",te.importWholeSpritesheet(),null,g);let f=y('');g.append(f);let b=L(null,"jo_sm_buttonExportAll jo_sm_button jo_active",te.exportWholeSpritesheet(),null,g);L(null,"jo_sm_buttonDeleteAll jo_sm_button jo_active jo_sm_writeonly",te.removeAllSprites(),null,g).on("click",w=>{w.preventDefault(),pn([{caption:te.cancel(),callback:()=>{}},{caption:te.sureDelete(),color:"#ff6060",callback:()=>{t.$spriteListDiv.empty(),t.userSpritesheet.spriteDataList=[],t.generateZipAndPrintZipSize()}}],w.pageX+2,w.pageY+2),w.stopPropagation()}),b.on("click",()=>{t.exportSpritesheet()}),f.on("change",w=>{t.importSpritesheet(w.target.files)});let C=L(null,"jo_sm_spritelistOuter",null,null,e);this.$spriteListDiv=L(null,"jo_sm_spritelistDiv jo_scrollable",null,null,C),e.append(this.$buttonDiv=L(null,"jo_sm_buttonDiv")),this.$buttonDiv.append(this.$buttonCancel=L("","jo_active jo_sm_button",te.cancel(),{"background-color":"var(--speedcontrol-grip)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$buttonCancel.on("click",()=>{t.exit()}),this.$buttonDiv.append(this.$buttonOK=L("","jo_active jo_sm_button jo_sm_writeonly",te.save(),{"background-color":"var(--updateButtonBackground)",color:"var(--fontColorLight)","font-size":"10pt"})),this.$buttonOK.on("click",()=>{t.$buttonOK.hasClass("jo_active")&&t.saveAndExit()})}async importSpritesheet(t){if(this.userSpritesheet){if(!t[0]||!t[0].name.endsWith(".zip")){alert(te.pleaseSelectZip());return}await this.userSpritesheet.spritesheet.unpackZip(t[0]),this.userSpritesheet.extractImagesFromSheet(),this.$spriteListDiv.empty(),this.userSpritesheet.spriteDataList.forEach(e=>this.renderImageInList(e)),this.checkSeriesAndIndexesAndSetNextSpriteIndex()}}async exportSpritesheet(){let t=window.prompt(te.nameOfSpritesheet(),"Spritesheet");t.endsWith(".zip")&&(t=t.replace(".zip","")),await this.userSpritesheet.generateAndZipSpritesheet(t),Sr(new Blob([this.userSpritesheet.spritesheet.zipFile]),t+".zip",!0)}async importFiles(t){let e=Number.parseInt(this.$uploadLinesCount.val()),i=Number.parseInt(this.$uploadColumnsCount.val()),n=Number.parseInt(this.$uploadMargin.val()),s=Number.parseInt(this.$uploadSpace.val()),a=this.$uploadSeries.val(),l=Number.parseInt(this.$uploadIndex.val()),h=await new vA().loadFiles(t);for(let u of h)this.userSpritesheet.addSprite(u,e,i,n,s,a,l++).forEach(g=>this.renderImageInList(g));this.$buttonImport.removeClass("jo_active"),this.checkSeriesAndIndexesAndSetNextSpriteIndex(),setTimeout(()=>{this.printMessage(h.length+te.imagesAdded()),this.generateZipAndPrintZipSize()},500)}async generateZipAndPrintZipSize(){await this.userSpritesheet.generateAndZipSpritesheet();let t=this.userSpritesheet.spritesheet.zipFile.length;this.$zipSizeDiv.text("Spritesheet: "+Math.round(t/1024*100)/100+" kB (Max: 8 MB)");let e=t>8*1024*1024?"red":"";this.$zipSizeDiv.css("color",e)}renderImageInList(t){let e=this,i=L(null,"jo_sm_spriteListLine",null,null,this.$spriteListDiv),n=y(''),s=n[0].getContext("2d");const a=new ImageData(new Uint8ClampedArray(t.image),t.width,t.height);s.putImageData(a,0,0);let l=300,h=100,u=t.width,m=t.height;u/l>m/h?(u=Math.min(t.width,l),m=t.height/t.width*u):(m=Math.min(t.height,h),u=t.width/t.height*m),n.css("width",u+"px"),n.css("height",m+"px"),L(null,"jo_spritepreview-innerbox",null,{width:u+"px",height:m+"px","margin-right":l-u+"px"},i).append(n);let f=L(null,"jo_sm_inputInfoDiv",null,null,i),b=L(null,"jo_sm_inputDiv",null,null,f);if(!this.readonly){let w=this.makeStringParameterInput(b,te.series(),t.series?t.series:"","10em");w.addClass("jo_sm_series");let x=this.makeIntParameterInput(b,te.index(),t.index?t.index:0);x.addClass("jo_sm_index"),w.on("input",()=>{t.series=w.val(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()}),x.on("input",()=>{t.index=x.val(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()})}let A=L(null,"jo_sm_infoDiv",te.widthHeight(t.width,t.height),null,f),C=y('');A.append(C),this.readonly||L(null,"img_delete jo_button jo_active",null,null,i).on("pointerdown",x=>{x.preventDefault(),pn([{caption:te.cancel(),callback:()=>{}},{caption:te.sureDelete(),color:"#ff6060",callback:()=>{let q=e.userSpritesheet.spriteDataList.indexOf(t);e.userSpritesheet.spriteDataList.splice(q,1),i.remove(),e.generateZipAndPrintZipSize(),e.checkSeriesAndIndexesAndSetNextSpriteIndex()}}],x.pageX+2,x.pageY+2),x.stopPropagation()}),this.$spriteListDiv.prepend(i)}makeIntParameterInput(t,e,i){let n=t.append(L(null,"jo_sm_parameterDiv"));L(null,"jo_sm_parameterCaption",e,null,n);let s=y('');return n.append(s),s}makeStringParameterInput(t,e,i,n){let s=t.append(L(null,"jo_sm_parameterDiv"));L(null,"jo_sm_parameterCaption",e,null,s);let a=y('');return s.append(a),a}async show(){let t=this;this.guiReady||this.initGUI(),this.$buttonFileImport.val("");let e=this.main.getCurrentWorkspace();if(e==null){alert(te.noWorkspaceSelected());return}e.repository_id!=null&&!e.has_write_permission_to_repository?(this.readonly=!0,y(".jo_sm_writeonly").hide()):(this.readonly=!1,y(".jo_sm_writeonly").show()),e.repository_id==null?this.$mainHeading.find(".jo_sm_heading").text(te.mangeWorkspaceSprites(e.name)):this.$mainHeading.find(".jo_sm_heading").text(te.mangeRepositorySprites(e.name)),this.$buttonImport.removeClass("jo_active"),this.fileList=null,y("#spritemanager-div").css("visibility","visible"),y("#main").css("visibility","hidden"),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.hide()});let s=new ps;await s.load(e.spritesheetId),this.userSpritesheet=new wA(s),this.$spriteListDiv.empty(),this.userSpritesheet.spriteDataList.forEach(a=>{this.renderImageInList(a)}),this.checkSeriesAndIndexesAndSetNextSpriteIndex()}setNextSpriteIndex(){let t=-1;this.userSpritesheet.spriteDataList.forEach(e=>{e.index>t&&(t=e.index)}),this.$uploadIndex.val(t+1),this.$uploadColumnsCount.val(1),this.$uploadLinesCount.val(1),this.$uploadMargin.val(0),this.$uploadSpace.val(0)}async saveAndExit(){await this.userSpritesheet.generateAndZipSpritesheet();let t=this,e=this.userSpritesheet.spriteDataList.length==0,i=this.main.getCurrentWorkspace();cd.uploadSpritesheet(this.userSpritesheet.spritesheet.zipFile,i.id,e).then(n=>{i.spritesheetId=e?null:n,t.userSpritesheet.spritesheet.initializeSpritesheetForWorkspace(i,t.main,null).then(()=>{for(let s of i.getFiles())this.main.getCompiler().setFileDirty(s);this.main.getCompiler().triggerCompile()}),t.exit()}).catch(n=>{alert(n),t.exit()})}static async uploadSpritesheet(t,e,i){let n={"x-workspaceid":""+e,"x-filetype":i?"delete":"zip"};return Ft!=null&&(n["x-token-pm"]=Ft),new Promise((s,a)=>{y.ajax({type:"POST",async:!0,contentType:"application/octet-stream",data:t,processData:!1,headers:n,url:"servlet/uploadSprite",success:function(l){l.success?s(l.spriteFileId):a(l.message)},error:function(l,h){a(h)}})})}hide(){y("#spritemanager-div").css("visibility","hidden"),y("#main").css("visibility","visible")}exit(){window.history.back()}printMessage(t,e){let i=e==null?"":'style="color: '+e+'"';this.$messagesDiv.append(`
${t}
`);let n=this.$messagesDiv[0];n.scrollTop=n.scrollHeight}checkSeriesAndIndexesAndSetNextSpriteIndex(){if(this.readonly)return;this.hasErrors=!1;let t={};for(let n of Ol)t[n.name]=!0;let e={},i=this;this.$spriteListDiv.children().each((n,s)=>{let a=y(s).find(".jo_sm_series").val(),l=Number.parseInt(y(s).find(".jo_sm_index").val()),h=y(s).find(".jo_sm_errorspan");if(t[a]){h.text(te.identifierAlreadyUsed(a)),i.hasErrors=!0;return}if(e[a+"#"+l]){h.text(te.seriesIndexAlreadyUsed(a,l)),i.hasErrors=!0;return}h.text(""),e[a+"#"+l]=!0}),this.hasErrors?this.$buttonOK.removeClass("jo_active"):this.$buttonOK.addClass("jo_active"),this.setNextSpriteIndex()}}class kA{start(t,e,i){}}class CA{static addActions(t,e){t.addAction({id:"Find bracket",label:"Finde korrespondierende Klammer",keybindings:[fp.CtrlCmd|Zo.KeyK],precondition:void 0,keybindingContext:void 0,contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:function(a){var l;(l=a.getAction("editor.action.jumpToBracket"))==null||l.run()}}),t.addAction({id:"Toggle line comment",label:"Zeilenkommentar ein-/ausschalten",keybindings:[fp.CtrlCmd|Zo.Comma],precondition:void 0,keybindingContext:void 0,contextMenuGroupId:"insert",contextMenuOrder:1.5,run:function(a){var l;console.log("Hier!"),(l=a.getAction("editor.action.commentLine"))==null||l.run()}}),e&&t.addAction({id:"Debugger Goto Cursor",label:"Führe Programm aus bis zu dieser Zeile",precondition:"Scheduler_running || Scheduler_paused",keybindingContext:void 0,contextMenuGroupId:"navigation",contextMenuOrder:1.5,run:a=>{e.getActionManager().trigger("interpreter.gotoCursor")}}),t.addAction({id:"myPaste",label:"Paste_",contextMenuGroupId:"9_cutcopypaste",contextMenuOrder:2,run:a=>{navigator.clipboard.readText().then(l=>{let h=a.getSelection(),g={identifier:{major:1,minor:1},range:h,text:l,forceMoveMarkers:!0};a.executeEdits("my-source",[g])})}});const i=["editor.action.clipboardPasteAction"],n=t.getContribution("editor.contrib.contextmenu"),s=n._getMenuActions;n._getMenuActions=function(){return s.apply(n,arguments).filter(function(l){return!i.includes(l.id)})}}}var dd;class cf{constructor(t,e,i){r(this,"editor");r(this,"highlightCurrentMethod",!0);r(this,"cw",null);r(this,"lastPosition");r(this,"dontPushNextCursorMove",0);r(this,"debounceTimer",null);J(this,dd,-1);r(this,"lastMethodCallPosition");r(this,"lastPushTime",0);r(this,"zoom",1);this.main=t,this.showMinimap=e,this.isEmbedded=i,i||new ResizeObserver(()=>{clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{var s,a;((s=this.editor)==null?void 0:s.getDomNode()).parentElement.style.width="100%",(a=this.editor)==null||a.layout()},200)}).observe(document.body)}initGUI(t){this.manageKeyboardEvents(t);let e=this.main.getSettings();this.editor=Q.create(t[0],{language:"myJava","semanticHighlighting.enabled":!0,lightbulb:{enabled:Q.ShowLightbulbIconMode.On},stickyScroll:{enabled:e.getValue("editor.stickyScroll")!=="off"},guides:{bracketPairs:e.getValue("editor.bracketPairLines")!=="off",highlightActiveBracketPair:e.getValue("editor.bracketPairLines")!=="off",bracketPairsHorizontal:e.getValue("editor.bracketPairLines")==="verticalAndUnderlined"},lineDecorationsWidth:0,peekWidgetDefaultFocus:"tree",fixedOverflowWidgets:!0,quickSuggestions:!0,quickSuggestionsDelay:10,fontSize:14,inlayHints:{enabled:"on"},fontFamily:window.javaOnlineFont==null?"Consolas, Roboto Mono":window.javaOnlineFont,fontWeight:"500",roundedSelection:!0,selectOnLineNumbers:!1,automaticLayout:!0,scrollBeyondLastLine:!1,occurrencesHighlight:"off",autoIndent:"advanced",dragAndDrop:!0,formatOnType:!0,formatOnPaste:!0,suggestFontSize:16,suggestLineHeight:22,suggest:{localityBonus:!0,insertMode:"replace"},bracketPairColorization:{enabled:!0,independentColorPoolPerBracketType:!1},autoClosingBrackets:e.getValue("editor.autoClosingBrackets"),autoClosingQuotes:e.getValue("editor.autoClosingQuotes"),autoClosingDelete:"auto",autoClosingOvertype:"auto",parameterHints:{enabled:e.getValue("editor.contextSensitiveHelp.ParameterHints")=="true",cycle:!0},mouseWheelZoom:!0,tabSize:3,insertSpaces:!0,detectIndentation:!1,minimap:{enabled:this.showMinimap},scrollbar:{vertical:"auto",horizontal:"auto"},theme:"myCustomThemeDark",wrappingIndent:"same"}),this.createContextKeys(),this.editor.onDidChangeModelContent(n=>{const s=this.main.getInterpreter().scheduler.state;[ie.stopped,ie.error,ie.not_initialized].includes(s)||this.main.getSettings().getValue("editor.stopRunningProgramOnWhenEditingSourcecode")=="yes"&&this.main.getActionManager().trigger("interpreter.stop"),this.main.getCompiler().triggerCompile()});let i=this;if(this.editor.onDidChangeConfiguration(n=>{if(n.hasChanged(Q.EditorOption.fontSize)){let s=this.editor.getOption(Q.EditorOption.fontSize);this.setFontSize(s)}}),!this.isEmbedded){let n=this.main;n.windowStateManager.registerBackButtonListener(s=>{var u;let a=s.state;if(s.state==null)return;let l=n.workspaceList.find(m=>m.id==a.workspace_id);if(l==null)return;let h=l.findFileById(a.file_id);h!=null&&(l!=n.getCurrentWorkspace()&&(i.dontPushNextCursorMove++,n.projectExplorer.setWorkspaceActive(l),i.dontPushNextCursorMove--),h!=((u=n.getCurrentWorkspace())==null?void 0:u.getCurrentlyEditedFile())&&(i.dontPushNextCursorMove++,n.projectExplorer.setFileActive(h),i.dontPushNextCursorMove--),i.dontPushNextCursorMove++,i.editor.setPosition(a.position),i.editor.revealPosition(a.position),i.dontPushNextCursorMove--,i.pushHistoryState(!0,a))})}return this.editor.onDidChangeCursorPosition(n=>{var a,l,h;let s=(l=(a=this.main.getCurrentWorkspace())==null?void 0:a.getCurrentlyEditedFile())==null?void 0:l.id;s!=null&&((this.lastPosition==null||n.source=="api"||s!=this.lastPosition.file_id||Math.abs(this.lastPosition.position.lineNumber-n.position.lineNumber)>20)&&this.dontPushNextCursorMove==0?this.pushHistoryState(!1,this.getPositionForHistory()):s==((h=history.state)==null?void 0:h.module_id)&&this.pushHistoryState(!0,this.getPositionForHistory())),i.onEvaluateSelectedText(n),n.position.lineNumber==M(this,dd)&&i.onShowSignatureHelp(n),ee(this,dd,n.position.lineNumber)}),this.editor.onDidChangeModel(n=>{if(this.main.getCurrentWorkspace()==null)return;let s=this.main.getCurrentWorkspace().getCurrentlyEditedFile();this.main instanceof nl&&s!=null&&(this.main.projectExplorer.setActiveAfterExternalModelSet(s),(this.lastPosition==null||s.id!=this.lastPosition.file_id)&&this.dontPushNextCursorMove==0&&this.pushHistoryState(!1,this.getPositionForHistory()))}),setTimeout(()=>{Q.remeasureFonts()},2e3),CA.addActions(this.editor,this.main),this.editor}manageKeyboardEvents(t){if(!this.main.isEmbedded()){let e=i=>{var n;((n=this.main.getInterpreter())==null?void 0:n.scheduler.state)==ie.running&&this.main.getSettings().getValue("editor.stopRunningProgramOnWhenEditingSourcecode")=="no"&&i.stopPropagation()};t.on("keydown",e).on("keyup",e).on("keypress",e)}}async onShowSignatureHelp(t){var l,h,u;let e=this.editor.getModel(),i,n=(l=this.main.getBottomDiv())==null?void 0:l.console;if(((h=n==null?void 0:n.editor)==null?void 0:h.getModel())!=e&&(i=(u=this.main.getCurrentWorkspace())==null?void 0:u.getModuleForMonacoModel(e)),!i||!i.methodCallPositions)return;let s=i.methodCallPositions[t.position.lineNumber];if(!s)return;let a=s.filter(m=>m.identifierRange.endColumn=t.position.column);if(a.length>0){let m=a[0];if(m){if(m!=this.lastMethodCallPosition){let g=0;if(Array.isArray(m.possibleMethods))for(let f of m.possibleMethods)f instanceof Ui&&f.parameters.length>g&&(g=f.parameters.length);else typeof m.possibleMethods=="string"&&(m.possibleMethods.indexOf("print")>=0&&(g=m.commaPositions.length+1),m.possibleMethods.indexOf("for")>=0&&(g=2));if(g>1&&this.main.getSettings().getValue("editor.contextSensitiveHelp.ParameterHints")=="true"){this.lastMethodCallPosition=m,setTimeout(()=>{this.editor.trigger("xy","editor.action.triggerParameterHints",{})},10);return}}}else this.lastMethodCallPosition=void 0}}createContextKeys(){Object.values(ie).filter(t=>typeof t=="string").forEach(t=>this.main.getActionManager().registerEditorContextKey("Scheduler_"+t,this.editor.createContextKey("Scheduler_"+t,!1)))}getPositionForHistory(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getCurrentlyEditedFile();if(t!=null)return{position:this.editor.getPosition(),workspace_id:this.main.getCurrentWorkspace().id,file_id:t.id}}pushHistoryState(t,e){if(!(this.main.isEmbedded()||e==null)){if(t)history.replaceState(e,"");else{let i=new Date().getTime();i-this.lastPushTime>200?history.pushState(e,""):history.replaceState(e,""),this.lastPushTime=i}this.lastPosition=e}}setFontSize(t){let e=this.editor.getOptions().get(Q.EditorOption.fontSize),i=t;this.main instanceof nl&&(i=this.main.viewModeController.getChosenViewMode().fontSize,this.main.viewModeController.saveFontSize(t)),t!=e?this.editor.updateOptions({fontSize:t/this.zoom}):this.main instanceof nl&&(this.zoom*=t/i);let n=this.main.getBottomDiv();n!=null&&n.console!=null&&(n.console.editor.updateOptions({fontSize:t}),n.$bottomDiv.find(".jo_commandline").css({height:t*1.1+4+"px","line-height":t*1.1+4+"px"}),n.console.editor.layout()),y(".jo_editorFontSize").css("font-size",t+"px"),y(".jo_editorFontSize").css("line-height",t+2+"px"),document.documentElement.style.setProperty("--breakpoint-size",t+"px"),document.documentElement.style.setProperty("--breakpoint-radius",t/2+"px")}async onEvaluateSelectedText(t){var i;let e=this;if(e.cw!=null&&(e.editor.removeContentWidget(e.cw),e.cw=null),((i=e.main.getInterpreter())==null?void 0:i.scheduler.state)==ie.paused){let s=e.editor.getModel().getValueInRange(e.editor.getSelection()),a=this.main.getRepl();if(s!=null&&s.length>0&&a){let l=await a.executeAsync(s,!0);typeof l<"u"&&Q.colorize(s+": "+l.text,"myJava",{tabSize:3}).then(h=>{h.endsWith("
")&&(h=h.substr(0,h.length-5)),e.cw={getId:function(){return"my.content.widget"},getDomNode:function(){return y('
'+h+"
")[0]},getPosition:function(){return{position:t.position,preference:[Q.ContentWidgetPositionPreference.ABOVE,Q.ContentWidgetPositionPreference.BELOW]}}},e.editor.addContentWidget(e.cw)})}}}dontDetectLastChange(){}}dd=new WeakMap;class Rm extends Qi{constructor(e,i){super(o.FileNotFoundExceptionComment(e),i);r(this,"stacktrace",[]);this.filename=e,this.cause=i}}r(Rm,"__javaDeclarations",[{type:"declaration",signature:"class FileNotFoundException extends Exception"},{type:"method",signature:"public FileNotFoundException()",native:Qi.prototype._constructor},{type:"method",signature:"public FileNotFoundException(String message)",native:De.prototype._constructor_m},{type:"method",signature:"public FileNotFoundException(Throwable cause)",native:De.prototype._constructor_c},{type:"method",signature:"public FileNotFoundException(String message, Throwable cause)",native:De.prototype._constructor_m_c},{type:"method",signature:"public String toString()",native:De.prototype._toString}]),r(Rm,"type");class uf{constructor(t){this.main=t}read(t){return this.getFile(t).getText()}write(t,e){this.getFile(t).setText(e)}append(t,e){let i=this.getFile(t);i.setText(i.getText()+e)}getFile(t){var i;let e=(i=this.main.getCurrentWorkspace())==null?void 0:i.getFiles().find(n=>n.name==t);if(!e)throw new Rm(t);return e}}class mf{constructor(t,e){r(this,"$input");this.$runDiv=t,this.main=e}waitForKey(t,e){var s;let i=(s=this.main.getInterpreter())==null?void 0:s.keyboardManager;if(i||e(void 0),t&&t.length>0){for(let a of t)if(i.isPressed(a)){e(a);return}}else if(i.isAnyKeyPressed()){e(i.getAnyPressedKey());return}let n={onKeyDown:(a,l,h,u)=>{if(!t||t.length==0){i.removeInternalKeyboardListener(n),e(a);return}if(t.indexOf(a)>=0){i.removeInternalKeyboardListener(n),e(a);return}},looseKeyboardFocus:()=>{}};i.addInternalKeyboardListener(n)}readInput(t,e,i,n){let s=this.main.getInterpreter().printManager;t!=null&&t!=""&&(s.beginOfLineState=!0,s.print(` `+t,!0,void 0),s.flush()),this.$input=y(''),s.$outputDiv.append(this.$input);let l=e??"";this.$input.val(l),e&&(this.$input[0].selectionStart=0,this.$input[0].selectionEnd=(""+e).length);let h=this;this.$input.on("keydown",u=>{if(u.key=="Enter"){let m=this.$input.val()||"",g=i(m);if(g.errorMessage){this.$input.detach(),s.print(g.errorMessage,!0,16711680),s.flush(),s.$outputDiv.append(this.$input);let f=this.$input[0];f.scrollIntoView(),f.focus(),f.selectionStart=0,f.selectionEnd=(f.value||"").length}else s.$outputDiv.off("mousedown.inputmanager"),s.print(m,!0,16777215),this.$input.off("keydown"),this.hide(),n(g.convertedValue)}}),setTimeout(()=>{h.$input.focus()},200),s.$outputDiv.on("mousedown.inputmanager",u=>{setTimeout(()=>{var m;(m=h.$input)==null||m.focus()},200)})}hide(){this.$input!=null&&(this.$input.remove(),this.$input=null)}}const pf="data:image/svg+xml,%3c!--%20By%20Sam%20Herbert%20(@sherb),%20for%20everyone.%20More%20@%20http://goo.gl/7AJzbL%20--%3e%3c!--%20Todo:%20add%20easing%20--%3e%3csvg%20width='57'%20height='57'%20viewBox='0%200%2057%2057'%20xmlns='http://www.w3.org/2000/svg'%20stroke='%23317c0e'%3e%3cg%20fill='none'%20fill-rule='evenodd'%3e%3cg%20transform='translate(1%201)'%20stroke-width='2'%3e%3ccircle%20cx='5'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;5;50;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20values='5;27;49;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='27'%20cy='5'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20from='5'%20to='5'%20values='5;50;50;5'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20begin='0s'%20dur='2.2s'%20from='27'%20to='27'%20values='27;49;5;27'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='49'%20cy='50'%20r='5'%3e%3canimate%20attributeName='cy'%20begin='0s'%20dur='2.2s'%20values='50;50;5;50'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3canimate%20attributeName='cx'%20from='49'%20to='49'%20begin='0s'%20dur='2.2s'%20values='49;5;27;49'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3c/g%3e%3c/g%3e%3c/svg%3e";class Go{constructor(){r(this,"$dialog");r(this,"$dialogMain");r(this,"$dialogFooter")}initAndOpen(){this.$dialog=y("#dialog"),this.$dialog.empty(),y("#main").css("visibility","hidden"),this.$dialog.append(y('
')),this.$dialogMain=this.$dialog.find(".dialog-main"),this.$dialogFooter=this.$dialog.find(".dialog-footer"),this.$dialog.css("visibility","visible"),this.$dialogMain.empty(),this.$dialogFooter.empty()}heading(t){let e=y('
'+t+"
");return this.$dialogMain.append(e),e}addDiv(t){this.$dialogMain.append(t)}subHeading(t){let e=y('
'+t+"
");return this.$dialogMain.append(e),e}description(t,e){let i=e==null?"":`style="color: ${e}"`,n=y(`
${t}
`);return this.$dialogMain.append(n),n}input(t,e){let i=y(``);return this.$dialogMain.append(i),i}buttons(t){let e=y('
');this.$dialogMain.append(e);for(let i of t){let n=y(``);n.on("click",()=>{i.callback()}),e.append(n)}}waitMessage(t){let e=y(`
${t}
`);return this.$dialogMain.append(e),i=>{let n=i?"visible":"hidden";e.css("visibility",n)}}close(){this.$dialog.css("visibility","hidden"),this.$dialog.empty(),y("#main").css("visibility","visible")}addCheckbox(t,e,i,n=this.$dialogMain[0]){let s='",a=y(s),l=y('"),h=y('
');return h.append(a,l),l.on("click",()=>{a.prop("checked",!a.prop("checked"))}),n.append(h[0]),()=>a.is(":checked")}}class xA{constructor(t){this.main=t}init(t){let e=y("#buttonUserSettings"),i=this;t.vidis_akronym?e.css("display","none"):e.on("click",n=>{let s=[{caption:xt.changePassword()+"...",callback:()=>{new gf(i.main).show()}}];pn(s,e.offset().left,e.offset().top+e.height())})}}class gf{constructor(t){r(this,"dialog");this.main=t,this.dialog=new Go}show(){this.dialog.initAndOpen(),this.dialog.heading(xt.changePassword()),this.dialog.description(xt.changePasswordDescription());let t=this.dialog.input("password",xt.oldPassword()),e=this.dialog.input("password",xt.newPassword()),i=this.dialog.input("password",xt.repeatNewPassword()),n=this.dialog.description("","red"),s=this.dialog.waitMessage(xt.pleaseWait());this.dialog.buttons([{caption:xt.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:xt.ok(),color:"green",callback:()=>{e.val()!=i.val()?n.text(xt.passwordsDontMatch()):(s(!0),pt("changePassword",{oldPassword:t.val(),newPassword:e.val()},()=>{s(!1),alert(xt.settingPasswordSuccessful()),this.dialog.close()},a=>{s(!1),n.text(a)}))}}])}}class et{}r(et,"confirmInput",t=>d({de:`Wollen Sie die ${t} ausgewählten Workspaces wirklich importieren?`,en:`Do you really want to import the ${t} selected workspaces?`,fr:`Voulez-vous vraiment importer les ${t} workspaces sélectionnés?`})),r(et,"importWorkspace",()=>d({de:"Workspace importieren",en:"Import workspace"})),r(et,"importWorkspaceDescription",()=>d({de:"1. Bitte klicken Sie auf den Button 'Datei auswählen...' oder ziehen Sie eine Datei auf das gestrichelt umrahmte Feld.",en:"1. Use button 'Choose file...' or drop file on dotted rectangle."})),r(et,"wrongFileFormat",t=>d({de:"Das Format der Datei "+t+" passt nicht.",en:"File "+t+" has wrong file format."})),r(et,"noJson",t=>d({de:"Die Datei "+t+" ist keine gültige JSON-Datei.",en:"File "+t+" doesn't contain JSON code."})),r(et,"zipDoesntContainAllWorkspacesJson",t=>d({de:"Die ZIP-Datei "+t+" enthält keine Datei all_workspaces.json.",en:"ZIP file "+t+" doesn't contain file all_workspaces.json."})),r(et,"withFiles",t=>d({de:"mit "+t+" Dateien",en:"with "+t+" files"})),r(et,"dragFilesHere",()=>d({de:"Dateien hierhin ziehen",en:"Drag files here."})),r(et,"dragDropTutorial",()=>d({de:"2. In der linken Baumansicht sehen Sie die Workspaces der importierten Datei. Sie können mehrere Workspaces/Ordner durch + Click bzw. + Click markieren. Ziehen Sie die gewünschten Workspaces in die rechte Baumansicht, um sie zu importieren.",en:"2. The left tree view shows the workspaces of the imported file. You can select multiple workspaces/folders using + Click or + Click. Drag and drop the desired folders/workspaces to the right tree view to import them.",fr:"2. La vue arborescente de gauche affiche les workspaces du fichier importé. Vous pouvez sélectionner plusieurs workspaces/dossiers en utilisant + Clic ou + Clic. Faites glisser et déposez les dossiers/workspaces souhaités dans la vue arborescente de droite pour les importer."})),r(et,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(et,"ok",()=>d({de:"OK",en:"OK"})),r(et,"import",()=>d({de:"Importieren",en:"Import"})),r(et,"serverNotReachable",()=>d({de:"Der Server ist nicht erreichbar.",en:"Server not reachable."}));class cn{static async exportAllWorkspaces(t){let e=[];for(let i of t.projectExplorer.workspaceTreeview.rootNode.getOrderedNodeListRecursively().map(n=>n.externalObject)){let n=await cn.exportWorkspace(i);e.push(n)}return e}static async exportAllWorkspacesToZipfile(t){let e=new Pd,i=t.projectExplorer.workspaceTreeview.rootNode.getOrderedNodeListRecursively().map(h=>h.externalObject),n=this.getUniqueNames(i),s=[e],a=[void 0];for(let h of i){let u=n.get(h.id);for(console.log("Exporting workspace: "+u+" (id: "+h.id+", parent_folder_id: "+h.parent_folder_id+")");h.parent_folder_id!=a[a.length-1]&&s.length>1;)s.pop(),a.pop();if(h.isFolder){let m=s[s.length-1].folder(u);s.push(m),a.push(h.id)}else await cn.exportWorkspaceIntoZipfile(h,s[s.length-1],n)}let l=await cn.exportAllWorkspaces(t);return e.file("all_workspaces.json",JSON.stringify(l,null,2)),e}static getUniqueNames(t){let e=new Map,i=new Map;for(let n of t){let s=n.parent_folder_id??-1,a=e.get(s);a==null&&(a=[],e.set(s,a));let l=n.name,h=1;for(;a.includes(l);)l=n.name+" ("+h+")",h++;a.push(l),i.set(n.id,l)}return i}static async exportFolder(t,e){let i=e.findNodeByElement(t);if(!i)return[];let n=i.getOrderedNodeListRecursively().map(a=>a.externalObject);n.unshift(t);let s=[];for(let a of n){let l=await cn.exportWorkspace(a);a==t&&(l.parent_folder_id=null),s.push(l)}return s}static async exportWorkspace(t){let e;if(t.spritesheetId)try{let i=new ps;await i.load(t.spritesheetId,!1),i.zipFile!=null&&(e=lf(i.zipFile))}catch{console.log("Hier!")}return{name:t.name,id:t.id,modules:t.getFiles().map(i=>cn.exportFile(i)),settings:t.settings,spritesheetBase64:e,parent_folder_id:t.parent_folder_id,isFolder:t.isFolder}}static async exportWorkspaceIntoZipfile(t,e,i){let n=i.get(t.id);if(e=e.folder(n),t.spritesheetId)try{let h=new ps;await h.load(t.spritesheetId,!1),h.zipFile!=null&&e.file("spritesheet.zip",h.zipFile)}catch{}let s=cn.getUniqueNames(t.getFiles()),a=[e],l=[void 0];for(let h of t.getFiles()){let u=s.get(h.id);for(console.log(" Exporting file: "+u+" (id: "+h.id+", parent_folder_id: "+h.parent_folder_id+")");h.parent_folder_id!=l[l.length-1]&&a.length>1;)a.pop(),l.pop();h.isFolder?(a.push(a[a.length-1].folder(u)),l.push(h.id)):a[a.length-1].file(u,h.getText())}}static exportFile(t){return{name:t.name,text:t.getText(),id:t.id,identical_to_repository_version:t.identical_to_repository_version,is_copy_of_id:t.is_copy_of_id,repository_file_version:t.repository_file_version,isFolder:t.isFolder,parent_folder_id:t.parent_folder_id}}}class SA{constructor(t,e){r(this,"networkManager",null);this.main=t,this.owner_id=e,this.networkManager=t.networkManager}async importWorkspaces(t,e,i){for(;!e.isFolder&&!e.isRootNode;)e=e.getParent();if(!confirm(et.confirmInput(t.length)))return;let n=new Set(t.filter(g=>g.isFolder).map(g=>g.id));t.forEach(g=>{n.has(g.parent_folder_id)||(g.parent_folder_id=null)});let s=[],a=-1,l=new Set;for(;s.length>a;){a=s.length;for(let g of t)!l.has(g.id)&&(g.parent_folder_id==null||l.has(g.parent_folder_id))&&(s.push(g),l.add(g.id))}i&&(i.init(0,s.length),i.show());let h=0,u=new Map,m=[];for(let g of s){i&&i.set(h++);let f=g.parent_folder_id==null?e:u.get(g.parent_folder_id),b=f.isRootNode()?null:f.externalObject.id,A=await this.importWorkspaceWithoutSpritesheet(g,b);if(await this.importSpritesheet(g,A),A){let C=A.repository_id==null?"img_workspace-dark":"img_workspace-dark-repository",w=f.treeview.addNode(A.isFolder,A.name,C,A);m.push(w),A.isFolder&&u.set(g.id,w)}}i&&i.hide(),m.forEach(g=>g.setCaptionColor("#00b000"))}async importSpritesheet(t,e){if(this.networkManager&&!t.isFolder&&t.spritesheetBase64&&e!=null){let i=cp(t.spritesheetBase64);try{let n=await cd.uploadSpritesheet(i,e.id,!1);e.spritesheetId=n}catch{}}}async importWorkspaceWithoutSpritesheet(t,e=null){var s;let i=new Oi(t.name,this.main,this.owner_id);i.isFolder=t.isFolder||!1,i.settings=t.settings,i.parent_folder_id=e;let n=!0;if(this.networkManager&&(n=await this.networkManager.sendCreateWorkspace(i,this.owner_id)),n){this.main.addWorkspace(i);let a=new Map,l=new Map;for(let h of t.modules){let u=await this.importFile(h,i);u&&(i.addFile(u),a.set(h.id,u),l.set(h,u))}for(let h of t.modules){let u=l.get(h);if(u&&h.parent_folder_id){let m=a.get(h.parent_folder_id);m&&(u.parent_folder_id=m.id,u.setSaved(!1))}}return(s=this.networkManager)==null||s.sendUpdatesAsync(!0),i}return null}async importFile(t,e){let i=new Je(this.main,t.name);return i.setText(t.text),i.identical_to_repository_version=t.identical_to_repository_version,i.is_copy_of_id=t.is_copy_of_id,i.repository_file_version=t.repository_file_version,i.isFolder=t.isFolder||!1,i.parent_folder_id=null,this.networkManager&&(await this.networkManager.sendCreateFile(i,e,this.owner_id)||(i=null)),i}}class TA{constructor(){r(this,"elementOuter");r(this,"elementInner");r(this,"parent");r(this,"min");r(this,"max");this.parent=document.getElementById("bitteWarten"),this.elementOuter=z.makeDiv(this.parent,"jo_progressBar"),this.elementInner=z.makeDiv(this.elementOuter,"jo_progressBarInner")}show(){this.parent.style.display="flex"}hide(){this.parent.style.display="none"}init(t,e){this.min=t,this.max=e}set(t,e){let i=(t-this.min)/(this.max-this.min)*100;this.elementInner.style.width=i+"%"}}class $A{constructor(t){r(this,"dialog");this.main=t,this.dialog=new Go}show(){this.dialog.initAndOpen(),this.dialog.heading(et.importWorkspace()),this.dialog.description(et.importWorkspaceDescription());let t=y('');this.dialog.addDiv(t);let e=y('
'),i=z.makeDiv(e[0],"jo_importLeft","jo_scrollable"),n=z.makeDiv(e[0],"jo_importRight","jo_scrollable"),s=new li(i,{captionLine:{enabled:!0,text:"Inhalt der importierten Datei:"},withSelection:!0,selectMultiple:!0,selectWholeFolders:!0,isDragAndDropSource:!0,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,keyExtractor:h=>h.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"}),a=new li(n,{captionLine:{enabled:!0,text:"Ihre Workspaces:"},withSelection:!1,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,buttonAddFolders:!1,withDeleteButtons:!1,withFolders:!0,comparator:(h,u)=>h.name>u.name?1:h.nameh.id,parentKeyExtractor:h=>h.parent_folder_id,orderBy:"comparator"});a.addDragDropSource({treeview:s,defaultDragKind:"copy",dropInsertKind:"asElement"}),a.dropEventCallback=(h,u)=>{this.dropEventCallback(s,a,u)},t.on("change",h=>{var u=h.originalEvent.target.files;this.fillSourceTreeview(u,s)});let l=y(`
${et.dragFilesHere()}
`);this.dialog.addDiv(l),this.dialog.description("").text(et.dragDropTutorial()),l.on("dragover",h=>{h.stopPropagation(),h.preventDefault(),h.originalEvent.dataTransfer.dropEffect="copy"}),l.on("drop",h=>{h.stopPropagation(),h.preventDefault();var u=h.originalEvent.dataTransfer.files;this.fillSourceTreeview(u,s)}),this.dialog.addDiv(e),this.fillDestTreeview(a),this.dialog.buttons([{caption:et.ok(),color:"#18a000ff",callback:()=>{this.main.workspaceList=a.getOrderedNodeListRecursively().map(h=>h.externalObject),this.main.projectExplorer.renderWorkspaces(this.main.workspaceList),this.dialog.close()}}])}async dropEventCallback(t,e,i){let n=t.getOrderedListOfCurrentlySelectedNodes().map(l=>l.externalObject),s=this.main.user.id;this.main.workspacesOwnerId!=null&&(s=this.main.workspacesOwnerId);let a=new TA;await new SA(this.main,s).importWorkspaces(n,i,a)}fillSourceTreeview(t,e){e.clear();for(let n=0;n{let h=l.file("all_workspaces.json");if(h==null){alert(et.zipDoesntContainAllWorkspacesJson(s.name));return}h.async("text").then(u=>{this.fillSourceTreeviewFromJson(u,e,s.name)})});else{var i=new FileReader;i.onload=a=>{let l=a.target.result;this.fillSourceTreeviewFromJson(l,e,s.name)},i.readAsText(s)}}}fillSourceTreeviewFromJson(t,e,i){if(!(t.startsWith("{")||t.startsWith("["))){alert(et.wrongFileFormat(i));return}let n=[];try{n=JSON.parse(t),Array.isArray(n)||(n=[n])}catch{alert(et.noJson(i));return}for(let s of n)if(s.modules==null||s.name==null){alert(et.wrongFileFormat(i));return}else e.addNode(s.isFolder,s.name,s.isFolder?void 0:"img_workspace-dark",s)}fillDestTreeview(t){t.clear();let e=this.main.workspaceList;for(let i of e)t.addNode(i.isFolder,i.name,"img_workspace-dark",i)}}class IA{constructor(t){r(this,"dialog");this.main=t,this.dialog=new Go}show(){this.dialog.initAndOpen(),this.dialog.heading(ii.reportBug()),this.dialog.description(ii.bugReport()+":");let t=z.makeElement(this.dialog.$dialogMain[0],"textarea","jo_issuereporterr_textfield"),e=this.dialog.addCheckbox(ii.sendCopyOfWorkspace(),!0,"jo_cbIssueAddWorkspace"),i=this.dialog.input("text",ii.email()),n=this.dialog.input("text",ii.firstName()),s=this.dialog.input("text",ii.lastName());this.dialog.buttons([{caption:ii.cancel(),color:"#a00000",callback:()=>{this.dialog.close()}},{caption:ii.send(),color:"green",callback:async()=>{let a={workspace_id:e()?this.main.getCurrentWorkspace().id:null,description:t.value,mail:i.val(),rufname:n.val(),familienname:s.val()};(await qe("/servlet/reportIssue",a)).success&&alert(ii.thanks()),this.dialog.close()}}])}}class k{}r(k,"Saving",()=>d({de:"Speichere...",en:"saving...",fr:"enregistrement..."})),r(k,"Saved",()=>d({de:"Gespeichert",en:"saved",fr:"enregistré"})),r(k,"OptionDefault",()=>d({de:"Standard",en:"default",fr:"par défaut"})),r(k,"OptionTrue",()=>d({de:"Ja",en:"true",fr:"Oui"})),r(k,"OptionFalse",()=>d({de:"Nein",en:"false",fr:"Non"})),r(k,"CloseButton",()=>d({de:"Schließen",en:"Close",fr:"Fermer"})),r(k,"SettingsHeading",()=>d({de:"Einstellungen",en:"Settings",fr:"Paramètres"})),r(k,"UserSettingsTabHeading",()=>d({de:"Meine Einstellungen",en:"My Settings",fr:"Mes paramètres"})),r(k,"ClassSettingsTabHeading",()=>d({de:"Klassen-Einstellungen für ",en:"Class Settings for ",fr:"Paramètres de la classe pour "})),r(k,"SchoolSettingsTabHeading",()=>d({de:"Schul-Einstellungen",en:"School Settings",fr:"Paramètres de l'école"})),r(k,"ScopeUser",()=>d({de:"Benutzer",en:"User",fr:"Utilisateur"})),r(k,"ScopeClass",()=>d({de:"Klasse",en:"Class",fr:"Classe"})),r(k,"ScopeSchool",()=>d({de:"Schule",en:"School",fr:"École"})),r(k,"EditorSettingsName",()=>d({de:"Editor",en:"Editor",fr:"Éditeur"})),r(k,"SettingDisabledByHigherPrecedence",()=>d({de:"Diese Einstellung wird von einer klassen- oder schulweiten Einstellung mit höherer Präzedenz überschrieben und kann daher nicht geändert werden.",en:"This setting is overridden by a class- or school-wide setting with higher precedence and therefore cannot be changed.",fr:"Ce paramètre est remplacé par un paramètre de priorité supérieure au niveau de la classe ou de l'école et ne peut donc pas être modifié."})),r(k,"EditorSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Editors anpassen.",en:"Here you can adjust the editor settings.",fr:"Ici, vous pouvez ajuster les paramètres de l'éditeur."})),r(k,"HoverVerbosityName",()=>d({de:"Texte beim Hovern über Code",en:"Hover-Verbosity",fr:"Verbosité des infobulles"})),r(k,"HoverVerbosityDescription",()=>d({de:"Menge an Informationen, die in Hover-Infoballons angezeigt werden.",en:"Information amount displayed in hover tooltips.",fr:"Quantité d'informations affichées dans les infobulles."})),r(k,"ShowHelpOnKeywordsAndOperators",()=>d({de:"Hilfstexte für Schlüsselwörter und Operatoren anzeigen",en:"Show help texts for keywords and operators",fr:"Afficher les textes d'aide pour les mots-clés et les opérateurs"})),r(k,"ShowMethodDeclaration",()=>d({de:"Methodendeklarationen anzeigen",en:"Show method declarations",fr:"Afficher les déclarations de méthodes"})),r(k,"None",()=>d({de:"Keine",en:"None",fr:"Aucun"})),r(k,"Declarations",()=>d({de:"Deklarationen",en:"Declarations",fr:"Déclarations"})),r(k,"DeclarationsAndComments",()=>d({de:"Deklarationen und Kommentare",en:"Declarations and Comments",fr:"Déclarations et commentaires"})),r(k,"ShowClassDeclaration",()=>d({de:"Klassendeklarationen anzeigen",en:"Show class declaration",fr:"Afficher la déclarations de la classes"})),r(k,"ShowStructureStatementHelp",()=>d({de:"Hilfe für Strukturanweisungen anzeigen",en:"Show help for structure statements",fr:"Afficher l'aide pour les instructions de structure"})),r(k,"TypingAssistanceName",()=>d({de:"Unterstützung bei der Eingabe von Code",en:"Typing Assistance",fr:"Assistance à la saisie de code"})),r(k,"EditorQuickFixSettingsName",()=>d({de:"Quick-Fix-Einstellungen",en:"Quick Fix Settings",fr:"Paramètres de correction rapide"})),r(k,"EditorQuickFixSettingsDescription",()=>d({de:"Hier können Sie einstellen, welche Quick-Fixes angeboten werden sollen. Im Gegensatz zu den meisten anderen Einstellungen gilt hier: Klasseneinstellung vor Schuleinstellung vor User-Einstellung.",en:"Here you can set which quick fixes should be offered. In contrast to most other settings, here class setting takes precedence over school setting which takes precedence over user setting.",fr:"Ici, vous pouvez définir les corrections rapides qui doivent être proposées. Contrairement à la plupart des autres paramètres, ici la configuration de la classe a la priorité sur la configuration de l'école qui a la priorité sur la configuration de l'utilisateur."})),r(k,"EditorQuickFixGetterSetterName",()=>d({de:"Automatische Erstellung von Getter- und Setter-Methoden",en:"Automatic generation of getter and setter methods",fr:"Génération automatique des méthodes getter et setter"})),r(k,"EditorQuickFixGetterSetterDescription",()=>d({de:"Befindet sich der Cursor in einem Attribut einer Klasse, so erscheint daneben eine Glühbirne, über die angeboten wird, automatisch eine Getter- und Setter-Methode für dieses Attribut zu erstellen.",en:"If the cursor is on an attribute of a class, a light bulb appears next to it, offering to automatically create a getter and setter method for that attribute.",fr:"Si le curseur se trouve sur un attribut d'une classe, une ampoule apparaît à côté, offrant de créer automatiquement une méthode getter et setter pour cet attribut."})),r(k,"EditorMiscellaneousName",()=>d({de:"Sonstige Einstellungen",en:"Miscellaneous Settings",fr:"Paramètres divers"})),r(k,"EditorMiscellaneousDescription",()=>d({de:"Hier können Sie sonstige Einstellungen des Editors anpassen.",en:"Here you can adjust miscellaneous settings of the editor.",fr:"Ici, vous pouvez ajuster les paramètres divers de l'éditeur."})),r(k,"EditorStopRunningProgramOnWhenEditingSourcecodeName",()=>d({de:"Laufendes Programm beenden, wenn Quellcode bearbeitet wird",en:"Stop running program when editing source code",fr:"Arrêter l'exécution du programme lors de la modification du code source"})),r(k,"EditorStopRunningProgramOnWhenEditingSourcecodeDescription",()=>d({de:"Hier können Sie einstellen, ob ein laufendes Programm automatisch beendet werden soll, wenn Sie den Quellcode bearbeiten.",en:"Here you can set whether a running program should be automatically stopped when you edit the source code.",fr:"Ici, vous pouvez définir si un programme en cours d'exécution doit être automatiquement arrêté lorsque vous modifiez le code source."})),r(k,"offer",()=>d({de:"Anbieten",en:"Offer",fr:"Proposer"})),r(k,"dontOffer",()=>d({de:"Nicht anbieten",en:"Do not offer",fr:"Ne pas proposer"})),r(k,"EditorQuickFixGenerateConstructorName",()=>d({de:"Automatische Erstellung von Konstruktoren",en:"Automatic generation of constructors",fr:"Génération automatique des constructeurs"})),r(k,"EditorQuickFixGenerateConstructorDescription",()=>d({de:"Befindet sich der Cursor in einer Klasse, aber nicht in einer Methode, so erscheint in der kontextsensitiven Hilfe ( + ) ein Menüpunkt zur automatischen Erstellung eines Konstruktors.",en:"If the cursor is in a class but not in a method, a menu item for automatically creating a constructor appears in the context-sensitive help ( + ).",fr:"Si le curseur se trouve dans une classe mais pas dans une méthode, un élément de menu pour créer automatiquement un constructeur apparaît dans l'aide contextuelle ( + )."})),r(k,"EditorViewSettings",()=>d({de:"Anzeigeeinstellungen des Editors",en:"Editor View Settings",fr:"Paramètres d'affichage de l'éditeur"})),r(k,"EditorViewSettingsDescription",()=>d({de:"Hier können Sie die Anzeigeeinstellungen des Editors anpassen.",en:"You can adjust the editor view settings here.",fr:"Vous pouvez ajuster les paramètres d'affichage de l'éditeur ici."})),r(k,"EditorFormatterSettings",()=>d({de:"Code-Formatter-Einstellungen",en:"Editor Formatter Settings",fr:"Paramètres du formateur de code"})),r(k,"EditorFormatterSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für den Code-Formatter anpassen.",en:"Here you can adjust the settings for the code formatter.",fr:"Ici, vous pouvez ajuster les paramètres du formateur de code."})),r(k,"ForceSpacesAfterIfForWhileDoName",()=>d({de:"Anzahl von Leerzeichen nach if, for, while und do erzwingen",en:"Force number of spaces after if, for, while and do",fr:"Forcer le nombre d'espaces après if, for, while et do"})),r(k,"ForceSpacesAfterIfForWhileDoDescription",()=>d({de:"Erzwinge eine bestimmte Anzahl von Leerzeichen nach if, for, while und do",en:"Force a specific number of spaces after if, for, while and do",fr:"Forcer un nombre spécifique d'espaces après if, for, while et do"})),r(k,"one",()=>d({de:"1",en:"1",fr:"1"})),r(k,"zero",()=>d({de:"0",en:"0",fr:"0"})),r(k,"dontForce",()=>d({de:"Nein, nicht erzwingen",en:"No, do not force",fr:"Non, ne pas forcer"})),r(k,"TypingAssistanceDescription",()=>d({de:"Hier können Sie die Eingabeunterstützung des Editors anpassen.",en:"Here you can adjust the typing assistance of the editor.",fr:"Ici, vous pouvez ajuster l'assistance à la saisie de l'éditeur."})),r(k,"AutoClosingBracketsName",()=>d({de:"Automatisches Schließen von Klammern",en:"Auto Closing Brackets",fr:"Fermeture automatique des parenthèses"})),r(k,"BracketPairLines",()=>d({de:"Linien zwischen Klammerpaaren anzeigen",en:"Display lines between bracket pairs",fr:"Afficher les lignes entre les paires de parenthèses"})),r(k,"StickyScroll",()=>d({de:"Sticky Scroll",en:"Sticky Scroll",fr:"Défilement fixe"})),r(k,"StickyScrollDescription",()=>d({de:"Zeigt die aktuellen Blocküberschriften (z.B. Methoden- oder Klassennamen) immer oben im Editor an, auch wenn diese nicht mehr im sichtbaren Bereich sind.",en:"Always displays the current block headers (e.g., method or class names) at the top of the editor, even when they are no longer in the visible area.",fr:"Affiche toujours les en-têtes de bloc actuels (par exemple, les noms de méthodes ou de classes) en haut de l'éditeur, même lorsqu'ils ne sont plus dans la zone visible."})),r(k,"BracketPairLinesDescription",()=>d({de:"Vertikale Linien zwischen passenden Klammerpaaren anzeigen, gegebenfalls um Unterstreichung des Scope-Beginns.",en:"Display vertical lines between matching bracket pairs, possibly with underlined scope-start.",fr:"Afficher des lignes verticales entre les paires de parenthèses correspondantes, éventuellement avec le début du scope souligné."})),r(k,"BracketPairLinesOff",()=>d({de:"Keine Linien anzeigen",en:"Do not display lines",fr:"Ne pas afficher de lignes"})),r(k,"BracketPairLinesVertical",()=>d({de:"Vertikale Linien anzeigen (entspricht Scope)",en:"Display vertical lines (according to scope)",fr:"Afficher des lignes verticales (selon le scope)"})),r(k,"BracketPairLinesVerticalAndUnderlined",()=>d({de:"Vertikale Linien und Unterstreichung anzeigen",en:"Display vertical lines and underline",fr:"Afficher des lignes verticales et souligner"})),r(k,"AutoSemicolonsName",()=>d({de:"Automatisches Ergänzen von Strichpunkten",en:"Auto Semicolons",fr:"Point-virgules automatiques"})),r(k,"AutoSemicolonsDescription",()=>d({de:"Fehlende Strichpunkte am Ende der Zeile werden in den meisten Fällen automatisch ergänzt.",en:"Missing semicolons at the end of the line are automatically added in most cases.",fr:"Les points-virgules manquants à la fin de la ligne sont automatiquement ajoutés dans la plupart des cas."})),r(k,"On",()=>d({de:"Ein",en:"On",fr:"Activé"})),r(k,"Off",()=>d({de:"Aus",en:"Off",fr:"Désactivé"})),r(k,"AutoClosingQuotesName",()=>d({de:"Automatisches Schließen von Anführungszeichen",en:"Auto Closing Quotes",fr:"Fermeture automatique des guillemets"})),r(k,"AutoClosingBracketsDescription",()=>d({de:"Bei Eingabe von öffnenden Klammern wird automatisch die schließende Klammer hinzugefügt.",en:"Automatically add closing brackets when typing opening brackets.",fr:"Ajoute automatiquement les parenthèses fermantes lors de la saisie des parenthèses ouvrantes."})),r(k,"AutoClosingQuotesDescription",()=>d({de:"Bei Eingabe eines Anführungszeichens wird automatisch ein zweites hinter dem Cursor hinzugefügt.",en:"Automatically add a second quote behind the cursor when typing a quote.",fr:"Ajoute automatiquement un deuxième guillemet derrière le curseur lors de la saisie d'un guillemet."})),r(k,"AutoClosingBracketsAlways",()=>d({de:"Immer",en:"Always",fr:"Toujours"})),r(k,"AutoClosingBracketsNever",()=>d({de:"Nie",en:"Never",fr:"Jamais"})),r(k,"AutoClosingBracketsBeforeWhitespace",()=>d({de:"Nur vor Leerzeichen",en:"Only before whitespace",fr:"Seulement avant les espaces"})),r(k,"ClassDiagramSettingsName",()=>d({de:"Klassendiagramm",en:"Class Diagram",fr:"Diagramme de classes"})),r(k,"ClassDiagramSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für das Klassendiagramm anpassen.",en:"Here you can adjust the settings for the class diagram.",fr:"Ici, vous pouvez ajuster les paramètres du diagramme de classes."})),r(k,"ClassDiagramTypeConventionName",()=>d({de:"Darstellungsweise von Datentypen",en:"Type Representation",fr:"Représentation des types"})),r(k,"ClassDiagramBackground",()=>d({de:"Hintergrund beim Exportieren als png-Datei",en:"Background when exporting as png file",fr:"Arrière-plan lors de l'exportation en fichier png"})),r(k,"classDiagramOmitVoidReturnType",()=>d({de:'Rückgabetyp "void" im Klassendiagramm weglassen',en:'Omit "void" return type in class diagram',fr:'Omettre le type de retour "void" dans le diagramme de classes'})),r(k,"ClassDiagramOmitVoidReturnTypeDescription",()=>d({de:'Legt fest, ob im Klassendiagramm bei Methoden der Rückgabetyp "void" weggelassen werden soll.',en:'Determines whether the return type "void" should be omitted in the class diagram for methods.',fr:'Détermine si le type de retour "void" doit être omis dans le diagramme de classes pour les méthodes.'})),r(k,"show",()=>d({de:"anzeigen",en:"show",fr:"afficher"})),r(k,"omit",()=>d({de:"weglassen",en:"omit",fr:"omettre"})),r(k,"ClassDiagramBackgroundDescription",()=>d({de:"Legt fest, ob der Hintergrund des Klassendiagramms beim Exportieren als png-Datei transparent oder weiß sein soll.",en:"Determines whether the background of the class diagram should be transparent or white when exporting as a png file.",fr:"Détermine si l'arrière-plan du diagramme de classes doit"})),r(k,"ClassDiagramTypeConventionDescription",()=>d({de:"Wenn Datentypen im Klassendiagramm angezeigt werden, kann dies entweder in der Art von Java (z.B. String name) erfolgen oder in der Art von Pascal (name: String).",en:"If data types are displayed in the class diagram, they can be shown in either Java style (e.g., String name) or Pascal style (name: String).",fr:"Si les types de données sont affichés dans le diagramme de classes, ils peuvent être présentés dans le style Java (par exemple, String name) ou dans le style Pascal (name: String)."})),r(k,"ClassDiagramTypeConventionJava",()=>d({de:"Java-Stil (z.B. String name)",en:"Java Style (e.g., String name)",fr:"Style Java (par exemple, String name)"})),r(k,"ClassDiagramTypeConventionPascal",()=>d({de:"Pascal-Stil (name: String)",en:"Pascal Style (name: String)",fr:"Style Pascal (name: String)"})),r(k,"ClassDiagramBackgroundTransparent",()=>d({de:"durchsichtig",en:"transparent",fr:"transparent"})),r(k,"ClassDiagramBackgroundWhite",()=>d({de:"weiß",en:"white",fr:"blanc"})),r(k,"CompilerSettingsName",()=>d({de:"Compiler",en:"Compiler",fr:"Compilateur"})),r(k,"CompilerSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen des Compilers vornehmen.",en:"Here you can adjust the compiler settings.",fr:"Ici, vous pouvez ajuster les paramètres du compilateur."})),r(k,"ExplorerSettingsName",()=>d({de:"Explorer",en:"Explorer",fr:"Explorateur"})),r(k,"ExplorerSettingsDescription",()=>d({de:"Einstellungen für den Datei- und Workspaceexplorer (im Hauptfenster links).",en:"Settings for file- and workspace explorer (in the main window on the left)."})),r(k,"CompilerShadowedSymbolErrorLevelName",()=>d({de:"Errorlevel bei verdeckten Symbolen",en:"Error level for shadowed symbols"})),r(k,"CompilerShadowedSymbolErrorLevelDescription",()=>d({de:"Welches Errorlevel soll der Fehler haben, wenn eine Variable in einem inneren Scope eine andere gleichnamige Variable in einem äußeren Scope verdeckt?",en:"What error level should the error have if a variable in an inner scope shadows another variable with the same name in an outer scope?"})),r(k,"ExplorerFileOrderName",()=>d({de:"Sortierung des Dateibaums",en:"Order of file treeview"})),r(k,"ExplorerFileOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Dateibaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the file tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(k,"ExplorerWorkspaceOrderName",()=>d({de:"Sortierung des Workspacebaums",en:"Order of workspace treeview"})),r(k,"ExplorerWorkspaceOrderDescription",()=>d({de:"Hier können Sie einstellen, ob der Workspacebaum grundsätzlich alphabetisch sortiert werden soll oder der Nutzer durch drag and drop eine davon abweichende Sortierung festlegen kann.",en:"You can set here whether the workspace tree should be sorted alphabetically by default or whether the user can define a different sorting by drag and drop."})),r(k,"ExplorerOrderComparator",()=>d({de:"Immer alphabetisch",en:"Always alphabetical",fr:"Toujours alphabétique"})),r(k,"ExplorerOrderUserDefined",()=>d({de:"Nutzerdefinierte Sortierung",en:"User-defined order",fr:"Ordre défini par l'utilisateur"})),r(k,"ErrorLevelIgnore",()=>d({de:"Ignorieren",en:"Ignore",fr:"Ignorer"})),r(k,"ErrorLevelWarning",()=>d({de:"Warnung",en:"Warning",fr:"Avertissement"})),r(k,"ErrorLevelError",()=>d({de:"Fehler",en:"Error",fr:"Erreur"})),r(k,"ErrorLevelInfo",()=>d({de:"Info",en:"Info",fr:"Info"})),r(k,"ContextSensitiveHelpName",()=>d({de:"Kontextsensitive Hilfe",en:"Context-sensitive help"})),r(k,"ContextSensitiveHelpDescription",()=>d({de:"Hier können Sie einstellen, ob in bestimmten Bereichen der Anwendung kontextsensitive Hilfetexte angezeigt werden sollen.",en:"Here you can set whether context-sensitive help texts should be displayed in certain areas of the application.",fr:"Ici, vous pouvez définir si des textes d'aide contextuels doivent être affichés dans certaines zones de l'application."})),r(k,"ContextSensitiveHelpParameterHintsName",()=>d({de:"Parameterhinweise",en:"Parameter hints",fr:"Indications de paramètres"})),r(k,"ContextSensitiveHelpParameterHintsDescription",()=>d({de:"Hier können Sie einstellen, ob dann, wenn sich der Cursor in einem Methodenaufruf befindet, Hinweise zu den Parametern dieser Methode angezeigt werden sollen.
",en:"Here you can set whether hints about the parameters of a method should be displayed whenever the cursor is inside a method call.",fr:"Ici, vous pouvez définir si des indications sur les paramètres d'une méthode doivent être affichées lorsque le curseur est à l'intérieur d'un appel de méthode."})),r(k,"ClassDiagramDrawCompositionDiamond",()=>d({de:"Kompositionsbeziehungen mit Raute darstellen",en:"Draw composition relationships with diamond",fr:"Dessiner les relations de composition avec un losange"})),r(k,"ClassDiagramDrawCompositionDiamondDescription",()=>d({de:"Hier können Sie einstellen, ob Kompositionsbeziehungen mit einer Raute dargestellt werden sollen oder nur als einfache Linien.",en:"Here you can set whether composition relationships should be displayed with a diamond or as simple lines.",fr:"Ici, vous pouvez définir si les relations de composition doivent être affichées avec un losange ou sous forme de lignes simples."})),r(k,"CompositionDiamondYes",()=>d({de:"Ja, als Raute darstellen",en:"Yes, display with diamond",fr:"Oui, afficher avec un losange"})),r(k,"CompositionDiamondNo",()=>d({de:"Nein, nur einfache Linien",en:"No, display as simple lines",fr:"Non, afficher sous forme de lignes simples"})),r(k,"OutputSettingsName",()=>d({de:"Ausgabe",en:"Output",fr:"Sortie"})),r(k,"OutputSettingsDescription",()=>d({de:"Hier können Sie die Einstellungen für die Ausgabe (rechter Teil der Online-IDE) anpassen.",en:"Here you can adjust the settings for the output (right part of the online IDE).",fr:"Ici, vous pouvez ajuster les paramètres de la sortie (partie droite de l'IDE en ligne)."})),r(k,"clearOutputAfterWorkspaceChangeName",()=>d({de:"Ausgabe nach Wechsel des Workspaces löschen",en:"Clear output after changing workspace",fr:"Effacer la sortie après le changement de workspace"})),r(k,"clearOutputAfterWorkspaceChangeDescription",()=>d({de:"Hier können Sie einstellen, ob die Ausgabe (rechter Teil der Online-IDE) automatisch gelöscht werden soll, wenn Sie den Workspace wechseln.",en:"Here you can set whether the output (right part of the online IDE) should be automatically cleared when you change the workspace.",fr:"Ici, vous pouvez définir si la sortie (partie droite de l'IDE en ligne) doit être automatiquement effacée lorsque vous changez de workspace."})),r(k,"yes",()=>d({de:"Ja",en:"Yes",fr:"Oui"})),r(k,"no",()=>d({de:"Nein",en:"No",fr:"Non"})),r(k,"AssemblyEnabledName",()=>d({de:"Maschinensprache zur Sprachauswahl hinzufügen",en:"Add machine language to language selection",fr:"Ajouter le langage machine à la sélection de langue"})),r(k,"AssemblyEnabledDescription",()=>d({de:'Hier können Sie einstellen, ob die Sprache "Maschinensprache" in der Sprachauswahl hinzugefügt werden soll.',en:'Here you can set whether the language "Machine Language" should be added to the language selection.',fr:'Ici, vous pouvez définir si le langage "Langage Machine" doit être ajouté à la sélection de langue.'})),r(k,"AssemblyName",()=>d({de:"Maschinensprache",en:"Machine Language",fr:"Langage Machine"})),r(k,"AssemblyDescription",()=>d({de:"Einstellungen zur Programmiersprache Maschinensprache.",en:"Settings for machine language.",fr:"Paramètres pour le langage de programmation Langage Machine."})),r(k,"ProgrammingLanguagesSettingsName",()=>d({de:"Programmiersprachen",en:"Programming Languages",fr:"Langages de programmation"})),r(k,"ProgrammingLanguagesSettingsDescription",()=>d({de:"Hier können Sie Einstellungen vornehmen, die sich auf die unterstützten Programmiersprachen beziehen.",en:"Here you can adjust settings related to the supported programming languages.",fr:"Ici, vous pouvez ajuster les paramètres liés aux langages de programmation pris en charge."})),r(k,"AssemblyDefaultArchitectureName",()=>d({de:"Standard-Speicherarchitektur für Assembler",en:"Default memory architecture for assembly language",fr:"Architecture mémoire par défaut pour le langage assembleur"})),r(k,"AssemblyDefaultArchitectureDescription",()=>d({de:"Hier können Sie einstellen, wie viel Bit die Speicherzellen standardmäßig haben sollen und ob ihr Wert vorzeichenbehaftet oder vorzeichenlos interpretiert werden soll.",en:"Here you can set how many bits the memory cells should have by default and whether their value should be interpreted as signed or unsigned.",fr:"Ici, vous pouvez définir combien de bits les cellules de mémoire doivent avoir par défaut et si leur valeur doit être interprétée comme signée ou non signée."})),r(k,"SchooladminSettingsName",()=>d({de:"Schulweite Festlegungen",en:"School-wide settings",fr:"Paramètres à l'échelle de l'école"})),r(k,"SchooladminSettingsDescription",()=>d({de:"Hier können Sie Einstellungen vornehmen, die schulweit gelten.",en:"Here you can adjust settings that apply school-wide.",fr:"Ici, vous pouvez ajuster les paramètres qui s'appliquent à l'échelle de l'école."})),r(k,"PruefungFunctionalityName",()=>d({de:'Funktionalität "Prüfungen" aktivieren/deaktivieren',en:'Functionality "Exams" enable/disable',fr:'Fonctionnalité "Examens" activer/désactiver'})),r(k,"PruefungFunctionalityDescription",()=>d({de:'Hier können Sie einstellen, ob die Funktionalität "Prüfungen" in der Online-IDE aktiviert oder deaktiviert werden soll.',en:'Here you can set whether the functionality "Exams" should be enabled or disabled in the online IDE.',fr:`Ici, vous pouvez définir si la fonctionnalité "Examens" doit être activée ou désactivée dans l'IDE en ligne.`})),r(k,"enabled",()=>d({de:"aktiviert",en:"enabled",fr:"activé"})),r(k,"disabled",()=>d({de:"deaktiviert",en:"disabled",fr:"désactivé"}));const EA="data:image/png;base64,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",DA="data:image/png;base64,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",jA="data:image/png;base64,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",MA="data:image/png;base64,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",PA="data:image/png;base64,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",OA=""+new URL("assets/explorer-B4AQnIGl.png",import.meta.url).href,LA="data:image/png;base64,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",BA="data:image/png;base64,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",FA="data:image/png;base64,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";var VA=[{settingType:"group",name:k.EditorSettingsName,description:k.EditorSettingsDescription,settings:[{settingType:"group",name:k.HoverVerbosityName,description:k.HoverVerbosityDescription,settings:[{key:"editor.hoverVerbosity.showHelpOnKeywordsAndOperators",settingType:"setting",name:k.ShowHelpOnKeywordsAndOperators,description:void 0,type:"boolean",image:EA},{key:"editor.hoverVerbosity.showMethodDeclaration",settingType:"setting",name:k.ShowMethodDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[k.None,k.Declarations,k.DeclarationsAndComments],image:DA},{key:"editor.hoverVerbosity.showClassDeclaration",settingType:"setting",name:k.ShowClassDeclaration,description:void 0,type:"enumeration",optionValues:["none","declarations","declarationsAndComments"],optionTexts:[k.None,k.Declarations,k.DeclarationsAndComments],image:jA}]},{settingType:"group",name:k.ContextSensitiveHelpName,description:k.ContextSensitiveHelpDescription,settings:[{key:"editor.contextSensitiveHelp.StructureStatements",settingType:"setting",name:k.ShowStructureStatementHelp,description:void 0,type:"enumeration",optionValues:["false","true"],optionTexts:[k.OptionFalse,k.OptionTrue],image:BA,imageWidth:"400px"},{key:"editor.contextSensitiveHelp.ParameterHints",settingType:"setting",name:k.ContextSensitiveHelpParameterHintsName,description:k.ContextSensitiveHelpParameterHintsDescription,type:"enumeration",optionValues:["false","true"],optionTexts:[k.OptionFalse,k.OptionTrue],image:LA,action:(c,t)=>{c.getMainEditor().updateOptions({parameterHints:{enabled:t==="true",cycle:!0}})}}]},{settingType:"group",name:k.TypingAssistanceName,description:k.TypingAssistanceDescription,settings:[{key:"editor.autoClosingBrackets",settingType:"setting",name:k.AutoClosingBracketsName,description:k.AutoClosingBracketsDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[k.AutoClosingBracketsAlways,k.AutoClosingBracketsBeforeWhitespace,k.AutoClosingBracketsNever],action:(c,t)=>{c.getMainEditor().updateOptions({autoClosingBrackets:t})}},{key:"editor.autoClosingQuotes",settingType:"setting",name:k.AutoClosingQuotesName,description:k.AutoClosingQuotesDescription,type:"enumeration",optionValues:["always","beforeWhitespace","never"],optionTexts:[k.AutoClosingBracketsAlways,k.AutoClosingBracketsBeforeWhitespace,k.AutoClosingBracketsNever],action:(c,t)=>{c.getMainEditor().updateOptions({autoClosingQuotes:t})}},{key:"editor.autoSemicolons",settingType:"setting",name:k.AutoSemicolonsName,description:k.AutoSemicolonsDescription,type:"boolean",optionTexts:[k.On,k.Off]}]},{settingType:"group",name:k.EditorFormatterSettings,description:k.EditorFormatterSettingsDescription,settings:[{key:"formatter.forceSpacesAfterIfForWhileDo",settingType:"setting",name:k.ForceSpacesAfterIfForWhileDoName,description:k.ForceSpacesAfterIfForWhileDoDescription,type:"enumeration",optionValues:["0","1","no"],optionTexts:[k.zero,k.one,k.dontForce],action:(c,t)=>{c.editor.editor.getAction("editor.action.formatDocument").run()}}]},{settingType:"group",name:k.EditorViewSettings,description:k.EditorViewSettingsDescription,settings:[{key:"editor.bracketPairLines",settingType:"setting",name:k.BracketPairLines,description:k.BracketPairLinesDescription,type:"enumeration",optionValues:["off","vertical","verticalAndUnderlined"],optionTexts:[k.BracketPairLinesOff,k.BracketPairLinesVertical,k.BracketPairLinesVerticalAndUnderlined],action:(c,t)=>{c.getMainEditor().updateOptions({guides:{bracketPairs:t!=="off",highlightActiveBracketPair:t!=="off",bracketPairsHorizontal:t==="verticalAndUnderlined"}})},image:MA},{key:"editor.stickyScroll",settingType:"setting",name:k.StickyScroll,description:k.StickyScrollDescription,type:"enumeration",optionValues:["off","on"],optionTexts:[k.Off,k.On],action:(c,t)=>{c.getMainEditor().updateOptions({stickyScroll:{enabled:t!=="off"}})}}]},{settingType:"group",name:k.EditorQuickFixSettingsName,description:k.EditorQuickFixSettingsDescription,settings:[{key:"editor.quickFix.getterAndSetter",settingType:"setting",name:k.EditorQuickFixGetterSetterName,description:k.EditorQuickFixGetterSetterDescription,type:"enumeration",optionValues:["offer","dontOffer"],optionTexts:[k.offer,k.dontOffer],action:(c,t)=>{c.getCompiler().forceRecompilation()}},{key:"editor.quickFix.generateConstructor",settingType:"setting",name:k.EditorQuickFixGenerateConstructorName,description:k.EditorQuickFixGenerateConstructorDescription,type:"enumeration",optionValues:["offer","dontOffer"],optionTexts:[k.offer,k.dontOffer]}]},{settingType:"group",name:k.EditorMiscellaneousName,description:k.EditorMiscellaneousDescription,settings:[{key:"editor.stopRunningProgramOnWhenEditingSourcecode",settingType:"setting",name:k.EditorStopRunningProgramOnWhenEditingSourcecodeName,description:k.EditorStopRunningProgramOnWhenEditingSourcecodeDescription,type:"enumeration",optionValues:["yes","no"],optionTexts:[k.yes,k.no]}]}]},{settingType:"group",name:k.ClassDiagramSettingsName,description:k.ClassDiagramSettingsDescription,image:PA,settings:[{key:"classDiagram.typeConvention",settingType:"setting",name:k.ClassDiagramTypeConventionName,description:k.ClassDiagramTypeConventionDescription,type:"enumeration",optionValues:["java","pascal"],optionTexts:[k.ClassDiagramTypeConventionJava,k.ClassDiagramTypeConventionPascal],action:(c,t)=>{c.drawClassDiagrams(!1)}},{key:"classDiagram.background",settingType:"setting",name:k.ClassDiagramBackground,description:k.ClassDiagramBackgroundDescription,type:"enumeration",optionValues:["transparent","white"],optionTexts:[k.ClassDiagramBackgroundTransparent,k.ClassDiagramBackgroundWhite]},{key:"classDiagram.omitVoidReturnType",settingType:"setting",name:k.classDiagramOmitVoidReturnType,description:k.ClassDiagramOmitVoidReturnTypeDescription,type:"enumeration",optionValues:["show","omit"],optionTexts:[k.show,k.omit],action:(c,t)=>{c.drawClassDiagrams(!1)}},{key:"classDiagram.drawCompositionDiamond",settingType:"setting",name:k.ClassDiagramDrawCompositionDiamond,description:k.ClassDiagramDrawCompositionDiamondDescription,type:"enumeration",optionValues:["yes","no"],optionTexts:[k.CompositionDiamondYes,k.CompositionDiamondNo],action:(c,t)=>{c.drawClassDiagrams(!1)}}]},{settingType:"group",name:k.ExplorerSettingsName,description:k.ExplorerSettingsDescription,image:OA,settings:[{key:"explorer.fileOrder",settingType:"setting",name:k.ExplorerFileOrderName,description:k.ExplorerFileOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[k.ExplorerOrderComparator,k.ExplorerOrderUserDefined],action:(c,t)=>{let e=c.projectExplorer.fileTreeview;e.config.orderBy=t,e.sort()}},{key:"explorer.workspaceOrder",settingType:"setting",name:k.ExplorerWorkspaceOrderName,description:k.ExplorerWorkspaceOrderDescription,type:"enumeration",optionValues:["comparator","user-defined"],optionTexts:[k.ExplorerOrderComparator,k.ExplorerOrderUserDefined],action:(c,t)=>{let e=c.projectExplorer.workspaceTreeview;e.config.orderBy=t,e.sort()}}]},{settingType:"group",name:k.CompilerSettingsName,description:k.CompilerSettingsDescription,settings:[{key:"compiler.shadowedSymbolErrorLevel",settingType:"setting",name:k.CompilerShadowedSymbolErrorLevelName,description:k.CompilerShadowedSymbolErrorLevelDescription,type:"enumeration",optionValues:["ignore","info","warning","error"],optionTexts:[k.ErrorLevelIgnore,k.ErrorLevelInfo,k.ErrorLevelWarning,k.ErrorLevelError],action:(c,t)=>{c.getCompiler().forceRecompilation()},image:FA}]},{settingType:"group",name:k.OutputSettingsName,description:k.OutputSettingsDescription,settings:[{key:"output.clearOutputAfterWorkspaceChange",settingType:"setting",name:k.clearOutputAfterWorkspaceChangeName,description:k.clearOutputAfterWorkspaceChangeDescription,type:"enumeration",optionValues:["yes","no"],optionTexts:[k.yes,k.no]}]},{settingType:"group",name:k.ProgrammingLanguagesSettingsName,description:k.ProgrammingLanguagesSettingsDescription,settings:[{settingType:"group",name:k.AssemblyName,description:k.AssemblyDescription,settings:[{key:"programmingLanguages.ByAssembly.enabled",settingType:"setting",name:k.AssemblyEnabledName,description:k.AssemblyEnabledDescription,type:"enumeration",optionValues:["yes","no"],optionTexts:[k.yes,k.no],action:(c,t)=>{let e=c.projectExplorer.workspaceTreeview;e.config.orderBy=t,e.sort()}},{key:"programmingLanguages.ByAssembly.defaultArchitecture",settingType:"setting",name:k.AssemblyDefaultArchitectureName,description:k.AssemblyDefaultArchitectureDescription,type:"enumeration",optionValues:Zi.getArchitectures().map(c=>c.identifier),optionTexts:Zi.getArchitectures().map(c=>c.getLocalizedName())}]}]},{settingType:"group",name:k.SchooladminSettingsName,description:k.SchooladminSettingsDescription,isSchooladminOnly:!0,settings:[{key:"schooladmin.functionality.pruefungen",settingType:"setting",name:k.PruefungFunctionalityName,description:k.PruefungFunctionalityDescription,type:"enumeration",optionValues:["enabled","disabled"],optionTexts:[k.enabled,k.disabled],action:(c,t)=>{c.teacherExplorer.initPruefungButtons()}}]}];class _A{constructor(t){r(this,"userSettings");r(this,"ownClassSettings");r(this,"classSettings");r(this,"schoolSettings");r(this,"currentScope","user");r(this,"currentSettingsGroup",null);r(this,"currentSettings",null);r(this,"currentClassId",null);r(this,"$settingsLeftMenuDiv");r(this,"$settingsMainDiv");r(this,"settingsExplorer");r(this,"tabManager");r(this,"schoolSettingsTab");r(this,"classSettingsTab");r(this,"userSettingsTab");this.main=t,this.userSettings=t.settings.values.user||{},this.ownClassSettings=t.settings.values.class||{},this.schoolSettings=t.settings.values.school||{}}async open(){await this.getSettingsFromServer();let t=new Go;t.initAndOpen(),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{t.close()}),t.heading(k.SettingsHeading());let e=y("
");t.addDiv(e);let i=y('
');if(t.addDiv(i),this.$settingsLeftMenuDiv=y('
'),i.append(this.$settingsLeftMenuDiv),this.$settingsMainDiv=y('
'),i.append(this.$settingsMainDiv),this.tabManager=new up(e[0],!0),this.userSettingsTab=new mn("User Settings",k.UserSettingsTabHeading(),[]),this.userSettingsTab.onShow=()=>{this.showSettingsData("user")},this.tabManager.addTab(this.userSettingsTab),this.tabManager.setActive(this.userSettingsTab),this.main.user.is_teacher&&this.classSettings&&this.classSettings.length>0){this.classSettingsTab=new mn("Class Settings",k.ClassSettingsTabHeading(),[]),this.classSettingsTab.onShow=()=>{this.showSettingsData("class")},this.tabManager.addTab(this.classSettingsTab);let n=y('');this.classSettingsTab.headingDiv.append(n[0]),Ns(n,this.classSettings.map(s=>({value:s.classId,object:s,caption:s.className})).sort((s,a)=>s.caption.localeCompare(a.caption))),this.currentClassId=this.classSettings[0].classId,n.on("change",()=>{let s=as(n);this.currentClassId=s.classId,this.currentScope=="class"&&this.showSettingsData()})}this.main.user.is_schooladmin&&this.schoolSettings&&(this.schoolSettingsTab=new mn("School Settings",k.SchoolSettingsTabHeading(),[]),this.schoolSettingsTab.onShow=()=>{this.showSettingsData("school")},this.tabManager.addTab(this.schoolSettingsTab)),t.buttons([{caption:k.CloseButton(),color:"green",callback:()=>{window.history.back()}}]),this.initSettingsExplorer()}async getSettingsFromServer(){let t=await qe("/servlet/getSettings",{});t.success&&(this.classSettings=t.classSettings.map(e=>({classId:e.classId,className:e.className,settings:Ws.parse(e.settings)})))}showSettingsData(t){if(t&&(this.currentScope=t),this.$settingsMainDiv.empty(),!!this.currentSettingsGroup){if(this.currentSettingsGroup.image){let e=y(``);this.$settingsMainDiv.append(e)}this.$settingsMainDiv.append(y(`
${this.currentSettingsGroup.name()}
`)),this.currentSettingsGroup.description&&this.$settingsMainDiv.append(y(`
${this.currentSettingsGroup.description()}
`));for(let e of this.currentSettingsGroup.settings.filter(i=>i.settingType=="setting")){let i=y('
');this.$settingsMainDiv.append(i),this.renderSetting(e,i)}}}renderSetting(t,e){if(t.image){e.append(y('
'));let l=y(``);e.append(l)}e.append(y(`
${t.name()}
`)),t.description&&e.append(y(`
${t.description()}
`));let i=t.key,n=this.getCurrentSettingValues()[i],s=this.getDefaultSettingValue(i,!(this.main.user.is_teacher||this.main.user.is_schooladmin)),a=s.isForced;switch(t.type){case"boolean":let l=[k.OptionTrue(),k.OptionFalse()];t.optionTexts&&(l=t.optionTexts.map(f=>f())),l.push(k.OptionDefault()+": "+(s?l[0]:l[1]));let h=[!0,!1,void 0];this.appendSelectElement(e,l,h,n,async(f,b)=>{await this.storeAndSave(t,t.key,f,b)},a);break;case"string":this.appendInputElement(e,n,s.value,async(f,b)=>{await this.storeAndSave(t,t.key,f,b)},a);break;case"enumeration":let u=t.optionTexts.map(f=>f()),m=t.optionValues.indexOf(s.value);m==-1&&(m=0),u.push(k.OptionDefault()+": "+u[m]);let g=t.optionValues.slice();g.push(void 0),this.appendSelectElement(e,u,g,n,async(f,b)=>{await this.storeAndSave(t,t.key,f,b)},a);break}if(t.image&&e.append(y('
')),a){let l=y(`
${k.SettingDisabledByHigherPrecedence()}
`);e.append(l)}}async storeAndSave(t,e,i,n){if(this.getCurrentSettingValues()[e]!==i){this.getCurrentSettingValues()[e]=i,t.action&&t.action(this.main,i);let a={userId:this.currentScope=="user"?this.main.user.id:void 0,klasseId:this.currentScope=="class"?this.currentClassId:void 0,schuleId:this.currentScope=="school"?this.main.user.schule_id:void 0,settings:Ws.stringify(this.getCurrentSettingValues())};n.text(k.Saving()+"..."),n.css("color","var(--loginMessageColor)"),n.show(),(await qe("/servlet/updateSettings",a)).success&&(n.text(`-> ${k.Saved()} ✓`),n.css("color","var(--loginButtonBackground)"))}}wrapWithSavingMessageAndAppendToParent(t,e){let i=y("
");i.append(t);let n=y("
");return i.append(n),n.hide(),e.append(i),t.on("click",()=>{n.text("")}),n}appendInputElement(t,e,i,n,s=!1){let l=y(``);typeof e<"u"&&l.val(e);let h=this.wrapWithSavingMessageAndAppendToParent(l,t);l.on("focusout",async()=>{let u=l.val();u==""&&(u=void 0),await n(u,h)}),l.on("change",()=>{h.hide()})}appendSelectElement(t,e,i,n,s,a=!1){let h=y(``),u=this.wrapWithSavingMessageAndAppendToParent(h,t),m=[];for(let f=0;ff.object===n);h[0].selectedIndex=g,h.on("change",async()=>{await s(as(h),u)})}getDefaultSettingValue(t,e){let i,n=Zg[t]||"userClassSchoolDefault",s=!1;return this.currentScope=="user"&&this.ownClassSettings&&(i=this.ownClassSettings[t],typeof i<"u"&&n==="classSchoolUserDefault"&&(s=!0)),typeof i>"u"&&(i=this.schoolSettings[t],typeof i<"u"&&n==="classSchoolUserDefault"&&(s=!0)),typeof i>"u"&&(i=this.main.settings.values.default[t]),{value:i,isForced:s&&e}}getCurrentSettingValues(){var t;switch(this.currentScope){case"user":return this.userSettings;case"class":return this.main.user.is_schooladmin||this.main.user.is_admin||this.main.user.is_teacher?((t=this.classSettings.find(e=>e.classId==this.currentClassId))==null?void 0:t.settings)||{}:this.ownClassSettings;case"school":return this.schoolSettings}return{}}initSettingsExplorer(){this.settingsExplorer=new li(this.$settingsLeftMenuDiv[0],{withSelection:!0,selectMultiple:!1,captionLine:{enabled:!1},buttonAddElements:!1,buttonAddFolders:!1,withFolders:!0,withDeleteButtons:!1,isDragAndDropSource:!1,orderBy:"comparator"});for(let t of VA.filter(e=>e.settingType==="group"))t.isSchooladminOnly&&!this.main.user.is_schooladmin||this.addSettingsToExplorer(t);this.settingsExplorer.nodeClickedCallback=t=>{var e,i;this.currentSettingsGroup=t,t.isSchooladminOnly?(this.tabManager.setActive(this.schoolSettingsTab),(e=this.classSettingsTab)==null||e.setVisible(!1),this.userSettingsTab.setVisible(!1)):((i=this.classSettingsTab)==null||i.setVisible(this.main.user.is_teacher),this.userSettingsTab.setVisible(!0)),this.showSettingsData()}}addSettingsToExplorer(t,e=null){this.settingsExplorer.addNode(t.settings.find(i=>i.settingType==="group")!=null,t.name(),void 0,t,e),t.settings.filter(i=>i.settingType==="group").forEach(i=>{this.addSettingsToExplorer(i,t)})}}class ht{}r(ht,"importRepository",()=>d({de:"Repository importieren",en:"Import repository"})),r(ht,"importRepositoryDescription",()=>d({de:"1. Wählen Sie eine Datei aus, die das exportierte Repository enthält, das Sie importieren möchten, oder ziehen Sie sie in das gestrichelte Rechteck.",en:"1. Select a file that contains the exported repository you want to import or drag them into the dashed rectangle."})),r(ht,"renameDescription",()=>d({de:"2. Optional: Geben Sie einen neuen Namen für das Repository ein. Wenn Sie keinen Namen angeben, wird der Name aus der Exportdatei verwendet.",en:"2. Optional: Enter a new name for the repository. If you do not provide a name, the name from the export file will be used."})),r(ht,"filesSelected",()=>d({de:"Dateien ausgewählt",en:"files selected"})),r(ht,"newName",()=>d({de:"Neuer Name",en:"New name"})),r(ht,"import",()=>d({de:"Importieren",en:"Import"})),r(ht,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(ht,"noFilesSelected",()=>d({de:"Es wurden keine Dateien ausgewählt. Bitte wählen Sie eine Datei aus.",en:"No files selected. Please select a file."})),r(ht,"wrongFileFormat",t=>d({de:`Die Datei "${t}" ist keine gültige Exportdatei für ein Repository. Bitte wählen Sie eine gültige Datei aus.`,en:`The file "${t}" is not a valid export file for a repository. Please select a valid file.`})),r(ht,"importSuccessfully",t=>d({de:`Das Repository aus der Datei "${t}" wurde erfolgreich importiert.`,en:`The repository from the file "${t}" has been successfully imported.`})),r(ht,"exportTipp",()=>d({de:'Tipp: Sie können ein Repository als Datei exportieren, indem Sie in der Workspace-Liste auf einen Workspace rechtsklicken, der mit dem Repository verbunden ist, und dann "Repository als Datei Exportieren" auswählen.',en:'Hint: To export a repository as a file right-click on a workspace in the workspace list that is connected to the repository and select "Export repository as file".'}));class zA{static async exportRepository(t,e){let n=await qe("/servlet/getRepository",{repository_id:t,workspace_id:e});if(!n.success)return;let s=n.repository,a;if(s.spritesheet_id)try{let l=new ps;await l.load(s.spritesheet_id),l.zipFile!=null&&(a=lf(l.zipFile))}catch{console.log("Fehler beim Laden des Spritesheets.")}return{name:s.name,files:s.files,history:s.history,description:s.description,spritesheetBase64:a}}}class WA{constructor(t){this.main=t}async importRepository(t){if(t.spritesheetBase64){let e=cp(t.spritesheetBase64);try{let i=await cd.uploadSpritesheet(e,null,!1);t.spritesheet_id=i,t.spritesheetBase64=void 0}catch{}}await qe("/servlet/importRepository",t)}}const NA=""+new URL("assets/lightbulb-CnOCH59Y.png",import.meta.url).href;class qA{constructor(t){r(this,"dialog");r(this,"files");r(this,"$newNameInput");this.main=t,this.dialog=new Go}show(){this.dialog.initAndOpen(),this.dialog.heading(ht.importRepository()),this.dialog.description(ht.importRepositoryDescription());let t=y('');this.dialog.addDiv(t),t.on("change",n=>{this.files=n.originalEvent.target.files});let e=y(`
${et.dragFilesHere()}
`);this.dialog.addDiv(e);let i=y('
');e.append(i),this.dialog.description("").text(ht.renameDescription()),this.$newNameInput=this.dialog.input("text",ht.newName()),e.on("dragover",n=>{n.stopPropagation(),n.preventDefault(),n.originalEvent.dataTransfer.dropEffect="copy"}),e.on("drop",n=>{n.stopPropagation(),n.preventDefault(),this.files=n.originalEvent.dataTransfer.files,i.text(this.files.length+" "+ht.filesSelected())}),this.dialog.buttons([{caption:ht.import(),color:"#18a000ff",callback:()=>{this.importFiles()}},{caption:ht.cancel(),color:"#caaf17ff",callback:()=>{this.dialog.close()}}]),this.dialog.addDiv(y('
')),this.dialog.addDiv(y("")),this.dialog.description(``+ht.exportTipp())}async importFiles(){if(!this.files||this.files.length===0){alert(ht.noFilesSelected());return}let t=this.files[0];var e=new FileReader;e.onload=async i=>{var h,u;let n=i.target.result;if(!n.startsWith("{")){alert(ht.wrongFileFormat(t.name));return}let s;try{s=JSON.parse(n)}catch{alert(ht.wrongFileFormat(t.name));return}let a=(u=(h=this.$newNameInput.val())==null?void 0:h.toString())==null?void 0:u.trim();a&&a.length>0&&(s.name=a);var l=new WA(this.main);await l.importRepository(s),alert(ht.importSuccessfully(t.name)),this.dialog.close()},e.readAsText(t)}}class RA{constructor(t){r(this,"currentSubmenu",{});r(this,"openSubmenusOnMousemove",!1);this.main=t}initGUI(t,e){let i=this,n=this.main.getMainEditor(),s=this.main.guiState.language??"de",a={items:[{identifier:E.File(),subMenu:{items:[{identifier:E.ImportWorkspace(),action:()=>{new $A(this.main).show()}},{identifier:E.ExportCurrentWorkspace(),action:async()=>{var g;let l=this.main.currentWorkspace;l==null&&alert(E.NoWorkspaceSelected());let h=l.name.replace(/\//g,"_"),u=(g=this.main.pruefungManagerForStudents)==null?void 0:g.pruefung,m=this.main.user;u!=null&&(h=u.name.replace(/\//g,"_")+" ("+m.familienname+" "+m.rufname+"; "+m.username+")"),Sr(await cn.exportWorkspace(l),h+".json")}},{identifier:E.ExportAllWorkspacesAsJSon(),action:async()=>{let l="all_workspaces";this.main.user;let h=await cn.exportAllWorkspaces(this.main);Sr(h,l+".json"),alert(E.ExportAllWorkspacesDone())}},{identifier:E.ExportAllWorkspacesAsZip(),action:async()=>{let l="all_workspaces.zip",u=await(await cn.exportAllWorkspacesToZipfile(this.main)).generateAsync({type:"uint8array"});Sr(new Blob([u]),l,!0),alert(E.ExportAllWorkspacesDone())}}]}},{identifier:E.Edit(),subMenu:{items:[{identifier:E.Undo(),action:()=>{n.trigger(".","undo",{})}},{identifier:E.Redo(),action:()=>{n.trigger(".","redo",{})}},{identifier:"-"},{identifier:E.Copy(),action:()=>{n.getAction("editor.action.clipboardCopyAction").run()}},{identifier:E.Cut(),action:()=>{n.getAction("editor.action.clipboardCutAction").run()}},{identifier:E.Paste(),action:()=>{n.getAction("myPaste").run()}},{identifier:E.CopyToTop(),action:()=>{n.getAction("editor.action.copyLinesUpAction").run()}},{identifier:E.CopyToBottom(),action:()=>{n.getAction("editor.action.copyLinesDownAction").run()}},{identifier:E.MoveToTop(),action:()=>{n.getAction("editor.action.moveLinesUpAction").run()}},{identifier:E.MoveToBottom(),action:()=>{n.getAction("editor.action.moveLinesDownAction").run()}},{identifier:"-"},{identifier:E.Find(),action:()=>{n.getAction("actions.find").run()}},{identifier:E.Replace(),action:()=>{n.getAction("editor.action.startFindReplaceAction").run()}},{identifier:"-"},{identifier:E.ToggleComment(),action:()=>{n.getAction("editor.action.commentLine").run()}},{identifier:E.AutoFormat(),action:()=>{n.getAction("editor.action.formatDocument").run()}},{identifier:"-"},{identifier:E.FindCorrespondingBracket(),action:()=>{n.getAction("editor.action.jumpToBracket").run()}},{identifier:"-"},{identifier:E.FoldAll(),action:()=>{n.getAction("editor.foldAll").run()}},{identifier:E.UnfoldAll(),action:()=>{n.getAction("editor.unfoldAll").run()}},{identifier:"-"},{identifier:E.TriggerSuggest(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.triggerSuggest").run()},200)}},{identifier:E.TriggerParameterHint(),action:()=>{n.getAction("editor.action.triggerParameterHints").run()}},{identifier:E.GoToDefinition(),action:()=>{n.focus(),setTimeout(()=>{n.getAction("editor.action.revealDefinition").run()},200)}}]}},{identifier:E.View(),subMenu:{items:[{identifier:E.Theme(),subMenu:{items:[{identifier:E.Dark(),action:()=>{i.switchTheme("dark")}},{identifier:E.Light(),action:()=>{i.switchTheme("light")}}]}},{identifier:"-"},{identifier:E.HighContrastOnOff(),action:()=>{n.getAction("editor.action.toggleHighContrast").run()}},{identifier:"-"},{identifier:E.LinebreakOnOff(),action:()=>{let l=this.main.editor.editor.getOption(Q.EditorOption.wordWrap);l=l=="on"?"off":"on",this.main.editor.editor.updateOptions({wordWrap:l})}},{identifier:E.SetDefaultFontSize(),action:()=>{this.main.editor.setFontSize(14)}}]}},{identifier:E.Repository(),subMenu:{items:[{identifier:E.ConfigureOwnRepositories(),action:()=>{this.main.repositoryUpdateManager.show(null)}},{identifier:E.Checkout(),action:()=>{this.main.repositoryCheckoutManager.show(null)}},{identifier:E.importRepository(),action:()=>{new qA(this.main).show()}}]}},{identifier:E.Sprites(),subMenu:{items:[{identifier:E.AddOwnSprites(),action:()=>{this.main.spriteManager.show()}},{identifier:"-"},{identifier:E.SpriteCatalogue(),link:e+"spriteLibrary.html?csrfToken="+Ft+"&lang="+s}]}},{identifier:E.Help(),subMenu:{items:[{identifier:E.VideoTutorials(),link:"https://www.learnj.de/doku.php?id=api:ide_manual:start"},{identifier:E.JavaTutorial(),link:"https://www.learnj.de/doku.php"},{identifier:"-"},{identifier:E.APIDoc(),link:"https://www.learnj.de/doku.php?id=api:documentation:start"},{identifier:E.APIReference(),link:e+"api_documentation.html?csrfToken="+Ft+"&lang="+s},{identifier:"-"},{identifier:E.Shortcuts(),link:e+"shortcuts.html?csrfToken="+Ft+"&lang="+s},{identifier:"-"},{identifier:E.Changelog(),link:"https://www.learnj.de/doku.php?id=javaonline:changelog"},{identifier:E.Roadmap(),link:"https://www.learnj.de/doku.php?id=javaonline:roadmap"},{identifier:"-"},{identifier:E.EditorCommandPalette(),action:()=>{setTimeout(()=>{i.main.getMainEditor().focus(),n.getAction("editor.action.quickCommand").run()},500)}},{identifier:"-"},{identifier:E.ChangePassword(),action:()=>{new gf(i.main).show()}},{identifier:"-"},{identifier:E.BugReport(),action:()=>{new IA(this.main).show()}},{identifier:"-"},{identifier:E.About(),link:"https://www.learnj.de/doku.php?id=javaonline:ueber"},{identifier:E.Imprint(),link:"https://www.learnj.de/doku.php?id=ide:impressum"},{identifier:E.PrivacyPolicy(),link:"https://www.learnj.de/doku.php?id=ide:datenschutzerklaerung"},{identifier:"
"+E.Version()+" 2.2.1 (12.9.2026, 15:31 Uhr)
",noHoverAnimation:!0}]}}]};t!=null&&(t.is_admin||t.is_schooladmin||t.is_teacher)&&a.items[0].subMenu.items.push({identifier:E.ClassesUserTests(),action:async()=>{let l=await qe("servlet/getSingleUseSessionToken",{});l.success&&window.open("https://teacherbackend.online-ide.de?"+Ug+"="+l.singleUseSessionToken+"&lang="+s)}}),a.items[0].subMenu.items.push({identifier:E.Settings(),action:()=>{new _A(i.main).open()}},{identifier:E.SaveAndExit(),action:()=>{y("#buttonLogout").trigger("click")}}),y("#mainmenu").empty(),this.initMenu(a,0)}switchTheme(t){this.main.viewModeController.setTheme(t)}initMenu(t,e){t.level=e,e==0?t.$element=y("#mainmenu"):(t.$element=y('
'),y("body").append(t.$element)),t.$element.data("model",t);for(let n of t.items){if(n.identifier=="-")n.$element=y('
');else{let s=n.noHoverAnimation?' class="jo_menuitem_nohover"':"";if(n.$element=y(`${n.identifier}
`),n.link!=null){let a=y('');a.attr("style","color: var(--fontColorNormal) !important"),a.on("pointerdown",l=>{l.stopPropagation()}),a.on("pointerup",l=>{l.stopPropagation(),setTimeout(()=>{t.$element.hide()},500)}),a.append(n.$element),n.$element=a}n.subMenu!=null&&this.initMenu(n.subMenu,e+1),this.initMenuitemCallbacks(t,n),e==0&&n.$element.addClass("jo_mainmenuitem")}t.$element.append(n.$element),n.$element.data("model",n)}let i=this;y(document).on("pointerdown",()=>{for(let n=0;n<5;n++)i.currentSubmenu[n]!=null&&(i.currentSubmenu[n].hide(),i.currentSubmenu[n]=null);i.openSubmenusOnMousemove=!1})}initMenuitemCallbacks(t,e){let i=this;e.action!=null&&(e.$element.on("pointerdown",n=>{n.stopPropagation()}),e.$element.on("pointerup",n=>{n.stopPropagation(),e.action(e.identifier);for(let s=0;s<5;s++)i.currentSubmenu[s]!=null&&(i.currentSubmenu[s].hide(),i.currentSubmenu[s]=null);i.openSubmenusOnMousemove=!1})),e.subMenu!=null?(e.$element.on("pointerdown",n=>{i.opensubmenu(e),i.openSubmenusOnMousemove=!0,n.stopPropagation()}),e.$element.on("mousemove.mainmenu",()=>{i.openSubmenusOnMousemove?i.opensubmenu(e):i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})):e.$element.on("mousemove.mainmenu",()=>{i.currentSubmenu[t.level+1]!=null&&(i.currentSubmenu[t.level+1].hide(),i.currentSubmenu[t.level+1]=null)})}opensubmenu(t){let e=t.subMenu,i,n;e.level==1?(i=t.$element.position().left,n=30):(i=t.$element.offset().left+t.$element.width(),n=t.$element.offset().top),e.$element.css({top:""+n+"px",left:""+i+"px"}),this.currentSubmenu[e.level]!=null&&this.currentSubmenu[e.level].hide(),e.$element.show(),this.currentSubmenu[e.level]=e.$element}}class ff extends yg{constructor(e,i){super();r(this,"color","");r(this,"lastSpan","");r(this,"$lastSpan");r(this,"$lastDiv");r(this,"$outputDiv");r(this,"maxLines",2e3);r(this,"$lines",[]);r(this,"newLines",0);r(this,"printCommands",[]);r(this,"currentLinelength",0);r(this,"beginOfLineState",!0);this.$runDiv=e,this.main=i,y(()=>{this.$outputDiv=e.find(".jo_output"),this.clear();let n=this,s=0,a=!1,l=performance.now();setInterval(()=>{n.printCommands.length>0&&(n.flush(),performance.now()-l>200?n.$outputDiv[0].scrollTop=n.$outputDiv[0].scrollHeight:a=!0,l=performance.now()),s++%20==0&&a&&setTimeout(()=>{n.$outputDiv[0].scrollTop=n.$outputDiv[0].scrollHeight,a=!1},200)},50)})}isTestPrintManager(){return!1}showProgramEnd(){let e=this.$runDiv.find(".jo_run-programend");e.show(),e.addClass("jo_programendkf"),setTimeout(()=>{e.removeClass("jo_programendkf"),e.hide()},3e3)}flush(){if(this.newLines>=this.maxLines){this.$outputDiv.empty();let e=this.printCommands.length-1,i=0;for(;e>=0;){if(this.printCommands[e].newLine&&(i++,i>=this.maxLines)){this.printCommands.splice(0,e+1);break}e--}}this.newLines=0,this.$lastSpan!=null&&(this.$lastSpan.remove(),this.lastSpan.endsWith("")&&(this.lastSpan=this.lastSpan.substring(0,this.lastSpan.length-7)));for(let e of this.printCommands)if(this.beginOfLineState&&e.text.startsWith(" ")?e.text.match(/^( *)(.*)$/)[2].length>0&&(this.beginOfLineState=!1):e.text.length>0&&(this.beginOfLineState=!1),e.text=e.text.replace(//g,">"),e.color==null&&(e.color="var(--defaultOutputColor)"),(this.lastSpan==""||this.color!=e.color)&&(this.lastSpan!=""&&(this.lastSpan+=""),this.lastSpan+='',e.newLine&&e.text==""&&(this.lastSpan+="​"),this.color=e.color),this.currentLinelength<=1e4&&(this.lastSpan+=e.text,this.currentLinelength+=e.text.length),e.newLine){this.beginOfLineState=!0,this.lastSpan.endsWith("")||(this.lastSpan+=""),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan),this.lastSpan="",this.$lastSpan=null,this.$lastDiv=y("
");let i=this.main.getInterpreter().inputManager.$input;i!=null?this.$lastDiv.insertBefore(i):this.$outputDiv.append(this.$lastDiv),this.$lines.push(this.$lastDiv),this.currentLinelength=0}if(this.lastSpan!=""&&(this.lastSpan.endsWith("")||(this.lastSpan+=""),this.$lastSpan=y(this.lastSpan),this.$lastDiv.append(this.$lastSpan)),this.$lines.length>this.maxLines*1.5){let e=this,i=e.$lines.length-e.maxLines,n=e.$lines.splice(0,i);for(let s of n)s.remove()}this.printCommands=[]}clear(){this.$outputDiv&&(this.$outputDiv.empty(),this.$lastDiv=y("
"),this.$lines.push(this.$lastDiv),this.$outputDiv.append(this.$lastDiv),this.currentLinelength=0,this.color="",this.lastSpan="",this.printCommands=[])}printIntern(e,i,n){if(e==null&&(e=""),i&&(e+=` `),e!=""){if(n==null?n="var(--defaultPrintColor)":n=un.convertToInt(n),typeof n=="number"){for(n=n.toString(16);n.length<6;)n="0"+n;n="#"+n}if(e=e.toString(),e.indexOf(` `)>=0){let s=e.split(` `);for(let a=0;a
'),this.$bar=y('
'),this.$grip=y('
'),this.$display=y('
100 '+is.stepsPerSecond()+"
"),this.$grip.append(this.$display),this.$outer.append(this.$bar,this.$grip),t.append(this.$outer)}setInterpreter(t){this.interpreter=t}initGUI(){let t,e,i=this;i.overallWidth=Od(this.$outer.css("width")),i.gripWidth=Od(i.$grip.css("width")),i.xMax=i.overallWidth-i.gripWidth;let n=window.PointerEvent?"pointer":"mouse";i.$outer.on(n+"down",s=>{let a=s.pageX-i.$outer.offset().left-4;i.setSpeed(a),i.$grip.css("left",a+"px"),i.$grip.trigger(n+"down",[s.clientX])}),this.$grip.on(n+"down",(s,a)=>{a==null&&(a=s.clientX),t=a,e=i.position,y(".joe_controlPanel_top").css("z-index","1000"),i.$display.show(),y(document).on(n+"move.speedcontrol",l=>{let h=l.clientX-t;i.setSpeed(e+h)}),y(document).on(n+"up.speedcontrol",()=>{y(document).off(n+"up.speedcontrol"),y(document).off(n+"move.speedcontrol"),i.$display.hide(),y(".joe_controlPanel_top").css("z-index","0")}),s.stopPropagation()}),this.setSpeed(this.initialSpeed)}getSpeedInStepsPerSecond(){return this.interpreter.getStepsPerSecond()}setSpeedInStepsPerSecond(t){if(t=="max"&&(t=this.maxSpeed),t>this.intervalBorders[this.intervalBorders.length-1]){this.$grip.css("left",this.xMax+"px");return}t=Math.max(t,1);for(let e=0;e=i&&t<=n){let s=this.xMax/(this.intervalBorders.length-1),a=Math.round(s*e+s*(t-i)/(n-i));this.$grip.css("left",a+"px"),this.position=a;break}}this.setInterpreterSpeed(t)}setSpeed(t){t<0&&(t=0),t>this.xMax&&(t=this.xMax),this.position=t,this.$grip.css("left",t+"px");let e=this.xMax/(this.intervalBorders.length-1),i=Math.floor(t/e);i==this.intervalBorders.length-1&&i--;let n=(t-i*e)/e,s=this.intervalBorders[i],a=this.intervalBorders[i+1],l=s+(a-s)*n;l>=this.intervalBorders[this.intervalBorders.length-1]-10&&(l=1e11),this.setInterpreterSpeed(l)}setInterpreterSpeed(t){let e=!1,i=""+mp.printMillions(t);t>=this.intervalBorders[this.intervalBorders.length-1]-10-10&&(i=is.maximumSpeed(),e=!0),this.$display.html(i+(e?"":" "+is.stepsPerSecond())),this.interpreter.setStepsPerSecondPerSpeedControl(t,e),this.interpreter.hideProgrampointerPosition()}static printMillions(t){return t<1e6?""+Math.trunc(t):(t=Math.trunc(t/1e3)*1e3/1e6,t+" "+is.millions())}}class bf{constructor(t,e,i){r(this,"speedControl");r(this,"buttonData",[{actionIdentifier:"interpreter.start",title:E.ProgramRun(),iconClass:"img_start-dark jo_button"},{actionIdentifier:"interpreter.pause",title:E.ProgramPause(),iconClass:"img_pause-dark jo_button"},{actionIdentifier:"interpreter.stop",title:E.ProgramStop(),iconClass:"img_stop-dark jo_button"},{actionIdentifier:"interpreter.stepOver",title:E.ProgramStepOver(),iconClass:"img_step-over-dark jo_button"},{actionIdentifier:"interpreter.stepInto",title:E.ProgramStepInto(),iconClass:"img_step-into-dark jo_button"},{actionIdentifier:"interpreter.stepOut",title:E.ProgramStepOut(),iconClass:"img_step-out-dark jo_button"},{actionIdentifier:"interpreter.gotoCursor",title:E.ProgramGotoCursor(),iconClass:"img_goto-cursor-dark jo_button"},{actionIdentifier:"interpreter.restart",title:E.ProgramRestart(),iconClass:"img_restart-dark jo_button"},{actionIdentifier:"interpreter.startTests",title:E.ProgramExecuteAllTests(),iconClass:"img_test-start jo_button jo_start-test-button"}]);for(let n of this.buttonData){let s=y(`
`);n.$button=s,t.append(s),i.registerButton(n.actionIdentifier,s),n.actionIdentifier=="interpreter.pause"&&s.hide()}this.speedControl=new mp(t,e),this.speedControl.initGUI()}getButton(t){var e;return(e=this.buttonData.find(i=>i.actionIdentifier==t))==null?void 0:e.$button}}class GA{constructor(t,e,i){r(this,"$dialog");r(this,"$dialogMain");r(this,"studentCount",0);this.classes=t,this.workspace=e,this.main=i,this.init()}init(){this.$dialog=y("#dialog"),y("#main").css("display","none"),this.$dialog.append(y(`
${Ai.distributeWorkspaceToIndividualStudents()}
${Ai.workspace()}:
${this.workspace.name}
${Ai.filterList()}:
${Ai.selectMultiple()}
`));let t=y(".jo_ds_student_list"),e=this,i=[];for(let a of this.classes)for(let l of a.students)i.push(l),l.klass=a;i.sort((a,l)=>a.klasse_id!=l.klasse_id?a.klasse_id-l.klasse_id:a.familienname!=l.familienname?a.familienname.localeCompare(l.familienname):a.rufname.localeCompare(l.rufname));let n=0,s=[];for(let a of i){let l=y('
'),h=y(`
${a.klass.name}
`),u=y(`
${a.rufname} ${a.familienname}
`);l.append(h,u),t.append(l),s.push(l),l.on("mousedown",m=>{let g=s.indexOf(l);if(m.ctrlKey||m.metaKey)l.toggleClass("jo_active"),n=g;else if(s.forEach(f=>f.removeClass("jo_active")),l.addClass("jo_active"),m.shiftKey){let f=Math.min(n,g),b=Math.max(n,g);for(let A=f;A<=b;A++)s[A].is(":visible")&&s[A].addClass("jo_active")}else n=g;e.studentCount=s.reduce((f,b)=>f+(b.hasClass("jo_active")?1:0),0),console.log(e.studentCount),y(".jo_ds_selected_message").text(`${e.studentCount} ${Ai.studentsSelected()}`)}),l.data("student",a),l.data("klass",a.klass)}y(".jo_ds_filterdiv>input").on("input",()=>{let a=y(".jo_ds_filterdiv>input").val();if(a==null||a=="")y(".jo_ds_student_line").show();else{let l=a.toLocaleLowerCase();y(".jo_ds_student_line").each((h,u)=>{let m=y(u),g=m.data("klass"),f=m.data("student");(g.name+" "+f.rufname+" "+f.familienname).toLocaleLowerCase().indexOf(l)>=0?m.show():m.hide()})}}),this.$dialogMain=this.$dialog.find(".dialog-main"),this.$dialog.css("visibility","visible"),y("#jo_ds_cancel_button").on("click",()=>{window.history.back()}),y("#jo_ds_distribute_button").on("click",()=>{e.distributeWorkspace()}),this.main.windowStateManager.registerOneTimeBackButtonListener(()=>{e.close()}),y(".jo_ds_filterdiv>input")[0].focus()}distributeWorkspace(){let t=[];y(".jo_ds_student_line").each((e,i)=>{let n=y(i);if(n.hasClass("jo_active")){let s=n.data("student");t.push(s.id)}}),window.history.back(),this.main.networkManager.sendDistributeWorkspace(this.workspace,null,t,e=>{if(e==null){let n=this.main.networkManager.updateFrequencyInSeconds;alert(Ai.workspaceDistributed(this.workspace.name,t.length+"",n+""))}else alert(e)})}close(){this.$dialog.css("visibility","hidden"),this.$dialog.empty(),y("#main").css("display","")}}class HA{constructor(t,e){r(this,"$langueSpecificDiv");r(this,"dialog");r(this,"resolveWenClosing");this.workspace=t,this.main=e}open(){var s;if(!((s=this.main.getCurrentProgrammingLanguage())==null?void 0:s.getLibraryManager())){console.error("Current programming language does not provide a library manager.");return}let e=new Go;this.dialog=e,e.initAndOpen(),e.heading(Fs.workspaceSettings(this.workspace.name));let i=y("
Sprache:
"),n=y('');return Ns(n,us.getInstance().getLanguagesSelection(this.main).map(a=>({value:a.name,caption:a.getTranslatedName(),object:a})),this.workspace.settings.language),i.append(n),e.addDiv(i),this.$langueSpecificDiv=y("
"),e.addDiv(this.$langueSpecificDiv),n.on("change",()=>{let a=as(n);this.workspace.settings.language=a.name,this.$langueSpecificDiv.empty(),this.setupLanguageSpecificDiv()}),this.setupLanguageSpecificDiv(),this.dialog.buttons([{caption:Fs.cancel(),color:"#a00000",callback:()=>{this.close()}},{caption:Fs.OK(),color:"green",callback:()=>{let a=as(n),l=a!=this.main.getCurrentProgrammingLanguage(),h=a.retrieveWorkspaceSettings(this.main,this.$langueSpecificDiv[0],this.workspace);l&&(this.workspace.settings.language=a.name,this.main.switchProgrammingLanguage(a.name),this.main.isEmbedded()||this.main.projectExplorer.setWorkspaceActive(this.workspace)),(l||h)&&(this.workspace.saved=!1,this.main.networkManager.sendUpdatesAsync(!0)),this.close()}}]),new Promise(a=>{this.resolveWenClosing=a})}close(){this.dialog.close(),this.resolveWenClosing&&this.resolveWenClosing()}setupLanguageSpecificDiv(){this.$langueSpecificDiv.empty();let t=this.workspace.settings.language;us.getInstance().getLanguageByName(t).setupWorkspaceSettings(this.dialog,this.main,this.$langueSpecificDiv[0],this.workspace)}}class KA{constructor(t,e){r(this,"accordion");r(this,"fileTreeview");r(this,"workspaceTreeview");r(this,"synchronizedButton");r(this,"lastOpenFile",null);r(this,"dontScrollIntoViewOnNextSetActive",!1);this.main=t,this.$projectexplorerDiv=e}initGUI(){this.accordion=new Um(this.$projectexplorerDiv[0]),this.initFilelistPanel(),this.initWorkspacelistPanel(),this.main.user.is_teacher||this.accordion.onResize(!0),this.workspaceTreeview.addDragDropSource({treeview:this.workspaceTreeview,dropInsertKind:"asElement",defaultDragKind:"move"}),this.workspaceTreeview.addDragDropSource({treeview:this.fileTreeview,dropInsertKind:"intoElement",defaultDragKind:"copy",dragKindWithShift:"move"}),this.fileTreeview.addDragDropSource({treeview:this.fileTreeview,dropInsertKind:"asElement",defaultDragKind:"move"})}initFilelistPanel(){this.fileTreeview=new li(this.accordion,{captionLine:{enabled:!0},withSelection:!0,selectMultiple:!0,selectWholeFolders:!0,withFolders:!0,isDragAndDropSource:!0,buttonAddElements:!0,buttonAddFolders:!0,withDeleteButtons:!0,confirmDelete:!0,defaultIconClass:"img_file-dark-java",buttonAddElementsCaption:X.newFile(),comparator:(t,e)=>t.name>e.name?1:t.namet.id,parentKeyExtractor:t=>t.parent_folder_id,orderExtractor:t=>(t==null?void 0:t.sorting_order)||0,orderSetter(t,e){t.sorting_order=e},orderBy:this.main.settings.getValue("explorer.fileOrder")}),this.fileTreeview.newNodeCallback=async(t,e)=>{if(this.main.currentWorkspace==null)return this.fileTreeview.getCurrentlySelectedNodes().length>0&&this.fileTreeview.getCurrentlySelectedNodes()[0].isFolder?alert(X.firstChooseWorkspaceBecauseFolderIsSelected()):alert(X.firstChooseWorkspace()),null;let i=new Je(this.main,t);i.isFolder=e.isFolder;let n=e.getParent();return n.isRootNode()||(i.parent_folder_id=n.externalObject.id),e.isFolder||(e.iconClass=Gi.filenameToFileType(t,this.main.getCurrentProgrammingLanguage()).iconclass),this.main.getCurrentWorkspace().addFile(i),i.isFolder||this.setFileActive(i),this.main.user.is_testuser||await this.main.networkManager.sendCreateFile(i,this.main.currentWorkspace,this.main.workspacesOwnerId)?i:(this.fileTreeview.removeNodeAndItsFolderContents(e),this.setFileActive(null),null)},this.fileTreeview.renameCallback=async(t,e,i)=>{if(e.length>80&&(alert(E.FilenameHasBeenTruncated(80)),e=e.substring(0,80)),t.name=e,t.setSaved(!1),!t.isFolder){let s=t.isFolder?void 0:Gi.filenameToFileType(e,this.main.getCurrentProgrammingLanguage());i.iconClass=s.iconclass,Q.setModelLanguage(t.getMonacoModel(),s.language)}if(this.main.user.is_testuser)return{correctedName:e,success:!0};let n=await this.main.networkManager.sendUpdatesAsync(!0);return{correctedName:e,success:n}},this.fileTreeview.deleteCallback=async(t,e)=>{var s;let i=[t];if(t.isFolder&&(i=i.concat(t.getFolderContentsRecursively(this.fileTreeview.getAllExternalObjects())),i.length>1&&!confirm(X.confirmDeleteFileFolderRecursively(i.length))))return!1;let n=this.main.user.is_testuser||await this.main.networkManager.sendDeleteWorkspaceOrFileAsync("file",i.map(a=>a.id));if(n){for(let a of i)this.main.getCurrentWorkspace().removeFile(a);if((s=this.main.getCompiler())==null||s.triggerCompile(),e.hasFocus){let a=this.main.getCurrentWorkspace().getFiles();a.length==0?(this.fileTreeview.setCaption(X.noFile()),this.setFileActive(null)):this.setFileActive(a[0])}}return n},this.fileTreeview.contextMenuProvider=(t,e)=>{let i=[];return i.push({caption:X.duplicate(),callback:async(n,s)=>{let a=n,l=new Je(this.main,a.name+" - "+X.copy(),a.getText());l.remote_version=a.remote_version;let h=this.main.getCurrentWorkspace();if(h.addFile(l),await this.main.networkManager.sendCreateFile(l,h,this.main.workspacesOwnerId)){let m=this.fileTreeview.addNode(!1,l.name,Gi.filenameToFileType(l.name,this.main.getCurrentProgrammingLanguage()).iconclass,l,s.parentKey);this.setFileActive(l),m.renameNode()}}},{caption:X.exportAsFile(),callback:async(n,s)=>{Sr(n.getText(),n.name)}}),this.main.user.is_teacher||this.main.user.is_admin||this.main.user.is_schooladmin||(t.submitted_date==null?i.push({caption:X.markAsAssignment(),callback:(n,s)=>{t.submitted_date=Jp(new Date),t.setSaved(!1),this.main.networkManager.sendUpdatesAsync(!0),this.renderHomeworkButton(t)}}):i.push({caption:X.removeAssignmentLabel(),callback:(n,s)=>{t.submitted_date=null,t.setSaved(!1),this.main.networkManager.sendUpdatesAsync(!0),this.renderHomeworkButton(t)}})),i},this.fileTreeview.nodeClickedCallback=t=>{t.isFolder||(this.setFileActive(t),this.main.currentWorkspace.settings.language==Re.ByAssembly.name&&this.main.getCompiler().forceRecompilation())},this.fileTreeview.dropEventCallback=async(t,e,i,n)=>{if(t!=this.fileTreeview||!e.isFolder)return;let s=t.getCurrentlySelectedNodes();switch(n){case"move":let a=e.ownKey;s=this.fileTreeview.reduceNodesToMove(s);for(let l of s){let h=l.externalObject;h&&(h.parent_folder_id=a),h.setSaved(!1)}await this.main.networkManager.sendUpdatesAsync(!0)&&(e.insertNodes(i,s),e.reorder());break}},this.fileTreeview.orderChangedCallback=async t=>(this.main.networkManager.sendUpdateFileOrder(t.map(e=>e.externalObject)),!0),this.synchronizedButton=this.fileTreeview.captionLineAddIconButton("img_open-change-dark","right",()=>{this.main.getCurrentWorkspace().synchronizeWithRepository()},X.synchronizeWorkspaceWithRepository()),this.synchronizedButton.setVisible(!1)}renderHomeworkButton(t){let e=this.fileTreeview.findNodeByElement(t);if(!e)return;let i=e.getIconButtonByTag("Homework");i||(i=e.addIconButton("img_homework",void 0,"",!0),i.tag="Homework");let n=null,s="";t.submitted_date!=null&&(n="img_homework",s=X.labeledAsAssignment()+": "+t.submitted_date,t.text_before_revision&&(n="img_homework-corrected",s=X.assignmentIsCorrected())),n?(i.iconClass=n,i.title=s,i.setVisible(!0)):i.setVisible(!1)}initWorkspacelistPanel(){let t=()=>{let e=us.getInstance().getLanguagesSelection(this.main);return e.length>1?e.map(i=>({object:i,caption:i.getTranslatedName(),iconClass:i.getWorkspaceCssClass(!1)})):[]};this.workspaceTreeview=new li(this.accordion,{captionLine:{enabled:!0,text:X.WORKSPACES()},withSelection:!0,withFolders:!0,selectMultiple:!0,isDragAndDropSource:!0,withDeleteButtons:!0,confirmDelete:!0,buttonAddElements:!0,buttonAddElementsCaption:X.newWorkspace()+"...",addElementsOptions:t,buttonAddFolders:!0,minHeight:150,flexWeight:"1",defaultIconClass:"img_workspace-dark",comparator:(e,i)=>e.name>i.name?1:e.namee.id,parentKeyExtractor:e=>e.parent_folder_id,readOnlyExtractor:e=>e.readonly||e.pruefung_id!=null,orderBy:this.main.settings.getValue("explorer.workspaceOrder"),orderExtractor:e=>e.sorting_order,orderSetter:(e,i)=>e.sorting_order=i}),this.workspaceTreeview.newNodeCallback=async(e,i,n)=>{var h,u;let s=this.main.user.id;this.main.workspacesOwnerId!=null&&(s=this.main.workspacesOwnerId);let a=new Oi(e,this.main,s);if(a.isFolder=i.isFolder,a.parent_folder_id=((h=i.getParent().externalObject)==null?void 0:h.id)??null,n){if(a.settings.language=n.name,n.name==Re.ByAssembly.name){let m=this.main.getSettings().getValue("programmingLanguages.ByAssembly.defaultArchitecture");a.settings.assemblyArchitecture=m??Zi.getArchitectures()[0].identifier}}else a.settings.language="Java";if(this.main.workspaceList.push(a),i.iconClass=((u=Re[a.settings.language])==null?void 0:u.workspaceCssClass(!1))??"img_workspace-dark",this.main.user.is_testuser||await this.main.networkManager.sendCreateWorkspace(a,this.main.workspacesOwnerId))return i.isFolder||(this.fileTreeview.addElementsButton.setVisible(!0),this.fileTreeview.addFolderButton.setVisible(!0),this.setWorkspaceActive(a),a.renderSynchronizeButton(i)),a},this.workspaceTreeview.renameCallback=async(e,i,n)=>{if(i=i.substring(0,80),e.name=i,e.saved=!1,this.main.user.is_testuser)return{correctedName:i,success:!0};let s=await this.main.networkManager.sendUpdatesAsync();return{correctedName:i,success:s}},this.workspaceTreeview.deleteCallback=async e=>{let i=[e];if(e.isFolder&&(i=i.concat(e.getFolderContentsRecursively(this.workspaceTreeview.getAllExternalObjects())),i.length>1&&!confirm(X.confirmDeleteWorkspaceFolderRecursively(i.length))))return!1;let n=this.main.user.is_testuser||await this.main.networkManager.sendDeleteWorkspaceOrFileAsync("workspace",i.map(s=>s.id));if(n){for(let s of i)this.main.removeWorkspace(s);this.main.workspaceList.indexOf(this.main.currentWorkspace)<0&&this.setWorkspaceActive(null)}return n},this.workspaceTreeview.nodeClickedCallback=async e=>{e!=null&&!e.isFolder&&(this.setWorkspaceActive(e,!1,!1),this.fileTreeview.addElementsButton.setVisible(!0),this.fileTreeview.addFolderButton.setVisible(!0))},this.workspaceTreeview.dropEventCallback=(e,i,n,s)=>{e==this.workspaceTreeview?this.moveOrCopyWorkspaces(this.workspaceTreeview.getOrderedListOfCurrentlySelectedNodes(),i,n,s):e==this.fileTreeview&&this.moveOrCopyFilesToOtherWorkspaces(this.fileTreeview.getOrderedListOfCurrentlySelectedNodes(),i,s)},this.workspaceTreeview.contextMenuProvider=(e,i)=>{let n=[];return e.readonly||(n.push({caption:X.newWorkspace()+"...",callback:()=>{for(;!i.isFolder&&!i.isRootNode&&i!=null;)i=i.getParent();this.workspaceTreeview.selectNodeAndSetFocus(i,!1),this.workspaceTreeview.addNewNode(!1)}}),i.isFolder?n.push({caption:X.exportFolder(),callback:async()=>{let s=e.name.replace(/\//g,"_");Sr(await cn.exportFolder(e,this.workspaceTreeview),s+".json")}}):(n.push({caption:X.duplicate(),callback:async()=>{var a;await this.main.networkManager.sendUpdatesAsync();let s=await this.main.networkManager.sendDuplicateWorkspace(e);if(s.message==null&&s.workspace!=null){let l=Oi.restoreFromData(s.workspace,this.main);this.main.rightDiv.classDiagram.duplicateSerializedClassDiagram(e.id,l.id),this.main.workspaceList.push(l),this.workspaceTreeview.addNode(!1,l.name,i.iconClass,l,((a=i.getParent())==null?void 0:a.ownKey)??null)}else s.message!=null&&alert(s.message)}},{caption:X.exportToFile(),callback:async()=>{let s=e.name.replace(/\//g,"_");Sr(await cn.exportWorkspace(e),s+".json")}}),this.main.user.is_teacher&&this.main.teacherExplorer.classPanel.size(!0)>0&&(n.push({caption:"-",callback:()=>{}}),n.push({caption:X.distributeToClass()+"...",callback:()=>{},subMenu:this.main.teacherExplorer.classPanel.nodes.filter(s=>!s.isRootNode()).map(s=>{let a=s.externalObject;return{caption:a.name,callback:()=>{this.main.networkManager.sendDistributeWorkspace(e,a,null,l=>{if(l==null){let h=this.main.networkManager;h.updateFrequencyInSeconds*h.forcedUpdateEvery,alert(X.workspaceDistributed(e.name,a.name))}else alert(l)})}}})},{caption:X.distributeToStudents(),callback:()=>{let s=this.main.teacherExplorer.classPanel.getAllExternalObjects();new GA(s,e,this.main)}})),this.main.repositoryOn&&this.main.workspacesOwnerId==this.main.user.id&&(n.push({caption:"-",callback:()=>{}}),e.repository_id==null?n.push({caption:X.createRepository(),callback:()=>{this.main.repositoryCreateManager.show(e)}}):n.push({caption:X.synchronizeWorkspaceWithRepository(),callback:()=>{e.synchronizeWithRepository()}},{caption:X.exportRepository(),callback:async()=>{let s="Repository "+e.name.replace(/\//g,"_");Sr(await zA.exportRepository(e.repository_id,e.id),s+".json")}},{caption:X.detachFromRepository(),color:"#ff8080",callback:async()=>{e.repository_id=null,e.saved=!1,await this.main.networkManager.sendUpdatesAsync(!0),i.iconClass="img_workspace-java-dark",e.renderSynchronizeButton(i)}})),n.push({caption:"-",callback:()=>{}}),n.push({caption:X.settings()+"...",callback:async(s,a)=>{await new HA(e,this.main).open(),a.iconClass=this.getIconClassForWorkspace(e)}}))),n},this.workspaceTreeview.orderChangedCallback=async e=>(this.main.networkManager.sendUpdateWorkspaceOrder(e.map(i=>i.externalObject)),!0)}getIconClassForWorkspace(t){return(Re[t.settings.language]??Re.Java).workspaceCssClass(t.repository_id!=null)}async moveOrCopyFilesToOtherWorkspaces(t,e,i){if(e.isFolder){alert(E.cantMoveFilesToWorkspaceFolder());return}let n=e.externalObject,s=this.main.getCurrentWorkspace();if(s!=n)switch(i){case"move":let a=t.map(h=>h.externalObject.id);for(let h of t){let u=h.externalObject;a.indexOf(u.parent_folder_id)<0&&(u.parent_folder_id=null),u.sorting_order=1e4,(this.main.user.is_testuser||await this.main.networkManager.moveFile(u.id,n.id))&&(s.removeFile(u),n.addFile(u),this.fileTreeview.removeNodeAndItsFolderContents(h))}break;case"copy":let l=new Map;for(let h of t){let u=h.externalObject,m=u.id,g=l.get(u.parent_folder_id)||null,f=new Je(this.main,u.name,u.getText());f.parent_folder_id=g,f.isFolder=u.isFolder,f.sorting_order=1e4,(this.main.user.is_testuser||await this.main.networkManager.sendCreateFile(f,n,n.owner_id))&&n.addFile(f),l.set(m,f.id)}break}}async moveOrCopyWorkspaces(t,e,i,n){switch(n){case"move":let s=e.ownKey;t=this.workspaceTreeview.reduceNodesToMove(t);for(let a of t){let l=a.externalObject;l&&(l.parent_folder_id=s),l.saved=!1}(this.main.user.is_testuser||await this.main.networkManager.sendUpdatesAsync(!0))&&(e.insertNodes(i,t),e.reorder());break}}renderFiles(t){let e=t==null?X.noWorkspace():t.name;if(this.fileTreeview.setCaption(e),this.fileTreeview.clear(),t!=null){let i=t.getFiles().slice();for(let n of i)this.fileTreeview.addNode(n.isFolder,n.name,n.isFolder?void 0:Gi.filenameToFileType(n.name,this.main.getCurrentProgrammingLanguage()).iconclass,n),this.renderHomeworkButton(n);this.fileTreeview.sort()}}renderWorkspaces(t){this.fileTreeview.clear(),this.workspaceTreeview.clear();for(let e of t){let i=this.getIconClassForWorkspace(e);e.isFolder&&(i=void 0);let n=this.workspaceTreeview.addNode(e.isFolder,e.name,i,e);e.name=="_Prüfungen"&&e.readonly&&(n.renderCaptionAsHtml=!0,n.caption='Prüfungen',n.readOnly=!0),e.pruefung_id&&(n.readOnly=!0),e.renderSynchronizeButton(n)}this.workspaceTreeview.sort(),this.workspaceTreeview.collapseAllButRootnode()}renderErrorCount(t,e){var i;if(e!=null)for(let n of t.getFiles()){let s=e.get(n),a=s==null||s==0?"":"("+s+")";(i=this.fileTreeview.findNodeByElement(n))==null||i.setRightPartOfCaptionErrors(a)}}showRepositoryButtonIfNeeded(t){t.repository_id!=null&&t.owner_id==this.main.user.id?(this.synchronizedButton.setVisible(!0),this.main.guiState.helperHistory.repositoryButtonDone||Tr.showHelper("repositoryButton",this.main,y(this.synchronizedButton.parent))):this.synchronizedButton.setVisible(!1)}setWorkspaceActive(t,e=!1,i=!0){var a,l,h;if(this.main.editor.editor.setModel(null),(a=this.main.getCurrentWorkspace())==null||a.disposeMonacoModels(),this.main.interpreter.scheduler.state==ie.running&&this.main.interpreter.stop(!1),this.main.currentWorkspace=t,t==null){this.fileTreeview.addElementsButton.setVisible(!1),this.fileTreeview.addFolderButton.setVisible(!1),this.main.getMainEditor().setModel(null),this.fileTreeview.setCaption(X.selectWorkspace()),this.synchronizedButton.setVisible(!1),this.setFileActive(null),this.renderFiles(t);return}this.main.switchProgrammingLanguage(t.settings.language),this.renderFiles(t),i&&this.workspaceTreeview.selectElement(t,!1),t.createMonacoModels(),t.setLibraries(this.main.getCompiler());let n=t.getFiles();t.currentlyOpenFile!=null?this.setFileActive(t.currentlyOpenFile):n.length>0?this.setFileActive(n[0]):this.setFileActive(null),n.length==0&&!this.main.guiState.helperHistory.newFileHelperDone&&Tr.showHelper("newFileHelper",this.main,y(this.fileTreeview.addElementsButton.parent)),this.showRepositoryButtonIfNeeded(t),new ps().initializeSpritesheetForWorkspace(t,this.main).then(()=>{var u;for(let m of n)this.main.getCompiler().setFileDirty(m);(u=this.main.bottomDiv.gradingManager)==null||u.setValues(t.pruefung_id),this.main.getCompiler().setFiles(n),this.main.getCompiler().triggerCompile()}),this.main.getSettings().getValue("output.clearOutputAfterWorkspaceChange")=="yes"&&((h=(l=this.main.getInterpreter())==null?void 0:l.printManager)==null||h.clear())}setFileActive(t){var i,n;if(t!=null&&t.isFolder)return;this.main.bottomDiv.homeworkManager.hideRevision();let e=this.main.getMainEditor();(i=this.lastOpenFile)==null||i.saveViewState(e),t==null?(e.setModel(Q.createModel(X.noFile(),"text")),e.updateOptions({readOnly:!0}),this.fileTreeview.setCaption(X.noFile())):(e.updateOptions({readOnly:((n=this.main.getCurrentWorkspace())==null?void 0:n.readonly)&&!this.main.user.is_teacher}),this.dontScrollIntoViewOnNextSetActive=!0,e.setModel(t.getMonacoModel()),[ie.running,ie.paused].indexOf(this.main.getInterpreter().scheduler.state)<0&&setTimeout(()=>{e.focus()},100),this.fileTreeview.selectElement(t,!1),t.restoreViewState(e),this.lastOpenFile=t,t.text_before_revision!=null?this.main.bottomDiv.homeworkManager.showHomeWorkRevisionButton():this.main.bottomDiv.homeworkManager.hideHomeworkRevisionButton(),this.main.getInterpreter().onFileSelected())}setActiveAfterExternalModelSet(t){var e;this.dontScrollIntoViewOnNextSetActive?this.dontScrollIntoViewOnNextSetActive=!1:this.fileTreeview.selectElement(t,!1),this.lastOpenFile=t,this.main.editor.dontPushNextCursorMove++,t.restoreViewState(this.main.getMainEditor()),this.main.editor.dontPushNextCursorMove--,this.setCurrentlyEditedFile(t),(e=this.main.getDisassembler())==null||e.disassemble(),this.main.getInterpreter().showProgramPointer(),setTimeout(()=>{this.main.getMainEditor().getOptions().get(Q.EditorOption.readOnly)||this.main.getMainEditor().focus()},300)}setCurrentlyEditedFile(t){if(t==null)return;let e=this.main.currentWorkspace;e.currentlyOpenFile!=t&&(e.currentlyOpenFile=t,e.saved=!1)}setExplorerColor(t,e){let i;t==null?(t="transparent",i=X.myWorkspaces()):i=e,this.fileTreeview.getNodeDiv().style.backgroundColor=t,this.workspaceTreeview.getNodeDiv().style.backgroundColor=t,this.workspaceTreeview.setCaption(i)}getNewFile(t){return Je.restoreFromData(this.main,t)}async fetchAndRenderOwnWorkspaces(){await this.fetchAndRenderWorkspaces(this.main.user)}async fetchAndRenderWorkspaces(t,e,i=null){await this.main.networkManager.sendUpdatesAsync();let n={ws_userId:t.id,userId:this.main.user.id},s=await qe("/servlet/getWorkspaces",n);if(s.success==!0){this.main.workspacesOwnerId==this.main.user.id&&e!=null&&(e.ownWorkspaces=this.main.workspaceList.slice(),e.currentOwnWorkspace=this.main.currentWorkspace);let a=(e==null?void 0:e.classPanelMode)=="tests";t.id!=this.main.user.id&&a&&(s.workspaces.workspaces=s.workspaces.workspaces.filter(l=>l.pruefung_id==i.id)),this.main.workspacesOwnerId=t.id,this.main.restoreWorkspaces(s.workspaces,!1),t.id!=this.main.user.id&&(this.main.projectExplorer.setExplorerColor("rgba(255, 0, 0, 0.2",t.familienname+", "+t.rufname),this.main.teacherExplorer.homeButton.setVisible(!0),Tr.showHelper("homeButtonHelperNew",this.main,this.main.teacherExplorer.homeButton.divElement),this.main.networkManager.updateFrequencyInSeconds=this.main.networkManager.teacherUpdateFrequencyInSeconds,this.main.networkManager.secondsTillNextUpdate=this.main.networkManager.teacherUpdateFrequencyInSeconds,a||(this.main.bottomDiv.homeworkManager.attachToWorkspaces(this.main.workspaceList),this.main.bottomDiv.showHomeworkTab())),i!=null?(this.workspaceTreeview.addElementsButton.setVisible(!1),this.workspaceTreeview.addFolderButton.setVisible(!1)):(this.workspaceTreeview.addElementsButton.setVisible(!0),this.workspaceTreeview.addFolderButton.setVisible(!0))}}markFilesAsStartable(t,e){for(let i of this.fileTreeview.nodes.filter(n=>!n.isRootNode())){let n=i.getIconButtonByTag("Start"),s=i.externalObject;n||(n=i.addIconButton("img_start-dark",()=>{this.main.getInterpreter().start(s)},E.startMainProgram(),!0)),n.tag="Start",n.setVisible(t.indexOf(s)>=0),n.setActive(e)}}show(){this.$projectexplorerDiv.css("display","")}hide(){this.$projectexplorerDiv.css("display","none")}}const Cl=class Cl{constructor(t,e){r(this,"position",0);r(this,"yMax");r(this,"$grip");r(this,"$zoomcontrolDisplay");r(this,"gripHeight",10);r(this,"overallHeight",150);r(this,"zoomMin",.2);r(this,"zoomMax",2);this.callback=e;let i=y('
');t.append(i);let n=y('
');i.append(n),this.$grip=y('
'),i.append(this.$grip),this.$zoomcontrolDisplay=y('
'),this.$grip.append(this.$zoomcontrolDisplay);let s,a,l=this;l.overallHeight=Od(i.css("height")),l.gripHeight=Od(l.$grip.css("height")),l.yMax=l.overallHeight-l.gripHeight;let h=window.PointerEvent?"pointer":"mouse";n.on(h+"down",m=>{let g=m.pageY-i.offset().top-4;l.setZoom(g),l.$grip.css("top",g+"px"),l.$grip.trigger(h+"down",[m.clientY])}),this.$grip.on(h+"down",(m,g)=>{g==null&&(g=m.clientY),s=g,a=l.position,this.$zoomcontrolDisplay.show(),y(document).on(h+"move.zoomcontrol",f=>{let b=f.clientY-s;l.setZoom(a+b)}),y(document).on(h+"up.zoomcontrol",()=>{y(document).off(h+"up.zoomcontrol"),y(document).off(h+"move.zoomcontrol"),this.$zoomcontrolDisplay.hide()}),m.stopPropagation()}),t.on(h+"enter",m=>{Cl.preventFading||i.fadeIn()}),t.on(h+"leave",m=>{Cl.preventFading||i.fadeOut()});let u=(1-this.zoomMin)/(this.zoomMax-this.zoomMin);this.position=u*(this.overallHeight-this.gripHeight),this.$grip.css("top",this.position+"px")}setZoom(t){t<0&&(t=0),t>this.yMax&&(t=this.yMax),this.position=t,this.$grip.css("top",t+"px");let e=t/(this.overallHeight-this.gripHeight);e=this.zoomMin+e*(this.zoomMax-this.zoomMin);let i=Math.round(e*100)+" %";this.$zoomcontrolDisplay.html(i),this.callback!=null&&this.callback(e)}};r(Cl,"preventFading",!1);let Aa=Cl;var tt=.2;class UA{constructor(t,e){r(this,"zoomControl");r(this,"zoomfactor",1);r(this,"$canvas");r(this,"svgElement");r(this,"$menuButton");r(this,"defs");r(this,"style");r(this,"inlineStyles",{});r(this,"marginCm",1);r(this,"minDistance",2);r(this,"minWidthHeightCm",10);r(this,"widthCm",this.minWidthHeightCm);r(this,"heightCm",this.minWidthHeightCm);this.main=e,this.$menuButton=y('
'),t.append(this.$menuButton);let i=y("
");t.append(i),i.addClass("jo_scrollable"),i.css({overflow:"auto",position:"relative",width:"100%",height:"100%"}),this.$canvas=y('
'),i.append(this.$canvas),this.zoomControl=new Aa(t,h=>{this.$canvas.css({transform:"scale("+h+")"}),this.zoomfactor=h});let n="http://www.w3.org/2000/svg";this.svgElement=document.createElementNS(n,"svg"),y(this.svgElement).addClass("jo_diagram-svg svg_all_pointer_events"),this.$canvas[0].appendChild(this.svgElement),this.adjustCenterRectangle();let s=y(this.svgElement),a,l;s.on("mousedown",h=>{a=h.screenX,l=h.screenY,y(document).on("mousemove.diagram",u=>{let m=u.screenX-a,g=u.screenY-l;a=u.screenX,l=u.screenY,i.scrollLeft(i.scrollLeft()-m),i.scrollTop(i.scrollTop()-g)}),y(document).on("mouseup.diagram",()=>{y(document).off("mousemove.diagram"),y(document).off("mouseup.diagram")})})}adjustCenterRectangle(){}setSize(t,e){tu.leftCm&&(e=u.leftCm),nu.topCm&&(i=u.topCm),sthis.widthCm||n-e<=this.widthCm&&this.widthCm>this.minWidthHeightCm){let u=0;if(l=Math.max(this.minWidthHeightCm,n-e),e<0&&(u=-e),e>0&&n>l&&(u=l-n),a=u!=0,a)for(let m of t)m.move(u,0,!0,!0)}if(i<0||s>this.heightCm||s-i<=this.heightCm&&this.heightCm>this.minWidthHeightCm){let u=0;if(h=Math.max(this.minWidthHeightCm,s-i),i<0&&(u=-i),i>0&&s>h&&(u=h-s),a=u!=0,a)for(let m of t)m.move(0,u,!0,!0)}return this.setSize(l,h),{isAdjusted:a}}insertStyleElement(t=null){let e="http://www.w3.org/2000/svg";this.style==null&&(this.defs=document.createElementNS(e,"defs"),this.style=document.createElementNS(e,"style"),this.defs.appendChild(this.style),this.svgElement.appendChild(this.defs)),t!=null&&(this.inlineStyles=t,this.refreshInlineStyles())}createElement(t,e=null,i){let s=y(document.createElementNS("http://www.w3.org/2000/svg",t));return i!=null&&s.attr(i),e!=null&&e.appendChild(s[0]),s}refreshInlineStyles(){let t="";for(let e in this.inlineStyles){let i=this.inlineStyles[e];if(i!=null){t+=e+`{ `;for(let n in i)t+=" "+n+":"+i[n]+`; `;t+=`} `}else t+=e+` `}this.style.textContent=t}findFreeSpace(t,e,i,n){let s=0,a=!1,l=0,h=0;for(;!a;){let u=s,m=0;for(m=0;m<=s;m++)if(l=this.marginCm+m*tt,h=this.marginCm+u*tt,this.isFree(t,e,i,l,h,n)){a=!0;break}if(a)break;for(m--,u=0;u<=s-1;u++)if(l=this.marginCm+m*tt,h=this.marginCm+u*tt,this.isFree(t,e,i,l,h,n)){a=!0;break}s+=2}return{x:l,y:h}}isFree(t,e,i,n,s,a){for(let l of t){let h=Math.abs(l.leftCm+l.widthCm/2-n-e/2)<=(l.widthCm+e)/2+a,u=Math.abs(l.topCm+l.heightCm/2-s-i/2)<=(l.heightCm+i)/2+a;if(h&&u)return!1}return!0}}var Ed=(c=>(c[c.left=0]="left",c[c.center=1]="center",c[c.right=2]="right",c))(Ed||{});const xl=class xl{constructor(t){r(this,"$element");r(this,"leftCm",0);r(this,"topCm",0);r(this,"widthCm");r(this,"heightCm");r(this,"lines",[]);r(this,"backgroundColor","#ffffff");this.parent=t}getRoutingRectangle(){return{left:Math.round(this.leftCm/tt),top:Math.round(this.topCm/tt),width:Math.round(this.widthCm/tt),height:Math.round(this.heightCm/tt)}}show(){this.$element!=null&&this.$element.show()}hide(){this.$element!=null&&this.$element.hide()}detach(){this.$element!=null&&this.$element.detach()}remove(){this.$element!=null&&(this.$element.remove(),this.$element=null)}appendTo(t){t.append(this.$element)}clear(){this.$element!=null&&(this.$element.empty(),this.lines=[])}move(t,e,i,n=!1){this.leftCm+=t,this.topCm+=e;let s=this.leftCm,a=this.topCm;i&&(s=Math.round(s/tt)*tt,a=Math.round(a/tt)*tt),n&&(this.leftCm=s,this.topCm=a),y(this.$element).css("transform","translate("+s+"cm,"+a+"cm)")}moveTo(t,e,i){this.move(t-this.leftCm,e-this.topCm,i)}createElement(t,e=null,i){let s=y(document.createElementNS("http://www.w3.org/2000/svg",t));return i!=null&&s.attr(i),e!=null&&e.appendChild(s[0]),s}createTextElement(t,e=null,i){let n=this.createElement("text",e,{font:"16px Roboto","font-family":"sans-serif",fill:"#000","alignment-baseline":"hanging","dominant-baseline":"hanging"});return i!=null&&n.attr(i),n.text(t),n}getTextMetrics(t){let e=t[0].getBBox();return{height:e.height*xl.cmPerPx,width:e.width*xl.cmPerPx}}addTextLine(t){this.lines.push(t),t.type=="text"&&(t.alignment==null&&(t.alignment=0),t.bold==null&&(t.bold=!1),t.italics==null&&(t.italics=!1))}render(){let t=this.$element;t==null&&(t=this.createElement("g",this.parent),t.addClass("svg_draggable"),t.addClass("svg_all_pointer_events"),this.$element=t,y(this.$element).css("transform","translate("+this.leftCm+"cm,"+this.topCm+"cm)"));let e=this.createElement("rect",t[0]),i=.1,n=0,s=!0;for(let m of this.lines)if(m.type=="text"){s&&(i+=.1),s=!1,m.yCm=i,m.$element=this.createTextElement(m.text,t[0],{"font-weight":m.bold?"bold":"normal","font-size":"12pt","font-style":m.italics?"italic":"normal","text-anchor":m.alignment==0?"start":m.alignment==1?"middle":"end",cursor:m.onClick==null?"":"pointer"}),m.$element.css("transform","translate(0cm,0cm)");let g=this.getTextMetrics(m.$element);m.textHeightCm=g.height,m.textWidthCm=g.width,n=Math.max(n,m.textWidthCm),i+=m.textHeightCm,m.tooltip!=null&&this.createElement("title",m.$element[0]).text(m.tooltip)}else m.yCm=i+m.thicknessCm/2,i+=m.thicknessCm+.1,s=!0;let a=2*.05+2*.2+n;this.widthCm=(Math.trunc(a/tt)+1)*tt,this.heightCm=(Math.trunc(i/tt)+1)*tt;let l=.05+.2,h=a/2,u=a-l;e.css({width:this.widthCm+"cm",height:this.heightCm+"cm",fill:this.backgroundColor,stroke:"#000","stroke-width":"0.05cm"});for(let m of this.lines)if(m.type=="text"){let g;switch(m.alignment){case 1:g=h;break;case 0:g=l;break;case 2:g=u;break}let f=this.createElement("g",t[0]);f.append(m.$element),m.$element=f,m.$element.css("transform","translate("+g+"cm,"+m.yCm+"cm)"),m.onClick!=null&&(m.$element.addClass("clickable"),m.$element.on("mousedown",b=>{m.onClick(),b.stopPropagation()}))}else m.$element=this.createElement("line",t[0],{x1:"0",y1:m.yCm+"cm",x2:this.widthCm+"cm",y2:m.yCm+"cm"}),m.$element.css({stroke:"#000","stroke-width":m.thicknessCm+"cm"})}};r(xl,"cmPerPx",2.54/96);let Gm=xl;class Kl extends Gm{constructor(e,i,n,s){super(e.svgElement);r(this,"className");r(this,"klass");r(this,"filename");r(this,"hashedSignature");r(this,"documentation");r(this,"active",!0);r(this,"withMethods",!0);r(this,"withFields",!0);r(this,"inDebounce");r(this,"isSystemClass");r(this,"$dropdownTriangle");if(this.diagram=e,this.klass=s,s!=null){this.attachToClass(this.klass),this.isSystemClass=s.module instanceof Oa,this.withFields=!1;//!this.isSystemClass; this.withMethods=!1}this.moveTo(i,n,!0)}copy(){let e=new Kl(this.diagram,this.leftCm,this.topCm,null);return e.className=this.className,e.filename=this.filename,e.hashedSignature=this.hashedSignature,e.documentation=this.documentation,e.active=!1,e.withMethods=this.withMethods,e.withFields=this.withFields,e.isSystemClass=this.isSystemClass,e}serialize(){return{className:this.className,filename:this.filename,hashedSignature:this.hashedSignature,withAttributes:this.withFields,withMethods:this.withMethods,isSystemClass:this.isSystemClass,leftCm:this.leftCm,topCm:this.topCm}}static deserialize(e,i){let n=new Kl(e,i.leftCm,i.topCm,null);return n.hashedSignature=i.hashedSignature,n.className=i.className,n.filename=i.filename,n.withFields=i.withAttributes,n.withMethods=i.withMethods,n.isSystemClass=i.isSystemClass,n}documentationToString(e){return e?typeof e=="string"?e:e():""}attachToClass(e){this.klass=e;let i=this.getSignature(e);this.className!=e.identifier||this.hashedSignature!=i||this.widthCm<.7||this.documentation!=e.documentation?(this.isSystemClass=e.module instanceof Oa,this.renderLines()):this.addMouseEvents(),this.className=e.identifier,this.filename=e.module.file.name,this.hashedSignature=i,this.documentation=this.documentationToString(e.documentation)}jumpToDeclaration(e){this.diagram.main.showProgramPosition(this.klass.module.file,e.identifierRange)}renderLines(){var i,n;if(!(this.klass instanceof mt)&&!(this.klass instanceof Bt))return;this.clear();let e=this.diagram.currentClassBoxes.parametersWithTypes;if(this.addTextLine({type:"text",text:(this.klass instanceof ni?"<> ":this.klass.isAbstract()?"<> ":"")+this.klass.identifier,tooltip:this.klass.getDeclaration(),alignment:Ed.center,bold:!0,italics:this.klass instanceof ni||this.klass.isAbstract(),onClick:this.isSystemClass?void 0:()=>{this.jumpToDeclaration(this.klass)}}),this.klass instanceof Le&&this.withFields){this.addTextLine({type:"line",thicknessCm:.05});for(let s of this.klass.getFields().filter(a=>{var l;return((l=a.type)==null?void 0:l.identifier)!="Class"})){let a=this.getVisibilityText(s.visibility);switch(this.diagram.main.getSettings().getValue("classDiagram.typeConvention")){default:a+=((i=s.type)==null?void 0:i.toString())+" "+s.identifier;break;case"pascal":a+=s.identifier+": "+((n=s.type)==null?void 0:n.toString());break}this.addTextLine({type:"text",text:a,tooltip:s.getDeclaration(),alignment:Ed.left,onClick:this.isSystemClass?void 0:()=>{this.jumpToDeclaration(s)}})}}if(this.withMethods){this.addTextLine({type:"line",thicknessCm:.05});let s=["string toJson()",this.klass.identifier+" fromJson(string)"];this.klass.getOwnMethods().filter(a=>s.indexOf(a.getSignature())<0).filter(a=>!a.isConstructor||a.identifier==this.klass.identifier).forEach(a=>{let l=this.getVisibilityText(a.visibility)+a.identifier+"()",h=a.isConstructor||a.returnParameterType==null?"":a.returnParameterType.toString();if(this.diagram.main.getSettings().getValue("classDiagram.omitVoidReturnType")=="omit"&&h==="void"&&(h=""),e)switch(this.diagram.main.getSettings().getValue("classDiagram.typeConvention")){default:h!==""&&(h+=" "),l=this.getVisibilityText(a.visibility)+h+a.identifier+"("+a.parameters.map(u=>u.type.toString()+" "+u.identifier).join(", ")+")";break;case"pascal":h!==""&&(h=" : "+h),l=this.getVisibilityText(a.visibility)+a.identifier+"("+a.parameters.map(u=>u.identifier+": "+u.type.toString()).join(", ")+")"+h;break}this.addTextLine({type:"text",text:l,tooltip:a.getDeclaration(),alignment:Ed.left,italics:this.klass instanceof ni||a.isAbstract,onClick:this.isSystemClass?void 0:()=>{this.jumpToDeclaration(a)}})})}this.backgroundColor=this.isSystemClass?"#aaaaaa":"#ffffff",this.render(),this.$dropdownTriangle=this.createElement("path",this.$element[0],{d:this.getTrianglePath(),class:"dropdown-triangle",style:"transform: translate("+(this.widthCm-.35)+"cm,0.05cm)"}),this.addMouseEvents()}getTrianglePath(){return this.withMethods?"M 0 8 L 11 8 L 5.5 2 L 0 8":"M 0 2 L 11 2 L 5.5 8 L 0 2"}detach(){var e;(e=this.$element)==null||e.off("mousedown.diagramElement"),y(document).off("mouseup.diagramElement"),y(document).off("mousemove.diagramElement"),super.detach()}addMouseEvents(){let e=this;this.$dropdownTriangle!=null&&(this.$dropdownTriangle.off("mouseup.dropdowntriangle"),this.$dropdownTriangle.off("mousedown.dropdowntriangle")),this.$dropdownTriangle.on("mousedown.dropdowntriangle",i=>{i.stopPropagation()}),this.$dropdownTriangle.on("mouseup.dropdowntriangle",i=>{i.stopPropagation(),this.withMethods=!this.withMethods,this.withFields=!this.withFields,this.$dropdownTriangle.attr("d",this.getTrianglePath()),this.renderLines(),this.diagram.adjustClassDiagramSize(),this.diagram.updateArrows()}),this.$element.on("mousedown.diagramElement",i=>{if(i.stopPropagation(),i.stopImmediatePropagation(),i.button!=0)return;let n=i.screenX,s=i.screenY;e.$element.find("rect").addClass("dragging"),y(document).off("mouseup.diagramElement"),y(document).off("mousemove.diagramElement"),y(document).on("mousemove.diagramElement",a=>{let l=.024583333333333332/this.diagram.zoomfactor,h=(a.screenX-n)*l,u=(a.screenY-s)*l;n=a.screenX,s=a.screenY,e.move(h,u,!0),clearTimeout(e.inDebounce),e.inDebounce=setTimeout(()=>{e.diagram.updateArrows()},200)}),y(document).on("mouseup.diagramElement",()=>{e.move(0,0,!0,!0);let a=e.diagram;a.adjustClassDiagramSize(),a.updateArrows(),e.$element.find("rect").removeClass("dragging"),y(document).off("mouseup.diagramElement"),y(document).off("mousemove.diagramElement"),a.dirty=!0})})}getVisibilityText(e){switch(e){case p.keywordPrivate:return"-";case p.keywordProtected:return"#";case p.keywordPublic:return"+"}}getSignature(e){var s;if(!(e instanceof mt)&&!(e instanceof Bt))return-1;let i="";if(e instanceof Le&&this.withFields&&e.fields.length>0)for(let a of e.fields)i+=this.getVisibilityText(a.visibility)+((s=a.type)==null?void 0:s.toString())+" "+a.identifier;let n=e.getOwnMethods();if(this.withMethods&&n.length>0)for(let a of n){if(a.isConstructor)continue;let l=a.returnParameterType==null?"void":a.returnParameterType.toString();i+=this.getVisibilityText(a.visibility)+l+" "+a.identifier+"("+a.parameters.map(h=>h.type.toString()+" "+h.identifier).join(", ")+")"}return hb(i)}hasSignatureAndFileOf(e){return e.module.file.name==this.filename&&this.getSignature(e)==this.hashedSignature}}const js=class js{static makeHead(t,e,i){let n=e.x-t.x,s=e.y-t.y,a=Math.sqrt(n*n+s*s);if(a<1e-5)return{path:"",stroke:"none",fill:"none"};let l=n/a,h=s/a;e.x-=l*.2,e.y-=h*.2;let u="M "+e.x*tt/wa.cmPerPx+" "+e.y*tt/wa.cmPerPx,m=this.arrows[i];for(let g of m.steps){let f=g.r/180*Math.PI,b=l*Math.cos(f)-h*Math.sin(f),A=l*Math.sin(f)+h*Math.cos(f);u+=" l "+b*g.f/wa.cmPerPx+" "+A*g.f/wa.cmPerPx,l=b,h=A}return{path:u,fill:m.fill,stroke:m.stroke}}};r(js,"rauteAlpha",60),r(js,"arrows",{inheritance:{steps:[{r:150,f:.4},{r:120,f:.4},{r:120,f:.4}],stroke:"#000000",fill:"#ffffff","stroke-dasharray":void 0},realization:{steps:[{r:150,f:.4},{r:120,f:.4},{r:120,f:.4}],stroke:"#000000",fill:"#ffffff","stroke-dasharray":"4"},composition:{steps:[{r:90+js.rauteAlpha,f:.28},{r:180-2*js.rauteAlpha,f:.28},{r:2*js.rauteAlpha,f:.28},{r:180-2*js.rauteAlpha,f:.28}],stroke:"#000000",fill:"#ffffff","stroke-dasharray":void 0}});let Ch=js;const ga=class ga{constructor(t,e,i){r(this,"$element");this.parent=t,this.routingArrow=e,this.color=i}show(){this.$element!=null&&this.$element.show()}hide(){this.$element!=null&&this.$element.hide()}detach(){this.$element!=null&&this.$element.detach()}remove(){this.$element!=null&&this.$element.remove()}appendTo(t){t.append(this.$element)}clear(){this.$element!=null&&this.$element.empty()}createElement(t,e=null,i){let s=y(document.createElementNS("http://www.w3.org/2000/svg",t));return i!=null&&s.attr(i),e!=null&&e.appendChild(s[0]),s}createTextElement(t,e=null,i){let n=this.createElement("text",e,{font:"16px Roboto","font-family":"sans-serif",fill:"#000","alignment-baseline":"hanging"});return i!=null&&n.attr(i),n.text(t),n}getTextMetrics(t){let e=t[0].getBBox();return{height:e.height*ga.cmPerPx,width:e.width*ga.cmPerPx}}render(t=!0){let e=this.$element;e==null?(e=this.createElement("g",this.parent),this.$element=e,e.css("stroke",this.color)):e.empty();let i=this.routingArrow.minimalPoints;if(i==null||i.length<2)return;let n="M "+this.getPathCoordinates(i[0]);for(let l=1;l1&&i[i.length-1].x==i[i.length-2].x&&i[i.length-1].y==i[i.length-2].y;)i.pop();if(i.length>1&&this.routingArrow.endsOnArrowWithIdentifier==null&&(this.routingArrow.arrowType!="composition"||t)){let l=Ch.makeHead(i[i.length-2],i[i.length-1],this.routingArrow.arrowType);this.createElement("path",e[0],{d:l.path}).css({stroke:this.color,"stroke-width":"0.2 cm",fill:l.fill})}}getPathCoordinates(t){let e=t.x*tt/ga.cmPerPx,i=t.y*tt/ga.cmPerPx;return""+e+" "+i}};r(ga,"cmPerPx",2.54/96);let wa=ga;class Vp{constructor(){r(this,"aggregatingClassIdentifiers",["list","set","menge","tree","baum"])}registerUsedSystemClasses(t,e){let i=t.getExtends();i&&i.module instanceof Oa&&["Object","Class"].indexOf(i.identifier)===-1&&e.add(this.getTypeWithoutGenerics(t.getExtends()));for(let n of t.getImplements())n.module instanceof Oa&&e.add(this.getTypeWithoutGenerics(n));for(let n of this.getCompositeData(t))n.klass&&n.klass.module instanceof Oa&&e.add(n.klass)}getTypeWithoutGenerics(t){return t instanceof di||t instanceof nr?t.isGenericVariantOf:t}getCompositeData(t){let e=[],i=new Map;for(let n of t.fields){let s=n.type;if(s&&n.type instanceof mt||n.type instanceof Bt||n.type instanceof Ie){for(this.aggregatingClassIdentifiers.some(h=>{var u;return(u=n.type)==null?void 0:u.identifier.toLowerCase().includes(h)})&&s instanceof di&&s.typeMap.forEach((h,u)=>{(h instanceof mt||h instanceof Bt)&&(s=h)});s instanceof Ie;)s=s.elementType;if(!s||["Class","Object"].indexOf(s.identifier)!==-1)continue;let l=i.get(n.type);l==null?(l={klass:s,identifier:n.identifier},i.set(n.type,l),e.push(l)):l.identifier+=", "+n.identifier}}return e}}function QA(c){return new Worker(""+new URL("assets/Router-BNhqrOpo.js",import.meta.url).href,{name:c==null?void 0:c.name})}class ki{}r(ki,"showSystemClasses",()=>d({de:"Systemklassen einblenden",en:"Show system classes",fr:"Afficher les classes système"})),r(ki,"hideSystemClasses",()=>d({de:"Systemklassen ausblenden",en:"Hide system classes",fr:"Masquer les classes système"})),r(ki,"showParameters",()=>d({de:"Parameter einblenden",en:"show parameters",fr:"Afficher les paramètres"})),r(ki,"hideParameters",()=>d({de:"Parameter ausblenden",en:"hide parameters",fr:"Masquer les paramètres"})),r(ki,"connectionsColored",()=>d({de:"Verbindungen farbig",en:"Colored connections",fr:"Connexions colorées"})),r(ki,"connectionsBlack",()=>d({de:"Verbindungen schwarz",en:"Black connections",fr:"Connexions noires"})),r(ki,"downloadAsPng",()=>d({de:"Klassendiagramm als PNG-Datei herunterladen",en:"Download class diagram as PNG file",fr:"Télécharger le diagramme de classes au format PNG"})),r(ki,"classDiagram",()=>d({de:"Klassendiagramm",en:"Class_Diagram",fr:"Diagramme_de_classes"}));class YA extends UA{constructor(e,i){var s;super(e,i);r(this,"classBoxesRepository",{});r(this,"arrows",[]);r(this,"currentWorkspaceId",null);r(this,"currentWorkspace");r(this,"currentClassBoxes");r(this,"version",0);r(this,"straightArrowSectionAfterRectangle",2);r(this,"distanceFromRectangles",2);r(this,"slotDistance",2);r(this,"dirty",!1);r(this,"routingWorker");r(this,"basecolors",["#0075dc","#993f00","#005c31","#ff5005","#2bce48","#0000ff","#ffa405","#ffa8bb","#740aff","#990000","#ff0000"]);r(this,"blackcolors",["#000000"]);r(this,"colors",this.basecolors);this.$htmlElement=e;let n=this;if(!i.isEmbedded()){let a=(s=i.guiState)==null?void 0:s.classDiagram;a&&this.deserialize(a)}this.$menuButton.on("click",a=>{a.preventDefault();let l=n.currentClassBoxes.displaySystemClasses==!0,h=n.currentClassBoxes.parametersWithTypes==!0,u=n.currentClassBoxes.allArrowsBlack||!1;pn([{caption:l?ki.hideSystemClasses():ki.showSystemClasses(),callback:()=>{n.currentClassBoxes.displaySystemClasses=!l,n.drawDiagram(n.currentWorkspace,!1)}},{caption:h?ki.hideParameters():ki.showParameters(),callback:()=>{n.currentClassBoxes.parametersWithTypes=!h,n.currentClassBoxes.active.forEach(m=>{m.hashedSignature=-1}),n.drawDiagram(n.currentWorkspace,!1)}},{caption:u?ki.connectionsColored():ki.connectionsBlack(),callback:()=>{n.currentClassBoxes.allArrowsBlack=!u,n.currentClassBoxes.allArrowsBlack?n.colors=n.blackcolors:n.colors=n.basecolors,n.drawDiagram(n.currentWorkspace,!1)}},{caption:ki.downloadAsPng(),callback:async()=>{let m=5;this.currentClassBoxes.active.forEach(w=>w.$dropdownTriangle.hide()),this.svgElement.style.transformOrigin="top left",this.svgElement.style.transform="scale("+m*100+"%)";var g=new XMLSerializer,f=` `,b=f+g.serializeToString(this.svgElement)+"";this.currentClassBoxes.active.forEach(w=>w.$dropdownTriangle.hide()),this.svgElement.style.transformOrigin="",this.svgElement.style.transform="",await qe("servlet/svgPost",{svg:b});var A=new Image;let C=this;A.onload=function(){let w=document.createElement("canvas"),x=C.svgElement.parentElement.getBoundingClientRect(),q=x.width/C.zoomfactor*m,D=x.height/C.zoomfactor*m,G=C.marginCm/2.54*72*m;w.width=q-G,w.height=D-G;let K=w.getContext("2d");switch(i.getSettings().getValue("classDiagram.background")){case"transparent":K.clearRect(0,0,q,D);break;case"white":K.fillStyle="#ffffff",K.fillRect(0,0,q,D);break}K.drawImage(A,-G,-G,q,D),w.toBlob(Z=>{Sr(Z,ki.classDiagram()+".png",!0)}),w.remove()},A.src="servlet/svgGet?csrfToken="+Ft}}],a.pageX+2,a.pageY+2),a.stopPropagation()})}duplicateSerializedClassDiagram(e,i){let n=this.classBoxesRepository[e];if(!n)return;let s={inactive:n.active.map(a=>a.copy()).concat(n.inactive.map(a=>a.copy())),active:[],displaySystemClasses:n.displaySystemClasses,parametersWithTypes:n.parametersWithTypes,allArrowsBlack:n.allArrowsBlack};this.classBoxesRepository[i]=s,this.dirty=!0}clearAfterLogout(){this.classBoxesRepository={},this.arrows.forEach(e=>{e.remove()}),y(this.svgElement).find(":not(.centerRectangle)").remove()}serialize(){if(this.currentClassBoxes==null)return;let e={classBoxes:[],displaySystemClasses:this.currentClassBoxes.displaySystemClasses,parametersWithTypes:this.currentClassBoxes.parametersWithTypes};for(let i in this.classBoxesRepository){let n=this.classBoxesRepository[i];for(let s of n.active){let a=s.serialize();a.workspaceId=Number.parseInt(i),e.classBoxes.push(a)}}return e}deserialize(e){e.classBoxes=e.classBoxes.filter(i=>["Class","Object"].indexOf(i.className)===-1);for(let i of e.classBoxes){let n=this.classBoxesRepository[i.workspaceId];n==null&&(n={active:[],inactive:[],displaySystemClasses:!1,parametersWithTypes:!1,allArrowsBlack:!1},this.classBoxesRepository[i.workspaceId]=n),n.inactive.push(Kl.deserialize(this,i)),n.displaySystemClasses=e.displaySystemClasses,n.parametersWithTypes=e.parametersWithTypes}}adjustClassDiagramSize(){let e=this.classBoxesRepository[this.currentWorkspaceId];this.adjustSizeAndElements(e.active)}getClassBoxes(e){let i=this.classBoxesRepository[e.id];return i==null&&(i={active:[],inactive:[],displaySystemClasses:!1,parametersWithTypes:!1,allArrowsBlack:!1},this.classBoxesRepository[e.id]=i),i}switchToWorkspace(e){let i=this.getClassBoxes(e);if(this.currentWorkspaceId!=e.id){if(this.currentWorkspaceId!=null){let n=this.classBoxesRepository[this.currentWorkspaceId];if(n!=null){for(let s of n.active)s.detach();for(let s of n.inactive)s.detach()}}for(let n of i.active)this.svgElement.appendChild(n.$element[0]);for(let n of i.inactive)n.$element!=null&&this.svgElement.appendChild(n.$element[0]);this.adjustSizeAndElements(i.active)}return this.currentWorkspaceId=e.id,i}drawDiagram(e,i){if(e==null)return;this.currentWorkspace=e,this.currentClassBoxes=this.switchToWorkspace(e);let n=[],s=!1,a=[],l=new Set,h=new Vp;for(let m of e.getFiles()){let g=this.main.getCompiler().findModuleByFile(m);if(!g)continue;let f=g.types;f!=null&&(s=!0,f.filter(b=>(b instanceof Le||b instanceof ni)&&!b.isMainClass).forEach(b=>{let A=this.findAndEnableClass(b,this.currentClassBoxes,a);A!=null&&n.push(A),b instanceof Le&&h.registerUsedSystemClasses(b,l)}))}let u;for(u=new Set;u.size0;for(let m of a){if(!(m instanceof mt)&&!(m instanceof Bt))continue;let g=new Kl(this,Math.random()*10*tt,Math.random()*10*tt,m);g.renderLines();let f=this.findFreeSpace(n,g.widthCm,g.heightCm,this.minDistance);g.moveTo(f.x,f.y,!0),n.push(g)}if(a.length>0&&this.adjustSizeAndElements(n),!!s){for(let m of this.currentClassBoxes.active)m.hide(),m.active=!1,this.currentClassBoxes.inactive.push(m);this.currentClassBoxes.active=n,i||(this.adjustClassDiagramSize(),this.updateArrows())}}updateArrows(){this.$htmlElement.find(".jo_classdiagram-spinner").hide();let e=0,i=this.drawArrows();this.version++,i.version=this.version,this.routingWorker!=null&&this.routingWorker.terminate(),this.routingWorker=new QA;let n=this;this.routingWorker.onmessage=function(s){let a=s.data;if(a.version==n.version){n.$htmlElement.find(".jo_classdiagram-spinner").hide(),n.arrows.forEach(m=>{m.remove()});let l={},h=a.arrows.length+1,u;do u=h,h=0,a.arrows.forEach(m=>{m.color==null&&(h++,m.endsOnArrowWithIdentifier==null?(m.color=n.colors[e],l[m.identifier]=m.color,e++,e>n.colors.length-1&&(e=0)):m.color=l[m.endsOnArrowWithIdentifier])});while(h{m.color==null&&(m.color="#ff0000")}),a.arrows.forEach(m=>{let g=new wa(n.svgElement,m,m.color);g.render(n.main.getSettings().getValue("classDiagram.drawCompositionDiamond")=="yes"),n.arrows.push(g)})}},this.routingWorker.postMessage(i),this.$htmlElement.find(".jo_classdiagram-spinner").show()}drawArrows(){let e={rectangles:[],arrows:[],xMax:Math.ceil(this.widthCm/tt),yMax:Math.ceil(this.heightCm/tt),straightArrowSectionAfterRectangle:this.straightArrowSectionAfterRectangle,distanceFromRectangles:this.distanceFromRectangles,slotDistance:this.slotDistance},i=this.classBoxesRepository[this.currentWorkspaceId];i.active.forEach(s=>{e.rectangles.push(s.getRoutingRectangle())});let n=new Vp;return i.active.forEach(s=>{if(s.klass instanceof Le){if(s.klass.getExtends()!=null){let a=this.findClassbox(n.getTypeWithoutGenerics(s.klass.getExtends()),i.active);a!=null&&this.drawArrwow(s,a,"inheritance",e)}for(let a of s.klass.getImplements()){let l=this.findClassbox(n.getTypeWithoutGenerics(a),i.active);l!=null&&this.drawArrwow(s,l,"realization",e)}for(let a of n.getCompositeData(s.klass)){let l=this.findClassbox(a.klass,i.active);l!=null&&this.drawArrwow(l,s,"composition",e)}}}),e}drawArrwow(e,i,n,s){e.getRoutingRectangle(),i.getRoutingRectangle();let a=this.classBoxesRepository[this.currentWorkspaceId];s.arrows.push({arrowType:n,destRectangleIndex:a.active.indexOf(i),sourceRectangleIndex:a.active.indexOf(e),destinationIdentifier:i.className,identifier:e.className+"(extends)"+i.className})}findClassbox(e,i){for(let n of i)if(n.klass==e)return n;return null}findAndEnableClass(e,i,n){let s=0;for(;s{let s=this.hamburgerButton.getBoundingClientRect(),a=[];this.base===10?a.push({caption:He.MemoryTabHexadecimal(),callback(){i.columnsPerRow=16,i.base=16,i.update(e)}}):a.push({caption:He.MemoryTabDecimal(),callback(){i.columnsPerRow=10,i.base=10,i.update(e)}}),a.push({caption:He.MemoryTabShowProgramLocation(),callback(){let l=e.getStartOfFirstCodePart();if(typeof l=="number"){let h=l%i.columnsPerRow,u=Math.floor(l/i.columnsPerRow);i.regularTableElement.scrollToCell(h,u)}}}),pn(a,s.left,s.bottom)};for(let s=0;s{this.regularTableElement.draw()},new ResizeObserver(s=>{this.regularTableElement.draw()}).observe(this.bodyDiv)}updateMemoryView(e){this.regularTableElement.draw()}regularTableDataListener(e,i,n,s){let a=[],l=[],h=this.lastDisplayedCPU.getMemory().dump();n=Math.min(n,this.columnsPerRow),s=isNaN(s)?Math.ceil(h.length/this.columnsPerRow):Math.min(s,Math.ceil(h.length/this.columnsPerRow));let u=this.lastDisplayedCPU.getProgramCounter(),m=u+this.lastDisplayedCPU.getStatementLengthAtProgramCounter(),g=this.lastDisplayedCPU.getStackPointer(),{location:f,indirectLocation:b}=this.lastDisplayedCPU.getAddressOperandLocationOfCurrentStatement();for(let w=e;w=u&&G0&&n.classList.add(...s.classes)}}updateRegistersAndFlags(e){for(let i of e.registerNames){let n=e.getRegisterValues()[i],s=this.registerDivs[i];s.textContent=this.num(n)}for(let i of e.flagNames){let n=e.getFlags()[i],s=this.flagDivs[i];s.textContent=n?"1":"0"}}num(e){return typeof e!="number"?"---":this.base===16?(e>=0?e:65536+e).toString(16):e.toString()}}class yf{constructor(t,e,i){r(this,"classDiagram");r(this,"isWholePage",!1);r(this,"coordinatesDiv");r(this,"newControlsContainer");r(this,"tabManager");r(this,"outputTab");r(this,"classDiagramTab");r(this,"memoryTab");r(this,"rightDivElement");r(this,"originalControlsContainer");r(this,"rightDivInner");r(this,"wholeWindowElement");r(this,"wholeWindowButton");r(this,"rightdiv_width","100%");this.main=t,this.mainElement=e,this.withClassDiagram=i,t.isEmbedded()?this.findElementsEmbedded():this.findElementsFullVersion()}findElementsEmbedded(){this.rightDivElement=this.mainElement.getElementsByClassName("joe_rightDiv")[0],this.originalControlsContainer=this.mainElement.getElementsByClassName("joe_controlsDiv")[0],this.rightDivInner=this.mainElement.getElementsByClassName("joe_rightDivInner")[0]}findElementsFullVersion(){this.rightDivElement=document.getElementById("rightdiv"),this.originalControlsContainer=document.getElementById("controls"),this.rightDivInner=document.getElementById("rightdiv-inner")}onWholeWindowButtonClicked(t){if(this.main.isEmbedded())this.findElementsEmbedded();else{let e=document.body.getElementsByClassName("jo_helperBox");e.length>0&&(e[0].style.display="none")}this.isWholePage=t==1,this.isWholePage?(this.main.isEmbedded()&&(document.body.classList.add("joeCssFence"),this.main.embeddedFullpageController.primaryButton.setVisible(!1)),this.wholeWindowElement=z.makeDiv(document.body,"jo_wholeWindow"),Ga(this.rightDivElement,this.wholeWindowElement),Ga(this.originalControlsContainer,this.newControlsContainer),y(".jo_graphics").trigger("sizeChanged")):(this.main.isEmbedded()&&(document.body.classList.remove("joeCssFence"),this.main.embeddedFullpageController.primaryButton.setVisible(!0)),Ga(this.wholeWindowElement,this.rightDivElement),Ga(this.newControlsContainer,this.originalControlsContainer),this.wholeWindowElement.remove(),y(".jo_graphics").trigger("sizeChanged"))}adjustWidthToWorld(){let t=y(this.outputTab.bodyDiv),e=this.main.getInterpreter().retrieveObject("WorldClass");if(e!=null&&this.isWholePage){let i=window.innerHeight-this.tabManager.headingsDiv.getBoundingClientRect().height-6,n=window.innerWidth/i,s=e.width/e.height;if(s<=n){let a=s*i;t.css("width",a+"px"),t.css("height",i+"px")}else{let a=window.innerWidth/s;t.css("width",window.innerWidth+"px"),t.css("height",a+"px")}}}initGUI(){this.tabManager=new up(this.rightDivInner),this.coordinatesDiv=z.makeDiv(void 0,"jo_coordinates"),this.tabManager.insertIntoRightDiv(this.coordinatesDiv),this.newControlsContainer=z.makeDiv(void 0,"jo_control-container"),this.tabManager.insertIntoRightDiv(this.newControlsContainer),this.tabManager.addTab(this.outputTab=new mn("Output",Fn.output(),["jo_run"])),z.makeDiv(this.outputTab.bodyDiv,"jo_run-programend").textContent=Fn.programEnd();let t=y(`
${Fn.inputNumber()}
OK
`);this.outputTab.bodyDiv.appendChild(t[0]);let e=y(`
`);this.outputTab.bodyDiv.appendChild(e[0]),this.withClassDiagram&&(this.tabManager.addTab(this.classDiagramTab=new mn("Class Diagram",Fn.classDiagram(),["jo_classdiagram"])),this.classDiagramTab.bodyDiv.appendChild(y(``)[0]),this.classDiagramTab.onShow=()=>{this.main.drawClassDiagrams(!1)},setTimeout(()=>{this.classDiagram=new YA(y(this.classDiagramTab.bodyDiv),this.main)},100)),this.outputTab.show(),this.wholeWindowButton=new Vo(this.tabManager.tabheadingRightDiv,["img_whole-window-dark","img_whole-window-back-dark"],(i,n)=>{this.onWholeWindowButtonClicked(n)},[Fn.wholeWindow(),Fn.backToNormalSize()],!0,"append"),this.memoryTab=new ZA(this.main),this.tabManager.addTab(this.memoryTab)}isClassDiagramActive(){return this.classDiagramTab?this.classDiagramTab.isActive():!1}}class _p{constructor(t,e){r(this,"sliderknobDiv");r(this,"transparentOverlay");r(this,"sliderknobBeginCallback");r(this,"sliderknobEndCallback");r(this,"DX",-8);r(this,"DY",-8);r(this,"xStart");r(this,"yStart");r(this,"touchIdentifier");this.neighbours=t,this.sliderMovedCallback=e,this.init()}init(){this.createAndInitSliderknob(),this.initPointerEvents(),this.initTouchEvents()}initTouchEvents(){this.sliderknobDiv.addEventListener("touchstart",t=>{if(t.preventDefault(),t.touches.length>0&&typeof this.touchIdentifier>"u"){let e=t.touches[0];this.xStart=e.clientX,this.yStart=e.clientY,this.touchIdentifier=e.identifier}},{passive:!0}),this.sliderknobDiv.addEventListener("touchmove",t=>{for(let e=0;e{for(let e=0;e{t.stopPropagation(),t.preventDefault()}),this.sliderknobDiv.addEventListener("pointerdown",t=>{t.preventDefault(),t.stopPropagation(),this.dragStart(t.clientX,t.clientY),this.transparentOverlay=z.makeDiv(document.body),this.transparentOverlay.style.cursor="nwse-resize",this.transparentOverlay.style.position="absolute",this.transparentOverlay.style.left="0",this.transparentOverlay.style.top="0",this.transparentOverlay.style.bottom="0",this.transparentOverlay.style.right="0",this.transparentOverlay.style.zIndex="1000",this.transparentOverlay.addEventListener("mousemove",e=>{e.preventDefault(),e.stopPropagation()}),this.transparentOverlay.addEventListener("pointermove",e=>{e.stopPropagation(),e.preventDefault(),this.dragMove(e.clientX,e.clientY)}),this.transparentOverlay.onmousemove=e=>{e.stopPropagation()},this.transparentOverlay.addEventListener("pointerup",()=>{this.transparentOverlay.remove(),this.dragEnd()})})}dragEnd(){this.sliderknobEndCallback&&this.sliderknobEndCallback()}dragMove(t,e){let i=t-this.xStart,n=e-this.yStart;for(let s of this.neighbours)for(let a of s.neighbourOrientation)switch(a){case"top":s.element.style.height=s.oldHeight+n+"px";break;case"bottom":s.element.style.height=s.oldHeight-n+"px";break;case"left":s.element.style.width=s.oldWidth+i+"px";break;case"right":s.element.style.width=s.oldWidth-i+"px";break}this.sliderMovedCallback&&this.sliderMovedCallback()}dragStart(t,e){this.xStart=t,this.yStart=e;for(let i of this.neighbours){let n=i.element.getBoundingClientRect();i.oldWidth=n.width,i.oldHeight=n.height}this.sliderknobBeginCallback&&this.sliderknobBeginCallback()}createAndInitSliderknob(){this.sliderknobDiv=z.makeDiv(void 0,"jo_sliderknob","img_knob","jo_button","jo_active"),this.sliderknobDiv.draggable=!1,this.sliderknobDiv.style.zIndex="10",document.body.append(this.sliderknobDiv),this.initSliderknobPosition(),this.initResizeObservers()}initResizeObservers(){for(let t of this.neighbours)for(let e of t.neighbourOrientation)switch(e){case"top":break;case"bottom":new ResizeObserver(()=>{this.sliderknobDiv.style.top=t.element.getBoundingClientRect().top+this.DY+window.scrollY+"px"}).observe(t.element);break;case"left":break;case"right":new ResizeObserver(()=>{this.sliderknobDiv.style.left=t.element.getBoundingClientRect().left+this.DX+window.scrollX+"px"}).observe(t.element);break}}initSliderknobPosition(){let t=0,e=0;for(let i of this.neighbours){let n=i.element.getBoundingClientRect();for(let s of i.neighbourOrientation)switch(s){case"top":e=n.top+n.height;break;case"bottom":e=n.top;break;case"left":t=n.left+n.width;break;case"right":t=n.left;break}}this.sliderknobDiv.style.top=e+window.scrollY+this.DY+"px",this.sliderknobDiv.style.left=t+window.scrollX+this.DX+"px"}toggleVisibility(t){this.sliderknobDiv.style.display=t?"":"none",t&&this.initSliderknobPosition()}}class XA{constructor(t){r(this,"main");r(this,"sliderLeft");r(this,"sliderRight");r(this,"sliderBottom");r(this,"sliderKnobLeft");r(this,"sliderKnobRight");this.main=t}initSliders(){let t=y("#leftpanel"),e=y("#editor");y("#editor>.monaco-editor");let i=y("#rightdiv"),n=y("#bottomdiv-outer");this.sliderLeft=new ss(t[0],!1,!1,s=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()},e[0]),this.sliderRight=new ss(i[0],!0,!1,s=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()},e[0]),this.sliderBottom=new ss(n[0],!0,!0,s=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()},e[0]),this.sliderKnobLeft=new _p([{element:t[0],neighbourOrientation:["left"]},{element:e[0],neighbourOrientation:["right","top"]},{element:n[0],neighbourOrientation:["bottom"]}],()=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()}),this.sliderKnobRight=new _p([{element:i[0],neighbourOrientation:["right"]},{element:n[0],neighbourOrientation:["bottom"]},{element:e[0],neighbourOrientation:["left","top"]}],()=>{this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()})}toggleSliderVisibilityWhenEditorHasFullWidth(t){this.sliderKnobLeft.toggleVisibility(!t),this.sliderKnobRight.toggleVisibility(!t),this.sliderLeft.toggleVisibility(!t),this.sliderRight.toggleVisibility(!t),this.sliderBottom.toggleVisibility(!t),y("#editor")[0]}initSlidersOld(){let t=this,e=window.PointerEvent?"pointer":"mouse",i=y('
');y("#slider2").append(i),i.on(e+"down",s=>{let a=s.clientY,l=s.clientX;s.stopPropagation(),Aa.preventFading=!0,y(document).on(e+"move.knobleft",h=>{let u=h.clientY-a,m=h.clientX-l;h.stopPropagation(),t.moveLeftPanel(m),t.moveBottomDiv(u),l+=m,a+=u}),y(document).on(e+"up.knobleft",()=>{y(document).off(e+"move.knobleft"),y(document).off(e+"up.knobleft"),Aa.preventFading=!1})});let n=y('
');y("#slider2").append(n),n.on(e+"down",s=>{let a=s.clientY,l=s.clientX;s.stopPropagation(),Aa.preventFading=!0,y(document).on(e+"move.knobright",h=>{let u=h.clientY-a,m=h.clientX-l;h.stopPropagation(),t.moveRightDiv(m),t.moveBottomDiv(u),l+=m,a+=u}),y(document).on(e+"up.knobright",()=>{y(document).off(e+"move.knobright"),y(document).off(e+"up.knobright"),Aa.preventFading=!1})})}moveRightDiv(t){let e=y("#editor>.monaco-editor"),i=y("#rightdiv"),n=Number.parseInt(i.css("width").replace("px",""));i.css("width",n-t+"px");let s=Number.parseInt(e.css("width").replace("px",""));e.css("width",s+t+"px"),this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout(),y(".jo_graphics").trigger("sizeChanged"),n+=t}moveBottomDiv(t){let e=y("#editor>.monaco-editor"),i=y("#bottomdiv-outer"),n=Number.parseInt(i.css("height").replace("px",""));i.css("height",n-t+"px");let s=Number.parseInt(e.css("height").replace("px",""));e.css("height",s+t+"px"),this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()}moveLeftPanel(t){let e=y("#leftpanel"),i=y("#editor>.monaco-editor"),n=Number.parseInt(e.css("width").replace("px",""));e.css("width",n+t+"px");let s=Number.parseInt(i.css("width").replace("px",""));i.css("width",s-t+"px"),this.main.getMainEditor().layout(),this.main.bottomDiv.homeworkManager.diffEditor!=null&&this.main.bottomDiv.homeworkManager.diffEditor.layout()}setSliderRightPosition(t){this.sliderRight.setPosition(t),this.sliderKnobRight.initSliderknobPosition()}}function Dd(c,t=!1){var e,i;return c.vidis_akronym?c.username&&c.username.length>0?c.username:c.vidis_akronym:((e=c.familienname)==null?void 0:e.length)>0&&((i=c.rufname)==null?void 0:i.length)>0?t?c.familienname+", "+c.rufname:c.rufname+" "+c.familienname:c.username}var zp={preparing:"Vorbereitung",running:"Prüfung läuft",correcting:"Korrektur",opening:"Herausgabe"};class Wp{constructor(t,e,i){r(this,"$html");r(this,"isActive",!0);r(this,"listeners",[]);r(this,"linkedToggleButtons",new Set);var n;this._caption=t,this.$parent=e,this._isChecked=i,this.$html=y(`
${t}
`),(n=this.$parent)==null||n.append(this.$html),this.$html.on("pointerdown",s=>{s.stopPropagation(),this._isChecked||(this.checked=!this._isChecked)})}onChange(t){this.listeners.push(t)}linkTo(...t){t==null||t.forEach(e=>{this.linkedToggleButtons.add(e),e.linkedToggleButtons.add(this)})}get caption(){return this._caption}set caption(t){this._caption=t,this.$html.text(t)}setActive(t){this.isActive=t,this.$html.toggleClass("active",t)}get checked(){return this._isChecked}set checked(t){this._isChecked=t,this.$html.toggleClass("checked",t),this.listeners.forEach(e=>e(t)),t&&this.linkedToggleButtons.forEach(e=>e.checked=!1)}}class JA{constructor(t,e){r(this,"studentPanel");r(this,"classPanel");r(this,"ownWorkspaces");r(this,"currentOwnWorkspace");r(this,"pruefungen",[]);r(this,"classPanelMode","classes");r(this,"currentPruefung",null);r(this,"homeButton");r(this,"$buttonContainer");this.main=t,this.classData=e,this.fetchPruefungen()}removePanels(){this.classPanel.setVisible(!1),this.studentPanel.setVisible(!1)}initGUI(){this.initStudentPanel(),this.initClassPanel(),this.main.projectExplorer.accordion.onResize(!0),this.renderClasses(this.classData),Si.subscribe("onPruefungChanged",async()=>{await this.fetchPruefungen(),this.classPanelMode=="tests"&&this.renderPruefungen()}),Si.subscribe("onClassesChanged",async()=>{let t=await qe("/servlet/getClassesData",{wholeSchool:!1});if(this.classData=t.classDataList,this.classPanelMode=="classes"){let e=null,i=this.classPanel.getCurrentlySelectedNodes();if((i==null?void 0:i.length)>0&&(e=i[0].externalObject),this.renderClasses(this.classData),e!=null){let n=this.classData.find(s=>s.id==e.id);n!=null&&(this.classPanel.selectElement(n,!1),this.renderStudents(n.students))}this.main.currentWorkspace.owner_id!=this.main.user.id&&this.onHomeButtonClicked()}}),this.homeButton=this.studentPanel.captionLineAddIconButton("img_home-dark","right",()=>{this.onHomeButtonClicked()},X.displayOwnWorkspaces()),this.homeButton.setVisible(!1)}initStudentPanel(){this.studentPanel=new li(this.main.projectExplorer.accordion,{captionLine:{enabled:!0,text:qi.students()},withSelection:!0,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,withDeleteButtons:!1,buttonAddFolders:!1,defaultIconClass:"img_user-dark",flexWeight:"1",minHeight:100,withFolders:!1,comparator:(t,e)=>t.vidis_akronym&&e.vidis_akronym?Dd(t)>Dd(e)?1:-1:t.familienname>e.familienname?1:e.familienname>t.familienname?-1:t.rufname>e.rufname?1:e.rufname>t.rufname?-1:0,orderBy:"comparator"}),this.studentPanel.nodeClickedCallback=t=>{this.classPanelMode=="classes"?this.main.projectExplorer.fetchAndRenderWorkspaces(t,this):this.main.projectExplorer.fetchAndRenderWorkspaces(t,this,this.currentPruefung)}}restoreOwnWorkspaces(){let t=this.main;t.getMainEditor().updateOptions({readOnly:!0}),t.workspaceList=this.ownWorkspaces,t.currentWorkspace=this.currentOwnWorkspace,t.workspacesOwnerId=t.user.id,t.projectExplorer.setExplorerColor(null),t.projectExplorer.renderWorkspaces(t.workspaceList),t.currentWorkspace==null&&t.workspaceList.length>0&&(t.currentWorkspace=t.workspaceList[0]),t.currentWorkspace!=null&&t.projectExplorer.setWorkspaceActive(t.currentWorkspace,!0),this.studentPanel.selectElement(null,!1)}initClassPanel(){let t=this;this.$buttonContainer=y('
'),this.classPanel=new li(this.main.projectExplorer.accordion,{captionLine:{enabled:!0,element:this.$buttonContainer[0]},withSelection:!0,selectMultiple:!1,isDragAndDropSource:!1,buttonAddElements:!1,withDeleteButtons:!1,buttonAddFolders:!1,defaultIconClass:"img_class-dark",flexWeight:"1",minHeight:100,withFolders:!1,orderBy:"comparator"}),this.classPanel.nodeClickedCallback=e=>{t.main.networkManager.sendUpdatesAsync().then(()=>{if(this.classPanelMode=="classes"){let i=e;i!=null&&this.renderStudents(i.students)}else this.onSelectPruefung(e)})},this.initPruefungButtons()}initPruefungButtons(){if(this.main.settings.getValue("schooladmin.functionality.pruefungen")=="enabled"){this.$buttonContainer.empty();let t=new Wp(qi.classes(),this.$buttonContainer,!0),e=new Wp(qi.tests(),this.$buttonContainer,!1);t.linkTo(e);let i=this.classPanel.captionLineAddIconButton("img_gear-dark","right",async()=>{let n=await qe("servlet/getSingleUseSessionToken",{});n.success&&window.open("administration_mc.html?"+Ug+"="+n.singleUseSessionToken+"&lang="+(this.main.guiState.language??"de")+"&menuItem=manageTests")},qi.createNewTest());i.setVisible(!1),e.onChange(async n=>{i==null||i.setVisible(n),this.classPanelMode=n?"tests":"classes",this.main.networkManager.sendUpdatesAsync().then(()=>{if(n){this.main.workspacesOwnerId==this.main.user.id&&(this.ownWorkspaces=this.main.workspaceList.slice(),this.currentOwnWorkspace=this.main.currentWorkspace),this.renderPruefungen();let s=this.pruefungen.find(a=>["preparing","running"].indexOf(a.state)<0);s!=null&&this.classPanel.selectElement(s,!0)}else this.renderClasses(this.classData),this.onHomeButtonClicked()})})}}onSelectPruefung(t){this.currentPruefung=t;let e=this.main.projectExplorer;if(t.state=="preparing"||t.state=="running")alert(qi.testIsInState(zp[t.state])),e.fileTreeview.clear(),e.fileTreeview.setCaption("---"),e.workspaceTreeview.clear(),this.studentPanel.clear(),this.main.getMainEditor().setModel(Q.createModel(qi.noFile(),"text"));else{let i=this.classData.find(n=>n.id==t.klasse_id);i!=null&&(this.renderStudents(i.students),i.students.length>0&&this.studentPanel.selectElement(i.students[0],!0))}}renderStudents(t){this.studentPanel.clear(),this.studentPanel.setCaption(t.length+" "+qi.students()),t.sort(this.studentPanel.config.comparator);for(let e=0;ee.name.localeCompare(i.name));for(let e of t)this.classPanel.addNode(!1,e.name,"img_class-dark",e)}renderPruefungen(){this.classPanel.clear(),this.pruefungen.forEach(t=>this.addPruefungToClassPanel(t))}addPruefungToClassPanel(t){this.classPanel.addNode(!1,t.name,"img_test-state-preparing",t),this.updateClassNameAndState(t)}updateClassNameAndState(t){let e=this.classPanel.findNodeByElement(t);if(!e)return;let i=this.classData.find(n=>n.id==t.klasse_id);i!=null&&(e.renderCaptionAsHtml=!0,e.caption=`${t.name} (${i.name})`),e.iconClass="img_test-state-"+t.state,e.iconTooltip=zp[t.state]}async fetchPruefungen(){let t=await qe("/servlet/getPruefungenForLehrkraft",{});this.pruefungen=t.pruefungen}async onHomeButtonClicked(){let t=this.main.projectExplorer;await this.main.networkManager.sendUpdatesAsync(),this.main.bottomDiv.hideHomeworkTab(),t.workspaceTreeview.addElementsButton.setVisible(!0),t.workspaceTreeview.addFolderButton.setVisible(!0),this.homeButton.setVisible(!1),t.fileTreeview.addElementsButton.setVisible(this.main.workspaceList.length>0),t.fileTreeview.addFolderButton.setVisible(this.main.workspaceList.length>0),this.main.teacherExplorer.restoreOwnWorkspaces(),this.main.networkManager.updateFrequencyInSeconds=this.main.networkManager.ownUpdateFrequencyInSeconds}}class ew{constructor(t,e){r(this,"$buttonEditorFullscreen");r(this,"$buttonPresentationMode");r(this,"$buttonMonitorMode");r(this,"$buttonMap",{});r(this,"highContrast",!1);r(this,"editorHasFullWidth",!1);r(this,"rightDivWidth");r(this,"editorWidth");r(this,"sliders");r(this,"callbacksWhenSlidersRegistered",[]);this.$buttonsContainer=t,this.main=e,this.$buttonEditorFullscreen=y(`
`),this.$buttonPresentationMode=y(`
`),this.$buttonMonitorMode=y(`
`),t.append(this.$buttonEditorFullscreen,this.$buttonPresentationMode,this.$buttonMonitorMode),this.$buttonMap={presentation:this.$buttonPresentationMode,monitor:this.$buttonMonitorMode};let i=this.main.actionManager;i.registerAction("editor.fullwidth",[],Ln.fullWidth(),()=>{this.toggleEditorFullwidth()}),i.registerButton("editor.fullwidth",this.$buttonEditorFullscreen),i.registerAction("viewmode.presentation",[],Ln.presentation(),()=>{this.setMode("presentation")}),i.registerButton("viewmode.presentation",this.$buttonPresentationMode),i.registerAction("viewmode.monitor",[],Ln.monitor(),()=>{this.setMode("monitor")}),i.registerButton("viewmode.monitor",this.$buttonMonitorMode)}toggleEditorFullwidth(){var t;this.editorHasFullWidth?(this.$buttonEditorFullscreen.removeClass("img_whole-window-back-dark"),this.$buttonEditorFullscreen.addClass("img_whole-window-dark"),this.$buttonEditorFullscreen.attr("title",Ln.fullWidth()),y("#rightdiv").css("width",this.rightDivWidth+"px"),y("#editor").css("width",this.editorWidth+"px"),y("#rightdiv").show(600),y("#leftpanel").show(600),y("#controls").show(),setTimeout(()=>{var e;(e=this.sliders)==null||e.toggleSliderVisibilityWhenEditorHasFullWidth(!1)},800)):(this.$buttonEditorFullscreen.removeClass("img_whole-window-dark"),this.$buttonEditorFullscreen.addClass("img_whole-window-back-dark"),this.$buttonEditorFullscreen.attr("title",Ln.defaultWidth()),this.rightDivWidth=Number.parseInt(y("#rightdiv").css("width").replace("px","")),this.editorWidth=Number.parseInt(y("#editor").css("width").replace("px","")),y("#editor").css("width",""),y("#rightdiv").hide(600),y("#leftpanel").hide(600),y("#controls").hide(),this.main.getInterpreter().stop(!1),(t=this.sliders)==null||t.toggleSliderVisibilityWhenEditorHasFullWidth(!0)),setTimeout(()=>{this.main.getMainEditor().layout()},800),this.editorHasFullWidth=!this.editorHasFullWidth}setMode(t,e=!0){let i=t=="presentation"?"monitor":"presentation";this.$buttonMap[t].addClass("jo_pressed"),this.$buttonMap[i].removeClass("jo_pressed");let s=this.main.guiState.viewModes,a=s[t];s.viewModeChosen=t,this.main.themeManager.switchTheme(a.theme),this.main.editor.setFontSize(a.fontSize),this.highContrast!=a.highContrast&&(this.main.getMainEditor().getAction("editor.action.toggleHighContrast").run(),this.highContrast=!this.highContrast),e&&this.saveSettings()}saveFontSize(t){let e=this.getChosenViewMode();e.fontSize=t,this.saveSettings()}setTheme(t){let e=this.getChosenViewMode();e.theme=t,this.main.themeManager.switchTheme(e.theme),this.saveSettings()}toggleHighContrast(){let t=this.getChosenViewMode();t.highContrast=!t.highContrast,this.main.getMainEditor().getAction("editor.action.toggleHighContrast").run(),this.saveSettings()}getChosenViewMode(){let t=this.main.guiState.viewModes;return t[t.viewModeChosen]}saveSettings(){this.main.gui_state_dirty=!0}initViewMode(){let t=this.main.guiState;t.viewModes==null&&(t.viewModes={monitor:null,presentation:null,viewModeChosen:"monitor"}),t.viewModes.monitor==null&&(t.viewModes.monitor={fontSize:14,highContrast:!1,theme:"dark"},t.viewModes.presentation={fontSize:18,highContrast:!1,theme:"light"},this.saveSettings()),this.setMode(t.viewModes.viewModeChosen,!1)}registerSliders(t){this.sliders=t,this.callbacksWhenSlidersRegistered.forEach(e=>e(t))}async getSliders(){return this.sliders?this.sliders:new Promise(t=>{this.callbacksWhenSlidersRegistered.push(t)})}}class tw{constructor(t){r(this,"backButtonListener");r(this,"oneTimeBackButtonListener");this.main=t;let e=this;history.pushState("PreventLeavingSite",""),window.addEventListener("popstate",i=>{i.state=="PreventLeavingSite"?(history.pushState("PreventLeavingSite",""),e.main.editor.pushHistoryState(!1,e.main.editor.getPositionForHistory())):this.oneTimeBackButtonListener==null&&this.backButtonListener(i),this.oneTimeBackButtonListener!=null&&(this.oneTimeBackButtonListener(),this.oneTimeBackButtonListener=null)})}registerBackButtonListener(t){this.backButtonListener=t}registerOneTimeBackButtonListener(t){this.oneTimeBackButtonListener=t,history.pushState({},"")}}class vf{}r(vf,"pruefungLaeuft",()=>d({de:"Prüfung läuft!",en:"Test is running!"}));class xh{}r(xh,"Application",1);class iw{constructor(t){r(this,"pruefung");r(this,"$pruefungLaeuft");r(this,"timer");this.main=t,y("#pruefunglaeuft").remove(),this.$pruefungLaeuft=y(`
${vf.pruefungLaeuft()}
`),y(".jo_projectexplorer").prepend(this.$pruefungLaeuft),Si.subscribe("startPruefung",async e=>{e.pruefung.application==xh.Application&&this.startPruefung(e.pruefung)}),Si.subscribe("stopPruefung",e=>{e.pruefung.application==xh.Application&&this.stopPruefung(!0)})}close(){this.pruefung!=null&&(Si.unsubscribe("startPruefung"),Si.unsubscribe("stopPruefung"),this.timer!=null&&clearInterval(this.timer),this.main.networkManager.sendUpdatesAsync(!0,!1,!1).then(()=>{let t=this.main.projectExplorer;t.workspaceTreeview.setVisible(!0),t.fetchAndRenderOwnWorkspaces()}),this.pruefung=null)}async startPruefung(t){var a;if(this.pruefung!=null)return;let e=[];if(e.length==0&&(await this.main.networkManager.sendUpdatesAsync(!0,!1,!1),e=this.main.workspaceList.filter(l=>l.pruefung_id==t.id),e.length==0)){console.log("Workspace for Puefung not found, retrying...");return}if(this.pruefung!=null)return;this.pruefung=t;let i=e[0];this.main.workspaceList=[i],this.main.currentWorkspace=i;let n=this.main.projectExplorer;n.workspaceTreeview.clear(),n.fileTreeview.clear(),n.workspaceTreeview.setVisible(!1),n.fileTreeview.addElementsButton.setVisible(!0),n.fileTreeview.addFolderButton.setVisible(!0),this.main.bottomDiv.errorManager.clearErrors(),this.main.bottomDiv.console.clear(),(a=this.main.getCurrentProgrammingLanguage())==null||a.beforeWorkspaceChange(this.main),this.main.disassembler.clear(),n.setWorkspaceActive(i),i.saved=!1,this.main.getInterpreter().resetRuntime(),y("#pruefunglaeuft").css("display","block"),this.timer!=null&&(clearInterval(this.timer),this.timer=null);let s=()=>{let l={pruefungId:this.pruefung.id,running:!0};qe("/servlet/reportPruefungState",l).then(h=>{h.pruefungState!="running"&&this.stopPruefung(!0)})};s(),this.timer=setInterval(s,5e3)}async stopPruefung(t){if(this.main.networkManager.savePruefungWorkspace(this.main.currentWorkspace),console.log("Stopping pruefung..."),this.timer!=null&&clearInterval(this.timer),this.timer=null,this.pruefung==null)return;this.main.getInterpreter().resetRuntime();let e={pruefungId:this.pruefung.id,running:!1};qe("/servlet/reportPruefungState",e),this.pruefung=null,this.main.projectExplorer.workspaceTreeview.setVisible(!0),y("#pruefunglaeuft").css("display","none"),t&&(this.main.workspaceList=[],this.main.projectExplorer.renderWorkspaces(this.main.workspaceList),await this.main.projectExplorer.fetchAndRenderOwnWorkspaces())}}class nw{constructor(t){r(this,"logoutAfterMinutes",25);r(this,"counterInMinutes",this.logoutAfterMinutes);let e=this;setInterval(()=>{e.counterInMinutes--,e.counterInMinutes==0&&(t?t.logout():e.logout())},60*1e3),document.body.addEventListener("keydown",()=>{e.reset()}),document.body.addEventListener("mousedown",()=>{e.reset()})}reset(){this.counterInMinutes=this.logoutAfterMinutes}logout(){pt("logout",{currentWorkspaceId:null},()=>{window.location.href="index.html"})}}class Ci{}r(Ci,"pleaseWaitWhileSaving",()=>d({de:"Bitte warten, der letzte Bearbeitungsstand wird noch gespeichert ...",en:"Saving last edits -> please wait ..."})),r(Ci,"wrongUsernameOrPassword",()=>d({de:"Fehler: Benutzername und/oder Passwort ist falsch. Bitte versuchen Sie es in 5 s erneut.",en:"Error: Wrong username and/or password. Please try again in 5 seconds."})),r(Ci,"penaltyTime",t=>d({de:`Fehler: Sie haben einen/mehrere falsche Login-Versuche unternommen. Bitte warten Sie ${t} Sekunden, bevor Sie es erneut versuchen.`,en:`Error: You have made one/several failed login attempts. Please wait ${t} seconds before trying again.`})),r(Ci,"pleaseWait",()=>d({de:"Bitte warten ...",en:"Please wait ..."})),r(Ci,"loginFailed",()=>d({de:"Login gescheitert: ",en:"Login failed: "})),r(Ci,"done",()=>d({de:"fertig!",en:"Done!"})),r(Ci,"webGLNotSupported",()=>d({de:"Von diesem Browser wird WebGL nicht unterstützt. Es kann daher sein, dass die Grafikfunktionen der Online-IDE nicht oder nur eingeschränkt funktionieren. Bitte verwenden Sie einen aktuellen Browser wie Chrome, Firefox, Edge oder Safari.",en:"WebGL is not supported by this browser. Therefore, the graphics functions of the online IDE may not work or only work to a limited extent. Please use a modern browser such as Chrome, Firefox, Edge or Safari."}));class Af{constructor(t,e,i,n){r(this,"hieararchyTexts",[k.ScopeUser,k.ScopeClass,k.ScopeSchool]);r(this,"values",{user:{},class:{},school:{},default:{}});this.user=t;for(let s in fm)this.values.default[s]=fm[s];this.values.user=e?Ws.parse(e):{},this.values.class=i?Ws.parse(i):{},this.values.school=n?Ws.parse(n):{}}setValue(t,e,i){this.values[t][e]=i}getValue(t,e){var s,a;if(e)return this.values[e][t];let i=Zg[t]||"userClassSchoolDefault";((s=this.user)!=null&&s.is_teacher||(a=this.user)!=null&&a.is_schooladmin)&&(i="userClassSchoolDefault");let n=Xy[i];for(let l of n)if(this.values[l]&&this.values[l][t]!==void 0)return this.values[l][t]}}class rw{constructor(t){r(this,"loggedInWithVidis",!1);r(this,"vidis_id_token","");this.main=t,new nw(this)}initGUI(){let t=this;y("#login").css("display","flex"),y("#bitteWarten").css("display","none");let e=y("#login-spinner>img");y("#login-username").focus(),y("#login-username").on("keydown",n=>{n.key=="Enter"&&y("#login-password").focus()}),y("#login-password").on("keydown",n=>{n.key=="Enter"&&y("#login-button").trigger("click")}),y("#login-password").on("keydown",n=>{n.key=="Tab"&&(n.preventDefault(),y("#login-button").focus(),y("#login-button").addClass("jo_active")),n.key=="Enter"&&y("#login-button").trigger("click")}),y("#login-button").on("keydown",n=>{n.key=="Tab"?(n.preventDefault(),y("#login-username").focus(),y("#login-button").removeClass("jo_active")):y("#login-button").trigger("click")}),y("#jo_testuser-login-button").on("click",()=>{y("#login-username").val("Testuser"),y("#login-password").val(""),y("#login-button").trigger("click")});let i=!1;y("#login-button").on("click",()=>{ns.init(),e.show(),!i&&(i=!0,setTimeout(()=>{i=!1},1e3),this.sendLoginRequest(null))}),y("#buttonLogout").on("click",()=>{t.logout()})}logout(){let t=window.location.href.indexOf("silent")>=0;if(!this.main.user||this.main.user.is_testuser){window.location.assign("/"+(t?"?silent=true":""));return}this.main.interpreter.eventManager.fire("resetRuntime"),y("#bitteWartenText").html(Ci.pleaseWaitWhileSaving()),y("#bitteWarten").css("display","flex"),this.main.workspacesOwnerId!=this.main.user.id&&this.main.teacherExplorer.onHomeButtonClicked(),this.main.networkManager.sendUpdatesAsync().then(()=>{var i,n,s;(i=this.main.pruefungManagerForStudents)==null||i.stopPruefung(!1),this.main.rightDiv.classDiagram.clearAfterLogout();let e={currentWorkspaceId:((n=this.main.currentWorkspace)==null?void 0:n.pruefung_id)==null?(s=this.main.currentWorkspace)==null?void 0:s.id:null};pt("logout",e,()=>{this.loggedInWithVidis?window.location.assign("https://aai.vidis.schule/auth/realms/vidis/protocol/openid-connect/logout?ID_TOKEN_HINT="+this.vidis_id_token+"&post_logout_redirect_uri=https%3A%2F%2Fonline-ide.de/vidisLogout"):(y("#bitteWartenText").html(Ci.done()),window.location.assign("/"+(t?"?silent=true":"")))})}),Si.getInstance().close()}sendLoginRequest(t){let e=this,i="login",n={username:y("#login-username").val(),password:y("#login-password").val(),application:xh.Application,singleUseToken:t};n.username=="",pt(i,n,s=>{var a,l,h,u,m,g;if(!s.success)y("#login-message").html(Ci.wrongUsernameOrPassword()),y("#login-spinner>img").hide();else{if(s.penaltyTimeInSeconds>0){y("#login-message").html(Ci.penaltyTime(s.penaltyTimeInSeconds)),y("#login-spinner>img").hide();return}this.vidis_id_token=s.vidis_id_token||"",y("#login").hide(),y("#main").css("visibility","visible"),y("#bitteWartenText").html(Ci.pleaseWait()),y("#bitteWarten").css("display","flex");let f=s.user;f.is_testuser=s.isTestuser,this.main.guiState=Ws.parse(f.gui_state)||{helperHistory:{consoleHelperDone:!1,newFileHelperDone:!1,newWorkspaceHelperDone:!1,speedControlHelperDone:!1,homeButtonHelperDone:!1,stepButtonHelperDone:!1,repositoryButtonDone:!1,folderButtonDone:!1},viewModes:null,classDiagram:null,language:"de"},e.main.user=f,e.main.settings=new Af(f,f.settings,s.classSettings,s.schoolSettings),e.main.languagemanager.setLanguage(this.main.guiState.language),this.main.startupAfterLogin(),e.main.mainMenu.initGUI(f,""),(a=e.main.bottomDiv.gradingManager)==null||a.initGUI(),y("#bitteWarten").hide(),y("#login-spinner>img").hide(),y("#menupanel-username").html(gc(Dd(f))),new xA(e.main).init(f),f.is_teacher&&e.main.initTeacherExplorer(s.classdata),e.main.workspacesOwnerId=f.id,e.main.restoreWorkspaces(s.workspaces,!0),e.main.networkManager.initializeTimer(),(h=(l=e.main.rightDiv)==null?void 0:l.classDiagram)==null||h.clear(),this.main.guiState.classDiagram!=null&&((m=(u=e.main.rightDiv)==null?void 0:u.classDiagram)==null||m.deserialize(this.main.guiState.classDiagram)),e.main.viewModeController.initViewMode(),e.main.bottomDiv.hideHomeworkTab(),e.main.networkManager.initializePushClientManager(),(g=this.main.pruefungManagerForStudents)==null||g.close(),!f.is_teacher&&!f.is_admin&&!f.is_schooladmin&&(this.main.pruefungManagerForStudents=new iw(this.main),s.activePruefung!=null&&(this.main.workspaceList.filter(A=>A.pruefung_id==s.activePruefung.id)[0].getWorkspaceData(!0),this.main.pruefungManagerForStudents.startPruefung(s.activePruefung))),Hp()||alert(Ci.webGLNotSupported())}},s=>{y("#login-message").html(Ci.loginFailed()+s),y("#login-spinner>img").hide()})}loginWithVidisOrAutoLogin(t,e){this.loggedInWithVidis=e,y("#login").hide(),y("#main").css("visibility","visible"),y("#bitteWartenText").html(Ci.pleaseWait()),y("#bitteWarten").css("display","flex"),this.sendLoginRequest(t)}showLoginForm(){var t,e;y("#login").show(),y("#main").css("visibility","hidden"),y("#bitteWarten").css("display","none"),y("#login-message").empty(),this.main.interpreter.setState(ie.not_initialized),this.main.getMainEditor().setModel(Q.createModel("",Re.Java.monacoLanguageSelector)),this.main.projectExplorer.fileTreeview.clear(),this.main.projectExplorer.fileTreeview.setCaption(""),this.main.projectExplorer.workspaceTreeview.clear(),(e=(t=this.main.bottomDiv)==null?void 0:t.console)==null||e.clear(),this.main.interpreter.printManager.clear(),this.main.teacherExplorer!=null&&(this.main.teacherExplorer.removePanels(),this.main.teacherExplorer=null),this.main.currentWorkspace=null,this.main.user=null}}class nl{constructor(){r(this,"repositoryOn",!0);r(this,"workspaceList",[]);r(this,"workspacesOwnerId");r(this,"editor");r(this,"currentWorkspace");r(this,"projectExplorer");r(this,"teacherExplorer");r(this,"networkManager");r(this,"actionManager");r(this,"mainMenu");r(this,"synchronizationManager");r(this,"repositoryCreateManager");r(this,"repositoryUpdateManager");r(this,"repositoryCheckoutManager");r(this,"pruefungManagerForStudents");r(this,"spriteManager");r(this,"windowStateManager",new tw(this));r(this,"login");r(this,"debugger");r(this,"disassembler");r(this,"bottomDiv");r(this,"user");r(this,"gui_state_dirty",!1);r(this,"themeManager");r(this,"rightDiv");r(this,"programControlButtons");r(this,"debounceDiagramDrawing");r(this,"viewModeController");r(this,"languagemanager");r(this,"language");r(this,"interpreter");r(this,"settings");r(this,"debuggerDiv");r(this,"guiState")}showFile(t){!t||!(t instanceof Je)||this.projectExplorer.setFileActive(t)}getDisassembler(){return this.disassembler}addWorkspace(t){this.workspaceList.push(t)}getInterpreter(){return this.interpreter}getCurrentProgrammingLanguage(){return this.language}getCompiler(){return this.language.getCompiler(this)}getRepl(){var t;return(t=this.language)==null?void 0:t.getRepl(this)}getMainEditor(){return this.editor.editor}getReplEditor(){return this.bottomDiv.console.editor}isEmbedded(){return!1}getDebugger(){return this.debugger}getRightDiv(){return this.rightDiv}getBottomDiv(){return this.bottomDiv}getActionManager(){return this.actionManager}setFileActive(t){this.projectExplorer.setFileActive(t)}getSettings(){return this.settings}startupBeforeLogin(){fb(),this.languagemanager=new vb(this,document.body),this.login=new rw(this);let t=fc("singleUseToken"),e=fc("vidis")=="true";t?(this.login.initGUI(),this.login.loginWithVidisOrAutoLogin(t,e)):this.login.initGUI()}startupAfterLogin(){var g;this.actionManager=new pg(null),this.actionManager.init(),this.mainMenu=new RA(this),this.projectExplorer=new KA(this,y("#leftpanel>.jo_projectexplorer")),this.projectExplorer.initGUI(),this.bottomDiv=new wf(this,y("#bottomdiv-outer>.jo_bottomdiv-inner"),!0,!0,!0,!1),this.networkManager=new uA(this,this.bottomDiv.$updateTimer),this.rightDiv=new yf(this,document.body,!0),this.rightDiv.initGUI(),window.UZIP=null,this.viewModeController=new ew(y("#view-mode"),this),this.editor=new cf(this,!0,!1),this.editor.initGUI(y("#editor"));let t=this;y(window).on("resize",f=>{y("#bottomdiv-outer").css("height","150px"),y("#editor").css("height",window.innerHeight-150-30-2+"px"),t.editor.editor.layout(),y("#editor").css("height","")}),y(window).trigger("resize"),this.themeManager=new Xp(y(".joeCssFence")[0]),this.themeManager.switchTheme("dark");let e=new sg(this);this.debuggerDiv=y("#leftpanel>.jo_debugger")[0];let i=new mf(y("#rightdiv-inner .jo_run"),this),n=new ff(y("#rightdiv-inner .jo_run"),this),s=new uf(this),a=new fg(y("#rightdiv-inner .jo_graphics")[0],y("#rightdiv-inner .jo_coordinates")[0]),l=new Bg(y(window),this),h=new Vg(this),u=new gg(this);this.interpreter=new Pa(n,this.actionManager,a,l,e,h,i,s,u,this);let m=new ip;us.getInstance().registerMain(this,m),this.disassembler=new mg(this.bottomDiv.disassemblerTab.bodyDiv,this),this.programControlButtons=new bf(y("#controls"),this.interpreter,this.actionManager),new Fg(this),this.getMainEditor().updateOptions({readOnly:!0}),this.bottomDiv.initGUI(),this.repositoryOn&&(this.synchronizationManager=new gA(this),this.repositoryCreateManager=new bA(this),this.repositoryCreateManager.initGUI(),this.repositoryUpdateManager=new yA(this),this.repositoryUpdateManager.initGUI(),this.repositoryCheckoutManager=new fA(this),this.repositoryCheckoutManager.initGUI()),this.spriteManager=new cd(this),setTimeout(()=>{this.getMainEditor().layout();let f=new XA(this);f.initSliders(),this.viewModeController.registerSliders(f)},200),y(window).on("unload",async function(){navigator.sendBeacon&&t.user!=null&&(await t.networkManager.sendUpdatesAsync(!1,!0),t.interpreter.eventManager.fire("resetRuntime"),Si.getInstance().close())}),this.switchProgrammingLanguage(((g=this.getCurrentWorkspace())==null?void 0:g.settings.language)||"Java")}initTeacherExplorer(t){this.teacherExplorer!=null&&this.teacherExplorer.removePanels(),this.teacherExplorer=new JA(this,t),this.teacherExplorer.initGUI()}onCompilationFinishedWithNewExecutable(t){(this.settings.getValue("editor.stopRunningProgramOnWhenEditingSourcecode")=="yes"||this.interpreter.isRunningOrPaused()==!1)&&this.interpreter.setExecutable(t),setTimeout(()=>{var i,n;let e=(n=(i=this.bottomDiv)==null?void 0:i.errorManager)==null?void 0:n.showErrors(this.currentWorkspace);this.projectExplorer.renderErrorCount(this.currentWorkspace,e),this.drawClassDiagrams(!this.rightDiv.isClassDiagramActive())},20)}drawClassDiagrams(t){clearTimeout(this.debounceDiagramDrawing),this.debounceDiagramDrawing=setTimeout(()=>{var e,i;(i=(e=this.rightDiv)==null?void 0:e.classDiagram)==null||i.drawDiagram(this.currentWorkspace,t)},500)}removeWorkspace(t){this.workspaceList.splice(this.workspaceList.indexOf(t),1)}restoreWorkspaces(t,e){this.workspaceList=[],this.currentWorkspace=null,this.getMainEditor().updateOptions({readOnly:!0});for(let i of t.workspaces){let n=Oi.restoreFromData(i,this);this.workspaceList.push(n),i.id==this.user.currentWorkspace_id&&(this.currentWorkspace=n)}e&&new kA().start(this.workspaceList,this.networkManager,this),this.projectExplorer.renderWorkspaces(this.workspaceList),this.currentWorkspace==null&&this.workspaceList.length>0&&(this.currentWorkspace=this.workspaceList[0]),this.currentWorkspace!=null?this.projectExplorer.setWorkspaceActive(this.currentWorkspace,!0):this.projectExplorer.setFileActive(null),this.workspaceList.length==0&&Tr.showHelper("newWorkspaceHelper",this,y(this.projectExplorer.workspaceTreeview.addFolderButton.parent)),!this.guiState.helperHistory.folderButtonDone&&this.projectExplorer.workspaceTreeview.size(!0)>5?Tr.showHelper("folderButton",this,y(this.projectExplorer.workspaceTreeview.addFolderButton.parent)):Math.random()<.9&&Tr.showHelper("spritesheetHelper",this)}restoreWorkspaceFromData(t){return Oi.restoreFromData(t,this)}getCurrentWorkspace(){return this.currentWorkspace}adjustWidthToWorld(){this.rightDiv.adjustWidthToWorld()}showJUnitDiv(){this.bottomDiv.showJunitTab()}showProgramPosition(t,e,i=!0){this.showFile(t),e&&(e.startLineNumber&&(e=U.getStartPosition(e)),i&&this.getMainEditor().setPosition(e),this.getMainEditor().revealPositionInCenterIfOutsideViewport(e),this.getMainEditor().focus())}markFilesAsStartable(t,e){this.projectExplorer.markFilesAsStartable(t,e)}onStartFileClicked(t){this.interpreter.start(t)}hideDebugger(){this.debugger.hide(),this.projectExplorer.show()}showDebugger(){this.debugger.show(),this.projectExplorer.hide()}switchProgrammingLanguage(t){var i,n,s,a,l,h,u,m,g,f;let e=us.getInstance().getLanguageByName(t);if(e!=this.language){switch((n=(i=this.language)==null?void 0:i.getCompiler(this))==null||n.eventManager.off(this.onCompilationFinishedWithNewExecutable),(a=(s=this.language)==null?void 0:s.getCompiler(this))==null||a.eventManager.off(this.onCompilationFinished),(l=this.language)==null||l.disable(this),this.language=e,this.language.enable(this),(u=(h=this.getCompiler())==null?void 0:h.eventManager)==null||u.on("compilationFinishedWithNewExecutable",this.onCompilationFinishedWithNewExecutable,this),(g=(m=this.getCompiler())==null?void 0:m.eventManager)==null||g.on("compilationFinished",this.onCompilationFinished,this),(f=this.debugger)==null||f.remove(),this.debuggerDiv.innerHTML="",this.language.getDebuggerType()){case"java":this.debugger=new of(this.debuggerDiv,!this.isEmbedded(),this);break;case"assembly":this.debugger=new rg(this.debuggerDiv,!this.isEmbedded(),this);break}this.debugger.hide()}}onCompilationFinished(){var t;(t=this.getInterpreter())==null||t.onFileSelected()}async setHorizontalSliderPosition(t){(await this.viewModeController.getSliders()).setSliderRightPosition(t)}}class Tr{static openHelper(t,e,i){let n=y(".jo_arrow_box");n.removeClass(["jo_arrow_box_left","jo_arrow_box_right","jo_arrow_box_top","jo_arrow_box_bottom"]),n.addClass("jo_arrow_box_"+i),n.css({left:"",right:"",top:"",bottom:""});let s=e.offset(),a=y("body"),l=34;switch(i){case"bottom":n.css({left:s.left+e.width()/2-l,bottom:a.height()-s.top+l});break;case"top":n.css({left:s.left+e.width()/2-l,top:s.top+e.height()+26});break;case"left":n.css({left:s.left+e.width()+l,top:s.top+e.height()/2-l});break;case"right":n.css({right:a.width()-s.left,top:s.top+e.height()/2-l});break}n.find("span").html(t);let h=n.find(".jo_button");h.on("click",u=>{u.stopPropagation(),h.off("click"),Tr.close()}),n.fadeIn(800)}static close(){y(".jo_arrow_box").fadeOut(800)}static showHelper(t,e,i){i=i instanceof y?i:y(i);let n;if(e instanceof nl)n=e;else return;let s=n.guiState.helperHistory;if(t=="speedControlHelper"&&s.speedControlHelperDone&&(t="stepButtonHelper"),t=="spritesheetHelper"&&!s.newFileHelperDone)return;let a=t+"Done";if(s!=null&&(s[a]==null||!s[a])){s[a]=!0,n.networkManager.sendUpdateGuiState();let l="",h="left";switch(t){case"folderButton":l=E.HelperFolder(),h="top";break;case"repositoryButton":l=E.HelperRepositoryButton(),h="top";break;case"speedControlHelper":l=E.HelperSpeedControl(),h="top",i=n.programControlButtons.speedControl.$grip;break;case"newFileHelper":l=E.HelperNewFile(),h="left";break;case"newWorkspaceHelper":l=E.HelperNewWorkspace(),h="left";break;case"homeButtonHelperNew":l=E.HelperHome(),h="top";break;case"stepButtonHelper":l=E.HelperStepButtons(),h="top",i=n.programControlButtons.getButton("interpreter.stepOver");break;case"consoleHelper":l=E.HelperConsole(),h="bottom",i=y(n.bottomDiv.console.consoleCommandline);break;case"spritesheetHelper":l=E.HelperSpritesheet(),h="top",i=y("#mainmenu").find('div:contains("Sprites")');break}l!=""&&i!=null&&i.length>0&&Tr.openHelper(l,i,h)}}}class sn{static isArray(t){return Array.isArray(t)}static isObject(t){return!(typeof t!="object"||!t.constructor.type||t.constructor.isPrimitiveTypeWrapper)}static isEnum(t){return t instanceof Yi}static isPrimitiveTypeOrNull(t){return t===null?!0:!(typeof t=="object"||Array.isArray(t))}static getTypeAsString(t){return sn.getTypeIntern(t)}static getTypeIntern(t){if(t==null)return"null";if(Array.isArray(t)){if(t.length==0)return"[]";let e=t[0];return sn.getTypeIntern(e)+"[]"}if(typeof t=="object")return t.constructor.type?t.constructor.type.toString():"Object";switch(typeof t){case"string":return"String";case"boolean":return"boolean";case"number":return Math.trunc(t)==t?"int":"double"}return""}static hasChildren(t){return t&&(sn.isArray(t)||sn.isObject(t)&&!sn.isPrimitiveTypeOrNull(t)&&!sn.isEnum(t))}static getChildren(t){let e=[];if(Array.isArray(t)){let i=0;for(let n of t)e.push({identifier:""+i++,value:n})}else if(sn.isObject(t)){let i=t.constructor.type;if(t.getElements){let n=0;for(let s of t.getElements())e.push({identifier:"["+n+++"]",value:s})}else{let n=i.getFields();i instanceof mt&&(n=i.getOwnAndInheritedFields());for(let s of n)s.internalName&&e.push({identifier:s.identifier,value:t[s.internalName]})}}return e}static renderValue(t,e=20,i,n){if(t==null)return"null";if(typeof t=="object"&&!Array.isArray(t)){let s=t.constructor.type;return t instanceof Yi?sn.renderEnum(t,s).substring(0,e):s.isPrimitiveTypeWrapper?t.debugOutput().substring(0,e):s.toString()+"-object"}else return Array.isArray(t)?"["+t.length+"]":sn.renderPrimitiveValue(t,i).substring(0,e)}static renderPrimitiveValue(t,e){switch(typeof t){case"string":let i=JSON.stringify(t);return e&&e.identifier=="char"&&(i.startsWith('"')&&i.endsWith('"')&&(i=i.substring(1,i.length-2)),i="'"+i+"'"),i;default:return""+t}}static renderEnum(t,e){return e.identifier+"."+t.name}}class ka{constructor(t,e,i,n,s,a,l,h=null){r(this,"caption");r(this,"parent");r(this,"children");r(this,"canOpen");r(this,"isOpen",!1);r(this,"identifier");r(this,"value");r(this,"$consoleEntry");this.isCommand=t,this.valueAsString=n,this.withBottomBorder=l,this.color=h,this.caption=e,this.parent=a,a!=null&&a.children.push(this),this.value=i,this.identifier=s,this.render()}getLevel(){return this.parent==null?0:this.parent.getLevel()+1}getIndent(){return this.getLevel()==0?0:15}render(){this.$consoleEntry=y("
"),this.$consoleEntry.addClass("jo_consoleEntry"),this.$consoleEntry.css("margin-left",""+this.getIndent()+"px"),this.withBottomBorder&&this.$consoleEntry.addClass("jo_withBorder");let t=y('
');this.$consoleEntry.append(t),sn.hasChildren(this.value)?(this.canOpen=!0,this.$consoleEntry.addClass("jo_canOpen"),this.$consoleEntry.append(y('
')),this.$consoleEntry.find(".jo_ceFirstline").on("mousedown",e=>{this.value!=null?(this.children==null&&this.onFirstOpening(),this.$consoleEntry.toggleClass("jo_expanded"),this.isOpen=!this.isOpen):this.children=null,e.stopPropagation()})):this.caption==null&&this.getLevel()==0&&this.$consoleEntry.addClass("jo_cannotOpen"),this.renderValue()}onFirstOpening(){this.children=[];let t=this.$consoleEntry.find(".jo_ceChildContainer"),e=sn.getChildren(this.value);for(let i=0;i100){let i=new ka(!1,null,""+(e.length-100)+" weitere Elemente...",void 0,null,this,!1,"var(--console-fieldidentifier)");i.render(),t.append(i.$consoleEntry)}}renderValue(){let t=this.$consoleEntry.find(".jo_ceFirstline");if(this.isCommand){if(this.caption!=null)if(typeof this.caption=="string")Q.colorize(this.caption,"myJava",{tabSize:3}).then(e=>{t.append(y(e))});else{let e=y('');e.append(this.caption),t.append(e)}else t.append(y('Kein Wert zurückgegeben.'));return}else{if(this.identifier!=null){let n=y(''+this.identifier+" ");this.color!=null&&n.css("color",this.color),t.append(n)}let e=y(''),i=this.valueAsString||sn.renderValue(this.value,30);if(this.value!=null&&typeof this.value=="object"&&!i.endsWith("-object")){let n=this.value.constructor.type;n&&n.identifier.toLowerCase()!="string"&&(i=n.identifier+" "+i)}e.text(i.substring(0,100)+(i.length>100?"...":"")),t.append(e)}}detachValue(){this.value=void 0,this.$consoleEntry.removeClass("jo_canOpen"),this.getLevel()==0&&this.caption==null&&this.$consoleEntry.addClass("jo_cannotOpen")}}class sw{constructor(t,e){r(this,"editor");r(this,"history",[]);r(this,"historyPos",0);r(this,"statements",[]);r(this,"timerHandle");r(this,"consoleEntries",[]);r(this,"tab");r(this,"errorMarker",new ip);r(this,"lastStatement","");r(this,"lastCompileTime",0);r(this,"consoleTop");r(this,"consoleCommandline");if(this.main=t,this.tabManager=e,e==null)return;this.tab=new mn("Console",Bs.console(),["jo_editorFontSize","jo_consoleTab"]),e.addTab(this.tab);let i=z.makeDiv(this.tab.bodyDiv,"jo_console-inner");this.consoleTop=z.makeDiv(i,"jo_scrollable","jo_console-top"),this.consoleCommandline=z.makeDiv(i,"jo_commandline")}initConsoleClearButton(){let t=this,e=y(this.tab.bodyDiv),i=y(``);this.tabManager.insertIntoRightDiv(i[0]);let n=y(``);this.tabManager.insertIntoRightDiv(n[0]),e.on("myshow",()=>{i.show(),n.show(),t.editor.layout()}),e.on("myhide",()=>{i.hide(),n.hide()}),i.on("mousedown",s=>{s.stopPropagation(),t.clear()}),n.on("mousedown",s=>{s.stopPropagation(),t.copyToClipboard()})}initGUI(){if(this.tabManager==null)return;this.initConsoleClearButton(),this.tab.onShow=()=>{this.editor.layout()},this.editor=Q.create(this.consoleCommandline,{value:[""].join(` `),automaticLayout:!1,renderLineHighlight:"none",guides:{bracketPairs:!1,highlightActiveIndentation:!1,indentation:!1},overviewRulerLanes:0,lineNumbers:"off",glyphMargin:!1,folding:!1,lineDecorationsWidth:0,lineNumbersMinChars:0,fixedOverflowWidgets:!0,language:"myJava",fontSize:14,fontFamily:window.javaOnlineFont==null?"Consolas, Roboto Mono":window.javaOnlineFont,fontWeight:"500",roundedSelection:!0,occurrencesHighlight:"multiFile",suggest:{localityBonus:!0,snippetsPreventQuickSuggestions:!1},minimap:{enabled:!1},scrollbar:{vertical:"hidden",horizontal:"hidden"},theme:"myCustomThemeDark",acceptSuggestionOnEnter:"on"}),this.editor.layout();let t=this;this.editor.addAction({id:"action_enter",label:"Enter key",keybindings:[Zo.Enter],precondition:"!suggestWidgetVisible",run:()=>{var i;(i=this.editor.getModel())!=null&&i.getValue()&&setTimeout(async()=>{var a,l,h,u;let n=t.editor.getModel().getValue(Q.EndOfLinePreference.LF,!1);if(!n||n=="")return;t.history.push(n),t.statements.push(n),t.historyPos=0;let s=await t.main.getRepl().executeAsync(n,!1);this.showCompilationErrors(s==null?void 0:s.errors),typeof s<"u"&&(typeof s.value>"u"&&((a=s.errors)==null?void 0:a.length)>0&&((l=s.errors)!=null&&l.find(m=>m.level=="error"))?t.writeConsoleError(n,(h=s.errors)==null?void 0:h.find(m=>m.level=="error")):t.writeConsoleEntry(n,s),(u=this.editor.getModel())==null||u.setValue("")),setTimeout(()=>{this.editor.focus()},100)},10)}}),this.editor.addAction({id:"action_arrow_up",label:"ArrowUp",keybindings:[Zo.UpArrow],precondition:"!suggestWidgetVisible && !parameterHintsVisible",run:()=>{let e=t.history.length-(t.historyPos+1);if(e>=0){t.historyPos++;let i=t.history[e];t.editor.setValue(i),t.editor.setPosition({lineNumber:1,column:i.length+1}),this.compileAndShowErrors()}}}),this.editor.addAction({id:"action_arrow_down",label:"ArrowDown",keybindings:[Zo.DownArrow],precondition:"!suggestWidgetVisible && !parameterHintsVisible",run:()=>{let e=t.history.length-(t.historyPos-1);if(e<=t.history.length-1){t.historyPos--;let i=t.history[e];t.editor.setValue(i),t.editor.setPosition({lineNumber:1,column:i.length+1})}else t.editor.setValue(""),t.historyPos=0;this.compileAndShowErrors()}}),this.editor.onDidChangeModelContent(e=>{var n;let i=(n=this.editor.getModel())==null?void 0:n.getValue();i&&i!=this.lastStatement&&(this.lastStatement=i,this.compileAndShowErrors())}),y(this.tab.headingDiv).on("mousedown",()=>{Tr.showHelper("consoleHelper",this.main),setTimeout(()=>{t.editor.focus()},500)})}compileAndShowErrors(){setTimeout(()=>{if(performance.now()-this.lastCompileTime>390){let t=this.compile();t&&this.showCompilationErrors(t.module.errors),this.lastCompileTime=performance.now()}},400)}compile(){let t=this.editor.getModel().getValue(Q.EndOfLinePreference.LF,!1);return this.main.getRepl().compile(t,!1)}execute(){}showCompilationErrors(t){var i;if(!t)return;let e=(i=this.main.getReplEditor())==null?void 0:i.getModel();e&&this.errorMarker.markErrors(t,e)}showTab(){this.tab.show()}replReturnValueToOutput(t){if(typeof t>"u"||!t.text)return;let e=t.type?t.type.toString()+" ":"",i=t.text;switch(i.value&&(i=i.value),e){case"string ":case"String ":t.value?i='"'+i+'"':i="null";break;case"char ":case"Character ":i="'"+i+"'";break}return i.length>200&&(i=i.substring(0,200)+" ..."),i}writeConsoleError(t,e){if(this.tabManager==null)return;let i=y(this.consoleTop),n=new ka(!0,t,null,null,null,null,!1);this.consoleEntries.push(n),i.append(n.$consoleEntry);let s=new ka(!1,null,e.message,e.message,Bs.error()+":",null,!0,"#ff0000");this.consoleEntries.push(s),i.append(s.$consoleEntry),setTimeout(()=>{i[0].scrollTop=i[0].scrollHeight},30)}writeConsoleEntry(t,e,i=null){if(this.tabManager==null)return;let n=y(this.consoleTop),s=new ka(!0,t,null,null,null,null,e==null,i);this.consoleEntries.push(s),n.append(s.$consoleEntry);let a=this.replReturnValueToOutput(e);if(a){let l=new ka(!1,null,e.value,a,null,null,!0,i);this.consoleEntries.push(l),n.append(l.$consoleEntry)}setTimeout(()=>{n[0].scrollTop=n[0].scrollHeight},30)}clear(){y(this.consoleTop).children().remove(),this.consoleEntries=[],this.statements=[]}detachValues(){for(let t of this.consoleEntries)t.detachValue()}clearExceptions(){if(this.tabManager==null)return;y(this.consoleTop).find(".jo_exception").parents(".jo_consoleEntry").remove()}copyToClipboard(){Ld(this.statements.join(` `))}}class aw{constructor(t,e){r(this,"oldDecorations",new Map);r(this,"$errorDiv");r(this,"tab");this.main=t,this.tab=new mn("Errors",Cr.errors(),["jo_active","jo_scrollable","jo_editorFontSize","jo_errorsTab"]),e.addTab(this.tab),this.$errorDiv=y(this.tab.bodyDiv)}showErrors(t){let e=new Map;this.$errorDiv.empty();let i=!1;for(let n of t.getFiles()){let s=[],a=this.main.getCompiler().getSortedAndFilteredErrors(n);e.set(n,a.filter(l=>l.level=="error").length);for(let l of a)this.processError(l,n,s);if(s.length>0&&this.$errorDiv.length>0){i=!0;let l=y('
'+n.name+" 
");this.$errorDiv.append(l);for(let h of s)this.$errorDiv.append(h)}}return!i&&this.$errorDiv.length>0&&this.$errorDiv.append(y(`
${Cr.noErrorsFound()}
`)),e}processError(t,e,i){let n=y('
'),s=y('['+t.range.startLineNumber+'/'+t.range.startColumn+"]: "),a="";switch(t.level){case"error":a=`${Cr.error()}: `;break;case"warning":a=`${Cr.warning()}: `;break;case"info":a=`${Cr.info()}: `;break}let l=y('
'+a+t.message+"
");n.append(s).append(l);let h=this;n.on("mousedown",u=>{this.$errorDiv.find(".jo_error-line").removeClass("jo_active"),n.addClass("jo_active"),h.showError(e,t)}),i.push(n)}showError(t,e){var i;this.main instanceof nl&&t!=((i=this.main.getCurrentWorkspace())==null?void 0:i.getCurrentlyEditedFile())&&(this.main.editor.dontDetectLastChange(),this.main.projectExplorer.setFileActive(t)),this.main instanceof Cf&&this.main.setFileActive(t),this.main.getMainEditor().revealRangeInCenter(e.range),this.main.getMainEditor().setPosition(U.getStartPosition(e.range)),setTimeout(()=>{this.main.getMainEditor().focus()},10)}hideAllErrorDecorations(){var e;let t=(e=this.main.getCurrentWorkspace())==null?void 0:e.getFiles();for(let i of t){let n=i.getMonacoModel(),s=this.oldDecorations.get(n)||[];s=n.deltaDecorations(s,[]),this.oldDecorations.delete(n)}}clearErrors(){this.$errorDiv.empty()}}class ow{constructor(t,e){r(this,"$homeworkTabLeft");r(this,"$homeworkTabRight");r(this,"$showRevisionButton");r(this,"showRevisionActive",!1);r(this,"diffEditor");r(this,"tab");this.main=t,this.tabManager=e,this.tab=new mn("Homework",vi.homework(),["jo_homeworkTab"]),e.addTab(this.tab)}initGUI(){let t=this,e=y(this.tab.bodyDiv);e.append(this.$homeworkTabLeft=L("","jo_homeworkTabLeft jo_scrollable")),e.append(this.$homeworkTabRight=L("","jo_homeworkTabRight jo_scrollable")),this.$showRevisionButton=L("","jo_button jo_active jo_homeworkRevisionButton",""),y("#view-mode").prepend(this.$showRevisionButton),this.$showRevisionButton.on("click",()=>{var i;this.showRevisionActive?this.hideRevision():this.showRevision((i=t.main.getCurrentWorkspace())==null?void 0:i.getCurrentlyEditedFile())}),this.$showRevisionButton.hide(),y("#diffEditor").hide()}showHomeWorkRevisionButton(){this.$showRevisionButton.text(this.showRevisionActive?vi.defaultView():vi.showRemarks()),this.$showRevisionButton.show()}hideHomeworkRevisionButton(){this.$showRevisionButton.hide()}showRevision(t){y("#editor").hide(),y("#diffEditor").show();var e=Q.createModel(t.text_before_revision,Re.Java.monacoLanguageSelector),i=Q.createModel(t.getText(),Re.Java.monacoLanguageSelector);this.diffEditor=Q.createDiffEditor(document.getElementById("diffEditor"),{enableSplitViewResizing:!0,originalEditable:!1,readOnly:!0,renderSideBySide:!0}),this.diffEditor.setModel({original:e,modified:i}),this.showRevisionActive=!0,this.showHomeWorkRevisionButton()}hideRevision(){this.showRevisionActive&&(y("#diffEditor").hide(),this.diffEditor.dispose(),this.diffEditor=null,y("#editor").show(),this.showRevisionActive=!1,this.showHomeWorkRevisionButton())}attachToWorkspaces(t){let e=[],i={};t.forEach(a=>{a.getFiles().forEach(l=>{let h=l.submitted_date;if(h!=null){let u=ub(h),m=cb(u),g=i[m];g==null&&(g={date:u,day:m,modules:[]},i[m]=g,e.push(g)),g.modules.push({file:l,workspace:a})}})}),this.$homeworkTabLeft.empty(),this.$homeworkTabRight.empty();let n=this;this.$homeworkTabLeft.append(L("","jo_homeworkHeading",vi.filingDays()+":")),e.sort((a,l)=>a.date.getFullYear()!=l.date.getFullYear()?-Math.sign(a.date.getFullYear()-l.date.getFullYear()):a.date.getMonth()!=l.date.getMonth()?-Math.sign(a.date.getMonth()-l.date.getMonth()):a.date.getDate()!=l.date.getDate()?-Math.sign(a.date.getDate()-l.date.getDate()):0);let s=!0;e.forEach(a=>{a.modules.sort((h,u)=>h.file.name.localeCompare(u.file.name));let l=L("","jo_homeworkDate",a.day);this.$homeworkTabLeft.append(l),l.on("click",h=>{this.$homeworkTabLeft.find(".jo_homeworkDate").removeClass("jo_active"),l.addClass("jo_active"),n.select(a)}),s&&(s=!1,l.addClass("jo_active"),n.select(a))})}select(t){this.$homeworkTabRight.empty(),this.$homeworkTabRight.append(L("","jo_homeworkHeading",vi.givenFiles()+":"));let e=this;t.modules.forEach(i=>{let n=y(`
${vi.workspace()} ${i.workspace.name}, ${vi.file()} ${i.file.name} (${vi.dateFiled()}: ${i.file.submitted_date} )
`);e.$homeworkTabRight.append(n),n.on("click",()=>{e.main.projectExplorer.setWorkspaceActive(i.workspace,!0),e.main.projectExplorer.setFileActive(i.file),e.main.projectExplorer.fileTreeview.selectElement(i.file,!1)})})}}const O=class O{};r(O,"schoolsWithAdmins",()=>d({de:"Schulen mit Admins",en:"Schools with admins"})),r(O,"schools",()=>d({de:"Schulen",en:"Schools"})),r(O,"identifier",()=>d({de:"Bezeichnung",en:"Identifier"})),r(O,"abbreviation",()=>d({de:"Kürzel",en:"Abbr."})),r(O,"vidisID",()=>d({de:"Vidis-Kennung",en:"Vidis-id"})),r(O,"classes",()=>d({de:"Klassen",en:"classes"})),r(O,"users",()=>d({de:"Users",en:"Users"})),r(O,"teachers",()=>d({de:"Lehrkräfte",en:"Teachers"})),r(O,"changePassword",()=>d({de:"Passwort ändern...",en:"Change password..."})),r(O,"moveToSchool",()=>d({de:"Versetzen in Schule...",en:"Move to school..."})),r(O,"username",()=>d({de:"Benutzername",en:"Username"})),r(O,"firstName",()=>d({de:"Rufname",en:"First name"})),r(O,"name",()=>d({de:"Name",en:"Name"})),r(O,"lastName",()=>d({de:"Familienname",en:"Last name"})),r(O,"vidisAbbreviation",()=>d({de:"Vidis-Kürzel",en:"Vidis-Abbr."})),r(O,"isAdmin",()=>d({de:"Admin",en:"Admin"})),r(O,"locked",()=>d({de:"Locked",en:"Locked"})),r(O,"selectTeacherToMove",()=>d({de:"Zum Verschieben in eine andere Schule muss genau eine Lehrkraft ausgewählt werden.",en:"Select teacher to move."})),r(O,"schoolsIdenticalThereforeNothingToDo",()=>d({de:"Die gewählte Schule stimmt mit der bisherigen Schule überein, es wird daher nichts verändert.",en:"Selected school is equal to old school, therefore nothing to do."})),r(O,"errorMovingTeacher",()=>d({de:"Fehler beim Versetzen der Lehrkraft: ",en:"Error moving teacher to other school: "})),r(O,"chooseAdminToChangePassword",()=>d({de:"Zum Ändern eines Passworts muss genau ein Admin ausgewählt werden.",en:"Select one admin to change her/his password."})),r(O,"pleaseWaitForPasswordHashing",()=>d({de:"Bitte warten, das Hashen
des Passworts kann
bis zu 1 Minute
dauern...",en:"Please wait. Password hashing
may take up to 1 minute."})),r(O,"passwordChangedSuccessfully",(t,e,i)=>d({de:"Das Passwort für "+t+" "+e+" ("+i+") wurde erfolgreich geändert.",en:""})),r(O,"errorSettingPassword",()=>d({de:"Fehler beim Ändern des Passworts: ",en:"Error when setting password: "})),r(O,"nameOfSchool",()=>d({de:"Name der Schule",en:"Name of school"})),r(O,"teachersOfSchool",()=>d({de:"Lehrkräfte der Schule ",en:"Teachers of school "})),r(O,"errorFetchingData",()=>d({de:"Fehler beim Holen der Daten: ",en:"Error fetching data: "})),r(O,"selectSchoolToAddTeachers",()=>d({de:"Wenn Sie Lehrkräfte hinzufügen möchten, muss links genau eine Schule ausgewählt sein.",en:"Select a school (in left table) to add teachers."})),r(O,"classesWithStudents",()=>d({de:"Klassen mit Schülern",en:"Classes with students"})),r(O,"count",()=>d({de:"Anz.",en:"Count"})),r(O,"teacher",()=>d({de:"Lehrkraft",en:"Teacher"})),r(O,"secondTeacher",()=>d({de:"Zweitlehrkraft",en:"Second teacher"})),r(O,"noSecondTeacher",()=>d({de:"Keine Zweitlehrkraft",en:"No second teacher"})),r(O,"students",()=>d({de:"Schüler/-innen",en:"Students"})),r(O,"changeClass",()=>d({de:"Klasse ändern...",en:"Change class..."})),r(O,"classWord",()=>d({de:"Klasse",en:"class"})),r(O,"nickname",()=>d({de:"Nickname (kein Klartext!)",en:"Nickname (not real name!)"})),r(O,"vidisClass",()=>d({de:"Vidis-Klasse",en:"Vidis-class"})),r(O,"movedStudentsSuccessfully",t=>d({de:"Die Schüler/-innen wurden erfolgreich in die Klasse "+t+" verschoben.",en:"Successfully moved students to class "+t+"."})),r(O,"errorMovingStudents",()=>d({de:"Fehler beim Versetzen der Schüler/-innen: ",en:"Error moving students to other class: "})),r(O,"selectStudentToSetPassword",()=>d({de:"Zum Ändern eines Passworts muss genau ein Schüler ausgewählt werden.",en:"Select student to set password."})),r(O,"errorDeletingStudents",()=>d({de:"Fehler beim Löschen der Schüler/-innen: ",en:"Error deleting students: "})),r(O,"selectClassToAddStudents",()=>d({de:"Bitte wählen Sie links die Klasse aus, der die Schülerin/der Schüler hinzugefügt werden soll.",en:"Select class (in table on left side) to which new student belongs to."})),r(O,"errorCreatingUser",()=>d({de:"Beim Anlegen des Benutzers ist ein Fehler aufgetreten: ",en:"Error adding user: "})),r(O,"newClass",()=>d({de:"Neue Klasse: ",en:"New Class: "})),r(O,"cancel",()=>d({de:"Abbrechen",en:"Cancel"})),r(O,"ok",()=>d({de:"OK",en:"OK"})),r(O,"chooseNewClass",()=>d({de:"Neue Klasse wählen",en:"Choose new class"})),r(O,"exportImportSchools",()=>d({de:"Schulen exp./imp.",en:"Export/import schools"})),r(O,"exportSelectedSchools",()=>d({de:"Selektierte Schulen exportieren",en:"Export selected schools"})),r(O,"importSchools",()=>d({de:"Schulen importieren:",en:"Import schools:"})),r(O,"pleaseWaitForDataUpload",()=>d({de:"Die Daten werden hochgeladen. Bitte warten...",en:"Please wait for data to upload..."})),r(O,"errorSendingFiles",()=>d({de:"Fehler beim Senden der Dateien.",en:"Error sending files."})),r(O,"moveTeacher",()=>d({de:"Lehrkraft verschieben: ",en:"Move teacher: "})),r(O,"oldSchool",()=>d({de:"Bisherige Schule",en:"Current school"})),r(O,"newSchool",()=>d({de:"Neue Schule",en:"New school"})),r(O,"nameOfTest",()=>d({de:"Name der Prüfung: ",en:"Test name: "})),r(O,"templateWorkspace",()=>d({de:"Vorlage-Worksp.",en:"Template worksp."})),r(O,"createNewTest",()=>d({de:"Neue Prüfung anlegen",en:"Create new test"})),r(O,"newPassword",()=>d({de:"Neues Passwort:",en:"New Password:"})),r(O,"setPasswordFor",()=>d({de:"Passwort setzen für: ",en:"Set password for: "})),r(O,"manageTests",()=>d({de:"Prüfungen verwalten",en:"Manage tests"})),r(O,"noTemplateWorkspace",()=>d({de:"Kein Vorlage-Workspace",en:"No template workspace"})),r(O,"pruefungen",()=>d({de:"Prüfungen",en:"Tests"})),r(O,"date",()=>d({de:"Datum",en:"Date"})),r(O,"state",()=>d({de:"Zustand",en:"State"})),r(O,"mark",()=>d({de:"Note",en:"Mark"})),r(O,"points",()=>d({de:"Punkte",en:"Points"})),r(O,"comment",()=>d({de:"Kommentar",en:"Comment"})),r(O,"markShort",()=>d({de:"N",en:"M"})),r(O,"pointsShort",()=>d({de:"P",en:"P"})),r(O,"attendanceShort",()=>d({de:"anw.",en:"att."})),r(O,"attendance",()=>d({de:"Anwesend",en:"Attendance"})),r(O,"manual",()=>d({de:"händisch",en:"manual"})),r(O,"modeShort",()=>d({de:"abw./verl.",en:"abs./ext."})),r(O,"groupShort",()=>d({de:"Gr.",en:"Gr."})),r(O,"groupLong",()=>d({de:"Gruppe (A oder B)",en:"Group (A or B)"})),r(O,"modeLong",()=>d({de:"Abwesend/verlängert",en:"Absent/extended"})),r(O,"stateOfSelectedTest",()=>d({de:"Zustand der ausgewählten Prüfung:",en:"State of selected test:"})),r(O,"templateWorkspacesCaption",()=>d({de:"Vorlage-Workspaces der selektierten Prüfung:",en:"Template workspaces of selected test:"})),r(O,"groupA",()=>d({de:"Gruppe A:",en:"Group A:"})),r(O,"groupB",()=>d({de:"Gruppe B:",en:"Group B:"})),r(O,"preparation",()=>d({de:"Vorbereitung",en:"Preparation"})),r(O,"testRunning",()=>d({de:"Prüfung läuft",en:"Test running"})),r(O,"correction",()=>d({de:"Korrektur",en:"Correction"})),r(O,"issueTest",()=>d({de:"Herausgabe",en:"Issue test"})),r(O,"stateBack",()=>d({de:"Zustand zurück",en:"State back"})),r(O,"stateForward",()=>d({de:"Zustand vor",en:"State forward"})),r(O,"cantSetTestToState",t=>d({de:"Die Prüfung läuft schon. Sie kann nicht mehr in den Zustand "+t+" versetzt werden.",en:"Test is already running, therefore it can't be set to state "+t+"."})),r(O,"sureToStartTestAgain",()=>d({de:"Soll die Prüfung wirklich sofort erneut gestartet werden?",en:"Are you sure to start test again?"})),r(O,"sureToStartTest",()=>d({de:"Soll die Prüfung wirklich sofort gestartet werden?",en:"Are you sure to start test?"})),r(O,"actionsForSelectedTest",()=>d({de:"Aktionen für die ausgewählte Prüfung:",en:"Actions for selected test:"})),r(O,"printAll",()=>d({de:"Alle Arbeiten drucken...",en:"Print all student tests..."})),r(O,"file",()=>d({de:"Datei: ",en:"File: "})),r(O,"studentsFile",()=>d({de:"Datei der Schülerin/des Schülers:",en:"Student's file"})),r(O,"alterClassOnlyInStatePreparation",()=>d({de:'Die Klasse kann nur im Zustand "Vorbereitung" noch geändert werden.',en:'You can alter class only in state "Preparation".'})),r(O,"alterTemplateWorkspaceOnlyInStatePreparation",()=>d({de:'Der Vorlagenworkspace kann nur im Zustand "Vorbereitung" noch geändert werden.',en:'You can alter template workspace only in state "Preparation".'})),r(O,"noTestSelected",()=>d({de:"Keine Prüfung ausgewählt.",en:"No test selected."})),r(O,"nextUpdatein",()=>d({de:"Nächstes Update in ",en:"Next update in "})),r(O,"error",()=>d({de:"Es ist ein Fehler aufgetreten: ",en:"Error: "})),r(O,"importStudents",()=>d({de:"Schülerdatenimport",en:"Import students"})),r(O,"password",()=>d({de:"Passwort",en:"Password"})),r(O,"step4Description",t=>d({de:`Die Schüler/innen wurden erfolgreich angelegt und der Klasse/den Klassen (ersatzweise: ${t}) zugeordnet. Eine Liste der Zugangsdaten zum Ausdrucken erhalten Sie durch Klick auf den Button "Drucken...". `,en:`Student accounts have been successfully created and moved to given class (default: ${t}). Click "Print..." to get a list of credentials.`})),r(O,"step4Done",()=>d({de:"Schritt 4: Fertig!",en:"Step 4: Done!"})),r(O,"printDots",()=>d({de:"Drucken...",en:"Print..."})),r(O,"sname",()=>d({de:"Name",en:"Name"})),r(O,"step3Description",t=>d({de:`Die Schüler/innen können jetzt angelegt und der Klasse ${t} zugeordnet werden.`,en:`Ready to create student accounts and connect them to class ${t}.`})),r(O,"step3Heading",()=>d({de:"Schritt 3: Benutzer anlegen",en:"Step 3: Create users"})),r(O,"back",()=>d({de:"Zurück",en:"Back"})),r(O,"createUsers",()=>d({de:"Benutzer anlegen",en:"Create users"})),r(O,"waitForUserCreation",()=>d({de:"Die Benutzer werden angelegt. Bitte warten...",en:"Creating user accounts. Please wait..."})),r(O,"step2Description",()=>d({de:`Bitte wählen Sie im Auswahlfeld die Klasse aus, in die die Schülerdaten importiert werden sollen, für die in den Eingabedaten keine Klasse angegeben ist. Sie können die Daten in der Tabelle noch bearbeiten, bevor Sie sie zur Überprüfung (noch kein Import!) absenden.`,en:"Please choose class to import users to if no class is specified in input data. You may edit user data in table left before its imported."})),r(O,"step2heading",()=>d({de:"Schritt 2: Daten überprüfen",en:"Step 2: Check data"})),r(O,"checkingData",()=>d({de:"Daten überprüfen...",en:"Checking data..."})),r(O,"errorLog",()=>d({de:"Fehlerprotokoll",en:"Error log"})),r(O,"step1description",()=>d({de:` Zum Importieren wird eine Tabelle mit den Spalten Rufname, Familienname, Username, (optional:) Klasse und (ebenso optional:) Passwort benötigt, wobei die Daten in den Zellen jeweils mit Tab-Zeichen getrennt sind. Sie erhalten dieses Format beispielsweise, indem Sie eine Tabelle in Excel in die Zwischenablage kopieren.
Falls die erste Zeile Spaltenköpfe mit den korrekten Bezeichnern (Klasse, Rufname, Familienname, Username, Passwort) enthält, kümmert sich der Import-Algorithmus um die richtige Reihenfolge und blendet ggf. auch überflüssige Spalten aus. Falls eine Zeile kein Passwort enthält, setzt die Online-IDE ein Zufallspasswort.
Passwortregeln: Aus den Kategorien Kleinbuchstaben, Großbuchstaben, Ziffern und Sonderzeichen müssen mindestens drei in jedem Passwort vertreten sein. Die Mindestlänge beträgt 8 Zeichen.
Bitte fügen Sie den Inhalt der Tabelle per Copy-Paste in dieses Eingabefeld ein:`,en:`To import student data you need a tab-separated table with colums FirstName, LastName, Username, Class (optional) and password(optional).
You get this format from Excel or other spreadsheet software by copying to clipboard.
Password rules: At least three of the following categories must be represented in each password: lowercase letters, uppercase letters, digits, and special characters. Minimum length is 8 characters.
Column order is arbitrary if you provide a first row with header-identifiers given above. Random passwords are generated for each student without one.
Please insert table in textfield below by copy/paste.`})),r(O,"step1heading",()=>d({de:"Schritt 1: Daten einlesen",en:"Step 1: Import data per copy/paste"})),r(O,"continue",()=>d({de:"Weiter",en:"Continue"})),r(O,"usernamesAlreadyUsed",()=>d({de:"Diese Benutzernamen sind schon anderen Benutzern zugeordnet und können daher nicht verwendet werden:",en:"These usernames are already in use and are therefore not possible:"})),r(O,"testCantBeDeleted",()=>d({de:"Die Prüfung läuft noch, sie kann daher nicht gelöscht werden.",en:"Test is still running, therefore it can't be deleted."})),r(O,"running",()=>d({de:"läuft",en:"running"})),r(O,"stopped",()=>d({de:"angehalten",en:"stopped"})),r(O,"modeNormal",()=>d({de:"Normal",en:"regular"})),r(O,"modeManualOff",()=>d({de:"Abwesend",en:"absent"})),r(O,"modeManualOn",()=>d({de:"Verlängert",en:"extended"})),r(O,"modeToText",t=>{switch(t){case"normal":return O.modeNormal();case"manualOff":return O.modeManualOff();case"manualOn":return O.modeManualOn();default:return O.modeNormal()}});let Sh=O;class lw{constructor(t,e){r(this,"$gradingTab");r(this,"$gradingMark");r(this,"$gradingPoints");r(this,"$gradingCommentMarkdown");r(this,"$group");r(this,"$attendence");r(this,"$l3");r(this,"$l4");r(this,"dontFireOnChange",!1);r(this,"tab");r(this,"pruefungId");this.main=t,this.tab=new mn("Grading",an.evaluation(),["jo_gradingTab"]),e.addTab(this.tab),this.$gradingTab=y(this.tab.bodyDiv),Si.getInstance().subscribe("onGradeChangedInPruefungAdministration",i=>{this.setValues(this.pruefungId)})}initGUI(){let t=this;this.$gradingTab.empty(),this.$gradingTab.css("display","none");let e=L(null,"jo_grading_upperRow");this.$gradingMark=y(''),this.$gradingPoints=y(''),this.$group=y("
"),this.$attendence=y("
"),this.$gradingMark.on("input",()=>{t.onChange()}),this.$gradingPoints.on("input",()=>{t.onChange()});let i=L(null,"jo_grading_markdiv"),n=L(null,"jo_grading_markdiv");this.$l3=L(null,"jo_grading_markdiv"),this.$l4=L(null,"jo_grading_markdiv"),i.append(L(null,null,an.points()+": "),this.$gradingPoints),n.append(L(null,null,an.grade()+": "),this.$gradingMark),this.$l3.append(L(null,null,Sh.groupLong()+": "),this.$group),this.$l4.append(L(null,null,Sh.attendance()+": "),this.$attendence),e.append(i,n,this.$l3,this.$l4),this.$gradingCommentMarkdown=y(``),this.$gradingCommentMarkdown.on("input",()=>{t.onChange()}),t.main.user.is_teacher?(this.$gradingCommentMarkdown.removeAttr("readonly"),this.$gradingMark.removeAttr("readonly"),this.$gradingPoints.removeAttr("readonly")):(this.$gradingCommentMarkdown.attr("readonly","readonly"),this.$gradingMark.attr("readonly","readonly"),this.$gradingPoints.attr("readonly","readonly")),this.$gradingTab.append(e,this.$gradingCommentMarkdown)}async setValues(t){var h;if(this.pruefungId=t,t==null){this.hideGrading();return}let e=this.main.workspacesOwnerId,i=await this.main.networkManager.fetchGrade(e,t),n=!1;if(this.main.user.is_teacher?n=e==this.main.user.id:(n=this.isEmptyOrNull(i==null?void 0:i.grade)&&this.isEmptyOrNull(i==null?void 0:i.points)&&this.isEmptyOrNull(i==null?void 0:i.comment),this.$l3.css("display","none"),this.$l4.css("display","none")),n&&this.$gradingTab.removeClass("jo_active"),this.tab.setVisible(!n),n)return;this.dontFireOnChange=!0,this.$gradingMark.val((i==null?void 0:i.grade)==null?"":i.grade),this.$gradingPoints.val((i==null?void 0:i.points)==null?"":i.points),this.$gradingCommentMarkdown.val((i==null?void 0:i.comment)==null?"":i.comment);let s="A",a=an.yes(),l=(h=this.main.teacherExplorer.pruefungen)==null?void 0:h.find(u=>u.id==t);if(l!=null){if(l.pruefungStudentGroups!=null){let u=l.pruefungStudentGroups.studentGroups.find(m=>m.student_id==e);u!=null&&(s=u.group)}if(l.pruefungStudentModes!=null){let u=l.pruefungStudentModes.studentModes.find(m=>m.student_id==e);u!=null&&u.mode=="manualOff"&&(a=an.no())}}this.$group.text(s),this.$attendence.text(a),this.dontFireOnChange=!1}hideGrading(){this.tab.setVisible(!1)}onChange(){var s,a,l;if(this.dontFireOnChange||this.pruefungId==null)return;let t=(s=this.$gradingMark.val())==null?void 0:s.trim(),e=(a=this.$gradingPoints.val())==null?void 0:a.trim(),i=(l=this.$gradingCommentMarkdown.val())==null?void 0:l.trim(),n=this.main.workspacesOwnerId;this.main.networkManager.createOrUpdateGrade(n,this.pruefungId,t,e,i)}isEmptyOrNull(t){return t==null||t.trim().length==0}}const dw="data:image/svg+xml,%3csvg%20width='105'%20height='105'%20viewBox='0%200%20105%20105'%20xmlns='http://www.w3.org/2000/svg'%20fill='%23fff'%3e%3ccircle%20cx='12.5'%20cy='12.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='0s'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='12.5'%20cy='52.5'%20r='12.5'%20fill-opacity='.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='100ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='52.5'%20cy='12.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='300ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='52.5'%20cy='52.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='600ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='92.5'%20cy='12.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='800ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='92.5'%20cy='52.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='400ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='12.5'%20cy='92.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='700ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='52.5'%20cy='92.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='500ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3ccircle%20cx='92.5'%20cy='92.5'%20r='12.5'%3e%3canimate%20attributeName='fill-opacity'%20begin='200ms'%20dur='1s'%20values='1;.2;1'%20calcMode='linear'%20repeatCount='indefinite'%20/%3e%3c/circle%3e%3c/svg%3e";class wf{constructor(t,e,i,n,s,a){r(this,"tabManager");r(this,"console");r(this,"errorManager");r(this,"homeworkManager");r(this,"gradingManager");r(this,"disassemblerTab");r(this,"jUnitTab");r(this,"$dbBusyImage");r(this,"$networkBusyImage");r(this,"$updateTimer");this.main=t,this.$bottomDiv=e,this.tabManager=new up(e[0]),s&&(this.errorManager=new aw(t,this.tabManager),this.errorManager.tab.show()),i&&(this.console=new sw(t,i?this.tabManager:null)),a||(this.homeworkManager=new ow(t,this.tabManager),this.gradingManager=new lw(t,this.tabManager)),n&&(this.disassemblerTab=new mn("Disassembler",fo.code(),["jo_scrollable","jo_pcodeTab"]),this.tabManager.addTab(this.disassemblerTab)),this.jUnitTab=new mn("JUnit",fo.testRunner(),["jo_testrunnerTab"]),this.tabManager.addTab(this.jUnitTab),a||(this.$dbBusyImage=y(``),this.tabManager.insertIntoRightDiv(this.$dbBusyImage[0]),this.$networkBusyImage=y(``),this.tabManager.insertIntoRightDiv(this.$networkBusyImage[0]),this.$updateTimer=y(`
`),this.tabManager.insertIntoRightDiv(this.$updateTimer[0]))}initGUI(){tg(this.$bottomDiv),this.console!=null&&this.console.initGUI(),this.homeworkManager!=null&&this.homeworkManager.initGUI(),this.$bottomDiv.find(".jo_tabs").children().first().trigger("click")}showHomeworkTab(){this.homeworkManager.tab.setVisible(!0)}showJunitTab(){this.jUnitTab.show()}hideHomeworkTab(){this.homeworkManager.tab.setVisible(!1)}showHideDBBusyIcon(t){let e=t?"block":"none";this.$dbBusyImage.css("display",e)}}class kf{}r(kf,"NewFileName",()=>d({de:"Neue Datei",en:"new file"}));class hw{constructor(t,e){r(this,"treeview");this.$fileListDiv=t,this.main=e,this.treeview=new li(t[0],{captionLine:{enabled:!0,text:"Dateien"},withSelection:!0,selectMultiple:!1,buttonAddElements:!0,buttonAddElementsCaption:"Dateien hinzufügen",buttonAddFolders:!1,comparator:(i,n)=>i.name.localeCompare(n.name),keyExtractor:i=>i.id,parentKeyExtractor:i=>i.parent_folder_id,withDeleteButtons:!0,confirmDelete:!0,orderBy:"comparator",scrollToSelectedElement:!1}),this.treeview.newNodeCallback=async(i,n)=>{let s=this.main.addFile({text:"",title:i}),a=Gi.filenameToFileType(s.name,this.main.getCurrentProgrammingLanguage());return n.iconClass=a.iconclass,n.readOnly=a.suffix==".md",n.externalObject=s,this.treeview.selectNodeAndSetFocus(n,!0),s},this.treeview.renameCallback=async(i,n,s)=>{if(i.readOnly)return alert("Diese Datei ist schreibgeschützt und kann nicht umbenannt werden."),{correctedName:i.name,success:!1};n=n.substring(0,30),i.name=n,i.setSaved(!1),e.saveScripts();let a=Gi.filenameToFileType(n,this.main.getCurrentProgrammingLanguage());return Q.setModelLanguage(i.getMonacoModel(),a.language),{correctedName:n,success:!0}},this.treeview.deleteCallback=async(i,n)=>{if(i.readOnly)return alert("Diese Datei ist schreibgeschützt und kann nicht gelöscht werden."),!1;let s=this.treeview.nodes.filter(a=>!a.isRootNode()&&a.externalObject!=i).map(a=>a.externalObject);return this.main.removeFile(i),n!=null&&n.hasFocus&&(s.length>0?this.selectFile(s[0],!0):this.selectFirstFileIfPresent()),this.treeview.nodes.forEach(a=>{var l;return(l=a.externalObject)==null?void 0:l.setSaved(!1)}),this.main.showResetButton(),!0},this.treeview.nodeClickedCallback=i=>{this.selectFile(i,!0)}}selectFirstFileIfPresent(){if(this.treeview.nodes.length>1)this.treeview.selectNodeAndSetFocus(this.treeview.nodes[1],!0);else{let t=this.main.getMainEditor(),e=Q.createModel("Keine Datei vorhanden.","plaintext");t.setModel(e),t.updateOptions({readOnly:!0})}}getUniqueFilename(){let t=kf.NewFileName(),e=0,i=t+" "+e+".java";for(;this.treeview.nodes.some(n=>n.caption==(i=t+" "+e+".java"));)e++;return i}removeAllFiles(){this.treeview.clear(),this.selectFirstFileIfPresent()}addFile(t){let e=Gi.filenameToFileType(t.name,this.main.getCurrentProgrammingLanguage()),i=e.iconclass,n=this.treeview.addNode(!1,t.name,i,t);n.readOnly=e.suffix==".md"}removeFile(t,e=!0){this.treeview.removeElementAndItsFolderContents(t),this.selectFirstFileIfPresent(),this.treeview.nodes.forEach(i=>{var n;return(n=i.externalObject)==null?void 0:n.setSaved(!1)})}selectFile(t,e=!0){if(!t)return;switch(Gi.filenameToFileType(t.name,this.main.getCurrentProgrammingLanguage()).suffix){case".md":this.main.$monacoDiv.hide(),this.main.$hintDiv.show();let n={},s=[],a=kp({highlight:function(l,h){return s.push(l),""}});a.renderer.rules.code_inline=function(l,h,u,m,g){var f=l[h];return s.push(f.content),""},a.render(t.getText()),this.colorize(s,n,()=>{let l=kp({highlight:function(u,m){return n[u]}});l.renderer.rules.code_inline=function(u,m,g,f,b){var A=u[m];return n[A.content].replace("
","")};let h=l.render(t.getText());this.main.$hintDiv.html(h)});break;default:this.main.$hintDiv.hide(),this.main.$monacoDiv.show(),this.main.setFileActive(t),e&&setTimeout(()=>{this.main.getMainEditor().focus()},100),this.main.interpreter.onFileSelected(),this.main.currentWorkspace.settings.language==Re.ByAssembly.name&&e&&this.main.getCompiler().forceRecompilation();break}}colorize(t,e,i){let n=this;if(t.length>0){let s=t.pop();Q.colorize(s,"myJava",{tabSize:3}).then(a=>{e[s]=a,n.colorize(t,e,i)})}else i()}getFiles(){return this.treeview.nodes.filter(t=>!t.isRootNode()&&t.externalObject).map(t=>t.externalObject)}markFilesAsStartable(t,e){for(let i of this.treeview.nodes.filter(n=>!n.isRootNode())){let n=i.getIconButtonByTag("Start"),s=i.externalObject;n||(n=i.addIconButton("img_start-dark",()=>{this.main.onStartFileClicked(s)},"Starte das in dieser Datei enthaltene Hauptprogramm",!0)),n.tag="Start",n.setVisible(t.indexOf(s)>=0),n.setActive(e)}}renderErrorCount(t,e){if(e!=null)for(let i of t.getFiles()){let n=e.get(i),s=n==null||n==0?"":"("+n+")",a=this.treeview.findNodeByElement(i);a==null||a.setRightPartOfCaptionErrors(s)}}markAsSelectedButDontInvokeCallback(t){let e=this.treeview.findNodeByElement(t);e&&(this.treeview.unselectAllNodes(!0),e.setSelected(!0),e.setFocus(!0))}}class cw{constructor(t,e,i){r(this,"wholeWindowElement");r(this,"primaryButton");r(this,"additionalButtonTopRight");this.mainEmbedded=t,this.mainDiv=e,this.primaryButton=new Vo(i,["img_whole-window-dark","img_whole-window-back-dark"],(n,s)=>{this.onWholeWindowButtonClicked(s)},["IDE im Vollbild darstellen","IDE in Normalgröße darstellen"],!0,"append"),this.primaryButton.divElement.style.marginLeft="10px",this.primaryButton.divElement.style.marginRight="10px"}onWholeWindowButtonClicked(t){var e,i,n,s;switch(t){case 0:this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!0),(e=this.mainEmbedded.horizontalSlider)==null||e.restorePosition(),(i=this.mainEmbedded.verticalSlider)==null||i.restorePosition(),this.additionalButtonTopRight.remove(),document.body.classList.remove("joeCssFence"),Ga(this.wholeWindowElement,this.mainDiv);break;case 1:this.additionalButtonTopRight=new Vo(this.mainEmbedded.rightDiv.tabManager.tabheadingRightDiv,["img_whole-window-back"],(a,l)=>{this.onWholeWindowButtonClicked(0)},["IDE in Normalgröße darstellen"],!0,"append"),this.mainEmbedded.rightDiv.wholeWindowButton.setVisible(!1),(n=this.mainEmbedded.horizontalSlider)==null||n.savePosition(),(s=this.mainEmbedded.verticalSlider)==null||s.savePosition(),document.body.classList.add("joeCssFence"),this.wholeWindowElement=z.makeDiv(document.body,"jo_wholeWindow","jo_wholeWindow_embeddedFullpage"),Ga(this.mainDiv,this.wholeWindowElement);break}}}class uw{constructor(){r(this,"db")}async open(){return new Promise((t,e)=>{if(window.indexedDB){let i=window.indexedDB.open("LearnJ",1),n=this;i.onerror=function(s){console.log("Couldn't open IndexedDB: "+s.type),e()},i.onsuccess=function(s){n.db=i.result,n.db.onerror=function(a){console.log("Datenbankfehler: "+a.target.error.message)},t()},i.onupgradeneeded=function(s){n.db=s.target.result;let a=n.db.createObjectStore("scripts",{keyPath:"scriptId",autoIncrement:!1});a.transaction.oncomplete=function(l){}}}else console.log("IndexedDB not available.")})}writeScript(t,e){this.db.transaction("scripts","readwrite").objectStore("scripts").put({scriptId:t,script:e})}removeScript(t){this.db.transaction("scripts","readwrite").objectStore("scripts").delete(t)}getScript(t,e){let n=this.db.transaction("scripts","readwrite").objectStore("scripts").get(t);n.onerror=s=>{e(null)},n.onsuccess=s=>{n.result==null?e(null):e(n.result.script)}}}class mw{constructor(t){this.file=t}getName(){return this.file.name}getText(){return this.file.getText()}}class pw{constructor(t,e,i){this.ide=t,this.enableFileAccess=e,this.enableRunExitStatusAccess=i}getFiles(){if(!this.enableFileAccess)throw new Error("File access is not enabled for this IDE");return this.ide.getCurrentWorkspace().getFiles().map(t=>new mw(t))}registerOnRunExitListener(t){if(!this.enableRunExitStatusAccess)throw new Error("Run exit status access is not enabled for this IDE");this.ide.registerOnRunExitListener(t)}}const Sl=class Sl{static registerIDE(t){Sl.ideMap.set(t.config.id,new pw(t,t.config.enableFileAccess??!1,t.config.enableRunExitStatusAccess??!1))}getIDE(t){return Sl.ideMap.get(t)}};r(Sl,"ideMap",new Map);let Th=Sl;class Cf{constructor(t){r(this,"config");r(this,"editor");r(this,"currentWorkspace");r(this,"actionManager");r(this,"language");r(this,"interpreter");r(this,"$runDiv");r(this,"debugger");r(this,"$debuggerDiv");r(this,"$alternativeDebuggerDiv");r(this,"bottomDiv");r(this,"$filesDiv");r(this,"ListDiv");r(this,"disassembler");r(this,"$hintDiv");r(this,"$monacoDiv");r(this,"$resetButton");r(this,"rightDiv");r(this,"$rightDivInner");r(this,"fileExplorer");r(this,"debounceDiagramDrawing");r(this,"indexedDB");r(this,"programControlButtons");r(this,"breakpointManager");r(this,"compileRunsAfterCodeReset",0);r(this,"settings");r(this,"lastActiveFile");r(this,"horizontalSlider");r(this,"verticalSlider");r(this,"embeddedFullpageController");r(this,"runExitListeners",[]);r(this,"scriptListFromHtml",[]);this.$outerDiv=t}async init(t){if(this.readConfig(this.$outerDiv),this.initGUI(this.$outerDiv),this.scriptListFromHtml=await this.tryLoadingWorkspaceFromURL()||t,await this.processScriptsComingFromHtml(),this.currentWorkspace.setLibraries(this.getCompiler()),await this.loadUserSpritesheet(),!this.config.hideStartPanel){if(this.indexedDB=new uw,await this.indexedDB.open(),this.config.id!=null){if(await this.readScriptsFromIndexedDB(),this.fileExplorer&&(this.getCompiler().setFiles(this.fileExplorer.getFiles()),this.fileExplorer.selectFirstFileIfPresent()),this.fileExplorer==null){let e=this.currentWorkspace.getFiles();this.getCompiler().setFiles(e),e.length>0&&this.setFileActive(e[0])}this.readClassDiagram(),this.getCompiler().triggerCompile()}(this.config.enableFileAccess||this.config.enableRunExitStatusAccess)&&(window.online_ide_access=new Th,Th.registerIDE(this))}}isReadOnlyScript(t){return this.scriptListFromHtml.some(e=>e.title===t&&e.readOnly)}readClassDiagram(){if(!this.config.withClassDiagram)return;let t=()=>{var e;(e=this.rightDiv)!=null&&e.classDiagram?this.indexedDB.getScript(this.config.id+"-classDiagram",i=>{i!=null&&(this.rightDiv.classDiagram.clear(),this.rightDiv.classDiagram.deserialize(JSON.parse(i)),this.drawClassDiagrams(!1))}):setTimeout(()=>{t()},300)};t()}async tryLoadingWorkspaceFromURL(){if(!this.config.workspaceURLParameterName)return;let t=fc(this.config.workspaceURLParameterName);if(t)try{let i=await(await fetch(t)).json();return Array.isArray(i)||(i=[i]),i[0].modules.map(a=>({title:a.name,text:a.text}))}catch(e){console.log("Error retrieving or converting data from URL "+t+" to json."),console.error(e);return}}async processScriptsComingFromHtml(){var t;if((t=this.fileExplorer)==null||t.removeAllFiles(),this.initWorkspace(this.scriptListFromHtml),this.config.withFileList){for(let e of this.currentWorkspace.getFiles())this.fileExplorer.addFile(e);this.fileExplorer.selectFirstFileIfPresent()}else this.setFileActive(this.currentWorkspace.getFirstFile());this.getCompiler().triggerCompile()}readConfig(t){let e=t.data("java-online");e!=null&&typeof e=="string"?this.config=JSON.parse(e.split("'").join('"')):this.config={},typeof this.config.cacheUserEdits!="boolean"&&(this.config.cacheUserEdits=!0),this.config.hideEditor==null&&(this.config.hideEditor=!1),this.config.hideStartPanel==null&&(this.config.hideStartPanel=!1),this.config.withBottomPanel==null&&(this.config.withBottomPanel=this.config.withConsole||this.config.withPCode||this.config.withFileList||this.config.withErrorList),this.config.hideEditor&&(this.config.withBottomPanel=!1,this.config.withClassDiagram=!1,this.config.withFileList=!1,this.config.withConsole=!1,this.config.withPCode=!1,this.config.withErrorList=!1),this.config.withBottomPanel&&(this.config.withFileList==null&&(this.config.withFileList=!0),this.config.withPCode==null&&(this.config.withPCode=!0),this.config.withConsole==null&&(this.config.withConsole=!0),this.config.withErrorList==null&&(this.config.withErrorList=!0)),(this.config.speed==null||typeof this.config.speed=="number"&&this.config.speed<0)&&(this.config.speed="max"),this.config.libraries==null&&(this.config.libraries=[]),this.config.jsonFilename==null&&(this.config.jsonFilename="workspace.json")}setFileActive(t){var e;if(t){this.lastActiveFile&&this.lastActiveFile.saveViewState(this.getMainEditor()),this.config.withFileList&&this.fileExplorer.markAsSelectedButDontInvokeCallback(t),this.lastActiveFile=t,this.getMainEditor().updateOptions({readOnly:t.readOnly||!1,lineNumbersMinChars:4});try{this.editor.editor.setModel(t.getMonacoModel())}catch{console.log("Caught!")}t.restoreViewState(this.getMainEditor()),(e=this.disassembler)==null||e.disassemble()}}eraseDokuwikiSearchMarkup(t){return t.replace(/(.*?)<\/span>/g,"$1")}async readScriptsFromIndexedDB(){return new Promise((t,e)=>{let i=this.currentWorkspace.getFiles();if(i.forEach(s=>{s.getMonacoModel(),s.setSaved(!0)}),!this.config.cacheUserEdits){t();return}let n=this;this.indexedDB.getScript(this.config.id,s=>{var a;if(s==null)setTimeout(()=>{setInterval(()=>{n.saveScripts()},1e3)},2e3),t();else{let l=JSON.parse(s),h=l.length;for(let u of i.slice())(a=n.fileExplorer)==null||a.removeFile(u,!1);n.currentWorkspace.removeAllFiles();for(let u of l){let m=this.config.id+u;this.indexedDB.getScript(m,g=>{var f;if(g!=null){g=this.eraseDokuwikiSearchMarkup(g);let b=new Je(this,u,g);b.getMonacoModel(),b.setSaved(!0),b.readOnly=n.isReadOnlyScript(u),(f=n.fileExplorer)==null||f.addFile(b),n.currentWorkspace.addFile(b),n.showResetButton()}h--,h==0&&(setInterval(()=>{n.saveScripts()},1e3),t())})}}})})}saveScripts(){var s;let t=this.currentWorkspace.getFiles(),e=[],i=!1;if(t.forEach(a=>i=i||!a.isSaved()),i){for(let a of t){e.push(a.name);let l=this.config.id+a.name;this.indexedDB.writeScript(l,a.getText()),a.setSaved(!0)}this.indexedDB.writeScript(this.config.id,JSON.stringify(e))}let n=(s=this.rightDiv)==null?void 0:s.classDiagram;n&&n.dirty&&(this.indexedDB.writeScript(this.config.id+"-classDiagram",JSON.stringify(n.serialize())),n.dirty=!1)}deleteScriptsInDB(){this.indexedDB.getScript(this.config.id,t=>{if(t!=null){let e=JSON.parse(t);for(let i of e){let n=this.config.id+i;this.indexedDB.removeScript(n)}this.indexedDB.removeScript(this.config.id)}}),this.indexedDB.removeScript(this.config.id+"-classDiagram")}initWorkspace(t){this.currentWorkspace=new Oi("Embedded-Workspace",this,0),this.currentWorkspace.settings.libraries=this.config.libraries,this.currentWorkspace.id=0,this.currentWorkspace.settings.language=this.getCurrentProgrammingLanguage().name;for(let e of t)this.addFile(e);this.switchProgrammingLanguage(this.currentWorkspace.settings.language)}addFile(t){let e=new Je(this,t.title,t.text);e.readOnly=t.readOnly||!1,e.id=this.currentWorkspace.getFiles().length,this.currentWorkspace.addFile(e);let i=this;return e.getMonacoModel().onDidChangeContent(()=>{i.considerShowingCodeResetButton()}),e}removeFile(t){var e;this.currentWorkspace.removeFile(t),(e=this.getCompiler())==null||e.triggerCompile()}initGUI(t){t.css({"background-image":"none","background-size":"100%"});let e=y('
'),i=this.makeCodeResetModalWindow(t),n=this.makeRightDiv(),s=y('
');this.$monacoDiv=y('
'),this.$hintDiv=y('
'),this.$resetButton=y('
Code Reset
'),s.append(this.$monacoDiv,this.$hintDiv,this.$resetButton),this.$resetButton.hide(),this.$resetButton.on("click",()=>{i.show()}),this.$hintDiv.hide();let a=y('
'),l=y('
'),h=y(''),u=this;h.find("input").on("change",K=>{var Z=K.originalEvent.target.files;u.loadWorkspaceFromFile(Z[0])});let m=y('
');if(m.on("click",()=>{u.saveWorkspaceToFile()}),a.append(h,m),this.config.withBottomPanel){let K=y('
');l.append(a),K.append(l),this.config.withFileList&&(this.$filesDiv=this.makeFilesDiv(),K.prepend(this.$filesDiv),new ss(this.$filesDiv[0],!1,!1,()=>{}),this.fileExplorer=new hw(this.$filesDiv,this)),tg(l),e.append(s,K),this.verticalSlider=new ss(K[0],!0,!0,()=>{this.editor.editor.layout()})}else e.prepend(s);this.config.withBottomPanel||(this.config.hideEditor?n.prepend(a):(e.prepend(a),a.addClass("joe_controlPanel_top"),s.css({position:"relative",height:"1px"}))),t.addClass("joe_javaOnlineDiv"),t.append(e,n),this.config.hideEditor||(this.horizontalSlider=new ss(n[0],!0,!1,()=>{this.editor.editor.layout()})),this.actionManager=new pg(t),this.actionManager.init(),this.editor=new cf(this,!1,!0),this.editor.initGUI(this.$monacoDiv),this.$monacoDiv.find(".monaco-editor").css("z-index","10"),t.attr("tabindex")==null&&t.attr("tabindex","0"),this.config.withBottomPanel&&(this.bottomDiv=new wf(this,l,this.config.withConsole,this.config.withPCode,this.config.withErrorList,!0),this.bottomDiv.initGUI());let g=this.$rightDivInner.find(".jo_graphics")[0],f=this.$rightDivInner.find(".jo_coordinates")[0],b=new sg(this),A=new mf(this.$runDiv,this),C=new ff(this.$runDiv,this),w=new uf(this),x=new Bg(y("html"),this),q=new Vg(this);this.interpreter=new Pa(C,this.actionManager,new fg(g,f),x,b,q,A,w,new gg(this),this),this.interpreter.eventManager.on("done",()=>{this.runExitListeners.forEach(K=>{var Z;K({exitCode:this.interpreter.exitStatus,output:((Z=this.interpreter.printManager)==null?void 0:Z.getLog())||"",exception:this.interpreter.exception,testProgress:this.language instanceof Hl?this.language.getTestRunner().getProgress():void 0})})}),this.interpreter.eventManager.on("start",()=>{var K,Z;this.runExitListeners.length>0?(K=this.interpreter.printManager)==null||K.startLogging():(Z=this.interpreter.printManager)==null||Z.stopLogging()});let D=new ip;us.getInstance().registerMain(this,D),this.switchProgrammingLanguage(this.config.programmingLanguage||"Java"),this.config.withBottomPanel&&this.config.withPCode&&(this.disassembler=new mg(this.bottomDiv.disassemblerTab.bodyDiv,this)),this.programControlButtons=new bf(a,this.interpreter,this.actionManager),new Fg(this);let G=y('
');G[0].title="Über die Online-IDE...",a.append(G),G.on("mousedown",K=>{K.preventDefault(),K.stopPropagation(),pn([{caption:"Über die Online-IDE ...",link:"https://www.online-ide.de",callback:()=>{}}],K.pageX+2,K.pageY+2)}),this.embeddedFullpageController=new cw(this,this.$outerDiv[0],a[0]),setTimeout(()=>{this.editor.editor.layout(),this.programControlButtons.speedControl.setSpeedInStepsPerSecond(this.config.speed)},200),this.config.hideEditor&&(e.hide(),n.css("flex","1"),this.config.hideStartPanel?t.find(".joe_controlsDiv").hide():(t.find(".joe_rightDivInner").css("height","calc(100% - 24px)"),t.find(".joe_controlsDiv").css("padding","2px"),t.find(".jo_speedcontrol-outer").css("z-index","10"))),Hp()||C==null||C.print(Ci.webGLNotSupported(),!0,16719904)}hideDebugger(){this.$debuggerDiv.hide(),this.$alternativeDebuggerDiv.show()}showDebugger(){var t;this.$debuggerDiv.show(),this.$alternativeDebuggerDiv.hide(),(t=this.debugger)==null||t.show()}makeCodeResetModalWindow(t){let e=y(`
Warnung:
Soll der Code wirklich auf den Ausgangszustand zurückgesetzt werden?
Alle von Dir gemachten Änderungen werden damit verworfen.
Abbrechen
OK
`);return e.hide(),t.append(e),this.$outerDiv.find(".joe_codeResetModalCancel").on("click",()=>{e.hide()}),this.$outerDiv.find(".joe_codeResetModalOK").on("click",async()=>{await this.processScriptsComingFromHtml(),this.currentWorkspace.getFiles().forEach(i=>i.setSaved(!0)),this.deleteScriptsInDB(),e.hide(),this.$resetButton.hide(),this.compileRunsAfterCodeReset=1}),e}makeFilesDiv(){return y('
')}considerShowingCodeResetButton(){this.compileRunsAfterCodeReset++,this.compileRunsAfterCodeReset==3&&this.$resetButton.fadeIn(1e3)}drawClassDiagrams(t){clearTimeout(this.debounceDiagramDrawing),this.debounceDiagramDrawing=setTimeout(()=>{var e,i;(i=(e=this.rightDiv)==null?void 0:e.classDiagram)==null||i.drawDiagram(this.currentWorkspace,t)},500)}async saveWorkspaceToFile(){let t=prompt("Bitte geben Sie den Dateinamen ein",this.config.jsonFilename);if(t==null){alert("Der Dateiname ist leer, daher wird nichts gespeichert.");return}t.endsWith(".json")||(t=t+".json");let e=this.currentWorkspace,i=await cn.exportWorkspace(e);Sr(i,t)}loadWorkspaceFromFile(t){let e=this;if(t!=null){var i=new FileReader;i.onload=async n=>{let s=n.target.result,a=JSON.parse(s);if(Array.isArray(a)){if(a.length==0){alert(`
Das Format der Datei ${t.name} passt nicht.
`);return}a=a[0]}if(a.modules==null||a.name==null||a.settings==null){alert(`
Das Format der Datei ${t.name} passt nicht.
`);return}let l=new Oi(a.name,this,0);l.settings=a.settings,l.id=0;for(let h of a.modules){let u=new Je(this,h.name,h.text);l.addFile(u)}if(e.currentWorkspace=l,a.spritesheetBase64){let h=cp(a.spritesheetBase64);await new ps().initializeSpritesheetForWorkspace(l,this,h)}e.fileExplorer!=null?(e.fileExplorer.removeAllFiles(),l.getFiles().forEach(h=>e.fileExplorer.addFile(h)),e.fileExplorer.selectFirstFileIfPresent()):this.setFileActive(this.currentWorkspace.getFirstFile()),this.getCompiler().triggerCompile(),e.saveScripts(),this.showResetButton()},i.readAsText(t)}}showResetButton(){this.$resetButton.fadeIn(1e3)}makeRightDiv(){let t=y('
');if(this.$rightDivInner=y('
'),t.append(this.$rightDivInner),this.$outerDiv.append(t),this.rightDiv=new yf(this,this.$outerDiv[0],this.config.withClassDiagram),this.rightDiv.initGUI(),this.$debuggerDiv=y('
'),this.$alternativeDebuggerDiv=y(`
Tipp:
Die Variablen sind nur dann sichtbar, wenn das Programm
  • im Einzelschrittmodus ausgeführt wird(Klick auf ),
  • an einem Breakpoint hält (Setzen eines Breakpoints mit Mausklick links neben den Zeilennummern und anschließendes Starten des Programms mit ) oder
  • in sehr niedriger Geschwindigkeit ausgeführt wird (weniger als 10 Schritte/s).
`),!this.config.hideEditor){let e=new mn("Debugger","Debugger",["jo_scrollable","jo_editorFontSize","jo_variablesTab"]);this.rightDiv.tabManager.addTab(e);let i=y(e.bodyDiv);this.$debuggerDiv.hide(),i.append(this.$debuggerDiv,this.$alternativeDebuggerDiv)}return this.$runDiv=y(this.rightDiv.outputTab.bodyDiv),t}async loadUserSpritesheet(){this.config.spritesheetURL!=null&&await new ps().initializeSpritesheetForWorkspace(this.currentWorkspace,this,this.config.spritesheetURL)}showFile(t){var e;t&&((e=this.fileExplorer)==null||e.selectFile(t,!1))}getDisassembler(){return this.disassembler}showJUnitDiv(){var t;(t=this.bottomDiv)==null||t.showJunitTab()}showProgramPosition(t,e,i=!0){this.showFile(t),e&&(e.startLineNumber&&(e=U.getStartPosition(e)),i&&this.getMainEditor().setPosition(e),this.getMainEditor().revealPositionInCenterIfOutsideViewport(e),this.getMainEditor().focus())}markFilesAsStartable(t,e){var i;(i=this.fileExplorer)==null||i.markFilesAsStartable(t,e)}onStartFileClicked(t){this.interpreter.start(t)}switchProgrammingLanguage(t){var i,n;let e=us.getInstance().getLanguageByName(t);if(e!=this.language&&((i=this.language)==null||i.disable(this),this.language=e,this.language.enable(this),this.getCompiler().eventManager.on("compilationFinishedWithNewExecutable",this.onCompilationFinished,this),this.$debuggerDiv)){let s=this.$debuggerDiv[0];switch((n=this.debugger)==null||n.remove(),s.innerHTML="",this.language.getDebuggerType()){case"java":this.debugger=new of(s,!this.isEmbedded(),this);break;case"assembly":this.debugger=new rg(s,!this.isEmbedded(),this);break}this.debugger.hide()}}setHorizontalSliderPosition(t){var e;(e=this.horizontalSlider)==null||e.setPosition(t)}registerOnRunExitListener(t){this.runExitListeners.push(t)}isEmbedded(){return!0}getCompiler(){return this.language.getCompiler(this)}getInterpreter(){return this.interpreter}getCurrentWorkspace(){return this.currentWorkspace}getDebugger(){return this.debugger}getMonacoEditor(){return this.editor.editor}getRightDiv(){return this.rightDiv}getBottomDiv(){return this.bottomDiv}getActionManager(){return this.actionManager}addWorkspace(t){}getCurrentProgrammingLanguage(){return this.language}getRepl(){var t;return(t=this.language)==null?void 0:t.getRepl(this)}getMainEditor(){return this.editor.editor}getReplEditor(){var t;return(t=this.bottomDiv)==null?void 0:t.console.editor}getSettings(){let t=this.config.settings||{};return this.settings||(this.settings=new Af(void 0,Ws.stringify(t),void 0,void 0)),this.settings}onCompilationFinished(t){var e,i;if(this.interpreter.setExecutable(t),this.bottomDiv&&this.fileExplorer){let n=(i=(e=this.bottomDiv)==null?void 0:e.errorManager)==null?void 0:i.showErrors(this.currentWorkspace);this.fileExplorer.renderErrorCount(this.currentWorkspace,n)}this.drawClassDiagrams(!this.rightDiv.isClassDiagramActive())}adjustWidthToWorld(){this.rightDiv.adjustWidthToWorld()}}function gw(){fetch(qg).then(c=>c.json()).then(c=>{Lo.load(np).then(t=>{let e=t.source;e.minFilter="nearest",e.magFilter="nearest",c.meta.size.w=t.width,c.meta.size.h=t.height;let i=new Rp(t,c);i.parse().then(()=>{Lo.cache.set("spritesheet",i)})})})}function fw(){self.MonacoEnvironment={getWorker:(c,t)=>{switch(t){case"json":return new Lf;case"css":case"scss":case"less":return new Of;case"html":case"handlebars":case"razor":return new Pf;case"typescript":case"javascript":return new Mf;default:return new jf}}}}class bw{constructor(){r(this,"startupComplete",2)}initGUI(){this.checkStartupComplete()}initEditor(){this.checkStartupComplete()}checkStartupComplete(){this.startupComplete--,this.startupComplete==0&&this.start()}start(){this.initJavaOnlineDivs()}async initJavaOnlineDivs(){let t=[];y(".java-online").addClass("notranslate").each((e,i)=>{let n=y(i),s=[];n.find("script").each((a,l)=>{let h=y(l),u=h.attr("src"),m=h.text().trimEnd();for(;m.startsWith(` `)||m.startsWith("\r");)m=m.substring(1);let g={title:h.attr("title"),text:m};if(h.data("type")=="hint"&&!g.title.endsWith(".md")&&(g.title+=".md"),h.data("online-ide")){let f=JSON.parse(h.data("online-ide").replaceAll("'",'"'));g=Object.assign(g,f)}u!=null&&(g.url=u),g.text=this.eraseDokuwikiSearchMarkup(g.text),s.push(g)}),t.push([n,s])});for(let e of t)new Xp(e[0][0]).switchTheme("dark"),await this.initDiv(e[0],e[1]);window.online_ide_onReady&&window.online_ide_onReady()}eraseDokuwikiSearchMarkup(t){return t.replace(/(.*?)<\/span>/g,"$1")}async initDiv(t,e){t.addClass("joeCssFence");for(let n of e)if(n.url!=null){const s=await fetch(n.url);n.text=await s.text()}await new Cf(t).init(e)}}y(function(){let c=new bw;fw(),c.initEditor(),c.initGUI(),gw(),console.log("Online-IDE embedded Version 2.2.1 vom 12.9.2026, 15:31 Uhr")});export{Uw as _,Yw as a,Hw as c,Kw as g}; //# sourceMappingURL=online-ide-embedded.js.map