<snapdata remixID="10342518"><project name="Online Test" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes>This is a test with online features for something better.&#xD;&#xD;Currently under construction with no helpful project notes.</notes><thumbnail>data:image/png;base64,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</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="-240" y="-180" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="10" y="180.3333333333334"><block s="receiveGo"></block><custom-block s="cloud id %s"><l></l></custom-block><block s="bubble"><l></l></block><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>server_</l><l>player_</l><l>list</l></list></custom-block><block s="reportNewList"><list></list></block></custom-block><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>chat</l></list></custom-block><block s="reportNewList"><list></list></block></custom-block><custom-block s="hide var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>chat</l></list></custom-block></custom-block><block s="gotoXY"><l>-235</l><l>0</l></block><block s="clear"></block><block s="write"><block s="reportJoinWords"><list><l>Welcome </l><custom-block s="setting %s"><l>User</l></custom-block><l>.</l></list></block><l>20</l></block><block s="gotoXY"><l>-235</l><block s="reportDifference"><block s="yPosition"></block><l>20</l></block></block><block s="write"><l>Join a server by pressing 1</l><l>18</l></block><block s="gotoXY"><l>-235</l><block s="reportDifference"><block s="yPosition"></block><l>20</l></block></block><block s="write"><l>Create a server by pressing 2</l><l>18</l></block><block s="doForever"><script><block s="doIfElse"><block s="reportKeyPressed"><l><option>1</option></l></block><script><block s="doWarp"><script><block s="clear"></block><block s="doAsk"><l>Server ID</l></block><custom-block s="join server: %s"><block s="getLastAnswer"></block></custom-block><block s="doBroadcast"><l>Start</l></block><block s="doStopThis"><l><option>this script</option></l></block></script></block></script><script><block s="doIf"><block s="reportKeyPressed"><l><option>2</option></l></block><script><block s="doWarp"><script><block s="clear"></block><block s="doDeclareVariables"><list><l>name</l><l>desc</l></list></block><block s="doAsk"><l>Name</l></block><custom-block s="set var %s to %s"><l>name</l><block s="getLastAnswer"></block></custom-block><block s="doAsk"><l>Description</l></block><custom-block s="set var %s to %s"><l>desc</l><block s="getLastAnswer"></block></custom-block><custom-block s="create server: name %s description %s"><block var="name"/><block var="desc"/></custom-block><block s="doBroadcast"><l>Start</l></block><block s="doStopThis"><l><option>this script</option></l></block></script></block></script></block></script></block></script></block></script><comment x="90" y="989.3333333333329" w="90" collapsed="false">0OHZATP</comment><script x="414" y="10"><block s="receiveMessage"><l>Start</l></block><block s="doWarp"><script><block s="gotoXY"><l>-235</l><block s="reportDifference"><block s="yPosition"></block><l>20</l></block></block><block s="write"><l>Chat in this place by pressing SPACE</l><l>20</l></block><block s="gotoXY"><l>-235</l><block s="reportDifference"><block s="yPosition"></block><l>40</l></block></block><block s="write"><block s="reportJoinWords"><list><l>Server Name: </l><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>name</l></list></custom-block></custom-block></list></block><l>18</l></block><block s="gotoXY"><l>-235</l><block s="reportDifference"><block s="yPosition"></block><l>20</l></block></block><block s="write"><block s="reportJoinWords"><list><l>Server Description: </l><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>description</l></list></custom-block></custom-block></list></block><l>18</l></block><block s="gotoXY"><l>-240</l><l>-180</l></block></script></block><block s="doForever"><script><custom-block s="refresh"></custom-block><block s="doWait"><l>0.5</l></block></script></block></script><script x="410" y="406.6666666666665"><block s="receiveMessage"><l>Start</l></block><block s="doForever"><script><block s="doIf"><block s="reportKeyPressed"><l><option>space</option></l></block><script><custom-block s="show var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>chat</l></list></custom-block></custom-block><block s="doAsk"><l>Message to send:</l></block><block s="doWarp"><script><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block><block s="reportJoinWords"><list><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block></custom-block><custom-block s="get api date with milliseconds? %b"><l><bool>false</bool></l></custom-block><custom-block s="string list separator %s"><l>rows</l></custom-block></list></block></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block><block s="reportJoinWords"><list><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block></custom-block><block s="reportJoinWords"><list><custom-block s="setting %s"><l>User</l></custom-block><l>: </l><block s="getLastAnswer"></block></list></block><custom-block s="string list separator %s"><l>rows</l></custom-block></list></block></custom-block></script></block></script></block></script></block></script><script x="410" y="741.3333333333331"><block s="receiveMessage"><l>Start</l></block><block s="doForever"><script><block s="doIf"><block s="reportNot"><block s="reportIsIdentical"><custom-block s="list $arrowRight sentence %l"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><custom-block s="empty sentence? %txt"><l></l></custom-block></block></autolambda><list></list></block><block s="reportTextSplit"><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block></custom-block><custom-block s="string list separator %s"><l>rows</l></custom-block></block></block></custom-block><custom-block s="list $arrowRight sentence %l"><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>chat</l></list></custom-block></custom-block></custom-block></block></block><script><block s="doWarp"><script><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>chat</l></list></custom-block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><custom-block s="empty sentence? %txt"><l></l></custom-block></block></autolambda><list></list></block><block s="reportTextSplit"><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block></custom-block><custom-block s="string list separator %s"><l>rows</l></custom-block></block></block></custom-block></script></block></script></block><block s="doWait"><l>0.05</l></block></script></block></script></scripts></sprite><watcher var="temp_server_player_list" style="normal" x="10" y="10" color="243,118,29" extX="80" extY="70"/><watcher var="temp_chat" style="normal" x="166" y="9.000001999999995" color="243,118,29" extX="160" extY="80"/></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="clour var %&apos;name&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSayFor"><l>Snapextention antispam waiting...</l><l>0.5</l></block><block s="doReport"><custom-block s="sub %s"><block s="reportURL"><block s="reportJoinWords"><list><l>snapextensions.uni-goettingen.de/handleTextfile.php?type=read&amp;filename=./textfiles/</l><block s="reportJoinWords"><list><block var="name"/><l>_id_</l><custom-block s="cloud id"></custom-block></list></block><l>.txt</l></list></block></block></custom-block></block></script></block-definition><block-definition s="cloud id" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l></l></list><l>return cloudid;</l></block><list></list></block></block></script></block-definition><block-definition s="sub %&apos;data&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>answer</l></list><l> return answer.substring(0, answer.length - 1);</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="cloud id %&apos;name&apos;" type="command" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>a</l></list><l>cloudid = a</l></block><list><block var="name"/></list></block></script></block-definition><block-definition s="set cloud var %&apos;name&apos; to %&apos;name2&apos;" type="command" category="sensing"><header></header><code>onlvar &lt;#1&gt; = (&lt;#2&gt;)</code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="ignore %s"><block s="reportURL"><block s="reportJoinWords"><list><l>snapextensions.uni-goettingen.de/handleTextfile.php?type=write&amp;content=</l><block var="name2"/><l>&amp;filename=./textfiles/</l><block s="reportJoinWords"><list><block var="name"/><l>_id_</l><custom-block s="cloud id"></custom-block></list></block><l>.txt</l></list></block></block></custom-block><block s="doSayFor"><l>Snapextention antispam waiting...</l><l>0.5</l></block></script></block-definition><block-definition s="ignore %&apos;x&apos;" type="command" category="control"><header></header><code></code><translations>de:ignoriere _&#xD;ca:ignora _&#xD;es:ignorar _&#xD;fr:ignore _&#xD;pt:ignora _&#xD;</translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="string list separator %&apos;type&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>rows&#xD;collums</options></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="type"/><l>rows</l></block><l>{&lt;a||a&gt;}</l><l>(&lt;b||b&gt;)</l></block></block></script></block-definition><block-definition s="setting %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows reading global settings programmatically.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:o valor da configuração _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;User&#xD;Presentation mode&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support&#xD;Visible palette</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    ide = stage.parentThatIsA(IDE_Morph),&#xD;    world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        return ide.projectNotes;&#xD;    case &apos;Project name&apos;:&#xD;        return ide.projectName;&#xD;    case &apos;User&apos;:&#xD;        return ide.cloud.username;&#xD;    case &apos;Presentation mode&apos;:&#xD;        return ide.isAppMode;&#xD;    case &apos;Language&apos;:&#xD;        return SnapTranslator.language;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        return SyntaxElementMorph.prototype.scale;&#xD;    case &apos;Stage size&apos;:&#xD;        return new List([StageMorph.prototype.dimensions.x,&#xD;                                   StageMorph.prototype.dimensions.y]);&#xD;    case &apos;Stage scale&apos;:&#xD;       return stage.scale;&#xD;    case &apos;Retina display support&apos;:&#xD;        return isRetinaEnabled();&#xD;    case &apos;Long form input dialog&apos;:&#xD;        return InputSlotDialogMorph.prototype.isLaunchingExpanded;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        return BlockLabelPlaceHolderMorph.prototype.plainLabel;&#xD;    case &apos;Input sliders&apos;:&#xD;        return MorphicPreferences.useSliderForInput;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        return ArgMorph.prototype.executeOnSliderEdit;&#xD;    case &apos;Clicking sound&apos;:&#xD;        return !!BlockMorph.prototype.snapSound;&#xD;    case &apos;Turbo mode&apos;:&#xD;        return stage.isFastTracked;&#xD;    case &apos;Flat design&apos;:&#xD;        return MorphicPreferences.isFlat;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        return !!this.scripts.focus;&#xD;    case &apos;Visible stepping&apos;:&#xD;        return Process.prototype.enableSingleStepping;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        return stage.isThreadSafe;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        return StageMorph.prototype.frameRate &gt; 0;&#xD;    case &apos;Flat line ends&apos;:&#xD;        return SpriteMorph.prototype.useFlatLineEnds;&#xD;    case &apos;Codification support&apos;:&#xD;        return StageMorph.prototype.enableCodeMapping;&#xD;    case &apos;Inheritance support&apos;:&#xD;        return StageMorph.prototype.enableInheritance;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        return Process.prototype.enableHyperOps;&#xD;    default: return which;&#xD;    case &apos;Visible palette&apos;:&#xD;        return ide.currentCategory;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="set flag %&apos;which&apos; to %&apos;tf&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for Boolean (checkbox) settings; use&#xD;SET VALUE for numeric or text values.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Presentation mode&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support</options></input><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>tf</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph),&#xD;        thisObj = this;&#xD;&#xD;if (tf != !!tf) return;&#xD;&#xD;try{&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Presentation mode&apos;:&#xD;        if (tf != ide.isAppMode) ide.toggleAppMode();&#xD;        break;&#xD;    case &apos;Retina display support&apos;:&#xD;        if (tf != isRetinaEnabled()) ide.toggleRetina();&#xD;        break;&#xD;    case &apos;Long form input dialog&apos;:&#xD;        if (tf != InputSlotDialogMorph.prototype.isLaunchingExpanded)&#xD;            ide.toggleLongFormInputDialog();&#xD;        break;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        if (tf != BlockLabelPlaceHolderMorph.prototype.plainLabel)&#xD;            ide.togglePlainPrototypeLabels();&#xD;        break;&#xD;    case &apos;Input sliders&apos;:&#xD;        MorphicPreferences.useSliderForInput = tf;&#xD;        break;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        ArgMorph.prototype.executeOnSliderEdit = tf;&#xD;        break;&#xD;    case &apos;Clicking sound&apos;:&#xD;        if (tf != !!BlockMorph.prototype.snapSound)&#xD;            BlockMorph.prototype.toggleSnapSound();&#xD;        break;&#xD;    case &apos;Turbo mode&apos;:&#xD;        if (tf != stage.isFastTracked)&#xD;            ide.toggleFastTracking();&#xD;        break;&#xD;    case &apos;Flat design&apos;:&#xD;        if (tf == MorphicPreferences.isFlat) break;&#xD;        if (tf)&#xD;            ide.flatDesign();&#xD;        else&#xD;            ide.defaultDesign();&#xD;        break;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        if (thisObj.scripts.focus &amp;&amp; !tf) {&#xD;            thisObj.scripts.focus.stopEditing();&#xD;        } else if (tf &amp;&amp; !thisObj.scripts.focus) {&#xD;            thisObj.scripts.toggleKeyboardEntry();&#xD;        };&#xD;        break;&#xD;    case &apos;Visible stepping&apos;:&#xD;        if (tf != Process.prototype.enableSingleStepping)&#xD;            ide.toggleSingleStepping();&#xD;        break;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        stage.isThreadSafe = tf;&#xD;        break;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        if (tf != (StageMorph.prototype.frameRate &gt; 0))&#xD;            ide.toggleVariableFrameRate();&#xD;        break;&#xD;    case &apos;Flat line ends&apos;:&#xD;        SpriteMorph.prototype.useFlatLineEnds = tf;&#xD;        break;&#xD;    case &apos;Codification support&apos;:&#xD;        if (tf != StageMorph.prototype.enableCodeMapping) {&#xD;            StageMorph.prototype.enableCodeMapping = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Inheritance support&apos;:&#xD;        if (tf != StageMorph.prototype.enableInheritance) {&#xD;            StageMorph.prototype.enableInheritance = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        Process.prototype.enableHyperOps = tf;&#xD;        break;&#xD;};&#xD;}&#xD;finally {&#xD;ide.savingPreferences = false;&#xD;};&#xD;</l></block><list><block var="which"/><block var="tf"/></list></block></script></block-definition><block-definition s="set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for numeric or text settings; use&#xD;SET FLAG for Boolean (checkbox) values.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Visible palette</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>value</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;try {&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        ide.projectNotes = value;&#xD;        break;&#xD;    case &apos;Project name&apos;:&#xD;        ide.setProjectName(value);&#xD;        break;&#xD;    case &apos;Language&apos;:&#xD;        ide.setLanguage(value);&#xD;        break;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        if (!isNaN(value)) ide.setBlocksScale(Math.min(value, 12));&#xD;        break;&#xD;    case &apos;Stage size&apos;:&#xD;        if ((value instanceof List) &amp;&amp; value.length()==2&#xD;                       &amp;&amp; !isNaN(value.at(1)) &amp;&amp; !isNaN(value.at(2)))&#xD;            ide.setStageExtent(new Point(value.at(1), value.at(2)));&#xD;        break;&#xD;    case &apos;Stage scale&apos;:&#xD;        ide.toggleStageSize(value != 1, Math.max(0.1, value));&#xD;        break;&#xD;    case &apos;Visible palette&apos;:&#xD;        ide.currentCategory = value.toLowerCase();&#xD;        ide.categories.children.forEach(function (each) {&#xD;                each.refresh();&#xD;        });&#xD;        ide.refreshPalette(true);&#xD;        break;&#xD;};&#xD;}&#xD;finally {ide.savingPreferences = true;&#xD;};</l></block><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="create %&apos;scope&apos; var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>script</l></block><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (!proc.homeContext.variables.vars[varName]) proc.homeContext.variables.addVar(varName);</l></block><list><block var="each item"/></list></block></script></block></script><script><block s="doDeclareVariables"><list><l>global</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>sprite</l></block><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>global</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (global &amp;&amp; !proc.homeContext.variables.parentFrame.parentFrame.vars[varName]) this.addVariable(varName, true);&#xD;if (!global &amp;&amp; !proc.homeContext.variables.parentFrame.vars[varName]) this.addVariable(varName, false);</l></block><list><block var="each item"/><block var="global"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block></script></block-definition><block-definition s="delete var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="217" collapsed="false">This block deletes all the variables with the names given (inside input list).&#xD;&#xD;Each name will make only one variable deletion, and this will be the variable found following the scope order: &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;If we have a &quot;testing&quot; sprite variable and also a &quot;testing&quot; global one, deleting &quot;testing&quot; will delete only the sprite one (Yes! we can also do &quot;delete var (testing, testing)&quot; to delete both.&#xD;&#xD;If one variable does not exists (in any scope) an error happens, stopping block action in that point. You can check it before with the &quot;does var (name) exists?&quot;block. </comment><header></header><code></code><translations>pt:remove as variáveis _&#xD;ca:esborra les variables _&#xD;es:borrar variables _&#xD;de:löschen var _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (typeof proc.homeContext.variables.vars[varName] !== &apos;undefined&apos;) {&#xD;    delete proc.homeContext.variables.vars[varName];&#xD;} else if (this.deletableVariableNames().indexOf(varName) != -1) {&#xD;    this.deleteVariable(varName);&#xD;} else {&#xD;    throw new Error("variable doesn&apos;t exist: " + varName);&#xD;}</l></block><list><block var="each item"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block-definition><block-definition s="set var %&apos;name&apos; to %&apos;value&apos;" type="command" category="variables"><comment x="0" y="0" w="240.4931640625" collapsed="false">This block sets the given value (last input) to the variable named with the name givent (var input).&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>ca:assigna a _ el valor _&#xD;es:asignar a _ el valor _&#xD;pt:altera _ para _&#xD;de:setze var _ auf _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>value</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;proc.homeContext.variables.setVar(varName, value);</l></block><list><block var="name"/><block var="value"/></list></block></script></block-definition><block-definition s="var %&apos;name&apos;" type="reporter" category="variables"><comment x="0" y="0" w="178.00000000000003" collapsed="false">This block reports the value of the variable with the name given.&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>pt:o valor de _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.getVar(varName);</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="does var %&apos;name&apos; exist?" type="predicate" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block reports &quot;true&quot; if there is a variable with this given name (input slot) in that context.&#xD;&#xD;It can be a global, sprite or script variable.&#xD;&#xD;Otherwise it reports &quot;false&quot;.</comment><header></header><code></code><translations>pt:a variável _ existe&#xD;ca:existeix la variable _ ?&#xD;es:existe la variable _ ?&#xD;de:existiert var _ ?&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.silentFind(varName)? true:false;</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="show var %&apos;name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns on (show) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:mostra la variable _&#xD;es:mostrar variable _&#xD;pt:mostra a variável _&#xD;de:zeige var _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><block var="name"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>    var varFrame = proc.homeContext.variables,&#xD;        stage,&#xD;        watcher,&#xD;        target,&#xD;        label,&#xD;        others,&#xD;        isGlobal,&#xD;        name = varName;&#xD;&#xD;    if (name instanceof Context) {&#xD;        if (name.expression.selector === &apos;reportGetVar&apos;) {&#xD;            name = name.expression.blockSpec;&#xD;        } else {&#xD;            proc.doChangePrimitiveVisibility(name.expression, false);&#xD;            return;&#xD;        }&#xD;    }&#xD;    if (proc.homeContext.receiver) {&#xD;        stage = proc.homeContext.receiver.parentThatIsA(StageMorph);&#xD;        if (stage) {&#xD;            target = varFrame.silentFind(name);&#xD;            if (!target) {return; }&#xD;            // first try to find an existing (hidden) watcher&#xD;            watcher = detect(&#xD;                stage.children,&#xD;                morph =&gt; morph instanceof WatcherMorph &amp;&amp;&#xD;                    morph.target === target &amp;&amp;&#xD;                        morph.getter === name&#xD;            );&#xD;            if (watcher !== null) {&#xD;                watcher.show();&#xD;                watcher.fixLayout(); // re-hide hidden parts&#xD;                return;&#xD;            }&#xD;            // if no watcher exists, create a new one&#xD;            isGlobal = contains(&#xD;                proc.homeContext.receiver.globalVariables().names(),&#xD;                varName&#xD;            );&#xD;            if (isGlobal || target.owner) {&#xD;                label = name;&#xD;            } else {&#xD;                label = name + &apos; &apos; + localize(&apos;(temporary)&apos;);&#xD;            }&#xD;            watcher = new WatcherMorph(&#xD;                label,&#xD;                SpriteMorph.prototype.blockColor.variables,&#xD;                target,&#xD;                name&#xD;            );&#xD;            watcher.setPosition(stage.position().add(10));&#xD;            others = stage.watchers(watcher.left());&#xD;            if (others.length &gt; 0) {&#xD;                watcher.setTop(others[others.length - 1].bottom());&#xD;            }&#xD;            stage.add(watcher);&#xD;            watcher.fixLayout();&#xD;        }&#xD;    }</l></block><list><block var="name"/></list></block></script></block></script></block-definition><block-definition s="hide var %&apos;name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns off (hide) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:amaga la variable _&#xD;es:esconder variable _&#xD;pt:esconde a variável _&#xD;de:verstecke var _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><block var="name"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>    // to delete all temporary watchers, use the primitive "hide" with no inputs&#xD;    var varFrame = proc.homeContext.variables,&#xD;        stage,&#xD;        watcher,&#xD;        target,&#xD;        name = varName;&#xD;&#xD;    if (name instanceof Context) {&#xD;        if (name.expression.selector === &apos;reportGetVar&apos;) {&#xD;            name = name.expression.blockSpec;&#xD;        } else {&#xD;            proc.doChangePrimitiveVisibility(name.expression, true);&#xD;            return;&#xD;        }&#xD;    }&#xD;    if (!name) {&#xD;        proc.doRemoveTemporaries();&#xD;        return;&#xD;    }&#xD;    if (proc.homeContext.receiver) {&#xD;        stage = proc.homeContext.receiver.parentThatIsA(StageMorph);&#xD;        if (stage) {&#xD;            target = varFrame.find(name);&#xD;            watcher = detect(&#xD;                stage.children,&#xD;                morph =&gt; morph instanceof WatcherMorph &amp;&amp;&#xD;                    morph.target === target &amp;&amp;&#xD;                        morph.getter === name&#xD;            );&#xD;            if (watcher !== null) {&#xD;                if (watcher.isTemporary()) {&#xD;                    watcher.destroy();&#xD;                } else {&#xD;                    watcher.hide();&#xD;                }&#xD;            }&#xD;        }&#xD;    }&#xD;</l></block><list><block var="name"/></list></block></script></block></script></block-definition><block-definition s="all but first letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="199" collapsed="false">Takes a text string as input, and reports a new text string containing all but the first character of the input.</comment><header></header><code></code><translations>pt:_ sem o primeiro caractere&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="all but first letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l></list><l>return str.slice(1);</l></block><list><custom-block s="require nonempty %s %s"><block var="string"/><l>All but first of empty word.</l></custom-block></list></block></block></script><scripts><script x="11.333333333333334" y="249.0000000000001"><block s="doWarp"><script><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></scripts></block-definition><block-definition s="all but first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="223.000001" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the first word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE➞LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a primeira palavra&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>All but first of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportCDR"><block var="sentence"/></block></block></script></block></script></block><block s="doReport"><custom-block s="list $arrowRight sentence %l"><block s="reportCDR"><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>All but first of empty sentence.</l></custom-block></block></custom-block></block></script><scripts><script x="13.333333333333334" y="368.8888888888889"><block s="doDeclareVariables"><list><l>index</l><l>bf</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bf</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>All but first of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doSetVar"><l>bf</l><block s="reportJoinWords"><list><block var="bf"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="bf"/></block></script></block></script></scripts></block-definition><block-definition s="all but last letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="218" collapsed="false">Takes a text string as input, and reports a new text string containing all but the last letter of the input.</comment><header></header><code></code><translations>pt:_ sem o último caractere&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="all but last letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l></list><l>return str.slice(0,-1);</l></block><list><custom-block s="require nonempty %s %s"><block var="string"/><l>All but last of empty word.</l></custom-block></list></block></block></script><scripts><script x="10" y="264.77777777777777"><block s="doWarp"><script><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></scripts></block-definition><block-definition s="all but last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the last word, with one space between words and no spaces at the beginning or end.  (Note: consider using SENTENCE-&gt;LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a última palavra&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>All but last of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>arr</l></list><l>return new List(arr.itemsArray().slice(0,-1));</l></block><list><block var="sentence"/></list></block></block></script></block></script></block><block s="doReport"><custom-block s="list $arrowRight sentence %l"><block s="evaluate"><block s="reportJSFunction"><list><l>arr</l></list><l>return new List(arr.asArray().slice(0,-1));</l></block><list><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>All but last of empty sentence.</l></custom-block></list></block></custom-block></block></script><scripts><script x="9.333333333333334" y="384.4444444444446"><block s="doDeclareVariables"><list><l>index</l><l>bl</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bl</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>All but last of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><l>1</l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportLessThan"><block var="index"/><l>1</l></block><script><block s="doSetVar"><l>bl</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="bl"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doReport"><block var="bl"/></block></script></block></script><script x="249" y="393.55555555555566"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="sentence"/></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="sentence"/></block></script></scripts></block-definition><block-definition s="first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="236" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the first word, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="sentence"/></block></block></script></block></script><script><block s="doReport"><block s="reportListItem"><l>1</l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>First of empty sentence.</l></custom-block></block></block></script></block></script><scripts><script x="9.333333333333334" y="345.5555555555555"><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></scripts></block-definition><block-definition s="last letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the last character in the string.</comment><header></header><code></code><translations>pt:o último caractere de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="last letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block><script><custom-block s="error %txt"><l>Last of empty word.</l></custom-block></script></block><block s="doReport"><block s="reportLetter"><block s="reportStringSize"><block var="word"/></block><block var="word"/></block></block></script></block-definition><block-definition s="last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="262" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the last word of the input, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a última palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="sentence"/></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script><script><block s="doReport"><block s="reportListItem"><l><option>last</option></l><block var="sentence"/></block></block></script></block></script></block><block s="doReport"><block s="reportListItem"><l><option>last</option></l><custom-block s="require nonempty %s %s"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block><l>Last of empty sentence.</l></custom-block></block></block></script><scripts><script x="25.333333333333332" y="276.22222222222223"><block s="doDeclareVariables"><list><l>index</l><l>last</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>last</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>Last of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block></script></block><block s="doReport"><block var="last"/></block></script></block></script></scripts></block-definition><block-definition s="empty word? %&apos;word&apos;" type="predicate" category="operators"><comment x="0" y="0" w="208" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><translations>pt:a palavra _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="empty word? %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block></block></script></block-definition><block-definition s="empty sentence? %&apos;sentence&apos;" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.</comment><header></header><code></code><translations>pt:a frase _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doIf"><block s="reportIsA"><block var="sentence"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportListIsEmpty"><block var="sentence"/></block></block></script></block><block s="doReport"><block s="reportListIsEmpty"><custom-block s="sentence $arrowRight list %txt"><block var="sentence"/></custom-block></block></block></script><scripts><script x="12" y="258"><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></script></scripts></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><comment x="0" y="0" w="230.66666666666666" collapsed="false">Like JOIN, takes any number of words (text strings) and reports a sentence with its inputs concatenated, but inserts a blank space between the inputs.&#xD;Consider using SENTENCE (Lists palette) instead.</comment><header></header><code></code><translations>de:füge Wörter zusammen _&#xD;ca:uneix les paraules _&#xD;es:unir las palabras _&#xD;fr:fusionne les mots _&#xD;pt:uma frase com as palavras _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="words"/></block><script><block s="doReport"><l></l></block></script></block><block s="doDeclareVariables"><list><l>first</l><l>bf</l></list></block><block s="doSetVar"><l>first</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="words"/></block><l><option>list</option></l></block><custom-block s="join words %mult%txt"><block s="reportListItem"><l>1</l><block var="words"/></block></custom-block><block s="reportListItem"><l>1</l><block var="words"/></block></block></block><block s="doSetVar"><l>bf</l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block><block s="doIf"><custom-block s="empty sentence? %txt"><block var="bf"/></custom-block><script><block s="doReport"><block var="first"/></block></script></block><block s="doIf"><custom-block s="empty sentence? %txt"><block var="first"/></custom-block><script><block s="doReport"><block var="bf"/></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block var="first"/><l> </l><block var="bf"/></list></block></block></script><scripts><script x="16.66666666666663" y="409.6666666666668"><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="words"/></block><l><option>list</option></l></block><script><block s="doIfElse"><custom-block s="empty sentence? %txt"><block var="first"/></custom-block><script><block s="doReport"><block var="bf"/></block></script><script><block s="doIfElse"><custom-block s="empty sentence? %txt"><block var="bf"/></custom-block><script><block s="doReport"><block var="first"/></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block var="first"/><l> </l><block var="bf"/></list></block></block></script></block></script></block></script></block><block s="doIf"><custom-block s="empty sentence? %txt"><block s="reportListItem"><l>1</l><block var="words"/></block></custom-block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportCDR"><block s="reportCDR"><block var="words"/></block></block></block></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><l> </l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></list></block></block></script></scripts></block-definition><block-definition s="list $arrowRight sentence %&apos;data&apos;" type="reporter" category="operators"><comment x="0" y="0" w="165.33333333333334" collapsed="false">Takes a sentence in list form and reports the sentence as a text string.</comment><header></header><code></code><translations>de:Liste $arrowRight Satz _&#xD;ca:llista $arrowRight frase _&#xD;es:lista $arrowRight frase _&#xD;fr:liste $arrowRight phrase _&#xD;pt:uma frase com as palavras em _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="join words %mult%txt"><block var="data"/></custom-block></block></script></block-definition><block-definition s="word $arrowRight list %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="146.42857142857144" collapsed="false">report a list in which each item is one letter from the input word</comment><header></header><code></code><translations>de:Wort $arrowRight Liste _&#xD;ca:paraula $arrowRight llista _&#xD;es:palabra $arrowRight lista _&#xD;fr:mot $arrowRight liste _&#xD;pt:uma lista com os caracteres da palavra _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="word $arrowRight list %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script></block><block s="doReport"><block s="reportTextSplit"><block var="word"/><l><option>letter</option></l></block></block></script></block-definition><block-definition s="list $arrowRight word %&apos;list&apos;" type="reporter" category="operators"><comment x="0" y="0" w="158.57142857142858" collapsed="false">join all the items of the input list&#xD;into a single word, and report it</comment><header></header><code></code><translations>de:Liste $arrowRight Wort _&#xD;ca:llista $arrowRight paraula _&#xD;es:lista $arrowRight palabra _&#xD;fr:liste $arrowRight mot _&#xD;pt:uma palavra com os caracteres em _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><block var="list"/></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportIsA"><l></l><l><option>list</option></l></block></autolambda><list></list></block><block var="list"/></block><l></l></block><script><block s="doReport"><block s="reportJoinWords"><block var="list"/></block></block></script></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><block s="reportNewList"><list><custom-block s="list $arrowRight word %l"><l/></custom-block></list></block><l></l></block></autolambda><list></list></block><block var="list"/></block></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="require nonempty %&apos;text&apos; %&apos;message&apos;" type="reporter" category="operators"><comment x="0" y="0" w="220" collapsed="false">Helper function for word/sentence library.&#xD;Reports its first input, unless that input is empty, in which case it gives its second input as an error message.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doIfElse"><block s="reportIfElse"><block s="reportIsA"><block var="text"/><l><option>list</option></l></block><block s="reportListIsEmpty"><block var="text"/></block><block s="reportEquals"><block s="reportStringSize"><block var="text"/></block><l>0</l></block></block><script><custom-block s="error %txt"><block var="message"/></custom-block></script><script><block s="doReport"><block var="text"/></block></script></block></script></block-definition><block-definition s="first letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the first character in the string.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="word"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="first letter of %txt"><l></l></custom-block></autolambda><list></list></block><block var="word"/></block></block></script><script><block s="doReport"><block s="reportLetter"><l>1</l><custom-block s="require nonempty %s %s"><block var="word"/><l>First of empty word.</l></custom-block></block></block></script></block></script><scripts><script x="14.666666666666666" y="232.8888888888888"><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><custom-block s="error %txt"><l>First of empty sentence.</l></custom-block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></scripts></block-definition><block-definition s="refresh" type="command" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIf"><block s="reportEquals"><block s="reportModulus"><block s="reportDate"><l><option>second</option></l></block><l>2</l></block><l>0</l></block><script><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l>server_player_list</l></list></custom-block><block s="reportCONS"><block s="reportJoinWords"><list><l>Users: </l><block s="reportListAttribute"><l><option>length</option></l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><custom-block s="empty sentence? %txt"><l></l></custom-block></block></autolambda><list></list></block><custom-block s="$flash remove duplicates from %l"><block s="reportTextSplit"><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>playerlist</l></list></custom-block></custom-block><custom-block s="string list separator %s"><l>rows</l></custom-block></block></custom-block></block></block></list></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><custom-block s="empty sentence? %txt"><l></l></custom-block></block></autolambda><list></list></block><custom-block s="$flash remove duplicates from %l"><block s="reportTextSplit"><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>playerlist</l></list></custom-block></custom-block><custom-block s="string list separator %s"><l>rows</l></custom-block></block></custom-block></block></block></custom-block></script></block><block s="doIfElse"><block s="reportEquals"><block s="reportModulus"><block s="reportDate"><l><option>second</option></l></block><l>2</l></block><l>0</l></block><script><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>playerlist</l></list></custom-block><block s="reportJoinWords"><list><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>playerlist</l></list></custom-block></custom-block><custom-block s="string list separator %s"><l>rows</l></custom-block><custom-block s="setting %s"><l>User</l></custom-block></list></block></custom-block></script><script><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>playerlist</l></list></custom-block><l></l></custom-block></script></block><block s="doSayFor"><l>Snapextention antispam waiting...</l><l>0.25</l></block></script></block-definition><block-definition s="generate server id" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="create %s var %mult%txt"><l>script</l><list><custom-block s="script join %s %mult%s"><l>local</l><list><l></l></list></custom-block></list></custom-block><block s="doWarp"><script><block s="doRepeat"><l>6</l><script><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>local</l><list><l></l></list></custom-block><block s="reportJoinWords"><list><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>local</l><list><l></l></list></custom-block></custom-block><block s="reportUnicodeAsLetter"><custom-block s="pseudo pick random %n to %n with seed %n"><l>65</l><l>90</l><block s="reportRound"><block s="reportMonadic"><l><option>abs</option></l><block s="reportProduct"><block s="reportMonadic"><l><option>sin</option></l><block s="reportQuotient"><block s="reportDate"><l><option>time in milliseconds</option></l></block><l>384</l></block></block><l>360</l></block></block></block></custom-block></block></list></block></custom-block><block s="doWait"><l>0.1</l></block></script></block></script></block><block s="doReport"><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>local</l><list><l></l></list></custom-block></custom-block></block></script></block-definition><block-definition s="pseudo pick random %&apos;1&apos; to %&apos;2&apos; with seed %&apos;3&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><custom-block s="create %s var %mult%txt"><l>script</l><list><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></list></custom-block><block s="doWarp"><script><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block><block s="reportSum"><block s="reportProduct"><block var="1"/><block var="2"/></block><block var="3"/></block></custom-block><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block><block s="reportModulus"><block s="reportRound"><block s="reportSum"><block s="reportProduct"><block s="reportMonadic"><l><option>cos</option></l><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></custom-block></block><l>90</l></block><block s="reportProduct"><block s="reportMonadic"><l><option>tan</option></l><block s="reportSum"><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></custom-block><l>1</l></block></block><l>45</l></block></block></block><l>256</l></block></custom-block><custom-block s="set var %s to %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block><block s="reportModulus"><block s="reportRound"><block s="reportSum"><block s="reportProduct"><block s="reportMonadic"><l><option>sin</option></l><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></custom-block></block><l>360</l></block><block s="reportProduct"><block s="reportMonadic"><l><option>tan</option></l><block s="reportDifference"><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></custom-block><l>1</l></block></block><l>45</l></block></block></block><l>256</l></block></custom-block><block s="doReport"><block s="reportListItem"><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></custom-block><block s="reportListItem"><custom-block s="var %s"><custom-block s="script join %s %mult%s"><l>temp</l><list><l></l></list></custom-block></custom-block><block s="reportReshape"><block s="reportNumbers"><block var="1"/><block var="2"/></block><list><l>256</l><l>256</l></list></block></block></block></block></script></block></script></block-definition><block-definition s="script join %&apos;type&apos; %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>local&#xD;server&#xD;temp</options></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block var="type"/><l>_</l><custom-block s="list $arrowRight word %l"><block var="data"/></custom-block></list></block></block></script></block-definition><block-definition s="multiline %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o texto multilinha _&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="substring of %&apos;string&apos; before %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="175.33333333333334" collapsed="false">Reports the part of the first string up to the first instance of the second string inside it.  If the second string isn&apos;t found, reports the entire first string.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());&#xD;    if (index&lt;0) {return string};&#xD;    return string.slice(0,index);&#xD;} else {&#xD;    var index=string.indexOf(marker);&#xD;    if (index&lt;0) {return string};&#xD;    return string.slice(0,index);&#xD;}</l></block><list><block var="string"/><block var="marker"/></list></block></block></script></block-definition><block-definition s="substring of %&apos;string&apos; after %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="203.33333333333334" collapsed="false">Reports the portion of the first input string starting after the first occurrence of the second string.  If the second string isn&apos;t found in the first string, reports an empty string.</comment><header></header><code></code><translations>pt:o texto de _ depois de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l><l>markerlength</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());&#xD;    if (index&lt;0) {return ""};&#xD;    return string.slice(index+markerlength);&#xD;} else {&#xD;    var index=string.indexOf(marker);&#xD;    if (index&lt;0) {return ""};&#xD;    return string.slice(index+markerlength);&#xD;}</l></block><list><block var="string"/><block var="marker"/><block s="reportStringSize"><block var="marker"/></block></list></block></block></script></block-definition><block-definition s="position of %&apos;small&apos; in %&apos;large&apos;" type="reporter" category="operators"><comment x="0" y="0" w="294" collapsed="false">Reports the character position (starting from 1) of the beginning of the first input string inside the second input string.&#xD;If it&apos;s not found, reports 0.</comment><header></header><code></code><translations>pt:a posição de _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>sub</l><l>sup</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    return 1+sup.toLocaleLowerCase().indexOf(sub.toLocaleLowerCase());&#xD;} else {&#xD;    return 1+sup.indexOf(sub);&#xD;}</l></block><list><block var="small"/><block var="large"/></list></block></block></script></block-definition><block-definition s="use case-independent comparisons %&apos;tf&apos;" type="command" category="operators"><comment x="0" y="0" w="225.33333333333334" collapsed="false">If input is TRUE, comparisons made by functions in the string library will be case-independent (so &quot;FOO&quot; = &quot;foo&quot;).  This is the default.&#xD;If input is FALSE, comparisons will be exact.</comment><header></header><code></code><translations>pt:altera comparações ignorando distinção minúsculas/maiúsculas para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>flag</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;world[&apos;stringLibCaseIndependentComparison&apos;] = flag;</l></block><list><block var="tf"/></list></block></script></block-definition><block-definition s="substring of %&apos;str&apos; from position %&apos;start&apos; to position %&apos;end&apos; inclusive" type="reporter" category="operators"><comment x="0" y="0" w="297.3333333333333" collapsed="false">Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1).  If the third input is empty, reports the portion from the first position to the end of the string.&#xD;If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.</comment><header></header><code></code><translations>pt:o texto de _ entre as posições _ e _ , inclusive&#xD;</translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l><l>start</l><l>end</l></list><l>if (end != "") {&#xD;    return str.slice(start-1,end);&#xD;} else {&#xD;    return str.slice(start-1);&#xD;}</l></block><list><block var="str"/><block var="start"/><block var="end"/></list></block></block></script></block-definition><block-definition s="text %&apos;string&apos; contains %&apos;marker&apos;" type="predicate" category="operators"><comment x="0" y="0" w="218" collapsed="false">Reports True if the first input string contains the second input string, otherwise false.&#xD;&#xD;Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());&#xD;    return !(index&lt;0);&#xD;} else {&#xD;    var index=string.indexOf(marker);&#xD;    return !(index&lt;0);&#xD;}</l></block><list><block var="string"/><block var="marker"/></list></block></block></script></block-definition><block-definition s="to lower case %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="275.3333333333333" collapsed="false">Reports the input text with lower case letters instead of capital letters in the input.  Uses the user&apos;s locale&apos;s rules for case conversion.</comment><header></header><code></code><translations>pt:em minúsculas _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>text</l></list><l>return text.toLocaleLowerCase();</l></block><list><block var="text"/></list></block></block></script></block-definition><block-definition s="get api date with milliseconds? %&apos;bool&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%b"></input></inputs><script><block s="doWarp"><script><block s="doIfElse"><block var="bool"/><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportDate"><l><option>year</option></l></block><l>-</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>month</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>month</option></l></block></list></block><block s="reportDate"><l><option>month</option></l></block></block><l>-</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>date</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>date</option></l></block></list></block><block s="reportDate"><l><option>date</option></l></block></block><l>T</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>hour</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>hour</option></l></block></list></block><block s="reportDate"><l><option>hour</option></l></block></block><l>:</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>minute</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>minute</option></l></block></list></block><block s="reportDate"><l><option>minute</option></l></block></block><l>:</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>second</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>second</option></l></block></list></block><block s="reportDate"><l><option>second</option></l></block></block><l>.</l><custom-block s="substring of %txt from position %n to position %n inclusive"><block s="reportJoinWords"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block></list></block><block s="reportJoinWords"><list><block s="reportDifference"><block s="reportStringSize"><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><l>2</l></block></list></block><block s="reportJoinWords"><list><block s="reportStringSize"><block s="reportDate"><l><option>time in milliseconds</option></l></block></block></list></block></custom-block><l>Z</l></list></block></block></script><script><block s="doReport"><block s="reportJoinWords"><list><block s="reportDate"><l><option>year</option></l></block><l>-</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>month</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>month</option></l></block></list></block><block s="reportDate"><l><option>month</option></l></block></block><l>-</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>date</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>date</option></l></block></list></block><block s="reportDate"><l><option>date</option></l></block></block><l>T</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>hour</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>hour</option></l></block></list></block><block s="reportDate"><l><option>hour</option></l></block></block><l>:</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>minute</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>minute</option></l></block></list></block><block s="reportDate"><l><option>minute</option></l></block></block><l>:</l><block s="reportIfElse"><block s="reportEquals"><block s="reportStringSize"><block s="reportDate"><l><option>second</option></l></block></block><l>1</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDate"><l><option>second</option></l></block></list></block><block s="reportDate"><l><option>second</option></l></block></block></list></block></block></script></block></script></block></script></block-definition><block-definition s="create server: name %&apos;name&apos; description %&apos;description&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><custom-block s="cloud id %s"><custom-block s="generate server id"></custom-block></custom-block><block s="doWarp"><script><block s="doIfElse"><custom-block s="text %txt contains %txt"><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>id</l></list></custom-block></custom-block><l>ERROR</l></custom-block><script><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>id</l></list></custom-block><custom-block s="cloud id"></custom-block></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>name</l></list></custom-block><block var="name"/></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>description</l></list></custom-block><block var="description"/></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>creator</l></list></custom-block><custom-block s="setting %s"><l>User</l></custom-block></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>creation_</l><l>date</l></list></custom-block><custom-block s="get api date with milliseconds? %b"><l><bool>true</bool></l></custom-block></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>likes</l></list></custom-block><l>0</l></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>dislikes</l></list></custom-block><l>0</l></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>comments</l></list></custom-block><l></l></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>playerlist</l></list></custom-block><l></l></custom-block><custom-block s="set cloud var %s to %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>data</l></list></custom-block><l></l></custom-block><block s="gotoXY"><l>-235</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Server ID: </l><custom-block s="cloud id"></custom-block></list></block><l>20</l></block></script><script><block s="gotoXY"><l>-235</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Server Already Created At: </l><custom-block s="cloud id"></custom-block></list></block><l>20</l></block></script></block></script></block></script></block-definition><block-definition s="join server: %&apos;name&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><custom-block s="cloud id %s"><block var="name"/></custom-block><block s="doIfElse"><custom-block s="text %txt contains %txt"><custom-block s="clour var %s"><custom-block s="script join %s %mult%s"><l>server</l><list><l>_api_</l><l>server_</l><l>id</l></list></custom-block></custom-block><l>ERROR</l></custom-block><script><block s="gotoXY"><l>-235</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Server Not Found: </l><custom-block s="cloud id"></custom-block></list></block><l>20</l></block><block s="gotoXY"><l>-235</l><block s="reportDifference"><block s="yPosition"></block><l>20</l></block></block><block s="write"><l>Click the green flag to retry.</l><l>20</l></block><block s="doStopThis"><l><option>all</option></l></block></script><script><block s="gotoXY"><l>-235</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Found Server! </l><custom-block s="cloud id"></custom-block></list></block><l>20</l></block></script></block></script></block-definition><block-definition s="$flash remove duplicates from %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="209" collapsed="false">Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the first one is kept in the result.</comment><header></header><code></code><translations>ca:elimina els duplicats de _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListIndex"><block var="value"/><block var="list"/></block><block var="index"/></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block var="data"/></block></block></script><scripts><script x="14" y="164.2222222222222"><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIfElse"><block s="reportListContainsItem"><block s="reportCDR"><block var="data"/></block><block s="reportListItem"><l>1</l><block var="data"/></block></block><script><block s="doReport"><custom-block s="$flash remove duplicates from %l"><block s="reportCDR"><block var="data"/></block></custom-block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="$flash remove duplicates from %l"><block s="reportCDR"><block var="data"/></block></custom-block></block></block></script></block></script></block></script></scripts></block-definition><block-definition s="$flash sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists"><comment x="0" y="0" w="161.14285714285708" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations>ca:ordena _ segons criteri _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="data"/><block var="function"/></list></block></block></script><scripts><script x="12" y="147.55555555555557"><block s="doDeclareVariables"><list><l>even items</l><l>odd items</l><l>merge</l><l>split</l><l>copy of data</l><l>id</l></list></block><block s="doSetVar"><l>id</l><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block></block><block s="doSetVar"><l>copy of data</l><block s="reportMap"><block var="id"/><block var="data"/></block></block><block s="doSetVar"><l>split</l><block s="reifyScript"><script><block s="doSetVar"><l>even items</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>odd items</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportListIsEmpty"><block var="copy of data"/></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="odd items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="copy of data"/></block></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="even items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block></script></block></script></block></script><list></list></block></block><block s="doSetVar"><l>merge</l><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><block var="#1"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#2"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="#2"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#1"/></block></script></block><block s="doIfElse"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="reportListItem"><l>1</l><block var="#2"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="evaluate"><block var="merge"/><list><block s="reportCDR"><block var="#1"/></block><block var="#2"/></list></block></block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#2"/></block><block s="evaluate"><block var="merge"/><list><block var="#1"/><block s="reportCDR"><block var="#2"/></block></list></block></block></block></script></block></script><list><l>#1</l><l>#2</l></list></block></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doRun"><block var="split"/><list></list></block><block s="doReport"><block s="evaluate"><block var="merge"/><list><custom-block s="$flash sort %l ordering with %predRing"><block var="odd items"/><block var="function"/></custom-block><custom-block s="$flash sort %l ordering with %predRing"><block var="even items"/><block var="function"/></custom-block></list></block></block></script></scripts></block-definition><block-definition s="$flash assoc %&apos;key&apos; %&apos;a-list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="289.3333333333333" collapsed="false">The second input is an &quot;association list,&quot; a list of two-item lists.  Each of those smaller lists has a &quot;key&quot; as its first item and a &quot;value&quot; as its second.  ASSOC reports the first key-value pair in the association list whose key matches the first input.</comment><header></header><code></code><translations>ca:associació _ _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block><block var="a-list"/></block></block></script><scripts><script x="19.333333333333332" y="108.22222222222221"><block s="doIf"><block s="reportEquals"><block var="a-list"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></script></block><block s="doReport"><custom-block s="$flash assoc %s %l"><block var="key"/><block s="reportCDR"><block var="a-list"/></block></custom-block></block></script></scripts></block-definition><block-definition s="%&apos;#&apos; for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><comment x="0" y="0" w="228.57142857142858" collapsed="false">This block carries out the given script for each item of the given list, like the primitive FOR EACH.&#xD;&#xD;What&apos;s different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.</comment><header></header><code></code><translations>ca:_ per cada _ de _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doIfElse"><custom-block s="☠︎ linked? %l"><block var="data"/></custom-block><script><block s="doSetVar"><l>#</l><l>1</l></block><block s="doUntil"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block s="doRun"><block var="action"/><list></list></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block><block s="doChangeVar"><l>#</l><l>1</l></block></script></block></script><script><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="data"/></block></block><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><script><block s="doSetVar"><l>#</l><block var="i"/></block><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="data"/></block></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block></script></block></script></block-definition><block-definition s="☠︎ linked? %&apos;data&apos;" type="predicate" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>return data.isLinked;</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="☠︎ link %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><block s="reportCDR"><block var="data"/></block></block></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666666" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).&#xD;&#xD;Will not work on circular lists.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportAtomicCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="$flash zip %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="192" collapsed="false">ZIP takes any number of lists as inputs.  The lists should all be the same length.  ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc.&#xD;Viewing the inputs as the rows of a matrix, ZIP reports its transpose.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="lists"/></block><custom-block s="$flash zip %mult%l"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block var="lists"/></block></custom-block></block></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="lists"><comment x="0" y="0" w="105.33333333333333" collapsed="false">The identity function reports its input.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="multimap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="267.3333333333333" collapsed="false">Takes as input a function of N inputs and N lists.&#xD;The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on.  (The lists should all be the same length.)</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><custom-block s="%s"><l></l></custom-block></block></autolambda><list></list></block><custom-block s="$flash zip %mult%l"><block var="lists"/></custom-block></block></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="196" collapsed="false">Takes a sentence in text string form and reports the sentence as a list of its words.</comment><header></header><code></code><translations>de:Satz $arrowRight Liste _&#xD;ca:frase $arrowRight llista _&#xD;es:frase $arrowRight lista _&#xD;fr:phrase $arrowRight liste _&#xD;pt:uma lista com as palavras da frase _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportStringSize"><l></l></block><l>0</l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>whitespace</option></l></block></block></block></script></block-definition><block-definition s="$camera snap" type="reporter" category="sensing"><comment x="0" y="0" w="216" collapsed="false">takes a snapshot with the webcam and reports it as a new costume, or zero if the user cancels</comment><header></header><code></code><translations>pt:$camera a imagem actual do vídeo&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>test</l><l>pic</l></list></block><block s="doSetVar"><l>test</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>var camDialog,&#xD;    result = false;&#xD;&#xD;camDialog = new CamSnapshotDialogMorph(&#xD;    this.parentThatIsA(IDE_Morph),&#xD;    this,&#xD;    function () {result = null; },&#xD;    function (costume) {&#xD;        result = costume;&#xD;        this.close();&#xD;    }&#xD;);&#xD;&#xD;camDialog.key = &apos;camera&apos;;&#xD;camDialog.popUp(this.world());&#xD;return function () {return result; };</l></block><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reifyScript"><script><block s="doSetVar"><l>pic</l><block s="evaluate"><block var="test"/><list></list></block></block><block s="doReport"><block s="reportNot"><block s="reportEquals"><block var="pic"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></block></block></script><list></list></block><list></list></block></block><block s="doReport"><block var="pic"/></block></script></block-definition></blocks><variables><variable name="temp_server_player_list"><list struct="atomic" linked="linked" id="3796">Users: 1,paradock</list></variable><variable name="temp_chat"><list struct="atomic" id="3797">2021-05-07T19:22:02,paradock: hello,2021-05-07T19:22:22,paradock: anyone,2021-05-07T19:23:19,: im paradock as a guest,2021-05-07T19:25:05,rowimablox: test again,2021-05-07T19:28:02,paradock: TEST,2021-05-07T21:06:53,paradock: yes,2021-05-09T11:20:24,paradock: goldfish was a goldfish</list></variable></variables></project><media name="Online Test" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>