<snapdata remixID="12485352"><project name="3D Engine" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="3D Engine"><notes></notes><palette><category name="Graphics" color="0,116,143,1"/><category name="Vector math" color="0,116,143,1"/><category name="Music" color="195,0,204,1"/><category name="Misc" color="151,151,151,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="3D %&apos;x&apos; %&apos;y&apos; %&apos;z&apos; fov %&apos;fov&apos; to 2D" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="x"/><block var="fov"/></list></block><block var="z"/></block><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="y"/><block var="fov"/></list></block><block var="z"/></block></list></block></block></script></block-definition><block-definition s="Set color RGB %&apos;R&apos; %&apos;G&apos; %&apos;B&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><custom-block s="Make vec3 %s %s %s"><block var="R"/><block var="G"/><block var="B"/></custom-block></block></script></block-definition><block-definition s="Make vec3 %&apos;x&apos; %&apos;y&apos; %&apos;z&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="x"/><block var="y"/><block var="z"/></list></block></block></script></block-definition><block-definition s="vec3.x %&apos;vec3&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="vec3"/></block></block></script></block-definition><block-definition s="vec3.y %&apos;vec3&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="vec3"/></block></block></script><scripts><script x="20.9951171875" y="107.83333333333337"><block s="reportListItem"><l>2</l><block var="vec3"/></block></script></scripts></block-definition><block-definition s="vec3.z %&apos;vec3&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>3</l><block var="vec3"/></block></block></script></block-definition><block-definition s="make vec2 %&apos;x&apos; %&apos;y&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="vec2.x %&apos;vec2&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="vec2"/></block></block></script></block-definition><block-definition s="vec2.y %&apos;vec2&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="vec2"/></block></block></script></block-definition><block-definition s="rotate vec2 %&apos;vec2&apos; by %&apos;rot&apos;" type="reporter" category="Vector math"><variables><list struct="atomic" id="97">x,y</list></variables><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="rot"/><l>0</l></list></block><block s="reportVariadicEquals"><list><block var="rot"/><l>360</l></list></block></list></block><script><block s="doReport"><block var="vec2"/></block></script><list></list></block><block s="doSetVar"><l>x</l><block s="reportDifference"><block s="reportVariadicProduct"><list><custom-block s="vec2.x %l"><block var="vec2"/></custom-block><block s="reportMonadic"><l><option>cos</option></l><block var="rot"/></block></list></block><block s="reportVariadicProduct"><list><custom-block s="vec2.y %l"><block var="vec2"/></custom-block><block s="reportMonadic"><l><option>sin</option></l><block var="rot"/></block></list></block></block></block><block s="doSetVar"><l>y</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><custom-block s="vec2.x %l"><block var="vec2"/></custom-block><block s="reportMonadic"><l><option>sin</option></l><block var="rot"/></block></list></block><block s="reportVariadicProduct"><list><custom-block s="vec2.y %l"><block var="vec2"/></custom-block><block s="reportMonadic"><l><option>cos</option></l><block var="rot"/></block></list></block></list></block></block><block s="doReport"><custom-block s="make vec2 %s %s"><block var="x"/><block var="y"/></custom-block></block></script></block-definition><block-definition s="rotate vec3 %&apos;vec3&apos; by %&apos;rx&apos; %&apos;ry&apos; %&apos;rz&apos;" type="reporter" category="Vector math"><variables><list struct="atomic" id="182">x,y,z</list></variables><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>x</l><custom-block s="vec3.x %l"><block var="vec3"/></custom-block></block><block s="doSetVar"><l>y</l><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></block><block s="doSetVar"><l>z</l><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></block><custom-block s="// %s"><l>Z rot</l></custom-block><block s="doSetVar"><l>x</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></custom-block><block var="rz"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>y</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></custom-block><block var="rz"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><custom-block s="Set vec3 %l components to %s %s %s"><block var="vec3"/><block var="x"/><block var="y"/><block var="z"/></custom-block><custom-block s="// %s"><l>Y rot</l></custom-block><block s="doSetVar"><l>x</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><block var="ry"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>z</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><block var="ry"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><custom-block s="Set vec3 %l components to %s %s %s"><block var="vec3"/><block var="x"/><block var="y"/><block var="z"/></custom-block><block s="doSetVar"><l>y</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.y %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><block var="rx"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>z</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.y %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><block var="rx"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><custom-block s="// %s"><l>X rot</l></custom-block><block s="doReport"><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></block></script></block-definition><block-definition s="// %&apos;c&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs></block-definition><block-definition s="Plot %&apos;x&apos; %&apos;y&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><custom-block s="Make vec3 %s %s %s"><block var="r"/><block var="g"/><block var="b"/></custom-block></block><block s="gotoXY"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><block var="x"/><block s="getPenAttribute"><l><option>size</option></l></block></block></block><block s="getPenAttribute"><l><option>size</option></l></block></list></block><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><block var="y"/><block s="getPenAttribute"><l><option>size</option></l></block></block></block><block s="getPenAttribute"><l><option>size</option></l></block></list></block></block><block s="down"></block><block s="changeYPosition"><l>1</l></block><block s="changeXPosition"><l>1</l></block><block s="up"></block></script></block></script></block-definition><block-definition s="Set res to %&apos;res&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSetVar"><l>RES</l><block var="res"/></block><block s="setSize"><block var="res"/></block></script></block-definition><block-definition s="Line algorithim from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="Graphics"><variables><list struct="atomic" id="369">pixels,dx,x,dy,a,d</list></variables><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doSetVar"><l>d</l><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2 distance from %s %s to %s %s"><block var="x1"/><block var="y1"/><block var="x2"/><block var="y2"/></custom-block><block var="RES"/></block></block></block><block s="doSetVar"><l>dx</l><block var="x1"/></block><block s="doSetVar"><l>dy</l><block var="y1"/></block><block s="doSetVar"><l>a</l><l>0</l></block><block s="doSetVar"><l>pixels</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block s="reportMonadic"><l><option>abs</option></l><block var="d"/></block><script><block s="doSetVar"><l>dx</l><custom-block s="Lerp %s %s alpha %s"><block var="x1"/><block var="x2"/><block var="a"/></custom-block></block><block s="doSetVar"><l>dy</l><custom-block s="Lerp %s %s alpha %s"><block var="y1"/><block var="y2"/><block var="a"/></custom-block></block><custom-block s="Plot %s %s color %s %s %s"><block var="dx"/><block var="dy"/><block var="r"/><block var="g"/><block var="b"/></custom-block><block s="doAddToList"><block var="dx"/><block var="pixels"/></block><block s="doAddToList"><block var="dy"/><block var="pixels"/></block><block s="doChangeVar"><l>a</l><block s="reportQuotient"><l>1</l><block var="d"/></block></block></script></block></script></block></script></block-definition><block-definition s="vec2 distance from %&apos;x1&apos; %&apos;y1&apos; to %&apos;x2&apos; %&apos;y2&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportPower"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><l>2</l></block><block s="reportPower"><block s="reportDifference"><block var="y2"/><block var="y1"/></block><l>2</l></block></list></block></block></block></script></block-definition><block-definition s="vec3 distance from %&apos;x1&apos; %&apos;y1&apos; %&apos;z1&apos; to %&apos;x2&apos; %&apos;y2&apos; %&apos;z2&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicSum"><list><block s="reportPower"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><l>2</l></block><block s="reportVariadicSum"><list><block s="reportPower"><block s="reportDifference"><block var="y2"/><block var="y1"/></block><l>2</l></block><block s="reportPower"><block s="reportDifference"><block var="z2"/><block var="z1"/></block><l>2</l></block></list></block></list></block></block></block></script></block-definition><block-definition s="Lerp %&apos;a&apos; %&apos;b&apos; alpha %&apos;t&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><block var="a"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="b"/><block var="a"/></block><block var="t"/></list></block></list></block></block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;ca:prova de forma segura _ i si _ _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block var="action"/><block var="handler"/><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="msg"/></list></block></script></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations>ca:prova de forma segura reportant _ i si _ reportant _&#xD;</translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="cases: if %&apos;test&apos; then %&apos;result&apos; %&apos;more&apos;" type="command" category="control"><comment x="0" y="0" w="262" collapsed="false">Multi-branched conditional.&#xD;&#xD;If the first (Boolean) input is True, then the script in&#xD;the second (C-slot) input is run, and this block stops.&#xD;&#xD;Additional tests can be added by putting one or more&#xD;ELSE IF blocks in the third (variadic) Boolean slot.&#xD;Use the arrowheads to get the number of Boolean&#xD;slots you need.  Each ELSE IF block provides a Boolean&#xD;slot for a condition to test and a script slot for what to do&#xD;if the condition is True.  You can put an ELSE block in&#xD;the last Boolean input to CASES for a script to run if&#xD;all the tests turn out False.&#xD;&#xD;As soon as a condition is True, no further tests are done&#xD;and no further scripts are run.</comment><header></header><code></code><translations>pt:se _ , então _ _&#xD;ca:casos: si _ llavors _ _&#xD;</translations><inputs><input type="%b"></input><input type="%cs"></input><input type="%mult%boolUE"></input></inputs><script><block s="doIfElse"><block var="test"/><script><block s="doRun"><block var="result"/><list></list></block></script><script><custom-block s="catch %upvar %cs"><l>tag</l><script><block s="doForEach"><l>item</l><block var="more"/><script><block s="doIf"><block s="evaluate"><block var="item"/><list></list></block><script><custom-block s="throw %s"><block var="tag"/></custom-block></script><list></list></block></script></block></script></custom-block></script></block></script></block-definition><block-definition s="catch %&apos;tag&apos; %&apos;action&apos;" type="command" category="control"><header></header><code></code><translations>pt:captura _ _&#xD;ca:agafa _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doRun"><block var="action"/><list></list></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %&apos;cont&apos;" type="command" category="control"><header></header><code></code><translations>pt:lança _&#xD;ca:llança _&#xD;</translations><inputs><input type="%s">catchtag</input></inputs><script><block s="doRun"><block var="cont"/><list></list></block></script></block-definition><block-definition s="else if %&apos;test&apos; then %&apos;action&apos;" type="predicate" category="control"><comment x="0" y="0" w="176" collapsed="false">For use with the CASES block.&#xD;See its help message.</comment><header></header><code></code><translations>pt:senão, se _ , então _&#xD;ca:altrament si _ llavors _&#xD;</translations><inputs><input type="%b"></input><input type="%cs"></input></inputs><script><block s="doIfElse"><block var="test"/><script><block s="doRun"><block var="action"/><list></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="else %&apos;action&apos;" type="predicate" category="control"><comment x="0" y="0" w="176" collapsed="false">For use with the CASES block.&#xD;See its help message.</comment><header></header><code></code><translations>pt:senão, _&#xD;ca:si no _&#xD;</translations><inputs><input type="%cs"></input></inputs><script><block s="doRun"><block var="action"/><list></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block-definition><block-definition s="do in parallel %&apos;actions&apos; and wait" type="command" category="control"><comment x="0" y="0" w="238.66666666666666" collapsed="false">Accepts any number of scripts as inputs.  Launches a separate thread for each of them, so they are done in parallel, then waits for them all to complete.&#xD;&#xD;This doesn&apos;t change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed.  Rather, the point of this block is to allow starting synchronized but independent scripts.</comment><header></header><code></code><translations>pt:executa _ em paralelo e espera&#xD;ca:executa en paral·lel _ i espera&#xD;</translations><inputs><input type="%mult%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>threads</l></list></block><block s="doSetVar"><l>threads</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>is running?</l></list></block><block s="doSetVar"><l>is running?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="fork"><block s="reifyScript"><script><block s="doRun"><block var="each script"/><list></list></block><block s="doSetVar"><l>is running?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list></list></block><block s="doReport"><block s="reifyScript"><script><block s="doReport"><block var="is running?"/></block></script><list></list></block></block></script><list></list></block><list></list></block></autolambda><list><l>each script</l></list></block><block var="actions"/></block></block><block s="doWaitUntil"><block s="reportListIsEmpty"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="evaluate"><block var="test"/><list></list></block></autolambda><list><l>test</l></list></block><block var="threads"/></block></block></block></script></block-definition><block-definition s="do in parallel %&apos;actions&apos;" type="command" category="control"><comment x="0" y="0" w="238.66666666666666" collapsed="false">Accepts any number of scripts as inputs.  Launches a separate thread for each of them, so they are done in parallel, then continues with the current script while they all run.&#xD;&#xD;This doesn&apos;t change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed.  Rather, the point of this block is to allow starting synchronized but independent scripts.</comment><header></header><code></code><translations>pt:executa _ em paralelo&#xD;ca:executa en paral·lel _&#xD;</translations><inputs><input type="%mult%cs"></input></inputs><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="actions"/></block><l>0</l></list></block><script><block s="fork"><block s="reportListItem"><l>1</l><block var="actions"/></block><list></list></block><custom-block s="do in parallel %mult%cs"><block s="reportCDR"><block var="actions"/></block></custom-block></script><list></list></block></script></block-definition><block-definition s="turbo %&apos;action&apos;" type="command" category="other"><header></header><code></code><translations>pt:executa no modo turbo _&#xD;</translations><inputs><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>begin</l></list></block><block s="doSetVar"><l>begin</l><block s="reportGlobalFlag"><l><option>turbo mode</option></l></block></block><block s="doSetGlobalFlag"><l><option>turbo mode</option></l><l><bool>true</bool></l></block><block s="doRun"><block var="action"/><list></list></block><block s="doSetGlobalFlag"><l><option>turbo mode</option></l><block var="begin"/></block></script></block-definition><block-definition s="%&apos;frequency&apos; Hz for %&apos;duration&apos; secs at %&apos;sample rate&apos; Hz sample rate" type="reporter" category="sound"><comment x="0" y="0" w="205" collapsed="false">generate a list of samples representing a sine wave at the given frequency, duration and sample rate</comment><header></header><code></code><translations>pt:as amostras de som com _ Hz de _ s amostrado a _ Hz&#xD;ca:_ Hz durant _ segons amb mostreig de _ Hz&#xD;</translations><inputs><input type="%n">440<options>a 55=55&#xD;a 110=110&#xD;a 220=220&#xD;a 440=440&#xD;a 880=880&#xD;a 1760=1760&#xD;a 3520=3520</options></input><input type="%n">1</input><input type="%n">44100<options>22.05 kHz=22050&#xD;44.1 kHz=44100&#xD;88.2 kHz=88200&#xD;96 kHz=96000</options></input></inputs><script><block s="doDeclareVariables"><list><l>output</l><l>sample period</l><l>duration in samples</l><l>time</l></list></block><block s="doSetVar"><l>sample period</l><block s="reportQuotient"><l>1</l><block var="sample rate"/></block></block><block s="doSetVar"><l>duration in samples</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportVariadicProduct"><list><block var="duration"/><block var="sample rate"/></list></block></block></block><block s="doSetVar"><l>time</l><l>0</l></block><block s="doSetVar"><l>output</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doRepeat"><block var="duration in samples"/><script><block s="doAddToList"><block s="reportMonadic"><l><option>sin</option></l><custom-block s="degrees %n"><block s="reportVariadicProduct"><list><l>2</l><block s="reportVariadicProduct"><list><custom-block s="PI"></custom-block><block s="reportVariadicProduct"><list><block var="frequency"/><block var="time"/></list></block></list></block></list></block></custom-block></block><block var="output"/></block><block s="doChangeVar"><l>time</l><block var="sample period"/></block></script></block></script></block><block s="doReport"><block var="output"/></block></script></block-definition><block-definition s="PI" type="reporter" category="operators"><header></header><code></code><translations>pt:π&#xD;</translations><inputs></inputs><script><block s="doReport"><l>3.141592653589793</l></block></script></block-definition><block-definition s="degrees %&apos;radians&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:_ radianos em graus&#xD;ca:graus de _ radiants&#xD;</translations><inputs><input type="%n">0.5</input></inputs><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="radians"/><l>180</l></list></block><custom-block s="PI"></custom-block></block></block></script></block-definition><block-definition s="sound named %&apos;name&apos;" type="reporter" category="sensing"><header></header><code></code><translations>pt:o som _&#xD;ca:so de nom _&#xD;</translations><inputs><input type="%s"><options>§_soundsMenu</options></input></inputs><script><block s="doReport"><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportGetSoundAttribute"><l><option>name</option></l><l></l></block><block var="name"/></list></block></autolambda><list></list></block><block s="reportGet"><l><option>sounds</option></l></block></block></block></script></block-definition><block-definition s="plot sound %&apos;name&apos;" type="command" category="pen"><comment x="0" y="0" w="164" collapsed="false">quickly plot the samples of a sound, a list of samples (single channel), or a list of lists (multiple channels) to the stage at a lower resolution.</comment><header></header><code></code><translations>pt:desenha o gráfico do som _&#xD;ca:dibuixa el so _&#xD;</translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doDeclareVariables"><list><l>samples</l><l>step</l><l>offset</l><l>i</l><l>sound</l></list></block><block s="doSetVar"><l>sound</l><block s="reportIfElse"><block s="reportVariadicOr"><list><block s="reportIsA"><block var="name"/><l><option>list</option></l></block><block s="reportIsA"><block var="name"/><l><option>sound</option></l></block></list></block><block var="name"/><custom-block s="sound named %s"><block var="name"/></custom-block></block></block><block s="doIfElse"><block s="reportIsA"><block var="sound"/><l><option>sound</option></l></block><script><block s="doSetVar"><l>samples</l><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="sound"/></block></block><block s="doSetVar"><l>step</l><block s="reportQuotient"><block s="reportGetSoundAttribute"><l><option>length</option></l><block var="sound"/></block><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></list></block></block></block></script><script><block s="doSetVar"><l>samples</l><block var="sound"/></block></script></block><block s="clear"></block><block s="up"></block><block s="doIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="samples"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>step</l><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="samples"/></block></block><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></list></block></block></block><block s="doSetVar"><l>offset</l><block s="reportQuotient"><block s="reportAttributeOf"><l><option>height</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>4</l></block></block><block s="doForEach"><l>channel</l><block var="samples"/><script><block s="doSetVar"><l>i</l><l>0</l></block><block s="gotoXY"><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>-2</l></block><block var="offset"/></block><block s="down"></block><block s="setSize"><l>1</l></block><custom-block s="turbo %cs"><script><block s="doRepeat"><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></list></block><script><block s="doChangeVar"><l>i</l><block var="step"/></block><block s="gotoXY"><block s="reportVariadicSum"><list><block s="xPosition"></block><l>0.5</l></list></block><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportListItem"><block s="reportMonadic"><l><option>floor</option></l><block var="i"/></block><block var="channel"/></block><block s="reportQuotient"><block s="reportAttributeOf"><l><option>height</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>6.4</l></block></list></block><block var="offset"/></list></block></block></script></block></script></custom-block><block s="up"></block><block s="doChangeVar"><l>offset</l><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>-2</l></block></block></script></block></script><script><block s="doSetVar"><l>step</l><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="samples"/></block><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></list></block></block></block><block s="gotoXY"><block s="reportQuotient"><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>-2</l></block><l>0</l></block><block s="down"></block><block s="setSize"><l>1</l></block><custom-block s="turbo %cs"><script><block s="doRepeat"><block s="reportVariadicProduct"><list><block s="reportAttributeOf"><l><option>width</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>2</l></list></block><script><block s="doChangeVar"><l>i</l><block var="step"/></block><block s="gotoXY"><block s="reportVariadicSum"><list><block s="xPosition"></block><l>0.5</l></list></block><block s="reportVariadicProduct"><list><block s="reportListItem"><block s="reportMonadic"><l><option>floor</option></l><block var="i"/></block><block var="samples"/></block><block s="reportQuotient"><block s="reportAttributeOf"><l><option>height</option></l><block s="reportGet"><l><option>stage</option></l></block></block><l>3.2</l></block></list></block></block></script></block></script></custom-block><block s="up"></block></script></block></script></block-definition><block-definition s="$circleSolid-1-255-0-0 record" type="reporter" category="sensing"><comment x="0" y="0" w="192" collapsed="false">records an audio snippet and reports it as a new sound, or zero if the user cancels</comment><header></header><code></code><translations>pt:$circleSolid-1-255-0-0 uma nova gravação&#xD;ca:$circleSolid-1-255-0-0 enregistra&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>callback</l></list></block><block s="doSetVar"><l>callback</l><block s="reportApplyExtension"><l>mda_record</l><list></list></block></block><block s="doWaitUntil"><block s="reportVariadicNotEquals"><list><block s="evaluate"><block var="callback"/><list></list></block><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></block><block s="doReport"><block s="evaluate"><block var="callback"/><list></list></block></block></script></block-definition><block-definition s="note from %&apos;pitch&apos; hz" type="reporter" category="sound"><header></header><code></code><translations>pt:a nota com _ Hz&#xD;ca:nota de _ Hz&#xD;</translations><inputs><input type="%n">440</input></inputs><script><block s="doReport"><block s="reportRound"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><l>12</l><block s="reportQuotient"><block s="reportMonadic"><l><option>log</option></l><block s="reportQuotient"><block var="pitch"/><l>440</l></block></block><block s="reportMonadic"><l><option>log</option></l><l>2</l></block></block></list></block><l>69</l></list></block></block></block></script></block-definition><block-definition s="hz from note %&apos;note&apos;" type="reporter" category="sound"><header></header><code></code><translations>pt:a frequência da nota _&#xD;ca:freqüència (hz) de la nota _&#xD;</translations><inputs><input type="%n">69</input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><l>440</l><block s="reportPower"><l>2</l><block s="reportQuotient"><block s="reportDifference"><block var="note"/><l>69</l></block><l>12</l></block></block></list></block></block></script></block-definition><block-definition s="name of note %&apos;note&apos;" type="reporter" category="sound"><header></header><code></code><translations>pt:o nome da nota _&#xD;ca:nom de la nota _&#xD;</translations><inputs><input type="%n">69</input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportModulus"><block s="reportDifference"><block var="note"/><l>69</l></block><l>12</l></block><l>1</l></list></block><block s="reportNewList"><list><l>A</l><l>Bb</l><l>B</l><l>C</l><l>C#</l><l>D</l><l>D#</l><l>E</l><l>F</l><l>F#</l><l>G</l><l>G#</l></list></block></block></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="doWarp"><script><block s="doForEach"><l>_item</l><block var="_names"/><script><block s="doApplyExtension"><l>err_ignore</l><list><custom-block s="var %s"><block var="_item"/></custom-block></list></block><block s="doApplyExtension"><l>var_delete(name)</l><list><block var="_item"/></list></block></script></block></script></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="reportApplyExtension"><l>var_get(name)</l><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="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doApplyExtension"><l>err_ignore</l><list><block s="reportApplyExtension"><l>var_get(name)</l><list><block var="_name"/></list></block></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></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="doApplyExtension"><l>var_hide(name)</l><list><block var="_name"/></list></block></script></block-definition><block-definition s="FPS from %&apos;last tick30&apos;" type="reporter" category="sensing"><variables><list struct="atomic" id="1367">tick30,delta,fps</list></variables><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSetVar"><l>tick30</l><block s="reportVariadicProduct"><list><block s="getTimer"></block><l>30</l></list></block></block><block s="doSetVar"><l>delta</l><block s="reportDifference"><block var="tick30"/><block var="last tick30"/></block></block><block s="doSetVar"><l>fps</l><block s="reportRound"><block s="reportQuotient"><l>30</l><block var="delta"/></block></block></block><block s="doReport"><block s="reportNewList"><list><block var="fps"/><block var="delta"/><block var="tick30"/></list></block></block></script></block-definition><block-definition s="vec3 %&apos;v1&apos; translate %&apos;v2&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportVariadicSum"><list><custom-block s="vec3.x %l"><block var="v1"/></custom-block><custom-block s="vec3.x %l"><block var="v2"/></custom-block></list></block><block s="reportVariadicSum"><list><custom-block s="vec3.y %l"><block var="v1"/></custom-block><custom-block s="vec3.y %l"><block var="v2"/></custom-block></list></block><block s="reportVariadicSum"><list><custom-block s="vec3.z %l"><block var="v1"/></custom-block><custom-block s="vec3.z %l"><block var="v2"/></custom-block></list></block></list></block></block></script></block-definition><block-definition s="negative vec3 %&apos;vec3&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="Make vec3 %s %s %s"><block s="reportMonadic"><l><option>neg</option></l><custom-block s="vec3.x %l"><block var="vec3"/></custom-block></block><block s="reportMonadic"><l><option>neg</option></l><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></block><block s="reportMonadic"><l><option>neg</option></l><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></block></custom-block></block></script></block-definition><block-definition s="Set vec3 %&apos;vec3&apos; components to %&apos;x&apos; %&apos;y&apos; %&apos;z&apos;" type="command" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReplaceInList"><l>1</l><block var="vec3"/><block var="x"/></block><block s="doReplaceInList"><l>2</l><block var="vec3"/><block var="y"/></block><block s="doReplaceInList"><l>3</l><block var="vec3"/><block var="z"/></block></script></block-definition><block-definition s="plot 3d vertex at %&apos;x&apos; %&apos;y&apos; %&apos;z&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>vert</l><l>screen point</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>vert</l><custom-block s="Calculate 3D vertex %s %s %s"><block var="x"/><block var="y"/><block var="z"/><variables><variable name="vert"><list struct="atomic" id="1491">24.556725274974298,-31.45894600256469,214.10826408443316</list></variable></variables></custom-block></block><block s="doSetVar"><l>screen point</l><custom-block s="3D %s %s %s fov %s to 2D"><custom-block s="vec3.x %l"><block var="vert"/></custom-block><custom-block s="vec3.y %l"><block var="vert"/></custom-block><custom-block s="vec3.z %l"><block var="vert"/></custom-block><block var="fov"/></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportVariadicLessThan"><list><custom-block s="vec3.z %l"><block var="vert"/></custom-block><block var="near clip"/></list></block></block><script><custom-block s="Plot %s %s color %s %s %s"><custom-block s="vec2.x %l"><block var="screen point"/></custom-block><custom-block s="vec2.y %l"><block var="screen point"/></custom-block><block var="r"/><block var="g"/><block var="b"/></custom-block></script><list></list></block></script></block></script></block-definition><block-definition s="convert vec2 %&apos;vec2&apos; to vec3; input z %&apos;z&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="Make vec3 %s %s %s"><custom-block s="vec2.x %l"><block var="vec2"/></custom-block><custom-block s="vec2.y %l"><block var="vec2"/></custom-block><block var="z"/></custom-block></block></script></block-definition><block-definition s="Calculate 3D vertex %&apos;x&apos; %&apos;y&apos; %&apos;z&apos;" type="reporter" category="Vector math"><variables><list struct="atomic" id="1544">vert</list></variables><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>vert</l><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></block><block s="doSetVar"><l>vert</l><custom-block s="vec3 %l translate %l"><block var="vert"/><custom-block s="negative vec3 %l"><block var="Player pos"/></custom-block></custom-block></block><block s="doSetVar"><l>vert</l><custom-block s="rotate vec3 %s by player view"><block var="vert"/></custom-block></block><block s="doReport"><block var="vert"/></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="doApplyExtension"><l>var_show(name)</l><list><block var="_name"/></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="doApplyExtension"><l>var_set(name, val)</l><list><block var="_name"/><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="doWarp"><script><block s="doForEach"><l>_item</l><block var="_names"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><block var="_scope"/><block var="_item"/></list></block></script></block></script></block></script></block-definition><block-definition s="Initialize TuneScope" type="command" category="Music"><header></header><code></code><translations></translations><inputs></inputs><script><block s="bubble"><l>TuneScope Initializing...</l></block><custom-block s="Load TuneScope Primitives"></custom-block><block s="bubble"><l></l></block></script></block-definition><block-definition s="Set Instrument To %&apos;Instrument Name&apos;" type="command" category="Music"><comment x="0" y="0" w="226.98116629464283" collapsed="false">Sets the global instrument used for playing notes.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Piano<options>Piano&#xD;Brass={&#xD;French Horn&#xD;Trumpet&#xD;Tuba&#xD;}&#xD;Strings={&#xD;Banjo&#xD;Bass, Acoustic&#xD;Bass, Electric (Finger)&#xD;Cello&#xD;Guitar, Acoustic&#xD;Guitar, Electric&#xD;Harp&#xD;Koto&#xD;Sitar&#xD;Violin&#xD;}&#xD;Woodwinds={&#xD;Bassoon&#xD;Clarinet&#xD;Flute&#xD;Oboe&#xD;Saxophone&#xD;Shakuhachi&#xD;}&#xD;Drums={&#xD;Cabasa&#xD;Snare Drum&#xD;Bass Drum&#xD;Closed Hi-Hat&#xD;Open Hi-Hat&#xD;Mid Tom&#xD;High Tom&#xD;Crash Cymbal&#xD;}&#xD;Other={&#xD;Accordion&#xD;Marimba&#xD;Organ&#xD;Vibraphone&#xD;}</options></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_setinst(name)</l><list><block var="Instrument Name"/></list></block></script></block-definition><block-definition s="Set Volume To %&apos;Percent&apos; %" type="command" category="Music"><comment x="0" y="0" w="236.57142857142847" collapsed="false">Sets the global volume to the selected percentage.</comment><header></header><code></code><translations></translations><inputs><input type="%n">50</input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_setvol(percent)</l><list><block var="Percent"/></list></block></script></block-definition><block-definition s="Set Instrument %&apos;Instrument&apos; Volume to %&apos;VolumePercent&apos; %" type="command" category="Music"><comment x="0" y="0" w="353.7142857142858" collapsed="false">Sets the default volume of the selected instrument to the specified percentage.</comment><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">Piano<options>Piano&#xD;Brass={&#xD;French Horn&#xD;Trumpet&#xD;Tuba&#xD;}&#xD;Strings={&#xD;Banjo&#xD;Bass, Acoustic&#xD;Bass, Electric (Finger)&#xD;Cello&#xD;Guitar, Acoustic&#xD;Guitar, Electric&#xD;Harp&#xD;Koto&#xD;Sitar&#xD;Violin&#xD;}&#xD;Woodwinds={&#xD;Bassoon&#xD;Clarinet&#xD;Flute&#xD;Oboe&#xD;Saxophone&#xD;Shakuhachi&#xD;}&#xD;Drums={&#xD;Cabasa&#xD;Snare Drum&#xD;Bass Drum&#xD;Closed Hi-Hat&#xD;Open Hi-Hat&#xD;Mid Tom&#xD;High Tom&#xD;Crash Cymbal&#xD;}&#xD;Other={&#xD;Accordion&#xD;Marimba&#xD;Organ&#xD;Vibraphone&#xD;}</options></input><input type="%n">50</input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_setinstvol(name, percent)</l><list><block var="Instrument"/><block var="VolumePercent"/></list></block></script></block-definition><block-definition s="Play Note %&apos;Note&apos; for Duration %&apos;Duration&apos; and Wait" type="command" category="Music"><comment x="0" y="0" w="315.8571428571429" collapsed="false">Plays the selected note for the specified musical duration. This block waits for the selected note to finish playing before moving to the next block.&#xD;&#xD;Notes may be entered as Scientific Pitch Notation (eg. C4) or as MIDI numbers.&#xD;&#xD;Note durations may be entered as duration names (eg. half, quarter, etc...) or as numerical values (eg. .5, .25, etc...)</comment><header></header><code></code><translations></translations><inputs><input type="%txt"><options>C3&#xD;D3&#xD;E3&#xD;F3&#xD;G3&#xD;A3&#xD;B3&#xD;C4&#xD;D4&#xD;E4&#xD;F4&#xD;G4&#xD;A4&#xD;B4&#xD;Sharps={&#xD;C#3&#xD;D#3&#xD;E#3&#xD;F#3&#xD;G#3&#xD;A#3&#xD;B#3&#xD;C#4&#xD;D#4&#xD;E#4&#xD;F#4&#xD;G#4&#xD;A#4&#xD;B#4&#xD;}&#xD;Flats={&#xD;Cb3&#xD;Db3&#xD;Eb3&#xD;Fb3&#xD;Gb3&#xD;Ab3&#xD;Bb3&#xD;Cb4&#xD;Db4&#xD;Eb4&#xD;Fb4&#xD;Gb4&#xD;Ab4&#xD;Bb4&#xD;}</options></input><input type="%txt"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Notes={&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;}&#xD;Triplet Notes={&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;}</options></input></inputs><script><custom-block s="Play Note %s for Duration %s"><custom-block s="Convert Note %s to MIDI"><block var="Note"/></custom-block><block var="Duration"/></custom-block><custom-block s="Rest for Note Duration %s"><block var="Duration"/></custom-block></script></block-definition><block-definition s="Play Note %&apos;Note&apos; for Duration %&apos;Duration&apos;" type="command" category="Music"><comment x="0" y="0" w="333.3128348214286" collapsed="false">Plays the selected note for the specified musical duration. &#xD;&#xD;Notes may be entered as Scientific Pitch Notation (eg. C4) or as MIDI numbers.&#xD;&#xD;Note durations may be entered as duration names (eg. half, quarter, etc...) or as numerical values (eg. .5, .25, etc...)</comment><header></header><code></code><translations></translations><inputs><input type="%s"><options>C3&#xD;D3&#xD;E3&#xD;F3&#xD;G3&#xD;A3&#xD;B3&#xD;C4&#xD;D4&#xD;E4&#xD;F4&#xD;G4&#xD;A4&#xD;B4&#xD;Sharps={&#xD;C#3&#xD;D#3&#xD;E#3&#xD;F#3&#xD;G#3&#xD;A#3&#xD;B#3&#xD;C#4&#xD;D#4&#xD;E#4&#xD;F#4&#xD;G#4&#xD;A#4&#xD;B#4&#xD;}&#xD;Flats={&#xD;Cb3&#xD;Db3&#xD;Eb3&#xD;Fb3&#xD;Gb3&#xD;Ab3&#xD;Bb3&#xD;Cb4&#xD;Db4&#xD;Eb4&#xD;Fb4&#xD;Gb4&#xD;Ab4&#xD;Bb4&#xD;}</options></input><input type="%s"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Notes={&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;}&#xD;Triplet Notes={&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;}</options></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_playnote(note, duration)</l><list><block s="reportIfElse"><block s="reportIsA"><block var="Note"/><l><option>number</option></l></block><custom-block s="Convert MIDI %n to Note using %s"><block var="Note"/><l>Sharps</l></custom-block><block var="Note"/></block><block s="reportIfElse"><block s="reportIsA"><block var="Duration"/><l><option>number</option></l></block><block s="reportVariadicProduct"><list><block var="Duration"/><block s="reportVariadicProduct"><list><l>4</l><block s="reportQuotient"><l>60</l><block s="getTempo"></block></block></list></block></list></block><custom-block s="Note Duration %txt at Current Tempo"><block var="Duration"/></custom-block></block></list></block></script></block-definition><block-definition s="Play Chord %&apos;Chord&apos; for Duration %&apos;Duration&apos;" type="command" category="Music"><comment x="0" y="0" w="160" collapsed="false">Plays a list of notes simultaneously for the specified musical duration.&#xD;&#xD;Chords must be entered as a list.&#xD;&#xD;Durations may be entered as duration names (eg. half, quarter, etc...) or as numerical values (eg. .5, .25, etc...)</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Notes={&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;}&#xD;Triplet Notes={&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;}</options></input></inputs><script><block s="doForEach"><l>item</l><block var="Chord"/><script><custom-block s="Play Note %s for Duration %s"><block var="item"/><block var="Duration"/></custom-block></script></block></script></block-definition><block-definition s="Rest for Note Duration %&apos;Duration&apos;" type="command" category="Music"><comment x="0" y="0" w="90" collapsed="false">Waits for the selected musical duration.&#xD;&#xD;Durations may be entered as duration names (eg. half, quarter, etc...) or as numerical values (eg. .5, .25, etc...)</comment><header></header><code></code><translations></translations><inputs><input type="%s"><options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Notes={&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;}&#xD;Triplet Notes={&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;}</options></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doWait"><block s="reportIfElse"><block s="reportIsA"><block var="Duration"/><l><option>number</option></l></block><block s="reportVariadicProduct"><list><block var="Duration"/><block s="reportVariadicProduct"><list><l>4</l><block s="reportQuotient"><l>60</l><block s="getTempo"></block></block></list></block></list></block><custom-block s="Note Duration %txt at Current Tempo"><block var="Duration"/></custom-block></block></block></script></block-definition><block-definition s="Note Duration %&apos;Note Duration&apos; at Current Tempo" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="262.8571428571429" collapsed="false">Each note duration is assigned a numerical value, with a whole note equalling &quot;1&quot;.&#xD;&#xD;Dotted Notes are equal to the named note plus half of the named note&apos;s duration.&#xD;&#xD;Triplet notes are equal in duration to two of the named notes divided by three.&#xD;&#xD;Multiplying the numerical value of a note duration by &#xD;4*(60 / tempo) adjusts the note durations to match the current tempo.</comment><header></header><code></code><translations></translations><inputs><input type="%txt">Quarter<options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Notes={&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;}&#xD;Triplet Notes={&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;}</options></input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Note Duration"/><block s="reportNewList"><list><block s="reportNewList"><list><l>Whole</l><l>1</l></list></block><block s="reportNewList"><list><l>Half</l><l>.5</l></list></block><block s="reportNewList"><list><l>Quarter</l><l>.25</l></list></block><block s="reportNewList"><list><l>Eighth</l><l>.125</l></list></block><block s="reportNewList"><list><l>Sixteenth</l><l>.0625</l></list></block><block s="reportNewList"><list><l>Thirtysecond</l><l>.03125</l></list></block><block s="reportNewList"><list><l>Dotted Whole</l><l>1.5</l></list></block><block s="reportNewList"><list><l>Dotted Half</l><l>.75</l></list></block><block s="reportNewList"><list><l>Dotted Quarter</l><l>.375</l></list></block><block s="reportNewList"><list><l>Dotted Eighth</l><l>.1875</l></list></block><block s="reportNewList"><list><l>Dotted Sixteenth</l><l>.09375</l></list></block><block s="reportNewList"><list><l>Dotted Thirtysecond</l><l>.046876</l></list></block><block s="reportNewList"><list><l>Whole Triplet</l><block s="reportQuotient"><l>2</l><l>3</l></block></list></block><block s="reportNewList"><list><l>Half Triplet</l><block s="reportQuotient"><l>1</l><l>3</l></block></list></block><block s="reportNewList"><list><l>Quarter Triplet</l><block s="reportQuotient"><l>.5</l><l>3</l></block></list></block><block s="reportNewList"><list><l>Eighth Triplet</l><block s="reportQuotient"><block s="reportVariadicProduct"><list><l>.25</l><l>2</l></list></block><l>3</l></block></list></block><block s="reportNewList"><list><l>Sixteenth Triplet</l><block s="reportQuotient"><block s="reportVariadicProduct"><list><l>.125</l><l>2</l></list></block><l>3</l></block></list></block><block s="reportNewList"><list><l>Thirtysecond Triplet</l><block s="reportQuotient"><l>.0625</l><l>3</l></block></list></block></list></block></custom-block></block><l>4</l><block s="reportQuotient"><l>60</l><block s="getTempo"></block></block></list></block></block></script></block-definition><block-definition s="%&apos;Scale Type&apos; Scale: %&apos;Note&apos; Octave: %&apos;Octave&apos;" type="reporter" category="Music"><comment x="0" y="0" w="264.7690848214286" collapsed="false">Reports all notes in a specified scale using the provided note and octave number as the starting note of the scale.&#xD;&#xD;To add additional scales to the &quot;Types&quot; script variable, create a list with the name of the scale as the first item and the steps between each note of the scale as the second item.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Chromatic<options>Chromatic&#xD;Major&#xD;Minor</options></input><input type="%s">C</input><input type="%n">4<options>0&#xD;1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6&#xD;7</options></input></inputs><script><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportListContainsItem"><custom-block s="Chromatic Notes"></custom-block><block var="Note"/></block><block s="reportIsA"><block var="Octave"/><l><option>number</option></l></block></list></block><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>Types</l><l>MIDI Number</l><l>Scale</l><l>Pattern</l><l>Converted Note</l></list></block><block s="doSetVar"><l>Converted Note</l><custom-block s="Convert False Sharps/Flats %s"><block var="Note"/></custom-block></block><block s="doSetVar"><l>Types</l><block s="reportNewList"><list><block s="reportNewList"><list><l>Chromatic</l><block s="reportTextSplit"><l>11111111111</l><l><option>letter</option></l></block></list></block><block s="reportNewList"><list><l>Major</l><block s="reportTextSplit"><l>221222</l><l><option>letter</option></l></block></list></block><block s="reportNewList"><list><l>Minor</l><block s="reportTextSplit"><l>212212</l><l><option>letter</option></l></block></list></block><block s="reportNewList"><list><l>Diminished</l><block s="reportTextSplit"><l>2121212</l><l><option>letter</option></l></block></list></block></list></block></block><block s="doSetVar"><l>MIDI Number</l><custom-block s="Convert Note %s to MIDI"><block s="reportJoinWords"><list><block var="Note"/><block var="Octave"/></list></block></custom-block></block><block s="doSetVar"><l>Scale</l><block s="reportNewList"><list><block var="MIDI Number"/></list></block></block><block s="doSetVar"><l>Pattern</l><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Scale Type"/><block var="Types"/></custom-block></block></block><block s="doForEach"><l>item</l><block var="Pattern"/><script><block s="doChangeVar"><l>MIDI Number</l><block var="item"/></block><block s="doAddToList"><block var="MIDI Number"/><block var="Scale"/></block></script></block></script></block><block s="doReport"><custom-block s="Convert MIDI %n to Note using %s"><block var="Scale"/><custom-block s="Check for Sharp/Flat %s"><block var="Converted Note"/></custom-block></custom-block></block></script><script><block s="doReport"><l></l></block></script></block></script></block-definition><block-definition s="Check for Sharp/Flat %&apos;Note&apos;" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="90" collapsed="false">Reports &quot;#&quot; or &quot;b&quot; of the input scientific pitch notation contains either.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicGreaterThan"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="Note"/></block><l>1</l></list></block><block s="reportLetter"><l><option>last</option></l><block var="Note"/></block><l></l></block></block></script></block-definition><block-definition s="Note %&apos;#&apos; in %&apos;Major/Minor&apos; Scale: %&apos;Note&apos; Octave: %&apos;Octave&apos;" type="reporter" category="Music"><comment x="0" y="0" w="239.6751395089286" collapsed="false">Reports the note in a specific position within a major or minor musical scale. (e.g., The third note in a C Major scale starting in the fourth octave is E4.)</comment><header></header><code></code><translations></translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6&#xD;7</options></input><input type="%s" readonly="true">Major<options>Major&#xD;Minor</options></input><input type="%s">C</input><input type="%n">4<options>0&#xD;1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6&#xD;7</options></input></inputs><script><block s="doReport"><block s="reportListItem"><block var="#"/><custom-block s="%s Scale: %s Octave: %n"><block var="Major/Minor"/><block var="Note"/><block var="Octave"/></custom-block></block></block></script></block-definition><block-definition s="Interval Between Note %&apos;Note 1&apos; to %&apos;Note 2&apos; in the %&apos;Major/Minor&apos; Scale %&apos;Note&apos;" type="reporter" category="Music"><comment x="0" y="0" w="245.00000000000003" collapsed="false">Reports the distance in steps between two notes in the selected scale. (e.g., In the C Major scale, there are two intervals between C4 and E4.)&#xD;&#xD;If one or more of the selected notes is not in the selected scale, the block reports nothing.&#xD;&#xD;Notes must be entered as scientific pitch notation (eg. C4).</comment><header></header><code></code><translations></translations><inputs><input type="%s">C4</input><input type="%s">G4</input><input type="%s" readonly="true">Major<options>Major&#xD;Minor</options></input><input type="%s">C</input></inputs><script><block s="doDeclareVariables"><list><l>Note Position 1</l><l>Note Position 2</l></list></block><block s="doSetVar"><l>Note Position 1</l><block s="reportListIndex"><custom-block s="Convert Note %s to MIDI"><block var="Note 1"/></custom-block><custom-block s="Create Full %s MIDI Scale %s"><block var="Major/Minor"/><block var="Note"/></custom-block></block></block><block s="doSetVar"><l>Note Position 2</l><block s="reportListIndex"><custom-block s="Convert Note %s to MIDI"><block var="Note 2"/></custom-block><custom-block s="Create Full %s MIDI Scale %s"><block var="Major/Minor"/><block var="Note"/></custom-block></block></block><block s="doIfElse"><block s="reportVariadicAnd"><list><block s="reportListContainsItem"><custom-block s="Create Full %s MIDI Scale %s"><block var="Major/Minor"/><block var="Note"/></custom-block><custom-block s="Convert Note %s to MIDI"><block var="Note 1"/></custom-block></block><block s="reportListContainsItem"><custom-block s="Create Full %s MIDI Scale %s"><block var="Major/Minor"/><block var="Note"/></custom-block><custom-block s="Convert Note %s to MIDI"><block var="Note 2"/></custom-block></block></list></block><script><block s="doReport"><block s="reportDifference"><block var="Note Position 2"/><block var="Note Position 1"/></block></block></script><script><block s="doReport"><l></l></block></script></block></script></block-definition><block-definition s="Create Full %&apos;Type&apos; MIDI Scale %&apos;Note&apos;" type="reporter" category="Music" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"><options>Chromatic&#xD;Major&#xD;Minor</options></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>Scale Types</l><l>Scale</l><l>Pattern</l><l>MIDI Number</l></list></block><block s="doSetVar"><l>Scale Types</l><block s="reportNewList"><list><block s="reportNewList"><list><l>Chromatic</l><block s="reportTextSplit"><l>111111111111</l><l><option>letter</option></l></block></list></block><block s="reportNewList"><list><l>Major</l><block s="reportTextSplit"><l>2212221</l><l><option>letter</option></l></block></list></block><block s="reportNewList"><list><l>Minor</l><block s="reportTextSplit"><l>2122122</l><l><option>letter</option></l></block></list></block></list></block></block><block s="doSetVar"><l>MIDI Number</l><custom-block s="Convert Note %s to MIDI"><block s="reportJoinWords"><list><custom-block s="Get Note %s"><block var="Note"/></custom-block><l>0</l></list></block></custom-block></block><block s="doSetVar"><l>Scale</l><block s="reportNewList"><list><block var="MIDI Number"/></list></block></block><block s="doSetVar"><l>Pattern</l><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Type"/><block var="Scale Types"/></custom-block></block></block><block s="doRepeat"><l>8</l><script><block s="doForEach"><l>item</l><block var="Pattern"/><script><block s="doChangeVar"><l>MIDI Number</l><block var="item"/></block><block s="doAddToList"><block var="MIDI Number"/><block var="Scale"/></block></script></block></script></block><block s="doReport"><block var="Scale"/></block></script></block></script></block-definition><block-definition s="%&apos;Major/Minor&apos; Chord: %&apos;Note&apos; Octave: %&apos;Octave&apos;" type="reporter" category="Music"><comment x="0" y="0" w="163.5714285714284" collapsed="false">Reports the notes comprising a major or minor chord, using the specified note and octave as the root note of the chord.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Major<options>Major&#xD;Minor</options></input><input type="%s">C</input><input type="%s">4</input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicAnd"><list><block s="reportListContainsItem"><custom-block s="Chromatic Notes"></custom-block><block var="Note"/></block><block s="reportIsA"><block var="Octave"/><l><option>number</option></l></block></list></block><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>3</l><l>5</l></list></block><custom-block s="%s Scale: %s Octave: %n"><block var="Major/Minor"/><block var="Note"/><block var="Octave"/></custom-block></block><l></l></block></block></script></block-definition><block-definition s="%&apos;Type&apos; Chord: %&apos;Note&apos; Octave: %&apos;Octave&apos; Chord Position: %&apos;Position&apos;" type="reporter" category="Music"><comment x="0" y="0" w="337.8571428571429" collapsed="false">This block finds the notes in a specified chord along the selected scale. Roman numerals differentiate chord positions from octave numbers (e.g., the Roman numeral “I” reports the notes of the first chord in the sequence). Upper case Roman numerals represent major chords within the scale. Lower case Roman numerals represent minor chords within the scale.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Major<options>Major&#xD;Minor</options></input><input type="%s">C</input><input type="%n">4<options>0&#xD;1&#xD;2&#xD;3&#xD;4&#xD;5&#xD;6&#xD;7</options></input><input type="%s" readonly="true">I<options>I&#xD;ii&#xD;iii&#xD;IV&#xD;V&#xD;vi&#xD;vii°</options></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>Converted Numeral</l></list></block><block s="doSetVar"><l>Converted Numeral</l><custom-block s="Converted Roman Numeral %s"><block var="Position"/></custom-block></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="Type"/><l>Major</l></list></block><script><block s="doSetBlockAttribute"><l><option>menus</option></l><block s="reifyReporter"><autolambda><custom-block s="%s Chord: %s Octave: %n Chord Position: %s"><l>Major</l><l></l><l></l><l></l></custom-block></autolambda><list></list></block><block s="reportNewList"><list><l></l><l></l><l></l><block s="reportNewList"><list><l>I</l><l>ii</l><l>iii</l><l>IV</l><l>V</l><l>vi</l><l>vii°</l></list></block></list></block></block></script><script><block s="doSetBlockAttribute"><l><option>menus</option></l><block s="reifyReporter"><autolambda><custom-block s="%s Chord: %s Octave: %n Chord Position: %s"><l>Major</l><l></l><l></l><l></l></custom-block></autolambda><list></list></block><block s="reportNewList"><list><l></l><l></l><l></l><block s="reportNewList"><list><l>i</l><l>ii°</l><l>III</l><l>iv</l><l>V</l><l>VI</l><l>VII</l></list></block></list></block></block></script></block><block s="doIf"><block s="reportListContainsItem"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="Type"/><l>Major</l></list></block><block s="reportNewList"><list><l>1</l><l>4</l><l>5</l></list></block><block s="reportNewList"><list><l>3</l><l>6</l><l>7</l></list></block></block><block var="Converted Numeral"/></block><script><block s="doReport"><custom-block s="%s Chord: %s Octave: %s"><l>Major</l><custom-block s="Get Note %s"><block s="reportListItem"><block var="Converted Numeral"/><custom-block s="%s Scale: %s Octave: %n"><block var="Type"/><block var="Note"/><block var="Octave"/></custom-block></block></custom-block><block var="Octave"/></custom-block></block></script><list></list></block><block s="doIf"><block s="reportListContainsItem"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="Type"/><l>Major</l></list></block><block s="reportNewList"><list><l>2</l><l>3</l><l>6</l></list></block><block s="reportNewList"><list><l>1</l><l>4</l><l>5</l></list></block></block><block var="Converted Numeral"/></block><script><block s="doReport"><custom-block s="%s Chord: %s Octave: %s"><l>Minor</l><custom-block s="Get Note %s"><block s="reportListItem"><block var="Converted Numeral"/><custom-block s="%s Scale: %s Octave: %n"><block var="Type"/><block var="Note"/><block var="Octave"/></custom-block></block></custom-block><block var="Octave"/></custom-block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="Converted Numeral"/><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="Type"/><l>Major</l></list></block><l>7</l><l>2</l></block></list></block><script><block s="doReport"><custom-block s="%s Diminished Chord %s Octave"><custom-block s="Get Note %s"><block s="reportListItem"><l>8</l><custom-block s="%s Scale: %s Octave: %n"><l>Diminished</l><block var="Note"/><block var="Octave"/></custom-block></block></custom-block><block var="Octave"/></custom-block></block></script><list></list></block></script></block></script></block-definition><block-definition s="Converted Roman Numeral %&apos;Roman Numeral&apos;" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="90" collapsed="false">Converts roman numerals to arabic numerals using an association table.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Roman Numeral"/><block s="reportNewList"><list><block s="reportNewList"><list><l>I</l><l>1</l></list></block><block s="reportNewList"><list><l>II</l><l>2</l></list></block><block s="reportNewList"><list><l>II°</l><l>2</l></list></block><block s="reportNewList"><list><l>III</l><l>3</l></list></block><block s="reportNewList"><list><l>IV</l><l>4</l></list></block><block s="reportNewList"><list><l>V</l><l>5</l></list></block><block s="reportNewList"><list><l>VI</l><l>6</l></list></block><block s="reportNewList"><list><l>VII</l><l>7</l></list></block><block s="reportNewList"><list><l>VII°</l><l>7</l></list></block></list></block></custom-block></block></block></script></block-definition><block-definition s="%&apos;Note&apos; Diminished Chord %&apos;Octave&apos; Octave" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="90" collapsed="false">Reports the notes of a diminished chord, given the starting note and octave of the chord.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>3</l><l>5</l></list></block><custom-block s="%s Scale: %s Octave: %n"><l>Diminished</l><block var="Note"/><block var="Octave"/></custom-block></block></block></script></block-definition><block-definition s="Add Note %&apos;Note&apos; to Chord %&apos;Chord&apos;" type="reporter" category="Music"><comment x="0" y="0" w="280" collapsed="false">This block reports a chord and appends an additional note.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><list><block var="Chord"/><block s="reportNewList"><list><block s="reportIfElse"><block s="reportIsA"><block var="Note"/><l><option>number</option></l></block><custom-block s="Convert MIDI %n to Note using %s"><block var="Note"/><l></l></custom-block><custom-block s="Convert False Sharps/Flats %s"><block var="Note"/></custom-block></block></list></block></list></block></block></script></block-definition><block-definition s="Chord Rest" type="reporter" category="Music"><comment x="0" y="0" w="189.2857142857143" collapsed="false">May be paired with a musical duration to insert a rest into a sequence of chords.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>R</l><l>R</l><l>R</l></list></block></block></script></block-definition><block-definition s="Drum Pattern %&apos;Step&apos;" type="reporter" category="Music"><comment x="0" y="0" w="245.9644252232142" collapsed="false">This block reports a series of beats that tell the drum when to play. Beats are represented as an “X,” which can be typed into the block. Beats can be added or subtracted using the arrows on the right of the block.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block var="Step"/></block></script></block-definition><block-definition s="Drum %&apos;Instrument&apos; %&apos;Pattern&apos; Beat %&apos;Beat&apos; Times %&apos;Times&apos;" type="reporter" category="Music"><comment x="0" y="0" w="288.5714285714286" collapsed="false">This block reports a drum pattern, assigns a drum to it, and sets the duration value of each item in the pattern. Different drums can be selected from the drop-down menu. Beat durations can be selected from the drop-down menu or entered directly.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Snare Drum<options>Bass Drum&#xD;Snare Drum&#xD;Crash Cymbal&#xD;Cabasa&#xD;Toms={&#xD;High Tom&#xD;Mid Tom&#xD;}&#xD;Hi-Hats={&#xD;Closed Hi-hat&#xD;Open Hi-hat&#xD;}</options></input><input type="%l"></input><input type="%s">Eighth<options>Quarter&#xD;Eighth&#xD;Sixteenth</options></input><input type="%s">1<options>1&#xD;2&#xD;3&#xD;4&#xD;8&#xD;12&#xD;16&#xD;24&#xD;Loop</options></input></inputs><script><block s="doDeclareVariables"><list><l>notes and durations</l><l>pitch</l></list></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="Instrument"/><l>Bass Drum</l></list></block><script><block s="doSetVar"><l>pitch</l><l>C2</l></block></script><script><block s="doSetVar"><l>pitch</l><l>C4</l></block></script></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="Times"/><l>Loop</l></list></block><script><block s="doSetVar"><l>notes and durations</l><block s="reportNewList"><list><block s="reportNewList"><list><l>Loop-Melody</l><block var="Instrument"/></list></block></list></block></block><block s="doForEach"><l>item</l><block var="Pattern"/><script><block s="doIfElse"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="item"/><l>x</l></list></block><block s="reportVariadicEquals"><list><block var="item"/><l>X</l></list></block></list></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="pitch"/><block var="Beat"/></list></block><block var="notes and durations"/></block></script><script><block s="doAddToList"><block s="reportNewList"><list><l>R</l><block var="Beat"/></list></block><block var="notes and durations"/></block></script></block></script></block></script><script><block s="doSetVar"><l>notes and durations</l><block s="reportNewList"><list><block s="reportNewList"><list><l>Melody</l><block var="Instrument"/></list></block></list></block></block><block s="doRepeat"><block var="Times"/><script><block s="doForEach"><l>item</l><block var="Pattern"/><script><block s="doIfElse"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="item"/><l>x</l></list></block><block s="reportVariadicEquals"><list><block var="item"/><l>X</l></list></block></list></block><script><block s="doAddToList"><block s="reportNewList"><list><block var="pitch"/><block var="Beat"/></list></block><block var="notes and durations"/></block></script><script><block s="doAddToList"><block s="reportNewList"><list><l>R</l><block var="Beat"/></list></block><block var="notes and durations"/></block></script></block></script></block></script></block></script></block><block s="doReport"><block var="notes and durations"/></block></script></block-definition><block-definition s="Chromatic Notes" type="reporter" category="Music" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>Cb</l><l>23</l></list></block><block s="reportNewList"><list><l>C</l><l>24</l></list></block><block s="reportNewList"><list><l>C#</l><l>25</l></list></block><block s="reportNewList"><list><l>Db</l><l>25</l></list></block><block s="reportNewList"><list><l>D</l><l>26</l></list></block><block s="reportNewList"><list><l>D#</l><l>27</l></list></block><block s="reportNewList"><list><l>Eb</l><l>27</l></list></block><block s="reportNewList"><list><l>E</l><l>28</l></list></block><block s="reportNewList"><list><l>E#</l><l>29</l></list></block><block s="reportNewList"><list><l>Fb</l><l>28</l></list></block><block s="reportNewList"><list><l>F</l><l>29</l></list></block><block s="reportNewList"><list><l>F#</l><l>30</l></list></block><block s="reportNewList"><list><l>Gb</l><l>30</l></list></block><block s="reportNewList"><list><l>G</l><l>31</l></list></block><block s="reportNewList"><list><l>G#</l><l>32</l></list></block><block s="reportNewList"><list><l>Ab</l><l>32</l></list></block><block s="reportNewList"><list><l>A</l><l>33</l></list></block><block s="reportNewList"><list><l>A#</l><l>34</l></list></block><block s="reportNewList"><list><l>Bb</l><l>34</l></list></block><block s="reportNewList"><list><l>B</l><l>35</l></list></block><block s="reportNewList"><list><l>B#</l><l>36</l></list></block></list></block></block></block></block></script></block-definition><block-definition s="Convert False Sharps/Flats %&apos;Note&apos;" type="reporter" category="Music" helper="true"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>converted note</l></list></block><block s="doIfElse"><block s="reportListContainsItem"><block s="reportNewList"><list><l>E#</l><l>Fb</l><l>B#</l><l>Cb</l></list></block><block var="Note"/></block><script><block s="doSetVar"><l>converted note</l><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Note"/><block s="reportNewList"><list><block s="reportNewList"><list><l>E#</l><l>F</l></list></block><block s="reportNewList"><list><l>Fb</l><l>E</l></list></block><block s="reportNewList"><list><l>B#</l><l>C</l></list></block><block s="reportNewList"><list><l>Cb</l><l>B</l></list></block></list></block></custom-block></block></block></script><script><block s="doSetVar"><l>converted note</l><block var="Note"/></block></script></block><block s="doReport"><block var="converted note"/></block></script></block-definition><block-definition s="Measure %&apos;Pairs&apos;" type="reporter" category="Music"><comment x="0" y="0" w="286.4285714285714" collapsed="false">This block is used to group sequences of notes and chords into measures. Each note or chord in the measure is paired with a note duration. The pairs are entered into the block using a list. </comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doReport"><block var="Pairs"/></block></script></block-definition><block-definition s="Section %&apos;Measures&apos;" type="reporter" category="Music"><comment x="0" y="0" w="428.2220145089286" collapsed="false">This code block groups measures together. This can be helpful for separating groups of measures that repeat in various places throughout a song, like verses and choruses. This block works with both notes and chords. To add measures to a section, put the measures into a list.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doDeclareVariables"><list><l>Section</l></list></block><block s="doSetVar"><l>Section</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>item</l><block var="Measures"/><script><block s="doSetVar"><l>Section</l><block s="reportConcatenatedLists"><list><block var="Section"/><block var="item"/></list></block></block></script></block><block s="doReport"><block var="Section"/></block></script></block-definition><block-definition s="Track: %&apos;Type&apos; Instrument: %&apos;Instrument&apos; $nl Musical Notation (Notes or Chords): %&apos;Notation&apos;" type="reporter" category="Music"><comment x="0" y="0" w="272.8571428571429" collapsed="false">This code block specifies the type of track to be played and assigns it an instrument. Both the track type and instrument are set using drop-down menus. This block accepts notes or chords paired with corresponding durations. This block also allows for the creation of note or chord loops that will repeat for the whole duration of the song. Both types of loops may be selected from the track drop-down menu. For a loop to play, it must have an accompanying track that is not a loop.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Melody<options>Melody&#xD;Chords&#xD;Loops={&#xD;Loop-Melody&#xD;Loop-Chords&#xD;}</options></input><input type="%s" readonly="true">Piano<options>Piano&#xD;Brass={&#xD;French Horn&#xD;Trumpet&#xD;Tuba&#xD;}&#xD;Strings={&#xD;Banjo&#xD;Bass, Acoustic&#xD;Bass, Electric (Finger)&#xD;Cello&#xD;Guitar, Acoustic&#xD;Guitar, Electric&#xD;Guitar, Overdrive&#xD;Harp&#xD;Koto&#xD;Sitar&#xD;Violin&#xD;}&#xD;Woodwinds={&#xD;Bassoon&#xD;Clarinet&#xD;Flute&#xD;Oboe&#xD;Saxophone&#xD;Shakuhachi&#xD;}&#xD;Drums={&#xD;Cabasa&#xD;Snare Drum&#xD;Bass Drum&#xD;Closed Hi-Hat&#xD;Open Hi-Hat&#xD;Mid Tom&#xD;High Tom&#xD;Crash Cymbal&#xD;}&#xD;Other={&#xD;Accordion&#xD;Marimba&#xD;Music Box&#xD;Organ&#xD;Vibraphone&#xD;}</options></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Track</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>Track</l><block s="reportNewList"><list><block s="reportNewList"><list><block var="Type"/><block var="Instrument"/></list></block></list></block></block><block s="doForEach"><l>item</l><block var="Notation"/><script><block s="doSetVar"><l>Track</l><block s="reportConcatenatedLists"><list><block var="Track"/><block var="item"/></list></block></block></script></block><block s="doReport"><block var="Track"/></block></script></block></script></block-definition><block-definition s="Play Tracks %&apos;tracks&apos; Time Signature: %&apos;timeSignature&apos;" type="command" category="Music"><comment x="0" y="0" w="198.57142857142858" collapsed="false">This block is used to play multiple music tracks. In most cases, several tracks with musical instruments are played in parallel. </comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input><input type="%s" readonly="true">4/4<options>4/4&#xD;3/4&#xD;5/4&#xD;7/4&#xD;6/8&#xD;9/8&#xD;12/8</options></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_playtracks(tracklist, timesignature)</l><list><block var="tracks"/><block var="timeSignature"/><block s="getTempo"></block></list></block></script></block-definition><block-definition s="Beats in Measure %&apos;Measure&apos; $nl Time Signature %&apos;Time&apos;" type="reporter" category="Music"><comment x="0" y="0" w="297.14285714285717" collapsed="false">This block determines if the combined durations of notes or chords within a measure are correct. The combined duration of notes within a measure must equal the number of beats specified by the time signature. &#xD;&#xD;When reading time signatures, the bottom number determines which note gets counted as a beat, and the top number determines how many beats are in a measure. For example, in 4/4 time, quarter notes are counted as beats and there are four quarter notes in a measure. In 6/8 time, the eighth note counted as the beat, and there are six eighth notes in a measure.&#xD;&#xD;The Beats in Measure reports the discrepancy between the number of actual beats in a measure versus the required number of beats.&#xD;&#xD;If name durations are not entered correctly, the block reports nothing.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s" readonly="true">4/4<options>4/4&#xD;3/4&#xD;2/4&#xD;6/8&#xD;5/4&#xD;7/4&#xD;9/8&#xD;12/8</options></input></inputs><script><block s="doDeclareVariables"><list><l>Beats Necessary</l><l>Beat Value</l><l>Actual</l></list></block><block s="doSetVar"><l>Beats Necessary</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="Time"/><l>/</l></block></block></block><block s="doSetVar"><l>Beat Value</l><block s="reportQuotient"><l>1</l><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="Time"/><l>/</l></block></block></block></block><block s="doForEach"><l>item</l><block s="reportListItem"><l>2</l><block s="reportListAttribute"><l><option>columns</option></l><block var="Measure"/></block></block><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListContainsItem"><custom-block s="List of Note Durations"></custom-block><block var="item"/></block><block s="reportBoolean"><l><bool>false</bool></l></block></list></block><script><block s="doReport"><l></l></block></script><list></list></block></script></block><block s="doSetVar"><l>Actual</l><block s="reportVariadicSum"><custom-block s="Note Duration Value %s"><block s="reportListItem"><l>2</l><block s="reportListAttribute"><l><option>columns</option></l><block var="Measure"/></block></block></custom-block></block></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportQuotient"><block var="Actual"/><block var="Beat Value"/></block><l> of </l><block var="Beats Necessary"/><l> beats</l></list></block></block></script></block-definition><block-definition s="Note Duration Value %&apos;Duration&apos;" type="reporter" category="Music"><comment x="0" y="0" w="311.42857142857144" collapsed="false">The Note Duration Value block reports the numerical value of the input duration name.&#xD;&#xD;Inputing a list of duration names outputs a list of values.</comment><header></header><code></code><translations></translations><inputs><input type="%s">Quarter<options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Notes={&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;}&#xD;Triplet Notes={&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;}</options></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>Note Duration</l></list></block><block s="doIfElse"><block s="reportIsA"><block var="Duration"/><l><option>list</option></l></block><script><block s="doSetVar"><l>Note Duration</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>item</l><block var="Duration"/><script><block s="doAddToList"><custom-block s="Note Duration Value %s"><block var="item"/></custom-block><block var="Note Duration"/></block></script></block><block s="doReport"><block var="Note Duration"/></block></script><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Duration"/><block s="reportNewList"><list><block s="reportNewList"><list><l>Whole</l><l>1</l></list></block><block s="reportNewList"><list><l>Half</l><l>.5</l></list></block><block s="reportNewList"><list><l>Quarter</l><l>.25</l></list></block><block s="reportNewList"><list><l>Eighth</l><l>.125</l></list></block><block s="reportNewList"><list><l>Sixteenth</l><l>.0625</l></list></block><block s="reportNewList"><list><l>Thirtysecond</l><l>.03125</l></list></block><block s="reportNewList"><list><l>Dotted Whole</l><l>1.5</l></list></block><block s="reportNewList"><list><l>Dotted Half</l><l>.75</l></list></block><block s="reportNewList"><list><l>Dotted Quarter</l><l>.375</l></list></block><block s="reportNewList"><list><l>Dotted Eighth</l><l>.1875</l></list></block><block s="reportNewList"><list><l>Dotted Sixteenth</l><l>.09375</l></list></block><block s="reportNewList"><list><l>Dotted Thirtysecond</l><l>.046876</l></list></block><block s="reportNewList"><list><l>Whole Triplet</l><block s="reportQuotient"><l>2</l><l>3</l></block></list></block><block s="reportNewList"><list><l>Half Triplet</l><block s="reportQuotient"><l>1</l><l>3</l></block></list></block><block s="reportNewList"><list><l>Quarter Triplet</l><block s="reportQuotient"><l>.5</l><l>3</l></block></list></block><block s="reportNewList"><list><l>Eighth Triplet</l><block s="reportQuotient"><block s="reportVariadicProduct"><list><l>.25</l><l>2</l></list></block><l>3</l></block></list></block><block s="reportNewList"><list><l>Sixteenth Triplet</l><block s="reportQuotient"><block s="reportVariadicProduct"><list><l>.125</l><l>2</l></list></block><l>3</l></block></list></block><block s="reportNewList"><list><l>Thirtysecond Triplet</l><block s="reportQuotient"><l>.0625</l><l>3</l></block></list></block></list></block></custom-block></block></block></script></block></script></block></script></block-definition><block-definition s="List of Note Durations" type="reporter" category="Music" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportNewList"><list><l>Whole</l><l>Half</l><l>Quarter</l><l>Eighth</l><l>Sixteenth</l><l>Thirtysecond</l><l>Dotted Whole</l><l>Dotted Half</l><l>Dotted Quarter</l><l>Dotted Eighth</l><l>Dotted Sixteenth</l><l>Dotted Thirtysecond</l><l>Whole Triplet</l><l>Half Triplet</l><l>Quarter Triplet</l><l>Eighth Triplet</l><l>Sixteenth Triplet</l><l>Thirty Second Triplet</l></list></block></block></script></block-definition><block-definition s="Note [ Pitch: %&apos;pitch&apos; Duration: %&apos;duration&apos; ]" type="reporter" category="Music"><header></header><code></code><translations></translations><inputs><input type="%s">C4<options>C3&#xD;D3&#xD;E3&#xD;F3&#xD;G3&#xD;A3&#xD;B3&#xD;C4&#xD;D4&#xD;E4&#xD;F4&#xD;G4&#xD;A4&#xD;B4&#xD;Sharps={&#xD;C#3&#xD;D#3&#xD;E#3&#xD;F#3&#xD;G#3&#xD;A#3&#xD;B#3&#xD;C#4&#xD;D#4&#xD;E#4&#xD;F#4&#xD;G#4&#xD;A#4&#xD;B#4&#xD;}&#xD;Flats={&#xD;Cb3&#xD;Db3&#xD;Eb3&#xD;Fb3&#xD;Gb3&#xD;Ab3&#xD;Bb3&#xD;Cb4&#xD;Db4&#xD;Eb4&#xD;Fb4&#xD;Gb4&#xD;Ab4&#xD;Bb4&#xD;}</options></input><input type="%s">Quarter<options>Whole&#xD;Half&#xD;Quarter&#xD;Eighth&#xD;Sixteenth&#xD;Thirtysecond&#xD;Dotted Whole&#xD;Dotted Half&#xD;Dotted Quarter&#xD;Dotted Eighth&#xD;Dotted Sixteenth&#xD;Dotted Thirtysecond&#xD;Whole Triplet&#xD;Half Triplet&#xD;Quarter Triplet&#xD;Eighth Triplet&#xD;Sixteenth Triplet&#xD;Thirty Second Triplet</options></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="pitch"/><block var="duration"/></list></block></block></script></block-definition><block-definition s="Tone Number: %&apos;number&apos; Frequency: %&apos;frequency&apos; Amplitude: %&apos;amplitude&apos;" type="command" category="Music"><comment x="0" y="0" w="292.14285714285717" collapsed="false">This block assigns a number, frequency, and amplitude to a tone.</comment><header></header><code></code><translations></translations><inputs><input type="%n">1<options>1&#xD;2&#xD;3&#xD;4&#xD;5</options></input><input type="%n"></input><input type="%n">0.5<options>.1&#xD;.2&#xD;.3&#xD;.4&#xD;.5&#xD;.6&#xD;.7&#xD;.8&#xD;.9</options></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_settone(id, frequency, amplitude, balance)</l><list><block var="number"/><block var="frequency"/><block var="amplitude"/><block s="getPan"></block></list></block></script></block-definition><block-definition s="Tone Number: %&apos;Number&apos; %&apos;newOn&apos; On/Off" type="command" category="Music"><comment x="0" y="0" w="371.424916294643" collapsed="false">This block turns the specified tone on or off. This block will play a sine wave. </comment><header></header><code></code><translations></translations><inputs><input type="%n">1<options>1&#xD;2&#xD;3&#xD;4&#xD;5</options></input><input type="%b"></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_turntoneon(id, bool)</l><list><block var="Number"/><block var="newOn"/></list></block></script></block-definition><block-definition s="Tone Off" type="command" category="Music"><comment x="0" y="0" w="234.87792968750003" collapsed="false">This block turns off all the tones currently playing. </comment><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_stoptones()</l><list></list></block></script></block-definition><block-definition s="Play MIDI Controller: %&apos;controller_name&apos; Instrument: %&apos;instrument&apos;" type="command" category="Music"><comment x="0" y="0" w="285.7142857142857" collapsed="false">Passes through the signal from a MIDI controller, allowing the user to play the controller using the assigned instrument. The name of the MIDI controller must be input exactly as it appears on the user&apos;s computer.</comment><header></header><code></code><translations></translations><inputs><input type="%s">MPK mini 3<options>MPK mini 3&#xD;MPK mini play&#xD;MPK Mini Mk II&#xD;M-audio Keystation 49es</options></input><input type="%s" readonly="true">Piano<options>Piano&#xD;Brass={&#xD;French Horn&#xD;Trumpet&#xD;Tuba&#xD;}&#xD;Strings={&#xD;Banjo&#xD;Bass, Acoustic&#xD;Bass, Electric (Finger)&#xD;Cello&#xD;Guitar, Acoustic&#xD;Guitar, Electric&#xD;Guitar, Overdrive&#xD;Harp&#xD;Koto&#xD;Sitar&#xD;Violin&#xD;}&#xD;Woodwinds={&#xD;Bassoon&#xD;Clarinet&#xD;Flute&#xD;Oboe&#xD;Saxophone&#xD;Shakuhachi&#xD;}&#xD;Drums={&#xD;Cabasa&#xD;Snare Drum&#xD;Bass Drum&#xD;Closed Hi-Hat&#xD;Open Hi-Hat&#xD;Mid Tom&#xD;High Tom&#xD;Crash Cymbal&#xD;}&#xD;Other={&#xD;Accordion&#xD;Marimba&#xD;Music Box&#xD;Organ&#xD;Vibraphone&#xD;}</options></input></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_playMIDI(controller, instrument)</l><list><block var="controller_name"/><block var="instrument"/></list></block></script></block-definition><block-definition s="Stop MIDI Controller" type="command" category="Music"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_stopMIDI()</l><list></list></block></script></block-definition><block-definition s="Convert MIDI %&apos;midinumber&apos; to Note" type="reporter" category="Music"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><custom-block s="Convert MIDI %n to Note using %s"><block var="midinumber"/><l>Sharps</l></custom-block></block></script></block-definition><block-definition s="Convert MIDI %&apos;#&apos; to Note using %&apos;Sharps/Flats&apos;" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="217.80831473214303" collapsed="false">Reports the corresponding note (in scientific pitch notation) for the specified MIDI number, matching the use of sharps and flats to the input scientific pitch notation.</comment><header></header><code></code><translations></translations><inputs><input type="%n">60<options>§_pianoKeyboardMenu</options></input><input type="%s" readonly="true">Sharps<options>Sharps&#xD;Flats</options></input></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="#"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="Convert MIDI %n to Note using %s"><l></l><block var="Sharps/Flats"/></custom-block></autolambda><list></list></block><block var="#"/></block></block></script><script><block s="doDeclareVariables"><list><l>Octave</l><l>Note</l></list></block><block s="doSetVar"><l>Octave</l><block s="reportLetter"><l>1</l><block s="reportDifference"><block s="reportQuotient"><block var="#"/><l>12</l></block><l>1</l></block></block></block><block s="doSetVar"><l>Note</l><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportModulus"><block var="#"/><l>12</l></block><l>1</l></list></block><block s="reportIfElse"><block s="reportListContainsItem"><block s="reportNewList"><list><l>♭</l><l>b</l></list></block><block var="Sharps/Flats"/></block><block s="reportNewList"><list><l>C</l><l>Db</l><l>D</l><l>Eb</l><l>E</l><l>F</l><l>Gb</l><l>G</l><l>Ab</l><l>A</l><l>Bb</l><l>B</l></list></block><block s="reportNewList"><list><l>C</l><l>C#</l><l>D</l><l>D#</l><l>E</l><l>F</l><l>F#</l><l>G</l><l>G#</l><l>A</l><l>A#</l><l>B</l></list></block></block></block></block><block s="doReport"><block s="reportJoinWords"><list><block var="Note"/><block var="Octave"/></list></block></block></script></block></script></block-definition><block-definition s="Convert Note %&apos;Note&apos; to MIDI" type="reporter" category="Music"><comment x="0" y="0" w="273.5714285714286" collapsed="false">Reports the midi number of the specified note. The note should be entered using scientific pitch notation (e.g., &quot;C4&quot;).</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportVariadicSum"><list><custom-block s="MIDI %s Note"><custom-block s="Get Note %s"><block var="Note"/></custom-block></custom-block><block s="reportVariadicProduct"><list><l>12</l><block s="reportDifference"><custom-block s="Get Octave %s"><block var="Note"/></custom-block><l>1</l></block></list></block></list></block></block></script></block-definition><block-definition s="Get Note %&apos;Note + Octave&apos;" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="90" collapsed="false">Extracts the note name from the provided scientific pitch notation. (e.g., An input of &quot;C4&quot; produces an output of &quot;C&quot;.)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="Note + Octave"/></block><l>2</l></list></block><block s="reportLetter"><l>1</l><block var="Note + Octave"/></block><block s="reportJoinWords"><list><block s="reportLetter"><l>1</l><block var="Note + Octave"/></block><block s="reportLetter"><l>2</l><block var="Note + Octave"/></block></list></block></block></block></script></block-definition><block-definition s="MIDI %&apos;Note&apos; Note" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="90" collapsed="false">Association list for note names and their corresponding MIDI numbers in the first octave. Used to convert note names to MIDI. </comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>2</l><custom-block s="$flash assoc %s %l"><block var="Note"/><block s="reportNewList"><list><block s="reportNewList"><list><l>Cb</l><l>23</l></list></block><block s="reportNewList"><list><l>C</l><l>24</l></list></block><block s="reportNewList"><list><l>C#</l><l>25</l></list></block><block s="reportNewList"><list><l>Db</l><l>25</l></list></block><block s="reportNewList"><list><l>D</l><l>26</l></list></block><block s="reportNewList"><list><l>D#</l><l>27</l></list></block><block s="reportNewList"><list><l>Eb</l><l>27</l></list></block><block s="reportNewList"><list><l>E</l><l>28</l></list></block><block s="reportNewList"><list><l>E#</l><l>29</l></list></block><block s="reportNewList"><list><l>Fb</l><l>28</l></list></block><block s="reportNewList"><list><l>F</l><l>29</l></list></block><block s="reportNewList"><list><l>F#</l><l>30</l></list></block><block s="reportNewList"><list><l>Gb</l><l>30</l></list></block><block s="reportNewList"><list><l>G</l><l>31</l></list></block><block s="reportNewList"><list><l>G#</l><l>32</l></list></block><block s="reportNewList"><list><l>Ab</l><l>32</l></list></block><block s="reportNewList"><list><l>A</l><l>33</l></list></block><block s="reportNewList"><list><l>A#</l><l>34</l></list></block><block s="reportNewList"><list><l>Bb</l><l>34</l></list></block><block s="reportNewList"><list><l>B</l><l>35</l></list></block><block s="reportNewList"><list><l>B#</l><l>36</l></list></block></list></block></custom-block></block></block></script></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="reportVariadicEquals"><list><block var="key"/><block s="reportListItem"><l>1</l><l/></block></list></block></autolambda><list></list></block><block var="a-list"/></block></block></script></block-definition><block-definition s="Get Octave %&apos;Note&apos;" type="reporter" category="Music" helper="true"><comment x="0" y="0" w="90" collapsed="false">Extracts the octave number from the provided scientific pitch notation. (e.g., An input of &quot;C4&quot; produces an output of &quot;4&quot;.)</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block var="Note"/></block><l>2</l></list></block><script><block s="doReport"><block s="reportLetter"><l>2</l><block var="Note"/></block></block></script><list></list></block><block s="doReport"><block s="reportLetter"><l>3</l><block var="Note"/></block></block></script></block-definition><block-definition s="Import MIDI File" type="reporter" category="Music"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doApplyExtension"><l>ts_parsemidifile()</l><list></list></block><block s="doWaitUntil"><block s="reportVariadicEquals"><list><block s="getLastMessage"></block><l>ts_file_input_received</l></list></block></block><block s="doReport"><block s="reportApplyExtension"><l>ts_getparsed()</l><list></list></block></block></script></block-definition><block-definition s="Convert MIDI File %&apos;File&apos; to TuneScope" type="reporter" category="Music"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>Note</l><l>Duration</l><l>List</l><l>Length of List</l></list></block><block s="doSetVar"><l>List</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Length of List</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>6</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="File"/></block></block></block></block></block></block></block></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><block var="Length of List"/><script><block s="doSetVar"><l>Note</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>4</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block s="reportListItem"><l>2</l><block s="reportListItem"><l>6</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="File"/></block></block></block></block></block></block></block></block></block></block></block><block s="doSetVar"><l>Duration</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="i"/><block s="reportListItem"><l>2</l><block s="reportListItem"><l>6</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListItem"><l>2</l><block s="reportListItem"><l>2</l><block var="File"/></block></block></block></block></block></block></block></block></block></block></block><block s="doSetVar"><l>List</l><block s="reportConcatenatedLists"><list><block var="List"/><block s="reportNewList"><list><block s="reportNewList"><list><block var="Note"/><block var="Duration"/></list></block></list></block></list></block></block></script></block></script></block><block s="doReport"><block var="List"/></block></script></block-definition><block-definition s="Current Note" type="reporter" category="Music"><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="Load TuneScope Primitives"></custom-block><block s="doReport"><block s="reportApplyExtension"><l>ts_getcurrentnote()</l><list></list></block></block></script></block-definition><block-definition s="Load TuneScope Primitives" type="command" category="Music" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/WebAudioFontPlayer.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/webmidi.iife.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0100_SBLive_sf2.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0291_LesPaul_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0020_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0121_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0180_Chaos_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0230_Aspirin_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0241_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0260_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0320_GeneralUserGS_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0350_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0400_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0420_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0460_GeneralUserGS_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0110_GeneralUserGS_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0560_GeneralUserGS_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0580_GeneralUserGS_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0600_GeneralUserGS_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0650_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0680_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0700_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0710_Chaos_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0730_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/0770_SBLive_sf2.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/1040_Aspirin_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/1050_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/1070_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12835_21_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12840_6_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12842_0_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12846_0_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12847_21_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12848_21_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12849_21_FluidR3_GM_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/12869_6_JCLive_sf2_file.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/tonejs/package/build/Midi.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/TS_init.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/TuneScope/TuneScope.js</l></list></block><block s="doWaitUntil"><block s="reportApplyExtension"><l>ts_loaded()</l><list></list></block></block></script></block-definition><block-definition s="Render 3D line from %&apos;x1&apos; %&apos;y1&apos; %&apos;z1&apos; to %&apos;x2&apos; %&apos;y2&apos; %&apos;z2&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>v1</l><l>v2</l><l>screen v1</l><l>screen v2</l></list></block><block s="doSetVar"><l>v1</l><custom-block s="Calculate 3D vertex %s %s %s"><block var="x1"/><block var="y1"/><block var="z1"/><variables><variable name="vert"><l>0</l></variable></variables></custom-block></block><block s="doSetVar"><l>v2</l><custom-block s="Calculate 3D vertex %s %s %s"><block var="x2"/><block var="y2"/><block var="z2"/><variables><variable name="vert"><l>0</l></variable></variables></custom-block></block><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><list><block s="reportVariadicLessThan"><list><custom-block s="vec3.z %l"><block var="v1"/></custom-block><block var="near clip"/></list></block><block s="reportVariadicLessThan"><list><custom-block s="vec3.z %l"><block var="v2"/></custom-block><block var="near clip"/></list></block></list></block></block><script><custom-block s="Z clip line %s %s"><block var="v1"/><block var="v2"/></custom-block><block s="doSetVar"><l>screen v1</l><custom-block s="3D %s %s %s fov %s to 2D"><custom-block s="vec3.x %l"><block var="v1"/></custom-block><custom-block s="vec3.y %l"><block var="v1"/></custom-block><custom-block s="vec3.z %l"><block var="v1"/></custom-block><block var="fov"/></custom-block></block><block s="doSetVar"><l>screen v2</l><custom-block s="3D %s %s %s fov %s to 2D"><custom-block s="vec3.x %l"><block var="v2"/></custom-block><custom-block s="vec3.y %l"><block var="v2"/></custom-block><custom-block s="vec3.z %l"><block var="v2"/></custom-block><block var="fov"/></custom-block></block><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><custom-block s="Make vec3 %s %s %s"><block var="r"/><block var="g"/><block var="b"/></custom-block></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="screen v1"/></custom-block><custom-block s="vec2.y %l"><block var="screen v1"/></custom-block></block><block s="down"></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="screen v2"/></custom-block><custom-block s="vec2.y %l"><block var="screen v2"/></custom-block></block><block s="up"></block></script><list></list></block></script></block-definition><block-definition s="Sort Dictionary %&apos;list 1&apos; %&apos;list 2&apos;" type="command" category="Misc"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>temp</l></list></block><block s="doFor"><l>i</l><l>1</l><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list 2"/></block><l>1</l></block><script><block s="doFor"><l>j</l><l>1</l><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list 2"/></block><l>1</l></block><script><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListItem"><block s="reportVariadicSum"><list><block var="j"/><l>1</l></list></block><block var="list 2"/></block><block s="reportListItem"><block var="j"/><block var="list 2"/></block></list></block><script><block s="doSetVar"><l>temp</l><block s="reportListItem"><block var="j"/><block var="list 1"/></block></block><block s="doReplaceInList"><block var="j"/><block var="list 1"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="j"/><l>1</l></list></block><block var="list 1"/></block></block><block s="doReplaceInList"><block s="reportVariadicSum"><list><block var="j"/><l>1</l></list></block><block var="list 1"/><block var="temp"/></block><block s="doSetVar"><l>temp</l><block s="reportListItem"><block var="j"/><block var="list 2"/></block></block><block s="doReplaceInList"><block var="j"/><block var="list 2"/><block s="reportListItem"><block s="reportVariadicSum"><list><block var="j"/><l>1</l></list></block><block var="list 2"/></block></block><block s="doReplaceInList"><block s="reportVariadicSum"><list><block var="j"/><l>1</l></list></block><block var="list 2"/><block var="temp"/></block></script><list></list></block></script></block></script></block></script></block-definition><block-definition s="Clamp %&apos;value&apos; min %&apos;min&apos; max %&apos;max&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>v</l></list></block><block s="doSetVar"><l>v</l><block var="value"/></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="v"/><block var="max"/></list></block><script><block s="doSetVar"><l>v</l><block var="max"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicLessThan"><list><block var="v"/><block var="min"/></list></block><script><block s="doSetVar"><l>v</l><block var="min"/></block></script><list></list></block><block s="doReport"><block var="v"/></block></script></block-definition><block-definition s="Draw scanline from %&apos;x1&apos; to %&apos;x2&apos; Y pos %&apos;y&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>x</l></list></block><block s="doSetVar"><l>x</l><block var="x1"/></block><block s="doRepeat"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><script><block s="doChangeVar"><l>x</l><l>1</l></block><custom-block s="Plot %s %s color %s %s %s"><block var="x"/><block var="y"/><block var="r"/><block var="g"/><block var="b"/></custom-block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="x"/><l>240</l></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script><list></list></block></script></block></script></block-definition><block-definition s="FPS %&apos;last tick30&apos;" type="command" category="Misc"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doSetVar"><l>tick30</l><block s="reportVariadicProduct"><list><block s="getTimer"></block><l>30</l></list></block></block><block s="doSetVar"><l>Delta</l><block s="reportDifference"><block var="tick30"/><block var="last tick30"/></block></block><block s="doSetVar"><l>FPS</l><block s="reportRound"><block s="reportQuotient"><l>30</l><block var="Delta"/></block></block></block></script><scripts><script x="207.998046875" y="166.49999999999994"><block s="reportVariadicProduct"><list><l></l><l>100</l></list></block></script><script x="357.07421875" y="135.49999999999994"><block s="reportQuotient"><l></l><l>100</l></block></script></scripts></block-definition><block-definition s="Z clip line %&apos;v1&apos; %&apos;v2&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>percent</l><l>x1</l><l>y1</l><l>z1</l><l>x2</l><l>y2</l><l>z2</l></list></block><block s="doSetVar"><l>x1</l><custom-block s="vec3.x %l"><block var="v1"/></custom-block></block><block s="doSetVar"><l>x2</l><custom-block s="vec3.x %l"><block var="v2"/></custom-block></block><block s="doSetVar"><l>y1</l><custom-block s="vec3.y %l"><block var="v1"/></custom-block></block><block s="doSetVar"><l>y2</l><custom-block s="vec3.y %l"><block var="v2"/></custom-block></block><block s="doSetVar"><l>z1</l><custom-block s="vec3.z %l"><block var="v1"/></custom-block></block><block s="doSetVar"><l>z2</l><custom-block s="vec3.z %l"><block var="v2"/></custom-block></block><block s="doSetVar"><l>percent</l><block s="reportQuotient"><block s="reportDifference"><block var="near clip"/><block var="z1"/></block><block s="reportDifference"><block var="z2"/><block var="z1"/></block></block></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><block var="z1"/><block var="near clip"/></list></block><script><block s="doSetVar"><l>v1</l><custom-block s="Make vec3 %s %s %s"><block s="reportVariadicSum"><list><block var="x1"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="x2"/><block var="x1"/></block><block var="percent"/></list></block></list></block><block s="reportVariadicSum"><list><block var="y1"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="y2"/><block var="y1"/></block><block var="percent"/></list></block></list></block><block var="near clip"/></custom-block></block></script><script><block s="doIf"><block s="reportVariadicLessThan"><list><block var="z2"/><block var="near clip"/></list></block><script><block s="doSetVar"><l>v2</l><custom-block s="Make vec3 %s %s %s"><block s="reportVariadicSum"><list><block var="x1"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="x2"/><block var="x1"/></block><block var="percent"/></list></block></list></block><block s="reportVariadicSum"><list><block var="y1"/><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="y2"/><block var="y1"/></block><block var="percent"/></list></block></list></block><block var="near clip"/></custom-block></block></script><list></list></block></script></block></script></block-definition><block-definition s="ask for files of types %&apos;types&apos; for %&apos;callback&apos;" type="command" category="sensing"><comment x="0" y="0" w="451.7978515625001" collapsed="false">Opens the file select dialog. When the user has submitted at least one file, it will run the ring with the file list as the input.&#xD;&#xD;To make it accept only a certain file extension, write the file extension, including the dot, or the MIME type (e.g. &quot;.txt&quot;, &quot;text/plain&quot;) in the text field. You can make it accept multiple file extension types by adding more text fields.&#xD;&#xD;Remove all input fields to make it accept all files. </comment><header></header><code></code><translations></translations><inputs><input type="%mult%txt"></input><input type="%cmdRing"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>typesList</l><l>callback</l></list><l>var receiver = this;&#xD;&#xD;var input = document.createElement("input");&#xD;input.type = "file";&#xD;input.id = "fileInput";&#xD;input.style = "position:absolute;display:none;"&#xD;input.multiple = true;&#xD;document.body.appendChild(input);&#xD;console.log(callback);&#xD;&#xD;input.onchange = function() {&#xD;  delete input.onchange;&#xD;&#xD;  //copied from Process.prototype.fork&#xD;  var proc = new Process();&#xD;  var stage = receiver.parentThatIsA(StageMorph);&#xD;  proc.instrument = receiver.instrument;&#xD;  proc.receiver = receiver;&#xD;  proc.initializeFor(callback, new List([new List(input.files)]) );&#xD;  stage.threads.processes.push(proc);&#xD;}&#xD;&#xD;var types = typesList.asArray();&#xD;&#xD;//compile types list to comma separated list&#xD;var accept = "";&#xD;&#xD;if (types.length &gt; 0) {&#xD;  for (let i in types) {&#xD;    let v = types[i];&#xD;    &#xD;    if (typeof v == "string") {&#xD;      accept += v&#xD;    }&#xD;    &#xD;    if (i + 1 &lt; types.length) { //last item doesn&apos;t have a comma at the end&#xD;      accept += ","&#xD;    }&#xD;  }&#xD;} else {&#xD;  accept = "*.*"; //i think that means all files&#xD;}&#xD;&#xD;input.accept = accept; &#xD;input.click();</l></block><list><block var="types"/><block var="callback"/></list></block></script></block-definition><block-definition s="%&apos;prop&apos; of file %&apos;file&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Gets an attribute of a file.&#xD;&#xD;The last modified attribute reports the time the file was last modified in milliseconds since the Unix epoch (Jan 1, 1970, 12:00 AM)</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">name<options>name&#xD;size&#xD;type&#xD;last modified</options></input><input type="%l"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="prop"/><l>name</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.name;</l></block><list><block var="file"/></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="prop"/><l>size</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.size;</l></block><list><block var="file"/></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="prop"/><l>type</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.type;</l></block><list><block var="file"/></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="prop"/><l>last modified</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return file.lastModified;</l></block><list><block var="file"/></list></block></block></script><list></list></block></script></block-definition><block-definition s="read file %&apos;file&apos; as %&apos;type&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Reads a file as a certain type.&#xD;&#xD;The binary string type is the file&apos;s actual contents in binary (I think). So can someone please make a MIDI player with my library.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s" readonly="true">text<options>text&#xD;binary string&#xD;costume&#xD;vector costume&#xD;sound</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l><l>type</l><l>process</l></list><l>if (!(file instanceof File)) throw new Error("Not a file");&#xD;&#xD;var reader = new FileReader();&#xD;var readerResult;&#xD;&#xD;var isMedia = type == "costume" || type == "vector costume" || type == "sound";&#xD;&#xD;reader.addEventListener("load", function() {&#xD;    var res = reader.result;&#xD;&#xD;    if (type == "costume" || type == "vector costume") {&#xD;        var img = document.createElement("img");&#xD;        &#xD;        img.onload = function() {&#xD;          //for bitmap costume&#xD;          if (type == "costume") {&#xD;            var canvas = document.createElement("canvas");&#xD;            canvas.width = img.width;&#xD;            canvas.height = img.height;&#xD;            canvas.getContext("2d").drawImage(img, 0, 0);&#xD;&#xD;            readerResult = new Costume(canvas, file.name);&#xD;          } else if (type == "vector costume") { //for vector costume&#xD;            readerResult = new SVG_Costume(img, file.name);&#xD;          }&#xD;&#xD;          process.resume()&#xD;        }&#xD;&#xD;        img.src = res;&#xD;    } else if (type == "sound") {&#xD;       var audioElem = document.createElement("audio");&#xD;&#xD;       audioElem.type = file.type;&#xD;       audioElem.src = res;&#xD;&#xD;       readerResult = new Sound(audioElem, file.name);&#xD;       process.resume(); &#xD;    } else {&#xD;        readerResult = res;&#xD;        process.resume();&#xD;    }&#xD;})&#xD;    &#xD;if (isMedia) {&#xD;  if (type == "costume" &amp;&amp; file.type.slice(0, 6) != "image/") throw new Error("Not an image file");&#xD;  if (type == "vector costume" &amp;&amp; file.type != "image/svg+xml") throw new Error("Not an SVG file");&#xD;  if (type == "sound" &amp;&amp; file.type.slice(0, 6) != "audio/") throw new Error("Not an audio file");&#xD;&#xD;  reader.readAsDataURL(file);&#xD;} else if (type == "text") {&#xD;  reader.readAsText(file);&#xD;} else if (type == "binary string") {&#xD;  reader.readAsBinaryString(file);&#xD;} else {&#xD;  throw new Error("Incorrect type");&#xD;}&#xD;&#xD;process.homeContext.variables.addVar("res")&#xD;process.pause();&#xD;&#xD;return function() {&#xD;  return readerResult;&#xD;}</l></block><list><block var="file"/><block var="type"/></list></block><list></list></block></block></script></block-definition><block-definition s="is %&apos;file&apos; a %&apos;type&apos; file?" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%txt" readonly="true">text<options>image&#xD;audio&#xD;video&#xD;text&#xD;SVG&#xD;MIDI&#xD;any</options></input></inputs><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list><l>file</l></list><l>return !(file instanceof File);</l></block><list><block var="file"/></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>any</l></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>MIDI</l></list></block><script><block s="doReport"><block s="reportVariadicEquals"><list><l>mid</l><block s="reportListItem"><l>2</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>/</l></block></block></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>SVG</l></list></block><script><block s="doReport"><block s="reportVariadicEquals"><list><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>image/svg+xml</l></list></block></block></script><list></list></block><block s="doReport"><block s="reportVariadicEquals"><list><block var="type"/><block s="reportListItem"><l>1</l><block s="reportTextSplit"><custom-block s="%s of file %l"><l>type</l><block var="file"/></custom-block><l>/</l></block></block></list></block></block></script></block-definition><block-definition s="rotate vec3 %&apos;vec3&apos; by player view" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>z</l></list></block><block s="doSetVar"><l>x</l><custom-block s="vec3.x %l"><block var="vec3"/></custom-block></block><block s="doSetVar"><l>y</l><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></block><block s="doSetVar"><l>z</l><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></block><custom-block s="// %s"><l>Z rot</l></custom-block><block s="doSetVar"><l>x</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 by %l sin %s cos %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></custom-block><custom-block s="vec3.z %l"><block var="Player rot sin"/></custom-block><custom-block s="vec3.z %l"><block var="Player rot cos"/></custom-block></custom-block></custom-block></block><block s="doSetVar"><l>y</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 by %l sin %s cos %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.y %l"><block var="vec3"/></custom-block></custom-block><custom-block s="vec3.z %l"><block var="Player rot sin"/></custom-block><custom-block s="vec3.z %l"><block var="Player rot cos"/></custom-block></custom-block></custom-block></block><custom-block s="Set vec3 %l components to %s %s %s"><block var="vec3"/><block var="x"/><block var="y"/><block var="z"/></custom-block><custom-block s="// %s"><l>Y rot</l></custom-block><block s="doSetVar"><l>x</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 by %l sin %s cos %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><custom-block s="vec3.y %l"><block var="Player rot sin"/></custom-block><custom-block s="vec3.y %l"><block var="Player rot cos"/></custom-block></custom-block></custom-block></block><block s="doSetVar"><l>z</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 by %l sin %s cos %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.x %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><custom-block s="vec3.y %l"><block var="Player rot sin"/></custom-block><custom-block s="vec3.y %l"><block var="Player rot cos"/></custom-block></custom-block></custom-block></block><custom-block s="Set vec3 %l components to %s %s %s"><block var="vec3"/><block var="x"/><block var="y"/><block var="z"/></custom-block><block s="doSetVar"><l>y</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 by %l sin %s cos %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.y %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><custom-block s="vec3.x %l"><block var="Player rot sin"/></custom-block><custom-block s="vec3.x %l"><block var="Player rot cos"/></custom-block></custom-block></custom-block></block><block s="doSetVar"><l>z</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 by %l sin %s cos %s"><custom-block s="make vec2 %s %s"><custom-block s="vec3.y %l"><block var="vec3"/></custom-block><custom-block s="vec3.z %l"><block var="vec3"/></custom-block></custom-block><custom-block s="vec3.x %l"><block var="Player rot sin"/></custom-block><custom-block s="vec3.x %l"><block var="Player rot cos"/></custom-block></custom-block></custom-block></block><custom-block s="// %s"><l>X rot</l></custom-block><block s="doReport"><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></block></script></block-definition><block-definition s="rotate vec2 by %&apos;vec2&apos; sin %&apos;sin&apos; cos %&apos;cos&apos;" type="reporter" category="Vector math"><header></header><code></code><translations></translations><inputs><input type="%l"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>x</l><l>y</l></list></block><block s="doSetVar"><l>x</l><block s="reportDifference"><block s="reportVariadicProduct"><list><custom-block s="vec2.x %l"><block var="vec2"/></custom-block><block var="cos"/></list></block><block s="reportVariadicProduct"><list><custom-block s="vec2.y %l"><block var="vec2"/></custom-block><block var="sin"/></list></block></block></block><block s="doSetVar"><l>y</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><custom-block s="vec2.x %l"><block var="vec2"/></custom-block><block var="sin"/></list></block><block s="reportVariadicProduct"><list><custom-block s="vec2.y %l"><block var="vec2"/></custom-block><block var="cos"/></list></block></list></block></block><block s="doReport"><custom-block s="make vec2 %s %s"><block var="x"/><block var="y"/></custom-block></block></script></block-definition><block-definition s="%&apos;head&apos; in front of stream %&apos;tail&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of IN FRONT OF.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is here in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:a prefixação de _ ao canal _&#xD;</translations><inputs><input type="%s"></input><input type="%anyUE"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="head"/><block var="tail"/><block s="reportBoolean"><l><bool>false</bool></l></block><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></block></script></block-definition><block-definition s="head of stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of ITEM 1 OF.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:o primeiro item do canal _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="stream"/></block></block></script></block-definition><block-definition s="tail of stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of ALL BUT FIRST OF.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:um canal com todos os itens de _ menos o primeiro&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportListItem"><l>3</l><block var="stream"/></block><script><block s="doReport"><block s="reportListItem"><l>4</l><block var="stream"/></block></block></script><list></list></block><block s="doReplaceInList"><l>4</l><block var="stream"/><block s="evaluate"><block s="reportListItem"><l>2</l><block var="stream"/></block><list></list></block></block><block s="doReplaceInList"><l>3</l><block var="stream"/><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doReport"><block s="reportListItem"><l>4</l><block var="stream"/></block></block></script></block></script></block-definition><block-definition s="map %&apos;function&apos; over stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of variadic MAP (any number of input lists, like&#xD;MULTIMAP in the list utilities library).&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:a aplicação de _ aos itens dos canais _&#xD;</translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="stream"/></block><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doReport"><custom-block s="%s in front of stream %anyUE"><block s="evaluate"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="head of stream %l"><l/></custom-block></autolambda><list></list></block><block var="stream"/></block></block><custom-block s="map %repRing over stream %mult%l"><block var="function"/><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="tail of stream %l"><l/></custom-block></autolambda><list></list></block><block var="stream"/></block></custom-block></custom-block></block></script></block></script></block-definition><block-definition s="keep items such that %&apos;pred&apos; from stream %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of KEEP.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:os itens tais que _ do canal _&#xD;</translations><inputs><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="stream"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIfElse"><block s="evaluate"><block var="pred"/><list><custom-block s="head of stream %l"><block var="stream"/></custom-block></list></block><script><block s="doReport"><custom-block s="%s in front of stream %anyUE"><custom-block s="head of stream %l"><block var="stream"/></custom-block><custom-block s="keep items such that %predRing from stream %l"><block var="pred"/><custom-block s="tail of stream %l"><block var="stream"/></custom-block></custom-block></custom-block></block></script><script><block s="doReport"><custom-block s="keep items such that %predRing from stream %l"><block var="pred"/><custom-block s="tail of stream %l"><block var="stream"/></custom-block></custom-block></block></script></block></script></block></script></block-definition><block-definition s="show stream %&apos;stream&apos; %&apos;number&apos;" type="reporter" category="lists"><comment x="0" y="0" w="364" collapsed="false">The inputs are a stream and a positive integer.  SHOW STREAM reports a&#xD;regular finite list of length less than (for short finite streams) or equal to the&#xD;second input.  It&apos;s useful because an infinite stream can&apos;t be displayed in a&#xD;finite amount of time.</comment><header></header><code></code><translations>pt:uma lista com os itens do canal _ até ao _ º&#xD;</translations><inputs><input type="%l"></input><input type="%n">10</input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="stream"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="number"/><l>0</l></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doReport"><block s="reportCONS"><custom-block s="head of stream %l"><block var="stream"/></custom-block><custom-block s="show stream %l %n"><custom-block s="tail of stream %l"><block var="stream"/></custom-block><block s="reportDifference"><block var="number"/><l>1</l></block></custom-block></block></block></script></block-definition><block-definition s="stream %&apos;items&apos;" type="reporter" category="lists"><comment x="0" y="0" w="343.3333333333333" collapsed="false">Make a stream from a finite collection of items, like the LIST primitive.&#xD;Since this block is typically used for small amounts of data, it does not&#xD;delay computation of its inputs.</comment><header></header><code></code><translations>pt:um canal com _&#xD;</translations><inputs><input type="%mult%s"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="items"/></block><script><block s="doReport"><block var="items"/></block></script><list></list></block><block s="doReport"><custom-block s="%s in front of stream %anyUE"><block s="reportListItem"><l>1</l><block var="items"/></block><custom-block s="stream %mult%s"><block s="reportCDR"><block var="items"/></block></custom-block></custom-block></block></script></block-definition><block-definition s="sieve %&apos;stream&apos;" type="reporter" category="lists"><comment x="0" y="0" w="478" collapsed="false">Call this block with STREAM WITH NUMBERS FROM 2&#xD;as its input to get the infinite stream of all the prime numbers.&#xD;&#xD;It&apos;s called SIEVE because the algorithm it uses is the Sieve of&#xD;Eratosthenes (clickable link):&#xD;https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes&#xD;&#xD;Look inside; it&apos;s a beautifully elegant algorithm.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:a crivagem do canal _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="%s in front of stream %anyUE"><custom-block s="head of stream %l"><block var="stream"/></custom-block><custom-block s="sieve %l"><custom-block s="keep items such that %predRing from stream %l"><block s="reifyPredicate"><autolambda><block s="reportVariadicGreaterThan"><list><block s="reportModulus"><l></l><custom-block s="head of stream %l"><block var="stream"/></custom-block></block><l>0</l></list></block></autolambda><list></list></block><custom-block s="tail of stream %l"><block var="stream"/></custom-block></custom-block></custom-block></custom-block></block></script></block></script></block-definition><block-definition s="stream with numbers from %&apos;start&apos;" type="reporter" category="lists"><comment x="0" y="0" w="418.6106770833333" collapsed="false">The stream version of NUMBERS FROM 1 TO, with no&#xD;ending number because it reports the infinite stream of all&#xD;the integers greater than or equal to its input.&#xD;&#xD;Read the code!  It&apos;s deceptively simple.&#xD;&#xD;Streams, also called lazy lists, are like lists except that&#xD;items are not computed until they&apos;re needed.  This allows&#xD;for more efficient handling of large computed lists, and&#xD;even infinite lists.  The only piece of magic is in &#xD;IN FRONT OF STREAM, whose second input is of type &#xD;Unevaluated, which means that it&apos;s a procedure, with &#xD;a sort of invisible gray ring. So HEAD OF STREAM is just &#xD;ITEM 1 OF, but TAIL OF STREAM has a CALL block &#xD;to make the computation happen.&#xD;&#xD;For a tutorial introduction to streams, read SICP 3.5:&#xD;https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-24.html#%_sec_3.5&#xD;or Brian&apos;s lecture notes (start on page 74):&#xD;https://people.eecs.berkeley.edu/&#126;bh/61a-pages/Volume2/notes.pdf&#xD;The above are clickable links!</comment><header></header><code></code><translations>pt:um canal com os números a partir de _&#xD;</translations><inputs><input type="%n">1</input></inputs><script><block s="doReport"><custom-block s="%s in front of stream %anyUE"><block var="start"/><custom-block s="stream with numbers from %n"><block s="reportVariadicSum"><list><block var="start"/><l>1</l></list></block></custom-block></custom-block></block></script></block-definition><block-definition s="stream demo" type="command" category="lists"><comment x="0" y="0" w="174.66666666666666" collapsed="true">Read the code while running it, </comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>ones</l><l>ints</l><l>primes</l></list></block><block s="doSetVar"><l>ones</l><custom-block s="%s in front of stream %anyUE"><l>1</l><block var="ones"/></custom-block></block><block s="doSetVar"><l>ints</l><custom-block s="%s in front of stream %anyUE"><l>1</l><custom-block s="map %repRing over stream %mult%l"><block s="reifyReporter"><autolambda><block s="reportVariadicSum"><list><l></l><l></l></list></block></autolambda><list></list></block><list><block var="ones"/><block var="ints"/></list></custom-block></custom-block></block><block s="doSetVar"><l>primes</l><custom-block s="sieve %l"><custom-block s="stream with numbers from %n"><l>2</l></custom-block></custom-block></block><block s="doSayFor"><custom-block s="show stream %l %n"><block var="ones"/><l>10</l></custom-block><l>2</l></block><block s="doSayFor"><custom-block s="show stream %l %n"><block var="ints"/><l>10</l></custom-block><l>2</l></block><block s="doSayFor"><custom-block s="show stream %l %n"><block var="primes"/><l>10</l></custom-block><l>2</l></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="1" color="255,255,255,1" tempo="60" threadsafe="true" penlog="true" volume="100" pan="0" lines="flat" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="5313"><pentrails>data:image/png;base64,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</pentrails><costumes><list id="5314"><item><ref mediaID="Stage_cst_Untitled"></ref></item></list></costumes><sounds><list struct="atomic" id="5315"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Player" idx="2" x="163" y="69" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="144.84000000000012,0,181.04999999999998,1" pen="tip" id="5320"><costumes><list struct="atomic" id="5321"></list></costumes><sounds><list struct="atomic" id="5322"></list></sounds><blocks></blocks><variables></variables><scripts><script x="64.54557291666663" y="30"><block s="receiveGo"></block><block s="doSetVar"><l>fov</l><l>180</l></block><block s="setEffect"><l><option>ghost</option></l><l>100</l></block><block s="doSetVar"><l>Player pos</l><custom-block s="Make vec3 %s %s %s"><l>50</l><l>50</l><l>-100</l></custom-block></block><block s="doSetVar"><l>Player rot</l><custom-block s="Make vec3 %s %s %s"><l>0</l><l>0</l><l>0</l></custom-block></block><block s="doSetVar"><l>near clip</l><block s="reportQuotient"><l>1</l><block var="fov"/></block></block><block s="doSetVar"><l>Player speed</l><l>6</l></block><block s="doSetVar"><l>far clip</l><l>500</l></block><block s="doSetVar"><l>Debug View</l><l>lit</l></block><block s="doSetVar"><l>RES</l><l>3</l></block><block s="doForever"><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>z</l></list></block><block s="doSetVar"><l>Player rot sin</l><custom-block s="Make vec3 %s %s %s"><block s="reportMonadic"><l><option>sin</option></l><custom-block s="vec3.x %l"><block var="Player rot"/></custom-block></block><block s="reportMonadic"><l><option>sin</option></l><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block></block><block s="reportMonadic"><l><option>sin</option></l><custom-block s="vec3.z %l"><block var="Player rot"/></custom-block></block></custom-block></block><block s="doSetVar"><l>Player rot cos</l><custom-block s="Make vec3 %s %s %s"><block s="reportMonadic"><l><option>cos</option></l><custom-block s="vec3.x %l"><block var="Player rot"/></custom-block></block><block s="reportMonadic"><l><option>cos</option></l><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block></block><block s="reportMonadic"><l><option>cos</option></l><custom-block s="vec3.z %l"><block var="Player rot"/></custom-block></block></custom-block></block><block s="doIf"><block s="reportKeyPressed"><l><option>w</option></l></block><script><block s="doSetVar"><l>x</l><block s="reportDifference"><l></l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><l>0</l><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block></block><block s="doSetVar"><l>z</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><l>0</l><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>Player pos</l><custom-block s="vec3 %l translate %l"><block var="Player pos"/><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>s</option></l></block><script><block s="doSetVar"><l>x</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><l>0</l><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>1.8815123388177615</l></variable><variable name="y"><l>17.901394116628918</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>z</l><block s="reportDifference"><l></l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><l>0</l><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>1.8815123388177615</l></variable><variable name="y"><l>17.901394116628918</l></variable></variables></custom-block></custom-block></block></block><block s="doSetVar"><l>Player pos</l><custom-block s="vec3 %l translate %l"><block var="Player pos"/><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>a</option></l></block><script><block s="doSetVar"><l>x</l><block s="reportDifference"><l></l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block><l>0</l></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block></block><block s="doSetVar"><l>z</l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block><l>0</l></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>Player pos</l><custom-block s="vec3 %l translate %l"><block var="Player pos"/><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>d</option></l></block><script><block s="doSetVar"><l>x</l><custom-block s="vec2.x %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block><l>0</l></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block><block s="doSetVar"><l>z</l><block s="reportDifference"><l></l><custom-block s="vec2.y %l"><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block s="reportVariadicProduct"><list><block var="Player speed"/><block var="Delta"/></list></block><l>0</l></custom-block><custom-block s="vec3.y %l"><block var="Player rot"/></custom-block><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></custom-block></block></block><block s="doSetVar"><l>Player pos</l><custom-block s="vec3 %l translate %l"><block var="Player pos"/><custom-block s="Make vec3 %s %s %s"><block var="x"/><block var="y"/><block var="z"/></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>left arrow</option></l></block><script><block s="doSetVar"><l>Player rot</l><custom-block s="vec3 %l translate %l"><block var="Player rot"/><custom-block s="Make vec3 %s %s %s"><l>0</l><block s="reportVariadicProduct"><list><l>-2</l><block var="Delta"/></list></block><l>0</l></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>right arrow</option></l></block><script><block s="doSetVar"><l>Player rot</l><custom-block s="vec3 %l translate %l"><block var="Player rot"/><custom-block s="Make vec3 %s %s %s"><l>0</l><block s="reportVariadicProduct"><list><l>2</l><block var="Delta"/></list></block><l>0</l></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>up arrow</option></l></block><script><block s="doSetVar"><l>Player rot</l><custom-block s="vec3 %l translate %l"><block var="Player rot"/><custom-block s="Make vec3 %s %s %s"><block s="reportVariadicProduct"><list><l>-2</l><block var="Delta"/></list></block><l>0</l><l>0</l></custom-block></custom-block></block></script><list></list></block><block s="doIf"><block s="reportKeyPressed"><l><option>down arrow</option></l></block><script><block s="doSetVar"><l>Player rot</l><custom-block s="vec3 %l translate %l"><block var="Player rot"/><custom-block s="Make vec3 %s %s %s"><block s="reportVariadicProduct"><list><l>2</l><block var="Delta"/></list></block><l>0</l><l>0</l></custom-block></custom-block></block></script><list></list></block><block s="doReplaceInList"><l>1</l><block var="Player rot"/><block s="reportModulus"><block s="reportListItem"><l>1</l><block var="Player rot"/></block><l>360</l></block></block><block s="doReplaceInList"><l>2</l><block var="Player rot"/><block s="reportModulus"><block s="reportListItem"><l>2</l><block var="Player rot"/></block><l>360</l></block></block><block s="doReplaceInList"><l>3</l><block var="Player rot"/><block s="reportModulus"><block s="reportListItem"><l>3</l><block var="Player rot"/></block><l>360</l></block></block></script></block></script></block></script><script x="918.545572916667" y="943.4999999999995"><block s="receiveGo"></block><block s="doForever"><script><custom-block s="FPS %s"><block var="tick30"/></custom-block></script></block></script></scripts></sprite><sprite name="Renderer" idx="1" x="-54" y="19" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="166,65,92,1" pen="tip" id="5777"><costumes><list id="5778"><item><ref mediaID="Renderer_cst_Render"></ref></item></list></costumes><sounds><list struct="atomic" id="5779"></list></sounds><blocks><block-definition s="Draw flat bottom tri %&apos;x1&apos; %&apos;y1&apos; %&apos;x2&apos; %&apos;y2&apos; %&apos;x3&apos; %&apos;y3&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; scanline angle %&apos;scanAngle&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>invslope1</l><l>invslope2</l><l>curx1</l><l>curx2</l><l>y</l><l>v1</l><l>v2</l></list></block><block s="doSetVar"><l>invslope1</l><block s="reportQuotient"><block s="reportDifference"><block var="x2"/><block var="x1"/></block><block s="reportDifference"><block var="y2"/><block var="y1"/></block></block></block><block s="doSetVar"><l>invslope2</l><block s="reportQuotient"><block s="reportDifference"><block var="x3"/><block var="x1"/></block><block s="reportDifference"><block var="y3"/><block var="y1"/></block></block></block><block s="doSetVar"><l>curx1</l><block var="x1"/></block><block s="doSetVar"><l>curx2</l><block var="x1"/></block><block s="doSetVar"><l>y</l><block var="y1"/></block><custom-block s="Set color RGB %s %s %s"><block var="r"/><block var="g"/><block var="b"/></custom-block><block s="doUntil"><block s="reportVariadicOr"><list><block s="reportVariadicGreaterThan"><list><block var="y"/><block var="y2"/></list></block><block s="reportVariadicGreaterThan"><list><block var="y"/><l>180</l></list></block></list></block><script><block s="doSetVar"><l>v1</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="curx1"/><block var="y"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></block><block s="doSetVar"><l>v2</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="curx2"/><block var="y"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="v1"/></custom-block><custom-block s="vec2.y %l"><block var="v1"/></custom-block></block><block s="down"></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="v2"/></custom-block><custom-block s="vec2.y %l"><block var="v2"/></custom-block></block><block s="up"></block><block s="doChangeVar"><l>curx1</l><block s="reportVariadicProduct"><list><block var="invslope1"/><block var="RES"/></list></block></block><block s="doChangeVar"><l>curx2</l><block s="reportVariadicProduct"><list><block var="invslope2"/><block var="RES"/></list></block></block><block s="doChangeVar"><l>y</l><block var="RES"/></block><block s="doIf"><block s="reportVariadicLessThan"><list><block var="curx1"/><l>-240</l></list></block><script><block s="doIf"><block s="reportVariadicLessThan"><list><block var="curx2"/><l>-240</l></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script><list></list></block></script><list></list></block></script></block></script></block></script></block-definition><block-definition s="Draw flat top tri %&apos;x1&apos; %&apos;y1&apos; %&apos;x2&apos; %&apos;y2&apos; %&apos;x3&apos; %&apos;y3&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; scanline angle %&apos;scanAngle&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><custom-block s="Set color RGB %s %s %s"><block var="r"/><block var="g"/><block var="b"/></custom-block><block s="doDeclareVariables"><list><l>invslope1</l><l>invslope2</l><l>curx1</l><l>curx2</l><l>y</l><l>v1</l><l>v2</l></list></block><block s="doSetVar"><l>invslope1</l><block s="reportQuotient"><block s="reportDifference"><block var="x3"/><block var="x1"/></block><block s="reportDifference"><block var="y3"/><block var="y1"/></block></block></block><block s="doSetVar"><l>invslope2</l><block s="reportQuotient"><block s="reportDifference"><block var="x3"/><block var="x2"/></block><block s="reportDifference"><block var="y3"/><block var="y2"/></block></block></block><block s="doSetVar"><l>curx1</l><block var="x3"/></block><block s="doSetVar"><l>curx2</l><block var="x3"/></block><block s="doSetVar"><l>y</l><block var="y3"/></block><custom-block s="Set color RGB %s %s %s"><block var="r"/><block var="g"/><block var="b"/></custom-block><block s="doUntil"><block s="reportVariadicOr"><list><block s="reportNot"><block s="reportVariadicGreaterThan"><list><block var="y"/><block var="y1"/></list></block></block><block s="reportVariadicLessThan"><list><block var="y"/><l>-180</l></list></block></list></block><script><block s="doSetVar"><l>v1</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="curx1"/><block var="y"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>117.14402341657143</l></variable><variable name="y"><l>-49.26177242266286</l></variable></variables></custom-block></block><block s="doSetVar"><l>v2</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="curx2"/><block var="y"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>143.07127206007806</l></variable><variable name="y"><l>-75.18902106616946</l></variable></variables></custom-block></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="v1"/></custom-block><custom-block s="vec2.y %l"><block var="v1"/></custom-block></block><block s="down"></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="v2"/></custom-block><custom-block s="vec2.y %l"><block var="v2"/></custom-block></block><block s="up"></block><block s="doChangeVar"><l>curx1</l><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>neg</option></l><block var="invslope1"/></block><block var="RES"/></list></block></block><block s="doChangeVar"><l>curx2</l><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>neg</option></l><block var="invslope2"/></block><block var="RES"/></list></block></block><block s="doChangeVar"><l>y</l><block s="reportMonadic"><l><option>neg</option></l><block var="RES"/></block></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="curx1"/><l>240</l></list></block><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block var="curx2"/><l>240</l></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script><list></list></block></script><list></list></block></script></block></script></block></script><scripts><script x="394.6416015625" y="579.3333333333326"><block s="reportMonadic"><l><option>abs</option></l><l>10</l></block></script><script x="473.6416015625" y="635.1666666666661"><block s="reportMonadic"><l><option>abs</option></l><l>10</l></block></script></scripts></block-definition><block-definition s="Draw 2D triangle %&apos;x1&apos; %&apos;y1&apos; %&apos;x2&apos; %&apos;y2&apos; %&apos;x3&apos; %&apos;y3&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; Scanline Angle %&apos;scanAngle&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>vlist x</l><l>vlist y</l><l>temp</l><l>alpha</l><l>vi</l><l>v1</l><l>v2</l><l>v3</l></list></block><block s="doSetVar"><l>vlist x</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>vlist y</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>v1</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="x1"/><block var="y1"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></block><block s="doSetVar"><l>v2</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="x2"/><block var="y2"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></block><block s="doSetVar"><l>v3</l><custom-block s="rotate vec2 %l by %s"><custom-block s="make vec2 %s %s"><block var="x3"/><block var="y3"/></custom-block><block var="scanAngle"/><variables><variable name="x"><l>0</l></variable><variable name="y"><l>0</l></variable></variables></custom-block></block><block s="doAddToList"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2.x %l"><block var="v1"/></custom-block><block var="RES"/></block></block><block var="RES"/></list></block><block var="vlist x"/></block><block s="doAddToList"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2.y %l"><block var="v1"/></custom-block><block var="RES"/></block></block><block var="RES"/></list></block><block var="vlist y"/></block><block s="doAddToList"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2.x %l"><block var="v2"/></custom-block><block var="RES"/></block></block><block var="RES"/></list></block><block var="vlist x"/></block><block s="doAddToList"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2.y %l"><block var="v2"/></custom-block><block var="RES"/></block></block><block var="RES"/></list></block><block var="vlist y"/></block><block s="doAddToList"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2.x %l"><block var="v3"/></custom-block><block var="RES"/></block></block><block var="RES"/></list></block><block var="vlist x"/></block><block s="doAddToList"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><custom-block s="vec2.y %l"><block var="v3"/></custom-block><block var="RES"/></block></block><block var="RES"/></list></block><block var="vlist y"/></block><custom-block s="Sort Dictionary %l %l"><block var="vlist x"/><block var="vlist y"/></custom-block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="scanAngle"/><block s="reportListItem"><l>3</l><block var="vlist y"/></block></list></block><script><custom-block s="Draw flat bottom tri %s %s %s %s %s %s color %s %s %s scanline angle %s" scope="local"><block s="reportListItem"><l>1</l><block var="vlist x"/></block><block s="reportListItem"><l>1</l><block var="vlist y"/></block><block s="reportListItem"><l>2</l><block var="vlist x"/></block><block s="reportListItem"><l>2</l><block var="vlist y"/></block><block s="reportListItem"><l>3</l><block var="vlist x"/></block><block s="reportListItem"><l>3</l><block var="vlist y"/></block><block var="r"/><block var="g"/><block var="b"/><block s="reportMonadic"><l><option>neg</option></l><block var="scanAngle"/></block></custom-block></script><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="vlist y"/></block><block s="reportListItem"><l>2</l><block var="vlist y"/></block></list></block><script><custom-block s="Draw flat top tri %s %s %s %s %s %s color %s %s %s scanline angle %s" scope="local"><block s="reportListItem"><l>1</l><block var="vlist x"/></block><block s="reportListItem"><l>1</l><block var="vlist y"/></block><block s="reportListItem"><l>2</l><block var="vlist x"/></block><block s="reportListItem"><l>2</l><block var="vlist y"/></block><block s="reportListItem"><l>3</l><block var="vlist x"/></block><block s="reportListItem"><l>3</l><block var="vlist y"/></block><block var="r"/><block var="g"/><block var="b"/><block s="reportMonadic"><l><option>neg</option></l><block var="scanAngle"/></block></custom-block></script><script><block s="doSetVar"><l>alpha</l><block s="reportQuotient"><block s="reportDifference"><block s="reportListItem"><l>2</l><block var="vlist y"/></block><block s="reportListItem"><l>1</l><block var="vlist y"/></block></block><block s="reportDifference"><block s="reportListItem"><l>3</l><block var="vlist y"/></block><block s="reportListItem"><l>1</l><block var="vlist y"/></block></block></block></block><block s="doSetVar"><l>vi</l><custom-block s="make vec2 %s %s"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportListItem"><l>1</l><block var="vlist x"/></block><block s="reportVariadicProduct"><list><block s="reportDifference"><block s="reportListItem"><l>3</l><block var="vlist x"/></block><block s="reportListItem"><l>1</l><block var="vlist x"/></block></block><block var="alpha"/></list></block></list></block><block var="RES"/></block></block><block var="RES"/></list></block><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportListItem"><l>1</l><block var="vlist y"/></block><block s="reportVariadicProduct"><list><block s="reportDifference"><block s="reportListItem"><l>3</l><block var="vlist y"/></block><block s="reportListItem"><l>1</l><block var="vlist y"/></block></block><block var="alpha"/></list></block></list></block><block var="RES"/></block></block><block var="RES"/></list></block></custom-block></block><custom-block s="Draw flat bottom tri %s %s %s %s %s %s color %s %s %s scanline angle %s" scope="local"><block s="reportListItem"><l>1</l><block var="vlist x"/></block><block s="reportListItem"><l>1</l><block var="vlist y"/></block><block s="reportListItem"><l>2</l><block var="vlist x"/></block><block s="reportListItem"><l>2</l><block var="vlist y"/></block><custom-block s="vec2.x %l"><block var="vi"/></custom-block><custom-block s="vec2.y %l"><block var="vi"/></custom-block><block var="r"/><block var="g"/><block var="b"/><block s="reportMonadic"><l><option>neg</option></l><block var="scanAngle"/></block></custom-block><custom-block s="Draw flat top tri %s %s %s %s %s %s color %s %s %s scanline angle %s" scope="local"><block s="reportListItem"><l>2</l><block var="vlist x"/></block><block s="reportListItem"><l>2</l><block var="vlist y"/></block><custom-block s="vec2.x %l"><block var="vi"/></custom-block><custom-block s="vec2.y %l"><block var="vi"/></custom-block><block s="reportListItem"><l>3</l><block var="vlist x"/></block><block s="reportListItem"><l>3</l><block var="vlist y"/></block><block var="r"/><block var="g"/><block var="b"/><block s="reportMonadic"><l><option>neg</option></l><block var="scanAngle"/></block></custom-block></script></block></script></block></script></block></script><scripts><script x="605" y="254.5"><custom-block s="Clamp %s min %s max %s"><l></l><l>-240</l><l>240</l></custom-block></script><script x="545" y="319.33333333333314"><custom-block s="Clamp %s min %s max %s"><l></l><l>-180</l><l>180</l></custom-block></script><script x="604" y="360.16666666666663"><custom-block s="Clamp %s min %s max %s"><l></l><l>-240</l><l>240</l></custom-block></script><script x="531" y="430.99999999999966"><custom-block s="Clamp %s min %s max %s"><l></l><l>-180</l><l>180</l></custom-block></script><script x="518" y="517.8333333333325"><custom-block s="Clamp %s min %s max %s"><l></l><l>-240</l><l>240</l></custom-block></script><script x="506.0000000000001" y="578.6666666666655"><custom-block s="Clamp %s min %s max %s"><l></l><l>-180</l><l>180</l></custom-block></script></scripts></block-definition><block-definition s="Render 3D triangle %&apos;x1&apos; %&apos;y1&apos; %&apos;z1&apos; %&apos;x2&apos; %&apos;y2&apos; %&apos;z2&apos; %&apos;x3&apos; %&apos;y3&apos; %&apos;z3&apos; color %&apos;r&apos; %&apos;g&apos; %&apos;b&apos; Scanline angle %&apos;ScanAngle&apos;" type="command" category="Graphics"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>v1</l><l>v2</l><l>v3</l><l>screen point 1</l><l>screen point 2</l><l>screen point 3</l></list></block><block s="doSetVar"><l>v1</l><custom-block s="Calculate 3D vertex %s %s %s"><block var="x1"/><block var="y1"/><block var="z1"/><variables><variable name="vert"><list struct="atomic" id="6537">112.16589431131544,83.94305526638593,635.4077425250581</list></variable></variables></custom-block></block><block s="doSetVar"><l>v2</l><custom-block s="Calculate 3D vertex %s %s %s"><block var="x2"/><block var="y2"/><block var="z2"/><variables><variable name="vert"><list struct="atomic" id="6545">162.16589431131544,65.93737466719037,550.6976754364307</list></variable></variables></custom-block></block><block s="doSetVar"><l>v3</l><custom-block s="Calculate 3D vertex %s %s %s"><block var="x3"/><block var="y3"/><block var="z3"/><variables><variable name="vert"><list struct="atomic" id="6553">25.563353932871536,73.54747072549793,586.5003624883677</list></variable></variables></custom-block></block><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicGreaterThan"><list><custom-block s="vec3.z %l"><block var="v1"/></custom-block><block var="far clip"/></list></block><block s="reportVariadicOr"><list><block s="reportVariadicGreaterThan"><list><custom-block s="vec3.z %l"><block var="v3"/></custom-block><block var="far clip"/></list></block><block s="reportVariadicGreaterThan"><list><custom-block s="vec3.z %l"><block var="v2"/></custom-block><block var="far clip"/></list></block></list></block></list></block><script><block s="doStopThis"><l><option>this block</option></l></block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportVariadicOr"><list><block s="reportVariadicLessThan"><list><custom-block s="vec3.z %l"><block var="v1"/></custom-block><block var="near clip"/></list></block><block s="reportVariadicOr"><list><block s="reportVariadicLessThan"><list><custom-block s="vec3.z %l"><block var="v3"/></custom-block><block var="near clip"/></list></block><block s="reportVariadicLessThan"><list><custom-block s="vec3.z %l"><block var="v2"/></custom-block><block var="near clip"/></list></block></list></block></list></block></block><script><block s="doSetVar"><l>screen point 1</l><custom-block s="3D %s %s %s fov %s to 2D"><custom-block s="vec3.x %l"><block var="v1"/></custom-block><custom-block s="vec3.y %l"><block var="v1"/></custom-block><custom-block s="vec3.z %l"><block var="v1"/></custom-block><block var="fov"/></custom-block></block><block s="doSetVar"><l>screen point 2</l><custom-block s="3D %s %s %s fov %s to 2D"><custom-block s="vec3.x %l"><block var="v2"/></custom-block><custom-block s="vec3.y %l"><block var="v2"/></custom-block><custom-block s="vec3.z %l"><block var="v2"/></custom-block><block var="fov"/></custom-block></block><block s="doSetVar"><l>screen point 3</l><custom-block s="3D %s %s %s fov %s to 2D"><custom-block s="vec3.x %l"><block var="v3"/></custom-block><custom-block s="vec3.y %l"><block var="v3"/></custom-block><custom-block s="vec3.z %l"><block var="v3"/></custom-block><block var="fov"/></custom-block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="Debug View"/><l>wireframe</l></list></block><script><custom-block s="Set color RGB %s %s %s"><block var="r"/><block var="g"/><block var="b"/></custom-block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="screen point 1"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 1"/></custom-block></block><block s="down"></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="screen point 2"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 2"/></custom-block></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="screen point 3"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 3"/></custom-block></block><block s="gotoXY"><custom-block s="vec2.x %l"><block var="screen point 1"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 1"/></custom-block></block><block s="up"></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="Debug View"/><l>lit</l></list></block><script><custom-block s="Draw 2D triangle %s %s %s %s %s %s color %s %s %s Scanline Angle %s" scope="local"><custom-block s="vec2.x %l"><block var="screen point 1"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 1"/></custom-block><custom-block s="vec2.x %l"><block var="screen point 2"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 2"/></custom-block><custom-block s="vec2.x %l"><block var="screen point 3"/></custom-block><custom-block s="vec2.y %l"><block var="screen point 3"/></custom-block><block var="r"/><block var="g"/><block var="b"/><block var="ScanAngle"/></custom-block></script><list></list></block></script><list></list></block></script></block-definition></blocks><variables></variables><scripts><script x="15.929921874999707" y="10"><block s="receiveGo"></block><block s="doSetVar"><l>Level Data</l><l></l></block><block s="doSetVar"><l>imported file</l><l>0</l></block><block s="doSetVar"><l>RES</l><l>8</l></block><block s="setEffect"><l><option>ghost</option></l><l>100</l></block></script><script x="135.46496093749994" y="195.33333333333331"><block s="receiveKey"><l><option>space</option></l><list></list></block><block s="doDeclareVariables"><list><l>x</l><l>z</l></list></block><custom-block s="Set res to %s"><l>1</l></custom-block><block s="clear"></block><block s="doWarp"><script><block s="doSetVar"><l>x</l><l>0</l></block><block s="doSetVar"><l>z</l><l>0</l></block><block s="doRepeat"><l>5</l><script><block s="doRepeat"><l>5</l><script><custom-block s="Render 3D triangle %s %s %s %s %s %s %s %s %s color %s %s %s Scanline angle %s" scope="local"><block var="x"/><l>0</l><block var="z"/><block s="reportVariadicSum"><list><l>100</l><block var="x"/></list></block><l>0</l><block var="z"/><block var="x"/><l>0</l><block s="reportVariadicSum"><list><l>100</l><block var="z"/></list></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><l>0</l></custom-block><custom-block s="Render 3D triangle %s %s %s %s %s %s %s %s %s color %s %s %s Scanline angle %s" scope="local"><block s="reportVariadicSum"><list><l>100</l><block var="x"/></list></block><l>0</l><block s="reportVariadicSum"><list><l>100</l><block var="z"/></list></block><block s="reportVariadicSum"><list><l>100</l><block var="x"/></list></block><l>0</l><block var="z"/><block var="x"/><l>0</l><block s="reportVariadicSum"><list><l>100</l><block var="z"/></list></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><block s="reportRandom"><l>0</l><l>255</l></block><l>0</l></custom-block><block s="doChangeVar"><l>x</l><l>100</l></block></script></block><block s="doSetVar"><l>x</l><l>0</l></block><block s="doChangeVar"><l>z</l><l>100</l></block></script></block></script></block></script></scripts></sprite><watcher scope="Renderer" s="xPosition" style="normal" x="10" y="109.00002199999994" color="74,108,212" hidden="true"/><watcher scope="Renderer" s="yPosition" style="normal" x="10" y="130.00002399999994" color="74,108,212" hidden="true"/><watcher var="Player rot" style="normal" x="151" y="222.00001999999995" color="243,118,29" hidden="true"/><watcher var="Player pos" style="normal" x="0" y="1.0000179999999546" color="243,118,29" extX="80" extY="70"/><watcher var="fov" style="normal" x="10" y="151.00002599999996" color="243,118,29" hidden="true"/><watcher var="near clip" style="normal" x="10" y="172.00002799999993" color="243,118,29" hidden="true"/><watcher var="Player speed" style="normal" x="10" y="193.00002999999992" color="243,118,29" hidden="true"/><watcher var="RES" style="normal" x="10" y="214.00003199999992" color="243,118,29" hidden="true"/><watcher var="Delta" style="normal" x="108" y="26.000033999999914" color="243,118,29" hidden="true"/><watcher var="tick30" style="normal" x="10" y="235.0000339999999" color="243,118,29" hidden="true"/><watcher scope="Stage" s="getTimer" style="normal" x="10" y="256.0000359999999" color="4,148,220" hidden="true"/><watcher var="imported file" style="normal" x="10" y="277.0000379999999" color="243,118,29" hidden="true"/><watcher var="Level Data" style="normal" x="-114" y="181.0000379999999" color="243,118,29" hidden="true"/><watcher var="far clip" style="normal" x="10" y="298.0000399999999" color="243,118,29" hidden="true"/><watcher var="Player rot sin" style="normal" x="10" y="319.0000419999999" color="243,118,29" hidden="true"/><watcher var="Player rot cos" style="normal" x="10" y="338.999998" color="243,118,29" hidden="true"/><watcher var="FPS" style="normal" x="-6" y="99.00003399999991" color="243,118,29"/><watcher var="Debug View" style="normal" x="4" y="122.999998" color="243,118,29"/></sprites></stage><variables><variable name="Player pos"><list struct="atomic" id="6901">83.37383539249434,50,2.7141037598765827</list></variable><variable name="Player rot"><list struct="atomic" id="6902">348,30,0</list></variable><variable name="fov"><l>180</l></variable><variable name="near clip"><l>0.005555555555555556</l></variable><variable name="Player speed"><l>6</l></variable><variable name="RES"><l>1</l></variable><variable name="FPS"><l>Infinity</l></variable><variable name="Delta"><l>0</l></variable><variable name="tick30"><l>23658</l></variable><variable name="Level Data"><l></l></variable><variable name="imported file"><l>0</l></variable><variable name="far clip"><l>500</l></variable><variable name="Player rot sin"><list struct="atomic" id="6903">-0.20791169081775987,0.49999999999999994,0</list></variable><variable name="Player rot cos"><list struct="atomic" id="6904">0.9781476007338056,0.8660254037844387,1</list></variable><variable name="Debug View"><l>lit</l></variable></variables></scene></scenes></project><media name="3D Engine" app="Snap! 9.0, https://snap.berkeley.edu" version="2"><costume name="Untitled" center-x="240" center-y="180" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADotJREFUeF7t1cEJADAMxLBk/6Fb6BD1R1ngQAS8M3PGESBAgAABAl8FVoC/ehsjQIAAAQJPQIA9AgECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBC5oYGgQUTbVPQAAAABJRU5ErkJggg==" mediaID="Stage_cst_Untitled"/><costume name="Render" center-x="238" center-y="180" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADotJREFUeF7t1cEJADAMxLBk/6Fb6BD1R1ngQAS8M3PGESBAgAABAl8FVoC/ehsjQIAAAQJPQIA9AgECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBC5oYGgQUTbVPQAAAABJRU5ErkJggg==" mediaID="Renderer_cst_Render"/></media></snapdata>