{"version":3,"names":["toggleLayer","name","checkbox","_element","_attributes","_attributeStringLiteral","_children","file","end","column","line","start","layer","window","beGlobal","checked","isGlobal","update","beNotGlobal","addEventListener","_childExpression","_childText","showVariable","self","div","lastValue","updateVariable","result","boundEval","isError","value","forEach","textContent","key","replace","slice","lively","findWorldContext","clearInterval","intervalId","setInterval","appendResult","code","element","classList","add","style","parentElement","insertBefore","nextSibling","executeCode","i","ctx","indexElement","resultElement","querySelector","remove","source","contains","border","showError","error","then","e","HTMLElement","appendChild","position","sleep","setExtent","getExtent","margin","undefined","Object","inspector","inspect","hideWorkspace","runExampleButton","exampleName","dependencies","button","onclick","codeBlocks","dep","depCodeBlocks","querySelectorAll","_","sortBy","ea","getClientPosition","y","push","runVivideButton","vivideScript","vivideBlock","letsScript","inspectVariable","hideHiddenElements","tagName","display","presentationPrintButton","_addSourceLocation","document","createElement","presentation","query","print","presentationFullscreenButton","container","console","log","slide","notify","reutrn","toggleFullscreen","autoRunSnippet","context","r","innerHTML","removeEventListener","_export","setters","_reactiveJsx","addSourceLocation","childText","childExpression","children","attributeStringLiteral","attributes","_srcClientBoundEvalJs","default","_srcExternalLodashLodashJs","_srcClientVivideVivideJs","_srcClientGraphicsJs","pt","execute","__SystemJSRewritingHack","_recorder_","_src_client_essay_js","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable"],"sources":["essay.js"],"sourcesContent":["import boundEval from \"src/client/bound-eval.js\";\nimport _ from 'src/external/lodash/lodash.js'\nimport { letsScript } from 'src/client/vivide/vivide.js';\nimport {pt}  from 'src/client/graphics.js'\n\nexport function toggleLayer(name) {\n  var checkbox=<input  type=\"checkbox\"></input>\n  var layer = window[name]\n  if (layer && layer.beGlobal) {\n    checkbox.checked = layer.isGlobal()       \n  }\n  \n  function update() {\n    var layer = window[name]\n    if (layer && layer.beGlobal) {\n      if (checkbox.checked == true) {\n        layer.beGlobal()\n      } else {\n        layer.beNotGlobal()\n      }\n    } else {\n      // checkbox.style.backgroundColor = \"red\"\n    }\n  }\n\n  checkbox.addEventListener(\"click\", update);\n  return <span>{checkbox} {name}</span>\n}\n\nexport function showVariable(name, self) {\n  var div=<div class=\"variable\" \n    style=\"display: inline-block; max-height: 100px; overflow: auto; background-color: gray; color: white; padding: 4px; font-style: italic; white-space: pre-wrap\"></div>\n  \n  \n  // #TODO garbage collect them...\n  // window.setInterval(async () => {\n  //   var result  = await boundEval(name);    \n  //   if (!result.isError) {\n  //     div.textContent = name + \" = \" + result.value\n  //   }\n  // }, 500);\n  // #TODO garbage collect them...\n  var lastValue\n  async function updateVariable () {\n    var result  = await boundEval(name, self);    \n    if (!result.isError && (lastValue !== result.value)) {\n      if (result.value.forEach) {\n        div.textContent = name + \"\\n\"\n        result.value.forEach((value, key) => {\n          div.textContent += key.replace(/\\n/g,\"\").slice(0,70) + \":\" + value +\"\\n\"\n        })\n      } else {\n        div.textContent = name + \" = \" + result.value\n      }\n      \n    }\n    \n    lastValue = result.value\n    if (!lively.findWorldContext(div)) { // we are still open\n      clearInterval(intervalId);\n    }\n    // #TODO start me again... if I should become open again?\n  }\n  \n  var intervalId = setInterval(updateVariable, 1000);\n  \n  return div\n}\n\nexport function appendResult(code, element) {\n  element.classList.add(\"result\")\n  element.style[\"white-space\"] = \"normal\"\n  code.parentElement.insertBefore(element, code.nextSibling)\n}\n\nexport async function executeCode(code, i, ctx) {\n  var indexElement = <div class=\"indexElement\" style=\"color: blue;\">{i}</div>\n      code.parentElement.insertBefore(indexElement, code)\n\n      // show only the latest result\n      var resultElement = code.parentElement.querySelector(\".result\")\n      if (resultElement) resultElement.remove()\n      var source = code.textContent\n      if (code.classList.contains(\"async\")) {\n        source = `(async () => {` + source +`})()`  \n      }\n      var result = await boundEval(source, ctx);    \n      if (result.isError) {\n        code.parentElement.style.border = \"1px solid red\";\n        lively.showError(result.value)\n        var error = <div class=\"result error\" style=\"color: red\">Error: {result.value}</div>\n        code.parentElement.insertBefore(error, code.nextSibling)\n        return\n      } else {\n        code.parentElement.style.border = \"1px dashed darkgreen\";\n        if (code.classList.contains(\"NoResult\")) return;\n        var element;\n        var value = result.value\n        if (value && value.then) {\n          try {\n            value = await value;\n          } catch(e) {\n            let error = <div class=\"error\" style=\"color: red\">Error in Promise: {e}</div>\n            appendResult(code, error)\n          return    \n          }\n        }\n        if (value instanceof HTMLElement) {\n          element = <div style=\"color: blue; font-style='italic'\"></div>\n          element.appendChild(value)\n          element.style.position = \"relative\"\n          lively.sleep(100).then(()=> {\n            lively.setExtent(element, lively.getExtent(value)) // #LayoutHack\n            element.style.margin = \"20px\"\n          })\n          appendResult(code, element)\n        } else if (value && value.beGlobal) {\n          element = toggleLayer(value.name)\n          appendResult(code, element)\n\n        } else if (value !== undefined && value instanceof Object) {\n          var inspector = await (<lively-inspector style=\"position:absolute; top:0px; left:0px; width: 100%; height: 100%\"></lively-inspector>)\n          inspector.inspect(value)\n          inspector.hideWorkspace()\n          element  = <div style=\"display: inline-block; position:relative; top:0px; left:0px; height: 100px; width: 500px;background: white; white-space: wrap\">{inspector}</div>\n          \n          appendResult(code, element)\n        } else if (value !== undefined) { \n          element = <div style=\"color: blue; font-style='italic'\"> => {value}</div>\n          appendResult(code, element)\n        }\n      }\n}\n\n\nexport function runExampleButton(exampleName, ctx, dependencies=[]) {\n  var button=<button>{exampleName}</button>\n  \n  button.onclick = (async () => {\n    // gather all dependent code blocks\n    var codeBlocks = []\n    dependencies.forEach(dep => {\n      var depCodeBlocks = ctx.parentElement.querySelectorAll(\".\" + dep)\n      depCodeBlocks = _.sortBy(depCodeBlocks, ea => lively.getClientPosition(ea).y)\n      codeBlocks.push(...depCodeBlocks)\n    })\n    codeBlocks.push(..._.sortBy(ctx.parentElement.querySelectorAll(\".\" + exampleName), \n                      ea => lively.getClientPosition(ea).y))\n    \n  \n    // codeBlocks = _.sortBy(codeBlocks, ea => lively.getClientPosition(ea).y)\n    // go through all code blocks and (re-)execute them and show result (and errors)\n    \n    ctx.parentElement.querySelectorAll(\".indexElement\").forEach(ea => {\n      ea.remove()\n    });\n      \n    var i=1\n    for(var code of codeBlocks) {\n      await executeCode(code, i++, ctx)\n    }\n    return  \"\"\n  });\n  return button\n}\n\n\n\n\nexport function runVivideButton(exampleName, ctx, vivideScript, dependencies=[]) {\n  var button=<button>{exampleName}</button>\n  var appendResult = function(code, element) {\n    element.classList.add(\"result\")\n    code.parentElement.insertBefore(element, code.nextSibling)\n  }\n  \n  button.onclick = (async () => {\n    // gather all dependent code blocks\n    var codeBlocks = []\n    dependencies.forEach(ea => {\n      codeBlocks.push(..._.sortBy(ctx.parentElement.querySelectorAll(\".\" + ea), \n                      ea => lively.getClientPosition(ea).y))\n    })\n    var vivideBlock = ctx.parentElement.querySelector(\".\" + vivideScript)\n    codeBlocks.push(vivideBlock)\n    \n  \n    // codeBlocks = _.sortBy(codeBlocks, ea => lively.getClientPosition(ea).y)\n    // go through all code blocks and (re-)execute them and show result (and errors)\n    \n    ctx.parentElement.querySelectorAll(\".indexElement\").forEach(ea => {\n      ea.remove()\n    });\n      \n    \n    var i=1\n    for(var code of codeBlocks) {\n      var result  = await boundEval(code.textContent, ctx);    \n      if (result.isError) {\n        code.parentElement.style.border = \"1px solid red\";\n        lively.showError(result.value)\n        var error = <div class=\"result error\" style=\"color: red\">Error: {result.value}</div>\n        code.parentElement.insertBefore(error, code.nextSibling)\n        return\n      } else {\n        var value = result.value\n        if (value && value.then) {\n          try {\n            value = await value;\n          } catch(e) {\n            let error = <div class=\"error\" style=\"color: red\">Error in Promise: {e}</div>\n            appendResult(code, error)\n          return    \n          }\n        }\n        if (code === vivideBlock) {\n          letsScript(value)\n        }\n      }\n    }\n    return  \"\"\n  });\n  return button\n}\n\nexport async function inspectVariable(name) {\n  var inspector = await (<lively-inspector></lively-inspector>)\n  var result  = await boundEval(name);    \n  inspector.inspect(result.value)\n  inspector.hideWorkspace()\n  // window.setInterval(async () => {\n  //   var result  = await boundEval(name);    \n  //   inspector.inspect(result.value)\n  // }, 1000);\n  return inspector\n}\n\nexport async function hideHiddenElements(ctx) {\n  ctx.parentElement.querySelectorAll(\".Hidden\").forEach( ea => {\n    if (ea.tagName == \"CODE\") {\n     ea.parentElement.style.display = \"none\"\n    }\n  })\n}\n\nexport function presentationPrintButton(ctx) {\n  var button = document.createElement(\"button\")\n  button.textContent = \"print\"\n  button.onclick = async () => {\n   var presentation = lively.query(ctx, \"lively-presentation\")\n   presentation.print()\n  }\n  button.style = \"position: absolute; bottom: 10px; left: 10px\"\n  return button\n}\n\n\nexport function presentationFullscreenButton(ctx) {\n  var button = document.createElement(\"button\")\n  button.textContent = \" fullscreen \"\n  var container = lively.query(ctx, \"lively-container\")\n  if (!container) {\n    console.log(\"presentationFullscreenButton>>not in a container\")\n    return \n  }\n\n  var presentation = lively.query(ctx, \"lively-presentation\")\n  if (!presentation) {\n    console.log(\"presentationFullscreenButton>>not in a presentation\")\n    return \n  }\n  var slide = lively.query(ctx, \".lively-slide\")\n  if (!slide) {\n    lively.notify(\"could not find slide\")\n    return\n  }\n  if (!presentation) {\n    console.log(\"presentationFullscreenButton>>not in a slide\")\n    reutrn \n  }\n  \n  button.onclick = async () => {\n    presentation.toggleFullscreen()\n  }\n  button.style = \"position: absolute; bottom: 10px; left: 80px\"\n  return button\n}\n\n\nexport function autoRunSnippet(context, name) {\n  debugger\n  var element =  lively.query(context, name)\n  var result = <div style=\"\"></div>;\n  var update = () => {\n    lively.notify('update test')\n    \n    boundEval(element.textContent).then(async r => {\n      result.innerHTML = \"\"\n      if (r.isError) {\n        result.appendChild(<div style=\"padding: 20px;white-space: pre-wrap;background-color: red\">ERROR {r.value}</div>)\n      } else {\n        await lively.sleep(100)\n        result.appendChild(<div style=\"padding: 20px;white-space: pre-wrap;background-color: green\">{r.value}</div>)\n      }\n    })    \n  };\n  var container = lively.query(context, \"lively-container\")\n\n  lively.removeEventListener(\"mdUpdateTest\", container)\n\n  \n  \n  lively.addEventListener(\"mdUpdateTest\", container, \"save-started\", () => result.innerHTML = \"updating ...\")    \n  lively.addEventListener(\"mdUpdateTest\", container, \"save-finished\", update)\n  \n  update()\n  return result\n}\n\n"],"mappings":";;;;EAKO,SAASA,WAAWA,CAACC,IAAI,EAAE;IAChC,IAAIC,QAAQ,GAAAC,QAAA,UAAAC,WAAA,CAAAC,uBAAA,SAAc,UAAU,IAAAC,SAAA;MAAAC,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAAS;IAC7C,IAAIE,KAAK,GAAGC,MAAM,CAACZ,IAAI,CAAC;IACxB,IAAIW,KAAK,IAAIA,KAAK,CAACE,QAAQ,EAAE;MAC3BZ,QAAQ,CAACa,OAAO,GAAGH,KAAK,CAACI,QAAQ,CAAC,CAAC;IACrC;IAEA,SAASC,MAAMA,CAAA,EAAG;MAChB,IAAIL,KAAK,GAAGC,MAAM,CAACZ,IAAI,CAAC;MACxB,IAAIW,KAAK,IAAIA,KAAK,CAACE,QAAQ,EAAE;QAC3B,IAAIZ,QAAQ,CAACa,OAAO,IAAI,IAAI,EAAE;UAC5BH,KAAK,CAACE,QAAQ,CAAC,CAAC;QAClB,CAAC,MAAM;UACLF,KAAK,CAACM,WAAW,CAAC,CAAC;QACrB;MACF,CAAC,MAAM;QACL;MAAA;IAEJ;IAEAhB,QAAQ,CAACiB,gBAAgB,CAAC,OAAO,EAAEF,MAAM,CAAC;IAC1C,OAAAd,QAAA,SAAAC,WAAA,IAAAE,SAAA,CAAAc,gBAAA,CAAclB,QAAQ,GAAAmB,UAAA,OAAAD,gBAAA,CAAGnB,IAAI;MAAAM,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA;EAC/B;EAEO,SAASY,YAAYA,CAACrB,IAAI,EAAEsB,IAAI,EAAE;IACvC,IAAIC,GAAG,GAAArB,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAY,UAAU,GAAAA,uBAAA,UACrB,yJAAyJ,IAAAC,SAAA;MAAAC,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAAO;;IAGxK;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAIe,SAAS;IACb,eAAeC,cAAcA,CAAA,EAAI;MAC/B,IAAIC,MAAM,GAAI,MAAMC,SAAS,CAAC3B,IAAI,EAAEsB,IAAI,CAAC;MACzC,IAAI,CAACI,MAAM,CAACE,OAAO,IAAKJ,SAAS,KAAKE,MAAM,CAACG,KAAM,EAAE;QACnD,IAAIH,MAAM,CAACG,KAAK,CAACC,OAAO,EAAE;UACxBP,GAAG,CAACQ,WAAW,GAAG/B,IAAI,GAAG,IAAI;UAC7B0B,MAAM,CAACG,KAAK,CAACC,OAAO,CAAC,CAACD,KAAK,EAAEG,GAAG,KAAK;YACnCT,GAAG,CAACQ,WAAW,IAAIC,GAAG,CAACC,OAAO,CAAC,KAAK,EAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,EAAC,EAAE,CAAC,GAAG,GAAG,GAAGL,KAAK,GAAE,IAAI;UAC1E,CAAC,CAAC;QACJ,CAAC,MAAM;UACLN,GAAG,CAACQ,WAAW,GAAG/B,IAAI,GAAG,KAAK,GAAG0B,MAAM,CAACG,KAAK;QAC/C;MAEF;MAEAL,SAAS,GAAGE,MAAM,CAACG,KAAK;MACxB,IAAI,CAACM,MAAM,CAACC,gBAAgB,CAACb,GAAG,CAAC,EAAE;QAAE;QACnCc,aAAa,CAACC,UAAU,CAAC;MAC3B;MACA;IACF;;IAEA,IAAIA,UAAU,GAAGC,WAAW,CAACd,cAAc,EAAE,IAAI,CAAC;IAElD,OAAOF,GAAG;EACZ;EAEO,SAASiB,YAAYA,CAACC,IAAI,EAAEC,OAAO,EAAE;IAC1CA,OAAO,CAACC,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;IAC/BF,OAAO,CAACG,KAAK,CAAC,aAAa,CAAC,GAAG,QAAQ;IACvCJ,IAAI,CAACK,aAAa,CAACC,YAAY,CAACL,OAAO,EAAED,IAAI,CAACO,WAAW,CAAC;EAC5D;EAEO,eAAeC,WAAWA,CAACR,IAAI,EAAES,CAAC,EAAEC,GAAG,EAAE;IAC9C,IAAIC,YAAY,GAAAlD,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,cAAc,GAAAA,uBAAA,UAAO,cAAc,IAAAC,SAAA,CAAAc,gBAAA,CAAE+B,CAAC;MAAA5C,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAAO;IACvEgC,IAAI,CAACK,aAAa,CAACC,YAAY,CAACK,YAAY,EAAEX,IAAI,CAAC;;IAEnD;IACA,IAAIY,aAAa,GAAGZ,IAAI,CAACK,aAAa,CAACQ,aAAa,CAAC,SAAS,CAAC;IAC/D,IAAID,aAAa,EAAEA,aAAa,CAACE,MAAM,CAAC,CAAC;IACzC,IAAIC,MAAM,GAAGf,IAAI,CAACV,WAAW;IAC7B,IAAIU,IAAI,CAACE,SAAS,CAACc,QAAQ,CAAC,OAAO,CAAC,EAAE;MACpCD,MAAM,GAAI,gBAAe,GAAGA,MAAM,GAAG,MAAK;IAC5C;IACA,IAAI9B,MAAM,GAAG,MAAMC,SAAS,CAAC6B,MAAM,EAAEL,GAAG,CAAC;IACzC,IAAIzB,MAAM,CAACE,OAAO,EAAE;MAClBa,IAAI,CAACK,aAAa,CAACD,KAAK,CAACa,MAAM,GAAG,eAAe;MACjDvB,MAAM,CAACwB,SAAS,CAACjC,MAAM,CAACG,KAAK,CAAC;MAC9B,IAAI+B,KAAK,GAAA1D,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,cAAc,GAAAA,uBAAA,UAAO,YAAY,IAAAC,SAAA,CAAAe,UAAA,aAAAD,gBAAA,CAASO,MAAM,CAACG,KAAK;QAAAvB,IAAA;QAAAC,GAAA;UAAAC,MAAA;UAAAC,IAAA;QAAA;QAAAC,KAAA;UAAAF,MAAA;UAAAC,IAAA;QAAA;MAAA,EAAO;MACpFgC,IAAI,CAACK,aAAa,CAACC,YAAY,CAACa,KAAK,EAAEnB,IAAI,CAACO,WAAW,CAAC;MACxD;IACF,CAAC,MAAM;MACLP,IAAI,CAACK,aAAa,CAACD,KAAK,CAACa,MAAM,GAAG,sBAAsB;MACxD,IAAIjB,IAAI,CAACE,SAAS,CAACc,QAAQ,CAAC,UAAU,CAAC,EAAE;MACzC,IAAIf,OAAO;MACX,IAAIb,KAAK,GAAGH,MAAM,CAACG,KAAK;MACxB,IAAIA,KAAK,IAAIA,KAAK,CAACgC,IAAI,EAAE;QACvB,IAAI;UACFhC,KAAK,GAAG,MAAMA,KAAK;QACrB,CAAC,CAAC,OAAMiC,CAAC,EAAE;UACT,IAAIF,KAAK,GAAA1D,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,OAAO,GAAAA,uBAAA,UAAO,YAAY,IAAAC,SAAA,CAAAe,UAAA,wBAAAD,gBAAA,CAAoB2C,CAAC;YAAAxD,IAAA;YAAAC,GAAA;cAAAC,MAAA;cAAAC,IAAA;YAAA;YAAAC,KAAA;cAAAF,MAAA;cAAAC,IAAA;YAAA;UAAA,EAAO;UAC7E+B,YAAY,CAACC,IAAI,EAAEmB,KAAK,CAAC;UAC3B;QACA;MACF;MACA,IAAI/B,KAAK,YAAYkC,WAAW,EAAE;QAChCrB,OAAO,GAAAxC,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,kCAAkC,IAAAC,SAAA;UAAAC,IAAA;UAAAC,GAAA;YAAAC,MAAA;YAAAC,IAAA;UAAA;UAAAC,KAAA;YAAAF,MAAA;YAAAC,IAAA;UAAA;QAAA,EAAO;QAC9DiC,OAAO,CAACsB,WAAW,CAACnC,KAAK,CAAC;QAC1Ba,OAAO,CAACG,KAAK,CAACoB,QAAQ,GAAG,UAAU;QACnC9B,MAAM,CAAC+B,KAAK,CAAC,GAAG,CAAC,CAACL,IAAI,CAAC,MAAK;UAC1B1B,MAAM,CAACgC,SAAS,CAACzB,OAAO,EAAEP,MAAM,CAACiC,SAAS,CAACvC,KAAK,CAAC,CAAC,EAAC;UACnDa,OAAO,CAACG,KAAK,CAACwB,MAAM,GAAG,MAAM;QAC/B,CAAC,CAAC;QACF7B,YAAY,CAACC,IAAI,EAAEC,OAAO,CAAC;MAC7B,CAAC,MAAM,IAAIb,KAAK,IAAIA,KAAK,CAAChB,QAAQ,EAAE;QAClC6B,OAAO,GAAG3C,WAAW,CAAC8B,KAAK,CAAC7B,IAAI,CAAC;QACjCwC,YAAY,CAACC,IAAI,EAAEC,OAAO,CAAC;MAE7B,CAAC,MAAM,IAAIb,KAAK,KAAKyC,SAAS,IAAIzC,KAAK,YAAY0C,MAAM,EAAE;QACzD,IAAIC,SAAS,GAAG,MAAAtE,QAAA,qBAAAC,WAAA,CAAAC,uBAAA,UAA+B,iEAAiE,IAAAC,SAAA;UAAAC,IAAA;UAAAC,GAAA;YAAAC,MAAA;YAAAC,IAAA;UAAA;UAAAC,KAAA;YAAAF,MAAA;YAAAC,IAAA;UAAA;QAAA,EAAqB;QACrI+D,SAAS,CAACC,OAAO,CAAC5C,KAAK,CAAC;QACxB2C,SAAS,CAACE,aAAa,CAAC,CAAC;QACzBhC,OAAO,GAAAxC,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAe,+HAA+H,IAAAC,SAAA,CAAAc,gBAAA,CAAEqD,SAAS;UAAAlE,IAAA;UAAAC,GAAA;YAAAC,MAAA;YAAAC,IAAA;UAAA;UAAAC,KAAA;YAAAF,MAAA;YAAAC,IAAA;UAAA;QAAA,EAAO;QAEvK+B,YAAY,CAACC,IAAI,EAAEC,OAAO,CAAC;MAC7B,CAAC,MAAM,IAAIb,KAAK,KAAKyC,SAAS,EAAE;QAC9B5B,OAAO,GAAAxC,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,kCAAkC,IAAAC,SAAA,CAAAe,UAAA,UAAAD,gBAAA,CAAMU,KAAK;UAAAvB,IAAA;UAAAC,GAAA;YAAAC,MAAA;YAAAC,IAAA;UAAA;UAAAC,KAAA;YAAAF,MAAA;YAAAC,IAAA;UAAA;QAAA,EAAO;QACzE+B,YAAY,CAACC,IAAI,EAAEC,OAAO,CAAC;MAC7B;IACF;EACN;EAGO,SAASiC,gBAAgBA,CAACC,WAAW,EAAEzB,GAAG,EAAE0B,YAAY,GAAC,EAAE,EAAE;IAClE,IAAIC,MAAM,GAAA5E,QAAA,WAAAC,WAAA,IAAAE,SAAA,CAAAc,gBAAA,CAAUyD,WAAW;MAAAtE,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAAU;IAEzCqE,MAAM,CAACC,OAAO,GAAI,YAAY;MAC5B;MACA,IAAIC,UAAU,GAAG,EAAE;MACnBH,YAAY,CAAC/C,OAAO,CAACmD,GAAG,IAAI;QAC1B,IAAIC,aAAa,GAAG/B,GAAG,CAACL,aAAa,CAACqC,gBAAgB,CAAC,GAAG,GAAGF,GAAG,CAAC;QACjEC,aAAa,GAAGE,CAAC,CAACC,MAAM,CAACH,aAAa,EAAEI,EAAE,IAAInD,MAAM,CAACoD,iBAAiB,CAACD,EAAE,CAAC,CAACE,CAAC,CAAC;QAC7ER,UAAU,CAACS,IAAI,CAAC,GAAGP,aAAa,CAAC;MACnC,CAAC,CAAC;MACFF,UAAU,CAACS,IAAI,CAAC,GAAGL,CAAC,CAACC,MAAM,CAAClC,GAAG,CAACL,aAAa,CAACqC,gBAAgB,CAAC,GAAG,GAAGP,WAAW,CAAC,EAC/DU,EAAE,IAAInD,MAAM,CAACoD,iBAAiB,CAACD,EAAE,CAAC,CAACE,CAAC,CAAC,CAAC;;MAGxD;MACA;;MAEArC,GAAG,CAACL,aAAa,CAACqC,gBAAgB,CAAC,eAAe,CAAC,CAACrD,OAAO,CAACwD,EAAE,IAAI;QAChEA,EAAE,CAAC/B,MAAM,CAAC,CAAC;MACb,CAAC,CAAC;MAEF,IAAIL,CAAC,GAAC,CAAC;MACP,KAAI,IAAIT,IAAI,IAAIuC,UAAU,EAAE;QAC1B,MAAM/B,WAAW,CAACR,IAAI,EAAES,CAAC,EAAE,EAAEC,GAAG,CAAC;MACnC;MACA,OAAQ,EAAE;IACZ,CAAE;IACF,OAAO2B,MAAM;EACf;EAKO,SAASY,eAAeA,CAACd,WAAW,EAAEzB,GAAG,EAAEwC,YAAY,EAAEd,YAAY,GAAC,EAAE,EAAE;IAC/E,IAAIC,MAAM,GAAA5E,QAAA,WAAAC,WAAA,IAAAE,SAAA,CAAAc,gBAAA,CAAUyD,WAAW;MAAAtE,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAAU;IACzC,IAAI+B,YAAY,GAAG,SAAAA,CAASC,IAAI,EAAEC,OAAO,EAAE;MACzCA,OAAO,CAACC,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;MAC/BH,IAAI,CAACK,aAAa,CAACC,YAAY,CAACL,OAAO,EAAED,IAAI,CAACO,WAAW,CAAC;IAC5D,CAAC;IAED8B,MAAM,CAACC,OAAO,GAAI,YAAY;MAC5B;MACA,IAAIC,UAAU,GAAG,EAAE;MACnBH,YAAY,CAAC/C,OAAO,CAACwD,EAAE,IAAI;QACzBN,UAAU,CAACS,IAAI,CAAC,GAAGL,CAAC,CAACC,MAAM,CAAClC,GAAG,CAACL,aAAa,CAACqC,gBAAgB,CAAC,GAAG,GAAGG,EAAE,CAAC,EACxDA,EAAE,IAAInD,MAAM,CAACoD,iBAAiB,CAACD,EAAE,CAAC,CAACE,CAAC,CAAC,CAAC;MACxD,CAAC,CAAC;MACF,IAAII,WAAW,GAAGzC,GAAG,CAACL,aAAa,CAACQ,aAAa,CAAC,GAAG,GAAGqC,YAAY,CAAC;MACrEX,UAAU,CAACS,IAAI,CAACG,WAAW,CAAC;;MAG5B;MACA;;MAEAzC,GAAG,CAACL,aAAa,CAACqC,gBAAgB,CAAC,eAAe,CAAC,CAACrD,OAAO,CAACwD,EAAE,IAAI;QAChEA,EAAE,CAAC/B,MAAM,CAAC,CAAC;MACb,CAAC,CAAC;MAGF,IAAIL,CAAC,GAAC,CAAC;MACP,KAAI,IAAIT,IAAI,IAAIuC,UAAU,EAAE;QAC1B,IAAItD,MAAM,GAAI,MAAMC,SAAS,CAACc,IAAI,CAACV,WAAW,EAAEoB,GAAG,CAAC;QACpD,IAAIzB,MAAM,CAACE,OAAO,EAAE;UAClBa,IAAI,CAACK,aAAa,CAACD,KAAK,CAACa,MAAM,GAAG,eAAe;UACjDvB,MAAM,CAACwB,SAAS,CAACjC,MAAM,CAACG,KAAK,CAAC;UAC9B,IAAI+B,KAAK,GAAA1D,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,cAAc,GAAAA,uBAAA,UAAO,YAAY,IAAAC,SAAA,CAAAe,UAAA,aAAAD,gBAAA,CAASO,MAAM,CAACG,KAAK;YAAAvB,IAAA;YAAAC,GAAA;cAAAC,MAAA;cAAAC,IAAA;YAAA;YAAAC,KAAA;cAAAF,MAAA;cAAAC,IAAA;YAAA;UAAA,EAAO;UACpFgC,IAAI,CAACK,aAAa,CAACC,YAAY,CAACa,KAAK,EAAEnB,IAAI,CAACO,WAAW,CAAC;UACxD;QACF,CAAC,MAAM;UACL,IAAInB,KAAK,GAAGH,MAAM,CAACG,KAAK;UACxB,IAAIA,KAAK,IAAIA,KAAK,CAACgC,IAAI,EAAE;YACvB,IAAI;cACFhC,KAAK,GAAG,MAAMA,KAAK;YACrB,CAAC,CAAC,OAAMiC,CAAC,EAAE;cACT,IAAIF,KAAK,GAAA1D,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,OAAO,GAAAA,uBAAA,UAAO,YAAY,IAAAC,SAAA,CAAAe,UAAA,wBAAAD,gBAAA,CAAoB2C,CAAC;gBAAAxD,IAAA;gBAAAC,GAAA;kBAAAC,MAAA;kBAAAC,IAAA;gBAAA;gBAAAC,KAAA;kBAAAF,MAAA;kBAAAC,IAAA;gBAAA;cAAA,EAAO;cAC7E+B,YAAY,CAACC,IAAI,EAAEmB,KAAK,CAAC;cAC3B;YACA;UACF;UACA,IAAInB,IAAI,KAAKmD,WAAW,EAAE;YACxBC,UAAU,CAAChE,KAAK,CAAC;UACnB;QACF;MACF;MACA,OAAQ,EAAE;IACZ,CAAE;IACF,OAAOiD,MAAM;EACf;EAEO,eAAegB,eAAeA,CAAC9F,IAAI,EAAE;IAC1C,IAAIwE,SAAS,GAAG,MAAAtE,QAAA,qBAAAC,WAAA,IAAAE,SAAA;MAAAC,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAA6C;IAC7D,IAAIiB,MAAM,GAAI,MAAMC,SAAS,CAAC3B,IAAI,CAAC;IACnCwE,SAAS,CAACC,OAAO,CAAC/C,MAAM,CAACG,KAAK,CAAC;IAC/B2C,SAAS,CAACE,aAAa,CAAC,CAAC;IACzB;IACA;IACA;IACA;IACA,OAAOF,SAAS;EAClB;EAEO,eAAeuB,kBAAkBA,CAAC5C,GAAG,EAAE;IAC5CA,GAAG,CAACL,aAAa,CAACqC,gBAAgB,CAAC,SAAS,CAAC,CAACrD,OAAO,CAAEwD,EAAE,IAAI;MAC3D,IAAIA,EAAE,CAACU,OAAO,IAAI,MAAM,EAAE;QACzBV,EAAE,CAACxC,aAAa,CAACD,KAAK,CAACoD,OAAO,GAAG,MAAM;MACxC;IACF,CAAC,CAAC;EACJ;EAEO,SAASC,uBAAuBA,CAAC/C,GAAG,EAAE;IAC3C,IAAI2B,MAAM,GAAAqB,kBAAA,CAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;MAAA/F,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA;IAC7CqE,MAAM,CAAC/C,WAAW,GAAG,OAAO;IAC5B+C,MAAM,CAACC,OAAO,GAAG,YAAY;MAC5B,IAAIuB,YAAY,GAAGnE,MAAM,CAACoE,KAAK,CAACpD,GAAG,EAAE,qBAAqB,CAAC;MAC3DmD,YAAY,CAACE,KAAK,CAAC,CAAC;IACrB,CAAC;IACD1B,MAAM,CAACjC,KAAK,GAAG,8CAA8C;IAC7D,OAAOiC,MAAM;EACf;EAGO,SAAS2B,4BAA4BA,CAACtD,GAAG,EAAE;IAChD,IAAI2B,MAAM,GAAAqB,kBAAA,CAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;MAAA/F,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA;IAC7CqE,MAAM,CAAC/C,WAAW,GAAG,cAAc;IACnC,IAAI2E,SAAS,GAAGvE,MAAM,CAACoE,KAAK,CAACpD,GAAG,EAAE,kBAAkB,CAAC;IACrD,IAAI,CAACuD,SAAS,EAAE;MACdC,OAAO,CAACC,GAAG,CAAC,kDAAkD,CAAC;MAC/D;IACF;IAEA,IAAIN,YAAY,GAAGnE,MAAM,CAACoE,KAAK,CAACpD,GAAG,EAAE,qBAAqB,CAAC;IAC3D,IAAI,CAACmD,YAAY,EAAE;MACjBK,OAAO,CAACC,GAAG,CAAC,qDAAqD,CAAC;MAClE;IACF;IACA,IAAIC,KAAK,GAAG1E,MAAM,CAACoE,KAAK,CAACpD,GAAG,EAAE,eAAe,CAAC;IAC9C,IAAI,CAAC0D,KAAK,EAAE;MACV1E,MAAM,CAAC2E,MAAM,CAAC,sBAAsB,CAAC;MACrC;IACF;IACA,IAAI,CAACR,YAAY,EAAE;MACjBK,OAAO,CAACC,GAAG,CAAC,8CAA8C,CAAC;MAC3DG,MAAM;IACR;IAEAjC,MAAM,CAACC,OAAO,GAAG,YAAY;MAC3BuB,YAAY,CAACU,gBAAgB,CAAC,CAAC;IACjC,CAAC;IACDlC,MAAM,CAACjC,KAAK,GAAG,8CAA8C;IAC7D,OAAOiC,MAAM;EACf;EAGO,SAASmC,cAAcA,CAACC,OAAO,EAAElH,IAAI,EAAE;IAC5C;IACA,IAAI0C,OAAO,GAAIP,MAAM,CAACoE,KAAK,CAACW,OAAO,EAAElH,IAAI,CAAC;IAC1C,IAAI0B,MAAM,GAAAxB,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAc,EAAE,IAAAC,SAAA;MAAAC,IAAA;MAAAC,GAAA;QAAAC,MAAA;QAAAC,IAAA;MAAA;MAAAC,KAAA;QAAAF,MAAA;QAAAC,IAAA;MAAA;IAAA,EAAO;IACjC,IAAIO,MAAM,GAAGA,CAAA,KAAM;MACjBmB,MAAM,CAAC2E,MAAM,CAAC,aAAa,CAAC;MAE5BnF,SAAS,CAACe,OAAO,CAACX,WAAW,CAAC,CAAC8B,IAAI,CAAC,MAAMsD,CAAC,IAAI;QAC7CzF,MAAM,CAAC0F,SAAS,GAAG,EAAE;QACrB,IAAID,CAAC,CAACvF,OAAO,EAAE;UACbF,MAAM,CAACsC,WAAW,CAAA9D,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAY,2DAA2D,IAAAC,SAAA,CAAAe,UAAA,YAAAD,gBAAA,CAAQgG,CAAC,CAACtF,KAAK;YAAAvB,IAAA;YAAAC,GAAA;cAAAC,MAAA;cAAAC,IAAA;YAAA;YAAAC,KAAA;cAAAF,MAAA;cAAAC,IAAA;YAAA;UAAA,EAAO,CAAC;QAClH,CAAC,MAAM;UACL,MAAM0B,MAAM,CAAC+B,KAAK,CAAC,GAAG,CAAC;UACvBxC,MAAM,CAACsC,WAAW,CAAA9D,QAAA,QAAAC,WAAA,CAAAC,uBAAA,UAAY,6DAA6D,IAAAC,SAAA,CAAAc,gBAAA,CAAEgG,CAAC,CAACtF,KAAK;YAAAvB,IAAA;YAAAC,GAAA;cAAAC,MAAA;cAAAC,IAAA;YAAA;YAAAC,KAAA;cAAAF,MAAA;cAAAC,IAAA;YAAA;UAAA,EAAO,CAAC;QAC9G;MACF,CAAC,CAAC;IACJ,CAAC;IACD,IAAIiG,SAAS,GAAGvE,MAAM,CAACoE,KAAK,CAACW,OAAO,EAAE,kBAAkB,CAAC;IAEzD/E,MAAM,CAACkF,mBAAmB,CAAC,cAAc,EAAEX,SAAS,CAAC;IAIrDvE,MAAM,CAACjB,gBAAgB,CAAC,cAAc,EAAEwF,SAAS,EAAE,cAAc,EAAE,MAAMhF,MAAM,CAAC0F,SAAS,GAAG,cAAc,CAAC;IAC3GjF,MAAM,CAACjB,gBAAgB,CAAC,cAAc,EAAEwF,SAAS,EAAE,eAAe,EAAE1F,MAAM,CAAC;IAE3EA,MAAM,CAAC,CAAC;IACR,OAAOU,MAAM;EACf;EAAC4F,OAAA;IAAAvH,WAAA,EAxTeA,WAAW;IAAAsB,YAAA,EAwBXA,YAAY;IAAAmB,YAAA,EAwCZA,YAAY;IAAAS,WAAA,EAMNA,WAAW;IAAA0B,gBAAA,EA4DjBA,gBAAgB;IAAAe,eAAA,EAkChBA,eAAe;IAAAI,eAAA,EAwDTA,eAAe;IAAAC,kBAAA,EAYfA,kBAAkB;IAAAG,uBAAA,EAQxBA,uBAAuB;IAAAO,4BAAA,EAYvBA,4BAA4B;IAAAQ,cAAA,EAgC5BA;EAAc;EAAA;IAAAM,OAAA,aAAAC,YAAA;MAAArB,kBAAA,GAAAqB,YAAA,CAAAC,iBAAA;MAAArG,UAAA,GAAAoG,YAAA,CAAAE,SAAA;MAAAvG,gBAAA,GAAAqG,YAAA,CAAAG,eAAA;MAAAtH,SAAA,GAAAmH,YAAA,CAAAI,QAAA;MAAAxH,uBAAA,GAAAoH,YAAA,CAAAK,sBAAA;MAAA1H,WAAA,GAAAqH,YAAA,CAAAM,UAAA;MAAA5H,QAAA,GAAAsH,YAAA,CAAA9E,OAAA;IAAA,aAAAqF,qBAAA;MAjSvBpG,SAAS,GAAAoG,qBAAA,CAAAC,OAAA;IAAA,aAAAC,0BAAA;MACT7C,CAAC,GAAA6C,0BAAA,CAAAD,OAAA;IAAA,aAAAE,wBAAA;MACCrC,UAAU,GAAAqC,wBAAA,CAAVrC,UAAU;IAAA,aAAAsC,oBAAA;MACXC,EAAE,GAAAD,oBAAA,CAAFC,EAAE;IAAA;IAAAC,OAAA,WAAAA,CAAA;MAAAC,uBAAA;MAAAC,UAAA,CAAAC,oBAAA,GAAAD,UAAA,CAAAC,oBAAA;MAAAjE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAzB,cAAA;QAAA;QAAA0B,IAAAC,8BAAA;UAAAtB,OAAA,mBA8RML,cAAA,CAAAA,CAAA,CAAAA,8BAAc;UAAA;QAAA;QAAA4B,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAjC,4BAAA;QAAA;QAAAkC,IAAAC,8BAAA;UAAAtB,OAAA,iCAhCdb,4BAAA,CAAAA,CAAA,CAAAA,8BAA4B;UAAA;QAAA;QAAAoC,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAxC,uBAAA;QAAA;QAAAyC,IAAAC,8BAAA;UAAAtB,OAAA,4BAZ5BpB,uBAAA,CAAAA,CAAA,CAAAA,8BAAuB;UAAA;QAAA;QAAA2C,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAA3C,kBAAA;QAAA;QAAA4C,IAAAC,8BAAA;UAAAtB,OAAA,uBARjBvB,kBAAA,CAAAA,CAAA,CAAAA,8BAAkB;UAAA;QAAA;QAAA8C,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAA5C,eAAA;QAAA;QAAA6C,IAAAC,8BAAA;UAAAtB,OAAA,oBAZlBxB,eAAA,CAAAA,CAAA,CAAAA,8BAAe;UAAA;QAAA;QAAA+C,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAhD,eAAA;QAAA;QAAAiD,IAAAC,8BAAA;UAAAtB,OAAA,oBAxDrB5B,eAAA,CAAAA,CAAA,CAAAA,8BAAe;UAAA;QAAA;QAAAmD,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAA/D,gBAAA;QAAA;QAAAgE,IAAAC,8BAAA;UAAAtB,OAAA,qBAlCf3C,gBAAA,CAAAA,CAAA,CAAAA,8BAAgB;UAAA;QAAA;QAAAkE,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAzF,WAAA;QAAA;QAAA0F,IAAAC,8BAAA;UAAAtB,OAAA,gBA5DVrE,WAAA,CAAAA,CAAA,CAAAA,8BAAW;UAAA;QAAA;QAAA4F,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAlG,YAAA;QAAA;QAAAmG,IAAAC,8BAAA;UAAAtB,OAAA,iBANjB9E,YAAA,CAAAA,CAAA,CAAAA,8BAAY;UAAA;QAAA;QAAAqG,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAArH,YAAA;QAAA;QAAAsH,IAAAC,8BAAA;UAAAtB,OAAA,iBAxCZjG,YAAA,CAAAA,CAAA,CAAAA,8BAAY;UAAA;QAAA;QAAAwH,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAA3I,WAAA;QAAA;QAAA4I,IAAAC,8BAAA;UAAAtB,OAAA,gBAxBZvH,WAAA,CAAAA,CAAA,CAAAA,8BAAW;UAAA;QAAA;QAAA8I,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAA/G,SAAA;QAAA;QAAAgH,IAAAC,8BAAA;UALpBjH,SAAA,CAAAA,CAAA,CAAAA,8BAAS;UAAA;QAAA;QAAAkH,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAtD,CAAA;QAAA;QAAAuD,IAAAC,8BAAA;UACTxD,CAAA,CAAAA,CAAA,CAAAA,8BAAC;UAAA;QAAA;QAAAyD,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAA7C,UAAA;QAAA;QAAA8C,IAAAC,8BAAA;UACC/C,UAAA,CAAAA,CAAA,CAAAA,8BAAU;UAAA;QAAA;QAAAgD,UAAA;QAAAC,YAAA;MAAA;MAAAvE,MAAA,CAAAkE,cAAA,CAAAF,UAAA,CAAAC,oBAAA;QAAAE,IAAA;UAAA,OAAAN,EAAA;QAAA;QAAAO,IAAAC,8BAAA;UACXR,EAAA,CAAAA,CAAA,CAAAA,8BAAE;UAAA;QAAA;QAAAS,UAAA;QAAAC,YAAA;MAAA;IAAA;EAAA;AAAA"}