From 97f5385bfba2da991111992912b445e3150a2e14 Mon Sep 17 00:00:00 2001 From: matt Date: Fri, 1 Aug 2025 08:47:56 +0200 Subject: [PATCH] neue ktw version mit seperaten highscores --- .../klick-the-witch/Klick the Witch 1.2.html | 121 ++++++++++-------- 1 file changed, 65 insertions(+), 56 deletions(-) diff --git a/programmieren/spiele/klick-the-witch/Klick the Witch 1.2.html b/programmieren/spiele/klick-the-witch/Klick the Witch 1.2.html index 9fec866..487234a 100644 --- a/programmieren/spiele/klick-the-witch/Klick the Witch 1.2.html +++ b/programmieren/spiele/klick-the-witch/Klick the Witch 1.2.html @@ -258,11 +258,20 @@ for (const provider of Object.values(providers)) scaffolding.addCloudProvider(pr scaffolding.addCloudProviderOverride("☁ username", providers["local"] || null); scaffolding.addCloudProviderOverride("☁ DIE BÖSEN HEXEN", providers["local"] || null); scaffolding.addCloudProviderOverride("☁ DIE GUTEN HEXEN", providers["local"] || null); -scaffolding.addCloudProviderOverride("☁ Highscore", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Highscore1", providers["local"] || null); scaffolding.addCloudProviderOverride("☁ Leicht", providers["local"] || null); scaffolding.addCloudProviderOverride("☁ Mittel", providers["local"] || null); scaffolding.addCloudProviderOverride("☁ Schwer", providers["local"] || null); -scaffolding.addCloudProviderOverride("☁ Fehler", providers["ws"] || null); +scaffolding.addCloudProviderOverride("☁ Fehler", providers[""] || null); +scaffolding.addCloudProviderOverride("☁ Highscore2", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Highscore3", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Highscore4", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Highscore5", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Punkte1", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Punkte2", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Punkte3", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Punkte4", providers["local"] || null); +scaffolding.addCloudProviderOverride("☁ Punkte5", providers["local"] || null); scaffolding.addCloudProviderOverride("☁ Osterdatum tag", providers["ws"] || null); scaffolding.addCloudProviderOverride("☁ Osterdatum Monat", providers["ws"] || null); }; @@ -370,7 +379,7 @@ scaffolding.addCloudProviderOverride("☁ Osterdatum Monat", providers["ws"] || getSandboxMode: () => 'unsandboxed', canLoadExtensionFromProject: () => true }); - for (const extension of ["data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Animated%20Text%0A%2F%2F%20ID%3A%20text%0A%2F%2F%20Description%3A%20An%20easy%20way%20to%20display%20and%20animate%20text.%20Compatible%20with%20Scratch%20Lab's%20Animated%20Text%20experiment.%0A%2F%2F%20By%3A%20LilyMakesThings%0A%2F%2F%20License%3A%20MIT%20AND%20LGPL-3.0%0A%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Animated%20Text%22%3A%22Animierter%20Text%22%7D%2C%22fi%22%3A%7B%22_%23%20of%20lines%22%3A%22rivien%20m%C3%A4%C3%A4r%C3%A4%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22rivien%20m%C3%A4%C3%A4r%C3%A4%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22Animoitu%20teksti%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Ota%20Scratch%20Labin%20ulkopuoliset%20ominaisuudet%20k%C3%A4ytt%C3%B6%C3%B6n%22%2C%22_Hello!%22%3A%22Hei!%22%2C%22_Here%20we%20go!%22%3A%22Aloitetaan!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Ei-yhteensopivia%20Scratch%20Labin%20kanssa%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Tervetuloa%20projektiini!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22animaation%20%5BANIMATE%5D%20kesto%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20teksti%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22lis%C3%A4%C3%A4%20rivi%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22keskit%C3%A4%20teksti%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22suorita%20%5BANIMATE%5D%20animaatio%20loppuun%22%2C%22_center%22%3A%22keskelle%22%2C%22_displayed%20text%22%3A%22n%C3%A4ytetty%20teksti%22%2C%22_is%20animating%3F%22%3A%22onko%20animaatio%20k%C3%A4ynniss%C3%A4%3F%22%2C%22_is%20showing%20text%3F%22%3A%22n%C3%A4ytet%C3%A4%C3%A4nk%C3%B6%20teksti%C3%A4%3F%22%2C%22_left%22%3A%22vasemmalle%22%2C%22_rainbow%22%3A%22sateenkaari%22%2C%22_random%20font%22%3A%22satunnainen%20fontti%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22palauta%20%5BANIMATE%5D%20animaatio%20normaalikestoiseksi%22%2C%22_reset%20text%20width%22%3A%22nollaa%20tekstin%20leveys%22%2C%22_reset%20typing%20delay%22%3A%22nollaa%20kirjoitusv%C3%A4li%22%2C%22_right%22%3A%22oikealle%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22aseta%20%5BANIMATE%5D%20animaatio%20%5BNUM%5D%20sekunnin%20pituiseksi%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22aseta%20fontiksi%20%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22aseta%20reunuksen%20v%C3%A4riksi%20%5BCOLOR%5D%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22aseta%20reunuksen%20paksuudeksi%20%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22aseta%20heilumisen%20voimakkuudeksi%20%5BNUM%5D%20%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22aseta%20tekstin%20v%C3%A4riksi%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22aseta%20kirjoitusv%C3%A4liksi%20%5BNUM%5D%20sekuntia%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22aseta%20leveydeksi%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22aseta%20leveydeksi%20%5BWIDTH%5D%20ja%20keskit%C3%A4%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22n%C3%A4yt%C3%A4%20hahmo%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22n%C3%A4yt%C3%A4%20teksti%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22aloita%20%5BANIMATE%5D%20animaatio%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22tekstin%20%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22kirjoittuva%22%2C%22_typing%20delay%22%3A%22kirjoitusv%C3%A4li%22%2C%22_with%20word%20wrap%22%3A%22tekstin%20rivitys%20mukaan%20lukien%22%2C%22_without%20word%20wrap%22%3A%22ilman%20tekstin%20rivityst%C3%A4%22%2C%22_zoom%22%3A%22l%C3%A4henev%C3%A4%22%2C%22disableCompatibilityMode%22%3A%22T%C3%A4m%C3%A4%20ottaa%20k%C3%A4ytt%C3%B6%C3%B6n%20uusia%20lohkoja%20ja%20ominaisuuksia%2C%20jotka%20EIV%C3%84T%20TOIMI%20virallisessa%20Scratch%20Labissa.%5Cn%5CnHaluatko%20jatkaa%3F%22%7D%2C%22it%22%3A%7B%22_%23%20of%20lines%22%3A%22numero%20di%20righe%22%2C%22_Animated%20Text%22%3A%22Testo%20Animato%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Abilita%20blocchi%20non%20presenti%20in%20Scratch%20Lab%22%2C%22_Hello!%22%3A%22Ciao!%22%2C%22_Here%20we%20go!%22%3A%22Ecco%20fatto!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Non%20compatibili%20con%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Bevenuti%20nel%20mio%20progetto!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22durata%20%5BANIMATE%5D%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22testo%20%5BTEXT%5D%20con%20effetto%20%5BANIMATE%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22aggiugi%20riga%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22allinea%20il%20testo%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22inizia%20animazione%20%5BANIMATE%5D%20e%20attendi%20la%20fine%22%2C%22_center%22%3A%22centro%22%2C%22_displayed%20text%22%3A%22testo%20animato%22%2C%22_is%20animating%3F%22%3A%22animato%22%2C%22_is%20showing%20text%3F%22%3A%22testo%20visibile%22%2C%22_left%22%3A%22a%20sinistra%22%2C%22_rainbow%22%3A%22effetto%20arcobaleno%22%2C%22_random%20font%22%3A%22scelto%20a%20caso%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22resetta%20durata%20animazione%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22resetta%20larghezza%20testo%22%2C%22_reset%20typing%20delay%22%3A%22resetta%20intervallo%20effetto%20digitazione%22%2C%22_right%22%3A%22a%20destra%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22imposta%20durata%20%5BANIMATE%5D%20a%20%5BNUM%5D%20secondi%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22usa%20carattere%20%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22usa%20%5BCOLOR%5D%20come%20colore%20del%20bordo%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22usa%20uno%20spessore%20del%20bordo%20pari%20a%20%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22porta%20l'intensit%C3%A0%20di%20vibrazione%20al%20%5BNUM%5D%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22imposta%20colore%20del%20testo%20a%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22imposta%20intervallo%20effetto%20digitazione%20a%20%5BNUM%5D%20secondi%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22imposta%20larghezza%20a%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22imposta%20larghezza%20a%20%5BWIDTH%5D%20con%20allineamento%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22mostra%20sprite%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22mostra%20testo%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22inizia%20animazione%20%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20del%20testo%22%2C%22_type%22%3A%22effetto%20digitazione%22%2C%22_typing%20delay%22%3A%22intervallo%20effetto%20digitazione%22%2C%22_zoom%22%3A%22effetto%20zoom%22%7D%2C%22ja%22%3A%7B%22_%23%20of%20lines%22%3A%22%E8%A1%8C%E6%95%B0%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%5BWITH_WORD_WRAP%5D%E3%81%AE%E8%A1%8C%E6%95%B0%22%2C%22_Animated%20Text%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Scratch%20Lab%E4%BB%A5%E5%A4%96%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_Hello!%22%3A%22%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF!%22%2C%22_Here%20we%20go!%22%3A%22%E3%81%95%E3%81%81%E8%A1%8C%E3%81%93%E3%81%86!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Scratch%20Lab%E3%81%A8%E3%81%AE%E4%BA%92%E6%8F%9B%E6%80%A7%E3%81%AA%E3%81%97%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%B8%E3%82%88%E3%81%86%E3%81%93%E3%81%9D!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%E3%81%AE%E9%95%B7%E3%81%95%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%5BTEXT%5D%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%E8%A1%8C%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%A6%5BTEXT%5D%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%5BALIGN%5D%E5%AF%84%E3%82%8A%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%97%E3%81%A6%E5%BE%85%E3%81%A4%22%2C%22_center%22%3A%22%E4%B8%AD%E5%A4%AE%22%2C%22_displayed%20text%22%3A%22%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%22%2C%22_is%20animating%3F%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%3F%22%2C%22_left%22%3A%22%E5%B7%A6%22%2C%22_rainbow%22%3A%22%E3%83%AC%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%22%2C%22_random%20font%22%3A%22%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AA%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%81%AE%E9%95%B7%E3%81%95%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B%22%2C%22_reset%20text%20width%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E5%B9%85%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B%22%2C%22_reset%20typing%20delay%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%96%93%E9%9A%94%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%22%2C%22_right%22%3A%22%E5%8F%B3%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%81%AE%E9%95%B7%E3%81%95%E3%82%92%5BNUM%5D%E7%A7%92%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%5BFONT%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%E8%BC%AA%E9%83%AD%E3%81%AE%E8%89%B2%E3%82%92%5BCOLOR%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%E8%BC%AA%E9%83%AD%E3%81%AE%E5%B9%85%E3%82%92%5BWIDTH%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%E3%81%AE%E5%BC%B7%E5%BA%A6%E3%82%92%5BNUM%5D%25%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E8%89%B2%E3%82%92%5BCOLOR%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%96%93%E9%9A%94%E3%82%92%5BNUM%5D%E7%A7%92%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%E5%B9%85%E3%82%92%5BWIDTH%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E5%B9%85%E3%82%92%5BWIDTH%5D%E3%80%81%5BALIGN%5D%E5%AF%84%E3%81%9B%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_show%20sprite%22%3A%22%E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E3%83%88%E3%82%92%E8%A1%A8%E7%A4%BA%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%5BTEXT%5D%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%99%E3%82%8B%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%22%2C%22_typing%20delay%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%96%93%E9%9A%94%22%2C%22_with%20word%20wrap%22%3A%22%E9%80%94%E4%B8%AD%E6%94%B9%E8%A1%8C%E3%82%92%E5%90%AB%E3%82%93%E3%81%A7%22%2C%22_without%20word%20wrap%22%3A%22%E9%80%94%E4%B8%AD%E6%94%B9%E8%A1%8C%E3%82%92%E5%90%AB%E3%81%BE%E3%81%AA%E3%81%84%E3%81%A7%22%2C%22_zoom%22%3A%22%E3%82%BA%E3%83%BC%E3%83%A0%22%2C%22disableCompatibilityMode%22%3A%22%E3%81%93%E3%82%8C%E3%81%AFScratch%20Lab%E3%81%A7%E3%81%AF%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%84%E6%A9%9F%E8%83%BD%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%5Cn%5Cn%E7%B6%9A%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F%22%7D%2C%22ko%22%3A%7B%22_%23%20of%20lines%22%3A%22%EC%A4%84%20%EC%88%98%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%5BWITH_WORD_WRAP%5D%20%EC%A4%84%20%EC%88%98%22%2C%22_Animated%20Text%22%3A%22%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%EB%B9%84%20Scratch%20Lab%20%EA%B8%B0%EB%8A%A5%20%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_Hello!%22%3A%22%EC%95%88%EB%85%95!%22%2C%22_Here%20we%20go!%22%3A%22%EA%B0%84%EB%8B%A4!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Scratch%20Lab%EA%B3%BC%20%ED%98%B8%ED%99%98%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%8C%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%EC%A0%9C%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%20%EC%98%A4%EC%8B%A0%EA%B1%B8%20%ED%99%98%EC%98%81%ED%95%B4%EC%9A%94!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%EC%9D%98%20%EB%8F%99%EC%9E%91%20%EC%8B%9C%EA%B0%84%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%EB%AC%B8%EA%B5%AC%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%5BALIGN%5D%20%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%5BANIMATE%5D%20%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%EC%8B%9C%EC%9E%91%ED%95%98%EA%B3%A0%20%EA%B8%B0%EB%8B%A4%EB%A6%AC%EA%B8%B0%22%2C%22_center%22%3A%22%EA%B0%80%EC%9A%B4%EB%8D%B0%22%2C%22_displayed%20text%22%3A%22%EB%82%98%ED%83%80%EB%82%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%22%2C%22_is%20animating%3F%22%3A%22%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%EC%A4%91%EC%9D%B8%EA%B0%80%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%EA%B0%80%20%EB%82%98%ED%83%80%EB%82%AC%EB%8A%94%EA%B0%80%3F%22%2C%22_left%22%3A%22%EC%99%BC%EC%AA%BD%22%2C%22_rainbow%22%3A%22%EB%AC%B4%EC%A7%80%EA%B0%9C%22%2C%22_random%20font%22%3A%22%EB%AC%B4%EC%9E%91%EC%9C%84%20%EA%B8%80%EA%BC%B4%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%EC%9D%98%20%EB%8F%99%EC%9E%91%20%EC%8B%9C%EA%B0%84%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_reset%20text%20width%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EB%84%93%EC%9D%B4%EB%A5%BC%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_reset%20typing%20delay%22%3A%22%ED%83%80%EC%9E%90%20%ED%9A%A8%EA%B3%BC%EC%9D%98%20%EA%B0%84%EA%B2%A9%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_right%22%3A%22%EC%98%A4%EB%A5%B8%EC%AA%BD%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%5BANIMATE%5D%EC%9D%98%20%EB%8F%99%EC%9E%91%20%EC%8B%9C%EA%B0%84%EC%9D%84%20%5BNUM%5D%EC%B4%88%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%EA%B8%80%EA%BC%B4%EC%9D%84%20%5BFONT%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%ED%85%8C%EB%91%90%EB%A6%AC%20%EC%83%89%EC%9D%84%20%5BCOLOR%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%ED%85%8C%EB%91%90%EB%A6%AC%20%EB%91%90%EA%BB%98%EB%A5%BC%20%5BWIDTH%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%83%89%EC%9D%84%20%5BCOLOR%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%ED%83%80%EC%9E%90%20%ED%9A%A8%EA%B3%BC%EC%9D%98%20%EA%B0%84%EA%B2%A9%EC%9D%84%20%5BNUM%5D%EC%B4%88%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%EB%84%93%EC%9D%B4%EB%A5%BC%20%5BWIDTH%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%EB%84%93%EC%9D%B4%20%5BWIDTH%5D%EC%9D%98%20%5BALIGN%5D%20%EC%A0%95%EB%A0%AC%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_show%20sprite%22%3A%22%EC%8A%A4%ED%94%84%EB%9D%BC%EC%9D%B4%ED%8A%B8%EB%A1%9C%20%EB%B3%B4%EC%9D%B4%EA%B8%B0%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%5BTEXT%5D%20%EB%B3%B4%EC%9D%B4%EA%B8%B0%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%5BANIMATE%5D%20%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%9D%98%20%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22%ED%83%80%EC%9E%90%22%2C%22_typing%20delay%22%3A%22%ED%83%80%EC%9E%90%20%ED%9A%A8%EA%B3%BC%EC%9D%98%20%EA%B0%84%EA%B2%A9%22%2C%22_with%20word%20wrap%22%3A%22%EC%A4%84%EB%B0%94%EA%BF%88%EC%9D%84%20%ED%8F%AC%ED%95%A8%ED%95%9C%22%2C%22_without%20word%20wrap%22%3A%22%EC%A4%84%EB%B0%94%EA%BF%88%EC%9D%84%20%EC%A0%9C%EC%99%B8%ED%95%9C%22%2C%22_zoom%22%3A%22%EC%BB%A4%EC%A7%80%EA%B8%B0%22%2C%22disableCompatibilityMode%22%3A%22%EC%95%9E%EC%9C%BC%EB%A1%9C%20%EC%B6%94%EA%B0%80%EB%90%98%EB%8A%94%20%EA%B8%B0%EB%93%B1%EB%93%A4%EC%9D%80%20%EA%B3%B5%EC%8B%9D%20Scratch%20Lab%EA%B3%BC%20%ED%98%B8%ED%99%98%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.%5Cn%5Cn%EA%B3%84%EC%86%8D%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%22%7D%2C%22nb%22%3A%7B%22_%23%20of%20lines%22%3A%22%23%20av%20linjer%22%2C%22_Animated%20Text%22%3A%22Animert%20Tekst%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Aktiver%20funksjoner%20som%20er%20ikke%20tilgjengelig%20i%20scratch%20lab%22%2C%22_Hello!%22%3A%22Hei!%22%2C%22_Here%20we%20go!%22%3A%22Her%20g%C3%A5r%20vi!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Inkompatibel%20med%20Scratch%20Lab.%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Velkommen%20til%20mitt%20prosjekt!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%20varighet%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20tekst%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22legg%20til%20linje%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22juster%20teksten%20til%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22animere%20%5BANIMATE%5D%20til%20ferdig%22%2C%22_center%22%3A%22senter%22%2C%22_displayed%20text%22%3A%22vist%20tekst%22%2C%22_is%20animating%3F%22%3A%22er%20animerer%3F%22%2C%22_is%20showing%20text%3F%22%3A%22viser%20teksten%3F%22%2C%22_left%22%3A%22venstre%22%2C%22_rainbow%22%3A%22regnbue%22%2C%22_random%20font%22%3A%22tilfeldig%20skrifttype%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22tilbakestill%20%5BANIMATE%5D%20varighet%22%2C%22_reset%20text%20width%22%3A%22tilbakestill%20tekstbredde%22%2C%22_reset%20typing%20delay%22%3A%22nullstill%20skriveforsinkelse%22%2C%22_right%22%3A%22riktig%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22sett%20%5BANIMATE%5D%20varighet%20til%20%5BNUM%5D%20sekunder%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22sett%20skrifttype%20til%20%5BFONT%5D%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22sett%20tekstfarge%20til%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22sett%20skriveforsinkelse%20til%20%5BNUM%5D%20sekunder%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22sett%20bredde%20til%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22sett%20bredde%20til%20%5BWIDTH%5D%20justert%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22vis%20sprite%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22vis%20tekst%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22start%20%5BANIMATE%5D%20animasjon%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22tekst%20%5BATTRIBUTE%5D%22%2C%22_typing%20delay%22%3A%22skriveforsinkelse%22%2C%22disableCompatibilityMode%22%3A%22Dette%20vil%20aktivere%20nye%20blokker%20og%20funksjoner%20som%20ikke%20vil%20fungere%20i%20den%20offisielle%20Scratch%20Lab.%5Cn%5Cn%C3%98nsker%20du%20%C3%A5%20fortsette%3F%22%7D%2C%22nl%22%3A%7B%22_%23%20of%20lines%22%3A%22aantal%20regels%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22aantal%20regels%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22Geanimeerde%20tekst%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Niet-Scratch%20Lab%20Functies%20Inschakelen%22%2C%22_Hello!%22%3A%22Hallo!%22%2C%22_Here%20we%20go!%22%3A%22Daar%20gaan%20we!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Incompatibel%20met%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Welkom%20bij%20mijn%20project!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22duur%20van%20%5BANIMATE%5D%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20tekst%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22voeg%20regel%20%5BTEXT%5D%20toe%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22lijn%20tekst%20%5BALIGN%5D%20uit%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22start%20animatie%20%5BANIMATE%5D%20en%20wacht%22%2C%22_center%22%3A%22midden%22%2C%22_displayed%20text%22%3A%22weergegeven%20tekst%22%2C%22_is%20animating%3F%22%3A%22animatie%20bezig%3F%22%2C%22_is%20showing%20text%3F%22%3A%22tekst%20aan%20het%20tonen%3F%22%2C%22_left%22%3A%22links%22%2C%22_rainbow%22%3A%22regenboog%22%2C%22_random%20font%22%3A%22willekeurig%20lettertype%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22reset%20duur%20van%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22reset%20tekstbreedte%22%2C%22_reset%20typing%20delay%22%3A%22reset%20wachttijd%20van%20typ-animatie%22%2C%22_right%22%3A%22rechts%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22maak%20duur%20van%20%5BANIMATE%5D%20%5BNUM%5D%20seconden%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22maak%20lettertype%20%5BFONT%5D%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22maak%20tekstkleur%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22maak%20wachttijd%20van%20typ-animatie%20%5BNUM%5D%20seconden%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22maak%20breedte%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22maak%20breedte%20%5BWIDTH%5D%20%5BALIGN%5D%20uitgelijnd%22%2C%22_show%20sprite%22%3A%22toon%20sprite%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22toon%20tekst%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22start%20animatie%20%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20van%20tekst%22%2C%22_type%22%3A%22typen%22%2C%22_typing%20delay%22%3A%22wachttijd%20van%20typ-animatie%22%2C%22_with%20word%20wrap%22%3A%22met%20tekstterugloop%22%2C%22_without%20word%20wrap%22%3A%22zonder%20tekstterugloop%22%2C%22disableCompatibilityMode%22%3A%22Dit%20voegt%20nieuwe%20blokken%20en%20functies%20toe%20die%20NIET%20werken%20in%20het%20offici%C3%ABle%20Scratch%20Lab.%5Cn%5CnWil%20je%20verdergaan%3F%22%7D%2C%22pl%22%3A%7B%22_Animated%20Text%22%3A%22Animowany%20Tekst%22%2C%22_Hello!%22%3A%22Cze%C5%9B%C4%87!%22%7D%2C%22ru%22%3A%7B%22_%23%20of%20lines%22%3A%22%D0%BA%D0%BE%D0%BB-%D0%B2%D0%BE%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%23%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22%D0%90%D0%BD%D0%B8%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%A2%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%20%D0%BD%D0%B5%20%D0%B8%D0%B7%20Scratch%20Lab%22%2C%22_Hello!%22%3A%22%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82!%22%2C%22_Here%20we%20go!%22%3A%22%D0%9F%D0%BE%D0%B5%D1%85%D0%B0%D0%BB%D0%B8!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22%D0%9D%D0%B5%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D0%BE%20%D1%81%D0%BE%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%D0%94%D0%BE%D0%B1%D1%80%D0%BE%20%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B2%20%D0%BC%D0%BE%D0%B9%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%5BANIMATE%5D%20%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%D0%B2%D1%8B%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%BF%D0%BE%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%D0%B0%D0%BD%D0%B8%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%B4%D0%BE%20%D0%BA%D0%BE%D0%BD%D1%86%D0%B0%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%D1%83%22%2C%22_displayed%20text%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_is%20animating%3F%22%3A%22%D0%B0%D0%BD%D0%B8%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D1%82%D1%81%D1%8F%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%3F%22%2C%22_left%22%3A%22%D0%BB%D0%B5%D0%B2%D0%BE%D0%BC%D1%83%20%D0%BA%D1%80%D0%B0%D1%8E%22%2C%22_rainbow%22%3A%22%D1%80%D0%B0%D0%B4%D1%83%D0%B6%D0%BD%D1%8B%D0%B9%22%2C%22_random%20font%22%3A%22%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D1%88%D1%80%D0%B8%D1%84%D1%82%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%D1%81%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22%D1%81%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%22%2C%22_reset%20typing%20delay%22%3A%22%D1%81%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D1%83%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D0%B8%D1%8F%22%2C%22_right%22%3A%22%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BC%D1%83%20%D0%BA%D1%80%D0%B0%D1%8E%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%5BANIMATE%5D%20%D0%B2%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D1%80%D0%B8%D1%84%D1%82%20%D0%B2%20%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%86%D0%B2%D0%B5%D1%82%20%D0%BE%D0%B1%D0%B2%D0%BE%D0%B4%D0%BA%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BCOLOR%5D%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D0%B5%20%D0%BE%D0%B1%D0%B2%D0%BE%D0%B4%D0%BA%D0%B8%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%81%D0%B8%D0%BB%D1%83%20%D1%82%D1%80%D1%8F%D1%81%D0%BA%D0%B8%20%D0%BD%D0%B0%5BNUM%5D%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%86%D0%B2%D0%B5%D1%82%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D0%B2%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D1%83%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B2%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D0%B2%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D0%B2%20%5BWIDTH%5D%20%D0%B2%D1%8B%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D0%BF%D0%BE%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D1%80%D0%B0%D0%B9%D1%82%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8E%20%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%22%2C%22_type%22%3A%22%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F%22%2C%22_typing%20delay%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D0%B8%D1%8F%22%2C%22_with%20word%20wrap%22%3A%22%D1%81%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%BE%D0%BC%20%D1%81%D0%BB%D0%BE%D0%B2%22%2C%22_without%20word%20wrap%22%3A%22%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%B0%20%D1%81%D0%BB%D0%BE%D0%B2%22%2C%22_zoom%22%3A%22%D0%B2%D1%8B%D1%80%D0%B0%D1%81%D1%82%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%22%2C%22disableCompatibilityMode%22%3A%22%D0%AD%D1%82%D0%BE%20%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%20%D0%B8%20%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5%20%D0%9D%D0%95%20%D0%91%D0%A3%D0%94%D0%A3%D0%A2%20%D0%A0%D0%90%D0%91%D0%9E%D0%A2%D0%90%D0%A2%D0%AC%20%D0%B2%20%D0%BE%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20Scratch.%5Cn%5Cn%D0%92%D1%8B%20%D0%B6%D0%B5%D0%BB%D0%B0%D0%B5%D1%82%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D1%8C%3F%22%7D%2C%22uk%22%3A%7B%22_%23%20of%20lines%22%3A%22%D0%BA%D1%96%D0%BB%D1%8C%D0%BA%D1%96%D1%81%D1%82%D1%8C%20%D0%BB%D1%96%D0%BD%D1%96%D0%B9%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%D0%BA%D1%96%D0%BB%D1%8C%D0%BA%D1%96%D1%81%D1%82%D1%8C%20%D0%BB%D1%96%D0%BD%D1%96%D0%B9%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22%D0%90%D0%BD%D1%96%D0%BC%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%A2%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%D0%A3%D0%B2%D1%96%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%B8%20%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%20%D0%9F%D0%BE%D0%B7%D0%B0%20Scratch%20Lab%22%2C%22_Hello!%22%3A%22%D0%9F%D1%80%D0%B8%D0%B2%D1%96%D1%82!%22%2C%22_Here%20we%20go!%22%3A%22%D0%9F%D0%BE%D1%87%D0%B8%D0%BD%D0%B0%D1%94%D0%BC%D0%BE!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22%D0%9D%D0%B5%D1%81%D1%83%D0%BC%D1%96%D1%81%D0%BD%D1%96%20%D1%96%D0%B7%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%D0%92%D1%96%D1%82%D0%B0%D1%94%D0%BC%D0%BE%20%D1%83%20%D0%BC%D0%BE%D1%94%D0%BC%D1%83%20%D0%BF%D1%80%D0%BE%D1%94%D0%BA%D1%82%D1%96!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%BB%D1%96%D1%81%D1%82%D1%8C%20%5BANIMATE%5D%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%D0%B4%D0%BE%D0%B4%D0%B0%D1%82%D0%B8%20%D0%BB%D1%96%D0%BD%D1%96%D1%8E%20%5BTEXT%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%D0%B0%D0%BD%D1%96%D0%BC%D1%83%D0%B2%D0%B0%D1%82%D0%B8%5BANIMATE%5D%20%D0%B4%D0%BE%20%D0%BA%D1%96%D0%BD%D1%86%D1%8F%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%22%2C%22_displayed%20text%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%B8%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_is%20animating%3F%22%3A%22%D0%B0%D0%BD%D1%96%D0%BC%D1%83%D1%94%D1%82%D1%8C%D1%81%D1%8F%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%83%D1%94%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%3F%22%2C%22_left%22%3A%22%D0%BB%D1%96%D0%B2%D0%BE%22%2C%22_rainbow%22%3A%22%D0%B2%D0%B5%D1%81%D0%B5%D0%BB%D0%BA%D0%B0%22%2C%22_random%20font%22%3A%22%D0%B2%D0%B8%D0%BF%D0%B0%D0%B4%D0%BA%D0%BE%D0%B2%D0%B8%D0%B9%20%D1%88%D1%80%D0%B8%D1%84%D1%82%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%D1%81%D0%BA%D0%B8%D0%BD%D1%83%D1%82%D0%B8%20%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%BB%D1%96%D1%81%D1%82%D1%8C%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22%D1%81%D0%BA%D0%B8%D0%BD%D1%83%D1%82%D0%B8%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%22%2C%22_reset%20typing%20delay%22%3A%22%D1%81%D0%BA%D0%B8%D0%BD%D1%83%D1%82%D0%B8%20%D0%B7%D0%B0%D1%82%D1%80%D0%B8%D0%BC%D0%BA%D1%83%20%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%22%2C%22_right%22%3A%22%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%BB%D1%96%D1%81%D1%82%D1%8C%20%5BANIMATE%5D%20%D0%B4%D0%BE%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%88%D1%80%D0%B8%D1%84%D1%82%20%5BFONT%5D%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D0%BA%D0%BE%D0%BB%D1%96%D1%80%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D0%B7%D0%B0%D1%82%D1%80%D0%B8%D0%BC%D0%BA%D1%83%20%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%5BWIDTH%5D%20%D0%BF%D0%BE%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B8%20%D1%81%D0%BF%D1%80%D0%B0%D0%B9%D1%82%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B8%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%D0%BF%D0%BE%D1%87%D0%B0%D1%82%D0%B8%20%D0%B0%D0%BD%D1%96%D0%BC%D0%B0%D1%86%D1%96%D1%8E%20%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%22%2C%22_type%22%3A%22%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%22%2C%22_typing%20delay%22%3A%22%D0%B7%D0%B0%D1%82%D1%80%D0%B8%D0%BC%D0%BA%D0%B0%20%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%22%2C%22_with%20word%20wrap%22%3A%22%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%BE%D0%BC%20%D1%81%D0%BB%D1%96%D0%B2%22%2C%22_without%20word%20wrap%22%3A%22%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D1%83%20%D1%81%D0%BB%D1%96%D0%B2%22%2C%22_zoom%22%3A%22%D0%B7%D1%83%D0%BC%22%2C%22disableCompatibilityMode%22%3A%22%D0%A6%D0%B5%20%D0%B4%D0%BE%D0%B4%D0%B0%D1%94%20%D0%BD%D0%BE%D0%B2%D1%96%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%20%D1%8F%D0%BA%D1%96%20%D0%9D%D0%95%20%D0%9F%D0%A0%D0%90%D0%A6%D0%AE%D0%92%D0%90%D0%A2%D0%98%D0%9C%D0%A3%D0%A2%D0%AC%20%D0%BD%D0%B0%20%D0%BE%D1%84%D1%96%D1%86%D1%96%D0%B9%D0%BD%D1%96%D0%B9%20Scratch%20Lab.%5Cn%5Cn%D0%91%D0%B0%D0%B6%D0%B0%D1%94%D1%82%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%B2%D0%B6%D0%B8%D1%82%D0%B8%3F%22%7D%2C%22zh-cn%22%3A%7B%22_%23%20of%20lines%22%3A%22%E6%96%87%E6%9C%AC%E8%A1%8C%E6%95%B0%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%5BWITH_WORD_WRAP%5D%E6%97%B6%E7%9A%84%E8%A1%8C%E6%95%B0%22%2C%22_Animated%20Text%22%3A%22%E8%89%BA%E6%9C%AF%E5%AD%97%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%E6%98%BE%E7%A4%BA%E4%B8%8EScratch%20Lab%E4%B8%8D%E5%85%BC%E5%AE%B9%E7%9A%84%E7%A7%AF%E6%9C%A8%22%2C%22_Hello!%22%3A%22%E4%BD%A0%E5%A5%BD%EF%BC%81%22%2C%22_Here%20we%20go!%22%3A%22%E7%8E%B0%E5%9C%A8%E5%87%BA%E5%8F%91%EF%BC%81%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22%E4%BB%A5%E4%B8%8B%E7%A7%AF%E6%9C%A8%E4%B8%8EScratch%20Lab%E4%B8%8D%E5%85%BC%E5%AE%B9%EF%BC%9A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E4%BD%9C%E5%93%81%EF%BC%81%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E7%9A%84%E5%AE%8C%E6%88%90%E6%97%B6%E9%97%B4%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%E6%98%AF%5BANIMATE%5D%E7%9A%84%E6%96%87%E6%9C%AC%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%E5%A2%9E%E5%8A%A0%E4%B8%80%E8%A1%8C%E6%96%87%E6%9C%AC%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%E5%B0%86%E6%96%87%E6%9C%AC%E7%9A%84%E5%B1%95%E7%A4%BA%E6%A0%B7%E5%BC%8F%E8%AE%BE%E4%B8%BA%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E5%B9%B6%E7%AD%89%E5%BE%85%22%2C%22_center%22%3A%22%E5%B1%85%E4%B8%AD%22%2C%22_displayed%20text%22%3A%22%E6%98%BE%E7%A4%BA%E7%9A%84%E6%96%87%E6%9C%AC%22%2C%22_is%20animating%3F%22%3A%22%E6%AD%A3%E5%9C%A8%E6%98%BE%E7%A4%BA%E8%89%BA%E6%9C%AF%E5%AD%97%EF%BC%9F%22%2C%22_is%20showing%20text%3F%22%3A%22%E6%96%87%E6%9C%AC%E6%98%BE%E7%A4%BA%E4%BA%86%EF%BC%9F%22%2C%22_left%22%3A%22%E5%B1%85%E5%B7%A6%22%2C%22_rainbow%22%3A%22%E5%BD%A9%E8%99%B9%E8%89%B2%22%2C%22_random%20font%22%3A%22%E9%9A%8F%E6%9C%BA%E5%AD%97%E4%BD%93%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%E9%87%8D%E7%BD%AE%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E7%9A%84%E5%AE%8C%E6%88%90%E6%97%B6%E9%97%B4%22%2C%22_reset%20text%20width%22%3A%22%E9%87%8D%E7%BD%AE%E6%96%87%E6%9C%AC%E5%AE%BD%E5%BA%A6%22%2C%22_reset%20typing%20delay%22%3A%22%E9%87%8D%E7%BD%AE%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%22%2C%22_right%22%3A%22%E5%B1%85%E5%8F%B3%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%E5%B0%86%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E7%9A%84%E5%AE%8C%E6%88%90%E6%97%B6%E9%97%B4%E8%AE%BE%E4%B8%BA%5BNUM%5D%E7%A7%92%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%E5%B0%86%E5%AD%97%E4%BD%93%E8%AE%BE%E4%B8%BA%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%E5%B0%86%E8%BD%AE%E5%BB%93%E9%A2%9C%E8%89%B2%E8%AE%BE%E4%B8%BA%5BCOLOR%5D%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%E5%B0%86%E8%BD%AE%E5%BB%93%E5%A4%A7%E5%B0%8F%E8%AE%BE%E4%B8%BA%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22%E5%B0%86%E6%8A%96%E5%8A%A8%E5%BC%BA%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BNUM%5D%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%E5%B0%86%E6%96%87%E6%9C%AC%E9%A2%9C%E8%89%B2%E8%AE%BE%E4%B8%BA%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%E5%B0%86%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BNUM%5D%E7%A7%92%2F%E5%AD%97%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%E5%B0%86%E6%96%87%E6%9C%AC%E7%9A%84%E5%AE%BD%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%E5%B0%86%E5%AE%BD%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BWIDTH%5D%E6%A0%B7%E5%BC%8F%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22%E6%98%BE%E7%A4%BA%E8%A7%92%E8%89%B2%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%E6%98%BE%E7%A4%BA%E6%96%87%E6%9C%AC%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%E6%96%87%E6%9C%AC%E7%9A%84%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%22%2C%22_typing%20delay%22%3A%22%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%22%2C%22_with%20word%20wrap%22%3A%22%E6%9C%89%E8%87%AA%E5%8A%A8%E6%8D%A2%E8%A1%8C%22%2C%22_without%20word%20wrap%22%3A%22%E4%B8%8D%E6%8D%A2%E8%A1%8C%22%2C%22_zoom%22%3A%22%E7%A7%BB%E5%8A%A8%E5%8A%A8%E7%94%BB%22%2C%22disableCompatibilityMode%22%3A%22%E8%BF%99%E5%B0%86%E4%BC%9A%E5%90%AF%E7%94%A8%E6%96%B0%E7%9A%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E8%BF%99%E4%BA%9B%E7%A7%AF%E6%9C%A8%E6%98%AF%E4%B8%8D%E5%85%BC%E5%AE%B9Scratch%20Lab%E3%80%82%5Cn%5Cn%E6%98%AF%E5%90%A6%E5%90%AF%E7%94%A8%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9F%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20%2F%2F%20This%20extension%20was%20created%20by%20making%20projects%20with%20https%3A%2F%2Flab.scratch.mit.edu%2Ftext%2F%0A%20%20%2F%2F%20To%20determine%20block%20and%20argument%20IDs%2C%20we%20extracted%20project.json%20and%20examined%20the%20result.%0A%20%20%2F%2F%20To%20determine%20block%20behaviors%20we%20simply%20experiment%20with%20Scratch%20Lab%20and%20made%20sure%20our%0A%20%20%2F%2F%20blocks%20do%20the%20same%20things.%0A%20%20%2F%2F%20This%20extension's%20code%20is%20not%20based%20on%20the%20source%20code%20of%20Scratch%20Lab's.%0A%0A%20%20%2F%2F%20by%20%40LilyMakesThings%0A%20%20const%20blockIconURI%20%3D%0A%20%20%20%20%22data%3Aimage%2Fsvg%2Bxml%3B%2C%253Csvg%2520xmlns%253D%2522http%253A%252F%252Fwww.w3.org%252F2000%252Fsvg%2522%2520width%253D%2522284.242%2522%2520height%253D%2522284.242%2522%253E%253Cg%2520fill-rule%253D%2522evenodd%2522%2520stroke-miterlimit%253D%252210%2522%2520data-paper-data%253D%2522%257B%2526quot%253BisPaintingLayer%2526quot%253B%253Atrue%257D%2522%2520style%253D%2522mix-blend-mode%253Anormal%2522%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.83%2520522.83%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%252396f%2522%2520stroke%253D%2522%25237240d6%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%252229%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.83%2520522.83%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%2523ffa24d%2522%2520stroke%253D%2522%2523fff%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%25229%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%252396f%2522%2520stroke%253D%2522%25237240d6%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%252229%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%2523ff774d%2522%2520stroke%253D%2522%2523fff%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%25229%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253Cpath%2520fill%253D%2522%252396f%2522%2520stroke%253D%2522%25237240d6%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%252229%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253Cpath%2520fill%253D%2522%2523ff4c4c%2522%2520stroke%253D%2522%2523fff%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%25229%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253C%252Fg%253E%253C%252Fsvg%253E%22%3B%0A%0A%20%20const%20CUSTOM_STATE_KEY%20%3D%20Symbol()%3B%0A%0A%20%20const%20ALIGN_LEFT%20%3D%200%3B%0A%20%20const%20ALIGN_RIGHT%20%3D%201%3B%0A%20%20const%20ALIGN_CENTER%20%3D%202%3B%0A%0A%20%20const%20vm%20%3D%20Scratch.vm%3B%0A%20%20const%20renderer%20%3D%20vm.renderer%3B%0A%20%20const%20gl%20%3D%20renderer.gl%3B%0A%0A%20%20let%20compatibilityMode%20%3D%20true%3B%0A%0A%20%20const%20FONTS%20%3D%20%5B%0A%20%20%20%20%22Sans%20Serif%22%2C%0A%20%20%20%20%22Serif%22%2C%0A%20%20%20%20%22Handwriting%22%2C%0A%20%20%20%20%22Marker%22%2C%0A%20%20%20%20%22Curly%22%2C%0A%20%20%20%20%22Pixel%22%2C%0A%20%20%20%20%22Scratch%22%2C%0A%20%20%5D%3B%0A%0A%20%20const%20DEFAULT_COLOR%20%3D%20%22%23575e75%22%3B%0A%20%20const%20DEFAULT_FONT%20%3D%20%22Handwriting%22%3B%0A%20%20const%20DEFAULT_ALIGN%20%3D%20ALIGN_CENTER%3B%0A%20%20const%20DEFAULT_FONT_SIZE%20%3D%2024%3B%0A%20%20const%20DEFAULT_OUTLINE_WIDTH%20%3D%200%3B%20%2F%2F%200%20%3D%20no%20outline%0A%20%20const%20DEFAULT_OUTLINE_COLOR%20%3D%20%22%23000000%22%3B%0A%0A%20%20const%20DEFAULT_TYPE_DELAY%20%3D%201000%20%2F%2015%3B%0A%0A%20%20const%20RAINBOW_TIME_PER%20%3D%201000%3B%0A%20%20const%20DEFAULT_RAINBOW_DURATION%20%3D%202000%3B%0A%0A%20%20const%20DEFAULT_ZOOM_DURATION%20%3D%20500%3B%0A%0A%20%20const%20DEFAULT_SHAKE_INTENSITY%20%3D%20100%3B%0A%20%20const%20DEFAULT_SHAKE_DURATION%20%3D%20500%3B%0A%0A%20%20let%20globalFrameTime%20%3D%200%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40typedef%20TextState%0A%20%20%20*%20%40property%20%7BTextCostumeSkin%7D%20skin%0A%20%20%20*%2F%0A%0A%20%20%2F%2F%20temporary%0A%20%20if%20(!renderer.exports%20%7C%7C%20!renderer.exports.Skin%20%7C%7C%20!vm.exports)%20%7B%0A%20%20%20%20alert(%22VM%20is%20too%20old%20for%20animated%20text%20extension%22)%3B%0A%20%20%20%20throw%20new%20Error(%22VM%20is%20too%20old%22)%3B%0A%20%20%7D%0A%0A%20%20const%20Skin%20%3D%20renderer.exports.Skin%3B%0A%20%20const%20CanvasMeasurementProvider%20%3D%20renderer.exports.CanvasMeasurementProvider%3B%0A%20%20const%20twgl%20%3D%20renderer.exports.twgl%3B%0A%20%20const%20RenderedTarget%20%3D%20vm.exports.RenderedTarget%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7Bnumber%7D%20c%0A%20%20%20*%20%40returns%20%7Bstring%7D%0A%20%20%20*%2F%0A%20%20const%20formatComponent%20%3D%20(c)%20%3D%3E%20Math.round(c).toString(16).padStart(2%2C%20%220%22)%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7B%5Bnumber%2C%20number%2C%20number%5D%7D%20color%0A%20%20%20*%20%40returns%20%7Bstring%7D%0A%20%20%20*%2F%0A%20%20const%20formatColor%20%3D%20(color)%20%3D%3E%0A%20%20%20%20%60%23%24%7BformatComponent(color%5B0%5D)%7D%24%7BformatComponent(color%5B1%5D)%7D%24%7BformatComponent(%0A%20%20%20%20%20%20color%5B2%5D%0A%20%20%20%20)%7D%60%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7Bnumber%7D%20h%20hue%20from%200-1%0A%20%20%20*%20%40param%20%7Bnumber%7D%20s%20saturation%20from%200-1%0A%20%20%20*%20%40param%20%7Bnumber%7D%20v%20value%20from%200-1%0A%20%20%20*%20%40returns%20%7B%5Bnumber%2C%20number%2C%20number%5D%7D%20RGB%20channels%20from%200-255%0A%20%20%20*%2F%0A%20%20const%20hsvToRGB%20%3D%20(h%2C%20s%2C%20v)%20%3D%3E%20%7B%0A%20%20%20%20%2F%2F%20https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHSL_and_HSV%0A%20%20%20%20var%20r%2C%20g%2C%20b%3B%0A%20%20%20%20var%20i%20%3D%20Math.floor(h%20*%206)%3B%0A%20%20%20%20var%20f%20%3D%20h%20*%206%20-%20i%3B%0A%20%20%20%20var%20p%20%3D%20v%20*%20(1%20-%20s)%3B%0A%20%20%20%20var%20q%20%3D%20v%20*%20(1%20-%20f%20*%20s)%3B%0A%20%20%20%20var%20t%20%3D%20v%20*%20(1%20-%20(1%20-%20f)%20*%20s)%3B%0A%20%20%20%20switch%20(i%20%25%206)%20%7B%0A%20%20%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20v)%2C%20(g%20%3D%20t)%2C%20(b%20%3D%20p)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20q)%2C%20(g%20%3D%20v)%2C%20(b%20%3D%20p)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%202%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20p)%2C%20(g%20%3D%20v)%2C%20(b%20%3D%20t)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%203%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20p)%2C%20(g%20%3D%20q)%2C%20(b%20%3D%20v)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%204%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20t)%2C%20(g%20%3D%20p)%2C%20(b%20%3D%20v)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%205%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20v)%2C%20(g%20%3D%20p)%2C%20(b%20%3D%20q)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%5B(r%20*%20255)%20%7C%200%2C%20(g%20*%20255)%20%7C%200%2C%20(b%20*%20255)%20%7C%200%5D%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7BCanvasGradient%7D%20gradient%0A%20%20%20*%20%40param%20%7Bnumber%7D%20offset%20number%20of%20cycles%20to%20offset%20by%0A%20%20%20*%2F%0A%20%20const%20addRainbowStops%20%3D%20(gradient%2C%20offset)%20%3D%3E%20%7B%0A%20%20%20%20const%20NUMBER_STOPS%20%3D%2020%3B%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20NUMBER_STOPS%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20exactPosition%20%3D%20i%20%2F%20NUMBER_STOPS%3B%0A%20%20%20%20%20%20let%20offsetPosition%20%3D%20(exactPosition%20-%20offset)%20%25%201%3B%0A%20%20%20%20%20%20if%20(offsetPosition%20%3C%200)%20%7B%0A%20%20%20%20%20%20%20%20offsetPosition%20%2B%3D%201%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20rgb%20%3D%20hsvToRGB(offsetPosition%2C%201%2C%201)%3B%0A%20%20%20%20%20%20gradient.addColorStop(exactPosition%2C%20formatColor(rgb))%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20class%20TextCostumeSkin%20extends%20Skin%20%7B%0A%20%20%20%20constructor(id%2C%20drawable)%20%7B%0A%20%20%20%20%20%20super(id%2C%20renderer)%3B%0A%0A%20%20%20%20%20%20%2F**%20%40type%20%7BRenderWebGL.Drawable%7D%20*%2F%0A%20%20%20%20%20%20this.drawable%20%3D%20drawable%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7Bnumber%7D%20*%2F%0A%20%20%20%20%20%20this._previousDrawableXScale%20%3D%20100%3B%0A%0A%20%20%20%20%20%20this.canvas%20%3D%20document.createElement(%22canvas%22)%3B%0A%20%20%20%20%20%20this.canvas.width%20%3D%200%3B%0A%20%20%20%20%20%20this.canvas.height%20%3D%200%3B%0A%20%20%20%20%20%20this.ctx%20%3D%20this.canvas.getContext(%222d%22)%3B%0A%0A%20%20%20%20%20%20this.text%20%3D%20%22%22%3B%0A%20%20%20%20%20%20this.color%20%3D%20DEFAULT_COLOR%3B%0A%20%20%20%20%20%20this.textWidth%20%3D%20vm.runtime.stageWidth%3B%0A%20%20%20%20%20%20this.fontFamily%20%3D%20DEFAULT_FONT%3B%0A%20%20%20%20%20%20this.baseFontSize%20%3D%20DEFAULT_FONT_SIZE%3B%0A%20%20%20%20%20%20this.align%20%3D%20DEFAULT_ALIGN%3B%0A%20%20%20%20%20%20this.outlineWidth%20%3D%20DEFAULT_OUTLINE_WIDTH%3B%0A%20%20%20%20%20%20this.outlineColor%20%3D%20DEFAULT_OUTLINE_COLOR%3B%0A%0A%20%20%20%20%20%20%2F**%20%40type%20%7BArray%3C%7Btext%3A%20string%3B%20width%3A%20number%3B%7D%3E%7D%20*%2F%0A%20%20%20%20%20%20this.lines%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7B%5Bnumber%2C%20number%5D%7D%20*%2F%0A%20%20%20%20%20%20this._size%20%3D%20%5B0%2C%200%5D%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7B%5Bnumber%2C%20number%5D%7D%20*%2F%0A%20%20%20%20%20%20this._rotationCenter%20%3D%20%5B0%2C%200%5D%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Updated%20in%20_updateFontDimensions%0A%20%20%20%20%20%20this.calculatedFontSize%20%3D%200%3B%0A%20%20%20%20%20%20this.lineHeight%20%3D%200%3B%0A%20%20%20%20%20%20this.verticalPadding%20%3D%200%3B%0A%20%20%20%20%20%20this.wrapWidth%20%3D%200%3B%0A%0A%20%20%20%20%20%20this._textDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._renderedAtScale%20%3D%201%3B%0A%20%20%20%20%20%20this._renderTime%20%3D%200%3B%0A%20%20%20%20%20%20this._reflowTime%20%3D%200%3B%0A%0A%20%20%20%20%20%20this.isTyping%20%3D%20false%3B%0A%20%20%20%20%20%20this.typeAnimationInterval%20%3D%20null%3B%0A%20%20%20%20%20%20this.typeDelay%20%3D%20DEFAULT_TYPE_DELAY%3B%0A%0A%20%20%20%20%20%20this.isRainbow%20%3D%20false%3B%0A%20%20%20%20%20%20this.rainbowStartTime%20%3D%200%3B%0A%20%20%20%20%20%20this.rainbowTimeout%20%3D%20null%3B%0A%20%20%20%20%20%20this.rainbowDuration%20%3D%20DEFAULT_RAINBOW_DURATION%3B%0A%0A%20%20%20%20%20%20this.isZooming%20%3D%20false%3B%0A%20%20%20%20%20%20this.zoomStartTime%20%3D%200%3B%0A%20%20%20%20%20%20this.zoomTimeout%20%3D%20null%3B%0A%20%20%20%20%20%20this.zoomDuration%20%3D%20DEFAULT_ZOOM_DURATION%3B%0A%0A%20%20%20%20%20%20this.isShaking%20%3D%20false%3B%0A%20%20%20%20%20%20this.shakeStartTime%20%3D%200%3B%0A%20%20%20%20%20%20this.shakeTimeout%20%3D%20null%3B%0A%20%20%20%20%20%20this.shakeDuration%20%3D%20DEFAULT_SHAKE_DURATION%3B%0A%20%20%20%20%20%20this.shakeIntensity%20%3D%20DEFAULT_SHAKE_INTENSITY%3B%0A%0A%20%20%20%20%20%20%2F**%20%40type%20%7B(()%20%3D%3E%20void)%7Cnull%7D%20*%2F%0A%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20null%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20dispose()%20%7B%0A%20%20%20%20%20%20if%20(this._texture)%20%7B%0A%20%20%20%20%20%20%20%20gl.deleteTexture(this._texture)%3B%0A%20%20%20%20%20%20%20%20this._texture%20%3D%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.canvas%20%3D%20null%3B%0A%20%20%20%20%20%20this.ctx%20%3D%20null%3B%0A%20%20%20%20%20%20super.dispose()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20get%20size()%20%7B%0A%20%20%20%20%20%20if%20(this._needsReflow())%20%7B%0A%20%20%20%20%20%20%20%20this._reflowText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this._size%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20useNearest()%20%7B%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_needsReflow()%20%7B%0A%20%20%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20this._textDirty%20%7C%7C%0A%20%20%20%20%20%20%20%20(this.isZooming%20%26%26%20this._reflowTime%20!%3D%3D%20globalFrameTime)%20%7C%7C%0A%20%20%20%20%20%20%20%20(this.isShaking%20%26%26%20this._reflowTime%20!%3D%3D%20globalFrameTime)%20%7C%7C%0A%20%20%20%20%20%20%20%20this._previousDrawableXScale%20!%3D%3D%20Math.abs(this.drawable.scale%5B0%5D)%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_updateFontDimensions()%20%7B%0A%20%20%20%20%20%20this.calculatedFontSize%20%3D%20this.baseFontSize%3B%0A%20%20%20%20%20%20if%20(this.isZooming)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20it%20looks%20like%20Scratch's%20animation%20always%20starts%20at%20least%20a%20little%20visible%0A%20%20%20%20%20%20%20%20const%20time%20%3D%20globalFrameTime%20-%20this.zoomStartTime%3B%0A%20%20%20%20%20%20%20%20const%20progress%20%3D%20Math.max(0%2C%20Math.min(1%2C%20time%20%2F%20this.zoomDuration))%3B%0A%20%20%20%20%20%20%20%20this.calculatedFontSize%20*%3D%20progress%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.lineHeight%20%3D%20(this.baseFontSize%20*%208)%20%2F%207%3B%0A%20%20%20%20%20%20%2F%2F%20Always%20use%20the%20base%20size%20for%20padding.%20This%20makes%20the%20zoom%20animation%20look%20better.%0A%20%20%20%20%20%20this.verticalPadding%20%3D%20this.baseFontSize%20%2F%207%3B%0A%20%20%20%20%20%20%2F%2F%20Only%20use%20horizontal%20scale%20for%20wrap%20width%20for%20compatibility%20with%20stretch%20extension.%0A%20%20%20%20%20%20this.wrapWidth%20%3D%0A%20%20%20%20%20%20%20%20this.textWidth%20%2F%20(Math.abs(this.drawable.scale%5B0%5D)%20%2F%20100)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_getFontStyle()%20%7B%0A%20%20%20%20%20%20return%20%60%24%7Bthis.calculatedFontSize%7Dpx%20%24%7Bthis.fontFamily%7D%2C%20sans-serif%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_reflowText()%20%7B%0A%20%20%20%20%20%20this._textDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._reflowTime%20%3D%20globalFrameTime%3B%0A%20%20%20%20%20%20this._previousDrawableXScale%20%3D%20Math.abs(this.drawable.scale%5B0%5D)%3B%0A%0A%20%20%20%20%20%20this._updateFontDimensions()%3B%0A%20%20%20%20%20%20this.ctx.font%20%3D%20this._getFontStyle()%3B%0A%0A%20%20%20%20%20%20%2F%2F%20need%20to%20make%20new%20ones%20each%20time%20to%20avoid%20caching%20incorrectly%20across%20fonts%0A%20%20%20%20%20%20const%20measurementProvider%20%3D%20new%20CanvasMeasurementProvider(this.ctx)%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7BRenderWebGL.TextWrapper%7D%20*%2F%0A%20%20%20%20%20%20const%20textWrapper%20%3D%20renderer.createTextWrapper(measurementProvider)%3B%0A%0A%20%20%20%20%20%20const%20lines%20%3D%20textWrapper.wrapText(this.wrapWidth%2C%20this.text)%3B%0A%20%20%20%20%20%20this.lines%20%3D%20lines.map((line)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20trimmed%20%3D%20line.trimEnd()%3B%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20trimmed%2C%0A%20%20%20%20%20%20%20%20%20%20width%3A%20measurementProvider.measureText(trimmed)%2C%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20this._size%5B0%5D%20%3D%20this.wrapWidth%20%2B%202%20*%20this.outlineWidth%3B%0A%20%20%20%20%20%20this._size%5B1%5D%20%3D%0A%20%20%20%20%20%20%20%20this.lines.length%20*%20this.lineHeight%20%2B%0A%20%20%20%20%20%20%20%202%20*%20this.verticalPadding%20%2B%0A%20%20%20%20%20%20%20%202%20*%20this.outlineWidth%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Centered%20horizontally%0A%20%20%20%20%20%20this._rotationCenter%5B0%5D%20%3D%20this._size%5B0%5D%20%2F%202%3B%0A%20%20%20%20%20%20%2F%2F%20Vertical%20center%20is%20roughly%20below%20the%20first%20line%20of%20text%0A%20%20%20%20%20%20this._rotationCenter%5B1%5D%20%3D%0A%20%20%20%20%20%20%20%20this.calculatedFontSize%20*%200.9%20%2B%0A%20%20%20%20%20%20%20%20this.verticalPadding%20%2B%0A%20%20%20%20%20%20%20%20this.outlineWidth%3B%0A%0A%20%20%20%20%20%20if%20(this.isShaking)%20%7B%0A%20%20%20%20%20%20%20%20const%20padding%20%3D%20Math.max(0%2C%20this.shakeIntensity%20%2F%2020)%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20offsets%20should%20be%20in%20range%20%5B-padding%2C%20%2Bpadding%5D%0A%20%20%20%20%20%20%20%20this._rotationCenter%5B0%5D%20%2B%3D%202%20*%20Math.random()%20*%20padding%20-%20padding%3B%0A%20%20%20%20%20%20%20%20this._rotationCenter%5B1%5D%20%2B%3D%202%20*%20Math.random()%20*%20padding%20-%20padding%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20_renderAtScale(requestedScale)%20%7B%0A%20%20%20%20%20%20this._renderedAtScale%20%3D%20requestedScale%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._renderTime%20%3D%20globalFrameTime%3B%0A%0A%20%20%20%20%20%20const%20scratchWidth%20%3D%20this._size%5B0%5D%3B%0A%20%20%20%20%20%20const%20scratchHeight%20%3D%20this._size%5B1%5D%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Renderer's%20requested%20scale%20is%20accounted%20for%20at%20this%20point.%20Do%20not%20touch%20%60requestedScale%60%0A%20%20%20%20%20%20%2F%2F%20ever%20after%20this%20point.%0A%20%20%20%20%20%20this.canvas.width%20%3D%20Math.ceil(scratchWidth%20*%20requestedScale)%3B%0A%20%20%20%20%20%20this.canvas.height%20%3D%20Math.ceil(scratchHeight%20*%20requestedScale)%3B%0A%20%20%20%20%20%20this.ctx.scale(requestedScale%2C%20requestedScale)%3B%0A%0A%20%20%20%20%20%20this.ctx.translate(this.outlineWidth%2C%20this.outlineWidth)%3B%0A%0A%20%20%20%20%20%20const%20rainbowOffset%20%3D%20this.isRainbow%0A%20%20%20%20%20%20%20%20%3F%20(globalFrameTime%20-%20this.rainbowStartTime)%20%2F%20RAINBOW_TIME_PER%0A%20%20%20%20%20%20%20%20%3A%200%3B%0A%20%20%20%20%20%20this.ctx.fillStyle%20%3D%20this.color%3B%0A%20%20%20%20%20%20this.ctx.font%20%3D%20this._getFontStyle()%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20this.lines.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20const%20line%20%3D%20this.lines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20const%20text%20%3D%20line.text%3B%0A%20%20%20%20%20%20%20%20const%20lineWidth%20%3D%20line.width%3B%0A%0A%20%20%20%20%20%20%20%20let%20xOffset%3B%0A%20%20%20%20%20%20%20%20const%20yOffset%20%3D%0A%20%20%20%20%20%20%20%20%20%20this.verticalPadding%20%2B%20i%20*%20this.lineHeight%20%2B%20this.baseFontSize%3B%0A%20%20%20%20%20%20%20%20if%20(this.align%20%3D%3D%3D%20ALIGN_LEFT)%20%7B%0A%20%20%20%20%20%20%20%20%20%20xOffset%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(this.align%20%3D%3D%3D%20ALIGN_CENTER)%20%7B%0A%20%20%20%20%20%20%20%20%20%20xOffset%20%3D%20(this.wrapWidth%20-%20lineWidth)%20%2F%202%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20xOffset%20%3D%20this.wrapWidth%20-%20lineWidth%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(this.isRainbow)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20gradient%20%3D%20this.ctx.createLinearGradient(%0A%20%20%20%20%20%20%20%20%20%20%20%20xOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20xOffset%20%2B%20lineWidth%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20addRainbowStops(gradient%2C%20rainbowOffset)%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.fillStyle%20%3D%20gradient%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(this.outlineWidth%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.lineWidth%20%3D%20this.outlineWidth%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.strokeStyle%20%3D%20this.outlineColor%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.lineCap%20%3D%20%22round%22%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.lineJoin%20%3D%20%22round%22%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.strokeText(text%2C%20xOffset%2C%20yOffset)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20we're%20still%20a%20few%20pixels%20off%20of%20Scratch%20Lab%0A%20%20%20%20%20%20%20%20this.ctx.fillText(text%2C%20xOffset%2C%20yOffset)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(!this._texture)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%40ts-expect-error%20-%20twgl%20not%20typed%20yet%0A%20%20%20%20%20%20%20%20this._texture%20%3D%20twgl.createTexture(gl%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20auto%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20wrap%3A%20gl.CLAMP_TO_EDGE%2C%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._setTexture(this.canvas)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_invalidateTexture()%20%7B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._renderTime%20%3D%200%3B%0A%20%20%20%20%20%20this.emitWasAltered()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_invalidateText()%20%7B%0A%20%20%20%20%20%20this._textDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._reflowTime%20%3D%200%3B%0A%20%20%20%20%20%20this.emitWasAltered()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setText(text)%20%7B%0A%20%20%20%20%20%20if%20(text%20!%3D%3D%20this.text)%20%7B%0A%20%20%20%20%20%20%20%20this.text%20%3D%20text%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setColor(color)%20%7B%0A%20%20%20%20%20%20if%20(color%20!%3D%3D%20this.color)%20%7B%0A%20%20%20%20%20%20%20%20this.color%20%3D%20color%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineColor(color)%20%7B%0A%20%20%20%20%20%20if%20(color%20!%3D%3D%20this.color)%20%7B%0A%20%20%20%20%20%20%20%20this.outlineColor%20%3D%20color%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineWidth(width)%20%7B%0A%20%20%20%20%20%20this.outlineWidth%20%3D%20width%3B%0A%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setAlign(align)%20%7B%0A%20%20%20%20%20%20if%20(align%20!%3D%3D%20this.align)%20%7B%0A%20%20%20%20%20%20%20%20this.align%20%3D%20align%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setWidth(width)%20%7B%0A%20%20%20%20%20%20if%20(width%20!%3D%3D%20this.textWidth)%20%7B%0A%20%20%20%20%20%20%20%20this.textWidth%20%3D%20width%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setFontFamily(font)%20%7B%0A%20%20%20%20%20%20if%20(font%20!%3D%3D%20this.fontFamily)%20%7B%0A%20%20%20%20%20%20%20%20this.fontFamily%20%3D%20font%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20getFontFamily()%20%7B%0A%20%20%20%20%20%20return%20this.fontFamily%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getColor()%20%7B%0A%20%20%20%20%20%20return%20this.color%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getWidth()%20%7B%0A%20%20%20%20%20%20return%20this.textWidth%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getOutlineColor()%20%7B%0A%20%20%20%20%20%20return%20this.outlineColor%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getOutlineWidth()%20%7B%0A%20%20%20%20%20%20return%20this.outlineWidth%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getAlign()%20%7B%0A%20%20%20%20%20%20return%20this.align%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_oneAnimationAtATime(newCallback)%20%7B%0A%20%20%20%20%20%20this.cancelAnimation()%3B%0A%20%20%20%20%20%20return%20new%20Promise((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20newCallback(this.resolveOngoingAnimation)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startTypeAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isTyping%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20const%20originalText%20%3D%20this.text%3B%0A%20%20%20%20%20%20%20%20let%20i%20%3D%201%3B%0A%20%20%20%20%20%20%20%20const%20update%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.setText(originalText.substring(0%2C%20i))%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20update()%3B%0A%0A%20%20%20%20%20%20%20%20this.typeAnimationInterval%20%3D%20setInterval(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20i%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20update()%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(i%20%3E%3D%20originalText.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20clearInterval(this.typeAnimationInterval)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.isTyping%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%20this.typeDelay)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setTypeDelay(delay)%20%7B%0A%20%20%20%20%20%20this.typeDelay%20%3D%20delay%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startRainbowAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isRainbow%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this.rainbowStartTime%20%3D%20Date.now()%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%20%20this.rainbowTimeout%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.isRainbow%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20this.rainbowDuration)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setRainbowDuration(duration)%20%7B%0A%20%20%20%20%20%20this.rainbowDuration%20%3D%20duration%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startZoomAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isZooming%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this.zoomStartTime%20%3D%20Date.now()%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20this.zoomTimeout%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.isZooming%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20this.zoomDuration)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setZoomDuration(duration)%20%7B%0A%20%20%20%20%20%20this.zoomDuration%20%3D%20duration%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startShakeAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isShaking%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this.shakeStartTime%20%3D%20Date.now()%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20_invalidateText()%20is%20not%20smart%20enough%20to%20realize%20that%20we%20don't%20need%20to%20actually%0A%20%20%20%20%20%20%20%20%2F%2F%20do%20a%20full%20reflow%2C%20just%20update%20rotation%20center...%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20this.shakeTimeout%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.isShaking%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20this.shakeDuration)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setShakeDuration(duration)%20%7B%0A%20%20%20%20%20%20this.shakeDuration%20%3D%20duration%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setShakeIntensity(intensity)%20%7B%0A%20%20%20%20%20%20this.shakeIntensity%20%3D%20intensity%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20cancelAnimation()%20%7B%0A%20%20%20%20%20%20if%20(this.resolveOngoingAnimation)%20%7B%0A%20%20%20%20%20%20%20%20this.resolveOngoingAnimation()%3B%0A%20%20%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20this.isTyping%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearInterval(this.typeAnimationInterval)%3B%0A%0A%20%20%20%20%20%20%20%20this.isRainbow%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearTimeout(this.rainbowTimeout)%3B%0A%0A%20%20%20%20%20%20%20%20this.isZooming%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearTimeout(this.zoomTimeout)%3B%0A%0A%20%20%20%20%20%20%20%20this.isShaking%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearTimeout(this.shakeTimeout)%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20sometimes%20we%20only%20need%20to%20invalidate%20the%20texture%20at%20this%20point%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20updateSilhouette(scale)%20%7B%0A%20%20%20%20%20%20this.getTexture(scale)%3B%0A%20%20%20%20%20%20this._silhouette.unlazy()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20getTexture(scale)%20%7B%0A%20%20%20%20%20%20const%20MAX_SCALE%20%3D%2010%3B%0A%20%20%20%20%20%20const%20upperScale%20%3D%20scale%0A%20%20%20%20%20%20%20%20%3F%20Math.max(Math.abs(scale%5B0%5D)%2C%20Math.abs(scale%5B1%5D))%0A%20%20%20%20%20%20%20%20%3A%20100%3B%0A%20%20%20%20%20%20const%20calculatedScale%20%3D%20Math.min(MAX_SCALE%2C%20upperScale%20%2F%20100)%3B%0A%0A%20%20%20%20%20%20if%20(this._needsReflow())%20%7B%0A%20%20%20%20%20%20%20%20this._reflowText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20this._textureDirty%20%7C%7C%0A%20%20%20%20%20%20%20%20(this.isRainbow%20%26%26%20this._renderTime%20!%3D%3D%20globalFrameTime)%20%7C%7C%0A%20%20%20%20%20%20%20%20calculatedScale%20!%3D%3D%20this._renderedAtScale%0A%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20this._renderAtScale(calculatedScale)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20return%20this._texture%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F**%0A%20%20%20*%20Note%20that%20the%20returned%20skin%20is%20only%20usable%20by%20the%20given%20target.%20Things%20will%20break%20if%20another%0A%20%20%20*%20target%20tries%20to%20use%20it.%0A%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20*%20%40returns%20%7BTextCostumeSkin%7D%0A%20%20%20*%2F%0A%20%20const%20createTextCostumeSkin%20%3D%20(target)%20%3D%3E%20%7B%0A%20%20%20%20const%20drawable%20%3D%20renderer._allDrawables%5Btarget.drawableID%5D%3B%0A%20%20%20%20const%20id%20%3D%20renderer._nextSkinId%2B%2B%3B%0A%20%20%20%20const%20skin%20%3D%20new%20TextCostumeSkin(id%2C%20drawable)%3B%0A%20%20%20%20renderer._allSkins%5Bid%5D%20%3D%20skin%3B%0A%20%20%20%20return%20skin%3B%0A%20%20%7D%3B%0A%0A%20%20vm.runtime.on(%22BEFORE_EXECUTE%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20globalFrameTime%20%3D%20Date.now()%3B%0A%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20renderer._allSkins.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allSkins%5Bi%5D%3B%0A%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20skin%20instanceof%20TextCostumeSkin%20%26%26%0A%20%20%20%20%20%20%20%20(skin.isRainbow%20%7C%7C%20skin.isZooming%20%7C%7C%20skin.isShaking)%0A%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20skin.emitWasAltered()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D)%3B%0A%0A%20%20class%20AnimatedText%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20vm.runtime.on(%22PROJECT_START%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this._hideAllText()%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20vm.runtime.on(%22PROJECT_STOP_ALL%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this._hideAllText()%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%2F%2F%20targetWasCreated%20does%20not%20work%20because%20it%20runs%20before%20the%20Drawable%20is%20set%20up%0A%20%20%20%20%20%20const%20extension%20%3D%20this%3B%0A%20%20%20%20%20%20const%20originalMakeClone%20%3D%20RenderedTarget.prototype.makeClone%3B%0A%20%20%20%20%20%20RenderedTarget.prototype.makeClone%20%3D%20function%20()%20%7B%0A%20%20%20%20%20%20%20%20const%20newClone%20%3D%20originalMakeClone.call(this)%3B%0A%20%20%20%20%20%20%20%20if%20(extension._hasState(this))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20creates%20much%20unneeded%20state%0A%20%20%20%20%20%20%20%20%20%20const%20originalSkin%20%3D%20extension._getState(this).skin%3B%0A%20%20%20%20%20%20%20%20%20%20const%20newSkin%20%3D%20extension._getState(newClone).skin%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setAlign(originalSkin.align)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setColor(originalSkin.color)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setFontFamily(originalSkin.fontFamily)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setWidth(originalSkin.textWidth)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setText(originalSkin.text)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setRainbowDuration(originalSkin.rainbowDuration)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setZoomDuration(originalSkin.zoomDuration)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setTypeDelay(originalSkin.typeDelay)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20renderer._allDrawables%5Bthis.drawableID%5D.skin%20instanceof%0A%20%20%20%20%20%20%20%20%20%20%20%20TextCostumeSkin%0A%20%20%20%20%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20renderer.updateDrawableSkinId(newClone.drawableID%2C%20newSkin.id)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20newClone%3B%0A%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20vm.runtime.on(%22targetWasRemoved%22%2C%20(target)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._hasState(target))%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20state%20%3D%20this._getState(target)%3B%0A%20%20%20%20%20%20%20%20%20%20renderer.destroySkin(state.skin.id)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22text%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Animated%20Text%22)%2C%0A%20%20%20%20%20%20%20%20color1%3A%20%22%239966FF%22%2C%0A%20%20%20%20%20%20%20%20blockIconURI%3A%20blockIconURI%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22show%20text%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Welcome%20to%20my%20project!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22animateText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%5BANIMATE%5D%20text%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22animate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Here%20we%20go!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22animateTextInput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22animateText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%5BANIMATE%5D%20text%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Here%20we%20go!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22clearText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22show%20sprite%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setFont%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20font%20to%20%5BFONT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FONT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22font%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setFontInput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22setFont%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20font%20to%20%5BFONT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FONT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twFont%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setColor%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20text%20color%20to%20%5BCOLOR%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20COLOR%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.COLOR%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22200%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ALIGN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22align%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setWidthInput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22setWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22200%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ALIGN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAlign%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Contributors%3A%0A%20%20%20%20%20%20%20%20%20%20%20*%20-%20LilyMakesThings%0A%20%20%20%20%20%20%20%20%20%20%20*%2F%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22disableCompatibilityMode%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BUTTON%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22Enable%20Non-Scratch%20Lab%20Features%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.LABEL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22Incompatible%20with%20Scratch%20Lab%3A%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setOutlineWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20outline%20width%20to%20%5BWIDTH%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%223%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setOutlineColor%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20outline%20color%20to%20%5BCOLOR%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20COLOR%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.COLOR%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22addLine%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22add%20line%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Hello!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getLines%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%23%20of%20lines%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getLinesV2%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5BWITH_WORD_WRAP%5D%20is%20a%20menu%20with%20choices%20'with%20word%20wrap'%20and%20'without%20word%20wrap'%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WITH_WORD_WRAP%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twWordWrap%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setAlignment%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22align%20text%20to%20%5BALIGN%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ALIGN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAlign%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20why%20is%20the%20other%20block%20called%20%22setWidth%22%20%3A(%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setWidthValue%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20width%20to%20%5BWIDTH%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22resetWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22reset%20text%20width%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22startAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22start%20%5BANIMATE%5D%20animation%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22animateUntilDone%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22animate%20%5BANIMATE%5D%20until%20done%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isAnimating%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22is%20animating%3F%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%203%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22resetAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22reset%20%5BANIMATE%5D%20duration%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%5BANIMATE%5D%20duration%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setShakeIntensity%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20shake%20intensity%20to%20%5BNUM%5D%25%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20100%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setTypeDelay%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%200.1%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22resetTypeDelay%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22reset%20typing%20delay%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getTypeDelay%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22typing%20delay%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22textActive%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22is%20showing%20text%3F%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getDisplayedText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22displayed%20text%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getTextAttribute%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22text%20%5BATTRIBUTE%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ATTRIBUTE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22attribute%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20These%20all%20need%20acceptReporters%3A%20false%20for%20parity%20with%20the%20Scratch%20Labs%20version.%0A%20%20%20%20%20%20%20%20%20%20animate%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22type%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22type%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22rainbow%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22zoom%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22zoom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20font%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%22getFonts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20align%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22left%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22center%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22center%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22right%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22right%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20attribute%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22font%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22color%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22width%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22outline%20color%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22outline%20width%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22alignment%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20TurboWarp%20menus%20(acceptReporters%3A%20true)%0A%20%20%20%20%20%20%20%20%20%20twAnimate%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22type%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22type%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22rainbow%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22zoom%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22zoom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22shake%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twAnimateDuration%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22rainbow%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22zoom%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22zoom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22shake%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twAlign%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22left%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22center%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22center%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22right%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22right%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twFont%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%22getFonts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twWordWrap%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22with%20word%20wrap%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22with%20word%20wrap%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22without%20word%20wrap%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22without%20word%20wrap%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getFonts()%20%7B%0A%20%20%20%20%20%20const%20customFonts%20%3D%20this._getFontsMap()%3B%0A%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20...FONTS%2C%0A%20%20%20%20%20%20%20%20...customFonts%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22random%20font%22)%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20%22Random%22%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_getFontsMap()%20%7B%0A%20%20%20%20%20%20return%20Scratch.vm.runtime.fontManager%0A%20%20%20%20%20%20%20%20%3F%20Scratch.vm.runtime.fontManager.getFonts().map((i)%20%3D%3E%20(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20i.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20i.family%2C%0A%20%20%20%20%20%20%20%20%20%20%7D))%0A%20%20%20%20%20%20%20%20%3A%20%5B%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40returns%20%7BTextState%7D%0A%20%20%20%20%20*%2F%0A%20%20%20%20_getState(target)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20target%5BCUSTOM_STATE_KEY%5D%3B%0A%20%20%20%20%20%20if%20(!state)%20%7B%0A%20%20%20%20%20%20%20%20%2F**%20%40type%20%7BTextState%7D%20*%2F%0A%20%20%20%20%20%20%20%20const%20newState%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20skin%3A%20createTextCostumeSkin(target)%2C%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20target%5BCUSTOM_STATE_KEY%5D%20%3D%20newState%3B%0A%20%20%20%20%20%20%20%20return%20newState%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20state%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40returns%20%7Bboolean%7D%0A%20%20%20%20%20*%2F%0A%20%20%20%20_hasState(target)%20%7B%0A%20%20%20%20%20%20return%20!!target%5BCUSTOM_STATE_KEY%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_hideAllText()%20%7B%0A%20%20%20%20%20%20for%20(const%20target%20of%20vm.runtime.targets)%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._hasState(target))%20%7B%0A%20%20%20%20%20%20%20%20%20%20this._hideText(target%2C%20this._getState(target))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTextState%7D%20state%0A%20%20%20%20%20*%2F%0A%20%20%20%20_renderText(target%2C%20state)%20%7B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%20%20%20%20%20%20renderer.updateDrawableSkinId(target.drawableID%2C%20state.skin.id)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTextState%7D%20state%0A%20%20%20%20%20*%2F%0A%20%20%20%20_hideText(target%2C%20state)%20%7B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%20%20%20%20%20%20target.setCostume(target.currentCostume)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setText(%7B%20TEXT%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20this._renderText(util.target%2C%20state)%3B%0A%20%20%20%20%20%20state.skin.setText(Scratch.Cast.toString(TEXT))%3B%0A%20%20%20%20%20%20%2F%2F%20Scratch%20forces%201%20frame%20delay%20by%20returning%20promise.%20I%20think%20that's%20silly.%0A%20%20%20%20%20%20util.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20animateText(%7B%20ANIMATE%2C%20TEXT%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20this._renderText(util.target%2C%20state)%3B%0A%0A%20%20%20%20%20%20state.skin.setText(Scratch.Cast.toString(TEXT))%3B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%0A%20%20%20%20%20%20if%20(ANIMATE%20%3D%3D%3D%20%22type%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startTypeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ANIMATE%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startRainbowAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ANIMATE%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startZoomAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ANIMATE%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startShakeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20does%20nothing%20here%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20clearText(args%2C%20util)%20%7B%0A%20%20%20%20%20%20if%20(this._hasState(util.target))%20%7B%0A%20%20%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20%20%20this._hideText(util.target%2C%20state)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%2F%2F%20Scratch%20forces%201%20frame%20delay%20by%20returning%20promise.%20I%20think%20that's%20silly.%0A%20%20%20%20%20%20util.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setFont(%7B%20FONT%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20font%20%3D%20Scratch.Cast.toString(FONT)%3B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%0A%20%20%20%20%20%20if%20(font%20%3D%3D%3D%20%22Random%22)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Random%20font%20always%20switches%20to%20a%20new%20font%2C%20never%20the%20same%20one%0A%20%20%20%20%20%20%20%20const%20possibleFonts%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20...FONTS%2C%0A%20%20%20%20%20%20%20%20%20%20...this._getFontsMap().map((i)%20%3D%3E%20i.value)%2C%0A%20%20%20%20%20%20%20%20%5D.filter((i)%20%3D%3E%20i%20!%3D%3D%20state.skin.fontFamily)%3B%0A%20%20%20%20%20%20%20%20state.skin.setFontFamily(%0A%20%20%20%20%20%20%20%20%20%20possibleFonts%5BMath.floor(Math.random()%20*%20possibleFonts.length)%5D%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setFontFamily(font)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setColor(%7B%20COLOR%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setColor(Scratch.Cast.toString(COLOR))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setWidth(%7B%20WIDTH%2C%20ALIGN%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%0A%20%20%20%20%20%20if%20(ALIGN%20%3D%3D%3D%20%22center%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_CENTER)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ALIGN%20%3D%3D%3D%20%22right%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_RIGHT)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20treats%20unknown%20values%20as%20left%20alignment.%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_LEFT)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20state.skin.setWidth(Scratch.Cast.toNumber(WIDTH))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%20Extra%20blocks%2C%20not%20compatible%20with%20Scratch%3A%0A%20%20%20%20%20*%2F%0A%0A%20%20%20%20disableCompatibilityMode()%20%7B%0A%20%20%20%20%20%20const%20popup%20%3D%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22disableCompatibilityMode%22%2C%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20%22This%20will%20enable%20new%20blocks%20and%20features%20that%20WILL%20NOT%20WORK%20in%20the%20official%20Scratch%20Lab.%5Cn%5CnDo%20you%20wish%20to%20continue%3F%22%2C%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20if%20(confirm(popup))%20%7B%0A%20%20%20%20%20%20%20%20compatibilityMode%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20Scratch.vm.extensionManager.refreshBlocks()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineWidth(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20width%20%3D%20Scratch.Cast.toNumber(args.WIDTH)%3B%0A%0A%20%20%20%20%20%20state.skin.setOutlineWidth(width)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineColor(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20color%20%3D%20Scratch.Cast.toString(args.COLOR)%3B%0A%0A%20%20%20%20%20%20state.skin.setOutlineColor(color)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20addLine(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20this._renderText(util.target%2C%20state)%3B%0A%0A%20%20%20%20%20%20const%20originalText%20%3D%20state.skin.text%3B%0A%20%20%20%20%20%20const%20addingText%20%3D%20Scratch.Cast.toString(args.TEXT)%3B%0A%20%20%20%20%20%20state.skin.setText(%0A%20%20%20%20%20%20%20%20originalText%20%3F%20%60%24%7BoriginalText%7D%5Cn%24%7BaddingText%7D%60%20%3A%20addingText%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20util.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getLines(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%200%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20text%20%3D%20state.skin.text%3B%0A%20%20%20%20%20%20return%20text.split(%22%5Cn%22).length%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getLinesV2(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%200%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20if%20(Scratch.Cast.toString(args.WITH_WORD_WRAP)%20%3D%3D%3D%20%22with%20word%20wrap%22)%20%7B%0A%20%20%20%20%20%20%20%20if%20(state.skin._needsReflow())%20%7B%0A%20%20%20%20%20%20%20%20%20%20state.skin._reflowText()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20state.skin.lines.length%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20state.skin.text.split(%22%5Cn%22).length%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setAlignment(args%2C%20util)%20%7B%0A%20%20%20%20%20%20%2F%2F%20see%20setWidth%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20if%20(args.ALIGN%20%3D%3D%3D%20%22center%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_CENTER)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ALIGN%20%3D%3D%3D%20%22right%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_RIGHT)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_LEFT)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setWidthValue(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setWidth(Scratch.Cast.toNumber(args.WIDTH))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20resetWidth(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setWidth(vm.runtime.stageWidth)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startAnimate(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Don't%20return%20the%20promise%0A%20%20%20%20%20%20if%20(args.ANIMATE%20%3D%3D%20%22type%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startTypeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startRainbowAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startZoomAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startShakeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20does%20nothing%20here%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20animateUntilDone(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%0A%20%20%20%20%20%20if%20(args.ANIMATE%20%3D%3D%20%22type%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startTypeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startRainbowAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startZoomAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startShakeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20does%20nothing%20here%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20isAnimating(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20skin%20%3D%20this._getState(util.target).skin%3B%0A%20%20%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20skin.isTyping%20%7C%7C%20skin.isRainbow%20%7C%7C%20skin.isZooming%20%7C%7C%20skin.isShaking%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setAnimateDuration(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20animation%20%3D%20args.ANIMATE%3B%0A%20%20%20%20%20%20const%20milliseconds%20%3D%20Scratch.Cast.toNumber(args.NUM)%20*%201000%3B%0A%20%20%20%20%20%20if%20(animation%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setRainbowDuration(milliseconds)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setZoomDuration(milliseconds)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setShakeDuration(milliseconds)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20resetAnimateDuration(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20animation%20%3D%20args.ANIMATE%3B%0A%20%20%20%20%20%20if%20(animation%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setRainbowDuration(DEFAULT_RAINBOW_DURATION)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setZoomDuration(DEFAULT_ZOOM_DURATION)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setShakeDuration(DEFAULT_SHAKE_DURATION)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20getAnimateDuration(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20animation%20%3D%20args.ANIMATE%3B%0A%20%20%20%20%20%20if%20(animation%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.rainbowDuration%20%2F%201000%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.zoomDuration%20%2F%201000%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.shakeDuration%20%2F%201000%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20should%20never%20happen%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setShakeIntensity(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setShakeIntensity(Scratch.Cast.toNumber(args.NUM))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setTypeDelay(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setTypeDelay(Scratch.Cast.toNumber(args.NUM)%20*%201000)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20resetTypeDelay(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setTypeDelay(DEFAULT_TYPE_DELAY)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getTypeDelay(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20%2F%2F%20TODO%3A%20Should%20we%20round%20this%3F%0A%20%20%20%20%20%20return%20state.skin.typeDelay%20%2F%201000%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20textActive(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20return%20skin%20instanceof%20TextCostumeSkin%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getDisplayedText(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20return%20state.skin.text%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getTextAttribute(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20attrib%20%3D%20args.ATTRIBUTE%3B%0A%20%20%20%20%20%20if%20(attrib%20%3D%3D%3D%20%22font%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getFontFamily()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22color%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getColor()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22width%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getWidth()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22outline%20color%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getOutlineColor()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22outline%20width%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getOutlineWidth()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22alignment%22)%20%7B%0A%20%20%20%20%20%20%20%20switch%20(state.skin.getAlign())%20%7B%0A%20%20%20%20%20%20%20%20%20%20case%20ALIGN_LEFT%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22left%22%3B%0A%20%20%20%20%20%20%20%20%20%20case%20ALIGN_RIGHT%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22right%22%3B%0A%20%20%20%20%20%20%20%20%20%20case%20ALIGN_CENTER%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22center%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20should%20never%20happen%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20AnimatedText())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Utilities%0A%2F%2F%20ID%3A%20utilities%0A%2F%2F%20Description%3A%20A%20bunch%20of%20interesting%20blocks.%0A%2F%2F%20Original%3A%20Sheep_maker%20%3Chttps%3A%2F%2Fscratch.mit.edu%2Fusers%2FSheep_maker%2F%3E%0A%2F%2F%20License%3A%20MIT%20AND%20MPL-2.0%0A%0A%2F*!%0A%20*%20This%20is%20based%20on%3A%0A%20*%20https%3A%2F%2Fgithub.com%2FSheepTester%2Fsheeptester.github.io%2Fblob%2Fmaster%2Fjavascripts%2Futilities.js%0A%20*%0A%20*%20Original%20license%3A%0A%20*%20MIT%20License%0A%20*%0A%20*%20Copyright%20(c)%202021%20Sean%0A%20*%0A%20*%20Permission%20is%20hereby%20granted%2C%20free%20of%20charge%2C%20to%20any%20person%20obtaining%20a%20copy%0A%20*%20of%20this%20software%20and%20associated%20documentation%20files%20(the%20%22Software%22)%2C%20to%20deal%0A%20*%20in%20the%20Software%20without%20restriction%2C%20including%20without%20limitation%20the%20rights%0A%20*%20to%20use%2C%20copy%2C%20modify%2C%20merge%2C%20publish%2C%20distribute%2C%20sublicense%2C%20and%2For%20sell%0A%20*%20copies%20of%20the%20Software%2C%20and%20to%20permit%20persons%20to%20whom%20the%20Software%20is%0A%20*%20furnished%20to%20do%20so%2C%20subject%20to%20the%20following%20conditions%3A%0A%20*%0A%20*%20The%20above%20copyright%20notice%20and%20this%20permission%20notice%20shall%20be%20included%20in%20all%0A%20*%20copies%20or%20substantial%20portions%20of%20the%20Software.%0A%20*%0A%20*%20THE%20SOFTWARE%20IS%20PROVIDED%20%22AS%20IS%22%2C%20WITHOUT%20WARRANTY%20OF%20ANY%20KIND%2C%20EXPRESS%20OR%0A%20*%20IMPLIED%2C%20INCLUDING%20BUT%20NOT%20LIMITED%20TO%20THE%20WARRANTIES%20OF%20MERCHANTABILITY%2C%0A%20*%20FITNESS%20FOR%20A%20PARTICULAR%20PURPOSE%20AND%20NONINFRINGEMENT.%20IN%20NO%20EVENT%20SHALL%20THE%0A%20*%20AUTHORS%20OR%20COPYRIGHT%20HOLDERS%20BE%20LIABLE%20FOR%20ANY%20CLAIM%2C%20DAMAGES%20OR%20OTHER%0A%20*%20LIABILITY%2C%20WHETHER%20IN%20AN%20ACTION%20OF%20CONTRACT%2C%20TORT%20OR%20OTHERWISE%2C%20ARISING%20FROM%2C%0A%20*%20OUT%20OF%20OR%20IN%20CONNECTION%20WITH%20THE%20SOFTWARE%20OR%20THE%20USE%20OR%20OTHER%20DEALINGS%20IN%20THE%0A%20*%20SOFTWARE.%0A%20*%2F%0A%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Utilities%22%3A%22Verschiedene%20Bl%C3%B6cke%22%7D%2C%22fi%22%3A%7B%22_Utilities%22%3A%22Ty%C3%B6kalut%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BPATH%5D%20JSON-koodissa%20%5BJSON_STRING%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22rajoita%20%5BINPUT%5D%20v%C3%A4lille%20%5BMIN%5D%20%E2%80%93%20%5BMAX%5D%22%2C%22_content%20from%20%5BURL%5D%22%3A%22sis%C3%A4lt%C3%B6%20URL-osoitteesta%20%5BURL%5D%22%2C%22_current%20millisecond%22%3A%22nykyinen%20millisekunti%22%2C%22_false%22%3A%22ep%C3%A4tosi%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22jos%20%5BA%5D%2C%20niin%20%5BB%5D%20tai%20muuten%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22onko%20%5BA%5D%20tarkalleen%20%5BB%5D%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22merkkijonon%20%5BSTRING%5D%20merkit%20%5BSTART%5D%20%E2%80%93%20%5BEND%5D%22%2C%22_newline%20character%22%3A%22uusi%20rivi%22%2C%22_pi%22%3A%22pii%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22korvaa%20%5BREGEX%5D%20merkkijonolla%20%5BNEWSTRING%5D%20merkkijonossa%20%5BSTRING%5D%22%2C%22_true%22%3A%22tosi%22%7D%2C%22it%22%3A%7B%22_Utilities%22%3A%22Utilit%C3%A0%22%2C%22_newline%20character%22%3A%22carattere%20accapo%22%2C%22_pi%22%3A%22pi%20greco%22%7D%2C%22ja%22%3A%7B%22_Utilities%22%3A%22%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BJSON_STRING%5D%E3%81%AE%5BPATH%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%5BINPUT%5D%E3%82%92%5BMIN%5D%E3%81%8B%E3%82%89%5BMAX%5D%E3%81%BE%E3%81%A7%E3%81%A7%E8%A1%A8%E3%81%99%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%5BURL%5D%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%22%2C%22_current%20millisecond%22%3A%22%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%9F%E3%83%AA%E7%A7%92%22%2C%22_false%22%3A%22%E5%81%BD%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%E3%82%82%E3%81%97%5BA%5D%E3%81%AA%E3%82%89%5BB%5D%E3%81%A7%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%E3%81%8C%5BB%5D%E3%81%A8%E5%90%8C%E4%B8%80%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%5BSTRING%5D%E3%81%AE%5BSTART%5D%E3%81%8B%E3%82%89%5BEND%5D%E7%95%AA%E7%9B%AE%22%2C%22_newline%20character%22%3A%22%E6%94%B9%E8%A1%8C%E6%96%87%E5%AD%97%22%2C%22_pi%22%3A%22%CF%80%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22%5BSTRING%5D%E3%81%AE%5BREGEX%5D%E3%82%92%5BNEWSTRING%5D%E3%81%AB%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%22%2C%22_true%22%3A%22%E7%9C%9F%22%7D%2C%22ko%22%3A%7B%22_Utilities%22%3A%22%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BJSON_STRING%5D%EC%97%90%EC%84%9C%20%5BPATH%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%5BINPUT%5D%20%EA%B0%92%EC%9D%84%20%5BMIN%5D%EB%B6%80%ED%84%B0%20%5BMAX%5D%EA%B9%8C%EC%A7%80%20%EB%B2%94%EC%9C%84%EB%A1%9C%20%EC%A0%9C%ED%95%9C%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%5BURL%5D%EC%9D%98%20%EB%82%B4%EC%9A%A9%22%2C%22_current%20millisecond%22%3A%22%ED%98%84%EC%9E%AC%20%EB%B0%80%EB%A6%AC%EC%B4%88%22%2C%22_false%22%3A%22%EA%B1%B0%EC%A7%93%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%5BA%5D%20(%EC%9D%B4)%EB%9D%BC%EB%A9%B4%20%5BB%5D%20%EC%95%84%EB%8B%88%EB%A9%B4%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%EC%9D%B4(%EA%B0%80)%20%5BB%5D%EC%99%80(%EA%B3%BC)%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%EA%B0%80%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%5BSTRING%5D%EC%9D%98%20%5BSTART%5D%EB%B6%80%ED%84%B0%20%5BEND%5D%EA%B9%8C%EC%A7%80%EC%9D%98%20%EA%B8%80%EC%9E%90%22%2C%22_newline%20character%22%3A%22%EC%A4%84%EB%B0%94%EA%BF%88%20%EB%AC%B8%EC%9E%90%22%2C%22_true%22%3A%22%EC%B0%B8%22%7D%2C%22nb%22%3A%7B%22_Utilities%22%3A%22Verkt%C3%B8y%22%2C%22_true%22%3A%22sann%22%7D%2C%22nl%22%3A%7B%22_Utilities%22%3A%22Utiliteiten%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BPATH%5D%20van%20%5BJSON_STRING%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22klem%20%5BINPUT%5D%20tussen%20%5BMIN%5D%20en%20%5BMAX%5D%22%2C%22_current%20millisecond%22%3A%22huidige%20milliseconde%22%2C%22_false%22%3A%22onwaar%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22als%20%5BA%5D%20dan%20%5BB%5D%20anders%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22is%20%5BA%5D%20precies%20%5BB%5D%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22letters%20%5BSTART%5D%20t%2Fm%20%5BEND%5D%20van%20%5BSTRING%5D%22%2C%22_newline%20character%22%3A%22nieuwregelteken%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22vervang%20%5BSTRING%5D%20met%20regel%20%5BREGEX%5D%20door%20%5BNEWSTRING%5D%22%2C%22_true%22%3A%22waar%22%7D%2C%22pl%22%3A%7B%22_false%22%3A%22fa%C5%82sz%22%2C%22_true%22%3A%22prawda%22%7D%2C%22ru%22%3A%7B%22_Utilities%22%3A%22%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BPATH%5D%20%D0%B8%D0%B7%20%5BJSON_STRING%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%D0%B7%D0%B0%D0%B6%D0%B8%D0%BC%20%5BINPUT%5D%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%5BMIN%5D%20%D0%B8%20%5BMAX%5D%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%20%D0%B8%D0%B7%20%5BURL%5D%22%2C%22_current%20millisecond%22%3A%22%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B5%20%D0%BC%D0%B8%D0%BB%D0%BB%D0%B8%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D1%8B%22%2C%22_false%22%3A%22%D0%BD%D0%B5%D1%82%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%D0%B5%D1%81%D0%BB%D0%B8%20%5BA%5D%20%D1%82%D0%BE%D0%B3%D0%B4%D0%B0%20%5BB%5D%20%D0%B8%D0%BD%D0%B0%D1%87%D0%B5%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%20%D1%82%D0%BE%D1%87%D0%BD%D0%BE%20%D0%BB%D0%B8%20%5BB%5D%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%D0%B1%D1%83%D0%BA%D0%B2%D1%8B%20%D1%81%20%5BSTART%5D%20%D0%B4%D0%BE%20%5BEND%5D%20%D0%B2%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20%5BSTRING%5D%22%2C%22_newline%20character%22%3A%22%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%20%D0%BD%D0%BE%D0%B2%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%22%2C%22_pi%22%3A%22%D0%BF%D0%B8%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%5BSTRING%5D%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE%20%5BREGEX%5D%20%D1%81%20%5BNEWSTRING%5D%22%2C%22_true%22%3A%22%D0%B4%D0%B0%22%7D%2C%22uk%22%3A%7B%22_newline%20character%22%3A%22%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D1%83%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%22%7D%2C%22zh-cn%22%3A%7B%22_Utilities%22%3A%22%E5%B7%A5%E5%85%B7%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BJSON_STRING%5D%E4%B8%AD%E7%9A%84%5BPATH%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%5BMIN%5D%E5%88%B0%5BMAX%5D%E4%B9%8B%E9%97%B4%E7%9A%84%5BINPUT%5D%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%E6%9D%A5%E8%87%AA%5BURL%5D%E7%9A%84%E5%86%85%E5%AE%B9%22%2C%22_current%20millisecond%22%3A%22%E5%BD%93%E5%89%8D%E6%AF%AB%E7%A7%92%22%2C%22_false%22%3A%22%E5%81%87%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%5BA%5D%EF%BC%9F%5BB%5D%EF%BC%9A%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%3D%3D%3D%5BB%5D%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%5BSTRING%5D%E7%9A%84%E7%AC%AC%5BSTART%5D%E5%88%B0%E7%AC%AC%5BEND%5D%E4%BD%8D%22%2C%22_newline%20character%22%3A%22%E6%8D%A2%E8%A1%8C%E7%AC%A6%22%2C%22_pi%22%3A%22%CF%80%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22%E4%BB%A5%E8%A7%84%E5%88%99%5BREGEX%5D%E6%9B%BF%E6%8D%A2%5BSTRING%5D%E4%B8%BA%5BNEWSTRING%5D%22%2C%22_true%22%3A%22%E7%9C%9F%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20const%20icon%20%3D%0A%20%20%20%20%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADTUlEQVRIS63VTWgUZxgH8P%2B7Mzsf%2B2U2SrPJKBoEA1WKUMzupaKHpgoetadCnaBN9FRaLLRQEW17KKIed1V21dJLbU%2FFRqiixx219NDaVi%2BNmnWNZT%2Bcze7Ozsf7yoxEYpnMRJI5DQzP%2B5v3P8%2F7DEHANVHM7iXAVyAkwQCNgZYjDp3KH7jzZ1DdwmckBLirrE29KQgcTNOBZTrQdYP2es631LSPnp34zQqDlgTIcvTlOowxNBsG6o3uHw6he899eOt%2BEBIGeBHxUW5ElDjEYwKSKdFbzzAsVB61%2Fq4lWlsvv3%2FXXAwJBOaL9pe29slE3MgoOSHF%2BN0DAwnwfASNehe1WudkYVw7sixgYfFkMXtSikU%2FVZQU3LhmHjVZ17Sz59Tbt%2F2QJe3glUIGMnEhe3PgjcR2Ny5dN%2FDf0873ebX8gS%2FwshUBUMK%2BPKveuhzWGZPF0fdiceHq4FAK3a6FyoyuFca13GKA14ruw8qM%2FldhXNscBnz03duDUSY83jCchu04ePBvs5ZXtTW%2BwGQpW12%2FIZ1xP9r0dAM9g2bOH9Rmg5DDpW0ZwvFVD7CpW1ctqNqQP1DM%2FZJRErvdFqw%2BbqHdMccKqvZr4AEsbdsVj4lTbkTttolqtXWloGp7FtlB7uv%2B1fIX6bSM9pyJJ9W5a3m1PAYC5ou4H7mUvT44mNwZTwio17to1Dsn8qp21Bc4cGl0WCLcP%2BvW9wkRQrxddNrW6cyw9NmxnTfthUX7ftgs9LcTP8dkfmxIWeW16cOHTdO22EheLU8v2qYTxezn6bT8zeo1MS%2FT2dk5GB3rHgNOMd6%2BSsFxnE3eJcAnohwdUZQkQAjqtTYadePHwri2L%2FCgHbuxg3%2FywPhdUZJbJOnF3GnpPS9fw7ABAkgij3h8flS46REYPRvVig5KoebV8oXAg3bw4ugmjkV%2B6u%2BXt%2FT1SSDE%2Fwy6sTxrdiHHBYgCH4q8ssqLjOPHZYk%2FkkiKEUHg4Y5qBgbLpDBNG62W5Rhde4rjsGdISUEUgxHf1zx0MfsWdTBGCHIAeQeABbAyBdPmfziTpdz%2BSASlMOT1Z9GCoJeCLAtwrTBk2UAYsiKAH%2BJN2YreXDHg%2FwilzJ3Oz1YUmEcYY2fce0LIx88BFi6vvp70RPYAAAAASUVORK5CYII%3D%22%3B%0A%0A%20%20class%20Utilities%20%7B%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22utilities%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Utilities%22)%2C%0A%0A%20%20%20%20%20%20%20%20color1%3A%20%22%238BC34A%22%2C%0A%20%20%20%20%20%20%20%20color2%3A%20%22%237CB342%22%2C%0A%20%20%20%20%20%20%20%20color3%3A%20%22%23689F38%22%2C%0A%0A%20%20%20%20%20%20%20%20menuIconURI%3A%20icon%2C%0A%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isExactly%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22is%20%5BA%5D%20exactly%20%5BB%5D%3F%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22APPLE%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isLessOrEqual%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BA%5D%20%3C%3D%20%5BB%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2050%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isMoreOrEqual%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BA%5D%20%3E%3D%20%5BB%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2050%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22trueBlock%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%20%22Block%20that%20returns%20true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22falseBlock%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22false%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%20%22Block%20that%20returns%20false%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22exponent%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BA%5D%20%5E%20%5BB%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22pi%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22pi%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%20%22Block%20that%20returns%203.1415...%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22ternaryOperator%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22banana%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20C%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20allowDropAnywhere%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22letters%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20START%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%205%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20END%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%207%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22red%20apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22clamp%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2030%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MIN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2025%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MAX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2040%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22currentMillisecond%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22current%20millisecond%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22fetchFrom%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22content%20from%20%5BURL%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20URL%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22https%3A%2F%2Fextensions.turbowarp.org%2Fhello.txt%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22parseJSON%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'PATH%20is%20a%20string%20like%20%22fruit%2Fapples%22%20and%20JSON_STRING%20is%20an%20object%20like%20%7B%22fruit%22%3A%7B%22apples%22%3A3%7D%7D.%203%20would%20be%20reported%20in%20this%20example.'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20PATH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22fruit%2Fapples%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20JSON_STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'%7B%22fruit%22%3A%20%7B%22apples%22%3A%202%2C%20%22bananas%22%3A%203%7D%2C%20%22total_fruit%22%3A%205%7D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22newline%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22newline%20character%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22stringToBoolean%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22regexReplace%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22bananas%20are%20awesome.%20i%20like%20bananas.%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REGEX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22banana%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NEWSTRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20isExactly(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20return%20A%20%3D%3D%3D%20B%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20isLessOrEqual(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.Cast.compare(A%2C%20B)%20%3C%3D%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20isMoreOrEqual(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.Cast.compare(A%2C%20B)%20%3E%3D%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20trueBlock()%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20falseBlock()%20%7B%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20exponent(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20A%20%3D%20Scratch.Cast.toNumber(A)%3B%0A%20%20%20%20%20%20B%20%3D%20Scratch.Cast.toNumber(B)%3B%0A%20%20%20%20%20%20return%20Math.pow(A%2C%20B)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20pi()%20%7B%0A%20%20%20%20%20%20return%20Math.PI%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20ternaryOperator(%7B%20A%2C%20B%2C%20C%20%7D)%20%7B%0A%20%20%20%20%20%20return%20A%20%3F%20B%20%3A%20C%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20letters(%7B%20STRING%2C%20START%2C%20END%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.Cast.toString(STRING).slice(%0A%20%20%20%20%20%20%20%20Math.max(1%2C%20START)%20-%201%2C%0A%20%20%20%20%20%20%20%20Math.min(STRING.length%2C%20END)%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20clamp(%7B%20INPUT%2C%20MIN%2C%20MAX%20%7D)%20%7B%0A%20%20%20%20%20%20INPUT%20%3D%20Scratch.Cast.toNumber(INPUT)%3B%0A%20%20%20%20%20%20MIN%20%3D%20Scratch.Cast.toNumber(MIN)%3B%0A%20%20%20%20%20%20MAX%20%3D%20Scratch.Cast.toNumber(MAX)%3B%0A%20%20%20%20%20%20if%20(MIN%20%3E%20MAX)%20%7B%0A%20%20%20%20%20%20%20%20return%20Math.min(Math.max(INPUT%2C%20MAX)%2C%20MIN)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20Math.min(Math.max(INPUT%2C%20MIN)%2C%20MAX)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20currentMillisecond()%20%7B%0A%20%20%20%20%20%20return%20Date.now()%20%25%201000%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20fetchFrom(%7B%20URL%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.fetch(URL)%0A%20%20%20%20%20%20%20%20.then((res)%20%3D%3E%20res.text())%0A%20%20%20%20%20%20%20%20.catch((err)%20%3D%3E%20%22%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20parseJSON(%7B%20PATH%2C%20JSON_STRING%20%7D)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20const%20path%20%3D%20PATH.toString()%0A%20%20%20%20%20%20%20%20%20%20.split(%22%2F%22)%0A%20%20%20%20%20%20%20%20%20%20.map((prop)%20%3D%3E%20decodeURIComponent(prop))%3B%0A%20%20%20%20%20%20%20%20if%20(path%5B0%5D%20%3D%3D%3D%20%22%22)%20path.splice(0%2C%201)%3B%0A%20%20%20%20%20%20%20%20if%20(path%5Bpath.length%20-%201%5D%20%3D%3D%3D%20%22%22)%20path.splice(-1%2C%201)%3B%0A%20%20%20%20%20%20%20%20let%20json%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20json%20%3D%20JSON.parse(%22%20%22%20%2B%20JSON_STRING)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20e.message%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20for%20(const%20prop%20of%20path)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!Object.prototype.hasOwnProperty.call(json%2C%20prop))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20json%20%3D%20json%5Bprop%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(json%20%3D%3D%3D%20null)%20return%20%22null%22%3B%0A%20%20%20%20%20%20%20%20else%20if%20(json%20%3D%3D%3D%20undefined)%20return%20%22%22%3B%0A%20%20%20%20%20%20%20%20else%20if%20(typeof%20json%20%3D%3D%3D%20%22object%22)%20return%20JSON.stringify(json)%3B%0A%20%20%20%20%20%20%20%20else%20return%20json.toString()%3B%0A%20%20%20%20%20%20%7D%20catch%20(err)%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20newline()%20%7B%0A%20%20%20%20%20%20return%20%22%5Cn%22%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20stringToBoolean(%7B%20STRING%20%7D)%20%7B%0A%20%20%20%20%20%20return%20STRING%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20regexReplace(%7B%20STRING%2C%20REGEX%2C%20NEWSTRING%20%7D)%20%7B%0A%20%20%20%20%20%20return%20STRING.toString().replace(new%20RegExp(REGEX%2C%20%22gi%22)%2C%20NEWSTRING)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20Utilities())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Mouse%20Cursor%0A%2F%2F%20ID%3A%20MouseCursor%0A%2F%2F%20Description%3A%20Use%20custom%20cursors%20or%20hide%20the%20cursor.%20Also%20allows%20replacing%20the%20cursor%20with%20any%20costume%20image.%0A%2F%2F%20License%3A%20MIT%20AND%20MPL-2.0%0A%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Mouse%20Cursor%22%3A%22Mauszeiger%22%7D%2C%22fi%22%3A%7B%22_Mouse%20Cursor%22%3A%22Hiiren%20kohdistin%22%2C%22_bottom%20left%22%3A%22vasempaan%20alakulmaan%22%2C%22_bottom%20right%22%3A%22oikeaan%20alakulmaan%22%2C%22_center%22%3A%22keskelle%22%2C%22_cursor%22%3A%22kohdistin%22%2C%22_hide%20cursor%22%3A%22piilota%20kohdistin%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22aseta%20kohdistimeksi%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22aseta%20kohdistimeksi%20nykyisen%20asusteen%20keskikohta%3A%20%5Bposition%5D%20enimm%C3%A4iskoko%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22vasempaan%20yl%C3%A4kulmaan%22%2C%22_top%20right%22%3A%22oikeaan%20yl%C3%A4kulmaan%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(ep%C3%A4luotettava)%22%7D%2C%22it%22%3A%7B%22_Mouse%20Cursor%22%3A%22Puntatore%20Mouse%22%2C%22_bottom%20left%22%3A%22angolo%20sinistra%20in%20basso%22%2C%22_bottom%20right%22%3A%22angolo%20destra%20in%20basso%22%2C%22_center%22%3A%22centro%22%2C%22_cursor%22%3A%22puntatore%22%2C%22_hide%20cursor%22%3A%22nascondi%20puntatore%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22usa%20%5Bcur%5D%20come%20puntatore%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22usa%20il%20costume%20attuale%20con%20centro%3A%20%5Bposition%5D%20dimensione%20massima%3A%20%5Bsize%5D%20come%20puntatore%22%2C%22_top%20left%22%3A%22angolo%20sinistra%20in%20alto%22%2C%22_top%20right%22%3A%22angolo%20destra%20in%20alto%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(inaffidabile)%22%7D%2C%22ja%22%3A%7B%22_Mouse%20Cursor%22%3A%22%E3%83%9E%E3%82%A6%E3%82%B9%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%22%2C%22_bottom%20left%22%3A%22%E5%B7%A6%E4%B8%8B%22%2C%22_bottom%20right%22%3A%22%E5%8F%B3%E4%B8%8B%22%2C%22_center%22%3A%22%E4%B8%AD%E5%A4%AE%22%2C%22_cursor%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%22%2C%22_hide%20cursor%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%E9%9A%A0%E3%81%99%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%5Bcur%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%E3%80%81%E4%B8%AD%E5%A4%AE%5Bposition%5D%E6%9C%80%E5%A4%A7%E3%82%B5%E3%82%A4%E3%82%BA%5Bsize%5D%E3%81%A7%E4%BB%8A%E3%81%AE%E3%82%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%A0%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_top%20left%22%3A%22%E5%B7%A6%E4%B8%8A%22%2C%22_top%20right%22%3A%22%E5%8F%B3%E4%B8%8A%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%E4%BF%A1%E9%A0%BC%E6%80%A7%E3%81%8C%E3%81%AA%E3%81%84)%22%7D%2C%22ko%22%3A%7B%22_Mouse%20Cursor%22%3A%22%EB%A7%88%EC%9A%B0%EC%8A%A4%20%EC%BB%A4%EC%84%9C%22%2C%22_bottom%20left%22%3A%22%EC%99%BC%EC%AA%BD%20%EC%95%84%EB%9E%98%22%2C%22_bottom%20right%22%3A%22%EC%98%A4%EB%A5%B8%EC%AA%BD%20%EC%95%84%EB%9E%98%22%2C%22_center%22%3A%22%EA%B0%80%EC%9A%B4%EB%8D%B0%22%2C%22_cursor%22%3A%22%EC%BB%A4%EC%84%9C%22%2C%22_hide%20cursor%22%3A%22%EC%BB%A4%EC%84%9C%20%EC%88%A8%EA%B8%B0%EA%B8%B0%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%EC%BB%A4%EC%84%9C%EB%A5%BC%20%5Bcur%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%EC%BB%A4%EC%84%9C%EB%A5%BC%20%ED%98%84%EC%9E%AC%20%EB%AA%A8%EC%96%91%EC%9C%BC%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%20%EC%A4%91%EC%8B%AC%3A%20%5Bposition%5D%20%EC%B5%9C%EB%8C%80%20%ED%81%AC%EA%B8%B0%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%EC%99%BC%EC%AA%BD%20%EC%9C%84%22%2C%22_top%20right%22%3A%22%EC%98%A4%EB%A5%B8%EC%AA%BD%20%EC%9C%84%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%EB%B6%88%EC%95%88%EC%A0%95)%22%7D%2C%22nb%22%3A%7B%22_Mouse%20Cursor%22%3A%22Mus%20Pekkeren%22%2C%22_bottom%20left%22%3A%22nederst%20til%20venstre%22%2C%22_bottom%20right%22%3A%22nederst%20til%20h%C3%B8yre%22%2C%22_center%22%3A%22senter%22%2C%22_cursor%22%3A%22pekeren%22%2C%22_hide%20cursor%22%3A%22skjul%20pekeren%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22sett%20mark%C3%B8ren%20til%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22sett%20mark%C3%B8ren%20til%20midten%20av%20gjeldende%20drakt%3A%20%5Bposition%5D%20maks%20st%C3%B8rrelse%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%C3%B8verst%20til%20venstre%22%2C%22_top%20right%22%3A%22%C3%B8verst%20til%20h%C3%B8yre%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(up%C3%A5litelig)%22%7D%2C%22nl%22%3A%7B%22_Mouse%20Cursor%22%3A%22Muisaanwijzer%22%2C%22_bottom%20left%22%3A%22linksonder%22%2C%22_bottom%20right%22%3A%22rechtsonder%22%2C%22_center%22%3A%22midden%22%2C%22_hide%20cursor%22%3A%22verberg%20cursor%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22maak%20cursor%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22maak%20cursor%20huidig%20uiterlijk%20met%20middelpunt%3A%20%5Bposition%5D%20en%20max.%20grootte%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22linksboven%22%2C%22_top%20right%22%3A%22rechtsboven%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(onbetrouwbaar)%22%7D%2C%22ru%22%3A%7B%22_Mouse%20Cursor%22%3A%22%D0%9A%D1%83%D1%80%D1%81%D0%BE%D1%80%20%D0%9C%D1%8B%D1%88%D0%B8%22%2C%22_bottom%20left%22%3A%22%D0%BD%D0%B8%D0%B6%D0%BD%D0%B5%D0%BC%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_bottom%20right%22%3A%22%D0%BD%D0%B8%D0%B6%D0%BD%D0%B5%D0%BC%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B5%22%2C%22_cursor%22%3A%22%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%22%2C%22_hide%20cursor%22%3A%22%D1%81%D0%BF%D1%80%D1%8F%D1%82%D0%B0%D1%82%D1%8C%20%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%20%D0%BD%D0%B0%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%20%D0%BD%D0%B0%20%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B9%20%D0%BA%D0%BE%D1%81%D1%82%D1%8E%D0%BC%20%D1%81%20%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%BE%D0%BC%20%D0%B2%3A%20%5Bposition%5D%20%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%BC%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BE%D0%BC%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%D0%B2%D0%B5%D1%80%D1%85%D0%BD%D0%B5%D0%BC%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_top%20right%22%3A%22%D0%B2%D0%B5%D1%80%D1%85%D0%BD%D0%B5%D0%BC%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%D0%BD%D0%B5%D0%BD%D0%B0%D0%B4%D0%B5%D0%B6%D0%BD%D0%BE)%22%7D%2C%22uk%22%3A%7B%22_Mouse%20Cursor%22%3A%22%D0%92%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%20%D0%9C%D0%B8%D1%88%D1%96%22%2C%22_bottom%20left%22%3A%22%D0%B7%D0%BB%D1%96%D0%B2%D0%B0%20%D0%B7%D0%BD%D0%B8%D0%B7%D1%83%22%2C%22_bottom%20right%22%3A%22%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%20%D0%B7%D0%BD%D0%B8%D0%B7%D1%83%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%22%2C%22_cursor%22%3A%22%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%22%2C%22_hide%20cursor%22%3A%22%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D0%B8%20%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%D0%B7%D0%BC%D1%96%D0%BD%D0%B8%D1%82%D0%B8%20%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%20%D0%BD%D0%B0%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%D0%B7%D0%B0%D0%BC%D1%96%D0%BD%D0%B8%D1%82%D0%B8%20%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%20%D0%BD%D0%B0%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%20%D1%86%D0%B5%D0%BD%D1%82%D1%80%3A%20%5Bposition%5D%20%D0%BC%D0%B0%D0%BA%D1%81.%20%D1%80%D0%BE%D0%B7%D0%BC%D1%96%D1%80%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%D0%B7%D0%BB%D1%96%D0%B2%D0%B0%20%D0%B7%D0%B2%D0%B5%D1%80%D1%85%D1%83%22%2C%22_top%20right%22%3A%22%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%20%D0%B7%D0%B2%D0%B5%D1%80%D1%85%D1%83%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%D0%BD%D0%B5%D0%BD%D0%B0%D0%B4%D1%96%D0%B9%D0%BD%D0%BE)%22%7D%2C%22zh-cn%22%3A%7B%22_Mouse%20Cursor%22%3A%22%E9%BC%A0%E6%A0%87%E5%9B%BE%E6%A0%87%22%2C%22_bottom%20left%22%3A%22%E5%BA%95%E9%83%A8%E5%B7%A6%E4%BE%A7%22%2C%22_bottom%20right%22%3A%22%E5%BA%95%E9%83%A8%E5%8F%B3%E4%BE%A7%22%2C%22_center%22%3A%22%E5%B1%85%E4%B8%AD%22%2C%22_cursor%22%3A%22%E9%BC%A0%E6%A0%87%E6%A0%B7%E5%BC%8F%22%2C%22_hide%20cursor%22%3A%22%E9%9A%90%E8%97%8F%E9%BC%A0%E6%A0%87%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%E5%B0%86%E9%BC%A0%E6%A0%87%E6%A0%B7%E5%BC%8F%E8%AE%BE%E4%B8%BA%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%E5%B0%86%E9%BC%A0%E6%A0%87%E4%B8%AD%E5%BF%83%E8%AE%BE%E4%B8%BA%EF%BC%9A%5Bposition%5D%E6%9C%80%E5%A4%A7%E5%B0%BA%E5%AF%B8%EF%BC%9A%5Bsize%5D%22%2C%22_top%20left%22%3A%22%E9%A1%B6%E9%83%A8%E5%B7%A6%E4%BE%A7%22%2C%22_top%20right%22%3A%22%E9%A1%B6%E9%83%A8%E5%8F%B3%E4%BE%A7%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%EF%BC%88%E5%AE%9E%E9%AA%8C%E6%80%A7%EF%BC%89%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20if%20(!Scratch.extensions.unsandboxed)%20%7B%0A%20%20%20%20throw%20new%20Error(%22MouseCursor%20extension%20must%20be%20run%20unsandboxed%22)%3B%0A%20%20%7D%0A%0A%20%20const%20lazilyCreatedCanvas%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%2F**%20%40type%20%7BHTMLCanvasElement%7D%20*%2F%0A%20%20%20%20let%20canvas%20%3D%20null%3B%0A%20%20%20%20%2F**%20%40type%20%7BCanvasRenderingContext2D%7D%20*%2F%0A%20%20%20%20let%20ctx%20%3D%20null%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20width%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20height%0A%20%20%20%20%20*%20%40returns%20%7B%5BHTMLCanvasElement%2C%20CanvasRenderingContext2D%5D%7D%0A%20%20%20%20%20*%2F%0A%20%20%20%20return%20(width%2C%20height)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(!canvas)%20%7B%0A%20%20%20%20%20%20%20%20canvas%20%3D%20document.createElement(%22canvas%22)%3B%0A%20%20%20%20%20%20%20%20ctx%20%3D%20canvas.getContext(%222d%22)%3B%0A%20%20%20%20%20%20%20%20if%20(!ctx)%20%7B%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Could%20not%20get%202d%20rendering%20context%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%2F%2F%20Setting%20canvas%20size%20also%20clears%20it%0A%20%20%20%20%20%20canvas.width%20%3D%20width%3B%0A%20%20%20%20%20%20canvas.height%20%3D%20height%3B%0A%20%20%20%20%20%20return%20%5Bcanvas%2C%20ctx%5D%3B%0A%20%20%20%20%7D%3B%0A%20%20%7D%3B%0A%20%20const%20getRawSkinCanvas%20%3D%20lazilyCreatedCanvas()%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7BRenderWebGL.Skin%7D%20skin%0A%20%20%20*%20%40returns%20%7Bstring%7D%20A%20data%3A%20URI%20for%20the%20skin.%0A%20%20%20*%2F%0A%20%20const%20encodeSkinToURL%20%3D%20(skin)%20%3D%3E%20%7B%0A%20%20%20%20const%20svgSkin%20%3D%20%2F**%20%40type%20%7BRenderWebGL.SVGSkin%7D%20*%2F%20(skin)%3B%0A%20%20%20%20if%20(svgSkin._svgImage)%20%7B%0A%20%20%20%20%20%20%2F%2F%20This%20is%20an%20SVG%20skin%0A%20%20%20%20%20%20return%20svgSkin._svgImage.src%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20It's%20probably%20a%20bitmap%20skin.%0A%20%20%20%20%2F%2F%20The%20most%20reliable%20way%20to%20get%20the%20bitmap%20in%20every%20runtime%20is%20through%20the%20silhouette.%0A%20%20%20%20%2F%2F%20This%20is%20very%20slow%20and%20could%20involve%20reading%20the%20texture%20from%20the%20GPU.%0A%20%20%20%20const%20silhouette%20%3D%20skin._silhouette%3B%0A%20%20%20%20%2F%2F%20unlazy()%20only%20exists%20in%20TW%0A%20%20%20%20if%20(silhouette.unlazy)%20%7B%0A%20%20%20%20%20%20silhouette.unlazy()%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20colorData%20%3D%20silhouette._colorData%3B%0A%20%20%20%20const%20width%20%3D%20silhouette._width%3B%0A%20%20%20%20const%20height%20%3D%20silhouette._height%3B%0A%20%20%20%20const%20imageData%20%3D%20new%20ImageData(%0A%20%20%20%20%20%20colorData%2C%0A%20%20%20%20%20%20silhouette._width%2C%0A%20%20%20%20%20%20silhouette._height%0A%20%20%20%20)%3B%0A%20%20%20%20const%20%5Bcanvas%2C%20ctx%5D%20%3D%20getRawSkinCanvas(width%2C%20height)%3B%0A%20%20%20%20ctx.putImageData(imageData%2C%200%2C%200)%3B%0A%20%20%20%20return%20canvas.toDataURL()%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7BVM.Costume%7D%20costume%0A%20%20%20*%20%40param%20%7Bnumber%7D%20maxWidth%0A%20%20%20*%20%40param%20%7Bnumber%7D%20maxHeight%0A%20%20%20*%20%40returns%20%7B%7Buri%3A%20string%2C%20width%3A%20number%2C%20height%3A%20number%7D%7D%0A%20%20%20*%2F%0A%20%20const%20costumeToCursor%20%3D%20(costume%2C%20maxWidth%2C%20maxHeight)%20%3D%3E%20%7B%0A%20%20%20%20const%20skin%20%3D%20Scratch.vm.renderer._allSkins%5Bcostume.skinId%5D%3B%0A%20%20%20%20const%20imageURI%20%3D%20encodeSkinToURL(skin)%3B%0A%0A%20%20%20%20let%20width%20%3D%20skin.size%5B0%5D%3B%0A%20%20%20%20let%20height%20%3D%20skin.size%5B1%5D%3B%0A%20%20%20%20if%20(width%20%3E%20maxWidth)%20%7B%0A%20%20%20%20%20%20height%20%3D%20height%20*%20(maxWidth%20%2F%20width)%3B%0A%20%20%20%20%20%20width%20%3D%20maxWidth%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(height%20%3E%20maxHeight)%20%7B%0A%20%20%20%20%20%20width%20%3D%20width%20*%20(maxHeight%20%2F%20height)%3B%0A%20%20%20%20%20%20height%20%3D%20maxHeight%3B%0A%20%20%20%20%7D%0A%20%20%20%20width%20%3D%20Math.round(width)%3B%0A%20%20%20%20height%20%3D%20Math.round(height)%3B%0A%0A%20%20%20%20%2F%2F%20We%20wrap%20the%20encoded%20image%20in%20an%20%3Csvg%3E.%20This%20lets%20us%20do%20some%20clever%20things%3A%0A%20%20%20%20%2F%2F%20%20-%20We%20can%20resize%20the%20image%20without%20a%20canvas.%0A%20%20%20%20%2F%2F%20%20-%20We%20can%20give%20the%20browser%20an%20image%20with%20more%20raw%20pixels%20than%20its%20DPI%20independent%20size.%0A%20%20%20%20%2F%2F%20The%20latter%20is%20important%20so%20that%20cursors%20won't%20look%20horrible%20on%20high%20DPI%20displays.%20For%0A%20%20%20%20%2F%2F%20example%2C%20if%20the%20cursor%20will%20display%20at%2032x32%20in%20DPI%20independent%20units%20on%20a%202x%20high%20DPI%0A%20%20%20%20%2F%2F%20display%2C%20we%20actually%20need%20to%20send%20a%2064x64%20image%20for%20it%20to%20look%20good.%20This%20lets%20us%20do%0A%20%20%20%20%2F%2F%20that%20automatically.%0A%20%20%20%20let%20svg%20%3D%20%60%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22%24%7Bwidth%7D%22%20height%3D%22%24%7Bheight%7D%22%3E%60%3B%0A%20%20%20%20svg%20%2B%3D%20%60%3Cimage%20href%3D%22%24%7BimageURI%7D%22%20width%3D%22%24%7Bwidth%7D%22%20height%3D%22%24%7Bheight%7D%22%20%2F%3E%60%3B%0A%20%20%20%20svg%20%2B%3D%20%22%3C%2Fsvg%3E%22%3B%0A%20%20%20%20%2F%2F%20URI%20encoding%20usually%20results%20in%20smaller%20string%20than%20base%2064%20for%20the%20types%20of%20data%20we%20get%20here.%0A%20%20%20%20const%20svgURI%20%3D%20%60data%3Aimage%2Fsvg%2Bxml%3B%2C%24%7BencodeURIComponent(svg)%7D%60%3B%0A%0A%20%20%20%20return%20%7B%0A%20%20%20%20%20%20uri%3A%20svgURI%2C%0A%20%20%20%20%20%20width%2C%0A%20%20%20%20%20%20height%2C%0A%20%20%20%20%7D%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%20%40type%20%7Bstring%7D%20*%2F%0A%20%20let%20nativeCursor%20%3D%20%22default%22%3B%0A%20%20%2F**%20%40type%20%7Bnull%7Cstring%7D%20*%2F%0A%20%20let%20customCursorImageName%20%3D%20null%3B%0A%0A%20%20const%20canvas%20%3D%20Scratch.renderer.canvas%3B%0A%20%20%2F**%20%40type%20%7Bstring%7D%20*%2F%0A%20%20let%20currentCanvasCursor%20%3D%20nativeCursor%3B%0A%20%20const%20updateCanvasCursor%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(canvas.style.cursor%20!%3D%3D%20currentCanvasCursor)%20%7B%0A%20%20%20%20%20%20canvas.style.cursor%20%3D%20currentCanvasCursor%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20scratch-gui%20will%20sometimes%20reset%20the%20cursor%20when%20resizing%20the%20window%20or%20going%20in%2Fout%20of%20fullscreen%0A%20%20new%20MutationObserver(updateCanvasCursor).observe(canvas%2C%20%7B%0A%20%20%20%20attributeFilter%3A%20%5B%22style%22%5D%2C%0A%20%20%20%20attributes%3A%20true%2C%0A%20%20%7D)%3B%0A%0A%20%20%2F**%0A%20%20%20*%20Parse%20strings%20like%20%2260x12%22%20or%20%2277%2C1%22%0A%20%20%20*%20%40param%20%7Bstring%7D%20string%0A%20%20%20*%20%40returns%20%7B%5Bnumber%2C%20number%5D%7D%0A%20%20%20*%2F%0A%20%20const%20parseTuple%20%3D%20(string)%20%3D%3E%20%7B%0A%20%20%20%20const%20%5Ba%2C%20b%5D%20%3D%20(%22%22%20%2B%20string).split(%2F%5B%20%2Cx%5D%2F)%3B%0A%20%20%20%20return%20%5B%2Ba%20%7C%7C%200%2C%20%2Bb%20%7C%7C%200%5D%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20size%20eg.%20%2248x84%22%0A%20%20%20*%20%40returns%20%7Bstring%7D%0A%20%20%20*%2F%0A%20%20const%20formatUnreliableSize%20%3D%20(size)%20%3D%3E%0A%20%20%20%20Scratch.translate(%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20default%3A%20%22%7Bsize%7D%20(unreliable)%22%2C%0A%20%20%20%20%20%20%20%20description%3A%20%22%5Bsize%5D%20is%20replaced%20with%20a%20size%20in%20pixels%20such%20as%20'48x48'%22%2C%0A%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7B%20size%20%7D%0A%20%20%20%20)%3B%0A%0A%20%20const%20cursors%20%3D%20%5B%0A%20%20%20%20%22default%22%2C%0A%20%20%20%20%22pointer%22%2C%0A%20%20%20%20%22move%22%2C%0A%20%20%20%20%22grab%22%2C%0A%20%20%20%20%22grabbing%22%2C%0A%20%20%20%20%22text%22%2C%0A%20%20%20%20%22vertical-text%22%2C%0A%20%20%20%20%22wait%22%2C%0A%20%20%20%20%22progress%22%2C%0A%20%20%20%20%22help%22%2C%0A%20%20%20%20%22context-menu%22%2C%0A%20%20%20%20%22zoom-in%22%2C%0A%20%20%20%20%22zoom-out%22%2C%0A%20%20%20%20%22crosshair%22%2C%0A%20%20%20%20%22cell%22%2C%0A%20%20%20%20%22not-allowed%22%2C%0A%20%20%20%20%22copy%22%2C%0A%20%20%20%20%22alias%22%2C%0A%20%20%20%20%22no-drop%22%2C%0A%20%20%20%20%22all-scroll%22%2C%0A%20%20%20%20%22col-resize%22%2C%0A%20%20%20%20%22row-resize%22%2C%0A%20%20%20%20%22n-resize%22%2C%0A%20%20%20%20%22e-resize%22%2C%0A%20%20%20%20%22s-resize%22%2C%0A%20%20%20%20%22w-resize%22%2C%0A%20%20%20%20%22ne-resize%22%2C%0A%20%20%20%20%22nw-resize%22%2C%0A%20%20%20%20%22se-resize%22%2C%0A%20%20%20%20%22sw-resize%22%2C%0A%20%20%20%20%22ew-resize%22%2C%0A%20%20%20%20%22ns-resize%22%2C%0A%20%20%20%20%22nesw-resize%22%2C%0A%20%20%20%20%22nwse-resize%22%2C%0A%20%20%5D%3B%0A%0A%20%20class%20MouseCursor%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20Scratch.vm.runtime.on(%22RUNTIME_DISPOSED%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.setCur(%7B%0A%20%20%20%20%20%20%20%20%20%20cur%3A%20%22default%22%2C%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22MouseCursor%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Mouse%20Cursor%22)%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setCur%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20cursor%20to%20%5Bcur%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cur%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22pointer%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22cursors%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setCursorImage%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%220%2C0%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22imagePositions%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20size%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%2232x32%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22imageSizes%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22hideCur%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22hide%20cursor%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getCur%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22cursor%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20cursors%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20cursors%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20imagePositions%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%5Bx%2C%20y%5D%20where%20x%20is%20%5B0%3Dleft%2C%20100%3Dright%5D%20and%20y%20is%20%5B0%3Dtop%2C%20100%3Dbottom%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22top%20left%22)%2C%20value%3A%20%220%2C0%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22top%20right%22)%2C%20value%3A%20%22100%2C0%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22bottom%20left%22)%2C%20value%3A%20%220%2C100%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22bottom%20right%22)%2C%20value%3A%20%22100%2C100%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22center%22)%2C%20value%3A%20%2250%2C50%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20imageSizes%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Some%20important%20numbers%20to%20keep%20in%20mind%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Browsers%20ignore%20cursor%20images%20%3E128%20in%20any%20dimension%20(https%3A%2F%2Fsearchfox.org%2Fmozilla-central%2Frev%2F43ee5e789b079e94837a21336e9ce2420658fd19%2Fwidget%2Fgtk%2FnsWindow.cpp%233393-3402)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Browsers%20may%20refuse%20to%20display%20a%20cursor%20near%20window%20borders%20for%20images%20%3E32%20in%20any%20dimension%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%224x4%22%2C%20value%3A%20%224x4%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%228x8%22%2C%20value%3A%20%228x4%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%2212x12%22%2C%20value%3A%20%2212x12%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%2216x16%22%2C%20value%3A%20%2216x16%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%2232x32%22%2C%20value%3A%20%2232x32%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20formatUnreliableSize(%2248x48%22)%2C%20value%3A%20%2248x48%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20formatUnreliableSize(%2264x64%22)%2C%20value%3A%20%2264x64%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20formatUnreliableSize(%22128x128%22)%2C%20value%3A%20%22128x128%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setCur(args)%20%7B%0A%20%20%20%20%20%20const%20newCursor%20%3D%20Scratch.Cast.toString(args.cur)%3B%0A%20%20%20%20%20%20%2F%2F%20Prevent%20setting%20cursor%20to%20%22url(...)%2C%20default%22%20from%20causing%20fetch.%0A%20%20%20%20%20%20if%20(cursors.includes(newCursor)%20%7C%7C%20newCursor%20%3D%3D%3D%20%22none%22)%20%7B%0A%20%20%20%20%20%20%20%20nativeCursor%20%3D%20newCursor%3B%0A%20%20%20%20%20%20%20%20customCursorImageName%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20currentCanvasCursor%20%3D%20newCursor%3B%0A%20%20%20%20%20%20%20%20updateCanvasCursor()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setCursorImage(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20%5BmaxWidth%2C%20maxHeight%5D%20%3D%20parseTuple(args.size).map((i)%20%3D%3E%0A%20%20%20%20%20%20%20%20Math.max(0%2C%20i)%0A%20%20%20%20%20%20)%3B%0A%0A%20%20%20%20%20%20const%20currentCostume%20%3D%0A%20%20%20%20%20%20%20%20util.target.getCostumes()%5Butil.target.currentCostume%5D%3B%0A%20%20%20%20%20%20const%20costumeName%20%3D%20currentCostume.name%3B%0A%0A%20%20%20%20%20%20let%20encodedCostume%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20encodedCostume%20%3D%20costumeToCursor(currentCostume%2C%20maxWidth%2C%20maxHeight)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20This%20could%20happen%20for%20a%20variety%20of%20reasons.%0A%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(encodedCostume)%20%7B%0A%20%20%20%20%20%20%20%20const%20%5BpercentX%2C%20percentY%5D%20%3D%20parseTuple(args.position).map(%0A%20%20%20%20%20%20%20%20%20%20(i)%20%3D%3E%20Math.max(0%2C%20Math.min(100%2C%20i))%20%2F%20100%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20const%20x%20%3D%20percentX%20*%20encodedCostume.width%3B%0A%20%20%20%20%20%20%20%20const%20y%20%3D%20percentY%20*%20encodedCostume.height%3B%0A%0A%20%20%20%20%20%20%20%20currentCanvasCursor%20%3D%20%60url(%22%24%7BencodedCostume.uri%7D%22)%20%24%7Bx%7D%20%24%7By%7D%2C%20%24%7BnativeCursor%7D%60%3B%0A%20%20%20%20%20%20%20%20updateCanvasCursor()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20If%20for%20some%20reason%20the%20costume%20couldn't%20be%20encoded%2C%20we'll%20leave%20the%20cursor%20unchanged.%0A%20%20%20%20%20%20%20%20%2F%2F%20This%20is%20the%20same%20behavior%20that%20would%20happen%20if%20we%20successfully%20encode%20a%20cursor%20but%20the%20browser%0A%20%20%20%20%20%20%20%20%2F%2F%20is%20unable%20to%20parse%20it%20for%20some%20reason.%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20customCursorImageName%20%3D%20costumeName%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20hideCur()%20%7B%0A%20%20%20%20%20%20this.setCur(%7B%0A%20%20%20%20%20%20%20%20cur%3A%20%22none%22%2C%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getCur()%20%7B%0A%20%20%20%20%20%20if%20(customCursorImageName%20!%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20return%20customCursorImageName%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20nativeCursor%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20MouseCursor())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B"]) { + for (const extension of ["data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Animated%20Text%0A%2F%2F%20ID%3A%20text%0A%2F%2F%20Description%3A%20An%20easy%20way%20to%20display%20and%20animate%20text.%20Compatible%20with%20Scratch%20Lab's%20Animated%20Text%20experiment.%0A%2F%2F%20By%3A%20LilyMakesThings%0A%2F%2F%20License%3A%20MIT%20AND%20LGPL-3.0%0A%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Animated%20Text%22%3A%22Animierter%20Text%22%7D%2C%22fi%22%3A%7B%22_%23%20of%20lines%22%3A%22rivien%20m%C3%A4%C3%A4r%C3%A4%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22rivien%20m%C3%A4%C3%A4r%C3%A4%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22Animoitu%20teksti%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Ota%20Scratch%20Labin%20ulkopuoliset%20ominaisuudet%20k%C3%A4ytt%C3%B6%C3%B6n%22%2C%22_Hello!%22%3A%22Hei!%22%2C%22_Here%20we%20go!%22%3A%22Aloitetaan!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Ei-yhteensopivia%20Scratch%20Labin%20kanssa%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Tervetuloa%20projektiini!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22animaation%20%5BANIMATE%5D%20kesto%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20teksti%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22lis%C3%A4%C3%A4%20rivi%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22keskit%C3%A4%20teksti%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22suorita%20%5BANIMATE%5D%20animaatio%20loppuun%22%2C%22_center%22%3A%22keskelle%22%2C%22_displayed%20text%22%3A%22n%C3%A4ytetty%20teksti%22%2C%22_is%20animating%3F%22%3A%22onko%20animaatio%20k%C3%A4ynniss%C3%A4%3F%22%2C%22_is%20showing%20text%3F%22%3A%22n%C3%A4ytet%C3%A4%C3%A4nk%C3%B6%20teksti%C3%A4%3F%22%2C%22_left%22%3A%22vasemmalle%22%2C%22_rainbow%22%3A%22sateenkaari%22%2C%22_random%20font%22%3A%22satunnainen%20fontti%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22palauta%20%5BANIMATE%5D%20animaatio%20normaalikestoiseksi%22%2C%22_reset%20text%20width%22%3A%22nollaa%20tekstin%20leveys%22%2C%22_reset%20typing%20delay%22%3A%22nollaa%20kirjoitusv%C3%A4li%22%2C%22_right%22%3A%22oikealle%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22aseta%20%5BANIMATE%5D%20animaatio%20%5BNUM%5D%20sekunnin%20pituiseksi%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22aseta%20fontiksi%20%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22aseta%20reunuksen%20v%C3%A4riksi%20%5BCOLOR%5D%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22aseta%20reunuksen%20paksuudeksi%20%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22aseta%20heilumisen%20voimakkuudeksi%20%5BNUM%5D%20%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22aseta%20tekstin%20v%C3%A4riksi%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22aseta%20kirjoitusv%C3%A4liksi%20%5BNUM%5D%20sekuntia%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22aseta%20leveydeksi%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22aseta%20leveydeksi%20%5BWIDTH%5D%20ja%20keskit%C3%A4%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22n%C3%A4yt%C3%A4%20hahmo%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22n%C3%A4yt%C3%A4%20teksti%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22aloita%20%5BANIMATE%5D%20animaatio%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22tekstin%20%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22kirjoittuva%22%2C%22_typing%20delay%22%3A%22kirjoitusv%C3%A4li%22%2C%22_with%20word%20wrap%22%3A%22tekstin%20rivitys%20mukaan%20lukien%22%2C%22_without%20word%20wrap%22%3A%22ilman%20tekstin%20rivityst%C3%A4%22%2C%22_zoom%22%3A%22l%C3%A4henev%C3%A4%22%2C%22disableCompatibilityMode%22%3A%22T%C3%A4m%C3%A4%20ottaa%20k%C3%A4ytt%C3%B6%C3%B6n%20uusia%20lohkoja%20ja%20ominaisuuksia%2C%20jotka%20EIV%C3%84T%20TOIMI%20virallisessa%20Scratch%20Labissa.%5Cn%5CnHaluatko%20jatkaa%3F%22%7D%2C%22it%22%3A%7B%22_%23%20of%20lines%22%3A%22numero%20di%20righe%22%2C%22_Animated%20Text%22%3A%22Testo%20Animato%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Abilita%20blocchi%20non%20presenti%20in%20Scratch%20Lab%22%2C%22_Hello!%22%3A%22Ciao!%22%2C%22_Here%20we%20go!%22%3A%22Ecco%20fatto!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Non%20compatibili%20con%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Bevenuti%20nel%20mio%20progetto!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22durata%20%5BANIMATE%5D%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22testo%20%5BTEXT%5D%20con%20effetto%20%5BANIMATE%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22aggiugi%20riga%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22allinea%20il%20testo%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22inizia%20animazione%20%5BANIMATE%5D%20e%20attendi%20la%20fine%22%2C%22_center%22%3A%22centro%22%2C%22_displayed%20text%22%3A%22testo%20animato%22%2C%22_is%20animating%3F%22%3A%22animato%22%2C%22_is%20showing%20text%3F%22%3A%22testo%20visibile%22%2C%22_left%22%3A%22a%20sinistra%22%2C%22_rainbow%22%3A%22effetto%20arcobaleno%22%2C%22_random%20font%22%3A%22scelto%20a%20caso%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22resetta%20durata%20animazione%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22resetta%20larghezza%20testo%22%2C%22_reset%20typing%20delay%22%3A%22resetta%20intervallo%20effetto%20digitazione%22%2C%22_right%22%3A%22a%20destra%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22imposta%20durata%20%5BANIMATE%5D%20a%20%5BNUM%5D%20secondi%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22usa%20carattere%20%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22usa%20%5BCOLOR%5D%20come%20colore%20del%20bordo%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22usa%20uno%20spessore%20del%20bordo%20pari%20a%20%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22porta%20l'intensit%C3%A0%20di%20vibrazione%20al%20%5BNUM%5D%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22imposta%20colore%20del%20testo%20a%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22imposta%20intervallo%20effetto%20digitazione%20a%20%5BNUM%5D%20secondi%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22imposta%20larghezza%20a%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22imposta%20larghezza%20a%20%5BWIDTH%5D%20con%20allineamento%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22mostra%20sprite%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22mostra%20testo%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22inizia%20animazione%20%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20del%20testo%22%2C%22_type%22%3A%22effetto%20digitazione%22%2C%22_typing%20delay%22%3A%22intervallo%20effetto%20digitazione%22%2C%22_zoom%22%3A%22effetto%20zoom%22%7D%2C%22ja%22%3A%7B%22_%23%20of%20lines%22%3A%22%E8%A1%8C%E6%95%B0%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%5BWITH_WORD_WRAP%5D%E3%81%AE%E8%A1%8C%E6%95%B0%22%2C%22_Animated%20Text%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Scratch%20Lab%E4%BB%A5%E5%A4%96%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_Hello!%22%3A%22%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF!%22%2C%22_Here%20we%20go!%22%3A%22%E3%81%95%E3%81%81%E8%A1%8C%E3%81%93%E3%81%86!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Scratch%20Lab%E3%81%A8%E3%81%AE%E4%BA%92%E6%8F%9B%E6%80%A7%E3%81%AA%E3%81%97%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%B8%E3%82%88%E3%81%86%E3%81%93%E3%81%9D!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%E3%81%AE%E9%95%B7%E3%81%95%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%5BTEXT%5D%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%E8%A1%8C%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%A6%5BTEXT%5D%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%5BALIGN%5D%E5%AF%84%E3%82%8A%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%97%E3%81%A6%E5%BE%85%E3%81%A4%22%2C%22_center%22%3A%22%E4%B8%AD%E5%A4%AE%22%2C%22_displayed%20text%22%3A%22%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%22%2C%22_is%20animating%3F%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%3F%22%2C%22_left%22%3A%22%E5%B7%A6%22%2C%22_rainbow%22%3A%22%E3%83%AC%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%22%2C%22_random%20font%22%3A%22%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AA%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%81%AE%E9%95%B7%E3%81%95%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B%22%2C%22_reset%20text%20width%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E5%B9%85%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%99%E3%82%8B%22%2C%22_reset%20typing%20delay%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%96%93%E9%9A%94%E3%82%92%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%22%2C%22_right%22%3A%22%E5%8F%B3%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%81%AE%E9%95%B7%E3%81%95%E3%82%92%5BNUM%5D%E7%A7%92%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%5BFONT%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%E8%BC%AA%E9%83%AD%E3%81%AE%E8%89%B2%E3%82%92%5BCOLOR%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%E8%BC%AA%E9%83%AD%E3%81%AE%E5%B9%85%E3%82%92%5BWIDTH%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF%E3%81%AE%E5%BC%B7%E5%BA%A6%E3%82%92%5BNUM%5D%25%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E8%89%B2%E3%82%92%5BCOLOR%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%96%93%E9%9A%94%E3%82%92%5BNUM%5D%E7%A7%92%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%E5%B9%85%E3%82%92%5BWIDTH%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E5%B9%85%E3%82%92%5BWIDTH%5D%E3%80%81%5BALIGN%5D%E5%AF%84%E3%81%9B%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_show%20sprite%22%3A%22%E3%82%B9%E3%83%97%E3%83%A9%E3%82%A4%E3%83%88%E3%82%92%E8%A1%A8%E7%A4%BA%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%5BTEXT%5D%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%5BANIMATE%5D%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%99%E3%82%8B%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%22%2C%22_typing%20delay%22%3A%22%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E9%96%93%E9%9A%94%22%2C%22_with%20word%20wrap%22%3A%22%E9%80%94%E4%B8%AD%E6%94%B9%E8%A1%8C%E3%82%92%E5%90%AB%E3%82%93%E3%81%A7%22%2C%22_without%20word%20wrap%22%3A%22%E9%80%94%E4%B8%AD%E6%94%B9%E8%A1%8C%E3%82%92%E5%90%AB%E3%81%BE%E3%81%AA%E3%81%84%E3%81%A7%22%2C%22_zoom%22%3A%22%E3%82%BA%E3%83%BC%E3%83%A0%22%2C%22disableCompatibilityMode%22%3A%22%E3%81%93%E3%82%8C%E3%81%AFScratch%20Lab%E3%81%A7%E3%81%AF%E5%8B%95%E3%81%8B%E3%81%AA%E3%81%84%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%84%E6%A9%9F%E8%83%BD%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%5Cn%5Cn%E7%B6%9A%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F%22%7D%2C%22ko%22%3A%7B%22_%23%20of%20lines%22%3A%22%EC%A4%84%20%EC%88%98%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%5BWITH_WORD_WRAP%5D%20%EC%A4%84%20%EC%88%98%22%2C%22_Animated%20Text%22%3A%22%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%EB%B9%84%20Scratch%20Lab%20%EA%B8%B0%EB%8A%A5%20%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_Hello!%22%3A%22%EC%95%88%EB%85%95!%22%2C%22_Here%20we%20go!%22%3A%22%EA%B0%84%EB%8B%A4!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Scratch%20Lab%EA%B3%BC%20%ED%98%B8%ED%99%98%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%8C%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%EC%A0%9C%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%20%EC%98%A4%EC%8B%A0%EA%B1%B8%20%ED%99%98%EC%98%81%ED%95%B4%EC%9A%94!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%EC%9D%98%20%EB%8F%99%EC%9E%91%20%EC%8B%9C%EA%B0%84%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%EB%AC%B8%EA%B5%AC%20%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%5BALIGN%5D%20%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%5BANIMATE%5D%20%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%EC%8B%9C%EC%9E%91%ED%95%98%EA%B3%A0%20%EA%B8%B0%EB%8B%A4%EB%A6%AC%EA%B8%B0%22%2C%22_center%22%3A%22%EA%B0%80%EC%9A%B4%EB%8D%B0%22%2C%22_displayed%20text%22%3A%22%EB%82%98%ED%83%80%EB%82%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%22%2C%22_is%20animating%3F%22%3A%22%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%EC%A4%91%EC%9D%B8%EA%B0%80%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%EA%B0%80%20%EB%82%98%ED%83%80%EB%82%AC%EB%8A%94%EA%B0%80%3F%22%2C%22_left%22%3A%22%EC%99%BC%EC%AA%BD%22%2C%22_rainbow%22%3A%22%EB%AC%B4%EC%A7%80%EA%B0%9C%22%2C%22_random%20font%22%3A%22%EB%AC%B4%EC%9E%91%EC%9C%84%20%EA%B8%80%EA%BC%B4%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%EC%9D%98%20%EB%8F%99%EC%9E%91%20%EC%8B%9C%EA%B0%84%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_reset%20text%20width%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EB%84%93%EC%9D%B4%EB%A5%BC%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_reset%20typing%20delay%22%3A%22%ED%83%80%EC%9E%90%20%ED%9A%A8%EA%B3%BC%EC%9D%98%20%EA%B0%84%EA%B2%A9%20%EC%B4%88%EA%B8%B0%ED%99%94%ED%95%98%EA%B8%B0%22%2C%22_right%22%3A%22%EC%98%A4%EB%A5%B8%EC%AA%BD%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%5BANIMATE%5D%EC%9D%98%20%EB%8F%99%EC%9E%91%20%EC%8B%9C%EA%B0%84%EC%9D%84%20%5BNUM%5D%EC%B4%88%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%EA%B8%80%EA%BC%B4%EC%9D%84%20%5BFONT%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%ED%85%8C%EB%91%90%EB%A6%AC%20%EC%83%89%EC%9D%84%20%5BCOLOR%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%ED%85%8C%EB%91%90%EB%A6%AC%20%EB%91%90%EA%BB%98%EB%A5%BC%20%5BWIDTH%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%83%89%EC%9D%84%20%5BCOLOR%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%ED%83%80%EC%9E%90%20%ED%9A%A8%EA%B3%BC%EC%9D%98%20%EA%B0%84%EA%B2%A9%EC%9D%84%20%5BNUM%5D%EC%B4%88%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%EB%84%93%EC%9D%B4%EB%A5%BC%20%5BWIDTH%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%EB%84%93%EC%9D%B4%20%5BWIDTH%5D%EC%9D%98%20%5BALIGN%5D%20%EC%A0%95%EB%A0%AC%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_show%20sprite%22%3A%22%EC%8A%A4%ED%94%84%EB%9D%BC%EC%9D%B4%ED%8A%B8%EB%A1%9C%20%EB%B3%B4%EC%9D%B4%EA%B8%B0%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%20%5BTEXT%5D%20%EB%B3%B4%EC%9D%B4%EA%B8%B0%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%5BANIMATE%5D%20%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98%20%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%9D%98%20%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22%ED%83%80%EC%9E%90%22%2C%22_typing%20delay%22%3A%22%ED%83%80%EC%9E%90%20%ED%9A%A8%EA%B3%BC%EC%9D%98%20%EA%B0%84%EA%B2%A9%22%2C%22_with%20word%20wrap%22%3A%22%EC%A4%84%EB%B0%94%EA%BF%88%EC%9D%84%20%ED%8F%AC%ED%95%A8%ED%95%9C%22%2C%22_without%20word%20wrap%22%3A%22%EC%A4%84%EB%B0%94%EA%BF%88%EC%9D%84%20%EC%A0%9C%EC%99%B8%ED%95%9C%22%2C%22_zoom%22%3A%22%EC%BB%A4%EC%A7%80%EA%B8%B0%22%2C%22disableCompatibilityMode%22%3A%22%EC%95%9E%EC%9C%BC%EB%A1%9C%20%EC%B6%94%EA%B0%80%EB%90%98%EB%8A%94%20%EA%B8%B0%EB%93%B1%EB%93%A4%EC%9D%80%20%EA%B3%B5%EC%8B%9D%20Scratch%20Lab%EA%B3%BC%20%ED%98%B8%ED%99%98%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.%5Cn%5Cn%EA%B3%84%EC%86%8D%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%22%7D%2C%22nb%22%3A%7B%22_%23%20of%20lines%22%3A%22%23%20av%20linjer%22%2C%22_Animated%20Text%22%3A%22Animert%20Tekst%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Aktiver%20funksjoner%20som%20er%20ikke%20tilgjengelig%20i%20scratch%20lab%22%2C%22_Hello!%22%3A%22Hei!%22%2C%22_Here%20we%20go!%22%3A%22Her%20g%C3%A5r%20vi!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Inkompatibel%20med%20Scratch%20Lab.%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Velkommen%20til%20mitt%20prosjekt!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%5BANIMATE%5D%20varighet%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20tekst%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22legg%20til%20linje%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22juster%20teksten%20til%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22animere%20%5BANIMATE%5D%20til%20ferdig%22%2C%22_center%22%3A%22senter%22%2C%22_displayed%20text%22%3A%22vist%20tekst%22%2C%22_is%20animating%3F%22%3A%22er%20animerer%3F%22%2C%22_is%20showing%20text%3F%22%3A%22viser%20teksten%3F%22%2C%22_left%22%3A%22venstre%22%2C%22_rainbow%22%3A%22regnbue%22%2C%22_random%20font%22%3A%22tilfeldig%20skrifttype%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22tilbakestill%20%5BANIMATE%5D%20varighet%22%2C%22_reset%20text%20width%22%3A%22tilbakestill%20tekstbredde%22%2C%22_reset%20typing%20delay%22%3A%22nullstill%20skriveforsinkelse%22%2C%22_right%22%3A%22riktig%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22sett%20%5BANIMATE%5D%20varighet%20til%20%5BNUM%5D%20sekunder%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22sett%20skrifttype%20til%20%5BFONT%5D%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22sett%20tekstfarge%20til%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22sett%20skriveforsinkelse%20til%20%5BNUM%5D%20sekunder%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22sett%20bredde%20til%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22sett%20bredde%20til%20%5BWIDTH%5D%20justert%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22vis%20sprite%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22vis%20tekst%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22start%20%5BANIMATE%5D%20animasjon%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22tekst%20%5BATTRIBUTE%5D%22%2C%22_typing%20delay%22%3A%22skriveforsinkelse%22%2C%22disableCompatibilityMode%22%3A%22Dette%20vil%20aktivere%20nye%20blokker%20og%20funksjoner%20som%20ikke%20vil%20fungere%20i%20den%20offisielle%20Scratch%20Lab.%5Cn%5Cn%C3%98nsker%20du%20%C3%A5%20fortsette%3F%22%7D%2C%22nl%22%3A%7B%22_%23%20of%20lines%22%3A%22aantal%20regels%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22aantal%20regels%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22Geanimeerde%20tekst%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22Niet-Scratch%20Lab%20Functies%20Inschakelen%22%2C%22_Hello!%22%3A%22Hallo!%22%2C%22_Here%20we%20go!%22%3A%22Daar%20gaan%20we!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22Incompatibel%20met%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22Welkom%20bij%20mijn%20project!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22duur%20van%20%5BANIMATE%5D%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20tekst%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22voeg%20regel%20%5BTEXT%5D%20toe%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22lijn%20tekst%20%5BALIGN%5D%20uit%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22start%20animatie%20%5BANIMATE%5D%20en%20wacht%22%2C%22_center%22%3A%22midden%22%2C%22_displayed%20text%22%3A%22weergegeven%20tekst%22%2C%22_is%20animating%3F%22%3A%22animatie%20bezig%3F%22%2C%22_is%20showing%20text%3F%22%3A%22tekst%20aan%20het%20tonen%3F%22%2C%22_left%22%3A%22links%22%2C%22_rainbow%22%3A%22regenboog%22%2C%22_random%20font%22%3A%22willekeurig%20lettertype%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22reset%20duur%20van%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22reset%20tekstbreedte%22%2C%22_reset%20typing%20delay%22%3A%22reset%20wachttijd%20van%20typ-animatie%22%2C%22_right%22%3A%22rechts%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22maak%20duur%20van%20%5BANIMATE%5D%20%5BNUM%5D%20seconden%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22maak%20lettertype%20%5BFONT%5D%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22maak%20tekstkleur%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22maak%20wachttijd%20van%20typ-animatie%20%5BNUM%5D%20seconden%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22maak%20breedte%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22maak%20breedte%20%5BWIDTH%5D%20%5BALIGN%5D%20uitgelijnd%22%2C%22_show%20sprite%22%3A%22toon%20sprite%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22toon%20tekst%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22start%20animatie%20%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20van%20tekst%22%2C%22_type%22%3A%22typen%22%2C%22_typing%20delay%22%3A%22wachttijd%20van%20typ-animatie%22%2C%22_with%20word%20wrap%22%3A%22met%20tekstterugloop%22%2C%22_without%20word%20wrap%22%3A%22zonder%20tekstterugloop%22%2C%22disableCompatibilityMode%22%3A%22Dit%20voegt%20nieuwe%20blokken%20en%20functies%20toe%20die%20NIET%20werken%20in%20het%20offici%C3%ABle%20Scratch%20Lab.%5Cn%5CnWil%20je%20verdergaan%3F%22%7D%2C%22pl%22%3A%7B%22_Animated%20Text%22%3A%22Animowany%20Tekst%22%2C%22_Hello!%22%3A%22Cze%C5%9B%C4%87!%22%7D%2C%22ru%22%3A%7B%22_%23%20of%20lines%22%3A%22%D0%BA%D0%BE%D0%BB-%D0%B2%D0%BE%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%23%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22%D0%90%D0%BD%D0%B8%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%A2%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%D0%92%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%20%D0%BD%D0%B5%20%D0%B8%D0%B7%20Scratch%20Lab%22%2C%22_Hello!%22%3A%22%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82!%22%2C%22_Here%20we%20go!%22%3A%22%D0%9F%D0%BE%D0%B5%D1%85%D0%B0%D0%BB%D0%B8!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22%D0%9D%D0%B5%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D0%BE%20%D1%81%D0%BE%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%D0%94%D0%BE%D0%B1%D1%80%D0%BE%20%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B2%20%D0%BC%D0%BE%D0%B9%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%5BANIMATE%5D%20%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%D0%B2%D1%8B%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%BF%D0%BE%20%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%D0%B0%D0%BD%D0%B8%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%B4%D0%BE%20%D0%BA%D0%BE%D0%BD%D1%86%D0%B0%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%D1%83%22%2C%22_displayed%20text%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_is%20animating%3F%22%3A%22%D0%B0%D0%BD%D0%B8%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D1%82%D1%81%D1%8F%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%3F%22%2C%22_left%22%3A%22%D0%BB%D0%B5%D0%B2%D0%BE%D0%BC%D1%83%20%D0%BA%D1%80%D0%B0%D1%8E%22%2C%22_rainbow%22%3A%22%D1%80%D0%B0%D0%B4%D1%83%D0%B6%D0%BD%D1%8B%D0%B9%22%2C%22_random%20font%22%3A%22%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B9%20%D1%88%D1%80%D0%B8%D1%84%D1%82%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%D1%81%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22%D1%81%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%22%2C%22_reset%20typing%20delay%22%3A%22%D1%81%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D1%83%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D0%B8%D1%8F%22%2C%22_right%22%3A%22%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BC%D1%83%20%D0%BA%D1%80%D0%B0%D1%8E%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%5BANIMATE%5D%20%D0%B2%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D1%80%D0%B8%D1%84%D1%82%20%D0%B2%20%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%86%D0%B2%D0%B5%D1%82%20%D0%BE%D0%B1%D0%B2%D0%BE%D0%B4%D0%BA%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BCOLOR%5D%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D0%B5%20%D0%BE%D0%B1%D0%B2%D0%BE%D0%B4%D0%BA%D0%B8%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%81%D0%B8%D0%BB%D1%83%20%D1%82%D1%80%D1%8F%D1%81%D0%BA%D0%B8%20%D0%BD%D0%B0%5BNUM%5D%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%86%D0%B2%D0%B5%D1%82%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D0%B2%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D1%83%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%B2%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D0%B2%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D0%B2%20%5BWIDTH%5D%20%D0%B2%D1%8B%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D0%BF%D0%BE%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D1%80%D0%B0%D0%B9%D1%82%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8E%20%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%22%2C%22_type%22%3A%22%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%D1%81%D1%8F%22%2C%22_typing%20delay%22%3A%22%D0%B7%D0%B0%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20%D0%BF%D0%B5%D1%87%D0%B0%D1%82%D0%B0%D0%BD%D0%B8%D1%8F%22%2C%22_with%20word%20wrap%22%3A%22%D1%81%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%BE%D0%BC%20%D1%81%D0%BB%D0%BE%D0%B2%22%2C%22_without%20word%20wrap%22%3A%22%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%B0%20%D1%81%D0%BB%D0%BE%D0%B2%22%2C%22_zoom%22%3A%22%D0%B2%D1%8B%D1%80%D0%B0%D1%81%D1%82%D0%B0%D1%8E%D1%89%D0%B8%D0%B9%22%2C%22disableCompatibilityMode%22%3A%22%D0%AD%D1%82%D0%BE%20%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%20%D0%B8%20%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B5%20%D0%9D%D0%95%20%D0%91%D0%A3%D0%94%D0%A3%D0%A2%20%D0%A0%D0%90%D0%91%D0%9E%D0%A2%D0%90%D0%A2%D0%AC%20%D0%B2%20%D0%BE%D1%84%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20Scratch.%5Cn%5Cn%D0%92%D1%8B%20%D0%B6%D0%B5%D0%BB%D0%B0%D0%B5%D1%82%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B8%D1%82%D1%8C%3F%22%7D%2C%22uk%22%3A%7B%22_%23%20of%20lines%22%3A%22%D0%BA%D1%96%D0%BB%D1%8C%D0%BA%D1%96%D1%81%D1%82%D1%8C%20%D0%BB%D1%96%D0%BD%D1%96%D0%B9%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%D0%BA%D1%96%D0%BB%D1%8C%D0%BA%D1%96%D1%81%D1%82%D1%8C%20%D0%BB%D1%96%D0%BD%D1%96%D0%B9%20%5BWITH_WORD_WRAP%5D%22%2C%22_Animated%20Text%22%3A%22%D0%90%D0%BD%D1%96%D0%BC%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%A2%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%D0%A3%D0%B2%D1%96%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%B8%20%D0%91%D0%BB%D0%BE%D0%BA%D0%B8%20%D0%9F%D0%BE%D0%B7%D0%B0%20Scratch%20Lab%22%2C%22_Hello!%22%3A%22%D0%9F%D1%80%D0%B8%D0%B2%D1%96%D1%82!%22%2C%22_Here%20we%20go!%22%3A%22%D0%9F%D0%BE%D1%87%D0%B8%D0%BD%D0%B0%D1%94%D0%BC%D0%BE!%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22%D0%9D%D0%B5%D1%81%D1%83%D0%BC%D1%96%D1%81%D0%BD%D1%96%20%D1%96%D0%B7%20Scratch%20Lab%3A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%D0%92%D1%96%D1%82%D0%B0%D1%94%D0%BC%D0%BE%20%D1%83%20%D0%BC%D0%BE%D1%94%D0%BC%D1%83%20%D0%BF%D1%80%D0%BE%D1%94%D0%BA%D1%82%D1%96!%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%BB%D1%96%D1%81%D1%82%D1%8C%20%5BANIMATE%5D%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%5BANIMATE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%D0%B4%D0%BE%D0%B4%D0%B0%D1%82%D0%B8%20%D0%BB%D1%96%D0%BD%D1%96%D1%8E%20%5BTEXT%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%D0%B0%D0%BD%D1%96%D0%BC%D1%83%D0%B2%D0%B0%D1%82%D0%B8%5BANIMATE%5D%20%D0%B4%D0%BE%20%D0%BA%D1%96%D0%BD%D1%86%D1%8F%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%22%2C%22_displayed%20text%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%B8%D0%B9%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%22%2C%22_is%20animating%3F%22%3A%22%D0%B0%D0%BD%D1%96%D0%BC%D1%83%D1%94%D1%82%D1%8C%D1%81%D1%8F%3F%22%2C%22_is%20showing%20text%3F%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%83%D1%94%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%3F%22%2C%22_left%22%3A%22%D0%BB%D1%96%D0%B2%D0%BE%22%2C%22_rainbow%22%3A%22%D0%B2%D0%B5%D1%81%D0%B5%D0%BB%D0%BA%D0%B0%22%2C%22_random%20font%22%3A%22%D0%B2%D0%B8%D0%BF%D0%B0%D0%B4%D0%BA%D0%BE%D0%B2%D0%B8%D0%B9%20%D1%88%D1%80%D0%B8%D1%84%D1%82%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%D1%81%D0%BA%D0%B8%D0%BD%D1%83%D1%82%D0%B8%20%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%BB%D1%96%D1%81%D1%82%D1%8C%20%5BANIMATE%5D%22%2C%22_reset%20text%20width%22%3A%22%D1%81%D0%BA%D0%B8%D0%BD%D1%83%D1%82%D0%B8%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%22%2C%22_reset%20typing%20delay%22%3A%22%D1%81%D0%BA%D0%B8%D0%BD%D1%83%D1%82%D0%B8%20%D0%B7%D0%B0%D1%82%D1%80%D0%B8%D0%BC%D0%BA%D1%83%20%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%22%2C%22_right%22%3A%22%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D0%BB%D1%96%D1%81%D1%82%D1%8C%20%5BANIMATE%5D%20%D0%B4%D0%BE%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%88%D1%80%D0%B8%D1%84%D1%82%20%5BFONT%5D%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D0%BA%D0%BE%D0%BB%D1%96%D1%80%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%20%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D0%B7%D0%B0%D1%82%D1%80%D0%B8%D0%BC%D0%BA%D1%83%20%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%20%5BNUM%5D%20%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%D0%B2%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D0%B8%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%83%20%5BWIDTH%5D%20%D0%BF%D0%BE%20%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B8%20%D1%81%D0%BF%D1%80%D0%B0%D0%B9%D1%82%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B8%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%D0%BF%D0%BE%D1%87%D0%B0%D1%82%D0%B8%20%D0%B0%D0%BD%D1%96%D0%BC%D0%B0%D1%86%D1%96%D1%8E%20%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%5BATTRIBUTE%5D%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%22%2C%22_type%22%3A%22%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%22%2C%22_typing%20delay%22%3A%22%D0%B7%D0%B0%D1%82%D1%80%D0%B8%D0%BC%D0%BA%D0%B0%20%D0%BD%D0%B0%D0%B1%D0%B8%D1%80%D0%B0%D0%BD%D0%BD%D1%8F%22%2C%22_with%20word%20wrap%22%3A%22%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D0%BE%D0%BC%20%D1%81%D0%BB%D1%96%D0%B2%22%2C%22_without%20word%20wrap%22%3A%22%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D1%83%20%D1%81%D0%BB%D1%96%D0%B2%22%2C%22_zoom%22%3A%22%D0%B7%D1%83%D0%BC%22%2C%22disableCompatibilityMode%22%3A%22%D0%A6%D0%B5%20%D0%B4%D0%BE%D0%B4%D0%B0%D1%94%20%D0%BD%D0%BE%D0%B2%D1%96%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%20%D1%8F%D0%BA%D1%96%20%D0%9D%D0%95%20%D0%9F%D0%A0%D0%90%D0%A6%D0%AE%D0%92%D0%90%D0%A2%D0%98%D0%9C%D0%A3%D0%A2%D0%AC%20%D0%BD%D0%B0%20%D0%BE%D1%84%D1%96%D1%86%D1%96%D0%B9%D0%BD%D1%96%D0%B9%20Scratch%20Lab.%5Cn%5Cn%D0%91%D0%B0%D0%B6%D0%B0%D1%94%D1%82%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%B2%D0%B6%D0%B8%D1%82%D0%B8%3F%22%7D%2C%22zh-cn%22%3A%7B%22_%23%20of%20lines%22%3A%22%E6%96%87%E6%9C%AC%E8%A1%8C%E6%95%B0%22%2C%22_%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%3A%22%5BWITH_WORD_WRAP%5D%E6%97%B6%E7%9A%84%E8%A1%8C%E6%95%B0%22%2C%22_Animated%20Text%22%3A%22%E8%89%BA%E6%9C%AF%E5%AD%97%22%2C%22_Enable%20Non-Scratch%20Lab%20Features%22%3A%22%E6%98%BE%E7%A4%BA%E4%B8%8EScratch%20Lab%E4%B8%8D%E5%85%BC%E5%AE%B9%E7%9A%84%E7%A7%AF%E6%9C%A8%22%2C%22_Hello!%22%3A%22%E4%BD%A0%E5%A5%BD%EF%BC%81%22%2C%22_Here%20we%20go!%22%3A%22%E7%8E%B0%E5%9C%A8%E5%87%BA%E5%8F%91%EF%BC%81%22%2C%22_Incompatible%20with%20Scratch%20Lab%3A%22%3A%22%E4%BB%A5%E4%B8%8B%E7%A7%AF%E6%9C%A8%E4%B8%8EScratch%20Lab%E4%B8%8D%E5%85%BC%E5%AE%B9%EF%BC%9A%22%2C%22_Welcome%20to%20my%20project!%22%3A%22%E6%AC%A2%E8%BF%8E%E6%9D%A5%E5%88%B0%E6%88%91%E7%9A%84%E4%BD%9C%E5%93%81%EF%BC%81%22%2C%22_%5BANIMATE%5D%20duration%22%3A%22%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E7%9A%84%E5%AE%8C%E6%88%90%E6%97%B6%E9%97%B4%22%2C%22_%5BANIMATE%5D%20text%20%5BTEXT%5D%22%3A%22%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%E6%98%AF%5BANIMATE%5D%E7%9A%84%E6%96%87%E6%9C%AC%5BTEXT%5D%22%2C%22_add%20line%20%5BTEXT%5D%22%3A%22%E5%A2%9E%E5%8A%A0%E4%B8%80%E8%A1%8C%E6%96%87%E6%9C%AC%5BTEXT%5D%22%2C%22_align%20text%20to%20%5BALIGN%5D%22%3A%22%E5%B0%86%E6%96%87%E6%9C%AC%E7%9A%84%E5%B1%95%E7%A4%BA%E6%A0%B7%E5%BC%8F%E8%AE%BE%E4%B8%BA%5BALIGN%5D%22%2C%22_animate%20%5BANIMATE%5D%20until%20done%22%3A%22%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E5%B9%B6%E7%AD%89%E5%BE%85%22%2C%22_center%22%3A%22%E5%B1%85%E4%B8%AD%22%2C%22_displayed%20text%22%3A%22%E6%98%BE%E7%A4%BA%E7%9A%84%E6%96%87%E6%9C%AC%22%2C%22_is%20animating%3F%22%3A%22%E6%AD%A3%E5%9C%A8%E6%98%BE%E7%A4%BA%E8%89%BA%E6%9C%AF%E5%AD%97%EF%BC%9F%22%2C%22_is%20showing%20text%3F%22%3A%22%E6%96%87%E6%9C%AC%E6%98%BE%E7%A4%BA%E4%BA%86%EF%BC%9F%22%2C%22_left%22%3A%22%E5%B1%85%E5%B7%A6%22%2C%22_rainbow%22%3A%22%E5%BD%A9%E8%99%B9%E8%89%B2%22%2C%22_random%20font%22%3A%22%E9%9A%8F%E6%9C%BA%E5%AD%97%E4%BD%93%22%2C%22_reset%20%5BANIMATE%5D%20duration%22%3A%22%E9%87%8D%E7%BD%AE%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E7%9A%84%E5%AE%8C%E6%88%90%E6%97%B6%E9%97%B4%22%2C%22_reset%20text%20width%22%3A%22%E9%87%8D%E7%BD%AE%E6%96%87%E6%9C%AC%E5%AE%BD%E5%BA%A6%22%2C%22_reset%20typing%20delay%22%3A%22%E9%87%8D%E7%BD%AE%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%22%2C%22_right%22%3A%22%E5%B1%85%E5%8F%B3%22%2C%22_set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22%3A%22%E5%B0%86%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%E7%9A%84%E5%AE%8C%E6%88%90%E6%97%B6%E9%97%B4%E8%AE%BE%E4%B8%BA%5BNUM%5D%E7%A7%92%22%2C%22_set%20font%20to%20%5BFONT%5D%22%3A%22%E5%B0%86%E5%AD%97%E4%BD%93%E8%AE%BE%E4%B8%BA%5BFONT%5D%22%2C%22_set%20outline%20color%20to%20%5BCOLOR%5D%22%3A%22%E5%B0%86%E8%BD%AE%E5%BB%93%E9%A2%9C%E8%89%B2%E8%AE%BE%E4%B8%BA%5BCOLOR%5D%22%2C%22_set%20outline%20width%20to%20%5BWIDTH%5D%22%3A%22%E5%B0%86%E8%BD%AE%E5%BB%93%E5%A4%A7%E5%B0%8F%E8%AE%BE%E4%B8%BA%5BWIDTH%5D%22%2C%22_set%20shake%20intensity%20to%20%5BNUM%5D%25%22%3A%22%E5%B0%86%E6%8A%96%E5%8A%A8%E5%BC%BA%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BNUM%5D%25%22%2C%22_set%20text%20color%20to%20%5BCOLOR%5D%22%3A%22%E5%B0%86%E6%96%87%E6%9C%AC%E9%A2%9C%E8%89%B2%E8%AE%BE%E4%B8%BA%5BCOLOR%5D%22%2C%22_set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22%3A%22%E5%B0%86%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BNUM%5D%E7%A7%92%2F%E5%AD%97%22%2C%22_set%20width%20to%20%5BWIDTH%5D%22%3A%22%E5%B0%86%E6%96%87%E6%9C%AC%E7%9A%84%E5%AE%BD%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BWIDTH%5D%22%2C%22_set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22%3A%22%E5%B0%86%E5%AE%BD%E5%BA%A6%E8%AE%BE%E4%B8%BA%5BWIDTH%5D%E6%A0%B7%E5%BC%8F%5BALIGN%5D%22%2C%22_show%20sprite%22%3A%22%E6%98%BE%E7%A4%BA%E8%A7%92%E8%89%B2%22%2C%22_show%20text%20%5BTEXT%5D%22%3A%22%E6%98%BE%E7%A4%BA%E6%96%87%E6%9C%AC%5BTEXT%5D%22%2C%22_start%20%5BANIMATE%5D%20animation%22%3A%22%E6%98%BE%E7%A4%BA%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F%5BANIMATE%5D%22%2C%22_text%20%5BATTRIBUTE%5D%22%3A%22%E6%96%87%E6%9C%AC%E7%9A%84%5BATTRIBUTE%5D%22%2C%22_type%22%3A%22%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%22%2C%22_typing%20delay%22%3A%22%E9%80%90%E5%AD%97%E6%98%BE%E7%A4%BA%E9%80%9F%E5%BA%A6%22%2C%22_with%20word%20wrap%22%3A%22%E6%9C%89%E8%87%AA%E5%8A%A8%E6%8D%A2%E8%A1%8C%22%2C%22_without%20word%20wrap%22%3A%22%E4%B8%8D%E6%8D%A2%E8%A1%8C%22%2C%22_zoom%22%3A%22%E7%A7%BB%E5%8A%A8%E5%8A%A8%E7%94%BB%22%2C%22disableCompatibilityMode%22%3A%22%E8%BF%99%E5%B0%86%E4%BC%9A%E5%90%AF%E7%94%A8%E6%96%B0%E7%9A%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E8%BF%99%E4%BA%9B%E7%A7%AF%E6%9C%A8%E6%98%AF%E4%B8%8D%E5%85%BC%E5%AE%B9Scratch%20Lab%E3%80%82%5Cn%5Cn%E6%98%AF%E5%90%A6%E5%90%AF%E7%94%A8%E6%96%B0%E5%8A%9F%E8%83%BD%EF%BC%9F%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20%2F%2F%20This%20extension%20was%20created%20by%20making%20projects%20with%20https%3A%2F%2Flab.scratch.mit.edu%2Ftext%2F%0A%20%20%2F%2F%20To%20determine%20block%20and%20argument%20IDs%2C%20we%20extracted%20project.json%20and%20examined%20the%20result.%0A%20%20%2F%2F%20To%20determine%20block%20behaviors%20we%20simply%20experiment%20with%20Scratch%20Lab%20and%20made%20sure%20our%0A%20%20%2F%2F%20blocks%20do%20the%20same%20things.%0A%20%20%2F%2F%20This%20extension's%20code%20is%20not%20based%20on%20the%20source%20code%20of%20Scratch%20Lab's.%0A%0A%20%20%2F%2F%20by%20%40LilyMakesThings%0A%20%20const%20blockIconURI%20%3D%0A%20%20%20%20%22data%3Aimage%2Fsvg%2Bxml%3B%2C%253Csvg%2520xmlns%253D%2522http%253A%252F%252Fwww.w3.org%252F2000%252Fsvg%2522%2520width%253D%2522284.242%2522%2520height%253D%2522284.242%2522%253E%253Cg%2520fill-rule%253D%2522evenodd%2522%2520stroke-miterlimit%253D%252210%2522%2520data-paper-data%253D%2522%257B%2526quot%253BisPaintingLayer%2526quot%253B%253Atrue%257D%2522%2520style%253D%2522mix-blend-mode%253Anormal%2522%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.83%2520522.83%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%252396f%2522%2520stroke%253D%2522%25237240d6%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%252229%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.83%2520522.83%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%2523ffa24d%2522%2520stroke%253D%2522%2523fff%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%25229%2522%2520d%253D%2522M188.894%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.48%25209.888a1671.47%25201671.47%25200%25200%25200-4.174%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.329%2520157.508H225.43l-9.636-26.111h-54.08l-9.636%252026.11h-43.432l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%252396f%2522%2520stroke%253D%2522%25237240d6%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%252229%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522%2523ff774d%2522%2520stroke%253D%2522%2523fff%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%25229%2522%2520d%253D%2522M143.696%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888a1671.47%25201671.47%25200%25200%25200-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.827%2520522.827%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.519-56.092%252062.33%2520157.508h-44.312l-9.637-26.111h-54.08l-9.636%252026.11H63.448l62.768-157.507Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253Cpath%2520fill%253D%2522%252396f%2522%2520stroke%253D%2522%25237240d6%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%252229%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.343%2520408.343%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253Cpath%2520fill%253D%2522none%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253Cpath%2520fill%253D%2522%2523ff4c4c%2522%2520stroke%253D%2522%2523fff%2522%2520stroke-linejoin%253D%2522round%2522%2520stroke-width%253D%25229%2522%2520d%253D%2522M94.748%2520119.459c-.706%25202.378-1.43%25204.69-2.172%25206.933-1.05%25203.15-2.21%25206.445-3.479%25209.888-1.27%25203.442-2.66%25207.263-4.175%252011.462l-5.73%252015.528h30.833l-5.73-15.528a522.885%2520522.885%25200%25200%25201-4.065-11.242%2520408.302%2520408.302%25200%25200%25201-3.37-10.108%2520350.767%2520350.767%25200%25200%25201-2.112-6.933zm18.52-56.092%252062.328%2520157.508h-44.311l-9.637-26.111h-54.08l-9.635%252026.11H14.5L77.269%252063.368Z%2522%252F%253E%253C%252Fg%253E%253C%252Fsvg%253E%22%3B%0A%0A%20%20const%20CUSTOM_STATE_KEY%20%3D%20Symbol()%3B%0A%0A%20%20const%20ALIGN_LEFT%20%3D%200%3B%0A%20%20const%20ALIGN_RIGHT%20%3D%201%3B%0A%20%20const%20ALIGN_CENTER%20%3D%202%3B%0A%0A%20%20const%20vm%20%3D%20Scratch.vm%3B%0A%20%20const%20renderer%20%3D%20vm.renderer%3B%0A%20%20const%20gl%20%3D%20renderer.gl%3B%0A%0A%20%20let%20compatibilityMode%20%3D%20true%3B%0A%0A%20%20const%20FONTS%20%3D%20%5B%0A%20%20%20%20%22Sans%20Serif%22%2C%0A%20%20%20%20%22Serif%22%2C%0A%20%20%20%20%22Handwriting%22%2C%0A%20%20%20%20%22Marker%22%2C%0A%20%20%20%20%22Curly%22%2C%0A%20%20%20%20%22Pixel%22%2C%0A%20%20%20%20%22Scratch%22%2C%0A%20%20%5D%3B%0A%0A%20%20const%20DEFAULT_COLOR%20%3D%20%22%23575e75%22%3B%0A%20%20const%20DEFAULT_FONT%20%3D%20%22Handwriting%22%3B%0A%20%20const%20DEFAULT_ALIGN%20%3D%20ALIGN_CENTER%3B%0A%20%20const%20DEFAULT_FONT_SIZE%20%3D%2024%3B%0A%20%20const%20DEFAULT_OUTLINE_WIDTH%20%3D%200%3B%20%2F%2F%200%20%3D%20no%20outline%0A%20%20const%20DEFAULT_OUTLINE_COLOR%20%3D%20%22%23000000%22%3B%0A%0A%20%20const%20DEFAULT_TYPE_DELAY%20%3D%201000%20%2F%2015%3B%0A%0A%20%20const%20RAINBOW_TIME_PER%20%3D%201000%3B%0A%20%20const%20DEFAULT_RAINBOW_DURATION%20%3D%202000%3B%0A%0A%20%20const%20DEFAULT_ZOOM_DURATION%20%3D%20500%3B%0A%0A%20%20const%20DEFAULT_SHAKE_INTENSITY%20%3D%20100%3B%0A%20%20const%20DEFAULT_SHAKE_DURATION%20%3D%20500%3B%0A%0A%20%20let%20globalFrameTime%20%3D%200%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40typedef%20TextState%0A%20%20%20*%20%40property%20%7BTextCostumeSkin%7D%20skin%0A%20%20%20*%2F%0A%0A%20%20%2F%2F%20temporary%0A%20%20if%20(!renderer.exports%20%7C%7C%20!renderer.exports.Skin%20%7C%7C%20!vm.exports)%20%7B%0A%20%20%20%20alert(%22VM%20is%20too%20old%20for%20animated%20text%20extension%22)%3B%0A%20%20%20%20throw%20new%20Error(%22VM%20is%20too%20old%22)%3B%0A%20%20%7D%0A%0A%20%20const%20Skin%20%3D%20renderer.exports.Skin%3B%0A%20%20const%20CanvasMeasurementProvider%20%3D%20renderer.exports.CanvasMeasurementProvider%3B%0A%20%20const%20twgl%20%3D%20renderer.exports.twgl%3B%0A%20%20const%20RenderedTarget%20%3D%20vm.exports.RenderedTarget%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7Bnumber%7D%20c%0A%20%20%20*%20%40returns%20%7Bstring%7D%0A%20%20%20*%2F%0A%20%20const%20formatComponent%20%3D%20(c)%20%3D%3E%20Math.round(c).toString(16).padStart(2%2C%20%220%22)%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7B%5Bnumber%2C%20number%2C%20number%5D%7D%20color%0A%20%20%20*%20%40returns%20%7Bstring%7D%0A%20%20%20*%2F%0A%20%20const%20formatColor%20%3D%20(color)%20%3D%3E%0A%20%20%20%20%60%23%24%7BformatComponent(color%5B0%5D)%7D%24%7BformatComponent(color%5B1%5D)%7D%24%7BformatComponent(%0A%20%20%20%20%20%20color%5B2%5D%0A%20%20%20%20)%7D%60%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7Bnumber%7D%20h%20hue%20from%200-1%0A%20%20%20*%20%40param%20%7Bnumber%7D%20s%20saturation%20from%200-1%0A%20%20%20*%20%40param%20%7Bnumber%7D%20v%20value%20from%200-1%0A%20%20%20*%20%40returns%20%7B%5Bnumber%2C%20number%2C%20number%5D%7D%20RGB%20channels%20from%200-255%0A%20%20%20*%2F%0A%20%20const%20hsvToRGB%20%3D%20(h%2C%20s%2C%20v)%20%3D%3E%20%7B%0A%20%20%20%20%2F%2F%20https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FHSL_and_HSV%0A%20%20%20%20var%20r%2C%20g%2C%20b%3B%0A%20%20%20%20var%20i%20%3D%20Math.floor(h%20*%206)%3B%0A%20%20%20%20var%20f%20%3D%20h%20*%206%20-%20i%3B%0A%20%20%20%20var%20p%20%3D%20v%20*%20(1%20-%20s)%3B%0A%20%20%20%20var%20q%20%3D%20v%20*%20(1%20-%20f%20*%20s)%3B%0A%20%20%20%20var%20t%20%3D%20v%20*%20(1%20-%20(1%20-%20f)%20*%20s)%3B%0A%20%20%20%20switch%20(i%20%25%206)%20%7B%0A%20%20%20%20%20%20case%200%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20v)%2C%20(g%20%3D%20t)%2C%20(b%20%3D%20p)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%201%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20q)%2C%20(g%20%3D%20v)%2C%20(b%20%3D%20p)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%202%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20p)%2C%20(g%20%3D%20v)%2C%20(b%20%3D%20t)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%203%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20p)%2C%20(g%20%3D%20q)%2C%20(b%20%3D%20v)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%204%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20t)%2C%20(g%20%3D%20p)%2C%20(b%20%3D%20v)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%205%3A%0A%20%20%20%20%20%20%20%20(r%20%3D%20v)%2C%20(g%20%3D%20p)%2C%20(b%20%3D%20q)%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%5B(r%20*%20255)%20%7C%200%2C%20(g%20*%20255)%20%7C%200%2C%20(b%20*%20255)%20%7C%200%5D%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7BCanvasGradient%7D%20gradient%0A%20%20%20*%20%40param%20%7Bnumber%7D%20offset%20number%20of%20cycles%20to%20offset%20by%0A%20%20%20*%2F%0A%20%20const%20addRainbowStops%20%3D%20(gradient%2C%20offset)%20%3D%3E%20%7B%0A%20%20%20%20const%20NUMBER_STOPS%20%3D%2020%3B%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20NUMBER_STOPS%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20exactPosition%20%3D%20i%20%2F%20NUMBER_STOPS%3B%0A%20%20%20%20%20%20let%20offsetPosition%20%3D%20(exactPosition%20-%20offset)%20%25%201%3B%0A%20%20%20%20%20%20if%20(offsetPosition%20%3C%200)%20%7B%0A%20%20%20%20%20%20%20%20offsetPosition%20%2B%3D%201%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20rgb%20%3D%20hsvToRGB(offsetPosition%2C%201%2C%201)%3B%0A%20%20%20%20%20%20gradient.addColorStop(exactPosition%2C%20formatColor(rgb))%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20class%20TextCostumeSkin%20extends%20Skin%20%7B%0A%20%20%20%20constructor(id%2C%20drawable)%20%7B%0A%20%20%20%20%20%20super(id%2C%20renderer)%3B%0A%0A%20%20%20%20%20%20%2F**%20%40type%20%7BRenderWebGL.Drawable%7D%20*%2F%0A%20%20%20%20%20%20this.drawable%20%3D%20drawable%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7Bnumber%7D%20*%2F%0A%20%20%20%20%20%20this._previousDrawableXScale%20%3D%20100%3B%0A%0A%20%20%20%20%20%20this.canvas%20%3D%20document.createElement(%22canvas%22)%3B%0A%20%20%20%20%20%20this.canvas.width%20%3D%200%3B%0A%20%20%20%20%20%20this.canvas.height%20%3D%200%3B%0A%20%20%20%20%20%20this.ctx%20%3D%20this.canvas.getContext(%222d%22)%3B%0A%0A%20%20%20%20%20%20this.text%20%3D%20%22%22%3B%0A%20%20%20%20%20%20this.color%20%3D%20DEFAULT_COLOR%3B%0A%20%20%20%20%20%20this.textWidth%20%3D%20vm.runtime.stageWidth%3B%0A%20%20%20%20%20%20this.fontFamily%20%3D%20DEFAULT_FONT%3B%0A%20%20%20%20%20%20this.baseFontSize%20%3D%20DEFAULT_FONT_SIZE%3B%0A%20%20%20%20%20%20this.align%20%3D%20DEFAULT_ALIGN%3B%0A%20%20%20%20%20%20this.outlineWidth%20%3D%20DEFAULT_OUTLINE_WIDTH%3B%0A%20%20%20%20%20%20this.outlineColor%20%3D%20DEFAULT_OUTLINE_COLOR%3B%0A%0A%20%20%20%20%20%20%2F**%20%40type%20%7BArray%3C%7Btext%3A%20string%3B%20width%3A%20number%3B%7D%3E%7D%20*%2F%0A%20%20%20%20%20%20this.lines%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7B%5Bnumber%2C%20number%5D%7D%20*%2F%0A%20%20%20%20%20%20this._size%20%3D%20%5B0%2C%200%5D%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7B%5Bnumber%2C%20number%5D%7D%20*%2F%0A%20%20%20%20%20%20this._rotationCenter%20%3D%20%5B0%2C%200%5D%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Updated%20in%20_updateFontDimensions%0A%20%20%20%20%20%20this.calculatedFontSize%20%3D%200%3B%0A%20%20%20%20%20%20this.lineHeight%20%3D%200%3B%0A%20%20%20%20%20%20this.verticalPadding%20%3D%200%3B%0A%20%20%20%20%20%20this.wrapWidth%20%3D%200%3B%0A%0A%20%20%20%20%20%20this._textDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._renderedAtScale%20%3D%201%3B%0A%20%20%20%20%20%20this._renderTime%20%3D%200%3B%0A%20%20%20%20%20%20this._reflowTime%20%3D%200%3B%0A%0A%20%20%20%20%20%20this.isTyping%20%3D%20false%3B%0A%20%20%20%20%20%20this.typeAnimationInterval%20%3D%20null%3B%0A%20%20%20%20%20%20this.typeDelay%20%3D%20DEFAULT_TYPE_DELAY%3B%0A%0A%20%20%20%20%20%20this.isRainbow%20%3D%20false%3B%0A%20%20%20%20%20%20this.rainbowStartTime%20%3D%200%3B%0A%20%20%20%20%20%20this.rainbowTimeout%20%3D%20null%3B%0A%20%20%20%20%20%20this.rainbowDuration%20%3D%20DEFAULT_RAINBOW_DURATION%3B%0A%0A%20%20%20%20%20%20this.isZooming%20%3D%20false%3B%0A%20%20%20%20%20%20this.zoomStartTime%20%3D%200%3B%0A%20%20%20%20%20%20this.zoomTimeout%20%3D%20null%3B%0A%20%20%20%20%20%20this.zoomDuration%20%3D%20DEFAULT_ZOOM_DURATION%3B%0A%0A%20%20%20%20%20%20this.isShaking%20%3D%20false%3B%0A%20%20%20%20%20%20this.shakeStartTime%20%3D%200%3B%0A%20%20%20%20%20%20this.shakeTimeout%20%3D%20null%3B%0A%20%20%20%20%20%20this.shakeDuration%20%3D%20DEFAULT_SHAKE_DURATION%3B%0A%20%20%20%20%20%20this.shakeIntensity%20%3D%20DEFAULT_SHAKE_INTENSITY%3B%0A%0A%20%20%20%20%20%20%2F**%20%40type%20%7B(()%20%3D%3E%20void)%7Cnull%7D%20*%2F%0A%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20null%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20dispose()%20%7B%0A%20%20%20%20%20%20if%20(this._texture)%20%7B%0A%20%20%20%20%20%20%20%20gl.deleteTexture(this._texture)%3B%0A%20%20%20%20%20%20%20%20this._texture%20%3D%20null%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.canvas%20%3D%20null%3B%0A%20%20%20%20%20%20this.ctx%20%3D%20null%3B%0A%20%20%20%20%20%20super.dispose()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20get%20size()%20%7B%0A%20%20%20%20%20%20if%20(this._needsReflow())%20%7B%0A%20%20%20%20%20%20%20%20this._reflowText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20this._size%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20useNearest()%20%7B%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_needsReflow()%20%7B%0A%20%20%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20this._textDirty%20%7C%7C%0A%20%20%20%20%20%20%20%20(this.isZooming%20%26%26%20this._reflowTime%20!%3D%3D%20globalFrameTime)%20%7C%7C%0A%20%20%20%20%20%20%20%20(this.isShaking%20%26%26%20this._reflowTime%20!%3D%3D%20globalFrameTime)%20%7C%7C%0A%20%20%20%20%20%20%20%20this._previousDrawableXScale%20!%3D%3D%20Math.abs(this.drawable.scale%5B0%5D)%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_updateFontDimensions()%20%7B%0A%20%20%20%20%20%20this.calculatedFontSize%20%3D%20this.baseFontSize%3B%0A%20%20%20%20%20%20if%20(this.isZooming)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20it%20looks%20like%20Scratch's%20animation%20always%20starts%20at%20least%20a%20little%20visible%0A%20%20%20%20%20%20%20%20const%20time%20%3D%20globalFrameTime%20-%20this.zoomStartTime%3B%0A%20%20%20%20%20%20%20%20const%20progress%20%3D%20Math.max(0%2C%20Math.min(1%2C%20time%20%2F%20this.zoomDuration))%3B%0A%20%20%20%20%20%20%20%20this.calculatedFontSize%20*%3D%20progress%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this.lineHeight%20%3D%20(this.baseFontSize%20*%208)%20%2F%207%3B%0A%20%20%20%20%20%20%2F%2F%20Always%20use%20the%20base%20size%20for%20padding.%20This%20makes%20the%20zoom%20animation%20look%20better.%0A%20%20%20%20%20%20this.verticalPadding%20%3D%20this.baseFontSize%20%2F%207%3B%0A%20%20%20%20%20%20%2F%2F%20Only%20use%20horizontal%20scale%20for%20wrap%20width%20for%20compatibility%20with%20stretch%20extension.%0A%20%20%20%20%20%20this.wrapWidth%20%3D%0A%20%20%20%20%20%20%20%20this.textWidth%20%2F%20(Math.abs(this.drawable.scale%5B0%5D)%20%2F%20100)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_getFontStyle()%20%7B%0A%20%20%20%20%20%20return%20%60%24%7Bthis.calculatedFontSize%7Dpx%20%24%7Bthis.fontFamily%7D%2C%20sans-serif%60%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_reflowText()%20%7B%0A%20%20%20%20%20%20this._textDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._reflowTime%20%3D%20globalFrameTime%3B%0A%20%20%20%20%20%20this._previousDrawableXScale%20%3D%20Math.abs(this.drawable.scale%5B0%5D)%3B%0A%0A%20%20%20%20%20%20this._updateFontDimensions()%3B%0A%20%20%20%20%20%20this.ctx.font%20%3D%20this._getFontStyle()%3B%0A%0A%20%20%20%20%20%20%2F%2F%20need%20to%20make%20new%20ones%20each%20time%20to%20avoid%20caching%20incorrectly%20across%20fonts%0A%20%20%20%20%20%20const%20measurementProvider%20%3D%20new%20CanvasMeasurementProvider(this.ctx)%3B%0A%20%20%20%20%20%20%2F**%20%40type%20%7BRenderWebGL.TextWrapper%7D%20*%2F%0A%20%20%20%20%20%20const%20textWrapper%20%3D%20renderer.createTextWrapper(measurementProvider)%3B%0A%0A%20%20%20%20%20%20const%20lines%20%3D%20textWrapper.wrapText(this.wrapWidth%2C%20this.text)%3B%0A%20%20%20%20%20%20this.lines%20%3D%20lines.map((line)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20const%20trimmed%20%3D%20line.trimEnd()%3B%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20trimmed%2C%0A%20%20%20%20%20%20%20%20%20%20width%3A%20measurementProvider.measureText(trimmed)%2C%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20this._size%5B0%5D%20%3D%20this.wrapWidth%20%2B%202%20*%20this.outlineWidth%3B%0A%20%20%20%20%20%20this._size%5B1%5D%20%3D%0A%20%20%20%20%20%20%20%20this.lines.length%20*%20this.lineHeight%20%2B%0A%20%20%20%20%20%20%20%202%20*%20this.verticalPadding%20%2B%0A%20%20%20%20%20%20%20%202%20*%20this.outlineWidth%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Centered%20horizontally%0A%20%20%20%20%20%20this._rotationCenter%5B0%5D%20%3D%20this._size%5B0%5D%20%2F%202%3B%0A%20%20%20%20%20%20%2F%2F%20Vertical%20center%20is%20roughly%20below%20the%20first%20line%20of%20text%0A%20%20%20%20%20%20this._rotationCenter%5B1%5D%20%3D%0A%20%20%20%20%20%20%20%20this.calculatedFontSize%20*%200.9%20%2B%0A%20%20%20%20%20%20%20%20this.verticalPadding%20%2B%0A%20%20%20%20%20%20%20%20this.outlineWidth%3B%0A%0A%20%20%20%20%20%20if%20(this.isShaking)%20%7B%0A%20%20%20%20%20%20%20%20const%20padding%20%3D%20Math.max(0%2C%20this.shakeIntensity%20%2F%2020)%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20offsets%20should%20be%20in%20range%20%5B-padding%2C%20%2Bpadding%5D%0A%20%20%20%20%20%20%20%20this._rotationCenter%5B0%5D%20%2B%3D%202%20*%20Math.random()%20*%20padding%20-%20padding%3B%0A%20%20%20%20%20%20%20%20this._rotationCenter%5B1%5D%20%2B%3D%202%20*%20Math.random()%20*%20padding%20-%20padding%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20_renderAtScale(requestedScale)%20%7B%0A%20%20%20%20%20%20this._renderedAtScale%20%3D%20requestedScale%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20false%3B%0A%20%20%20%20%20%20this._renderTime%20%3D%20globalFrameTime%3B%0A%0A%20%20%20%20%20%20const%20scratchWidth%20%3D%20this._size%5B0%5D%3B%0A%20%20%20%20%20%20const%20scratchHeight%20%3D%20this._size%5B1%5D%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Renderer's%20requested%20scale%20is%20accounted%20for%20at%20this%20point.%20Do%20not%20touch%20%60requestedScale%60%0A%20%20%20%20%20%20%2F%2F%20ever%20after%20this%20point.%0A%20%20%20%20%20%20this.canvas.width%20%3D%20Math.ceil(scratchWidth%20*%20requestedScale)%3B%0A%20%20%20%20%20%20this.canvas.height%20%3D%20Math.ceil(scratchHeight%20*%20requestedScale)%3B%0A%20%20%20%20%20%20this.ctx.scale(requestedScale%2C%20requestedScale)%3B%0A%0A%20%20%20%20%20%20this.ctx.translate(this.outlineWidth%2C%20this.outlineWidth)%3B%0A%0A%20%20%20%20%20%20const%20rainbowOffset%20%3D%20this.isRainbow%0A%20%20%20%20%20%20%20%20%3F%20(globalFrameTime%20-%20this.rainbowStartTime)%20%2F%20RAINBOW_TIME_PER%0A%20%20%20%20%20%20%20%20%3A%200%3B%0A%20%20%20%20%20%20this.ctx.fillStyle%20%3D%20this.color%3B%0A%20%20%20%20%20%20this.ctx.font%20%3D%20this._getFontStyle()%3B%0A%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20this.lines.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20const%20line%20%3D%20this.lines%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20const%20text%20%3D%20line.text%3B%0A%20%20%20%20%20%20%20%20const%20lineWidth%20%3D%20line.width%3B%0A%0A%20%20%20%20%20%20%20%20let%20xOffset%3B%0A%20%20%20%20%20%20%20%20const%20yOffset%20%3D%0A%20%20%20%20%20%20%20%20%20%20this.verticalPadding%20%2B%20i%20*%20this.lineHeight%20%2B%20this.baseFontSize%3B%0A%20%20%20%20%20%20%20%20if%20(this.align%20%3D%3D%3D%20ALIGN_LEFT)%20%7B%0A%20%20%20%20%20%20%20%20%20%20xOffset%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20(this.align%20%3D%3D%3D%20ALIGN_CENTER)%20%7B%0A%20%20%20%20%20%20%20%20%20%20xOffset%20%3D%20(this.wrapWidth%20-%20lineWidth)%20%2F%202%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20xOffset%20%3D%20this.wrapWidth%20-%20lineWidth%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(this.isRainbow)%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20gradient%20%3D%20this.ctx.createLinearGradient(%0A%20%20%20%20%20%20%20%20%20%20%20%20xOffset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20xOffset%20%2B%20lineWidth%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20addRainbowStops(gradient%2C%20rainbowOffset)%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.fillStyle%20%3D%20gradient%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(this.outlineWidth%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.lineWidth%20%3D%20this.outlineWidth%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.strokeStyle%20%3D%20this.outlineColor%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.lineCap%20%3D%20%22round%22%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.lineJoin%20%3D%20%22round%22%3B%0A%20%20%20%20%20%20%20%20%20%20this.ctx.strokeText(text%2C%20xOffset%2C%20yOffset)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20we're%20still%20a%20few%20pixels%20off%20of%20Scratch%20Lab%0A%20%20%20%20%20%20%20%20this.ctx.fillText(text%2C%20xOffset%2C%20yOffset)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(!this._texture)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20%40ts-expect-error%20-%20twgl%20not%20typed%20yet%0A%20%20%20%20%20%20%20%20this._texture%20%3D%20twgl.createTexture(gl%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20auto%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20wrap%3A%20gl.CLAMP_TO_EDGE%2C%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20this._setTexture(this.canvas)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_invalidateTexture()%20%7B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._renderTime%20%3D%200%3B%0A%20%20%20%20%20%20this.emitWasAltered()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_invalidateText()%20%7B%0A%20%20%20%20%20%20this._textDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._textureDirty%20%3D%20true%3B%0A%20%20%20%20%20%20this._reflowTime%20%3D%200%3B%0A%20%20%20%20%20%20this.emitWasAltered()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setText(text)%20%7B%0A%20%20%20%20%20%20if%20(text%20!%3D%3D%20this.text)%20%7B%0A%20%20%20%20%20%20%20%20this.text%20%3D%20text%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setColor(color)%20%7B%0A%20%20%20%20%20%20if%20(color%20!%3D%3D%20this.color)%20%7B%0A%20%20%20%20%20%20%20%20this.color%20%3D%20color%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineColor(color)%20%7B%0A%20%20%20%20%20%20if%20(color%20!%3D%3D%20this.color)%20%7B%0A%20%20%20%20%20%20%20%20this.outlineColor%20%3D%20color%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineWidth(width)%20%7B%0A%20%20%20%20%20%20this.outlineWidth%20%3D%20width%3B%0A%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setAlign(align)%20%7B%0A%20%20%20%20%20%20if%20(align%20!%3D%3D%20this.align)%20%7B%0A%20%20%20%20%20%20%20%20this.align%20%3D%20align%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setWidth(width)%20%7B%0A%20%20%20%20%20%20if%20(width%20!%3D%3D%20this.textWidth)%20%7B%0A%20%20%20%20%20%20%20%20this.textWidth%20%3D%20width%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setFontFamily(font)%20%7B%0A%20%20%20%20%20%20if%20(font%20!%3D%3D%20this.fontFamily)%20%7B%0A%20%20%20%20%20%20%20%20this.fontFamily%20%3D%20font%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20getFontFamily()%20%7B%0A%20%20%20%20%20%20return%20this.fontFamily%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getColor()%20%7B%0A%20%20%20%20%20%20return%20this.color%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getWidth()%20%7B%0A%20%20%20%20%20%20return%20this.textWidth%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getOutlineColor()%20%7B%0A%20%20%20%20%20%20return%20this.outlineColor%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getOutlineWidth()%20%7B%0A%20%20%20%20%20%20return%20this.outlineWidth%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getAlign()%20%7B%0A%20%20%20%20%20%20return%20this.align%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_oneAnimationAtATime(newCallback)%20%7B%0A%20%20%20%20%20%20this.cancelAnimation()%3B%0A%20%20%20%20%20%20return%20new%20Promise((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20newCallback(this.resolveOngoingAnimation)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startTypeAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isTyping%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20const%20originalText%20%3D%20this.text%3B%0A%20%20%20%20%20%20%20%20let%20i%20%3D%201%3B%0A%20%20%20%20%20%20%20%20const%20update%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.setText(originalText.substring(0%2C%20i))%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20update()%3B%0A%0A%20%20%20%20%20%20%20%20this.typeAnimationInterval%20%3D%20setInterval(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20i%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20update()%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(i%20%3E%3D%20originalText.length)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20clearInterval(this.typeAnimationInterval)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.isTyping%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%20this.typeDelay)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setTypeDelay(delay)%20%7B%0A%20%20%20%20%20%20this.typeDelay%20%3D%20delay%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startRainbowAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isRainbow%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this.rainbowStartTime%20%3D%20Date.now()%3B%0A%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%20%20this.rainbowTimeout%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.isRainbow%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20this._invalidateTexture()%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20this.rainbowDuration)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setRainbowDuration(duration)%20%7B%0A%20%20%20%20%20%20this.rainbowDuration%20%3D%20duration%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startZoomAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isZooming%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this.zoomStartTime%20%3D%20Date.now()%3B%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20this.zoomTimeout%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.isZooming%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20this.zoomDuration)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setZoomDuration(duration)%20%7B%0A%20%20%20%20%20%20this.zoomDuration%20%3D%20duration%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startShakeAnimation()%20%7B%0A%20%20%20%20%20%20return%20this._oneAnimationAtATime((resolve)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.isShaking%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20this.shakeStartTime%20%3D%20Date.now()%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20_invalidateText()%20is%20not%20smart%20enough%20to%20realize%20that%20we%20don't%20need%20to%20actually%0A%20%20%20%20%20%20%20%20%2F%2F%20do%20a%20full%20reflow%2C%20just%20update%20rotation%20center...%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20this.shakeTimeout%20%3D%20setTimeout(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20this.isShaking%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20resolve()%3B%0A%20%20%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20this.shakeDuration)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setShakeDuration(duration)%20%7B%0A%20%20%20%20%20%20this.shakeDuration%20%3D%20duration%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setShakeIntensity(intensity)%20%7B%0A%20%20%20%20%20%20this.shakeIntensity%20%3D%20intensity%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20cancelAnimation()%20%7B%0A%20%20%20%20%20%20if%20(this.resolveOngoingAnimation)%20%7B%0A%20%20%20%20%20%20%20%20this.resolveOngoingAnimation()%3B%0A%20%20%20%20%20%20%20%20this.resolveOngoingAnimation%20%3D%20null%3B%0A%0A%20%20%20%20%20%20%20%20this.isTyping%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearInterval(this.typeAnimationInterval)%3B%0A%0A%20%20%20%20%20%20%20%20this.isRainbow%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearTimeout(this.rainbowTimeout)%3B%0A%0A%20%20%20%20%20%20%20%20this.isZooming%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearTimeout(this.zoomTimeout)%3B%0A%0A%20%20%20%20%20%20%20%20this.isShaking%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20clearTimeout(this.shakeTimeout)%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20sometimes%20we%20only%20need%20to%20invalidate%20the%20texture%20at%20this%20point%0A%20%20%20%20%20%20%20%20this._invalidateText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20updateSilhouette(scale)%20%7B%0A%20%20%20%20%20%20this.getTexture(scale)%3B%0A%20%20%20%20%20%20this._silhouette.unlazy()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Part%20of%20Skin%20API%0A%20%20%20%20getTexture(scale)%20%7B%0A%20%20%20%20%20%20const%20MAX_SCALE%20%3D%2010%3B%0A%20%20%20%20%20%20const%20upperScale%20%3D%20scale%0A%20%20%20%20%20%20%20%20%3F%20Math.max(Math.abs(scale%5B0%5D)%2C%20Math.abs(scale%5B1%5D))%0A%20%20%20%20%20%20%20%20%3A%20100%3B%0A%20%20%20%20%20%20const%20calculatedScale%20%3D%20Math.min(MAX_SCALE%2C%20upperScale%20%2F%20100)%3B%0A%0A%20%20%20%20%20%20if%20(this._needsReflow())%20%7B%0A%20%20%20%20%20%20%20%20this._reflowText()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20this._textureDirty%20%7C%7C%0A%20%20%20%20%20%20%20%20(this.isRainbow%20%26%26%20this._renderTime%20!%3D%3D%20globalFrameTime)%20%7C%7C%0A%20%20%20%20%20%20%20%20calculatedScale%20!%3D%3D%20this._renderedAtScale%0A%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20this._renderAtScale(calculatedScale)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20return%20this._texture%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F**%0A%20%20%20*%20Note%20that%20the%20returned%20skin%20is%20only%20usable%20by%20the%20given%20target.%20Things%20will%20break%20if%20another%0A%20%20%20*%20target%20tries%20to%20use%20it.%0A%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20*%20%40returns%20%7BTextCostumeSkin%7D%0A%20%20%20*%2F%0A%20%20const%20createTextCostumeSkin%20%3D%20(target)%20%3D%3E%20%7B%0A%20%20%20%20const%20drawable%20%3D%20renderer._allDrawables%5Btarget.drawableID%5D%3B%0A%20%20%20%20const%20id%20%3D%20renderer._nextSkinId%2B%2B%3B%0A%20%20%20%20const%20skin%20%3D%20new%20TextCostumeSkin(id%2C%20drawable)%3B%0A%20%20%20%20renderer._allSkins%5Bid%5D%20%3D%20skin%3B%0A%20%20%20%20return%20skin%3B%0A%20%20%7D%3B%0A%0A%20%20vm.runtime.on(%22BEFORE_EXECUTE%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20globalFrameTime%20%3D%20Date.now()%3B%0A%0A%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%3C%20renderer._allSkins.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allSkins%5Bi%5D%3B%0A%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20skin%20instanceof%20TextCostumeSkin%20%26%26%0A%20%20%20%20%20%20%20%20(skin.isRainbow%20%7C%7C%20skin.isZooming%20%7C%7C%20skin.isShaking)%0A%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20skin.emitWasAltered()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D)%3B%0A%0A%20%20class%20AnimatedText%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20vm.runtime.on(%22PROJECT_START%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this._hideAllText()%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20vm.runtime.on(%22PROJECT_STOP_ALL%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this._hideAllText()%3B%0A%20%20%20%20%20%20%7D)%3B%0A%0A%20%20%20%20%20%20%2F%2F%20targetWasCreated%20does%20not%20work%20because%20it%20runs%20before%20the%20Drawable%20is%20set%20up%0A%20%20%20%20%20%20const%20extension%20%3D%20this%3B%0A%20%20%20%20%20%20const%20originalMakeClone%20%3D%20RenderedTarget.prototype.makeClone%3B%0A%20%20%20%20%20%20RenderedTarget.prototype.makeClone%20%3D%20function%20()%20%7B%0A%20%20%20%20%20%20%20%20const%20newClone%20%3D%20originalMakeClone.call(this)%3B%0A%20%20%20%20%20%20%20%20if%20(extension._hasState(this))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20creates%20much%20unneeded%20state%0A%20%20%20%20%20%20%20%20%20%20const%20originalSkin%20%3D%20extension._getState(this).skin%3B%0A%20%20%20%20%20%20%20%20%20%20const%20newSkin%20%3D%20extension._getState(newClone).skin%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setAlign(originalSkin.align)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setColor(originalSkin.color)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setFontFamily(originalSkin.fontFamily)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setWidth(originalSkin.textWidth)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setText(originalSkin.text)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setRainbowDuration(originalSkin.rainbowDuration)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setZoomDuration(originalSkin.zoomDuration)%3B%0A%20%20%20%20%20%20%20%20%20%20newSkin.setTypeDelay(originalSkin.typeDelay)%3B%0A%20%20%20%20%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20renderer._allDrawables%5Bthis.drawableID%5D.skin%20instanceof%0A%20%20%20%20%20%20%20%20%20%20%20%20TextCostumeSkin%0A%20%20%20%20%20%20%20%20%20%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20renderer.updateDrawableSkinId(newClone.drawableID%2C%20newSkin.id)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20newClone%3B%0A%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%20%20vm.runtime.on(%22targetWasRemoved%22%2C%20(target)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._hasState(target))%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20state%20%3D%20this._getState(target)%3B%0A%20%20%20%20%20%20%20%20%20%20renderer.destroySkin(state.skin.id)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22text%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Animated%20Text%22)%2C%0A%20%20%20%20%20%20%20%20color1%3A%20%22%239966FF%22%2C%0A%20%20%20%20%20%20%20%20blockIconURI%3A%20blockIconURI%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22show%20text%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Welcome%20to%20my%20project!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22animateText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%5BANIMATE%5D%20text%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22animate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Here%20we%20go!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22animateTextInput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22animateText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%5BANIMATE%5D%20text%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Here%20we%20go!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22clearText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22show%20sprite%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setFont%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20font%20to%20%5BFONT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FONT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22font%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setFontInput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22setFont%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20font%20to%20%5BFONT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FONT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twFont%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setColor%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20text%20color%20to%20%5BCOLOR%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20COLOR%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.COLOR%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22200%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ALIGN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22align%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setWidthInput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22setWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20width%20to%20%5BWIDTH%5D%20aligned%20%5BALIGN%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22200%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ALIGN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAlign%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Contributors%3A%0A%20%20%20%20%20%20%20%20%20%20%20*%20-%20LilyMakesThings%0A%20%20%20%20%20%20%20%20%20%20%20*%2F%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3A%20%22disableCompatibilityMode%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BUTTON%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22Enable%20Non-Scratch%20Lab%20Features%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20!compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.LABEL%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22Incompatible%20with%20Scratch%20Lab%3A%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setOutlineWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20outline%20width%20to%20%5BWIDTH%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%223%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setOutlineColor%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20outline%20color%20to%20%5BCOLOR%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20COLOR%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.COLOR%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22addLine%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22add%20line%20%5BTEXT%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22Hello!%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getLines%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%23%20of%20lines%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getLinesV2%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22%23%20of%20lines%20%5BWITH_WORD_WRAP%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%5BWITH_WORD_WRAP%5D%20is%20a%20menu%20with%20choices%20'with%20word%20wrap'%20and%20'without%20word%20wrap'%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WITH_WORD_WRAP%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twWordWrap%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setAlignment%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22align%20text%20to%20%5BALIGN%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ALIGN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAlign%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20why%20is%20the%20other%20block%20called%20%22setWidth%22%20%3A(%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setWidthValue%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20width%20to%20%5BWIDTH%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WIDTH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22resetWidth%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22reset%20text%20width%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22startAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22start%20%5BANIMATE%5D%20animation%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22animateUntilDone%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22animate%20%5BANIMATE%5D%20until%20done%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimate%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isAnimating%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22is%20animating%3F%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20%5BANIMATE%5D%20duration%20to%20%5BNUM%5D%20seconds%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%203%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22resetAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22reset%20%5BANIMATE%5D%20duration%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22%5BANIMATE%5D%20duration%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ANIMATE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22twAnimateDuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setShakeIntensity%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20shake%20intensity%20to%20%5BNUM%5D%25%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20100%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setTypeDelay%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20typing%20delay%20to%20%5BNUM%5D%20seconds%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%200.1%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22resetTypeDelay%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22reset%20typing%20delay%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getTypeDelay%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22typing%20delay%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22textActive%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22is%20showing%20text%3F%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getDisplayedText%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22displayed%20text%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getTextAttribute%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22text%20%5BATTRIBUTE%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ATTRIBUTE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22attribute%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20hideFromPalette%3A%20compatibilityMode%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20extensions%3A%20%5B%22colours_looks%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20These%20all%20need%20acceptReporters%3A%20false%20for%20parity%20with%20the%20Scratch%20Labs%20version.%0A%20%20%20%20%20%20%20%20%20%20animate%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22type%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22type%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22rainbow%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22zoom%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22zoom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20font%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%22getFonts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20align%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22left%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22center%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22center%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22right%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22right%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20attribute%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22font%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22color%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22width%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22outline%20color%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22outline%20width%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22alignment%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20TurboWarp%20menus%20(acceptReporters%3A%20true)%0A%20%20%20%20%20%20%20%20%20%20twAnimate%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22type%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22type%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22rainbow%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22zoom%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22zoom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22shake%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twAnimateDuration%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22rainbow%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22rainbow%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22zoom%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22zoom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22shake%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twAlign%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22left%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22left%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22center%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22center%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22right%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22right%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twFont%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%22getFonts%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20twWordWrap%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22with%20word%20wrap%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22with%20word%20wrap%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22without%20word%20wrap%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%22without%20word%20wrap%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getFonts()%20%7B%0A%20%20%20%20%20%20const%20customFonts%20%3D%20this._getFontsMap()%3B%0A%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20...FONTS%2C%0A%20%20%20%20%20%20%20%20...customFonts%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22random%20font%22)%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20%22Random%22%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_getFontsMap()%20%7B%0A%20%20%20%20%20%20return%20Scratch.vm.runtime.fontManager%0A%20%20%20%20%20%20%20%20%3F%20Scratch.vm.runtime.fontManager.getFonts().map((i)%20%3D%3E%20(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20i.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20i.family%2C%0A%20%20%20%20%20%20%20%20%20%20%7D))%0A%20%20%20%20%20%20%20%20%3A%20%5B%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40returns%20%7BTextState%7D%0A%20%20%20%20%20*%2F%0A%20%20%20%20_getState(target)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20target%5BCUSTOM_STATE_KEY%5D%3B%0A%20%20%20%20%20%20if%20(!state)%20%7B%0A%20%20%20%20%20%20%20%20%2F**%20%40type%20%7BTextState%7D%20*%2F%0A%20%20%20%20%20%20%20%20const%20newState%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20skin%3A%20createTextCostumeSkin(target)%2C%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20target%5BCUSTOM_STATE_KEY%5D%20%3D%20newState%3B%0A%20%20%20%20%20%20%20%20return%20newState%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20state%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40returns%20%7Bboolean%7D%0A%20%20%20%20%20*%2F%0A%20%20%20%20_hasState(target)%20%7B%0A%20%20%20%20%20%20return%20!!target%5BCUSTOM_STATE_KEY%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_hideAllText()%20%7B%0A%20%20%20%20%20%20for%20(const%20target%20of%20vm.runtime.targets)%20%7B%0A%20%20%20%20%20%20%20%20if%20(this._hasState(target))%20%7B%0A%20%20%20%20%20%20%20%20%20%20this._hideText(target%2C%20this._getState(target))%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTextState%7D%20state%0A%20%20%20%20%20*%2F%0A%20%20%20%20_renderText(target%2C%20state)%20%7B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%20%20%20%20%20%20renderer.updateDrawableSkinId(target.drawableID%2C%20state.skin.id)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7BVM.Target%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTextState%7D%20state%0A%20%20%20%20%20*%2F%0A%20%20%20%20_hideText(target%2C%20state)%20%7B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%20%20%20%20%20%20target.setCostume(target.currentCostume)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setText(%7B%20TEXT%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20this._renderText(util.target%2C%20state)%3B%0A%20%20%20%20%20%20state.skin.setText(Scratch.Cast.toString(TEXT))%3B%0A%20%20%20%20%20%20%2F%2F%20Scratch%20forces%201%20frame%20delay%20by%20returning%20promise.%20I%20think%20that's%20silly.%0A%20%20%20%20%20%20util.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20animateText(%7B%20ANIMATE%2C%20TEXT%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20this._renderText(util.target%2C%20state)%3B%0A%0A%20%20%20%20%20%20state.skin.setText(Scratch.Cast.toString(TEXT))%3B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%0A%20%20%20%20%20%20if%20(ANIMATE%20%3D%3D%3D%20%22type%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startTypeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ANIMATE%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startRainbowAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ANIMATE%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startZoomAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ANIMATE%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startShakeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20does%20nothing%20here%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20clearText(args%2C%20util)%20%7B%0A%20%20%20%20%20%20if%20(this._hasState(util.target))%20%7B%0A%20%20%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20%20%20this._hideText(util.target%2C%20state)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%2F%2F%20Scratch%20forces%201%20frame%20delay%20by%20returning%20promise.%20I%20think%20that's%20silly.%0A%20%20%20%20%20%20util.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setFont(%7B%20FONT%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20font%20%3D%20Scratch.Cast.toString(FONT)%3B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%0A%20%20%20%20%20%20if%20(font%20%3D%3D%3D%20%22Random%22)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Random%20font%20always%20switches%20to%20a%20new%20font%2C%20never%20the%20same%20one%0A%20%20%20%20%20%20%20%20const%20possibleFonts%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%20%20...FONTS%2C%0A%20%20%20%20%20%20%20%20%20%20...this._getFontsMap().map((i)%20%3D%3E%20i.value)%2C%0A%20%20%20%20%20%20%20%20%5D.filter((i)%20%3D%3E%20i%20!%3D%3D%20state.skin.fontFamily)%3B%0A%20%20%20%20%20%20%20%20state.skin.setFontFamily(%0A%20%20%20%20%20%20%20%20%20%20possibleFonts%5BMath.floor(Math.random()%20*%20possibleFonts.length)%5D%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setFontFamily(font)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setColor(%7B%20COLOR%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setColor(Scratch.Cast.toString(COLOR))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setWidth(%7B%20WIDTH%2C%20ALIGN%20%7D%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%0A%20%20%20%20%20%20if%20(ALIGN%20%3D%3D%3D%20%22center%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_CENTER)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(ALIGN%20%3D%3D%3D%20%22right%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_RIGHT)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20treats%20unknown%20values%20as%20left%20alignment.%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_LEFT)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20state.skin.setWidth(Scratch.Cast.toNumber(WIDTH))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%20Extra%20blocks%2C%20not%20compatible%20with%20Scratch%3A%0A%20%20%20%20%20*%2F%0A%0A%20%20%20%20disableCompatibilityMode()%20%7B%0A%20%20%20%20%20%20const%20popup%20%3D%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22disableCompatibilityMode%22%2C%0A%20%20%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20%20%20%22This%20will%20enable%20new%20blocks%20and%20features%20that%20WILL%20NOT%20WORK%20in%20the%20official%20Scratch%20Lab.%5Cn%5CnDo%20you%20wish%20to%20continue%3F%22%2C%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20if%20(confirm(popup))%20%7B%0A%20%20%20%20%20%20%20%20compatibilityMode%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20Scratch.vm.extensionManager.refreshBlocks()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineWidth(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20width%20%3D%20Scratch.Cast.toNumber(args.WIDTH)%3B%0A%0A%20%20%20%20%20%20state.skin.setOutlineWidth(width)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setOutlineColor(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20color%20%3D%20Scratch.Cast.toString(args.COLOR)%3B%0A%0A%20%20%20%20%20%20state.skin.setOutlineColor(color)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20addLine(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20this._renderText(util.target%2C%20state)%3B%0A%0A%20%20%20%20%20%20const%20originalText%20%3D%20state.skin.text%3B%0A%20%20%20%20%20%20const%20addingText%20%3D%20Scratch.Cast.toString(args.TEXT)%3B%0A%20%20%20%20%20%20state.skin.setText(%0A%20%20%20%20%20%20%20%20originalText%20%3F%20%60%24%7BoriginalText%7D%5Cn%24%7BaddingText%7D%60%20%3A%20addingText%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20util.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getLines(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%200%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20text%20%3D%20state.skin.text%3B%0A%20%20%20%20%20%20return%20text.split(%22%5Cn%22).length%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getLinesV2(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%200%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20if%20(Scratch.Cast.toString(args.WITH_WORD_WRAP)%20%3D%3D%3D%20%22with%20word%20wrap%22)%20%7B%0A%20%20%20%20%20%20%20%20if%20(state.skin._needsReflow())%20%7B%0A%20%20%20%20%20%20%20%20%20%20state.skin._reflowText()%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20state.skin.lines.length%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20state.skin.text.split(%22%5Cn%22).length%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setAlignment(args%2C%20util)%20%7B%0A%20%20%20%20%20%20%2F%2F%20see%20setWidth%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20if%20(args.ALIGN%20%3D%3D%3D%20%22center%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_CENTER)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ALIGN%20%3D%3D%3D%20%22right%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_RIGHT)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setAlign(ALIGN_LEFT)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setWidthValue(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setWidth(Scratch.Cast.toNumber(args.WIDTH))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20resetWidth(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setWidth(vm.runtime.stageWidth)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20startAnimate(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Don't%20return%20the%20promise%0A%20%20%20%20%20%20if%20(args.ANIMATE%20%3D%3D%20%22type%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startTypeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startRainbowAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startZoomAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.startShakeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20does%20nothing%20here%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20animateUntilDone(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20if%20(!(skin%20instanceof%20TextCostumeSkin))%20return%3B%0A%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.cancelAnimation()%3B%0A%0A%20%20%20%20%20%20if%20(args.ANIMATE%20%3D%3D%20%22type%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startTypeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startRainbowAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startZoomAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(args.ANIMATE%20%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.startShakeAnimation()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20Scratch%20does%20nothing%20here%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20isAnimating(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20skin%20%3D%20this._getState(util.target).skin%3B%0A%20%20%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20skin.isTyping%20%7C%7C%20skin.isRainbow%20%7C%7C%20skin.isZooming%20%7C%7C%20skin.isShaking%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setAnimateDuration(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20animation%20%3D%20args.ANIMATE%3B%0A%20%20%20%20%20%20const%20milliseconds%20%3D%20Scratch.Cast.toNumber(args.NUM)%20*%201000%3B%0A%20%20%20%20%20%20if%20(animation%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setRainbowDuration(milliseconds)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setZoomDuration(milliseconds)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setShakeDuration(milliseconds)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20resetAnimateDuration(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20animation%20%3D%20args.ANIMATE%3B%0A%20%20%20%20%20%20if%20(animation%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setRainbowDuration(DEFAULT_RAINBOW_DURATION)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setZoomDuration(DEFAULT_ZOOM_DURATION)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20state.skin.setShakeDuration(DEFAULT_SHAKE_DURATION)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20getAnimateDuration(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20animation%20%3D%20args.ANIMATE%3B%0A%20%20%20%20%20%20if%20(animation%20%3D%3D%3D%20%22rainbow%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.rainbowDuration%20%2F%201000%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22zoom%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.zoomDuration%20%2F%201000%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(animation%20%3D%3D%3D%20%22shake%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.shakeDuration%20%2F%201000%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20should%20never%20happen%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setShakeIntensity(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setShakeIntensity(Scratch.Cast.toNumber(args.NUM))%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setTypeDelay(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setTypeDelay(Scratch.Cast.toNumber(args.NUM)%20*%201000)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20resetTypeDelay(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20state.skin.setTypeDelay(DEFAULT_TYPE_DELAY)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getTypeDelay(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20%2F%2F%20TODO%3A%20Should%20we%20round%20this%3F%0A%20%20%20%20%20%20return%20state.skin.typeDelay%20%2F%201000%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20textActive(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20drawableID%20%3D%20util.target.drawableID%3B%0A%20%20%20%20%20%20const%20skin%20%3D%20renderer._allDrawables%5BdrawableID%5D.skin%3B%0A%20%20%20%20%20%20return%20skin%20instanceof%20TextCostumeSkin%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getDisplayedText(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20return%20state.skin.text%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getTextAttribute(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20state%20%3D%20this._getState(util.target)%3B%0A%20%20%20%20%20%20const%20attrib%20%3D%20args.ATTRIBUTE%3B%0A%20%20%20%20%20%20if%20(attrib%20%3D%3D%3D%20%22font%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getFontFamily()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22color%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getColor()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22width%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getWidth()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22outline%20color%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getOutlineColor()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22outline%20width%22)%20%7B%0A%20%20%20%20%20%20%20%20return%20state.skin.getOutlineWidth()%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(attrib%20%3D%3D%3D%20%22alignment%22)%20%7B%0A%20%20%20%20%20%20%20%20switch%20(state.skin.getAlign())%20%7B%0A%20%20%20%20%20%20%20%20%20%20case%20ALIGN_LEFT%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22left%22%3B%0A%20%20%20%20%20%20%20%20%20%20case%20ALIGN_RIGHT%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22right%22%3B%0A%20%20%20%20%20%20%20%20%20%20case%20ALIGN_CENTER%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22center%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20should%20never%20happen%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20AnimatedText())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Utilities%0A%2F%2F%20ID%3A%20utilities%0A%2F%2F%20Description%3A%20A%20bunch%20of%20interesting%20blocks.%0A%2F%2F%20Original%3A%20Sheep_maker%20%3Chttps%3A%2F%2Fscratch.mit.edu%2Fusers%2FSheep_maker%2F%3E%0A%2F%2F%20License%3A%20MIT%20AND%20MPL-2.0%0A%0A%2F*!%0A%20*%20This%20is%20based%20on%3A%0A%20*%20https%3A%2F%2Fgithub.com%2FSheepTester%2Fsheeptester.github.io%2Fblob%2Fmaster%2Fjavascripts%2Futilities.js%0A%20*%0A%20*%20Original%20license%3A%0A%20*%20MIT%20License%0A%20*%0A%20*%20Copyright%20(c)%202021%20Sean%0A%20*%0A%20*%20Permission%20is%20hereby%20granted%2C%20free%20of%20charge%2C%20to%20any%20person%20obtaining%20a%20copy%0A%20*%20of%20this%20software%20and%20associated%20documentation%20files%20(the%20%22Software%22)%2C%20to%20deal%0A%20*%20in%20the%20Software%20without%20restriction%2C%20including%20without%20limitation%20the%20rights%0A%20*%20to%20use%2C%20copy%2C%20modify%2C%20merge%2C%20publish%2C%20distribute%2C%20sublicense%2C%20and%2For%20sell%0A%20*%20copies%20of%20the%20Software%2C%20and%20to%20permit%20persons%20to%20whom%20the%20Software%20is%0A%20*%20furnished%20to%20do%20so%2C%20subject%20to%20the%20following%20conditions%3A%0A%20*%0A%20*%20The%20above%20copyright%20notice%20and%20this%20permission%20notice%20shall%20be%20included%20in%20all%0A%20*%20copies%20or%20substantial%20portions%20of%20the%20Software.%0A%20*%0A%20*%20THE%20SOFTWARE%20IS%20PROVIDED%20%22AS%20IS%22%2C%20WITHOUT%20WARRANTY%20OF%20ANY%20KIND%2C%20EXPRESS%20OR%0A%20*%20IMPLIED%2C%20INCLUDING%20BUT%20NOT%20LIMITED%20TO%20THE%20WARRANTIES%20OF%20MERCHANTABILITY%2C%0A%20*%20FITNESS%20FOR%20A%20PARTICULAR%20PURPOSE%20AND%20NONINFRINGEMENT.%20IN%20NO%20EVENT%20SHALL%20THE%0A%20*%20AUTHORS%20OR%20COPYRIGHT%20HOLDERS%20BE%20LIABLE%20FOR%20ANY%20CLAIM%2C%20DAMAGES%20OR%20OTHER%0A%20*%20LIABILITY%2C%20WHETHER%20IN%20AN%20ACTION%20OF%20CONTRACT%2C%20TORT%20OR%20OTHERWISE%2C%20ARISING%20FROM%2C%0A%20*%20OUT%20OF%20OR%20IN%20CONNECTION%20WITH%20THE%20SOFTWARE%20OR%20THE%20USE%20OR%20OTHER%20DEALINGS%20IN%20THE%0A%20*%20SOFTWARE.%0A%20*%2F%0A%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Utilities%22%3A%22Verschiedene%20Bl%C3%B6cke%22%7D%2C%22fi%22%3A%7B%22_Utilities%22%3A%22Ty%C3%B6kalut%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BPATH%5D%20JSON-koodissa%20%5BJSON_STRING%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22rajoita%20%5BINPUT%5D%20v%C3%A4lille%20%5BMIN%5D%20%E2%80%93%20%5BMAX%5D%22%2C%22_content%20from%20%5BURL%5D%22%3A%22sis%C3%A4lt%C3%B6%20URL-osoitteesta%20%5BURL%5D%22%2C%22_current%20millisecond%22%3A%22nykyinen%20millisekunti%22%2C%22_false%22%3A%22ep%C3%A4tosi%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22jos%20%5BA%5D%2C%20niin%20%5BB%5D%20tai%20muuten%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22onko%20%5BA%5D%20tarkalleen%20%5BB%5D%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22merkkijonon%20%5BSTRING%5D%20merkit%20%5BSTART%5D%20%E2%80%93%20%5BEND%5D%22%2C%22_newline%20character%22%3A%22uusi%20rivi%22%2C%22_pi%22%3A%22pii%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22korvaa%20%5BREGEX%5D%20merkkijonolla%20%5BNEWSTRING%5D%20merkkijonossa%20%5BSTRING%5D%22%2C%22_true%22%3A%22tosi%22%7D%2C%22it%22%3A%7B%22_Utilities%22%3A%22Utilit%C3%A0%22%2C%22_false%22%3A%22falso%22%2C%22_newline%20character%22%3A%22carattere%20accapo%22%2C%22_pi%22%3A%22pi%20greco%22%2C%22_true%22%3A%22vero%22%7D%2C%22ja%22%3A%7B%22_Utilities%22%3A%22%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BJSON_STRING%5D%E3%81%AE%5BPATH%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%5BINPUT%5D%E3%82%92%5BMIN%5D%E3%81%8B%E3%82%89%5BMAX%5D%E3%81%BE%E3%81%A7%E3%81%A7%E8%A1%A8%E3%81%99%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%5BURL%5D%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%22%2C%22_current%20millisecond%22%3A%22%E7%8F%BE%E5%9C%A8%E3%81%AE%E3%83%9F%E3%83%AA%E7%A7%92%22%2C%22_false%22%3A%22%E5%81%BD%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%E3%82%82%E3%81%97%5BA%5D%E3%81%AA%E3%82%89%5BB%5D%E3%81%A7%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%E3%81%8C%5BB%5D%E3%81%A8%E5%90%8C%E4%B8%80%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%5BSTRING%5D%E3%81%AE%5BSTART%5D%E3%81%8B%E3%82%89%5BEND%5D%E7%95%AA%E7%9B%AE%22%2C%22_newline%20character%22%3A%22%E6%94%B9%E8%A1%8C%E6%96%87%E5%AD%97%22%2C%22_pi%22%3A%22%CF%80%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22%5BSTRING%5D%E3%81%AE%5BREGEX%5D%E3%82%92%5BNEWSTRING%5D%E3%81%AB%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%22%2C%22_true%22%3A%22%E7%9C%9F%22%7D%2C%22ko%22%3A%7B%22_Utilities%22%3A%22%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BJSON_STRING%5D%EC%97%90%EC%84%9C%20%5BPATH%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%5BINPUT%5D%20%EA%B0%92%EC%9D%84%20%5BMIN%5D%EB%B6%80%ED%84%B0%20%5BMAX%5D%EA%B9%8C%EC%A7%80%20%EB%B2%94%EC%9C%84%EB%A1%9C%20%EC%A0%9C%ED%95%9C%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%5BURL%5D%EC%9D%98%20%EB%82%B4%EC%9A%A9%22%2C%22_current%20millisecond%22%3A%22%ED%98%84%EC%9E%AC%20%EB%B0%80%EB%A6%AC%EC%B4%88%22%2C%22_false%22%3A%22%EA%B1%B0%EC%A7%93%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%5BA%5D%20(%EC%9D%B4)%EB%9D%BC%EB%A9%B4%20%5BB%5D%20%EC%95%84%EB%8B%88%EB%A9%B4%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%EC%9D%B4(%EA%B0%80)%20%5BB%5D%EC%99%80(%EA%B3%BC)%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%EA%B0%80%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%5BSTRING%5D%EC%9D%98%20%5BSTART%5D%EB%B6%80%ED%84%B0%20%5BEND%5D%EA%B9%8C%EC%A7%80%EC%9D%98%20%EA%B8%80%EC%9E%90%22%2C%22_newline%20character%22%3A%22%EC%A4%84%EB%B0%94%EA%BF%88%20%EB%AC%B8%EC%9E%90%22%2C%22_true%22%3A%22%EC%B0%B8%22%7D%2C%22nb%22%3A%7B%22_Utilities%22%3A%22Verkt%C3%B8y%22%2C%22_true%22%3A%22sann%22%7D%2C%22nl%22%3A%7B%22_Utilities%22%3A%22Utiliteiten%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BPATH%5D%20van%20%5BJSON_STRING%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22klem%20%5BINPUT%5D%20tussen%20%5BMIN%5D%20en%20%5BMAX%5D%22%2C%22_current%20millisecond%22%3A%22huidige%20milliseconde%22%2C%22_false%22%3A%22onwaar%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22als%20%5BA%5D%20dan%20%5BB%5D%20anders%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22is%20%5BA%5D%20precies%20%5BB%5D%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22letters%20%5BSTART%5D%20t%2Fm%20%5BEND%5D%20van%20%5BSTRING%5D%22%2C%22_newline%20character%22%3A%22nieuwregelteken%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22vervang%20%5BSTRING%5D%20met%20regel%20%5BREGEX%5D%20door%20%5BNEWSTRING%5D%22%2C%22_true%22%3A%22waar%22%7D%2C%22pl%22%3A%7B%22_false%22%3A%22fa%C5%82sz%22%2C%22_true%22%3A%22prawda%22%7D%2C%22ru%22%3A%7B%22_Utilities%22%3A%22%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BPATH%5D%20%D0%B8%D0%B7%20%5BJSON_STRING%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%D0%B7%D0%B0%D0%B6%D0%B8%D0%BC%20%5BINPUT%5D%20%D0%BC%D0%B5%D0%B6%D0%B4%D1%83%20%5BMIN%5D%20%D0%B8%20%5BMAX%5D%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%20%D0%B8%D0%B7%20%5BURL%5D%22%2C%22_current%20millisecond%22%3A%22%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B5%20%D0%BC%D0%B8%D0%BB%D0%BB%D0%B8%D1%81%D0%B5%D0%BA%D1%83%D0%BD%D0%B4%D1%8B%22%2C%22_false%22%3A%22%D0%BD%D0%B5%D1%82%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%D0%B5%D1%81%D0%BB%D0%B8%20%5BA%5D%20%D1%82%D0%BE%D0%B3%D0%B4%D0%B0%20%5BB%5D%20%D0%B8%D0%BD%D0%B0%D1%87%D0%B5%20%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%20%D1%82%D0%BE%D1%87%D0%BD%D0%BE%20%D0%BB%D0%B8%20%5BB%5D%3F%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%D0%B1%D1%83%D0%BA%D0%B2%D1%8B%20%D1%81%20%5BSTART%5D%20%D0%B4%D0%BE%20%5BEND%5D%20%D0%B2%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20%5BSTRING%5D%22%2C%22_newline%20character%22%3A%22%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%20%D0%BD%D0%BE%D0%B2%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%22%2C%22_pi%22%3A%22%D0%BF%D0%B8%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%5BSTRING%5D%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE%20%5BREGEX%5D%20%D1%81%20%5BNEWSTRING%5D%22%2C%22_true%22%3A%22%D0%B4%D0%B0%22%7D%2C%22uk%22%3A%7B%22_newline%20character%22%3A%22%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%BE%D1%81%D1%83%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%22%7D%2C%22zh-cn%22%3A%7B%22_Utilities%22%3A%22%E5%B7%A5%E5%85%B7%22%2C%22_%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%3A%22%5BJSON_STRING%5D%E4%B8%AD%E7%9A%84%5BPATH%5D%22%2C%22_clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22%3A%22%5BMIN%5D%E5%88%B0%5BMAX%5D%E4%B9%8B%E9%97%B4%E7%9A%84%5BINPUT%5D%22%2C%22_content%20from%20%5BURL%5D%22%3A%22%E6%9D%A5%E8%87%AA%5BURL%5D%E7%9A%84%E5%86%85%E5%AE%B9%22%2C%22_current%20millisecond%22%3A%22%E5%BD%93%E5%89%8D%E6%AF%AB%E7%A7%92%22%2C%22_false%22%3A%22%E5%81%87%22%2C%22_if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22%3A%22%5BA%5D%EF%BC%9F%5BB%5D%EF%BC%9A%5BC%5D%22%2C%22_is%20%5BA%5D%20exactly%20%5BB%5D%3F%22%3A%22%5BA%5D%3D%3D%3D%5BB%5D%22%2C%22_letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22%3A%22%5BSTRING%5D%E7%9A%84%E7%AC%AC%5BSTART%5D%E5%88%B0%E7%AC%AC%5BEND%5D%E4%BD%8D%22%2C%22_newline%20character%22%3A%22%E6%8D%A2%E8%A1%8C%E7%AC%A6%22%2C%22_pi%22%3A%22%CF%80%22%2C%22_replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%3A%22%E4%BB%A5%E8%A7%84%E5%88%99%5BREGEX%5D%E6%9B%BF%E6%8D%A2%5BSTRING%5D%E4%B8%BA%5BNEWSTRING%5D%22%2C%22_true%22%3A%22%E7%9C%9F%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20const%20icon%20%3D%0A%20%20%20%20%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADTUlEQVRIS63VTWgUZxgH8P%2B7Mzsf%2B2U2SrPJKBoEA1WKUMzupaKHpgoetadCnaBN9FRaLLRQEW17KKIed1V21dJLbU%2FFRqiixx219NDaVi%2BNmnWNZT%2Bcze7Ozsf7yoxEYpnMRJI5DQzP%2B5v3P8%2F7DEHANVHM7iXAVyAkwQCNgZYjDp3KH7jzZ1DdwmckBLirrE29KQgcTNOBZTrQdYP2es631LSPnp34zQqDlgTIcvTlOowxNBsG6o3uHw6he899eOt%2BEBIGeBHxUW5ElDjEYwKSKdFbzzAsVB61%2Fq4lWlsvv3%2FXXAwJBOaL9pe29slE3MgoOSHF%2BN0DAwnwfASNehe1WudkYVw7sixgYfFkMXtSikU%2FVZQU3LhmHjVZ17Sz59Tbt%2F2QJe3glUIGMnEhe3PgjcR2Ny5dN%2FDf0873ebX8gS%2FwshUBUMK%2BPKveuhzWGZPF0fdiceHq4FAK3a6FyoyuFca13GKA14ruw8qM%2FldhXNscBnz03duDUSY83jCchu04ePBvs5ZXtTW%2BwGQpW12%2FIZ1xP9r0dAM9g2bOH9Rmg5DDpW0ZwvFVD7CpW1ctqNqQP1DM%2FZJRErvdFqw%2BbqHdMccKqvZr4AEsbdsVj4lTbkTttolqtXWloGp7FtlB7uv%2B1fIX6bSM9pyJJ9W5a3m1PAYC5ou4H7mUvT44mNwZTwio17to1Dsn8qp21Bc4cGl0WCLcP%2BvW9wkRQrxddNrW6cyw9NmxnTfthUX7ftgs9LcTP8dkfmxIWeW16cOHTdO22EheLU8v2qYTxezn6bT8zeo1MS%2FT2dk5GB3rHgNOMd6%2BSsFxnE3eJcAnohwdUZQkQAjqtTYadePHwri2L%2FCgHbuxg3%2FywPhdUZJbJOnF3GnpPS9fw7ABAkgij3h8flS46REYPRvVig5KoebV8oXAg3bw4ugmjkV%2B6u%2BXt%2FT1SSDE%2Fwy6sTxrdiHHBYgCH4q8ssqLjOPHZYk%2FkkiKEUHg4Y5qBgbLpDBNG62W5Rhde4rjsGdISUEUgxHf1zx0MfsWdTBGCHIAeQeABbAyBdPmfziTpdz%2BSASlMOT1Z9GCoJeCLAtwrTBk2UAYsiKAH%2BJN2YreXDHg%2FwilzJ3Oz1YUmEcYY2fce0LIx88BFi6vvp70RPYAAAAASUVORK5CYII%3D%22%3B%0A%0A%20%20class%20Utilities%20%7B%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22utilities%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Utilities%22)%2C%0A%0A%20%20%20%20%20%20%20%20color1%3A%20%22%238BC34A%22%2C%0A%20%20%20%20%20%20%20%20color2%3A%20%22%237CB342%22%2C%0A%20%20%20%20%20%20%20%20color3%3A%20%22%23689F38%22%2C%0A%0A%20%20%20%20%20%20%20%20menuIconURI%3A%20icon%2C%0A%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isExactly%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22is%20%5BA%5D%20exactly%20%5BB%5D%3F%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22APPLE%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isLessOrEqual%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BA%5D%20%3C%3D%20%5BB%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2050%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isMoreOrEqual%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BA%5D%20%3E%3D%20%5BB%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2050%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22trueBlock%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%20%22Block%20that%20returns%20true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22falseBlock%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22false%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%20%22Block%20that%20returns%20false%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22exponent%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BA%5D%20%5E%20%5BB%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22pi%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22pi%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%20%22Block%20that%20returns%203.1415...%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22ternaryOperator%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22if%20%5BA%5D%20then%20%5BB%5D%20else%20%5BC%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20A%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20B%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22banana%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20C%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20allowDropAnywhere%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22letters%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22letters%20%5BSTART%5D%20to%20%5BEND%5D%20of%20%5BSTRING%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20START%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%205%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20END%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%207%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22red%20apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22clamp%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22clamp%20%5BINPUT%5D%20between%20%5BMIN%5D%20and%20%5BMAX%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2030%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MIN%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2025%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20MAX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2040%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22currentMillisecond%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22current%20millisecond%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22fetchFrom%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22content%20from%20%5BURL%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20URL%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22https%3A%2F%2Fextensions.turbowarp.org%2Fhello.txt%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22parseJSON%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%3A%20%22%5BPATH%5D%20of%20%5BJSON_STRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20description%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'PATH%20is%20a%20string%20like%20%22fruit%2Fapples%22%20and%20JSON_STRING%20is%20an%20object%20like%20%7B%22fruit%22%3A%7B%22apples%22%3A3%7D%7D.%203%20would%20be%20reported%20in%20this%20example.'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20PATH%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22fruit%2Fapples%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20JSON_STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20'%7B%22fruit%22%3A%20%7B%22apples%22%3A%202%2C%20%22bananas%22%3A%203%7D%2C%20%22total_fruit%22%3A%205%7D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22newline%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22newline%20character%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22stringToBoolean%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20eslint-disable-next-line%20extension%2Fshould-translate%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22regexReplace%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22replace%20%5BSTRING%5D%20using%20the%20rule%20%5BREGEX%5D%20with%20%5BNEWSTRING%5D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22bananas%20are%20awesome.%20i%20like%20bananas.%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REGEX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22banana%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NEWSTRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20isExactly(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20return%20A%20%3D%3D%3D%20B%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20isLessOrEqual(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.Cast.compare(A%2C%20B)%20%3C%3D%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20isMoreOrEqual(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.Cast.compare(A%2C%20B)%20%3E%3D%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20trueBlock()%20%7B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20falseBlock()%20%7B%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20exponent(%7B%20A%2C%20B%20%7D)%20%7B%0A%20%20%20%20%20%20A%20%3D%20Scratch.Cast.toNumber(A)%3B%0A%20%20%20%20%20%20B%20%3D%20Scratch.Cast.toNumber(B)%3B%0A%20%20%20%20%20%20return%20Math.pow(A%2C%20B)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20pi()%20%7B%0A%20%20%20%20%20%20return%20Math.PI%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20ternaryOperator(%7B%20A%2C%20B%2C%20C%20%7D)%20%7B%0A%20%20%20%20%20%20return%20A%20%3F%20B%20%3A%20C%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20letters(%7B%20STRING%2C%20START%2C%20END%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.Cast.toString(STRING).slice(%0A%20%20%20%20%20%20%20%20Math.max(1%2C%20START)%20-%201%2C%0A%20%20%20%20%20%20%20%20Math.min(STRING.length%2C%20END)%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20clamp(%7B%20INPUT%2C%20MIN%2C%20MAX%20%7D)%20%7B%0A%20%20%20%20%20%20INPUT%20%3D%20Scratch.Cast.toNumber(INPUT)%3B%0A%20%20%20%20%20%20MIN%20%3D%20Scratch.Cast.toNumber(MIN)%3B%0A%20%20%20%20%20%20MAX%20%3D%20Scratch.Cast.toNumber(MAX)%3B%0A%20%20%20%20%20%20if%20(MIN%20%3E%20MAX)%20%7B%0A%20%20%20%20%20%20%20%20return%20Math.min(Math.max(INPUT%2C%20MAX)%2C%20MIN)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20Math.min(Math.max(INPUT%2C%20MIN)%2C%20MAX)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20currentMillisecond()%20%7B%0A%20%20%20%20%20%20return%20Date.now()%20%25%201000%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20fetchFrom(%7B%20URL%20%7D)%20%7B%0A%20%20%20%20%20%20return%20Scratch.fetch(URL)%0A%20%20%20%20%20%20%20%20.then((res)%20%3D%3E%20res.text())%0A%20%20%20%20%20%20%20%20.catch((err)%20%3D%3E%20%22%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20parseJSON(%7B%20PATH%2C%20JSON_STRING%20%7D)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20const%20path%20%3D%20PATH.toString()%0A%20%20%20%20%20%20%20%20%20%20.split(%22%2F%22)%0A%20%20%20%20%20%20%20%20%20%20.map((prop)%20%3D%3E%20decodeURIComponent(prop))%3B%0A%20%20%20%20%20%20%20%20if%20(path%5B0%5D%20%3D%3D%3D%20%22%22)%20path.splice(0%2C%201)%3B%0A%20%20%20%20%20%20%20%20if%20(path%5Bpath.length%20-%201%5D%20%3D%3D%3D%20%22%22)%20path.splice(-1%2C%201)%3B%0A%20%20%20%20%20%20%20%20let%20json%3B%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20json%20%3D%20JSON.parse(%22%20%22%20%2B%20JSON_STRING)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20e.message%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20for%20(const%20prop%20of%20path)%20%7B%0A%20%20%20%20%20%20%20%20%20%20if%20(!Object.prototype.hasOwnProperty.call(json%2C%20prop))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20json%20%3D%20json%5Bprop%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20(json%20%3D%3D%3D%20null)%20return%20%22null%22%3B%0A%20%20%20%20%20%20%20%20else%20if%20(json%20%3D%3D%3D%20undefined)%20return%20%22%22%3B%0A%20%20%20%20%20%20%20%20else%20if%20(typeof%20json%20%3D%3D%3D%20%22object%22)%20return%20JSON.stringify(json)%3B%0A%20%20%20%20%20%20%20%20else%20return%20json.toString()%3B%0A%20%20%20%20%20%20%7D%20catch%20(err)%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20newline()%20%7B%0A%20%20%20%20%20%20return%20%22%5Cn%22%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20stringToBoolean(%7B%20STRING%20%7D)%20%7B%0A%20%20%20%20%20%20return%20STRING%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20regexReplace(%7B%20STRING%2C%20REGEX%2C%20NEWSTRING%20%7D)%20%7B%0A%20%20%20%20%20%20return%20STRING.toString().replace(new%20RegExp(REGEX%2C%20%22gi%22)%2C%20NEWSTRING)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20Utilities())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Mouse%20Cursor%0A%2F%2F%20ID%3A%20MouseCursor%0A%2F%2F%20Description%3A%20Use%20custom%20cursors%20or%20hide%20the%20cursor.%20Also%20allows%20replacing%20the%20cursor%20with%20any%20costume%20image.%0A%2F%2F%20License%3A%20MIT%20AND%20MPL-2.0%0A%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Mouse%20Cursor%22%3A%22Mauszeiger%22%7D%2C%22fi%22%3A%7B%22_Mouse%20Cursor%22%3A%22Hiiren%20kohdistin%22%2C%22_bottom%20left%22%3A%22vasempaan%20alakulmaan%22%2C%22_bottom%20right%22%3A%22oikeaan%20alakulmaan%22%2C%22_center%22%3A%22keskelle%22%2C%22_cursor%22%3A%22kohdistin%22%2C%22_hide%20cursor%22%3A%22piilota%20kohdistin%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22aseta%20kohdistimeksi%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22aseta%20kohdistimeksi%20nykyisen%20asusteen%20keskikohta%3A%20%5Bposition%5D%20enimm%C3%A4iskoko%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22vasempaan%20yl%C3%A4kulmaan%22%2C%22_top%20right%22%3A%22oikeaan%20yl%C3%A4kulmaan%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(ep%C3%A4luotettava)%22%7D%2C%22it%22%3A%7B%22_Mouse%20Cursor%22%3A%22Puntatore%20Mouse%22%2C%22_bottom%20left%22%3A%22angolo%20sinistra%20in%20basso%22%2C%22_bottom%20right%22%3A%22angolo%20destra%20in%20basso%22%2C%22_center%22%3A%22centro%22%2C%22_cursor%22%3A%22puntatore%22%2C%22_hide%20cursor%22%3A%22nascondi%20puntatore%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22usa%20%5Bcur%5D%20come%20puntatore%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22usa%20il%20costume%20attuale%20con%20centro%3A%20%5Bposition%5D%20dimensione%20massima%3A%20%5Bsize%5D%20come%20puntatore%22%2C%22_top%20left%22%3A%22angolo%20sinistra%20in%20alto%22%2C%22_top%20right%22%3A%22angolo%20destra%20in%20alto%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(inaffidabile)%22%7D%2C%22ja%22%3A%7B%22_Mouse%20Cursor%22%3A%22%E3%83%9E%E3%82%A6%E3%82%B9%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%22%2C%22_bottom%20left%22%3A%22%E5%B7%A6%E4%B8%8B%22%2C%22_bottom%20right%22%3A%22%E5%8F%B3%E4%B8%8B%22%2C%22_center%22%3A%22%E4%B8%AD%E5%A4%AE%22%2C%22_cursor%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%22%2C%22_hide%20cursor%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%E9%9A%A0%E3%81%99%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%5Bcur%5D%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%E3%80%81%E4%B8%AD%E5%A4%AE%5Bposition%5D%E6%9C%80%E5%A4%A7%E3%82%B5%E3%82%A4%E3%82%BA%5Bsize%5D%E3%81%A7%E4%BB%8A%E3%81%AE%E3%82%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%A0%E3%81%AB%E3%81%99%E3%82%8B%22%2C%22_top%20left%22%3A%22%E5%B7%A6%E4%B8%8A%22%2C%22_top%20right%22%3A%22%E5%8F%B3%E4%B8%8A%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%E4%BF%A1%E9%A0%BC%E6%80%A7%E3%81%8C%E3%81%AA%E3%81%84)%22%7D%2C%22ko%22%3A%7B%22_Mouse%20Cursor%22%3A%22%EB%A7%88%EC%9A%B0%EC%8A%A4%20%EC%BB%A4%EC%84%9C%22%2C%22_bottom%20left%22%3A%22%EC%99%BC%EC%AA%BD%20%EC%95%84%EB%9E%98%22%2C%22_bottom%20right%22%3A%22%EC%98%A4%EB%A5%B8%EC%AA%BD%20%EC%95%84%EB%9E%98%22%2C%22_center%22%3A%22%EA%B0%80%EC%9A%B4%EB%8D%B0%22%2C%22_cursor%22%3A%22%EC%BB%A4%EC%84%9C%22%2C%22_hide%20cursor%22%3A%22%EC%BB%A4%EC%84%9C%20%EC%88%A8%EA%B8%B0%EA%B8%B0%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%EC%BB%A4%EC%84%9C%EB%A5%BC%20%5Bcur%5D(%EC%9C%BC)%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%EC%BB%A4%EC%84%9C%EB%A5%BC%20%ED%98%84%EC%9E%AC%20%EB%AA%A8%EC%96%91%EC%9C%BC%EB%A1%9C%20%EC%A0%95%ED%95%98%EA%B8%B0%20%EC%A4%91%EC%8B%AC%3A%20%5Bposition%5D%20%EC%B5%9C%EB%8C%80%20%ED%81%AC%EA%B8%B0%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%EC%99%BC%EC%AA%BD%20%EC%9C%84%22%2C%22_top%20right%22%3A%22%EC%98%A4%EB%A5%B8%EC%AA%BD%20%EC%9C%84%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%EB%B6%88%EC%95%88%EC%A0%95)%22%7D%2C%22nb%22%3A%7B%22_Mouse%20Cursor%22%3A%22Mus%20Pekkeren%22%2C%22_bottom%20left%22%3A%22nederst%20til%20venstre%22%2C%22_bottom%20right%22%3A%22nederst%20til%20h%C3%B8yre%22%2C%22_center%22%3A%22senter%22%2C%22_cursor%22%3A%22pekeren%22%2C%22_hide%20cursor%22%3A%22skjul%20pekeren%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22sett%20mark%C3%B8ren%20til%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22sett%20mark%C3%B8ren%20til%20midten%20av%20gjeldende%20drakt%3A%20%5Bposition%5D%20maks%20st%C3%B8rrelse%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%C3%B8verst%20til%20venstre%22%2C%22_top%20right%22%3A%22%C3%B8verst%20til%20h%C3%B8yre%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(up%C3%A5litelig)%22%7D%2C%22nl%22%3A%7B%22_Mouse%20Cursor%22%3A%22Muisaanwijzer%22%2C%22_bottom%20left%22%3A%22linksonder%22%2C%22_bottom%20right%22%3A%22rechtsonder%22%2C%22_center%22%3A%22midden%22%2C%22_hide%20cursor%22%3A%22verberg%20cursor%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22maak%20cursor%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22maak%20cursor%20huidig%20uiterlijk%20met%20middelpunt%3A%20%5Bposition%5D%20en%20max.%20grootte%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22linksboven%22%2C%22_top%20right%22%3A%22rechtsboven%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(onbetrouwbaar)%22%7D%2C%22ru%22%3A%7B%22_Mouse%20Cursor%22%3A%22%D0%9A%D1%83%D1%80%D1%81%D0%BE%D1%80%20%D0%9C%D1%8B%D1%88%D0%B8%22%2C%22_bottom%20left%22%3A%22%D0%BD%D0%B8%D0%B6%D0%BD%D0%B5%D0%BC%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_bottom%20right%22%3A%22%D0%BD%D0%B8%D0%B6%D0%BD%D0%B5%D0%BC%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B5%22%2C%22_cursor%22%3A%22%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%22%2C%22_hide%20cursor%22%3A%22%D1%81%D0%BF%D1%80%D1%8F%D1%82%D0%B0%D1%82%D1%8C%20%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%20%D0%BD%D0%B0%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%BA%D1%83%D1%80%D1%81%D0%BE%D1%80%20%D0%BD%D0%B0%20%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B8%D0%B9%20%D0%BA%D0%BE%D1%81%D1%82%D1%8E%D0%BC%20%D1%81%20%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%BE%D0%BC%20%D0%B2%3A%20%5Bposition%5D%20%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%BC%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BE%D0%BC%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%D0%B2%D0%B5%D1%80%D1%85%D0%BD%D0%B5%D0%BC%20%D0%BB%D0%B5%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_top%20right%22%3A%22%D0%B2%D0%B5%D1%80%D1%85%D0%BD%D0%B5%D0%BC%20%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D0%BC%20%D1%83%D0%B3%D0%BB%D1%83%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%D0%BD%D0%B5%D0%BD%D0%B0%D0%B4%D0%B5%D0%B6%D0%BD%D0%BE)%22%7D%2C%22uk%22%3A%7B%22_Mouse%20Cursor%22%3A%22%D0%92%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%20%D0%9C%D0%B8%D1%88%D1%96%22%2C%22_bottom%20left%22%3A%22%D0%B7%D0%BB%D1%96%D0%B2%D0%B0%20%D0%B7%D0%BD%D0%B8%D0%B7%D1%83%22%2C%22_bottom%20right%22%3A%22%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%20%D0%B7%D0%BD%D0%B8%D0%B7%D1%83%22%2C%22_center%22%3A%22%D1%86%D0%B5%D0%BD%D1%82%D1%80%22%2C%22_cursor%22%3A%22%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%22%2C%22_hide%20cursor%22%3A%22%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D0%B8%20%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%D0%B7%D0%BC%D1%96%D0%BD%D0%B8%D1%82%D0%B8%20%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%20%D0%BD%D0%B0%20%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%D0%B7%D0%B0%D0%BC%D1%96%D0%BD%D0%B8%D1%82%D0%B8%20%D0%B2%D0%BA%D0%B0%D0%B7%D1%96%D0%B2%D0%BD%D0%B8%D0%BA%20%D0%BD%D0%B0%20%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%20%D1%86%D0%B5%D0%BD%D1%82%D1%80%3A%20%5Bposition%5D%20%D0%BC%D0%B0%D0%BA%D1%81.%20%D1%80%D0%BE%D0%B7%D0%BC%D1%96%D1%80%3A%20%5Bsize%5D%22%2C%22_top%20left%22%3A%22%D0%B7%D0%BB%D1%96%D0%B2%D0%B0%20%D0%B7%D0%B2%D0%B5%D1%80%D1%85%D1%83%22%2C%22_top%20right%22%3A%22%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%20%D0%B7%D0%B2%D0%B5%D1%80%D1%85%D1%83%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%20(%D0%BD%D0%B5%D0%BD%D0%B0%D0%B4%D1%96%D0%B9%D0%BD%D0%BE)%22%7D%2C%22zh-cn%22%3A%7B%22_Mouse%20Cursor%22%3A%22%E9%BC%A0%E6%A0%87%E5%9B%BE%E6%A0%87%22%2C%22_bottom%20left%22%3A%22%E5%BA%95%E9%83%A8%E5%B7%A6%E4%BE%A7%22%2C%22_bottom%20right%22%3A%22%E5%BA%95%E9%83%A8%E5%8F%B3%E4%BE%A7%22%2C%22_center%22%3A%22%E5%B1%85%E4%B8%AD%22%2C%22_cursor%22%3A%22%E9%BC%A0%E6%A0%87%E6%A0%B7%E5%BC%8F%22%2C%22_hide%20cursor%22%3A%22%E9%9A%90%E8%97%8F%E9%BC%A0%E6%A0%87%22%2C%22_set%20cursor%20to%20%5Bcur%5D%22%3A%22%E5%B0%86%E9%BC%A0%E6%A0%87%E6%A0%B7%E5%BC%8F%E8%AE%BE%E4%B8%BA%5Bcur%5D%22%2C%22_set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%3A%22%E5%B0%86%E9%BC%A0%E6%A0%87%E4%B8%AD%E5%BF%83%E8%AE%BE%E4%B8%BA%EF%BC%9A%5Bposition%5D%E6%9C%80%E5%A4%A7%E5%B0%BA%E5%AF%B8%EF%BC%9A%5Bsize%5D%22%2C%22_top%20left%22%3A%22%E9%A1%B6%E9%83%A8%E5%B7%A6%E4%BE%A7%22%2C%22_top%20right%22%3A%22%E9%A1%B6%E9%83%A8%E5%8F%B3%E4%BE%A7%22%2C%22_%7Bsize%7D%20(unreliable)%22%3A%22%7Bsize%7D%EF%BC%88%E5%AE%9E%E9%AA%8C%E6%80%A7%EF%BC%89%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20if%20(!Scratch.extensions.unsandboxed)%20%7B%0A%20%20%20%20throw%20new%20Error(%22MouseCursor%20extension%20must%20be%20run%20unsandboxed%22)%3B%0A%20%20%7D%0A%0A%20%20const%20lazilyCreatedCanvas%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20%2F**%20%40type%20%7BHTMLCanvasElement%7D%20*%2F%0A%20%20%20%20let%20canvas%20%3D%20null%3B%0A%20%20%20%20%2F**%20%40type%20%7BCanvasRenderingContext2D%7D%20*%2F%0A%20%20%20%20let%20ctx%20%3D%20null%3B%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20width%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20height%0A%20%20%20%20%20*%20%40returns%20%7B%5BHTMLCanvasElement%2C%20CanvasRenderingContext2D%5D%7D%0A%20%20%20%20%20*%2F%0A%20%20%20%20return%20(width%2C%20height)%20%3D%3E%20%7B%0A%20%20%20%20%20%20if%20(!canvas)%20%7B%0A%20%20%20%20%20%20%20%20canvas%20%3D%20document.createElement(%22canvas%22)%3B%0A%20%20%20%20%20%20%20%20ctx%20%3D%20canvas.getContext(%222d%22)%3B%0A%20%20%20%20%20%20%20%20if%20(!ctx)%20%7B%0A%20%20%20%20%20%20%20%20%20%20throw%20new%20Error(%22Could%20not%20get%202d%20rendering%20context%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%2F%2F%20Setting%20canvas%20size%20also%20clears%20it%0A%20%20%20%20%20%20canvas.width%20%3D%20width%3B%0A%20%20%20%20%20%20canvas.height%20%3D%20height%3B%0A%20%20%20%20%20%20return%20%5Bcanvas%2C%20ctx%5D%3B%0A%20%20%20%20%7D%3B%0A%20%20%7D%3B%0A%20%20const%20getRawSkinCanvas%20%3D%20lazilyCreatedCanvas()%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7BRenderWebGL.Skin%7D%20skin%0A%20%20%20*%20%40returns%20%7Bstring%7D%20A%20data%3A%20URI%20for%20the%20skin.%0A%20%20%20*%2F%0A%20%20const%20encodeSkinToURL%20%3D%20(skin)%20%3D%3E%20%7B%0A%20%20%20%20const%20svgSkin%20%3D%20%2F**%20%40type%20%7BRenderWebGL.SVGSkin%7D%20*%2F%20(skin)%3B%0A%20%20%20%20if%20(svgSkin._svgImage)%20%7B%0A%20%20%20%20%20%20%2F%2F%20This%20is%20an%20SVG%20skin%0A%20%20%20%20%20%20return%20svgSkin._svgImage.src%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20It's%20probably%20a%20bitmap%20skin.%0A%20%20%20%20%2F%2F%20The%20most%20reliable%20way%20to%20get%20the%20bitmap%20in%20every%20runtime%20is%20through%20the%20silhouette.%0A%20%20%20%20%2F%2F%20This%20is%20very%20slow%20and%20could%20involve%20reading%20the%20texture%20from%20the%20GPU.%0A%20%20%20%20const%20silhouette%20%3D%20skin._silhouette%3B%0A%20%20%20%20%2F%2F%20unlazy()%20only%20exists%20in%20TW%0A%20%20%20%20if%20(silhouette.unlazy)%20%7B%0A%20%20%20%20%20%20silhouette.unlazy()%3B%0A%20%20%20%20%7D%0A%20%20%20%20const%20colorData%20%3D%20silhouette._colorData%3B%0A%20%20%20%20const%20width%20%3D%20silhouette._width%3B%0A%20%20%20%20const%20height%20%3D%20silhouette._height%3B%0A%20%20%20%20const%20imageData%20%3D%20new%20ImageData(%0A%20%20%20%20%20%20colorData%2C%0A%20%20%20%20%20%20silhouette._width%2C%0A%20%20%20%20%20%20silhouette._height%0A%20%20%20%20)%3B%0A%20%20%20%20const%20%5Bcanvas%2C%20ctx%5D%20%3D%20getRawSkinCanvas(width%2C%20height)%3B%0A%20%20%20%20ctx.putImageData(imageData%2C%200%2C%200)%3B%0A%20%20%20%20return%20canvas.toDataURL()%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7BVM.Costume%7D%20costume%0A%20%20%20*%20%40param%20%7Bnumber%7D%20maxWidth%0A%20%20%20*%20%40param%20%7Bnumber%7D%20maxHeight%0A%20%20%20*%20%40returns%20%7B%7Buri%3A%20string%2C%20width%3A%20number%2C%20height%3A%20number%7D%7D%0A%20%20%20*%2F%0A%20%20const%20costumeToCursor%20%3D%20(costume%2C%20maxWidth%2C%20maxHeight)%20%3D%3E%20%7B%0A%20%20%20%20const%20skin%20%3D%20Scratch.vm.renderer._allSkins%5Bcostume.skinId%5D%3B%0A%20%20%20%20const%20imageURI%20%3D%20encodeSkinToURL(skin)%3B%0A%0A%20%20%20%20let%20width%20%3D%20skin.size%5B0%5D%3B%0A%20%20%20%20let%20height%20%3D%20skin.size%5B1%5D%3B%0A%20%20%20%20if%20(width%20%3E%20maxWidth)%20%7B%0A%20%20%20%20%20%20height%20%3D%20height%20*%20(maxWidth%20%2F%20width)%3B%0A%20%20%20%20%20%20width%20%3D%20maxWidth%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20(height%20%3E%20maxHeight)%20%7B%0A%20%20%20%20%20%20width%20%3D%20width%20*%20(maxHeight%20%2F%20height)%3B%0A%20%20%20%20%20%20height%20%3D%20maxHeight%3B%0A%20%20%20%20%7D%0A%20%20%20%20width%20%3D%20Math.round(width)%3B%0A%20%20%20%20height%20%3D%20Math.round(height)%3B%0A%0A%20%20%20%20%2F%2F%20We%20wrap%20the%20encoded%20image%20in%20an%20%3Csvg%3E.%20This%20lets%20us%20do%20some%20clever%20things%3A%0A%20%20%20%20%2F%2F%20%20-%20We%20can%20resize%20the%20image%20without%20a%20canvas.%0A%20%20%20%20%2F%2F%20%20-%20We%20can%20give%20the%20browser%20an%20image%20with%20more%20raw%20pixels%20than%20its%20DPI%20independent%20size.%0A%20%20%20%20%2F%2F%20The%20latter%20is%20important%20so%20that%20cursors%20won't%20look%20horrible%20on%20high%20DPI%20displays.%20For%0A%20%20%20%20%2F%2F%20example%2C%20if%20the%20cursor%20will%20display%20at%2032x32%20in%20DPI%20independent%20units%20on%20a%202x%20high%20DPI%0A%20%20%20%20%2F%2F%20display%2C%20we%20actually%20need%20to%20send%20a%2064x64%20image%20for%20it%20to%20look%20good.%20This%20lets%20us%20do%0A%20%20%20%20%2F%2F%20that%20automatically.%0A%20%20%20%20let%20svg%20%3D%20%60%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22%24%7Bwidth%7D%22%20height%3D%22%24%7Bheight%7D%22%3E%60%3B%0A%20%20%20%20svg%20%2B%3D%20%60%3Cimage%20href%3D%22%24%7BimageURI%7D%22%20width%3D%22%24%7Bwidth%7D%22%20height%3D%22%24%7Bheight%7D%22%20%2F%3E%60%3B%0A%20%20%20%20svg%20%2B%3D%20%22%3C%2Fsvg%3E%22%3B%0A%20%20%20%20%2F%2F%20URI%20encoding%20usually%20results%20in%20smaller%20string%20than%20base%2064%20for%20the%20types%20of%20data%20we%20get%20here.%0A%20%20%20%20const%20svgURI%20%3D%20%60data%3Aimage%2Fsvg%2Bxml%3B%2C%24%7BencodeURIComponent(svg)%7D%60%3B%0A%0A%20%20%20%20return%20%7B%0A%20%20%20%20%20%20uri%3A%20svgURI%2C%0A%20%20%20%20%20%20width%2C%0A%20%20%20%20%20%20height%2C%0A%20%20%20%20%7D%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%20%40type%20%7Bstring%7D%20*%2F%0A%20%20let%20nativeCursor%20%3D%20%22default%22%3B%0A%20%20%2F**%20%40type%20%7Bnull%7Cstring%7D%20*%2F%0A%20%20let%20customCursorImageName%20%3D%20null%3B%0A%0A%20%20const%20canvas%20%3D%20Scratch.renderer.canvas%3B%0A%20%20%2F**%20%40type%20%7Bstring%7D%20*%2F%0A%20%20let%20currentCanvasCursor%20%3D%20nativeCursor%3B%0A%20%20const%20updateCanvasCursor%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20if%20(canvas.style.cursor%20!%3D%3D%20currentCanvasCursor)%20%7B%0A%20%20%20%20%20%20canvas.style.cursor%20%3D%20currentCanvasCursor%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20scratch-gui%20will%20sometimes%20reset%20the%20cursor%20when%20resizing%20the%20window%20or%20going%20in%2Fout%20of%20fullscreen%0A%20%20new%20MutationObserver(updateCanvasCursor).observe(canvas%2C%20%7B%0A%20%20%20%20attributeFilter%3A%20%5B%22style%22%5D%2C%0A%20%20%20%20attributes%3A%20true%2C%0A%20%20%7D)%3B%0A%0A%20%20%2F**%0A%20%20%20*%20Parse%20strings%20like%20%2260x12%22%20or%20%2277%2C1%22%0A%20%20%20*%20%40param%20%7Bstring%7D%20string%0A%20%20%20*%20%40returns%20%7B%5Bnumber%2C%20number%5D%7D%0A%20%20%20*%2F%0A%20%20const%20parseTuple%20%3D%20(string)%20%3D%3E%20%7B%0A%20%20%20%20const%20%5Ba%2C%20b%5D%20%3D%20(%22%22%20%2B%20string).split(%2F%5B%20%2Cx%5D%2F)%3B%0A%20%20%20%20return%20%5B%2Ba%20%7C%7C%200%2C%20%2Bb%20%7C%7C%200%5D%3B%0A%20%20%7D%3B%0A%0A%20%20%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20size%20eg.%20%2248x84%22%0A%20%20%20*%20%40returns%20%7Bstring%7D%0A%20%20%20*%2F%0A%20%20const%20formatUnreliableSize%20%3D%20(size)%20%3D%3E%0A%20%20%20%20Scratch.translate(%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20default%3A%20%22%7Bsize%7D%20(unreliable)%22%2C%0A%20%20%20%20%20%20%20%20description%3A%20%22%5Bsize%5D%20is%20replaced%20with%20a%20size%20in%20pixels%20such%20as%20'48x48'%22%2C%0A%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7B%20size%20%7D%0A%20%20%20%20)%3B%0A%0A%20%20const%20cursors%20%3D%20%5B%0A%20%20%20%20%22default%22%2C%0A%20%20%20%20%22pointer%22%2C%0A%20%20%20%20%22move%22%2C%0A%20%20%20%20%22grab%22%2C%0A%20%20%20%20%22grabbing%22%2C%0A%20%20%20%20%22text%22%2C%0A%20%20%20%20%22vertical-text%22%2C%0A%20%20%20%20%22wait%22%2C%0A%20%20%20%20%22progress%22%2C%0A%20%20%20%20%22help%22%2C%0A%20%20%20%20%22context-menu%22%2C%0A%20%20%20%20%22zoom-in%22%2C%0A%20%20%20%20%22zoom-out%22%2C%0A%20%20%20%20%22crosshair%22%2C%0A%20%20%20%20%22cell%22%2C%0A%20%20%20%20%22not-allowed%22%2C%0A%20%20%20%20%22copy%22%2C%0A%20%20%20%20%22alias%22%2C%0A%20%20%20%20%22no-drop%22%2C%0A%20%20%20%20%22all-scroll%22%2C%0A%20%20%20%20%22col-resize%22%2C%0A%20%20%20%20%22row-resize%22%2C%0A%20%20%20%20%22n-resize%22%2C%0A%20%20%20%20%22e-resize%22%2C%0A%20%20%20%20%22s-resize%22%2C%0A%20%20%20%20%22w-resize%22%2C%0A%20%20%20%20%22ne-resize%22%2C%0A%20%20%20%20%22nw-resize%22%2C%0A%20%20%20%20%22se-resize%22%2C%0A%20%20%20%20%22sw-resize%22%2C%0A%20%20%20%20%22ew-resize%22%2C%0A%20%20%20%20%22ns-resize%22%2C%0A%20%20%20%20%22nesw-resize%22%2C%0A%20%20%20%20%22nwse-resize%22%2C%0A%20%20%5D%3B%0A%0A%20%20class%20MouseCursor%20%7B%0A%20%20%20%20constructor()%20%7B%0A%20%20%20%20%20%20Scratch.vm.runtime.on(%22RUNTIME_DISPOSED%22%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20this.setCur(%7B%0A%20%20%20%20%20%20%20%20%20%20cur%3A%20%22default%22%2C%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20%22MouseCursor%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Mouse%20Cursor%22)%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setCur%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20cursor%20to%20%5Bcur%5D%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20cur%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22pointer%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22cursors%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setCursorImage%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22set%20cursor%20to%20current%20costume%20center%3A%20%5Bposition%5D%20max%20size%3A%20%5Bsize%5D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20position%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%220%2C0%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22imagePositions%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20size%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%2232x32%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22imageSizes%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22hideCur%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22hide%20cursor%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22getCur%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22cursor%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20cursors%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20cursors%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20imagePositions%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%5Bx%2C%20y%5D%20where%20x%20is%20%5B0%3Dleft%2C%20100%3Dright%5D%20and%20y%20is%20%5B0%3Dtop%2C%20100%3Dbottom%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22top%20left%22)%2C%20value%3A%20%220%2C0%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22top%20right%22)%2C%20value%3A%20%22100%2C0%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22bottom%20left%22)%2C%20value%3A%20%220%2C100%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22bottom%20right%22)%2C%20value%3A%20%22100%2C100%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20Scratch.translate(%22center%22)%2C%20value%3A%20%2250%2C50%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20imageSizes%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Some%20important%20numbers%20to%20keep%20in%20mind%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Browsers%20ignore%20cursor%20images%20%3E128%20in%20any%20dimension%20(https%3A%2F%2Fsearchfox.org%2Fmozilla-central%2Frev%2F43ee5e789b079e94837a21336e9ce2420658fd19%2Fwidget%2Fgtk%2FnsWindow.cpp%233393-3402)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Browsers%20may%20refuse%20to%20display%20a%20cursor%20near%20window%20borders%20for%20images%20%3E32%20in%20any%20dimension%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%224x4%22%2C%20value%3A%20%224x4%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%228x8%22%2C%20value%3A%20%228x4%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%2212x12%22%2C%20value%3A%20%2212x12%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%2216x16%22%2C%20value%3A%20%2216x16%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20%2232x32%22%2C%20value%3A%20%2232x32%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20formatUnreliableSize(%2248x48%22)%2C%20value%3A%20%2248x48%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20formatUnreliableSize(%2264x64%22)%2C%20value%3A%20%2264x64%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%20text%3A%20formatUnreliableSize(%22128x128%22)%2C%20value%3A%20%22128x128%22%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setCur(args)%20%7B%0A%20%20%20%20%20%20const%20newCursor%20%3D%20Scratch.Cast.toString(args.cur)%3B%0A%20%20%20%20%20%20%2F%2F%20Prevent%20setting%20cursor%20to%20%22url(...)%2C%20default%22%20from%20causing%20fetch.%0A%20%20%20%20%20%20if%20(cursors.includes(newCursor)%20%7C%7C%20newCursor%20%3D%3D%3D%20%22none%22)%20%7B%0A%20%20%20%20%20%20%20%20nativeCursor%20%3D%20newCursor%3B%0A%20%20%20%20%20%20%20%20customCursorImageName%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20currentCanvasCursor%20%3D%20newCursor%3B%0A%20%20%20%20%20%20%20%20updateCanvasCursor()%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setCursorImage(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20%5BmaxWidth%2C%20maxHeight%5D%20%3D%20parseTuple(args.size).map((i)%20%3D%3E%0A%20%20%20%20%20%20%20%20Math.max(0%2C%20i)%0A%20%20%20%20%20%20)%3B%0A%0A%20%20%20%20%20%20const%20currentCostume%20%3D%0A%20%20%20%20%20%20%20%20util.target.getCostumes()%5Butil.target.currentCostume%5D%3B%0A%20%20%20%20%20%20const%20costumeName%20%3D%20currentCostume.name%3B%0A%0A%20%20%20%20%20%20let%20encodedCostume%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20encodedCostume%20%3D%20costumeToCursor(currentCostume%2C%20maxWidth%2C%20maxHeight)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20This%20could%20happen%20for%20a%20variety%20of%20reasons.%0A%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(encodedCostume)%20%7B%0A%20%20%20%20%20%20%20%20const%20%5BpercentX%2C%20percentY%5D%20%3D%20parseTuple(args.position).map(%0A%20%20%20%20%20%20%20%20%20%20(i)%20%3D%3E%20Math.max(0%2C%20Math.min(100%2C%20i))%20%2F%20100%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20const%20x%20%3D%20percentX%20*%20encodedCostume.width%3B%0A%20%20%20%20%20%20%20%20const%20y%20%3D%20percentY%20*%20encodedCostume.height%3B%0A%0A%20%20%20%20%20%20%20%20currentCanvasCursor%20%3D%20%60url(%22%24%7BencodedCostume.uri%7D%22)%20%24%7Bx%7D%20%24%7By%7D%2C%20%24%7BnativeCursor%7D%60%3B%0A%20%20%20%20%20%20%20%20updateCanvasCursor()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20If%20for%20some%20reason%20the%20costume%20couldn't%20be%20encoded%2C%20we'll%20leave%20the%20cursor%20unchanged.%0A%20%20%20%20%20%20%20%20%2F%2F%20This%20is%20the%20same%20behavior%20that%20would%20happen%20if%20we%20successfully%20encode%20a%20cursor%20but%20the%20browser%0A%20%20%20%20%20%20%20%20%2F%2F%20is%20unable%20to%20parse%20it%20for%20some%20reason.%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20customCursorImageName%20%3D%20costumeName%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20hideCur()%20%7B%0A%20%20%20%20%20%20this.setCur(%7B%0A%20%20%20%20%20%20%20%20cur%3A%20%22none%22%2C%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getCur()%20%7B%0A%20%20%20%20%20%20if%20(customCursorImageName%20!%3D%3D%20null)%20%7B%0A%20%20%20%20%20%20%20%20return%20customCursorImageName%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20nativeCursor%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20MouseCursor())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B"]) { vm.extensionManager.loadExtensionURL(extension); } @@ -398,7 +407,7 @@ scaffolding.addCloudProviderOverride("☁ Osterdatum Monat", providers["ws"] || ), true); } }; - let projectDecodeBuffer = new ArrayBuffer(3243856); + let projectDecodeBuffer = new ArrayBuffer(3226436); let projectDecodeIndex = 0; const decodeChunk = (size) => { try { @@ -406,61 +415,61 @@ scaffolding.addCloudProviderOverride("☁ Osterdatum Monat", providers["ws"] || base85decode(document.currentScript.getAttribute("data"), projectDecodeBuffer, projectDecodeIndex); document.currentScript.remove(); projectDecodeIndex += size; - setProgress(interpolate(0.1, 0.75, projectDecodeIndex / 3243856)); + setProgress(interpolate(0.1, 0.75, projectDecodeIndex / 3226433)); } catch (e) { handleError(e); } }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +